Damage resolution
Damage is resolved through several different systems. Ordinary enemy armor uses AP versus AV, periodic status effects keep fractional damage instead of throwing it away, and projectiles that pass through a target pay a separate penetration cost that depends on armor and durability.
- Equal AP and AV
- 65% damage
- Periodic fractions
- Carried between ticks
- Projectile pass-through
- Costs AP and velocity
Equal AP and AV
For the ordinary damage path, the game compares the penetration value selected for the hit against the armor value of the struck zone. Matching the armor exactly is not full penetration: the game applies a 0.65 damage factor.
This is the result the evaluator itself produces. It is not reconstructed from the formula after the fact. Runtime captures repeatedly show the same 0.65 result when selected AP equals target AV.
| Selected AP vs AV | Damage result | Path |
|---|---|---|
| AP below AV | Blocked | Ordinary evaluator path |
| AP equal to AV | 65% damage | Ordinary evaluator path |
| AP above AV | 100% damage | Ordinary evaluator path |
FLAM-40 and Cremator direct particles both resolved to 1 damage against matching AV4.
In controlled AP4-versus-AV4 captures, all 27 matching FLAM-40 events started at 2 direct damage and all 13 matching Cremator-profile events started at 3 direct damage. The game's evaluator returned 1 for every event in both sets. The recorder reads that post-call evaluator result directly; its reconstructed armor math is stored separately.
| Weapon / test set | Raw direct damage | Matching events | Game-evaluated damage |
|---|---|---|---|
| FLAM-40 | 2 | 27 | 1 |
| B/FLAM-80 Cremator | 3 | 13 | 1 |
Current evaluator code explains the observed equality. The matching-armor factor scales the
hit before the relevant whole-number damage stage: 2 × 0.65 = 1.30 and
3 × 0.65 = 1.95 both resolve to 1 there.
This is a per-particle direct-damage result. It does not establish equal total DPS: particle delivery, contact count, damage over time, and other downstream effects can still differ.
Helldiver armour formula
Damage against the tested Helldiver entered a different evaluator path from ordinary enemy armor. With 75 armour, runtime capture produced a damage factor of 1.125×. That value is exactly what the special factor table produces at the observed runtime armor coordinate.
Across the normal 50–150 armour range, that table follows the same progression as 1.5 − armour rating / 200. The code path and factor table are confirmed, and the 75-armour result is directly observed. The owning runtime component is not yet safely named as a player-armour component, so the final component identity remains supported rather than confirmed.
| Armour rating | Damage factor | Evidence |
|---|---|---|
| 50 | 1.25× | Matches the special factor table |
| 75 | 1.125× | Observed in runtime testing |
| 100 | 1.00× | Matches the special factor table |
| 125 | 0.875× | Interpolated by the same table |
| 150 | 0.75× | Matches the special factor table |
Fractional carryover
Periodic damage does not independently round every tick down.
Each status instance keeps a fractional remainder. Once the running amount reaches at least one whole point, the game dispatches the whole-number portion and keeps the remainder for the next tick.
This matters most for fire and other repeating status damage. A repeated 6.25-damage tick does not permanently lose 0.25 damage every time. Instead, that quarter point accumulates until every fourth tick contributes an extra point.
Sub-one values also explain a common testing trap. A 0.75 periodic tick can produce no applied damage on its first update, because the status is still holding 0.75 internally. The next update pushes the stored amount above one and dispatches damage then.
| Repeated evaluated damage | Applied sequence | What is happening |
|---|---|---|
| 6.25 | 6, 6, 6, 7 | The 0.25 remainder is carried forward. |
| 16.25 | 16, 16, 16, 17 | The same quarter-point carry is preserved. |
| 2.75 | 2, 3, 3, 3 | A 0.75 remainder reaches the next whole point quickly. |
| 0.75 | 0, 1, 1, 1 … | A sub-1 tick can be withheld until the carried total reaches 1. |
Overpenetration
A projectile can hit a target and continue through it, potentially striking something behind it. To pass through, it needs enough armor penetration (AP) to beat the target's armor value (AV) both before and after paying a penetration cost.
That cost depends on two target properties: armor and durability. Higher armor costs more AP. Durability adds 1, 2, or 3 extra AP, depending on the percentage. It describes the struck part's durability resistance, not the enemy's remaining health. A passing projectile gets weaker for later targets.
| Target armor | Below 25% durability | 25% to below 75% | 75% to 100% |
|---|---|---|---|
| AV0 | AP2+ | AP3+ | AP4+ |
| AV1 | AP4+ | AP5+ | AP6+ |
AV1 at 75% durability or higher requires AP6. The conventional ballistic weapons verified so far reach at most AP5, so they cannot overpenetrate that combination. This is not a claim about every projectile in the game, and it could change with future weapons or balance patches. Other projectile types, such as some anti-tank rockets, can have higher AP. Their special effects are not covered by this simple rule.
Damage is an estimate for one direct impact at the weapon's reference speed, before final whole-number handling. It blends normal and durable damage, then applies the ordinary AP-versus-AV damage multiplier. It does not include explosion, status effects, velocity loss, hit-angle AP changes, charge or AP addends, or special projectile stop conditions. AP is subtracted after a successful penetration-unit transition, not once per damaged body part.
Example: Railgun, AV1, 20% durability. The Railgun starts with AP5. It pays 2 AP (1 for armor and 1 for durability), leaving AP3. Since AP3 is still above AV1, it can pass through. Its first-hit direct damage is about 525 before speed and other effects.
Example: Railgun, AV1, 75% durability. The cost rises to 4 AP (1 for armor, 3 for durability). AP5 would drop to AP1, which is not above AV1, so the projectile stops. It can still damage the first target: its calculated direct hit is about 319 damage before speed and other effects.
Example: AP5 against AV0, 100% durability. The cost is 3 AP, leaving AP2. That is still above AV0, so the projectile can pass through.
Passing through does not mean the next hit uses the same AP.
The projectile loses its penetration cost when it leaves one collision unit for another. Multiple hit zones on the same physical unit normally contribute only the largest pending cost, not a separate cost for every part. The cost reduces all four AP values used for different impact angles.
Penetration slowdown is separate from AP loss. When a projectile passes through, its configured slowdown can also reduce its velocity immediately. For example, a projectile travelling at 200 m/s with 25% penetration slowdown leaves the hit at 150 m/s. If the weapon uses speed-based damage scaling, a later hit can deal less damage as a result. The calculator omits slowdown because it depends on the projectile and its flight.
These are the ordinary projectile rules, not a guarantee that every projectile will continue. Some special hit conditions can stop a shot even when the AP check passes.
Penetration lanes
Weapons can carry four penetration values rather than one universal AP value. The game selects a lane from the impact geometry before armor and overpenetration are evaluated. Current authored angle thresholds are 25°, 60°, 80°, and 90°.
That means two hits from the same projectile can enter the armor calculation with different penetration values if the impact angle changes enough.
Evidence status
| Finding | Evidence status |
|---|---|
| Ordinary AP = AV resolves at a 0.65 damage factor. | Confirmed in evaluator code and runtime observations |
| FLAM-40 2-damage and Cremator 3-damage direct particles both evaluate to 1 against AV4 when AP4 is selected. | Confirmed in evaluator code and controlled runtime captures |
| Periodic status damage preserves fractional remainder between ticks. | Confirmed in current-build code and observed sequences |
| Ordinary projectile penetration cost rounds the durability term to the nearest integer, with thresholds at 25% and 75%. | Confirmed in evaluator code and 93 runtime calls |
| A continuing projectile loses AP and velocity. | Confirmed in projectile processing code |
| The special 75-armour runtime path produces a 1.125× damage factor. | Runtime observed; consistent with the Helldiver armour scaling table |
| The special evaluator path is definitively named as the Helldiver armour system in code. | Supported, but the owning component is not yet safely named |
Research basis
Methodology How the OTL separated observation from reconstruction
The damage model combines current-build disassembly with runtime damage recordings. The recorder stores the game's evaluator output separately from reconstructed formulas, so an expected AP/AV result cannot overwrite what the game actually returned. Repeated runtime observations were then compared against the disassembled branches and projectile state changes.
Evidence standard
How the OTL separates code confirmation, controlled live testing, and behavior that remains unresolved.
How the OTL rates evidence
The OTL rates code evidence and live-game evidence separately. A mechanic can be clear in code but still need a controlled gameplay check for hidden state, ordering, or another runtime factor.
Live confirmation means controlled gameplay or instrumented runtime observation, not player impression alone.