Case study
Perfect Dark: matching Nintendo 64 decompilation
Reconstructs Perfect Dark’s Nintendo 64 code with a documented matching-ROM build. The project combines reconstructed source with assets from a user-supplied original ROM, then checks version-specific artifact hashes. It is a reproducible-build research case, distinct from the separate native PC port; matching results remain project-reported here.
- Targets
- Game
- Category
- Independent reconstruction cases
- Relationship
- Independent reconstruction project
- Sources reviewed
Requirements & limits
- Prerequisites: Supply an independently authorized original ROM in non-byteswapped .z64 form, with header 0x80371240, named for the selected ROMID. make extract reads assets and comparison segments from that ROM; final builds also reuse extracted boot code. Existing extracted files are not overwritten, so modified inputs can invalidate matching results.
- Prerequisites: The documented host setup is Linux: GNU Make, host C/C++ tools, Python 3, MIPS binutils/GCC, armips, Capstone development files and the listed 32-bit libc headers. Initialize the pinned ido-static-recomp submodule. Matching mode reconstructs IDO 5.3 and 7.1 compiler tools from its IRIX inputs; optional GCC builds are nonmatching and limited to ntsc-1.0/ntsc-final.
- Scope: The reviewed GitHub repository mirrors Ryan Dwyer’s GitLab project. README describes a complete matching decompilation; six build targets cover NTSC beta, NTSC 1.0/final, PAL beta/final and Japanese final, with ntsc-final as default. This reconstructs an N64 ROM, not a Windows/Linux/macOS game executable or the separate Perfect Dark PC port.
- Testing evidence: After building, make test runs quiet MD5 verification against the selected version’s checksum manifest, including the final ROM and intermediate artifacts. The README also documents comparing base/built ROM hashes. The mutable status page reports all six versions complete/matching.
- License: The repository declares MIT for source; original ROMs and extracted game assets retain separate rights. Compiler components have their own terms, including the submodule’s SGI notice for IDO 5.3; the project’s MIT declaration does not replace them.
About this entry
The description was reviewed against primary sources.
Discussed in the survey
Primary sources
- README.md GitHub · n64decomp/perfect_dark · Revision 169ed48
- Makefile GitHub · n64decomp/perfect_dark · Revision 169ed48
- LICENSE GitHub · n64decomp/perfect_dark · Revision 169ed48
- .gitmodules GitHub · n64decomp/perfect_dark · Revision 169ed48
- tools/extract GitHub · n64decomp/perfect_dark · Revision 169ed48
- checksums.ntsc-final.md5 GitHub · n64decomp/perfect_dark · Revision 169ed48
- checksums.ntsc-beta.md5 GitHub · n64decomp/perfect_dark · Revision 169ed48
- checksums.ntsc-1.0.md5 GitHub · n64decomp/perfect_dark · Revision 169ed48
- checksums.pal-beta.md5 GitHub · n64decomp/perfect_dark · Revision 169ed48
- checksums.pal-final.md5 GitHub · n64decomp/perfect_dark · Revision 169ed48
- checksums.jpn-final.md5 GitHub · n64decomp/perfect_dark · Revision 169ed48
- README.md GitHub · Emill/ido-static-recomp · Revision 421e546
- ido/5.3/LICENSE.md GitHub · Emill/ido-static-recomp · Revision 421e546
- https://ryandwyer.gitlab.io/pdstatus/
- https://gitlab.com/ryandwyer/perfect-dark/-/tree/46d3393bed1a3d5fbefbdba6df7237579b5c66e0
More in Games
- 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
- pokeruby: a matching Pokémon Ruby and Sapphire decompilation · Case study