diff --git a/.gitignore b/.gitignore index 0ee530d..b9ce762 100644 --- a/.gitignore +++ b/.gitignore @@ -50,3 +50,5 @@ docs/cloverage/codecov.json docs/cloverage/coverage.xml src/cc/journeyman/the_great_game/cloverage.clj + +.portal/ diff --git a/.portal/vs-code.edn b/.portal/vs-code.edn deleted file mode 100644 index 5753e10..0000000 --- a/.portal/vs-code.edn +++ /dev/null @@ -1 +0,0 @@ -{:host "localhost", :port 52447} \ No newline at end of file diff --git a/doc/Canonical-dictionary.md b/doc/Canonical-dictionary.md index 68f516b..87a13d6 100644 --- a/doc/Canonical-dictionary.md +++ b/doc/Canonical-dictionary.md @@ -52,4 +52,4 @@ The `player character` is the unique `actor` within the game currently controlle #### 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. \ No newline at end of file +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. diff --git a/doc/Dynamic-consequences.md b/doc/Dynamic-consequences.md index ad4a920..aff032c 100644 --- a/doc/Dynamic-consequences.md +++ b/doc/Dynamic-consequences.md @@ -27,7 +27,7 @@ I want the player to be able to interact with non-player characters (and, indeed 4. The particular non-player character's attitude towards the player; 5. The particular non-player character's speech idiosyncracies, dialect, and voice -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. +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](https://youtu.be/fa3_Mfqu8KA). 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. @@ -56,4 +56,4 @@ Each of these, obviously, make the task of authoring an animation harder. The ge Essentially the gamble here is that players will find the much richer conversations, and consequent emergent gameplay, possible with non-player charcaters who have dynamic knowledge about their world sufficiently engaging to compensate for a less compelling cinematic experience. I believe that they would; but really the only way to find out would be to try. -Interestingly, an [early preview](https://youtu.be/VwwZx5t5MIc?t=327) of CD PRoject Red's not-yet-complete [Cyberpunk 2077]() suggests that there will be very, very few cutscenes, suggesting that these very experienced storytellers don't feel they need cutscenes either to tell their story or maintain player engagement. (Later) It has to be said other commentators who have also played the Cyberpunk 2077 preview say that there are **a lot** of cutscenes, one of them describing the prologue as 'about half cutscenes' - so this impression I formed may be wrong). +Interestingly, an [early preview](https://youtu.be/VwwZx5t5MIc?t=327) of CD PRoject Red's not-yet-complete [Cyberpunk 2077](https://www.cyberpunk.net/us/en/cyberpunk-2077) suggests that there will be very, very few cutscenes, suggesting that these very experienced storytellers don't feel they need cutscenes either to tell their story or maintain player engagement. diff --git a/doc/Further-reading.md b/doc/Further-reading.md index b34df55..753bcc1 100644 --- a/doc/Further-reading.md +++ b/doc/Further-reading.md @@ -8,4 +8,4 @@ Work by other people which is relevant to what I'm doing, and which I should stu ## Systemic games -1. [This video](https://youtu.be/SnpAAX9CkIc) is thought provoking with excellent examples. \ No newline at end of file +1. [This video](https://youtu.be/SnpAAX9CkIc) is thought provoking with excellent examples. diff --git a/doc/Game_Play.md b/doc/Game_Play.md index ec9b948..58c10c6 100644 --- a/doc/Game_Play.md +++ b/doc/Game_Play.md @@ -16,11 +16,11 @@ The principles of game play which I'm looking for are a reaction against all I s 6. Dumb and dumber: non-player characters, even important ones, have extremely limited vocal repertoire. -Of these, the last two, I think, are key: they are the root cause of the other problems. In fact, to take it further, the real key is the last. We talk a lot about 'Game AI', but really there's nothing remotely approaching artificial intelligence ins modern games. Non-player characters do not think; they do not learn; they do not reason; they do not know. They speak only from the script. And they speak only from the script because of the fetish for voice acting. +Of these, the last two, I think, are key: they are the root cause of the other problems. In fact, to take it further, the real key is the last. We talk a lot about 'Game AI', but really there's nothing remotely approaching artificial intelligence in modern games. Non-player characters do not think; they do not learn; they do not reason; they do not know. They speak only from the script. And they speak only from the script because of the fetish for voice acting. ## Death to Dumb-Dumb -As I've argued [elsewhere](), [repeatedly](), we can now generate a wide variety of naturalistic speaking voices, and have them narrate text. Now of course there's great deal of information conveyed in human vocal communication in addition to the words – of which emotion is only an example, although an important one. Generating voices with the right tone, the right emphasis, for different situations may be harder than I anticipate; there may be an '[uncanny valley](Uncanny_dialogue)' in which generated speech just sounds uncomfortably off. +As I've argued [elsewhere](Voice-acting-considered-harmful), [repeatedly](Selecting Character), we can now generate a wide variety of naturalistic speaking voices, and have them narrate text. Now of course there's great deal of information conveyed in human vocal communication in addition to the words – of which emotion is only an example, although an important one. Generating voices with the right tone, the right emphasis, for different situations may be harder than I anticipate; there may be an '[uncanny valley](Uncanny_dialogue)' in which generated speech just sounds uncomfortably off. But it's a trade off. For possibly less than perfect vocal performance, you get the possibility of much richer repertoire. You get not only the possibility that non-player characters can talk about the weather, or gossip about their neighbours, or give you directions to local places of interest. You get the possibility that a non-player character's attitude to you may be conditioned by the fact that they've heard that you stole from their second cousin, or that you killed an outlaw who'd raped one of their friends. @@ -30,11 +30,11 @@ And with the emergence of intelligent behaviour comes the emergence of possibili And as now gameplay possibilities emerge, as new stories emerge organically out of the dynamically changing relationships between non-player characters in the world, the need for scripting decreases. -The problem with scripting is that it greatly limits player agency. The story can only have one of a few predetermined -- literally, scripted -- endings. This is clearly expressed in [a review of Red Dead Redemption 2](https://youtu.be/_JRikiQyzLA) which I recomment to you; but is equally true of almost all other games. +The problem with scripting is that it greatly limits player agency. The story can only have one of a few predetermined -- literally, scripted -- endings. This is clearly expressed in [a review of Red Dead Redemption 2](https://youtu.be/_JRikiQyzLA) which I recomment to you; but is equally true of almost all other games. Dynamic side quests have fallen into disfavour, because, when they've been tried in earlier generation games, there were too few possibilities, and they became repetitive and boring. I don't believe, with the wealth of compute resource we now have, this any longer need be the case. On the contrary, I think we can now dynamically generate a wide range of different, and differently complex, side quests. I think, in fact, that these can [emerge organically](Organic_Quests.md) from the structure of the game world. ## Death to Psycho-Killer -If the main way a player can interact with non-player characters is to kill them, and if the player doesn't have a systematic combat advantage over non-player characters, then it's going to be a short game. This is why players in many or most video games do start with a systematic combat advantage, and that combat advantage tends to increase over the course of the game as the player becomes more proficient with the combat system, and acquires better weapons, armour and combat buffs. This in turn means that to keep combat 'interesting', the game either has to through larger and larger armies of 'bad' non-player characters against the player – a fault seen at its worst in [Dragon Age 2](https://youtu.be/Sc8Bn8yqPYQ?t=3150). +If the main way a player can interact with non-player characters is to kill them, and if the player doesn't have a systematic combat advantage over non-player characters, then it's going to be a short game. This is why players in many or most video games do start with a systematic combat advantage, and that combat advantage tends to increase over the course of the game as the player becomes more proficient with the combat system, and acquires better weapons, armour and combat buffs. This in turn means that to keep combat 'interesting', the game has to through larger and larger armies of 'bad' non-player characters against the player – a fault seen at its worst in [Dragon Age 2](https://youtu.be/Sc8Bn8yqPYQ?t=3150). diff --git a/doc/My-setting.md b/doc/My-setting.md index be41b39..58326ac 100644 --- a/doc/My-setting.md +++ b/doc/My-setting.md @@ -361,3 +361,16 @@ If the game starts before the beginning of the Merchant's war (as I intend it to However the Andale campaign goes, Karae probably returns from Andale without Andarogan, but her knowledge of the pump system means that she can capture Hans'hua with a very small force indeed. If Karae succeeds in taking Hans'hua her interests would be in achieving a stable administration, expanding caravan traffic and supporting the friends she's made along the way. She may be able to recruit a new city guard from among the Western Tribes, but if not she can afford to employ mercenaries. Alliances with An, Gor, Tchahua and Sinhua (Xinta) are all possible. + +## Playable characters + +### Teravan of Sinhua, Millwright + +I was thinking it would be good to have a journeyman millwright as a playable character, because if our character gets to Hans'hua, a millwright will have the skills to work on the pump maintenance crews; and being on the pump maintenance crew + +a. is one of the few occupations from which an outsider can make a reasonable living in Hans'hua; +b. gives access to the pumps, which are key to any plot to take over Hans'hua. + +When Slechae signs up to join the militia, she meets a man who introduces himself as 'Teravan, Millwright'. So there's our first playable character, in the game already. + +His game start could be finishing his apprenticeship working on a windmill on the Bridgend side of the river when the Red Company take diff --git a/doc/Selecting Character.md b/doc/Selecting Character.md index 6a27896..5293f17 100644 --- a/doc/Selecting Character.md +++ b/doc/Selecting Character.md @@ -2,11 +2,11 @@ ## Background -Many computer role playing games, particularly older ones such as Neverwinter Nights, allow you to 'design' your player character from a fairly broad canvas. Race, class, attributes, gender and appearance are all selectable. +Many computer role playing games, particularly older ones such as Neverwinter Nights, allow you to 'design' your player character from a fairly broad canvas. Race, class, attributes, gender and appearance are all selectable. Choice has eroded over time. For example the Dragon Age series, where you can chose between three races, two genders, and a small number of classes. In the Mass Effect trilogy, you play as Shepard, who is human and essentially a Fighter, but can be either male or female and whose appearance you can customise. You can play as either lawful good or chaotic neutral. In Cyberpunk 2077, you play as V, who is human, either male or female, essentially a Fighter, and chaotic neutral. -In more recent games, there has been a trend towards more limited choice. In the games of The Witcher series, you get no choice at all, but play as Geralt of Rivia, who in the categorisation of Dungeons and Dragons, is a Fighter/Ranger, male, human, and somewhere between chaotic good and chaotic neutral depending on how you play him. In the Horizon series, you play as Aloy, again a Fighter/Ranger, female, human, and essentially chaotic good. +In more recent games, there has been a trend towards more limited choice. In the games of The Witcher series, you get no choice at all, but play as Geralt of Rivia, who in the categorisation of Dungeons and Dragons, is a Fighter/Ranger, male, human, and somewhere between chaotic good and chaotic neutral depending on how you play him. In the Horizon series, you play as Aloy, again a Fighter/Ranger, female, human, and essentially chaotic good. As I've argued elsewhere, part of the reason for limiting choice is voice acting. diff --git a/doc/Simulation-layers.md b/doc/Simulation-layers.md index ccd842b..250ac9f 100644 --- a/doc/Simulation-layers.md +++ b/doc/Simulation-layers.md @@ -14,7 +14,7 @@ This is mainly a land game. Broadly, caravans take the place of ships in Elite o ## A political simulation -Broadly, aristons claim territories in an essentiallu feudal arrangement, drive out outlaws, and levy taxes. +Broadly, aristons claim territories in an essentially feudal arrangement, drive out outlaws, and levy taxes. An ariston will be popular if their regime is stable, if taxes are low, justice is considered fair, oppression is low and depredations by outlaws are minimal. The more unpopular an ariston is, the more resistant the populace will be to paying their taxes, meaning the more military force needs to be diverted to tax collection and the greater the oppression. Taxes are required to pay soldiers and to maintain high roads, bridges, markets and other infrastructure. Merchants will prefer to travel routes which are better policed and maintained, which means more merchants trading in your markets, which means more tax. diff --git a/doc/Things Voice Interaction Enables.md b/doc/Things Voice Interaction Enables.md index 8f432fc..412e8e3 100644 --- a/doc/Things Voice Interaction Enables.md +++ b/doc/Things Voice Interaction Enables.md @@ -16,7 +16,7 @@ At which point you can either tell him, or not. Suppose you tell him, he could s > 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), +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. @@ -38,7 +38,7 @@ So, to repeat for clarity: the idea is, if there is a quest in the vicinity, whe ## 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. +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. diff --git a/doc/intro.md b/doc/intro.md index 3ae3526..aaad3ca 100644 --- a/doc/intro.md +++ b/doc/intro.md @@ -177,7 +177,7 @@ easy: 2. **Master**: what is the sum of (or average of) the esteem held for this agent by other agents of the same craft? 3. **Explorer**: (e.g.) what is the sum of the distance between the most northerly and most southerly, and the most easterly and most westerly, locations this agent has visited? 4. **Climber**: how many 'promotions' has this agent had in the game? -6. **Conqueror**: how many total vassales, recursively, has this agent? +5. **Conqueror**: how many total vassals, recursively, has this agent? 6. **Citizen**: really, really tricky. Probably what is the average esteem for this agent among all agents within a specified radius? - although this will score more highly for agents who have taken part in notable events, and what I'm really thinking of for my ideal 'good citizen' is someone who really hasn't. So each agent is assigned - by the dreaded random number generator - one top diff --git a/doc/sexual-dimorphism.md b/doc/sexual-dimorphism.md index 724864e..92cd4e7 100644 --- a/doc/sexual-dimorphism.md +++ b/doc/sexual-dimorphism.md @@ -42,4 +42,3 @@ Sex, done right, is an extremely pleasant pastime. Sex can also be used to creat For women, sex with other women carries with it no risk of pregnancy, so can be enjoyed or used for any of these purposes in very much the same way as it can by men; in other words, particularly for women, homosexual sex can be more lighthearted and carefree than heterosexual sex. To what extend our notions of homosexuality and heterosexuality are cultural I simply don't know. But because no children will result, a woman can afford to be more promiscuous with other women than she can with men. -## diff --git a/project.clj b/project.clj index e30e410..da10f2a 100644 --- a/project.clj +++ b/project.clj @@ -12,7 +12,7 @@ :source-uri "https://github.com/simon-brooke/the-great-game/blob/master/{filepath}#L{line}"} :cucumber-feature-paths ["test/features/"] :dependencies [;;[codox "0.10.7-cloverage"] - [com.taoensso/timbre "5.1.2"] + [com.taoensso/timbre "6.1.0"] [environ "1.2.0"] [jme-clj "0.1.13"] ;; [jme3-core "3.4.0-stable"] @@ -21,10 +21,11 @@ [mw-engine "0.1.6-SNAPSHOT"] [org.apache.commons/commons-math3 "3.6.1"] ;; for mersenne-twister implementation [org.clojure/algo.generic "0.1.3"] - [org.clojure/clojure "1.10.3"] + [org.clojure/clojure "1.11.1"] [org.clojure/math.numeric-tower "0.0.5"] - [org.clojure/tools.namespace "1.1.1"] - [org.clojure/tools.reader "1.3.6"]] + [org.clojure/tools.namespace "1.4.4"] + [org.clojure/tools.reader "1.3.6"] + [org.clojurenlp/core "3.7.0"]] :description "Prototype code towards the great game I've been writing about for ten years, and know I will never finish." :license {:name "GNU General Public License,version 2.0 or (at your option) any later version" :url "https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html"} diff --git a/src/cc/journeyman/the_great_game/lore/digester.clj b/src/cc/journeyman/the_great_game/lore/digester.clj new file mode 100644 index 0000000..bef25d1 --- /dev/null +++ b/src/cc/journeyman/the_great_game/lore/digester.clj @@ -0,0 +1,2 @@ +(ns cc.journeyman.the-great-game.lore.digester + ) \ No newline at end of file