Live data from Hacker News

Resurrecting Crimsonland – Decompiling and preserving a cult 2003 classic game

banteg.xyz

41–50 of 52 posts

Re: Resurrecting Crimsonland – Decompiling and preserving a cult 2003 classic game

#41
post #24

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…

Nowadays you’d get whined at, “repairing the base isn’t meta, you are throwing, this is going to screw up my matchmaking rank.”

Re: Resurrecting Crimsonland – Decompiling and preserving a cult 2003 classic game

#42
post #2

Crimsonland (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…

Wow! What a blast from the past. I remember 13yo spending day after day on this game despite being an avid crpg player those days.

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

#43
post #18
post #12

I 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…

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 the tip of the iceberg.

Re: Resurrecting Crimsonland – Decompiling and preserving a cult 2003 classic game

#44
post #2

Crimsonland (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…

.....python? Why a slow scripting lang?

Re: Resurrecting Crimsonland – Decompiling and preserving a cult 2003 classic game

#45
post #23

Earlier 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.

Awesome. Good luck and I hope to see it.

Re: Resurrecting Crimsonland – Decompiling and preserving a cult 2003 classic game

#46
post #18

Earlier 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…

When I started with the gaming industry (Operation Flashpoint), I was coming in near the end of fixed point arithmetic where floating point units where becoming more common as part of the PII or PI era. It was around mid-1990, I'm actually in my early 40's now. I knew a little bit of floating point units but never really dived into the area - also at the time I wasn't really mathematically minded and we really didn't have access to the internet - Australia.

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

#47

All 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?

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

#48

Earlier 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/

Thanks! I’ll look forward to these landing in Python.

Re: Resurrecting Crimsonland – Decompiling and preserving a cult 2003 classic game

#49

As 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.

the whole process is thoroughly documented in the repo

https://github.com/banteg/crimson

Post reply on HN