DuskPort

How Twilight Princess Got Decompiled — A 5-Year Timeline (2020–2026)

From August 2020 to December 2025: how a community of contributors hand-rewrote the entire codebase of Twilight Princess. Verified milestones, contributors, and what made TP decomp uniquely hard.

Published 2026-05-10

The reason Dusk exists in 2026 is because a community of reverse engineers spent five years and four months rebuilding the entire source code of Twilight Princess — without Nintendo’s help, without leaks, and without ever seeing the original source. By December 2025, all GameCube versions matched byte-for-byte. Five months later, TwilitRealm shipped Dusk on top of that work.

This is the timeline of that effort.


Why decomp is required for ports

The GameCube version of TP shipped only as a compiled binary on a 1.4 GB disc. Nintendo never released source. To make a native PC port, someone has to reconstruct the source code — meaning: hand-write C/C++ that, when compiled with the original toolchain (Metrowerks CodeWarrior for PowerPC), produces a binary byte-identical to the retail disc.

This process is called matching decompilation. It’s painstaking; there’s no shortcut. Every function, every data layout, every quirky compiler optimization has to be reproduced exactly. The reward: once it’s done, the source is yours to fork, port, modify, or build derivative works on top of — without ever touching Nintendo’s IP.


The timeline

August 2020 — Project starts

  • 2020-08-29Pheenoh (Howard Luck) creates the zeldaret/tp repo on GitHub. The first commit message is, charmingly, "ok".
  • The initial scaffold targets GZ2E01, the GameCube USA version
  • The project is set up with C++ as the primary language — unusual for game decomps, which historically targeted C-based games (SM64, OoT, MM). C++ matching is materially harder due to vtables, RTTI, and template name mangling under MWCC.

2020–2022 — Slow ramp

  • Pheenoh, Jcw87, and hatal175 establish the build infrastructure: decomp-toolkit, mwcc PowerPC compiler matching, custom build orchestration
  • Progress is steady but slow during these years; a small team is bootstrapping tools more than writing matching code

2023 — Acceleration

  • TakaRikka joins and becomes the most prolific contributor (eventually leading commit count)
  • LagoLunatic (Wind Waker decomp lead, WW Randomizer author) joins and brings tooling expertise
  • The project hits Hacker News in November 2023 at partial completion

2024 — Production phase

  • PR count climbs into the thousands as more contributors join
  • GZ2P01 (GameCube EU/AU PAL) and GZ2J01 (GameCube Japan) are added as additional matching targets — the project now targets all three GameCube regions simultaneously

November 2025 — 99% milestone

  • The project reaches 99.02% matching for GameCube versions (GBAtemp coverage, November 2025)

December 2025 — All GameCube versions complete

  • 2025-12-23 — The GameCube versions reach 100% matching for all three retail regions: GZ2E01 (NA), GZ2P01 (EU/AU), GZ2J01 (Japan)
  • Coverage by Time Extension, GamesRadar, and Gaming Bible

Late February 2026 — TwilitRealm starts porting work

  • Per the official Dusk v1.0.0 release post: “Starting in late February, we embarked on the journey to bring the finished decompilation project to more platforms.”
  • This is when TwilitRealm forks (or builds atop) the now-complete decomp and begins the Aurora-based porting effort

April 2026 — Wii decomp work continues + ports announced

  • Wii revisions (RZDE01_00, RZDE01_02, RZDP01, RZDJ01), Wii Kiosk Demo (DZDE01), and Nvidia Shield China port (Shield/ShieldD) are still in progress
  • Time Extension reports two parallel native PC ports: Dusk (TwilitRealm) and Courage Reborn (Linifadomra)
  • Total commits in the decomp repo at this point: ~2,365

May 2026 — Dusk ships

  • 2026-05-09 21:59 UTC — TwilitRealm releases Dusk v1.0.0 on Windows, macOS (ARM + Intel), Linux (x86 + ARM), Android, and iOS
  • The decomp’s GameCube work is the foundation; the Wii / NTSC-J versions are still in progress, and Dusk’s first release accordingly only supports GameCube NA + PAL ROMs

What made TP decomp uniquely hard

Code volume

Per decomp.dev/zeldaret/tp, the project contains roughly 11.5 MB of code + 2.5 MB of data. For comparison:

ProjectCode sizeTime to 100% match
Super Mario 64~250 KB~2 years
Ocarina of Time~1 MB~3 years
Majora’s Mask~1 MB~3 years
Twilight Princess~11.5 MB (C++)~5y 4m to GC complete

TP is roughly 10× larger than the prior C-based decomps in the Zelda family.

C++ compiler matching is materially harder than C

The earlier Zelda decomps (OoT, MM) targeted C source — which has predictable name mangling, no virtual tables, no RTTI, no templates. C++ adds:

  • Name mangling that varies per compiler version (MWCC’s mangling scheme is bespoke)
  • Vtables that must be laid out byte-perfectly
  • RTTI that the compiler emits in formats specific to the CodeWarrior runtime
  • Templates that instantiate to specific symbol names depending on the original compiler’s choices

Every one of these has to match the retail binary’s bytes exactly. Mistakes don’t show up as “wrong behavior” — they show up as a different ROM, which means the matching test fails.

Per-revision differences

Three retail GameCube regions plus a Debug build plus the Wii revisions plus the Nvidia Shield port (China). Each has small differences that the codebase has to cleanly handle via conditional compilation. The repo does this; making it work without breaking other targets is a constant tension.

”Largest decompilation project ever completed” claim

TwilitRealm’s v1.0 announcement said:

“the largest decompilation project ever completed”

Is this true? Plausibly yes. Skyward Sword (zeldaret/ss, also C++) is comparable in scale and is much earlier-stage. Wind Waker (zeldaret/tww, C++) is similar size and still in progress. By “largest fully-matching console game decompilation, completed status, as of late 2025” — TP appears to hold the record. It’s not formally certified, but no one has produced a counter-example.


ROM versions tracked by the project

Version IDPlatform / RegionDecomp status (May 2026)
GZ2E01GameCube NA✅ 100% matching
GZ2P01GameCube EU/AU (PAL)✅ 100% matching
GZ2J01GameCube Japan✅ 100% matching
RZDE01_00Wii NA rev 0🔄 In progress
RZDE01_02Wii NA rev 2🔄 In progress
RZDP01Wii EU/AU🔄 In progress
RZDJ01Wii Japan🔄 In progress
DZDE01Wii Kiosk Demo🔄 In progress
ShieldNvidia Shield China🔄 In progress
ShieldDShield Debug🔄 In progress (used to recover symbols/types)

The decomp.dev dashboard summary as of fetch: 100.00% decompiled, 87.13% fully linked. The remaining 12.87% is the Wii→GC alignment work.


Top contributors (by commit count)

Pulled from gh api /repos/zeldaret/tp/contributors:

  1. TakaRikka — 409 commits
  2. Pheenoh (Howard Luck) — 375 commits (founder)
  3. hatal175 — 301
  4. caseif — 127
  5. Jcw87 — 123
  6. carter-ktb21 — 114
  7. LagoLunatic — 86
  8. YunataSavior — 85
  9. lepelog — 77
  10. jdflyer — 64

Beyond the top 10, hundreds of other contributors made smaller contributions — the project has a long tail.


Why this matters in 2026

The fact that the TP decomp completed in late 2025 is the reason Dusk could ship in May 2026. Before December 2025, native PC ports of TP were impossible without leaked source. After: trivial in principle, just slow porting work.

This is the same pattern as Ocarina of Time: zeldaret/oot reached high completion → Ship of Harkinian launched. The decomp is the upstream library; the port is the downstream consumer-facing product.

The next likely beneficiaries of this pattern:

  • Wind Waker (zeldaret/tww) — once it matches, expect a Ship-of-Harkinian-style port
  • Skyward Sword (zeldaret/ss) — earlier stage, but watching it
  • Breath of the Wild (zeldaret/botw) — the high-profile one; very early


Sources


Last updated: 2026-05-10. We update this page as the Wii / NTSC-J / Shield decomp work progresses.

← Decomp hub · Pillar guide →