A decompilation of Perfect Dark. (MIRROR of https://gitlab.com/ryandwyer/perfect-dark)
![]() |
||
---|---|---|
ld | ||
src | ||
tools | ||
.gitignore | ||
Makefile | ||
README.md | ||
macros.inc | ||
stagetable.txt |
README.md
Perfect Dark Decompilation (WIP)
This repository contains a work-in-progress decompilation of Perfect Dark for the Nintendo 64.
Roadmap
Section | Progress |
---|---|
0x40 rspboot | Won't disassemble as source is likely ASM |
0x1000 boot | 22/52 functions done (42.31%) |
0x3050 library | 1/931 functions done (0.11%) |
0x39850 setup | About 50% identified |
0x4e850 rarezip | 2/8 functions done (25.00%) |
0x5032e game | 316/4174 functions done (7.57%) |
Lang files | Done |
Setup files | Done |
Prop files | Not started |
Character files | Not started |
Gun files | Not started |
BG files | Not started |
Pad files | Not started |
Tile files | Done |
If you want to browse the stage setup files, use this table to find the filename:
Stage | File |
---|---|
Defection | setupame.c |
Investigation | setupear.c |
Extraction | setupark.c |
Villa | setupeld.c |
Chicago | setuppete.c |
G5 Building | setupdepo.c |
Infiltration | setuplue.c |
Rescue | setuplip.c |
Escape | setuptra.c |
Air Base | setupcave.c |
Air Force One | setuprit.c |
Crash Site | setupazt.c |
Pelagic II | setupdam.c |
Deep Sea | setuppam.c |
Defense | setupimp.c |
Attack Ship | setuplee.c |
Skedar Ruins | setupsho.c |
MBR | setupwax.c |
Maian SOS | setupsev.c |
WAR! | setupstat.c |
The Duel | setupate.c |
CI Training | setupdish.c |
There is also a stagetable.txt in the repository root which includes multiplayer stages.
Installation Requirements
- make
- mips build tools (Debian/Ubuntu: binutils-mips-linux-gnu, Arch: mips64-elf-binutils from AUR)
- Python 3
Extracting the base ROM
Before you do anything you need an existing ROM to extract assets from.
- Save your existing ROM file into the root of the repository with the name
pd.ntsc-final.z64
. It should not be byteswapped (the first four bytes should be0x80371240
). - Run
make extract
. This will create anextracted/ntsc-final
directory containing assets from your ROM.
Compiling
The project can do the following:
- Build individual ucode binaries (boot, library, setup, rarezip and game) which match the ones extracted from the base ROM.
- Build a functioning ROM by splicing your stage setup and lang files into an existing ROM.
The project does NOT build a full ROM using the C code yet.
- Run
make
to build the individual ucode binaries. These files will be written tobuild/ntsc-final
. - Run
make rom
to build a ROM from the stage setup and lang files. The ROM will be written tobuild/ntsc-final/pd.z64
.
How do I know the built files are matching?
Run make
followed by make test
. If make test
produces no output then everything is matching.