Restoring Maxis Ville: my website from 1998


2019 Jul 04 - Brian Kloppenborg

When I was in my teens I was obsessed with Maxis video games. I spent a considerable amount of time to playing SimCity, SimFarm, SimCopter, and Streets of SimCity. I even constructed a medium-sized website dedicated to these games. These facts were lost to me until I found several old floppies, hard drives, CDs and zip disks containing partial copies of my website from 1999, 2004, 2008, and 2009. Initially I thought my old sites were of no use until I started searching for related content online. Maxis no longer features most of these games on their website, most of the large Maxis-focused websites I use to visit are gone, and many of the games were labeled “abandonware” on the Internet Archive.

I realized that my old, tattered website represented something unique that was worth preserving. Over the following three weeks I spent my evenings restoring Maxis Ville to its 1998 glory. I restored the site’s hierarchy, replaced broken links, sorted out content, search for missing files, merged things together, and discovered how quickly content is lost on the Internet. I now fully encourage the activities of places like the Internet Archive and OoCities which preserve history that would otherwise be lost.

Below I detail the level of effort and tools that were required to bring Maxis Ville back from the e-graveyard. If you want to see the final result of my efforts, go check out Maxis Ville themed in its 1998 liveries.

Taking inventory

The first step in restoring the website was to take inventory of the content on hand.

Directories where I found old content.
An initial inventory of my files on hand revealed two incomplete instances of Maxis Ville from 1999 and 2004, some ancillary files from 2008/2009, and a ton of missing downloads.

Data recovery from the web

Maxis Ville was in pieces. Unlike Hastings Wireless which came back online after a few edits to a config.php file, Maxis Ville had content split among four different root directories, code was missing, filenames were mangled, and the downloads were (mostly) lost. Fortunately, there were breadcrumbs to follow.

From the data on hand, I was able to discover the URLs where I previously hosted my website. Then, using a “History of Maxis Ville” file combined with queries against archive.org I derived an approximate timeline for when I switched hosts:

With this list in hand, I used the Wayback Machine Downloader to retrieve as much data from these websites as possible. The VirtualAve and HyperMart websites returned the most useful information. I also searched oocities.org for archives of my GeoCities sites, unfortunately none of that data appears to have been archived. In the end, I got enough information to reconstruct the appearance of my website in 1998, 1999, and 2004 as shown in the figure below:

Maxis Ville in 1998
Maxis Ville in 1999
Maxis Ville in 2004
Screenshots of MaxisVille's visual evolution from (left to right) 1998, 1999, and 2004. Despite the use of HTML frames, I restored the website to its 1998 appearance for nostalgic reasons.

Reconstruction

With as much data as possible in hand, I began the arduous, mostly manual, process of restoring content. The first thing I did was establish the directory structure for each of the games I would be importing. In almost all cases, the desired structure for Maxis Ville is similar to the following:

/
/streets
/streets/index.html
/streets/download/index.html
/streets/screenshots/index.html

Then I stood up a local webserver in the document root folder using Python’s SimpleHTTPServer as follows:

cd 1999-version
python -m SimpleHTTPServer

After browsing the website for a few minutes, it was exceptionally clear that there were a ton of broken links and my files followed no naming convention. To fix these issues I first renamed all of the files to lowercase:

rename 'y/A-Z/a-z/' *

Then I installed and ran linkchecker:

sudo apt install linkchecker
linkchecker http://localhost:8000/

Upon careful inspection, most of these errors were fairly repetitive and easily repaired by regular expressions. For example, most of the pages had a link back to the main Maxis Ville page that was hard coded to http://maxis-ville.hypermart.net/main.html rather than a relative link like ../main.html. Here are a few of the tools I used to fix these problems and how they work:

# Grep to recursively search for specific strings:
grep -r "search_string" *

# Grep to search for files NOT containing a specific string:
grep -riL "search_string" **

# Replace a given string in all of the HTML files in the current directory:
sed -i "s/old_string/new_string/g" *.html

# Recursively find files, execute sed to do a search-and replacement:
find . -type f -exec sed -i 's/match_str/replace_str/g' {} +

After this, I started importing content, one section at a time, from the 2004, 2008, and 2009 Maxis Ville directories. The HTML pages were quick to import whereas the screenshot vaults and downloads took some time to restore due to mangled filenames. Almost all of these problems were trivial (albeit time consuming) to fix using the command line tools mentioned above and two of my favorite text editors, vim and spacemacs.

Cleaning up the HTML

While fixing various pages I noticed several problems with my HTML files. Foremost, instead of using HTML heading (e.g. <h1>) tags, I used repeated <big> tags for section headings. To fix this issue I used a regular expression to find and replace instances of 3 or more <big> tags:

# Find impacted files
grep -E -r "(<BIG>){3,}" *

# Replace the <BIG> and </BIG> tags with <h1> and </h1>:
find . -type f -exec sed -i -E 's/(<BIG>){3,}/<h1>/g' {} +
find . -type f -exec sed -i -E 's/(</BIG>){3,}/</h1>/g' {} +

I also had a variety of <style> elements on my pages which made the website appear inconsistent. To fix this issue, I used Perl’s expanded regular expression capabilities to perform string substitutions across multiple lines. In the command below, I replace the entire <STYLE> section with the string “STYLE_REPLACE”:

# Replace all HTML <STYLE> information with the string "STYLE_REPLACE"
perl -i -p0e 's/<STYLE>.*<\/STYLE>/STYLE_REPLACE/se' *.html

Then I used find and sed to replace STYLE_REPLACE with a link to a CSS sheet:

find . -type f -exec sed -i 's/STYLE_REPLACE/<link rel="stylesheet" type="text\/css" href="\/style.css">/g' {} +

Note that the forward slashes (/) are escaped using a backslash (\) in the above command.

Lastly, I added copyright notices to the bottom of all of my pages. To do this, I replaced the </body> tag with the copyright notice plus </body> tag as indicated below:

find . -type f -exec sed -i 's/<\/body>/<p align="center">Copyright \&copy; 1999, 2019 Brian Kloppenborg. All Right Reserved.<\/p><\/body>/g' {} +

With these changes made and a majority of the content restored, I placed Maxis Ville on a webserver and gave it a subdomain.

Conclusion and next steps

By carefully inventorying the data on hand, scraping the web for old content and the use of various command line tools, I was able to restore Maxis Ville to its 1998 glory with one major exception: DLC. Streets of SimCity was hit particularly hard, as can be seen in the table below:

GameTypeQuantity
SimCity 2000Cities2/27
SimCity 3000Cities1/1
Streets of SimCityTracks0/6
Streets of SimCitySkins6/95
Streets of SimCityCities5/5
Streets of SimCityScenarios6/6
SimTowerTowers0/6
AllGame Demos4/5

Over the next few weeks I’m going to attempt to locate the missing content on other sim game websites and/or track down the original authors. Wish me luck!

Categories: