88 lines
4.4 KiB
Markdown
88 lines
4.4 KiB
Markdown
# Perfect Dark Decompilation (WIP)
|
|
|
|
This repository contains a work-in-progress decompilation of Perfect Dark for the Nintendo 64.
|
|
|
|
## Roadmap
|
|
|
|
Actual decompilation:
|
|
|
|
| Segment | Progress |
|
|
|-----------------|--------------------------------------------|
|
|
| 0x1000 boot | 206/2,068 words decompiled (9.96%) |
|
|
| 0x3050 lib | 8,250/89,060 words decompiled (9.26%) |
|
|
| 0x4e850 inflate | 150/1,276 words decompiled (11.76%) |
|
|
| 0x4fc40 game | 60,166/452,216 words decompiled (13.30%) |
|
|
| Total | 68,772/544,620 words decompiled (12.63%) |
|
|
|
|
Assets:
|
|
|
|
| Asset Type | Progress |
|
|
|-----------------|-------------------------------------------|
|
|
| Lang files | Done |
|
|
| Setup files | Done |
|
|
| Prop files | To do |
|
|
| Character files | To do |
|
|
| Gun files | To do |
|
|
| BG files | To do |
|
|
| Pad files | To do |
|
|
| Tile files | Done |
|
|
| MIDI files | Extracted as binaries |
|
|
| Animation files | To do |
|
|
| Textures | To do |
|
|
|
|
If you want to browse the stage setup files, use this table to find the filename:
|
|
|
|
| Stage | File |
|
|
|------------------|--------------------------------------------|
|
|
| Defection | [setupame.c](src/files/setup/setupame.c) |
|
|
| Investigation | [setupear.c](src/files/setup/setupear.c) |
|
|
| Extraction | [setupark.c](src/files/setup/setupark.c) |
|
|
| Villa | [setupeld.c](src/files/setup/setupeld.c) |
|
|
| Chicago | [setuppete.c](src/files/setup/setuppete.c) |
|
|
| G5 Building | [setupdepo.c](src/files/setup/setupdepo.c) |
|
|
| Infiltration | [setuplue.c](src/files/setup/setuplue.c) |
|
|
| Rescue | [setuplip.c](src/files/setup/setuplip.c) |
|
|
| Escape | [setuptra.c](src/files/setup/setuptra.c) |
|
|
| Air Base | [setupcave.c](src/files/setup/setupcave.c) |
|
|
| Air Force One | [setuprit.c](src/files/setup/setuprit.c) |
|
|
| Crash Site | [setupazt.c](src/files/setup/setupazt.c) |
|
|
| Pelagic II | [setupdam.c](src/files/setup/setupdam.c) |
|
|
| Deep Sea | [setuppam.c](src/files/setup/setuppam.c) |
|
|
| Defense | [setupimp.c](src/files/setup/setupimp.c) |
|
|
| Attack Ship | [setuplee.c](src/files/setup/setuplee.c) |
|
|
| Skedar Ruins | [setupsho.c](src/files/setup/setupsho.c) |
|
|
| MBR | [setupwax.c](src/files/setup/setupwax.c) |
|
|
| Maian SOS | [setupsev.c](src/files/setup/setupsev.c) |
|
|
| WAR! | [setupstat.c](src/files/setup/setupstat.c) |
|
|
| The Duel | [setupate.c](src/files/setup/setupate.c) |
|
|
| CI Training | [setupdish.c](src/files/setup/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.
|
|
|
|
1. 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 be `0x80371240`).
|
|
2. Run `make extract`. This will create an `extracted/ntsc-final` directory containing assets from your ROM.
|
|
|
|
## Compiling
|
|
|
|
The project can do the following:
|
|
|
|
* Build individual ucode binaries (boot, lib, setup, inflate and game) which match the ones extracted from the base ROM.
|
|
* Build a functioning ROM by splicing the C source and assets into an existing ROM. The built ROM is not byte perfect yet, but is is functionally equivalent.
|
|
|
|
* Run `make` to build the assets that will be included in the ROM. These files will be written to `build/ntsc-final` and are matching what's in the `extracted/ntsc-final` folder.
|
|
* Run `make rom` to build the ROM. The ROM will be written to `build/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.
|