A native Windows build of Demon's Souls (PS3, USA, BLUS-30443), made by statically recompiling the game's PowerPC (PPU) and SPU code to C/C++ with ps3recomp, plus a PS3 runtime and a Direct3D 12 renderer. It is not an emulator: the game's code runs as a normal x64 program.
No game files are included. This repo holds only the tools, patches and build scripts. You need your own copy of the game, dumped from your own disc. The setup reads your disc image and builds everything on your PC.
The entire game seems playable. It runs with sound and music at 60 fps (or 50 on a 100 Hz screen, 30, uncapped, or any frame rate you pick), with keyboard + mouse or an Xbox controller. Intro movies are skipped and there is no online play.
I'm currently playing through the whole game to find and fix any spots that still run slower than they should (stutters, frame drops in heavy scenes). Boletarian Palace, the heaviest area tested so far, is already smooth. Expect more performance fixes as the playthrough goes on; see docs/NOTES.md for the full development log (50 fixes and counting).
If you hit a stutter or a crash, please report it: see
Reporting stutters and crashes. Every run is recorded, so all it
takes is pressing F8 when it happens and running REPORT.bat afterwards.
- Windows 10/11 x64 and a Direct3D 12 GPU. AVX2 (Intel Haswell / AMD Ryzen or newer) is used when your CPU has it; on older CPUs BUILD.bat builds without it (a couple of fps slower in the heaviest areas).
- About 12 GB free disk space (8 GB game files + build).
- Your disc image of Demon's Souls USA (BLUS-30443): a
.iso(a Redump.zipworks as is), or a dumped disc folder withPS3_GAMEin it. A Redump-style encrypted image also needs its disc key (the.dkeyfile that comes with the dump, or the "Disc Key" on its Redump page). - RPCS3, used once to decrypt the game's
EBOOT.BIN. Unzip it anywhere. - Python 3.10+ and Git. If they are missing, SETUP.bat offers to install them with winget.
- Visual Studio 2022 (Community or the free Build Tools) with Desktop development with C++, and LLVM (clang-cl) 17 or newer. If they are missing, setup offers to install them with winget.
- Download this repo (green Code button → Download ZIP, or
git clone) and unpack it somewhere with enough space, ideally a path without unusual characters. - Drag your disc image onto
SETUP.bat, or double-clickSETUP.batand it asks for it. - Answer its questions: the disc key if the image is encrypted, and where
rpcs3.exeis.
That's it. SETUP.bat then:
| step | what happens | time* |
|---|---|---|
| 1 | extracts all game files from the image (and decrypts them) into game/ |
2–5 min |
| 2 | decrypts EBOOT.BIN → EBOOT.elf with RPCS3 and checks it is the tested version |
< 1 min |
| 3 | downloads ps3recomp at the tested commit and applies this port's runtime patch | < 1 min |
| 4 | recompiles the game: ~94,000 PPU functions + 12 SPU programs → C/C++ in port/ |
2–4 min |
| 5 | applies this port's edits to the recompiled code (patches/lifted-code.patch) |
seconds |
| 6 | compiles everything with clang-cl into port/build_opt/DemonsSoulsRecomp.exe |
10–30 min |
* on a fast 16-core PC; the first compile is the long part. If anything fails, fix what it says and run SETUP.bat again: finished steps are skipped.
Double-click PLAY.bat. The logos and first load take about a minute.
| launcher | what it does |
|---|---|
PLAY.bat |
60 fps (50 fps automatically on a ~100 Hz monitor, every frame shown exactly 2 refreshes) |
PLAY_30FPS.bat |
the original 30 fps |
PLAY_50FPS.bat |
50 fps locked to a 100 Hz screen |
PLAY_UNLIMITED.bat |
uncapped (up to 240 fps), no vsync, game speed stays correct |
PLAY_CHOOSE_FPS.bat |
a menu of the above, plus any frame rate you type in (31–240) |
PLAY_REMASTER.bat |
runs with the PC Remaster mod installed (see below) |
PLAY_DUMP_TEXTURES.bat |
saves every texture the game draws, for texture packs (see below) |
Custom frame rate. PLAY_CHOOSE_FPS.bat → 6 → type a number, e.g. 45, 72, 120 or 144. The game
runs at real speed at any of them. If your monitor's refresh rate is a whole multiple of the number
(72 or 144 on a 144 Hz screen, 40 or 120 on 120 Hz), every frame is shown for the same number of
refreshes and motion is perfectly even. Otherwise vsync is turned off, which looks fine on a
G-Sync / FreeSync screen but can tear on others. The launcher says which one you got. You can also
set DES_FPS=<number> before running PLAY.bat.
Controls. An Xbox (XInput) controller works when plugged in (A = Cross, B = Circle, X = Square, Y = Triangle, LB/RB = L1/R1, LT/RT = L2/R2, Back = Select). A DualShock/DualSense needs Steam Input or DS4Windows. Keyboard + mouse:
| WASD | move |
| mouse (or IJKL) | camera |
| left mouse | attack (R1) |
| Shift | strong attack (R2) |
| right mouse | block (L1) |
| Ctrl | parry (L2) |
| Space | roll / dash / back (Circle) |
| E | interact / confirm (Cross) |
| F | two-hand (Triangle) |
| R | use item (Square) |
| Tab / middle mouse | lock on (R3) |
| arrows | d-pad (switch items) |
| Enter / Backspace | Start / Select |
| F1 | capture / release the mouse |
| F9 | god mode on/off (no death, HP/MP/stamina stay full) |
At Create Profile a text box opens for the character name. Saves go to gamedata/. Each run
writes logs to logs/ (they grow by ~600 MB an hour; the previous run is kept as *_prev.txt).
Every launcher records frame timing while you play (about 25 MB an hour, no visible cost; the newest
10 sessions are kept in perf\). The window title shows [RECORDING - F8 = stutter, N marked].
- Press F8 in the game right after you see a stutter, hitch or slowdown. Each press puts a mark in the recording at that moment, so the exact frames can be found later. Press it as often as you like.
- After you quit (or right after a crash), double-click
REPORT.bat. It packs the last session into one zip, shows it in Explorer and opens the GitHub New issue page. - Open an issue with the Stutter / slowdown or Crash / bug template, drag the zip into it, and say where you were in the game and what you saw at each F8 press.
What the zip contains (nothing else, and your Windows user name is removed from all of it):
| file | what it is |
|---|---|
report.txt |
the summary from tools/perf_report.py: frame pacing, every hitch with its likely cause (a slow game step, shader compile, slow file read, the renderer, the GPU), and what happened just before each F8 mark |
perf.txt |
the recording itself, so we can dig into the exact frames (trimmed to the minutes around your F8 marks if the session is too long for GitHub's 25 MB limit) |
system.txt |
Windows version, CPU, RAM, GPU + driver, monitor resolution / refresh, the frame-rate setting and which version of this port you built |
log_tail.txt |
the last 400 lines of the game's log, from the same session (shows what it was doing if it crashed) |
Curious yourself? .venv\Scripts\python tools\perf_report.py prints the same summary for your newest
recording. To play without recording, set DES_RECORD=0 before running a launcher.
The Demon's Souls PC Remaster mod by fromsoftserve (Nexus Mods, Demon's Souls mod 106) (made for RPCS3) works with this port. Download the mod's zip yourself, then:
.venv\Scripts\python tools\install_remaster.py "path\to\the mod.zip" --applyThat builds game_remaster/ as a hard-linked copy of game/ (no extra disk space) with the mod's
files swapped in. Your normal game/ is not changed. Play with PLAY_REMASTER.bat.
Textures can be replaced without unpacking any game files, at any resolution:
- Run
PLAY_DUMP_TEXTURES.batand play through the part you want to change. Every texture the game draws is saved once totextures\dump\as<KEY>_<width>x<height>_<format>.png, exactly as it looks in game. The 16-character KEY comes from the texture's contents, so it is the same on every PC. - Edit a PNG (or make a bigger one) and put it in
textures\replace\with a name that starts with the same KEY, e.g.0123456789ABCDEF_armour_4k.png. Sub folders are fine. - Start any launcher. Replacements load in the background;
.ddsfiles (DXT1/3/5, BC7, BC4 or 32-bit RGBA, with or without mipmaps) load faster and use less video memory than PNG.
Details and settings: textures\README.txt. Cubemaps (reflections) are not covered; models are file
mods (see the PC Remaster section). Packs are made from the game's art -- share them only where that
is allowed.
SETUP.bat / BUILD.bat one-time setup / rebuild after code changes
PLAY*.bat launchers (environment switches documented inside PLAY.bat)
REPORT.bat packs the last session into a zip for a GitHub issue
setup/setup.py, build.py the setup pipeline and the toolchain finder + build
project/ CMake project: CMakeLists.txt, main.cpp, stubs.cpp
patches/ps3recomp-local.patch this port's changes to the ps3recomp runtime/renderer (applied to
ps3recomp @ 4e8f3ca, v0.18.0)
patches/lifted-code.patch this port's edits to the recompiled game code (frame pacing, 60 fps
step, god mode, test hooks)
tools/ disc extraction, UDF names, SPURS job lifting, perf report + issue zip, mod installer
docs/NOTES.md development log: every fix, why, and how it was measured
Everything SETUP.bat produces (game/, port/, deps/, .venv/, saves, logs) is in .gitignore.
Never commit or share those: they are the game.
- "RPCS3 did not write EBOOT.elf": close any open RPCS3 window and run SETUP.bat again, or decrypt
by hand: RPCS3 → Utilities → Decrypt PS3 Binaries →
game\PS3_GAME\USRDIR\EBOOT.BIN. If RPCS3 itself complains, install the PS3 firmware in RPCS3 first (File → Install Firmware). - "EBOOT.BIN is not the tested one": only the USA disc (BLUS-30443, version as on the disc) is supported. Other regions or updated EBOOTs need different patches.
- Build tools not found: install Visual Studio 2022 Build Tools with Desktop development with C++
and LLVM (
winget install LLVM.LLVM), or setLLVM_DIRto an LLVM folder, then run BUILD.bat. - The game window stays black / closes: look at the end of
logs\last_run_err.txt. - "needs AVX2" message box: this build was made on a PC with AVX2 and yours has none. Run
BUILD.bat on this PC (it picks the right setting), or
set DS_AVX2=0before BUILD.bat on the other one.
- ps3recomp by Ned Heller / sp00nznet (MIT): the recompiler and runtime this port is built on.
- RPCS3: used to decrypt the EBOOT, and as the reference for how the PS3 behaves.
- The PC Remaster mod is by fromsoftserve.
This repo's own code and patches are under the MIT license (see LICENSE). Demon's Souls is © Sony Interactive Entertainment / FromSoftware. This project is not affiliated with or endorsed by them, and contains none of their files. Buy the game and dump your own disc.