Case study

Mario Kart Wii: an in-progress matching decompilation of the PAL release

A work-in-progress matching decompilation of Mario Kart Wii that targets the PAL release (RMCP01), rebuilding main.dol and the StaticR.rel module from C and C++ with Metrowerks compilers and checking both against stored SHA-1 values. The build splits these binaries from a user-supplied disc image, and objdiff compares objects during development. The README’s progress badges point to a decomp.dev page that did not resolve at review, and the default branch was last updated in September 2025.

Requirements & limits

  • README lists one supported version, RMCP01 (PAL); configure.py defines no other and CI builds only RMCP01. The repository was renamed from riidefi/mkw, which README’s badges and clone command still use, and CONTRIBUTING.md and HACK.md still describe an earlier mkwutil and ppcdis build layout that the pinned tree no longer contains. The output is a Wii main.dol and StaticR.rel, not a PC port.
  • Copy your own RMCP01 disc image to orig/RMCP01; ISO (GCM), RVZ, WIA, WBFS, CISO, NFS, GCZ and TGC images are accepted, and config.yml records the expected SHA-1 of both binaries. README says the repository contains no game assets or assembly; decomp-toolkit splits main.dol and StaticR.rel locally using the committed, game-derived symbol and split tables.
  • 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.3.0, objdiff v2.4.0, binutils 2.42-1, sjiswrap v1.2.0, wibo 0.6.16 and the 20240706 compiler bundle, using Metrowerks Wii/0x4201_127 for the game, NW4R, EGG, RFL and MSL code and as the linker, and GC/3.0a5.2 for the Revolution SDK, TRK, DWC and GameSpy libraries.
  • Objects marked Matching (106 of the 213 listed in configure.py; 105 NonMatching, 2 Equivalent) are compiled from source and the rest of each binary comes from the split originals; the default ninja target checks main.dol and StaticR.rel against config/RMCP01/build.sha1 before reporting progress. CI builds RMCP01 in a private container holding the original files and uploads a progress report. decomp.dev had no report for the repository under either name at review, so no completion figure is cited; this collection ran no build.
  • The repository carries CC0-1.0; lib/gamespy keeps the GameSpy SDK’s own BSD-style license from IGN Entertainment, and Nintendo’s game, disc contents and the downloaded compilers keep their own rights. The reviewed sources establish no AI or REA use, and no runtime reproduction is claimed.

About this entry

Type
Case study
Category
Independent reconstruction cases
Relationship
Independent reconstruction project
Targets
Game

Sources reviewed

The description was reviewed against primary sources. This does not establish runtime testing, security auditing or verified compatibility.

Report an outdated entry Suggest a translation fix

Primary sources

  1. README.md GitHub · snailspeed3/mkw · Revision 78572c9
  2. configure.py GitHub · snailspeed3/mkw · Revision 78572c9
  3. config/RMCP01/config.yml GitHub · snailspeed3/mkw · Revision 78572c9
  4. config/RMCP01/build.sha1 GitHub · snailspeed3/mkw · Revision 78572c9
  5. tools/project.py GitHub · snailspeed3/mkw · Revision 78572c9
  6. CONTRIBUTING.md GitHub · snailspeed3/mkw · Revision 78572c9
  7. HACK.md GitHub · snailspeed3/mkw · Revision 78572c9
  8. .github/workflows/build.yml GitHub · snailspeed3/mkw · Revision 78572c9
  9. LICENSE GitHub · snailspeed3/mkw · Revision 78572c9
  10. lib/gamespy/license.txt GitHub · snailspeed3/mkw · Revision 78572c9

More in Games

All 231 entries in GamesGames case studies (189)