← Research

How weapon damage is resolved

A hit in Helldivers 2 is not resolved from a single damage number. The game builds a damage packet from the weapon and the part that was hit, blends normal and durable damage, selects penetration from impact angle, and then evaluates that packet against the target's armor.

Status
Confirmed in current-build code
Build examined
game.dll SHA-256 1e2d062d…cdfbc
Evidence
Static mapping + runtime validation
2weapon damage values

Normal damage and durable damage are stored separately.

4penetration lanes

The selected lane depends on the impact angle.

25° / 60° / 80° / 90°authored angle thresholds

The current build scans these thresholds during penetration selection.

The pipeline

What happens when a projectile hits

  1. 01

    Read weapon damage data

    The weapon's damage information contains separate normal and durable damage values plus four penetration-lane values.

  2. 02

    Read the hit zone

    The selected damageable zone contributes its armor value and durability fraction to the runtime damage packet.

  3. 03

    Blend normal and durable damage

    The common packet builder combines the two weapon damage values using the hit zone's durability fraction, then stores the blended result in the packet before penetration scaling.

  4. 04

    Select penetration from impact angle

    A dedicated helper derives the impact angle from packet vectors, checks the authored angle thresholds, and selects one of the weapon's four penetration lanes.

  5. 05

    Evaluate the packet

    The damage dispatcher routes the packet to the appropriate evaluator, where penetration and target armor participate in the final damage result.

Durable damage

The target part changes which damage value matters

Weapons carry both normal damage and durable damage. Damageable zones carry a durability fraction. The packet builder uses that fraction to produce a durability-weighted damage value before the armor and penetration stage.

This is why the headline damage number alone cannot tell you how much damage a weapon will deal to every enemy part. Two weapons with similar normal damage can perform very differently against highly durable zones.

Normal damage dominatesDurable damage dominates
0% durableZone durability fraction100% durable

Armor penetration

Penetration is not necessarily one fixed weapon value

Code confirmed

Four penetration lanes are present in DamageInfo.

The current-build impact helper selects among those lanes using impact angle. Both mapped angle-threshold paths use authored values of 25°, 60°, 80°, and 90°.

This matters because an oblique hit can enter damage evaluation with a different penetration value than a more direct hit from the same weapon. The public-facing weapon AP value is therefore not enough to describe every impact without also understanding which lane is selected.

25°
60°
80°
90°

These marks show the confirmed authored thresholds. This page deliberately does not assign player-facing names to each lane until that mapping is documented to the same standard.

Evidence

What is directly confirmed

FindingEvidenceStatus
Normal and durable damage are separate DamageInfo fields.Structure mapping backed by recorder/code evidence.Code confirmed
Damageable zones expose armor and a durability fraction.Mapped fields consumed by the runtime packet builder/evaluator.Code confirmed
The packet builder stores a durability-weighted blended damage value.Common builder path before evaluator penetration scaling.Code confirmed
DamageInfo contains four penetration lanes.Four mapped u32 fields selected by the impact-angle helper.Code confirmed
Penetration selection uses 25/60/80/90-degree authored thresholds.Current-build code plus decoded threshold data.Code confirmed
Exact player-facing meaning of every lane/threshold pairing.Not asserted on this page without an equally strong mapping.Unresolved

Technical reference

Current-build anchors

These are included so the public explanation remains traceable without forcing every reader through the reverse-engineering details.

FunctionCombat_SelectPenetrationForImpactgame.dll + 0x00FFB680
FunctionCombat_EvaluateDamagePacketgame.dll + 0x00FFCAF0
DataDamageInfo.normal_damage+0x04 · i32
DataDamageInfo.durable_damage+0x08 · i32
DataDamageableZoneInfo.durability_fraction+0xCC · f32
DataDamageableZoneInfo.armor+0xD8 · u32
Build guard: these executable RVAs are tied to the examined runtime image. OTL does not assume an RVA is valid across patches simply because the surrounding mechanic is unchanged.