Skip to content

[Warlock] Improve Gaze trinket and related proc handling#11339

Open
millanzarreta wants to merge 9 commits intosimulationcraft:midnightfrom
millanzarreta:wl-gaze-adj-impl
Open

[Warlock] Improve Gaze trinket and related proc handling#11339
millanzarreta wants to merge 9 commits intosimulationcraft:midnightfrom
millanzarreta:wl-gaze-adj-impl

Conversation

@millanzarreta
Copy link
Copy Markdown
Contributor

@millanzarreta millanzarreta commented Apr 6, 2026

This PR aims to make the necessary adjustments to the Warlock module to handle the Gaze of the Alnseer trinket procs correctly, while also leaving the implementation in a more general state so it can support similar procs in the future.

By default, the trinket procs from impacts, aura gains, and the execution of certain spells. The tricky part is that this also includes many hidden auras and spells. For most other RPPM-based trinkets, these extra triggers are not especially important, since they are driven more by time than by events. This trinket driver, however, has a 100% proc chance with a 0.750s ICD (gaining one stack per proc), which makes it especially sensitive to the correct implementation of those triggers.

In the past, the trinket Mug's Moxie Jug behaved very similarly to this one. At the time, extensive testing was done on Warlock to determine which effects and spells triggered it. PR #10298 proposed an implementation for that behavior, but it was never merged due to the lack of warlock module reviewers and because it relied on certain workarounds to function properly. Those workarounds are no longer necessary, since the required mechanisms are now implemented in the SimC core. Even so, the extensive testing done in that PR is still valid, and most of the hidden triggers still behave the same way (that PR includes a spreadsheet with detailed information on which warlock spells and auras do and do not trigger the proc). In addition to confirming that behavior, new tests were also performed for newer spells and mechanics.

The findings are summarized below:

  • For spells with travel time the trinket procs from impacts, not at the end of a cast. However, some spells also appear to proc it at cast end, although it is probably because some secondary effect/spell/aura triggered at the end of the main spell cast (which is very common). In many cases, it is very difficult to determine exactly what caused the proc — whether it was the cast itself, a buff application, a debuff application, an energize effect, etc. — because many of these events happen at the same time.
  • In practice, most buffs and debuffs applied by the player (whether to the player or to other units) trigger the proc.
  • Actions, spells, buffs/debuffs, and damage events from warlock pets do not trigger the trinket. The only exceptions are cases where a pet action applies a debuff or damage whose real source is actually the player, like Cloven Soul debuff and Blighted Maw damage.
  • Most energize effects (Soul Shard gains) trigger the trinket, and they do so even if the player is already Soul Shard capped. However, some do not, such as the periodic shard energizes from Infernals or Overfiends. Most of these energize effects come from secondary spells launched alongside their parent spell, and we believe those secondary spells are what trigger the proc, not the energize effect itself.
  • Some summon spells trigger the proc while others do not, which strongly suggests that summons themselves do not proc it by default, but the summon probably triggers some secondary effect or aura that does.
  • Leech secondary stat healing does not trigger the trinket.
  • Unlike the Mug's Moxie Jug trinket, this trinket’s driver has the Only Proc From Class Abilities (415) flag, which prevents it from proccing off spells that do not have the Allow Class Ability Procs (416) flag, such as the damage from Doom and Ruination.
  • The healing from the Fel Synergy talent also does not trigger it.
  • The damage transferred to the pet through Soul Link does not trigger it either.
  • It was previously believed that Soul Leech continuously triggered the trinket on every aura refresh whenever damage was dealt, but this turned out not to be true. Testing on both the timed and permanent versions of the aura showed that the trinket can only proc when the warlock or pet gains the buff because they did not already have it, not when the aura is merely refreshed. This means its impact on the trinket is much smaller than previously assumed. The spell is not implemented in SimC, but as noted, it is not especially significant.
  • Normally, DoT damage does not trigger the trinket driver, there are exceptions:
    • All DoT ticks trigger the trinket while using Soul Harvester (for both Affliction and Demonology). Testing confirms this occurs specifically when Shared Fate or Feast of Souls is selected, which is why we believe the hidden aura Marked Soul, continuously applied on each tick, is the real trigger.
    • For Destruction, each tick of Immolate and Wither triggers the trinket. It is difficult to tell whether this is because each tick generates a Soul Shard or because of some other related hidden effect.
    • For Affliction, Corruption ticks always trigger the proc, because this spell only exists for Soul Harvester.
      • For Hellcaller, Wither replaces it. Wither ticks for Affliction only allow the trinket to proc in one of these two situations:
        • With Siphon Life talented, on every tick (the healing effect is probably what causes the proc).
        • Without Siphon Life, when the tick occurs on a target below 20% HP, since in that situation it tries to start the wither stack collapse (Seeds of Their Demise hero talent). This happens on every tick under that HP threshold, even if the collapse has already finished and only one stack remains.
  • Casting Rain of Fire does trigger the trinket, but its grounding damage ticks do not.
  • Lake of Fire grounding damage ticks do not trigger the trinket.
  • Malefic Grasp extra UA/Corruption/Wither/Agony ticks are considered DoT ticks and do not trigger the trinket.
  • On each heartbeat, the player periodically applies a hidden Fel Armaments aura to the Felguard (if that talent is selected), triggering the trinket.
  • For Affliction, the apex talent Shadow of Nathreza (rank 1) is not actually a DoT, but rather a periodic damage pulse (every 1 second) tied to Haunt, so its damage does trigger the trinket. It is one of the effects that contributes the most to stacking the trinket.
  • A special mention should be made of the Infernal Command aura, which is a leftover from an old Demonology talent that no longer exists. The aura still exists in-game, although its value is currently 0, meaning it provides no damage increase. It is still relevant because applying the aura can trigger the trinket, and it behaves in a rather unusual way: for each Wild Imp, it is periodically applied and removed roughly every ~5.25 seconds after the imp spawns. Although each pet seems to have its own internal timer, the resulting updates appear to be grouped into shared small timing windows. In other words, pets whose timers come due close enough together often end up being updated at the same observed timestamp. In testing, those windows appeared to be roughly ~0.42s wide. Since the aura had no gameplay effect, it was never implemented in SimC; this PR also adds support for it so those proc interactions can be modeled correctly.

SimC now correctly supports procs from buff/debuff gains, so only some refinements are needed regarding them: disabling these callbacks on dummy/tracking auras and setting their source and target units correctly.

For summons, energize effects, and some auras/spells, the decision was made not to create new action_t/buff_t objects in order to avoid added complexity/bloat and potential performance overhead. Instead, in these cases the callbacks are invoked directly where appropriate.

@millanzarreta millanzarreta marked this pull request as ready for review April 7, 2026 04:33
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