Shot Mechanics - classic-hunter/forever-hunter GitHub Wiki

🏹 Shot Mechanics

Hunter ranged attacks use several timing systems that are not obvious from their tooltips.

The most important are:

  • ranged weapon cooldown
  • Auto Shot cast time
  • ranged haste
  • Auto Shot retry behavior
  • interactions between Auto Shot and cast-time abilities
  • movement and minimum ranged distance

For ranged hit, Crit, Weapon Skill, and attack-table behavior, see Ranged Attack Table.
For range and combat reach, see Anatomy of Range Checks.
For damage formulas, see Attack Formulas.


Summary

  • Auto Shot has a cast portion and a weapon cooldown
  • Ranged haste reduces both portions
  • Ranged haste also reduces applicable ranged ability cast times
  • Auto Shot can fire while casting Aimed Shot, Multi-Shot, and Sniper Shot
  • Auto Shot has a hidden retry system
  • Blizzard confirmed the Classic retry check occurs every 500 ms
  • The retry timer is specific to Auto Shot, not spell batching or server heartbeats
  • A retry can occur before the weapon cooldown is finished
  • A retry event does not necessarily mean the next shot was delayed
  • The shot is only delayed when the retry extends beyond the point Auto Shot could otherwise begin
  • Repeated Auto Shot activation, movement, melee transitions, and other failed Auto Shot attempts can create retry states
  • Automatic Auto Shot / Auto Attack switching can interfere with clean shot timing
  • Current Forever behavior allows Auto Shot during compatible cast-time abilities
  • Current Forever behavior also allows a melee swing to reset the ranged swing timer

🎯 Auto Shot Timing

Auto Shot can be separated into two parts:

Auto Shot Cycle = Cast Time + Weapon Cooldown

At base speed, Auto Shot uses approximately:

0.5 sec Cast Time

The remainder of the ranged weapon speed is the weapon cooldown.

For a 2.9 sec ranged weapon:

Weapon Cooldown = 2.9 - 0.5

Weapon Cooldown = 2.4 sec

So the ideal cycle is:

0.5 sec Cast β†’ Shot Fires β†’ 2.4 sec Cooldown β†’ Next Cast


⚑ Ranged Haste

Ranged haste reduces:

  • Auto Shot cast time
  • Auto Shot weapon cooldown
  • applicable ranged ability cast times

Use:

Hasted Time = Base Time / Haste Multiplier

For 10% ranged haste:

Haste Multiplier = 1.10

A 0.5 sec Auto Shot cast becomes:

0.5 / 1.10 = ~0.455 sec

A 2.9 sec weapon cycle becomes:

2.9 / 1.10 = ~2.636 sec


Haste Stacking

Ranged haste sources stack multiplicatively where applicable.

Conceptually:

Final Time = Base Time / (Haste₁ Γ— Hasteβ‚‚ Γ— Haste₃...)

Common Hunter haste sources include:

  • Quiver or Ammo Pouch
  • Rapid Fire
  • Deadly Aspects
  • Berserking

Forever Rapid Fire also increases melee attack speed.


πŸ” Auto Shot Retry Timer

Auto Shot has a hidden retry system that can delay the beginning of its next cast.

This mechanic was documented during Classic and officially acknowledged by Blizzard.

In Blizzard's WoW Classic "Not A Bug" List, Blizzard explained that if the normal Auto Shot timer finishes while the Hunter is moving, Auto Shot enters a hidden retry state.

The retry:

Checks again every 500 ms

Blizzard specifically clarified that this behavior is:

  • not spell batching
  • not a server heartbeat
  • specific to Auto Shot
  • consistent with the Classic reference client

Blizzard β€” WoW Classic "Not A Bug" List


Blizzard's Confirmed Movement Case

The officially documented case is movement.

If the ranged weapon becomes ready while the Hunter is moving:

Auto Shot Attempts β†’ Hunter Is Moving β†’ Retry Begins

The game then checks periodically to see whether Auto Shot can begin.

If the Hunter stops just after one of those checks:

Wait Until Next Retry Check

Since the retry interval is approximately:

500 ms

the Hunter can lose almost half a second before Auto Shot attempts to begin again.

The actual delay depends on where movement stops relative to the retry cycle.


🧠 Retry State vs. Actual Shot Delay

This distinction is extremely important.

A retry state does not automatically mean Auto Shot has been delayed.

The retry timer and the ranged weapon cooldown can exist at the same time.

For example:

Weapon Cooldown
|------------------------|

                  Auto Ready
                        ↓

Retry
             |------|

If the retry finishes before the weapon cooldown:

No Shot Delay

The weapon was not ready anyway.

If the retry finishes after the weapon cooldown:

Weapon Cooldown
|------------------------|
                         ↑
                    Auto Ready

Retry
                  |-----------|
                              ↑
                       Retry Ends

then:

Shot Delay = Retry End - Auto Ready Time

This is why seeing a retry event by itself is not proof that an Auto Shot was clipped.


Practical Rule

Retry before Auto is ready = usually harmless

Retry extending past Auto readiness = actual delay

This is the important distinction when analyzing logs or swing-timer behavior.


⏱️ Retry Example

Assume:

Weapon Speed = 2.9 sec

Auto Shot Cast = 0.5 sec

Therefore:

Weapon Cooldown = 2.4 sec

Suppose a retry begins with:

0.5 sec remaining on the weapon cooldown

If that retry ends after only:

0.3 sec

then the weapon still has:

0.2 sec remaining

The retry causes no actual delay.

But if the retry lasts:

0.5 sec

and the weapon becomes ready during it, Auto Shot must wait until the retry completes.

That remaining overlap becomes real shot delay.


πŸ“œ Classic Retry Research

The 2020 forum post Classic Hunter: The Retry Timer documented several additional situations where Auto Shot appeared to enter retry behavior beyond Blizzard's explicitly documented movement case.

Sixxfury β€” Classic Hunter: The Retry Timer

The reported cases included:

  1. movement when Auto Shot becomes ready
  2. cast-time abilities
  3. Feign Death recovery
  4. attempting to activate Auto Shot while already active
  5. switching from a queued Raptor Strike / melee state
  6. reactivating Auto Shot too early during melee weaving

Blizzard's blue post directly confirms the movement case and the 500 ms retry mechanism.

The remaining cases were player-observed Classic behavior documented in the forum post rather than separately confirmed by Blizzard.


πŸƒ Movement

Movement is the clearest retry case.

If Auto Shot reaches the point where it wants to begin casting while the Hunter is moving:

Failed Auto Attempt β†’ Retry

The Hunter may stop moving before the next retry check, but Auto Shot does not necessarily begin immediately.

It waits for another valid attempt.

This is why kiting can occasionally produce the familiar:

"I stopped moving β€” why didn't I shoot?"

behavior.


πŸ”„ Repeated Auto Shot Activation

The Classic testing also found that attempting to start Auto Shot when it was already active could create retry behavior.

This is particularly relevant to macros containing:

/cast Auto Shot

or:

/cast !Auto Shot

on buttons that are repeatedly pressed.

Repeated Auto Shot requests can create additional attempts while Auto Shot is not yet able to begin.

Those attempts may enter the retry system.


Macro Consequence

A macro such as:

/cast !Auto Shot

combined with another frequently pressed ability can repeatedly request Auto Shot.

Historically, this could create retry checks even though Auto Shot was already active.

This is one reason Hunter macros that constantly force Auto Shot can behave differently from simply allowing the ranged cycle to continue naturally.


βš”οΈ Melee and Auto Shot Reactivation

The Classic retry testing also identified an important melee-weaving interaction.

If Auto Shot is stopped for melee and then reactivated before the ranged weapon is actually ready, the attempted Auto Shot can enter retry behavior.

Conceptually:

Auto Fires β†’ Move In β†’ Melee β†’ Move Out β†’ Reactivate Auto Early β†’ Retry

This matters because the Hunter can return to ranged distance before the ranged weapon cooldown has completed.

Starting Auto immediately does not necessarily mean it will begin casting at the exact moment the cooldown becomes available.


Classic Weaving Example

The original testing used a fast weave where the Hunter returned to ranged distance before the ranged weapon was ready.

If Auto Shot was activated during that remaining cooldown:

Auto Attempt β†’ Not Ready β†’ Retry

The next retry could occur after the expected weapon-ready point.

The result was an Auto Shot occurring later than the ideal ranged cycle.

This is one of the reasons retry behavior matters so much for melee weaving.

See Melee Weaving.


πŸ—‘οΈ Raptor Strike Interaction

Classic testing also found that attempting to begin Auto Shot while Raptor Strike was still queued could produce a failed Auto Shot attempt.

The game first needed to leave the melee / queued Raptor state.

That failed initial attempt could then enter the retry system.

A workaround in Classic was to explicitly clear the melee state first, for example through:

/stopattack

before attempting to begin Auto Shot.

Current Forever behavior should be evaluated independently, but the interaction helps explain why automatic melee-to-ranged switching can sometimes feel delayed.


πŸ’€ Feign Death

Feign Death resets both:

  • ranged swing timer
  • melee swing timer

After Feign Death, the ranged weapon must rebuild its swing cycle.

Classic testing found that attempting to activate Auto Shot before that new ranged cycle was ready could create repeated retry attempts.

This could produce:

Swing Reset + Retry Delay + Auto Shot Cast

making Feign Death transitions feel substantially slower than the weapon speed alone would suggest.

See Ability Mechanics for Feign Death behavior.


🎯 Cast-Time Abilities and Retry

The 2020 Classic testing also reported retry behavior around cast-time abilities such as:

  • Aimed Shot
  • Multi-Shot
  • Volley

The important historical observation was that Auto Shot attempts could occur in the background even while another action prevented Auto Shot from beginning normally.

However, this behavior should not simply be copied directly into the Forever model.

Forever changes the interaction significantly:

Auto Shot can fire while compatible cast-time abilities are being cast

Confirmed examples include:

  • Aimed Shot
  • Multi-Shot
  • Sniper Shot

Therefore, current Forever retry behavior during these casts must be evaluated based on actual Auto Shot attempts rather than the original Classic restriction alone.


🧾 Retry Event Detection

A useful client-side event associated with failed Auto Shot attempts is:

UNIT_SPELLCAST_FAILED_QUIET

This event can occur when Auto Shot attempts to begin but cannot successfully start.

It can therefore be used as a practical signal that Auto Shot has entered or interacted with a retry condition.

However:

UNIT_SPELLCAST_FAILED_QUIET β‰  Guaranteed Shot Delay

It identifies a failed attempt.

Whether that attempt costs DPS depends on whether the retry extends beyond the remaining ranged cooldown.


Sixx's Notes: Interpreting Retry Events

The retry event is most useful when compared against the ranged weapon timer.

If a retry occurs while significant weapon cooldown remains, it may disappear before Auto Shot could have fired anyway.

If the retry continues across the expected ready point:

that overlap is the real delay

This is more useful than simply counting retry events.


πŸ”˜ Manual Auto Shot Activation

Manually requesting Auto Shot can sometimes allow the Hunter to begin the shot as soon as the game accepts a valid activation rather than waiting for a previously scheduled retry attempt.

This helps explain why actively pressing Auto Shot can sometimes feel more responsive than allowing an existing retry state to resolve naturally.

However, repeatedly requesting Auto Shot while it is not yet valid can also generate additional failed attempts.

The useful distinction is timing:

Manual activation when Auto is valid can help

while:

Repeated activation while Auto is invalid can create additional retry behavior

This is why blindly spamming Auto Shot and deliberately activating it at the correct time are not necessarily the same thing.


πŸ”€ Automatic Auto Attack / Auto Shot Switching

The game can automatically transition between:

  • Auto Shot
  • Auto Attack

depending on range and combat state.

For normal gameplay this can be convenient.

For precise melee weaving it can be undesirable.

Automatic switching can create extra Auto Shot attempts during the transition between melee and ranged states.

Those attempts can interact with the retry system and make the next ranged cast less predictable.

For controlled weaving:

Automatic Auto Attack / Auto Shot switching should generally be disabled

See Melee Weaving.


🏹 Auto Shot During Other Casts

Forever allows Auto Shot to continue while casting compatible Hunter abilities.

Confirmed examples include:

  • Aimed Shot
  • Multi-Shot
  • Sniper Shot

Therefore:

Cast-Time Ability β‰  Auto Shot Pause

The Auto Shot cycle can overlap these casts.

This makes their true rotational cost smaller than simply adding their cast time to the ranged rotation.


🌐 Global Cooldown

The Global Cooldown and ranged weapon timer are separate systems.

An ability can trigger the GCD while the ranged weapon timer continues progressing.

Likewise, the Auto Shot retry system is separate from the GCD.

Conceptually:

GCD β‰  Ranged Cooldown β‰  Retry Timer

Several timing systems can therefore be active simultaneously.

This is why Hunter rotation analysis should track each independently.


πŸ“ Minimum Ranged Distance

Hunter shots require the target to satisfy the minimum ranged-distance check.

The tooltip minimum is not simply center-to-center distance.

Combat reach affects the actual boundary.

Against ordinary non-Tauren players, minimum shooting distance is approximately:

~11 yd center to center

For targets whose combat reach extends melee beyond the 5 yd melee floor, the practical dead-zone width is approximately:

~6.67 yd

See Anatomy of Range Checks for the full range model.


⚠️ Current Forever Swing Interaction

Current Forever behavior includes an important melee-weaving issue:

A melee swing resets the ranged swing timer

The reverse does not currently occur:

Ranged attacks do not reset the melee swing timer

This means a melee attack can impose a larger ranged cost than dead-zone travel alone would predict.

See Melee Weaving.


πŸ”¬ Testing Retry Behavior

To determine whether a retry actually delayed a shot, record:

  • previous Auto Shot timestamp
  • Auto Shot cast start
  • expected weapon-ready time
  • retry event time
  • retry end / successful cast start
  • movement state
  • other ability casts
  • melee state
  • next Auto Shot timestamp

The key comparison is:

Expected Auto Cast Start vs. Actual Auto Cast Start

A retry event occurring before the expected cast time is not enough by itself.


Useful Test Cases

Retry behavior can be tested separately with:

  1. movement across the weapon-ready point
  2. stopping movement just before readiness
  3. stopping just after a retry check
  4. repeatedly activating Auto Shot
  5. activating Auto before the weapon cooldown finishes
  6. melee β†’ ranged transitions
  7. queued Raptor Strike β†’ ranged transitions
  8. Feign Death β†’ Auto Shot
  9. compatible cast-time abilities

Change only one interaction at a time.

See Hunter Testing Methodology.


πŸ“ Practical Retry Model

A useful working model is:

Auto Shot Attempts to Start

If the attempt is valid:

Auto Shot Cast Begins

If the attempt cannot begin:

Retry State Begins

The game attempts Auto Shot again on the retry cycle.

The important DPS relationship is:

Actual Retry Delay = MAX(0, Retry End - Expected Auto Ready Time)

Therefore:

Retry Exists β‰  Shot Delayed

Only the portion of retry time extending beyond normal Auto Shot readiness represents actual clipping.


Historical Reference

Blizzard officially confirmed:

  • a hidden Auto Shot retry timer exists
  • movement can trigger it
  • retry checks occur every 500 ms
  • it is not caused by spell batching
  • it is not a server heartbeat
  • it is specific to Hunter Auto Shot
  • the behavior matched the Classic reference client

The 2020 Classic Hunter: The Retry Timer research expanded the observed trigger cases to include several additional Auto Shot state transitions.

Those historical observations are useful for understanding the system, but Forever behavior should be verified independently where its Auto Shot mechanics differ from Classic.


Sources


Related Pages