- Skill bar: no art selection; slot 0 is the right-click art, keys 0-6 cast slots directly; cooldown labels in exact seconds; slot 0 set apart. - Arts regenerate on their own (casting no longer refills the group). - Auto-attack after targeting or casting at a hostile creature, at the speed of a held button. - Auras can be recast while active (renew, no second visual). - Blicke wie Klingen hits every enemy in range, physical, with life leech. - Blitzschlag steers the game's own chain: 3 + level/5 hits, 1 + level/10 chains, re-hits a lone enemy. - Weapon sets: click selects, drag only from the selected set; the leftmost set is clickable (signed hit tests). - Esc closes open windows before opening the game menu. - HUD: standalone buttons and texts are centred. - Record cache sized for widened views (town lag while walking). - Shared game code: orders, fx events, text drawing, cooldowns, effects. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
37 lines
1.9 KiB
Markdown
37 lines
1.9 KiB
Markdown
# Recasting active auras (`src/mods/aurarecast.cpp`)
|
|
|
|
Goal (user, 2026-10-15): auras / buffs can be cast again while active; the
|
|
new cast renews the remaining time, it does not add to it.
|
|
|
|
## What blocks it (measured 2026-10-15)
|
|
|
|
Heldenmut (0x3f7) on the hero: effects kind 1 and 2 (the buff) and kind 0x22
|
|
(the lock `cCreature::StartArtCooldown` 0x539ce0 adds), all with the aura's
|
|
duration (66 s); its art cooldown (cArtCooldowns, 301.9 units) ran out while
|
|
the aura still had 30 s left, and a cast order (0x105, art 0x3f7) was still
|
|
ignored.
|
|
|
|
`cCreature::IsValidArtTarget` (`0x51d680`) switches on the art: 0x28, 0x29,
|
|
0x41, 0x48, 0x3ed, 0x3f7, 0x3f8 and table entries for 0x3fa.. go to
|
|
`0x51d8b1`, which rejects the target if it has any effect of the art
|
|
(`cCreatureArts::HasEffectOfArt` `0x5829c0`, effect +0x1c). 0x3fa / 0x3fb
|
|
and 0x446 have their own variants of the test right after it (not changed).
|
|
|
|
## The mod
|
|
|
|
- The `je` after that test (`0x51d8bd`) becomes a `jmp`: the target is valid
|
|
whether or not the effect is active. The art's cooldown still applies.
|
|
- `cCreatureArts::AddEffect` (`0x582c10`, (kind, ?, value, duration, art,
|
|
network, ?, ?), ret 0x20) is hooked: for a buff art (launch type
|
|
SelfOrAlly) on a player hero, if an effect of the same kind and art exists,
|
|
its remaining time is set to the new duration and nothing is added. The
|
|
value of the old effect stays (a recast after raising the art's level keeps
|
|
the old strength until it runs out).
|
|
- The aura visual is an effect object (cObjectFX, vtable `0x88f99c`) each
|
|
cast creates and attaches with a cEventFX 0x42 (owner +8, art +0x3c; the
|
|
object keeps the owner at +0x68). `cObjectFX::ReceiveEvent` (`0x5a37b0`)
|
|
is hooked: when a new one attaches to a player hero for a buff art, the
|
|
previous one for the same hero and art is flagged dead (object +0x14 bit
|
|
0x10, as saving does). Untested whether the object manager removes it
|
|
promptly.
|