The Order: 1886 PC Native Port
English | Português (Brasil) | Español
A work-in-progress PC port of The Order: 1886 (PlayStation 4) for Windows 10 and 11.
The CPU side is native: the game's original executable runs directly on the PC's processor (the PS4 uses the same x86-64 architecture), and a runtime written for this port replaces the PS4 system libraries, so there is no CPU emulator. The graphics are translated: they run on the shadPS4 video core, which converts the PS4 GPU commands and shaders to Vulkan. This project started as a copy of the God of War III Remastered port and is being adapted to Ready at Dawn's engine.
No game files are included. You need a dump of your own copy of the game. This project is not affiliated with Sony Interactive Entertainment, Ready at Dawn or Santa Monica Studio. The Order: 1886 is a trademark of Sony Interactive Entertainment.
Status
Checked on Windows 11 with an NVIDIA GeForce RTX 5060 Laptop GPU and the dump CUSA00035,
version 01.02 (eboot.bin sha256 f742eb17…):
- The game boots through the logos and the title screen into a new game; the prologue cutscene renders in the engine (characters, lighting and textures checked in frame dumps).
- A 4-minute run of the prologue held the game's own 30 FPS in every 5-second window, with a
99th-percentile frame time of about 34.5 ms, and no crash in more than 20 consecutive automated
runs (
tools/batch_runs.py). - The Vulkan validation layer reports a single remaining warning class in these scenes
(
magFilter-04553, a linear sampler used with an integer texture).
Not verified yet: gameplay beyond the prologue, sound (the automated runs do not check it), saving and loading, AMD and Intel graphics cards, other regions and versions of the game, Linux. The work log, the fixes and the open items are in docs/PROGRESS.md.
Requirements
- Windows 10 (1903 or newer) or Windows 11, 64-bit.
- A 64-bit processor with AVX. On CPUs without MOVBE, BMI1 or LZCNT (Sandy/Ivy Bridge, AMD FX)
the loader rewrites the game's instructions that use them to emulated stubs and logs an
ISA:line; older CPUs stop at start with aSTOP: this CPU lacksline. - A graphics card with Vulkan 1.3 and a current driver.
- Your dump of the game: the folder with
eboot.bin,sce_moduleandsce_sys. Only CUSA00035 01.02 has been tested; the patch file also lists CUSA00070, CUSA00076, CUSA00100, CUSA00670 and CUSA00785. - MSYS2 and Python 3 to build it (see below).
Building
-
Install MSYS2 (
winget install MSYS2.MSYS2) and, in the MSYS2 CLANG64 shell, the packages listed in packaging/windows/README.md. -
Clone with the submodules and build:
git clone --recursive https://github.com/mateussmeneses/theorder1886-port cd theorder1886-port bash build.shThe result is
out/theorder-probe.exe(also copied asout/theorder-probe.exe). If the build says it cannot replace the executable, a game process is still running.
Playing
The game folder is taken from THEORDER_GAME_DIR; without it, run.py looks for a CUSA00035
folder next to the project folder.
$env:THEORDER_GAME_DIR = 'D:\path\CUSA00035' python run.py
Or double-click one of the batch files (their menus are in Portuguese):
Jogar The Order 1886.bat: a menu that starts the game normally, or with the engine's own options described below (level shortcuts, a lighter "performance" mode).Jogar - Inicio Rapido.bat: starts the game (python run.py).Jogar - Modo Performance.bat: starts it with the lighter engine options.
Engine options
These options exist in the game's executable; run.py passes them on. What they do in the retail
build is not verified yet: with --level, the game still stops at the title screen.
run.py |
Game option |
|---|---|
--level <name> |
-startlevel <name> (for example cat_010_streets, emb_020_tunnels, air_010_rappel, pro_020_westminster) |
--checkpoint <name> |
-startcheckpoint <name> |
--no-cloth |
-disablecloth |
--no-cam-springs, --no-cam-additive |
-nocamsprings, -nocamadditive |
--msaa <n> |
-msaa <n> |
--frontend |
-frontend |
--perf |
-disablecloth -nocamsprings -nocamadditive -msaa 1 |
Controls
Controllers (DualSense, Xbox and others) work through SDL3, together with the keyboard.
| Key | Button |
|---|---|
| WASD | left stick |
| Arrows | right stick (camera) and d-pad |
| Space or Enter | Cross |
| Left Shift or Esc | Circle |
| E | Square |
| Q | Triangle |
| 1 and 3 | L1 and R1 |
| R and F | L2 and R2 |
| Z and C | L3 and R3 |
| I, K, J, L | d-pad |
| Tab and Backspace | left and right touchpad click |
| Insert | the port's menu (R3+L2 on a controller) |
The keyboard has no Options button yet. On a controller without a touchpad, View (Back) is the
right touchpad click. THEORDER_KEY_MAP and THEORDER_PAD_MAP change the buttons (src/runtime_pad.c).
The port's menu (Insert) holds the display, frame limit and performance overlay settings.
Patches
patches/TheOrder1886-Orbis.xml is applied in memory at start; the game files are not changed.
Every patch is off by default.
-
Frame Rate Patch - 60 FPS (experimental): sets the four 30 FPS frame-time constants (33333 µs) of the 01.02 executable to 16667; the sites were checked in the binary. The game also asks for a 30 Hz presentation, so the port must present every vblank and cap at 60:
Set-Content fps60.ini 'engine_fps=120' # the launcher logic falls back to the 60 FPS patch $env:THEORDER_CONFIG = (Resolve-Path fps60.ini) $env:THEORDER_FLIP_RATE = '0'; $env:THEORDER_FPS_LIMIT = '60' python run.py
Game speed stays correct (frame dumps line up in time with a 30 FPS run). The logos and the title hold 60 FPS; in a 240 s run of the prologue every 5 s window averaged 41-60 FPS (57 overall), the dips where the GPU command thread is busy all frame (600-700 draws per frame).
-
Aspect Ratio - 16:9 / 16:10 / 21:9 (launcher and in-game menu: Aspect ratio, applied on restart): the game draws a 2.40:1 picture with black bars. These patches change the shape of the picture (the float 2.4 at 0x44ce8c) and the factor 0.5625 with which every camera turns its horizontal field of view (defined for 16:9) into a vertical one, so the view keeps the original width and shows more above and below (Vert+) instead of being cropped at the sides. The port shows only the picture, fitted to the window: a 16:10 or 21:9 screen is filled too. The scene has more pixels (1920x1080 instead of 1920x800 at 16:9); at 60 FPS in the prologue (RTX 5060 Laptop) that cost about 1% (57.8 against 58.3 FPS on average).
-
The other patches written during earlier development were removed after testing: Skip Intro Logos changed nothing, Auto-Dismiss Title Screen left a black screen, the two Skip Prologue patches could not be verified, and the 900p, 720p and letterbox removal patches wrote inside instructions (enabling them corrupted the code).
Settings and diagnostics
The graphics core reads these environment variables:
| Variable | Effect |
|---|---|
THEORDER_NO_MSAA=1 / 0 |
single-sampled or multisampled game images (multisampled by default on NVIDIA) |
THEORDER_ASYNC_COMPUTE=0 / 1 |
compute pipelines never built for this game before: always on the GPU thread / always in the background (dispatches skipped meanwhile; menus can lose text and button icons). Default: in the background only for programs that run every frame and write no image |
THEORDER_PIPELINE_BINARY_CACHE_MB=N |
size of the pipeline binary cache (default 4096); the oldest binaries beyond it are removed at start |
THEORDER_LAZY_SHADER_CACHE=0 |
translates every shader again instead of loading the cached ones |
THEORDER_FLIP_RATE, THEORDER_FPS_LIMIT |
presentation rate overrides (see the 60 FPS patch) |
THEORDER_VK_VALIDATION=1 |
Vulkan validation layer (with VK_ADD_LAYER_PATH pointing to it) |
THEORDER_GPU_LOG=info |
GPU log level |
THEORDER_PERMUTATION_LOG=1 |
why each new shader permutation was compiled |
THEORDER_BIG_TRACK_LOG=1 |
who tracks memory ranges above 256 MiB |
THEORDER_PAD_FILE=<file> |
scripted controller input for automated runs |
Saves and the shader cache are in the project's user folder (user/savedata,
user/cache/CUSA00035).
Tests
python -m unittest discover -s tests # 273 tests, all passing on 2026-10-15 python tools/batch_runs.py --runs 8 --secs 40 --pad "24:cross 28:cross 32:cross" python tools/fault_stacks.py out/batch/*.log
tools/batch_runs.py starts the game repeatedly, can compare conditions (--cond), press buttons
(--pad, to get past the title screen) and reports faults, freezes and compile time;
tools/fault_stacks.py symbolizes the fault reports.
How it works
| Part | Where | What it does |
|---|---|---|
| Preparation | scripts/ |
Reads eboot.bin, applies its relocations and links the game's own libc and libSceFios2 into one image |
| Loader | src/probe.c |
Loads the image and starts the game's original code |
| Runtime | src/runtime_*.c |
Reimplements the PS4 system functions: memory, threads, files, audio, video, controller, saves and services |
| GPU | gpu/shadps4/ |
The shadPS4 video core with cuesta4's fixes and the God of War III and The Order ports' work (asynchronous shader and pipeline builds, shader cache) |
| Port menu | gpu/shim/port_overlay.cpp |
The Dear ImGui menu and performance overlay |
| Patches | patches/TheOrder1886-Orbis.xml, scripts/patches.py |
Applied in memory at start |
The launcher in launcher/ and the Linux packaging in packaging/linux/ come from the God of War
III port and have not been adapted to this game.
Credits
- Felipe Prado: the God of War III Remastered PC port this project is copied from.
- deadinside28: bloodborne_pc, the original native port, and Supermedo (Mohammed Albarghouthi), its Windows fork.
- cuesta4: the shadPS4 fork (branch
eltutz) whose fixes the video core carries. - shadPS4 team: the shadPS4 video core.
Also used: LibAtrac9, FFmpeg, SDL3, Dear ImGui, sirit, magic_enum, miniz, xbyak, Vulkan Memory Allocator, FSR-Vulkan and the AMD FidelityFX SDK, MSYS2, LLVM and Pillow.
License
GNU GPL v2 or later (LICENSE). Third-party components keep their own licenses.