The DS3 Codex
Appendix

How it was found

How far reverse-engineering tools get with a commercial game: what worked, what didn't, and what's still open.

Ninety megabytes of machine code, and no names but the ones its own debug menus and Havok's reflection left behind.Codex · DarkSoulsIII.exe, build 10167187

1Four kinds of evidence

data The game files

Most answers. We wrote a Python reader for each format (the archives, models, Havok files, animations, map layouts, params, effects, sound, event and talk scripts), plus a small C# tool for animation events, and used the community's DSLuaDecompiler for the scripts. The community's work (SoulsFormatsNEXT, Smithbox, Paramdex, DSAnimStudio, the fxr library) supplies field names; our tools re-implement the formats.

exe The executable and its shaders

Ghidra on DarkSoulsIII.exe and FMOD's DLLs, plus a shader reader of ours, which disassembles DS3's DXBC shaders with their resource and constant names. That way the renderer is read, not guessed.

capture Frames of the running game

RenderDoc on DS3 under Proton. DXVK turns D3D11 into Vulkan, so a capture shows DS3's passes, targets, draws, uploaded constants and bone palettes. Our own scripts read them.

ER Elden Ring's structs

The same engine lineage. Field names from the community fromsoftware-rs project's Elden Ring structs usually carry over; offsets don't.

2Reading a 90 MB executable

3Frame captures through DXVK

About a dozen frames of DS3 (an RTX 4080 at maximum settings, an AMD laptop at low and auto-detected settings) answered what no file could:

The captures were deleted on 2026-10-15 to free 21 GB. Each one's place and settings were noted, so they can be taken again.

4Judging the result

Our engine renders from the same camera as a capture, and the two images are compared by region means: the sky 200 against 199, the courtyard's walls 61 against 60, its flat ground 68 against 68. Screenshots of the real game settle what captures can't (which side of the path the gravestones are on settled the handedness). Every test session runs headless.

5Dead ends worth knowing

6Still open

QuestionWhere to look
DS3's damage formula and END → max staminaThe damage modules from the hit-record builder 0x1409be300
Where the 28° light turn comes fromThe light-set builder 0x14014a2d0's matrix
Why LODs switch at 2 × LodParamPerhaps a field-of-view term
YEBIS's light shafts, bloom scales and depth-of-field LUTTheir $Globals in a new capture facing the sun
What moves an enemy between normal, caution, find and battleThe C++ search system behind the Lua's IsBattleState
FrpgCollisionFilter's layer matrix; slide speedvtable 0x14282adb8; the contact collector
The event flags and saved position in the save fileDiff two saves that differ by one action (the save file)
Where the PC key bindings liveChange one binding and diff two saves

7The save file

DS30000.sl2 has its own chapter: a BND4 of 12 entries, each AES-128-CBC encrypted with one fixed key and checked with an MD5. Ten character slots, the account, and a copy of the regulation. Read with a reader of ours: the save file →