A candlelit tavern table with a single brass candlestick centered between two settled dice clusters of three d6 each. The left cluster is three forest-green d6 cubes showing 5, 5, and 4 on top — 3d6 mono slashing, totaling 14. The right cluster is one forest-green d6 showing 6 and two warm orange-red d6 cubes showing 3 and 5 on top — slashing plus fire, also totaling 14. Same dice count, same total damage, different damage-type distribution.

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.

Answer: against unresisted targets, split damage and same-mean single-type are near-identical. Against a type-resistant target, split keeps full damage on its second component — a huge insurance payout for a tiny mean cost.

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 near-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

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 and 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)

Drive it yourself with URLs

The engine accepts typed expressions in the URL — :type after a term tags it for resistance bookkeeping (see /syntax). The ?r= query parameter applies per-type resistance to the damage rolls below. Each link produces a fresh worked example you can edit, share, or A/B against your own builds.

Flame Tongue Longsword (1d8 slashing + 1d6 fire)

Same expression, six target profiles. Tap any link, watch the kill probability and per-outcome distribution shift in real time. Bold rows are where the split build's hedge shows up most.

Mono-typed Greataxe vs Flame Tongue, head-to-head

The "is split better than mono?" question, made shareable. Both sides take the same damage profile and the same resistance profile; only the typed split changes. The diff view shows exactly where each side wins.

ARPG percentage resistance

Continuous (Diablo / Path of Exile / Last Epoch style) rather than 5e categorical. Each resistance is an integer 1-100 read as percent damage reduction.

Where this matters in practice

Baldur's Gate 3 and 5e flame-tongue / frost-brand weapons use a +1d4 elemental rider that 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 show the same dynamic at a different scale. 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.

Multi-attack mixed-weapon strategies work the same way. 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 is the cleanest version. Choosing Chromatic Orb over a fixed-element spell is the hedge made explicit: you pay a small caster-level cost to pick the type at cast time, which is the most extreme form 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.