diff --git a/.gitignore b/.gitignore index a243293..1382a1a 100644 --- a/.gitignore +++ b/.gitignore @@ -59,4 +59,5 @@ src/cc/journeyman/the_great_game/cloverage.clj # probably ought to list them in the README files. resources/jme3/images/ resources/jme3/textures/ -resources/polyhaven/textures/ \ No newline at end of file +resources/polyhaven/textures/ +workspace.code-workspace diff --git a/doc/Biomes_and_ecology.md b/doc/Biomes_and_ecology.md deleted file mode 100644 index 2dd83d8..0000000 --- a/doc/Biomes_and_ecology.md +++ /dev/null @@ -1,130 +0,0 @@ -# Biomes and ecology (unfinished) -*The motivation for this document was to explain the mulberry trees in the Tcha valley, and think about why Tchahua is especially a centre for the silk trade* - -## Broader geography - -The broader geography of the world is not a matter for this document, but TODO: there isn't yet a document which usefully describes it, and there needs to be. - - -## Biomes relevant at this stage - -### 1. Steppe - -The centre of the continent is the steppe; it is generally too arid for forest growth, and is therefore scrub and grassland. There is one principal river system, which feeds into a marshland in the south, from which the water then goes underground beneath the limestone plateau to become the Tcha and Sind rivers. In late summer there's little water in the river, and few other waterholes. Antelope, camels, horses, goats, possibly sheep are native to the steppe, and there are probably something like leopards which predate on them, but I haven't fleshed it out. - -Big dragons don't hunt on the steppe because they can't take off from flat ground, but smaller dragons may do so. - -Settled by the steppe tribes, who are nomadic herders, extremely warlike but not technically highly developed. They are the game world's principle horse breeders. Basically in the game as I'm working on it at present, the player cannot go north across the steppe because the steppe tribes are too hostile. - -A single major road, the Caravan Road, runs north to south across the steppe. There were in the past fortified caravanserrais along the length of the road, established and protected by Hans'hua, but they have been progressively overrun and destroyed by the steppe tribes and are now ruinous. Only one remains: the North Inn, just below the northern slope of the plateau. There is some limited horticulture on land close to the South Inn, supplying markets in Hans'hua. - -### 2. Plateau - -The limestone plateau runs along the whole of the southern edge of the steppe, from the western massif to the rim of the crater which forms The Great Place. It is a landscape of clints and grykes, on which nothing grows, and on which there is no water. It is about four day's journey by fast horse from north to south. The caravan road crosses the plateau from the North Inn to another caravanserrai, the South Inn, located in the north end of the Tcha valley. Because of the dense chaotic pattern of clints and grykes and the lack of accessible water, it is effectively impossible to cross the plateau other than by the caravan road, or by another path to the extreme east of the plateau, where it abuts the mountains of the Rim. - -#### 2.1 Hans'hua - -There is one city, Hans'hua, on the caravan road about half way across the plateau, where wind-pumps lift water from the underground river. Apart from this one city, nothing lives on the plateau. Migrating birds cross it, and that is all. - -The city is small, walled, and run as an extreme neoliberal oligarchy; the city's main industry is maintaining the wind pumps, and its entire income is from tolls on caravans passing along the caravan road. This has been, and is still, extremely lucrative, but it is obvious both to the long distance merchants and to the oligarchs that the new ships are going to make the caravans too slow, too risky and too expensive to compete, and that as more ships are built, traffic on the caravan road will dwindle. - -### 3. Massif - -There's a granite intrusion which forms the entire western coast of the continent. It's geologically old and consequently the hills, though high, are rounded rather than jagged; at the southern end of the range (which is the only part that's in the least fleshed out yet) they're not snow covered in summer. As the prevailing winds are westerly, this massif intercepts most of the rain, which is why the steppe is arid. - -Consequently it's pretty thoroughly forested, and the southern parts of it are mainly broadleaf forests including high quality hardwoods and many fruiting trees. Understory typical of mediterranean littoral forests, about which I don't really know enough. - -Deer, cattle, pigs, wolves, leopards, badgers, squirrels… masses of birds of all appropriate types. - -Because it's an old granite intrusion, the soil in the valleys is largely clay. There are mineral rich veins with a considerable range of minerals, but, obviously, not all in the same place. - -Settled by the Western Clans, a negroid people living mainly in small isolated villages in the forest, with mostly limited agriculture. - -#### 3.1 Northern massif - -I haven't yet fleshed this out, but there are probably permanent snows and the forests are probably coniferous. It's my current working assumption that the new great ships are built from old growth conifers, taken from forests in the northern massif; but as I say this is not yet fleshed out. - -The northern culture have developed very high quality ceramics using clay from the massif, including stonewares and porcelaines. I think the same clays also exist in the south of the massif, but the technology for producing high quality ceramics does not exist there. The northerners are also making high quality steels from magnetite and haematite from the massif. Whether these ores exist in the south I don't yet know. - -#### 3.2 Dor - -The northernmost of the western clans, the Dor, live in the central massif north of Andale, but apart from the fact that they exist and they're there, I don't yet really know much. - -#### 3.3 Andale - -The river An rises in the east of the massif near the south-west corner of the steppe, west of where the village and market of Dawnhold now stand, and flows more or less due westward. There are two major drops in the river's course, the upper a day's travel east of Silverhold, which is an actual fall of at least six metres, and the lower at Anghold. Between Anghold and Silverhold the river is navigable by small shallow draught boats; west of Anghold it is navigable down to the sea at Anmouth. - -There are freshwater and migratory fish in the river, and fishing is a source of protein and livelihood the whole length of the valley. - -The valley is largely forested. Apart from wild animals, domestic cattle and pigs are herded in the forest. Trees include alder, almond, apple, apricot, ash, beech, birch, cherry, chestnut, hazel, holly, lime, maple, mulberry, oak, orange, pear, walnut, yew. - -##### 3.3.1 Dawnhold - -Dawnhold isn't strictly geographically in Andale — it's east of, on the steppe side of, the watershead, but it marks the eastern border of the lands settled by clan An. There's an annual market, a village, and a garrisoned fortification to deter raids by the steppe tribes. - -##### 3.3.2 Silverhold - -Small town serving the only significant silver mine in the world. A tributary flows in from the north here, but I know nothing about it yet. There is a major fortification/refinery/treasury. All around Silverhold, right up to the headwaters of the An and right down to Anghold, the valley is forested with only small clearings round villages, which are mainly close to the river. - -Many other metals — certainly inluding lead, tin, and small quantities of gold, probably not copper — come out of the mines at Silverhold. - -The An produce enough ferrous metals for their own tools and weapons, but their iron smelting technology is not advanced and they don't export iron or iron products. They produce eathernware ceramics for domestic consumption. They produce leather and linen, and textiles from nettle fibres. They produce timber, which is their principal building material, but they don't export it. In practice their major export is silver coinage. - -##### 3.3.3 Longwater - -Longwater is a long, narrow lake, like Loch Lomond, on a tributary which flows into the An from the south, joining upstream from Anghold. There is no major nucleated settlement on Longwater, but there are sufficient small villages and hamlets on its banks to form an identifiable settlement cluster. Small boats can make it downstream from Longwater from the An and back, probably with some degree of portage around rapids. There's a pass over from the south of the Longwater valley to Gor territory, but it's high, difficult, and not much used. The whole of the Longwater valley is broadleaf forest. - -##### 3.3.4 Anghold - -There's a small town, market and fortification — Anghold — on the south bank of the An, just above first cataract, where boats are portaged up from the lower river to the middle reach. Downstream from Anghold the river is wider, slower and more meandering, with marshy banks. The valley west of Anghold, especially on the southern side, is also more populated, with more of the forest cleared and more arable agriculture. - -##### 3.3.5 Anmouth - -The An meets the sea at Anmouth, where there is a deep harbour at a bend in the river just east of a long estuary, There is a bar, making it dangerous to enter the harbour in bad weather, and the whole estuary is pretty exposed to western storms, although there may be some islands providing some shelter for emergency anchorages — I don't have that level of detail yet. Certainly the big new ships do not yet call in here, but could. - -There are farming and sea-fishing villages down both sides of the estuary. There is no tradition of ship building, however. - -#### 3.4 Gor - -Clan Gor occupy the south-western peninsula of the continent, and the south slope of the massif, east almost as far as the Tcha valley. Their land is forested with a similar mix of trees to Andale. They have no major rivers, but several minor ones. They live mainly in coastal villages, and sea fishing is a major economic activity. They have no deep water ports. - -In addition they do mine iron, and they have exported swords, but the market for their swords is being undercut by better crucible steel swords from the north now being imported into the Cities of the Coast by the new ships. Similarly, the Gor used to export earthenware, but that too is now being undercut by stonewares and porcelaines from the north. - -Because of a history of being victims of raiding from the Cities of the Coast, the Gor maintain a fortified eastern border along the line of hills to the west of the Tcha valley. Nevertheless they have mostly good trading relationships with Tchahua. In particular they export large quantities of raw and spun silk, and some woven silk cloth, to Tchahua. - -I don't yet have nearly a clear enough picture of the organisation and layout of the Gor lands, but their major stronghold and administrative centre must be to the east. While they traditionally had the communist and democratic culture of the other Western Clans, one family have become dominant and have become effectively hereditary leaders, influenced by the cultures to their east. However the leading family do not self-identify as aristons. - -### 4. Coast - -"The Coast" is the name given to the southern littoral of the continent, west of the Great Place and east of the Massif. It's limestone, with deeply cut, steep sided valleys separated by high, arid uplands, with scrubby vegetation, grazed by domestic sheep and both domestic and wild goats. - -The native culture were peaceable, communistic agriculturalists, not greatly different from the Western Clans. However some several hundred years ago they were invaded by a warrior group from the steppe tribes, who established themselves as a military aristocracy — the Aristae — and started to build cities — and impose taxes onto the peasantry, forcing them into a more or less cash oriented economy. - -The valleys were once forested, but the central valleys, which were in any case rather dryer and where the Aristae first settled and established cities, are now mostly cleared, and are a mix of pastoral and arable, with considerable viticulture. - -#### 4.1 Tcha valley - -The Tcha is the westernmost — and largest — river of the coast. It emerges from under the plateau at a pool under the South Tower marking the southern limit of Hans'hua territory and runs south more or less along the divide between the granite to the west and the limestone to the east. It is still largely forested, partly because it is relatively recently occupied by the Aristae, but partly because of the growth of the silk industry. This has led to some forested areas, especially near the navigable reaches of the river, being converted into mulberry orchards. However, there's still a great deal of mixed forest, and the majority of mulberry leaves for feeding to silk worms are gathered from natural forest. - -A road branches off from the main Caravan Road at the South Inn and runs down the eastern side of the valley, to a ferry across the Sind river, where it joins the Tcha as a tributary, at the village helpfully known as Sind Ferry, and thence to Tchahua. - -Mulberries, by-products of the silk industry, are used in the production of brandy. Mulberry wine is produced in villages in the forest, and transported down river to a distillery at Sind Ferry, where it is distilled. Some mulberry wine may be sold in Tchahua for drinking as wine (and it is certainly drunk in the villages), but it is generally considered inferior to grape wine. - -There is some arable and mixed agriculture, mainly towards the southern end of the valley on the western (less steep) side, although this side is also largely forested. - -##### 4.1.1 Tchahua - -The city of Tchahua lies on the east bank of the river at the head of its estuary, and has deep water — the only really usable deep water port on the coast, being not only the largest river but also the least silted. Until quite recently it had been a small provincial silk weaving city, nominally independent but in fact paying tribute to both Sinhua to its east and the Gor to its west, in order to avoid being formally conquered by either. - -There's a multi-span bridge here — I think a pontoon bridge — of which the eastern most span is a drawbridge which can be lifted into a fortified gateway on the eastern (Tchahua) shore. There is a fishing industry, but as the eastern side - -Industries are silk weaving and dying, and fishing. Very recently, a new deep water quay has been constructed and the first large ships have begun to call. It is obvious that the city is going to become much more important as a strategic market and transport hub, but that has only just begun to have effect. - -### 4.2 Sind valley - -#### 4.2.1 Sinhua - - - - - diff --git a/doc/Canonical-dictionary.md b/doc/Canonical-dictionary.md index 681c67e..9d84640 100644 --- a/doc/Canonical-dictionary.md +++ b/doc/Canonical-dictionary.md @@ -25,11 +25,11 @@ A `heightmap` is a raster image of the world, such that the intensity in which a #### Holding -A `holding` is a polygon 'owned' by an `actor` on which are built appropriate building units representing the `actors` craft and status. +A `holding` is a polygon 'owned' by an `actor` on which are built appropriate building units representing the `actor`'s 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. +A `location` value is a sequence comprising at most the x/y or x/y/z coordinate location and the ids of the settlement and region (possibly hierarchically) that contain the location. If the :z coordinate is not supplied the terrain surface hieght at that x/y location will be assumed. 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. diff --git a/doc/Division_of_tasks_between_server_and_client.md b/doc/Division_of_tasks_between_server_and_client.md index fd0ce96..c88fb78 100644 --- a/doc/Division_of_tasks_between_server_and_client.md +++ b/doc/Division_of_tasks_between_server_and_client.md @@ -1,4 +1,4 @@ -# Division of tasks between server and client +# Division of tasks between server and client (unfinished) An alternative nomentclature I may use for this dichotomy would be _planner_ and _performer_; it would be the same dichotomy. 'Planner' and 'server' are synonyms; 'performer' and 'client' are synonyms. diff --git a/doc/Draft-algorithm-functional-physics-engine.md b/doc/Draft-algorithm-functional-physics-engine.md new file mode 100644 index 0000000..31e9cd1 --- /dev/null +++ b/doc/Draft-algorithm-functional-physics-engine.md @@ -0,0 +1,72 @@ +# Sketch for an algorithm for a pure-functional physics engine + +What a physics engine needs to do is, at each step + +1. Take a collection of bodies; +2. For every pair of bodies, compute the change in velocity of each consequent on their interaction; +3. For each body, merge the changes in velocity found in step two into one change in velocity; +4. For each body, update the position of the body. + +Now, in practice, for simulations in a terrestrial environment, the largest interaction any of the other bodies constantly has is that with the planet in the form of gravity; and, gravity of the planet is so much greater than that of any other body in the environment that the gravitational attraction of the other bodies to each other can be ignored; and finally, the difference in mass between the planet and any other of the bodies is such that changes to the velocity of the planet can effectively ignored. So we can modify that to + +1. Take a collection of bodies excepting the planet; +2. For each pair of bodies *including the planet*, compute as vectors changes in velocity consequent on collisions between them (but the change in velocity of the planet will always be deemed to be zero); +3. For each body, compute as a vector the change in velocity consequent on the gravitational attraction of the planet; +4. For each body, compute as a vector the change in velocity consequent on the friction of the medium through which it is moving; +5. For each body, merge the vectors computed above with the body's initial velocity to produce a new velocity vector. + +OK so far? + +So that looks something like + +```clojure +(require [clojure.math.combinatorics :refer [combinations]]) + +(defn physics-tick + "Compute the change of velocity to each of these `objects` in one tick." + [objects] + (pmap merge-vectors + (pmap apply-friction + (pmap apply-gravity + (merge-collisions + (remove nil? (pmap collide (combinations objects 2))) + objects + ) + ) + ) +) +``` +Where: + +`collide` is a function which takes two objects, and if those objects are not in collision at this physics step, returns nil; if they are in collision, returns a pair of two objects like those passed, except that each has a 3d vector object added to its `:deltas` property. + +Thus, `(pmap collide (combinations objects 2))` will return a flat list with potentially many copies of the same object, each with different deltas; but it will not contain any copies of any objects which weren't in collision at all. + +Consequently, `merge-collisions` must, for every key in the objects, collect each of the copies of that object from the collisions and from the original objects list, and, for each key, return one object identical to the original object except that its `:deltas` property is a concatentation of the `:deltas` properties of each of the copies: + +```clojure +(defn merge-collisions + [collision-pairs objects] + (pmap + #(assoc (first %) :deltas (apply concat (map :deltas %))) + (partition-by :id + (sort-by :id + (concat + (flatten collision-pairs) + objects))))) +``` + +`apply-gravity` is simply a function which returns an object like the object passed to it, but with a constant acceleration-under-gravity vector added to its `:deltas` property; + +`apply-friction` is a fairly simple function which computes a friction vector in the direction opposite to the current velocity object passed to it, and returns an object like the object passed but with that fricton vector added to its `:deltas` property; + +and finally, + +`merge-vectors` is a function which takes an object with a `:position`, a `:velocity`, and a (possibly empty) sequence of `:deltas`, computes a new `:velocity` vector produced by applying each of the deltas in turn to the velocity, and a new `:position` produced by adding that new `:velocity` (times the duration of the tick) to the old position. It returns an object like the object passed but with the new `:position` and `:velocity` values. I'm too tired to confidently state the maths of that now, but I'm confident it's simple. + +Which means, in fact, that the whole thing is simple (modulo the `collide` function, which I haven't even sketched above, and which is somewhat dependent on the models involved). + +Note that, however + +1. At this stage it considers only velocity deltas, not spin deltas; it ought to do that too, but, although that adds extra operations, it doesn't add complexity; and +2. This currently considers only rigid bodies. Soft bodies are a significantly more complex problem. \ No newline at end of file diff --git a/doc/Economy.md b/doc/Economy.md index f6d8dd9..1fb3af7 100644 --- a/doc/Economy.md +++ b/doc/Economy.md @@ -1,4 +1,4 @@ -# Game world economy +# Game world economy (unfinished) Broadly this essay extends ideas presented in [Populating a game world](Populating-a-game-world.html), q.v. diff --git a/doc/Game_Play.md b/doc/Game_Play.md index c3c6bac..334f0c5 100644 --- a/doc/Game_Play.md +++ b/doc/Game_Play.md @@ -1,4 +1,4 @@ -# Game Play +# Game Play (unfinished) The principles of game play which I'm looking for are a reaction against all I see as wrong in modern video games. So let's set out what these are: diff --git a/doc/Modelling_democracy_and_morale.md b/doc/Modelling_democracy_and_morale.md deleted file mode 100644 index df4c0ac..0000000 --- a/doc/Modelling_democracy_and_morale.md +++ /dev/null @@ -1,29 +0,0 @@ -# The Red Company: modelling democracy and morale (unfinished) - -## Background - -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 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. - -These mercantile cities have been under the governance of powerful aristons known as tyrranoi, and the cities under their tyrranoi have competed militarily as well as commercially for control of strategic features on trade routes, such as bridges, fords, oases, mountain passes, and so on. - -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 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. - -One company, the Red Company, has become essentially a workers' co-op, after its former ariston leader fled in the course of a battle which looked like an inevitable defeat (but which the company, without him, won). In this company, soldiers are paid a salary, probably lower than salaries in other companies, but also at the end of the year get a share in the profits. The soldiers are organised into squads of eight who elect their own sergeants; squads are organised into companies of eight squads, and the sergeants elect the captain; companies are organised into legions of eight companies, and the captains elect the captain-general. - -However, while in combat this represents a chain of command, out of combat it is much more a delegate structure; when making significant decisions, the captains general will consult with the captains who will consult with the sergeants who will consult with the soldiers. - -One of the themes of the stories I want to tell is that this more democratic structure contributes to higher morale and hence to greater military success. I could model this by just making membership of the Red Company a factor in the function which computes morale. However... - -## Modelling democracy - -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. - -This implies that soldiers are likely to vote for the people (or ideas presented by the people) they consider most competent and/or most trustworthy. Which comes back to modelling reputation; which comes back to the [gossip](the-great-game.gossip.gossip.html). \ No newline at end of file diff --git a/doc/Naming-of-characters.md b/doc/Naming-of-characters.md index 8ca8e80..e031691 100644 --- a/doc/Naming-of-characters.md +++ b/doc/Naming-of-characters.md @@ -1,5 +1,7 @@ # Naming of Characters +**See [`wherefore-art-thou`](https://github.com/simon-brooke/wherefore-art-thou)** + Generally speaking, in modern RPGs, every character with any impact on the plot has a distinct name. But if we are going to give all non-player characters sufficient agency to impact on the plot, then we must have a way of naming tens or hundreds of thousands of characters, and distinct names will become problematic (even if we're procedurally generating names, which we shall have to do. So this note is about how characters are named. diff --git a/doc/Not_my_problem.md b/doc/Not_my_problem.md index 5f3b6b7..d53e592 100644 --- a/doc/Not_my_problem.md +++ b/doc/Not_my_problem.md @@ -1,4 +1,4 @@ -# Not my problem +# Not my problem ## Introduction diff --git a/doc/Useful-software-libraries.md b/doc/Useful-software-libraries.md new file mode 100644 index 0000000..caf1b2e --- /dev/null +++ b/doc/Useful-software-libraries.md @@ -0,0 +1,16 @@ +# Useful software tools and libraries (open source) + +## Animation + +* [Papagayo](https://www.lostmarble.com/papagayo/) -- lipsync animator, not up to JALI standards, but not nothing! However, not apparently under active development, and in C++. + +## Procedural assets + +## Textures + +* [Poly Haven](https://polyhaven.com/) -- free textures, also HDRI lighting maps and some 3D models, although few look relevant. + +## Others + +* [Festival Speech Synthesis](https://www.cstr.ed.ac.uk/projects/festival/download.html) Text to speech library, in C++ but there's a Java transducer. +* [Mary TTS](https://github.com/marytts/marytts) Text to speech library, probably not as good as Festival diff --git a/docs/codox/Canonical-dictionary.html b/docs/codox/Canonical-dictionary.html index 5b34df6..f17bad2 100644 --- a/docs/codox/Canonical-dictionary.html +++ b/docs/codox/Canonical-dictionary.html @@ -16,9 +16,9 @@

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.

+

A holding is a polygon ‘owned’ by an actor on which are built appropriate building units representing the actor’s 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.

+

A location value is a sequence comprising at most the x/y or x/y/z coordinate location and the ids of the settlement and region (possibly hierarchically) that contain the location. If the :z coordinate is not supplied the terrain surface hieght at that x/y location will be assumed. 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

    diff --git a/docs/codox/Division_of_tasks_between_server_and_client.html b/docs/codox/Division_of_tasks_between_server_and_client.html index c2cbcdd..ffece50 100644 --- a/docs/codox/Division_of_tasks_between_server_and_client.html +++ b/docs/codox/Division_of_tasks_between_server_and_client.html @@ -1,6 +1,10 @@ +<<<<<<< HEAD Division of tasks between server and client

    Division of tasks between server and client

    +======= +Division of tasks between server and client (unfinished)

    Division of tasks between server and client (unfinished)

    +>>>>>>> develop

    An alternative nomentclature I may use for this dichotomy would be planner and performer; it would be the same dichotomy. ‘Planner’ and ‘server’ are synonyms; ‘performer’ and ‘client’ are synonyms.

    What do I mean by the ‘server’?

    There is something which manages game state and things like the gossip network, merchant network, and major world events. This something is almost certainly written in some form of Lisp; I’d prefer Clojure but I don’t think it’s performant enough so probably Common Lisp. This means that it has inevitable pauses for garbage collection. Underneath this is a database which handles persistent storage of game state, which is probably an SQL database and quite likely SQLite.

    diff --git a/docs/codox/Dynamic-consequences.html b/docs/codox/Dynamic-consequences.html index b820457..dc05c83 100644 --- a/docs/codox/Dynamic-consequences.html +++ b/docs/codox/Dynamic-consequences.html @@ -1,6 +1,10 @@ +<<<<<<< HEAD On the consequences of a dynamic game environment for storytelling

    On the consequences of a dynamic game environment for storytelling

    +======= +On the consequences of a dynamic game environment for storytelling

    On the consequences of a dynamic game environment for storytelling

    +>>>>>>> develop

    First, a framing disclaimer: in Racundra’s First Cruise, Arthur Ransome describes coming across a half built — and by the time he saw it, already obsolete — wooden sailing ship, in a Baltic forest. An old man was building it, by himself. He had been building it since he had been a young man. It’s clear that Ransome believed the ship would never be finished. It’s not clear whether the old man believed that it would, but nevertheless he was building it.

    I will never build a complete version of The Great Game; it will probably never even be a playable prototype. It is a minor side-project of someone who

      diff --git a/docs/codox/Economy.html b/docs/codox/Economy.html index 37a2e66..809bb46 100644 --- a/docs/codox/Economy.html +++ b/docs/codox/Economy.html @@ -1,6 +1,10 @@ +<<<<<<< HEAD Game world economy

      Game world economy

      +======= +Game world economy (unfinished)

      Game world economy (unfinished)

      +>>>>>>> develop

      Broadly this essay extends ideas presented in Populating a game world, q.v.

      Primary producers

      Herdsfolk

      diff --git a/docs/codox/Further-reading.html b/docs/codox/Further-reading.html index 0c10ec6..6d9457d 100644 --- a/docs/codox/Further-reading.html +++ b/docs/codox/Further-reading.html @@ -1,6 +1,10 @@ +<<<<<<< HEAD Further Reading (and watching)

      Further Reading (and watching)

      +======= +Further Reading (and watching)

      Further Reading (and watching)

      +>>>>>>> develop

      Work by other people which is relevant to what I’m doing, and which I should study.

      ## Modelling the natural environment

      Forests

      diff --git a/docs/codox/Game_Play.html b/docs/codox/Game_Play.html index cb58e6c..d9a5f5c 100644 --- a/docs/codox/Game_Play.html +++ b/docs/codox/Game_Play.html @@ -1,6 +1,10 @@ +<<<<<<< HEAD Game Play

      Game Play

      +======= +Game Play (unfinished)

      Game Play (unfinished)

      +>>>>>>> develop

      The principles of game play which I’m looking for are a reaction against all I see as wrong in modern video games. So let’s set out what these are:

      1. diff --git a/docs/codox/Genetic-buildings.html b/docs/codox/Genetic-buildings.html index 8d4964c..9c1d214 100644 --- a/docs/codox/Genetic-buildings.html +++ b/docs/codox/Genetic-buildings.html @@ -1,6 +1,10 @@ +<<<<<<< HEAD Genetic Buildings

        Genetic Buildings

        +======= +Genetic Buildings

        Genetic Buildings

        +>>>>>>> develop

        Building selection based on location

        The objective of this note is to create a landscape with varied and believable buildings, with the minimum possible data storage per instance.

        Like plants, buildings will ‘grow’ from a seed which has northing and easting attributes. These locate a position on the map. Again, like trees, some aspects of the building type selector are location based. Aspects of the location which are relevant to building type are

        diff --git a/docs/codox/Gossip_scripted_plot_and_Johnny_Silverhand.html b/docs/codox/Gossip_scripted_plot_and_Johnny_Silverhand.html index 56a783d..f27b20a 100644 --- a/docs/codox/Gossip_scripted_plot_and_Johnny_Silverhand.html +++ b/docs/codox/Gossip_scripted_plot_and_Johnny_Silverhand.html @@ -1,6 +1,10 @@ +<<<<<<< HEAD Gossip, scripted plot, and Johnny Silverhand

        Gossip, scripted plot, and Johnny Silverhand

        +======= +Gossip, scripted plot, and Johnny Silverhand

        Gossip, scripted plot, and Johnny Silverhand

        +>>>>>>> develop

        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,

        1. Alexa/Siri style speech interpretation;
        2. diff --git a/docs/codox/MVP-Roadmap.html b/docs/codox/MVP-Roadmap.html index 4868c57..72ea821 100644 --- a/docs/codox/MVP-Roadmap.html +++ b/docs/codox/MVP-Roadmap.html @@ -1,6 +1,10 @@ +<<<<<<< HEAD Minimum Viable Product, and a road map

          Minimum Viable Product, and a road map

          +======= +Minimum Viable Product, and a road map

          Minimum Viable Product, and a road map

          +>>>>>>> develop

          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.

          diff --git a/docs/codox/Modelling_democracy_and_morale.html b/docs/codox/Modelling_democracy_and_morale.html index a052ceb..790e8c5 100644 --- a/docs/codox/Modelling_democracy_and_morale.html +++ b/docs/codox/Modelling_democracy_and_morale.html @@ -1,6 +1,10 @@ +<<<<<<< HEAD The Red Company: modelling democracy and morale (unfinished)

          The Red Company: modelling democracy and morale (unfinished)

          +======= +The Red Company: modelling democracy and morale (unfinished)

          The Red Company: modelling democracy and morale (unfinished)

          +>>>>>>> develop

          Background

          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 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.

          diff --git a/docs/codox/Modelling_trading_cost_and_risk.html b/docs/codox/Modelling_trading_cost_and_risk.html index a3818b0..7175e52 100644 --- a/docs/codox/Modelling_trading_cost_and_risk.html +++ b/docs/codox/Modelling_trading_cost_and_risk.html @@ -1,6 +1,10 @@ +<<<<<<< HEAD Modelling trading cost and risk (unfinished)

          Modelling trading cost and risk (unfinished)

          +======= +Modelling trading cost and risk (unfinished)

          Modelling trading cost and risk (unfinished)

          +>>>>>>> develop

          In a dynamic pre-firearms world with many small states and contested regions, trade is not going to be straightforward. Not only will different routes have different physical characteristics - more or less mountainous, more or fewer unbridged river crossings - they will also have different political characteristics: more of less taxed, more or less effectively policed.

          Raids by outlaws are expected to be part of the game economy. News of raids are the sort of things which may propagate through the gossip system. So are changes in taxation regime. Obviously, knowledge items can affect merchants’ trading strategy; in existing prototype code, individual merchants already each keep their own cache of known historical prices, and exchange historical price data with one another; and use this price data to select trades to make.

          So: to what extent is it worth modelling the spread of knowledge of trade cost and risk?

          diff --git a/docs/codox/Naming-of-characters.html b/docs/codox/Naming-of-characters.html index bfc3110..a95c454 100644 --- a/docs/codox/Naming-of-characters.html +++ b/docs/codox/Naming-of-characters.html @@ -1,6 +1,11 @@ +<<<<<<< HEAD Naming of Characters

          Naming of Characters

          +======= +Naming of Characters

          Naming of Characters

          +

          See wherefore-art-thou

          +>>>>>>> develop

          Generally speaking, in modern RPGs, every character with any impact on the plot has a distinct name. But if we are going to give all non-player characters sufficient agency to impact on the plot, then we must have a way of naming tens or hundreds of thousands of characters, and distinct names will become problematic (even if we’re procedurally generating names, which we shall have to do. So this note is about how characters are named.

          The full name of each character will be made up as follows:

          epithet clan personal-name the trade-or-rank of location, son/daughter of parent

          diff --git a/docs/codox/Not_my_problem.html b/docs/codox/Not_my_problem.html index edc8046..affc67b 100644 --- a/docs/codox/Not_my_problem.html +++ b/docs/codox/Not_my_problem.html @@ -1,6 +1,10 @@ +<<<<<<< HEAD  Not my problem

          # Not my problem

          +======= +Not my problem

          Not my problem

          +>>>>>>> develop

          Introduction

          This document is essentially a catalogue of side-tracks which I do not have to go down when implementing The Great Game. Solved problems; or problems which are common to many other games, so if I don’t solve them someone else will. The object of doing this is to work down to a constrained set of problems which are genuinely things I’m trying to innovate, which I should focus on; which essentially come down to

            diff --git a/docs/codox/On-dying.html b/docs/codox/On-dying.html index 6bf6de6..9e8a781 100644 --- a/docs/codox/On-dying.html +++ b/docs/codox/On-dying.html @@ -1,6 +1,10 @@ +<<<<<<< HEAD On Dying, and Injury

            On Dying, and Injury

            +======= +On Dying, and Injury

            On Dying, and Injury

            +>>>>>>> develop

            Death is the end of your story. One of the tropes in games which, for me, most breaks immersion is when you lose a fight and are presented with a screen that says ‘you are dead. Do you want to reload your last save?’ Life is not like that. We do not have save-states. We die.

            So how could this be better handled?

            You lose a fight. Switch to cutscene: the battlefield, after the fight, your body is there. Probably no sound. A party of non-enemies crosses the battlefield and finds your body. We see surprise and concern. They gather around you. Cut to interior scene, you are in a bed, unconcious, being tended; cut to similar interior scene, you are in a bed, conscious, being tended; cut to exterior scene, you are sitting with some of your saviours, and the game restarts.

            diff --git a/docs/codox/On-sex-and-sexual-violence.html b/docs/codox/On-sex-and-sexual-violence.html index 3683b1b..c0760b9 100644 --- a/docs/codox/On-sex-and-sexual-violence.html +++ b/docs/codox/On-sex-and-sexual-violence.html @@ -1,6 +1,10 @@ +<<<<<<< HEAD On Sex, and Sexual Violence, in Games

            On Sex, and Sexual Violence, in Games

            +======= +On Sex, and Sexual Violence, in Games

            On Sex, and Sexual Violence, in Games

            +>>>>>>> develop

            For me the purpose of games is to provide worlds in which players can explore moral actions, and the consequences of moral actions. Sexual violence is something that happens in the real world, and which happens, even within the real world, more frequently in areas of poor governance and open conflict; and those are areas in which there are important moral actions, and important moral consequences, so they are areas in which it is interesting to set games.

            It would be ludicrous to argue ‘sexual violence is wrong, therefore we should not represent it in games.’ Killing people is also wrong, yet it is extremely common in games. However, sexual violence — and in particular the representation of sexual violence — does pose some specific problems that need to be addressed.

            Firstly, sexual violence is extremely gendered. Yes, male people are sometimes subjected to sexual violence, but nevertheless the overwhelming majority of victims of sexual violence are female. Yes, female people are sometimes — extraordinarily rarely, but sometimes — perpetrators of sexual violence, but nevertheless perpetrators of sexual violence are almost exclusively male.

            diff --git a/docs/codox/Organic_Quests.html b/docs/codox/Organic_Quests.html index 1f6dac8..63c490e 100644 --- a/docs/codox/Organic_Quests.html +++ b/docs/codox/Organic_Quests.html @@ -1,6 +1,10 @@ +<<<<<<< HEAD Organic Quests

            Organic Quests

            +======= +Organic Quests

            Organic Quests

            +>>>>>>> develop

            The structure of a modern Role Playing Came revolves around ‘quests’: tasks that the player character is invited to do, either by the framing narrative of the game or by some non-player character (‘the Quest Giver’). Normally there is one core quest which provides the overarching narrative for the whole game. Wikipedia offers a typology of quests as follows:

            1. Kill quests
            2. diff --git a/docs/codox/Pathmaking.html b/docs/codox/Pathmaking.html index 9d96302..d6aafb7 100644 --- a/docs/codox/Pathmaking.html +++ b/docs/codox/Pathmaking.html @@ -1,6 +1,10 @@ +<<<<<<< HEAD Pathmaking

              Pathmaking

              +======= +Pathmaking

              Pathmaking

              +>>>>>>> develop

              NOTE: this file is called ‘pathmaking’, not ‘pathfinding’, because ‘pathfinding’ has a very specific meaning/usage in game design which is only part of what I want to talk about here.

              NOTE: Work on this is being carried on in a separate library, Walkmap, q.v.

              Stages in creating routes between locations

              diff --git a/docs/codox/Populating-a-game-world.html b/docs/codox/Populating-a-game-world.html index 8d3232d..c828173 100644 --- a/docs/codox/Populating-a-game-world.html +++ b/docs/codox/Populating-a-game-world.html @@ -1,6 +1,10 @@ +<<<<<<< HEAD Populating a game world

              Populating a game world

              +======= +Populating a game world

              Populating a game world

              +>>>>>>> develop

              Saturday, 6 July 2013

              (You might want to read this essay in conjunction with my older essay, Settling a game world, which covers similar ground but which this hopefully advances on)

              For an economy to work people have to be able to move between occupations to fill economic niches. In steady state, non player character (NPC) males become adult as ‘vagrants’, and then move through the state transitions described in this document. The pattern for females is different.

              diff --git a/docs/codox/Pseudo-object-inheritance.html b/docs/codox/Pseudo-object-inheritance.html index f65f35b..ece18fc 100644 --- a/docs/codox/Pseudo-object-inheritance.html +++ b/docs/codox/Pseudo-object-inheritance.html @@ -1,6 +1,10 @@ +<<<<<<< HEAD Pseudo object inheritance

              Pseudo object inheritance

              +======= +Pseudo object inheritance

              Pseudo object inheritance

              +>>>>>>> develop

              This is simply to document how I’m doing type inheritance for game objects, since Clojure does not provide type inheritance for records and I’m currently building game objects on Clojure records.

              It’s possible that I should instead build game objects on Java beans, which do have type (class) inheritance, and would work transparently; however, that isn’t my current approach.

              \ No newline at end of file diff --git a/docs/codox/Roadmap.html b/docs/codox/Roadmap.html index b4e2a64..d8fa01c 100644 --- a/docs/codox/Roadmap.html +++ b/docs/codox/Roadmap.html @@ -1,6 +1,10 @@ +<<<<<<< HEAD Roadmap (obsolete)

              Roadmap (obsolete)

              +======= +Roadmap (obsolete)

              Roadmap (obsolete)

              +>>>>>>> develop

              This document outlines a plan to move forward from where I am in June 2021.

              NOTE: this document has been superceded.

              JMonkeyEngine

              diff --git a/docs/codox/Sandbox.html b/docs/codox/Sandbox.html index b3bf5dc..b0b8f3e 100644 --- a/docs/codox/Sandbox.html +++ b/docs/codox/Sandbox.html @@ -1,6 +1,10 @@ +<<<<<<< HEAD Sandbox

              Sandbox

              +======= +Sandbox

              Sandbox

              +>>>>>>> develop

              Up to now I’ve been thinking of the Great Game as essentially an RPG with some sandbox-like elements; but I think it may be better to think of it as a sandbox game with some RPG like elements.

              Why?

              The core of the game is a world in which non-player characters have enough individual knowledge of the world and their immediate surroundings that they can sensibly answer questions like

              diff --git a/docs/codox/Selecting_Character.html b/docs/codox/Selecting_Character.html index a921897..4ae05ec 100644 --- a/docs/codox/Selecting_Character.html +++ b/docs/codox/Selecting_Character.html @@ -1,6 +1,10 @@ +<<<<<<< HEAD Selecting the Player Character

              Selecting the Player Character

              +======= +Selecting the Player Character

              Selecting the Player Character

              +>>>>>>> develop

              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.

              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.

              diff --git a/docs/codox/Settling-a-game-world.html b/docs/codox/Settling-a-game-world.html index 4229b32..3baf213 100644 --- a/docs/codox/Settling-a-game-world.html +++ b/docs/codox/Settling-a-game-world.html @@ -1,6 +1,10 @@ +<<<<<<< HEAD Settling a game world

              Settling a game world

              +======= +Settling a game world

              Settling a game world

              +>>>>>>> develop

              Wednesday, 30 December 2009

              This essay is part of a series with ‘Worlds and Flats’ and ‘The spread of knowledge in a large game world’; if you haven’t read those you may want to read them before reading this. This essay describes how a large world can come into being and can evolve. I’ve written again on this subject since - see ‘Populating a game world’)

              Microworld

              diff --git a/docs/codox/Sexual-dimorphism.html b/docs/codox/Sexual-dimorphism.html index c83ab79..bc6d1a5 100644 --- a/docs/codox/Sexual-dimorphism.html +++ b/docs/codox/Sexual-dimorphism.html @@ -1,6 +1,10 @@ +<<<<<<< HEAD Sexual dimorphism

              Sexual dimorphism

              +======= +Sexual dimorphism

              Sexual dimorphism

              +>>>>>>> develop

              This essay is going to upset a lot of people, so let’s start with a statement of what it is about: it is an attempt to describe the systematically different behaviours of men and women, in sufficient detail that this can be represented by agents in a game world. It’s trying to allow as broad as possible a range of cultures to be represented, so when I’m talking about what I consider to be behaviours of particular cultures, I’ll say that.

              Of course, I’m writing this from the view point of an old white male. It’s not possible to write about these things from a totally neutral viewpoint, and every one of us will have prejudices.

              OK? Let’s start.

              diff --git a/docs/codox/Simulated-genetics.html b/docs/codox/Simulated-genetics.html index b36fe87..7a32889 100644 --- a/docs/codox/Simulated-genetics.html +++ b/docs/codox/Simulated-genetics.html @@ -1,6 +1,10 @@ +<<<<<<< HEAD Simulated Genetics

              Simulated Genetics

              +======= +Simulated Genetics

              Simulated Genetics

              +>>>>>>> develop

              If we’re going to have a world with a multi-generational population of hundreds of thousands of procedurally generated characters, and we’re to persuasively represent each character as being related to others, then we have to have a mechanism for making children look reasonably like their parents, to have family resemblances among cousins, and so on. We need to do this at reasonably low data storage and algorithmic cost, firstly because we have to store all these characters, and secondly because (especially when the player approaches an urban centre), we may need to instantiate models for a lot of them in limited time.

              This note discusses how this might be done.

              The pseudo-genome

              diff --git a/docs/codox/Simulation-layers.html b/docs/codox/Simulation-layers.html index c942609..59dcb6c 100644 --- a/docs/codox/Simulation-layers.html +++ b/docs/codox/Simulation-layers.html @@ -1,6 +1,10 @@ +<<<<<<< HEAD Simulation layers

              Simulation layers

              +======= +Simulation layers

              Simulation layers

              +>>>>>>> develop

              In essence, the environment for The Great Game is broadly descended from games like the original Elite space trading game, and Sid Meier’s Pirates!, with some elements from political simulations like for example SimCity.

              That is to say there is

              An economy simulation

              diff --git a/docs/codox/The-spread-of-knowledge-in-a-large-game-world.html b/docs/codox/The-spread-of-knowledge-in-a-large-game-world.html index 8a66759..9546e12 100644 --- a/docs/codox/The-spread-of-knowledge-in-a-large-game-world.html +++ b/docs/codox/The-spread-of-knowledge-in-a-large-game-world.html @@ -1,6 +1,10 @@ +<<<<<<< HEAD The spread of knowledge in a large game world

              The spread of knowledge in a large game world

              +======= +The spread of knowledge in a large game world

              The spread of knowledge in a large game world

              +>>>>>>> develop

              Saturday, 26 April 2008

              Note

              This version of this essay has been adapted to use the code in the-great-game.gossip.news-items, q.v.. The original version of the essay is still available on my blog.

              diff --git a/docs/codox/Things_Voice_Interaction_Enables.html b/docs/codox/Things_Voice_Interaction_Enables.html index c064b92..40dc4b2 100644 --- a/docs/codox/Things_Voice_Interaction_Enables.html +++ b/docs/codox/Things_Voice_Interaction_Enables.html @@ -1,6 +1,10 @@ +<<<<<<< HEAD Things Voice Interaction Enables

              Things Voice Interaction Enables

              +======= +Things Voice Interaction Enables

              Things Voice Interaction Enables

              +>>>>>>> develop

              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.

              diff --git a/docs/codox/Tree-library-evaluation.html b/docs/codox/Tree-library-evaluation.html index bff9293..04305d9 100644 --- a/docs/codox/Tree-library-evaluation.html +++ b/docs/codox/Tree-library-evaluation.html @@ -1,6 +1,10 @@ +<<<<<<< HEAD Tree library evaluation

              Tree library evaluation

              +======= +Tree library evaluation

              Tree library evaluation

              +>>>>>>> develop

              This is a comparative evaluation of open source tree libraries that I have found that I could make use of. It’s entirely personal and subjective!

              SimArboreal

              Overview

              diff --git a/docs/codox/Uncanny_dialogue.html b/docs/codox/Uncanny_dialogue.html index 6d326e5..346a237 100644 --- a/docs/codox/Uncanny_dialogue.html +++ b/docs/codox/Uncanny_dialogue.html @@ -1,6 +1,10 @@ +<<<<<<< HEAD The Uncanny Valley, and dynamically generated dialogue

              The Uncanny Valley, and dynamically generated dialogue

              +======= +The Uncanny Valley, and dynamically generated dialogue

              The Uncanny Valley, and dynamically generated dialogue

              +>>>>>>> develop

              If the player is allowed to just speak arbitrary dialogue, then the conversation animation of the player character cannot be designed. If non-player characters are able to engage dynamically generated dialogue, in response to events in the game which are not scripted, then their conversation animation for those dialogues cannot be designed. So conversation animation must almost always be dynamically generated, largely from an augmented text of the speech act. With non-player characters, emotional content of a speech act can be generated by exactly the same process which generates the text. Extracting emotional content information from the player character’s voice may be more challenging.

              It would be possible to avoid animating the player character’s face by using a first-person camera. However, I don’t personally find this makes for a very engaging game experience.

              These thoughts were prompted by a very interesting video and Twitter thread about the perceived failings in the character animation system of Mass Effect Andromeda.

              diff --git a/docs/codox/Voice-acting-considered-harmful.html b/docs/codox/Voice-acting-considered-harmful.html index b2aa4b4..7cbeeda 100644 --- a/docs/codox/Voice-acting-considered-harmful.html +++ b/docs/codox/Voice-acting-considered-harmful.html @@ -1,6 +1,10 @@ +<<<<<<< HEAD Voice acting considered harmful

              Voice acting considered harmful

              +======= +Voice acting considered harmful

              Voice acting considered harmful

              +>>>>>>> develop

              Wednesday, 25 February 2015

              The Witcher: Conversation with Kalkstein

              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

              diff --git a/docs/codox/Worlds-and-flats.html b/docs/codox/Worlds-and-flats.html index 6ac6527..c0be1c9 100644 --- a/docs/codox/Worlds-and-flats.html +++ b/docs/codox/Worlds-and-flats.html @@ -1,6 +1,10 @@ +<<<<<<< HEAD Worlds and flats [obsolete]

              Worlds and flats obsolete

              +======= +Worlds and flats [obsolete]

              Worlds and flats obsolete

              +>>>>>>> develop

              This essay is from 2008, and is now at least partly obsolete; but there’s useful stuff in it which is worth holding onto.

              Of Compartmented Worlds

              Playing The Witcher has got me thinking again about an algorithm for rendering a world which I first thought of twenty-five years ago. Then, it was a hack for dealing with the fact that the computers of the day didn’t have much memory or horsepower. Now, it’s a hack for dealing with the fact that — when considered against the complexity of a world — the computers of today still don’t have enough memory and horsepower. Mind you, today I’m contemplating photorealistic scenes, whereas then simple line and wash would have been good enough, but…

              diff --git a/docs/codox/cc.journeyman.the-great-game.buildings.rectangular.html b/docs/codox/cc.journeyman.the-great-game.buildings.rectangular.html index b4a0f47..3abb75a 100644 --- a/docs/codox/cc.journeyman.the-great-game.buildings.rectangular.html +++ b/docs/codox/cc.journeyman.the-great-game.buildings.rectangular.html @@ -1,6 +1,10 @@ +<<<<<<< HEAD cc.journeyman.the-great-game.buildings.rectangular documentation

              cc.journeyman.the-great-game.buildings.rectangular

              Build buildings with a generally rectangular floow plan.

              +======= +cc.journeyman.the-great-game.buildings.rectangular documentation

              cc.journeyman.the-great-game.buildings.rectangular

              Build buildings with a generally rectangular floow plan.

              +>>>>>>> develop

              Motivations

              Right, the idea behind this namespace is many fold.

                diff --git a/docs/codox/cc.journeyman.the-great-game.character.sex.html b/docs/codox/cc.journeyman.the-great-game.character.sex.html index cae5dc9..9694518 100644 --- a/docs/codox/cc.journeyman.the-great-game.character.sex.html +++ b/docs/codox/cc.journeyman.the-great-game.character.sex.html @@ -1,4 +1,8 @@ +<<<<<<< HEAD cc.journeyman.the-great-game.character.sex documentation

                cc.journeyman.the-great-game.character.sex

                TODO: write docs

                +======= +cc.journeyman.the-great-game.character.sex documentation

                cc.journeyman.the-great-game.character.sex

                TODO: write docs

                +>>>>>>> develop
                \ No newline at end of file diff --git a/docs/codox/cc.journeyman.the-great-game.gossip.gossip.html b/docs/codox/cc.journeyman.the-great-game.gossip.gossip.html index 37d81df..5447efd 100644 --- a/docs/codox/cc.journeyman.the-great-game.gossip.gossip.html +++ b/docs/codox/cc.journeyman.the-great-game.gossip.gossip.html @@ -1,6 +1,10 @@ +<<<<<<< HEAD cc.journeyman.the-great-game.gossip.gossip documentation

                cc.journeyman.the-great-game.gossip.gossip

                Interchange of news events between gossip agents.

                +======= +cc.journeyman.the-great-game.gossip.gossip documentation

                cc.journeyman.the-great-game.gossip.gossip

                Interchange of news events between gossip agents.

                +>>>>>>> develop

                Note that habitual travellers are all gossip agents; specifically, at this stage, that means merchants. When merchants are moved we also need to update the location of the gossip with the same key.

                Innkeepers are also gossip agents but do not typically move.

                dialogue

                (dialogue enquirer respondent world)

                Dialogue between an enquirer and an agent in this world; returns a map identical to enquirer except that its :gossip collection may have additional entries.

                diff --git a/docs/codox/cc.journeyman.the-great-game.gossip.news-items.html b/docs/codox/cc.journeyman.the-great-game.gossip.news-items.html index ff39c67..666ecd2 100644 --- a/docs/codox/cc.journeyman.the-great-game.gossip.news-items.html +++ b/docs/codox/cc.journeyman.the-great-game.gossip.news-items.html @@ -1,6 +1,10 @@ +<<<<<<< HEAD cc.journeyman.the-great-game.gossip.news-items documentation

                cc.journeyman.the-great-game.gossip.news-items

                Using news items (propositions) to transfer knowledge between gossip agents.

                +======= +cc.journeyman.the-great-game.gossip.news-items documentation

                cc.journeyman.the-great-game.gossip.news-items

                Using news items (propositions) to transfer knowledge between gossip agents.

                +>>>>>>> develop

                Status

                What is here is essentially working. It’s not, however, working with the rich data objects which will be needed, and it’s not yet nearly efficient enough, but it allows knowledge to propagate through the world procedurally, at a rate limited by the speed of movement of the gossip agents.

                Discussion

                diff --git a/docs/codox/cc.journeyman.the-great-game.holdings.holding.html b/docs/codox/cc.journeyman.the-great-game.holdings.holding.html index f4fc986..eedd782 100644 --- a/docs/codox/cc.journeyman.the-great-game.holdings.holding.html +++ b/docs/codox/cc.journeyman.the-great-game.holdings.holding.html @@ -1,6 +1,10 @@ +<<<<<<< HEAD cc.journeyman.the-great-game.holdings.holding documentation

                cc.journeyman.the-great-game.holdings.holding

                TODO: write docs

                +======= +cc.journeyman.the-great-game.holdings.holding documentation

                cc.journeyman.the-great-game.holdings.holding

                TODO: write docs

                +>>>>>>> develop

                ProtoHolding

                protocol

                members

                building-origin

                (building-origin holding)

                Returns an oriented location - normally the right hand end of the frontage, for an urban holding - from which buildings on the holding should be built.

                frontage

                (frontage holding)

                Returns a sequence of two locations representing the edge of the polygon which defines this holding which is considered to be the front.

                \ No newline at end of file diff --git a/docs/codox/cc.journeyman.the-great-game.launcher.html b/docs/codox/cc.journeyman.the-great-game.launcher.html index fe1ad4f..df15a62 100644 --- a/docs/codox/cc.journeyman.the-great-game.launcher.html +++ b/docs/codox/cc.journeyman.the-great-game.launcher.html @@ -1,8 +1,17 @@ +<<<<<<< HEAD cc.journeyman.the-great-game.launcher documentation

                cc.journeyman.the-great-game.launcher

                Launcher for the game

                -main

                (-main & args)

                Launch the game.

                cli-options

                I haven’t yet thought out what command line arguments (if any) I need. This is a placeholder.

                game

                TODO: write docs

                init

                (init)

                Again, placeholder. This initialises a bit of standard jMonkeyEngine terrain, just to check I have things wired up correctly.

                -
                \ No newline at end of file +
                +======= +cc.journeyman.the-great-game.launcher documentation

                cc.journeyman.the-great-game.launcher

                Launcher for the game

                +

                -main

                (-main & args)

                Launch the game.

                +

                app

                TODO: write docs

                +

                cli-options

                TODO: write docs

                +

                init

                (init)

                TODO: write docs

                +
                +>>>>>>> develop diff --git a/docs/codox/cc.journeyman.the-great-game.location.location.html b/docs/codox/cc.journeyman.the-great-game.location.location.html index 86d5e3d..d77e5b7 100644 --- a/docs/codox/cc.journeyman.the-great-game.location.location.html +++ b/docs/codox/cc.journeyman.the-great-game.location.location.html @@ -1,6 +1,10 @@ +<<<<<<< HEAD cc.journeyman.the-great-game.location.location documentation

                cc.journeyman.the-great-game.location.location

                TODO: write docs

                +======= +cc.journeyman.the-great-game.location.location documentation

                cc.journeyman.the-great-game.location.location

                TODO: write docs

                +>>>>>>> develop

                ProtoLocation

                protocol

                members

                altitude

                (altitude location)

                Return the absolute altitude of this location, which may be different from the terrain height at this location, if, for example, the location is underground or on an upper floor.

                easting

                (easting location)

                Return the easting of this location

                northing

                (northing location)

                Return the northing of this location

                diff --git a/docs/codox/cc.journeyman.the-great-game.lore.digester.html b/docs/codox/cc.journeyman.the-great-game.lore.digester.html index 24eae06..85c0c59 100644 --- a/docs/codox/cc.journeyman.the-great-game.lore.digester.html +++ b/docs/codox/cc.journeyman.the-great-game.lore.digester.html @@ -1,4 +1,8 @@ +<<<<<<< HEAD cc.journeyman.the-great-game.lore.digester documentation

                cc.journeyman.the-great-game.lore.digester

                TODO: write docs

                +======= +cc.journeyman.the-great-game.lore.digester documentation

                cc.journeyman.the-great-game.lore.digester

                TODO: write docs

                +>>>>>>> develop
                \ No newline at end of file diff --git a/docs/codox/cc.journeyman.the-great-game.merchants.markets.html b/docs/codox/cc.journeyman.the-great-game.merchants.markets.html index 472ba1c..04bc9e6 100644 --- a/docs/codox/cc.journeyman.the-great-game.merchants.markets.html +++ b/docs/codox/cc.journeyman.the-great-game.merchants.markets.html @@ -1,6 +1,10 @@ +<<<<<<< HEAD cc.journeyman.the-great-game.merchants.markets documentation

                cc.journeyman.the-great-game.merchants.markets

                Adjusting quantities and prices in markets.

                +======= +cc.journeyman.the-great-game.merchants.markets documentation

                cc.journeyman.the-great-game.merchants.markets

                Adjusting quantities and prices in markets.

                +>>>>>>> develop

                adjust-quantity-and-price

                (adjust-quantity-and-price world city commodity)

                Adjust the quantity of this commodity currently in stock in this city of this world. Return a fragmentary world which can be deep-merged into this world.

                new-price

                (new-price old stock supply demand)

                If stock is greater than the maximum of supply and demand, then there is surplus and old price is too high, so shold be reduced. If lower, then it is too low and should be increased.

                run

                (run world)

                Return a world like this world, with quantities and prices in markets updated to reflect supply and demand.

                diff --git a/docs/codox/cc.journeyman.the-great-game.merchants.merchant-utils.html b/docs/codox/cc.journeyman.the-great-game.merchants.merchant-utils.html index bc80971..17f2d2c 100644 --- a/docs/codox/cc.journeyman.the-great-game.merchants.merchant-utils.html +++ b/docs/codox/cc.journeyman.the-great-game.merchants.merchant-utils.html @@ -1,6 +1,10 @@ +<<<<<<< HEAD cc.journeyman.the-great-game.merchants.merchant-utils documentation

                cc.journeyman.the-great-game.merchants.merchant-utils

                Useful functions for doing low-level things with merchants.

                +======= +cc.journeyman.the-great-game.merchants.merchant-utils documentation

                cc.journeyman.the-great-game.merchants.merchant-utils

                Useful functions for doing low-level things with merchants.

                +>>>>>>> develop

                add-known-prices

                (add-known-prices merchant world)

                Add the current prices at this merchant’s location in the world to a new cache of known prices, and return it.

                add-stock

                (add-stock a b)

                Where a and b are both maps all of whose values are numbers, return a map whose keys are a union of the keys of a and b and whose values are the sums of their respective values.

                burden

                (burden merchant world)

                The total weight of the current cargo carried by this merchant in this world.

                diff --git a/docs/codox/cc.journeyman.the-great-game.merchants.merchants.html b/docs/codox/cc.journeyman.the-great-game.merchants.merchants.html index 04c53b4..2d46f86 100644 --- a/docs/codox/cc.journeyman.the-great-game.merchants.merchants.html +++ b/docs/codox/cc.journeyman.the-great-game.merchants.merchants.html @@ -1,5 +1,5 @@ -cc.journeyman.the-great-game.merchants.merchants documentation

                cc.journeyman.the-great-game.merchants.merchants

                Trade planning for merchants, primarily.

                +cc.journeyman.the-great-game.merchants.merchants documentation

                cc.journeyman.the-great-game.merchants.merchants

                Trade planning for merchants, primarily.

                run

                (run world)

                Return a partial world based on this world, but with each merchant moved.

                -
                \ No newline at end of file +
                \ No newline at end of file diff --git a/docs/codox/cc.journeyman.the-great-game.merchants.planning.html b/docs/codox/cc.journeyman.the-great-game.merchants.planning.html index 1d782dd..ca1520c 100644 --- a/docs/codox/cc.journeyman.the-great-game.merchants.planning.html +++ b/docs/codox/cc.journeyman.the-great-game.merchants.planning.html @@ -1,6 +1,10 @@ +<<<<<<< HEAD cc.journeyman.the-great-game.merchants.planning documentation

                cc.journeyman.the-great-game.merchants.planning

                Trade planning for merchants, primarily. This follows a simple-minded generate-and-test strategy and currently generates plans for all possible routes from the current location. This may not scale. Also, routes do not currently have cost or risk associated with them.

                +======= +cc.journeyman.the-great-game.merchants.planning documentation

                cc.journeyman.the-great-game.merchants.planning

                Trade planning for merchants, primarily. This follows a simple-minded generate-and-test strategy and currently generates plans for all possible routes from the current location. This may not scale. Also, routes do not currently have cost or risk associated with them.

                +>>>>>>> develop

                augment-plan

                (augment-plan merchant world plan)

                Augment this plan constructed in this world for this merchant with the :quantity of goods which should be bought and the :expected-profit of the trade.

                Returns the augmented plan.

                generate-trade-plans

                (generate-trade-plans merchant world commodity)

                Generate all possible trade plans for this merchant and this commodity in this world.

                diff --git a/docs/codox/cc.journeyman.the-great-game.merchants.strategies.simple.html b/docs/codox/cc.journeyman.the-great-game.merchants.strategies.simple.html index bdacf8c..6d9f9a3 100644 --- a/docs/codox/cc.journeyman.the-great-game.merchants.strategies.simple.html +++ b/docs/codox/cc.journeyman.the-great-game.merchants.strategies.simple.html @@ -1,9 +1,9 @@ -cc.journeyman.the-great-game.merchants.strategies.simple documentation

                cc.journeyman.the-great-game.merchants.strategies.simple

                Default trading strategy for merchants.

                +cc.journeyman.the-great-game.merchants.strategies.simple documentation

                cc.journeyman.the-great-game.merchants.strategies.simple

                Default trading strategy for merchants.

                The simple strategy buys a single product in the local market if there is one which can be traded profitably, trades it to the chosen target market, and sells it there. If there is no commodity locally which can be traded profitably, moves towards home with no cargo. If at home and no commodity can be traded profitably, does not move.

                move-merchant

                (move-merchant merchant world)

                Handle general en route movement of this merchant in this world; return a (partial or full) world like this world but in which the merchant may have been moved ot updated.

                -

                plan-and-buy

                (plan-and-buy merchant world)

                Return a world like this world, in which this merchant has planned a new trade, and bought appropriate stock for it. If no profitable trade can be planned, the merchant is simply moved towards their home.

                -

                re-plan

                (re-plan merchant world)

                Having failed to sell a cargo at current location, re-plan a route to sell the current cargo. Returns a revised world.

                -

                sell-and-buy

                (sell-and-buy merchant world)

                Return a new world like this world, in which this merchant has sold their current stock in their current location, and planned a new trade, and bought appropriate stock for it.

                -
                \ No newline at end of file +

                plan-and-buy

                (plan-and-buy merchant world)

                Return a world like this world, in which this merchant has planned a new trade, and bought appropriate stock for it. If no profitable trade can be planned, the merchant is simply moved towards their home.

                +

                re-plan

                (re-plan merchant world)

                Having failed to sell a cargo at current location, re-plan a route to sell the current cargo. Returns a revised world.

                +

                sell-and-buy

                (sell-and-buy merchant world)

                Return a new world like this world, in which this merchant has sold their current stock in their current location, and planned a new trade, and bought appropriate stock for it.

                +
                \ No newline at end of file diff --git a/docs/codox/cc.journeyman.the-great-game.objects.character.html b/docs/codox/cc.journeyman.the-great-game.objects.character.html index 351c1c0..00cd4c8 100644 --- a/docs/codox/cc.journeyman.the-great-game.objects.character.html +++ b/docs/codox/cc.journeyman.the-great-game.objects.character.html @@ -1,4 +1,8 @@ +<<<<<<< HEAD cc.journeyman.the-great-game.objects.character documentation

                cc.journeyman.the-great-game.objects.character

                TODO: write docs

                +======= +cc.journeyman.the-great-game.objects.character documentation

                cc.journeyman.the-great-game.objects.character

                TODO: write docs

                +>>>>>>> develop
                \ No newline at end of file diff --git a/docs/codox/cc.journeyman.the-great-game.objects.container.html b/docs/codox/cc.journeyman.the-great-game.objects.container.html index b94fb5f..68597e3 100644 --- a/docs/codox/cc.journeyman.the-great-game.objects.container.html +++ b/docs/codox/cc.journeyman.the-great-game.objects.container.html @@ -1,6 +1,10 @@ +<<<<<<< HEAD cc.journeyman.the-great-game.objects.container documentation

                cc.journeyman.the-great-game.objects.container

                TODO: write docs

                +======= +cc.journeyman.the-great-game.objects.container documentation

                cc.journeyman.the-great-game.objects.container

                TODO: write docs

                +>>>>>>> develop

                ProtoContainer

                protocol

                members

                contents

                (contents container)

                Return a sequence of the contents of this container, or nil if empty.

                is-empty?

                (is-empty? container)

                Return true if this container is empty, else false.

                \ No newline at end of file diff --git a/docs/codox/cc.journeyman.the-great-game.objects.game-object.html b/docs/codox/cc.journeyman.the-great-game.objects.game-object.html index aad9595..3cdbd0a 100644 --- a/docs/codox/cc.journeyman.the-great-game.objects.game-object.html +++ b/docs/codox/cc.journeyman.the-great-game.objects.game-object.html @@ -1,6 +1,10 @@ +<<<<<<< HEAD cc.journeyman.the-great-game.objects.game-object documentation

                cc.journeyman.the-great-game.objects.game-object

                Anything at all in the game world

                +======= +cc.journeyman.the-great-game.objects.game-object documentation

                cc.journeyman.the-great-game.objects.game-object

                Anything at all in the game world

                +>>>>>>> develop

                ProtoObject

                protocol

                An object in the world

                members

                id

                (id object)

                Returns the unique id of this object.

                reify-object

                (reify-object object)

                Adds this object to the global object list. If the object has a non-nil value for its id method, keys it to that id - but if the id value is already in use, throws a hard exception. Returns the id to which the object is keyed in the global object list.

                diff --git a/docs/codox/cc.journeyman.the-great-game.playroom.html b/docs/codox/cc.journeyman.the-great-game.playroom.html index 52fff44..4cc1ca4 100644 --- a/docs/codox/cc.journeyman.the-great-game.playroom.html +++ b/docs/codox/cc.journeyman.the-great-game.playroom.html @@ -1,6 +1,10 @@ +<<<<<<< HEAD cc.journeyman.the-great-game.playroom documentation

                cc.journeyman.the-great-game.playroom

                TODO: write docs

                +======= +cc.journeyman.the-great-game.playroom documentation

                cc.journeyman.the-great-game.playroom

                TODO: write docs

                +>>>>>>> develop

                app

                TODO: write docs

                init

                (init)

                TODO: write docs

                simple-update

                (simple-update tpf)

                TODO: write docs

                diff --git a/docs/codox/cc.journeyman.the-great-game.proving.core.html b/docs/codox/cc.journeyman.the-great-game.proving.core.html index ef18832..debc49b 100644 --- a/docs/codox/cc.journeyman.the-great-game.proving.core.html +++ b/docs/codox/cc.journeyman.the-great-game.proving.core.html @@ -1,11 +1,22 @@ +<<<<<<< HEAD cc.journeyman.the-great-game.proving.core documentation

                cc.journeyman.the-great-game.proving.core

                Phase one of ‘Baking the World

                +======= +cc.journeyman.the-great-game.proving.core documentation

                cc.journeyman.the-great-game.proving.core

                Phase one of ‘Baking the World

                +>>>>>>> develop

                *life-goals*

                dynamic

                TODO: This definitely doesn’t belong here, and will be moved.

                get-biome-map

                (get-biome-map height-map)(get-biome-map height-map _rainfall-map)

                Given this height-map (a monochrome raster) and optionally this rainfall-map (also a monochrome raster), return a biome map (a microworld style world tagged with vegetation, etc, data).

                get-drainage-map

                (get-drainage-map height-map)(get-drainage-map height-map _rainfall-map)

                Given this height-map (a monochrome raster) and optionally this rainfall-map (also a monochrome raster), return a drainage map (a microworld style world tagged with drainage data).

                get-road-map

                (get-road-map _populated-world)

                TODO: write docs

                +<<<<<<< HEAD

                populate-cell

                (populate-cell world cell)

                TODO: write docs

                populate-world

                (populate-world biome-map)

                Given this biome-map (as returned by get-biome-map), populate a world (probably some form of database) and return a structure which allows that database o be interrogated.

                prove

                (prove height-map rainfall-map)

                Given this height-map (a monochrome raster) and optionally this rainfall-map (also a monochrome raster), return a populated world.

                -
                \ No newline at end of file +
                +======= +

                populate-cell

                (populate-cell world cell)

                TODO: write docs

                +

                populate-world

                (populate-world biome-map)

                Given this biome-map (as returned by get-biome-map), populate a world (probably some form of database) and return a structure which allows that database o be interrogated.

                +

                prove

                (prove height-map rainfall-map)

                Given this height-map (a monochrome raster) and optionally this rainfall-map (also a monochrome raster), return a populated world.

                +
                +>>>>>>> develop diff --git a/docs/codox/cc.journeyman.the-great-game.proving.sketches.html b/docs/codox/cc.journeyman.the-great-game.proving.sketches.html index a59e88c..3e1d807 100644 --- a/docs/codox/cc.journeyman.the-great-game.proving.sketches.html +++ b/docs/codox/cc.journeyman.the-great-game.proving.sketches.html @@ -1,6 +1,10 @@ +<<<<<<< HEAD cc.journeyman.the-great-game.proving.sketches documentation

                cc.journeyman.the-great-game.proving.sketches

                Code that’s useful for exploring, but probably not part of the final product, and if it is, will end up somewhere else.

                +======= +cc.journeyman.the-great-game.proving.sketches documentation

                cc.journeyman.the-great-game.proving.sketches

                Code that’s useful for exploring, but probably not part of the final product, and if it is, will end up somewhere else.

                +>>>>>>> develop

                couple-cell?

                (couple-cell? c)

                TODO: write docs

                happy-cell?

                (happy-cell? c)

                True if all NPCs at c (assumed to be a MicroWorld-style cell) are of a happy disposition.

                \ No newline at end of file diff --git a/docs/codox/cc.journeyman.the-great-game.time.html b/docs/codox/cc.journeyman.the-great-game.time.html index f43bdb1..04e3721 100644 --- a/docs/codox/cc.journeyman.the-great-game.time.html +++ b/docs/codox/cc.journeyman.the-great-game.time.html @@ -1,6 +1,10 @@ +<<<<<<< HEAD cc.journeyman.the-great-game.time documentation

                cc.journeyman.the-great-game.time

                TODO: write docs

                +======= +cc.journeyman.the-great-game.time documentation

                cc.journeyman.the-great-game.time

                TODO: write docs

                +>>>>>>> develop

                canonical-ordering-of-houses

                The canonical ordering of religious houses.

                date-string

                (date-string game-time)

                Return a correctly formatted date for this game-time in the calendar of the Great Place.

                day

                (day game-time)

                Day of the eight-day week represented by this game-time.

                diff --git a/docs/codox/cc.journeyman.the-great-game.utils.html b/docs/codox/cc.journeyman.the-great-game.utils.html index dfadd77..b936f3f 100644 --- a/docs/codox/cc.journeyman.the-great-game.utils.html +++ b/docs/codox/cc.journeyman.the-great-game.utils.html @@ -1,6 +1,10 @@ +<<<<<<< HEAD cc.journeyman.the-great-game.utils documentation

                cc.journeyman.the-great-game.utils

                TODO: write docs

                +======= +cc.journeyman.the-great-game.utils documentation

                cc.journeyman.the-great-game.utils

                TODO: write docs

                +>>>>>>> develop

                cyclic?

                (cyclic? route)

                True if two or more elements of route are identical

                deep-merge

                (deep-merge & maps)

                inc-or-one

                (inc-or-one val)

                If this val is a number, return that number incremented by one; otherwise, return 1. TODO: should probably be in utils.

                diff --git a/docs/codox/cc.journeyman.the-great-game.world.heightmap.html b/docs/codox/cc.journeyman.the-great-game.world.heightmap.html index cc08514..5c06121 100644 --- a/docs/codox/cc.journeyman.the-great-game.world.heightmap.html +++ b/docs/codox/cc.journeyman.the-great-game.world.heightmap.html @@ -1,6 +1,10 @@ +<<<<<<< HEAD cc.journeyman.the-great-game.world.heightmap documentation

                cc.journeyman.the-great-game.world.heightmap

                Functions dealing with the tessellated multi-layer heightmap.

                +======= +cc.journeyman.the-great-game.world.heightmap documentation

                cc.journeyman.the-great-game.world.heightmap

                Functions dealing with the tessellated multi-layer heightmap.

                +>>>>>>> develop

                *base-map*

                dynamic

                TODO: write docs

                *noise-map*

                dynamic

                TODO: write docs

                excerpt-grid

                (excerpt-grid grid x-offset y-offset width height)

                Return that section of this grid where the :x co-ordinate of each cell is greater than or equal to this x-offset, the :y co-ordinate is greater than or equal to this y-offset, whose width is not greater than this width, and whose height is not greater than this height.

                diff --git a/docs/codox/cc.journeyman.the-great-game.world.location.html b/docs/codox/cc.journeyman.the-great-game.world.location.html index aad6ac7..8c67f78 100644 --- a/docs/codox/cc.journeyman.the-great-game.world.location.html +++ b/docs/codox/cc.journeyman.the-great-game.world.location.html @@ -1,6 +1,10 @@ +<<<<<<< HEAD cc.journeyman.the-great-game.world.location documentation

                cc.journeyman.the-great-game.world.location

                Functions dealing with location in the world.

                +======= +cc.journeyman.the-great-game.world.location documentation

                cc.journeyman.the-great-game.world.location

                Functions dealing with location in the world.

                +>>>>>>> develop

                distance-between

                (distance-between location-1 location-2)

                TODO: write docs

                get-coords

                (get-coords location)

                Return the coordinates in the game world of location, which may be 1. A coordinate pair in the format {:x 5 :y 32}; 2. A location, as discussed above; 3. Any other gameworld object, having a :location property whose value is one of the above.

                \ No newline at end of file diff --git a/docs/codox/cc.journeyman.the-great-game.world.mw.html b/docs/codox/cc.journeyman.the-great-game.world.mw.html index 5016538..f37ec10 100644 --- a/docs/codox/cc.journeyman.the-great-game.world.mw.html +++ b/docs/codox/cc.journeyman.the-great-game.world.mw.html @@ -1,4 +1,8 @@ +<<<<<<< HEAD cc.journeyman.the-great-game.world.mw documentation

                cc.journeyman.the-great-game.world.mw

                Functions dealing with building a great game world from a MicroWorld world.

                +======= +cc.journeyman.the-great-game.world.mw documentation

                cc.journeyman.the-great-game.world.mw

                Functions dealing with building a great game world from a MicroWorld world.

                +>>>>>>> develop
                \ No newline at end of file diff --git a/docs/codox/cc.journeyman.the-great-game.world.routes.html b/docs/codox/cc.journeyman.the-great-game.world.routes.html index cd2f455..589a3e9 100644 --- a/docs/codox/cc.journeyman.the-great-game.world.routes.html +++ b/docs/codox/cc.journeyman.the-great-game.world.routes.html @@ -1,6 +1,10 @@ +<<<<<<< HEAD cc.journeyman.the-great-game.world.routes documentation

                cc.journeyman.the-great-game.world.routes

                Conceptual (plan level) routes, represented as tuples of location ids.

                +======= +cc.journeyman.the-great-game.world.routes documentation

                cc.journeyman.the-great-game.world.routes

                Conceptual (plan level) routes, represented as tuples of location ids.

                +>>>>>>> develop

                find-route

                (find-route world-or-routes from to)

                Find a single route from from to to in this world-or-routes, which may be either a world as defined in the-great-game.world.world or else a sequence of tuples of keywords.

                find-routes

                (find-routes routes from)(find-routes routes from to)(find-routes routes from to steps)

                Find routes from among these routes from from; if to is supplied, to to, by breadth-first search.

                \ No newline at end of file diff --git a/docs/codox/cc.journeyman.the-great-game.world.world.html b/docs/codox/cc.journeyman.the-great-game.world.world.html index 1a4759e..884ee0b 100644 --- a/docs/codox/cc.journeyman.the-great-game.world.world.html +++ b/docs/codox/cc.journeyman.the-great-game.world.world.html @@ -1,6 +1,10 @@ +<<<<<<< HEAD cc.journeyman.the-great-game.world.world documentation

                cc.journeyman.the-great-game.world.world

                Access to data about the world

                +======= +cc.journeyman.the-great-game.world.world documentation

                cc.journeyman.the-great-game.world.world

                Access to data about the world

                +>>>>>>> develop

                actual-price

                (actual-price world commodity city)

                Find the actual current price of this commodity in this city given this world. NOTE that merchants can only know the actual prices in the city in which they are currently located.

                default-world

                A basic world for testing concepts

                run

                (run world)(run world date)

                Return a world like this world with only the :date to this date (or id date not supplied, the current value incremented by one). For running other aspects of the simulation, see the-great-game.world.run.

                diff --git a/docs/codox/index.html b/docs/codox/index.html index e638b8c..5372e6f 100644 --- a/docs/codox/index.html +++ b/docs/codox/index.html @@ -1,6 +1,10 @@ +<<<<<<< HEAD The-great-game 0.1.3

                The-great-game 0.1.3

                Released under the GNU General Public License,version 2.0 or (at your option) any later version

                Prototype code towards the great game I've been writing about for ten years, and know I will never finish.

                Installation

                To install, add the following dependency to your project or build file:

                [journeyman-cc/the-great-game "0.1.3"]

                Topics

                Namespaces

                cc.journeyman.the-great-game.agent.agent

                Anything in the game world with agency; primarily but not exclusively characters.

                +======= +The-great-game 0.1.3-SNAPSHOT

                The-great-game 0.1.3-SNAPSHOT

                Released under the GNU General Public License,version 2.0 or (at your option) any later version

                Prototype code towards the great game I've been writing about for ten years, and know I will never finish.

                Installation

                To install, add the following dependency to your project or build file:

                [journeyman-cc/the-great-game "0.1.3-SNAPSHOT"]

                Topics

                Namespaces

                cc.journeyman.the-great-game.agent.agent

                Anything in the game world with agency; primarily but not exclusively characters.

                +>>>>>>> develop

                Public variables and functions:

                cc.journeyman.the-great-game.agent.schedule

                Schedules of plans for actors in the game, in order that they may have daily and seasonal patterns of behaviour.

                Public variables and functions:

                cc.journeyman.the-great-game.buildings.module

                A module of a building; essentially something like a portacabin, which can be assembled together with other modules to make a complete building.

                Public variables and functions:

                  cc.journeyman.the-great-game.buildings.rectangular

                  Build buildings with a generally rectangular floow plan.

                  @@ -9,7 +13,11 @@

                  Public variables and functions:

                  cc.journeyman.the-great-game.holdings.holding

                  TODO: write docs

                  Public variables and functions:

                  cc.journeyman.the-great-game.launcher

                  Launcher for the game

                  +<<<<<<< HEAD

                  Public variables and functions:

                  cc.journeyman.the-great-game.location.location

                  TODO: write docs

                  +======= +

                  Public variables and functions:

                  cc.journeyman.the-great-game.location.location

                  TODO: write docs

                  +>>>>>>> develop

                  Public variables and functions:

                  cc.journeyman.the-great-game.lore.digester

                  TODO: write docs

                  Public variables and functions:

                    cc.journeyman.the-great-game.merchants.markets

                    Adjusting quantities and prices in markets.

                    Public variables and functions:

                    cc.journeyman.the-great-game.merchants.merchant-utils

                    Useful functions for doing low-level things with merchants.

                    diff --git a/docs/codox/intro.html b/docs/codox/intro.html index acf31c5..4207620 100644 --- a/docs/codox/intro.html +++ b/docs/codox/intro.html @@ -1,6 +1,10 @@ +<<<<<<< HEAD Introduction to the-great-game

                    Introduction to the-great-game

                    +======= +Introduction to the-great-game

                    Introduction to the-great-game

                    +>>>>>>> develop

                    The Great Game

                    In this essay I’m going to try to pull together a number of my architectural ideas about the Great Game which I know I’m never actually going to build - because it’s vastly too big for any one person to build - into one overall vision.

                    So, firstly, how does one characterise this game?

                    diff --git a/project.clj b/project.clj index 43ea8e2..342403a 100644 --- a/project.clj +++ b/project.clj @@ -16,10 +16,16 @@ ;; but this is not a final decision yet. [com.github.seancorfield/honeysql "2.6.1126"] [com.github.seancorfield/next.jdbc "1.3.925"] +<<<<<<< HEAD [com.simsilica/lemur "1.16.1-SNAPSHOT"] [com.simsilica/sim-arboreal "1.0.1-SNAPSHOT"] ;; [com.taoensso/timbre "6.5.0"] [com.taoensso/telemere "1.0.0-beta3"] ;; Peter Taoussanis' new replacement for Timbre +======= + [com.simsilica/lemur "1.16.0"] + ;; [com.simsilica/sim-arboreal "1.0.1-SNAPSHOT"] + [com.taoensso/timbre "6.5.0"] +>>>>>>> develop [environ "1.2.0"] [hiccup "2.0.0-RC3"] [jme-clj "0.1.13"] diff --git a/src/clj/cc/journeyman/the_great_game/agent/agent.clj b/src/clj/cc/journeyman/the_great_game/agent/agent.clj index 282f13e..ed0e4e9 100644 --- a/src/clj/cc/journeyman/the_great_game/agent/agent.clj +++ b/src/clj/cc/journeyman/the_great_game/agent/agent.clj @@ -4,6 +4,32 @@ (:require [cc.journeyman.the-great-game.objects.game-object :refer [ProtoObject]] [cc.journeyman.the-great-game.objects.container :refer [ProtoContainer contents is-empty?]])) +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;; +;;;; Agents: things with agency. +;;;; +;;;; This program is free software; you can redistribute it and/or +;;;; modify it under the terms of the GNU General Public License +;;;; as published by the Free Software Foundation; either version 2 +;;;; of the License, or (at your option) any later version. +;;;; +;;;; This program is distributed in the hope that it will be useful, +;;;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;;;; GNU General Public License for more details. +;;;; +;;;; You should have received a copy of the GNU General Public License +;;;; along with this program; if not, write to the Free Software +;;;; Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, +;;;; USA. +;;;; +;;;; SPDX-FileCopyrightText: 2024 Simon Brooke +;;;; SPDX-License-Identifier: GPL-2.0-or-later +;;;; +;;;; Copyright (C) 2024 Simon Brooke +;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;;; hierarchy of needs probably gets implemented here ;;; I'm probably going to want to defprotocol stuff, to define the hierarchy ;;; of things in the gameworld; either that or drop to Java, wich I'd rather not do. diff --git a/src/clj/cc/journeyman/the_great_game/agent/schedule.clj b/src/clj/cc/journeyman/the_great_game/agent/schedule.clj index 8fef3cb..5e9e765 100644 --- a/src/clj/cc/journeyman/the_great_game/agent/schedule.clj +++ b/src/clj/cc/journeyman/the_great_game/agent/schedule.clj @@ -2,6 +2,33 @@ "Schedules of plans for actors in the game, in order that they may have daily and seasonal patterns of behaviour.") +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;; +;;;; Schedules: things agents plan to do. +;;;; +;;;; This program is free software; you can redistribute it and/or +;;;; modify it under the terms of the GNU General Public License +;;;; as published by the Free Software Foundation; either version 2 +;;;; of the License, or (at your option) any later version. +;;;; +;;;; This program is distributed in the hope that it will be useful, +;;;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;;;; GNU General Public License for more details. +;;;; +;;;; You should have received a copy of the GNU General Public License +;;;; along with this program; if not, write to the Free Software +;;;; Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, +;;;; USA. +;;;; +;;;; SPDX-FileCopyrightText: 2024 Simon Brooke +;;;; SPDX-License-Identifier: GPL-2.0-or-later +;;;; +;;;; Copyright (C) 2024 Simon Brooke +;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + ;; TODO: I don't have a good handle yet on when a new scheduled task can ;; interrupt an existing scheduled task. It's highly undesirable that ;; uncompleted scheduled tasks should be left on the queue. The simplest diff --git a/workspace.code-workspace b/workspace.code-workspace index 1b0e3d9..4da0a18 100644 --- a/workspace.code-workspace +++ b/workspace.code-workspace @@ -1,37 +1,47 @@ { "folders": [ { - "path": "../GreatGameTerrain" + "path": "../biome" }, { - "path": "../walkmap" + "path": "../GreatGameTerrain" }, { "path": "../jme-clj" }, { - "path": "../MicroWorld/mw-engine" - }, - { - "path": "." - }, - { - "path": "../test-graphs" - }, - { - "path": "../speechio" - }, - { - "path": "../wherefore-art-thou" - }, - { - "path": "../MicroWorld/mw-parser" + "path": "../jme3-template" }, { "path": "../../Documents/fiction/merchants-war-game" }, + { + "path": "../MicroWorld/mw-engine" + }, + { + "path": "../MicroWorld/mw-parser" + }, + { +<<<<<<< HEAD + "path": "../../Documents/fiction/merchants-war-game" + }, { "path": "../simulated-genetics" +======= + "path": "../simulated-genetics" + }, + { + "path": "../speechio" + }, + { + "path": "." /* the great game itself */ + }, + { + "path": "../walkmap" + }, + { + "path": "../wherefore-art-thou" +>>>>>>> develop } ], "settings": { @@ -39,4 +49,4 @@ "java.compile.nullAnalysis.mode": "automatic", "java.jdt.ls.vmargs": "-XX:+UseParallelGC -XX:GCTimeRatio=4 -XX:AdaptiveSizePolicyWeight=90 -Dsun.zip.disableMemoryMapping=true -Xmx2G -Xms100m -Xlog:disable" } -} \ No newline at end of file +}