system

Use when

Any game where a fair input can feel dropped — a late jump, a hit through a pause, a run lost to a leftover threat. Which is nearly every game.

Grace — forgiveness as a system

What it is. Grace is a system, not polish (FUN.md law 5). Coyote time, jump buffering, i-frames, wound-before-death, mercy clears, undo, instant retry — they are the same shape at every timescale: a window in which the game accepts intent it could have rejected. This is the concrete engineering companion to pattern-anti-frustration (the mindset) and the JUICE forgiveness gate (the proof).

Player fantasy / why it’s fun. Trust. “My inputs land; my deaths are my fault.” Grace is invisible when it works — it converts a hundred cheap, rage-inducing non-deaths into fair play, so every real failure reads as yours. That trust is the floor a game stands on; without it, the tightest mechanics feel like they drop inputs.

When to use / when NOT

Grace applies when…Ease off when…
A fair input can feel droppedThe window would erase a real skill check
A pause/freeze interrupts intentDeterminism forbids leniency (turn-perfect puzzle)
Failure has cost (a run, a phase, a level)(rare — most games want more grace, not less)

The trap is too little, almost never too much — but a grace window that outlasts its spec is unfair leniency the gate also catches (see below).

The grace family — one shape, every timescale

GraceTimescaleThe windowTimescale example
Coyote timeframesjump still fires just after leaving a ledgeanchor-celeste
Jump/input bufferframespress just before landing still firesplatformers
Corner nudgepixelsclip a ceiling edge → slip past, keep momentumCeleste corner correction
Hit-stop bufferingframesinputs during the freeze re-emit afterFUN.md §4
i-framesframesinvulnerable window after a hitaction/boss
Wound-before-deatheventsone grab is a story, two is a deathFUN.md §16
Mercy cleareventsdeath/phase transition clears active threatsFUN.md §7
Undo / restartturnstake the move backFUN.md §1, Dying Dreams
Instant retryrunrespawn keeps the momentumFUN.md law 5, CLAWSTRIKE

Notice the invariant: any pause the sim injects must buffer intent across it. A hit-stop, a phase transition, a level-up screen — each swallows input unless it re-emits the buffered press. That single rule prevents the most common cheap deaths.

Tuning levers

LeverDoesHealthy range
Coyote timegrace after leaving ground≥ 0.05s (≈ 3 frames @60Hz) — the gate floor
Jump buffergrace before landing≥ 0.05s — the gate floor
Corner nudgesideways slip past a ceiling edgenon-zero (the gate requires it)
i-frame windowinvuln after a hitlong enough to reposition; short enough to stay tense
Mercy scopewhat a clear wipesactive threats only — not the whole difficulty
Retry frictionwalk-back after deathnear-zero; instant respawn keeps flow

Every window is specced in frames and proven to the exact frame — grace is leniency, and unbounded leniency is its own bug (accepting input past the window).

How it wires to Hayao

Fails when…

Verify

Composes with

See also

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