My project will end the world
September 23, 2026
Specifically, the world in which the game I played as a kid is allowed to disappear because there's no commercial reason to keep it alive anymore.
There, clickbait done. Now that I have your attention:
There's this game called V2000, developed by Frontier Developments, released in 1998. Getting the PC version to run properly is an exercise in futility. It runs terribly on a bunch of modern Windows setups that I've tried (unless I use dgvoodoo, but even then there are issues), I haven't been able to start it at all under Linux, and there was never even a native macOS release.
I think it's a huge shame things have to be this way, because I really enjoyed playing it. So I decided to do something about it.
How it started
Initially, I just wanted to extract some assets from both V2000 and Infestation (A game from the same company), just to satisfy my inner child.
The games hold their data in .ovl binary files. Think of each one as a pack for a level. At first I had no idea which blob was what, but using Ghidra (Thank you, NSA) and HxD (to check the ovl files structure) I was able to start piecing things together.
Both games hold sprites the same way: one big shared canvas, 2048 bytes wide, packed with rectangles. Each sprite has a 28-byte description (pixel offset, palette offset, color count, flags), then come the palettes, then the rectangles x_start, y_start, x_end, y_end plus raw bytes. Pixels are 1 byte (palette index) or 2 bytes (direct RGB555, << 3 per channel). Palettes are 32 brightnesses × 16 colors; flag 0x01 makes zero transparent.
Infestation (2000) is the fiddlier sequel: often per-sprite palettes rather than shared and some entries carry a second mode-selected variant.
Progress was pretty slow, but I was happy that I could even get something out. The biggest bottleneck was the fact that, unfortunately, I am employed, so I don't have an abundance of time.
There's also the skill issue. Almost all of my experience is as a web developer. While I did do some app development for a bit, and I am familiar with some low-level concepts, realistically I knew getting out 3D models or anything of the sort was completely out of my reach. But again, I was happy with that. Getting just textures and sprites out was still a massive victory in my eyes.
Then AI stopped being a joke
I've been using AI assistants ever since they first came out. I was a huge fan of GitHub Copilot back in 2021 when it was just "tab to autocomplete". But while it was a neat little tool to write some code faster, for anything more complex it's always been laughably bad.
That all changed this year (2026). I think Claude Opus 4.6 was the real inflection point. It helped me pull out broken/flawed 3D models, sounds, level descriptors, terrain heightmaps and even game sounds. It could even decipher some of the more intimidating Ghidra functions that I'd been avoiding, and it was the first time I started asking myself "what if?".
So I pressed on, and with Opus 4.8 I was finally able to get every single asset out of V2000, and most out of Infestation (proper 3D models too!).
Then Anthropic's Fable 5 released, and I could finally act on my "what if?". Fable also gave me the idea for in-memory tracers: since both games are 32-bit applications, you can effectively hook into their memory space and watch live behavior as it happens (this helped massively).
And so work began on a new codebase. I would start with V2000, since it was the simpler of the two, with the goal of accurately replicating its game mechanics, but also fixing some of the quirks (Like stuff breaking when the FPS is too high, no Z-buffer, widescreen not supported).
I wanted the port to run on anything (Windows, Linux, macOS), so I decided on SDL. The render pipeline makes use of OpenGL.
The biggest boost by far came with OpenAI's ChatGPT 5.6 Sol. The usage I got out of it was ungodly, and the resets that kept coming only made it better. I have never made this much progress this fast.
With Astra I also brought WinDbg into the workflow, with TTD (Time Travel Debugging). Turns out Astra can call windbgx itself, walk the recording, and pretty much figure out any behavior, as long as I could get it recorded.
What's next
I want to put out a demo once I'm confident level 1 is fully playable and faithful to the original. While I won't give out a specific date or make any big promises, I'll try and get it done in 1-2 months from now.
I'll publish the source code too. I do want to be clear about one thing - it's only gonna be the source code and probably some Windows, Linux and macOS binaries. You'll have to fetch the original game with the original assets yourself (The RE makes use of the OVL files). I do not want to get into trouble with Frontier Developments (Although, if they give the green light, I will also include the OVL files).
I also want to show you a side-by-side recording of the original and the reverse-engineered game, left is the original:
After this phase is done, I'd love to get some help on reverse-engineering and maybe even some testing. Donations would certainly help (for dev/tooling costs). And lastly, infinite ChatGPT resets would also be pretty neat (@thsottiaux please).
Anyway, that's my plan for ending the world, and it starts at Level 1.