Case study
Paper Mario: The Thousand-Year Door: an early matching GameCube decompilation
A work-in-progress matching decompilation of Paper Mario: The Thousand-Year Door that targets the Japanese Rev 0 GameCube release (G8MJ01), rebuilding MarioSt.dol and 31 REL modules with the original Metrowerks compilers and checking each against a stored SHA-1. The build splits these binaries from a user-supplied disc image, and objdiff compares objects during development. decomp.dev reported 12.10% of code matched at the reviewed commit.
- Targets
- Game
- Category
- Independent reconstruction cases
- Relationship
- Independent reconstruction project
- Sources reviewed
Requirements & limits
- README lists one supported version, G8MJ01 (Rev 0, JP); configure.py defines no other version and CI builds only G8MJ01. README still carries template leftovers: its badges point at another project, its clone command names NWPlayer123/G8MJ01-dtk and one line calls G8MJ01 the USA version. The output is a GameCube DOL and REL set, not a PC port.
- Copy your own G8MJ01 disc image to orig/G8MJ01; ISO (GCM), RVZ, WIA, WBFS, CISO, NFS, GCZ and TGC images are accepted. README says the repository contains no game assets or assembly: decomp-toolkit splits main.dol and the RELs using committed symbol and split tables, and extracts the memory-card icon and banner textures from the DOL into local headers. Decompiled sources such as src/pmario_sound.c also carry game data tables reconstructed as C.
- Builds need Python and ninja on Windows (native tooling recommended), macOS (with wine-crossover) or Linux (an automatically downloaded wibo on x86, Wine elsewhere). configure.py pins decomp-toolkit v1.8.3, objdiff v3.7.1, binutils 2.42-2, sjiswrap v1.2.2, wibo 1.1.0 and the 20260305 compiler bundle, using Metrowerks GC/2.6 for game and REL code and GC/1.2.5n for the Dolphin SDK. tools/ttydasm is a Rust helper that decodes a named event script from the linked DOL or REL outputs in build/G8MJ01.
- Objects marked Matching (100 of 547 in configure.py) are compiled from source and the rest come from the split originals; the default ninja target checks the DOL and all RELs against config/G8MJ01/build.sha1 before reporting progress. CI builds G8MJ01 in a container that supplies the disc files and compilers and uploads a progress report. decomp.dev’s report for the pinned commit lists 457,800 of 3,784,980 code bytes (12.10%) and 2,029 of 9,770 functions matched, with 100 of 1,239 units complete.
- The repository carries the MIT License (copyright NWPlayer123), and libs/musyx has its own MIT license; neither covers Nintendo’s game, disc contents or the downloaded compilers.
About this entry
The description was reviewed against primary sources.
Primary sources
- README.md GitHub · doldecomp/ttyd · Revision 62131fc
- configure.py GitHub · doldecomp/ttyd · Revision 62131fc
- config/G8MJ01/config.yml GitHub · doldecomp/ttyd · Revision 62131fc
- config/G8MJ01/build.sha1 GitHub · doldecomp/ttyd · Revision 62131fc
- tools/project.py GitHub · doldecomp/ttyd · Revision 62131fc
- src/pmario_sound.c GitHub · doldecomp/ttyd · Revision 62131fc
- tools/ttydasm/src/cli.rs GitHub · doldecomp/ttyd · Revision 62131fc
- .github/workflows/build.yml GitHub · doldecomp/ttyd · Revision 62131fc
- LICENSE GitHub · doldecomp/ttyd · Revision 62131fc
- https://decomp.dev/doldecomp/ttyd
More in Games
- Perfect Dark: matching Nintendo 64 decompilation · Case study
- Petari: a matching Super Mario Galaxy decompilation · Case study
- Phantom Hourglass: an early-stage matching Nintendo DS decompilation · Case study
- Pikmin 2: a fully matched GameCube decompilation across five releases · Case study
- pokecrystal: a matching Pokémon Crystal disassembly · Case study
- pokered: a matching Pokémon Red and Blue disassembly · Case study