Combos: cooldown labels on the skill bar, steps follow the arts' current levels

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
khallaandClaude Opus 5.5 committed 2026-10-18 00:43:03 +02:00
1 parent 5a0db24b83
commit 075f9e2c8a
6 files changed
+199 -4

No files matched your search

+37
View File
@@ -0,0 +1,37 @@
# Combos
## Request (2026-10-18)
Combos don't show their cooldown like other skills. Combos should reference
the skills they are built from and always use those skills' current levels.
## Measured / read
- Combos live in a vector of 0x26-byte entries at cCreatureArts +0x10e /
+0x112, at most 4 (`cCreatureArts::FindCombo` 0x5819a0). Layout in
`src/game/engine/arts.h`: id (0x200..0x204), 4 step arts, 4 step levels,
total, charge rate, charge.
- `cCreatureArts::SetCombo` (0x581290, thiscall `(index, arts[4], levels[4],
id)`, ret 0x10) fills an entry and computes the total from the levels; the
charge starts at 0. The Kombomeister calls it when a combo is made and the
levels are never updated afterwards.
- The charge counts up to the total at the charge rate (recomputed while
charging); ready when charge >= total (`IsComboReady` 0x581920).
- A taskbar slot of type 4 holds combo 0x200 + index.
- Logged 2026-10-18: a combo made with an art at level 3 stores 3; after the
art rose to 4 the mod re-set it to 4 and the total followed.
## Mod
- `skillbar.cpp`: combo slots get the seconds label like other arts,
`game::GetComboCooldown` = (total - charge) / rate.
- `combos.cpp`: every engine tick, the hero's combos are compared with the
arts' current levels (cooldown entry level + bonus levels). Out of date →
`SetCombo` again with the current levels; the charge keeps its fraction of
the total. Skipped while a combo is executing.
## Open
- Whether the Kombomeister stores base or base + item bonus levels is not
measured (no art with bonus levels in the test). The mod uses base + bonus;
if the cast also adds the bonus it would count twice.