A worn wooden tabletop in a resistance-hideout safehouse with a single hooded brass-and-iron oil lantern centered as the only light source. Four spent rifle brass shell casings lie on the table, two on each side of the lantern, each engraved in pale gold lettering — HIT, CRIT, GRAZE, MISS — the four outcomes of an XCOM 2 shot laid out as evidence after action. Same painted-tavern grammar as the D&D pillars, swapped for resistance-fighter props: the casings replace dice, the lantern replaces the candle, the outcome split is the same four-way decision.

Concepts → XCOM 2 outcome model

The XCOM 2 outcome model — hit / crit / graze / miss

XCOM 2 splits each shot into four explicit outcomes. The displayed hit-chance is one of three probability buckets, not a binary hit/miss split. Once graze is on the table, the variance of low-percentage shots looks materially different from what the tooltip suggests.

The 4-way split

Edition / mod note: the four-bucket model most cleanly applies under Long War 2, which ships an explicit graze band that eats from the miss side. Vanilla XCOM 2 rolls hit / crit / miss; graze only appears as a dodge-mediated demotion — when a hit lands on a target with a non-zero Dodge stat (Vipers etc.), the hit can be demoted to a graze. The engine's graze N% postfix supports both readings; pick the value that matches your scenario.

Each shot rolls against four buckets:

  • Crit — full damage plus the weapon's flat crit-damage bonus. Conditional on a hit: P(crit) = P(hit) · crit_chance. Cannot fire on a graze (RAW).
  • Hit (non-crit) — full damage in the weapon's range. P(hit non-crit) = P(hit) - P(crit).
  • Graze — half damage (floor). Under LW2, eats into the miss probability; under vanilla, it's a post-hit dodge demotion against targets with Dodge.
  • Miss — zero damage. P(miss) = 1 - P(hit) - P(graze).

Engine syntax: 1d3+4 @ hit 65 crit 10 graze 15 writes a 5-7 damage assault rifle shot at 65% hit, 10% crit-on-hit, 15% graze. The engine computes the exact-rational mean and full PMF.

Crit damage convention: the engine defaults to 5e dice-doubling on crit (the d20 tabletop convention). XCOM 2's actual rule is a flat per-weapon crit-damage bonus (typically +2-3 depending on weapon, plus modifiers like Talon Rounds and the Biggest Booms perk) — not a multiplier. For approximate cross-build comparisons, cscale 150 forces the crit branch to ~1.5× base damage, which lines up with typical-weapon crit-damage shape but isn't the in-game formula. Use this page's panels to compare relative DPR shapes; absolute numbers will differ from in-game.

Where graze actually shows up in the math

A 65% hit / 15% graze build looks like "you hit 65% of the time" in the tooltip but actually splits as:

  • P(crit) = 0.65 · 0.10 = 9.75% (= 39/400)
  • P(non-crit hit) = 0.65 - 0.0975 = 55.25% (= 221/400)
  • P(graze) = 15% (= 60/400)
  • P(true miss) = 1 - 0.65 - 0.15 = 20% (= 80/400)

So the chance you deal some damage is 80%, not 65%. That's the graze contribution — soaking the bottom of the miss bucket into a half-damage outcome.

Side-by-side, same Assault Rifle shot without and with the graze model:

1d3+4 @ hit 65 crit 10
min 0 max 10 mean 4.03 403/100
  • 0 35.00%
  • 1 0.00%
  • 2 0.00%
  • 3 0.00%
  • 4 0.00%
  • 5 19.50%
  • 6 20.22%
  • 7 20.94%
  • 8 2.17%
  • 9 1.44%
  • 10 0.72%
1d3+4 @ hit 65 crit 10 graze 15
min 0 max 10 mean 4.43 443/100
  • 0 20.00%
  • 1 0.00%
  • 2 5.00%
  • 3 10.00%
  • 4 0.00%
  • 5 19.50%
  • 6 20.22%
  • 7 20.94%
  • 8 2.17%
  • 9 1.44%
  • 10 0.72%

The mean shifts up modestly (graze contributes 0.15 · E[floor(dmg/2)]), but the bigger story is the 0-bar shrinking from 35% to 20%. For chained shots and per-mission momentum, "do I deal any damage at all" matters more than mean DPR.

The crit picture differs from D&D

In D&D 5e, crit is a face-range on the same d20 — nat 20 (or 19-20 with Champion) auto-hits and doubles dice. The same roll decides hit, miss, and crit.

In XCOM 2, crit is a separate post-hit roll. So:

  • You can't crit a graze (different bucket entirely).
  • You can't crit a miss (the hit roll has to succeed first).
  • P(crit) is genuinely conditional — increasing hit chance also increases the crit rate, not just the hit rate.

Comparing a clean Squadsight Sniper Sharpshooter shot vs. a low-percentage flank attempt:

1d3+7 @ hit 35 crit 15
min 0 max 13 mean 3.25 651/200
  • 0 65.00%
  • 1 0.00%
  • 2 0.00%
  • 3 0.00%
  • 4 0.00%
  • 5 0.00%
  • 6 0.00%
  • 7 0.00%
  • 8 9.92%
  • 9 10.50%
  • 10 11.08%
  • 11 1.75%
  • 12 1.17%
  • 13 0.58%
1d3+4 @ hit 95 crit 25
min 0 max 10 mean 6.17 247/40
  • 0 5.00%
  • 1 0.00%
  • 2 0.00%
  • 3 0.00%
  • 4 0.00%
  • 5 23.75%
  • 6 26.39%
  • 7 29.03%
  • 8 7.92%
  • 9 5.28%
  • 10 2.64%

The 95%-hit Squadsight shot has a much tighter distribution with a real damage floor; the 35%-hit flank is a long-tail Hail Mary with most of its mass at zero. Mean comparisons miss this entirely — the per-mission variance picture is what decides whether the shot is worth taking, and the same reliable-vs-nuke tradeoff that picks 5e weapons applies here at the per-shot level.

Composes with

The four-way outcome model is the per-shot substrate. Layer these on top:

  • Miss-streak protection. XCOM 2 modulates per-shot hit chance by recent misses; the streak / Luck-pool pillar covers the state-carrying Markov walk that the engine ships for this exact mechanic. The attacks N streak postfix composes with the per-shot hit / crit / graze grammar.
  • Damage-roll variance per bullet. XCOM 2's damage range comes from a uniform integer roll (5-7 = pick one of {5, 6, 7} uniformly), modeled here as 1d3+4 — exact across the displayed range. Bonus-dice weapon perks compose via the standard + NdM grammar.

Build your own shot

The grammar for percentage attacks:

NdM[+K] @ hit <p>[%] [crit <p>[%]] [graze <p>[%]] [rider <expr>]

Trailing % sign is optional. Hit + graze must be ≤ 100. Examples:

  • 1d3+4 @ hit 65 crit 10 — vanilla XCOM 2 assault rifle, no graze model.
  • 1d4+5 @ hit 50 crit 10 graze 30 — shotgun through half cover.
  • 1d3+7 @ hit 95 crit 25 — Squadsight Sniper with full overwatch chain.

See the XCOM 2 weapons page for pre-baked panels covering common loadouts. Full grammar reference at /syntax.

Where this matters in practice

The four-way outcome model and the variance picture it produces are the right substrate for a lot of tactical games beyond XCOM 2.

Phoenix Point / Xenonauts / Jagged Alliance. Same substrate — percentage to-hit, possibly with crit and graze buckets. The grammar transfers directly; only the number ranges shift. Per-shot damage distributions are exact rationals in the same form.

Sharpshooter aim-arc decisions. The 35% flank vs 95% Squadsight question is the per-shot version of the reliable-vs-nuke pillar. High-aim wins below the kill threshold; high-variance wins above. Mean comparisons miss the picture entirely.

BG3 magic missile vs scorching ray, transposed. The auto-hit-vs-roll-to-hit decision in 5e casters is the same shape as XCOM's "guaranteed-graze vs higher-variance shot" — the variance picture transfers, just with different numbers.

Common questions

Why is graze worth half-damage instead of a partial miss?
XCOM 2's design intent is to soften the variance of low-percentage shots without rewarding them as much as a clean hit. Mechanically, P(graze) eats into the miss probability — so a 65% hit / 15% graze build has 80% chance of dealing some damage, vs. 65% if graze didn't exist. The variance picture: graze adds a low-damage mass that smooths the per-shot distribution, particularly valuable when chaining shots where a 0-damage round breaks momentum.
How does P(crit) interact with hit chance?
Crit is a separate roll conditional on a full hit. So `P(crit) = P(hit) × crit_chance` — never independent of hit. A 65% hit / 15% crit-on-hit build has P(crit) = 0.65 · 0.15 = 9.75% of all shots, P(non-crit hit) = 0.65 - 0.0975 = 55.25%, P(graze) = whatever you set, and P(true miss) = the rest. Crit cannot fire on a graze (RAW).
What's different from D&D's d20 attack model?
Two things. First, hit chance is a single percentage — no d20 enumeration. Second, crit is its own conditional roll on hit, not a d20-face range. The 5e crit rule (nat 20 always crits regardless of AC) doesn't apply: in XCOM, missing the hit roll means no crit, full stop. The graze bucket has no D&D analogue — D&D has a 3-way outcome (hit / crit / miss); XCOM 2 has 4-way.
Does the engine model XCOM's miss-streak protection or Hard West's Luck pool?
Yes. Both ship as postfix keywords on percentage-attack chains: `attacks N streak` for XCOM 2-style streak protection (no boost on first attempt; +10/20/30/40% per consecutive miss) and `attacks N luck` for Hard West-style Luck pool (pool of 5, +5% per pool unit, depletes on hits, refills on misses). Both are evaluated as state-carrying Markov walks over the per-attempt distribution — exact rationals, no Monte Carlo. The math substrate and worked examples are in the /concepts/luck-and-streak-protection pillar.