Demon's Souls Recomp

Demon's Souls is a native PC port of the PlayStation 3 game, offering playable status with customizable frame rates and resolutions.

README

Demon's Souls — native PC port (ps3recomp)

A native Windows build of Demon's Souls (PS3, USA, BLUS-30443). The game's PPU and SPU code is statically recompiled to C/C++ with ps3recomp and runs as a normal x64 program on a PS3 runtime and a Direct3D 12 renderer. It is not an emulator.

No game files are included. This repo holds only tools, patches and build scripts. SETUP builds the game on your PC from your own disc image.

Community Discord: discord.gg/gTvrZZ75G for questions, setup help and screenshots. Bug reports with a REPORT.bat zip are best as a GitHub issue.

Status

  • The whole game seems playable, with sound, music and movies, on keyboard + mouse or an Xbox controller.
  • 60 fps is recommended (50 on a 100 Hz screen). 30, uncapped and any custom rate work too. Above 60 fps there are still known bugs, such as the sound drifting out of sync.
  • No online play yet. Multiplayer comes once the game is optimised.
  • Performance: mostly smooth on high-end PCs; work on lower-end PCs and the Steam Deck is ongoing. The full development log is docs/NOTES.md.

Hit a stutter or crash? Press F8 when it happens and run REPORT.bat afterwards (details).

What you need

  • Windows 10/11 x64 with a Direct3D 12 GPU. AVX2 is used if your CPU has it (Haswell / Ryzen or newer).
  • About 14 GB free disk space.
  • Your disc image of Demon's Souls USA (BLUS-30443): a .iso, a Redump .zip, or a dumped folder with PS3_GAME in it. An encrypted image also needs its disc key: the .dkey file from the dump, or the "Disc Key" line on Redump's page for this disc.
  • Nothing else. SETUP downloads what is missing into deps\, with no installer or admin rights: portable Python and Git, the PS3 keys for EBOOT.BIN (from RPCS3's public source, kept in %LOCALAPPDATA%), and a portable LLVM compiler with Microsoft's SDK via xwin. All downloads are checksum-verified. An existing Python 3.10+, Git, or Visual Studio 2022 (Desktop development with C++) + LLVM 17+ is used instead.
  • A plain folder path: no [ ] or &.

macOS (Apple Silicon): experimental native arm64 / Metal build by erikomis; see docs/MACOS.md. Linux / Steam Deck: an AppImage kit builds the port and runs it through Proton; see docs/LINUX.md. It plays on Ubuntu 24.04 and on the Steam Deck, though the Deck is not smooth yet and loads are slow.

Build it (one time)

  1. Download the newest release ZIP (or git clone) and unpack it, e.g. to C:\Games\DemonsSouls.
  2. Start DemonsSoulsLauncher.exe, press PLAY, and answer Yes to run SETUP.bat.
  3. Give it your disc image: drag it into the window and press Enter. If it needs the disc key, SETUP opens Redump's page; copy the "Disc Key" line and paste it with Ctrl+V. Enter takes the suggested answer to every other question.
  4. Wait for All done, then press PLAY.
stepwhat SETUP doestime*
1extracts and decrypts the game files into game/2–5 min
2decrypts EBOOT.BIN → EBOOT.elf and checks it is the tested versionseconds
3fetches ps3recomp at the tested commit and applies this port's runtime patch< 1 min
4recompiles ~94,000 PPU functions + 12 SPU programs into port/2–4 min
5applies this port's edits to the recompiled codeseconds
6compiles DemonsSoulsRecomp.exe and the launcher10–30 min

* on a fast 16-core PC. The compiler's full output goes to logs\build_last.txt. If something fails, fix what it says and run SETUP.bat again: finished steps are skipped.

Updating

Press Check for updates in the launcher. It downloads the newest release (no Git needed), rebuilds what changed and reopens. Your game files, saves and settings are kept. Tick Keep my build after updates (or set DES_NO_REBUILD=1) to play your current build and rebuild later with BUILD.bat.

Copies from before v2026.11.03.7, once: unpack the newest release ZIP over your folder, replacing files, then press Play.

Play

Start DemonsSoulsLauncher.exe and press PLAY. It holds every option (frame rate, resolution, mods, fullscreen, movies, god mode, recording, keys by letter, CPU pinning) and saves them in launcher.ini. Extra settings takes any NAME=value switch from this page or from an issue. --play starts the game straight away, for a shortcut. Without the launcher, set the switches before running PLAY.bat.

launcher optionswitchwhat it does
Frame rateDES_FPS=30|50|60|unlimited|31-240Auto = 60, or 50 on a ~100 Hz screen. Game speed is right at any rate. A rate that divides your refresh rate is perfectly even; others turn vsync off.
ResolutionDES_RES_SCALE=2 (up to 4)renders above 1280x720; Sharper shadows = LD_RES_SCALE_SHADOW=1
GameDES_GAME=game_remaster / game_modthe PC Remaster mod or your imported models (see below)
Dump texturesLD_TEX_DUMP=1saves every texture drawn, for texture packs
Skip the introDES_SKIP_INTRO=1starts at PRESS START; story movies still play
Keep my build after updatesDES_NO_REBUILD=1plays your current build instead of rebuilding

Other switches: DES_MOVIES=0 skips movies, DES_CUT_BLEND=0 restores the original 30 fps cutscene camera, DES_FULLSCREEN=1 starts fullscreen.

Controls

An Xbox (XInput) controller works when plugged in. A DualShock / DualSense needs Steam Input or DS4Windows. Keyboard + mouse work alongside a controller; whichever you touch last takes over.

keyaction
WASDmove
mouse (or IJKL)camera (click into the game to capture the mouse)
left mouse / Shiftattack (R1) / strong attack (R2)
right mouse / Ctrlblock (L1) / parry (L2)
Spaceroll / dash / back (Circle)
Einteract / confirm (Cross)
F / Rtwo-hand (Triangle) / use item (Square)
Tab / middle mouselock on (R3)
arrowsd-pad (switch items)
Enter / BackspaceStart / Select
Esc or F1release the mouse (close the game with the X or Alt+F4)
Alt+Enter / F11borderless fullscreen
F9god mode (no death, HP/MP/stamina stay full)
  • Menus: the mouse is a pointer. Hover selects, left click confirms, right click goes back, the wheel scrolls, and side buttons or PageUp / PageDown are L1 / R1. DES_POINT=0 turns pointing off; PAD_MENU_MOUSE=0 turns the mouse off in menus.
  • Button icons show keys or PS3 buttons depending on what you used last (LD_TEX_KBM=0 = always PS3, 1 = always keyboard).
  • Mouse look follows the game's invert options. PAD_MOUSE_LOOK_SENS=0.0012 sets the sensitivity; PAD_MOUSE_LOOK=0 restores the old stick-style mouse.
  • Keys go by position, so AZERTY uses ZQSD. PAD_KEYS_BY_LETTER=1 = by letter.

Saves go to gamedata/, and logs to logs/; they grow ~600 MB an hour, and the previous run is kept.

Reporting stutters and crashes

Every run records frame timing (about 25 MB an hour, no visible cost; the last 10 sessions stay in perf\).

  1. Press F8 right after a stutter or slowdown. Each press marks that moment.
  2. After quitting or a crash, press Report a problem in the launcher (or run REPORT.bat). It packs the session into one zip and opens GitHub's New issue page.
  3. Pick the Stutter / slowdown or Crash / bug template, drag the zip in, and say where you were.

The zip holds a frame-pacing summary (report.txt), the recording (perf.txt), your system info (system.txt) and the end of the game log (log_tail.txt). Your Windows user name is removed. Untick Record frame timing (or set DES_RECORD=0) to play without recording.

Mods (optional)

PC Remaster mod by fromsoftserve (Nexus Mods, Demon's Souls mod 106): download its zip, then run the line below. It makes game_remaster/ from hard links, so it uses no extra space and game/ is unchanged.

.venv\Scripts\python tools\install_remaster.py "path\to\the mod.zip" --apply

Texture packs:

  1. Tick Dump textures and play; textures land in textures\dump\ as <KEY>_<w>x<h>_<format>.png.
  2. Put an edited or larger file whose name starts with the same KEY in textures\replace\. .dds (DXT, BC7, BC4, RGBA) loads faster than PNG.

Details are in textures\README.txt.

Models:

  • Export armour, weapons, characters or map pieces to glTF, edit them in Blender, and import them back.
  • Import writes game_mod\ from hard links; play it with Game: My models, and delete the folder to undo.
  • Edit the _l low-detail copy too. Rules are in models\README.txt.
.venv\Scripts\python tools\flver_tool.py export game\PS3_GAME\USRDIR\PARTS\bd_f_5010.partsbnd.dcx
.venv\Scripts\python tools\flver_tool.py import models\BD_F_5010\edited.glb game\PS3_GAME\USRDIR\PARTS\bd_f_5010.partsbnd.dcx

Packs and models are the game's art; share them only where that is allowed.

Repo layout

SETUP.bat / BUILD.bat        one-time setup / rebuild
DemonsSoulsLauncher.exe      the settings window (source in project/launcher/)
PLAY.bat / REPORT.bat        start the game / pack a bug report
setup/                       setup pipeline, toolchain finder, Linux cross toolchain
project/                     CMake project
patches/                     ps3recomp-local.patch (runtime, on ps3recomp @ 4e8f3ca) and lifted-code.patch (game code)
tools/                       disc extraction, SPU lifting, perf report, mod installer, model tool
docs/NOTES.md                development log: every fix, why, and how it was measured
linux/, mac/                 Linux / Steam Deck kit and macOS build (docs/LINUX.md, docs/MACOS.md)

Everything SETUP produces (game/, port/, deps/, .venv/, saves, logs) is git-ignored. Never commit or share those: they are the game.

Troubleshooting

  • "could not get the keys … using RPCS3 instead":
    • The key download failed, so SETUP falls back to RPCS3; you can also run SETUP again later.
    • If RPCS3 then fails ("did not write EBOOT.elf"), close any open RPCS3 window and retry. Or decrypt game\PS3_GAME\USRDIR\EBOOT.BIN by hand with RPCS3's Utilities → Decrypt PS3 Binaries; install the firmware first if it asks.
    • In Windows Sandbox or a VM, RPCS3 can crash. Decrypt on another PC, copy EBOOT.elf into that folder, and rerun SETUP.
  • "EBOOT.BIN is not the tested one": only the USA disc (BLUS-30443) is supported.
  • Build tools not found: rerun SETUP or BUILD and allow the portable compiler download. Or install VS 2022 Build Tools with C++ and LLVM (winget install LLVM.LLVM), or set LLVM_DIR.
  • Setup seems stuck: one file can take a minute; see logs\build_last.txt. If nothing moves for many minutes, press Enter once.
  • Black window or crash on start: check the end of logs\last_run_err.txt.
  • Uneven frames at 100+ fps in busy areas: use 50 or 60 fps. On CPUs with two core complexes the game pins itself to the one with the largest L3 cache; DES_AFFINITY=0 turns that off.
  • Something is briefly black or missing the first time you see it: its shaders are compiling in the background. LD_PSO_ASYNC=0 waits instead.
  • "needs AVX2": the build was made on another PC. Run BUILD.bat on this one, or set DS_AVX2=0 before building.
  • Online: the official servers closed in 2018. The game starts straight in offline mode (DES_AUTO_OFFLINE=0 shows the old boxes).

Credits and license

  • ps3recomp by Ned Heller / sp00nznet (MIT): the recompiler and runtime.
  • RPCS3: its public source code provides the PS3 keys, it is the decryption fallback, and it is the reference for PS3 behaviour.
  • erikomis: the macOS build and launcher.
  • The PC Remaster mod is by fromsoftserve.

This repo's code and patches are MIT-licensed (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.