Files
sacred_k/docs/todo.md
T
khallaandClaude Opus 5.5 6ca96d54b4 Shared chest tabs, rune stacks and rune master, Q pickup, Kettenblitz tooltip and range
- Shared chest: tabs "Truhe"/"Gemeinsam" as a column left of the grid
  (game tab sheet), grids placed every tick, persistent across heroes
- Inventory tab texts capitalized (RegisterText / CapitalizeText)
- Combat-art runes stack like potions (itemstack, renamed from potionstack)
- Rune master: any rune for any number of runes, price by rune count
  (4 runes = 1,000, x10 per missing rune), bought rune goes into the
  backpack, Buy disabled without runes, gold or room, last rune remembered
  per hero (saved), the chosen rune's name below its icon, dropping a
  stack gives up one rune
- Keys: the old key handling no longer takes over after the save screen
  (text field focus only counts while its dialog is shown)
- Esc crash: tooltips forgotten when the game destroys them
- Pick up (Q) sends the pickup order directly; search reach doubled
- Kettenblitz: tooltip shows hits per chain, chains, cast and jump range;
  cast range 900 (longer ray segments), jumps half of that

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-17 03:40:42 +02:00

6.4 KiB

To do

Fixed: aura visuals missing after loading (2026-10-15)

Saving marks effect objects (cObjectFX) dead; loading keeps the buff but drops the aura effect (type 842) that follows the hero. src/mods/aura_restore.cpp recreates it after a load for Heldenmut (0x3f7) and Klingenblick (0x3f8). Spell auras (Steinhaut, Lichtschild, ...) use other effects; the user confirmed on 2026-10-17 that their visuals are back after loading too.

Data-driven arts instead of hardcoded art ids

Asked 2026-10-15: naming single arts as constants (kArtHeldenmut, kArtFlammenwerfer, ... in src/game/engine/arts.h) does not scale. Mods should decide by an art's properties, read from the game's own data:

  • the definition tables g_spellDefs (0x950a38, 71 x 0x94) and g_combatMoveDefs (0x94ddb0, 95 x 0x78): id, icon name, launch type, usable mounted, ... (tools/arttable.mjs dumps them; most fields unnamed);
  • map the remaining fields (regeneration group, lasting effect / aura, duration, ...) and expose them as an ArtInfo lookup in src/game/;
  • where the game itself hardcodes ids (e.g. the arts that always count as magic in cCreatureArts::AddGroupRegen, the "already active" switch in IsValidArtTarget), keep one table of those ids with the reason, instead of named constants spread over the mods;
  • optionally an own data file (JSON next to the DLL) for mod-side settings per art, if we need values the game does not have.

Art ranges: scaling and indicators

Asked 2026-10-15 (after making periodic aura hits strike everything in range, docs/aura-hits.md):

  • art ranges should scale with the art's level, and possibly with new attributes;
  • possibly show a range indicator (e.g. a ring around the hero for auras, or at the cursor for aimed arts).

Known so far: the periodic-hit aura (effect kind 0x12) uses (cCreatureArts +0x56 + 20) * 10 world units, measured from the owner with cCreature::DistanceTo (0x536f20); what +0x56 is (level? a stat?) is not mapped yet. Other arts' ranges are not mapped. Fits the data-driven arts item above (range as a property of an art, one place to compute it).

Rename life leech to "omnivamp"

Asked 2026-10-15: life leech (property 0x349, "Lebensentzug") becomes "omnivamp". To do: the in-game texts (item property, tooltips, character window). The leech code is the game's (0x5707a4.., property 0x349, in the damage code 0x56aff0); it credits the hit's attacker (order +0x1c). Omnivamp usually means healing from all damage, not only weapon hits: aura hits (docs/aura-hits.md) now name their attacker so the game applies it; other damage sources (spells, combat arts' extra hits, damage over time) may follow.

Map and map zoom in widened views

Reported 2026-10-15: the map (and zooming it) does not support the widened render sizes yet. 2026-10-16: TAB map fixed (viewport shifted), M map spans the render width (docs/hud.md, "Large map"), zoomed view and its markers included. Confirmed in-game 2026-10-16.

Quest dialog glitches in widened views

Reported 2026-10-15: accepting a quest, the dialog window "kept glitching" and button clicks were not detected correctly. Probably the HUD layer (src/mods/hud.cpp: windows shifted while they render / handle events): the dialog may not be covered, or shifted twice. Details asked from the user.

WASD walks around walls (caves)

Reported 2026-10-15: in caves WASD movement behaves "as if the player tries to find another way to the target location if a wall comes up". WASD sends a walk order to a point 300 world units ahead (docs/wasd.md); when that point is behind a wall the pathfinder plans a detour. Idea: find the game's straight line / walkability check and shorten the target when the line is blocked (or stop / slide along the wall). Related to the pathfinder item above.

Esc closes an open dialog first

Asked 2026-10-15: with any dialog open (quest, trader, inventory, ...), Esc should close that dialog instead of opening the game menu (ESC menu, cUI_EscMenu). Esc is handled in the engine / UI manager hotkeys (docs/wasd.md: engine 0x618130, UI manager 0x757120).

In-DLL smoke tests (later)

A test mode inside the mod DLL, started by an ini setting or command-line flag, so builds can be checked without play-testing and without driving the real mouse/keyboard like tools/autotest-load.ps1:

  1. load a fixed test save;
  2. play scripted input through the existing hooks (keys, casting arts, weapon set switches, save + reload);
  3. take back-buffer screenshots at checkpoints and log checks to sacred_re.log (aura effect present after reload, slot 6-7 inventories survive a save, ...);
  4. exit the game.

Better pathfinder (mouse clicks and monsters)

Replace the game's pathfinding with a more reliable and efficient one, for click-to-move and for monster AI. What we know so far:

  • Walk orders are cEvent_creature command 4 with a ground target (+0x18/+0x1c), sent through cEngine::SendCreatureOrder (0x6170d0), which snaps the target to a walkable point (0x616b70) and hands it to cCreature::ReceiveOrder (0x52e400, vf18, ~6400 decompiled lines).
  • Far targets (~2000 world units) are rejected or followed badly.
  • Still to map: the path search itself, the sector/tile collision data it reads, and how monster AI issues its moves.

Key bindings moved for WASD movement (temporary)

W, A and S were game hotkeys. With WASD movement (src/mods/wasd.cpp) their actions moved to other keys for now; choose final bindings (and update the in-game texts/tooltips that name the old keys):

Key Action Temporary key (sacred_re.ini)
W action slot 3 (cEngine::UseActionSlot, like Q/E/R/B/Space) G ([keys] ActionSlot3)
A pick up items nearby (creature event 0x113) Q ([keys] PickUp, 2026-10-17; was V)
S save game window (UI_WND_SAVEGAME) K ([keys] SaveGame)
D unbound -

Globally bound letters (engine 0x618130, UI manager 0x757120): A B C E F H I L M N O P Q R S T W, Space, ^, digits. Individual windows may use more.

Potion stacks

Asked 2026-10-17 (after the potion counts on the bottom bar, src/mods/potioncounts.cpp): potions of the same type (e.g. minor healing) stack in one inventory cell, up to 20 per stack (a full stack starts a new one). Drag, sell and drop move the whole stack, as with any other item. The counts on the potion slots then add up the stacks. In progress, see docs/item-stacks.md (open: sale price per stack, splitting on the ground).