Some background first; the way Execute works in vanilla and classic is in two stages. When you cast Execute the damage of the skill is calculated including the excess rage, the cost of the skill itself is deducted immediately (15 rage untalented), the Execute damage is applied at the next batch tick and then a server-side script runs which after a delay reduces your remaining rage to 0. Additional bug reports from warriors indicated that any rage generated during this trigger window is lost once the trigger reduces your rage to 0. For example, if your Execute cast procs Windfury Totem then the rage generated by that extra attack is not factored into the Execute damage, and is then completely lost when the trigger reduces your rage to 0.
The reason Execute feels clunky in Classic is because this trigger delay is double the size of what it was in vanilla, as we will show in the frame-stamped videos below. We will use the format
[F:frame-number][R:total-rage] description to describe the timeline:
Curse vs. Patchwerk (Vanilla, Warrior PoV)
[F:5857][R:33] Warrior hits the Execute button [F:5859][R:34] Warrior gains 1 rage through Bloodrage, rage bar not updated yet [F:5863][R:19] Execute cast goes off, cost is deducted (15 rage) [F:5863][R:43] Windfury procs off Execute for 741 damage, generates 24 rage [F:5863][R:43] Execute crits Patchwerk for 2005 [F:5869][R:00] Execute trigger runs and reduces rage to 0
We can observe a few thing things here. First is that the rage generated by the Windfury proc was not factored into the Execute damage. This is shown by the 34 rage Execute damage calculation below:
Relevant talents & buffs: Impale (proven earlier in the video), Deathwish
Relevant debuffs: 5xSunder Armor, Faerie Fire, Gift of Arthas
3731 - 450*5 - 505 = 976
976 / (976 + 400 + 85*60) = 0.1507
Execute raw damage:
(600 + (34 - 15)*15 + 8) * 1.2 * 2.2 = 2357.52
2357.52 * (1 - 0.1507) = 2002.241736
Factoring in rounding of some of these parameters by the server puts us at the the 2005 execute damage. The rage from the Windfury proc is then lost completely at frame 5869.
The next thing we can observe is that the length of the trigger is ~400ms. The video was recorded at 15 FPS so each frame is
1000/15 = 66.666... milliseconds. The Execute damage is applied at frame 5863 and the trigger runs at frame 5869, a difference of 6 frames.
Enabled vs. Giant Yeti (Classic)
[F:019][R:35] Warrior hits the Execute button [F:033][R:20] Execute cast goes off, cost is deducted (15 rage) [F:057][R:20] Execute hits Giant Yeti for 242 [F:105][R:00] Execute trigger runs and reduces rage to 0
In this video recorded today in Classic we can see that the trigger delay is 800ms, double what it was in vanilla. The video was recorded at 60 FPS so each frame is
1000/60 = 16.666... milliseconds. The Execute damage is applied at frame 57 and the trigger runs at frame 105, a difference of 48 frames.
Rage generated during the trigger window is lost completely and not factored into Execute’s damage (trigger window here is defined from the moment the Execute cast goes off until the rage is reduced to 0). This is vanilla behavior and not a bug.
The trigger window is double the length in Classic, which makes the problem of rage being lost much, much worse. A Warrior spamming Execute in Classic has 800ms windows where none of his auto attacks or extra attack procs will generate rage towards being able to hit Execute again at the next GCD.
-magey & the Fight Club team