Merging changes made on Mason over those made on Illuminator
Only file really affected is buildings/rectangular.clk
This commit is contained in:
commit
b9fe07042e
23 changed files with 468 additions and 26 deletions
55
doc/Canonical-dictionary.md
Normal file
55
doc/Canonical-dictionary.md
Normal file
|
|
@ -0,0 +1,55 @@
|
|||
# A Canonical dictionary for this documentation
|
||||
|
||||
Where a word is used in the documentation for The Great Game and its related projects, this file describes the canonical meaning of that word. This is because a lot of the concepts in play are messy and ambiguous, so that at times even I am confused by what I mean. The presence of this file is an acknowledment of this difficulty, and an implicit admission that not all the documentation is, at this stage anyway, consistent.
|
||||
|
||||
#### Actor
|
||||
|
||||
An `actor` is a thing which performs actions within the game world. Thus a tree is (almost certainly) not an actor, and things like sheep and rabbits that run about are probably not actors, but an animal which may pro-actively interact with the player character (such as a predator, or a beast of burden, or even a prey species which may flee) is an actor. In [god mode](#God_mode), if implemented, the player can inhabit any actor within the game world.
|
||||
|
||||
#### Agent
|
||||
|
||||
`Agent` is probably just a synonym for `actor`. If it is different in any way, that way has not yet been determined.
|
||||
|
||||
#### Gossip
|
||||
|
||||
A `gossip` is an `actor` who exchanges news with other `actors`, even when the player character is not nearby. Thus `gossips` are the mechanism by which news propagates through the game world, and also the mechanism by which information degrades. Broadly:
|
||||
|
||||
1. `innkeepers` (and possibly some others) are `gossips` who do not move; rather, they gather information from gossips who do move, and all `non-player characters` local to the are deemed to know everything that their local `innkeeper` knows;
|
||||
2. `merchants` (and possibly some others) are `gossips` who do move from place to place, and thus transfer news.
|
||||
|
||||
See [the spread of knowledge in a large game world](The-spread-of-knowledge-in-large-game.html).
|
||||
|
||||
#### Heightmap
|
||||
|
||||
A `heightmap` is a raster image of the world, such that the intensity in which an area is coloured represents the value of some variable, by default height, of that area.
|
||||
|
||||
#### Holding
|
||||
|
||||
A `holding` is a polygon 'owned' by an `actor` on which are built appropriate building units representing the `actors` craft and status.
|
||||
|
||||
#### Location
|
||||
|
||||
A `location` value is a sequence comprising at most the x/y coordinate location and the ids of the settlement and region (possibly hierarchically) that contain the location. If the x/y is not local to the home of the receiving agent, they won't remember it and won't pass it on; if any of the ids are not interesting, they won't be passed on. So location information will degrade progressively as the item is passed along.
|
||||
|
||||
It is assumed that the `:home` of a character is a location in this sense.
|
||||
|
||||
**Examples**
|
||||
|
||||
1. [{:x 5445678 :y 9684351}]
|
||||
2. [{:x 5445678 :y 9684351} :karalin-palace :hanshua]
|
||||
|
||||
#### Merchant
|
||||
|
||||
A `merchant` is an `actor` and `gossip` who trades goods, and incidentally conveys news, between `markets`.
|
||||
|
||||
#### Non-player character
|
||||
|
||||
A `non-player character` is, for our purposes, an `actor` capable of engaging in conversation with the `player character`. Note, however, that, from a software point of view, the `player character` is just a special case of a `non-player character`.
|
||||
|
||||
#### Player character
|
||||
|
||||
The `player character` is the unique `actor` within the game currently controlled and inhabited by the player.
|
||||
|
||||
#### Route
|
||||
|
||||
A `route` is a pre-prepared path through the game world that an `actor` may take. Most `actors` are not constrained to follow `routes`, but in general `routes` have lower traversal cost than other terrain.
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
# Gossip, scripted plot, and Johnny Silverhand
|
||||
|
||||
I've been writing literally for years -- since [[Voice acting considered harmful]] in 2015 -- about game worlds in which the player speaks to non-player characters just by speaking the words they choose in their normal voice, and the non-player character replies using a pipeline that goes, essentially,
|
||||
I've been writing literally for years -- since [Voice acting considered harmful](Voice-acting-considered-harmful.html) in 2015 -- about game worlds in which the player speaks to non-player characters just by speaking the words they choose in their normal voice, and the non-player character replies using a pipeline that goes, essentially,
|
||||
|
||||
1. Alexa/Siri style speech interpretation;
|
||||
2. A decision on whether to co-operate based on the particular NPC's general demeanor and particular attitude to the player;
|
||||
|
|
|
|||
|
|
@ -12,14 +12,14 @@ The structure of a modern Role Playing Came revolves around 'quests': tasks that
|
|||
|
||||
'Gather quests' are more frequently referred to in the literature as 'fetch quests', and 'kill quests' are simply a specialised form of fetch quest where the item to be fetched is a trophy of the kill. And the trophy could be just the knowledge that the kill has happened. A delivery quest is a sort of reverse fetch quest: instead of going to some location or NPC and getting a specific item to return to the quest giver, the player is tasked to take a specific item from the quest giver to some location or NPC.
|
||||
|
||||
Note, however, that if we consider a delivery quest to have four locations, where some of these locations may be conincident, then a delivery quest and a fetch quest become the same thing. Thus
|
||||
Note, however, that if we consider a delivery quest to have four locations, where some of these locations may be coincident, then a delivery quest and a fetch quest become the same thing. Thus
|
||||
|
||||
1. The location of the quest giver at the beginning of the quest;
|
||||
2. The location from which the quest object must be collected;
|
||||
3. The location to which the quest object must be delivered;
|
||||
4. The location of the quest giver at the end of the quest.
|
||||
|
||||
This characterisation assumes that at the end of each quest, the player must rendezvous with the quest giver at the end of the quest, either to report completion or to collect a reward. Obviously, there could be some quests where this fourth location is not required, because there is no need to report back (for example, if the quest giver was dying/has died) and no reward to be collected.
|
||||
This characterisation assumes that at the end of each quest, the player must rendezvous with the quest giver, either to report completion or to collect a reward. Obviously, there could be some quests where this fourth location is not required, because there is no need to report back (for example, if the quest giver was dying/has died) and no reward to be collected.
|
||||
|
||||
Note that a location is not necessarily a fixed x/y location on the map; in a kill quest, for example, location 2 is the current location of the target, and moves when the target moves; location 3 and 4 are both normally the current location of the quest giver, and move when the quest giver moves.
|
||||
|
||||
|
|
@ -43,11 +43,11 @@ Given that quests are as simple as this, it's obvious that narrative sophisticat
|
|||
|
||||
But, if we're thinking of a game with much more intelligent non-player characters with much more conversational repertoir, as I am, can satisfying quests emerge organically? In space trading games such as [Elite](https://www.telegraph.co.uk/games/11051122/Elite-the-game-that-changed-the-world.html), a primary activity is moving goods from markets with surplus (and thus low prices) to markets with shortage (and thus high prices). This is, in effect, a game made up of deliver quests - but rather than deliver quests which are scripted, they are deliver quests which arise organically out of the structure of the game world.
|
||||
|
||||
I already have working code for non-player character merchants, who move goods from city to city based on market information available to them. For player characters to join in this trading is an organic activity emerging from the structure of the world, which provides an activity. But moving merchants provides a market opportunity for bandits, who can intercept and steal cargoes, and so for mercenaries, who can protect cargoes from bandits, and so on. And because I have an architecture that allows non-player characters to fill economic niches, there will be non-player characters in all these niches.
|
||||
I already have working code for non-player character merchants, who move goods from city to city based on market information available to them. For player characters to join in this trading is an organic activity emerging from the structure of the world. But moving merchants provides a market opportunity for bandits, who can intercept and steal cargoes, and so for mercenaries, who can protect cargoes from bandits, and so on. And because I have an architecture that allows non-player characters to change occupation to fill economic niches, there will be non-player characters in all these niches.
|
||||
|
||||
Where a non-player character can act, so can a player character: when a (non-player character) merchant seeks to hire a caravan guard and a player character responds, that's an organic escort quest.
|
||||
|
||||
The key idea behind organic quests is that the circumstance and requirments for quests emerges as an emergent behaviour out of the mechanics of the game world. A non-player character doesn't know that there is a player character who is different from them; rather, when a non-player character needs something they can't readily achieve for themselves, they will ask other characters to help, and that may include the player character.
|
||||
The key idea behind organic quests is that the circumstance and requirements for quests emerge as an emergent behaviour out of the mechanics of the game world. A non-player character doesn't know that there is a player character who is different from them; rather, when a non-player character needs something they can't readily achieve for themselves, they will ask other characters to help, and that may include the player character.
|
||||
|
||||
This means, of course, that characters need a goal-seeking planning algorithm to decide their actions, with one option in any plan being 'ask for help'. Thus, 'asking for help' becomes a mechanism within the game, a normal behaviour. Ideally non-player characters will keep track of quite complex webs of loyalty and of obligation - debts of honour, duties of hospitality, collective loyalties. So that, if you do a favour for some character in the world, that character's tribe, friends, obligation circle, whatever, are now more likely to do favours for you.
|
||||
|
||||
|
|
@ -59,4 +59,6 @@ So quests can emerge organically from the mechanics of the world and be richly v
|
|||
|
||||
## Stuff to consider
|
||||
|
||||
The games [Middle Earth: Shadow of Mordor](https://en.wikipedia.org/wiki/Middle-earth:_Shadow_of_Mordor), and [Middle Earth: Shadow of War](https://en.wikipedia.org/wiki/Middle-earth:_Shadow_of_War) have a procedural story system called [Nemesis](https://youtu.be/Lm_AzK27mZY), which is worth a look.
|
||||
The games [Middle Earth: Shadow of Mordor](https://en.wikipedia.org/wiki/Middle-earth:_Shadow_of_Mordor), and [Middle Earth: Shadow of War](https://en.wikipedia.org/wiki/Middle-earth:_Shadow_of_War) have a procedural story system called [Nemesis](https://youtu.be/Lm_AzK27mZY), which is worth a look.
|
||||
|
||||
There's an interesting [critique of Red Dead Redemption 2](https://www.youtube.com/watch?v=MvJPKOLDSos&feature=emb_logo) which is relevant to what I'm saying here.
|
||||
28
doc/Roadmap.md
Normal file
28
doc/Roadmap.md
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
# Roadmap
|
||||
|
||||
This document outlines a plan to move forward from where I am in June 2021.
|
||||
|
||||
# JMonkeyEngine
|
||||
|
||||
[JMonkeyEngine](https://jmonkeyengine.org/) is not, at this time, an AAA game engine. But at the same time I'm never, really, going to build an AAA game. It is a working game engine which can display characters on screen in scenery and have them move around, and, actually, they can be fairly sophisticated. It will be resaonably easy to integrate Clojure code with JMonkeyEngine - easier than it would be to integrate either Clojure or Common Lisp with [Unreal Engine](https://www.unrealengine.com/) or [Unity 3D](https://unity.com/). As a significant added bonus, JMonkeyEngine is open source.
|
||||
|
||||
Consequently I plan to stop agonising about what game engine to use, and seriously focus on getting something working in JMonkeyEngine.
|
||||
|
||||
# Not Reinventing Wheels
|
||||
|
||||
JMonkeyEngine already has working code for walking animated characters, which is entirely adequate to proof-of-concept what I want to do. Rather than try to implement them myself, I just intend to use existing JMonkeyEngine code as far as possible.
|
||||
|
||||
# The 1Km World
|
||||
|
||||
I propose to build a 1Km square world, containing one settlement, as a proof of concept for
|
||||
|
||||
1. Procedural (genetic) buildings;
|
||||
2. Procedural settlement planning;
|
||||
3. Procedural characters, probably based on [MakeHuman 'Mass Produce' plugin](https://youtu.be/jRHnJX-TdT4), using walk animation based on [TestWalkingChar](https://github.com/jMonkeyEngine/jmonkeyengine/blob/master/jme3-examples/src/main/java/jme3test/bullet/TestWalkingChar.java);
|
||||
4. Characters with their own hierarchy of needs, and their own means of planning to fulfil these;
|
||||
5. Characters with individualised knowledge about the world;
|
||||
6. Characters who can parse typed questions, and produce either a textual or audio response;
|
||||
7. Characters with procedurally generated accents (very stretch goal)!
|
||||
8. Characters who can listen to spoken questions, and produce audio responses.
|
||||
|
||||
At that stage, I have a technology demonstrator that will be interesting. It still leaves the big procedural world builder still to do, but it would be enough technology to get other people interested in the project.
|
||||
|
|
@ -5,9 +5,18 @@
|
|||

|
||||
|
||||
Long, long, time ago, I can still remember when... we played (and wrote) adventure games where the user typed at a command line, and the system printed back at them. A Read-Eval-Print loop in the classic Lisp sense, and I wrote my adventure games in Lisp. I used the same opportunistic parser whether the developer was building the game
|
||||
Create a new room north of here called dungeon-3 the player was playing the game
|
||||
Pick up the rusty sword and go north or the player was talking to a non-player character
|
||||
Say to the wizard 'can you tell me the way to the castle' Of course, the parser didn't 'understand' English. It worked on trees of words, in which terminal nodes were actions and branching nodes were key words, and it had the property that any word it didn't recognise at that point in sentence was a noise word and could be ignored. A few special hacks (such as 'the', 'a', or 'an' was an indicator that what came next was probably a noun phrase, and thus that if there was more than one sword in the player's immediate environment the one that was wanted was the one tagged with the adjective 'rusty'), and you ended up with a parser that most of the time convincingly interpreted most of what the player threw at it.
|
||||
|
||||
> Create a new room north of here called dungeon-3
|
||||
|
||||
the player was playing the game
|
||||
|
||||
> Pick up the rusty sword and go north
|
||||
|
||||
or the player was talking to a non-player character
|
||||
|
||||
> Say to the wizard 'can you tell me the way to the castle'
|
||||
|
||||
Of course, the parser didn't 'understand' English. It worked on trees of words, in which terminal nodes were actions and branching nodes were key words, and it had the property that any word it didn't recognise at that point in sentence was a noise word and could be ignored. A few special hacks (such as 'the', 'a', or 'an' was an indicator that what came next was probably a noun phrase, and thus that if there was more than one sword in the player's immediate environment the one that was wanted was the one tagged with the adjective 'rusty'), and you ended up with a parser that most of the time convincingly interpreted most of what the player threw at it.
|
||||
|
||||
Text adventures fell into desuetude partly because they weren't graphic, but mainly because people didn't find typing natural, or became dissatisfied with the repertoire of their parsers. Trying to find exactly the right combination tokens to persuade the game to carry out some simple action is not 'fun', it's just frustrating, and it turned people off. Which is a shame because just at the time when people were abandoning text adventures we were beginning to have command parsers which were actually pretty good. Mine, I think, were good - you could have a pretty natural conversation with them, and in 'building' mode, when it hit a 'sorry I don't understand' point, it allowed you to input a path of keywords and a Lisp function so that in future it would understand.
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue