Guide
Game critical hit systems explained
Harbor Ruins' dagger build showed 25% critical hit chance on the character sheet. After a boss wipe, three players filed the same bug report: “My crits never proc.” Telemetry told a different story — actual crit rate over the fight was 24.7% across 412 hits. The problem was not math; it was variance. Twelve consecutive non-crits on a fast weapon feels like a broken stat even when the long-run average is correct. The refactor separated displayed crit chance from a hidden pity counter, added per-fight combat-log export, and tuned floating combat text so crits punched harder visually. Support tickets dropped 68% in the next patch.
A critical hit system is the layer that turns deterministic damage formulas into moments of spike and suspense. It sits downstream of base damage in the health and damage pipeline and upstream of proc triggers, lifesteal, and combo extensions. Done well, crits reward build investment without making every swing a coin flip. Done poorly, they undermine trust in your entire combat stack. This guide defines crit chance and crit damage multipliers, walks through stacking rules, explains RNG implementation and server authority, covers variance versus expected DPS, surveys pity and bad-luck protection patterns, documents the Harbor Ruins dagger refactor, provides a technique decision table, lists common pitfalls, and ends with a production checklist alongside our melee combat guide and status effects guide.
Core parameters
Every crit system reduces to two numbers plus a roll:
- Crit chance (
p_crit) — probability that a qualifying hit becomes critical. Usually expressed as 0.0–1.0 internally, displayed as a percentage. Qualifying hits may exclude DoT ticks, ground effects, or reflected damage — document exclusions. - Crit multiplier (
m_crit) — damage factor applied on success.m_crit = 1.5means 150% damage;2.0is the RPG default. Some games add flat bonus damage on crit instead of a multiplier; pick one model per game. - The roll — draw
u ~ Uniform(0,1); crit ifu < p_crit. Use a named RNG stream per combatant or per encounter so replays and audits are possible.
Expected damage per hit (ignoring armor) is:
E[damage] = baseDamage * (1 - p_crit + p_crit * m_crit)
A 100-damage attack at 25% crit and 2.0x multiplier averages 125 damage — but individual hits cluster at 100 or 200. Fast weapons amplify perceived variance because players observe more rolls per second. That is why dagger builds feel “RNG-heavy” at the same stat sheet as a slow greatsword.
Super-crits and crit tiers
Tiered systems roll twice: first for crit, then for super-crit (e.g. 10% of crits deal 3x instead of 2x). They add spectacle but multiply balance surface. If you add tiers, cap total expected multiplier and show tier rates in the inspect UI. Borderlands-style crit chains work because VFX and audio telegraph each tier; silent tier upgrades read as bugs.
Stacking crit chance and crit damage
Buildcraft lives in how stats combine. Mixing models without documentation produces exponential crit rates or dead affixes.
Additive crit chance
p_crit = clamp(base + sum(bonuses), 0, p_cap). A 5% base dagger
plus 20% from gear plus 10% from a buff equals 35%. Simple for players to
mental-math. Common cap: 50%–100% depending on genre.
Multiplicative crit chance
p_crit = 1 - product(1 - bonus_i). +20% and +20% multiplicative
yields 36%, not 40%. Prevents runaway crit in loot grinders but confuses
players who expect additive tooltips. If you use this, label affixes
“increased crit chance” vs “more crit chance” (PoE
convention) or show the computed total only.
Crit damage stacking
Most ARPGs stack crit damage additively on the multiplier:
m_crit = baseMult + sum(critDamageBonuses). A 2.0 base plus 0.5
from gear equals 2.5x. Multiplicative crit damage
(m_crit = baseMult * product(1 + bonus_i)) explodes quickly and
should be rare or hard-capped. Separate crit chance and crit
damage affix pools so one stat does not dominate every slot.
Conditional crit modifiers
Backstab, headshot, weak-point, and low-HP-target bonuses are conditional
p_crit or m_crit bumps. Apply them in a fixed order
documented in your combat spec: base stats, gear, buffs, conditional, cap,
then roll. Changing order silently shifts balance. Weak-point crits pair well
with
hitbox and hurtbox
design when weak points are readable.
Where crits fire in the damage pipeline
Crit resolution order affects every downstream system. A typical pipeline:
- Compute base damage from weapon/skill stats.
- Apply attacker buffs and debuffs on target.
- Roll crit; if success, multiply by
m_crit(and play crit VFX). - Apply armor, resistances, and shields per elemental typing if applicable.
- Subtract HP; trigger on-crit procs (lifesteal, stagger, elemental detonation).
Crit before mitigation (multiply raw damage, then resist) rewards crit investment on armored targets. Crit after mitigation (crit multiplies final damage) keeps crit spikes smaller on tanks. Most action RPGs crit before armor so a crit feels like a crit; MMOs sometimes crit after to control PvP burst. Pick one and never mix across skills.
Decide whether DoT ticks inherit the crit roll from the application hit or roll independently. Independent rolls inflate crit-derived DoT; inherited rolls keep poison builds predictable. Status applications triggered “on crit” should use a separate proc roll unless you want guaranteed procs on every crit (which homogenizes elemental builds).
RNG implementation and fairness
Players anthropomorphize RNG. Implementation details determine whether they trust your combat log.
- Per-hit rolls — standard for action games. Each melee swing or projectile impact gets its own draw.
- Per-attack rolls — one roll for an entire multi-hit combo string; all hits in the string share crit outcome. Reduces variance on flashy combos; can feel bad if the first whiff whiffs the whole string.
- Deterministic seeds — seed from
(encounterId, attackerId, hitIndex)for replay and dispute resolution in competitive modes. - Server authority — server rolls crit in multiplayer; client predicts for feel and reconciles. Never trust client crit flags for damage settlement.
Expose a combat log in RPGs: timestamp, skill id, roll value, crit boolean, final damage. When players dispute RNG, logs beat arguments. Harbor Ruins added export-to-clipboard on death screen; median time-to-close on crit tickets fell from 4.2 days to 11 hours.
Variance, DPS, and feel
Balance on spreadsheet DPS alone misleads. High crit chance with moderate multiplier produces tighter damage distribution than low crit with huge multiplier, even at identical expected value.
Example: 100 base damage, two builds both averaging 125 DPS:
- Build A: 50% crit, 1.5x — hits are 100 or 150; low spike fear.
- Build B: 10% crit, 3.5x — mostly 100, occasional 350; high burst, dry streaks.
Build B wins speedrun records and loses casual retention. For co-op, burst crits
steal kill credit and feel bad for support players. Tune crit curves per weapon
archetype: fast weapons get higher p_crit and lower
m_crit; slow weapons get the reverse. Document target coefficient
of variation (std dev / mean) per weapon class if you have analytics.
Anti-frustration without lying
Pity counters increment on non-crits and guarantee a crit after
N failures, or add a small bonus per miss (Hearthstone-style pseudo-random
distribution). Display the nominal p_crit on the sheet; do not
fake the percentage unless your regional loot-box laws require disclosure.
Bad-luck protection for rare drops is a different system —
do not conflate loot pity with combat crit pity in UI copy.
Crit smoothing for PvE only: over a 10-second window, nudge realized crit rate toward expected if deviation exceeds 2 sigma. Hide this behind a designer flag; competitive PvP must use pure rolls.
Harbor Ruins dagger refactor (worked example)
The dagger class had 25% sheet crit, 2.2x multiplier, and 3.1 attacks per second. Players loved peak DPS, hated boss attempts that “never crit.”
- Weapon-class curves — daggers capped at 40% displayed
crit but raised base
m_critto 2.4x; greatswords stay at 15% / 2.8x. Same EV band, different feel profiles. - Soft pity — after 8 consecutive non-crits on the same target, +5% crit chance per subsequent hit until a crit fires, then reset. Invisible on sheet; documented in patch notes.
- Per-target RNG stream — switching targets resets pity so players cannot fish pity across adds.
- Crit VFX tiering — standard crit = larger orange float; pity crit = same damage, slightly brighter flash so the streak break reads as relief.
- Boss telegraph — bosses with “cannot be crit”
phases set
p_crit = 0explicitly; UI shows a shield icon instead of silently eating crits.
Post-patch: realized crit rate variance (std dev of per-fight crit %) dropped 41% on daggers while mean crit rate stayed within 0.3% of design target. Boss clear rate on the Frost Knight encounter rose 12% with no HP change.
Technique decision table
| Approach | Best for | Trade-off |
|---|---|---|
| No crits (fixed damage) | Fighters, rhythm games, chess-like tactics | Perfect predictability; less build depth |
| Low crit rate, high multiplier | Snipers, rogue assassins, spectacle bosses | Memorable spikes; streak frustration |
| High crit rate, low multiplier | Fast weapons, hack-and-slash | Smooth feel; crits feel less special |
| Guaranteed crit on condition | Backstab, parry riposte, execution skills | Skill expression; must telegraph condition |
| Pity / pseudo-random distribution | PvE ARPGs, mobile RPGs | Lower support load; purists dislike hidden rules |
| Crit only on weak points | Shooters, souls-likes | Rewards aim/positioning; needs readable weak points |
Multiplayer and PvP caps
Uncapped crit scales explode in player-vs-player. Standard guardrails:
- Hard cap
p_critin PvP (e.g. 35%) separate from PvE sheet. - Cap
m_critor replace excess crit damage with secondary procs (stagger, shield break) above a threshold. - Disable pity in ranked modes so both players face identical variance.
- Log every crit roll for anti-cheat review when damage outliers trigger flags.
Our multiplayer netcode guide covers prediction and reconciliation patterns that apply to crit prediction on clients.
Common pitfalls
- Tooltip lies — showing additive sum when runtime uses multiplicative stacking (or vice versa).
- Crit after zero damage — grazing hits that round to 0 still play crit VFX; players think immunity is broken.
- Double crit multiplication — skill crit and weapon crit both rolling independently without a combined cap hits 100% burst meta.
- DoT crit chaos — poison ticking crit at 5 Hz with independent rolls melts bosses; inherit application crit or disable DoT crit.
- Silent immunity — bosses immune to crit with no UI cue; players blame their build.
- Identical EV, ignored variance — balancing two weapons on average DPS only when attack speed differs by 3x.
Production checklist
- Document crit resolution order relative to armor, shields, and elemental resists.
- Define additive vs multiplicative stacking for chance and damage in a combat bible.
- Cap
p_critandm_critper mode (PvE, PvP, boss). - Use named RNG streams; log roll, outcome, and damage for dispute resolution.
- Server-author crit rolls in multiplayer; client predicts with reconciliation.
- Tune weapon-class crit curves separately from shared stat affixes.
- Decide DoT crit policy (inherit, independent, or never) and enforce in code.
- Expose combat log or post-fight stats showing realized crit rate vs expected.
- If using pity, disclose in patch notes; keep displayed chance honest.
- Pair crit spikes with combat text and audio that scale with multiplier tier.
- Mark crit-immune phases in UI; test edge cases at 0% and 100% crit.
Key takeaways
- Crit systems are defined by chance, multiplier, and roll timing in the damage pipeline — expected DPS alone does not capture how they feel at different attack speeds.
- Stacking rules (additive vs multiplicative) must match tooltips; undocumented rules erode player trust faster than bad balance.
- Fast weapons amplify variance perception; tune per archetype or add transparent pity for PvE without faking displayed stats.
- Harbor Ruins showed that combat logs and soft pity cut support noise while keeping mean crit rate on target.
- PvP needs separate caps and pure RNG; hidden smoothing belongs in co-op PvE, not ranked play.
Related reading
- Game health and damage systems explained — HP, shields, armor, and the damage pipeline crits plug into
- Game melee combat systems explained — swing timing, hit confirmation, and combo structure
- Game floating combat text explained — communicating crit spikes in the UI layer
- Game status effects explained — on-crit procs, buffs, and debuff stacking