Skip to content

[Havoc] Use spell data ICD for Essence Break proc#11072

Draft
taherbert wants to merge 1 commit intosimulationcraft:midnightfrom
taherbert:havoc/essence-break-icd
Draft

[Havoc] Use spell data ICD for Essence Break proc#11072
taherbert wants to merge 1 commit intosimulationcraft:midnightfrom
taherbert:havoc/essence-break-icd

Conversation

@taherbert
Copy link
Contributor

Problem

Essence Break's debuff (spell 320338) has Internal Cooldown: 1 seconds in the spell data, but the code ignores it. Instead, it uses structural gates to limit procs:

  • Blade Dance / Death Sweep: first_attack boolean (only the first of 4 damage events procs)
  • Chaos Strike / Annihilation: !may_refund (only the main-hand hit procs)

These gates approximate the ICD at low haste, but break down when the GCD drops below 1.0s. In that case, the old code allows consecutive procs less than 1 second apart, which does not match in-game behavior.

Fix

Replace the structural gates with a target_specific_cooldown_t using the spell data's 1s ICD. This is the same pattern used by Rogue's Weaponmaster and Evoker's Bombardments.

Now any damage event from BD/DS/CS/Anni can trigger the proc, as long as the per-target ICD is ready. This lets a later hit in the sequence proc if the first hit lands too early (during ICD), which is what happens in-game.

Evidence

Spell data

Name             : Essence Break (id=320338)
Internal Cooldown: 1 seconds
Proc Flags       : Yellow Melee Taken, Generic Hostile Spell Taken

In-game log (WCL)

Procs on a single target during one ESSB window, from @Aezeor's testing:

Time Event ESSB Proc? Gap from prev
5.285 Anni MH Yes -
5.583 Anni OH No 0.298s
6.822 DS hit 1 Yes 1.537s
7.021 DS hit 2 No 0.199s
7.332 DS hit 3 No 0.510s
7.755 DS hit 4 No 0.933s
8.156 Next hit Yes 1.334s

All proc gaps are > 1.0s. DS hit 4 at 0.933s after the last proc is blocked by ICD.
At the same timestamp (7.755), a different target that had not been procced yet does get its ESSB proc, confirming per-target tracking.

Sim comparison (debug traces, gear_haste_rating=7000, 5 iterations each)

Old code (first_attack / !may_refund gates):

iter1: 21 procs, 7 windows, 1 ICD violation (min_gap=0.836s)
iter2: 20 procs, 7 windows, 1 ICD violation (min_gap=0.837s)
iter3: 21 procs, 7 windows, 1 ICD violation (min_gap=0.837s)
iter4: 21 procs, 7 windows, 1 ICD violation (min_gap=0.839s)
iter5: 21 procs, 7 windows, 1 ICD violation (min_gap=0.838s)

New code (1.0s per-target ICD from spell data):

iter1: 21 procs, 7 windows, 0 ICD violations (min_gap=1.087s)
iter2: 18 procs, 7 windows, 0 ICD violations (min_gap=1.086s)
iter3: 21 procs, 7 windows, 0 ICD violations (min_gap=1.087s)
iter4: 21 procs, 7 windows, 0 ICD violations (min_gap=1.087s)
iter5: 21 procs, 7 windows, 0 ICD violations (min_gap=1.087s)

Old code consistently allows sub-1.0s proc gaps in the first ESSB window of each fight (during Metamorphosis haste). New code respects the ICD across all windows.

cc @Aezeor

@taherbert taherbert changed the title Havoc: Use spell data ICD for Essence Break proc [Havoc] Use spell data ICD for Essence Break proc Feb 28, 2026
Spell 320338 has internal_cooldown=1000 (1s per-target ICD) but the
code was using structural gates instead: first_attack for BD/DS and
\!may_refund for CS/Anni. These approximate the ICD at low haste but
allow sub-1s consecutive procs when GCD drops below 1.0s.

Replace with target_specific_cooldown_t using the spell data ICD,
matching the pattern used by Rogue Weaponmaster and Evoker Bombardments.
@taherbert taherbert force-pushed the havoc/essence-break-icd branch from f1ed8c8 to d0a957c Compare February 28, 2026 22:11
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant