hayao 0.4.1 → 0.4.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (110) hide show
  1. package/design/00-process/README.md +49 -0
  2. package/design/00-process/composition.md +148 -0
  3. package/design/00-process/core-loop.md +146 -0
  4. package/design/00-process/intent-to-brief.md +128 -0
  5. package/design/00-process/pillars.md +139 -0
  6. package/design/00-process/refine-and-handoff.md +156 -0
  7. package/design/00-process/the-twist.md +108 -0
  8. package/design/10-anchors/README.md +99 -0
  9. package/design/10-anchors/age-of-empires.md +103 -0
  10. package/design/10-anchors/baba-is-you.md +127 -0
  11. package/design/10-anchors/balatro.md +132 -0
  12. package/design/10-anchors/celeste.md +136 -0
  13. package/design/10-anchors/civilization.md +101 -0
  14. package/design/10-anchors/dead-cells.md +125 -0
  15. package/design/10-anchors/factorio.md +100 -0
  16. package/design/10-anchors/hades.md +127 -0
  17. package/design/10-anchors/into-the-breach.md +125 -0
  18. package/design/10-anchors/it-takes-two.md +104 -0
  19. package/design/10-anchors/loop-hero.md +131 -0
  20. package/design/10-anchors/nuclear-throne.md +130 -0
  21. package/design/10-anchors/outer-wilds.md +107 -0
  22. package/design/10-anchors/overcooked.md +102 -0
  23. package/design/10-anchors/peggle.md +133 -0
  24. package/design/10-anchors/reigns.md +99 -0
  25. package/design/10-anchors/return-of-the-obra-dinn.md +108 -0
  26. package/design/10-anchors/rimworld.md +101 -0
  27. package/design/10-anchors/shadow-of-mordor.md +106 -0
  28. package/design/10-anchors/slay-the-spire.md +127 -0
  29. package/design/10-anchors/starcraft.md +98 -0
  30. package/design/10-anchors/stardew-valley.md +103 -0
  31. package/design/10-anchors/tetris.md +122 -0
  32. package/design/10-anchors/vampire-survivors.md +122 -0
  33. package/design/20-genres/README.md +62 -0
  34. package/design/20-genres/action-adventure.md +126 -0
  35. package/design/20-genres/auto-battler.md +121 -0
  36. package/design/20-genres/bullet-hell.md +123 -0
  37. package/design/20-genres/city-builder.md +124 -0
  38. package/design/20-genres/coop-chaos.md +124 -0
  39. package/design/20-genres/deckbuilder.md +122 -0
  40. package/design/20-genres/exploration.md +131 -0
  41. package/design/20-genres/farming-sim.md +122 -0
  42. package/design/20-genres/grid-puzzle.md +126 -0
  43. package/design/20-genres/horde-survival.md +128 -0
  44. package/design/20-genres/incremental.md +120 -0
  45. package/design/20-genres/match3.md +120 -0
  46. package/design/20-genres/metroidvania.md +132 -0
  47. package/design/20-genres/narrative-decisions.md +122 -0
  48. package/design/20-genres/physics-arcade.md +124 -0
  49. package/design/20-genres/precision-platformer.md +127 -0
  50. package/design/20-genres/racing.md +126 -0
  51. package/design/20-genres/rhythm.md +125 -0
  52. package/design/20-genres/roguelike.md +122 -0
  53. package/design/20-genres/rts.md +169 -0
  54. package/design/20-genres/stealth.md +125 -0
  55. package/design/20-genres/survival-horror.md +124 -0
  56. package/design/20-genres/tactics.md +123 -0
  57. package/design/20-genres/tower-defense.md +120 -0
  58. package/design/30-systems/README.md +69 -0
  59. package/design/30-systems/accessibility.md +110 -0
  60. package/design/30-systems/boss-design.md +126 -0
  61. package/design/30-systems/build-diversity.md +120 -0
  62. package/design/30-systems/collectibles.md +108 -0
  63. package/design/30-systems/combat-model.md +113 -0
  64. package/design/30-systems/coop-and-competition.md +118 -0
  65. package/design/30-systems/counter-systems.md +115 -0
  66. package/design/30-systems/crafting.md +115 -0
  67. package/design/30-systems/difficulty-and-dda.md +114 -0
  68. package/design/30-systems/economy.md +117 -0
  69. package/design/30-systems/emergent-systems.md +114 -0
  70. package/design/30-systems/encounter-design.md +107 -0
  71. package/design/30-systems/enemy-ai.md +121 -0
  72. package/design/30-systems/enemy-archetypes.md +117 -0
  73. package/design/30-systems/faction-asymmetry.md +144 -0
  74. package/design/30-systems/grace.md +124 -0
  75. package/design/30-systems/mastery-curve.md +116 -0
  76. package/design/30-systems/meta-progression.md +114 -0
  77. package/design/30-systems/onboarding.md +115 -0
  78. package/design/30-systems/procgen-design.md +118 -0
  79. package/design/30-systems/progression.md +120 -0
  80. package/design/30-systems/resource-loops.md +112 -0
  81. package/design/30-systems/reward-schedules.md +124 -0
  82. package/design/30-systems/save-and-checkpoint.md +113 -0
  83. package/design/30-systems/session-structure.md +113 -0
  84. package/design/30-systems/skill-trees.md +111 -0
  85. package/design/30-systems/status-effects.md +111 -0
  86. package/design/30-systems/tech-tree.md +112 -0
  87. package/design/30-systems/telegraphs.md +106 -0
  88. package/design/30-systems/unit-rosters.md +123 -0
  89. package/design/40-worldbuilding/README.md +49 -0
  90. package/design/40-worldbuilding/aesthetic-direction.md +155 -0
  91. package/design/40-worldbuilding/faction-identity.md +136 -0
  92. package/design/40-worldbuilding/naming-and-tone.md +130 -0
  93. package/design/40-worldbuilding/narrative-delivery.md +129 -0
  94. package/design/40-worldbuilding/theme-vectors.md +134 -0
  95. package/design/40-worldbuilding/worldbuilding-scaffold.md +132 -0
  96. package/design/50-patterns/README.md +54 -0
  97. package/design/50-patterns/anti-frustration.md +121 -0
  98. package/design/50-patterns/emergence.md +121 -0
  99. package/design/50-patterns/feedback-loops.md +121 -0
  100. package/design/50-patterns/juice-choreography.md +124 -0
  101. package/design/50-patterns/mastery-and-flow.md +121 -0
  102. package/design/50-patterns/pacing-and-tension.md +120 -0
  103. package/design/50-patterns/readability.md +121 -0
  104. package/design/50-patterns/risk-reward.md +120 -0
  105. package/design/CONTRIBUTING.md +183 -0
  106. package/design/INDEX.md +133 -0
  107. package/design/README.md +86 -0
  108. package/design/_TEMPLATE.md +69 -0
  109. package/design/index.json +2720 -0
  110. package/package.json +2 -1
@@ -0,0 +1,129 @@
1
+ ---
2
+ id: world-narrative-delivery
3
+ title: Narrative Delivery — story with little text
4
+ kind: worldbuilding
5
+ tags: [narrative, environmental, systemic, embedded, show-dont-tell, story, diegetic]
6
+ summary: Environmental / systemic / embedded storytelling with LITTLE text — show don't tell; let the systems author the story in a small deterministic game.
7
+ use-when: You want the world to tell its story through play and place, not cutscenes — a fit for a small, text-light deterministic game.
8
+ composes-with: [world-worldbuilding-scaffold, world-naming-and-tone, world-aesthetic-direction]
9
+ anchors: [anchor-shadow-of-mordor, anchor-outer-wilds, anchor-return-of-the-obra-dinn]
10
+ verify-with: none
11
+ ---
12
+
13
+ # Narrative Delivery — story with little text
14
+
15
+ **What it is.** How the world reaches the player *without a wall of text*. A small
16
+ deterministic game can't (and shouldn't) lean on cutscenes and codex dumps. Its
17
+ story lives in **place** (what the level shows), in **systems** (what the rules
18
+ generate), and in **objects** (what a single item implies). The best delivery is
19
+ the one the player *finds*, not the one they're *told*.
20
+
21
+ **Player fantasy / why it's fun.** Discovered story is *yours*. A player who
22
+ pieces the world together from a broken lantern and a drowned path owns that
23
+ understanding in a way no narrator can give them. Show-don't-tell isn't a style
24
+ choice — it's how you make the player a participant instead of an audience.
25
+
26
+ ## The three delivery channels
27
+
28
+ | Channel | The story is in… | Costs | Best for |
29
+ |---|---|---|---|
30
+ | **Environmental** | the *place* — layout, ruins, what's worn or broken | art & level design | premise, history, mood |
31
+ | **Systemic** | the *rules interacting* — what the systems generate | mechanical depth | emergent, personal, replayable story |
32
+ | **Embedded** | *objects & fragments* — one item, one line, one name | a little authored text | specific lore, character, the twist |
33
+
34
+ The house lean is **environmental + systemic first, embedded in tiny doses.** Text
35
+ is a DOM overlay ([[world-naming-and-tone]]); spend it sparingly. A game that
36
+ *shows* its drowning coast and lets its light-mechanic *enact* the loss needs
37
+ almost no words.
38
+
39
+ ## Vectors / options — how much story, and where
40
+
41
+ Match delivery to the game's shape ([[system-session-structure]]):
42
+
43
+ | Game shape | Primary channel | What it looks like |
44
+ |---|---|---|
45
+ | Puzzle / arcade | environmental | the level *is* the premise; one title line |
46
+ | Roguelite | systemic | each run's events author a small story ([[system-emergent-systems]]) |
47
+ | Metroidvania / campaign | environmental + embedded | place tells history; fragments gate the twist |
48
+ | Systemic / emergent | systemic | the *nemesis* pattern — the game remembers and narrates back |
49
+ | Deduction | embedded | the player *reconstructs* the story (Obra Dinn) |
50
+
51
+ ## Method
52
+
53
+ 1. **Decide what the player must understand** vs what they may *infer*. Only the
54
+ first needs delivery; the rest is theirs to imagine
55
+ ([[world-worldbuilding-scaffold]] kept it minimal — hold that line).
56
+ 2. **Assign each beat a channel.** Premise → environmental (show it in the first
57
+ screen). Stakes → systemic (let a loss *happen*, don't narrate it). A specific
58
+ reveal → embedded (one fragment).
59
+ 3. **Make the environment tell the premise.** The [[world-aesthetic-direction]]
60
+ brief is your first narrator: a drowned path, a snuffed lantern, a mended crack
61
+ say more than a paragraph. Compose the frame to be *read*.
62
+ 4. **Let systems generate the personal story.** Where you have memory or
63
+ relationships ([[system-emergent-systems]]), the game authors specifics you
64
+ didn't write — the guard who caught you twice, the lantern you always lose.
65
+ That's the Shadow of War trick at small scale.
66
+ 5. **Spend embedded text like a miser.** One line on a gravestone, one name on a
67
+ crest. Diegetic, in-world, in the register ([[world-naming-and-tone]]). Never
68
+ a scrolling codex.
69
+ 6. **Show the change, not the state.** Story is *difference* — the path that was
70
+ lit and now isn't; the crack that's now gold. Deliver transformations the
71
+ player caused, so the narrative and the mechanic are the same event.
72
+
73
+ ## Worked example
74
+
75
+ **World:** the drowned-coast keeper (from [[world-worldbuilding-scaffold]]).
76
+
77
+ - **Environmental:** the opening frame — a graded dusk, one lit lantern, a path
78
+ of dark ones trailing into rising water. No text needed; the premise is *seen*.
79
+ - **Systemic:** when the tide claims a lantern, the hamlet behind it goes dark on
80
+ the map and its light never returns this run. The *rule* tells the loss; the
81
+ player feels it because they routed there or didn't.
82
+ - **Embedded:** one line at the far lamp — *"the last one lit."* Four words,
83
+ diegetic, in register. That's the entire authored narrative.
84
+ - **Result:** a complete emotional arc — hope, attrition, a small held light —
85
+ delivered by place, rule, and four words. No cutscene, no codex.
86
+
87
+ ## Aesthetic hook
88
+
89
+ Environmental storytelling *is* [[world-aesthetic-direction]] doing double duty:
90
+ the **Kentō** frame that passes the JUDGE's depth axis (a real fore/mid/back,
91
+ a focal point) is also the frame that *narrates* — a snuffed lantern reads as
92
+ loss only if the scene has the depth and contrast to show it. Because text is a
93
+ DOM overlay and the palette carries the mood, you can tell a whole story in ink,
94
+ washi, and one *ko* glow going out. Keep embedded text set in the serif the JUDGE
95
+ renders true (`docs/JUDGE.md`), and let restraint here reinforce the house voice
96
+ ([[world-naming-and-tone]]): the systems and the light say it; the words just
97
+ confirm it.
98
+
99
+ ## Traps
100
+
101
+ - **The lore dump.** A text wall at the start players skip. If it's not
102
+ discoverable and short, cut it — deliver through play.
103
+ - **Narrating what the system already shows.** A popup "You lost a lantern!" over
104
+ a lantern the player watched go dark. Trust the mechanic; drop the caption.
105
+ - **Story that ignores the mechanics.** Fiction that contradicts what the rules
106
+ do ([[world-worldbuilding-scaffold]]'s "rule without echo"). The played story
107
+ is the real one — align the told one to it.
108
+ - **Embedded everywhere.** Fragments on every rock dilute the ones that matter.
109
+ Miser's budget.
110
+ - **Cutscene reflex.** Reaching for a scripted scene when a composed frame or a
111
+ system event would land harder *and* stay deterministic and cosmetic-free.
112
+
113
+ ## Composes with
114
+
115
+ - [[world-worldbuilding-scaffold]] — decides what little must be understood; this
116
+ delivers it without text walls.
117
+ - [[system-emergent-systems]] — the systemic channel; the game authors personal,
118
+ replayable story the designer didn't write.
119
+ - [[world-aesthetic-direction]] — the composed frame is the primary narrator.
120
+ - [[world-naming-and-tone]] — governs the spare, diegetic voice of any embedded
121
+ text.
122
+
123
+ ## See also
124
+
125
+ - [`docs/JUDGE.md`](../../docs/JUDGE.md) — depth & composition: a frame with real
126
+ layers is also a frame that can *tell* something.
127
+ - [[anchor-shadow-of-mordor]] (systemic memory as narrative),
128
+ [[anchor-outer-wilds]] (knowledge as the only progression),
129
+ [[anchor-return-of-the-obra-dinn]] (the player reconstructs the story).
@@ -0,0 +1,134 @@
1
+ ---
2
+ id: world-theme-vectors
3
+ title: Theme Vectors — choosing a setting that recolours the mechanics
4
+ kind: worldbuilding
5
+ tags: [theme, setting, fiction, twist, recolour, fantasy, resonance]
6
+ summary: Choosing a setting/theme space; theme as a twist vector that recolours every system, not a skin — pick where the fiction and the mechanic rhyme.
7
+ use-when: You have a core loop and need the world it lives in — a setting that sharpens the mechanics instead of just decorating them.
8
+ composes-with: [world-worldbuilding-scaffold, world-aesthetic-direction, world-narrative-delivery]
9
+ verify-with: none
10
+ ---
11
+
12
+ # Theme Vectors — choosing a setting that recolours the mechanics
13
+
14
+ **What it is.** The **theme** is the fiction the mechanics wear — the where, when,
15
+ and who. It is one of the six twist vectors in [[process-the-twist]], and the
16
+ cheapest to reach for, which is exactly why it's the easiest to waste. A theme
17
+ earns its place when it *recolours the systems* — makes the same rule mean
18
+ something new — not when it merely repaints the sprites.
19
+
20
+ **Player fantasy / why it's fun.** A setting is a promise about what the numbers
21
+ *mean*. "Fuel" and "faith" can be the identical resource loop; one is a survival
22
+ horror, one is a pilgrimage. The theme is where the player decides to care.
23
+
24
+ ## The test: does the fiction rhyme with the mechanic?
25
+
26
+ A theme is load-bearing when you can trace a **rhyme** — a place where the rule
27
+ and the fiction say the same thing. Skip the theme and the loop still works but
28
+ means nothing; skip the loop and the theme is a wallpaper. Aim for both saying it.
29
+
30
+ | Mechanic | A theme that rhymes | A theme that's just a skin |
31
+ |---|---|---|
32
+ | Resource that decays if unused | *Grief* you must spend before a season ends | "Energy" that ticks down |
33
+ | Territory you can't hold everywhere | A **failing** lighthouse network on a drowning coast | Generic "zones" on a map |
34
+ | Permadeath with persistent memory | Orcs who *remember* every duel (Shadow of War) | Enemies with random names |
35
+ | One-screen constraint | A single tide-pool you tend as the sea rises | "A small arena" |
36
+
37
+ ## Vectors / options
38
+
39
+ Theme is a *space* to choose within, not a single lever. Move along these axes:
40
+
41
+ | Axis | Poles | The mechanical consequence to hunt for |
42
+ |---|---|---|
43
+ | **Register** | mythic ↔ mundane | Mythic licenses spectacle & absolutes; mundane licenses stakes you feel |
44
+ | **Scale** | a room ↔ a cosmos | Sets what a "unit" is: a citizen, a hero, an empire, a season |
45
+ | **Agency** | steward ↔ conqueror | Do you *tend* the system or *bend* it? Recolours win conditions |
46
+ | **Time** | one night ↔ generations | Frames the session container; a run vs a campaign vs a lineage |
47
+ | **Tone** | dread ↔ cosy ↔ elegiac | The tonal twist rides here; recolours feedback (menace vs warmth) |
48
+ | **Material** | ink/wood/stone ↔ neon/chrome | Ties directly to [[world-aesthetic-direction]] and the Kentō set |
49
+
50
+ The Hayao example corpus lives near one corner of this space on purpose:
51
+ *lanternway*, *rootward*, *tarnholm*, *kintsugi* are **mundane-register,
52
+ small-scale, steward-agency, elegiac** worlds rendered in wood and ink. That's a
53
+ house lean, not a law — see the aesthetic hook below.
54
+
55
+ ## Method
56
+
57
+ 1. **Start from the signature mechanic**, not the setting. Name the one rule the
58
+ game is *about* (from [[process-the-twist]]). The theme has to serve it.
59
+ 2. **List 4–6 candidate fictions** the mechanic could wear. Force range: one
60
+ mythic, one mundane, one cosy, one dreadful. Don't stop at the first.
61
+ 3. **Find the rhyme for each.** For every candidate, write the single sentence
62
+ where the fiction and the rule say the same thing. No rhyme → cut it.
63
+ 4. **Trace the recolour** across three systems (economy, threat, progression):
64
+ does the theme *change what a choice feels like*? A theme that touches only
65
+ the art layer is a skin — send it to [[world-aesthetic-direction]] and pick a
66
+ deeper one.
67
+ 5. **Check it against the pillars** ([[process-pillars]]). The theme that most
68
+ sharpens a pillar wins; a theme that fights one is a different game.
69
+ 6. **Name the world in one line.** "A drowning coast where the last keeper
70
+ rations light." If it's boring to say, it'll be boring to inhabit — hand the
71
+ line to [[world-worldbuilding-scaffold]].
72
+
73
+ ## Worked example
74
+
75
+ **Loop:** a push-your-luck resource run — bank early for safety, press on for
76
+ more, lose it all if you overreach ([[pattern-risk-reward]]).
77
+
78
+ - **Candidates:** deep-sea salvage; a tea ceremony under time pressure; a
79
+ wildfire-line dig; *a lantern-lighter walking a mountain path at dusk*.
80
+ - **Rhyme found:** the lantern-lighter. Each lit lantern is banked progress; the
81
+ dark ahead is the press. Oil is the run's only currency; the summit shrine is
82
+ the bank. The fiction *is* the risk-reward curve.
83
+ - **Recolour:** threat becomes *the encroaching dark* (a timer with a face);
84
+ the "bank" becomes *turning back*, which the fiction makes a real cost, not a
85
+ menu button. Progression is the path itself.
86
+ - **World line:** *"A lantern-keeper climbing into the dusk, deciding how far
87
+ the light will reach before the dark takes the path."* (This is *lanternway*'s
88
+ neighbourhood — arrived at from the mechanic, not copied from it.)
89
+
90
+ ## Aesthetic hook
91
+
92
+ The house look is **Kentō woodblock / Miyazaki-16** (`KENTO`, `MEADOW`, `DUSK`
93
+ in [`docs/API.md`](../../docs/API.md); see [[world-aesthetic-direction]]). Its
94
+ eight named hues — vermilion *shu*, persimmon *kaki*, ochre *ko*, pine *matsu*,
95
+ teal *asagi*, indigo *ai*, wisteria *fuji*, dusty-rose *saku* — read as *elegant
96
+ Japanese craft*, so themes in that register (folk myth, seasonal ritual, quiet
97
+ stewardship, weathered wood and ink) come pre-harmonised. A **neon-cyberpunk**
98
+ or **candy-arcade** theme fights the palette; if your mechanic truly wants it,
99
+ say so early and swap the palette deliberately — Kentō is a starting point, not a
100
+ cage (`docs/CONVENTIONS.md`). But a theme chosen *near* the house register gets
101
+ its art direction and its AA guarantee (`npm run palette`) close to free.
102
+
103
+ ## Traps
104
+
105
+ - **Skin, not recolour.** If the theme could be swapped for another with zero
106
+ mechanical change, it's set-dressing. Bend deeper or pick a vector other than
107
+ theme.
108
+ - **Theme-first tourism.** Choosing "steampunk" because it's cool, then bolting a
109
+ loop on. The mechanic picks the theme, not the reverse.
110
+ - **Register mismatch.** Cosy art on a punishing loop (or dread art on a gentle
111
+ one) confuses the promise. Let tone, mechanic, and palette agree.
112
+ - **Over-lore.** A rich setting with no mechanical rhyme is a wiki, not a game.
113
+ Minimum viable lore only — [[world-worldbuilding-scaffold]].
114
+ - **Fighting the palette by accident.** Reskinning to a clashing world without
115
+ swapping `MEADOW`/`DUSK` yields muddy, off-brand frames the JUDGE flags.
116
+
117
+ ## Composes with
118
+
119
+ - [[process-the-twist]] — theme *is* one of the six vectors; this module is its
120
+ deep dive.
121
+ - [[world-worldbuilding-scaffold]] — the chosen setting becomes a coherent world
122
+ with rules and stakes here.
123
+ - [[world-aesthetic-direction]] — theme sets the register; this turns it into a
124
+ concrete, JUDGE-passing look.
125
+ - [[process-pillars]] — the pillars are the scoring function for candidate themes.
126
+
127
+ ## See also
128
+
129
+ - [`docs/JUDGE.md`](../../docs/JUDGE.md) — palette harmony (axis 3): does the
130
+ world's colour belong to *one* set?
131
+ - `docs/CONVENTIONS.md` "Default palette is Kentō" — the house register and the
132
+ AA gate.
133
+ - Example worlds *lanternway*, *rootward*, *tarnholm*, *kintsugi* — as
134
+ *convention references* for register, never a menu to copy (AGENTS.md).
@@ -0,0 +1,132 @@
1
+ ---
2
+ id: world-worldbuilding-scaffold
3
+ title: Worldbuilding Scaffold — the minimum viable world
4
+ kind: worldbuilding
5
+ tags: [lore, world, setting, stakes, fantasy, rules, coherence, scaffold]
6
+ summary: From a setting to a coherent world with rules, stakes, and a fantasy — the minimum viable lore a small deterministic game actually needs.
7
+ use-when: You picked a theme and need to turn it into a world that holds together — enough lore to justify the mechanics, no more.
8
+ composes-with: [world-theme-vectors, world-faction-identity, world-narrative-delivery, world-naming-and-tone]
9
+ verify-with: none
10
+ ---
11
+
12
+ # Worldbuilding Scaffold — the minimum viable world
13
+
14
+ **What it is.** A world is not a wiki. For a small deterministic game it's a
15
+ tight bundle: a **premise**, the rules that premise implies, the stakes that make
16
+ a loss sting, and the fantasy the player is buying. Build the load-bearing
17
+ minimum, then stop. Every sentence of lore should either justify a mechanic or
18
+ raise the stakes; if it does neither, it's decoration.
19
+
20
+ **Player fantasy / why it's fun.** A coherent world makes the player *fill in the
21
+ rest*. Give them a rule and a stake and they'll imagine the history for free.
22
+ Your job is the skeleton, not the encyclopedia.
23
+
24
+ ## The five load-bearing pieces
25
+
26
+ A world holds together when these five agree. Write one line each — that's the
27
+ whole doc for a small game.
28
+
29
+ | Piece | The question it answers | Kept small by |
30
+ |---|---|---|
31
+ | **Premise** | What is the world and what just went wrong? | One sentence. "The tide is rising and the lantern network is failing." |
32
+ | **Rules of the world** | What's true here that isn't true elsewhere? | 2–3 rules max, each mapping to a mechanic |
33
+ | **Stakes** | What's lost if you fail? | Something concrete and small enough to feel |
34
+ | **The player's role** | Who are you, and why is it *your* problem? | A verb: keeper, mender, surveyor, forager |
35
+ | **The fantasy** | What does the player get to *feel*? | One clause; this is the sales pitch |
36
+
37
+ The discipline: **every rule of the world is a mechanic in disguise.** If a
38
+ lore rule has no mechanical echo, it's flavour — fine in small doses, but it
39
+ isn't scaffolding. If a mechanic has no lore rule, the player will invent one;
40
+ make sure it's the one you want.
41
+
42
+ ## Vectors / options — how much world does the scope need?
43
+
44
+ Match lore weight to session shape ([[system-session-structure]]):
45
+
46
+ | Game shape | World weight | What you actually write |
47
+ |---|---|---|
48
+ | Single-screen puzzle / arcade | **A premise line** | One evocative sentence; the mechanic is the story |
49
+ | Run-based (roguelite) | **Premise + 2 rules + a role** | Enough for the loop to *mean* something across runs |
50
+ | Campaign / metroidvania | **Full five + a place-geography** | Regions with identity; a why-here for each gate |
51
+ | Systemic / emergent | **Premise + rules that interact** | Lean lore; the *systems* author the stories ([[system-emergent-systems]]) |
52
+
53
+ More world is not better world. *tarnholm* and *rootward* say almost nothing
54
+ explicitly — the premise is in the name and the mechanics carry the rest.
55
+
56
+ ## Method
57
+
58
+ 1. **Write the premise line.** The world plus the disturbance — the thing that
59
+ makes it a *game* and not a diorama. Inherit the register from
60
+ [[world-theme-vectors]].
61
+ 2. **Derive 2–3 rules of the world** *from your mechanics*, phrased as fiction.
62
+ Mechanic "resources decay" → rule "nothing keeps in the salt air." Mechanic
63
+ "you can't be everywhere" → rule "one keeper, many lamps." Each rule is a
64
+ promise the systems must keep.
65
+ 3. **Set the stake.** Name what failure costs in the fiction — and make it
66
+ concrete and *scaled to the loop*, not "the world ends." A drowned village
67
+ reads; a fallen empire is abstract in a 5-minute run.
68
+ 4. **Name the role with a verb.** Keeper, mender, surveyor. The verb is the
69
+ player's fantasy and often the core mechanic's name.
70
+ 5. **State the fantasy in one clause.** "The quiet competence of keeping the
71
+ light on." This is what the [[world-aesthetic-direction]] and
72
+ [[pattern-juice-choreography]] must deliver on.
73
+ 6. **Cut everything else.** If a fact doesn't back a rule, a stake, or the
74
+ fantasy, it's out of the scaffold. Let players imagine the rest.
75
+
76
+ ## Worked example
77
+
78
+ **Premise:** *"A coastal shrine-network is drowning; the last keeper walks the
79
+ path relighting lanterns before the dark and the tide close it."*
80
+
81
+ - **Rules of the world:** (1) *Light holds the dark back only while it burns* →
82
+ timed lantern mechanic. (2) *One keeper, many lamps* → you can't cover
83
+ everything; routing is the game. (3) *Oil is scarce and doesn't keep* →
84
+ a resource loop that punishes hoarding.
85
+ - **Stake:** each lantern that goes dark strands the hamlet behind it — a small,
86
+ legible loss, not an abstract apocalypse.
87
+ - **Role:** the **keeper** — the verb is the mechanic.
88
+ - **Fantasy:** *the quiet, dwindling competence of holding a line of light against
89
+ a rising night.*
90
+
91
+ Three sentences of lore; three mechanics justified; one feeling to deliver.
92
+ Anything more is a wiki.
93
+
94
+ ## Aesthetic hook
95
+
96
+ The **Kentō woodblock** register (`MEADOW`/`DUSK`; see
97
+ [[world-aesthetic-direction]]) is quiet, weathered, and elegiac by construction —
98
+ it rewards *small, human* stakes over cosmic ones. A world of one keeper and a
99
+ drowning coast reads instantly in ink and washi; a galactic-empire premise fights
100
+ the intimacy the palette wants. Let the scaffold's *scale* match the look: the
101
+ house lean is small worlds with big feelings. The premise line doubles as the
102
+ title/first-screen invitation the JUDGE scores for "invites" (chrome & finish).
103
+
104
+ ## Traps
105
+
106
+ - **The encyclopedia.** Pages of history no mechanic touches. Cut to the
107
+ load-bearing five.
108
+ - **Rule without echo.** Lore that promises something the systems never deliver
109
+ ("the gods are watching" but nothing watches). Every rule needs a mechanic.
110
+ - **Stakes too big to feel.** "Save the universe" is abstract; "don't let this
111
+ village go dark" lands. Scale the stake to the session.
112
+ - **Role without a verb.** "You are the chosen one" is a title, not a fantasy.
113
+ Name what you *do*.
114
+ - **Front-loaded lore dump.** Text walls at the start. Deliver the world through
115
+ play — [[world-narrative-delivery]].
116
+
117
+ ## Composes with
118
+
119
+ - [[world-theme-vectors]] — supplies the register and the rhyme this scaffold
120
+ builds on.
121
+ - [[world-faction-identity]] — when the world has sides, each faction is a
122
+ sub-scaffold with its own premise and values.
123
+ - [[world-narrative-delivery]] — how the scaffold reaches the player without
124
+ text walls.
125
+ - [[world-naming-and-tone]] — the premise line and role verb are named here.
126
+
127
+ ## See also
128
+
129
+ - [`docs/JUDGE.md`](../../docs/JUDGE.md) — chrome & finish: does the first screen
130
+ *invite*? The premise line is your invitation.
131
+ - Example worlds *lanternway*, *rootward*, *tarnholm*, *kintsugi* — each is a
132
+ three-sentence world, not a wiki (reference the *restraint*, not the content).
@@ -0,0 +1,54 @@
1
+ # 50-patterns/ — the cross-cutting fun & polish laws
2
+
3
+ The other sections are staged — you reach for an [[anchor]] at ANCHOR, a
4
+ [[genre]] at COMPOSE, a [[world]] at SHAPE. **Patterns are always on.** They're the
5
+ laws that apply at *every* stage and across *every* genre: a feedback loop can
6
+ snowball a puzzle or an RTS; risk/reward gives teeth to a card draw or a corner
7
+ line; readability decides whether any mechanic underneath is even visible. Don't run
8
+ these in order — hold them in the back of your mind the whole way through, and check
9
+ each design choice against the ones it touches.
10
+
11
+ They are written as **laws with teeth**: each ties to a proof or a feel-gate rather
12
+ than a vibe. Where the pattern becomes checkable, the module *routes* to it — the
13
+ skill-delta ([`docs/FUN.md`](../../docs/FUN.md) law 2) for flow and feedback runaway,
14
+ the Channel-4 feel gates ([`docs/JUICE.md`](../../docs/JUICE.md)) for juice and
15
+ forgiveness, the vision judge ([`docs/JUDGE.md`](../../docs/JUDGE.md)) for
16
+ readability — never restating the recipe. Design the pattern here; prove it there.
17
+
18
+ Several pattern modules pair 1:1 with a concrete `[[system-*]]`: **anti-frustration**
19
+ is the mindset, [[system-grace]] the machinery; **mastery-and-flow** the why,
20
+ [[system-mastery-curve]] the how; **emergence** the principle,
21
+ [[system-emergent-systems]] the parts. Read the pair together.
22
+
23
+ ## The eight pattern modules
24
+
25
+ | id | title | summary |
26
+ |---|---|---|
27
+ | [[pattern-feedback-loops]] | Feedback Loops | Positive loops snowball, negative loops correct — design which dominates so leads stay tense, not decided. |
28
+ | [[pattern-risk-reward]] | Risk / Reward | A choice with teeth — every reward priced in real risk, every option double-edged, so decisions cost something. |
29
+ | [[pattern-mastery-and-flow]] | Mastery & Flow | Keep challenge riding just above skill — the flow channel — and prove it with the skill-delta gap. |
30
+ | [[pattern-emergence]] | Emergence | Depth from few pieces — rules that interact, not content that stacks; the game generates situations you never authored. |
31
+ | [[pattern-anti-frustration]] | Anti-Frustration | Punish the mistake, not the player — grace, instant retry, undo, and respecting time keep hard fair. |
32
+ | [[pattern-juice-choreography]] | Juice as Choreography | The sim resolves and returns a choreography script; the view replays it — every event answers on ≥2 senses. |
33
+ | [[pattern-readability]] | Readability | The player must instantly find the avatar, read the threat, and see the way — salience, signposting, affordances. |
34
+ | [[pattern-pacing-and-tension]] | Pacing & Tension | Tension is a curve, not a constant — alternate peaks and breathers so the finale reads as a peak. |
35
+
36
+ ## How they interlock
37
+
38
+ ```
39
+ feedback-loops ──build──▶ pacing-and-tension ◀──build── risk-reward
40
+ │ │ │
41
+ └──────▶ mastery-and-flow ◀┘ │
42
+ │ │
43
+ emergence ──depth──▶ (the ceiling flow climbs) ◀──variance────────────┘
44
+
45
+ readability ──gates the read──▶ juice-choreography (juice serves the read; read wins ties)
46
+ anti-frustration ──bounds the anxious side of──▶ mastery-and-flow
47
+ ```
48
+
49
+ The **fun triangle** — feedback loops, risk/reward, and pacing — shapes tension over
50
+ time; **mastery-and-flow** is the channel that tension should stay inside;
51
+ **emergence** is how deep that channel goes on a small content budget. The **feel
52
+ pair** — readability and juice-choreography — governs whether any of it reaches the
53
+ player's eye, and **anti-frustration** keeps the whole thing humane. Every module
54
+ names the siblings it composes with and the exact proof or gate that keeps it honest.
@@ -0,0 +1,121 @@
1
+ ---
2
+ id: pattern-anti-frustration
3
+ title: Anti-Frustration
4
+ kind: pattern
5
+ tags: [forgiveness, grace, anti-frustration, respect, retry, mercy, difficulty, humane]
6
+ summary: Punish mistakes without punishing the player — grace, instant retry, undo, and respecting time keep hard fair.
7
+ use-when: A game is hard or long and you must separate "difficult" from "tedious/unfair"; anywhere a failure costs the player time.
8
+ composes-with: [pattern-mastery-and-flow, pattern-juice-choreography, system-grace, system-save-and-checkpoint]
9
+ verify-with: docs/FUN.md#part-1-—-universal-laws
10
+ ---
11
+
12
+ # Anti-Frustration
13
+
14
+ **What it is.** A game can be brutally hard and still respect you, or trivially easy
15
+ and still waste your life. **Anti-frustration** is the discipline of punishing the
16
+ *mistake* without punishing the *player* — grace windows, instant retry, undo,
17
+ generous checkpoints, no re-doing solved work. FUN.md law 5 states the core: **grace
18
+ is a system, not polish.**
19
+
20
+ **Player fantasy.** *"That death was fair, and I'm already trying again."* The
21
+ absence of dread about *losing progress*, so all the tension goes where it belongs —
22
+ the challenge itself. The game is on your side even as it kicks you.
23
+
24
+ ## Why it works
25
+
26
+ - **Frustration and difficulty are different axes.** Difficulty is the challenge you
27
+ signed up for; frustration is friction you didn't — reloads, re-treading, input
28
+ windows so tight the game feels like it's lying. Killing the second lets you crank
29
+ the first.
30
+ - **The grace mindset keeps players in [[pattern-mastery-and-flow]].** A death that
31
+ costs three seconds keeps you on the ridge; a death that costs three minutes drops
32
+ you into anxiety and quitting.
33
+ - **Respecting time is respecting the player.** Re-doing solved work, unskippable
34
+ intros, punitive save-scumming — these read as contempt. Grace reads as craft.
35
+
36
+ ## Levers
37
+
38
+ | Lever | Softens | Example |
39
+ |---|---|---|
40
+ | **Coyote time / jump buffer** | Input timing strictness | ~6-frame window past the ledge ([[system-grace]]) |
41
+ | **I-frames / hit-stop buffering** | Cascading damage | Invuln after a hit; buffer intent through the freeze (FUN.md §4) |
42
+ | **Instant retry** | The cost of failure | Respawn in < 1s, momentum preserved (CLAWSTRIKE) |
43
+ | **Undo / restart** | The cost of a wrong move | First-class undo key (Dying Dreams; FUN.md §1) |
44
+ | **Wound-before-death** | One-shot deaths | One grab is a story, two is a death (FUN.md §16) |
45
+ | **Checkpoint density** | Re-tread distance | Save at every room; never re-solve ([[system-save-and-checkpoint]]) |
46
+ | **Mercy clears** | Death spirals | Clear the screen on death/phase change (FUN.md §7) |
47
+ | **Assist modes** | The floor itself | Slow-mo, invuln, skip (Celeste; [[system-accessibility]]) |
48
+
49
+ ## Applied across genres
50
+
51
+ | Genre | The grace |
52
+ |---|---|
53
+ | **Precision platformer** ([[anchor-celeste]]) | Coyote, buffer, corner-correct, instant retry, assist mode |
54
+ | **Grid puzzle** ([[genre-grid-puzzle]]) | Undo + restart; a wrong push is never a lost level (FUN.md §1) |
55
+ | **Bullet hell** ([[genre-bullet-hell]]) | Mercy clears on death and phase transitions — structural, not optional (FUN.md §7) |
56
+ | **Survival horror** ([[genre-survival-horror]]) | Wound + grace beats instadeath; the fuel budget is winnable *with discipline* (FUN.md §16) |
57
+ | **Roguelike** ([[genre-roguelike]]) | Meta-progression turns a lost run into progress ([[system-meta-progression]]) |
58
+ | **Tactics** ([[genre-tactics]]) | Undo a move within a turn before commit; perfect info means no gotchas |
59
+ | **Racing** ([[genre-racing]]) | Rewind/retry a corner; no re-driving three clean laps for one mistake |
60
+
61
+ ## Overdone when…
62
+
63
+ - **Grace erases the challenge.** Infinite retries with no stakes flatten the
64
+ [[pattern-mastery-and-flow]] channel — tension needs *some* cost. Make retry cheap,
65
+ not free-of-meaning.
66
+ - **Save-scumming replaces skill.** If reloading is the optimal strategy, the design
67
+ leaks; either commit choices or make grace explicit (undo), not exploitable.
68
+ - **Hand-holding as forgiveness.** Removing failure entirely isn't grace, it's a
69
+ toy. Anti-frustration removes *tedium*, not *challenge*.
70
+ - **Inconsistent grace.** A coyote window that works on some ledges and not others
71
+ is worse than none — the player learns not to trust it ([[pattern-readability]]).
72
+
73
+ ## Verify / feel-gate link
74
+
75
+ Grace is the most *directly testable* fun law — it's law 5 precisely because every
76
+ piece of it is a frame window:
77
+
78
+ - **Frame-pump the grace window (FUN.md law 5).** Assert accepted-inside /
79
+ refused-outside to the exact frame: coyote, jump buffer, i-frames, hit-stop input
80
+ buffering. `forgivenessIssues(CONFIG)` (JUICE.md Part 3, `npm run feel`) gates that
81
+ coyote/buffer/corner are specced at all.
82
+ - **Buffer through injected pauses (law 5).** Any pause the sim injects (hit-stop,
83
+ level-up pick) must buffer intent across it — assert a press during the freeze
84
+ still fires.
85
+ - **Instant retry preserves state (law 7).** Snapshot→restore→hash round-trip proves
86
+ retry doesn't corrupt or drift the sim.
87
+ - **Respect-time proofs are the checkpoint/save gates** ([[system-save-and-checkpoint]])
88
+ — no lost solved work across a save/load cycle.
89
+
90
+ ## Worked micro-example
91
+
92
+ *"A brutally hard platformer players still call fair."* Keep difficulty maxed; strip
93
+ the *frustration* around it. (1) **Instant retry** — respawn in < 1s at the room
94
+ start, momentum intact, so a death costs seconds not minutes (CLAWSTRIKE). (2)
95
+ **Consistent grace** — coyote and jump-buffer windows that work on *every* ledge, so
96
+ the player learns to trust them ([[system-grace]], [[pattern-readability]]). (3)
97
+ **No re-tread** — checkpoint at each screen; never re-solve solved ground
98
+ ([[system-save-and-checkpoint]]). The challenge is untouched; the tedium is gone.
99
+ Prove it: frame-pump the grace window (accepted-inside / refused-outside to the exact
100
+ frame, FUN.md law 5) and round-trip snapshot→restore→hash so retry never drifts state.
101
+
102
+ ## Composes with
103
+
104
+ - [[system-grace]] — this pattern is the *mindset*; that system is the concrete
105
+ coyote/buffer/i-frame/mercy machinery with the frame values. Read them together.
106
+ - [[pattern-mastery-and-flow]] — grace bounds the anxious side of the flow channel so
107
+ hard stays humane.
108
+ - [[system-save-and-checkpoint]] — respecting time is mostly a checkpoint-density and
109
+ no-re-tread problem.
110
+ - [[system-accessibility]] — assist modes are anti-frustration extended to *who* can
111
+ reach flow at all.
112
+ - [[pattern-juice-choreography]] — a death that *feels* clean (readable cause,
113
+ quick reset) is half feel, half forgiveness.
114
+
115
+ ## See also
116
+
117
+ - [`docs/FUN.md`](../../docs/FUN.md) law 5 — grace is a system, not polish; the same
118
+ shape at every timescale, each unit-testable.
119
+ - [`docs/JUICE.md`](../../docs/JUICE.md) Part 3 — `forgivenessIssues`, the feel gate
120
+ that fails a build with unspecced grace.
121
+ - [[anchor-celeste]] — assist-mode humaneness as a whole-game thesis.