I've been thinking about this topic and am glad to see it come up: AI is going to be a huge boon for digital preservation & restoration projects like this. I realized this while building this project (a map explorer for Tribes 2): https://exogen.github.io/t2-mapper/ Old games like this have a small (and shrinking) audience of people who care about them. With Tribes 2, for example, there are only ~50 people who active…
Wow, this whole thread has been a blast from the past. But this tribes mapper is beaming me back to my childhood. Seeing the actual siege base layouts, wow. I can still see myself as a little kid, not fully understanding or being good at the shooting part of tribes. I just stayed in base, repairing the generators. Sometimes enemies would run in, i would hide, and shoot from a distance and call for help. Them some hea…
Resurrecting Crimsonland – Decompiling and preserving a cult 2003 classic game
41–50 of 52 posts
Re: Resurrecting Crimsonland – Decompiling and preserving a cult 2003 classic game
#42Crimsonland (2003) is a top-down shooter that shipped as a stripped DirectX 8 binary with zero symbols. I decompiled it with Ghidra, validated behavior with WinDbg and Frida, and rewrote it from scratch in Python/Raylib — 46,800 lines matching the original behavior faithfully. The write-up covers static and runtime analysis, reverse engineering custom asset formats, and the full rewrite process. Code is on GitHub and…
Going to give this a spin after work. Thanks for the work and the writeup!
Re: Resurrecting Crimsonland – Decompiling and preserving a cult 2003 classic game
#43I don't know anything about reverse engineering, but I have wanted to reverse engineer/decompile the Disney Animation Studio [1] for DOS for years. I found the software at a thrift store in 2009, when I was eighteen, and I was immediately impressed. This was actually very intuitive, easy-to-use animation software that was very powerful, years before FutureSplash/Flash was released. There's not a ton of info available…
It isn't that hard. I'm currently reverse engineering a old flight simulator game called A-10 Cuba. I had to teach myself X86 Assembly, and understand basic calling convention. Then C++ vtables, struct alignment and struct layout. How-ever you do need this basic level understanding of the core fundamental to help you along when the tools you use IDA, Ghidra that turn the assembly code back into C pseudo code. So ther…
Old devs of the games could enlighten the game preservation community anonymously.
Game dev was a frontier and hardware pushing activity even in the directx era. The magic shift code for ...quake??? Was just the tip of the iceberg.
Re: Resurrecting Crimsonland – Decompiling and preserving a cult 2003 classic game
#44Crimsonland (2003) is a top-down shooter that shipped as a stripped DirectX 8 binary with zero symbols. I decompiled it with Ghidra, validated behavior with WinDbg and Frida, and rewrote it from scratch in Python/Raylib — 46,800 lines matching the original behavior faithfully. The write-up covers static and runtime analysis, reverse engineering custom asset formats, and the full rewrite process. Code is on GitHub and…
Re: Resurrecting Crimsonland – Decompiling and preserving a cult 2003 classic game
#45Earlier quoted context omitted.
I played A-10 Cuba a ton on an old Pentium 3. Are you doing this in a repo somewhere?
The plan is to put everything into a repo on github, this includes documentation on the file format, and also the rewrite of the original code in modern C++ and DirectX or Vulkan. I don't see much point in reverse engineering the old rendering engine - I can do it but I've got everything I need right now that I can just rewrite the game inside the browser.
Re: Resurrecting Crimsonland – Decompiling and preserving a cult 2003 classic game
#46Earlier quoted context omitted.
It isn't that hard. I'm currently reverse engineering a old flight simulator game called A-10 Cuba. I had to teach myself X86 Assembly, and understand basic calling convention. Then C++ vtables, struct alignment and struct layout. How-ever you do need this basic level understanding of the core fundamental to help you along when the tools you use IDA, Ghidra that turn the assembly code back into C pseudo code. So ther…
It would likely be enormously useful in this to have a development wiki behind the games that devs and people that played the games may know the engines, file formats, save file formats, compilers, Langs, etc. Old devs of the games could enlighten the game preservation community anonymously. Game dev was a frontier and hardware pushing activity even in the directx era. The magic shift code for ...quake??? Was just th…
A-10 Cuba! came out around 1996, and only now am I getting to know its internal engine. For example, it utilizes a signed Q15.16 fixed-point representation for its X and Z axes. For instance, a raw value of 98,304 (0x00018000) decodes to 1.5 units - where a unit is defined as 6607.92 feet - which translates to 9,911.88 feet in the game world. Then to top it off, it uses a different coordinate scaling convention for its up axis. For example the up-axis resolution is 1/10th of a foot so a raw value of 10,000 is actually 1,000 feet. Then there are other discrete exponent scaling factors which the game applies to maintain numerical precision and accuracy.
I had a great time learning all this well reverse engineering the game, and also come to learn even today how common it is for chips not to come with FPU unit, and how common it is that those chips actually perform fixed point arithmetic.
Re: Resurrecting Crimsonland – Decompiling and preserving a cult 2003 classic game
#47All modern AI tools tend to put `from __future__ import annotations` line into Python code which isn't required by recent Python versions. I guess this is because they all are trained on an intermediate code bases when this was required some times (even at that time the real usage was quite rare). And now this line is parroting everywhere like a junk DNA :)
I am not an AI and I missed the memo on this. I put that line in whenever I need to use a forward-declared type annotation. Last I recall reading about it, there were some deep issues that meant it had to stay in __future__ indefinitely. Is there a PEP / release note about it?
I was sure this one was for Python from 3.7 up to 3.10. But it is still here.. But as for 2026 it will not stay forever as it was supposed to - there are 2 PEPs which are suppose to fix it in Python 3.14 - https://peps.python.org/pep-0649/ and https://peps.python.org/pep-0749/
Re: Resurrecting Crimsonland – Decompiling and preserving a cult 2003 classic game
#48Earlier quoted context omitted.
I am not an AI and I missed the memo on this. I put that line in whenever I need to use a forward-declared type annotation. Last I recall reading about it, there were some deep issues that meant it had to stay in __future__ indefinitely. Is there a PEP / release note about it?
Oh, I was very wrong, my apologies! I was sure this one was for Python from 3.7 up to 3.10. But it is still here.. But as for 2026 it will not stay forever as it was supposed to - there are 2 PEPs which are suppose to fix it in Python 3.14 - https://peps.python.org/pep-0649/ and https://peps.python.org/pep-0749/
Re: Resurrecting Crimsonland – Decompiling and preserving a cult 2003 classic game
#49As an active reverse engineer, I'm really curious how you used agetic AI for this! Did you just have them going through the code and labeling stuff? Or were they also responsible for writing the reimplementation? This overview is super interesting, I would love to see details about the pipeline itself.