Merge branch 'develop' of github.com:simon-brooke/the-great-game into develop
This commit is contained in:
commit
7d6b1b628f
2
.gitignore
vendored
2
.gitignore
vendored
|
@ -51,4 +51,6 @@ docs/cloverage/coverage.xml
|
|||
|
||||
src/cc/journeyman/the_great_game/cloverage.clj
|
||||
|
||||
.DS_Store
|
||||
|
||||
.portal/
|
||||
|
|
7
doc/Game-engine-integration.md
Normal file
7
doc/Game-engine-integration.md
Normal file
|
@ -0,0 +1,7 @@
|
|||
# Game-engine integration
|
||||
|
||||
To build a game using these ideas we need a lot of things that are well understood and already implemented: rendering a world, moving models of characters in a world, and so on. This collection of technologies which allow us to realise an interactive realisation of a world is typically called a game engine.
|
||||
|
||||
It's my intention that the bits that I add to the mix should be open source in the hard sense of that phrase, fully free software released under GPL. They cannot therfore be directly linked to a proprietary game engine.
|
||||
|
||||
But the current state of play is that the best and easiest to work with game engines are not open source; and while I could build a demo game using, for example, the [Godot engine](https://godotengine.org/) or [jMonkeyEngine](https://jmonkeyengine.org/) the result wouldn't be as compelling and *I believe* the effort would be more considerable than if I use [Unreal Engine](https://www.unrealengine.com/en-US), which is my current plan.
|
55
doc/MVP-Roadmap.md
Normal file
55
doc/MVP-Roadmap.md
Normal file
|
@ -0,0 +1,55 @@
|
|||
# Minimum Viable Product, and a road map
|
||||
|
||||
Right, I'm bogged down thinking about the immensity of what I want to build, so I'm achieving nothing. So the first thing I need to state is what the Minimum Viable Product is, and the second is to outline a rough road map which takes us forwards a few steps from the MVP.
|
||||
|
||||
The core idea here is to have a game world in which you can just say anything you like to game characters, and they can say sensible things back.
|
||||
|
||||
But actually, I know that speech to text can be reasonably effectively done; and I believe with a slightly lower degree of confidence that text to convincing speech can also be done.
|
||||
|
||||
I also know that the movement of a character around a convincing three dimensional representation of a world can be done, but that a great deal of effort is needed to build that world.
|
||||
|
||||
The minimum viable product does not need to demonstrate features which people have reasonable confidence can be done. What I need to demonstrate is the things which people haven't seen done, or haven't seen done well.
|
||||
|
||||
## Prototype one: the minimum viable product
|
||||
|
||||
The minimum viable product can have just a text adventure style interface:
|
||||
|
||||
> You are in the market square. It is mid morning. To the north is the guild hall; to the east there are market stalls; to the south is the residence; to the west is the bridge gate.
|
||||
|
||||
> There is a merchant here; there is a guardsman here.
|
||||
|
||||
To which the user can type (for example)
|
||||
|
||||
> Say to the guardsman, "Can you direct me to Master Dalwhiel's house?"
|
||||
|
||||
Within that interface, you should be able to interact with characters who:
|
||||
|
||||
1. have different levels of knowledge of the world, partly driven by their age, trade and personal history;
|
||||
2. move about and exchange gossip, even when the player is not present to see/hear this;
|
||||
3. have different attitudes towards the player and other characters, which will be modified by what they learn in gossip;
|
||||
4. have their own hierarchies of needs, which they make plans to satisfy;
|
||||
5. have homes and trades;
|
||||
6. will respond to speech addressed to them by the player depending on their attitude to the player, how busy they are and their knowledge of the world; and
|
||||
7. as a stretch goal, will have different dialects in which they will express their responses to the player.
|
||||
|
||||
There should be one or two multiple decision point quests in this world which can be resolved by talking to characters.
|
||||
|
||||
## Prototype two: adding organic quests
|
||||
|
||||
Extends prototype one only by adding [organic quests](Organic_Quests).
|
||||
|
||||
## Prototype three: voice interaction
|
||||
|
||||
Extends prototype two by adding speech to text, so that the player can directly talk (via a microphone) to characters, and text to speech, so that the system can voice the characters' responses.
|
||||
|
||||
Different characters should have different voices.
|
||||
|
||||
## Prototype four: performative speech
|
||||
|
||||
This one is hard because I'm not absolutely sure how I can do it, but I need characters' voices to convey emotion; the player needs to know from their voice whether they are angry, or frightened, or impatient, or bored.
|
||||
|
||||
## Prototype five traversible world
|
||||
|
||||
Now, a small section of a three dimensional open world, with at this stage simple block buildings that the player cannot enter, within which the characters act out their lives.
|
||||
|
||||
Stretch goal, [JALI](https://www.youtube.com/watch?v=uFIxiz0jwRE)-like lip sync.
|
|
@ -4,7 +4,7 @@
|
|||
|
||||
The Great Game exists as a project on two levels. One one level, it's a framework for building algorithms to build much more vibrant, and thus enjoyable game worlds; at another level, it's about building a particular world, in which I want to tell stories.
|
||||
|
||||
The world in which I want to tell stories is a world which is based roughly on late bronze age to medieval Europe. It's a world in which the region known as 'The Coast' - the southern litoral of the continent - had been a mostly-peaceful matrideic dispersed agrarian tribal society, which had been invaded some hundreds of years past by a warrior tribe with substntially better military technology.
|
||||
The world in which I want to tell stories is a world which is based roughly on late bronze age to medieval Europe. It's a world in which the region known as 'The Coast' -- the southern littoral of the continent -- had been a mostly-peaceful matrideic dispersed agrarian tribal society, which had been invaded some hundreds of years past by a warrior tribe with substantially better military technology.
|
||||
|
||||
These warrior tribesmen have settled down as local tyrants or robber barons, parasitising on the indigenous communities, and have evolved into an aristocratic ('Ariston') class. In the meantime, a mercantile class has grown up and established important long distance overland trade routes; and significant towns (called 'cities', but of only at most a few tens of thousand inhabitants) have grown up around markets.
|
||||
|
||||
|
@ -12,7 +12,7 @@ These mercantile cities have been under the governance of powerful aristons know
|
|||
|
||||
In the very earliest days of the warrior invasion, the warriors themselves fought against the indigenous peoples, who had very limited military equipment and tactics. Later, as they settled into Aristons, they fought by leading feudal levies of partially-trained peasants. Over the past hundred years or so, mercenary companies have emerged of specialist, trained warriors, and because these have more fighting experience (and often better equipment) they tend to beat feudal levies. These mercenary companies are base loosely on the condottierri of fourteenth century Italy.
|
||||
|
||||
So more and more, tyrranoi, rather than leading their own feudal levies, instead tax their peasantry mercantile class more and hire condottierri to fight their wars.
|
||||
So more and more, tyrranoi, rather than leading their own feudal levies, instead tax their peasantry and mercantile class more and hire condottierri to fight their wars.
|
||||
|
||||
Mercenary companies evolve out of feudal levies, and in the period of The Great Game, are mostly owned and led by aristons who employ their soldiers by paying them a wage.
|
||||
|
||||
|
@ -24,4 +24,4 @@ One of the themes of the stories I want to tell is that this more democratic str
|
|||
|
||||
## Modelling democracy
|
||||
|
||||
If each individual character has a hierachy of needs, and plans actions based on that heirarchy of needs, then they have the mechanism in place to choose which of two options better conforms to their hierarchy of needs.
|
||||
If each individual character has a hierarchy of needs, and plans actions based on that hierarchy of needs, then they have the mechanism in place to choose which of two options better conforms to their hierarchy of needs.
|
||||
|
|
|
@ -70,6 +70,23 @@
|
|||
|
||||
It's assumed that a journeyman scholar, presented with the opportunity, would prefer to become an apprentice magus than a master scholar.
|
||||
|
||||
### Related crafts
|
||||
|
||||
There are groups of crafts which should probably be seen as related crafts, where apprenticeship in one should serve as qualification to serve as journeyman in another. For example, there is a family of woodworking crafts, whose base is probably `Joiner`.
|
||||
|
||||
Crafts within this family include
|
||||
|
||||
* Boatwright
|
||||
* Cabinetmaker
|
||||
* Cartwright
|
||||
* Cooper
|
||||
* Lutanist
|
||||
* Military Artificer
|
||||
* Millwright
|
||||
* Turner
|
||||
|
||||
So although I think these are separate crafts, all are Joiners; all can undertake construction joinery work; and a journeyman who has served as apprentice to any can serve as journeyman to any other. Since journeymen will typically serve under more than one master before settling down, it will be possible for one person to have served under masters in two different related trades and therefore be qualified to set up as a master of either.
|
||||
|
||||
A journeyman settles and becomes a master when he finds a location with at least the solo/min number of appropriate customer type who are not serviced by another master craftsman of the same craft; he also (obviously) needs to find enough free land to set up his dwelling. The radius within which his serviced customers must live may be a fixed 10Km or it may be variable dependent on craft. If there are unserviced customers within his service radius, the master craftsman may take on apprentices and journeymen to service the additional customers up to a fixed limit – perhaps a maximum of four of each, perhaps variable by craft. If the number of customers falls, the master craftsman will first dismiss journeymen, and only in desperate circumstances dismiss apprentices. Every apprentice becomes a journeyman after three years service.
|
||||
|
||||
The list of crafts given here is illustrative, not necessarily exhaustive.
|
||||
|
|
|
@ -10,13 +10,13 @@ Suppose you're entering a village, and you meet a random character. That charact
|
|||
|
||||
So the random character could say
|
||||
|
||||
> Hello, I'm Tobias, and that's my mill over there. Who might you be, stranger?
|
||||
> 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),
|
||||
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.
|
||||
|
||||
|
|
1
doc/genetic-buildings.md
Symbolic link
1
doc/genetic-buildings.md
Symbolic link
|
@ -0,0 +1 @@
|
|||
workspace/blogiv/content/md/posts/2013-07-04-genetic-buildings.md
|
17
project.clj
17
project.clj
|
@ -11,8 +11,7 @@
|
|||
:output-path "docs/codox"
|
||||
: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 "6.1.0"]
|
||||
:dependencies [[com.taoensso/timbre "6.5.0"]
|
||||
[environ "1.2.0"]
|
||||
[jme-clj "0.1.13"]
|
||||
;; [jme3-core "3.4.0-stable"]
|
||||
|
@ -20,16 +19,16 @@
|
|||
[me.raynes/fs "1.4.6"]
|
||||
[mw-engine "0.3.0-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/math.numeric-tower "0.0.4"]
|
||||
[org.clojure/tools.namespace "1.0.0"]
|
||||
[org.clojure/tools.reader "1.3.5"]
|
||||
[org.clojurenlp/core "3.7.0"]]
|
||||
[org.clojure/algo.generic "1.0.0"]
|
||||
[org.clojure/clojure "1.11.2"]
|
||||
[org.clojure/math.numeric-tower "0.1.0"]
|
||||
[org.clojure/tools.namespace "1.5.0"]
|
||||
[org.clojure/tools.reader "1.4.1"]]
|
||||
: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"}
|
||||
:plugins [[lein-cloverage "1.2.2"]
|
||||
:plugins [[lein-adl "0.1.7"]
|
||||
[lein-cloverage "1.2.2"]
|
||||
[lein-codox "0.10.7-cloverage"]
|
||||
[lein-cucumber "1.0.2"]
|
||||
[org.clojars.benfb/lein-gorilla "0.7.0"]
|
||||
|
|
0
resources/data/crafts.edn
Normal file
0
resources/data/crafts.edn
Normal file
77
the-great-game.adl.xml
Normal file
77
the-great-game.adl.xml
Normal file
|
@ -0,0 +1,77 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- DOCTYPE application PUBLIC "-//JOURNEYMAN//DTD ADL 1.4.1//EN"
|
||||
"http://www.journeyman.cc/adl/stable/adl/schemas/adl-1.4.1.dtd" -->
|
||||
<application xmlns="http://bowyer.journeyman.cc/adl/1.4.1/"
|
||||
xmlns:html="http://www.w3.org/1999/xhtml"
|
||||
xmlns:adl="http://www.journeyman.cc/adl/1.4.1/" name="youyesyet" version="0.1.1">
|
||||
<documentation>
|
||||
At this stage, primarily a data-driven lore repository.
|
||||
|
||||
At some future stage, perhaps a specification for the game's internal state.
|
||||
</documentation>
|
||||
<group name="public">
|
||||
<documentation>All users</documentation>
|
||||
</group>
|
||||
<entity table="objects" name="object">
|
||||
<documentation>Physical opjects in the game world; it's probable that
|
||||
properties like 'mesh' and 'skin' will end up here.</documentation>
|
||||
<key>
|
||||
<property required="true" type="integer" name="id" column="id" immutable="true" distinct="system">
|
||||
<documentation>Note that this key is special, as for every instance of
|
||||
a game object there will be an object record, and thus, for example,
|
||||
every character will have exactly one object record associated with
|
||||
it; thus, for example, the key value in the character table will be
|
||||
the key value of the associated object record.</documentation>
|
||||
<generator action="native"/>
|
||||
</property>
|
||||
</key>
|
||||
<property required="true" type="boolean" default="false" name="container"/>
|
||||
<property type="text" name="notes">
|
||||
<description>Working notes about this object</description>
|
||||
</property>
|
||||
<property required="true" type="real" name="x">
|
||||
<documentation>Easting from the origin, in metres.</documentation>
|
||||
</property>
|
||||
<property required="true" type="real" name="y">
|
||||
<documentation>Northing from the origin, in metres.</documentation>
|
||||
</property>
|
||||
<property required="true" type="real" name="z">
|
||||
<documentation>Altitude above the mean sea level, in metres.</documentation>
|
||||
</property>
|
||||
<property type="list" name="contents" entity="object">
|
||||
<documentation>Contents of this object, if it is a container.</documentation>
|
||||
</property>
|
||||
<property type="entity" name="containedin" entity="object"/>
|
||||
<!-- model? -->
|
||||
<!-- texture? -->
|
||||
</entity>
|
||||
<entity table="agent" name="agent">
|
||||
<documentation>An object with agency: a hierarchy of needs, a planning
|
||||
process, locomotion.</document>
|
||||
<key>
|
||||
<property type="entity" name="id" entity="object"/>
|
||||
</key>
|
||||
<property type="entity" entity="species" name="species"/>
|
||||
<property type="entity" entity="planner" name="planner">
|
||||
<documentation>
|
||||
The function used to plan the next action for this agent.
|
||||
</documentation>
|
||||
</property>
|
||||
</entity>
|
||||
<entity table="character" name="character">
|
||||
<documentation>A character with a repertoire: knowledge, dialect, voice,
|
||||
et cetera.</document>
|
||||
<key>
|
||||
<property type="entity" name="id" entity="object"/>
|
||||
</key>
|
||||
<property type="string" name="personal-name" size="80"/>
|
||||
<property type="entity" entity="trade" name="trade"/>
|
||||
<property type="entity" entity="rank" name="rank"/>
|
||||
<property type="entity" entity="clan" name="clan"/>
|
||||
<property type="entity" entity="character" name="father"/>
|
||||
<property type="entity" entity="character" name="mother"/>
|
||||
<property type="entity" entity="responder" name="responder"/>
|
||||
</entity>
|
||||
|
||||
</application>
|
||||
|
Loading…
Reference in a new issue