Files
sacred_k/tools
khallaandClaude Opus 5.5 7d8089c299 Quests: escorts stay on the follower list, quest givers come back
Escorts lost their place on the hero's follower list after a load, so
quest checks like the one in "Furchtbares Verbrechen" failed; they are
added back once after loading (town NPCs that tag along briefly are left
out). Restarted quests stay available (flag 1), which their giver's dialog
and accepting them need. Quest givers are read from the quest scripts:
when a running quest's giver dies, the quest restarts and the giver is
spawned again at her start; an accepted quest without its giver is repaired
on load. Notes on the script format and opcodes in docs/quests.md.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-26 02:30:41 +01:00
..
2026-10-19 22:07:14 +02:00
2026-10-19 22:07:14 +02:00
2026-10-19 22:07:14 +02:00

tools

Node tools need npm install here once (iced-x86). Paths to sacred.exe are passed explicitly.

Tool Purpose
disasm.mjs <exe> <va> [n] disassemble at an address, ignoring Ghidra's function boundaries
find-imm.mjs <exe> <value...> every instruction using an immediate value (e.g. 1024 768)
find-imm.mjs <exe> /regex/ every instruction whose text matches (e.g. /96AB0h\]/)
rtti.mjs <exe> <Class> vtables of an MSVC class via RTTI
decompile.ps1 <addr...> decompile from the persistent Ghidra project ghidra/
rename.ps1 apply the function names in names.txt to the Ghidra project (add names there as functions are identified)

Persistent Ghidra project (ghidra/, not in git)

Created once (about 7 minutes):

$env:GHIDRA_HEADLESS_MAXMEM = "8G"
& "$env:GHIDRA_INSTALL_DIR\support\analyzeHeadless.bat" ghidra sacred -import "<Sacred Gold>\sacred.exe"
& "$env:GHIDRA_INSTALL_DIR\support\analyzeHeadless.bat" ghidra sacred -process sacred.exe -scriptPath tools\ghidra -postScript ApplyRtti.java

ApplyRtti.java recovers the MSVC 6 RTTI that Ghidra's own script misses: 410 vtables, ~1200 extra functions, methods named Class::vfNN.

Automated in-game test

autotest-load.ps1 starts the game through the launcher, clicks "Spielen" -> a character (-Save: row in the character list) -> "Spielen" (its last world), takes screenshots in-game and with the ESC menu open, and stops the game. -Ini appends temporary settings to build\x86-debug\sacredK.ini (restored afterwards), e.g.

.\tools\autotest-load.ps1 -Name ws_off -Ini "[widescreen]`r`nEnabled=0"

Click positions are for the menu screens (2026-10-25) on a 3440x1440 monitor. game-input.ps1 has the building blocks (start, click, key, hold key, screenshot). Don't touch mouse/keyboard while a test runs.