hayao 0.4.1 → 0.4.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (110) hide show
  1. package/design/00-process/README.md +49 -0
  2. package/design/00-process/composition.md +148 -0
  3. package/design/00-process/core-loop.md +146 -0
  4. package/design/00-process/intent-to-brief.md +128 -0
  5. package/design/00-process/pillars.md +139 -0
  6. package/design/00-process/refine-and-handoff.md +156 -0
  7. package/design/00-process/the-twist.md +108 -0
  8. package/design/10-anchors/README.md +99 -0
  9. package/design/10-anchors/age-of-empires.md +103 -0
  10. package/design/10-anchors/baba-is-you.md +127 -0
  11. package/design/10-anchors/balatro.md +132 -0
  12. package/design/10-anchors/celeste.md +136 -0
  13. package/design/10-anchors/civilization.md +101 -0
  14. package/design/10-anchors/dead-cells.md +125 -0
  15. package/design/10-anchors/factorio.md +100 -0
  16. package/design/10-anchors/hades.md +127 -0
  17. package/design/10-anchors/into-the-breach.md +125 -0
  18. package/design/10-anchors/it-takes-two.md +104 -0
  19. package/design/10-anchors/loop-hero.md +131 -0
  20. package/design/10-anchors/nuclear-throne.md +130 -0
  21. package/design/10-anchors/outer-wilds.md +107 -0
  22. package/design/10-anchors/overcooked.md +102 -0
  23. package/design/10-anchors/peggle.md +133 -0
  24. package/design/10-anchors/reigns.md +99 -0
  25. package/design/10-anchors/return-of-the-obra-dinn.md +108 -0
  26. package/design/10-anchors/rimworld.md +101 -0
  27. package/design/10-anchors/shadow-of-mordor.md +106 -0
  28. package/design/10-anchors/slay-the-spire.md +127 -0
  29. package/design/10-anchors/starcraft.md +98 -0
  30. package/design/10-anchors/stardew-valley.md +103 -0
  31. package/design/10-anchors/tetris.md +122 -0
  32. package/design/10-anchors/vampire-survivors.md +122 -0
  33. package/design/20-genres/README.md +62 -0
  34. package/design/20-genres/action-adventure.md +126 -0
  35. package/design/20-genres/auto-battler.md +121 -0
  36. package/design/20-genres/bullet-hell.md +123 -0
  37. package/design/20-genres/city-builder.md +124 -0
  38. package/design/20-genres/coop-chaos.md +124 -0
  39. package/design/20-genres/deckbuilder.md +122 -0
  40. package/design/20-genres/exploration.md +131 -0
  41. package/design/20-genres/farming-sim.md +122 -0
  42. package/design/20-genres/grid-puzzle.md +126 -0
  43. package/design/20-genres/horde-survival.md +128 -0
  44. package/design/20-genres/incremental.md +120 -0
  45. package/design/20-genres/match3.md +120 -0
  46. package/design/20-genres/metroidvania.md +132 -0
  47. package/design/20-genres/narrative-decisions.md +122 -0
  48. package/design/20-genres/physics-arcade.md +124 -0
  49. package/design/20-genres/precision-platformer.md +127 -0
  50. package/design/20-genres/racing.md +126 -0
  51. package/design/20-genres/rhythm.md +125 -0
  52. package/design/20-genres/roguelike.md +122 -0
  53. package/design/20-genres/rts.md +169 -0
  54. package/design/20-genres/stealth.md +125 -0
  55. package/design/20-genres/survival-horror.md +124 -0
  56. package/design/20-genres/tactics.md +123 -0
  57. package/design/20-genres/tower-defense.md +120 -0
  58. package/design/30-systems/README.md +69 -0
  59. package/design/30-systems/accessibility.md +110 -0
  60. package/design/30-systems/boss-design.md +126 -0
  61. package/design/30-systems/build-diversity.md +120 -0
  62. package/design/30-systems/collectibles.md +108 -0
  63. package/design/30-systems/combat-model.md +113 -0
  64. package/design/30-systems/coop-and-competition.md +118 -0
  65. package/design/30-systems/counter-systems.md +115 -0
  66. package/design/30-systems/crafting.md +115 -0
  67. package/design/30-systems/difficulty-and-dda.md +114 -0
  68. package/design/30-systems/economy.md +117 -0
  69. package/design/30-systems/emergent-systems.md +114 -0
  70. package/design/30-systems/encounter-design.md +107 -0
  71. package/design/30-systems/enemy-ai.md +121 -0
  72. package/design/30-systems/enemy-archetypes.md +117 -0
  73. package/design/30-systems/faction-asymmetry.md +144 -0
  74. package/design/30-systems/grace.md +124 -0
  75. package/design/30-systems/mastery-curve.md +116 -0
  76. package/design/30-systems/meta-progression.md +114 -0
  77. package/design/30-systems/onboarding.md +115 -0
  78. package/design/30-systems/procgen-design.md +118 -0
  79. package/design/30-systems/progression.md +120 -0
  80. package/design/30-systems/resource-loops.md +112 -0
  81. package/design/30-systems/reward-schedules.md +124 -0
  82. package/design/30-systems/save-and-checkpoint.md +113 -0
  83. package/design/30-systems/session-structure.md +113 -0
  84. package/design/30-systems/skill-trees.md +111 -0
  85. package/design/30-systems/status-effects.md +111 -0
  86. package/design/30-systems/tech-tree.md +112 -0
  87. package/design/30-systems/telegraphs.md +106 -0
  88. package/design/30-systems/unit-rosters.md +123 -0
  89. package/design/40-worldbuilding/README.md +49 -0
  90. package/design/40-worldbuilding/aesthetic-direction.md +155 -0
  91. package/design/40-worldbuilding/faction-identity.md +136 -0
  92. package/design/40-worldbuilding/naming-and-tone.md +130 -0
  93. package/design/40-worldbuilding/narrative-delivery.md +129 -0
  94. package/design/40-worldbuilding/theme-vectors.md +134 -0
  95. package/design/40-worldbuilding/worldbuilding-scaffold.md +132 -0
  96. package/design/50-patterns/README.md +54 -0
  97. package/design/50-patterns/anti-frustration.md +121 -0
  98. package/design/50-patterns/emergence.md +121 -0
  99. package/design/50-patterns/feedback-loops.md +121 -0
  100. package/design/50-patterns/juice-choreography.md +124 -0
  101. package/design/50-patterns/mastery-and-flow.md +121 -0
  102. package/design/50-patterns/pacing-and-tension.md +120 -0
  103. package/design/50-patterns/readability.md +121 -0
  104. package/design/50-patterns/risk-reward.md +120 -0
  105. package/design/CONTRIBUTING.md +183 -0
  106. package/design/INDEX.md +133 -0
  107. package/design/README.md +86 -0
  108. package/design/_TEMPLATE.md +69 -0
  109. package/design/index.json +2720 -0
  110. package/package.json +2 -1
@@ -0,0 +1,156 @@
1
+ ---
2
+ id: process-refine-and-handoff
3
+ title: Refine & Handoff — The Verification Contract
4
+ kind: process
5
+ tags: [handoff, verification-contract, done, spec, proof, seam, checklist, assertions]
6
+ 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.
7
+ 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.
8
+ composes-with: [process-composition, process-core-loop, process-pillars, process-the-twist]
9
+ verify-with: docs/VERIFICATION.md
10
+ ---
11
+
12
+ # Refine & Handoff — The Verification Contract
13
+
14
+ **What it is.** The **last** Codex step and the **seam** to the proof playbook.
15
+ You convert the finished design into a *verification contract*: the concrete
16
+ assertions that must hold for the game to be what the pillars promised. The Codex
17
+ generates; from here on, the game is *proven*, not designed.
18
+
19
+ **Why it matters.** A design isn't done when it's imagined — it's done when it
20
+ **names its proofs**. The contract is the bridge: FUN.md, JUICE.md, JUDGE.md, and
21
+ CONVENTIONS pick it up and run it. Hand off a design with no contract and the
22
+ proof playbook has nothing to gate against.
23
+
24
+ ## The step
25
+
26
+ Composed design → a verification contract + a clean handoff. You are not writing
27
+ tests here (that's the build). You are declaring *what would have to be true* — the
28
+ assertions the build must satisfy — and routing each to its channel.
29
+
30
+ ## "Designed enough to build"
31
+
32
+ The definition of done for the Codex. All must be true:
33
+
34
+ - [ ] **One "X but Y" hook** survives as a store sentence ([[process-the-twist]]).
35
+ - [ ] **Exactly three pillars**, each with a testable clause ([[process-pillars]]).
36
+ - [ ] **A named moment verb**, prototyped or prototypable in a `sandboxes/*-lab`.
37
+ - [ ] **The loop stack** filled: moment/encounter/session/meta each named
38
+ ([[process-core-loop]]).
39
+ - [ ] **A system list**, each `[[system-*]]` justified by a pillar
40
+ ([[process-composition]]).
41
+ - [ ] **Parent genres named** with their FUN.md sections — the verify union.
42
+ - [ ] **The signature mechanic's consequence traced** through ≥ 3 systems.
43
+ - [ ] **A verification contract** (below) — every pillar has a proof, every parent
44
+ genre its verify pattern, every feel claim a gate.
45
+
46
+ If any box is empty, refine — don't hand off. A gap here becomes an unverifiable
47
+ mess downstream.
48
+
49
+ ## The verification contract
50
+
51
+ For each design claim, name the assertion and route it to a channel. Do **not**
52
+ write the assertion's recipe — [docs/VERIFICATION.md](../../docs/VERIFICATION.md)
53
+ owns that. You name *what* and *where*; it owns *how*.
54
+
55
+ | Design claim (from…) | Becomes the assertion… | Channel / doc |
56
+ |---|---|---|
57
+ | Pillar 1's testable clause | a probe/skill-delta the clause maps to | [FUN.md](../../docs/FUN.md) law 2, Ch. 1a |
58
+ | "The intended strategy beats null play" | `smartScore > nullScore * K` | FUN.md law 2 |
59
+ | A derived envelope (jump gap, season length, fuel budget) | a stated inequality asserted vs. config | FUN.md law 3, Ch. 3 |
60
+ | Each parent genre in the blend | that genre's FUN.md §N verify pattern | FUN.md Part 2 (union — all parents) |
61
+ | Puzzle/turn-based rules | every level solver-provable | [VERIFICATION.md](../../docs/VERIFICATION.md) Ch. 1b |
62
+ | "Same seed → same game" | golden hash + snapshot round-trip | Ch. 1c/1d |
63
+ | Every feel/juice claim ("responsive", "impactful") | a `FeedbackContract` + feel gate | [JUICE.md](../../docs/JUICE.md), Ch. 4 |
64
+ | Pacing ("breathers", "peak finale") | a feel probe over the timeline | Ch. 3 |
65
+ | "Reads at a glance" / the look | the headless SVG judged on palette/legibility | [JUDGE.md](../../docs/JUDGE.md), Ch. 2/5 |
66
+
67
+ The contract is done when **every pillar traces to at least one row** and **no
68
+ parent genre's verify pattern is missing**.
69
+
70
+ ## How to run it
71
+
72
+ 1. **Walk the pillars.** For each of the three, write the one assertion that
73
+ proves its testable clause. A pillar with no proof is a pillar you can't keep.
74
+ 2. **Union the verify patterns.** From [[process-composition]], list each parent
75
+ genre and copy in its FUN.md §N verify line. All of them (the blend law).
76
+ 3. **Extract the inequalities.** Every derived number (envelope, calendar, fuel,
77
+ coverage, payback) is a law-3 inequality — state it as a comment-shaped claim.
78
+ 4. **Declare the feedback contract.** Every feel adjective from the brief becomes a
79
+ `FeedbackContract` entry + a Channel 4 gate. Design the *event*; JUICE proves it.
80
+ 5. **Name the null strategy.** The do-nothing/never-draft/undefended run that must
81
+ *lose* — the cheapest and most important scenario (FUN.md law 4).
82
+ 6. **Route the look.** State what the headless screenshot must show (bright avatar,
83
+ palette, legible layout) for JUDGE to pass.
84
+ 7. **Hand off.** The contract *is* the spec. Per FUN.md law 1, *the verify suite is
85
+ the design doc* — you've now written its assertions, first.
86
+
87
+ ## The explicit handoff
88
+
89
+ Where each concern goes, and the doc that owns it from here:
90
+
91
+ | Concern | Handed to | Owns |
92
+ |---|---|---|
93
+ | Mechanical truth, skill-delta, inequalities, solver, determinism | **[FUN.md](../../docs/FUN.md)** + [VERIFICATION.md](../../docs/VERIFICATION.md) Ch. 1/3 | Is it correct and beatable? |
94
+ | Feel, feedback contract, shake/hit-stop envelopes | **[JUICE.md](../../docs/JUICE.md)** + Ch. 4 | Does it feel professional? |
95
+ | Looks — palette, layout, legibility | **[JUDGE.md](../../docs/JUDGE.md)** + Ch. 2/5 | Does it look shipped, not debug? |
96
+ | State/view split, `@hayao` imports, cosmetic rule, determinism hygiene | **[CONVENTIONS.md](../../docs/CONVENTIONS.md)** | Is it built the Hayao way? |
97
+
98
+ After handoff, the build runs `npm run check`, `npm test`, `npm run verify`, and
99
+ `npm run judge` — and the design stands or falls on the contract you wrote. Studio
100
+ ([Hayao Studio](../../docs/STUDIO.md); `runStudio`) then closes the human-feel loop.
101
+
102
+ ## Worked example
103
+
104
+ **Design:** the drafted-tower-defense from [[process-composition]]. Pillars:
105
+ (1) *build decisions matter*, (2) *drafts with teeth*, (3) *the range ring is UI*.
106
+
107
+ **Contract:**
108
+
109
+ - **Pillar 1** → mixed drafted build survives 10/10; mono-draft (bigger budget)
110
+ fails. *(FUN.md §8, Ch. 1a)*
111
+ - **Pillar 2** → same pilot, never-drafting loses by a margin. *(FUN.md §11
112
+ draft-delta — the grafted parent's pattern)*
113
+ - **Pillar 3** → the range ring renders; headless SVG shows coverage legibly.
114
+ *(JUDGE, Ch. 2)*
115
+ - **Blend union:** §8 (coverage chord, wave-curve breathes, counter duels both
116
+ ways) **and** §11 (win-rate window, draft-delta, intent audit). Both, in full.
117
+ - **Inequality:** `range × distanceToLane ≥ minFireChord` per drafted tower, per
118
+ lane — asserted vs. actual map geometry.
119
+ - **Feedback contract:** `place`, `kill`, `leak` each answer on ≥ 2 senses; shake
120
+ ≤ envelope. *(JUICE Ch. 4)*
121
+ - **Null:** bare-lane run falls early. *(FUN.md law 4)*
122
+
123
+ Every pillar has a row; both parents' patterns are present; the seam (drafted
124
+ tower × coverage) has its own proof. **Designed enough to build.**
125
+
126
+ ## Traps
127
+
128
+ - **Handing off a mood.** "It should feel great" is not a contract. Every claim
129
+ needs a channel and an assertion, or it can't be gated.
130
+ - **Dropping a parent's verify pattern.** A blend that proves only its dominant
131
+ genre ships the other half broken. Union, always.
132
+ - **Restating the recipe.** Don't paste FUN/JUICE/VERIFICATION content here — name
133
+ the claim and *link* the channel. Design here; prove there.
134
+ - **Contract without the null.** If nothing is asserted to *lose*, you haven't
135
+ proven the game has teeth (FUN.md law 4). Name the null first.
136
+ - **Skipping the look route.** A design that never says what the screenshot must
137
+ show hands JUDGE nothing to judge. State the salience/palette claim.
138
+
139
+ ## Composes with
140
+
141
+ - [[process-composition]] — its system list + parent genres become the verify
142
+ union you owe.
143
+ - [[process-pillars]] — each pillar's testable clause is a contract row.
144
+ - [[process-core-loop]] — the loop's feedback beats become the feedback contract.
145
+ - [[process-the-twist]] — the signature mechanic's traced consequences are extra
146
+ assertions (the seam proofs).
147
+
148
+ ## See also
149
+
150
+ - [docs/VERIFICATION.md](../../docs/VERIFICATION.md) — the five channels this
151
+ contract routes into; the *how* behind every row above.
152
+ - [docs/FUN.md](../../docs/FUN.md) law 1 — *the verify suite IS the design doc*;
153
+ this step is where you write its assertions first.
154
+ - [docs/JUICE.md](../../docs/JUICE.md) · [docs/JUDGE.md](../../docs/JUDGE.md) ·
155
+ [docs/CONVENTIONS.md](../../docs/CONVENTIONS.md) — the docs that own the design
156
+ from here.
@@ -0,0 +1,108 @@
1
+ ---
2
+ id: process-the-twist
3
+ title: The Twist — "X but Y"
4
+ kind: process
5
+ tags: [twist, composition, creativity, hook, differentiation, novelty, remix]
6
+ 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.
7
+ use-when: You have a genre/anchor and need the creative bend that makes the design worth building.
8
+ composes-with: [process-composition, process-pillars, process-intent-to-brief]
9
+ verify-with: none
10
+ ---
11
+
12
+ # The Twist — "X but Y"
13
+
14
+ **What it is.** Almost every good game is a *known thing, bent*. You don't invent a
15
+ genre from nothing; you take a proven core (the **X** — an [anchor](../10-anchors/)
16
+ or a [genre](../20-genres/)) and apply a **twist vector** (the **Y**) that changes what the game
17
+ *means*. The twist is where your creativity goes. The core is borrowed on purpose —
18
+ it arrives pre-solved, so your invention lands on the *difference*, not on
19
+ re-deriving what a platformer's coyote time should be.
20
+
21
+ **Why it's fun.** Familiarity is a free tutorial; novelty is the reason to look.
22
+ "X but Y" gives players an instant mental model *and* a surprise. Skip the anchor
23
+ and players are lost. Skip the twist and there's no reason to play yours over X.
24
+
25
+ > **The pitch test.** If you can't say your game as one "X but Y" sentence, the
26
+ > design isn't focused yet. *Unrailed = Overcooked but on a train you build ahead
27
+ > of yourself. Fertile Crescent = Age of Empires but bronze-age with hunger as the
28
+ > signature pressure. Shadow of War = Assassin's Creed but every orc remembers you.*
29
+
30
+ ## The six twist vectors
31
+
32
+ Pick **one** primary vector and commit; a second is a bonus, a third is usually
33
+ noise. Each vector answers "*but Y* — bent how?"
34
+
35
+ | Vector | The bend | Worked "X but Y" |
36
+ |---|---|---|
37
+ | **Theme / setting** | Same mechanics, a new fiction that recolours every system | Doom → *Viking*; AoE → *bronze-age* (Fertile Crescent) |
38
+ | **Mechanic-swap** | Replace or add one load-bearing verb; the rest reorganises around it | Overcooked → *+ track-laying* (Unrailed); Slay the Spire → *+ poker-hand scoring* (Balatro) |
39
+ | **Structure** | Change the container: run-based, roguelite, open-world, endless, campaign | Metroidvania → *roguelite* (Dead Cells); FTL → *no map, one loop* (Loop Hero) |
40
+ | **Perspective / scale** | Zoom in or out; change who the player IS | RTS commander → *one hero in the battle*; city → *one citizen* |
41
+ | **Constraint** | Add a hard limitation that forces new play | One-button; permadeath; no combat; one screen; 60-second runs |
42
+ | **Tonal** | Flip the emotional register | Horror → *cozy*; war → *comedy*; hardcore → *humane* (Celeste's assist mode) |
43
+
44
+ ## The signature mechanic
45
+
46
+ The strongest twist crystallises into **one signature mechanic** — the thing the
47
+ whole game is *about*, the sentence in the store description, the reason a
48
+ screenshot is legible. Fertile Crescent has **hunger**. Shadow of War has the
49
+ **nemesis system**. Into the Breach has the **telegraphed grid**. Balatro has
50
+ **jokers**. Find yours, then make every other system serve it. A twist that stays
51
+ a coat of paint (theme-only, no mechanical consequence) rarely carries a game;
52
+ push the bend until it changes *how you play*, not just how it looks.
53
+
54
+ ## How to run it
55
+
56
+ 1. **State the X.** Name the anchor(s) from [[process-intent-to-brief]]. Pull their
57
+ DNA from [`10-anchors/`](../10-anchors/) — the load-bearing structures, not the
58
+ theme. This is your borrowed, pre-solved core.
59
+ 2. **List candidate Ys.** For each vector above, write the one bend that best
60
+ serves the [[process-pillars]] and the player fantasy. Six candidates.
61
+ 3. **Score against the pillars.** Keep the Y that *most sharpens* a pillar. A twist
62
+ that fights a pillar is a different game — note it and drop it.
63
+ 4. **Name the signature mechanic** the twist implies. If none emerges, the bend is
64
+ cosmetic — pick a stronger vector.
65
+ 5. **Trace the consequence.** Walk the twist through every system: what does it
66
+ change in the economy, combat, progression, level shape? The twist that ripples
67
+ into 3+ systems is real; one that touches nothing is set-dressing.
68
+ 6. **Re-pitch.** Write the final "X but Y" sentence. It must survive as the store
69
+ hook. If it's boring to say, it'll be boring to play.
70
+
71
+ ## Worked example
72
+
73
+ **Intent:** *"a chill farming game that's actually about something."*
74
+
75
+ - **X** = [[anchor-stardew-valley]] (gentle life sim, open-ended goals, calm loop).
76
+ - **Ys considered:** theme (post-apocalyptic garden), mechanic-swap (farming *the
77
+ dead* — graves grow), structure (roguelite seasons), constraint (one plot, no
78
+ expansion), tonal (grief instead of cosiness).
79
+ - **Pillar filter:** pillar is *"tending as coming-to-terms."* The **tonal +
80
+ mechanic-swap** bend wins: you farm a memorial garden; each crop is a memory,
81
+ and the season ends when you're ready to let go.
82
+ - **Signature mechanic:** *acceptance* — crops you've fully tended can be
83
+ *released* for the run's only real resource; hoarding them stalls you.
84
+ - **Pitch:** *"Stardew Valley but a garden of grief you're learning to let go of."*
85
+
86
+ ## Traps
87
+
88
+ - **Twisting the wrong axis.** A theme swap on a genre whose fun is mechanical (a
89
+ reskinned platformer) adds nothing. Bend where the fun lives.
90
+ - **Three twists at once.** Overloaded pitches read as unfocused. One primary bend.
91
+ - **Novelty with no anchor.** "Totally original" usually means "no mental model" —
92
+ players bounce. Anchor first, *then* surprise.
93
+ - **Cosmetic signature.** If your "signature mechanic" doesn't change decisions,
94
+ it's a logo, not a mechanic.
95
+
96
+ ## Composes with
97
+
98
+ - [[process-composition]] — the twist is chosen *during* composition; this is the
99
+ creative step inside it.
100
+ - [[process-pillars]] — the pillars are the scoring function for candidate twists.
101
+ - [[pattern-emergence]] — the best signature mechanics are ones that interact with
102
+ everything else and generate stories.
103
+
104
+ ## See also
105
+
106
+ - [`10-anchors/`](../10-anchors/) — the X's, distilled to stealable DNA.
107
+ - [AGENTS.md](../../AGENTS.md) "Design from the mechanic, not from the corpus" —
108
+ the twist is how you *aim above* the corpus.
@@ -0,0 +1,99 @@
1
+ # 10-anchors — reference-game DNA
2
+
3
+ **An anchor is a touchstone game distilled to its stealable structural DNA** —
4
+ the load-bearing structures that make it work, stripped of theme and history.
5
+ It is *not* a review, a retrospective, or a feature list. It answers one
6
+ question: *if I say "my game is X-like," what exactly am I importing for free,
7
+ and where do I bend it?*
8
+
9
+ ## How to use the DNA
10
+
11
+ Anchors are the **ANCHOR** step of the [pipeline](../README.md): after
12
+ [[process-intent-to-brief]], name the 1–3 games your design *is*, then pull
13
+ their DNA here. Each module gives you four levers:
14
+
15
+ 1. **Design DNA + Load-bearing structures** — the compressed essence and the
16
+ table of *structure → why it works*. This is the pre-solved core you
17
+ borrow. Copy the structures; you don't have to re-derive why coyote time or
18
+ a draft-of-3 works.
19
+ 2. **What to steal** — the portable moves, phrased so you can lift them
20
+ directly.
21
+ 3. **What's just theme (drop it)** — the coat of paint. Do **not** import
22
+ this; it locks you into a clone. Everything here is re-skinnable.
23
+ 4. **Twist seams** — 2–3 "X but Y" bends in the [[process-the-twist]]
24
+ vocabulary (theme / mechanic-swap / structure / perspective / constraint /
25
+ tonal). This is where your creativity goes: pick a seam, then take it
26
+ through [[process-the-twist]] and [[process-composition]].
27
+
28
+ > **Compose, don't clone.** An anchor is the *X* in "X but Y." Import its
29
+ > structure, drop its theme, bend a seam. A design that steals everything —
30
+ > including the theme — is a reskin; a design that steals nothing has no mental
31
+ > model. Aim between. See [AGENTS.md](../../AGENTS.md) "design from the mechanic,
32
+ > not from the corpus."
33
+
34
+ Anchors feed the deep creative templates in [`20-genres/`](../20-genres/) and
35
+ the modular parts in [`30-systems/`](../30-systems/) — each module's
36
+ **Composes into** section names exactly which. Verification is never here:
37
+ each anchor links the matching `docs/FUN.md` genre section for the proof
38
+ pattern.
39
+
40
+ ## The 24 anchors
41
+
42
+ ### Action, platformer & arcade
43
+ | id | title | one-line DNA |
44
+ |---|---|---|
45
+ | [[anchor-celeste]] | Celeste | Precision platformer where grace is a system and assist mode makes difficulty the player's to own. |
46
+ | [[anchor-tetris]] | Tetris | One perfectly-tuned verb, endless; difficulty rises with your own success. |
47
+ | [[anchor-peggle]] | Peggle | Trivial input (aim + drop) wrapped in variable-ratio payoffs and disproportionate celebration juice. |
48
+ | [[anchor-nuclear-throne]] | Nuclear Throne | Twin-stick arcade roguelite; the over-tuned core minute carries "one more run." |
49
+
50
+ ### Run-based & roguelite
51
+ | id | title | one-line DNA |
52
+ |---|---|---|
53
+ | [[anchor-hades]] | Hades | Death delivers story and power — the meta-loop IS the narrative, so losing is content. |
54
+ | [[anchor-dead-cells]] | Dead Cells | Metroidvania × roguelite; the layout resets but the pool of possibility only ever grows. |
55
+ | [[anchor-vampire-survivors]] | Vampire Survivors | Move-only horde survival; a multiplicative build races a superlinear tide. |
56
+
57
+ ### Deckbuilders & tactics
58
+ | id | title | one-line DNA |
59
+ |---|---|---|
60
+ | [[anchor-slay-the-spire]] | Slay the Spire | Draft-of-3-with-skip; the deck is the build and thinning is a strategy. |
61
+ | [[anchor-balatro]] | Balatro | Score-multiplier engine (`chips × mult`); stacked jokers make the number explode. |
62
+ | [[anchor-into-the-breach]] | Into the Breach | Perfect-information tactics; the game is rewriting a telegraphed future by displacement. |
63
+
64
+ ### Puzzle & fusion
65
+ | id | title | one-line DNA |
66
+ |---|---|---|
67
+ | [[anchor-baba-is-you]] | Baba Is You | The rules are pushable objects; editing the ruleset is the whole game. |
68
+ | [[anchor-loop-hero]] | Loop Hero | Placement + auto-combat + deck fused; you author the world and every tile is a double-edged bet. |
69
+
70
+ ### Strategy & simulation
71
+ | id | title | one-line DNA |
72
+ |---|---|---|
73
+ | [[anchor-age-of-empires]] | Age of Empires | RTS eco/tech ramp; age-up power spikes and rehearsed build orders. |
74
+ | [[anchor-starcraft]] | StarCraft | Faction asymmetry done right — three distinct rosters balanced on one scale. |
75
+ | [[anchor-factorio]] | Factorio | Automation/logistics; the factory itself is the toy, scaling complexity forever. |
76
+ | [[anchor-rimworld]] | RimWorld | Colony sim as story generator; an AI director authoring escalating drama. |
77
+ | [[anchor-stardew-valley]] | Stardew Valley | Gentle life sim; open-ended goals and a calm compulsion loop. |
78
+ | [[anchor-civilization]] | Civilization | 4X "one more turn"; layered systems, snowball tempered by comeback. |
79
+
80
+ ### Co-op, systemic & narrative
81
+ | id | title | one-line DNA |
82
+ |---|---|---|
83
+ | [[anchor-overcooked]] | Overcooked | Couch-coop chaos; communication forced by design, kitchens that escalate. |
84
+ | [[anchor-it-takes-two]] | It Takes Two | Asymmetric coop set-pieces; a new mechanic per chapter, interdependence throughout. |
85
+ | [[anchor-shadow-of-mordor]] | Shadow of Mordor | The nemesis system — emergent, personalised rivals from systemic memory. |
86
+ | [[anchor-reigns]] | Reigns | Swipe-choice stewardship; meters balanced between two ditches. |
87
+ | [[anchor-outer-wilds]] | Outer Wilds | Knowledge is the only progression; a curiosity-gated open world. |
88
+ | [[anchor-return-of-the-obra-dinn]] | Return of the Obra Dinn | Deduction as the core loop; the game trusts your reasoning. |
89
+
90
+ ## See also
91
+
92
+ - [`../README.md`](../README.md) — the design pipeline (anchors are step 2,
93
+ ANCHOR).
94
+ - [`../00-process/the-twist.md`](../00-process/the-twist.md) — the "X but Y"
95
+ formula the twist seams speak.
96
+ - [`../20-genres/`](../20-genres/) · [`../30-systems/`](../30-systems/) —
97
+ where anchor DNA composes into templates and parts.
98
+ - [`../../docs/FUN.md`](../../docs/FUN.md) — each anchor's verify pattern, by
99
+ genre.
@@ -0,0 +1,103 @@
1
+ ---
2
+ id: anchor-age-of-empires
3
+ title: Age of Empires
4
+ kind: anchor
5
+ tags: [rts, economy, tech-tree, build-order, power-spike, ramp, macro]
6
+ 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.
7
+ use-when: The intent is an economy-first RTS/strategy where teching up and timing a power spike is the core decision.
8
+ composes-with: [genre-rts, system-tech-tree, system-economy, system-resource-loops, system-unit-rosters]
9
+ anchors: []
10
+ verify-with: docs/FUN.md#9-rts-lite
11
+ ---
12
+
13
+ # Age of Empires
14
+
15
+ **What it is.** An RTS where you spend most of your time *not fighting*: you
16
+ harvest four resources, sink them into a **tech ramp**, and cash the whole
17
+ economy in at an **age-up** — a discrete power spike that unlocks a better army
18
+ and a better economy at once. The **build order** — what you build, in what
19
+ sequence, timed to the second — is the skill.
20
+
21
+ **Player fantasy.** You are a civilisation *becoming*. The dopamine is watching a
22
+ handful of villagers snowball into a stone-age hamlet, a feudal town, an imperial
23
+ war machine — each age a visible, audible level-up you *earned* by planning ahead
24
+ instead of fighting now.
25
+
26
+ ## Design DNA
27
+
28
+ The engine is a **delayed-gratification loop**: every resource spent on economy or
29
+ tech is an army you *didn't* build. The tension is always "expand now, or convert
30
+ to power now?" Ages are the **commitment gates** that make that tension legible —
31
+ you can *see* the next tier of units greyed out, and you know exactly what banking
32
+ toward it costs. Combat exists to punish players who over-bank (you die with a
33
+ great economy and no army) and reward players who time the spike (you hit Feudal
34
+ with an army while the enemy is still stone-age).
35
+
36
+ ## Load-bearing structures
37
+
38
+ | Structure | Why it works |
39
+ |---|---|
40
+ | **Multi-resource economy** (food/wood/gold/stone) | Each resource gates a different axis; scarcity of one forces build-order choices. Reduces to faucets/sinks → [[system-economy]]. |
41
+ | **Villager compounding** | Workers make workers; early economy investment pays exponential interest. The core [[pattern-feedback-loops]] runaway. |
42
+ | **Age-up as discrete power spike** | A single expensive gate unlocks a whole tier at once — a legible level-up, not a slow drip. → [[system-tech-tree]]. |
43
+ | **Build order** | A near-optimal opening sequence, timed to seconds; mastery is executing it under pressure. → [[system-mastery-curve]]. |
44
+ | **Tech tree with branch cost** | Upgrades are cheap individually, ruinous in aggregate; you can't have everything, so you specialise. → [[system-tech-tree]]. |
45
+ | **Timing attacks** | The whole game is "hit the enemy in the gap between *my* spike and *their* spike." Skill = reading tempo. |
46
+ | **Counter roster** | Units answer units (spears→cavalry, archers→infantry); army comp is a live rock-paper-scissors. → [[system-counter-systems]]. |
47
+
48
+ ## What to steal
49
+
50
+ - The **age-up gate**: one expensive, visible, irreversible spike that unlocks a
51
+ *tier*, not a stat. It converts a grind into a milestone.
52
+ - The **build-order skill floor**: a deterministic opening that rewards knowledge
53
+ and execution — the thing a null "just make army" player loses to hard (FUN.md
54
+ law 2 skill-delta).
55
+ - **Idle-worker guilt**: surface the number of idle villagers as UI. The exposed
56
+ inefficiency *is* the macro game (cf. the city-builder "+N" cursor, FUN.md §17).
57
+ - **Bank-vs-spend tension** at every second: the economy you build is the army you
58
+ postpone. This is the whole loop; keep it sharp.
59
+
60
+ ## What's just theme (drop it)
61
+
62
+ - The **historical civilisations** — Britons vs Franks is flavour on a shared
63
+ spine. Real asymmetry lives in [[system-faction-asymmetry]], not in names.
64
+ - **Four** specific resources — the count is tuning. Two well-differentiated
65
+ resources can carry the same tension (see [[system-resource-loops]]).
66
+ - **Wonders / relics / one-more-victory-condition** — win-condition garnish, not
67
+ the loop. Cut them until the ramp is fun alone.
68
+ - **Literal town-building sim** — the base is a means to the ramp, not a SimCity.
69
+
70
+ ## Composes into
71
+
72
+ - [[genre-rts]] — the parent; AoE is its economy-first exemplar (mass under
73
+ command, but macro over micro).
74
+ - [[system-tech-tree]] — the age-up spike is a tech-tree gate; this is its home
75
+ system.
76
+ - [[system-economy]] · [[system-resource-loops]] — faucets/sinks and the
77
+ gather→convert→spend cycle that funds the ramp.
78
+ - [[system-unit-rosters]] · [[system-counter-systems]] — the army the economy pays
79
+ for, and why comp matters.
80
+ - [[pattern-feedback-loops]] — villager compounding is the runaway loop that needs
81
+ a comeback brake.
82
+
83
+ ## Twist seams
84
+
85
+ - **AoE but the age-up is a roguelite draft** *(structure)* — each age offers a
86
+ choice-of-3 civ perks instead of a fixed tree; runs diverge. Pairs with
87
+ [[system-meta-progression]].
88
+ - **AoE but hunger is the fifth clock** *(mechanic-swap)* — food isn't banked, it
89
+ *drains*; your economy starves if it stalls. (This is Fertile Crescent's
90
+ signature bend — see [[process-the-twist]].)
91
+ - **AoE but you command one age at a time on a single screen** *(constraint /
92
+ perspective)* — no map scroll; the ramp happens in one arena, tower-defense
93
+ tempo. Pairs with [[genre-tower-defense]].
94
+ - **AoE but cozy** *(tonal)* — drop combat entirely; the "spike" is a festival, the
95
+ pressure is a seasonal deadline. Pairs with [[genre-farming-sim]].
96
+
97
+ ## See also
98
+
99
+ - [`docs/FUN.md#9-rts-lite`](../../docs/FUN.md) — mass pathing via cached flow
100
+ fields; the intended line (turtle→counterpush) must beat attack-move.
101
+ - [`sandboxes/pathfinding-demo`](../../sandboxes/pathfinding-demo) — `astarGrid` /
102
+ flow-field wiring for wall-aware unit movement.
103
+ - [[genre-rts]] · [[system-tech-tree]] · [[system-economy]].
@@ -0,0 +1,127 @@
1
+ ---
2
+ id: anchor-baba-is-you
3
+ title: Baba Is You
4
+ kind: anchor
5
+ tags: [puzzle, rule-manipulation, self-reference, sokoban, systemic, emergence, grid]
6
+ 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.
7
+ 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.
8
+ composes-with: [genre-grid-puzzle, pattern-emergence, system-onboarding, system-mastery-curve]
9
+ anchors: [anchor-baba-is-you]
10
+ verify-with: docs/FUN.md#1-·-grid-puzzle-sokoban
11
+ ---
12
+
13
+ # Baba Is You
14
+
15
+ **What it is.** A Sokoban-like grid puzzle where the *rules are blocks you can
16
+ push*. `BABA IS YOU`, `FLAG IS WIN`, `WALL IS STOP` — break a sentence apart
17
+ and the law it stated stops applying; form a new one and reality reorganises
18
+ around it.
19
+
20
+ **Player fantasy / why it's fun.** *I am not solving the puzzle — I am
21
+ rewriting it.* The pull is **the mechanic IS the content**: there's no new
22
+ mechanic per level, just deeper implications of one idea. Every "aha" is the
23
+ moment you realise you can make *lava is win*, or *you* the wall, and the
24
+ whole board's meaning inverts.
25
+
26
+ ## Design DNA
27
+
28
+ Make **the rules first-class objects** in the simulation. Instead of
29
+ hard-coding "walls stop you," the game reads sentences of word-blocks each
30
+ tick and *derives* its rules from the current board. Because the player can
31
+ push those word-blocks, **the ruleset is mutable at runtime** — and the entire
32
+ game is the emergent space of what you can make true. One system, endlessly
33
+ recombined, generates hundreds of puzzles without ever adding a new verb.
34
+
35
+ The architectural move is the whole trick: **data-drive the laws instead of
36
+ coding them.** A conventional game hard-codes `if (tile.isWall) block()`. Baba
37
+ stores `WALL IS STOP` as three movable objects and, each step, re-parses the
38
+ board into an active ruleset that the sim obeys. The instant the *rule itself*
39
+ is a thing you can push, the design surface explodes — every law becomes
40
+ editable, including the ones a designer would normally hold sacred (what "you"
41
+ are, what "winning" means). The content isn't levels bolted onto a mechanic;
42
+ the content *is* situations that reveal what the one mechanic permits.
43
+
44
+ This is **emergence as the whole game**: depth comes not from breadth of
45
+ mechanics but from the second-order interactions of a tiny, self-referential
46
+ rule engine. A handful of nouns and properties yields a puzzle space no
47
+ designer could enumerate — which is the efficiency: near-infinite content from
48
+ almost no content.
49
+
50
+ ## Load-bearing structures
51
+
52
+ | Structure | Why it works |
53
+ |---|---|
54
+ | **Rules are data on the board, re-read each tick** | The sim *derives* its laws from `NOUN IS PROPERTY` sentences rather than hard-coding them — so pushing a word changes physics. This is the entire trick. |
55
+ | **Self-reference (`IS YOU`, `IS WIN`)** | The player can move *win itself*, or become a new object. The win condition and the avatar are editable — nothing is sacred. [[pattern-emergence]]. |
56
+ | **One mechanic, deepening implications** | No new verbs per level; difficulty is *realising what the one system permits*. Content = mastery of the rule engine. [[system-mastery-curve]]. |
57
+ | **Sokoban substrate + undo/restart** | Turn-based grid pushing with full undo — puzzle grace, so wild experimentation is free. FUN.md law 5. [[genre-grid-puzzle]]. |
58
+ | **Every level is solver-provable** | A pure `Puzzle<State, Move>` state (board + active rules) means every level is machine-proven winnable — unwinnable = unshippable. FUN.md truth. |
59
+ | **Teach-by-discovery onboarding** | Early levels *are* the tutorial — you learn the rule engine by breaking one sentence at a time. [[system-onboarding]]. |
60
+ | **Combinatorial state, tiny alphabet** | A handful of nouns × properties yields a vast puzzle space from almost no content. [[system-procgen-design]] (design-space, not runtime). |
61
+
62
+ ## What to steal
63
+
64
+ - **Promote the rules to editable game objects.** Store laws as data the sim
65
+ reads each step, not as code. The moment the player can *move a rule*, you
66
+ have a whole genre. This is the master idea.
67
+ - **Allow self-reference:** let the player edit "you," "win," "the goal." The
68
+ most memorable puzzles come from nothing being fixed.
69
+ - **Get infinite content from one deep system.** Don't add mechanics; add
70
+ *situations that reveal implications*. The mechanic is the content — that's
71
+ the efficiency.
72
+ - **Keep the Sokoban substrate + undo/restart** so experimentation is
73
+ consequence-free (FUN.md law 5).
74
+ - **Prove every level with a solver** over the pure state (board + active
75
+ rules) — winnability is CI, not a playtest. Because a self-referential rule
76
+ engine can trivially author *unwinnable* configurations, a machine proof
77
+ isn't optional here; unwinnable = unshippable (FUN.md truth).
78
+ - **Front-load the teaching into the levels themselves.** No separate
79
+ tutorial: the first rooms *are* the onboarding, each isolating one
80
+ implication of the rule engine (break a sentence, form a new one). Discovery
81
+ replaces instruction. See [[system-onboarding]].
82
+
83
+ ## What's just theme (drop it)
84
+
85
+ - **Baba the sheep and the crayon art.** Fully cosmetic.
86
+ - **The specific nouns/properties.** *A small vocabulary of subjects ×
87
+ predicates* is structural; "ROCK / KEKE / FLAG" is flavour.
88
+ - **The overworld map.** A level-selection wrapper, not the loop —
89
+ [[system-session-structure]].
90
+ - **English-word framing.** The *sentence-as-rule* structure could be icons,
91
+ runes, or colours; the readability is what matters —
92
+ [[pattern-readability]].
93
+
94
+ ## Composes into
95
+
96
+ - [[genre-grid-puzzle]] — its substrate; Baba is the rule-manipulation
97
+ variant.
98
+ - [[pattern-emergence]] — the definitive example of second-order, few-pieces
99
+ depth.
100
+ - [[system-onboarding]] — teach-by-discovery of a single deep system.
101
+ - [[system-mastery-curve]] — difficulty as *understanding*, not execution.
102
+
103
+ ## Twist seams
104
+
105
+ - **Baba Is You but real-time** *(structure)* — rules re-read every frame
106
+ while things move; you rewrite physics *during* an action sequence. Bends
107
+ the turn-based substrate toward reflex.
108
+ - **Baba Is You but two players edit a shared ruleset** *(perspective)* — one
109
+ can make `WALL IS PUSH` while the other needs it `STOP`; cooperation *and*
110
+ sabotage live in the sentences. Feeds [[system-coop-and-competition]].
111
+ - **Baba Is You but the theme is bureaucracy — rules are laws you amend**
112
+ *(theme)* — same self-referential engine, recolored as legislation; every
113
+ puzzle is "find the loophole." Theme that *reinforces* the mechanic instead
114
+ of decorating it.
115
+ - **Baba Is You but you write the rules from a limited word-bank you draft**
116
+ *(mechanic-swap)* — instead of pushing pre-placed words, you *earn and
117
+ spend* rule-tokens; the puzzle becomes "what's the cheapest sentence that
118
+ wins." Pulls in [[genre-deckbuilder]] economy over the free-form parser.
119
+
120
+ ## See also
121
+
122
+ - [[genre-grid-puzzle]] · [[pattern-emergence]] · [[system-onboarding]] ·
123
+ [[system-mastery-curve]]
124
+ - `docs/FUN.md#1-·-grid-puzzle-sokoban` — `Puzzle<State,Move>` solver + replay
125
+ determinism.
126
+ - `examples/sokoban/` — the logic/view-split reference this substrate builds
127
+ on.