system

Use when

You have any fight — melee, ranged, tactical, brawler — and need to decide how a hit is computed and when it lands.

Combat Model — the shape of a hit

What it is. The resolution rule underneath every fight: the function that turns attacker + defender + context into a number and a moment. Pick it before you design a single enemy — the model decides whether combat is read-and-react, plan-and-commit, or math-and-optimize, and every other combat system (system-telegraphs, system-status-effects, system-counter-systems) hangs off it.

Player fantasy / why it’s fun. A hit that lands — weight, consequence, a clean line from your input to the enemy’s flinch. Fun combat is legible cause and effect; the model is where that legibility is either won or lost.

When to use / when NOT

Use a formal combat model when…Skip / simplify when…
Damage varies by matchup, position, or stateOne-hit-kill or binary contact (a pure platformer)
The player makes per-hit decisionsCombat is a garnish, not a pillar
You need counters, statuses, or crits to interactThe “fight” is really a puzzle (genre-grid-puzzle)

Don’t bolt a deep damage formula onto a game whose fun is elsewhere. A Celeste-like spike is contact → death; that is the model, and it’s correct.

Variants

ModelClockDamage shapeAnchorFeels like
Real-time reactiveframesfixed per-hit, telegraph-gatedanchor-shadow-of-mordor, Zeldaread the tell, punish the gap
Real-time attritionframesmany small ticks, DPS mathanchor-vampire-survivorsthe tide vs your build
Turn-based deterministicturnsshown = resolved, no rollsanchor-into-the-breachperfect-information chess
Turn-based stochasticturnsdice / hit-chanceXCOM, roguelikesbudgeted luck, hedged plays
Deckbuiltturnsnumbers from cards + scalinganchor-slay-the-spirethe deck is the weapon
Combo / stringframesescalating multipliers per chainanchor-hades, brawlersflow and cancels

Blends are normal: Hades is reactive + combo; Slay the Spire is deckbuilt + deterministic. Satisfy each parent’s verify pattern (process-composition).

Tuning levers

LeverDoesHealthy range
Time-to-kill (TTK)hits to drop a basic foe2–5 for reactive; the whole session for attrition
Time-to-death (TTD)hits you survive≥ 2 before a wound; instadeath only with heavy telegraph
Hit-stopfreeze on impact — the weight3–8 frames; > 12 reads as a hitch (JUICE Part 2)
i-framesinvulnerable window after a hitspecced in frames, proven edge-in/edge-out
Varianceroll spread (stochastic only)tight enough that plans hold; ≤ ±15% or shown-as-chance
Crit rate / multspike layerrare + big, or frequent + small — not both

Derive TTK/TTD from the fight length you want, not by eyeballing (FUN.md law 3).

How it wires to Hayao

Fails when…

Verify

Composes with

See also

This module rendersthe repo's markdowndirectly — edit it there, it changes here.