# PerfectDarkZeroRecomp
PerfectDarkZeroRecomp
A static recompilation of [**Perfect Dark Zero**](https://en.wikipedia.org/wiki/Perfect_Dark_Zero) (Xbox 360, 2005, Title ID `4D5307D3`) to native PC, built on the [ReXGlue SDK](https://github.com/rexglue/rexglue-sdk). The game's PowerPC code is translated into C++ and compiled. There is no emulator. > This project is not affiliated with Microsoft or Rare. It contains no game > files: you need your own legally owned copy of the game. ## Status - Fully playable on Windows: video, audio, gameplay, achievements and saves. - Keyboard and mouse support. - Optional patches: 60 FPS (on by default) and 16:9. - Third-person camera and language selection, see [Mods](#mods). ## Requirements - CMake 3.25+, Ninja, and Clang/LLVM. MSVC alone won't build this. - The game's files, extracted from your disc or ISO with [ABGX360](https://github.com/BakasuraRCE/abgx360) or [extract-xiso](https://github.com/XboxDev/extract-xiso/releases). ## Build 1. Clone the repo with its submodule. The ReXGlue SDK is built from source (`thirdparty/rexglue-sdk`). ``` git clone --recursive https://github.com/nikolaygorb/PerfectDarkZeroRecomp.git ``` If you already cloned without it, run `git submodule update --init --recursive`. 2. Copy the extracted game files into `assets/`, so the path is `assets/default.xex`. `assets/` is gitignored. 3. Build: ``` cmake --preset win-amd64-release cmake --build --preset win-amd64-release ``` There are also Linux and macOS presets (`linux-amd64-*`, `mac-*`), but only Windows is tested. Codegen (`default.xex` → `generated/`) runs automatically as part of the build. Check that your dump is the expected retail release: XEX CRC `375EC9BB`, Media ID `6D6481013A4FDD3DA32BD2D0-750FF1D9`. ## Run ``` out\build\win-amd64-release\perfectdarkzerorecomp.exe ``` Game files are found in `/assets` automatically; use `--game_data_root` to point somewhere else. Logs go to `out\build\\logs\`. ## Mods ### Third-person camera Press **V** in game to switch between first and third person. Set `pdz_tp_enable = true` in `hardware.toml` to start in third person. Camera offset and the rest of the options are in [`src/mod/README.md`](src/mod/README.md). ### Language Set `user_language` in `hardware.toml` and restart the game: ``` # 1 = English, 3 = German, 4 = French user_language = 1 ``` Only languages your copy of the game includes will work (check `assets/pdz/ASSETS/loc/`). Anything else falls back to English. ### Local player profiles Press **F9** to open the profile list. You can create profiles, rename them and pick the one to play next time. Each profile has its own saves and achievements. A new profile or name takes effect after you restart the game. The first profile, "User", keeps the saves you already have. Other profiles save to `profiles//` in the user data folder (`Documents/perfectdarkzerorecomp` by default), so renaming a profile doesn't move its saves. The list is kept in `local_profiles.toml` in that folder. Settings and the shader cache are shared. Names are 1–15 characters: letters, digits, spaces, `-` and `_`. To use another key, change `bind_local_profiles` in `settings/mapping.toml`. ## Configuration All settings live in [`settings/`](settings/README.md) and are loaded at startup. Most can also be changed in game from the F4 overlay. | File | What it covers | |---|---| | `hardware.toml` | renderer, window, patches (`pdz_fps60_unlock`, `pdz_aspect_ratio_16_9`), `pdz_gpu_wait_mode`, third-person camera (`pdz_tp_*`), language (`user_language`) | | `mapping.toml` | input backend, keyboard and mouse (`mnk_*`), key bindings including `bind_third_person` | ## Development notes - Set `dev_debug_runtime = true` to stub every unknown function and log missing ones to `logs/stub_sweep.txt` and `logs/missed_functions.txt`. - Game-specific hooks are in `src/`: patches, the GPU wait hook in `render/`, and the camera mod in `mod/`. ## Credits - [ReXGlue SDK](https://github.com/rexglue/rexglue-sdk), whose runtime is derived from [Xenia](https://github.com/xenia-project/xenia) - [xenia-canary/game-patches](https://github.com/xenia-canary/game-patches), the source of the 60 FPS and 16:9 patches - [SDL_GameControllerDB](https://github.com/mdqinc/SDL_GameControllerDB), for `settings/gamecontrollerdb.txt` (zlib license) - [ABGX360](https://github.com/BakasuraRCE/abgx360) and [extract-xiso](https://github.com/XboxDev/extract-xiso), for dumping the game ## License MIT. See [LICENSE](LICENSE). This applies to this project's own code only, not to the game or its assets.