# Art regeneration (`src/mods/artregen.cpp`, `game::GetArtCooldown`) Goal (user, 2026-10-15): casting an art no longer affects the cooldowns of other arts; the cooldown labels show exact seconds. ## How the game regenerates arts (measured 2026-10-15) Cooldown entries: see `src/game/engine/arts.h` (cCreatureArts +0x102, 0x16 bytes each: group, art, level, bonus levels, total, speed factor, remaining). Found with a hardware write watch on one entry's remaining time: - countdown, every creature update (`0x562998`): `remaining -= speed factor * rate * seconds`, rate = cCreatureArts +0xee (magic group, Energieblitze) or +0xf2; clamped to 0..total; - casting an art: the cast code computes the art's regeneration (`cCreatureArts::RegenFor` `0x582710`) and adds it with `cCreatureArts::AddGroupRegen` (`0x562330`, (amount, group, filter)) to **every** entry of the group (combat arts / magic), capped at each total: one cast puts the whole group into regeneration. Flags +0x148 & 8 / & 4 cut the amount to 80 % for the magic / combat group; Flammenwerfer, Meteor, Kanone and Energieblitze always count as magic. A combo (creature +0x2b4, arts +0x59) or group 3 takes another branch (combo slots at +0x10e); - the speed factor (+0xe) is reset by the stats recalculation (`0x579b7d`, `0x570fad`), the level byte +7 raised by item bonuses (`0x581e40`, which adds the change of the total to the remaining time). ## The mod For player heroes, an AddGroupRegen call right after RegenFor (same thread) adds the amount to the cast art's entry only. Other calls (negative amounts, filters, combos, other callers) go to the game. Labels: seconds = remaining / (speed factor * rate).