Weapon sets and combat-art slots 6-7 live in a shadow inventory per
inventory; the slot methods run the original code on it for slots >= 5,
so item references, icon resources and selection events stay the
game's own. Save games (cInventoryManager::Serialize) and hero files
(saveHero / loadHero) store inventories as JSON ("SRIJ" + length);
vanilla blocks are still read, which migrates old saves. Multiplayer
transfers keep the binary format. nlohmann/json fetched via git.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Raw WM_KEYDOWN/WM_KEYUP are handled in both window procedures (the game
swaps 0x8110d0 and 0x8122a0 with SetWindowLong; 0x8110d0 is the in-game
one). Bound keys are swallowed and post the original hotkey's key event
to the kernel, so F-keys work and bindings are layout independent
([keys] in sacred_re.ini). Replaces the WASD hotkey remap and the digit
swap; W/A/S/D and the digit row no longer reach the game. Skill keys
still cast through the right mouse button. Enabled switches removed.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- tools/names.txt lists identified sacred.exe functions ("0xADDR
Class::Method"); rename.ps1 / Rename.java apply them to the persistent
Ghidra project, so decompiles read with real names.
- decompile.ps1: parameters other than the addresses are named-only (the
first address was taken as -Out).
- game-input.ps1: Hold-Key for polled keys such as movement.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>