All projects

Decompilation

Dance Central 3 — byte-exact decompilation

Drove a swarm of AI agents to a 92% byte-exact decompilation of a debug-info-less Xbox 360 game, then rebuilt its engine on WebGPU to catch the bugs a perfect match score cannot.

ActiveJan 2026 – Presentfreeqaz/dc3-decomp

Xbox 360 · MSVC PowerPC · Ghidra · AI agents

A Dance Central 3 dancer rendered by the from-scratch WebGPU port of the decompiled Milo engine
of 32,252 functions at normalized 100
92.44%
Commits over 25 weeks
~1,500
Decompiled functions indexed
48,000
Wrong-callee bugs caught
65

Progress

Matched code (fuzzy, game + engine target scope)

96.5%

as of July 17, 2026

Matched code (fuzzy, game + engine target scope) over time, currently 96.5%0%50%100%Jul 2025Jul 2026Jan 2026
Matched code (fuzzy, game + engine target scope)MilestonesCommits (accent = major)
  • Jan 23, 2026: AI agent fork begins — First fork commit lands high-confidence function matches via an agentic workflow.
  • Feb 28, 2026: WebGPU native port begins — Native port foundation lands with WebGPU rendering, kicking off a 555-commit March.
  • Jun 10, 2026: Roadmap-to-100 campaigns — Numbered wave campaigns with written results ledgers attack the remaining hard territory.
  • Jun 21, 2026: Bulk matching plateaus by design — Static-matching frontier declared exhausted; focus shifts to runtime bug hunting via the native port.
  • Jul 4, 2026: 65 hidden bugs fixed in one sweep — Single sweep fixes 65 wrong-callee bugs invisible to the match metric.
  • Jan 23, 2026: 9 commits — Agent swarm floods the repo on day one
  • May 27, 2026: 116 commits — Busiest day of the project
  • Jul 4, 2026: 6 commits — 65-function wrong-callee sweep lands

Source: self-measured with objdiff-cli 4.2.3 (decomp-synth progress-history job 6d53): weekly upstream samples pre-fork + per-commit fork measurements; 0% start anchored to first upstream commit 2025-07-25 (build scaffolding only, no source files)

Dance Central 3 is a 2012 Kinect rhythm game built on Harmonix’s in-house Milo engine. This project reconstructs its C++ source from scratch, so that recompiling with the original toolchain reproduces the shipped machine code byte for byte — a game-preservation effort where every function is verified by assembly diffing, and no game assets or copyrighted binaries ever enter the repository.

The target is deliberately hostile: MSVC-compiled PowerPC with no debug information of any kind — no function names, no types — plus identical-code folding that makes ground truth ambiguous. My experiment, forked from the community project in January 2026, asks how far swarms of Claude Code agents can push it. The answer so far: 92.44% of 32,252 authorable functions matching at normalized 100, sustained by roughly 1,500 commits over 25 weeks.

The core thesis is that agents should never stare at assembly and guess. Instead they call typed tools: an MCP orchestrator wrapping the build and diff pipeline, a headless Ghidra service with semantic search over 48,000 decompiled functions, a Unicorn-based differential-execution runner that executes original and recompiled functions side by side and machine-classifies divergences (isolating 19 genuinely broken functions from about 1,500 cases of harmless codegen drift), and an automated source permuter. Twenty-six reusable agent skills, a git-worktree pool, and persistent cross-session memory keep dozens of concurrent agents productive without per-function prompting.

The hardest problem turned out to be philosophical: a function can score a perfect byte match and still be wrong, because the metric forgives relocation-target differences — it can call the wrong symbol at 100%. So the team built a from-scratch WebGPU and WebAssembly port of the engine that boots, renders, plays audio, and scores dance moves (using camera pose estimation in place of a Kinect). Actually running the decompiled code became the best bug-finder in the stack, catching 65 metric-invisible wrong-callee bugs in a single sweep plus behavioral bugs — like string equality comparing a pointer’s bytes as characters — that three other verification layers missed.

The project remains active. Bulk matching has plateaued by design; the frontier is now runtime bug hunting through the native port and research into the original compiler’s internals. The tooling built here generalized directly to sibling decompilation projects for Rock Band 3 on two platforms.

Dance Central 3 — byte-exact decompilation | Free Wortley