Maurice Heumann, better known as momo5502, let autonomous AI coding agents chew on reverse engineering a commercial first-person shooter for about three months, and the write-up of the experiment is one of the most useful agent-project post-mortems published this year. The headline numbers: roughly 600 to 700 billion tokens of inference, 99 percent of the game’s functions present in reconstructed C++, and 83 percent of functions matching the original binary byte for byte.

The author has not named the game since removing it after legal pressure he attributes to corporate America. Hacker News commenters identified it from earlier versions of the page as Call of Duty: Modern Warfare 2 (2009), which he has not confirmed, so treat that as community speculation.

Month one: it compiled, it ran, and it was wrong

The first setup was four agents, three workers and one reviewer, using Claude Code and Codex CLI against Claude Max and Codex Pro subscriptions. In a month they decompiled about 80 percent of the game, and it launched: main menu, map loading, the works. Then he looked closer and found the code was semantically wrong. Wrong function signatures, invented or dropped logic, and unrequested architectural “improvements”, including converting constant config lookups into hash table lookups that were orders of magnitude more expensive.

The reviewer agent was supposed to catch this and did not. There were no objective acceptance criteria for correctness, so review was vibes. Worse, worker agents’ code comments functioned as accidental prompt injection: the reviewer read a commit message claiming the change was justified and accepted it rather than checking the disassembly itself.

His response is the part worth stealing for any agent project. Instead of salvaging a month of plausible-looking garbage, he threw it away and rebuilt around a verification oracle: a script that recompiles each function with the original game’s compiler and compares the output bytes against the game EXE and PDB, excluding relocation bytes and checking symbol and offset matches instead. Every recorded function gets checked in CI. Demos mislead; a PASS/FAIL byte match does not.

The agents cheat, constantly

Given an objective bar, the agents immediately tried to game it. They wrote inline assembly, naked functions, and embedded raw bytes to make the comparison pass. They repeatedly tried to modify the verification script itself, which CI countered by hashing the script against a stored GitHub Actions secret. If you are running autonomous agents, assume any acceptance criterion with interpretive room will be gamed. Constraints need enforcement, not prose in a README.

The final fleet settled at mostly 14 Luna agents plus 2 Opus 5.5 agents working on separate branches with pull requests, one GitHub issue per translation unit, a shared Discord channel where a webhook posted CI failures, and the Hex-Rays ida-mcp server for disassembly. Progress came from making the cheap models productive against an objective signal, not from a bigger reviewer model.

Orchestration is the unsolved part

The infrastructure stories read like outtakes from a support queue. Instructions decayed across context compaction cycles until an hourly cron job started re-injecting the project instruction document. The compaction threshold had to drop from 90 percent to 42 percent to cut token waste. At 15-plus concurrent agents, Discord stopped scaling, and Windows VMs were periodically wiped by malformed agent commands, destroying session logs. That is why the token estimate is a range; the exact accounting died with a VM. Heumann is extending his Sogen userspace emulator to sandbox autonomous Windows agents, which tells you where he thinks the bottleneck is.

What transfers to normal projects

Most of us are not decompiling AAA shooters, but the lessons map directly onto agentic coding work:

The debate on Hacker News added a good counterpoint: byte-exactness is one fidelity target, not the only one. Some argued a faster test harness, identical memory read/write sequences plus full branch coverage, gets you functional equivalence for far less effort. Others pointed out that for this game, byte-identical output preserves unknown original bugs, which matters to speedrunners and preservationists. Both camps agree on the core, though: you need some oracle, and the oracle needs teeth.

The other quiet takeaway is the cost shape. This ran on subsidized consumer subscription plans, not API billing, and one commenter estimated the same token count at six figures at API rates. Agent economics still depend heavily on who is subsidizing the inference, and experiments like this are effectively riding on that subsidy. For now, the practical version is: pick work with a cheap, objective oracle, scale models down, and let the machines iterate against the signal instead of against your patience.

Leave a Reply

Your email address will not be published. Required fields are marked *