pattern

Use when

Anytime randomness, hitboxes, or hidden rules could make a loss feel stolen.

Fairness & Trust

What it is. The player must believe the sim is honest: every loss traces to a choice they made, inputs land as pressed, and the rules that killed them are the rules that were always running. Trust is the substrate under every other pattern — break it once and the player re-reads every prior death as a cheat.

Player fantasy. “That was on me.” The loss stings but it’s owned — I see the mistake, I know the fix, I go again. The opposite fantasy — “the game robbed me” — is where players quit and don’t come back.

Why it works

Levers

LeverWhat it buysExample
TelegraphThe threat is shown in time to answer~0.45s attack flash; the range ring (system-telegraphs)
Honest hitboxThe death matches the pictureHurtbox smaller than the sprite; coyote time / input buffer (system-grace)
Deterministic rulesSame input, same result, every timeA pure rules module; no hidden dice on core logic (pattern-readability)
Elected varianceThe gamble was opted intoYou chose the elite room; the swing isn’t forced (pattern-risk-reward)
Pity / floorStreaks can’t run foreverBad-luck protection, guaranteed drop by N (system-reward-schedules)
Perfect informationThe bad outcome was foreseeableInto the Breach shows every enemy move before you commit
Recoverable lossA mistake costs a thing, not the thingCheckpoint near the wall (system-save-and-checkpoint)

Applied across genres

GenreThe trust that must hold
Precision platformer (genre-precision-platformer)The jump lands when pressed; coyote time & buffer make the fair feel forgiving (Celeste)
Bullet hell (genre-bullet-hell)A tiny, visible hurtbox — the near-miss thrills because the death was earned (anchor-nuclear-throne)
Tactics (genre-tactics)Perfect information, shown honestly — you saw the move and chose anyway (anchor-into-the-breach)
Roguelike (genre-roguelike)The seed is fair and the death is attributable — Spelunky never kills you with a rule you couldn’t see (anchor-spelunky)
Deckbuilder (genre-deckbuilder)The incoming hit is blockable in principle; the draw variance was a risk you drafted into (anchor-slay-the-spire)
Soulslike (genre-soulslike)Enemy tells readable, arena fair — the difficulty is trusted, not cheap (anchor-dark-souls)
Fighting game (genre-fighting-game)Frame data is the same for both players; no hidden advantage (anchor-street-fighter)

The twist seams

Overdone when…

The trust-break cascade

Trust is not one variable — it’s the precondition the other patterns spend:

Fairness is one of the few taste qualities with a mechanical proxy — see design/JUICE.md for the feel-gate discipline, and prove the sim’s half directly:

Worked micro-example

“A twin-stick roguelike where deaths feel cheap.” The naive build kills the player with offscreen projectiles and a hurtbox the size of the sprite — every loss reads as theft, and the player quits at floor two. Restore trust in three moves: (1) honest hitbox — shrink the hurtbox well inside the sprite so near-misses feel near (anchor-nuclear-throne); (2) telegraph — no threat spawns or fires without a readable tell inside the play space (system-telegraphs); (3) pity floor — a pseudo-random distribution on drops so a cruel dry streak can’t compound the felt injustice (antipattern-rng-frustration). Now the same difficulty reads as earned. The player still dies — but says “again,” not “cheap.”

Composes with

See also

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