2
Hey all - still here. Sorry for the quiet stretch.
@Arklon I spent years making mobile games, in big studios and small ones, including some back-office work. Then I moved into DevOps. These days I build AI platforms for gaming companies. It is basically those two jobs in one.
@BlackBox the thread title is misleading. I know Outpost can run on a Mac, and I am glad that works for people. That was never the point. For years I have wanted to take this game apart and turn the executable back into something like source. It stayed a fantasy. The new AI tools made it feel like I could finally try.
So that is the project. I wanted a machine I could feed Outpost2.exe, plus whatever we already know about it, and see how much readable code comes back out.
To train and test that machine I needed a fair test. There is no original Outpost 2 source, so I could not grade against the real game. I took other old C code from the same era (Quake 2, QuakeWorld, Enemy Nations, and a few Outpost mission SDK sources we already had), compiled it with the same kind of old Microsoft compiler, ran it through Ghidra, and compared the decompiled C to the source I started with. If a model can turn that Ghidra mess back into the original function, maybe it can help on Outpost later.
The compiler had to be the real old one: Visual C++ 4.2. I first tried Windows NT. That guest was too old. Telnet barely answered, I could not get a stable connection, and I could not copy files with robocopy. I looked for the newest Windows that still ran this compiler and was actually usable. That was Windows 2000.
I tried SSH into the guest. That SSH is from when the protocol was still young, and it was too buggy to trust. I did not want to write my own file-copy tool, so I did it the boring way: a shared folder (Samba), robocopy to move the work, and telnet to kick the compile. I wrapped the whole thing so I can talk to a compiler box and a decompiler box as one lab. Docker Compose runs those boxes plus a small workshop screen, and Metaflow lines up the jobs. I used to build toolchains in containers at work, so this part was a lot of fun. Opening those Win2k windows again, icons and sounds included, was unexpectedly emotional. A lot of teenage memories. I even put a VNC window on the virtual machine so I could sit inside it. Far too slow to play the game. Fast enough to compile, which is all I needed.
I ran a few models on a sample of those test functions: Ghidra by itself, Gemini, Qwen, and LLM4Decompile. I was not trying to publish a leaderboard. I just wanted to know if the idea pointed anywhere.
I had really hoped LLM4Decompile would be the one. I even thought about teaching it this compiler with a small extra training pass. That was a bust. The model is from 2024, so less surprising in hindsight. I have not given up on training something later. It is just too much time and effort right now. Gemini is much faster, so that is what I am using.
Right now I am doing a first pass with no extra training. Gemini gets the community notes, the Ghidra output, and I compile whatever it writes, just to see how far that gets on its own. I have started doing that on the real Outpost2.exe as well: take a function, write C++ that matches the names the community already has, and see if a modern compiler will accept it. That is not the game coming back. It is a baseline. Can an agent infer anything sane from what we already have, and does it even compile.
Later I still want a better model (I am looking at Qwen 3.5 9B, or a larger one if I can get a larger GPU), more training data, and a richer pack for each function: the Ghidra C, the assembly, the Olly notes, the call graph, the types, and which compiler built it. That comes after I know what this Gemini pass is actually worth.
Big thanks to Leviathan. He shared his knowledge base with me, and I am building the recompilation work on top of that.
I am not doing this alone. A bunch of agents do most of the work. I steer them.
The repo is still private.
Cheers
Jonathan