- Author: Taladril
- Date: November 12, 2020
- Expansion: WoW Classic
Blizzard had two announcements today. The first went over that there were only a small select number of items such as Nightfall that would not proc from abilities during the GCD. This severely affected their use causing them to be very low value. In the interest of fun Blizzard reverted those odd exceptions and simply made all items able to proc during GCDs. You can read more about it here.
Blizzard also has gone into a long discussion of tracking down the bug that was reported from Sapphiron on the PTR. The TLDR if you don’t want to read the below is that the original fight did have an aura that caused damage every second. However due to the way the aura refreshed and lined up with the server ticks, effectively the aura only went off every 2 seconds… most of the time. So this is what videos show and Blizzard was able to duplicate it. In the interest of #nochanges they decided to code the fight the same way it worked back in the day. So Sapphiron will not be hard mode as the PTR showed but will still require plenty of frost protection in one way or another. Good luck and have fun soon in Naxxramas!
We recently completed testing Naxxramas on the PTR. A big thank you goes out to everyone who helped us find bugs or exploits we could fix before release. We often get questions about how we decide what counts as a bug, and what’s worth changing, so I thought you might enjoy a deep dive into our investigation of Sapphiron’s Frost Aura.
TLDR for anyone who only wants to know the conclusion: We’re changing the spell to tick every 2 seconds consistently.
When Sapphiron is engaged, the entire raid is affected by a Frost Aura which reads: “Deals Frost Damage every second”, but many players reported that it should be every 2 seconds. Our first thought was, “that was the Wrath of the Lich King version,” but we know that in a game as complicated as WoW, there can be surprising and unexpected interactions, and a lot has changed over the last 15 years. When a current behavior doesn’t match players’ or developers’ memories, it always makes us a little suspicious. Sometimes it turns out our memories are wrong, but we’ve also seen it lead to the uncovering of an unexpected interaction, so, it’s usually worth a look, and that was certainly the case here.
We looked at many old videos, and though some were from the wrong expansion, we were able to find videos that showed the original fight. The videos actually had evidence of both tick rates within the same fight. The frost aura seemed to mostly tick every 2 seconds, but occasionally tick once per second for a bit, before returning to ticking every 2 seconds. We also checked in our reference server, and the behavior was the same as we saw in the videos: mostly 2 second ticks, but occasionally a brief streak of 1 second ticks, before returning to 2 second ticks.
Perhaps the most useful clue was this post from WoW game designer Daelo in 2009, in which he describes fixing Sapphiron’s Frost Aura so that it does “the damage that was seen previous to the 3.0.8 patch”:
“We just hotfixed Sapphiron’s Frost Aura so it should do the damage that was seen previous to the 3.0.8 patch regardless of the size of the raid or your server’s performance. This should be 1200 every 2 seconds in Normal, and 1600 every 2 seconds in Heroic. You’ll notice that the Frost Aura debuff you have no longer has a duration that refreshes. The tooltip also incorrectly lists the damage as occurring every second. The tooltip error will be fixed the next time we make a client patch available.”
This certainly suggests that it was doing damage every 2 seconds prior to the 3.0.8 patch, but this was a hotfix to the Wrath of the Lich King version of Naxxramas. We’ve already found other differences between the original and Wrath of the Lich King versions of Naxxramas, so while this post was helpful, it wasn’t enough to satisfy us on its own. It contained an important clue about the debuff duration refreshing, which led us to suspect the DoT refresh might be clipping the damage tick. In WoW Classic, when you refresh a DoT, it resets the timer on the periodic damage, and can cause you to miss ticks, and since the Frost Aura has a 5 second duration that gets reset throughout the fight. It was a good bet that the damage timer was getting reset then too. Of course, we already reproduced that behavior in WoW Classic, so that still didn’t explain the discrepancy between the two.
At that point, we dug further into the game code and found the difference in the way Sapphiron re-applies the Aura. In both reference and WoW Classic, the aura re-application was done as part of an Action Trigger which fires every 2 seconds. However, in the original code, action triggers share a timer with periodic spell ticks, and action triggers were always processed first. In modern code, they run on independent timers, so a long-running action script won’t delay a spell tick.
This meant that when Sapphiron re-applied the Frost Aura in reference, it was guaranteed to clip the damage tick that was about to happen, leading to every other tick getting skipped. In modern code, the damage tick and the reapplication are both scheduled to occur at the same time, but are controlled by two separate timers, so either one might happen first. It just so happens that in this encounter, the reapplication generally happens after the DoT tick on the same second, so that players got the full damage on every tick, instead of every other tick.
But this mystery isn’t solved yet. What about those occasional one second ticks we saw in the original videos and in the reference server. They were rare, but if the reference code is guaranteed to do the refresh before the damage tick, how were they ever ticking at once a second? It turns out that the Frost Aura application didn’t always succeed, and if it failed, the existing DoT happily ticked away doing damage once per second until the next refresh attempt 2 seconds later, like this:
Time (seconds) Event Damage
0 Aura #1 Applied 0
1 Aura #1 ticks 600
2 Aura #2 Applied (clips Aura #1) 0
3 Aura #2 ticks 600
4 Aura #3 fails (Aura #2 ticks) 600
5 Aura #2 ticks 600
6 Aura #4 Applied (clips Aura #2) 0
7 Aura #4 ticks 600
Since Sapphiron is 3 levels higher than the player, the spell can only miss 1% of the time, but that’s what explained the occasionally 1 second ticks we saw in the videos, and with our reference.
We also reached out to the original designer, who still works at Blizzard, on a different game team. After we described our findings, he agreed that the intended behavior was for the damage to be every second, and the fact that the reapplication of the aura was clipping a tick of the DoT was a bug that wasn’t noticed or fixed until Wrath of the Lich King.
So where do we go from here? We often must carefully consider a conflict between original intent and original behavior. There’s no one right answer in all cases, but for this case, the original behavior is the correct decision, and we plan to fix this in much the same way Daelo did in Wrath of the Lich King. In modern code, we have a way to reliably apply an aura that deals damage every 2 seconds as long as the boss is alive, and we’ll re-write this ability to use that method, just as Daelo did in Wrath of the Lich King.
While the behavior that led to it originally occurring every 2 seconds instead of every 1 second was a bug, it was consistent enough as to be indistinguishable from a text bug in the Aura description. Choosing to go with the original intent would result in almost twice as much damage as players experienced in 2006, so in the end that makes this decision pretty clear.
I hope you enjoyed that trip through our development process. See you in Azeroth!