@jgengine/shell 0.11.0 → 0.13.0

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 (151) hide show
  1. package/CHANGELOG.md +52 -0
  2. package/dist/CombatPresentation.d.ts +5 -0
  3. package/dist/CombatPresentation.js +8 -0
  4. package/dist/GameHost.d.ts +27 -1
  5. package/dist/GameHost.js +83 -4
  6. package/dist/GamePlayer.d.ts +5 -0
  7. package/dist/GamePlayer.js +5 -0
  8. package/dist/GamePlayerShell.d.ts +5 -0
  9. package/dist/GamePlayerShell.js +63 -359
  10. package/dist/GameUiPreview.js +3 -0
  11. package/dist/Shell3dPresentation.d.ts +63 -0
  12. package/dist/Shell3dPresentation.js +302 -0
  13. package/dist/ShellChrome.d.ts +51 -0
  14. package/dist/ShellChrome.js +51 -0
  15. package/dist/ShellHudPresentation.d.ts +41 -0
  16. package/dist/ShellHudPresentation.js +22 -0
  17. package/dist/audio/audioEngine.d.ts +4 -0
  18. package/dist/audio/audioEngine.js +111 -26
  19. package/dist/audio/audioWire.d.ts +22 -4
  20. package/dist/audio/audioWire.js +46 -3
  21. package/dist/audio/loopParams.d.ts +20 -0
  22. package/dist/audio/loopParams.js +28 -0
  23. package/dist/camera/GameCameraRig.js +6 -1
  24. package/dist/camera/GameOrbitCamera.js +7 -1
  25. package/dist/camera/cameraCollision.d.ts +28 -0
  26. package/dist/camera/cameraCollision.js +34 -0
  27. package/dist/camera/cameraRigs.d.ts +3 -1
  28. package/dist/camera/cameraRigs.js +24 -10
  29. package/dist/camera/index.d.ts +1 -0
  30. package/dist/camera/index.js +1 -0
  31. package/dist/camera/rigMath.d.ts +27 -0
  32. package/dist/camera/rigMath.js +45 -0
  33. package/dist/defineGame.d.ts +15 -1
  34. package/dist/defineGame.js +26 -4
  35. package/dist/devtools/DevtoolsOverlay.d.ts +4 -4
  36. package/dist/devtools/DevtoolsOverlay.js +28 -12
  37. package/dist/devtools/agentBridge.js +4 -0
  38. package/dist/devtools/perfDiagnose.js +1 -1
  39. package/dist/diagnostics/RuntimeDiagnostics.d.ts +7 -0
  40. package/dist/diagnostics/RuntimeDiagnostics.js +23 -12
  41. package/dist/environment/EnvironmentScene.js +17 -3
  42. package/dist/environment/RoadJunctions.d.ts +12 -0
  43. package/dist/environment/RoadJunctions.js +69 -0
  44. package/dist/environment/RoadRibbons.d.ts +8 -2
  45. package/dist/environment/RoadRibbons.js +26 -8
  46. package/dist/environment/terrainGroundColor.d.ts +9 -0
  47. package/dist/environment/terrainGroundColor.js +22 -0
  48. package/dist/gameKit.d.ts +27 -0
  49. package/dist/gameKit.js +29 -0
  50. package/dist/map/MapMarkerBeacons.d.ts +3 -2
  51. package/dist/postfx/PostProcessing.d.ts +9 -1
  52. package/dist/postfx/PostProcessing.js +11 -4
  53. package/dist/presentationResolve.d.ts +39 -0
  54. package/dist/presentationResolve.js +53 -0
  55. package/dist/registry.d.ts +1 -0
  56. package/dist/render/PartMotion.d.ts +18 -0
  57. package/dist/render/PartMotion.js +91 -0
  58. package/dist/render/SceneModels.d.ts +9 -2
  59. package/dist/render/SceneModels.js +31 -180
  60. package/dist/render/assetBase.d.ts +17 -0
  61. package/dist/render/assetBase.js +35 -0
  62. package/dist/render/measureBounds.d.ts +34 -0
  63. package/dist/render/measureBounds.js +127 -0
  64. package/dist/render/modelLoad.js +4 -1
  65. package/dist/render/resolveModel.d.ts +15 -0
  66. package/dist/render/resolveModel.js +43 -2
  67. package/dist/render/useModelAnimation.d.ts +10 -0
  68. package/dist/render/useModelAnimation.js +198 -0
  69. package/dist/scatter/InstancedScatter.js +5 -0
  70. package/dist/scatter/scatterProxies.js +24 -0
  71. package/dist/scene/AuthoredScene.d.ts +3 -1
  72. package/dist/scene/AuthoredScene.js +7 -2
  73. package/dist/scene/CityRenderer.d.ts +2 -0
  74. package/dist/scene/CityRenderer.js +1031 -0
  75. package/dist/scene/GrassFieldRenderer.js +53 -5
  76. package/dist/scene/PoleLineRenderer.d.ts +2 -0
  77. package/dist/scene/PoleLineRenderer.js +287 -0
  78. package/dist/scene/SoilPatchRenderer.js +70 -7
  79. package/dist/scene/WaterRenderer.js +34 -10
  80. package/dist/scene/builtinSceneKindRenderers.js +4 -0
  81. package/dist/scene/cityWindowMaterial.d.ts +16 -0
  82. package/dist/scene/cityWindowMaterial.js +81 -0
  83. package/dist/scene/sceneKindRenderers.d.ts +2 -0
  84. package/dist/settings/appliedSettings.d.ts +2 -1
  85. package/dist/settings/appliedSettings.js +4 -2
  86. package/dist/structures/GeneratedBuilding.d.ts +4 -0
  87. package/dist/structures/GeneratedBuilding.js +17 -7
  88. package/dist/structures/TransformGizmo.d.ts +11 -1
  89. package/dist/structures/TransformGizmo.js +9 -5
  90. package/dist/terrain/GrassField.d.ts +11 -3
  91. package/dist/terrain/GrassField.js +16 -6
  92. package/dist/terrain/grassGeometry.d.ts +33 -1
  93. package/dist/terrain/grassGeometry.js +83 -21
  94. package/dist/terrain/grassMaterial.d.ts +18 -0
  95. package/dist/terrain/grassMaterial.js +66 -13
  96. package/dist/terrain/heightfieldGeometry.d.ts +34 -0
  97. package/dist/terrain/heightfieldGeometry.js +109 -0
  98. package/dist/terrain/index.d.ts +1 -0
  99. package/dist/terrain/index.js +1 -0
  100. package/dist/terrain/soilPatchMaterial.d.ts +15 -2
  101. package/dist/terrain/soilPatchMaterial.js +46 -8
  102. package/dist/terrain/terrainDetailMaterial.js +15 -2
  103. package/dist/water/Ocean.d.ts +7 -1
  104. package/dist/water/Ocean.js +16 -3
  105. package/dist/water/OceanConfig.d.ts +9 -0
  106. package/dist/water/OceanConfig.js +6 -0
  107. package/dist/water/OceanMaterial.d.ts +12 -0
  108. package/dist/water/OceanMaterial.js +9 -0
  109. package/dist/water/OceanShader.d.ts +2 -2
  110. package/dist/water/OceanShader.js +78 -10
  111. package/dist/world/PlaceScene.d.ts +11 -0
  112. package/dist/world/PlaceScene.js +27 -0
  113. package/dist/world/WorldHud.d.ts +3 -1
  114. package/dist/world/WorldHud.js +2 -2
  115. package/dist/world/WorldScene.js +32 -4
  116. package/dist/worldSky.d.ts +7 -1
  117. package/dist/worldSky.js +11 -1
  118. package/package.json +4 -4
  119. package/skills/game-design/SKILL.md +28 -0
  120. package/skills/game-design/agents/openai.yaml +4 -0
  121. package/skills/game-design/references/application-playbook.md +170 -0
  122. package/skills/game-design/references/field-guide.md +288 -0
  123. package/skills/jgengine/SKILL.md +8 -4
  124. package/skills/jgengine/api.md +182 -81
  125. package/skills/jgengine/capabilities.md +104 -2
  126. package/skills/jgengine/recipes/minimal-game.md +88 -0
  127. package/skills/jgengine-ui/SKILL.md +17 -10
  128. package/skills/jgengine-ui/api.md +316 -51
  129. package/skills/jgengine-ui/capabilities.md +135 -2
  130. package/skills/jgengine-ui/recipes/portable-minimap.md +150 -0
  131. package/skills/jgengine-ui/reference.md +59 -9
  132. package/skills/jgengine-ui/references/visual-scorecard.md +1 -1
  133. package/skills/jgengine-world/SKILL.md +13 -0
  134. package/skills/jgengine-world/api.md +453 -21
  135. package/skills/jgengine-world/capabilities.md +112 -2
  136. package/skills/jgengine-world/recipes/commanding-entities.md +128 -0
  137. package/skills/jgengine-world/reference.md +43 -4
  138. package/skills/level-design/SKILL.md +54 -0
  139. package/skills/level-design/agents/openai.yaml +4 -0
  140. package/skills/level-design/references/application-playbook.md +192 -0
  141. package/skills/level-design/references/field-guide.md +337 -0
  142. package/skills/level-design/references/live-editor-loop.md +179 -0
  143. package/dist/cartridge/runtime.d.ts +0 -15
  144. package/dist/cartridge/runtime.js +0 -556
  145. package/dist/cartridge/spec.d.ts +0 -188
  146. package/dist/cartridge/spec.js +0 -19
  147. package/dist/cartridge/validate.d.ts +0 -2
  148. package/dist/cartridge/validate.js +0 -78
  149. package/dist/cartridge.d.ts +0 -145
  150. package/dist/cartridge.js +0 -246
  151. package/skills/jgengine/reference-cartridge.md +0 -72
@@ -0,0 +1,288 @@
1
+ # Game design field guide
2
+
3
+ Use this reference when a task needs more than the canonical workflow in [`SKILL.md`](../SKILL.md). It is a synthesis of research and shipped-game practice, not a universal formula. Select the tools that expose the current design risk and validate them with players.
4
+
5
+ ## Contents
6
+
7
+ 1. Experience hypotheses
8
+ 2. Actions, feedback, and decisions
9
+ 3. Nested loops
10
+ 4. Systems and economies
11
+ 5. Progression and challenge
12
+ 6. Onboarding and accessibility
13
+ 7. Multiplayer and social play
14
+ 8. Content structure and genre lenses
15
+ 9. Prototyping and playtesting
16
+ 10. JGengine translation
17
+ 11. Diagnostic questions
18
+ 12. Research basis
19
+
20
+ ## 1. Experience hypotheses
21
+
22
+ ### Write a working contract
23
+
24
+ Use a compact table in the issue, task, or conversation. Do not preserve speculative prose as a large design document.
25
+
26
+ | Question | Useful answer | Weak answer |
27
+ | --- | --- | --- |
28
+ | Who plays, where, and for how long? | “Two friends, 20-minute online co-op runs” | “Everyone” |
29
+ | What do they repeatedly do? | “Scout, plan a breach, improvise when it fails” | “Experience action” |
30
+ | What should dominate the experience? | “Tense coordination, expressive tools, recoverable chaos” | “Fun and immersive” |
31
+ | What must it not become? | “Inventory chores, solved loadouts, long spectator time” | “Not boring” |
32
+ | What proves the loop? | “A new pair completes one objective, explains its failure, and chooses a different second approach” | “Players like it” |
33
+
34
+ Treat pillars as prioritization constraints. Make each pillar observable and give it an anti-pillar. When two features conflict, the pillar decides which survives.
35
+
36
+ ### Trace experience in both directions
37
+
38
+ Use the Mechanics-Dynamics-Aesthetics separation as a causal check:
39
+
40
+ - **Experience:** the intended emotional or social response.
41
+ - **Dynamics:** the behavior that should emerge during play.
42
+ - **Mechanics:** the rules, data, controls, and feedback likely to produce that behavior.
43
+
44
+ Design backward from experience, then simulate forward from mechanics. A stealth meter does not guarantee tension; examine whether information, enemy response, recovery, and level geometry actually produce cautious planning.
45
+
46
+ Use autonomy, competence, and relatedness as diagnostics, not mandatory quotas:
47
+
48
+ - **Autonomy:** choices allow ownership and expression rather than cosmetic branching.
49
+ - **Competence:** players can understand improvement and attribute outcomes to actions.
50
+ - **Relatedness:** players can contribute, recognize others, and form meaningful social context.
51
+
52
+ ## 2. Actions, feedback, and decisions
53
+
54
+ ### Model a playable verb
55
+
56
+ For every core verb, specify:
57
+
58
+ 1. cue and available information
59
+ 2. player intention and input
60
+ 3. target and eligibility rules
61
+ 4. simulation/state transition
62
+ 5. immediate visual, audio, haptic, and systemic feedback
63
+ 6. consequence that affects a later choice
64
+ 7. skill the player is expected to learn
65
+ 8. counterplay, cost, risk, or limitation
66
+
67
+ An animation without a state consequence is presentation. A state change the player cannot perceive cannot reliably teach. Good moment-to-moment feel combines predictable physical response, amplified event importance, and assistance that honors player intention.
68
+
69
+ ### Test whether a choice is meaningful
70
+
71
+ A decision usually needs:
72
+
73
+ - at least two viable options the player can distinguish
74
+ - enough information to form a plan, with uncertainty appropriate to the fantasy
75
+ - a tradeoff rather than a universally dominant answer
76
+ - a perceivable consequence at the promised time scale
77
+ - an effect on future state, knowledge, position, relationships, or opportunity
78
+
79
+ Not every input needs strategic depth. Execution, expression, discovery, role-play, and timing can carry play. Be precise about which kind of agency the design promises.
80
+
81
+ Audit common choice failures:
82
+
83
+ - **blind:** relevant information arrives only after commitment
84
+ - **fake:** outcomes converge without expressive or narrative value
85
+ - **solved:** one option dominates across contexts
86
+ - **noisy:** feedback cannot be attributed to the choice
87
+ - **overloaded:** too many new variables must be evaluated at once
88
+ - **inert:** consequence does not alter anything the player values
89
+
90
+ ## 3. Nested loops
91
+
92
+ ### Loop anatomy
93
+
94
+ Write each loop as:
95
+
96
+ `state/cue -> goal -> informed action -> simulation -> feedback -> changed state -> next decision`
97
+
98
+ The return state must differ in a useful way: new information, depleted or gained resources, changed position, higher mastery, altered relationships, new capability, or escalated world state. “Fight enemies, get loot, repeat” is incomplete until the design explains how loot changes subsequent fights and why choices remain interesting.
99
+
100
+ ### Time horizons
101
+
102
+ | Horizon | Typical concern | Validation |
103
+ | --- | --- | --- |
104
+ | moment-to-moment | control, targeting, timing, feedback | Can players predict and correct an action? |
105
+ | encounter/task | tactics, puzzle, risk, recovery | Do multiple verbs and resources create decisions? |
106
+ | session/run | pacing, goals, build arc, stopping | Does the session reach a satisfying change or climax? |
107
+ | campaign/meta | progression, variety, mastery, expression | Do unlocks create new play instead of only larger numbers? |
108
+ | community | cooperation, competition, identity, shared stories | Can players contribute and recover from social friction? |
109
+
110
+ Check coupling. The short loop must feed the long loop, and long-loop rewards must renew rather than trivialize the short loop.
111
+
112
+ ## 4. Systems and economies
113
+
114
+ ### Map flows before tuning
115
+
116
+ For every tangible or abstract resource, record:
117
+
118
+ - **source:** creates it
119
+ - **pool/store:** holds it and defines capacity or decay
120
+ - **converter:** changes it into another resource or state
121
+ - **trade:** exchanges resources between owners
122
+ - **gate:** requires a threshold or condition
123
+ - **sink:** removes it from circulation
124
+
125
+ Include time, attention, space, health, information, social trust, action opportunities, and risk when they behave like resources. Draw connections and simulate several player strategies before choosing numbers.
126
+
127
+ ### Audit feedback structures
128
+
129
+ - Positive feedback amplifies an advantage; it can make growth satisfying but also cause runaway leaders.
130
+ - Negative feedback resists deviation; it can stabilize play but feel punitive when it erases earned advantage.
131
+ - A loop’s speed, delay, visibility, durability, and cap matter as much as its sign.
132
+ - Randomness changes distribution, not only average outcome. Examine worst cases, streaks, and player control.
133
+
134
+ Give resources clear jobs. A currency with no recurring sink accumulates into irrelevance; a sink without valued outcomes becomes tax. Use opportunity costs to create decisions, and cap or decay stockpiles only when that behavior supports the experience.
135
+
136
+ ### Balance relationships, not isolated values
137
+
138
+ Maintain a tuning table with units, baseline, min/max, dependency, player-facing purpose, and test evidence. Derive related values from a small set of legible baselines. Inspect:
139
+
140
+ - time-to-effect and time-to-recover
141
+ - expected value and variance
142
+ - throughput, capacity, scarcity, and replacement rate
143
+ - breakpoints where an option changes from viable to dominant
144
+ - compounding across upgrades and feedback loops
145
+ - edge cases at zero, maximum, and repeated use
146
+
147
+ ## 5. Progression and challenge
148
+
149
+ ### Separate progression channels
150
+
151
+ - **Mastery:** the player learns execution, planning, recognition, or social coordination.
152
+ - **Content:** new spaces, problems, opponents, or stories become available.
153
+ - **Breadth:** new tools or combinations expand the possibility space.
154
+ - **Power:** existing actions become numerically stronger.
155
+ - **Expression/status:** appearance, identity, collection, or public accomplishment changes.
156
+
157
+ Prefer unlocks that create new decisions or recontextualize mastered skills. Numerical power is useful when it makes growth legible, but unchecked vertical scaling invalidates content and narrows viable options.
158
+
159
+ Build a skill graph: assumed prior skills -> introduced skill -> safe practice -> independent test -> combination -> transformed use -> mastery proof. Provide fast paths or optional refreshers for players who arrive with different prior knowledge.
160
+
161
+ ### Treat difficulty as a vector
162
+
163
+ Tune cognitive load, precision, timing, planning depth, memory, sensory discrimination, resource pressure, punishment, uncertainty, coordination, and persistence separately. A single easy/normal/hard multiplier cannot serve every barrier.
164
+
165
+ Failure should answer:
166
+
167
+ - What happened and why?
168
+ - What can the player try differently?
169
+ - How much meaningful progress is lost?
170
+ - How quickly can the player act again?
171
+ - Does recovery preserve tension without demanding repetition already mastered?
172
+
173
+ Dynamic adjustment can change pressure frequency, assistance, resource supply, or challenge amplitude, but it must remain predictable enough for players to learn and must not counterfeit achievement.
174
+
175
+ ## 6. Onboarding and accessibility
176
+
177
+ Teach inside representative play:
178
+
179
+ 1. prime attention before the mechanic matters
180
+ 2. invite the action with low failure cost
181
+ 3. give immediate, redundant feedback
182
+ 4. allow repetition or experimentation
183
+ 5. test without step-by-step prompting
184
+ 6. combine with one known mechanic
185
+ 7. make help recallable and skippable where appropriate
186
+
187
+ Do not assume genre literacy, dual-stick control, rapid reading, color discrimination, precise timing, hearing, or uninterrupted attention. Preserve the intended experience through remapping, simplified input, adjustable timing, pause, granular challenge assists, redundant cues, readable objectives, and reduced repetition.
188
+
189
+ ## 7. Multiplayer and social play
190
+
191
+ Design the social system before selecting transport:
192
+
193
+ - define cooperative and competitive relationships, team sizes, and information boundaries
194
+ - ensure every role has understandable contribution and moments of agency
195
+ - limit involuntary downtime and give eliminated players meaningful next actions
196
+ - specify join, leave, disconnect, reconnect, and uneven-player behavior
197
+ - distinguish team comeback from hidden punishment of skilled play
198
+ - bound griefing, collusion, kingmaking, smurfing, spawn abuse, and reward farming
199
+ - test communication-light play and accessibility of coordination signals
200
+
201
+ For persistent systems, model inflation, hoarding, market manipulation, time-zone advantage, seasonal resets, and what happens when population is sparse.
202
+
203
+ ## 8. Content structure and genre lenses
204
+
205
+ Create a content matrix from mechanics and contexts rather than brainstorming isolated features. Useful axes include verb, target, constraint, topology, information state, resource state, opponent behavior, time pressure, social relationship, and consequence. Combine a few axes at a time and reserve unexplored combinations for progression.
206
+
207
+ Apply genre lenses without treating them as templates:
208
+
209
+ - **action/combat:** readability, positioning, threat priority, counterplay, recovery, expressive kit
210
+ - **platforming/racing:** movement mastery, line choice, anticipation, risk, restart cost, readable boundaries
211
+ - **puzzle:** information sufficiency, hypothesis formation, state legibility, undo/reset, insight rather than busywork
212
+ - **strategy/management:** forecasts, opportunity cost, feedback loops, viable plans, recovery from early errors
213
+ - **survival/crafting:** scarcity rhythms, transformation chains, expedition risk, homeward payoff, anti-grind
214
+ - **narrative/social:** role expression, relationship consequences, authored versus emergent story, respectful irreversibility
215
+ - **sandbox/open world:** self-directed goals, systemic interaction, discovery density, world response, return value
216
+
217
+ ## 9. Prototyping and playtesting
218
+
219
+ ### Prototype risk, not polish
220
+
221
+ Name the riskiest assumption: control feel, decision depth, loop renewal, economy stability, social coordination, or content feasibility. Build the smallest slice that can disprove it with real input, real state transitions, and representative feedback.
222
+
223
+ ### Use a test protocol
224
+
225
+ Record:
226
+
227
+ - hypothesis and decision the test will inform
228
+ - participant profile and prior skills
229
+ - build/version, scenario, starting state, and task
230
+ - observable success/failure thresholds
231
+ - events and metrics to capture
232
+ - moderator script that avoids teaching or defending the design
233
+ - findings separated into behavior, interpretation, severity, confidence, and proposed cause
234
+
235
+ Observe before interviewing. Ask players what they thought was happening, what they planned, and what evidence shaped the plan. Preferences are valuable but do not replace behavior. Telemetry describes what happened at scale; it rarely explains why.
236
+
237
+ Use rapid iterative testing for obvious, high-confidence usability defects: make a small fix, test it with the next appropriate participant, and verify that it solves the problem without creating another. Do not churn balance or appeal based on one participant.
238
+
239
+ Classify findings:
240
+
241
+ - **comprehension:** goal, rule, state, or feedback misunderstood
242
+ - **execution:** intention clear but control/precision/timing blocks action
243
+ - **balance:** options or outcomes violate intended tradeoffs
244
+ - **pacing:** pressure, rest, novelty, or payoff arrives at the wrong rate
245
+ - **motivation:** player sees no valued reason to continue
246
+ - **accessibility:** an avoidable barrier excludes a player
247
+ - **technical:** implementation differs from the design contract
248
+
249
+ ## 10. JGengine translation
250
+
251
+ - Keep the design contract and acceptance criteria in the tracked issue/PR, not a speculative document tree.
252
+ - Put definitions, costs, rewards, tiers, recipes, and formulas in typed catalogs or config.
253
+ - Put mutable state in serializable shared primitives and transitions in systems/commands.
254
+ - Put placement, routes, terrain, markers, zones, foliage, and asset instances in `editor.scene.json` via `jgengine-editor`.
255
+ - Query authored ids and semantics through `jgengine-world`; never copy coordinates into rules.
256
+ - Use deterministic injected randomness and headless tests for loops, economies, and failure states.
257
+ - Add telemetry only for a named design question and avoid collecting unnecessary player data.
258
+ - If a reusable rule is missing, implement the narrow package primitive with the game as first adopter.
259
+
260
+ ## 11. Diagnostic questions
261
+
262
+ Before calling a design coherent, ask:
263
+
264
+ - Can a player state the immediate goal, available verbs, and likely consequences?
265
+ - What interesting decision repeats, and how does context stop it becoming solved?
266
+ - What does the player learn in the first minute, first session, and tenth session?
267
+ - Which state changes make each loop worth repeating?
268
+ - What behavior does each reward actually incentivize?
269
+ - Where can positive feedback create a runaway result?
270
+ - Which barriers are intentional challenge and which are accidental exclusion?
271
+ - What happens after failure, success, mastery, interruption, and return?
272
+ - What breaks with one player, the maximum player count, or a disconnect?
273
+ - What evidence would cause the team to remove or redesign the feature?
274
+
275
+ ## 12. Research basis
276
+
277
+ These sources provide lenses and evidence, not commandments:
278
+
279
+ - Robin Hunicke, Marc LeBlanc, and Robert Zubek, [“MDA: A Formal Approach to Game Design and Game Research”](https://users.cs.northwestern.edu/~hunicke/MDA.pdf): trace mechanics, runtime dynamics, and intended experience causally and avoid using “fun” as the whole vocabulary.
280
+ - Richard Ryan and collaborators, [Player Experience of Needs Satisfaction](https://selfdeterminationtheory.org/player-experience-of-needs-satisfaction-pens/): empirical motivation lens around autonomy, competence, and relatedness.
281
+ - Joris Dormans, [“Simulating Mechanics to Study Emergence in Games”](https://ojs.aaai.org/index.php/AIIDE/article/view/12477): model resource flows, internal economies, and emergent feedback before implementation.
282
+ - Daniel Cook, [“The Chemistry of Game Design”](https://www.gamedeveloper.com/design/the-chemistry-of-game-design): action/simulation/feedback/learning atoms and skill-chain analysis.
283
+ - Robin Hunicke and Vernell Chapman, [“AI for Dynamic Difficulty Adjustment in Games”](https://users.cs.northwestern.edu/~hunicke/pubs/Hamlet.pdf): difficulty, resource supply, uncertainty, and the limitations of adjustment systems.
284
+ - Christiane Birk and colleagues, [“Designing Game Feel: A Survey”](https://arxiv.org/abs/2011.09201): physical tuning, feedback amplification, and intent-supporting streamlining.
285
+ - GDC, [“Prime, Teach, Observe”](https://gdcvault.com/play/1021120/Prime-Teach-Observe-Tutorializing-Innovative): teach mechanics through player modeling and iterative observation.
286
+ - Microsoft Games Studios, [“Using the RITE Method to Improve Products”](https://jpattonassociates.com/wp-content/uploads/2015/04/rite_method.pdf): rapidly fix and empirically verify high-confidence usability problems.
287
+ - Microsoft, [Xbox Accessibility Guidelines](https://learn.microsoft.com/en-us/xbox/accessibility/guidelines): player-informed guidance for input, objectives, feedback, difficulty, timing, sensory access, and communication.
288
+ - Matthias Worch, [“Decisions That Matter”](https://gdcvault.com/play/1020570/): connect informed choice, agency, consequence, and level context.
@@ -9,16 +9,16 @@ Read the repository [README](../../../README.md) for package truth, commands, la
9
9
 
10
10
  ## 1. Establish the target
11
11
 
12
- Capture only decisions that change architecture:
12
+ Treat the pitch as a unique composition of needs, not a genre to fill in — never reach for a genre kit, preset, archetype, or class template ("default sports car", "default RPG", "default FPS") in the SDK or skills (see [AGENTS.md](../../../AGENTS.md)). Use `game-design` to turn the pitch into a testable player promise, verbs, loops, progression, failure, and completion scenario. Use `level-design` when play depends on authored spaces, routes, encounters, exploration, or spatial pacing. Capture only decisions that change architecture:
13
13
 
14
14
  - player point of view and controls
15
15
  - world shape and authored content
16
16
  - core loop, interaction, combat, and progression
17
17
  - solo, local, hosted, or persistent multiplayer
18
- - HUD/menu states and art direction
18
+ - HUD/menu states and **custom** UI art direction (every game owns its presentation — no stock drop-in face)
19
19
  - one observable completion scenario
20
20
 
21
- For a new in-repo game, scaffold with `bun run new:game <id> --name "Title"`. Outside this monorepo, start with `npx jgengine create`; never copy `Games/*`.
21
+ For a new in-repo game, scaffold with `bun run new:game "<id-or-title>"` (thin script alias for `jgengine create`, auto-detects the in-repo variant). Outside this monorepo, start with `npx jgengine create`; never copy `Games/*`.
22
22
 
23
23
  ## 2. Select domains
24
24
 
@@ -26,6 +26,8 @@ Load only rows the target needs. Do not preload every domain.
26
26
 
27
27
  | Need | Skill | Owner |
28
28
  | --- | --- | --- |
29
+ | player promise, pillars, verbs, loops, economy, progression, balance | `game-design` | experience and rule intent |
30
+ | metrics, topology, encounters, navigation, spatial pacing | `level-design` | playable space intent |
29
31
  | scene placement, terrain painting, paths, asset authoring | `jgengine-editor` | editor document and authoring tools |
30
32
  | runtime world, movement, input, interaction, AI, navigation, audio | `jgengine-world` | spatial simulation and world runtime |
31
33
  | game state, systems, inventory, crafting, quests, economy, turns | `jgengine-gameplay` | non-combat rules and state |
@@ -34,15 +36,17 @@ Load only rows the target needs. Do not preload every domain.
34
36
  | models, sprites, materials, audio files, source licensing | `jgengine-assets` | asset discovery and catalogs |
35
37
  | authority, transport, replication, sessions, host persistence | `jgengine-multiplayer` | network topology and persistence adapters |
36
38
 
37
- Scenes normally require both `jgengine-editor` for authoring and `jgengine-world` for runtime consumption. Combat and multiplayer are opt-in, not default intake.
39
+ World content routes editor-first: any request that adds, moves, restyles, or removes something visible in the world — however phrased ("design this world", "place the enemies", "make it look better") — starts in `jgengine-editor`; the other domains consume the authored document. Scenes normally require both `jgengine-editor` for authoring and `jgengine-world` for runtime consumption. Combat and multiplayer are opt-in, not default intake.
38
40
 
39
41
  ## 3. Discover before designing
40
42
 
41
43
  Within each selected domain:
42
44
 
45
+ 0. Fastest start for a common composition: `npx jgengine recipe <name>` prints a vetted, SDK-typechecked snippet (imports + wired code) for `combat-loop`, `boss-telegraph`, `loot`, `quest`, `coop-presence`, `third-person-camera`; `npx jgengine recipe` lists them. Copy that instead of reconning per-file.
43
46
  1. Search `capabilities.md` by intent; it maps needs to imports.
44
47
  2. Open `api.md` only when exact signatures or export inventory are needed.
45
48
  3. Open the linked reference only for a deeper recipe or trap.
49
+ 4. For how several primitives wire into a running loop, read the domain's `recipes/` — connected, genre-free walkthroughs organized by composition seam; this skill's own [recipes/minimal-game.md](recipes/minimal-game.md) is the default whole-game walkthrough. Prefer a recipe over reading a game's source; the games under `Games/*` are not templates or references, and a hybrid game is just a different composition of the same primitives.
46
50
 
47
51
  If no capability fits, identify the upstream package seam before writing game-local code. In this repository, implement a reusable primitive with its first adopter; if editor-owned content cannot be expressed, file the editor gap first.
48
52