It was 1993 when I got my first computer. It was a 386DX PC clone with 4MB of RAM, 130 megs of disk space, and an Oak VGA card running MS-DOS.

My imagination was grasped by computers being portrayed in movies and books, so I wanted one ever since I can remember. Over the years I’ve learned much more about them and made it into a career, but back in the 90s it was mostly about figuring out how to use DOS and of course, playing games.

I remember many games fondly from that time, and learning more about their history and origins, talking about them, and of course playing them became a significant part of my life.

One of them however stands out from the others, because I played it the most, and was blown away by what was effectively my first experience of an open world on a computer. Granted, the graphics were primitive and the gameplay simplistic, but I couldn’t help being captivated by this:

f15

F15 Strike Eagle II is a 1989 flight simulator game from Microprose. You fly around one of the built-in scenario maps in your F15, dodge SAMs, blast enemy planes, destroy ground targets and generally have a lot of fun. Who cares the plane handles like a UFO, the mountains are uniform grey pyramids, and the clouds are huge polygons hanging in mid-air? Having grown up near an air force base I was always drawn to aviation, and here was my chance to experience air combat first-hand. I spent hours playing the game, not even always doing the mission but for example figuring out how high I could go, trying to get a closer look at the ground installations like terrorist camps, bridges, ships and what I think are supposed to be oil rigs (but can’t tell for sure).

As I got older, there came better games, including flight sims, and of course I played them, but figuring out the complex avionics implemented in DCS is not something I just have the time for. I had a lot of fun with F-22 TAW, but for some reason F-15 II just stuck with me over the years.

Now the other thing that was happenning over the years is that I was learning about programming and the way computers worked in general. Starting back at primary school, I got my feet wet with some simple Pascal programs, later moved on to C and C++ and ultimately ended up as a professional software dev. At some point, I became drawn to my origins and wanted to understand better how DOS and the x86 processors worked under the hood.

I guess it would be inevitable that I would end up applying the knowledge I had gathered to F15, because I recall that in high school, after learning the basics of x86 assembly programming, I ended up disassembling F15’s game binary, printing out the listing on my inkjet printer and poring over it, hoping to glean some insights into how the game worked. I sadly lacked the knowledge back then, but I’ve been working at it, and I think I’m now in a place where I can undertake a project to reverse it and write a reimplementation in a high-level language, which can later be studied, expanded and improved.

In recent years, some old games’ source code was leaked or released by the authors, ScummVM reimplemented the engines of multiple adventure games, and there have been too many reversing projects by hobbysts to count. I’ve enjoyed reading about these, and happy for the progress people are making, but for some reason there just seems to be a dearth of information on the technical side of things. For some reason, people seem to not be eager to share the details, and somebody like me who’s interested in how the goal was achieved needs to attempt to grasp the larger picture from piecewise information spread across forum posts and elsewhere.

I plan to document my project here for the sake of anybody who might be interested, and to keep tabs on my own progress. I am also opening up this information because I’m looking for collaborators - if you have the knowledge and time, please contact me. Of course, if you happen to be sitting on the F-15 SE II source code, I would be very happy to get my hands on it. ;)

Some project goals:

  • aiming at a faithful, bug-for-bug reimplementation of the original engine, then porting it to a modern platform to be further tweaked, not looking to do a remake.
  • compatibility with original game assets (world maps, plane models, sprites etc.), hence requiring reverse-engineering the custom formats used.
  • clean reversing project, hence I will not be releasing any copyrighted materials such as game binaries or disassembly listings, only the clean source code when it’s done.

Now let’s get to it.