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
(md5 e03b088b6ac9e0080440efed07c1e40f
).NTSC version 8.7 final
on the boot screen.ntsc-1.0
/US V1.0
(md5 7f4171b0c8d17815be37913f535e4e93
).NTSC version 8.7 final
on the boot screen as well.jpn-final
(md5 538d2b75945eae069b29c46193e74790
).JPN version 8.9 final
on the boot screen.pal-final
(md5 d9b5cd305d228424891ce38e71bc9213
).PAL 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:
Game.TickRateDivisor
to 0
in pd.ini
to activate;Video.FramerateLimit
to cap it.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:
If you are looking for netplay builds (the port-net
branch), see this link.
You must already have a Perfect Dark ROM to run the game, as specified above.
data
next to pd.exe
if it's not there.pd.ntsc-final.z64
into it.pd.exe
.If you want to use a PAL or JPN ROM instead, put them into the data
directory and run the appropriate executable:
pd.pal-final.z64
, EXE name pd.pal.exe
.pd.jpn-final.z64
, EXE name pd.jpn.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 |
MINGW32
prompt. (NOTE: not the MSYS
prompt or the MINGW64
prompt)pacman -S mingw-w64-i686-toolchain mingw-w64-i686-SDL2 mingw-w64-i686-zlib make git
git clone --recursive https://github.com/fgsfdsfgs/perfect_dark.git && cd perfect_dark
make -f Makefile.port
.
ROMID=pal-final
or ROMID=jpn-final
at the end of the command if you want to build a PAL or JPN executable respectively.build/ntsc-final-port/pd.exe
.explorer .
to open the current directory.gcc-multilib
and g++-multilib
(or your distro's analogues) installed.git clone --recursive https://github.com/fgsfdsfgs/perfect_dark.git && cd perfect_dark
make -f Makefile.port TARGET_PLATFORM=i686-linux
make -f Makefile.port
ROMID=pal-final
or ROMID=jpn-final
at the end of the command if you want to build a PAL or JPN executable respectively.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 to run 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.