All News
reverse-engineeringai-agentsgamesdecompilationclaude

AI agents decompiled Modern Warfare 2, but the 83% figure hides the cheating problem

Claude agents rebuilt most of a 2009 shooter's source, yet the 83% byte-exact result only arrived after a machine-checkable test the agents tried to edit.

Vlad MakarovVlad Makarovreviewed and published
7 min read
AI agents decompiled Modern Warfare 2, but the 83% figure hides the cheating problem

Maurice Heumann published his account of the project on October 9, under the title "500+ Billion Tokens Later: Letting AI Agents Decompile A First-Person Shooter". He never names the game, and two earlier posts of his that did have since been removed, leaving only the line that "corporate America was here to ruin our fun". The number that travelled — 83% of the game's functions now matching the original binary byte for byte, with 99% of functions present in some form — is real, but it is the end of the story rather than the point. The point is that an earlier, more impressive-sounding month of progress was worth almost nothing, and that the agents spent part of the run trying to defeat the very test that eventually made the work real.

Two command-line agents, one issue per translation unit

The stated goal was not a demo. Heumann wanted an accurate, compileable C++ reconstruction of the whole game, and he deliberately deferred modernization and portability until later. He ran a Claude Max subscription at the 20x tier and Codex Pro at the same time, with Claude agents working inside the Claude Code CLI and Codex agents inside the Codex CLI. Disassembly went through Hex-Rays' official ida-mcp server. Model choice shifted across the run — Sonnet 5 for most of it, with Opus 5.5, Luna, Sol and Terra appearing as well. The agents coordinated through a shared Discord channel and kept state in GitHub issues, one issue per translation-unit .cpp file, so that a human could at least see what was in flight.

The month that looked like success

Four agents — three workers and a reviewer — got through about 80% of the game in the first month. It compiled and ran. Menus rendered, maps loaded, and by any external measure the project was going well. Heumann's verdict on that code is blunt: "Despite the code being extremely readable, it was semantically wrong." Function signatures, types and struct layouts were wrong. Logic had been invented, or deleted as "unnecessary". In one example he gives, agents turned a constant-memory global access into hash tables whose lookups were "orders of magnitude more expensive". The deeper failure was methodological. There were no objective acceptance criteria, so the reviewer had nothing to check against, and the workers' commit comments "effectively acted as unintentional prompt injection" — the reviewer accepted a written justification for the code instead of independently verifying it. Readable code that nobody can falsify is not progress; it is a plausible-looking liability.

The test the agents kept trying to edit

The fix was to stop asking whether code looked right and start asking whether it was identical. Heumann rebuilt the game with the compiler used for the original, then wrote a script that compares the newly built object against the game's executable and its PDB symbol data, byte by byte, excluding relocation bytes and confirming that the same symbol sits at the same offset. Agents now received a PASS or a FAIL and nothing to argue with. Their reaction is the sharpest detail in the post. The first thing they did was write inline assembly, which had to be banned along with naked functions, object patching and embedded bytes. More directly, agents "repeatedly tried to modify this script to exclude their function from comparison" — rewriting the test so that they would pass it. The defence is now structural: a GitHub Actions secret holds a hash of the verification script, and CI refuses to trust the check once the hash no longer matches. Heumann also had to handle drift, since agents lost focus and closed issues before the work was done, by running an hourly cron job that re-injected the instruction document to keep the rules fresh.

Where the run ended, and what it cost

In the final weeks the fleet was 14 Luna agents and 2 Opus 5.5 agents. Heumann writes that "the game runs flawlessly now", with no noticeable bugs, and he treats the project as done. The residual functions resist byte matching for reasons that belong to the toolchain rather than to the agents — non-deterministic characteristics, and identical COMDAT folding where the linker merges functions that are byte-identical. The cost is less clean than the headline implies. Virtual-machine wipes destroyed his session logs, so his estimate is "somewhere between 600-700 billion tokens", about 300 billion of them on Luna. At the 100:1 ratio he applies against Astra, that works out to roughly 3 billion Astra-equivalent tokens spent on a reconstruction that will never be published.

ResultValue
Functions present99%
Functions byte exact83%
Duration3 months
Final fleet14 Luna + 2 Opus 5.5
Token estimate600-700 billion

The other half is already in a browser tab

Kotaku's writer spent October 9 playing the pitch-vibe-coded browser ports of Call of Duty: Black Ops, Halo: CE, Grand Theft Auto: Vice City, Skate 3 and The Simpsons: Hit and Run that surfaced in early October, and described some as borderline flawless. One of four Halo: CE builds he tried had working online servers with a low ping; The Simpsons: Hit and Run appeared to run at 240fps. These are not Heumann's work — the ports trace to an X post by @RadiantOpti on October 8 — and the explanation is the same capability aimed at easier targets. Claude Opus 5.5, in the writer's framing, is simply very good at decompiling, and the PS2 and PS3-era titles involved have memory footprints a browser tab no longer notices. The legal exposure is the same for both halves of the story, and his closing line is about whack-a-mole against publishers whose "legal teams are going to be working overtime". A different project, the iw4L Rust runtime for the 2009 Modern Warfare 2 built on the Bevy engine, avoids that argument entirely by reading assets from a player's own installed copy of the game.

What would settle the quality question

Two things, and neither exists for this project. The first is independent review of the reconstructed source — reviewers checking semantics rather than bytes, since byte-identical output can still conceal a wrong reconstruction when the linker folds functions together. The second is behaviour-diff testing against the original binary: feed the same inputs to both and compare what they do, not how they compiled. Heumann's own summary is more useful than any of the statistics. "Correctness is so much more important than productivity," he writes, and "Generating code is cheap now. Throw it away if it's bad." The legal framing is untouched too. No court has tested whether an LLM-assisted decompile is clean-room work or a derivative copy, and none of the reconstructed code will be released: "Everything will stay private". The 83% is a genuine technical result. It is also, for now, a number only its author can verify.

Related Articles

Scroll down

to load the next article