Enter your character's totals: each card says how many frames you are on, the frame a cast acts on, how much is spare and exactly what the next step needs. Every step is in the tables below — including the ones where only the cast's action frame moves.
0.52 s each · 1.92 casts a second · effective 0 of 75
0.36 s each · effective 0
0.28 s each · effective 0
0.60 s each · 1.67 attacks a second · EIAS 0
| FCR | Frames | Acts on | Seconds | Per second |
|---|---|---|---|---|
| you | 13 | 9 | 0.52 | 1.92 |
| 12 | 9 | 0.48 | 2.08 | |
| 12 | 8 | 0.48 | 2.08 | |
| 11 | 8 | 0.44 | 2.27 | |
| 10 | 8 | 0.40 | 2.50 | |
| 10 | 7 | 0.40 | 2.50 | |
| 9 | 7 | 0.36 | 2.78 | |
| 9 | 6 | 0.36 | 2.78 | |
| 8 | 6 | 0.32 | 3.13 | |
| 7 | 6 | 0.28 | 3.57 |
Gold: the whole cast — how soon the next can start, so it alone sets how many casts a second you get. Teal: the frame the spell leaves your hand (Teleport lands, the missile flies, a cooldown starts) — rows in teal move only that frame, a step of its own between the frame breakpoints.
| FHR | Frames | Seconds |
|---|---|---|
| you | 9 | 0.36 |
| 8 | 0.32 | |
| 7 | 0.28 | |
| 6 | 0.24 | |
| 5 | 0.20 | |
| 4 | 0.16 | |
| 3 | 0.12 |
| FBR | Frames | Seconds |
|---|---|---|
| you | 7 | 0.28 |
| 6 | 0.24 | |
| 5 | 0.20 | |
| 4 | 0.16 | |
| 3 | 0.12 | |
| 2 | 0.08 |
| IAS | Frames | Seconds | Per second |
|---|---|---|---|
| you | 15 | 0.60 | 1.67 |
| 14 | 0.56 | 1.79 | |
| 13 | 0.52 | 1.92 | |
| 12 | 0.48 | 2.08 | |
| 11 | 0.44 | 2.27 | |
| 10 | 0.40 | 2.50 | |
| 9 | 0.36 | 2.78 |
EIAS = 120 × IAS / (120 + IAS), floored, minus the weapon speed modifier (negative is faster), plus skill speed, held between −85 and 75. Checked against every IAS column of the Amazon Basin's class tables.
The check runs when data/tools/anim.json is built (pipeline/build-tools-lab.mjs): every published IAS column reproduced on the game's animation records of this build.
Frames = 256 × (frames per direction − starting frame) / (animation speed × (base + effective bonus) / 100), rounded up, minus one. Base 100 for attacks and casting, 50 for hit recovery and blocking. Reproduces all 2,955 rows of the Amazon Basin's attack tables for seven classes and the published cast, hit-recovery and block tables.
Asserted when data/tools/anim.json is built and again by tests/tools.test.mjs on every test run; the Warlock's tables come from the game file alone (no published table to check against yet).
An Amazon or a Sorceress attacking with a sword, axe, mace, spear, polearm, dagger, javelin or staff starts the swing on frame 2, bare-handed on frame 1, so those attacks are two (one) frames shorter than the animation. Bows, crossbows, throws and the other classes start on frame 0. The Warlock has no published table yet: frame 0 is assumed.
Faster cast rate, hit recovery and block rate count as 120 × value / (120 + value), floored. Effective cast rate stops at 75 (200 % on gear); hit recovery and block rate have no such cap, which is why a druid's last hit-recovery step sits at 456 %.
The spell leaves the hand on frame action × 256 / (animation speed × (100 + effective cast rate) / 100), rounded up, with no "minus one" — a series with breakpoints of its own (a Barbarian casts in 10 frames from 37 % FCR, acting on frame 8, and on frame 7 from 39 %). The cast still lasts the whole animation, so the next cast waits for the cast frames: casts a second follow the frames alone. The action frame is when Teleport lands, a missile leaves and a cooldown starts counting.
Zeal plays the attack animation to its action frame for every hit and rolls back to the start after each, so each hit but the last takes ⌈256 × action frame / ⌊speed × (100 + EIAS) / 100⌋⌉ frames and the last plays the whole animation (with the − 1). It reproduces 2,556 of the 2,561 cells of the Amazon Basin's tables.
Jab's three thrusts are one sequence the game sets in code: 18 frames with a one-handed thrusting weapon, 21 with a spear. Its EIAS takes 30 off before the −85 / 75 clamp and there is no − 1: ⌈256 × length / ⌊256 × (100 + EIAS − 30) / 100⌋⌉ frames for the three.
Jab is a sequence the game sets in monseq.txt: 14 entries with a hit at the 6th and the 10th. A monster's sequence takes neither the players' minus 30 nor the minus one: 256 x 14 / (256 x (100 + EIAS) / 100), rounded up, for both thrusts, each hit on 256 x entry / (256 x (100 + EIAS) / 100), rounded up, with EIAS from the weapon's speed and the IAS on it (an aura's attack speed added undiminished). Every cell of the Amazon Basin's table agrees.
The Sorceress casts Lightning and Chain Lightning with a 19-frame animation and no "minus one": 256 × 19 / (256 × (100 + effective cast rate) / 100), rounded up.
With Holy Shield active a Paladin blocks in 2 frames, and in 1 frame from 86 % faster block rate. The game sets this in code; the block animation in the game files gives the 5-frame table without it.
Trang-Oul's full set turns a Necromancer into a vampire with its own cast (23 frames at 0 %) and hit-recovery (15 frames) tables. These are the published tables; the vampire's animation is a monster's and is not read here.
Sources: animdata.d2 of build 3.3.93847; checked against the tables of maxroll.gg and the Amazon Basin wiki. The Warlock's tables come from the game files alone (no published table to check against yet beyond community lists, which agree).