This repository contains a work-in-progress port of the Perfect Dark decompilation to modern platforms.
To run the port, you must already have a Perfect Dark ROM, specifically one of the following:
ntsc-final
/US V1.1
/US Rev 1
(md5e03b088b6ac9e0080440efed07c1e40f
).
This is the recommended version to use.
CalledNTSC version 8.7 final
on the boot screen.ntsc-1.0
/US V1.0
(md57f4171b0c8d17815be37913f535e4e93
).
Technically supported, but not recommended.
CalledNTSC version 8.7 final
on the boot screen as well.jpn-final
(md5538d2b75945eae069b29c46193e74790
).
Technically supported, but requires a separate custom-built executable.
CalledJPN version 8.9 final
on the boot screen.pal-final
(md5d9b5cd305d228424891ce38e71bc9213
).
Technically supported, but requires a separate custom-built executable.
CalledPAL 8.7 final
on the boot screen.
The game is in a mostly functional state, with both singleplayer and split-screen multiplayer modes fully working.
There are minor graphics- and gameplay-related issues, and possibly occasional crashes.
The following extra features are implemented:
- mouselook;
- dual analog controller support;
- widescreen resolution support;
- configurable field of view;
- 60 FPS support, including fixes for some framerate-related issues;
- fixes for a couple original bugs and crashes;
- basic mod support, currently enough to load a few custom levels;
- slightly expanded memory heap size;
- experimental high framerate support (up to 240 FPS):
- set
Game.TickRateDivisor
to0
inpd.ini
to activate; - in practice the game will have issues running faster than ~165 FPS, so use VSync or
Video.FramerateLimit
to cap it.
- set
Currently only 32-bit platforms are supported, namely x86 Windows and Linux.
Note that 32-bit binaries will still work on 64-bit versions of those platforms,
though you might have to install some additional libraries.
Latest automatic builds for supported platforms:
You must already have a Perfect Dark ROM to run the game, as specified above.
- Create a directory named
data
next topd.exe
. - Put your Perfect Dark ROM named
pd.ntsc-final.z64
into it. - Run
pd.exe
.
Additional information can be found in the wiki.
A GPU supporting OpenGL 3.0 or above is required to run the port.
1964GEPD-style and Xbox-style bindings are implemented.
N64 pad buttons X and Y (or X_BUTTON
, Y_BUTTON
in the code) refer to the reserved buttons 0x40
and 0x80
, which are also leveraged by 1964GEPD.
Support for one controller, two-stick configurations are enabled for 1.2.
Note that the mouse only controls player 1.
Controls can be rebound in pd.ini
. Default control scheme is as follows:
Action | Keyboard and mouse | Xbox pad | N64 pad |
---|---|---|---|
Fire / Accept | LMB/Space | RT | Z Trigger |
Aim mode | RMB/Z | LT | R Trigger |
Use / Cancel | E | N/A | B |
Use / Accept | N/A | A | A |
Crouch cycle | N/A | L3 | 0x80000000 (Extra) |
Half-Crouch | Shift | N/A | 0x40000000 (Extra) |
Full-Crouch | Control | N/A | 0x20000000 (Extra) |
Reload | R | X | X (0x40) |
Previous weapon | Mousewheel forward | B | D-Left |
Next weapon | Mousewheel back | Y | Y (0x80) |
Radial menu | Q | LB | D-Down |
Alt fire mode | F | RB | L Trigger |
Alt-fire oneshot | F + LMB or E + LMB |
A + RT or RB + RT |
A + Z or L + Z |
Quick-detonate | E + Q or E + R |
A + B or A + X |
A + D-Left or A + X |
- Install MSYS2.
- Open the
MINGW32
prompt. (NOTE: not theMSYS
prompt or theMINGW64
prompt) - Install dependencies:
pacman -S mingw-w64-i686-toolchain mingw-w64-i686-SDL2 mingw-w64-i686-zlib make git
- Run
make -f Makefile.port
in theperfect_dark
directory. - The resulting executable will be at
build/ntsc-final-port/pd.exe
.
- Ensure you have gcc, g++ (version 10.0+) and 32-bit versions of SDL2 (version 2.0.12+), libGL and ZLib installed on your system.
- On a 64-bit system you also need to have
gcc-multilib
andg++-multilib
(or your distro's analogues) installed.
- On a 64-bit system you also need to have
- Run the following command in the
perfect_dark
directory:- On a 64-bit system:
make -f Makefile.port TARGET_PLATFORM=i686-linux
- On a 32-bit system:
make -f Makefile.port
- On a 64-bit system:
- The resulting executable will be at
build/ntsc-final-port/pd.exe
.
Currently only i686-linux
and i686-windows
are supported, using gcc -m32
and i686-w64-mingw32-gcc
as compilers, respectively.
Alternate compilers can be specified by passing TOOLCHAIN=i686-whatever-
as a command line argument.
You can build an executable with PAL or JPN ROM support by adding ROMID=pal-final
or ROMID=jpn-final
to the make
command.
You will need to provide a jpn-final
or pal-final
ROM for those, named pd.jpn-final.z64
or pd.pal-final.z64
.
It might be possible to build a 32-bit ARM executable, but this has not been tested.
- the original decompilation project authors;
- doomhack for the only other publicly available PD porting effort I could find;
- sm64-port authors for the audio mixer and some other changes;
- Ship of Harkinian team, Emill and MaikelChan for the libultraship version of fast3d that this port uses;
- lieff for minimp3;
- Mouse Injector and 1964GEPD authors for some of the 60FPS- and mouselook-related fixes;
- everyone who has submitted pull requests and issues to this repository and tested the port;
- probably more I'm forgetting.