Before we begin, a brief backstory…
On my 7th birthday I received a copy of Simcity 2000 Special Edition for Macintosh. I spent a lot of time playing it until I received a copy of Simcity 4 (for PC). I skipped Simcity 3000, primarily due to the fact that my family’s Macintosh LC 550 was incapable of running it. I would estimate that I logged about 1000 hours into both games. The amount of data lost due to the shear number of cities and regions that I abandoned and/or deleted breaks my heart a little. In order to keep my nostalgia in check, I’ll end here and move on to the stuff people might actually care about…
Prologue: Motivation & Challenges
SimCity 2000 owes its recognition to the folks at Maxis Emeryville and their dedication to creating simulations that are playable yet realistic enough to derive a sense of accomplishment for successful players an achievement easier said than done. With this realism comes a certain amount of data that can be modeled. Because SimCity 2000 (SC2K) is a simulation with known successful and unsuccessful strategies, the data produced should have relatively little noise. Getting access to that data in an interpretable form, on the other hand, is a different matter.
Cities from SC2K are saved under the .SC2 file extension and are structured as IFF files - a file format created by Electronic Arts back in 1985. I spent some time researching what exactly is contained within these files, but it seems little work has been done on interpreting SC2K IFF files, spare for the work done by David Moews back in 1995. I also only managed to find a single project with the intention of reading out the data from SC2 files. The source code for this project is available on Github.The shear amount of information stored in these files is incredibly useful from the perspective of understanding how SimCity 2000 works. While work has already been done to "beat" SC2K's sequel SimCity 3000, this work was achieved through a mixture of trial and error, research, and scratch-pad mathematics. While my approach is similar in that it involves a lot of trial and error, I am far more interested in the implications of extracting the data from the entire SimCity 2000 Special Edition "CITIES" folder and building models that identify successful cities from unsuccessful cities, with the intention of unraveling the inner workings of the SC2K engine.
The definition of a "successful" city is subject to enormous interpretation, so it is important to analyze cities from multiple perspectives. Granted, SC2K is not a perfect simulation by any means; extracting any sort of "wisdom" from a simulation, however sophisticated, is dangerous. The purpose of this undertaking is more an exercise in creativity and boredom rather than a means to generate the ideal city, real or fictional. Taking a page out of the book of flaws from the 2013 SimCity reboot...just because a simulation says building 100% residential is profitable does not mean that it's a good idea.
Looking Under the Hood
We begin by first selecting a city and corresponding .SC2 file to explore. Since the SC2K Special Edition came with a city called "keith", it seems only fitting to start with "keith."
- Identify and record key statistics within SC2K
- Locate key statistics within the .SC2 file
- Extract key statistics so that they can be explored using R or Python
Step 1: Identify and Record Key Statistics Within SC2K
While this list is not comprehensive, it covers pretty much everything we might care about:
- City Population
- Savings
- Budget
- Tax Rates
- Funding Rates
- Bond Rates
- Cashflows
- Ordinances
- Key Indicators
- Crime Rate
- Education Level
- Health
- Unemployment Rate
- Pollution
- Traffic
- "Tile-Specific"
- Crime
- Pollution
- Land Value
- Density
Step 2: Locate Key Statistics Within the .SC2 File
As mentioned earlier, David Moews's guide to .SC2 files from 1995 is pretty much the only readily-available .SC2 resource to date. Unfortunately,
most of the necessary data locations for our analysis are not identified in his guide.
Here's where the real work begins...