The Diablo 2 engine runs at 25 Frames per Second (FPS). Every action a character performs requires a specific number of frames to complete. Frames can't be broken down into fractions, therefore you have to reduce the count by a complete Frame to shorten the animation length, leading to the Breakpoints of the animation. We can improve the Cast Rate, Hit Recovery, Block Rate and Attack Rate through their corresponding Affixes on gear or Skill effects. Each of these animations has their own calculation on how to reduce its Frame count, which we go into detail in their respective sections. This leads to a table of numeric values that can be reached for each of them, the so-called "Breakpoints". Due to the complexity of Attack Speed, it is covered in our Attack Speed article.
Class Breakpoints
Amazon
Assassin
Barbarian
Druid
Necromancer
Paladin
Sorceress
Mercs
Cast Rate
The Cast Rate of the Amazon depends on the Weapon she is using.
Using a Bow
Faster Cast Rate
Cast Frames
Action Flags
0
19
10
7
18
10
14
17
9
22
16
9
32
15
8
48
14
8
68
13
7
99
12
7
152
11
6
Crossbow or Two-Handed-Swords
Faster Cast Rate
Cast Frames
Action Flag
0
19
12
7
18
12
11
18
11
14
17
11
22
16
11
26
16
10
32
15
10
48
14
9
68
13
9
86
13
8
99
12
8
152
11
8
180
11
7
No Weapon
Faster Cast Rate
Cast Frames
Action Flags
0
19
11
7
18
11
13
18
10
14
17
10
22
16
10
29
16
9
32
15
9
48
14
9
56
14
8
68
13
8
99
12
8
113
12
7
152
11
7
Two-Handed Staves, Hammers, Axes, Polearms, Spears, One-Handed Knives, or Javelins
Faster Cast Rate
Cast Frames
Action Flags
0
19
13
7
18
13
10
18
12
14
17
12
22
16
12
23
16
11
32
15
11
42
15
10
48
14
10
68
13
10
72
13
9
99
12
9
133
12
8
152
11
8
Hit Recovery Rate
Faster Hit Recover
Hit Recovery Frames
0
11
6
10
13
9
20
8
32
7
52
6
86
5
174
4
Block Rate
The Block Rate of the Amazon depends on the Weapon she is using.
The Skills Lightning and Chain Lightning of the Sorceress use a slightly modified version of this formula. Cast Frames = ceil(256 * Casting Base / floor(Animation Speed * (100 + EFCR) / 100))
Action Flag = ceil(Base Action Flag * 256 / floor(256 * (100 + EFCR) / 100)) Action Flag = ceil(10 * 256 / floor(256 * (100 + 44) / 100)) Action Flag = ceil(2,560 / floor(256 * 144 / 100)) Action Flag = ceil(2,560 / floor(368.64) Action Flag = ceil(2,560 / 368) Action Flag = ceil(6.9565...) Action Flag = 7
This means any casting Skill of the Amazon using a Bow at 70 FCR will trigger 7 Frames into the animation.
Cast Delay
Skills with a Cast Delay (CD or Cooldown) cause a waiting period before they can be cast again. This period starts at the Action Flag. Cast Delay Skills don't hinder each other to be cast without a waiting period. The CD itself can't be reduced by any means, however, due to the interaction with the Action Flag, you can reduce the interval (Action Flag + Delay) by hitting Breakpoints for the Action Flag.
Cast Delay Skills
Amazon
Skill
Delay (seconds)
Poison Javelin
0.6
Plague Javelin
4
Immolation Arrow
1
Valkyrie
6
Assassin
Skill
Delay (seconds)
Shock Web
0.6
Blade Sentinel
2
Shadow Warrior
6
Dragon Flight
1
Shadow Master
6
Druid
Skills
Delay (seconds)
Werewolf
1
Firestorm
0.6
Werebear
1
Molten Boulder
2
Fissure
2
Volcano
4
Armageddon
6
Hurricane
6
Paladin
Skill
Delay (seconds)
Fist of the Heavens
1
Sorceress
Skill
Delay (seconds)
Fire Wall
1.4
Meteor
1.2
Blizzard
1.8
Hydra
1.6
Frozen Orb
1
Hit Recovery
Mechanics
Hit Recovery will interrupt other animations like, cast animation, attack animation, run/walk animation, or your idle animation (standing around).
While in Hit Recovery, you are unable to perform any actions.
You can be put into Hit Recovery repeatedly without cooldown, potentially leading to a full "stun lock".
You can improve the animation by using gear with +xx% Faster Hit Recovery (FHR).
Calculations
Breakpoint Calculations
How is Hit Recovery determined?
Note for the calculations:
ceil = round up the term that follows
floor = round down the term that follows
Before we can use the formulas for Hit Recovery, we need the following values:
The total +xx% Faster Hit Recovery from our gear.
The "Hit base" of the Character. Check in the table below.
The "Animation Speed" of the Character. Check in the table below.
With these values, we can go through the following formulas.
Effective Faster Hit Recovery (EFHR)
EFHR = floor(FHR * 120 / (FHR + 120))
Hit Recovery Frames
Hit Recovery Frames = ceil(256 * Hit Base / floor(Animation Speed * (50 + EFHR) / 100) - 1)
Character
Hit Base
Animation Speed
Amazon
6
256
Assassin
5
256
Barbarian
5
256
Druid (1-handed swinging Weapons) (*)
7
248
Druid (Other Weapons)
7
256
Werewolf
4
256
Werebear
5
184
Necromancer
7
256
Vampire Form
4
136
Paladin (Spears and Staves)
5
192
Paladin (Other Weapons)
5
256
Sorceress
8
256
Act 1 Mercenary
6
256
Act 2 Mercenary
8
256
Act 3 Mercenary
9
256
Act 5 Mercenary
5
256
(*) This only means: 1-handed Axes, Clubs, Maces, Scepters, Swords, Throwing Axes, and Wands.
Hit Recovery Frames = ceil(256 * 8 / floor(256 * (50 + 35) / 100) - 1) Hit Recovery Frames = ceil(2,048 / floor(256 * 85 / 100) -1) Hit Recovery Frames = ceil(2,048 / 217 - 1) Hit Recovery Frames = ceil(8.437...) Hit Recovery Frames = 9
This means the Sorceress with 50 FHR on gear will use 9 Frames for the Hit Recovery animation.
The engine goes through a number of steps to determine whether a target is put into Hit Recovery:
Damage is calculated and applied. The target isn't put into Hit Recovery if
the calculated damage is enough to kill the target.
the target is Frozen.
the applied damage is Poison Damage only.
the applied damage is less than 1.
Check the maximum Life of the target.
Get the "divisor" value which is needed in the next step. This value is determined by the "hitclass" of the attack, which can be found in the Missile.txt game file. Each attack in the game has a hitclass value attached to it, which translates to a certain divisor. This correlation is hard coded in the engine.
Hitclasses
Divisor
2, 6, 10 and 11
8
Default
16
4 and 8
32
5
64
Use formula: TriggerNumber = maximum Life / divisor
Now we actually determine whether the target will be put into Hit Recovery. To do so, the engine goes through the following checks:
Compare the value of applied damage with the calculated value for TriggerNumber
Damage < TriggerNumber -> No Hit Recovery occurs
Damage >= TriggerNumber -> continue with the next check.
If Damage is < 2 * TriggerNumber, there is a 50% chance for the target to be put into Hit Recovery. The game rolls a number (rnd{0, 1}).
0 = No Hit Recovery occurs
1 = continue with the next check.
If the last check was successful and damage < 4 * TriggerNumber there is a 75% chance for Hit Recovery to occur. The game rolls a number (rnd{0, 1, 2, 3})
0 = No Hit Recovery occurs
1, 2, 3 = Hit Recovery occurs
If the applied damage > 4 * TriggerNumber, Hit Recovery occurs guaranteed.
The final step of the game is to check whether a target can be put into Hit Recovery in the first place. There are a number of targets that are "immune" to Hit Recovery. Your poor CPU might have wasted its time...
Practical Example
Alright... after that mind bender of theory... Let's apply our knowledge to a practical example: Our Character has 1600 Life and gets hit for 200 damage by an attack with the default divisor of 16.
The first step after knowing these values is: TriggerNumber = maximum Life / divisor TriggerNumber = 1600 / 16 = 100
Let's see if we will be put into Hit Recovery:
100 < 200 -> Our TriggerNumber is smaller than the inflicted damage. -> go to the next step.
100 * 2 = 200 -> The damage is equal to 2 times TriggerNumber. -> Time to roll a random number (rnd{0, 1}), meaning we have a 50% chance to get out of the Hit Recovery check.
0 = No Hit Recovery
1 = Go to next check
Assuming we got unlucky and rolled a 1 we now have a 75% chance to be put into Hit Recovery. Time to roll another random number to determine that: (rnd{0, 1, 2, 3})
0 = No Hit Recovery occurs
1, 2, 3 = Hit Recovery occurs
Since the damage is not >= 4x TriggerNumber there is no guarantee to be put into Hit Recovery.
Finally, let's check whether we can be put into Hit Recovery in the first place. The Characters you play can always be put into Hit Recovery, so if we rolled a 1-3 in the earlier check, we are out of luck and will be put into Hit Recovery.
Block Rate
Mechanics
Blocking is an animation that is performed when you successfully block a physical attack. This includes the Assassins' Weapon Block.
While blocking, you are unable to perform any actions.
You can block repeatedly without cooldown, potentially leading to a full "block lock".
You can speed up the animation by using gear with +xx% Faster Block Rate (FBR).
This Affix is exclusive to Shields, making it very hard to come by. The only exceptions to this rule are Guardian Angel and Pattern.
Calculations
Note for the calculations:
ceil = round up the term that follows
floor = round down the term that follows
Before we can use the formulas for Block Rate, we need the following values:
The total +xx% Faster Block Rate from our gear.
The "Block Base" of the Character. Check in the table below.
The "Animation Speed" of the Character. Check in the table below.
With these values, we can go through the following formulas.