[Warlock] Class adjustments for more faithful behavior of Mug's Moxie Jug trinket procs #10298
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
The Mug's Moxie Jug trinket presents some issues in Simc. This trinket has two drivers: the main driver, which is responsible for processing the buff activation (15sec ICD), and the secondary driver, which increases the stacks while the buff is active (750ms ICD). Both effects can be triggered by a multitude of player actions: some healing effects, some damage effects, energize effects, some gain/drop/refresh auras, and even some triggers from periodic hidden auras/spells that don't appear in the combatlog or the logs.
Simc doesn't include the implementation of many of these effects, which causes some issues with the trinket. For the main driver, this isn't a big problem, as it's RPPM-based. In Simc it has been established for main driver that it can be triggered by many casts, damage effects, and healing effects. This should be sufficient for it to trigger periodically based on RPPM, so no major changes are needed. The problem is the secondary driver that increases stacks while the buff is present, which is not RPPM-based and always increases the buff by one stack with any of its activations (is 100% chance, so it is activating all the time with all these effects/spells, as long as they occur after its 750ms ICD). In Simc, many of these effects are not implemented, so the buff doesn't increase stacks as quickly as it does ingame for many specs, and that's the problem.
Commit 46eea16 has attempted to make the secondary driver increase stacks more quickly, including most damage and healing casts and effects. This isn't entirely accurate, but it makes its effectiveness more similar to ingame.
This pevious discarted PR provided more information on the issue and proposed an alternative option for a user to set up an alternative way for the trinket to periodically gain stacks based on a timer. However, it was discarded because it was a workaround that didn't address the root of the problem in the warlock module. Although this issue is more general and may affect other classes, it's best to implement it faithfully in the class modules, and for other classes seem that the difference between sims and ingame results doesn't seem as significant as it is for the warlock (specially the demonology).
Commit 53ce36e was then implemented to try to improve this. Although it is still a large workaround hack, it has been tuned to produce results that are more faithful to the observed ingame results.
This new PR aims to provide a faithful implementation of trinket procs for all three warlock specs as suggested. To achieve this, most of the modifications are made to the warlock module, although some specific adjustments to the trinket's warlock settings are also necessary. This should result in a much more faithful implementation of this trinket, and also a better tuning of the warlock module to work properly also with other trinkets/effects/procs.
All warlock spells have been tested ingame to document which ones trigger the trinket's secondary driver and which ones don't. This is then used to determine whether the current Simc implementation behaved correctly. An Excel spreadsheet detailing the results is attached below, along with their behavior in the current Simc implementation and the new implementation after this PR:
wl_trinket_triggers.xlsx
Below we will discuss some of the most relevant things about the Warlock's spells and the trinket's secondary driver procs:
X
, as they occur alongside others that already trigger the trinket. In Simc, in most of these cases, the most convenient option for implementation is chosen, which is usually the associatedCAST
spell event.0
and therefore the damage increase is0%
. This aura is relevant because its application triggers the trinket, and it has strange behavior: this aura is periodically applied/removed for each wild imp approximately every 5.25 seconds from its spawn. Since this aura had no effect, it was not implemented in Simc, and its implementation is also added in this PR to allow these procs.Regarding more specific implementation details in this PR, the following are worth highlighting:
.spawn()
.buff_apply_action
) for applying relevant buffs/debuffs and another dummy helper action (energize_action
) for the relevant energize effects. This has been done so that it's only necessary to replace the current line that triggers the buff/energize with a very similar one that wraps the buff/energize trigger into the action. Other alternatives were, for example, creating a single global dummy action and executing it after each buff/energize in a new line, which would somewhat "decouple" the effect from the action and be more error-prone; or creating a new separate action for each buff/energize effect that required it, which would be very verbose and add confusing duplicate actions to the spells. I guess another valid alternative would be to create our ownwarlock_buff_t
derived frombuff_t
where some additional parameter indicates whether it has an associated action. So, if you think any of these or some other approach is preferable to the one implemented, please feel free to comment.The changes have been thoroughly tested and debugged, and they appear to be working correctly, producing the results shown in the attached spreadsheet. This PR includes a considerable number of changes, so additional reviews are always welcome. Let me know if you have any thoughts, comments, or suggestions.