projects/dc3-decomp
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.

- of 32,252 functions at normalized 100
- 92.44%
- Commits over 31 weeks
- ~2,200
- Decompiled functions indexed
- 48,000
- Wrong-callee bugs caught
- 65
Progress
Matched code (fuzzy, game + engine target scope)
96.5%
as of August 4, 2026
Use the left and right arrow keys to step through data points.
- 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
- Aug 4, 2026: 192 commits — Runtime bug-hunt waves land via the native port
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); extended 2026-08-04 with a same-metric measurement on the repo's current objdiff fork (value flat at 96.5)
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 in January 2026 from rjkiv's community project in the MiloHax modding scene — whose hand-built scaffolding, symbol maps, and build system are the foundation everything here stands on — 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 2,200 commits over 31 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 behavioral, not statistical. A byte-match verifies one function against the shipped binary; it says nothing about whether the reconstructed code actually runs. So the project grew 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 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.