From a5b7e8219b361e5f713caaa2a74c937002ff698d Mon Sep 17 00:00:00 2001 From: Simon Brooke Date: Mon, 8 Apr 2024 11:24:04 +0100 Subject: [PATCH] Started instantiating NPCs --- doc/Organic_Quests.md | 2 +- doc/intro.md | 1 + docs/codox/Building_on_microworld.html | 8 ---- docs/codox/Economy.html | 36 --------------- docs/codox/Genetic-buildings.html | 46 ------------------- .../Modelling_trading_cost_and_risk.html | 8 ---- docs/codox/Naming-of-characters.html | 32 ------------- docs/codox/On-dying.html | 17 ------- docs/codox/Sandbox.html | 41 ----------------- docs/codox/Sexual-dimorphism.html | 37 --------------- docs/codox/building_on_microworld.html | 8 ---- docs/codox/economy.html | 36 --------------- docs/codox/genetic-buildings.html | 46 ------------------- .../modelling_trading_cost_and_risk.html | 8 ---- docs/codox/naming-of-characters.html | 32 ------------- docs/codox/on-dying.html | 17 ------- docs/codox/sandbox.html | 41 ----------------- docs/codox/sexual-dimorphism.html | 37 --------------- resources/data/crafts.edn | 5 ++ .../the_great_game/proving/core.clj | 40 +++++++++++++++- 20 files changed, 45 insertions(+), 453 deletions(-) delete mode 100644 docs/codox/Building_on_microworld.html delete mode 100644 docs/codox/Economy.html delete mode 100644 docs/codox/Genetic-buildings.html delete mode 100644 docs/codox/Modelling_trading_cost_and_risk.html delete mode 100644 docs/codox/Naming-of-characters.html delete mode 100644 docs/codox/On-dying.html delete mode 100644 docs/codox/Sandbox.html delete mode 100644 docs/codox/Sexual-dimorphism.html delete mode 100644 docs/codox/building_on_microworld.html delete mode 100644 docs/codox/economy.html delete mode 100644 docs/codox/genetic-buildings.html delete mode 100644 docs/codox/modelling_trading_cost_and_risk.html delete mode 100644 docs/codox/naming-of-characters.html delete mode 100644 docs/codox/on-dying.html delete mode 100644 docs/codox/sandbox.html delete mode 100644 docs/codox/sexual-dimorphism.html diff --git a/doc/Organic_Quests.md b/doc/Organic_Quests.md index c213d4d..d18a65d 100644 --- a/doc/Organic_Quests.md +++ b/doc/Organic_Quests.md @@ -27,7 +27,7 @@ Hybrids are in effect chains of quests: do this task in order to get this precon My understanding is that what Wikipedia means by a 'syntax quest' is what one would normally call a puzzle. -An escort quest is typically a request to take a specified non-player character safely through a dangerous area. +An escort quest is typically a request to take a specified non-player character safely through a dangerous area. It is thus very similar to a delivery quest, except that you are escorting a character rather than delivering an item. Combo quests are not, in my opinion, particularly relevant to the sorts of game we're discussing here. diff --git a/doc/intro.md b/doc/intro.md index f5c0abb..a7ec1a0 100644 --- a/doc/intro.md +++ b/doc/intro.md @@ -167,6 +167,7 @@ different top level goals. The following are some plausible top level goals: 4. **Climber**: To climb as high as possible in the social hierarchy, to become Tyrranos or Imperator; 5. **Conqueror**: To build the largest possible realm under your control; 6. **Citizen**: To build a secure and comfortable home, able to feed and protect those within it; +7. **Hoarder**: To accumulate the greatest possible amount of wealth. In this typology, a hero is a master soldier, and a sage a master scholar. Each of these types should be capable of being 'scored' by a real function diff --git a/docs/codox/Building_on_microworld.html b/docs/codox/Building_on_microworld.html deleted file mode 100644 index 0f886ee..0000000 --- a/docs/codox/Building_on_microworld.html +++ /dev/null @@ -1,8 +0,0 @@ - -Building on Microworld

Building on Microworld

-

In Settling a Game World I intended that a world should be populated by setting agents - settlers - to explore the map and select places to settle according to particular rules. In the meantime, I’ve built MicroWorld, a rule driven cellular automaton which makes a reasonably good job of modelling human settlement. It works, and I now plan to use it, as detailed in this note; but there are issues.

-

First and foremost, it’s slow, and both processor and memory hungry. That means that at continent scale, a cell of one kilometre square is the minimum size which is really possible, which isn’t small enough to create a settlement map of the density that a game will need. Even with 1 km cells, even on the most powerful machines I have access to, a continent-size map will take many days to run.

-

Of course it would be possible to do a run at one km scale top identify areas which would support settlement, and then to do a run on a ten metre grid on each of those areas to more precisely plot settlement. That’s an idea which I haven’t yet explored, which might prove fruitful.

-

Secondly, being a cellular automaton, MicroWorld works on a grid. This means that everything is grid aligned, which is absolutely not what I want! So I think the way to leverage this is to use MicroWorld to establish which kilometre square cells om the grid should be populated (and roughly with what), and then switch to ad hoc code to populate those cells.

-
\ No newline at end of file diff --git a/docs/codox/Economy.html b/docs/codox/Economy.html deleted file mode 100644 index bef0905..0000000 --- a/docs/codox/Economy.html +++ /dev/null @@ -1,36 +0,0 @@ - -Game world economy

Game world economy

-

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

-

Primary producers

-

Herdsfolk

-

Herdsfolk are nomadic; it’s reasonable to think they’ll bring their herds to market, rather than selling at lots of tiny markets. So in the spring, shepherds will visit specific towns at the edge of open land, to hold a shearing festival/carnevale; and that both shepherds and cattle herders will visit towns on the edge of open land to sell fatstock in the autumn.

-

Miners

-

Miners mine. They’re settled, but they’re settled usually in specialist settlements at the location where the ore body is accessible, usually in mountenous territory. They’ll consume a lot of food, so there will be a local market for foodstuffs encouraging local farming. Different mines obviously mine different ores, but, for example, lead and silver are frequently found together.

-

Foresters

-

Foresters are more or less settled at the edge of forests, at locations from which timber can be moved by navigable water; again in specialist settlements. In addition to timber, foresters hunt and produce both meat and furs, so have less need for other food producers locally.

-

Farmers

-

Farmers are settled. Farmers occupy standard runrig plots, but because they don’t employ journeymen or apprentices, and don’t have workshops, the plots are mostly open with little building. Most farmers are ‘mixed farmers’, producing cereals, meat, eggs and milk. Some will be more specialist. Farm produce, taken broadly to include orchardsfolk, include:

-
    -
  • meat
  • -
  • milk and milk products
  • -
  • hides
  • -
  • eggs
  • -
  • cereals
  • -
  • root vegetables, onions, etc
  • -
  • peas and beans
  • -
  • leaf vegetables
  • -
  • fruits
  • -
  • fibres: linen, hemp and silk (from silk-moths in mulberry orchards)
  • -
  • possibly other stuff I’ve forgotten.
  • -
-

Farmers are all primarily subsistence farmers, farming first to feed their own household and selling only surplus in the market.

-

Crafts

-

Crafts generally process primary goods into secondary goods — whether intermediate stages or final consumer items. Some elite ‘crafts’ deal with abstract primary goods like law and knowledge, and they may be seen as somewhat separate.

-

A master craftsperson may occupy a standard runrig plot, much like a farmer’s plot. Like a farmer, a poor master crafter household will cultivate part of the plot to produce food for the house — at least grow vegetables and keep hens. However, as the crafter takes on apprentices and journeymen — and gets richer — more buildings will be required as accommodation, workshop space and materials stores.

-

Also, Tchahua is much more a gold-rush town than an organic, grew over hundreds of years sort of town, so it is not ex-runrig; and additionally the original settlement was probably along the river bank, land which has now been redeveloped as warehouses and as rich merchant residences. Generally, town house plots are small from the get go.

-

Hans’hua is again an exception from normal organic development, as it has no agricultural land close to the city at all.

-

Generally, primary goods aren’t transported over land — because overland transport is expensive, by the time they’ve been transported they’re no longer low cost goods. So often the craftspeople who process primary produce into at least commodity intermediate forms will live close to the source of the primary goods.

-

So, for example, the town(s) where the shepherds hold their shearing fairs will tend to have a lot of weavers. While around mines there will be smelters producing ingots and bar stock to be marketed to smiths all over the place, there will also be smiths close to the mines producing commodity tools and weapons.

-

See the tables in Populating a game world.

-
\ No newline at end of file diff --git a/docs/codox/Genetic-buildings.html b/docs/codox/Genetic-buildings.html deleted file mode 100644 index c2bce27..0000000 --- a/docs/codox/Genetic-buildings.html +++ /dev/null @@ -1,46 +0,0 @@ - -Genetic Buildings

Genetic Buildings

-

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

-
    -
  • elevation — derived from the map location by interpolation from grid. The actual interpolation algorithm is probably some form of spline, but in any case it’s the same one as for everything else.
  • -
  • orientation of slope — derived by taking altitude at four corners of a 100 metre square centred on the seed point, and then taking the highest and lowest of these. If highest is northwest, lowest is southeast, the slope is considered to be oriented southeast; if highest is northwest and lowest southwest, the orientation is considered to be south, and so on. Eight orientation values are sufficient.
  • -
  • gradient of slope — derived from the difference in altitude across the same 100 metre square
  • -
  • neighbours — number of other buildings in 500 metre square centred on seed point.
  • -
-

The reason orientation is relevant is exactly the same as the reason it’s relevant to trees. West facing slopes are assumed wetter (coriolis winds), so grow trees better, so better availability of better quality timber, so a higher probability of timber as a primary building material. But also, in areas of higher rainfall, rain shedding is an important consideration, so a higher value is placed on pitched roofs.

-

So you have the following general relationships

-
    -
  • west (or southwest or northwest) facing, moderate gradient, moderate altitude: high probability of timber construction; construction techniques involving large timbers (e.g. cruck frame); greater probability of shingled roofs;
  • -
  • west (or southwest or northwest) facing, moderate gradient, higher altitude or northern latitude: high probability of building styles adapted to straight-trunk conifers, e.g. log cabins, stave buildings; greater probability of shingled roofs;
  • -
  • east facing, generally: greater probability of flat roofs;
  • -
  • steeper gradients: greater probability of stone buildings (steeper gradients = shallower topsoil and greater ease of quarrying = access to stone); greater probability of slate roofs;
  • -
  • shallower gradients: greater probability of mud, cobb, brick or wattle-and-daub as building materials; greater probability of thatch or turf roofs;
  • -
  • Higher number of neighbours: higher probability of two or more stories;
  • -
-

These factors allow classes of building to be selected. Having got past that point, we need to consider how classes of genetic building can work.

-

Rectangular genetic buildings

-

Some genetic buildings will have cells with rectangular plan. This doesn’t mean that genetic buildings are required to have rectangular cells, but they provide a starting point for discussion. For a given class of building (for example, timber frame), a number of prototype models of cells exist. These models are fully realised three dimensional models. Possibly all cells belonging to the building class have two open ends, and end walls exist as separate models; equally possibly, some cells have only one extensible end. In any case, a building will not normally comprise a single cell. Normally it will comprise multiple cells. So the cells belonging to a particular building class will be designed to ‘plug together’. Multi story building classes will have some cells which are specifically ground floor only (flat ceiling, no roof), and such cells will always have an upper floor cell added above them. Where an upper floor cell has an outside door, an outside stair will automatically be added.

-

Cell mutability

-

Although cell models are repeatedly reused they don’t have to look the same every time they are reused. Within limits, every cell can be stretched along any of its three axes. Obviously, the degree of stretch on a given axis for every cell in a given building must be the same, otherwise they won’t line up. Another mutable area is skinning — it may be possible to have alternate skins for cells, and even if there are not alternate skins, it will be possible to mutably darken, lighten or otherwise tint the skins used, within ranges which are appropriate to the materials represented. Obviously there are limits to stretching — timber comes in only such a length, stone lintels will only support such a span.

-

Functional cells

-

Some trade functions require cells of particular kinds. Thus a smith needs a working building with one cell which is explicitly a forge. A water mill must have one cell which explicitly houses the mill gear. A forge cell or a waterwheel cell should never appear in weavers workshop. But most cells are not dedicated in this way. A bedroom cell is a bedroom cell, more or less; wealth may alter how it is furnished, but it may appear in any dwelling. Similarly, except for the very wealthy, a living cell is pretty much a living cell. And any building may incorporate a storage cell. If a given building class has twelve distinct ‘generic’ cells’ and half a dozen distinct functional cells, and if buildings in the class average four cells each, then ignoring variance caused by skin mutability, a street of fifty buildings could have every one different.

-

Reproducibility

-

It’s critical that if a player visits a location, leaves it, and then returns, the buildings should not all have changed. So it must be possible to repeatedly reproduce the building at the location (this, of course, applies to other procedural scene dressing, such as trees, roads, boundaries, bridges and so on). This is possible if a deterministic random number generator is used which is seeded from the latitude and longitude attributes of the location. Other attributes which should be cached on the seed even though they are determined procedurally when the building is first instantiated include building class, purpose, and wealth. Using these attributes and the deterministic random number generator, the same building can be reproduced on the same site each time it is visited, with a very small amount of data stored.

-

Buildings will normally be built at the edge of the associated land holding. If an edge of the land holding adjoins a road, then the building will be built with one long side aligned to the road. Otherwise, the building will be built at right angles to the orientation of the slope. The orientation will be ‘frozen’ once the building has been instantiated and will be cached on the seed.

-

So, to build a building, use the following algorithm:

-

Seed the random number generator with latitude and longitude

-
while ( building value is less than wealth) {
-   select a cell selected from the building class using the next number from the random number generator modulo the number of generic cells in the class;
-   if the selected cell is not inappropriate to the building's function {
-       fit the cell to the building at the point determined by a deterministic algorithm
-       furnish cell using the random number generator to determine
-       furnishing types and locations from a selection appropriate to the cell
-       if the selected cell was not a top story cell {
-            add a requirement that the next cell selected must be an upper story cell}
-   }
-}
-
-
\ No newline at end of file diff --git a/docs/codox/Modelling_trading_cost_and_risk.html b/docs/codox/Modelling_trading_cost_and_risk.html deleted file mode 100644 index baedd48..0000000 --- a/docs/codox/Modelling_trading_cost_and_risk.html +++ /dev/null @@ -1,8 +0,0 @@ - -Modelling trading cost and risk (unfinished)

Modelling trading cost and risk (unfinished)

-

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?

-

Obviously the more we model, the more compute power modelling consumes. If the core objective is a Role Playing Games as currently understood, then there is no need to model very complex trade risk assessment behaviour.

-
\ No newline at end of file diff --git a/docs/codox/Naming-of-characters.html b/docs/codox/Naming-of-characters.html deleted file mode 100644 index 2342e2e..0000000 --- a/docs/codox/Naming-of-characters.html +++ /dev/null @@ -1,32 +0,0 @@ - -Naming of Characters

Naming of Characters

-

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

-

Based on, roughly, historical name patterns like

-

Archibald (personal-name) the Grim (epithet), Earl (trade-or-rank) of Douglas (location)

-

Where

-
    -
  1. -

    epithet is a prefix based on some notable feature or feat of the character. Most characters won’t have an epithet, unless they have some notable feature or they’ve done something notable. If a character does something notable in the course of the game, they will subsequently gain an epithet; ‘notability’ may be measured by how many times the event is transmitted through the gossip network.

    -
  2. -
  3. -

    clan is special to the Western Clans, although people from the Great Place may possible use the name of their house similarly.

    -
  4. -
  5. -

    personal-name is chosen from one of a limited set of limited sets; different cultural groups will have different (possibly overlapping) sets of names, but within each set there will only be a limited subset

    -
  6. -
  7. -

    trade-or-rank is just that. “Smith”, “Miller”, “Ariston”, “Captain”. Either only master craftsfolk have the trade-or-rank name of their craft, or we distinguish between ‘Calon the Smith’, who may be a journeyman, and ‘Calon the Master Smith’, who is a master.

    -
  8. -
  9. -

    location is the name of a location; a village, town, city or province. The location which forms part of a character’s name is the location where there current home is, not the location where they were born or where their ancestors came from

    -
  10. -
-

Full names will almost never be used - only, perhaps, in extremely formal circumstances. The form of a name used will depend on context, and will generally be just sufficient to disambiguate the character in the context.

-

If the speaker is in Sinhua and referring to someone from Sinhua, they won’t refer to them as ‘of Sinhua’.

-

If everyone present is a bargee and the speaker referring to someone who is also a bargee, they won’t refer to them as ‘the bargee’.

-

The question asked influences the context: in answer to the question ‘who is the best sword smith’, the answer will not be ‘Calon the Smith’ but ‘Calon of Sinhua’.

-

Patronymics/matronymics will not normally be used of adults (although they may be used of apprentices and journeymen.

-
\ No newline at end of file diff --git a/docs/codox/On-dying.html b/docs/codox/On-dying.html deleted file mode 100644 index 59e49d6..0000000 --- a/docs/codox/On-dying.html +++ /dev/null @@ -1,17 +0,0 @@ - -On Dying, and Injury

On Dying, and Injury

-

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.

-

Time has passed; events in the game world have moved on. You can talk to your saviours about it. You have lost a lot of strength, and most of the gear you were carrying. You must do whatever it is you do within the game mechanics to rebuild strength, and to acquire more gear. Significantly you have acquired a debt of honour to your saviours, which they may call on later. You almost certainly have new scars, and might possibly have some lasting effects (although how that interacts with other game mechanics might be tricky).

-

So who are the non-enemies? It depends on context. If you have a party, and some of that party survived the fight, it’s your party. Otherwise, if you’re in a populated place, it’s locals. If it’s on a road or other route, it’s passing merchants. If you’re in the wilderness, a hunting party. It’s a bunch of non-hostiles who might reasonably be expected to be around: that’s what matters. It’s about not breaking immersion.

-

Obviously losing a fight must have weight, it must have meaning, it must have in-game consequences; otherwise it is meaningless.

-

Injury

-

Similarly to death, injury must have meaning. Any injury takes time to recover from. It takes a certain amount of time if you’re able to rest somewhere safe, and considerably longer if you’re not. If you fight while injured, you’ll have less strength, less stramina, and probably also less agility. Depending where you’re injured, there will be certain things you cannot do. If you fight while injured, also, your recovery time will be extended, even if you take no further injury.

-

Some serious injuries will lead to permanent scarring, and permanent loss of agility; you’ll be just slightly slower in fights.

-

It should be said that Kenshi — a game I’ve only recently become aware of and greatly admire — handles all of this extremely well, and is worth studying.

-

Reciprocity

-

If the player is going to depend on good samaritans for rescue after losing a fight, then there must be at least a social convention that people should assist people found injured on the wayside. Consequently, if the player fails to do this, that should in itself become a ‘gossip’ event which will lower the player’s reputation with non-player characters.

-

On the other hand, helping NPCs found injured at the wayside can be another category of organic quest, as a special subcategory of an escort quest.

-
\ No newline at end of file diff --git a/docs/codox/Sandbox.html b/docs/codox/Sandbox.html deleted file mode 100644 index 5e8679b..0000000 --- a/docs/codox/Sandbox.html +++ /dev/null @@ -1,41 +0,0 @@ - -Sandbox

Sandbox

-

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

-
    -
  • Where is the nearest craftsman of this craft?
  • -
  • What price can I expect to get for this item in the local market?
  • -
  • What news have you heard recently?
  • -
  • Where does this person from your village live?
  • -
-

and where there’s a sufficiently sophisticated and robust economy simulation that buying goods in one market and selling them in another is viable.

-

The original BBC Micro space trading game Elite had very little more in terms of game mechanics than a sandbox with a means to navigate it and an economy simulation, which wasn’t even nearly as sophisticated as the one I have working now. Yet that combination resulted in engaging game play.

-

Main sandbox roles

-

The idea of a sandbox is that the player character should be able to do pretty much anything they like within the mechanics of the game. From that, it seems to me reasonable that the player ought to be able to do more or less everything a non-player character can do. But creating the game mechanics to make each additional task doable takes time and investment, so there’s a need to prioritise.

-

So, as Elite did, I propose to make the first available sandbox roles

-

Merchant

-

Someone who travels from city to city, buying goods cheap in one and selling them for more in another; and

-

Outlaw

-

Someone who intercepts and steals from merchants (and may also attack outlying farms and villages)

-

Second tier playable roles

-

The next tier of playable roles rotates around issues arising from the mercantile ecosystem.

-

Aristocracy

-

Aristocrats are basically settled outlaws who seek to establish a monopoly on extracting taxes from inhabitants and travellers in a particular region by driving out all other outlaws. Within the domain of an aristocrat, you have to pay tax but you’re reasonably safe from being attacked by other outlaws and losing everything. Aristocrats may also maintain and improve roads and bridges and do other things to boost the economy of their territory, may expand into adjoining territory with no current aristocratic control, and may wage war on other aristocrats.

-

An outlaw ought to be able to become an aristocrat, by dominating an ungoverned area or by defeating an existing aristocrat.

-

Soldiery

-

Soldiers, like aristocrats, are basically on the same spectrum as outlaws. Outlaws may hire themselves out to merchants as caravan guards, or to aristocrats as soldiers. Soldiers or guards, falling on bad times, may revert to outlawry.

-

Routine, Discretion and Playability

-

There’s a term that’s used in criticism of many computer games which is worth thinking about hard here: that term is ‘farming’. ‘Farming’, in this sense, is doing something repetitive and dull to earn credits in a game. Generally this is not fun. What makes roles in a game-world fun is having individual discretion — the ability to choose between actions and strategies — and a lack of routine.

-

Most craft skills — especially in the learning phase — are not like this, and crafts which are sophisticated enough to be actually engaging are very hard to model in a game. Learning a craft is essentially, inherently, repetitive and dull, and if you take that repetition out of it you probably don’t have enough left to yield the feeling of mastery which would reward success; so it doesn’t seem to me that making craft roles playable should be a priority.

-

Cruise control

-

One of the most enjoyable aspects of The Witcher 3 — still my go-to game for ideas I want to improve on — is simply travelling through the world. Although fast travel is possible I find I rarely use it, and a journey which takes fifteen minutes of real world wall clock time can be enjoyable in and of itself. This is, of course, a credit to the beautiful way the world is realised.

-

(It’s worth noting that Kenshi, a game I’m coming to greatly admire, does not allow fast travel at all, but has an equivalent of ‘cruise control’ — you can set a destination and then accelerate time and simply watch as your characters journey).

-

But nevertheless, in The Witcher 3, a decision was made to pack incident fairly densely — because players would find just travelling boring. This leads to a situation where peaceful villages exist two minutes travel from dangerous monsters or bandit camps, and the suspension of disbelief gets a little strained. Building a world big enough that a market simulation is believable means that for the individual, the travel time to a market where a particular desired good is likely to be cheaper becomes costly in itself. Otherwise, there’s no arbitrage between markets and no ecological niche for a merchant to fill. The journey time from market to market has to be several in-game days.

-

An in-game day doesn’t have to be as long as a wall clock day, and, indeed, typically isn’t. But nevertheless, doing several game days of incident-free travel, even in beautiful scenery, is not going to be engaging — which implies a fast-travel mechanic.

-

I don’t like fast travel, I find it a too-obvious breaking of immersion. Also, of course, one of the interesting things about a game in a merchant/outlaw ecosystem is the risk of interception on a journey. The Dragon Age series handled interrupted travel in ‘fast travel’ by randomly interrupting the loading screen you get when moving from location to location in Dragon Age’s patchwork worlds by dumping you into a tiny arena with enemies. That’s really, really bad — there’s no other way to say this. Everything about it shouts artifice.

-

So I’m thinking of a different mechanism: one I’m calling cruise control.

-

You set out on a task which will take a long time — such as a journey, but also such as any routine task. You’re shown either a ‘fast forward’ of your character carrying out this task, or a series of cinematic ‘shots along the way’. This depends, of course, on there being continuous renderable landscape between your departure and your destination, but there will be. This fast-forward proceeds at a substantially higher time gearing than normal game time — ten times as fast perhaps; we need it to, because as well as doing backgound scenery loading to move from one location to another, we’re also simulating lots of non-player agents’ actions in parts of the world where the player currently isn’t. So a ‘jump cut’ from one location to another isn’t going to work anyway.

-

The player can interrupt ‘fast forward’ at any time. But also, the game itself may bring you out of fast forward when it anticipates that there may be action which requires decision — for example, when there are outlaws in the vicinity. And it will do this before the player’s party is under immediate attack — the player will have time to take stock of the situation and prepare appropriately. Finally, this will take place in the full open world; the player will have the option to choose not to enter the narrow defile, for example, to ask local people (if there are any) for any news of outlaw activity, or, if they are available, to send forward scouts.

-
\ No newline at end of file diff --git a/docs/codox/Sexual-dimorphism.html b/docs/codox/Sexual-dimorphism.html deleted file mode 100644 index bfd002d..0000000 --- a/docs/codox/Sexual-dimorphism.html +++ /dev/null @@ -1,37 +0,0 @@ - -Sexual dimorphism

Sexual dimorphism

-

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.

-

When a man and a woman have sex, there’s a non-zero chance that the woman will get pregnant. There’s a zero chance that the male will get pregnant.

-

A woman can typically give birth to of the order of twelve children in the course of her life, and each childbirth involves a non-zero risk of death. If modelling the sort of bronze-age-to-late-medieval cultures I’m generally considering, there are no available reliable methods of contraception, although there may be, for example, known spermicidal or abortifacient spells or potions. If it’s abortifacient, that’s pretty unpleasant for the woman, too.

-

Children, especially when young, are very vulnerable and need protection. Children with good protection are much more likely to survive to adulthood. Raising children involves a fair amount of work.

-

For all sorts of reasons, some of which are clearly cultural but others of which are fundamental, it’s much easier for men to walk away from responsibility for their children than it is for women. For example, considering a pre-modern world, women would always know for certain which children were theirs, and men would not.

-

For a woman, consequently, the best breeding strategy is to have sex only with men who will be ‘good fathers’, where there are three essential parameters to “good fathers”:

-
    -
  1. Desirable genetic traits;
  2. -
  3. Preparedness to stick around and share the work;
  4. -
  5. Ability to provide and protect.
  6. -
-

The essential trade-off in the traditional western marriage is that the man gets to have sex, and the woman gets to have protection for her progeny.

-

Another significant point is that women’s ability to bear children ceases at a much younger age than men’s ability to father them.

-

Why have sex at all?

-

If a character has ‘having children’ — the Ancestor aspiration, in my typology — as their key aim, then they will want to have sex. But to have children in this sense is to have acknowledged children, so while a male character may be motivated to have multiple female partners, he will never the less have some degree of long term committment to them, and will want both to feel confident that the children are his and to be recognised by their father.

-

From the point of view of seeking to become an Ancestor, there is little benefit to the woman in having multiple partners, except in very harsh environments. It will be easier to give one partner confidence that all your children are his, and while a man can increase his number of potential progeny by having multiple wives, mistresses or other classes of long-term female sexual partners, a woman cannot.

-

Why have children?

-

In modern Scotland, I have met a lot of women with a strong drive to have children for the sake of having children, where the best explanation they could give is that it’s instinctual; it may be so. But beyond that, in many cultures children provide their (acknowledged) parents with care and security in their old age, may tend their graves and perform belief-related services after they die, and carry on their name and their stories into the future.

-

Not everyone wants to have children; in thinking about the driving aspirations of game characters, I view having children one of six potential key aspirations.

-

Why else have sex?

-

Sex, done right, is an extremely pleasant pastime. Sex can also be used to create and maintain bonds of committment, to demonstrate social status, to defuse tense situations, and transactionally in many ways, both formal and informal.

-

For women, sex with other women carries with it no risk of pregnancy, so can be enjoyed or used for any of these purposes in very much the same way as it can by men; in other words, particularly for women, homosexual sex can be more lighthearted and carefree than heterosexual sex. To what extend our notions of homosexuality and heterosexuality are cultural I simply don’t know. But because no children will result, a woman can afford to be more promiscuous with other women than she can with men.

-

Women and warrior/adventurer lifestyles

-

Generally speaking, people do not want to take their children onto a battlefield. If you’re going to have a game world in which women significantly take on warrior or adventurer roles, then you must either have

-
    -
  • A culture which expects female warriors to be celibate; or
  • -
  • A culture with access to and acceptance of safe and reliable contraception or abortion; or
  • -
  • An acceptance of leaving infant children with grandparents, other relatives or foster carers for long periods;
  • -
  • A system of long term creches;
  • -
  • Any combination of the above.
  • -
-
\ No newline at end of file diff --git a/docs/codox/building_on_microworld.html b/docs/codox/building_on_microworld.html deleted file mode 100644 index 6a13727..0000000 --- a/docs/codox/building_on_microworld.html +++ /dev/null @@ -1,8 +0,0 @@ - -Building on Microworld

Building on Microworld

-

In Settling a Game World I intended that a world should be populated by setting agents - settlers - to explore the map and select places to settle according to particular rules. In the meantime, I’ve built MicroWorld, a rule driven cellular automaton which makes a reasonably good job of modelling human settlement. It works, and I now plan to use it, as detailed in this note; but there are issues.

-

First and foremost, it’s slow, and both processor and memory hungry. That means that at continent scale, a cell of one kilometre square is the minimum size which is really possible, which isn’t small enough to create a settlement map of the density that a game will need. Even with 1 km cells, even on the most powerful machines I have access to, a continent-size map will take many days to run.

-

Of course it would be possible to do a run at one km scale top identify areas which would support settlement, and then to do a run on a ten metre grid on each of those areas to more precisely plot settlement. That’s an idea which I haven’t yet explored, which might prove fruitful.

-

Secondly, being a cellular automaton, MicroWorld works on a grid. This means that everything is grid aligned, which is absolutely not what I want! So I think the way to leverage this is to use MicroWorld to establish which kilometre square cells om the grid should be populated (and roughly with what), and then switch to ad hoc code to populate those cells.

-
\ No newline at end of file diff --git a/docs/codox/economy.html b/docs/codox/economy.html deleted file mode 100644 index f95ccf8..0000000 --- a/docs/codox/economy.html +++ /dev/null @@ -1,36 +0,0 @@ - -Game world economy

Game world economy

-

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

-

Primary producers

-

Herdsfolk

-

Herdsfolk are nomadic; it’s reasonable to think they’ll bring their herds to market, rather than selling at lots of tiny markets. So in the spring, shepherds will visit specific towns at the edge of open land, to hold a shearing festival/carnevale; and that both shepherds and cattle herders will visit towns on the edge of open land to sell fatstock in the autumn.

-

Miners

-

Miners mine. They’re settled, but they’re settled usually in specialist settlements at the location where the ore body is accessible, usually in mountenous territory. They’ll consume a lot of food, so there will be a local market for foodstuffs encouraging local farming. Different mines obviously mine different ores, but, for example, lead and silver are frequently found together.

-

Foresters

-

Foresters are more or less settled at the edge of forests, at locations from which timber can be moved by navigable water; again in specialist settlements. In addition to timber, foresters hunt and produce both meat and furs, so have less need for other food producers locally.

-

Farmers

-

Farmers are settled. Farmers occupy standard runrig plots, but because they don’t employ journeymen or apprentices, and don’t have workshops, the plots are mostly open with little building. Most farmers are ‘mixed farmers’, producing cereals, meat, eggs and milk. Some will be more specialist. Farm produce, taken broadly to include orchardsfolk, include:

-
    -
  • meat
  • -
  • milk and milk products
  • -
  • hides
  • -
  • eggs
  • -
  • cereals
  • -
  • root vegetables, onions, etc
  • -
  • peas and beans
  • -
  • leaf vegetables
  • -
  • fruits
  • -
  • fibres: linen, hemp and silk (from silk-moths in mulberry orchards)
  • -
  • possibly other stuff I’ve forgotten.
  • -
-

Farmers are all basically subsistence farmers, farming first to feed their own household and selling only surplus in the market.

-

Crafts

-

Crafts generally process primary goods into secondary goods - whether intermediate stages or final consumer items. Some elite ‘crafts’ deal with abstract primary goods like law and knowledge, and they may be seen as somewhat separate.

-

A master craftsperson may occupy a standard runrig plot, much like a farmer’s plot. Like a farmer, a poor master crafter household will cultivate part of the plot to produce food for the house - at least grow vegetables and keep hens. However, as the crafter takes on apprentices and journeymen - and gets richer - more buildings will be required as accommodation, workshop space and materials stores.

-

Also, Tchahua is much more a gold-rush town than an organic, grew over hundreds of years sort of town, so it is not ex-runrig; and additionally the original settlement was probably along the river bank, land which has now been redeveloped as warehouses and as rich merchant residences. Generally, town house plots are small from the get go.

-

Hans’hua is again an exception from normal organic development, as it has no agricultural land close to the city at all.

-

Generally, primary goods aren’t transported over land - because overland transport is expensive, by the time they’ve been transported they’re no longer low cost goods. So often the craftspeople who process primary produce into at least commodity intermediate forms will live close to the source of the primary goods.

-

So, for example, the town(s) where the shepherds hold their shearing fairs will tend to have a lot of weavers. While around mines there will be smelters producing ingots and bar stock to be marketed to smiths all over the place, there will also be smiths close to the mines producing commodity tools and weapons.

-

See the table in Populating a game world.

-
\ No newline at end of file diff --git a/docs/codox/genetic-buildings.html b/docs/codox/genetic-buildings.html deleted file mode 100644 index 4274e19..0000000 --- a/docs/codox/genetic-buildings.html +++ /dev/null @@ -1,46 +0,0 @@ - -Genetic Buildings

Genetic Buildings

-

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

-
    -
  • elevation — derived from the map location by interpolation from grid. The actual interpolation algorithm is probably some form of spline, but in any case it’s the same one as for everything else.
  • -
  • orientation of slope — derived by taking altitude at four corners of a 100 metre square centred on the seed point, and then taking the highest and lowest of these. If highest is northwest, lowest is southeast, the slope is considered to be oriented southeast; if highest is northwest and lowest southwest, the orientation is considered to be south, and so on. Eight orientation values are sufficient.
  • -
  • gradient of slope — derived from the difference in altitude across the same 100 metre square
  • -
  • neighbours — number of other buildings in 500 metre square centred on seed point.
  • -
-

The reason orientation is relevant is exactly the same as the reason it’s relevant to trees. West facing slopes are assumed wetter (coriolis winds), so grow trees better, so better availability of better quality timber, so a higher probability of timber as a primary building material. But also, in areas of higher rainfall, rain shedding is an important consideration, so a higher value is placed on pitched roofs.

-

So you have the following general relationships

-
    -
  • west (or southwest or northwest) facing, moderate gradient, moderate altitude: high probability of timber construction; construction techniques involving large timbers (e.g. cruck frame); greater probability of shingled roofs;
  • -
  • west (or southwest or northwest) facing, moderate gradient, higher altitude or northern latitude: high probability of building styles adapted to straight-trunk conifers, e.g. log cabins, stave buildings; greater probability of shingled roofs;
  • -
  • east facing, generally: greater probability of flat roofs;
  • -
  • steeper gradients: greater probability of stone buildings (steeper gradients = shallower topsoil and greater ease of quarrying = access to stone); greater probability of slate roofs;
  • -
  • shallower gradients: greater probability of mud, cobb, brick or wattle-and-daub as building materials; greater probability of thatch or turf roofs;
  • -
  • Higher number of neighbours: higher probability of two or more stories;
  • -
-

These factors allow classes of building to be selected. Having got past that point, we need to consider how classes of genetic building can work.

-

Rectangular genetic buildings

-

Some genetic buildings will have cells with rectangular plan. This doesn’t mean that genetic buildings are required to have rectangular cells, but they provide a starting point for discussion. For a given class of building (for example, timber frame), a number of prototype models of cells exist. These models are fully realised three dimensional models. Possibly all cells belonging to the building class have two open ends, and end walls exist as separate models; equally possibly, some cells have only one extensible end. In any case, a building will not normally comprise a single cell. Normally it will comprise multiple cells. So the cells belonging to a particular building class will be designed to ‘plug together’. Multi story building classes will have some cells which are specifically ground floor only (flat ceiling, no roof), and such cells will always have an upper floor cell added above them. Where an upper floor cell has an outside door, an outside stair will automatically be added.

-

Cell mutability

-

Although cell models are repeatedly reused they don’t have to look the same every time they are reused. Within limits, every cell can be stretched along any of its three axes. Obviously, the degree of stretch on a given axis for every cell in a given building must be the same, otherwise they won’t line up. Another mutable area is skinning — it may be possible to have alternate skins for cells, and even if there are not alternate skins, it will be possible to mutably darken, lighten or otherwise tint the skins used, within ranges which are appropriate to the materials represented. Obviously there are limits to stretching — timber comes in only such a length, stone lintels will only support such a span.

-

Functional cells

-

Some trade functions require cells of particular kinds. Thus a smith needs a working building with one cell which is explicitly a forge. A water mill must have one cell which explicitly houses the mill gear. A forge cell or a waterwheel cell should never appear in weavers workshop. But most cells are not dedicated in this way. A bedroom cell is a bedroom cell, more or less; wealth may alter how it is furnished, but it may appear in any dwelling. Similarly, except for the very wealthy, a living cell is pretty much a living cell. And any building may incorporate a storage cell. If a given building class has twelve distinct ‘generic’ cells’ and half a dozen distinct functional cells, and if buildings in the class average four cells each, then ignoring variance caused by skin mutability, a street of fifty buildings could have every one different.

-

Reproducibility

-

It’s critical that if a player visits a location, leaves it, and then returns, the buildings should not all have changed. So it must be possible to repeatedly reproduce the building at the location (this, of course, applies to other procedural scene dressing, such as trees, roads, boundaries, bridges and so on). This is possible if a deterministic random number generator is used which is seeded from the latitude and longitude attributes of the location. Other attributes which should be cached on the seed even though they are determined procedurally when the building is first instantiated include building class, purpose, and wealth. Using these attributes and the deterministic random number generator, the same building can be reproduced on the same site each time it is visited, with a very small amount of data stored.

-

Buildings will normally be built at the edge of the associated land holding. If an edge of the land holding adjoins a road, then the building will be built with one long side aligned to the road. Otherwise, the building will be built at right angles to the orientation of the slope. The orientation will be ‘frozen’ once the building has been instantiated and will be cached on the seed.

-

So, to build a building, use the following algorithm:

-

Seed the random number generator with latitude and longitude

-
while ( building value is less than wealth) {
-   select a cell selected from the building class using the next number from the random number generator modulo the number of generic cells in the class;
-   if the selected cell is not inappropriate to the building's function {
-       fit the cell to the building at the point determined by a deterministic algorithm
-       furnish cell using the random number generator to determine
-       furnishing types and locations from a selection appropriate to the cell
-       if the selected cell was not a top story cell {
-            add a requirement that the next cell selected must be an upper story cell}
-   }
-}
-
-
\ No newline at end of file diff --git a/docs/codox/modelling_trading_cost_and_risk.html b/docs/codox/modelling_trading_cost_and_risk.html deleted file mode 100644 index 82372fa..0000000 --- a/docs/codox/modelling_trading_cost_and_risk.html +++ /dev/null @@ -1,8 +0,0 @@ - -Modelling trading cost and risk

Modelling trading cost and risk

-

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?

-

Obviously the more we model, the more compute power modelling consumes. If the core objective is a Role Playing Games as currently understood, then there is no need to model very complex trade risk assessment behaviour.

-
\ No newline at end of file diff --git a/docs/codox/naming-of-characters.html b/docs/codox/naming-of-characters.html deleted file mode 100644 index c19bf56..0000000 --- a/docs/codox/naming-of-characters.html +++ /dev/null @@ -1,32 +0,0 @@ - -Naming of Characters

Naming of Characters

-

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

-

Based on, roughly, historical name patterns like

-

Archibald (personal-name) the Grim (epithet), Earl (trade-or-rank) of Douglas (location)

-

Where

-
    -
  1. -

    epithet is a prefix based on some notable feature or feat of the character. Most characters won’t have an epithet, unless they have some notable feature or they’ve done something notable. If a character does something notable in the course of the game, they will subsequently gain an epithet; ‘notability’ may be measured by how many times the event is transmitted through the gossip network.

    -
  2. -
  3. -

    clan is special to the Western Clans, although people from the Great Place may possible use the name of their house similarly.

    -
  4. -
  5. -

    personal-name is chosen from one of a limited set of limited sets; different cultural groups will have different (possibly overlapping) sets of names, but within each set there will only be a limited subset

    -
  6. -
  7. -

    trade-or-rank is just that. “Smith”, “Miller”, “Ariston”, “Captain”. Either only master craftsfolk have the trade-or-rank name of their craft, or we distinguish between ‘Calon the Smith’, who may be a journeyman, and ‘Calon the Master Smith’, who is a master.

    -
  8. -
  9. -

    location is the name of a location; a village, town, city or province. The location which forms part of a character’s name is the location where there current home is, not the location where they were born or where their ancestors came from

    -
  10. -
-

Full names will almost never be used - only, perhaps, in extremely formal circumstances. The form of a name used will depend on context, and will generally be just sufficient to disambiguate the character in the context.

-

If the speaker is in Sinhua and referring to someone from Sinhua, they won’t refer to them as ‘of Sinhua’.

-

If everyone present is a bargee and the speaker referring to someone who is also a bargee, they won’t refer to them as ‘the bargee’.

-

The question asked influences the context: in answer to the question ‘who is the best sword smith’, the answer will not be ‘Calon the Smith’ but ‘Calon of Sinhua’.

-

Patronymics/matronymics will not normally be used of adults (although they may be used of apprentices and journeymen.

-
\ No newline at end of file diff --git a/docs/codox/on-dying.html b/docs/codox/on-dying.html deleted file mode 100644 index 030f121..0000000 --- a/docs/codox/on-dying.html +++ /dev/null @@ -1,17 +0,0 @@ - -On Dying, and Injury

On Dying, and Injury

-

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.

-

Time has passed; events in the game world have moved on. You can talk to your saviours about it. You have lost a lot of strength, and most of the gear you were carrying. You must do whatever it is you do within the game mechanics to rebuild strength, and to acquire more gear. Significantly you have acquired a debt of honour to your saviours, which they may call on later. You almost certainly have new scars, and might possibly have some lasting effects (although how that interacts with other game mechanics might be tricky).

-

So who are the non-enemies? It depends on context. If you have a party, and some of that party survived the fight, it’s your party. Otherwise, if you’re in a populated place, it’s locals. If it’s on a road or other route, it’s passing merchants. If you’re in the wilderness, a hunting party. It’s a bunch of non-hostiles who might reasonably be expected to be around: that’s what matters. It’s about not breaking immersion.

-

Obviously losing a fight must have weight, it must have meaning, it must have in-game consequences; otherwise it is meaningless.

-

Injury

-

Similarly to death, injury must have meaning. Any injury takes time to recover from. It takes a certain amount of time if you’re able to rest somewhere safe, and considerably longer if you’re not. If you fight while injured, you’ll have less strength, less stramina, and probably also less agility. Depending where you’re injured, there will be certain things you cannot do. If you fight while injured, also, your recovery time will be extended, even if you take no further injury.

-

Some serious injuries will lead to permanent scarring, and permanent loss of agility; you’ll be just slightly slower in fights.

-

It should be said that Kenshi — a game I’ve only recently become aware of and greatly admire — handles all of this extremely well, and is worth studying.

-

Reciprocity

-

If the player is going to depend on good samaritans for rescue after losing a fight, then there must be at least a social convention that people should assist people found injured on the wayside. Consequently, if the player fails to do this, that should in itself become a ‘gossip’ event which will lower the player’s reputation with non-player characters.

-

On the other hand, helping NPCs found injured at the wayside can be another category of organic quest, as a special subcategory of an escort quest.

-
\ No newline at end of file diff --git a/docs/codox/sandbox.html b/docs/codox/sandbox.html deleted file mode 100644 index 7803bcb..0000000 --- a/docs/codox/sandbox.html +++ /dev/null @@ -1,41 +0,0 @@ - -Sandbox

Sandbox

-

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

-
    -
  • Where is the nearest craftsman of this craft?
  • -
  • What price can I expect to get for this item in the local market?
  • -
  • What news have you heard recently?
  • -
  • Where does this person from your village live?
  • -
-

and where there’s a sufficiently sophisticated and robust economy simulation that buying goods in one market and selling them in another is viable.

-

The original BBC Micro space trading game Elite had very little more in terms of game mechanics than a sandbox with a means to navigate it and an economy simulation, which wasn’t even nearly as sophisticated as the one I have working now. Yet that combination resulted in engaging game play.

-

Main sandbox roles

-

The idea of a sandbox is that the player character should be able to do pretty much anything they like within the mechanics of the game. From that, it seems to me reasonable that the player ought to be able to do more or less everything a non-player character can do. But creating the game mechanics to make each additional task doable takes time and investment, so there’s a need to prioritise.

-

So, as Elite did, I propose to make the first available sandbox roles

-

Merchant

-

Someone who travels from city to city, buying goods cheap in one and selling them for more in another; and

-

Outlaw

-

Someone who intercepts and steals from merchants (and may also attack outlying farms and villages)

-

Second tier playable roles

-

The next tier of playable roles rotates around issues arising from the mercantile ecosystem.

-

Aristocracy

-

Aristocrats are basically settled outlaws who seek to establish a monopoly on extracting taxes from inhabitants and travellers in a particular region by driving out all other outlaws. Within the domain of an aristocrat, you have to pay tax but you’re reasonably safe from being attacked by other outlaws and losing everything. Aristocrats may also maintain and improve roads and bridges and do other things to boost the economy of their territory, may expand into adjoining territory with no current aristocratic control, and may wage war on other aristocrats.

-

An outlaw ought to be able to become an aristocrat, by dominating an ungoverned area or by defeating an existing aristocrat.

-

Soldiery

-

Soldiers, like aristocrats, are basically on the same spectrum as outlaws. Outlaws may hire themselves out to merchants as caravan guards, or to aristocrats as soldiers. Soldiers or guards, falling on bad times, may revert to outlawry.

-

Routine, Discretion and Playability

-

There’s a term that’s used in criticism of many computer games which is worth thinking about hard here: that term is ‘farming’. ‘Farming’, in this sense, is doing something repetitive and dull to earn credits in a game. Generally this is not fun. What makes roles in a game-world fun is having individual discretion — the ability to choose between actions and strategies — and a lack of routine.

-

Most craft skills — especially in the learning phase — are not like this, and crafts which are sophisticated enough to be actually engaging are very hard to model in a game. Learning a craft is essentially, inherently, repetitive and dull, and if you take that repetition out of it you probably don’t have enough left to yield the feeling of mastery which would reward success; so it doesn’t seem to me that making craft roles playable should be a priority.

-

Cruise control

-

One of the most enjoyable aspects of The Witcher 3 — still my go-to game for ideas I want to improve on — is simply travelling through the world. Although fast travel is possible I find I rarely use it, and a journey which takes fifteen minutes of real world wall clock time can be enjoyable in and of itself. This is, of course, a credit to the beautiful way the world is realised.

-

(It’s worth noting that Kenshi, a game I’m coming to greatly admire, does not allow fast travel at all, but has an equivalent of ‘cruise control’ — you can set a destination and then accelerate time and simply watch as your characters journey).

-

But nevertheless, in The Witcher 3, a decision was made to pack incident fairly densely — because players would find just travelling boring. This leads to a situation where peaceful villages exist two minutes travel from dangerous monsters or bandit camps, and the suspension of disbelief gets a little strained. Building a world big enough that a market simulation is believable means that for the individual, the travel time to a market where a particular desired good is likely to be cheaper becomes costly in itself. Otherwise, there’s no arbitrage between markets and no ecological niche for a merchant to fill. The journey time from market to market has to be several in-game days.

-

An in-game day doesn’t have to be as long as a wall clock day, and, indeed, typically isn’t. But nevertheless, doing several game days of incident-free travel, even in beautiful scenery, is not going to be engaging — which implies a fast-travel mechanic.

-

I don’t like fast travel, I find it a too-obvious breaking of immersion. Also, of course, one of the interesting things about a game in a merchant/outlaw ecosystem is the risk of interception on a journey. The Dragon Age series handled interrupted travel in ‘fast travel’ by randomly interrupting the loading screen you get when moving from location to location in Dragon Age’s patchwork worlds by dumping you into a tiny arena with enemies. That’s really, really bad — there’s no other way to say this. Everything about it shouts artifice.

-

So I’m thinking of a different mechanism: one I’m calling cruise control.

-

You set out on a task which will take a long time — such as a journey, but also such as any routine task. You’re shown either a ‘fast forward’ of your character carrying out this task, or a series of cinematic ‘shots along the way’. This depends, of course, on there being continuous renderable landscape between your departure and your destination, but there will be. This fast-forward proceeds at a substantially higher time gearing than normal game time — ten times as fast perhaps; we need it to, because as well as doing backgound scenery loading to move from one location to another, we’re also simulating lots of non-player agents’ actions in parts of the world where the player currently isn’t. So a ‘jump cut’ from one location to another isn’t going to work anyway.

-

The player can interrupt ‘fast forward’ at any time. But also, the game itself may bring you out of fast forward when it anticipates that there may be action which requires decision — for example, when there are outlaws in the vicinity. And it will do this before the player’s party is under immediate attack — the player will have time to take stock of the situation and prepare appropriately. Finally, this will take place in the full open world; the player will have the option to choose not to enter the narrow defile, for example, to ask local people (if there are any) for any news of outlaw activity, or, if they are available, to send forward scouts.

-
\ No newline at end of file diff --git a/docs/codox/sexual-dimorphism.html b/docs/codox/sexual-dimorphism.html deleted file mode 100644 index d254cdc..0000000 --- a/docs/codox/sexual-dimorphism.html +++ /dev/null @@ -1,37 +0,0 @@ - -Sexual dimorphism

Sexual dimorphism

-

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.

-

When a man and a woman have sex, there’s a non-zero chance that the woman will get pregnant. There’s a zero chance that the male will get pregnant.

-

A woman can typically give birth to of the order of twelve children in the course of her life, and each childbirth involves a non-zero risk of death. If modelling the sort of bronze-age-to-late-medieval cultures I’m generally considering, there are no available reliable methods of contraception, although their may be, for example, known spermicidal or abortifacient spells or potions. If it’s abortifacient, that’s pretty unpleasant for the woman, too.

-

Children, especially when young, are very vulnerable and need protection. Children with good protection are much more likely to survive to adulthood. Raising children involves a fair amount of work.

-

For all sorts of reasons, some of which are clearly cultural but others of which are fundamental, it’s much easier for men to walk away from responsibility for their children than it is for women. For example, considering a pre-modern world, women would always know for certain which children were theirs, and men would not.

-

For a woman, consequently, the best breeding strategy is to have sex only with men who will be ‘good fathers’, where there are three essential parameters to “good fathers”:

-
    -
  1. Desirable genetic traits;
  2. -
  3. Preparedness to stick around and share the work;
  4. -
  5. Ability to provide and protect.
  6. -
-

The essential trade-off in the traditional western marriage is that the man gets to have sex, and the woman gets to have protection for her progeny.

-

Another significant point is that women’s ability to bear children ceases at a much younger age than men’s ability to father them.

-

Why have sex at all?

-

If a character has ‘having children’ - the Ancestor aspiration, in my typology - as their key aim, then they will want to have sex. But to have children in this sense is to have acknowledged children, so while a male character may be motivated to have multiple female partners, he will never the less have some degree of long term committment to them, and will want both to feel confident that the children are his and to be recognised by their father.

-

From the point of view of seeking to become an Ancestor, there is little benefit to the woman in having multiple partners, except in very harsh environments. It will be easier to give one partner confidence that all your children are his, and while a man can increase his number of potential progeny by having multiple wives, mistresses or other classes of long-term female sexual partners, a woman cannot.

-

Why have children?

-

In modern Scotland, I have met a lot of women with a strong drive to have children for the sake of having children, where the best explanation they could give is that it’s instinctual; it may be so. But beyond that, in many cultures children provide their (acknowledged) parents with care and security in their old age, may tend their graves and perform belief-related services after they die, and carry on their name and their stories into the future.

-

Not everyone wants to have children; in thinking about the driving aspirations of game characters, I view having children one of six potential key aspirations.

-

Why else have sex?

-

Sex, done right, is an extremely pleasant pastime. Sex can also be used to create and maintain bonds of committment, to demonstrate social status, to defuse tense situations, and transactionally in many ways, both formal and informal.

-

For women, sex with other women carries with it no risk of pregnancy, so can be enjoyed or used for any of these purposes in very much the same way as it can by men; in other words, particularly for women, homosexual sex can be more lighthearted and carefree than heterosexual sex. To what extend our notions of homosexuality and heterosexuality are cultural I simply don’t know. But because no children will result, a woman can afford to be more promiscuous with other women than she can with men.

-

Women and warrior/adventurer lifestyles

-

Generally speaking, people do not want to take their children onto a battlefield. If you’re going to have a game world in which women significantly take on warrior or adventurer roles, then you must either have

-
    -
  • A culture which expects female warriors to be celibate; or
  • -
  • A culture with access to and acceptance of safe and reliable contraception or abortion; or
  • -
  • An acceptance of leaving infant children with grandparents, other relatives or foster carers for long periods;
  • -
  • A system of long term creches;
  • -
  • Any combination of the above.
  • -
-
\ No newline at end of file diff --git a/resources/data/crafts.edn b/resources/data/crafts.edn index e69de29..74141d5 100644 --- a/resources/data/crafts.edn +++ b/resources/data/crafts.edn @@ -0,0 +1,5 @@ +{:blacksmith {:workplace :forge + :supplies #{:axe :chisel :plough :knife} + :customers #{:farmer :cook} + :min-customers + :trade :smith}} \ No newline at end of file diff --git a/src/cc/journeyman/the_great_game/proving/core.clj b/src/cc/journeyman/the_great_game/proving/core.clj index 7a01917..ad61c3b 100644 --- a/src/cc/journeyman/the_great_game/proving/core.clj +++ b/src/cc/journeyman/the_great_game/proving/core.clj @@ -4,7 +4,8 @@ [mw-engine.drainage :refer [run-drainage]] ;;[mw-engine.flow :refer []] [mw-engine.heightmap :refer [apply-heightmap]] - [mw-parser.declarative :refer [compile]])) + [mw-parser.declarative :refer [compile]] + [wherefore-art-thou.core :refer [*genders* generate]])) (defn get-drainage-map "Given this `height-map` (a monochrome raster) and optionally this @@ -27,6 +28,39 @@ ([height-map _rainfall-map] (get-biome-map height-map))) +(def ^:dynamic *life-goals* + "TODO: This definitely doesn't belong here, and will be moved." + [:ancestor :citizen :climber :conqueror :explorer :hoarder :master]) + +(defn- create-npc + ;; TODO: this function needs not only to create a fully formed NPC, but + ;; persist them in the database being built. This is just a sketch. + [prototype] + (let [g (or (:gender prototype) (rand-nth (keys *genders*))) + p (generate g)] + (merge {:age (+ 18 (rand-int 18)) + :disposition (- (rand-int 9) 4) ;; -4: surly to +4 sunny + :gender g + :goal (rand-nth *life-goals*) + :family-name (generate) + :occupation :vagrant + :personal-name p} prototype))) + +(defn- populate-npcs + [prototype] + (let [family (generate)] + (into [] (map #(create-npc (assoc prototype :family-name family :occupation %)) + (concat [:settler] (repeat 3 (:occupation prototype))))))) + +(defn populate-cell + [world cell] + (let [npcs (case (:state cell) + :camp (populate-npcs {:world world :cell cell :occupation :nomad}) + :house (populate-npcs {:world world :cell cell :occupation :farmer}) + :inn (populate-npcs {:world world :cell cell :occupation :innkeeper}))] + (if npcs (assoc cell :npcs npcs) + cell))) + (defn populate-world "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 @@ -47,7 +81,9 @@ ;; what I return at the end of this is a structure which contains keys ;; to a database I've stored all the NPCs in, and a (vector) roadmap of ;; all the roads that have been created, and a (vector) drainage map. - {:world world})) + + {:world (map #(populate-cell world %) world) + :roadmap []})) (defn get-road-map [populated-world])