hayao 0.4.0 → 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 (131) 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/dist/anim/blend.d.ts +68 -0
  111. package/dist/anim/clip.d.ts +87 -0
  112. package/dist/anim/ik.d.ts +40 -0
  113. package/dist/anim/skeleton.d.ts +64 -0
  114. package/dist/hayao.global.js +12 -12
  115. package/dist/index.d.ts +11 -1
  116. package/dist/index.js +1683 -516
  117. package/dist/index.js.map +4 -4
  118. package/dist/index.min.js +12 -12
  119. package/dist/render/canvas2d-core.d.ts +4 -0
  120. package/dist/render/commands.d.ts +19 -0
  121. package/dist/render/lightRun.d.ts +35 -0
  122. package/dist/render/svgString.d.ts +8 -3
  123. package/dist/scene/clipPlayer.d.ts +58 -0
  124. package/dist/scene/ikTarget.d.ts +25 -0
  125. package/dist/scene/light.d.ts +80 -0
  126. package/dist/scene/shadow2d.d.ts +25 -0
  127. package/dist/scene/skeletonDebug.d.ts +28 -0
  128. package/dist/verify/gates.d.ts +25 -0
  129. package/docs/API.md +66 -8
  130. package/docs/CONVENTIONS.md +56 -0
  131. package/package.json +2 -1
@@ -0,0 +1,2720 @@
1
+ [
2
+ {
3
+ "id": "process-composition",
4
+ "title": "Composition — Assembling the Design",
5
+ "kind": "process",
6
+ "tags": [
7
+ "composition",
8
+ "genre-blend",
9
+ "systems",
10
+ "assembly",
11
+ "coherence",
12
+ "parent-genres",
13
+ "checklist"
14
+ ],
15
+ "summary": "Assemble a design from anchor + genre template + the systems it implies; blend genres by satisfying every parent's verify pattern.",
16
+ "use-when": "You have a brief and pillars and need to assemble the actual design — which genre template, which systems, and how a genre blend holds together.",
17
+ "composes-with": [
18
+ "process-intent-to-brief",
19
+ "process-pillars",
20
+ "process-the-twist",
21
+ "process-refine-and-handoff"
22
+ ],
23
+ "verify-with": "docs/FUN.md#part-2--per-genre-cheat-sheet",
24
+ "file": "design/00-process/composition.md"
25
+ },
26
+ {
27
+ "id": "process-core-loop",
28
+ "title": "The Core Loop Stack",
29
+ "kind": "process",
30
+ "tags": [
31
+ "core-loop",
32
+ "gameplay-loop",
33
+ "verb",
34
+ "feedback",
35
+ "reward",
36
+ "progression",
37
+ "pacing",
38
+ "engagement"
39
+ ],
40
+ "summary": "Design the nested loop stack — moment / encounter / session / meta — and the verb→challenge→feedback→reward→growth cycle inside each layer.",
41
+ "use-when": "You have pillars and need to design the actual moment-to-moment play and how it nests up into a session and a reason to return.",
42
+ "composes-with": [
43
+ "process-pillars",
44
+ "process-composition",
45
+ "process-refine-and-handoff"
46
+ ],
47
+ "verify-with": "docs/FUN.md#part-2--per-genre-cheat-sheet",
48
+ "file": "design/00-process/core-loop.md"
49
+ },
50
+ {
51
+ "id": "process-intent-to-brief",
52
+ "title": "Intent → Brief",
53
+ "kind": "process",
54
+ "tags": [
55
+ "intent",
56
+ "brief",
57
+ "scope",
58
+ "fantasy",
59
+ "hook",
60
+ "constraints",
61
+ "requirements",
62
+ "parse"
63
+ ],
64
+ "summary": "Parse a vague request into a one-page brief — player fantasy, one-line hook, scope, hard constraints, target session length.",
65
+ "use-when": "You have a high-level ask (\"make a polished platformer\") and need a concrete brief before you anchor, compose, or twist.",
66
+ "composes-with": [
67
+ "process-pillars",
68
+ "process-the-twist",
69
+ "process-composition"
70
+ ],
71
+ "verify-with": "none",
72
+ "file": "design/00-process/intent-to-brief.md"
73
+ },
74
+ {
75
+ "id": "process-pillars",
76
+ "title": "The Three Pillars",
77
+ "kind": "process",
78
+ "tags": [
79
+ "pillars",
80
+ "vision",
81
+ "decision-filter",
82
+ "scope-guard",
83
+ "priorities",
84
+ "focus",
85
+ "scoring"
86
+ ],
87
+ "summary": "Derive exactly three design pillars — evocative but testable — and use them as the scoring function for every later choice, including the twist.",
88
+ "use-when": "You have a brief and need a decision filter that resolves every downstream \"should we?\" including the twist and the cut list.",
89
+ "composes-with": [
90
+ "process-intent-to-brief",
91
+ "process-the-twist",
92
+ "process-core-loop",
93
+ "process-composition"
94
+ ],
95
+ "verify-with": "none",
96
+ "file": "design/00-process/pillars.md"
97
+ },
98
+ {
99
+ "id": "process-refine-and-handoff",
100
+ "title": "Refine & Handoff — The Verification Contract",
101
+ "kind": "process",
102
+ "tags": [
103
+ "handoff",
104
+ "verification-contract",
105
+ "done",
106
+ "spec",
107
+ "proof",
108
+ "seam",
109
+ "checklist",
110
+ "assertions"
111
+ ],
112
+ "summary": "Turn the finished design into a verification contract and hand off to the proof playbook — FUN, JUICE, JUDGE, CONVENTIONS. The seam where the Codex ends.",
113
+ "use-when": "The design is composed and twisted, and you need to declare \"designed enough to build\" as a set of assertions the proof playbook will run.",
114
+ "composes-with": [
115
+ "process-composition",
116
+ "process-core-loop",
117
+ "process-pillars",
118
+ "process-the-twist"
119
+ ],
120
+ "verify-with": "docs/VERIFICATION.md",
121
+ "file": "design/00-process/refine-and-handoff.md"
122
+ },
123
+ {
124
+ "id": "process-the-twist",
125
+ "title": "The Twist — \"X but Y\"",
126
+ "kind": "process",
127
+ "tags": [
128
+ "twist",
129
+ "composition",
130
+ "creativity",
131
+ "hook",
132
+ "differentiation",
133
+ "novelty",
134
+ "remix"
135
+ ],
136
+ "summary": "The \"X but Y\" formula — anchor to a proven game, then bend it along one of six twist vectors so it's yours, not a clone.",
137
+ "use-when": "You have a genre/anchor and need the creative bend that makes the design worth building.",
138
+ "composes-with": [
139
+ "process-composition",
140
+ "process-pillars",
141
+ "process-intent-to-brief"
142
+ ],
143
+ "verify-with": "none",
144
+ "file": "design/00-process/the-twist.md"
145
+ },
146
+ {
147
+ "id": "anchor-age-of-empires",
148
+ "title": "Age of Empires",
149
+ "kind": "anchor",
150
+ "tags": [
151
+ "rts",
152
+ "economy",
153
+ "tech-tree",
154
+ "build-order",
155
+ "power-spike",
156
+ "ramp",
157
+ "macro"
158
+ ],
159
+ "summary": "RTS whose fun is the eco→tech ramp — you bank a peaceful economy into age-up power spikes, and the build order is the real game.",
160
+ "use-when": "The intent is an economy-first RTS/strategy where teching up and timing a power spike is the core decision.",
161
+ "composes-with": [
162
+ "genre-rts",
163
+ "system-tech-tree",
164
+ "system-economy",
165
+ "system-resource-loops",
166
+ "system-unit-rosters"
167
+ ],
168
+ "anchors": [],
169
+ "verify-with": "docs/FUN.md#9-rts-lite",
170
+ "file": "design/10-anchors/age-of-empires.md"
171
+ },
172
+ {
173
+ "id": "anchor-baba-is-you",
174
+ "title": "Baba Is You",
175
+ "kind": "anchor",
176
+ "tags": [
177
+ "puzzle",
178
+ "rule-manipulation",
179
+ "self-reference",
180
+ "sokoban",
181
+ "systemic",
182
+ "emergence",
183
+ "grid"
184
+ ],
185
+ "summary": "A puzzle where the rules are physical objects on the board — push the word blocks and you rewrite what \"you,\" \"win,\" and \"wall\" even mean.",
186
+ "use-when": "Designing a puzzle whose depth comes from the player editing the ruleset itself, so the mechanic and the content are the same thing.",
187
+ "composes-with": [
188
+ "genre-grid-puzzle",
189
+ "pattern-emergence",
190
+ "system-onboarding",
191
+ "system-mastery-curve"
192
+ ],
193
+ "anchors": [
194
+ "anchor-baba-is-you"
195
+ ],
196
+ "verify-with": "docs/FUN.md#1-·-grid-puzzle-sokoban",
197
+ "file": "design/10-anchors/baba-is-you.md"
198
+ },
199
+ {
200
+ "id": "anchor-balatro",
201
+ "title": "Balatro",
202
+ "kind": "anchor",
203
+ "tags": [
204
+ "deckbuilder",
205
+ "score-multiplier",
206
+ "joker",
207
+ "synergy",
208
+ "poker",
209
+ "escalation",
210
+ "juice"
211
+ ],
212
+ "summary": "A score-multiplier deckbuilder where poker hands feed a chips×mult engine and stacked jokers make the number explode — the fantasy is watching it go up.",
213
+ "use-when": "Designing a game whose payoff is a runaway score-multiplier engine and the juice of numbers detonating past a threshold.",
214
+ "composes-with": [
215
+ "genre-deckbuilder",
216
+ "system-build-diversity",
217
+ "pattern-feedback-loops",
218
+ "pattern-juice-choreography"
219
+ ],
220
+ "anchors": [
221
+ "anchor-balatro"
222
+ ],
223
+ "verify-with": "docs/FUN.md#11-·-roguelike-deckbuilder",
224
+ "file": "design/10-anchors/balatro.md"
225
+ },
226
+ {
227
+ "id": "anchor-celeste",
228
+ "title": "Celeste",
229
+ "kind": "anchor",
230
+ "tags": [
231
+ "platformer",
232
+ "precision",
233
+ "grace",
234
+ "assist-mode",
235
+ "mastery",
236
+ "humane",
237
+ "momentum"
238
+ ],
239
+ "summary": "Precision platformer where brutal difficulty and total forgiveness coexist — grace is a system, assist mode makes the mountain optional not easy.",
240
+ "use-when": "Designing a movement-first game where deaths must feel fair and the difficulty needs a humane floor.",
241
+ "composes-with": [
242
+ "genre-precision-platformer",
243
+ "system-grace",
244
+ "system-mastery-curve",
245
+ "system-accessibility"
246
+ ],
247
+ "anchors": [
248
+ "anchor-celeste"
249
+ ],
250
+ "verify-with": "docs/FUN.md#2-·-precision-platformer-celeste-like",
251
+ "file": "design/10-anchors/celeste.md"
252
+ },
253
+ {
254
+ "id": "anchor-civilization",
255
+ "title": "Civilization",
256
+ "kind": "anchor",
257
+ "tags": [
258
+ "4x",
259
+ "turn-based",
260
+ "strategy",
261
+ "snowball",
262
+ "comeback",
263
+ "tech-tree",
264
+ "one-more-turn"
265
+ ],
266
+ "summary": "The 4X \"one more turn\" engine — many shallow-per-turn systems layered into a deep whole, with victory paths and a snowball you must brake for comebacks.",
267
+ "use-when": "The intent is a layered turn-based strategy game where compounding decisions and multiple win paths drive \"just one more turn.\"",
268
+ "composes-with": [
269
+ "genre-rts",
270
+ "system-tech-tree",
271
+ "system-economy",
272
+ "pattern-feedback-loops",
273
+ "system-session-structure"
274
+ ],
275
+ "anchors": [],
276
+ "verify-with": "docs/FUN.md#9-rts-lite",
277
+ "file": "design/10-anchors/civilization.md"
278
+ },
279
+ {
280
+ "id": "anchor-dead-cells",
281
+ "title": "Dead Cells",
282
+ "kind": "anchor",
283
+ "tags": [
284
+ "metroidvania",
285
+ "roguelite",
286
+ "permanence",
287
+ "run-based",
288
+ "combat",
289
+ "unlock-pool",
290
+ "biome-branch"
291
+ ],
292
+ "summary": "Metroidvania fused with roguelite — runs are impermanent, but permanent unlocks fold discoveries into the pool, so the world persists even when the run doesn't.",
293
+ "use-when": "Designing a run-based action game that still wants a growing, permanent sense of world and mastery across deaths.",
294
+ "composes-with": [
295
+ "genre-metroidvania",
296
+ "genre-roguelike",
297
+ "system-meta-progression",
298
+ "system-combat-model"
299
+ ],
300
+ "anchors": [
301
+ "anchor-dead-cells"
302
+ ],
303
+ "verify-with": "docs/FUN.md#3-·-metroidvania",
304
+ "file": "design/10-anchors/dead-cells.md"
305
+ },
306
+ {
307
+ "id": "anchor-factorio",
308
+ "title": "Factorio",
309
+ "kind": "anchor",
310
+ "tags": [
311
+ "automation",
312
+ "logistics",
313
+ "factory",
314
+ "throughput",
315
+ "optimization",
316
+ "scaling",
317
+ "engineering"
318
+ ],
319
+ "summary": "Automation/logistics sim where the factory itself is the toy — you build the machine that builds, and the fun is untangling throughput bottlenecks that scale forever.",
320
+ "use-when": "The intent is a systems/optimization game about building processes rather than acting them out; the player designs, the machine executes.",
321
+ "composes-with": [
322
+ "genre-incremental",
323
+ "system-resource-loops",
324
+ "system-crafting",
325
+ "system-tech-tree",
326
+ "system-emergent-systems"
327
+ ],
328
+ "anchors": [],
329
+ "verify-with": "docs/FUN.md#14-incrementalidle",
330
+ "file": "design/10-anchors/factorio.md"
331
+ },
332
+ {
333
+ "id": "anchor-hades",
334
+ "title": "Hades",
335
+ "kind": "anchor",
336
+ "tags": [
337
+ "roguelite",
338
+ "meta-progression",
339
+ "narrative",
340
+ "death",
341
+ "build-diversity",
342
+ "boons",
343
+ "run-based"
344
+ ],
345
+ "summary": "Action roguelite where dying is the delivery mechanism for story and power — meta-progression is narrative, so losing is content, not punishment.",
346
+ "use-when": "Designing a run-based game where you want death to advance the fiction and the meta-loop to carry players through failure.",
347
+ "composes-with": [
348
+ "genre-roguelike",
349
+ "system-meta-progression",
350
+ "system-build-diversity",
351
+ "system-emergent-systems"
352
+ ],
353
+ "anchors": [
354
+ "anchor-hades"
355
+ ],
356
+ "verify-with": "docs/FUN.md#10-·-traditional-roguelike",
357
+ "file": "design/10-anchors/hades.md"
358
+ },
359
+ {
360
+ "id": "anchor-into-the-breach",
361
+ "title": "Into the Breach",
362
+ "kind": "anchor",
363
+ "tags": [
364
+ "tactics",
365
+ "perfect-information",
366
+ "telegraph",
367
+ "turn-based",
368
+ "puzzle",
369
+ "positioning",
370
+ "grid"
371
+ ],
372
+ "summary": "Perfect-information tactics — every enemy move is shown before it happens, and the game is the puzzle of rewriting that telegraphed future in one turn.",
373
+ "use-when": "Designing a turn-based tactics game where fairness comes from total honesty and the fun is manipulating a known future, not guessing an unknown one.",
374
+ "composes-with": [
375
+ "genre-tactics",
376
+ "system-telegraphs",
377
+ "system-combat-model",
378
+ "system-counter-systems"
379
+ ],
380
+ "anchors": [
381
+ "anchor-into-the-breach"
382
+ ],
383
+ "verify-with": "docs/FUN.md#12-·-turn-based-tactics-into-the-breach-like",
384
+ "file": "design/10-anchors/into-the-breach.md"
385
+ },
386
+ {
387
+ "id": "anchor-it-takes-two",
388
+ "title": "It Takes Two",
389
+ "kind": "anchor",
390
+ "tags": [
391
+ "coop",
392
+ "asymmetric",
393
+ "set-piece",
394
+ "interdependence",
395
+ "mechanic-per-chapter",
396
+ "two-player"
397
+ ],
398
+ "summary": "Asymmetric two-player coop as a parade of set-pieces — a fresh interlocking mechanic every chapter, each requiring both players' different verbs at once.",
399
+ "use-when": "The design is a curated (non-random) two-player coop where each level introduces a new paired mechanic and players are mechanically interdependent.",
400
+ "composes-with": [
401
+ "genre-coop-chaos",
402
+ "system-coop-and-competition",
403
+ "system-onboarding",
404
+ "system-mastery-curve",
405
+ "system-encounter-design"
406
+ ],
407
+ "anchors": [],
408
+ "verify-with": "docs/FUN.md#3-metroidvania",
409
+ "file": "design/10-anchors/it-takes-two.md"
410
+ },
411
+ {
412
+ "id": "anchor-loop-hero",
413
+ "title": "Loop Hero",
414
+ "kind": "anchor",
415
+ "tags": [
416
+ "genre-fusion",
417
+ "placement",
418
+ "auto-combat",
419
+ "deckbuilder",
420
+ "roguelite",
421
+ "novel-loop",
422
+ "indirect-control"
423
+ ],
424
+ "summary": "Three genres fused into one loop — you place tiles from a deck around a fixed track, an auto-battling hero walks it, and the terrain you build both feeds and threatens you.",
425
+ "use-when": "Designing a novel loop by fusing genres, or an indirect-control game where the player shapes the world and watches consequences unfold.",
426
+ "composes-with": [
427
+ "genre-auto-battler",
428
+ "genre-deckbuilder",
429
+ "system-resource-loops",
430
+ "pattern-risk-reward"
431
+ ],
432
+ "anchors": [
433
+ "anchor-loop-hero"
434
+ ],
435
+ "verify-with": "docs/FUN.md#11-·-roguelike-deckbuilder",
436
+ "file": "design/10-anchors/loop-hero.md"
437
+ },
438
+ {
439
+ "id": "anchor-nuclear-throne",
440
+ "title": "Nuclear Throne",
441
+ "kind": "anchor",
442
+ "tags": [
443
+ "twin-stick",
444
+ "roguelite",
445
+ "arcade",
446
+ "tight-loop",
447
+ "permadeath",
448
+ "mutation",
449
+ "execution"
450
+ ],
451
+ "summary": "Twin-stick arcade roguelite built for the tight loop — fast lethal runs, mutation drafts on level-up, and a skill ceiling that lives in your hands.",
452
+ "use-when": "Designing a fast, lethal, execution-first run-based shooter where the core minute is so tight that \"just one more run\" carries the whole game.",
453
+ "composes-with": [
454
+ "genre-horde-survival",
455
+ "genre-roguelike",
456
+ "system-build-diversity",
457
+ "system-mastery-curve"
458
+ ],
459
+ "anchors": [
460
+ "anchor-nuclear-throne"
461
+ ],
462
+ "verify-with": "docs/FUN.md#6-·-twin-stick-horde-survival-vampire-survivors-like",
463
+ "file": "design/10-anchors/nuclear-throne.md"
464
+ },
465
+ {
466
+ "id": "anchor-outer-wilds",
467
+ "title": "Outer Wilds",
468
+ "kind": "anchor",
469
+ "tags": [
470
+ "exploration",
471
+ "knowledge",
472
+ "curiosity",
473
+ "open-world",
474
+ "time-loop",
475
+ "discovery",
476
+ "non-linear"
477
+ ],
478
+ "summary": "Knowledge is the only progression — no upgrades gate the world, only what *you* understand; a curiosity-driven open world you unlock in your own head.",
479
+ "use-when": "The intent is an exploration game where the player's real growth is understanding, and the world is gated by knowledge rather than items or stats.",
480
+ "composes-with": [
481
+ "genre-exploration",
482
+ "system-progression",
483
+ "system-session-structure",
484
+ "system-onboarding",
485
+ "pattern-readability"
486
+ ],
487
+ "anchors": [],
488
+ "verify-with": "docs/FUN.md#3-metroidvania",
489
+ "file": "design/10-anchors/outer-wilds.md"
490
+ },
491
+ {
492
+ "id": "anchor-overcooked",
493
+ "title": "Overcooked",
494
+ "kind": "anchor",
495
+ "tags": [
496
+ "coop",
497
+ "chaos",
498
+ "party",
499
+ "communication",
500
+ "time-pressure",
501
+ "kitchen",
502
+ "escalation"
503
+ ],
504
+ "summary": "Couch-coop chaos where the design *forces* communication — a shared task under a clock, split across players so no one can solo it, escalating each level.",
505
+ "use-when": "The intent is a local/coop party game whose fun is frantic coordination; you need interdependence enforced by layout, not politeness.",
506
+ "composes-with": [
507
+ "genre-coop-chaos",
508
+ "system-coop-and-competition",
509
+ "system-encounter-design",
510
+ "system-difficulty-and-dda",
511
+ "pattern-pacing-and-tension"
512
+ ],
513
+ "anchors": [],
514
+ "verify-with": "docs/FUN.md#8-tower-defense",
515
+ "file": "design/10-anchors/overcooked.md"
516
+ },
517
+ {
518
+ "id": "anchor-peggle",
519
+ "title": "Peggle",
520
+ "kind": "anchor",
521
+ "tags": [
522
+ "physics-arcade",
523
+ "variable-ratio",
524
+ "juice",
525
+ "reward-schedule",
526
+ "aim",
527
+ "one-input",
528
+ "spectacle"
529
+ ],
530
+ "summary": "Aim, drop a ball, watch physics scatter it through pegs — trivial input wrapped in variable-ratio payoffs and maximal celebration juice.",
531
+ "use-when": "Designing a low-skill-floor game that feels ecstatic through reward scheduling and disproportionate feedback on a single simple action.",
532
+ "composes-with": [
533
+ "genre-physics-arcade",
534
+ "system-reward-schedules",
535
+ "pattern-juice-choreography",
536
+ "pattern-risk-reward"
537
+ ],
538
+ "anchors": [
539
+ "anchor-peggle"
540
+ ],
541
+ "verify-with": "docs/FUN.md#19-·-physics-arcade-breakoutpeggle",
542
+ "file": "design/10-anchors/peggle.md"
543
+ },
544
+ {
545
+ "id": "anchor-reigns",
546
+ "title": "Reigns",
547
+ "kind": "anchor",
548
+ "tags": [
549
+ "narrative",
550
+ "choice",
551
+ "swipe",
552
+ "meters",
553
+ "stewardship",
554
+ "cards",
555
+ "decisions"
556
+ ],
557
+ "summary": "Swipe-choice narrative — binary decisions nudge four meters you must keep between two ditches, so ruling is an act of doomed balance, not victory.",
558
+ "use-when": "The intent is a minimal-input, choice-driven game where the tension is balancing competing meters and every decision is double-edged.",
559
+ "composes-with": [
560
+ "genre-narrative-decisions",
561
+ "system-reward-schedules",
562
+ "system-difficulty-and-dda",
563
+ "system-collectibles",
564
+ "pattern-risk-reward"
565
+ ],
566
+ "anchors": [],
567
+ "verify-with": "docs/FUN.md#21-narrative-decisions-reigns-like",
568
+ "file": "design/10-anchors/reigns.md"
569
+ },
570
+ {
571
+ "id": "anchor-return-of-the-obra-dinn",
572
+ "title": "Return of the Obra Dinn",
573
+ "kind": "anchor",
574
+ "tags": [
575
+ "deduction",
576
+ "mystery",
577
+ "logic",
578
+ "reasoning",
579
+ "verification",
580
+ "non-linear",
581
+ "knowledge"
582
+ ],
583
+ "summary": "Deduction as the core loop — the game gives you evidence and *trusts your reasoning*, confirming answers only when you've triangulated a solvable set.",
584
+ "use-when": "The intent is a logic/mystery game where the played verb is *inferring* facts from evidence, and the design must be provably solvable without guessing.",
585
+ "composes-with": [
586
+ "genre-exploration",
587
+ "system-onboarding",
588
+ "system-progression",
589
+ "pattern-readability",
590
+ "pattern-mastery-and-flow"
591
+ ],
592
+ "anchors": [],
593
+ "verify-with": "docs/FUN.md#1-grid-puzzle-sokoban",
594
+ "file": "design/10-anchors/return-of-the-obra-dinn.md"
595
+ },
596
+ {
597
+ "id": "anchor-rimworld",
598
+ "title": "RimWorld",
599
+ "kind": "anchor",
600
+ "tags": [
601
+ "colony-sim",
602
+ "story-generator",
603
+ "ai-director",
604
+ "emergent",
605
+ "drama",
606
+ "pacing",
607
+ "simulation"
608
+ ],
609
+ "summary": "A colony sim built as a story generator — an AI director paces crises against your state so the *narrative*, not a win screen, is the product.",
610
+ "use-when": "The design wants players to leave with stories, not scores; you need a director that authors drama over a deep sim.",
611
+ "composes-with": [
612
+ "genre-city-builder",
613
+ "system-emergent-systems",
614
+ "system-difficulty-and-dda",
615
+ "system-enemy-ai",
616
+ "system-resource-loops"
617
+ ],
618
+ "anchors": [],
619
+ "verify-with": "docs/FUN.md#17-citycolony-builder",
620
+ "file": "design/10-anchors/rimworld.md"
621
+ },
622
+ {
623
+ "id": "anchor-shadow-of-mordor",
624
+ "title": "Shadow of Mordor",
625
+ "kind": "anchor",
626
+ "tags": [
627
+ "nemesis",
628
+ "emergent",
629
+ "systemic-memory",
630
+ "rivalry",
631
+ "procedural-narrative",
632
+ "personalization"
633
+ ],
634
+ "summary": "The nemesis system — a systemic hierarchy of enemies that remember you, rise from your failures, and become personalized rivals no writer scripted.",
635
+ "use-when": "The design wants antagonists (or allies) that persist, remember player history, and generate personal stories from systemic memory.",
636
+ "composes-with": [
637
+ "genre-action-adventure",
638
+ "system-emergent-systems",
639
+ "system-enemy-ai",
640
+ "system-progression",
641
+ "pattern-emergence"
642
+ ],
643
+ "anchors": [],
644
+ "verify-with": "docs/FUN.md#4-top-down-action-adventure-zelda-like",
645
+ "file": "design/10-anchors/shadow-of-mordor.md"
646
+ },
647
+ {
648
+ "id": "anchor-slay-the-spire",
649
+ "title": "Slay the Spire",
650
+ "kind": "anchor",
651
+ "tags": [
652
+ "deckbuilder",
653
+ "roguelike",
654
+ "draft",
655
+ "map-choice",
656
+ "synergy",
657
+ "deck-thinning",
658
+ "run-based"
659
+ ],
660
+ "summary": "The roguelike deckbuilder — every card is a draft-of-3-or-skip, every fight thins or thickens your deck, and the map is a route of risk you choose in advance.",
661
+ "use-when": "Designing a run where the player's growing toolkit (a deck) IS the strategy, refined choice by choice against escalating threats.",
662
+ "composes-with": [
663
+ "genre-deckbuilder",
664
+ "system-build-diversity",
665
+ "system-procgen-design",
666
+ "system-reward-schedules"
667
+ ],
668
+ "anchors": [
669
+ "anchor-slay-the-spire"
670
+ ],
671
+ "verify-with": "docs/FUN.md#11-·-roguelike-deckbuilder",
672
+ "file": "design/10-anchors/slay-the-spire.md"
673
+ },
674
+ {
675
+ "id": "anchor-starcraft",
676
+ "title": "StarCraft",
677
+ "kind": "anchor",
678
+ "tags": [
679
+ "rts",
680
+ "asymmetry",
681
+ "faction",
682
+ "balance",
683
+ "macro",
684
+ "micro",
685
+ "matchup"
686
+ ],
687
+ "summary": "The gold standard of RTS faction asymmetry — three rosters that share almost no units yet balance across every matchup because each expresses one clear identity.",
688
+ "use-when": "The design needs deeply different sides that still play fair; you're building faction identity, not palette-swaps.",
689
+ "composes-with": [
690
+ "genre-rts",
691
+ "system-faction-asymmetry",
692
+ "system-unit-rosters",
693
+ "system-counter-systems",
694
+ "system-mastery-curve"
695
+ ],
696
+ "anchors": [],
697
+ "verify-with": "docs/FUN.md#9-rts-lite",
698
+ "file": "design/10-anchors/starcraft.md"
699
+ },
700
+ {
701
+ "id": "anchor-stardew-valley",
702
+ "title": "Stardew Valley",
703
+ "kind": "anchor",
704
+ "tags": [
705
+ "life-sim",
706
+ "farming",
707
+ "cozy",
708
+ "open-ended",
709
+ "compulsion-loop",
710
+ "calendar",
711
+ "progression"
712
+ ],
713
+ "summary": "Gentle life sim whose pull is a calm compulsion loop — open-ended goals, a daily rhythm, and \"one more day\" pacing that never punishes.",
714
+ "use-when": "The intent is a low-stress, open-ended progression game where the player sets their own goals and the loop is soothing, not tense.",
715
+ "composes-with": [
716
+ "genre-farming-sim",
717
+ "system-progression",
718
+ "system-collectibles",
719
+ "system-economy",
720
+ "system-session-structure"
721
+ ],
722
+ "anchors": [],
723
+ "verify-with": "docs/FUN.md#15-farminglife-sim",
724
+ "file": "design/10-anchors/stardew-valley.md"
725
+ },
726
+ {
727
+ "id": "anchor-tetris",
728
+ "title": "Tetris",
729
+ "kind": "anchor",
730
+ "tags": [
731
+ "endless",
732
+ "mastery",
733
+ "single-verb",
734
+ "falling-block",
735
+ "tuning",
736
+ "flow",
737
+ "difficulty-ramp"
738
+ ],
739
+ "summary": "The perfectly-tuned single verb — place falling tetrominoes to clear lines, forever, with a difficulty that rises with your own success.",
740
+ "use-when": "Designing for pure, endless mastery on one tight mechanic where the score curve and the skill ceiling ARE the game.",
741
+ "composes-with": [
742
+ "genre-grid-puzzle",
743
+ "system-mastery-curve",
744
+ "system-difficulty-and-dda",
745
+ "pattern-mastery-and-flow"
746
+ ],
747
+ "anchors": [
748
+ "anchor-tetris"
749
+ ],
750
+ "verify-with": "docs/FUN.md#1-·-grid-puzzle-sokoban",
751
+ "file": "design/10-anchors/tetris.md"
752
+ },
753
+ {
754
+ "id": "anchor-vampire-survivors",
755
+ "title": "Vampire Survivors",
756
+ "kind": "anchor",
757
+ "tags": [
758
+ "horde-survival",
759
+ "auto-attack",
760
+ "build-growth",
761
+ "rising-tide",
762
+ "minimal-input",
763
+ "power-fantasy"
764
+ ],
765
+ "summary": "One-stick horde survival where you only move — weapons fire themselves — and the whole game is your multiplying build racing an escalating swarm.",
766
+ "use-when": "Designing a low-input game whose fun is watching a snowballing build outrun a superlinear threat curve.",
767
+ "composes-with": [
768
+ "genre-horde-survival",
769
+ "system-build-diversity",
770
+ "system-reward-schedules",
771
+ "system-progression"
772
+ ],
773
+ "anchors": [
774
+ "anchor-vampire-survivors"
775
+ ],
776
+ "verify-with": "docs/FUN.md#6-·-twin-stick-horde-survival-vampire-survivors-like",
777
+ "file": "design/10-anchors/vampire-survivors.md"
778
+ },
779
+ {
780
+ "id": "genre-action-adventure",
781
+ "title": "Top-down Action-Adventure (Zelda-like)",
782
+ "kind": "genre",
783
+ "tags": [
784
+ "action-adventure",
785
+ "zelda",
786
+ "top-down",
787
+ "combat",
788
+ "telegraph",
789
+ "dungeon",
790
+ "readable"
791
+ ],
792
+ "summary": "Readable combat and gated dungeons — enemies that tell you what they'll do, a hit that feels like it landed, and keys that turn the map into a lock.",
793
+ "use-when": "Designing a top-down game of reactive melee combat woven with light puzzle-gating and exploration.",
794
+ "composes-with": [
795
+ "system-telegraphs",
796
+ "system-combat-model",
797
+ "system-enemy-archetypes",
798
+ "system-encounter-design",
799
+ "system-boss-design",
800
+ "system-grace"
801
+ ],
802
+ "anchors": [
803
+ "anchor-shadow-of-mordor",
804
+ "anchor-dead-cells"
805
+ ],
806
+ "verify-with": "docs/FUN.md#4--top-down-action-adventure-zelda-like",
807
+ "file": "design/20-genres/action-adventure.md"
808
+ },
809
+ {
810
+ "id": "genre-auto-battler",
811
+ "title": "Auto-Battler",
812
+ "kind": "genre",
813
+ "tags": [
814
+ "auto-battler",
815
+ "autochess",
816
+ "prep-then-watch",
817
+ "economy",
818
+ "synergy",
819
+ "positioning",
820
+ "rounds",
821
+ "shared-pool"
822
+ ],
823
+ "summary": "Prep-then-watch — spend an economy on units, position and synergise them, then watch the round resolve itself.",
824
+ "use-when": "The design is a prep-phase-then-auto-combat game (autochess-like): economy + positioning + synergy across rounds.",
825
+ "composes-with": [
826
+ "system-economy",
827
+ "system-build-diversity",
828
+ "system-unit-rosters",
829
+ "system-counter-systems",
830
+ "system-reward-schedules"
831
+ ],
832
+ "anchors": [
833
+ "anchor-loop-hero"
834
+ ],
835
+ "verify-with": "docs/FUN.md#12-·-turn-based-tactics",
836
+ "file": "design/20-genres/auto-battler.md"
837
+ },
838
+ {
839
+ "id": "genre-bullet-hell",
840
+ "title": "Bullet Hell",
841
+ "kind": "genre",
842
+ "tags": [
843
+ "bullet-hell",
844
+ "shmup",
845
+ "danmaku",
846
+ "patterns",
847
+ "dodging",
848
+ "boss",
849
+ "density"
850
+ ],
851
+ "summary": "Screen-filling patterns that read as motion, not noise — dodging is trivial, holding fire lanes under a boss is the skill.",
852
+ "use-when": "You want a reflex game where the fantasy is threading a wall of bullets that looks impossible but is fair.",
853
+ "composes-with": [
854
+ "system-telegraphs",
855
+ "system-boss-design",
856
+ "system-difficulty-and-dda",
857
+ "system-grace",
858
+ "genre-horde-survival"
859
+ ],
860
+ "anchors": [
861
+ "anchor-nuclear-throne"
862
+ ],
863
+ "verify-with": "docs/FUN.md#7--bullet-hell",
864
+ "file": "design/20-genres/bullet-hell.md"
865
+ },
866
+ {
867
+ "id": "genre-city-builder",
868
+ "title": "City / Colony Builder",
869
+ "kind": "genre",
870
+ "tags": [
871
+ "city-builder",
872
+ "colony",
873
+ "placement",
874
+ "adjacency",
875
+ "synergy",
876
+ "score",
877
+ "zoning",
878
+ "optimization"
879
+ ],
880
+ "summary": "Placement-optimization builder where the exposed live score under the cursor IS the UI, and negative synergies make the only real decisions.",
881
+ "use-when": "Designing a city/colony builder where the fun is placing tiles for adjacency payoff, guided by a live score and real tradeoffs.",
882
+ "composes-with": [
883
+ "system-economy",
884
+ "system-resource-loops",
885
+ "pattern-feedback-loops",
886
+ "system-procgen-design"
887
+ ],
888
+ "anchors": [
889
+ "anchor-factorio",
890
+ "anchor-rimworld"
891
+ ],
892
+ "verify-with": "docs/FUN.md#17--citycolony-builder",
893
+ "file": "design/20-genres/city-builder.md"
894
+ },
895
+ {
896
+ "id": "genre-coop-chaos",
897
+ "title": "Coop Chaos",
898
+ "kind": "genre",
899
+ "tags": [
900
+ "coop",
901
+ "couch-coop",
902
+ "party",
903
+ "overcooked",
904
+ "communication",
905
+ "chaos",
906
+ "shared-task",
907
+ "local-multiplayer"
908
+ ],
909
+ "summary": "Couch-coop chaos — escalating shared tasks that force communication under time pressure; the friction between players IS the fun.",
910
+ "use-when": "The design is a local/party coop game where players juggle interdependent tasks against a clock and must talk to survive.",
911
+ "composes-with": [
912
+ "system-coop-and-competition",
913
+ "system-difficulty-and-dda",
914
+ "system-encounter-design",
915
+ "pattern-pacing-and-tension",
916
+ "genre-narrative-decisions"
917
+ ],
918
+ "anchors": [
919
+ "anchor-overcooked",
920
+ "anchor-it-takes-two"
921
+ ],
922
+ "verify-with": "docs/FUN.md#8-·-tower-defense",
923
+ "file": "design/20-genres/coop-chaos.md"
924
+ },
925
+ {
926
+ "id": "genre-deckbuilder",
927
+ "title": "Roguelike Deckbuilder",
928
+ "kind": "genre",
929
+ "tags": [
930
+ "deckbuilder",
931
+ "cards",
932
+ "draft",
933
+ "synergy",
934
+ "roguelike",
935
+ "build",
936
+ "win-rate"
937
+ ],
938
+ "summary": "Drafts with teeth — a deck that evolves run-to-run, where the draft delta is provable and every spike is blockable in principle.",
939
+ "use-when": "You want a run-based card game where the deck is the strategy and picking cards well is the whole skill.",
940
+ "composes-with": [
941
+ "system-build-diversity",
942
+ "system-reward-schedules",
943
+ "system-meta-progression",
944
+ "system-procgen-design",
945
+ "system-status-effects",
946
+ "system-telegraphs"
947
+ ],
948
+ "anchors": [
949
+ "anchor-slay-the-spire",
950
+ "anchor-balatro"
951
+ ],
952
+ "verify-with": "docs/FUN.md#11--roguelike-deckbuilder",
953
+ "file": "design/20-genres/deckbuilder.md"
954
+ },
955
+ {
956
+ "id": "genre-exploration",
957
+ "title": "Exploration",
958
+ "kind": "genre",
959
+ "tags": [
960
+ "exploration",
961
+ "discovery",
962
+ "immersive-sim",
963
+ "outer-wilds",
964
+ "obra-dinn",
965
+ "curiosity",
966
+ "knowledge",
967
+ "deduction"
968
+ ],
969
+ "summary": "Discovery as the reward — knowledge is the only progression; curiosity gates the world and understanding is the win.",
970
+ "use-when": "The design gates progress on player knowledge/deduction rather than stats or items (Outer Wilds / Obra Dinn-like).",
971
+ "composes-with": [
972
+ "system-emergent-systems",
973
+ "system-onboarding",
974
+ "pattern-emergence",
975
+ "genre-narrative-decisions",
976
+ "genre-metroidvania"
977
+ ],
978
+ "anchors": [
979
+ "anchor-outer-wilds",
980
+ "anchor-return-of-the-obra-dinn"
981
+ ],
982
+ "verify-with": "docs/FUN.md#10-·-traditional-roguelike",
983
+ "file": "design/20-genres/exploration.md"
984
+ },
985
+ {
986
+ "id": "genre-farming-sim",
987
+ "title": "Farming / Life Sim",
988
+ "kind": "genre",
989
+ "tags": [
990
+ "farming",
991
+ "life-sim",
992
+ "calendar",
993
+ "crops",
994
+ "seasons",
995
+ "cozy",
996
+ "solvency",
997
+ "routine"
998
+ ],
999
+ "summary": "Calm calendar-driven life sim where the fun is gentle solvency — plans made on a season that can actually come true.",
1000
+ "use-when": "Designing a cozy farming/life sim whose pull is a routine of small plans paying off within an honest calendar.",
1001
+ "composes-with": [
1002
+ "system-resource-loops",
1003
+ "system-session-structure",
1004
+ "system-economy",
1005
+ "pattern-pacing-and-tension"
1006
+ ],
1007
+ "anchors": [
1008
+ "anchor-stardew-valley"
1009
+ ],
1010
+ "verify-with": "docs/FUN.md#15--farminglife-sim",
1011
+ "file": "design/20-genres/farming-sim.md"
1012
+ },
1013
+ {
1014
+ "id": "genre-grid-puzzle",
1015
+ "title": "Grid Puzzle (Sokoban-like)",
1016
+ "kind": "genre",
1017
+ "tags": [
1018
+ "puzzle",
1019
+ "sokoban",
1020
+ "grid",
1021
+ "solver",
1022
+ "deterministic",
1023
+ "turn-based",
1024
+ "knot"
1025
+ ],
1026
+ "summary": "The solvable knot — a grid of pieces where the obvious move is a trap and the real line is a small proof you feel yourself find.",
1027
+ "use-when": "Designing a turn-based, perfect-information puzzle whose fun is out-thinking a hand-authored or generated board.",
1028
+ "composes-with": [
1029
+ "system-onboarding",
1030
+ "system-difficulty-and-dda",
1031
+ "system-procgen-design",
1032
+ "system-save-and-checkpoint",
1033
+ "system-mastery-curve"
1034
+ ],
1035
+ "anchors": [
1036
+ "anchor-baba-is-you",
1037
+ "anchor-into-the-breach"
1038
+ ],
1039
+ "verify-with": "docs/FUN.md#1--grid-puzzle-sokoban",
1040
+ "file": "design/20-genres/grid-puzzle.md"
1041
+ },
1042
+ {
1043
+ "id": "genre-horde-survival",
1044
+ "title": "Twin-stick Horde Survival (Vampire Survivors-like)",
1045
+ "kind": "genre",
1046
+ "tags": [
1047
+ "horde",
1048
+ "survivors",
1049
+ "twin-stick",
1050
+ "auto-attack",
1051
+ "build",
1052
+ "wave",
1053
+ "roguelite",
1054
+ "orbit"
1055
+ ],
1056
+ "summary": "The rising tide vs your rising build — minimal input, auto-attacks, and a level-up draft that races a superlinear swarm you must out-scale.",
1057
+ "use-when": "Designing a survive-the-timer game where the skill is positioning and build-drafting against an escalating horde.",
1058
+ "composes-with": [
1059
+ "system-build-diversity",
1060
+ "system-meta-progression",
1061
+ "system-reward-schedules",
1062
+ "system-difficulty-and-dda",
1063
+ "system-procgen-design",
1064
+ "system-session-structure"
1065
+ ],
1066
+ "anchors": [
1067
+ "anchor-vampire-survivors",
1068
+ "anchor-nuclear-throne"
1069
+ ],
1070
+ "verify-with": "docs/FUN.md#6--twin-stick-horde-survival-vampire-survivors-like",
1071
+ "file": "design/20-genres/horde-survival.md"
1072
+ },
1073
+ {
1074
+ "id": "genre-incremental",
1075
+ "title": "Incremental / Idle",
1076
+ "kind": "genre",
1077
+ "tags": [
1078
+ "incremental",
1079
+ "idle",
1080
+ "clicker",
1081
+ "prestige",
1082
+ "economy",
1083
+ "pacing",
1084
+ "payback",
1085
+ "ramp"
1086
+ ],
1087
+ "summary": "Number-goes-up economy where the design IS the pacing curve — first-buy times and era gaps tuned so there are no deserts.",
1088
+ "use-when": "Designing a clicker/idle/prestige game whose fun is a smooth ramp of unlocks with no dead stretches waiting for a wall.",
1089
+ "composes-with": [
1090
+ "system-economy",
1091
+ "system-progression",
1092
+ "pattern-feedback-loops",
1093
+ "system-reward-schedules"
1094
+ ],
1095
+ "anchors": [
1096
+ "anchor-balatro",
1097
+ "anchor-factorio"
1098
+ ],
1099
+ "verify-with": "docs/FUN.md#14--incrementalidle",
1100
+ "file": "design/20-genres/incremental.md"
1101
+ },
1102
+ {
1103
+ "id": "genre-match3",
1104
+ "title": "Match-3",
1105
+ "kind": "genre",
1106
+ "tags": [
1107
+ "match3",
1108
+ "cascade",
1109
+ "tile-swap",
1110
+ "puzzle",
1111
+ "board",
1112
+ "combo",
1113
+ "casual",
1114
+ "choreography"
1115
+ ],
1116
+ "summary": "Swap-adjacent tile matcher where the fun is the cascade you triggered — one swap, a chain reaction the board runs for you.",
1117
+ "use-when": "Designing a tile-swap/board-clear game where a single legal move should bloom into a satisfying, deterministic chain.",
1118
+ "composes-with": [
1119
+ "system-reward-schedules",
1120
+ "system-difficulty-and-dda",
1121
+ "pattern-juice-choreography",
1122
+ "pattern-feedback-loops"
1123
+ ],
1124
+ "anchors": [
1125
+ "anchor-peggle",
1126
+ "anchor-balatro"
1127
+ ],
1128
+ "verify-with": "docs/FUN.md#13--match-3",
1129
+ "file": "design/20-genres/match3.md"
1130
+ },
1131
+ {
1132
+ "id": "genre-metroidvania",
1133
+ "title": "Metroidvania",
1134
+ "kind": "genre",
1135
+ "tags": [
1136
+ "metroidvania",
1137
+ "exploration",
1138
+ "gating",
1139
+ "ability",
1140
+ "map",
1141
+ "backtrack",
1142
+ "locked-door"
1143
+ ],
1144
+ "summary": "The locked-door promise kept — a single connected world where every ability you earn retroactively unlocks a place you already saw and couldn't reach.",
1145
+ "use-when": "Designing an interconnected exploration game whose progression is spatial — abilities as keys, the map as the meta-puzzle.",
1146
+ "composes-with": [
1147
+ "system-progression",
1148
+ "system-skill-trees",
1149
+ "system-save-and-checkpoint",
1150
+ "system-onboarding",
1151
+ "system-boss-design",
1152
+ "system-collectibles"
1153
+ ],
1154
+ "anchors": [
1155
+ "anchor-dead-cells",
1156
+ "anchor-celeste"
1157
+ ],
1158
+ "verify-with": "docs/FUN.md#3--metroidvania",
1159
+ "file": "design/20-genres/metroidvania.md"
1160
+ },
1161
+ {
1162
+ "id": "genre-narrative-decisions",
1163
+ "title": "Narrative Decisions",
1164
+ "kind": "genre",
1165
+ "tags": [
1166
+ "narrative",
1167
+ "decisions",
1168
+ "reigns",
1169
+ "swipe",
1170
+ "meters",
1171
+ "stewardship",
1172
+ "choice",
1173
+ "cards"
1174
+ ],
1175
+ "summary": "Impossible stewardship — every choice double-edged, meters balanced between two ditches; judgement beats any fixed policy.",
1176
+ "use-when": "The design is a choice-driven game where balancing competing meters via double-edged decisions IS the gameplay (Reigns-like).",
1177
+ "composes-with": [
1178
+ "system-economy",
1179
+ "system-emergent-systems",
1180
+ "pattern-risk-reward",
1181
+ "pattern-feedback-loops",
1182
+ "pattern-pacing-and-tension"
1183
+ ],
1184
+ "anchors": [
1185
+ "anchor-reigns"
1186
+ ],
1187
+ "verify-with": "docs/FUN.md#21-·-narrative-decisions-reigns-like",
1188
+ "file": "design/20-genres/narrative-decisions.md"
1189
+ },
1190
+ {
1191
+ "id": "genre-physics-arcade",
1192
+ "title": "Physics Arcade",
1193
+ "kind": "genre",
1194
+ "tags": [
1195
+ "physics",
1196
+ "arcade",
1197
+ "breakout",
1198
+ "peggle",
1199
+ "pinball",
1200
+ "bounce",
1201
+ "aim",
1202
+ "swept-collision"
1203
+ ],
1204
+ "summary": "Trustworthy flight — aim, launch, watch a ball obey clean physics; maximal juice on one trivial input.",
1205
+ "use-when": "The design is a launch-and-watch bouncer (Breakout/Peggle/pinball): one aim, deterministic flight, spectacle on impact.",
1206
+ "composes-with": [
1207
+ "genre-tower-defense",
1208
+ "system-reward-schedules",
1209
+ "system-build-diversity",
1210
+ "pattern-juice-choreography",
1211
+ "pattern-risk-reward",
1212
+ "pattern-pacing-and-tension"
1213
+ ],
1214
+ "anchors": [
1215
+ "anchor-peggle",
1216
+ "anchor-tetris"
1217
+ ],
1218
+ "verify-with": "docs/FUN.md#19-·-physics-arcade-breakoutpeggle",
1219
+ "file": "design/20-genres/physics-arcade.md"
1220
+ },
1221
+ {
1222
+ "id": "genre-precision-platformer",
1223
+ "title": "Precision Platformer (Celeste-like)",
1224
+ "kind": "genre",
1225
+ "tags": [
1226
+ "platformer",
1227
+ "precision",
1228
+ "celeste",
1229
+ "movement",
1230
+ "grace",
1231
+ "dash",
1232
+ "coyote",
1233
+ "feel"
1234
+ ],
1235
+ "summary": "Trust in inputs — a movement envelope so honest that every death is the player's own, and the retry is instant enough to make failure fuel.",
1236
+ "use-when": "Designing a tight single-screen platformer where mastery of one movement verb is the whole game.",
1237
+ "composes-with": [
1238
+ "system-grace",
1239
+ "system-onboarding",
1240
+ "system-difficulty-and-dda",
1241
+ "system-save-and-checkpoint",
1242
+ "system-collectibles"
1243
+ ],
1244
+ "anchors": [
1245
+ "anchor-celeste"
1246
+ ],
1247
+ "verify-with": "docs/FUN.md#2--precision-platformer-celeste-like",
1248
+ "file": "design/20-genres/precision-platformer.md"
1249
+ },
1250
+ {
1251
+ "id": "genre-racing",
1252
+ "title": "Racing",
1253
+ "kind": "genre",
1254
+ "tags": [
1255
+ "racing",
1256
+ "driving",
1257
+ "top-down",
1258
+ "understeer",
1259
+ "braking",
1260
+ "line",
1261
+ "checkpoint",
1262
+ "laps"
1263
+ ],
1264
+ "summary": "The speed/line tradeoff made physical — brake to hold the line or floor it and drift wide; the racing line is the skill.",
1265
+ "use-when": "The design is a top-down/arcade racer where cornering is a real physics tradeoff and lap time is the score.",
1266
+ "composes-with": [
1267
+ "system-enemy-ai",
1268
+ "system-difficulty-and-dda",
1269
+ "system-progression",
1270
+ "pattern-mastery-and-flow",
1271
+ "pattern-risk-reward",
1272
+ "pattern-pacing-and-tension"
1273
+ ],
1274
+ "anchors": [],
1275
+ "verify-with": "docs/FUN.md#20-·-top-down-racing",
1276
+ "file": "design/20-genres/racing.md"
1277
+ },
1278
+ {
1279
+ "id": "genre-rhythm",
1280
+ "title": "Rhythm",
1281
+ "kind": "genre",
1282
+ "tags": [
1283
+ "rhythm",
1284
+ "beat",
1285
+ "timing",
1286
+ "window",
1287
+ "bpm",
1288
+ "frame-exact",
1289
+ "music",
1290
+ "tempo"
1291
+ ],
1292
+ "summary": "Beat-locked timing game where the beat IS sim time and fairness is three frame-exact assertions — tight but fair.",
1293
+ "use-when": "Designing a rhythm/beat game where inputs must land in frame-honest windows and the music is an observer of the beat clock.",
1294
+ "composes-with": [
1295
+ "pattern-juice-choreography",
1296
+ "system-grace",
1297
+ "system-difficulty-and-dda",
1298
+ "system-onboarding"
1299
+ ],
1300
+ "anchors": [
1301
+ "anchor-tetris",
1302
+ "anchor-peggle"
1303
+ ],
1304
+ "verify-with": "docs/FUN.md#18--rhythm",
1305
+ "file": "design/20-genres/rhythm.md"
1306
+ },
1307
+ {
1308
+ "id": "genre-roguelike",
1309
+ "title": "Roguelike",
1310
+ "kind": "genre",
1311
+ "tags": [
1312
+ "roguelike",
1313
+ "procgen",
1314
+ "permadeath",
1315
+ "runs",
1316
+ "connectivity",
1317
+ "discovery",
1318
+ "turn-based"
1319
+ ],
1320
+ "summary": "Fair discovery through procedural dungeons that always connect and turns that always replay — variance as content, not chaos.",
1321
+ "use-when": "You want run-based exploration where each seed is a fresh, fair puzzle and death is the loop.",
1322
+ "composes-with": [
1323
+ "system-procgen-design",
1324
+ "system-meta-progression",
1325
+ "system-session-structure",
1326
+ "system-enemy-archetypes",
1327
+ "system-save-and-checkpoint"
1328
+ ],
1329
+ "anchors": [
1330
+ "anchor-nuclear-throne",
1331
+ "anchor-dead-cells"
1332
+ ],
1333
+ "verify-with": "docs/FUN.md#10--traditional-roguelike",
1334
+ "file": "design/20-genres/roguelike.md"
1335
+ },
1336
+ {
1337
+ "id": "genre-rts",
1338
+ "title": "Real-Time Strategy",
1339
+ "kind": "genre",
1340
+ "tags": [
1341
+ "rts",
1342
+ "strategy",
1343
+ "factions",
1344
+ "asymmetry",
1345
+ "macro",
1346
+ "micro",
1347
+ "pathfinding",
1348
+ "spectacle"
1349
+ ],
1350
+ "summary": "Mass under command — hundreds of wall-aware units, three asymmetric-but-fair factions, and battles that read as spectacle.",
1351
+ "use-when": "You want a game of commanding armies where economy, tech, faction identity, and positioning decide impressive battles.",
1352
+ "composes-with": [
1353
+ "system-faction-asymmetry",
1354
+ "system-unit-rosters",
1355
+ "system-economy",
1356
+ "system-enemy-ai",
1357
+ "system-tech-tree",
1358
+ "system-counter-systems",
1359
+ "system-difficulty-and-dda"
1360
+ ],
1361
+ "anchors": [
1362
+ "anchor-starcraft",
1363
+ "anchor-age-of-empires"
1364
+ ],
1365
+ "verify-with": "docs/FUN.md#9--rts-lite",
1366
+ "file": "design/20-genres/rts.md"
1367
+ },
1368
+ {
1369
+ "id": "genre-stealth",
1370
+ "title": "Stealth",
1371
+ "kind": "genre",
1372
+ "tags": [
1373
+ "stealth",
1374
+ "vision-cone",
1375
+ "patrol",
1376
+ "noise",
1377
+ "plan",
1378
+ "heist",
1379
+ "guard",
1380
+ "route"
1381
+ ],
1382
+ "summary": "Plannable danger — vision cones and noise you can read, so the tension is the gap between a route you can see and a route you can execute.",
1383
+ "use-when": "Designing a game where the fun is reading enemy perception and routing through it, not out-shooting it.",
1384
+ "composes-with": [
1385
+ "system-enemy-ai",
1386
+ "system-telegraphs",
1387
+ "system-encounter-design",
1388
+ "system-save-and-checkpoint",
1389
+ "system-onboarding",
1390
+ "system-difficulty-and-dda"
1391
+ ],
1392
+ "anchors": [
1393
+ "anchor-shadow-of-mordor"
1394
+ ],
1395
+ "verify-with": "docs/FUN.md#5--stealth",
1396
+ "file": "design/20-genres/stealth.md"
1397
+ },
1398
+ {
1399
+ "id": "genre-survival-horror",
1400
+ "title": "Survival Horror",
1401
+ "kind": "genre",
1402
+ "tags": [
1403
+ "survival-horror",
1404
+ "dread",
1405
+ "resource",
1406
+ "fuel",
1407
+ "light",
1408
+ "darkness",
1409
+ "tension",
1410
+ "scarcity"
1411
+ ],
1412
+ "summary": "Scarcity-driven dread where difficulty lives in resource arithmetic — dread you can budget, not monster stats you can't.",
1413
+ "use-when": "Designing a survival-horror game whose fear is scarcity you must ration, with light/dark and a fuel economy as the pressure.",
1414
+ "composes-with": [
1415
+ "system-economy",
1416
+ "system-grace",
1417
+ "pattern-pacing-and-tension",
1418
+ "system-resource-loops"
1419
+ ],
1420
+ "anchors": [
1421
+ "anchor-outer-wilds"
1422
+ ],
1423
+ "verify-with": "docs/FUN.md#16--survival-horror",
1424
+ "file": "design/20-genres/survival-horror.md"
1425
+ },
1426
+ {
1427
+ "id": "genre-tactics",
1428
+ "title": "Turn-Based Tactics",
1429
+ "kind": "genre",
1430
+ "tags": [
1431
+ "tactics",
1432
+ "turn-based",
1433
+ "grid",
1434
+ "telegraphs",
1435
+ "perfect-information",
1436
+ "puzzle",
1437
+ "positioning"
1438
+ ],
1439
+ "summary": "Rewriting a telegraphed future — perfect information, honest tells stored as directions, and every fight a solvable positioning puzzle.",
1440
+ "use-when": "You want a grid combat game where you see the enemy's plan and the fun is redirecting it, not out-rolling it.",
1441
+ "composes-with": [
1442
+ "system-telegraphs",
1443
+ "system-enemy-archetypes",
1444
+ "system-encounter-design",
1445
+ "system-combat-model",
1446
+ "system-difficulty-and-dda"
1447
+ ],
1448
+ "anchors": [
1449
+ "anchor-into-the-breach"
1450
+ ],
1451
+ "verify-with": "docs/FUN.md#12--turn-based-tactics-into-the-breach-like",
1452
+ "file": "design/20-genres/tactics.md"
1453
+ },
1454
+ {
1455
+ "id": "genre-tower-defense",
1456
+ "title": "Tower Defense",
1457
+ "kind": "genre",
1458
+ "tags": [
1459
+ "tower-defense",
1460
+ "td",
1461
+ "waves",
1462
+ "towers",
1463
+ "counters",
1464
+ "lanes",
1465
+ "build-order"
1466
+ ],
1467
+ "summary": "Build decisions that matter — near-hard counters, range-ring geometry, and wave curves that breathe.",
1468
+ "use-when": "You want a spatial build-and-defend loop where placement and counter-picks decide the run, not tower count.",
1469
+ "composes-with": [
1470
+ "system-counter-systems",
1471
+ "system-enemy-archetypes",
1472
+ "system-difficulty-and-dda",
1473
+ "system-economy",
1474
+ "system-encounter-design"
1475
+ ],
1476
+ "anchors": [
1477
+ "anchor-into-the-breach"
1478
+ ],
1479
+ "verify-with": "docs/FUN.md#8--tower-defense",
1480
+ "file": "design/20-genres/tower-defense.md"
1481
+ },
1482
+ {
1483
+ "id": "system-accessibility",
1484
+ "title": "Accessibility",
1485
+ "kind": "system",
1486
+ "tags": [
1487
+ "accessibility",
1488
+ "assist",
1489
+ "remap",
1490
+ "colorblind",
1491
+ "contrast",
1492
+ "readability",
1493
+ "a11y",
1494
+ "salience"
1495
+ ],
1496
+ "summary": "Assist modes, input remap, and colour/contrast that clear a readability floor — more players reach the game, none are shamed for it.",
1497
+ "use-when": "You want the game playable by more people — different hands, eyes, and skill levels — without a separate \"easy\" ghetto.",
1498
+ "composes-with": [
1499
+ "system-difficulty-and-dda",
1500
+ "pattern-readability",
1501
+ "world-aesthetic-direction",
1502
+ "system-onboarding"
1503
+ ],
1504
+ "anchors": [
1505
+ "anchor-celeste"
1506
+ ],
1507
+ "verify-with": "docs/JUDGE.md",
1508
+ "file": "design/30-systems/accessibility.md"
1509
+ },
1510
+ {
1511
+ "id": "system-boss-design",
1512
+ "title": "Boss Design — the set-piece fight",
1513
+ "kind": "system",
1514
+ "tags": [
1515
+ "boss",
1516
+ "phases",
1517
+ "telegraph",
1518
+ "spectacle",
1519
+ "set-piece",
1520
+ "mercy",
1521
+ "encounter"
1522
+ ],
1523
+ "summary": "The multi-phase set-piece — a fight that teaches, escalates, and telegraphs, with mercy on every phase transition so a death is fair, not cheap.",
1524
+ "use-when": "You need a climactic fight — a boss, an elite, a chapter finale — that's a spectacle and a skill test, not just a big HP bar.",
1525
+ "composes-with": [
1526
+ "system-telegraphs",
1527
+ "system-combat-model",
1528
+ "system-encounter-design",
1529
+ "system-grace",
1530
+ "system-enemy-ai"
1531
+ ],
1532
+ "anchors": [
1533
+ "anchor-hades",
1534
+ "anchor-into-the-breach"
1535
+ ],
1536
+ "verify-with": "docs/FUN.md#7-bullet-hell",
1537
+ "file": "design/30-systems/boss-design.md"
1538
+ },
1539
+ {
1540
+ "id": "system-build-diversity",
1541
+ "title": "Build Diversity — many viable strategies",
1542
+ "kind": "system",
1543
+ "tags": [
1544
+ "builds",
1545
+ "loadouts",
1546
+ "synergy",
1547
+ "diversity",
1548
+ "dominant-strategy",
1549
+ "viability",
1550
+ "balance"
1551
+ ],
1552
+ "summary": "Many strategies that all win — weapons, loadouts, and synergies tuned so the fun is choosing a build, not solving for the one correct build.",
1553
+ "use-when": "The player assembles a strategy from parts (weapons, cards, relics, skills) and you need more than one path to be worth taking.",
1554
+ "composes-with": [
1555
+ "system-status-effects",
1556
+ "system-counter-systems",
1557
+ "system-skill-trees",
1558
+ "system-reward-schedules",
1559
+ "system-meta-progression"
1560
+ ],
1561
+ "anchors": [
1562
+ "anchor-slay-the-spire",
1563
+ "anchor-vampire-survivors",
1564
+ "anchor-hades"
1565
+ ],
1566
+ "verify-with": "docs/FUN.md#11-roguelike-deckbuilder",
1567
+ "file": "design/30-systems/build-diversity.md"
1568
+ },
1569
+ {
1570
+ "id": "system-collectibles",
1571
+ "title": "Collectibles — Sets, Completion & Optional Pull",
1572
+ "kind": "system",
1573
+ "tags": [
1574
+ "collectibles",
1575
+ "sets",
1576
+ "completion",
1577
+ "cosmetics",
1578
+ "optional-goals",
1579
+ "100-percent",
1580
+ "checklist"
1581
+ ],
1582
+ "summary": "Optional goals that pull without shoving — sets to complete, cosmetics to earn; the compulsion of the almost-full grid, kept honest.",
1583
+ "use-when": "You want optional content that rewards thoroughness and gives self-directed players a goal, without gating the main game behind it.",
1584
+ "composes-with": [
1585
+ "system-reward-schedules",
1586
+ "system-meta-progression",
1587
+ "system-economy",
1588
+ "system-mastery-curve",
1589
+ "system-collectibles"
1590
+ ],
1591
+ "anchors": [
1592
+ "anchor-stardew-valley",
1593
+ "anchor-dead-cells",
1594
+ "anchor-vampire-survivors"
1595
+ ],
1596
+ "verify-with": "docs/FUN.md#15-farminglife-sim",
1597
+ "file": "design/30-systems/collectibles.md"
1598
+ },
1599
+ {
1600
+ "id": "system-combat-model",
1601
+ "title": "Combat Model — the shape of a hit",
1602
+ "kind": "system",
1603
+ "tags": [
1604
+ "combat",
1605
+ "damage",
1606
+ "resolution",
1607
+ "timing",
1608
+ "real-time",
1609
+ "turn-based",
1610
+ "hit"
1611
+ ],
1612
+ "summary": "The spine every fight sits on — how damage is computed, when it resolves, and whether the clock is frames or turns.",
1613
+ "use-when": "You have any fight — melee, ranged, tactical, brawler — and need to decide how a hit is computed and when it lands.",
1614
+ "composes-with": [
1615
+ "system-telegraphs",
1616
+ "system-status-effects",
1617
+ "system-counter-systems",
1618
+ "system-grace",
1619
+ "system-enemy-ai"
1620
+ ],
1621
+ "anchors": [
1622
+ "anchor-into-the-breach",
1623
+ "anchor-hades",
1624
+ "anchor-slay-the-spire"
1625
+ ],
1626
+ "verify-with": "docs/FUN.md#4-top-down-action-adventure-zelda-like",
1627
+ "file": "design/30-systems/combat-model.md"
1628
+ },
1629
+ {
1630
+ "id": "system-coop-and-competition",
1631
+ "title": "Co-op & Competition",
1632
+ "kind": "system",
1633
+ "tags": [
1634
+ "coop",
1635
+ "pvp",
1636
+ "competition",
1637
+ "asymmetric",
1638
+ "interdependence",
1639
+ "rivalry",
1640
+ "multiplayer",
1641
+ "communication"
1642
+ ],
1643
+ "summary": "Co-op and PvP hooks — asymmetric co-op, interdependence, and rivalry that make other players the most interesting system in the game.",
1644
+ "use-when": "The design has more than one player and you need to shape how they cooperate, compete, or depend on each other.",
1645
+ "composes-with": [
1646
+ "system-faction-asymmetry",
1647
+ "system-encounter-design",
1648
+ "genre-coop-chaos",
1649
+ "pattern-emergence"
1650
+ ],
1651
+ "anchors": [
1652
+ "anchor-overcooked",
1653
+ "anchor-it-takes-two"
1654
+ ],
1655
+ "verify-with": "docs/FUN.md#part-1--universal-laws",
1656
+ "file": "design/30-systems/coop-and-competition.md"
1657
+ },
1658
+ {
1659
+ "id": "system-counter-systems",
1660
+ "title": "Counter Systems — the duel matrix",
1661
+ "kind": "system",
1662
+ "tags": [
1663
+ "counters",
1664
+ "rock-paper-scissors",
1665
+ "matchup",
1666
+ "duel",
1667
+ "near-hard",
1668
+ "balance"
1669
+ ],
1670
+ "summary": "Rock-paper-scissors with teeth — NEAR-HARD counters that stay decisive under scaling, so the answer to a threat is a choice, not a bigger number.",
1671
+ "use-when": "You have unit types, weapons, or tools that should beat each other, and you need the matchups to actually matter.",
1672
+ "composes-with": [
1673
+ "system-unit-rosters",
1674
+ "system-faction-asymmetry",
1675
+ "system-build-diversity",
1676
+ "system-combat-model",
1677
+ "system-status-effects"
1678
+ ],
1679
+ "anchors": [
1680
+ "anchor-starcraft",
1681
+ "anchor-age-of-empires"
1682
+ ],
1683
+ "verify-with": "docs/FUN.md#8-tower-defense",
1684
+ "file": "design/30-systems/counter-systems.md"
1685
+ },
1686
+ {
1687
+ "id": "system-crafting",
1688
+ "title": "Crafting — Recipes & Combinatorial Depth",
1689
+ "kind": "system",
1690
+ "tags": [
1691
+ "crafting",
1692
+ "recipes",
1693
+ "combination",
1694
+ "discovery",
1695
+ "lookup",
1696
+ "depth",
1697
+ "materials"
1698
+ ],
1699
+ "summary": "Combining inputs into outputs by recipe; combinatorial depth as content, and the discovery-vs-lookup axis that decides how the player learns it.",
1700
+ "use-when": "The design lets players combine materials/items into new ones and you need the recipe space to be deep, legible, and worth exploring.",
1701
+ "composes-with": [
1702
+ "system-resource-loops",
1703
+ "system-economy",
1704
+ "system-build-diversity",
1705
+ "system-collectibles",
1706
+ "system-tech-tree"
1707
+ ],
1708
+ "anchors": [
1709
+ "anchor-factorio",
1710
+ "anchor-stardew-valley"
1711
+ ],
1712
+ "verify-with": "docs/FUN.md#1-grid-puzzle-sokoban",
1713
+ "file": "design/30-systems/crafting.md"
1714
+ },
1715
+ {
1716
+ "id": "system-difficulty-and-dda",
1717
+ "title": "Difficulty & Dynamic Difficulty",
1718
+ "kind": "system",
1719
+ "tags": [
1720
+ "difficulty",
1721
+ "dda",
1722
+ "curve",
1723
+ "spikes",
1724
+ "breathers",
1725
+ "ai-director",
1726
+ "assist",
1727
+ "ramp",
1728
+ "pacing"
1729
+ ],
1730
+ "summary": "Difficulty curves that breathe — spikes and breathers, an AI director that authors pressure, and assist modes that never shame.",
1731
+ "use-when": "You need to shape challenge over a session, react to a player's skill, or offer honest difficulty options.",
1732
+ "composes-with": [
1733
+ "system-encounter-design",
1734
+ "system-onboarding",
1735
+ "system-accessibility",
1736
+ "pattern-pacing-and-tension"
1737
+ ],
1738
+ "anchors": [
1739
+ "anchor-rimworld",
1740
+ "anchor-celeste"
1741
+ ],
1742
+ "verify-with": "docs/FUN.md#8-tower-defense",
1743
+ "file": "design/30-systems/difficulty-and-dda.md"
1744
+ },
1745
+ {
1746
+ "id": "system-economy",
1747
+ "title": "Economy — Faucets, Sinks & the Pacing Window",
1748
+ "kind": "system",
1749
+ "tags": [
1750
+ "economy",
1751
+ "currency",
1752
+ "faucets",
1753
+ "sinks",
1754
+ "inflation",
1755
+ "balance",
1756
+ "pacing",
1757
+ "incremental"
1758
+ ],
1759
+ "summary": "Currencies flowing in through faucets and out through sinks; keeping the two in tension so the player is always almost-able-to-afford the next thing.",
1760
+ "use-when": "The design has resources or currency the player earns and spends, and you need them to stay meaningful instead of trivial or crushing.",
1761
+ "composes-with": [
1762
+ "system-resource-loops",
1763
+ "system-progression",
1764
+ "system-crafting",
1765
+ "system-reward-schedules",
1766
+ "system-meta-progression"
1767
+ ],
1768
+ "anchors": [
1769
+ "anchor-factorio",
1770
+ "anchor-stardew-valley",
1771
+ "anchor-civilization"
1772
+ ],
1773
+ "verify-with": "docs/FUN.md#14-incrementalidle",
1774
+ "file": "design/30-systems/economy.md"
1775
+ },
1776
+ {
1777
+ "id": "system-emergent-systems",
1778
+ "title": "Emergent Systems",
1779
+ "kind": "system",
1780
+ "tags": [
1781
+ "emergence",
1782
+ "nemesis",
1783
+ "memory",
1784
+ "relationships",
1785
+ "reputation",
1786
+ "systemic-story",
1787
+ "story-generator",
1788
+ "second-order"
1789
+ ],
1790
+ "summary": "Nemesis-style memory, relationships, and reputation — systemic story generators where the game remembers you and interactions author drama.",
1791
+ "use-when": "You want stories the designer didn't script — rivalries, grudges, and reputations that arise from the player's own play.",
1792
+ "composes-with": [
1793
+ "system-enemy-ai",
1794
+ "system-faction-asymmetry",
1795
+ "pattern-emergence",
1796
+ "world-narrative-delivery"
1797
+ ],
1798
+ "anchors": [
1799
+ "anchor-shadow-of-mordor",
1800
+ "anchor-rimworld"
1801
+ ],
1802
+ "verify-with": "docs/FUN.md#7-pure-data-state-pays-compound-interest",
1803
+ "file": "design/30-systems/emergent-systems.md"
1804
+ },
1805
+ {
1806
+ "id": "system-encounter-design",
1807
+ "title": "Encounter Design",
1808
+ "kind": "system",
1809
+ "tags": [
1810
+ "encounter",
1811
+ "combat",
1812
+ "pacing",
1813
+ "pressure",
1814
+ "safe-pocket",
1815
+ "exit-lane",
1816
+ "waves",
1817
+ "composition"
1818
+ ],
1819
+ "summary": "Composing archetypes into a fight — pressure and safe pockets, exit lanes, and a wave curve that breathes.",
1820
+ "use-when": "You have enemy roles and need to arrange them into a specific fight that reads, pressures, and resolves fairly.",
1821
+ "composes-with": [
1822
+ "system-enemy-archetypes",
1823
+ "system-enemy-ai",
1824
+ "system-difficulty-and-dda",
1825
+ "system-boss-design"
1826
+ ],
1827
+ "anchors": [
1828
+ "anchor-into-the-breach",
1829
+ "anchor-vampire-survivors"
1830
+ ],
1831
+ "verify-with": "docs/FUN.md#5-stealth",
1832
+ "file": "design/30-systems/encounter-design.md"
1833
+ },
1834
+ {
1835
+ "id": "system-enemy-ai",
1836
+ "title": "Enemy AI",
1837
+ "kind": "system",
1838
+ "tags": [
1839
+ "ai",
1840
+ "behavior",
1841
+ "aggro",
1842
+ "threat",
1843
+ "steering",
1844
+ "flow-field",
1845
+ "pathfinding",
1846
+ "kiting",
1847
+ "telegraph"
1848
+ ],
1849
+ "summary": "Readable, beatable enemy minds — aggro/threat, steering, and pathing that the player can predict, route around, and outplay.",
1850
+ "use-when": "A design needs enemies that move and decide, and you want them to feel intelligent without being unfair or opaque.",
1851
+ "composes-with": [
1852
+ "system-enemy-archetypes",
1853
+ "system-encounter-design",
1854
+ "system-telegraphs",
1855
+ "system-difficulty-and-dda"
1856
+ ],
1857
+ "anchors": [
1858
+ "anchor-nuclear-throne",
1859
+ "anchor-shadow-of-mordor"
1860
+ ],
1861
+ "verify-with": "docs/FUN.md#4-top-down-action-adventure-zelda-like",
1862
+ "file": "design/30-systems/enemy-ai.md"
1863
+ },
1864
+ {
1865
+ "id": "system-enemy-archetypes",
1866
+ "title": "Enemy Archetypes",
1867
+ "kind": "system",
1868
+ "tags": [
1869
+ "enemy",
1870
+ "archetypes",
1871
+ "roles",
1872
+ "tank",
1873
+ "skirmisher",
1874
+ "artillery",
1875
+ "swarm",
1876
+ "support",
1877
+ "roster"
1878
+ ],
1879
+ "summary": "The enemy alphabet — tank/skirmisher/artillery/swarm/support — a small set of roles that combine into fights bigger than their parts.",
1880
+ "use-when": "You need a legible enemy roster where each foe demands a different answer and pairs interact.",
1881
+ "composes-with": [
1882
+ "system-enemy-ai",
1883
+ "system-encounter-design",
1884
+ "system-unit-rosters",
1885
+ "system-counter-systems"
1886
+ ],
1887
+ "anchors": [
1888
+ "anchor-vampire-survivors",
1889
+ "anchor-into-the-breach"
1890
+ ],
1891
+ "verify-with": "docs/FUN.md#4-top-down-action-adventure-zelda-like",
1892
+ "file": "design/30-systems/enemy-archetypes.md"
1893
+ },
1894
+ {
1895
+ "id": "system-faction-asymmetry",
1896
+ "title": "Faction Asymmetry — different but fair",
1897
+ "kind": "system",
1898
+ "tags": [
1899
+ "factions",
1900
+ "asymmetry",
1901
+ "balance",
1902
+ "rts",
1903
+ "matchup",
1904
+ "identity",
1905
+ "starcraft"
1906
+ ],
1907
+ "summary": "Asymmetric factions that play nothing alike yet balance — distinct rosters, economies, and win conditions held fair by cross-matchup duels, not mirrors.",
1908
+ "use-when": "You want factions/sides that feel genuinely different to play, not palette-swaps, and still need them to be fair against each other.",
1909
+ "composes-with": [
1910
+ "system-counter-systems",
1911
+ "system-unit-rosters",
1912
+ "system-combat-model",
1913
+ "system-economy",
1914
+ "system-build-diversity"
1915
+ ],
1916
+ "anchors": [
1917
+ "anchor-starcraft",
1918
+ "anchor-age-of-empires"
1919
+ ],
1920
+ "verify-with": "docs/FUN.md#9-rts-lite",
1921
+ "file": "design/30-systems/faction-asymmetry.md"
1922
+ },
1923
+ {
1924
+ "id": "system-grace",
1925
+ "title": "Grace — forgiveness as a system",
1926
+ "kind": "system",
1927
+ "tags": [
1928
+ "grace",
1929
+ "coyote",
1930
+ "iframes",
1931
+ "input-buffer",
1932
+ "mercy",
1933
+ "undo",
1934
+ "forgiveness",
1935
+ "retry"
1936
+ ],
1937
+ "summary": "Coyote time, i-frames, input buffering, mercy clears, and undo as one concrete system — the same shape at every timescale, each unit-testable.",
1938
+ "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.",
1939
+ "composes-with": [
1940
+ "pattern-anti-frustration",
1941
+ "system-combat-model",
1942
+ "system-telegraphs",
1943
+ "system-boss-design",
1944
+ "system-save-and-checkpoint"
1945
+ ],
1946
+ "anchors": [
1947
+ "anchor-celeste",
1948
+ "anchor-into-the-breach"
1949
+ ],
1950
+ "verify-with": "docs/FUN.md#part-1--universal-laws",
1951
+ "file": "design/30-systems/grace.md"
1952
+ },
1953
+ {
1954
+ "id": "system-mastery-curve",
1955
+ "title": "Mastery Curve — Easy to Learn, Hard to Master",
1956
+ "kind": "system",
1957
+ "tags": [
1958
+ "mastery",
1959
+ "skill-ceiling",
1960
+ "depth",
1961
+ "learnability",
1962
+ "flow",
1963
+ "execution",
1964
+ "expression"
1965
+ ],
1966
+ "summary": "Learnable depth as a mechanism — a low skill floor and a high skill ceiling, with the gap between them full of discoverable technique.",
1967
+ "use-when": "The lasting appeal is the player getting BETTER, not the character; you need to engineer a shallow entry and a tall ceiling.",
1968
+ "composes-with": [
1969
+ "system-progression",
1970
+ "system-difficulty-and-dda",
1971
+ "system-onboarding",
1972
+ "system-build-diversity",
1973
+ "system-grace"
1974
+ ],
1975
+ "anchors": [
1976
+ "anchor-tetris",
1977
+ "anchor-celeste",
1978
+ "anchor-balatro"
1979
+ ],
1980
+ "verify-with": "docs/FUN.md#2-skill-delta-proofs",
1981
+ "file": "design/30-systems/mastery-curve.md"
1982
+ },
1983
+ {
1984
+ "id": "system-meta-progression",
1985
+ "title": "Meta-Progression — Persistent Unlocks Between Runs",
1986
+ "kind": "system",
1987
+ "tags": [
1988
+ "meta-progression",
1989
+ "roguelite",
1990
+ "unlocks",
1991
+ "persistence",
1992
+ "power-creep",
1993
+ "always-earn",
1994
+ "runs"
1995
+ ],
1996
+ "summary": "The campaign under the runs — persistent unlocks that make a lost run still pay; the \"always earn something\" contract, and power-creep vs new options.",
1997
+ "use-when": "The game is run-based and you need each death to advance a longer arc, so failure feels like progress instead of a wiped slate.",
1998
+ "composes-with": [
1999
+ "system-progression",
2000
+ "system-skill-trees",
2001
+ "system-reward-schedules",
2002
+ "system-save-and-checkpoint",
2003
+ "system-session-structure"
2004
+ ],
2005
+ "anchors": [
2006
+ "anchor-hades",
2007
+ "anchor-dead-cells",
2008
+ "anchor-nuclear-throne"
2009
+ ],
2010
+ "verify-with": "docs/FUN.md#10-traditional-roguelike",
2011
+ "file": "design/30-systems/meta-progression.md"
2012
+ },
2013
+ {
2014
+ "id": "system-onboarding",
2015
+ "title": "Onboarding",
2016
+ "kind": "system",
2017
+ "tags": [
2018
+ "onboarding",
2019
+ "tutorial",
2020
+ "teach-by-doing",
2021
+ "first-ten-minutes",
2022
+ "hesitation",
2023
+ "teaching",
2024
+ "ramp"
2025
+ ],
2026
+ "summary": "Tutorialization by doing — teach one verb at a time in a safe space, and read hesitation data to find where players actually stall.",
2027
+ "use-when": "A new player must learn the game's verbs and goals without a wall of text or a boring tutorial.",
2028
+ "composes-with": [
2029
+ "system-difficulty-and-dda",
2030
+ "system-accessibility",
2031
+ "pattern-readability",
2032
+ "process-core-loop"
2033
+ ],
2034
+ "anchors": [
2035
+ "anchor-celeste",
2036
+ "anchor-into-the-breach"
2037
+ ],
2038
+ "verify-with": "docs/FUN.md#2-precision-platformer-celeste-like",
2039
+ "file": "design/30-systems/onboarding.md"
2040
+ },
2041
+ {
2042
+ "id": "system-procgen-design",
2043
+ "title": "Procedural Generation Design",
2044
+ "kind": "system",
2045
+ "tags": [
2046
+ "procgen",
2047
+ "seeds",
2048
+ "runs",
2049
+ "variance",
2050
+ "connectivity",
2051
+ "controlled-randomness",
2052
+ "generation",
2053
+ "replayability"
2054
+ ],
2055
+ "summary": "Runs, seeds, and variance as content — controlled randomness that always connects, proven before you tune a single number.",
2056
+ "use-when": "A design needs replayable, generated content (levels, dungeons, decks) instead of hand-authored maps.",
2057
+ "composes-with": [
2058
+ "system-session-structure",
2059
+ "system-encounter-design",
2060
+ "system-save-and-checkpoint",
2061
+ "genre-roguelike"
2062
+ ],
2063
+ "anchors": [
2064
+ "anchor-dead-cells",
2065
+ "anchor-slay-the-spire"
2066
+ ],
2067
+ "verify-with": "docs/FUN.md#10-traditional-roguelike",
2068
+ "file": "design/30-systems/procgen-design.md"
2069
+ },
2070
+ {
2071
+ "id": "system-progression",
2072
+ "title": "Progression — XP, Levels, the Power Curve",
2073
+ "kind": "system",
2074
+ "tags": [
2075
+ "progression",
2076
+ "xp",
2077
+ "levels",
2078
+ "power-curve",
2079
+ "pacing",
2080
+ "growth",
2081
+ "vertical",
2082
+ "horizontal"
2083
+ ],
2084
+ "summary": "Turning play into steadily-earned power; pacing the curve so growth never stalls and never trivialises the challenge it feeds.",
2085
+ "use-when": "The design promises the player gets stronger over time and you need to shape how fast, along which axes, and how it stays fun.",
2086
+ "composes-with": [
2087
+ "system-skill-trees",
2088
+ "system-economy",
2089
+ "system-reward-schedules",
2090
+ "system-mastery-curve",
2091
+ "system-difficulty-and-dda"
2092
+ ],
2093
+ "anchors": [
2094
+ "anchor-hades",
2095
+ "anchor-vampire-survivors",
2096
+ "anchor-dead-cells"
2097
+ ],
2098
+ "verify-with": "docs/FUN.md#14-incrementalidle",
2099
+ "file": "design/30-systems/progression.md"
2100
+ },
2101
+ {
2102
+ "id": "system-resource-loops",
2103
+ "title": "Resource Loops — Gather → Convert → Spend",
2104
+ "kind": "system",
2105
+ "tags": [
2106
+ "resource-loops",
2107
+ "gather",
2108
+ "convert",
2109
+ "spend",
2110
+ "bottleneck",
2111
+ "production",
2112
+ "pacing",
2113
+ "chains"
2114
+ ],
2115
+ "summary": "The gather→convert→spend cycle that structures effort; bottlenecks placed on purpose are the pacing, not a bug.",
2116
+ "use-when": "The game asks the player to turn raw inputs into refined outputs into results, and you need the chain to breathe rather than stall or trivialize.",
2117
+ "composes-with": [
2118
+ "system-economy",
2119
+ "system-crafting",
2120
+ "system-tech-tree",
2121
+ "system-progression"
2122
+ ],
2123
+ "anchors": [
2124
+ "anchor-factorio",
2125
+ "anchor-stardew-valley"
2126
+ ],
2127
+ "verify-with": "docs/FUN.md#14-incrementalidle",
2128
+ "file": "design/30-systems/resource-loops.md"
2129
+ },
2130
+ {
2131
+ "id": "system-reward-schedules",
2132
+ "title": "Reward Schedules — Drops, Chests & Ethical Compulsion",
2133
+ "kind": "system",
2134
+ "tags": [
2135
+ "rewards",
2136
+ "variable-ratio",
2137
+ "loot",
2138
+ "drops",
2139
+ "chests",
2140
+ "compulsion",
2141
+ "dark-patterns",
2142
+ "ethics"
2143
+ ],
2144
+ "summary": "How often and how surprisingly the game pays out; variable-ratio's grip, and the honest line between compelling and exploitative.",
2145
+ "use-when": "The design hands out loot, drops, or chests and you need the payout rhythm to feel exciting without tipping into manipulation.",
2146
+ "composes-with": [
2147
+ "system-economy",
2148
+ "system-collectibles",
2149
+ "system-meta-progression",
2150
+ "system-progression",
2151
+ "system-procgen-design"
2152
+ ],
2153
+ "anchors": [
2154
+ "anchor-vampire-survivors",
2155
+ "anchor-hades",
2156
+ "anchor-peggle"
2157
+ ],
2158
+ "verify-with": "docs/FUN.md#19-physics-arcade-breakoutpeggle",
2159
+ "file": "design/30-systems/reward-schedules.md"
2160
+ },
2161
+ {
2162
+ "id": "system-save-and-checkpoint",
2163
+ "title": "Save & Checkpoint",
2164
+ "kind": "system",
2165
+ "tags": [
2166
+ "save",
2167
+ "checkpoint",
2168
+ "retry",
2169
+ "respect-time",
2170
+ "snapshot",
2171
+ "hash",
2172
+ "round-trip",
2173
+ "resume"
2174
+ ],
2175
+ "summary": "Save, checkpoint, and retry that respect the player's time — built free on Hayao's pure-state snapshot/hash round-trip.",
2176
+ "use-when": "The player can lose progress, needs to stop and resume, or should retry a failure without ceremony.",
2177
+ "composes-with": [
2178
+ "system-session-structure",
2179
+ "system-meta-progression",
2180
+ "system-grace",
2181
+ "pattern-anti-frustration"
2182
+ ],
2183
+ "anchors": [
2184
+ "anchor-celeste",
2185
+ "anchor-hades"
2186
+ ],
2187
+ "verify-with": "docs/CONVENTIONS.md",
2188
+ "file": "design/30-systems/save-and-checkpoint.md"
2189
+ },
2190
+ {
2191
+ "id": "system-session-structure",
2192
+ "title": "Session Structure",
2193
+ "kind": "system",
2194
+ "tags": [
2195
+ "session",
2196
+ "run",
2197
+ "campaign",
2198
+ "level",
2199
+ "world",
2200
+ "pacing",
2201
+ "length",
2202
+ "structure",
2203
+ "container"
2204
+ ],
2205
+ "summary": "The nesting of play — run / campaign / level / world — and how session length and shape set the game's rhythm and stakes.",
2206
+ "use-when": "You need to decide how long a sitting is, what a \"run\" contains, and how sessions nest into a longer arc.",
2207
+ "composes-with": [
2208
+ "system-procgen-design",
2209
+ "system-meta-progression",
2210
+ "system-save-and-checkpoint",
2211
+ "pattern-pacing-and-tension"
2212
+ ],
2213
+ "anchors": [
2214
+ "anchor-hades",
2215
+ "anchor-slay-the-spire"
2216
+ ],
2217
+ "verify-with": "docs/FUN.md#14-incrementalidle",
2218
+ "file": "design/30-systems/session-structure.md"
2219
+ },
2220
+ {
2221
+ "id": "system-skill-trees",
2222
+ "title": "Skill Trees — Branching Unlocks & Builds",
2223
+ "kind": "system",
2224
+ "tags": [
2225
+ "skill-tree",
2226
+ "builds",
2227
+ "unlocks",
2228
+ "branching",
2229
+ "exclusivity",
2230
+ "respec",
2231
+ "specialization"
2232
+ ],
2233
+ "summary": "Branching unlock graphs that turn flat power into a build; meaningful exclusivity is what makes the choice a choice, and respec is its grace.",
2234
+ "use-when": "Progression should let the player CHOOSE a shape — a build, a specialization — not just accumulate the same power everyone gets.",
2235
+ "composes-with": [
2236
+ "system-progression",
2237
+ "system-build-diversity",
2238
+ "system-tech-tree",
2239
+ "system-economy",
2240
+ "system-collectibles"
2241
+ ],
2242
+ "anchors": [
2243
+ "anchor-dead-cells",
2244
+ "anchor-slay-the-spire"
2245
+ ],
2246
+ "verify-with": "docs/FUN.md#2-skill-delta-proofs",
2247
+ "file": "design/30-systems/skill-trees.md"
2248
+ },
2249
+ {
2250
+ "id": "system-status-effects",
2251
+ "title": "Status Effects — damage and change over time",
2252
+ "kind": "system",
2253
+ "tags": [
2254
+ "status",
2255
+ "dot",
2256
+ "buff",
2257
+ "debuff",
2258
+ "stacking",
2259
+ "poison",
2260
+ "burn",
2261
+ "legibility"
2262
+ ],
2263
+ "summary": "DoT, buffs, and debuffs as first-class state — with stacking rules that are legible, bounded, and interact with builds instead of just piling up.",
2264
+ "use-when": "You want conditions (poison, burn, slow, shield, rage) that persist across turns/seconds and interact with the rest of combat.",
2265
+ "composes-with": [
2266
+ "system-combat-model",
2267
+ "system-counter-systems",
2268
+ "system-build-diversity",
2269
+ "system-telegraphs"
2270
+ ],
2271
+ "anchors": [
2272
+ "anchor-slay-the-spire",
2273
+ "anchor-hades"
2274
+ ],
2275
+ "verify-with": "docs/FUN.md#11-roguelike-deckbuilder",
2276
+ "file": "design/30-systems/status-effects.md"
2277
+ },
2278
+ {
2279
+ "id": "system-tech-tree",
2280
+ "title": "Tech Tree — Research Gating & the Ramp of Options",
2281
+ "kind": "system",
2282
+ "tags": [
2283
+ "tech-tree",
2284
+ "research",
2285
+ "gating",
2286
+ "branch-exclusivity",
2287
+ "strategy",
2288
+ "unlocks",
2289
+ "ramp"
2290
+ ],
2291
+ "summary": "Research-gated unlocks at the strategy scale; branch exclusivity and a widening ramp of options that shape a whole playthrough's arc.",
2292
+ "use-when": "The game unlocks strategic capabilities (units, buildings, abilities) over a session and you need the order and exclusivity of those unlocks to matter.",
2293
+ "composes-with": [
2294
+ "system-skill-trees",
2295
+ "system-resource-loops",
2296
+ "system-economy",
2297
+ "system-faction-asymmetry",
2298
+ "system-progression"
2299
+ ],
2300
+ "anchors": [
2301
+ "anchor-age-of-empires",
2302
+ "anchor-civilization",
2303
+ "anchor-factorio"
2304
+ ],
2305
+ "verify-with": "docs/FUN.md#9-rts-lite",
2306
+ "file": "design/30-systems/tech-tree.md"
2307
+ },
2308
+ {
2309
+ "id": "system-telegraphs",
2310
+ "title": "Telegraphs — readable threat",
2311
+ "kind": "system",
2312
+ "tags": [
2313
+ "telegraph",
2314
+ "tells",
2315
+ "windup",
2316
+ "readability",
2317
+ "reaction",
2318
+ "threat",
2319
+ "combat"
2320
+ ],
2321
+ "summary": "The wind-up that makes a threat readable — every hitbox announces itself long enough to react, and the tell is stored as a direction, not a guess.",
2322
+ "use-when": "Any threat can hurt the player in real time or resolve on a turn; you need the danger to be reactable, not a surprise.",
2323
+ "composes-with": [
2324
+ "system-combat-model",
2325
+ "system-boss-design",
2326
+ "system-enemy-ai",
2327
+ "system-grace",
2328
+ "pattern-readability"
2329
+ ],
2330
+ "anchors": [
2331
+ "anchor-into-the-breach",
2332
+ "anchor-shadow-of-mordor"
2333
+ ],
2334
+ "verify-with": "docs/FUN.md#4-top-down-action-adventure-zelda-like",
2335
+ "file": "design/30-systems/telegraphs.md"
2336
+ },
2337
+ {
2338
+ "id": "system-unit-rosters",
2339
+ "title": "Unit Rosters — a legible roster",
2340
+ "kind": "system",
2341
+ "tags": [
2342
+ "units",
2343
+ "roster",
2344
+ "roles",
2345
+ "tiers",
2346
+ "diversity",
2347
+ "rts",
2348
+ "redundancy"
2349
+ ],
2350
+ "summary": "A roster of units whose roles are legible and distinct — every unit earns its slot, overlap is intentional, and redundancy is culled.",
2351
+ "use-when": "You have a set of units/troops/pieces the player commands and need each to have a clear, non-redundant job.",
2352
+ "composes-with": [
2353
+ "system-counter-systems",
2354
+ "system-faction-asymmetry",
2355
+ "system-enemy-archetypes",
2356
+ "system-combat-model",
2357
+ "system-tech-tree"
2358
+ ],
2359
+ "anchors": [
2360
+ "anchor-starcraft",
2361
+ "anchor-age-of-empires"
2362
+ ],
2363
+ "verify-with": "docs/FUN.md#9-rts-lite",
2364
+ "file": "design/30-systems/unit-rosters.md"
2365
+ },
2366
+ {
2367
+ "id": "world-aesthetic-direction",
2368
+ "title": "Aesthetic Direction — briefing the Kentō woodblock look",
2369
+ "kind": "worldbuilding",
2370
+ "tags": [
2371
+ "art-direction",
2372
+ "palette",
2373
+ "kento",
2374
+ "woodblock",
2375
+ "readability",
2376
+ "contrast",
2377
+ "look",
2378
+ "judge"
2379
+ ],
2380
+ "summary": "Art direction — the Kentō woodblock palette and how to brief a look that passes the readability + JUDGE bars (findable avatar, depth, one-world colour).",
2381
+ "use-when": "You need to turn a theme into a concrete visual brief — palette, contrast, depth, silhouette — that survives the vision judge.",
2382
+ "composes-with": [
2383
+ "world-theme-vectors",
2384
+ "world-faction-identity",
2385
+ "world-naming-and-tone"
2386
+ ],
2387
+ "verify-with": "docs/JUDGE.md",
2388
+ "file": "design/40-worldbuilding/aesthetic-direction.md"
2389
+ },
2390
+ {
2391
+ "id": "world-faction-identity",
2392
+ "title": "Faction Identity — making sides feel distinct in fiction",
2393
+ "kind": "worldbuilding",
2394
+ "tags": [
2395
+ "faction",
2396
+ "identity",
2397
+ "silhouette",
2398
+ "motif",
2399
+ "colour",
2400
+ "values",
2401
+ "fiction",
2402
+ "asymmetry"
2403
+ ],
2404
+ "summary": "Making factions feel distinct in FICTION — silhouette, values, colour, motif; the fiction companion to system-faction-asymmetry's mechanical difference.",
2405
+ "use-when": "Your design has two or more sides/factions and you need them to read as different worlds at a glance, not palette-swaps.",
2406
+ "composes-with": [
2407
+ "world-aesthetic-direction",
2408
+ "world-naming-and-tone",
2409
+ "world-theme-vectors"
2410
+ ],
2411
+ "anchors": [
2412
+ "anchor-starcraft",
2413
+ "anchor-shadow-of-mordor"
2414
+ ],
2415
+ "verify-with": "docs/JUDGE.md",
2416
+ "file": "design/40-worldbuilding/faction-identity.md"
2417
+ },
2418
+ {
2419
+ "id": "world-naming-and-tone",
2420
+ "title": "Naming & Tone — the Kentō house restraint",
2421
+ "kind": "worldbuilding",
2422
+ "tags": [
2423
+ "naming",
2424
+ "tone",
2425
+ "voice",
2426
+ "register",
2427
+ "restraint",
2428
+ "copy",
2429
+ "evocative",
2430
+ "ux-text"
2431
+ ],
2432
+ "summary": "Names, voice, and register — the Kentō house restraint of one-word evocative titles (lanternway, rootward, tarnholm, kintsugi) and text that trusts the player.",
2433
+ "use-when": "You need to name the game, its places, factions, and mechanics — and set the voice for the little text a small game shows.",
2434
+ "composes-with": [
2435
+ "world-worldbuilding-scaffold",
2436
+ "world-faction-identity",
2437
+ "world-narrative-delivery"
2438
+ ],
2439
+ "verify-with": "none",
2440
+ "file": "design/40-worldbuilding/naming-and-tone.md"
2441
+ },
2442
+ {
2443
+ "id": "world-narrative-delivery",
2444
+ "title": "Narrative Delivery — story with little text",
2445
+ "kind": "worldbuilding",
2446
+ "tags": [
2447
+ "narrative",
2448
+ "environmental",
2449
+ "systemic",
2450
+ "embedded",
2451
+ "show-dont-tell",
2452
+ "story",
2453
+ "diegetic"
2454
+ ],
2455
+ "summary": "Environmental / systemic / embedded storytelling with LITTLE text — show don't tell; let the systems author the story in a small deterministic game.",
2456
+ "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.",
2457
+ "composes-with": [
2458
+ "world-worldbuilding-scaffold",
2459
+ "world-naming-and-tone",
2460
+ "world-aesthetic-direction"
2461
+ ],
2462
+ "anchors": [
2463
+ "anchor-shadow-of-mordor",
2464
+ "anchor-outer-wilds",
2465
+ "anchor-return-of-the-obra-dinn"
2466
+ ],
2467
+ "verify-with": "none",
2468
+ "file": "design/40-worldbuilding/narrative-delivery.md"
2469
+ },
2470
+ {
2471
+ "id": "world-theme-vectors",
2472
+ "title": "Theme Vectors — choosing a setting that recolours the mechanics",
2473
+ "kind": "worldbuilding",
2474
+ "tags": [
2475
+ "theme",
2476
+ "setting",
2477
+ "fiction",
2478
+ "twist",
2479
+ "recolour",
2480
+ "fantasy",
2481
+ "resonance"
2482
+ ],
2483
+ "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.",
2484
+ "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.",
2485
+ "composes-with": [
2486
+ "world-worldbuilding-scaffold",
2487
+ "world-aesthetic-direction",
2488
+ "world-narrative-delivery"
2489
+ ],
2490
+ "verify-with": "none",
2491
+ "file": "design/40-worldbuilding/theme-vectors.md"
2492
+ },
2493
+ {
2494
+ "id": "world-worldbuilding-scaffold",
2495
+ "title": "Worldbuilding Scaffold — the minimum viable world",
2496
+ "kind": "worldbuilding",
2497
+ "tags": [
2498
+ "lore",
2499
+ "world",
2500
+ "setting",
2501
+ "stakes",
2502
+ "fantasy",
2503
+ "rules",
2504
+ "coherence",
2505
+ "scaffold"
2506
+ ],
2507
+ "summary": "From a setting to a coherent world with rules, stakes, and a fantasy — the minimum viable lore a small deterministic game actually needs.",
2508
+ "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.",
2509
+ "composes-with": [
2510
+ "world-theme-vectors",
2511
+ "world-faction-identity",
2512
+ "world-narrative-delivery",
2513
+ "world-naming-and-tone"
2514
+ ],
2515
+ "verify-with": "none",
2516
+ "file": "design/40-worldbuilding/worldbuilding-scaffold.md"
2517
+ },
2518
+ {
2519
+ "id": "pattern-anti-frustration",
2520
+ "title": "Anti-Frustration",
2521
+ "kind": "pattern",
2522
+ "tags": [
2523
+ "forgiveness",
2524
+ "grace",
2525
+ "anti-frustration",
2526
+ "respect",
2527
+ "retry",
2528
+ "mercy",
2529
+ "difficulty",
2530
+ "humane"
2531
+ ],
2532
+ "summary": "Punish mistakes without punishing the player — grace, instant retry, undo, and respecting time keep hard fair.",
2533
+ "use-when": "A game is hard or long and you must separate \"difficult\" from \"tedious/unfair\"; anywhere a failure costs the player time.",
2534
+ "composes-with": [
2535
+ "pattern-mastery-and-flow",
2536
+ "pattern-juice-choreography",
2537
+ "system-grace",
2538
+ "system-save-and-checkpoint"
2539
+ ],
2540
+ "verify-with": "docs/FUN.md#part-1-—-universal-laws",
2541
+ "file": "design/50-patterns/anti-frustration.md"
2542
+ },
2543
+ {
2544
+ "id": "pattern-emergence",
2545
+ "title": "Emergence",
2546
+ "kind": "pattern",
2547
+ "tags": [
2548
+ "emergence",
2549
+ "second-order",
2550
+ "systemic",
2551
+ "interaction",
2552
+ "depth",
2553
+ "combinatorics",
2554
+ "rules",
2555
+ "synergy"
2556
+ ],
2557
+ "summary": "Depth from few pieces — design rules that interact, not content that stacks, so the game generates situations you never authored.",
2558
+ "use-when": "You want combinatorial depth without infinite content; deciding between more rules or more interactions between rules.",
2559
+ "composes-with": [
2560
+ "pattern-feedback-loops",
2561
+ "pattern-risk-reward",
2562
+ "system-emergent-systems",
2563
+ "system-build-diversity"
2564
+ ],
2565
+ "verify-with": "docs/FUN.md#12-·-turn-based-tactics-into-the-breach-like",
2566
+ "file": "design/50-patterns/emergence.md"
2567
+ },
2568
+ {
2569
+ "id": "pattern-feedback-loops",
2570
+ "title": "Feedback Loops",
2571
+ "kind": "pattern",
2572
+ "tags": [
2573
+ "feedback",
2574
+ "snowball",
2575
+ "comeback",
2576
+ "runaway",
2577
+ "balance",
2578
+ "positive-loop",
2579
+ "negative-loop",
2580
+ "catch-up"
2581
+ ],
2582
+ "summary": "Positive loops snowball, negative loops correct — design which one dominates so leads stay tense, not decided.",
2583
+ "use-when": "A lead is being built (economy, kills, board control) and you must decide whether it should compound or self-limit.",
2584
+ "composes-with": [
2585
+ "pattern-risk-reward",
2586
+ "pattern-pacing-and-tension",
2587
+ "system-economy",
2588
+ "system-difficulty-and-dda"
2589
+ ],
2590
+ "verify-with": "docs/FUN.md#part-1-—-universal-laws",
2591
+ "file": "design/50-patterns/feedback-loops.md"
2592
+ },
2593
+ {
2594
+ "id": "pattern-juice-choreography",
2595
+ "title": "Juice as Choreography",
2596
+ "kind": "pattern",
2597
+ "tags": [
2598
+ "juice",
2599
+ "feel",
2600
+ "feedback",
2601
+ "choreography",
2602
+ "particles",
2603
+ "shake",
2604
+ "cosmetic",
2605
+ "two-senses",
2606
+ "game-feel"
2607
+ ],
2608
+ "summary": "The sim resolves instantly and returns a choreography script; the view replays it — every event answers on ≥2 senses.",
2609
+ "use-when": "Wiring feedback (impact, pickup, death) or deciding what belongs in the sim vs the view.",
2610
+ "composes-with": [
2611
+ "pattern-readability",
2612
+ "pattern-anti-frustration",
2613
+ "pattern-pacing-and-tension",
2614
+ "system-combat-model"
2615
+ ],
2616
+ "verify-with": "docs/JUICE.md#part-3-—-make-the-feel-checkable-channel-4-gates",
2617
+ "file": "design/50-patterns/juice-choreography.md"
2618
+ },
2619
+ {
2620
+ "id": "pattern-mastery-and-flow",
2621
+ "title": "Mastery & Flow",
2622
+ "kind": "pattern",
2623
+ "tags": [
2624
+ "flow",
2625
+ "mastery",
2626
+ "challenge",
2627
+ "skill",
2628
+ "difficulty",
2629
+ "engagement",
2630
+ "learning-curve",
2631
+ "skill-delta"
2632
+ ],
2633
+ "summary": "Keep challenge riding just above current skill — the flow channel — and prove it with the skill-delta gap.",
2634
+ "use-when": "Setting difficulty, ramp, or the depth ceiling; deciding whether skill actually changes outcomes.",
2635
+ "composes-with": [
2636
+ "pattern-feedback-loops",
2637
+ "pattern-pacing-and-tension",
2638
+ "system-mastery-curve",
2639
+ "system-difficulty-and-dda"
2640
+ ],
2641
+ "verify-with": "docs/FUN.md#part-1-—-universal-laws",
2642
+ "file": "design/50-patterns/mastery-and-flow.md"
2643
+ },
2644
+ {
2645
+ "id": "pattern-pacing-and-tension",
2646
+ "title": "Pacing & Tension",
2647
+ "kind": "pattern",
2648
+ "tags": [
2649
+ "pacing",
2650
+ "tension",
2651
+ "rhythm",
2652
+ "peaks",
2653
+ "valleys",
2654
+ "breather",
2655
+ "session",
2656
+ "curve",
2657
+ "escalation"
2658
+ ],
2659
+ "summary": "Tension is a curve, not a constant — alternate peaks and breathers so the finale reads as a peak, not another wave.",
2660
+ "use-when": "Shaping a session/level/wave/run; deciding difficulty and intensity over time, not just at one moment.",
2661
+ "composes-with": [
2662
+ "pattern-feedback-loops",
2663
+ "pattern-mastery-and-flow",
2664
+ "pattern-risk-reward",
2665
+ "system-session-structure"
2666
+ ],
2667
+ "verify-with": "docs/FUN.md#8-·-tower-defense",
2668
+ "file": "design/50-patterns/pacing-and-tension.md"
2669
+ },
2670
+ {
2671
+ "id": "pattern-readability",
2672
+ "title": "Readability",
2673
+ "kind": "pattern",
2674
+ "tags": [
2675
+ "readability",
2676
+ "salience",
2677
+ "signposting",
2678
+ "affordance",
2679
+ "contrast",
2680
+ "clarity",
2681
+ "legibility",
2682
+ "ui"
2683
+ ],
2684
+ "summary": "The player must instantly find the avatar, read the threat, and see the way — salience, signposting, and affordances.",
2685
+ "use-when": "Anywhere the player might lose the avatar, misread a threat, or miss a path/interaction; setting the visual hierarchy.",
2686
+ "composes-with": [
2687
+ "pattern-juice-choreography",
2688
+ "pattern-emergence",
2689
+ "system-telegraphs",
2690
+ "system-onboarding"
2691
+ ],
2692
+ "verify-with": "docs/JUDGE.md#the-rubric",
2693
+ "file": "design/50-patterns/readability.md"
2694
+ },
2695
+ {
2696
+ "id": "pattern-risk-reward",
2697
+ "title": "Risk / Reward",
2698
+ "kind": "pattern",
2699
+ "tags": [
2700
+ "risk",
2701
+ "reward",
2702
+ "push-your-luck",
2703
+ "tradeoff",
2704
+ "double-edged",
2705
+ "gambling",
2706
+ "tension",
2707
+ "choice"
2708
+ ],
2709
+ "summary": "A choice with teeth — every reward priced in real risk, every option double-edged, so decisions cost something.",
2710
+ "use-when": "You're designing a decision, upgrade, or resource spend and it feels like a no-brainer (strictly-better = no choice).",
2711
+ "composes-with": [
2712
+ "pattern-feedback-loops",
2713
+ "pattern-pacing-and-tension",
2714
+ "system-reward-schedules",
2715
+ "system-build-diversity"
2716
+ ],
2717
+ "verify-with": "docs/FUN.md#21-·-narrative-decisions-reigns-like",
2718
+ "file": "design/50-patterns/risk-reward.md"
2719
+ }
2720
+ ]