Soulbrandt is a PC port of Demon's Souls (PS3, 2009). The game's original code has been converted to run directly on Windows and Linux, with no emulator.
The project's README from github.com/JonathanDC64/Soulbrandt. As one markdown file: README.md.
Soulbrandt is a PC port of Demon's Souls (PS3, 2009). The game's original code has been converted to run directly on Windows and Linux, with no emulator.
You need your own copy of the game: the US version, BLUS30443, or the European version, BLES00932 (both version 1.00). This project includes no game files.
0.1.1, the current release, is an alpha. Download it from the Releases page.
The game plays from start to finish (a tester has beaten it), but not every part has been tried on every setting, so expect bugs. What isn't supported yet is below; please report anything you find. Questions and help: Discord.
Press F1 (or L3 + R3 on a controller) at any time to open the menu. Most settings apply right away. Each setting has a short help text in the menu.
Picture
Controls
HUD
Game
Online
The program
PS3_GAME in it. Setup cannot use ISO files yet.These steps are for the release download.
DemonsSoulsRecomp-X.Y.Z-windows.zip) or the tarball for Linux (DemonsSoulsRecomp-X.Y.Z-linux.tar.xz), and unpack it into a folder of its own.Soulbrandt.exe (on Linux, Soulbrandt). Setup opens.EBOOT.elf and the .sdat files).~/.local/share on Linux) and needs about 4 GB free there; to build on another drive, press Change next to Build folder first.Then press Play.
A portable install: put an empty file named portable.txt next to Soulbrandt.exe before its first start. Your settings, logs and setup's build then stay inside the program's folder, as your saves already do, and you can move or rename that folder.
Windows may warn you the first time you start Soulbrandt.exe ("Windows protected your PC"), because the program isn't signed yet. Click More info, then Run anyway.
If RPCS3 is set to run as administrator, setup cannot start it: untick that in rpcs3.exe's Properties.
CI builds the Linux program on every change, and each release includes a Linux download. It needs x86-64 Linux with glibc 2.35 or newer, a Vulkan driver, and curl and tar. Nothing else needs installing. The game renders on Vulkan, and setup prepares its shaders. If Vulkan can't start, the game falls back to its older renderer on vkd3d (DirectX 12 on Vulkan), which compiles shaders as it goes, with long pauses when a new area loads.
Linux is newer and less tested than Windows. Players run it on desktop Linux and on the Steam Deck, on Vulkan (docs/106).
macOS is not supported.
On a Steam Deck, keys and the mouse stay out of the game while its controls are on, because Steam's desktop layout presses them too. To use a keyboard on a docked Deck, set PAD_KEYBOARD_WITH_PAD=1.
Online play is on by default and uses this project's own server. Setup asks for your online name; you can change it, or turn online play off, in Settings > Network. Players of the US and European versions meet on the same server. RPCS3 players use other servers, so you won't meet them. What the server keeps about you is in the privacy note.
Use Report an issue in the menu (F1), or open an issue. For questions and help, join the Discord. Report security problems privately, as SECURITY.md says.
This is the technical part. The full notes are in docs/.
Tools
| Windows | Linux |
|---|---|
| Visual Studio 2022 Build Tools, LLVM (clang), CMake, Ninja, Python 3, Git Bash | clang or GCC, CMake, Ninja, Python 3, SDL2, Vulkan and FFmpeg development files, vkd3d (details) |
On Windows, step 4 downloads FFmpeg's MPEG-2 video decoder for the game's movies (about 1 MB) and puts it beside des_boot.exe. If that download fails, the build says so and goes on, and the movies then need Microsoft's free MPEG-2 Video Extension from the Microsoft Store; without either, they play their sound with no picture. (A paid app called "MPEG-2 Video Extensions", from another publisher, is a different thing; you don't need it.)
From your copy of the game
PS3_GAME)EBOOT.BINlibsre.prx from your PS3 firmware, decrypted. The game doesn't need it; it is only for the LIBSRE_OWN=0 fallback (docs/88).Steps
git clone https://github.com/JonathanDC64/Soulbrandt.git
cd Soulbrandt
git clone https://github.com/JonathanDC64/ps3recomp.git
ps3recomp.pin names the ps3recomp commit this version of the port needs. python tools/release/pin_ps3recomp.py local checks your checkout against it.PS3_GAME/USRDIR/EBOOT.BIN (Utilities > Decrypt PS3 Binaries) to work/game/EBOOT.ELF. Copy PS3_GAME/ICON0.PNG next to it, for the program's icon.python ps3recomp/tools/ppu_loader.py work/game/EBOOT.ELF -o work/loader
python ps3recomp/tools/ppu_lifter.py work/game/EBOOT.ELF \
--functions work/loader/EBOOT.functions.json --hle-stubs work/loader/EBOOT.imports.json \
--override-funcs "0x167AC88=ds_malloc,0x167AC58=ds_free,0x273D38=des_move_post,0x724E40=des_menu_tick" \
--insn-hooks @port/insn_hooks.txt --shadow-stack --chunk-lines 150000 --output work/recomp -j 16
python ps3recomp/tools/gen_hle_nids.py --all --out work/recomp/hle_nid_table.cpp
python scripts/apply_boot_patches.py work/recomp
Then the SPU code with python scripts/build_spu.py --eboot work/game/EBOOT.ELF (docs/09), which first cuts the SPU programs out of the EBOOT, and, if you have libsre.prx, libsre with python scripts/build_libsre.py <libsre.prx>. The lifter's flags above are also in scripts/lift_ppu.json, which setup reads; change both together.cmake -S ps3recomp -B ps3recomp/build -G Ninja -DCMAKE_C_COMPILER=clang-cl -DCMAKE_CXX_COMPILER=clang-cl -DCMAKE_BUILD_TYPE=Release \
-DPS3RECOMP_RSX_HAL=ON
cmake -S port -B port/build -G Ninja -DCMAKE_C_COMPILER=clang-cl -DCMAKE_CXX_COMPILER=clang-cl \
-DCMAKE_BUILD_TYPE= -DCMAKE_CXX_FLAGS_DEBUG= -DCMAKE_C_FLAGS_DEBUG=
cmake --build ps3recomp/build --target ps3recomp_runtime rsx_shader_precompile
cmake --build port/build --target des_boot --parallel 4
PS3RECOMP_RSX_HAL=ON builds the portable renderer: DirectX 12 through it, the default, and Vulkan beside it (Settings > Display > Renderer). Without it the game runs on the legacy renderer only. Its first configure downloads glslang and SPIRV-Tools at their pinned commits. On Linux, see docs/76.tools/des/local.env.example to tools/des/local.env, set PS3_VFS_ROOT in it to the folder that holds PS3_GAME, and start the game with tools/des/play.sh. A direct start of des_boot.exe goes through setup instead, and keeps its saves in port/build/gamedata.Everything made from your copy of the game stays in work/ and gamedata/, which git ignores. Never share your build: it contains code converted from your game.
For developers
(DES_FPS). The same name works as an environment variable, which wins over the menu.-DDES_SPLIT=ON also builds the game the way setup does: des_host plus the game as a separate library (docs/57).-DDES_DEV=ON makes a developer build, with cheats and a Developer tab in Settings (docs/55). Never share one as a release.RSX_BACKEND=legacy runs the renderer from before it: retired, kept unchanged as a fallback, with no more fixes. A build has it when its ps3recomp is configured with PS3RECOMP_RSX_HAL=ON, as in the steps above and in the released Windows build.This project contains only its own code, scripts and documentation. It has no game code, no game files, no Sony firmware and no keys; you make those from your own copy (docs/05).
Demon's Souls is a trademark of Sony Interactive Entertainment. This project is not affiliated with or endorsed by Sony Interactive Entertainment, FromSoftware or Atlus.
Settings > About and port/ui/NOTICE.md list the menus' parts with their licences. The download's licenses folder holds the licences of the libraries shipped beside the program. The source of its LGPL libraries, FFmpeg and vkd3d, is on their own release.
MIT, for this repository's own code, scripts and documentation (LICENSE). ps3recomp is MIT-licensed by its authors.
Soulbrandt is a PC port of Demon's Souls (PS3, 2009). The game's original code has been converted to run directly on Windows and Linux, with no emulator.