Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
38 lines
1.6 KiB
Markdown
38 lines
1.6 KiB
Markdown
# 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.
|