Sid Meier's Civilization is a strategy game developed and published by MicroProse in 1991. The premise is deceptively simple: you start a civilization and attempt to become the best one in the world. However, the game has enormous depth and games can often take many hours to complete. The game was hugely successful and is credited with popularizing the "4X" genre of strategy video games.
Sync info
SHA-1 Filename
26c8344b139b330193d3f86de48dfb9853a41c94 disk01.img
d62b42ca840cdc20379abeeaefaa4718f7720f68 disk02.img
ee3e054c335139e15a0f4642bfaefb4e8a850391 disk03.img
545d41895ece3c21069daa8da3bbe3b08a3fe5d1 disk04.img
Make an .xml in the multidisk bundler with these four disks, and then run the .xml as a ROM.
Goal
There are three different win conditions: one is to eliminate all other civilizations, one is to colonize Alpha Centauri, and the last one is to have the best civilization score at the end of time. The first one is obviously going to be much faster, so we're going with that.
Map and city generation
The generation of everything is done in a couple of different phases. First of all, the RNG is seeded based on the current system time down to the second. The map is generated during the intro sequence, and then the enemy city locations are generated just before the map is revealed for the first time.
The enemy city spawning is bizarre. First off, the game will only generate the first two at a time. The third one is generated once one of the other enemies are attacked, and then a FOURTH (???) one is generated after the second one is attacked, despite picking 3 CPU opponents.
Getting the ideal setup
Finding a good setup required quite a bit of brute forcing. Not only do you need some decent geography (with some resources nearby), but everybody must start on the same continent, with enough room for the 3rd and 4th cities to spawn as well.
I made a script to run through thousands of different starting system times to find a suitable habitat for our speedrun. The script would not be able to figure out if the starting cities were connected by land (I'm not quite that advanced yet) but would be able to tell how far apart they are. I looked at two different setups:
- Cities can be hit in a straight line: one unit starts at home and attacks the first city, then the second.
- Home city is between enemy cities: one unit attacks the first city, home produces a second unit which attacks the second city.
The game will obviously not spawn your city right next to an enemy city. There seems to be some set minimum distance at around 7 squares.
Because units can move diagonally, the minimum amount of moves between cities is theoretically whatever the highest distance is out of the x and y distance between the two cities, barring any water being in the way. I calculated these distances between each seed and marked any where the theoretical minimum number of moves would be less than 20. I ended up choosing a seed with the home city between the enemy cities, as well as very favorable resources available at the start and two very convenient villages nearby as well.
Even with a good setup, we're not out of the woods yet. The two other cities must be generated in a good place, and you must get reasonable RNG when attacking them, otherwise everything else is pointless. RNG manipulation is fairly limited and is mainly done through waiting an extra turn to attack the cities. Despite these limitations, the other two cities are spawned in good locations on the same continent with fairly minimal waiting.
Relevant mechanics
Difficulty
The game difficulty is irrelevant for this run. The movie syncs on any difficulty, so the hardest one, Emperor, is chosen.
Villages
Villages are a random element that mostly helps you, but can spawn barbarians sometimes. The outcome we're looking for is for it to spawn a friendly unit, specifically the Cavalry. The Cavalry is a horseback unit that is further down the tech tree that has 2 movement points instead of 1, which lets us move twice per turn depending on the terrain. This will obviously let us take fewer turns to get to the destination and requires less screen-switching between units.
Resources
Resources are what's needed to produce units in this game. There are two ways resources are obtained in this run: they are either bought or cultivated from nearby squares. The more resources you gather, the faster you will produce units.
Battles
The chance of a successful attack is fairly straightforward to calculate: take the attacker's attack and divide it by the attacker's attack and the defender's defense added together. Militia have 1 attack and defense, so the odds of a successful attack against another Militia are at 50%. Cavalry have 2 attack so they have better odds at 66.6%.
Movement
Units can have different movement bonuses that dictate how many times they can move each turn. Different terrain has different movement penalties as well. Militia have a movement stat of 1 so they can only move once per turn, but Cavalry have a movement stat of 2 which lets them move twice, as long as the terrain is favorable enough.
Timeline
Setup
EGA is chosen as the graphics setting. VGA has faster map generation but has fade-in and fade-out for many scenes which wastes a ton of time. Choosing 3 opponents, Emperor difficulty, and the default Roman tribe.
4000 BC
Moving up one tile for a better city location.
3980 BC
Building the first city here offers a bit more for resources. There is a nearby Plains tile with horses that a worker is moved to. While we gather enough resources to make a second Militia unit, we can build our first Milita unit by buying the resources required. It needs 50 gold, which is exactly how much we start with.
3960 - 3900 BC
Moving up towards the first enemy city.
3880 BC
Interacting with the village spawns a friendly Cavalry unit that will let us move twice per turn, on top of being superior offensively. Our second Milita unit is also created and starts moving towards the other enemy city.
3860 BC
The second Militia unit quickly reaches another village and spawns another friendly Cavalry unit. This unit will deal with the other two cities. The first Militia unit waits to attack Berlin for RNG manipulation.
3840 BC
The cavalry units start moving quickly towards their targets. Any idle unit will be told to fortify from here on out and will not need to await orders.
3820 BC
Now that all the needed Militia are made, it's best to go into Rome's city display and reallocate resources to prevent any more from being produced. This will save some time later. Also, Berlin is finally attacked. This results in a very favorable spawn location nearby for Germany's second city.
3800 - 3740 BC
The second Cavalry stops in front of Babylon for RNG manipulation. Paris is taken to eliminate another opponent, and then Babylon falls after. This makes the Zulu city spawn in a great location next to the second Cavalry.
3720 - 3660 BC
The second Cavalry quickly moves down and takes Zimbabwe to conquer the earth.
Possible improvements
With a game like this, there could be potential improvements all over the place. The layout of the first and second cities could be a little bit closer. There are better areas to start in, like building on a forest with another adjacent forest (or horses) that would generate 4 resources per turn instead of 3 and get the second militia one turn earlier. I think the RNG was incredibly favorable, especially getting the Cavalry units and generating the third and fourth cities with minimal manipulation. A little bit of manipulation was needed, but maybe there is a seed where that's not necessary. A more sophisticated bot is needed to advance this further.