Concepts → Split-typed damage and resistance

Splitting damage across types is a hedge against resistance

A flaming sword does 1d8 slash + 1d4 fire instead of 1d12 slash. Same dice budget, similar mean — but the flaming sword keeps doing damage when the target is slash-resistant. Split damage trades a tiny bit of expected output (in the no-resistance case) for a huge insurance payout against type-specific resistance.

The setup

Two attack profiles, same dice budget (2d6) and same mean (12):

  • Mono: 2d6+5 slashing. Range 7–17, mean 12.
  • Split: 1d6+5 slashing + 1d6 fire. Range 8–17, mean 12. Same dice rolled, just one of them is fire instead of slashing.

Vs an unresisted target the two profiles produce essentially identical kill probabilities — same mean, similar shape. The interesting case is when the target resists one of the types.

Worked example: how the mean shifts under resistance

5e "Resistant" halves damage of the resisted type (rounded down per outcome). For percentage resistance (Diablo / PoE / Last Epoch style) the engine uses floor(damage × (1 − pct/100)) per outcome. Numbers below are exact-rational means, hand-derived from the engine's per-component math:

Slash resist Fire resist Mono mean Split mean Winner
0%0%1212Tie (same mean, same shape almost)
50%0%23/4 = 5.7515/2 = 7.50Split by 1.75
50%50%5.755.5Mono squeaks ahead by 0.25
100% (immune)0%03.5Split — only split lands at all
0%100% (immune)1217/2 = 8.5Mono — fire portion wasted

The pattern: split wins when one type is heavily resisted and the other isn't. Split ties or slightly loses when neither type is resisted, or both are resisted equally. It's an information hedge — when you don't know which type the enemy will resist, the split distribution of damage is the lower-variance bet.

The math: per-component resistance is multiplicative

For mono damage D against r% resistance:

E[damage_taken] = E[D] × (1 − r/100)

For split damage D₁ + D₂ against per-type resistances r₁ and r₂:

E[damage_taken] = E[D₁] × (1 − r₁/100) + E[D₂] × (1 − r₂/100)

When the means are equal (E[D₁] = E[D₂] = E[D]/2) and both resistances are equal (r₁ = r₂ = r) the two formulas collapse — split has no advantage. As soon as r₁ ≠ r₂, split's lower variance pays off: it takes the average resistance, while mono is fully exposed to whichever resistance the target happens to have against your one type.

(The actual engine math floors per outcome rather than per expectation, so the numbers diverge slightly from the closed-form means above — especially at small dice. The qualitative story is identical.)

Try it yourself

Drag the resistance sliders. Push slash-resist to 50% — split jumps ahead. Push fire-resist to match — they converge. Push slash-resist to 100% (immune) — only split can damage the target at all.

At 12 HP both profiles finish the target at 55.42% — same outcome under this resistance.

Mono · 2d6+5 slashing
min 0 max 17 mean 11.40 57/5
P(finish at 12 HP) = 55.42% (133/240)
Split · 1d6+5 slash + 1d6 fire
min 0 max 17 mean 11.40 57/5
P(finish at 12 HP) = 55.42% (133/240)

Where this matters in practice

  • Baldur's Gate 3 and 5e flame-tongue / frost-brand weapons — the +1d4 elemental rider isn't just bonus damage; it's a hedge. Against a slash-resistant golem the elemental portion carries the swing. Worth more on enemies with high physical resistance, less against enemies with broad elemental resists.
  • Diablo 4 / Path of Exile elemental builds — pure fire builds wreck cold-vulnerable trash but fold against fire- immune rares. Mixed-element builds (lightning + cold + fire) trade peak DPS for resistance-agnostic consistency. Same math, different scale.
  • Multi-attack mixed-weapon strategies — a Smite-loaded warhammer (radiant rider) into the same target as a flame-bound dagger (fire rider) covers more resistance bands than two of the same weapon would.
  • Spellcaster element selection — choosing Chromatic Orb over a fixed-element spell is exactly the hedge: you pay a small caster-level cost to pick the type at cast time, which is the most extreme version of split damage (perfect resistance information at the cost of one die).

Adjacent reading: Variance and kill probability — the same lower-variance-wins-with-uncertainty intuition applied to a different uncertainty axis (target HP rather than target resistance). Reliable vs nuke builds — variance hedging in damage roll shape rather than damage type.

Engine: composite Strike with per-component resistance, Modifier::Multiplier(BigRational) for percentage reduction (rounded floor per outcome). Same exact-rational pipeline as the rest of the engine; the rationals just get hairier when arbitrary fractions enter the math.