DAMAGE DISTRIBUTION

DAMAGE CALCULATOR

Multiple weapon profiles into one shared defender. Exact distribution, the per-profile breakdown, and the points-efficiency view — not just “on average.”

The interactive companion to On Average. Build a full attack from several weapon profiles at once, fold in modifiers, re-rolls, −1 damage, and Feel No Pain, and see the full exact distribution — mean, median, mode — for the whole attack. The math is exact: no Monte Carlo. The Archive holds no datasheet or points database; you type every value off your own datasheet / MFM and the tool stays on the right side of the IP line.

SETUP

DEFENDER · SHARED ACROSS ALL PROFILES

Effective save after AP (or invuln if better). 7+ = no save.
Empty / 7+ = no FNP. 5+ = ignore on 5+.
Floor 1. 0 = no reduction.
POINTS (optional · for the trade-ratio view)
The whole target unit's MFM cost.
Drives the points-trade ratio.
WEAPON PROFILES
How to read this: every field is a value you read straight off your datasheet / MFM. The save above is your effective save AFTER the weapon's AP — or your invulnerable save if it's better. Modifiers are capped at ±1 per the 10th-edition core rules; the calculator clamps anything past that. Want to add a second weapon? Hit + ADD PROFILE.
DISTRIBUTION · COMBINED
Mode Median Mean
MODE
the most likely single value
MEDIAN
50/50 line
MEAN (EV)
the long-run average
THRESHOLD
P(DAMAGE )
PROBABILITY THIS ATTACK CLEARS THE THRESHOLD
Adjust the threshold to read off any “at-least” probability. On Average explains why the “on average” reading is often only a coin flip.
BREAKDOWN · PER PROFILE
POINTS EFFICIENCY
WHY THIS NUMBER IS EXACT

The distribution is computed by probability convolution and dynamic programming — not by Monte Carlo simulation. The hit, wound, save, damage, and allocation stages are explicit; B.1 keywords (the ±1 hit / wound modifiers, the four standard re-rolls, −1 damage with the 10th-edition floor of 1, and Feel No Pain N+) compose without crit-stream splitting, so the per-attack unsaved probability stays a clean single number and the unsaved-wound count is exactly Binomial(A, q). The total damage is a compound sum of the per-wound damage distribution; the models-destroyed view is the no-spillover allocation DP. Multiple profiles convolve their damage and chain through one allocation DP. Every probability the chart shows is exact to floating-point precision.

The current build (Phase B.1) covers the non-critical keywords. The critical-interaction keywords — Sustained Hits, Lethal Hits, Devastating Wounds, Anti-X — remain for Phase B.2 (the staged pipeline is built to host them without another refactor).

The math is independently verified by npm run verify:damage against scripts/damage_phase_b_reference.py — two implementations of the same algorithm cross-checking each other on every commit, plus a regression cross-check against scripts/on_average_examples.py (the Phase A reference the On Average article cites).