Cities and civilizations need resources to survive and thrive. Our case is no different. So, before placing any cities, we need to generate the resources that the world uses. I've decided to split the resources into 3 groups: food, basic materials and rare materials: the first two are found in varying quantities pretty much everywhere. Civilizations can immediately use such resources. Rare materials, on the other hand, are not easily found, they need to be discovered first, and they also need to be mined. On the plus side, there will be enough incentive to explore, discover and mine such materials (wealth, influence, advanced structures and items, etc).
From a macro point of view, each tile of the overworld has a the following resource information:
- Food: Used to feed population. Obtained from sources such as vegatation and wildlife. Value: [0,255]
- Basic materials: Used for buildings and construction of everyday items. Obtained from environment. Encompasses materials such as stone/leather/wood/iron. Value in [0,255]
- Rare materials: Special, difficult to find/mine materials, used for magic and/or construction of advanced buildings/items. Examples include silver, gold, mithril, crystal, gems, etc. A value of [0,1] per rare material type.
So, each tile resource can be represented with a 32-bit value: 8 bits for food, 8 bits for basic materials and 16 bits for rare materials (for a maximum of 16 rare materials). Several rare materials can co-exist at the same tile.
Rare material traits
A rare material, with regards to generation of a map that contains them, has the following main traits:
- BiomeSuitableRange: This is a collection of ranges per biome parameter, e.g. temperature, humidity, elevation, water type, etc. So, for example, some materials can be spawned only in high altitude areas of extreme cold, etc.
- Chance: This is the chance of a rare material spawning at a suitable tile. So, the effective spawning chance is chance multiplied by the probability of a tile being suitable.
Tile resources map generation
In order to generate this "tile resources" map, we need to have calculated the biome map first.
The first step in the process is to calculate all the candidate tiles per rare resource type. At this stage, we also calculate the food and materials per tile, as a function of the biome. I'm currently using an extremely naive mapping of wildlife density to food and vegetation to materials, but that should change later on.
We then shuffle the candidate list and pick the N first points, where N = max(chance * totalCandidateNum, min(1,totalCandidateNum)). So, if we have no candidates, we won't generate any. If we have at least 1 candidate, we should generate at least one point. And that's it, really! Pretty simple, but does the job. Here's an example of a rare material's distribution; there only tens of them in the whole map, so it could be a quite coveted material to be able to mine and get access to.