- 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>
137 lines
6.4 KiB
Markdown
137 lines
6.4 KiB
Markdown
# 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).
|