Generating Hex Maps
Christer Enfors at Hexed Press created a procedure for generating hex maps.
It uses the basic notion of altitude to make hexes each have a similar altitude to the next hex. The result is that mountains tend to be next to mountains or hills, and hills might generate a forest as the next hex. The entire thing results in a more natural feel than a completely random hex map.
However, it struggles with rivers. The first problem is, there are no rivers. The next problem is that if we add a river, we would either have to modify a lot of existing hexes (as our new river floods through them) or have the river end in a dead-end stump all too often.
I've been thinking about a potential solution: generate rivers first, and derive the rest of the map from them.
The rules for rivers are quite reliable.
- They start at a mountain or hill.
- Going downriver, they may join with other rivers.
- Going upriver, they may split.
- They end at the sea.
This old map of Scotland shows the rules in action.
Now we can take the point of view of a hex with a river-segment - a river-piece which goes to somewhere unknown to somewhere unknown.
Hexes immediately suggest a six-sided die, as each hex on an infinite plain has six neighbours. 'Mapping' the neighbours to a die produces this nice hex flower, where we put forests, hills and plains on our infinite plain, mapping die to hexmap co-ordinates.
Down we go
We can kick off with a die-roll to see where the river flows to.
Rolling again each hex sounds very dull, so I'm going to declare it moves 1D6 hexes downriver until it bumps into something:
- a loch,
- the sea,
- or another river (at which points it joins).
We know that it won't go 'down to mountains' and get boxes in, as long as there are no routes to the mountains which have no rivers in a 3-hex tunnel.
And back again
Going up-river, rivers split, becoming more shallow, until they stop by the foot of a mountain. So the list of actions is pleasingly short. They can either:
- split into two,
- find a loch,
- stop at a mountains.
I think we can be sure that no river will become 'boxed in', because the last remaining hex where a river might run to can always be a hill.
Outstanding Hex-Mapping
There's no system yet, just the necessary rules.
For the Rivers
We still need to find the shortest, easiest way to determine where a river's flowing, depending on the options. It's easy to state some rule, but difficult to show this is the easiest (in terms of remembering rules, rolling dice, et c.).
This should probably be combined with the rules on hitting lochs.
It's also unclear if the game should suggest where a river going down-hill joins with others, or if we only generate the up-hill part, and rely on mountains to make more rivers, which will join with those below.
For the Mountains
The rules could just mimic rivers - 'draw more mountains for 1D6 hexes' - so the mountains will tend towards straight lines (as mountains sort-of do).
For the Rest
I don't know where to go - perhaps bogs, rivers, et c. will find a clear solution once enough rivers go onto the map. I'm tempted to use entirely deterministic mechanics for this, e.g. 'anywhere without a river within 2 hexes becomes a bog', or 'any empty hex with only 1 river becomes a hill'. Deterministic mechanics are fast, and we don't need to add more randomness when the rivers already provide randomness.
How Many Hexes?
This method lacks the elegance of determining 'just the next hex', but I don't think that's a problem. Anyone standing on a hill, tower, or mountain can see over thirty miles around - even if our hexes are 10 miles wide, anyone with a good place to stand can already see 3 hexes in all directions, so the map needs to fill in seven hexes wide at an absolute minimum.
For a more concrete example, here's a photograph taken from Avala, which stands around 500 metres (~2000') above sea-level. I don't know how far you can see, but if Avala had sea nearby, you'd see the sea from around 100km away (50 miles).