Robbing the Graveyard of Technology


Expecting a child always gets me in a nostalgic mood. One’s perspective on time shifts and it feels as if your own youth gets a second chance. So while waiting for the delivery of my second kid, I was browsing through an old hard drive backup, and that’s when I found the source code to the long lost project Warzone of Destiny 95. I made this game in 8th grade using Visual Basic 4.0 and MS Paint, the year was 1996.

In order to get it to run again I had to dig out an old Intel MacBook that could run VirtualBox reliably, and install Windows 95 and Visual Basic 4.0 on it. I did not have the install CDs laying around anymore, so I prepared myself for an old school journey through the seedy underbelly of the Internet to find some product keys. But keys to these things are just a Google search away and easily found on the Internet Archive these days. I guess Microsoft does not really care about selling more copies of these anymore.

After a classic Windows 95 era experience of reinstalling a few times, downloading some weird drivers from some sketchy website that could go down with a power outage and never come back up, I got it all up and running. I was through the portal and fully living in 1996 again.

I had been looking for a project to test out the Playdate SDK and this seemed like a perfect fit.

The original Windows game is boring as heck: it only supports 2 player hot seat, has no fog of war, and always plays with the same map. The only random element is the placement of some hidden special units.

For the Playdate remake I wanted to make it single player, more replayable and faster paced. And obviously redesigned to work with the Playdate controls and screen. The basic ideas and game assets from Warzone of Destiny 95 could get a new life in a device with a soul from the same time period.

Visual Basic source files from this era are not the most readable file formats though. It contains one BAS file with some global logic, a bunch of FRM files which contain UI descriptions and callback functions, and corresponding FRX files which are binary files containing all the resources from the forms. All resources are bundled in these, so my first objective was to extract the original image assets from these FRX files.

After some research into FRX files and BMP formats by rubbing elbows with fellow grave robbers hiding in questionable forums, I came up with a Ruby script that basically loops through the FRX files looking for bitmap headers and writes all the bitmap files separately to disk. FRX files can also contain other resources like cursors, icons and text blobs, but I was only interested in bitmaps for this project.

My first goal in order to learn the Playdate SDK, and keep the project scope small, was just to recreate the features of the original game adapted to the Playdate hardware. Then I was going to continue working on it to actually make it fun to play.

So the first iteration had the same basic map as the original and the same gameplay mechanics: the full map was always visible, the only way to get more resources was to defeat enemy units, battles showed a separate screen which let both players choose a battle strategy and then one unit won and the other lost. If the Armory was built, whenever an infantry unit was trained you got a screen where you could arm the new unit, different options having various costs and power bonuses.

This was just as slow paced as the original, and making someone play it with you in the two player hot seat mode was a hard sell.

So my first order to make it more interesting was to make the opponent controlled by an AI. (Yup it’s 2023, got to rub some AI on it. Just watch out and don’t play too much or your Playdate will become sentient and murder you with the crank.) It uses the built-in graph pathfinding algorithms from the Playdate SDK to move the units around and a state machine looking at the power balance between the players to decide a strategy, initially just defending its own city versus going towards the enemy city to try and capture it.

The next one was larger tiles to make it more accessible. The original used 16x16 tiles (approximately the same as the Windows original) and I wanted 32x32 in order to be easier to read on the small Playdate screen. This required logic to pan the map around since it no longer fit on the screen and I also added a minimap to make it easier to orient yourself.

I also wanted to add more terrain types to make movement a bit more strategic, so in addition to water and grasslands, it now also has forests and mountains which require more movement points to traverse.

To make the game more replayable, I also used the Playdate SDK’s Perlin noise generator to generate random maps that look and feel good. This required a lot of tweaking values and playtesting, but I think it ended up in a great place. I also added fog of war so that you have to move your units across the map to explore it.

To make the game faster and more interesting, I gave the units health points (HP) and removed the separate battle step. Instead battles happen right on the map and units lose HP until they are removed from the map. I also removed the Armory logic, instead you can build a Bazooka Factory, and all new infantry you build after that are Bazooka Infantry with a set power bonus.

The resource management dynamic was also very weird, so instead I opted for adding villages scattered across the map that can be captured, and while held they generate revenue each turn. The player and the opponent fight over these same resources which adds a major element to the game.

I tried to get the original MIDI files to play, but the Playdate’s MIDI support requires a lot of manual configuration and I’m far from an expert, so I instead opted for converting the MIDI files into wav files using timidity, and then compress those wav files using adpcm-xq which turned out great for the background music.

The original game had no sound effects, so I downloaded a bunch of sound effects from Kenney’s library which I think also worked out nicely.

In the end, this project spanned from Easter (the rebirth of Jesus) until just about the time of the delivery of the baby girl in late June (the rebirth of yours truly) and the result is a reborn Warzone of Destiny 95. I’m pretty sure it was quicker to complete the second iteration than the original in 1996 even though I had copious amounts of free time back then, but time is a square spiral and everything is easier and better the second time around. My past is back, its rotting remains robbed from the grave.

Get Warzone of Destiny 95

Buy Now$5.00 USD or more

Leave a comment

Log in with itch.io to leave a comment.