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:
- movement when Auto Shot becomes ready
- cast-time abilities
- Feign Death recovery
- attempting to activate Auto Shot while already active
- switching from a queued Raptor Strike / melee state
- 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:
- movement across the weapon-ready point
- stopping movement just before readiness
- stopping just after a retry check
- repeatedly activating Auto Shot
- activating Auto before the weapon cooldown finishes
- melee β ranged transitions
- queued Raptor Strike β ranged transitions
- Feign Death β Auto Shot
- 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
- Blizzard β WoW Classic Era "Not A Bug" List
- Sixxfury β Classic Hunter: The Retry Timer
- Anatomy of Range Checks
- Hunter Testing Methodology