Some news about Medieval 2 random scenario generator I wrote about yesterday.
Today I fixed most of the known bugs in scenario builder (except AI passivity, which would require playing an actual campaign to figure out), and I was looking at JRuby options for a simple GUI so everybody can enjoy scenario builder, and customize their Concentrated Vanilla experience any way they want - including simply turning all options off and playing vanilla with bugfixes and random scenarios if that's your thing.
Sadly making GUIs looks like a lot more work than expected. I got so used to the happy universe of HTML5 and jQuery on frontend with Ruby on Rails on backend that my first contact with Java GUI libraries was like hitting a wall. I'll figure something out eventually - in the worst case I'll just make the script start web browser and present you the mod customization form in browser window.
Anyway, scenario builder.
How to make good random maps
Assigning settlements completely at random means a few fun campaigns, but it confuses AI too much, and doesn't really lead to much strategic gameplay since whoever you just attacked probably can't respond since all their other settlements are in completely different part of the map.
So my next idea was % cluster / % random allocation, but there are many things I don't like about it. Here are some ways how cluster algorithm fails them, while random allocation worked reasonably:
- 5 settlements have no neighbours and 6 have only one. Cluster allocator assigns most of them to rebels.
- There are some false neighbours like Dongola / Benghazi, Tripoli / Timbuktu, Arguin / Marrakesh - they are next to each other on a map but you'd need to move through unpassable desert.
- Since factions were allocated in order, factions late on the list were most likely to get scattered settlements.
- Very often huge areas are all rebel, while there are no rebels in other places. On 67% cluster map there are no rebels in Spain, France, and Germany, but there's a massive 11-region rebel cluster in Anatolia and Balkans, and second 7-region cluster on South/East Baltic Sea coast. This is not due to algorithm since rebels just got whatever was left. Random chance will lead to some clusters, but rebel clustering is far too strong.
So I tried many things like:
- Allocating settlements to different factions in random order, one at a time.
- Allocating settlements to rebels first rather than last (without clustering), or one at a time as if they were normal faction (except without clustering)
- Making rebels not take settlements with 0/1 regions if possible, so factions would get them instead.
- Using XY distance between cities instead of map neighbourhood, or some combination of both.
- Fully at random, allocate one settlement to each faction, and all rebel settlements.,
- Then allocate other settlements in random order. Some % will be neighbours of existing settlements, the rest will be random.
- If there are no neighbours available since all have been allocated to other factions, try neighbours-of-neighbours instead.
- If neighbours-of-neighbours still doesn't work, just do random allocation. (because of this % in this post are much higher than in previous post - you actually get significant random allocation because no other is possible)
- Neighbours of a settlement are 5 geographically closest settlements. Then we add arrows back, but only if they are geographically connected. This seems to work best.
100% clustering (only random when forced)
I've also been asked about hotseat mode. As far as I understand, this would require switching from Medieval 2 engine to Kingdoms engine with retrofit mod as base. I'll probably do that some day, but for the time being the mod will most likely stay a single player only thing.