A very simple experiment involving a Siege Tank and some Marines revealed the formula.
damage = max(0.5, (attack × splash_mod - armor) × size_mod)
Where each word means:
- attack: The base damage dealt by the attacker.
- splash_mod: 0.5 or 0.25 if the attack is splash damage and the target unit receives only 50% or 25% of the base damage, respectively. Otherwise, the value is 1.
- armor: The armor value of the attacked unit.
- size_mod: The percentage of the damage that is received, dependent on the damage type and unit size. See below.
There are three types of damage and unit types in StarCraft, the combinations of which determine how much damage is actually dealt:
| Damage Type | Small | Medium | Large |
|---|---|---|---|
| Normal | 100% | 100% | 100% |
| Explosive | 50% | 75% | 100% |
| Concussive | 100% | 50% | 25% |
The max(0.5, ...) part means that if the damage calculated is smaller than 0.5, then it will be converted to exactly 0.5 points of damage. Damage values higher than 0.5, such as 0.5625 and 1.125, will be dealt as expected.
For example, if a Marine (Small, 40HP) with +1 armor upgrade is attacked by a Siege Tank in siege mode (70 explosive damage), the Marine will receive
(70 × 1 - 1) × 0.5 = 34.5damage. However, if the Marine is between the 25% splash damage zone and the 50% splash damage zone, it will receive
(70 × 0.25 - 1) × 0.5 = 8.25damage.
0 comments:
Post a Comment