@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.
- package/CHANGELOG.md +52 -0
- package/dist/CombatPresentation.d.ts +5 -0
- package/dist/CombatPresentation.js +8 -0
- package/dist/GameHost.d.ts +27 -1
- package/dist/GameHost.js +83 -4
- package/dist/GamePlayer.d.ts +5 -0
- package/dist/GamePlayer.js +5 -0
- package/dist/GamePlayerShell.d.ts +5 -0
- package/dist/GamePlayerShell.js +63 -359
- package/dist/GameUiPreview.js +3 -0
- package/dist/Shell3dPresentation.d.ts +63 -0
- package/dist/Shell3dPresentation.js +302 -0
- package/dist/ShellChrome.d.ts +51 -0
- package/dist/ShellChrome.js +51 -0
- package/dist/ShellHudPresentation.d.ts +41 -0
- package/dist/ShellHudPresentation.js +22 -0
- package/dist/audio/audioEngine.d.ts +4 -0
- package/dist/audio/audioEngine.js +111 -26
- package/dist/audio/audioWire.d.ts +22 -4
- package/dist/audio/audioWire.js +46 -3
- package/dist/audio/loopParams.d.ts +20 -0
- package/dist/audio/loopParams.js +28 -0
- package/dist/camera/GameCameraRig.js +6 -1
- package/dist/camera/GameOrbitCamera.js +7 -1
- package/dist/camera/cameraCollision.d.ts +28 -0
- package/dist/camera/cameraCollision.js +34 -0
- package/dist/camera/cameraRigs.d.ts +3 -1
- package/dist/camera/cameraRigs.js +24 -10
- package/dist/camera/index.d.ts +1 -0
- package/dist/camera/index.js +1 -0
- package/dist/camera/rigMath.d.ts +27 -0
- package/dist/camera/rigMath.js +45 -0
- package/dist/defineGame.d.ts +15 -1
- package/dist/defineGame.js +26 -4
- package/dist/devtools/DevtoolsOverlay.d.ts +4 -4
- package/dist/devtools/DevtoolsOverlay.js +28 -12
- package/dist/devtools/agentBridge.js +4 -0
- package/dist/devtools/perfDiagnose.js +1 -1
- package/dist/diagnostics/RuntimeDiagnostics.d.ts +7 -0
- package/dist/diagnostics/RuntimeDiagnostics.js +23 -12
- package/dist/environment/EnvironmentScene.js +17 -3
- package/dist/environment/RoadJunctions.d.ts +12 -0
- package/dist/environment/RoadJunctions.js +69 -0
- package/dist/environment/RoadRibbons.d.ts +8 -2
- package/dist/environment/RoadRibbons.js +26 -8
- package/dist/environment/terrainGroundColor.d.ts +9 -0
- package/dist/environment/terrainGroundColor.js +22 -0
- package/dist/gameKit.d.ts +27 -0
- package/dist/gameKit.js +29 -0
- package/dist/map/MapMarkerBeacons.d.ts +3 -2
- package/dist/postfx/PostProcessing.d.ts +9 -1
- package/dist/postfx/PostProcessing.js +11 -4
- package/dist/presentationResolve.d.ts +39 -0
- package/dist/presentationResolve.js +53 -0
- package/dist/registry.d.ts +1 -0
- package/dist/render/PartMotion.d.ts +18 -0
- package/dist/render/PartMotion.js +91 -0
- package/dist/render/SceneModels.d.ts +9 -2
- package/dist/render/SceneModels.js +31 -180
- package/dist/render/assetBase.d.ts +17 -0
- package/dist/render/assetBase.js +35 -0
- package/dist/render/measureBounds.d.ts +34 -0
- package/dist/render/measureBounds.js +127 -0
- package/dist/render/modelLoad.js +4 -1
- package/dist/render/resolveModel.d.ts +15 -0
- package/dist/render/resolveModel.js +43 -2
- package/dist/render/useModelAnimation.d.ts +10 -0
- package/dist/render/useModelAnimation.js +198 -0
- package/dist/scatter/InstancedScatter.js +5 -0
- package/dist/scatter/scatterProxies.js +24 -0
- package/dist/scene/AuthoredScene.d.ts +3 -1
- package/dist/scene/AuthoredScene.js +7 -2
- package/dist/scene/CityRenderer.d.ts +2 -0
- package/dist/scene/CityRenderer.js +1031 -0
- package/dist/scene/GrassFieldRenderer.js +53 -5
- package/dist/scene/PoleLineRenderer.d.ts +2 -0
- package/dist/scene/PoleLineRenderer.js +287 -0
- package/dist/scene/SoilPatchRenderer.js +70 -7
- package/dist/scene/WaterRenderer.js +34 -10
- package/dist/scene/builtinSceneKindRenderers.js +4 -0
- package/dist/scene/cityWindowMaterial.d.ts +16 -0
- package/dist/scene/cityWindowMaterial.js +81 -0
- package/dist/scene/sceneKindRenderers.d.ts +2 -0
- package/dist/settings/appliedSettings.d.ts +2 -1
- package/dist/settings/appliedSettings.js +4 -2
- package/dist/structures/GeneratedBuilding.d.ts +4 -0
- package/dist/structures/GeneratedBuilding.js +17 -7
- package/dist/structures/TransformGizmo.d.ts +11 -1
- package/dist/structures/TransformGizmo.js +9 -5
- package/dist/terrain/GrassField.d.ts +11 -3
- package/dist/terrain/GrassField.js +16 -6
- package/dist/terrain/grassGeometry.d.ts +33 -1
- package/dist/terrain/grassGeometry.js +83 -21
- package/dist/terrain/grassMaterial.d.ts +18 -0
- package/dist/terrain/grassMaterial.js +66 -13
- package/dist/terrain/heightfieldGeometry.d.ts +34 -0
- package/dist/terrain/heightfieldGeometry.js +109 -0
- package/dist/terrain/index.d.ts +1 -0
- package/dist/terrain/index.js +1 -0
- package/dist/terrain/soilPatchMaterial.d.ts +15 -2
- package/dist/terrain/soilPatchMaterial.js +46 -8
- package/dist/terrain/terrainDetailMaterial.js +15 -2
- package/dist/water/Ocean.d.ts +7 -1
- package/dist/water/Ocean.js +16 -3
- package/dist/water/OceanConfig.d.ts +9 -0
- package/dist/water/OceanConfig.js +6 -0
- package/dist/water/OceanMaterial.d.ts +12 -0
- package/dist/water/OceanMaterial.js +9 -0
- package/dist/water/OceanShader.d.ts +2 -2
- package/dist/water/OceanShader.js +78 -10
- package/dist/world/PlaceScene.d.ts +11 -0
- package/dist/world/PlaceScene.js +27 -0
- package/dist/world/WorldHud.d.ts +3 -1
- package/dist/world/WorldHud.js +2 -2
- package/dist/world/WorldScene.js +32 -4
- package/dist/worldSky.d.ts +7 -1
- package/dist/worldSky.js +11 -1
- package/package.json +4 -4
- package/skills/game-design/SKILL.md +28 -0
- package/skills/game-design/agents/openai.yaml +4 -0
- package/skills/game-design/references/application-playbook.md +170 -0
- package/skills/game-design/references/field-guide.md +288 -0
- package/skills/jgengine/SKILL.md +8 -4
- package/skills/jgengine/api.md +182 -81
- package/skills/jgengine/capabilities.md +104 -2
- package/skills/jgengine/recipes/minimal-game.md +88 -0
- package/skills/jgengine-ui/SKILL.md +17 -10
- package/skills/jgengine-ui/api.md +316 -51
- package/skills/jgengine-ui/capabilities.md +135 -2
- package/skills/jgengine-ui/recipes/portable-minimap.md +150 -0
- package/skills/jgengine-ui/reference.md +59 -9
- package/skills/jgengine-ui/references/visual-scorecard.md +1 -1
- package/skills/jgengine-world/SKILL.md +13 -0
- package/skills/jgengine-world/api.md +453 -21
- package/skills/jgengine-world/capabilities.md +112 -2
- package/skills/jgengine-world/recipes/commanding-entities.md +128 -0
- package/skills/jgengine-world/reference.md +43 -4
- package/skills/level-design/SKILL.md +54 -0
- package/skills/level-design/agents/openai.yaml +4 -0
- package/skills/level-design/references/application-playbook.md +192 -0
- package/skills/level-design/references/field-guide.md +337 -0
- package/skills/level-design/references/live-editor-loop.md +179 -0
- package/dist/cartridge/runtime.d.ts +0 -15
- package/dist/cartridge/runtime.js +0 -556
- package/dist/cartridge/spec.d.ts +0 -188
- package/dist/cartridge/spec.js +0 -19
- package/dist/cartridge/validate.d.ts +0 -2
- package/dist/cartridge/validate.js +0 -78
- package/dist/cartridge.d.ts +0 -145
- package/dist/cartridge.js +0 -246
- 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.
|
package/skills/jgengine/SKILL.md
CHANGED
|
@@ -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>
|
|
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
|
|