summer-engine 3.4.0 → 3.4.1
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/.claude-plugin/marketplace.json +1 -1
- package/.claude-plugin/plugin.json +1 -1
- package/.codex-plugin/plugin.json +1 -1
- package/.cursor-plugin/plugin.json +1 -1
- package/.factory-plugin/plugin.json +1 -1
- package/.opencode/INSTALL.md +8 -8
- package/.opencode/plugins/summer.js +2 -2
- package/AGENTS.md +7 -7
- package/CHANGELOG.md +14 -0
- package/GEMINI.md +1 -1
- package/NOTICE +1 -1
- package/README.md +30 -34
- package/assets/autopilot/run.sh +2 -2
- package/assets/navigation/web-routes.json +1 -1
- package/commands/gameskill.md +2 -2
- package/commands/summer.md +25 -25
- package/dist/cli/commands/open.d.ts +1 -1
- package/dist/cli/commands/run.d.ts +1 -1
- package/dist/cli/commands/run.js +1 -1
- package/dist/cli/commands/skills.js +2 -2
- package/dist/core/api-client.d.ts +5 -6
- package/dist/core/api-client.js +12 -15
- package/dist/core/auth.js +2 -2
- package/dist/core/capabilities/asset-import.d.ts +0 -1
- package/dist/core/capabilities/camera-view.d.ts +1 -1
- package/dist/core/capabilities/camera-view.js +2 -2
- package/dist/core/capabilities/connect-signal.d.ts +1 -2
- package/dist/core/capabilities/connect-signal.js +1 -2
- package/dist/core/capabilities/console-read.d.ts +2 -2
- package/dist/core/capabilities/console-read.js +2 -2
- package/dist/core/capabilities/engine-receipt.d.ts +5 -7
- package/dist/core/capabilities/engine-receipt.js +7 -9
- package/dist/core/capabilities/export-game.js +3 -3
- package/dist/core/capabilities/export-presets.d.ts +1 -1
- package/dist/core/capabilities/export-presets.js +1 -1
- package/dist/core/capabilities/fabricate-mesh.d.ts +2 -3
- package/dist/core/capabilities/fabricate-mesh.js +2 -3
- package/dist/core/capabilities/frame-quality.d.ts +4 -4
- package/dist/core/capabilities/frame-quality.js +4 -4
- package/dist/core/capabilities/grep.d.ts +1 -1
- package/dist/core/capabilities/grep.js +1 -1
- package/dist/core/capabilities/navigation/open.d.ts +1 -1
- package/dist/core/capabilities/navigation/open.js +1 -1
- package/dist/core/capabilities/navigation/render-product-map.js +1 -1
- package/dist/core/capabilities/navigation/targets.js +2 -2
- package/dist/core/capabilities/placement-batch.d.ts +1 -1
- package/dist/core/capabilities/placement-batch.js +2 -2
- package/dist/core/capabilities/play-determinism.d.ts +1 -1
- package/dist/core/capabilities/play-determinism.js +1 -1
- package/dist/core/capabilities/publish-build.d.ts +1 -1
- package/dist/core/capabilities/publish-build.js +4 -6
- package/dist/core/capabilities/publish-download.d.ts +1 -2
- package/dist/core/capabilities/publish-download.js +2 -3
- package/dist/core/capabilities/replace-node.d.ts +1 -3
- package/dist/core/capabilities/replace-node.js +1 -3
- package/dist/core/capabilities/runtime-control.d.ts +5 -7
- package/dist/core/capabilities/runtime-control.js +7 -9
- package/dist/core/capabilities/scene-batch.d.ts +1 -1
- package/dist/core/capabilities/scene-batch.js +1 -1
- package/dist/core/capabilities/scene-kind.js +1 -1
- package/dist/core/capabilities/scene-readback.d.ts +3 -4
- package/dist/core/capabilities/scene-readback.js +3 -4
- package/dist/core/capabilities/scene-script.d.ts +2 -2
- package/dist/core/capabilities/scene-script.js +2 -2
- package/dist/core/capabilities/seeing/shot-store.d.ts +1 -1
- package/dist/core/capabilities/seeing/shot-store.js +1 -1
- package/dist/core/capabilities/summer-bundle.d.ts +2 -3
- package/dist/core/capabilities/summer-bundle.js +2 -3
- package/dist/core/capabilities/surface-snap.d.ts +1 -1
- package/dist/core/capabilities/surface-snap.js +1 -1
- package/dist/core/capabilities/tool-dispatch.js +1 -1
- package/dist/core/capabilities/ui-control.d.ts +1 -2
- package/dist/core/capabilities/ui-control.js +1 -2
- package/dist/core/capabilities/world-snapshot.d.ts +1 -1
- package/dist/core/capabilities/world-snapshot.js +1 -1
- package/dist/core/capability-skew.d.ts +2 -3
- package/dist/core/capability-skew.js +4 -5
- package/dist/core/feedback/client.js +1 -1
- package/dist/core/launch-posture.d.ts +3 -3
- package/dist/core/launch-posture.js +3 -3
- package/dist/core/library-read.js +1 -2
- package/dist/core/templates.d.ts +1 -2
- package/dist/core/templates.js +1 -2
- package/dist/mcp/server.d.ts +2 -2
- package/dist/mcp/server.js +2 -2
- package/dist/mcp/tools/creator-tools.js +1 -1
- package/dist/mcp/tools/debug-tools.js +1 -1
- package/dist/mcp/tools/generate-tools.js +7 -7
- package/dist/mcp/tools/navigation-tools.d.ts +1 -1
- package/dist/mcp/tools/navigation-tools.js +1 -1
- package/dist/mcp/tools/spatial-tools.js +1 -1
- package/dist/mcp/tools/visual-tools.js +2 -2
- package/dist/mcp/tools/with-engine.d.ts +1 -2
- package/dist/mcp/tools/with-engine.js +1 -2
- package/gemini-extension.json +1 -1
- package/hooks/session-start.sh +2 -2
- package/integrations/README.md +70 -76
- package/integrations/claude/README.md +0 -3
- package/integrations/codex/README.md +1 -2
- package/integrations/copilot-jetbrains/README.md +1 -1
- package/integrations/cursor/README.md +1 -2
- package/integrations/factory/README.md +15 -11
- package/integrations/mistral-vibe/README.md +1 -1
- package/integrations/opencode/README.md +1 -1
- package/integrations/roo-code/README.md +1 -1
- package/integrations/rovo-dev/README.md +1 -1
- package/integrations/trae/README.md +1 -1
- package/integrations/windsurf/README.md +3 -3
- package/library/references/collaborative-protocol/collaborative-protocol.md +5 -5
- package/library/references/gd-style/gd-style.md +4 -6
- package/library/references/godot-version/godot-version.md +3 -3
- package/library/references/headless-routing/headless-routing.md +2 -2
- package/library/references/mcp-fresh-chat-playbook/mcp-fresh-chat-playbook.md +2 -2
- package/library/references/mcp-tools-reference/mcp-tools-reference.md +15 -14
- package/library/references/product-map/product-map.md +1 -1
- package/library/references/public-surface-language/public-surface-language.md +1 -1
- package/library/references/summer-folder/summer-folder.md +1 -1
- package/library/skills/3d-lighting/SKILL.md +4 -4
- package/library/skills/README.md +5 -5
- package/library/skills/adaptive-music/SKILL.md +7 -7
- package/library/skills/ai-characters-in-games/SKILL.md +1 -1
- package/library/skills/ambient-bed/SKILL.md +12 -14
- package/library/skills/animated-loop/SKILL.md +42 -42
- package/library/skills/animation-tree/SKILL.md +6 -6
- package/library/skills/art-direction/SKILL.md +8 -11
- package/library/skills/asset-strategy/SKILL.md +3 -3
- package/library/skills/audio-direction/SKILL.md +8 -10
- package/library/skills/auto-fire-targeting/SKILL.md +4 -3
- package/library/skills/bounded-engine-runs/SKILL.md +6 -7
- package/library/skills/brainstorm-game/SKILL.md +5 -5
- package/library/skills/brainstorming/SKILL.md +9 -15
- package/library/skills/celeste-momentum-platforming/SKILL.md +8 -13
- package/library/skills/celeste-momentum-platforming/resource.yaml +1 -1
- package/library/skills/character-animation-wiring/SKILL.md +2 -2
- package/library/skills/character-model/SKILL.md +15 -26
- package/library/skills/character-movement/SKILL.md +1 -1
- package/library/skills/character-movement/references/movement-3d.md +1 -1
- package/library/skills/character-portrait/SKILL.md +4 -4
- package/library/skills/cinematic-cutscene/SKILL.md +38 -38
- package/library/skills/combat-basics/SKILL.md +1 -1
- package/library/skills/compatibility-renderer-traps/SKILL.md +2 -2
- package/library/skills/concept-art/SKILL.md +3 -3
- package/library/skills/create-asset-sheet/SKILL.md +12 -31
- package/library/skills/debug/SKILL.md +5 -4
- package/library/skills/debugging-game-feel/SKILL.md +1 -4
- package/library/skills/debugging-game-feel/resource.yaml +1 -1
- package/library/skills/design-level/SKILL.md +5 -5
- package/library/skills/design-mechanic/SKILL.md +6 -6
- package/library/skills/design-npc/SKILL.md +8 -15
- package/library/skills/diagnosing-perf-regressions/SKILL.md +5 -10
- package/library/skills/dispatching-parallel-agents/SKILL.md +1 -19
- package/library/skills/environment-kit/SKILL.md +5 -5
- package/library/skills/export-and-ship/SKILL.md +23 -24
- package/library/skills/fabricating-assets/SKILL.md +1 -1
- package/library/skills/facial-and-lipsync/SKILL.md +5 -5
- package/library/skills/fps-controller/SKILL.md +17 -16
- package/library/skills/fps-controller/resource.yaml +0 -2
- package/library/skills/game-feel/SKILL.md +6 -7
- package/library/skills/gameskill/SKILL.md +3 -3
- package/library/skills/gdscript-patterns/SKILL.md +3 -3
- package/library/skills/generate-motion/SKILL.md +5 -22
- package/library/skills/godogen-visual-proof-game-generation/SKILL.md +72 -90
- package/library/skills/godogen-visual-proof-game-generation/resource.yaml +0 -1
- package/library/skills/headless-scripting/SKILL.md +8 -8
- package/library/skills/instantiate-asset-pack/SKILL.md +7 -3
- package/library/skills/investigating-bugs/SKILL.md +3 -11
- package/library/skills/investigating-bugs/condition-based-waiting.md +0 -10
- package/library/skills/investigating-bugs/root-cause-tracing.md +0 -8
- package/library/skills/lumera-single-image-scene-reconstruction/SKILL.md +15 -15
- package/library/skills/lumera-single-image-scene-reconstruction/resource.yaml +0 -1
- package/library/skills/make-game/SKILL.md +3 -5
- package/library/skills/make-game/references/2d-platformer.md +1 -1
- package/library/skills/multiplayer-project/SKILL.md +1 -1
- package/library/skills/multiplayer-testing/SKILL.md +4 -4
- package/library/skills/music-track/SKILL.md +40 -38
- package/library/skills/new-project/SKILL.md +4 -6
- package/library/skills/organic-model/SKILL.md +9 -9
- package/library/skills/pixel-art/SKILL.md +6 -6
- package/library/skills/play/SKILL.md +3 -4
- package/library/skills/playtesting-a-feature/SKILL.md +4 -6
- package/library/skills/procedural-animation/SKILL.md +10 -11
- package/library/skills/prop-model/SKILL.md +4 -4
- package/library/skills/psx-retro-rendering/SKILL.md +20 -20
- package/library/skills/psx-retro-rendering/resource.yaml +2 -3
- package/library/skills/realtime-wet-surfaces/SKILL.md +15 -15
- package/library/skills/realtime-wet-surfaces/resource.yaml +1 -2
- package/library/skills/remote-deploy/SKILL.md +20 -21
- package/library/skills/retarget/SKILL.md +19 -23
- package/library/skills/running-in-the-cloud/SKILL.md +5 -5
- package/library/skills/scene-composition/SKILL.md +5 -5
- package/library/skills/scene-hierarchy-design/SKILL.md +3 -3
- package/library/skills/scene-hierarchy-design/resource.yaml +0 -1
- package/library/skills/scene-scripting/SKILL.md +3 -3
- package/library/skills/scene-to-level/SKILL.md +28 -31
- package/library/skills/skill-create/SKILL.md +1 -1
- package/library/skills/skill-improve/SKILL.md +9 -9
- package/library/skills/skill-test/SKILL.md +10 -10
- package/library/skills/skintokens-auto-rigging/SKILL.md +18 -18
- package/library/skills/skintokens-auto-rigging/resource.yaml +3 -3
- package/library/skills/skybox-panorama/SKILL.md +8 -9
- package/library/skills/sound-effect/SKILL.md +19 -19
- package/library/skills/spatial-placement/SKILL.md +2 -2
- package/library/skills/spatial-placement/references/kit-placement-tools.md +12 -22
- package/library/skills/sprite-sheet/SKILL.md +10 -10
- package/library/skills/summer-analytics/SKILL.md +3 -3
- package/library/skills/summer-friends/SKILL.md +10 -10
- package/library/skills/summer-leaderboards/SKILL.md +6 -6
- package/library/skills/summer-match-results/SKILL.md +13 -13
- package/library/skills/summer-matchmaking/SKILL.md +11 -11
- package/library/skills/summer-parties/SKILL.md +9 -9
- package/library/skills/summer-player-data/SKILL.md +12 -12
- package/library/skills/summer-store/SKILL.md +6 -6
- package/library/skills/summer-world-chat/SKILL.md +9 -9
- package/library/skills/summer-world-saves/SKILL.md +7 -7
- package/library/skills/text-to-motion/rigging-for-text-motion.md +1 -1
- package/library/skills/tileable-texture/SKILL.md +1 -1
- package/library/skills/trailer-shot/SKILL.md +36 -36
- package/library/skills/tune-performance/SKILL.md +13 -13
- package/library/skills/tune-performance/resource.yaml +1 -1
- package/library/skills/ui-graphics/SKILL.md +7 -7
- package/library/skills/use-widget-asset/SKILL.md +7 -7
- package/library/skills/using-summer/SKILL.md +5 -7
- package/library/skills/vehicle-model/SKILL.md +6 -7
- package/library/skills/vehicle-model/resource.yaml +2 -2
- package/library/skills/verification-before-completion/SKILL.md +5 -6
- package/library/skills/vfx-dissolve/SKILL.md +4 -4
- package/library/skills/vfx-fire/SKILL.md +6 -6
- package/library/skills/vfx-fire/_building-blocks/additive-billboard-particles.md +3 -3
- package/library/skills/vfx-hit-spark/SKILL.md +4 -4
- package/library/skills/vfx-hit-spark/_building-blocks/additive-billboard-particles.md +3 -3
- package/library/skills/vfx-lightning/SKILL.md +5 -5
- package/library/skills/vfx-lightning/_building-blocks/additive-billboard-particles.md +3 -3
- package/library/skills/vfx-lightning/_building-blocks/trauma-shake-snippet.md +9 -3
- package/library/skills/vfx-magic-glow/SKILL.md +4 -4
- package/library/skills/vfx-magic-glow/_building-blocks/additive-billboard-particles.md +3 -3
- package/library/skills/vfx-muzzle-flash/SKILL.md +5 -5
- package/library/skills/vfx-muzzle-flash/_building-blocks/additive-billboard-particles.md +3 -3
- package/library/skills/vfx-muzzle-flash/_building-blocks/trauma-shake-snippet.md +9 -3
- package/library/skills/vfx-smoke/SKILL.md +5 -5
- package/library/skills/vfx-water-ripple/SKILL.md +2 -2
- package/library/skills/vfx-water-ripple/_building-blocks/additive-billboard-particles.md +3 -3
- package/library/skills/voice-line/SKILL.md +9 -9
- package/library/skills/world-building-3d/references/spatial-tools.md +2 -2
- package/library/skills/writing-plans/SKILL.md +4 -4
- package/library/skills/writing-skills/SKILL.md +8 -8
- package/library/tools/creator-publish/resource.yaml +4 -4
- package/library/tools/creator-releases/resource.yaml +5 -5
- package/library/tools/publish-build/resource.yaml +5 -1
- package/package.json +1 -1
- package/registry/generated/gemini-extension.json +1 -1
- package/registry/generated/index.json +130 -130
- package/registry/generated/marketplace.claude.json +1 -1
- package/registry/generated/plugin.claude.json +1 -1
- package/registry/generated/plugin.codex.json +1 -1
- package/registry/generated/plugin.cursor.json +1 -1
- package/registry/generated/plugin.factory.json +1 -1
- package/registry/generated/skills-index.md +5 -5
- package/registry/generated/skills-registry.json +5 -5
- package/registry/schemas/domains.json +1 -1
|
@@ -33,15 +33,17 @@ export command.
|
|
|
33
33
|
1. Read `engineBinaryPath` from `summer_get_project_context`.
|
|
34
34
|
2. Resolve the matching export-template directory for that exact Summer
|
|
35
35
|
technical base.
|
|
36
|
-
3. Inventory the installed templates
|
|
37
|
-
|
|
36
|
+
3. Inventory the installed templates (`summer_export_templates` lists them and
|
|
37
|
+
installs Summer's macOS, Windows and web templates) and any
|
|
38
|
+
`custom_template/release` paths already configured in `export_presets.cfg`.
|
|
38
39
|
4. Build a capability table with `available`, `missing prerequisite`, or
|
|
39
40
|
`impossible on this build` for every requested target.
|
|
40
41
|
|
|
41
|
-
A stock Summer
|
|
42
|
-
incompatible with that Mono build.
|
|
43
|
-
|
|
44
|
-
|
|
42
|
+
A stock Summer Mono install ships only the macOS template. Web export is
|
|
43
|
+
incompatible with that Mono build. Run `summer_export_templates` before marking
|
|
44
|
+
another target missing: it installs Summer's macOS and Windows templates. Linux,
|
|
45
|
+
Android, and iOS require a matching custom template or an external CI/build
|
|
46
|
+
environment, plus their platform toolchains where applicable.
|
|
45
47
|
|
|
46
48
|
**Hard gate:** an absent template or toolchain means the target is unavailable.
|
|
47
49
|
Do not create its preset, recommend it as a local option, or invoke an export
|
|
@@ -55,7 +57,8 @@ Offer only targets marked `available` by step 1. Record other requested
|
|
|
55
57
|
destinations as blocked follow-ups with their exact prerequisite.
|
|
56
58
|
|
|
57
59
|
> Locally proven targets: **macOS**. Requested but blocked: **Windows**
|
|
58
|
-
> (
|
|
60
|
+
> (install the template with `summer_export_templates`), **Web** (non-Mono
|
|
61
|
+
> build), **Android**
|
|
59
62
|
> (template + Android toolchain). Which proven target should I prepare?
|
|
60
63
|
|
|
61
64
|
Each destination has a different list. Multiple destinations = multiple lists. Don't shortcut — the iOS list does not satisfy the Steam list.
|
|
@@ -145,7 +148,7 @@ Build config:
|
|
|
145
148
|
|
|
146
149
|
#### c) Web (HTML5) — unavailable on the stock Mono build
|
|
147
150
|
|
|
148
|
-
Do not recommend or attempt this target from the stock
|
|
151
|
+
Do not recommend or attempt this target from the stock Mono installation.
|
|
149
152
|
Route it to a verified non-Mono Summer-compatible build environment first.
|
|
150
153
|
Once that prerequisite is proven, these browser constraints apply:
|
|
151
154
|
|
|
@@ -157,7 +160,7 @@ Once that prerequisite is proven, these browser constraints apply:
|
|
|
157
160
|
Build config:
|
|
158
161
|
- Export preset: **Web**.
|
|
159
162
|
- Output `.html` + `.wasm` + `.pck` + `.js`.
|
|
160
|
-
- Disable: "Variant: Editor support", "Encryption".
|
|
163
|
+
- Disable: "Variant: Editor support", "Encryption".
|
|
161
164
|
|
|
162
165
|
Known traps:
|
|
163
166
|
- Audio: Chrome blocks autoplay. First user click must trigger audio context resume.
|
|
@@ -168,7 +171,7 @@ Known traps:
|
|
|
168
171
|
| Asset | Resolution / Format |
|
|
169
172
|
|---|---|
|
|
170
173
|
| App icon | 1024×1024 PNG (Apple generates the rest) |
|
|
171
|
-
| Launch screen | Storyboard (
|
|
174
|
+
| Launch screen | Storyboard (the engine generates it) |
|
|
172
175
|
| Screenshots | 6.5" iPhone: 1242×2688 / 2688×1242 (≥ 3); 12.9" iPad if iPad-eligible |
|
|
173
176
|
| App Store description | text per locale, ≤ 4000 chars |
|
|
174
177
|
| Keywords | ≤ 100 chars, comma-separated |
|
|
@@ -230,13 +233,14 @@ For each preset:
|
|
|
230
233
|
| `texture_format/etc2_astc` | `true` for mobile | Smaller texture compression |
|
|
231
234
|
| `application/short_version` | matches `application/config/version` | Steam reads it |
|
|
232
235
|
| `script_encryption_key` in `export_credentials.cfg` | set only when the user explicitly chooses script encryption | The similarly named preset field does not exist |
|
|
233
|
-
| `application/icon` | path to your `.ico` / `.icns` / `.png` | Otherwise
|
|
236
|
+
| `application/icon` | path to your `.ico` / `.icns` / `.png` | Otherwise the default engine icon ships |
|
|
234
237
|
|
|
235
238
|
### 6. Propose the build sequence
|
|
236
239
|
|
|
237
|
-
> Capability proof: macOS available locally; Windows
|
|
238
|
-
>
|
|
239
|
-
>
|
|
240
|
+
> Capability proof: macOS available locally; Windows needs its template
|
|
241
|
+
> (`summer_export_templates`); Linux requires external CI; Web is unavailable
|
|
242
|
+
> on this Mono build. Pre-flight is clean
|
|
243
|
+
> for the macOS preset. May I produce that one proven build now?
|
|
240
244
|
|
|
241
245
|
### 7. Produce a proven build
|
|
242
246
|
|
|
@@ -270,14 +274,14 @@ To enable another target, prove one of these before returning to step 2:
|
|
|
270
274
|
|
|
271
275
|
### Export-option cautions
|
|
272
276
|
|
|
273
|
-
- **`script/encryption_key` does not exist.** The real key is `script_encryption_key`, and it lives in a separate `export_credentials.cfg`, not `export_presets.cfg
|
|
277
|
+
- **`script/encryption_key` does not exist.** The real key is `script_encryption_key`, and it lives in a separate `export_credentials.cfg`, not `export_presets.cfg`. Writing the wrong name produces an **unencrypted build with no error at all**.
|
|
274
278
|
- **There is no `debug` field in a preset.** Debug versus release is chosen by `--export-debug` versus `--export-release`, nothing else.
|
|
275
279
|
|
|
276
280
|
On Apple Silicon, `binary_format/architecture="arm64"` is the natural guess, and it fails leaving a **0-byte `.app` that looks like success**. Only `"universal"` ships.
|
|
277
281
|
|
|
278
282
|
See `headless-scripting` for the wider pattern this is one instance of.
|
|
279
283
|
|
|
280
|
-
If the user is on a CI system (GitHub Actions etc),
|
|
284
|
+
If the user is on a CI system (GitHub Actions etc), point them at a cross-compile workflow: the engine can export Windows and Linux from a Linux runner.
|
|
281
285
|
|
|
282
286
|
### 8. Verify each build
|
|
283
287
|
|
|
@@ -354,7 +358,7 @@ This skill produces release artifacts. Always ask before each build is invoked.
|
|
|
354
358
|
|
|
355
359
|
## Want a working starter?
|
|
356
360
|
|
|
357
|
-
No template — this is a workflow. Each project's export config and store assets are project-specific.
|
|
361
|
+
No template — this is a workflow. Each project's export config and store assets are project-specific.
|
|
358
362
|
|
|
359
363
|
## See also
|
|
360
364
|
|
|
@@ -362,10 +366,5 @@ No template — this is a workflow. Each project's export config and store asset
|
|
|
362
366
|
- `../../references/godot-version/godot-version.md` — Summer compatibility and
|
|
363
367
|
export-template versioning
|
|
364
368
|
- `../../references/collaborative-protocol/collaborative-protocol.md` — "May I write" pattern
|
|
365
|
-
- `
|
|
366
|
-
- `
|
|
367
|
-
- `deployment/steam-uploader/SKILL.md` — `steamcmd` + GodotSteam (when shipped)
|
|
368
|
-
- `deployment/itch-uploader/SKILL.md` — `butler` workflow (when shipped)
|
|
369
|
-
- `deployment/mobile-export/SKILL.md` — iOS / Android specifics (when shipped)
|
|
370
|
-
- `asset-pipeline/attribution-and-licensing/SKILL.md` — community asset attribution
|
|
371
|
-
- `performance/tune-performance/SKILL.md` — pre-ship performance pass
|
|
369
|
+
- `headless-scripting` — the headless CLI pattern the export command follows
|
|
370
|
+
- `tune-performance` — pre-ship performance pass
|
|
@@ -24,7 +24,7 @@ Three facts shape every use:
|
|
|
24
24
|
| Blockout / placeholder | `scene-scripting` primitives or CSG | fabricate | Must be instant and in-scene; no process spawn is justified |
|
|
25
25
|
| Generic hard-surface prop ("a barrel") | `summer_search_assets` → `summer_import_asset` (`prop-model`) | `summer_generate_3d` | The free library plus `target_size` beats paid generation and a 2-minute wait, in a consistent style |
|
|
26
26
|
| Bespoke prop ("the artifact from our GDD") | `summer_generate_3d` | fabricate | Image-to-3D is exactly what generation is for; fabricate when exact dimensions or parametric variants matter |
|
|
27
|
-
| **Modular kit** (walls, pipes, fences, rails that snap) | **fabricate** |
|
|
27
|
+
| **Modular kit** (walls, pipes, fences, rails that snap) | **fabricate** | generated kit (`environment-kit`) | Generation cannot hold dimensions and style across 30 pieces; array + boolean + bevel + one material is the classic kit workflow |
|
|
28
28
|
| Characters (rigged, animated) | `summer_generate_3d` (`character-model`) | library | Scripted organic modelling is the documented failure mode; fabrication has no path to competitive organics blind |
|
|
29
29
|
| Environments / terrain | in-engine terrain + library set dressing | generation for landmarks | Terrain wants interactive tools; dressing wants scatter |
|
|
30
30
|
| Materials / textures / skies | library (`summer_import_hdri`, texture packs) | generation | Fabricate only to bake a procedural material to images |
|
|
@@ -13,10 +13,10 @@ paths: ["**/*.gd", "**/*.tscn", "**/*.tres"]
|
|
|
13
13
|
|
|
14
14
|
Half generative, half authored. The *generative* half: an audio file (TTS via `summer_generate_audio` with `capability: "text_to_speech"`) goes through a phoneme-extraction tool (Summer does NOT wrap one — you run it externally), out comes a viseme timeline — a list of `{ phoneme, start_time, duration }` triples. The *authored* half: the character's face mesh must have BlendShapes named for the standard viseme set, or the timeline has nothing to drive. Without both halves, you get a talking robot.
|
|
15
15
|
|
|
16
|
-
The
|
|
16
|
+
The pipeline:
|
|
17
17
|
|
|
18
18
|
1. **Audio in** — `.wav`/`.mp3` from `summer_generate_audio({capability: "text_to_speech", ...})` or imported VO.
|
|
19
|
-
2. **Phoneme extraction** — done OUTSIDE Summer. Recommended: **Rhubarb Lip Sync** (open source,
|
|
19
|
+
2. **Phoneme extraction** — done OUTSIDE Summer. Recommended: **Rhubarb Lip Sync** (open source, widely used for game lipsync; outputs JSON with mouth-shape cues over time). Alternatives: gentle, allosaurus, or a Whisper-phoneme model on Replicate / Hugging Face. There is no `summer_*` MCP for this in the current engine.
|
|
20
20
|
3. **Viseme mapping** — phonemes / Rhubarb cues → Oculus / Apple ARKit viseme set (15 standard shapes covers English).
|
|
21
21
|
4. **BlendShape driver** — at runtime, lerp the mesh's BlendShape weights along the timeline, synced to audio playback.
|
|
22
22
|
5. **Optional emotional layer** — separate BlendShape track for `smile`, `brow_raise`, `eye_squint` etc., authored in code or at clip-edit time.
|
|
@@ -122,7 +122,7 @@ Rhubarb mouth-shape → ARKit viseme cheat sheet (apply during the bake step):
|
|
|
122
122
|
|
|
123
123
|
**Cloud fallback:** a Whisper-phoneme model on Replicate or a Hugging Face inference endpoint will emit ARPAbet phonemes with timestamps. Then map ARPAbet → ARKit visemes via the table in the Reference card section. More accurate than Rhubarb on noisy audio; slower and costs cents per minute.
|
|
124
124
|
|
|
125
|
-
|
|
125
|
+
Rhubarb is free and takes ~5s of local CPU per 30s clip. The cloud fallback is billed per minute by its provider and takes ~5s for a 30s clip.
|
|
126
126
|
|
|
127
127
|
### 4. Persist the viseme track as an AnimationLibrary entry
|
|
128
128
|
|
|
@@ -254,7 +254,7 @@ Driven from gameplay events; orthogonal to the lipsync layer.
|
|
|
254
254
|
|
|
255
255
|
### Phoneme → viseme mapping (for hand-rolled extraction)
|
|
256
256
|
|
|
257
|
-
If the user has a CMUDict-style phoneme list
|
|
257
|
+
If the user has a CMUDict-style phoneme list, map it with the ARPAbet column of the table above.
|
|
258
258
|
|
|
259
259
|
### Pitfalls
|
|
260
260
|
|
|
@@ -300,7 +300,7 @@ production speech recognition or photoreal lip sync.
|
|
|
300
300
|
- For dialogue scripts and conversation flow, `design-npc`.
|
|
301
301
|
- For the AnimationTree this layer composes into, `animation-tree`.
|
|
302
302
|
- For idle blinks, saccades, and head-tracking that complement lipsync, `procedural-animation`.
|
|
303
|
-
-
|
|
303
|
+
- Full performance capture (face and body together) is out of scope; use an external capture pipeline.
|
|
304
304
|
|
|
305
305
|
## See also
|
|
306
306
|
|
|
@@ -5,14 +5,14 @@ license: MIT
|
|
|
5
5
|
compatibility: [Cursor, Claude Code, Windsurf, Codex]
|
|
6
6
|
category: character-controllers
|
|
7
7
|
user-invocable: false
|
|
8
|
-
template-id: template-3d-fps
|
|
8
|
+
template-id: template-3d-fps-old-school
|
|
9
9
|
allowed-tools: Read Grep summer_get_scene_tree summer_add_node summer_set_prop summer_set_resource_property summer_input_map_bind summer_save_scene summer_get_script_errors
|
|
10
10
|
paths: ["**/*.gd", "**/*.tscn"]
|
|
11
11
|
---
|
|
12
12
|
|
|
13
13
|
# FPS Controller for Summer Engine
|
|
14
14
|
|
|
15
|
-
The canonical first-person controller
|
|
15
|
+
The canonical first-person controller: coyote time, jump buffering, air control and external velocity. It follows the standard shipping FPS movement model (asymmetric gravity, grace timers, separate ground/air acceleration, an external force accumulator), so the player never says "this feels stiff" or "I jumped right at the edge and died unfairly".
|
|
16
16
|
|
|
17
17
|
## Scene Structure
|
|
18
18
|
|
|
@@ -24,7 +24,7 @@ Player (CharacterBody3D)
|
|
|
24
24
|
└── (optional) RayCast3D # ground / interaction probe
|
|
25
25
|
```
|
|
26
26
|
|
|
27
|
-
The Head/Camera split is the
|
|
27
|
+
The Head/Camera split is the standard: yaw rotates the body, pitch rotates only the head. Don't pitch the body or you get tilted capsules and slope-collision bugs.
|
|
28
28
|
|
|
29
29
|
## Step-by-Step Setup via MCP
|
|
30
30
|
|
|
@@ -48,7 +48,7 @@ summer_set_resource_property(scenePath="res://main.tscn", nodePath="./World/Play
|
|
|
48
48
|
summer_set_resource_property(scenePath="res://main.tscn", nodePath="./World/Player/Collision", resourceProperty="shape", subProperty="height", value="1.8")
|
|
49
49
|
```
|
|
50
50
|
|
|
51
|
-
Two
|
|
51
|
+
Two rules for these calls:
|
|
52
52
|
|
|
53
53
|
- **`scenePath` is required** on `summer_add_node`, `summer_set_prop`,
|
|
54
54
|
`summer_set_resource_property` and `summer_save_scene`. Omit it and the call
|
|
@@ -61,7 +61,7 @@ Two things the older version of this skill got wrong:
|
|
|
61
61
|
and external `.tres` resources take the same path. Structural failures are
|
|
62
62
|
explicit — `node not found`, `property is not a resource`, or `resource is
|
|
63
63
|
null` when the property was never assigned — but a bad value shape is silent
|
|
64
|
-
on current engines: a JSON object instead of
|
|
64
|
+
on current engines: a JSON object instead of an engine variant string, a
|
|
65
65
|
misspelled `key`/`subProperty`, or a wrong-typed value returns `ok:true` yet
|
|
66
66
|
no-ops or coerces destructively. Assign the resource first, pass class names
|
|
67
67
|
and `Vector3(...)`/`Color(...)` strings, and confirm in the saved `.tscn`,
|
|
@@ -234,18 +234,18 @@ func add_external_velocity(impulse: Vector3) -> void:
|
|
|
234
234
|
| `fall_gravity_multiplier` | `1.4` | Snappier descent than ascent (variable-jump-feel staple). |
|
|
235
235
|
| `ground_accel` / `ground_friction` | `80 / 90` | Crisp start, near-instant stop. |
|
|
236
236
|
| `air_accel` / `air_friction` | `25 / 5` | Reduced air control + minimal air drag. |
|
|
237
|
-
| `coyote_time` | `0.1` | Standard 0.08–0.15s grace — invisible to players,
|
|
237
|
+
| `coyote_time` | `0.1` | Standard 0.08–0.15s grace — invisible to players, removes most "unfair death" complaints. |
|
|
238
238
|
| `jump_buffer_time` | `0.1` | Same window the other direction. |
|
|
239
239
|
| `mouse_sensitivity` | `0.002` | Default raw multiplier; expose via settings. |
|
|
240
240
|
| `external_damping` | `8.0` | Knockback decays over ~0.5s. |
|
|
241
241
|
|
|
242
242
|
## Why Each Feature Matters
|
|
243
243
|
|
|
244
|
-
**Coyote time (~0.1s)** — Players judge ledges by what they see, not by frame-perfect collision. A small grace period after walking off a ledge where jump still works fixes the "I jumped right at the edge and died unfairly" complaint
|
|
244
|
+
**Coyote time (~0.1s)** — Players judge ledges by what they see, not by frame-perfect collision. A small grace period after walking off a ledge where jump still works fixes the "I jumped right at the edge and died unfairly" complaint. Cost: 3 lines. The usual window is 0.08–0.15s — short enough to be invisible, long enough to mask the imprecision of human reaction time.
|
|
245
245
|
|
|
246
246
|
**Jump buffering (~0.1s)** — Pressing jump 50ms before landing should not be punished. Buffer the input for ~0.1s and fire on touchdown. Without this, fast-moving players feel like the controller "ate their input" — they pressed jump, they saw nothing happen, they blame the game. With it, every "near-miss" jump becomes a successful one. Cost: 4 lines.
|
|
247
247
|
|
|
248
|
-
**Air control with reduced acceleration (~30% of ground)** — Zero air control feels like ice; the player commits to a direction at jump-takeoff and can't course-correct. Full air control feels
|
|
248
|
+
**Air control with reduced acceleration (~30% of ground)** — Zero air control feels like ice; the player commits to a direction at jump-takeoff and can't course-correct. Full air control feels weightless; momentum is meaningless and a strafe-jump cancels itself. The shipping FPS standard sits around 25–30% of ground accel: enough to course-correct mid-jump, not enough to cancel realistic momentum. The `move_toward` formulation lets designers tune this with one number — `air_accel` — without forking code.
|
|
249
249
|
|
|
250
250
|
**External velocity accumulator** — Knockback, explosions, jump pads, conveyor belts, wind volumes, and grapple-yanks must not fight player input. Storing them in a separate `external_velocity`, applying once per frame, and decaying via `move_toward(0, damping * delta)` means an explosion shoves the player and then control returns smoothly — no "stuck at terminal velocity" or "input cancels the punch" bugs. The subtract-previous-contribution trick (line 1 of `_physics_process`) is the production fix that prevents accumulation when the player is also sprinting; it's the kind of detail you only learn by shipping multiplayer. Public API (`add_external_velocity`) means any system — AOE attack, jump pad scene, grapple ability — can shove the player with one call, no coupling.
|
|
251
251
|
|
|
@@ -255,7 +255,7 @@ func add_external_velocity(impulse: Vector3) -> void:
|
|
|
255
255
|
|
|
256
256
|
Once the skeleton is in, designers tune by feel. Common targets:
|
|
257
257
|
|
|
258
|
-
**Snappy military shooter
|
|
258
|
+
**Snappy military shooter:**
|
|
259
259
|
- `walk_speed = 5.5`, `sprint_speed = 8.0`
|
|
260
260
|
- `ground_accel = 90`, `ground_friction = 100`
|
|
261
261
|
- `air_accel = 20`, `air_friction = 4`
|
|
@@ -284,14 +284,14 @@ The skeleton doesn't change — only the `@export` defaults. That's the point of
|
|
|
284
284
|
- **Pressing jump just before landing does nothing** — `_jump_buffer_timer` is being decremented to zero before the player touches floor. The buffer must NOT be cleared by anything except a successful jump.
|
|
285
285
|
- **Knockback compounds forever** — `_prev_external_applied` isn't being subtracted. Step 1 of `_physics_process` MUST run before gravity, or external impulses pile up frame after frame.
|
|
286
286
|
- **Knockback decays too fast / too slow** — tune `external_damping`. `8.0` decays a 5 m/s impulse to near-zero in ~0.6s. Lower = longer hangtime.
|
|
287
|
-
- **Air control feels like ice OR
|
|
287
|
+
- **Air control feels like ice OR weightless** — `air_accel` is the only knob. The usual range is 20–30% of `ground_accel`. Zero = ice. Equal = arcade-y.
|
|
288
288
|
- **Camera tilts on slopes** — pitch is on the body instead of the Head. Pitch only on `Head`; yaw only on `Player`.
|
|
289
289
|
- **Camera rolls when looking around** — you're calling `rotate_x` on something that's already rotated on Y. Fix: only ever rotate Y on Player and X on Head, never combine.
|
|
290
290
|
- **Mouse look doesn't work** — `Input.mouse_mode` isn't set to `MOUSE_MODE_CAPTURED`, or another node is consuming `_input` before this script. Use `_unhandled_input` to be a good citizen.
|
|
291
291
|
- **Mouse look feels laggy at low FPS** — sensitivity is being applied in `_physics_process`. Mouse-motion handling MUST stay in `_input` or `_unhandled_input` — those fire per-event, not per-physics-tick.
|
|
292
292
|
- **Falling through floor** — floor needs a StaticBody3D + CollisionShape3D on the same physics layer as the player.
|
|
293
293
|
- **Camera clipping geometry** — push `Camera.near` to ~0.05 or shrink the capsule radius slightly.
|
|
294
|
-
- **Player jitters on slopes / stairs** — enable `floor_snap_length = 0.5` and `floor_max_angle = 0.785` (~45°) on the CharacterBody3D. Out of scope for this skeleton
|
|
294
|
+
- **Player jitters on slopes / stairs** — enable `floor_snap_length = 0.5` and `floor_max_angle = 0.785` (~45°) on the CharacterBody3D. Out of scope for this skeleton.
|
|
295
295
|
|
|
296
296
|
## Networking Note
|
|
297
297
|
|
|
@@ -312,8 +312,8 @@ The skeleton is intentionally ~90 lines. When you outgrow it, add features by *l
|
|
|
312
312
|
- **Crouch.** Lerp the capsule height (e.g., 1.8 → 1.0) and the Head Y (1.6 → 0.9) over ~0.15s. Halve `walk_speed` while crouched. Block standing if a short upward shapecast hits ceiling.
|
|
313
313
|
- **Sprint FOV punch.** Tween `Camera.fov` from 75 → 82 over 0.2s when sprint starts, back when it ends. The single cheapest "feel of speed" effect available.
|
|
314
314
|
- **Slide.** When sprint + crouch are pressed together with horizontal speed above a threshold, lock direction to current velocity, set a `slide_timer`, and skip the wish-direction step. Apply slide-specific friction. Restore on timer expiry, ceiling clearance, or speed-below-threshold.
|
|
315
|
-
- **Wallrun, dash, double-jump.** Each is its own override state. Build a state machine (see `
|
|
316
|
-
- **Camera shake.** Add a `trauma` float on the camera, accumulate via `add_trauma(amount)`, decay each frame, apply a randomized rotation offset proportional to `trauma * trauma`. Subtract the previous frame's shake offset before applying the new one to prevent drift. See
|
|
315
|
+
- **Wallrun, dash, double-jump.** Each is its own override state. Build a state machine (see `gdscript-patterns`) and let each state run its own `_physics_process` branch with an early `move_and_slide()` return. Don't pile them as `if/elif` in a single function.
|
|
316
|
+
- **Camera shake.** Add a `trauma` float on the camera, accumulate via `add_trauma(amount)`, decay each frame, apply a randomized rotation offset proportional to `trauma * trauma`. Subtract the previous frame's shake offset before applying the new one to prevent drift. See `game-feel`.
|
|
317
317
|
|
|
318
318
|
Each of these is a separate skill or a separate function, not a fork of this script.
|
|
319
319
|
|
|
@@ -349,9 +349,10 @@ Then patch `project.godot` with the InputMap actions (`input/move_forward = { ..
|
|
|
349
349
|
|
|
350
350
|
This skill writes scene nodes, an InputMap, and a `.gd` script. Always ask before applying. Group writes per phase: "May I add the Player + Collision + Head + Camera, bind WASD/jump/sprint, and attach `player_controller.gd`?"
|
|
351
351
|
|
|
352
|
-
If the user asks for a "third-person FPS", flag the contradiction: FPS = first-person. Either clarify, or hand off to
|
|
352
|
+
If the user asks for a "third-person FPS", flag the contradiction: FPS = first-person. Either clarify, or hand off to `character-movement`, which has the third-person controller.
|
|
353
353
|
|
|
354
354
|
## See Also
|
|
355
355
|
|
|
356
|
-
- `
|
|
357
|
-
- `
|
|
356
|
+
- `gdscript-patterns` — once movement grows past this skeleton (slide, grapple, hover), refactor into a state machine instead of stuffing more branches into `_physics_process`.
|
|
357
|
+
- `character-movement` — 2D and third-person controllers.
|
|
358
|
+
- `game-feel` — camera shake and hit feedback.
|
|
@@ -20,8 +20,6 @@ related:
|
|
|
20
20
|
skills:
|
|
21
21
|
- skill/character-movement
|
|
22
22
|
- skill/camera-rigs
|
|
23
|
-
# Legacy frontmatter declared template-id: template-3d-fps (no such repo exists);
|
|
24
|
-
# mapped to the real repo template-3d-fps-old-school.
|
|
25
23
|
templates:
|
|
26
24
|
- template/3d-fps-old-school
|
|
27
25
|
source: official
|
|
@@ -9,7 +9,7 @@ allowed-tools: Read Grep Edit Write summer_write_file summer_read_file summer_ge
|
|
|
9
9
|
paths: ["**/*.gd", "**/*.tscn", "**/*.tres"]
|
|
10
10
|
---
|
|
11
11
|
|
|
12
|
-
#
|
|
12
|
+
# Game Feel — The Trio That Makes Hits Land
|
|
13
13
|
|
|
14
14
|
Particles do not make a game feel good. Screen shake alone does not either.
|
|
15
15
|
What makes a hit land is three systems firing on the same frame: a sub-frame
|
|
@@ -327,7 +327,7 @@ summer_connect_signal(scenePath="res://levels/world.tscn", emitter="./World/Enem
|
|
|
327
327
|
|
|
328
328
|
## Step 8 — Scaling intensity per hit weight
|
|
329
329
|
|
|
330
|
-
The
|
|
330
|
+
The same code makes a glancing parry feel different from a critical hit. Calibrate the curve once:
|
|
331
331
|
|
|
332
332
|
| Hit type | `damage` (HP) | trauma | duck amount |
|
|
333
333
|
|---|---|---|---|
|
|
@@ -343,7 +343,7 @@ Because trauma is squared inside the camera, the *felt* difference between 0.35
|
|
|
343
343
|
|
|
344
344
|
```
|
|
345
345
|
summer_save_scene(scenePath="res://levels/world.tscn")
|
|
346
|
-
summer_get_script_errors
|
|
346
|
+
summer_get_script_errors(path="res://scripts/vfx/hit_flash.gd") # repeat for each of the three scripts
|
|
347
347
|
summer_play
|
|
348
348
|
# user reproduces a hit
|
|
349
349
|
summer_get_debugger_errors # runtime errors from the tweens / bus lookups
|
|
@@ -391,7 +391,6 @@ This skill writes 3 GDScript files and adds 1 node + 1 autoload entry. Always as
|
|
|
391
391
|
version-sensitive API notes
|
|
392
392
|
- `../../references/collaborative-protocol/collaborative-protocol.md` — "May I write" pattern
|
|
393
393
|
- `../../references/gd-style/gd-style.md` — typed GDScript conventions
|
|
394
|
-
- `audio
|
|
395
|
-
- `
|
|
396
|
-
- `
|
|
397
|
-
- `visual-effects/hit-impact-flashes/SKILL.md` — flash material variations beyond white pulse
|
|
394
|
+
- `audio-direction` — bus layout setup (prerequisite for ducking)
|
|
395
|
+
- `vfx-hit-spark` — particles to layer on top of the trio
|
|
396
|
+
- `debugging-game-feel` — when the trio is installed and it still feels wrong
|
|
@@ -15,9 +15,9 @@ You are being invoked at the end (or middle) of a game-development session. Turn
|
|
|
15
15
|
|
|
16
16
|
Summer resolves skills in this order: the game project, then the user's agent skills directory, then the skills bundled with the Summer package. Pick the narrowest home that fits:
|
|
17
17
|
|
|
18
|
-
1. **The game project** (default). Write `SKILL.md` into the project-scoped skills directory of the agent you are running in: `.claude/skills/<slug>/` for Claude Code, `.agents/skills/<slug>/` for Codex,
|
|
18
|
+
1. **The game project** (default). Write `SKILL.md` into the project-scoped skills directory of the agent you are running in: `.claude/skills/<slug>/` for Claude Code, `.agents/skills/<slug>/` for Codex, Cursor, Devin Desktop and the other agents that read the shared folder. `summer skills install --scope project` shows the exact path for the current agent. Commit it with the game.
|
|
19
19
|
2. **The user's agent skills directory** when the lesson applies to every project on this machine (`~/.claude/skills/<slug>/`, `~/.agents/skills/<slug>/`). Do not edit skills that Summer installed there; they are overwritten on the next `summer setup`.
|
|
20
|
-
3. **The Summer library** when the lesson is general enough for every Summer user. Only possible inside a checkout of the summer
|
|
20
|
+
3. **The Summer library** when the lesson is general enough for every Summer user. Only possible inside a checkout of the `summerengine/summer` repository: add `library/skills/<slug>/resource.yaml` and `library/skills/<slug>/SKILL.md` (flat slugs, no category folders), then run `npm run generate:registry` and `npm run validate:library`. Everything under `registry/generated/` and every plugin manifest is generated from `library/`; never hand-edit them. Outside that checkout, send the lesson through `summer_library_feedback` (or `summer tool library-feedback`) with the id of the closest existing skill so the maintainers can fold it in.
|
|
21
21
|
|
|
22
22
|
Read the current project as ground truth. Working code from the real project beats invented examples.
|
|
23
23
|
|
|
@@ -32,7 +32,7 @@ Read the current project as ground truth. Working code from the real project bea
|
|
|
32
32
|
- A GDScript idiom that beat the obvious approach
|
|
33
33
|
- A UI layout that survived the design pass
|
|
34
34
|
- A bug, its root cause and the fix that was not in any docs
|
|
35
|
-
-
|
|
35
|
+
- An engine quirk (type inference, signal gotchas, plugin configuration)
|
|
36
36
|
- A spawning, AI or enemy pattern that worked
|
|
37
37
|
- A performance fix with measured before and after
|
|
38
38
|
- An asset workflow that beat the alternatives
|
|
@@ -11,7 +11,7 @@ paths: ["**/*.gd"]
|
|
|
11
11
|
|
|
12
12
|
# GDScript Patterns for Summer Engine
|
|
13
13
|
|
|
14
|
-
When writing GDScript for Summer Engine projects, follow these patterns. They
|
|
14
|
+
When writing GDScript for Summer Engine projects, follow these patterns. They match the engine's GDScript 4 conventions and work well with MCP scene operations.
|
|
15
15
|
|
|
16
16
|
## Type Hints
|
|
17
17
|
|
|
@@ -92,7 +92,7 @@ For health systems, input handling, and state machines, see [reference.md](refer
|
|
|
92
92
|
|
|
93
93
|
## Anti-patterns — introspection traps
|
|
94
94
|
|
|
95
|
-
|
|
95
|
+
The engine's introspection API has Object-instance methods that look like they should work on script-class references. They don't. Calling them on a `const ScriptName = preload(...)` reference is a parse error, not a runtime no-op.
|
|
96
96
|
|
|
97
97
|
| Wrong | Right | Why |
|
|
98
98
|
|---|---|---|
|
|
@@ -106,7 +106,7 @@ Godot's introspection API has Object-instance methods that look like they should
|
|
|
106
106
|
|
|
107
107
|
## Anti-pattern — `@onready var = $Path` on nodes that don't exist on every variant
|
|
108
108
|
|
|
109
|
-
|
|
109
|
+
The engine resolves `$Path` (the `get_node` shorthand) at `@implicit_ready` time. If the node is missing from the current scene, you get `Node not found: "X" (relative to "Y")` errors before any of your `_ready()` runtime guards can run.
|
|
110
110
|
|
|
111
111
|
Common case: a script is shared by multiple scene variants where some variants have an optional child. Even if every code path that touches the variable has a `if inventory_ui:` guard, the `@onready` line itself errors at scene load.
|
|
112
112
|
|
|
@@ -11,7 +11,7 @@ paths: ["**/*.tscn", "**/*.tres", "**/*.gd"]
|
|
|
11
11
|
|
|
12
12
|
# Generate Motion — Curated Meshy Library
|
|
13
13
|
|
|
14
|
-
Picks a clip from a **curated mocap library** by name and wires it onto a Meshy-rigged humanoid. Fast (~30s) and
|
|
14
|
+
Picks a clip from a **curated mocap library** by name and wires it onto a Meshy-rigged humanoid. Fast (~30s), and it looks good because it is real mocap. The five short aliases that always work are `idle`, `walk`, `run`, `jump`, `attack`; anything else must be an exact library name — see the Reference card before you invent one.
|
|
15
15
|
|
|
16
16
|
The target must be a **Meshy-rigged humanoid** — a `rigAssetId` from a prior `summer_generate_3d({ kind: "image-to-3d", imageUrl: "...", options: { rig: true } })` call. The result job includes `rigAssetId`. If the user points at a non-rigged mesh, stop and route to `asset-strategy` (or directly call `summer_generate_3d` with `options.rig: true`) before generating motion.
|
|
17
17
|
|
|
@@ -20,22 +20,6 @@ The target must be a **Meshy-rigged humanoid** — a `rigAssetId` from a prior `
|
|
|
20
20
|
> (`backend: "text-to-motion"`) when the server has it enabled; otherwise fall
|
|
21
21
|
> back to hand-authoring in Summer Engine or importing from Mixamo.
|
|
22
22
|
|
|
23
|
-
## Web Chat / Public Orchestrator Equivalent
|
|
24
|
-
|
|
25
|
-
In PublicSummerEngine chat, the equivalent direct tools are:
|
|
26
|
-
|
|
27
|
-
```
|
|
28
|
-
rigModel({ modelAssetId })
|
|
29
|
-
generateAnimation({ rigAssetId, animationName })
|
|
30
|
-
meshyJobStatus({ jobId })
|
|
31
|
-
```
|
|
32
|
-
|
|
33
|
-
If the character came from `createCharacter`, it may already be rigged and have `metadata.meshyRigTaskId`; generate animations directly against that rig asset. Verified animation names from the recovered production flow are `idle`, `walk`, `run`, `jump`, and `attack`. `fall` returned `invalid_animation`, so do not present it as a default.
|
|
34
|
-
|
|
35
|
-
Before generating clips in PublicSummerEngine chat, confirm the rig asset listing/status exposes `hasMeshyRigTask` or `animationsReady:true`. If `generateAnimation` returns `animations_preparing`, wait, poll/list the rig again, and retry; this is the post-rig setup catching up, not a reason to send the user to Studio.
|
|
36
|
-
|
|
37
|
-
After animation jobs complete, import the rig plus child animation assets together and wire them through `import-character`. Do not hand off to Studio unless the user asked for Studio/manual control or the direct chat tools fail.
|
|
38
|
-
|
|
39
23
|
## When to use this skill
|
|
40
24
|
|
|
41
25
|
- "Add a walk animation to the goblin."
|
|
@@ -64,7 +48,7 @@ The result must include `rigAssetId: <id>` on a Meshy rig. If it shows `rigAsset
|
|
|
64
48
|
|
|
65
49
|
### 2. Confirm with the user before spending
|
|
66
50
|
|
|
67
|
-
> I'm about to generate a "run" animation on `goblin_rigged` via meshy-library — about 30s,
|
|
51
|
+
> I'm about to generate a "run" animation on `goblin_rigged` via meshy-library — about 30s, and it uses credits. OK?
|
|
68
52
|
|
|
69
53
|
### 3. Call the tool
|
|
70
54
|
|
|
@@ -107,7 +91,7 @@ If the character will use multiple clips, leave the AnimationPlayer in place —
|
|
|
107
91
|
|
|
108
92
|
## Confirmation gates
|
|
109
93
|
|
|
110
|
-
- **Before generation:** state the motion name and
|
|
94
|
+
- **Before generation:** state the motion name and that it uses credits. Wait for OK.
|
|
111
95
|
- **Before attaching:** state which AnimationPlayer and which library slot. Wait for OK.
|
|
112
96
|
- **After generation:** if the user hasn't seen the preview, link `previewUrl` and ask "land or regenerate?" before wiring it into the scene.
|
|
113
97
|
|
|
@@ -129,9 +113,8 @@ nothing like a tidy snake_case scheme — real names look like `Walking_Woman`,
|
|
|
129
113
|
Plausible-looking names that do **not** resolve, verified against the resolver:
|
|
130
114
|
`attack_sword`, `hit_react`, `death`, `sprint`, `block`, `dodge_left`,
|
|
131
115
|
`crouch_idle`, `walk_back`, `run_strafe_left`, `jump_land`, `idle_combat`,
|
|
132
|
-
`wave`, `dance`, `sit_idle`. They return `null` and the call errors.
|
|
133
|
-
|
|
134
|
-
`attack`.
|
|
116
|
+
`wave`, `dance`, `sit_idle`. They return `null` and the call errors. For a sword
|
|
117
|
+
attack, use `attack`.
|
|
135
118
|
|
|
136
119
|
So: if the user asks for something outside the five aliases, do not guess a
|
|
137
120
|
snake_case name. Either use one of the five, quote an exact raw library name you
|