Files
khallaandClaude Opus 5.5 1fd89524d3 Skills, auto-attack, aura and chain lightning rework, Esc, cache fix
- 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>
2026-10-16 00:11:38 +02:00

1.9 KiB

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.