Skip to content

Windfury Totem

Beanna edited this page Jan 14, 2024 · 13 revisions

Windfury Totem (WF) is a temporary weapon enchant on your main-hand weapon that give a 20% chance on hit to proc 1 extra attack with bonus attack power. In the context of vanilla/classic WoW an extra attack is not really an additional attack, but instead when you gain an extra attack the game finishes your swing timer immediately so you swing right away and the swing timer resets. This behavior extends to on-next-swing attacks since they follow your swing timer; when you have e.g. Heroic Strike queued and you use an instant attack like Bloodthirst which procs WF the Heroic Strike happens immediately instead of an 'extra' white hit assuming you had enough rage for it when the proc occurred.

Proc triggers

  • Normal melee swings (but not off-hand swings)
  • On-next-swing attacks (Heroic Strike & Cleave)
  • Slam (when chain-casting, Improved Slam is required to let the extra attack go off)
  • Single-target instant attacks (except Shield Slam and Shield Bash; they are considered off-hand attacks)
  • Multi-target instant attacks (the proc is on-cast meaning only a single extra attack can be gained even when e.g. Whirlwind hits 4 targets)
  • Other extra attacks (e.g. Ironfoe, Sword Specialization, etc.) but it can't proc itself or proc twice in the same chain of extra attacks
  • Other procs that trigger weapon-damage based effects (e.g. Ravager)

Proc effects

When WF procs it makes you cast a spell on yourself that has two effects:

  • Grants 1 extra attack
  • Applies an aura (which counts towards your buffcap) with a maximal duration of 1.5s that increases your attack power and has two charges:
    • Each melee swing consumes a charge
    • When all charges are consumed the aura is removed
    • If 1.5 seconds pass without all charges being consumed the aura expires and is removed

Some things to note:

  • Windfury Totem, Windfury Weapon, and Wild Strikes have an internal cooldown of 1.5 seconds. (Confirmed 12/01/2023 by Zirene)
  • The source of the proc, be it a normal melee swing or an instant attack, does not benefit from the bonus attack power because the damage of swings and spells is calculated on swing / on cast even though the application of said damage is delayed until the next batch processing tick.
  • A melee swing consumes a charge when it actually deals damage, i.e. when the SWING_DAMAGE_LANDED event occurs at the next batch processing tick and not when the swing timer runs (SWING_DAMAGE).
  • When a charge is consumed it is removed in the batch processing tick following the event that consumed it, meaning that when a melee swing consumes a charge it happens in two batch ticks; the first one applies the damage of the swing and registers the swing as having dealt damage; the next tick actually deducts the charge from the aura.

Buff mechanics

Triggered by a normal melee swing

When the proc is triggered by a normal melee swing the two charges are consumed right away (one normal swing + one extra swing) and the buff has an uptime between 400ms to 800ms depending on when the next batch processing tick occurred relative to the original swing that proc'd WF. Note that while the normal swing that proc'd WF consumes a charge it does not benefit from the bonus AP.

As an extreme example, if the melee swing happened 1ms after a batch tick then the next tick which applies the damage of the melee swings would happen 399ms later, and the tick which finally removes the buff will happen 400ms after that, giving the buff an uptime of 799ms.

If the player precisely times a cast of an instant attack in the window of time where the buff is up then this instant attack will benefit from the bonus attack power; this was extensively tested and confirmed.

Combat log example:

[19:35:05.271]  SPELL_AURA_APPLIED (Gain the WF AP aura)
[19:35:05.271]  SPELL_EXTRA_ATTACKS (Gain the WF extra attack)
[19:35:05.271]  SWING_DAMAGE (Normal hit)
[19:35:05.271]  SWING_DAMAGE (Extra hit)
[19:35:05.487]  SWING_DAMAGE_LANDED (Normal hit damage applied)
[19:35:05.487]  SWING_DAMAGE_LANDED (Extra hit damage applied)
[19:35:05.888]  SPELL_AURA_REMOVED_DOSE (AP aura charge consumed)
[19:35:05.888]  SPELL_AURA_REMOVED (AP aura charge consumed and aura removed)

At time 19:35:05.271 a normal melee swing (SWING_DAMAGE) occurred which proc'd WF. We observe that the original swing, aura application and extra swing all happen at the same time. The damage application of these two swings happened in the next batch processing tick at 19:35:05.487 . Finally the charges are removed from the aura ~400ms later in the next batch processing tick at 19:35:05.888.

In this particular example the uptime of the buff was 617ms; 216ms until the batch tick following the original swing, and then 401ms more until the tick that removes the charges.

Refer to this handy infographic made by Beanna that demonstrates this scenario (right-click and open in new tab to see in full resolution):

Triggered by melee spell

When the proc is triggered by a melee spell (instant attack, on-next-swing attack or Slam) one charge is consumed right away by the extra swing. Note that if the trigger is an on-next-swing attack then this attack does not consume a charge since it's not an actual melee swing - it was replaced by a spell cast. The buff has an uptime between 400ms to 1500ms depending on a few conditions:

  • If no other melee swing occurs after the WF extra swing then the uptime of the buff will be 1500ms.
  • If an additional melee swing occurs during the time the buff is up it will consume a charge, will benefit from the bonus AP and will affect the uptime of the buff. An additional swing can either be an off-hand swing, a main-hand swing as a result of haste effects reducing the swing timer below 1.5s or another extra attack proc'd by the WF extra hit.
    • If the additional swing occurs before the batch tick that applies the damage of the WF extra swing (SWING_DAMAGE_LANDED) then the uptime of the buff will be similar to being triggered from a normal melee swing (see description above).
    • If the additional swing occurs after the batch tick that applies the damage of the WF extra swing (SWING_DAMAGE_LANDED) but before the batch tick that removes the charge consumed by the WF extra swing (SPELL_AURA_REMOVED_DOSE) the then the uptime of the buff will be between 800ms to 1200ms.
    • If the additional swing occurs after the batch tick that removes the charge consumed by the WF extra swing (SPELL_AURA_REMOVED_DOSE) the then the uptime of the buff will be 1500ms.
  • If a melee swing occurred (SWING_DAMAGE) before WF was triggered but the batch that applies its damage hasn't happened yet (SWING_DAMAGE_LANDED), its damage will be applied in the same batch that applies the WF extra hit damage and it will consume a charge but not benefit from the extra AP (remember that damage is calculated immediately and this swing happened before the WF AP buff was applied on you). In this case the uptime of the buff will be similar to being triggered from a normal melee swing (see description above).

Combat log example:

[17:32:57.469] SPELL_CAST_SUCCESS (Bloodthirst cast)
[17:32:57.469] SPELL_AURA_APPLIED (Gain the WF AP aura)
[17:32:57.469] SPELL_EXTRA_ATTACKS (Gain the WF extra attack)
[17:32:57.469] SWING_DAMAGE (Extra hit)
[17:32:57.850] SPELL_DAMAGE (Bloodthirst damage applied)
[17:32:57.850] SWING_DAMAGE_LANDED (Extra hit damage applied)
[17:32:58.260] SPELL_AURA_REMOVED_DOSE (AP aura charge consumed)
[17:32:58.970] SPELL_AURA_REMOVED (AP aura expired and removed)

At time 17:32:57.469 Bloodthirst was cast (SPELL_CAST_SUCCESS) and proc'd WF. We observe that the cast, aura application and extra swing all happen at the same time. The damage application of the Bloodthirst cast and the extra swing happened in the next batch processing tick at 17:32:57.850. A charge is removed from the WF aura ~410ms later in the next batch processing tick at 17:32:58.260, then the AP buff stays up until it at expires at 17:32:58.970.

In this particular example the uptime of the buff was 1501ms; no additional swings occurred after the WF extra hit which means there was still 1 charge left in the aura so it stayed up until it expired 1.5s later.

Refer to this handy infographic made by Beanna that demonstrates this scenario (right-click and open in new tab to see in full resolution):

Triggered by melee spell while an on-next-swing attack is queued

The details of this scenario are very similar to the one described above for general melee spells but instead of gaining an extra melee swing the queued attack (Heroic Strike or Cleave) is executed immediately if you have enough rage for it, and it does not consume a charge from the AP buff since it converts the melee swing into a spell cast. This means you can land an additional two normal melee swings in the duration of the buff that will benefit from the bonus AP.

Refer to this handy infographic made by Beanna that demonstrates this scenario (right-click and open in new tab to see in full resolution):