Labs

Damage Lab

Pick two units, set the upgrades, and find the one upgrade that takes a hit off.

The short version

  • Damage is not one number. It is a base, plus your upgrades, minus their armour, times a multiplier that depends on what size they are.
  • Explosive weapons do half damage to small units. Concussive weapons do a quarter to large ones. Normal damage does not care.
  • Protoss shields are hit before that multiplier, at full value, and they have an upgrade of their own. That is why a dragoon strips a zealot's shields fast and then slows down.
  • The number that matters is not damage, it is attacks to kill. Most upgrades change it by nothing at all, and then one of them takes a whole attack off. That one is a breakpoint.
  • The classic: zealots need three attacks to kill a zergling. At one weapon upgrade they need two. Set the boxes below to Zealot and Zergling and watch it happen.

What it takes to kill it

Pick the two units and the upgrade levels. Every number below is the game's own arithmetic, not an approximation of it.

8hp

Damage a hit lands

5

Hits to kill

2 hits an attack, so 3 attacks.

3

Attacks to kill

1.85s

Time to kill

One Zealot, no misses, no moving.

One Zealot at +0 kills a Zergling at +0 armour in 3 attacks, which is 1.85 seconds of shooting. The last hit wastes 5 hit points of damage.

Psi Blades

Weapon

8 normal, +1 a level, cooldown 22 frames, range 1.

35 hp

Target

0 armour, small.

100resources

Cost of the attacker

100 minerals and 0 gas.

25resources

Cost of the target

25 minerals and 0 gas.

The breakpoints

A breakpoint is the only upgrade that changes anything. Below it, the extra damage is absorbed by the hit that was going to land anyway.

  • Weapons +1 Zealot goes from 3 attacks to 2, and saves 0.93 seconds a kill.
  • Armour +3 Zergling's armour puts it back up from 3 attacks to 4.

Attacks to kill, at every combination

Weapons Armour +0Armour +1Armour +2Armour +3
+0 3 3 3 4
+1 2 3 3 3
+2 2 2 3 3
+3 2 2 2 3

Gold is a breakpoint: that upgrade took a whole attack off.

What the game is actually doing

Every hit in Brood War goes through the same five steps, in this order. The order is the part everyone gets wrong, so here it is as the engine has it.

One hit, start to finish
D0=d+buD_0 = d + b\,u
(1)
The weapon's damage, plus its per level bonus times your upgrade level.
D1=max(D0s, 12)against shields, then D2=D1min(D1,S)D_1 = \max(D_0 - s,\ \tfrac{1}{2}) \quad \text{against shields, then } D_2 = D_1 - \min(D_1, S)
(2)
Shields take it at full value, less the plasma shield upgrade. Only what is left carries on.
D3={D2aD2>a0otherwiseD_3 = \begin{cases} D_2 - a & D_2 > a \\ 0 & \text{otherwise} \end{cases}
(3)
Their armour comes off what the shields did not absorb.
D4=m(type,size)D3D_4 = m(\text{type}, \text{size}) \cdot D_3
(4)
And only now does the damage type meet the size.

the game engine's own damage routine

The multiplier table is small enough to memorise, and worth memorising:

Small Medium Large
Normal 100% 100% 100%
Explosive 50% 75% 100%
Concussive 100% 50% 25%

A hit always lands for at least half a hit point, so armour can blunt a weapon but never switch it off. And the engine works in units of one two hundred and fifty sixth of a hit point, which is why you get halves and quarters: a dragoon against a zealot with its shields down deals (201)×0.5=9.5(20 - 1) \times 0.5 = 9.5, not nine and not ten.

Why the order matters

Take a dragoon shooting a zealot. The dragoon does 20 explosive, the zealot is small, so you would expect 10 a hit all the way through. It is not what happens.

While the shields are up, the zealot takes the full 20 a hit, because shields are hit before the size multiplier and before the zealot's armour. Sixty shields go in three hits. Then the hits fall to 9.5 and the remaining hundred hit points take eleven more. Three fast hits and eleven slow ones, out of one weapon that never changed.

This is also why plasma shields are the best upgrade protoss has against small arms and one of the worst against siege tanks: it comes off the top of every hit, so it is worth more against many small hits than against a few large ones.

Show the maths

Against n hits of size D, one level of a flat subtraction is worth n hit points of effective health, so its value scales with how many times you get hit. A marine hits a zealot ten times through its shields; a tank hits it once.

The breakpoint is the whole point

An upgrade that does not change the number of attacks has changed nothing that you will ever see. The lab lists every level where the count actually drops, and the grid at the bottom prints the count for all sixteen combinations so you can see how flat it mostly is.

Three worth knowing by heart:

  • Zealots and zerglings. Three attacks becomes two at weapons +1. It is the single most valuable early upgrade protoss has against zerg, and zerg carapace +1 takes it straight back.
  • Marines and zerglings. Six hits becomes five at +1 and four at +3. Zerg carapace pushes it back to seven.
  • Hydralisks and marines. Explosive against small is halved, so upgrades move slowly. Check it in the grid rather than trusting the damage number.
What this lab assumes
AssumptionValueWhy, and how sure we are
Unit and weapon numbers Liquipedia Typed from the wiki, not exported from the engine's own data files yet. If you find one wrong, it is wrong in app/content/data/learn/units.yml and nowhere else.
Damage rules The engine The order of shields, armour and size multiplier is read from the game engine's own damage routine, so it is the game's and not a wiki's summary of it.
Time to kill cooldown only Frames of weapon cooldown between attacks, at 42 ms a frame. No travel time, no misses, no animation, no moving.
One attacker, one target always Splash, bounces and overkill between several attackers are not modelled here. The Battle Lab is where armies go.