Beginning work on lore, see also the fiction archive.

This commit is contained in:
Simon Brooke 2023-06-18 11:28:37 +01:00
parent 1429340e4c
commit 2432178392
7 changed files with 127 additions and 4 deletions

1
.portal/vs-code.edn Normal file
View file

@ -0,0 +1 @@
{:host "localhost", :port 52447}

33
doc/API Spec.md Normal file
View file

@ -0,0 +1,33 @@
# API Spec
If the Gossip system is ever to be deployed in practice at all, it will need to be deployed as a library add-on to someone else's game, since in practice The Great Game will never be even nearly finished. The game engine already knows many of the things the Gossip system needs to know; that we need to define is an interface which allows Gossip, considered as a subsystem, to query the game engine.
My preference is still that Gossip should be written in a Lisp-like language - and, for now, in Clojure - simply because that is most comfortable to me. It needs bidirectional socket communication with the game engine, over which it sends either [extensible data notation](https://github.com/edn-format/edn) or [JavaScript Object Notation](https://www.json.org/json-en.html), with a preference for the former.
## Tracking what happens in the world
Existing game engines don't tend to track in convenient form things which have happened off-camera - indeed, mostly, things don't happen at all when the player isn't present. They don't even track much that happens when the player is present, and they usually track what they do track in fairly ad-hoc ways. So generally Gossip-as-library will have to maintain its own history of what has happened, and who knows what about what has happened; and will have to model the major life events of non-player characters happening off-camera (if this is done at all) itself.
## Interrogating lore
Many games have a great deal of lore and many lore texts. It's reasonable to expect each non-player character to know a certain amount of lore, certainly lore which is local to their home location, or relevant to their trade. In order to make that available to Gossip, you probably need to construct a searchable corpus of all the lore, which can be simply queried.
That obviously then needs to be filtered by what the respondent can be expected to know, but that's a problem Gossip has to handle anyway.
## Interrogating the map
### get-character-location *id*
Returns the player location in the world of the character with the specified id, as at minimum a three dimensional coordinate tuple, with heading; optionally with hierarchical region ids.
### get-potential-auditors *id*
### get-potential-auditors *id*, *volume*
Return an ordered list of ids of characters spatially close to the character with the specified id, ordered by their likelihood of being the character addressed (i.e. preferring characters in front of the character with the specified id to those off to the side or behind, on a sort of cardioid pattern). The set is bounded by the distance at which speech is deemed to be intelligible, which may be a constant, or maybe modified by some modelling of ambient noise, or the volume of the character's speech act.
### get-potentially-aware *id*
### get-potentially-aware *id*, *volume*
As above, but return a list of ids of characters within a distance in which speech may be heard but not intelligibly.

View file

@ -29,7 +29,7 @@ I want the player to be able to interact with non-player characters (and, indeed
and it must be pretty clear that the full range of potential responses is extremely large. Consequently, it's impossible that all non-player character speech acts can be voice acted; rather, this sort of generated speech must be synthesised. But a consequence of this is that the non-player character's facial animation during the conversation also cannot be motion captured from a human actor; rather, it, too, must be synthesized.
This doesn't mean that speech acts by non-player characters which make plot points or advance the narrative can't be voice acted, but it does mean that the voice acting must be consistent with the simulated voice used for that non-player character - which is to say, probably, that the non-player character must use a synthetic voice derived from the voice of that particular voice actor.
This doesn't mean that speech acts by non-player characters which make plot points or advance the narrative can't be voice acted, but it does mean that the voice acting must be consistent with the simulated voice used for that non-player character - which is to say, probably, that the non-player character must use a synthetic voice derived from the voice performance of that particular voice actor in that role.
## Dynamic game environment
@ -39,7 +39,9 @@ My vision for The Great Game is different. It is that the economy - and with it,
## Plot follows player
As Role Playing Games have moved towards open worlds - where the player's movement in the environment is relatively unconstrained - the clockwork has become strained. The player has to get to particular locations where particular events happen, and so the player has to be very heavily signposted. Another solution - which I'd like to explore - is 'plot follows character'. The player is free to wander at will in the world, and plot relevant events will happen on their path. And by that I don't mean that we associate a set of non-player characters which each quest - as current Role Playing Games do - and then uproot the whole set from wherever they normally live in the world and dumping down in the player's path; but rather, for each role in a quest or plot event, we define a set of characteristics required to fulfill that role, and then, when the player comes to a place where there are a set of characters who have those characteristics, the quest or plot event will happen.
As Role Playing Games have moved towards open worlds - where the player's movement in the environment is relatively unconstrained - the clockwork has become strained. The player has to get to particular locations where particular events happen, and so the player has to be very heavily signposted. Sometimes the mark you have to hit to trigger the next advance of the plot can be extremely awkward; [an example from Cyberpunk 2077](https://youtu.be/GEYkuctBUYE?t=2990) is finding the right spot, in the quest 'They Won't Go When I Go', to trigger the button which raises the cross.
Another solution - which I'd like to explore - is 'plot follows character'. The player is free to wander at will in the world, and plot relevant events will happen on their path. And by that I don't mean that we associate a set of non-player characters which each quest - as current Role Playing Games do - and then uproot the whole set from wherever they normally live in the world and dumping down in the player's path; but rather, for each role in a quest or plot event, we define a set of characteristics required to fulfill that role, and then, when the player comes to a place where there are a set of characters who have those characteristics, the quest or plot event will happen.
## Cut scenes, cinematics and rewarding the player

View file

@ -1,7 +1,11 @@
# Further Reading
# Further Reading (and watching)
Work by other people which is relevant to what I'm doing, and which I should study.
## Modelling the natural environment
1. [Synthetic Silviculture: Multi-scale Modeling of Plant Ecosystems](https://storage.googleapis.com/pirk.io/projects/synthetic_silviculture/index.html) -- see also [this video](https://youtu.be/8YOpFsZsR9w).
## Systemic games
1. [This video](https://youtu.be/SnpAAX9CkIc) is thought provoking with excellent examples.

23
doc/My-setting.md Normal file
View file

@ -0,0 +1,23 @@
# My setting for the Great Game
It should be evident that all the key ideas in The Great Game project would be applicable to games set in the historic past of our world, to games set in its present, or to games set in some imagined or forecast future; the ideas are intended to be, and I believe are, largely independent of setting.
Nevertheless I feel the need for a concrete setting to ground the development of ideas. I've chosen deliberately not to place that setting in the real world; although it's broadly based on cultures from the late bronze age/early iron age mediterrainian.
So, phase one of The Great Game takes place in the triangle between Hans'hua, Sinhua, and Tchahua — the territory covered in the narratives [Merchant](http://www.journeyman.cc/~simon/tmp/merchant.pdf). The narrative from Merchant will form the basis for characters within the game, who will broadly have the skills, objectives and interests that they do in the narrative, but the events of the narrative won't be canon, partly because actions by the player may intervene and partly because in a dynamic game actions won't play out the same every time anyway.
Similarly I'll probably include at least some characters from other unfinished narratives set in the same world. The events of the game happen after the events in [The Rite of Spring](https://www.journeyman.cc/~simon/bookshelf/hyper/mgi/), so some version of those events will be canon, but:
1. A revised version, because I'm now not at all happy with central themes in that plot;
2. The part of the world in which phase one happens is a long way from The Great Place, the player can't go there, and although the player may meet people who have been there and know the lore, it isn't particularly relevant to anything they will do.
All the lore in the [background documents](https://www.journeyman.cc/~simon/bookshelf/hyper/mgi/Background.html) is canon, however, unless explicitly revised.
The map of the Cities of the Coast is revised, however, and as that covers the area where the game is set, this will be covered below.
## Geography
The game area is on the southern coast of an island continent; the area is bounded
* on the north, by the steppe, which is inhabited by hostile tribes. Caravans do cross, but will refuse to take the player, and if the player seeks to cross alone they will be killed.
* on the east, by the mountains of the rim. There's no direct pass from the southern littoral through the rim, so the player can't go. However, this does imply that the cities of Koantuan, Huandun

View file

@ -0,0 +1,54 @@
# Things Voice Interaction Enables
## Organic quest routing
In a world in which you can talk to non-player characters, and in which non-player characters know the directions to things which are local to their homes (and some, travellers, will be able to give you routes to things further away), when you need to get to your next waypoint you can just ask for directions. That much is easy.
But something much richer occurred to me.
Suppose you're entering a village, and you meet a random character. That character knows any local quest giver, and what it is that quest giver needs and, indeed, they know this whether the quest is scripted or organic.
So the random character could say
> Hello, I'm Tobias, and that my mill over there. Who might you be, stranger?
At which point you can either tell him, or not. Suppose you tell him, he could say
> Oh! I've heard of you. It's said you're very handy with a sword.
And you can reply however you like, acknowledging, or being modest, or perhaps even denying (although from this line of dialogue if you deny he'll think you're being modest, for reasons see later). He can then say, taking our example from the 'abducted child' quest in [the Introduction](intro,html),
> Thing is, old granny Grizzel's granddaughter Esmerelda has been abducted by bandits, and we've done a whip-around for a reward for someone who can rescue the girl.
At which point you may reply that you'll do it, or be non-committal, or say you won't. If you say you will, he can say,
> Well, you should talk to granny Grizzel, she lives in the white house by the crossroads, half a mile that-a-way (pointing).
If you say you won't, he can say,
> It would be a virtuous act, the old lady is fair desperate. If you should change your mind, you should talk to her; she lives in the white house by the crossroads, half a mile that-a-way (pointing).
OK, but what if, in the game world, the player character is not good with a sword? Well, the 'abducted child' quest can be resolved by violence; but it can also be resolved by persuasion, or by sneakiness, or by bribery. So suppose the player isn't (in the game) good with a sword, but is good at negotiation. Then in the initial approach, Tobias could say
> Oh! I've heard of you. It's said you're very handy at persuasion... Thing is, old granny Grizzel's granddaughter Esmerelda has been abducted by bandits, and we've done a whip-around for a ransom, but she's lacking someone who can negotiate for her.
It's the same quest, and, whatever Tobias has said, the player can still use either violence or persuasion or trickery to complete the quest (and gain appropriate reputation thereby), but it's flexible enough to adapt to the player's in-game persona, and it means we can direct the player to quest-givers without having to stick a bloody great icon on the quest giver's head.
So, to repeat for clarity: the idea is, if there is a quest in the vicinity, whether organic or scripted, all the quest giver's neighbours know about it, and will bring it up in conversation, introducing it and directing the player to the quest giver. And I believe that this can be done reasonably naturally.
## Command in Battles
Player characters in role playing games are often narratively great heroic leaders -- see any of the Dragon Age games but particularly Inquisition for examples of this -- but when it comes to a pitched battle all they can do is follow a scripted battle plan and fight individual actions, because in current generation role-playing games there is no effective user interface to allow strategic and tactical control of a battle.
So how would a real-world, before modern communications technology, war leader command a battle? Why, by observing the battle and talking to people, and those are both things that in our game the player can do.
So, there are two stages to battle communication: the first is the council of war, before the battle, in which the battle plan is agreed. For the non-player characters to have any significant input into this, we'd need a really good knowledge base of appropriate battle strategies with heuristics for which plan fits which sort of geography and which sort of enemy, but that could be quite fun to develop; but in principle it's sufficient for the player character to be able to say to each of the divisional captains "I want you to do this," and for each captain to say first "yes, I understand" (or "please clarify"), and then "yes, I will do it" (or "yes, I will try").
No battle plan, of course, survives first contact with the enemy. It must be possible to update the plan during the battle, and messengers were used to carry new orders from the commander to subordinates. That, of course, we can also do.
So, ideally (and in describing this I'll try to give 'less than ideal' alternatives where I see them), you can gather your captains to a council of war, either by speaking to them directly or by sending messengers round. At the council of war, non-player-character captains can suggest possible battle plans drawn from a common knowledge base, but can have individual levels of boldness or caution. However, if you've been appointed battle leader, then provided they're individually still loyal to you then they will ultimately agree to what you order.
When battle is joined you can either join in the fighting in the front line in which case your strategic overview is going to be very limited and you'll just have to hope your initial plan was good enough; or else you can sit on a hilltop overlooking the battlefield with your trumpeter and your messengers, and send messages to control the fight, but not actually take part much yourself (unless everything really goes to shit and your position is overrun).
In real world battles orders were often misunderstood; I don't think I should do anything special to model that. But orders (other than trumpet calls) will necessarily take finite time, and if the battlefront is really messed up messengers may fail to get through.

View file

@ -11,3 +11,9 @@ Time has passed; events in the game world have moved on. You can talk to your sa
So who are the non-enemies? It depends on context. If you have a party, and some of that party survived the fight, it's your party. Otherwise, if you're in a populated place, it's locals. If it's on a road or other route, it's passing merchants. If you're in the wilderness, a hunting party. It's a bunch of non-hostiles who might reasonably be expected to be around: that's what matters. It's about not breaking immersion.
Obviously losing a fight must have weight, it must have meaning, it must have in-game consequences; otherwise it is meaningless.
## Injury
Similarly to death, injury must have meaning. Any injury takes time to recover from. It takes a certain amount of time if you're able to rest somewhere safe, and considerably longer if you're not. If you fight while injured, you'll have less strength, less stramina, and probably also less agility. Depending where you're injured, there will be certain things you cannot do. If you fight while injured, also, your recovery time will be extended, even if you take no further injury.
Some serious injuries will lead to permanent scarring, and permanent loss of agility; you'll be just slightly slower in fights.