Diceplots → Games → Hard West

Hard West damage math — Luck pool variance reduction as exact rationals

Hard West's signature mechanic is the Luck Bar: a per-character pool that depletes when shots hit and refills when shots miss. Mechanically, full pool = boost to the next attempt's hit chance; empty pool = no boost. The pool breaks the per-shot independence assumption — variance shrinks without the long-run mean changing. The engine models this as a state-carrying Markov walk over the per-attempt distribution.

The mechanic

Each character has a Luck pool that interacts with their shooting:

  • On hit: the Luck pool depletes by 1.
  • On miss: the Luck pool refills by 1 (capped at the pool's max capacity).
  • Per-attempt boost: each unit of Luck adds a small bonus to the next attempt's effective hit chance. Higher current pool = bigger boost. Empty pool = no boost.

The user-visible outcome: catastrophic miss streaks rarely happen. After 1-2 misses the pool refills, the next attempt's hit chance climbs, and the run-of-misses self-corrects. The mean stays close to the unmodified hit chance; the variance (especially the "all-miss" tail) shrinks.

Companion concept pillar with the math substrate: Luck pools and streak protection.

Engine grammar

Postfix luck keyword on a percentage attack chain:

<attack> @ hit P% attacks N luck

Adds Hard West-style Luck pool — pool of 5 capacity, +5% per pool unit (full pool = +25% boost on next attempt), each hit consumes 1 luck, each miss refunds 1. Approximate Hard West shape; exact game formula isn't officially documented.

The luck keyword composes with the standard attacks N chain primitive. It does not currently compose with sneak, oncrit, bonus, or cascade — see the concept pillar for the composition gaps.

Worked examples

Scenario Expression Strike URL
5-shot chain at 50% hit, no luck 1d10 @ hit 50% attacks 5 /strike/1d10~hit50attacks5
5-shot chain at 50% hit, with Luck pool 1d10 @ hit 50% attacks 5 luck /strike/1d10~hit50attacks5luck
3-shot chain at 70% hit, with Luck pool 1d8+2 @ hit 70% attacks 3 luck /strike/1d8p2~hit70attacks3luck
4-shot chain at 35% hit, low-hit-chance Luck rescue 1d6+3 @ hit 35% attacks 4 luck /strike/1d6p3~hit35attacks4luck

Each strike URL renders the full damage distribution. Compare the no-luck and with-luck rows: the Luck-pool variant has a higher mean (the pool starts full, so the first attempt sees max boost) and a much smaller "all-miss" tail.

Why the parameters are "approximate"

Hard West's exact Luck consumption and refund formulas aren't published in any official source we've verified. The preset here (pool of 5, +5% per unit, 1-for-1 hit/miss exchange) captures the structural shape of the mechanic without claiming exact game constants. The math substrate (state-carrying Markov walk over a bounded state space) is exact. The specific parameters are documented approximations and can be refined with verified sources or per-game preset additions.

What the engine doesn't model yet

The Luck pool ships as a chain expression. Composition with other engine features is partial:

  • Composition with sneak / oncrit / bonus chains: not yet. Each chain layer would need its own state-walk extension.
  • Composition with cascade chain: not yet. Cascade and Luck need a joint state space (target_idx, luck_pool). Tracked work.
  • Composition with rounds_to_kill: not yet. Multi-round HP-vs-luck-pool joint Markov chain is the same substrate as cascade composition.
  • Cross-encounter Luck persistence: each chain expression starts fresh. Hard West's actual game carries Luck pool across rounds within a mission. Our model is per-encounter (per chain expression).
  • Hit / crit / graze split with Luck: the current preset modulates only hit chance. Layering Luck on top of the four-way XCOM 2-style outcome model is a future extension.

Pairs with the Luck and streak protection pillar for the math substrate and with /games/xcom/ for XCOM 2's complementary streak protection mechanic — both games solve the same "miss-streak softening" problem with different state primitives.