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
|
@@ -13,7 +13,7 @@ paths: ["assets/video/**", "cinematics/**", "trailers/**"]
|
|
|
13
13
|
|
|
14
14
|
A cutscene is a non-interactive video clip the game plays back at a fixed moment — opening, story beat, character intro, ending. Quality is dominated by **two things**: continuity (the character on screen looks like the character in the game) and shot length (every clip past 10s drifts in identity, hands, and physics). This skill enforces both — generate a reference image first to lock the look, then image-to-video each shot, then chain shots in sequence rather than asking the model for one long take.
|
|
15
15
|
|
|
16
|
-
If the user wants 5 seconds of marketing footage, that's `
|
|
16
|
+
If the user wants 5 seconds of marketing footage, that's `trailer-shot`. If they want a seamless background loop, that's `animated-loop`. This skill is for narrative beats with a defined start, middle, and end — usually with dialogue or VO.
|
|
17
17
|
|
|
18
18
|
## When to use
|
|
19
19
|
|
|
@@ -26,10 +26,10 @@ If the user wants 5 seconds of marketing footage, that's `video/trailer-shot`. I
|
|
|
26
26
|
|
|
27
27
|
## When NOT to use
|
|
28
28
|
|
|
29
|
-
- "5-second slow-mo combat shot for the trailer" — `
|
|
30
|
-
- "Looping splash screen background" — `
|
|
31
|
-
- "Animated logo backdrop on the title screen" — `
|
|
32
|
-
- Real-time in-engine cinematic with the actual gameplay characters and camera — that's
|
|
29
|
+
- "5-second slow-mo combat shot for the trailer" — `trailer-shot`.
|
|
30
|
+
- "Looping splash screen background" — `animated-loop`.
|
|
31
|
+
- "Animated logo backdrop on the title screen" — `animated-loop`.
|
|
32
|
+
- Real-time in-engine cinematic with the actual gameplay characters and camera — that's an AnimationPlayer job, not generated video. Route to `scene-composition`.
|
|
33
33
|
- Voice-only narration over a static image — generate the dialogue with `summer_generate_audio` and use a static `TextureRect`, no video needed.
|
|
34
34
|
|
|
35
35
|
## Steps
|
|
@@ -51,7 +51,7 @@ Cutscenes longer than 10 seconds are **multiple shots**, not one take. Ask the u
|
|
|
51
51
|
|
|
52
52
|
> Want this as one 10s shot, or three shots (e.g. wide → close on face → reaction)? Each shot is 5-10s. I'll generate a reference image once, then image-to-video each shot off of it.
|
|
53
53
|
|
|
54
|
-
Default if the user is vague: **3 shots, 5s each,
|
|
54
|
+
Default if the user is vague: **3 shots, 5s each, on kling**. Confirm before spending credits.
|
|
55
55
|
|
|
56
56
|
### 3. Lock the look — generate a reference image first
|
|
57
57
|
|
|
@@ -66,19 +66,19 @@ summer_generate_image(
|
|
|
66
66
|
|
|
67
67
|
`summer_generate_image` has no size or aspect argument — `options.image_size` is dropped without an error and every MCP image comes back at the server's 1:1 default. Ask for the framing in the prompt, or generate the reference in the Summer dashboard (which exposes aspect ratio) and pass its URL. For image-to-video this matters more than usual: the clip's framing is inherited from the reference, so a square reference gives you a square cutscene.
|
|
68
68
|
|
|
69
|
-
Show the user the still and confirm it's the right look before video-ing it. Regenerating a
|
|
69
|
+
Show the user the still and confirm it's the right look before video-ing it. Regenerating a still costs far less than regenerating a video.
|
|
70
70
|
|
|
71
71
|
### 4. Pick the model
|
|
72
72
|
|
|
73
73
|
**This skill always passes `imageUrl`, which puts every call on the image-to-video route — and that route only accepts three models.** `kling-turbo` and `veo3` are text-to-video only; asking for either with an `imageUrl` set is a 400 `invalid_model`, not a silent downgrade.
|
|
74
74
|
|
|
75
|
-
| Model | i2v? |
|
|
76
|
-
|
|
77
|
-
| `ltx` | yes |
|
|
78
|
-
| `kling` | yes |
|
|
79
|
-
| `minimax` | yes |
|
|
80
|
-
| `kling-turbo` | **no** |
|
|
81
|
-
| `veo3` | **no** |
|
|
75
|
+
| Model | i2v? | Speed | When |
|
|
76
|
+
|---|---|---|---|
|
|
77
|
+
| `ltx` | yes | ~30s | Iteration, blocking shots, B-roll, throwaway tests |
|
|
78
|
+
| `kling` | yes | 2-4 min | Hero shots, character cutscenes, anything the player will sit and watch |
|
|
79
|
+
| `minimax` | yes | 2-3 min | Stylized / anime-leaning content; better at non-photoreal looks than kling |
|
|
80
|
+
| `kling-turbo` | **no** | 1-2 min | Text-to-video only — usable only if you drop the reference image |
|
|
81
|
+
| `veo3` | **no** | 3-5 min | Text-to-video only — usable only if you drop the reference image |
|
|
82
82
|
|
|
83
83
|
Default policy: **`ltx` first** to validate the prompt and shot framing. If it lands the composition but quality is rough, escalate to `kling`. `veo3` is a real tradeoff, not an upgrade: reaching for it means giving up `imageUrl`, which is the one thing that holds character identity across shots. Take that trade only when on-camera lip-sync matters more than continuity, and only with the user's approval on cost.
|
|
84
84
|
|
|
@@ -112,13 +112,13 @@ When the job completes, show the user the URL and ask:
|
|
|
112
112
|
|
|
113
113
|
### 6. Generate dialogue audio (if the scene has dialogue)
|
|
114
114
|
|
|
115
|
-
Cutscene dialogue is TTS, not in the video model. The video model can render mouth motion that *looks* like talking, but the audio comes from `summer_generate_audio`. Generate it separately and
|
|
115
|
+
Cutscene dialogue is TTS, not in the video model. The video model can render mouth motion that *looks* like talking, but the audio comes from `summer_generate_audio`. Generate it separately and an AnimationPlayer or your `cinematics/` controller scene syncs them.
|
|
116
116
|
|
|
117
117
|
```
|
|
118
118
|
summer_generate_audio(
|
|
119
119
|
capability="text_to_speech",
|
|
120
120
|
text="They'll come for you at dawn. Run while you can.",
|
|
121
|
-
voiceId="<from audio bible — see
|
|
121
|
+
voiceId="<from audio bible — see voice-line>"
|
|
122
122
|
)
|
|
123
123
|
```
|
|
124
124
|
|
|
@@ -134,7 +134,7 @@ VideoStream exts: ["ogv", "tres", "res"]
|
|
|
134
134
|
ERROR: No loader found for resource: res://clip.mp4 (expected type: unknown)
|
|
135
135
|
```
|
|
136
136
|
|
|
137
|
-
Nothing transcodes for you — `summer_import_from_url` downloads the bytes, runs
|
|
137
|
+
Nothing transcodes for you — `summer_import_from_url` downloads the bytes, runs the engine's import pipeline, and *fails the import* if the file never becomes a loadable resource. Convert with ffmpeg or DaVinci before importing:
|
|
138
138
|
|
|
139
139
|
```
|
|
140
140
|
ffmpeg -i intro_shot_01.mp4 -c:v libtheora -q:v 8 -an intro_shot_01.ogv
|
|
@@ -167,16 +167,16 @@ For dialogue, add an `AudioStreamPlayer` sibling with the TTS clip and call `pla
|
|
|
167
167
|
|
|
168
168
|
Pattern: `<subject> + <action> + <camera move> + <lighting> + <stylistic anchor>`. Keep prompts under 50 words; over-prompting confuses the model. Always pair with `imageUrl` to lock the character.
|
|
169
169
|
|
|
170
|
-
| Goal | Model | Prompt |
|
|
171
|
-
|
|
172
|
-
| Opening establishing shot | `kling` | `wide shot of a fog-shrouded medieval village at dawn, slow dolly-in toward the church spire, warm low sun, cinematic, anamorphic lens flare` |
|
|
173
|
-
| Character intro (hero turns to camera) | `kling` | `young witch with raven on shoulder turns slowly toward camera, candlelit interior, shallow depth of field, cinematic film still` |
|
|
174
|
-
| Dialogue close-up (no synced lips) | `kling` | `close-up of a grizzled knight, eyes downcast then looking up, firelight on his face, dust motes, 16mm film grain` |
|
|
175
|
-
| Dialogue close-up (synced lips) | `veo3` — text-to-video only, drop `imageUrl` | `close-up of the witch saying "they will come for you at dawn", candlelight, cinematic, shallow DOF` |
|
|
176
|
-
| Action beat (village burns) | `kling` | `medium wide of a thatched village engulfed in flames at night, embers rising, silhouettes running through smoke, hand-held camera, cinematic` |
|
|
177
|
-
| Ending shot (hero walks away) | `kling` | `low wide shot of a cloaked figure walking away across a blasted plain at sunset, slow truck-back, golden hour, dust on the wind` |
|
|
178
|
-
| Throwaway iteration / blocking | `ltx` | same prompt as above |
|
|
179
|
-
| Anime / stylized cutscene | `minimax` | `anime-style young swordsman draws blade and steps forward, sakura petals, dramatic wind, Studio Ghibli soft painterly` |
|
|
170
|
+
| Goal | Model | Prompt | Duration |
|
|
171
|
+
|---|---|---|---|
|
|
172
|
+
| Opening establishing shot | `kling` | `wide shot of a fog-shrouded medieval village at dawn, slow dolly-in toward the church spire, warm low sun, cinematic, anamorphic lens flare` | 5s |
|
|
173
|
+
| Character intro (hero turns to camera) | `kling` | `young witch with raven on shoulder turns slowly toward camera, candlelit interior, shallow depth of field, cinematic film still` | 5s |
|
|
174
|
+
| Dialogue close-up (no synced lips) | `kling` | `close-up of a grizzled knight, eyes downcast then looking up, firelight on his face, dust motes, 16mm film grain` | 5s |
|
|
175
|
+
| Dialogue close-up (synced lips) | `veo3` — text-to-video only, drop `imageUrl` | `close-up of the witch saying "they will come for you at dawn", candlelight, cinematic, shallow DOF` | 5s |
|
|
176
|
+
| Action beat (village burns) | `kling` | `medium wide of a thatched village engulfed in flames at night, embers rising, silhouettes running through smoke, hand-held camera, cinematic` | 5s |
|
|
177
|
+
| Ending shot (hero walks away) | `kling` | `low wide shot of a cloaked figure walking away across a blasted plain at sunset, slow truck-back, golden hour, dust on the wind` | 5s |
|
|
178
|
+
| Throwaway iteration / blocking | `ltx` | same prompt as above | 5s |
|
|
179
|
+
| Anime / stylized cutscene | `minimax` | `anime-style young swordsman draws blade and steps forward, sakura petals, dramatic wind, Studio Ghibli soft painterly` | 5s |
|
|
180
180
|
|
|
181
181
|
### Bad prompts and why
|
|
182
182
|
|
|
@@ -193,7 +193,7 @@ Pattern: `<subject> + <action> + <camera move> + <lighting> + <stylistic anchor>
|
|
|
193
193
|
- **Generating a 10s shot when you should chain two 5s shots.** Identity, hand consistency, and physics drift every additional second past ~6s. Two 5s shots cut together look better and cost the same.
|
|
194
194
|
- **Skipping the reference image.** Generating four character cutscenes from text prompts alone produces four different-looking people. Always lock the look with `summer_generate_image` first, then `imageUrl` every subsequent video call.
|
|
195
195
|
- **Asking the video model to render dialogue without `veo3`.** `kling` and `ltx` will animate mouths but the motion does not match any audio. Use `veo3` if dialogue is on-camera, or keep the camera off the speaker.
|
|
196
|
-
- **Using `kling` for blocking iterations.**
|
|
196
|
+
- **Using `kling` for blocking iterations.** Validate framing and prompt on the cheaper `ltx` first; move to `kling` once the composition lands.
|
|
197
197
|
- **Putting the cutscene on a `VideoStreamPlayer` without a fade.** Cuts straight from gameplay to video are jarring. Always wrap in a `ColorRect` fade in/out.
|
|
198
198
|
- **Treating `summer_generate_video` as synchronous.** It returns `{ queued: true, jobId }` and no URL. You must poll `summer_check_job` before there is anything to show or import.
|
|
199
199
|
- **Importing the `.mp4` as-is.** The engine has no MP4 or WebM loader — only Ogg Theora (`.ogv`). Transcode first; an un-transcoded import fails and is rolled back.
|
|
@@ -210,7 +210,7 @@ Pattern: `<subject> + <action> + <camera move> + <lighting> + <stylistic anchor>
|
|
|
210
210
|
|
|
211
211
|
## Fallback (no MCP)
|
|
212
212
|
|
|
213
|
-
If the
|
|
213
|
+
If the MCP server isn't running, the user can do all of this in the Summer dashboard:
|
|
214
214
|
|
|
215
215
|
1. Generate a reference image in the Image tab.
|
|
216
216
|
2. Open the Video tab, paste the reference URL into the image-to-video field.
|
|
@@ -224,17 +224,17 @@ Print the exact prompt + model + duration + aspect ratio so the user can paste i
|
|
|
224
224
|
Once the cutscene is generated and wired:
|
|
225
225
|
|
|
226
226
|
> Cutscene `intro` wired at `cinematics/Intro.tscn` with fade in/out and `Video.finished` chained to scene change. Next:
|
|
227
|
-
> - Add the dialogue track with `
|
|
228
|
-
> - Score the moment with `
|
|
227
|
+
> - Add the dialogue track with `voice-line` if you haven't yet.
|
|
228
|
+
> - Score the moment with `music-track` — a cutscene without music feels like a placeholder.
|
|
229
229
|
> - For the boss reveal cutscene, run this skill again with the same reference image to keep the witch identity stable.
|
|
230
|
-
> - If you want a 5s "money shot" version for marketing, run `
|
|
230
|
+
> - If you want a 5s "money shot" version for marketing, run `trailer-shot` against the same reference.
|
|
231
231
|
|
|
232
232
|
## See also
|
|
233
233
|
|
|
234
|
-
- `
|
|
235
|
-
- `
|
|
236
|
-
- `
|
|
237
|
-
- `
|
|
238
|
-
- `
|
|
239
|
-
- `
|
|
234
|
+
- `trailer-shot` — marketing footage, 5-10s, maximum visual punch.
|
|
235
|
+
- `animated-loop` — seamless looping background clips.
|
|
236
|
+
- `voice-line` — TTS dialogue used inside cutscenes.
|
|
237
|
+
- `music-track` — score the cutscene.
|
|
238
|
+
- `concept-art` — generate the reference image axis if no character reference exists yet.
|
|
239
|
+
- `character-portrait` — produce a high-fidelity locked character portrait for use as `imageUrl`.
|
|
240
240
|
- `../../references/mcp-tools-reference/mcp-tools-reference.md` — `summer_generate_video` parameter schema and error codes.
|
|
@@ -11,7 +11,7 @@ paths: ["**/*.gd", "**/*.tscn"]
|
|
|
11
11
|
|
|
12
12
|
# Combat Basics
|
|
13
13
|
|
|
14
|
-
The
|
|
14
|
+
The standard combat pattern is hitbox + hurtbox + health, wired by signals. Build it
|
|
15
15
|
component-first: the same three pieces work for player, enemies, and destructibles.
|
|
16
16
|
|
|
17
17
|
## The layer model (set this up first)
|
|
@@ -13,8 +13,8 @@ paths: ["**/*.gdshader", "**/*.gdshaderinc", "**/*.gd", "project.godot"]
|
|
|
13
13
|
|
|
14
14
|
Games built on Forward+ can end up on the Compatibility renderer (OpenGL): phones where Metal/Vulkan is
|
|
15
15
|
unavailable, weak GPUs, or a project that picks it for battery. The failures are silent: no error, just
|
|
16
|
-
black fruit, pale colors, or objects that stop animating after the first few hundred.
|
|
17
|
-
|
|
16
|
+
black fruit, pale colors, or objects that stop animating after the first few hundred. Each trap below
|
|
17
|
+
comes with its fix and the reason.
|
|
18
18
|
|
|
19
19
|
## 1. Know which renderer you actually got
|
|
20
20
|
|
|
@@ -75,9 +75,9 @@ summer_generate_image(
|
|
|
75
75
|
)
|
|
76
76
|
```
|
|
77
77
|
|
|
78
|
-
`style: "none"` is intentional
|
|
78
|
+
`style: "none"` is intentional: only `cartoon` and `anime` append anything to the prompt, `realistic` and `none` append nothing, and any other value is coerced to `none`. So the preset cannot override the prompt's stylistic direction — it just contributes nothing, which is what concept art wants. All four variants' divergence has to come from the prompt.
|
|
79
79
|
|
|
80
|
-
For a shape other than square, pass `aspectRatio` (`"16:9"`, `"9:16"`, ...) or `width` + `height`; the result reports the real width and height and the model that ran. Exploration images are thrown away, so square is usually fine.
|
|
80
|
+
For a shape other than square, pass `aspectRatio` (`"16:9"`, `"9:16"`, ...) or `width` + `height`; the result reports the real width and height and the model that ran. Exploration images are thrown away, so square is usually fine. Background removal is the top-level `removeBackground` argument, not an `options` key.
|
|
81
81
|
|
|
82
82
|
### 5. Present the batch
|
|
83
83
|
|
|
@@ -114,7 +114,7 @@ The structure: **subject + axis variant + "concept art" + lighting/atmosphere**.
|
|
|
114
114
|
- **Generating 4 near-identical variants** because you didn't pick a real axis. The user can't choose between four images that all look like the same painting.
|
|
115
115
|
- **Importing concept art as final assets.** These are exploration. The polished version comes from `character-portrait` after a direction is picked.
|
|
116
116
|
- **Treating `style` as the variant axis.** The presets are `realistic | cartoon | anime | none`, and only two of them append anything. Four "stylization" variants have to differ in their prompt text, not in the `style` argument.
|
|
117
|
-
- **Skipping the disambiguation question.** If you don't ask, you
|
|
117
|
+
- **Skipping the disambiguation question.** If you don't ask, you may generate four rough variants when the user wanted one polished bust.
|
|
118
118
|
- **Generating before the GameSoul.md is written.** If `.summer/GameSoul.md` exists, read it first — its visual-style section narrows the axis.
|
|
119
119
|
|
|
120
120
|
## Edge cases
|
|
@@ -11,15 +11,15 @@ paths: ["assets/**", "art/**", "sprites/**"]
|
|
|
11
11
|
|
|
12
12
|
# create-asset-sheet — Generate a coherent pack of 2D assets
|
|
13
13
|
|
|
14
|
-
This skill turns a single prompt into a categorized pack of isolated, named 2D assets ready to drop into a game.
|
|
14
|
+
This skill turns a single prompt into a categorized pack of isolated, named 2D assets ready to drop into a game. Generating assets one by one loses visual coherence between them and leaves you matting backgrounds by hand; one sheet keeps the pack consistent.
|
|
15
15
|
|
|
16
16
|
**Pipeline:**
|
|
17
17
|
|
|
18
18
|
1. **Generate a sheet** of N isolated assets in one image-gen call.
|
|
19
|
-
2. **Remove background**
|
|
20
|
-
3. **Detect
|
|
21
|
-
4. **Crop** each region
|
|
22
|
-
5. **Optionally upscale** any small slice
|
|
19
|
+
2. **Remove the background** so each asset can stand on its own.
|
|
20
|
+
3. **Detect, name and classify** each asset in one vision pass (bounding box + snake_case name + category per region).
|
|
21
|
+
4. **Crop** each region.
|
|
22
|
+
5. **Optionally upscale** any small slice, preserving aspect.
|
|
23
23
|
6. **Save** as a single pack ArtAsset with `packFiles: [{url, name, type}]` and `metadata.sliceBboxes`.
|
|
24
24
|
|
|
25
25
|
Categories the classifier outputs (used to route into downstream pipelines):
|
|
@@ -42,13 +42,7 @@ Categories the classifier outputs (used to route into downstream pipelines):
|
|
|
42
42
|
|
|
43
43
|
## The cleanest path: the studio wizard
|
|
44
44
|
|
|
45
|
-
The
|
|
46
|
-
|
|
47
|
-
```
|
|
48
|
-
https://summerengine.com/studio/create-tileset
|
|
49
|
-
```
|
|
50
|
-
|
|
51
|
-
Direct the user there if they're working in the browser. The wizard:
|
|
45
|
+
The most reliable way to run this flow is the **Create Asset Sheet** wizard in Summer Studio's guided workflows. Open it for the user with `summer open workflows` (or `summer_open`) if they're working in the browser. The wizard:
|
|
52
46
|
|
|
53
47
|
- Offers a 2D / 3D mode toggle (2D is the slice flow described here; 3D is a soft pointer to `concept-art` + per-asset image-to-3D for now)
|
|
54
48
|
- Surfaces six prompt templates (tile sheet, UI kit, menu, character pack, biome, freeform)
|
|
@@ -59,7 +53,7 @@ Direct the user there if they're working in the browser. The wizard:
|
|
|
59
53
|
- Saves as a pack ArtAsset visible in the user's library
|
|
60
54
|
|
|
61
55
|
If the user is in a chat / agent context, use the programmatic path below. It
|
|
62
|
-
|
|
56
|
+
calls the same server-side slicer as the Studio wizard.
|
|
63
57
|
|
|
64
58
|
## Programmatic path (chat / agent driving the engine)
|
|
65
59
|
|
|
@@ -88,14 +82,13 @@ now calls the same server-side slicer as the Studio wizard.
|
|
|
88
82
|
returned slice ids/names/categories; do not reimplement the vision boxes
|
|
89
83
|
locally.
|
|
90
84
|
|
|
91
|
-
4. **Optional upscale.**
|
|
85
|
+
4. **Optional upscale.** The Studio wizard has per-slice HD upscale. Over MCP, for any crop where the longest side is under 256px, call `summer_generate_image` with the slice as `referenceImageUrl` and this prompt:
|
|
92
86
|
|
|
93
87
|
```
|
|
94
88
|
Recreate this exact <name> at high resolution. Preserve every detail, the exact pose, the exact style. Sharper edges, more detail. Transparent background. Single isolated asset, no scene.
|
|
95
89
|
```
|
|
96
90
|
|
|
97
|
-
-
|
|
98
|
-
- Don't blindly upscale everything — high-res slices get diminishing returns and you spend $0.04/slice.
|
|
91
|
+
- Don't upscale everything: each upscale is a paid generation, and large slices gain little.
|
|
99
92
|
|
|
100
93
|
5. **Import what the game needs.** Use the returned asset ids with
|
|
101
94
|
`summer_import_asset_by_id`. Keep the source pack in My Assets so the agent
|
|
@@ -140,26 +133,14 @@ now calls the same server-side slicer as the Studio wizard.
|
|
|
140
133
|
| Slicer returns 1 giant bbox covering the whole sheet | Items overlap / no gaps in the source | Re-prompt with "each item fully isolated, empty space around each item". Re-generate. |
|
|
141
134
|
| Slicer misses items | Items too small in the source, classifier dropped them as noise | Generate at higher resolution (2048) or with fewer items per sheet |
|
|
142
135
|
| Two items merge into one slice | Items touching in the source | Re-prompt with more isolation. Or accept and let the user split manually in step 2's review. |
|
|
143
|
-
| Slice has a sliver of neighbor in it | Vision bbox is off by 5–15px | Expected. The slicer pads but doesn't snap-to-content yet. Live with it or upscale the slice (
|
|
136
|
+
| Slice has a sliver of neighbor in it | Vision bbox is off by 5–15px | Expected. The slicer pads but doesn't snap-to-content yet. Live with it or upscale the slice (upscaling often cleans the edge) |
|
|
144
137
|
| Upscaled slice looks invented | Source was too small / too ambiguous | Don't upscale slices below ~32×32. Or accept the hallucination and edit |
|
|
145
138
|
| Detection returns wrong category | Model misjudged context | User can override in the review step; not a blocker |
|
|
146
139
|
|
|
147
140
|
## What this skill does NOT do (yet)
|
|
148
141
|
|
|
149
|
-
- Per-asset planning
|
|
142
|
+
- Per-asset planning and individual generation, where each asset is generated separately at full resolution.
|
|
150
143
|
- 3D pack assembly. The 3D mode in the wizard is a placeholder pointer to `concept-art` + image-to-3D for now.
|
|
151
|
-
- Character animation routing. Once a slice is classified as `character`, the next step (sprite-sheet generation) is a separate skill that the user has to invoke manually.
|
|
144
|
+
- Character animation routing. Once a slice is classified as `character`, the next step (sprite-sheet generation) is a separate skill that the user has to invoke manually.
|
|
152
145
|
- Terrain auto-tiling / Wang-tile generation. Use `tileable-texture` for that.
|
|
153
146
|
- Level composition / scene assembly. Use `design-level`.
|
|
154
|
-
|
|
155
|
-
## Honest cost estimate
|
|
156
|
-
|
|
157
|
-
Per 12-asset sheet, end to end through the wizard:
|
|
158
|
-
|
|
159
|
-
- Generate sheet: $0.04–0.10 (varies by model)
|
|
160
|
-
- Background removal: $0.05
|
|
161
|
-
- Vision detect + classify: $0.02–0.03
|
|
162
|
-
- Save pack: free
|
|
163
|
-
- Optional bulk upscale: ~$0.04 per slice ($0.48 for 12)
|
|
164
|
-
|
|
165
|
-
**Without upscale:** ~$0.12. **With full upscale:** ~$0.60. About a third of what a Photoshop hour would cost.
|
|
@@ -28,7 +28,7 @@ victory. Never grep the codebase before reading the actual error.
|
|
|
28
28
|
|
|
29
29
|
- The user is asking how to *prevent* a class of bug — that's a design question. Use the relevant discipline skill (`gdscript-patterns`, `scene-composition`).
|
|
30
30
|
- The user is asking for a feature with a known unfinished spec — that's `make-game` territory.
|
|
31
|
-
- The bug is in a
|
|
31
|
+
- The bug is in a file outside the game project that the host agent can debug natively (CI config, npm scripts) — use the host's debugger.
|
|
32
32
|
|
|
33
33
|
## The Loop
|
|
34
34
|
|
|
@@ -143,7 +143,7 @@ Surface the proposed fix in plain language and ask permission. Two patterns:
|
|
|
143
143
|
|
|
144
144
|
- For GDScript edits: `Read` the 20–40 lines around the error, `Edit` the exact change. Don't read the whole file. Don't reformat. Don't rename other things.
|
|
145
145
|
- For scene edits: use the appropriate `summer_*` tool (`summer_add_node`, `summer_set_prop`, `summer_replace_node`). Group multi-step changes in `summer_batch` for one undo step.
|
|
146
|
-
- **Nested resource properties:** `summer_set_resource_property` works against inline `sub_resource` targets too — pass `nodePath`, `resourceProperty`, and `subProperty` (there is no dotted `"mesh.size"` form). Structural failures (`node not found`, `property is not a resource`, `resource is null`) are explicit errors; a bad value shape is not — a JSON object instead of
|
|
146
|
+
- **Nested resource properties:** `summer_set_resource_property` works against inline `sub_resource` targets too — pass `nodePath`, `resourceProperty`, and `subProperty` (there is no dotted `"mesh.size"` form). Structural failures (`node not found`, `property is not a resource`, `resource is null`) are explicit errors; a bad value shape is not — a JSON object instead of an engine literal string, a misspelled `key`/`subProperty`, or a wrong-typed value returns `ok:true` yet silently no-ops or coerces destructively on current engines (dict → material cleared; dict → `Color(0,0,0,1)`; newer engines reject these with `unknown_property` / `bad_value_shape` / `type_mismatch`). Pass class names and `Color(...)`/`Vector3(...)` strings, and confirm the fix in the saved `.tscn` or a snapshot diff, never from `ok` alone. See `../../references/mcp-tools-reference/mcp-tools-reference.md`.
|
|
147
147
|
|
|
148
148
|
### 6. Verify — re-run the diagnostic that found it
|
|
149
149
|
|
|
@@ -160,7 +160,7 @@ If the diagnostic is still red after the fix, you formed the wrong hypothesis. G
|
|
|
160
160
|
| Don't | Why |
|
|
161
161
|
|---|---|
|
|
162
162
|
| Grep the whole project before reading the error | The error already names the file and line. Save the user's tokens. |
|
|
163
|
-
| Read whole files | 20–40 lines around the error is enough
|
|
163
|
+
| Read whole files | 20–40 lines around the error is usually enough. |
|
|
164
164
|
| Run multiple diagnostics in parallel | They mask each other's signal. Cheapest first, escalate. |
|
|
165
165
|
| Edit before asking | The user owns the fix decision, you own the diagnosis. |
|
|
166
166
|
| "Try this, see if it works" | That's not a hypothesis, that's gambling. State the theory or ask another question. |
|
|
@@ -177,7 +177,7 @@ If the diagnostic is still red after the fix, you formed the wrong hypothesis. G
|
|
|
177
177
|
| "Cannot find type 'X'" | `summer_get_script_errors` | Class name mismatch, missing autoload, missing `class_name` |
|
|
178
178
|
| Game runs but visuals wrong | `summer_get_console` + `summer_inspect_node` | Material/light/camera misconfigured |
|
|
179
179
|
| Game freezes (no crash) | `summer_get_console` after `summer_play` for ~3s | Infinite loop in `_process` or `_ready` |
|
|
180
|
-
| `summer_set_resource_property` "succeeded" but nothing changed | n/a |
|
|
180
|
+
| `summer_set_resource_property` "succeeded" but nothing changed | n/a | Bad value shape (JSON object, misspelled `subProperty`, wrong type). Pass engine literal strings and confirm in the saved `.tscn`. |
|
|
181
181
|
|
|
182
182
|
## Closing
|
|
183
183
|
|
|
@@ -200,6 +200,7 @@ The static and boot-time tools (`summer_get_script_errors`, `summer_get_console`
|
|
|
200
200
|
- **Runtime debugger warning text** (`summer_get_debugger_warnings`) — same structured shape as the errors tool, filtered to severity `warning`. Use it whenever `summer_get_diagnostics` shows a non-zero `debugger.warnings`; do not report a warning count you never read.
|
|
201
201
|
- **Diagnostics summary** (`summer_get_diagnostics`) — counts of console errors, debugger errors, debugger warnings, script errors. Tells you where to drill. **Counts only** — it carries no FPS, frame time, draw calls, or physics-body numbers.
|
|
202
202
|
- **Scene tree + node properties** (`summer_get_scene_tree`, `summer_inspect_node`) — only the **edited** scene, not the running game's live tree.
|
|
203
|
+
- **Live runtime state** (`summer_get_runtime_tree`, `summer_inspect_runtime_node`, `summer_game_probe`) — the running game's tree, properties and frames, on engine builds with the runtime-control ops. See `agent-playtesting`.
|
|
203
204
|
- **Rendered pixels** (`summer_screenshot`) — `target:"viewport"` for the editor's current view, `target:"scene"` for an offscreen render of a scene file, `target:"game"` for a frame of the running game (that one needs the Summer desktop app bridge and fails cleanly over a plain local connection). You look at the actual image, not a description of it.
|
|
204
205
|
- **Gameplay behaviour, driven by you** (`RunVerification` via `summer_batch`) — see the next section. Input, live tree, and frames from a real running instance.
|
|
205
206
|
- **Whether the game is running** (`summer_is_running`) — and on which scene.
|
|
@@ -184,11 +184,8 @@ After diagnosis pins down which variable(s) are wrong, the tuning is done — bu
|
|
|
184
184
|
- `game-feel` — for the screen-shake, hit-stop, particle, sound layer once tuning is locked.
|
|
185
185
|
- `debug` — if mid-debug you discover an actual error (signal not firing, node freed) hiding under the feel issue.
|
|
186
186
|
|
|
187
|
-
##
|
|
187
|
+
## Related skills
|
|
188
188
|
|
|
189
|
-
Feel bugs are tuning bugs. Tuning is a one-variable-at-a-time discipline. Anchor to a reference. Tweak one number. Play it. Decide. Repeat.
|
|
190
|
-
|
|
191
|
-
**Related skills:**
|
|
192
189
|
- `investigating-bugs` — for logical bugs with concrete repros, not feel.
|
|
193
190
|
- `playtesting-a-feature` — the playtest discipline this skill plugs into.
|
|
194
191
|
- `debug` — when the feel investigation surfaces an actual error.
|
|
@@ -6,7 +6,7 @@ use_when:
|
|
|
6
6
|
- a gameplay feature works correctly but feels wrong — floaty jumps, mushy combat, sluggish camera, weightless impacts
|
|
7
7
|
- tuning jump height, gravity, camera lag, hit-stop, or impact feedback until controls feel right
|
|
8
8
|
do_not_use_when:
|
|
9
|
-
- the bug is a logic error rather than subjective feel — use
|
|
9
|
+
- the bug is a logic error rather than subjective feel — use investigating-bugs
|
|
10
10
|
facets:
|
|
11
11
|
lifecycle:
|
|
12
12
|
- build
|
|
@@ -273,8 +273,8 @@ The skeleton this skill produces is meant to be filled in via `/design-mechanic`
|
|
|
273
273
|
|
|
274
274
|
## See also
|
|
275
275
|
|
|
276
|
-
- `
|
|
277
|
-
- `
|
|
278
|
-
- `
|
|
279
|
-
- `
|
|
280
|
-
- `
|
|
276
|
+
- `brainstorm-game` — produces `.summer/GameSoul.md`
|
|
277
|
+
- `design-mechanic` — designs the verbs the level exercises
|
|
278
|
+
- `design-npc` — designs the enemies the encounters reference
|
|
279
|
+
- `3d-lighting` — sets the lighting in `WorldEnvironment` + lights
|
|
280
|
+
- `art-direction` — defines the visual style the level expresses
|
|
@@ -142,7 +142,7 @@ Argument notes, all of which the tool schema enforces:
|
|
|
142
142
|
"current scene" default.
|
|
143
143
|
- `summer_set_prop` takes named `path` / `key` / `value` — not positional.
|
|
144
144
|
- `summer_input_map_bind` events are dicts. `{"type": "key", "key": "Space"}`
|
|
145
|
-
works; key names go through
|
|
145
|
+
works; key names go through the engine's keycode table, so `W`, `Space`, `Shift`,
|
|
146
146
|
`Escape` resolve and typos silently produce no event.
|
|
147
147
|
- `summer_get_script_errors` checks one file and requires `path`. Use
|
|
148
148
|
`summer_get_diagnostics()` (no args) for a project-wide check.
|
|
@@ -266,8 +266,8 @@ This skill is a workflow that designs and scaffolds — the templates are runnab
|
|
|
266
266
|
|
|
267
267
|
## See also
|
|
268
268
|
|
|
269
|
-
- `
|
|
270
|
-
- `
|
|
271
|
-
- `
|
|
272
|
-
- `
|
|
273
|
-
- `audio
|
|
269
|
+
- `brainstorm-game` — produces `.summer/GameSoul.md` this skill reads
|
|
270
|
+
- `design-level` — design the levels that exercise the mechanic
|
|
271
|
+
- `fps-controller` — FPS movement scaffolding
|
|
272
|
+
- `gdscript-patterns` — state machines and other script patterns for complex mechanics
|
|
273
|
+
- `audio-direction` — defines the SFX vocabulary the mechanic draws from
|
|
@@ -211,7 +211,7 @@ resources exactly as it does against external `.tres` files — it reads the
|
|
|
211
211
|
property off the node and writes the sub-property onto whatever Resource is
|
|
212
212
|
there. Structural failures are explicit errors (`node not found`, `property is
|
|
213
213
|
not a resource`, `resource is null`); a bad value shape is not — a JSON object
|
|
214
|
-
instead of
|
|
214
|
+
instead of an engine literal string, a misspelled `subProperty`, or a wrong-typed
|
|
215
215
|
value returns `ok:true` yet silently no-ops or coerces destructively on current
|
|
216
216
|
engines. Pass class names and literal strings (`"12.0"`, `"Color(r, g, b, a)"`)
|
|
217
217
|
and confirm the result in the saved `.tscn`, never from `ok` alone. The order
|
|
@@ -490,20 +490,13 @@ This skill writes scenes and scripts. Always ask before each step. Group related
|
|
|
490
490
|
|
|
491
491
|
## Want a working starter?
|
|
492
492
|
|
|
493
|
-
For a
|
|
494
|
-
|
|
495
|
-
→ **template-id**: `template-3d-fps` — ships with a sample patrol enemy
|
|
496
|
-
→ For higher-complexity AI (boss with phases, behavior trees), defer to `ai-and-npcs/behavior-trees/SKILL.md`.
|
|
493
|
+
For an animated NPC in a runnable project: `summer create 3d-fps-simple-animated-npc`. Run `summer list templates` for the current list.
|
|
497
494
|
|
|
498
495
|
## See also
|
|
499
496
|
|
|
500
|
-
- `
|
|
501
|
-
- `ai-
|
|
502
|
-
- `
|
|
503
|
-
- `
|
|
504
|
-
- `
|
|
505
|
-
- `
|
|
506
|
-
- `visual-effects/recipes/hit-spark/SKILL.md` — hit flash recipe
|
|
507
|
-
- `visual-effects/recipes/dissolve/SKILL.md` — death dissolve recipe
|
|
508
|
-
- `visual-effects/game-feel/SKILL.md` — screen-feel discipline (camera shake, hit-stop)
|
|
509
|
-
- `scripting-patterns/state-machine-patterns/SKILL.md` — generic FSM patterns
|
|
497
|
+
- `animation-tree` — wire the action states to animation clips
|
|
498
|
+
- `ai-characters-in-games` — NPCs that answer free-form player text
|
|
499
|
+
- `vfx-hit-spark` — hit flash recipe
|
|
500
|
+
- `vfx-dissolve` — death dissolve recipe
|
|
501
|
+
- `game-feel` — screen-feel discipline (camera shake, hit-stop)
|
|
502
|
+
- `gdscript-patterns` — generic state machine and script patterns
|
|
@@ -117,7 +117,7 @@ If a single commit is the obvious suspect (e.g. "Added 200 enemies to spawner"),
|
|
|
117
117
|
|
|
118
118
|
### 4. Match to one of the four Summer Engine performance cliffs
|
|
119
119
|
|
|
120
|
-
|
|
120
|
+
Regressions cluster into four categories. Matching the symptom to one shortens diagnosis.
|
|
121
121
|
|
|
122
122
|
| Cliff | Symptom | How to verify | Common cause |
|
|
123
123
|
|---|---|---|---|
|
|
@@ -156,7 +156,7 @@ State the result with the number: "Reverted the per-frame `get_tree().get_nodes_
|
|
|
156
156
|
|---|---|
|
|
157
157
|
| Regression confirmed and root cause known, but the fix is "make the feature cheaper" rather than "undo the change" | `tune-performance` for the optimization pass |
|
|
158
158
|
| The regression turns out to be a crash or error in disguise (the slow path is throwing exceptions in a tight loop) | `debug` |
|
|
159
|
-
| The cause is
|
|
159
|
+
| The cause is an engine version change or engine-side regression | Surface to the user; this is not a project-side fix |
|
|
160
160
|
| Bisect lands on a commit that touches 40 files | Subdivide the commit: check out the commit, revert subsets, re-measure |
|
|
161
161
|
|
|
162
162
|
## Red Flags — STOP
|
|
@@ -179,9 +179,9 @@ State the result with the number: "Reverted the per-frame `get_tree().get_nodes_
|
|
|
179
179
|
| Excuse | Reality |
|
|
180
180
|
|---|---|
|
|
181
181
|
| "User wants it fixed now, no time to bisect" | Bisect is 5-15 minutes. Blind optimization can burn a day. |
|
|
182
|
-
| "The slow commit is obvious, no need to A/B" | The "obvious" cause is wrong
|
|
182
|
+
| "The slow commit is obvious, no need to A/B" | The "obvious" cause is often wrong. Verify before fixing. |
|
|
183
183
|
| "I'll measure after I fix it" | If you don't have the bad number, you can't prove the fix worked. |
|
|
184
|
-
| "It's probably
|
|
184
|
+
| "It's probably the engine" | Engine-side regressions exist but are rare. Suspect your project first. |
|
|
185
185
|
| "Adding a pool / LOD / cache will help anyway" | Premature optimization on the wrong system is wasted work. |
|
|
186
186
|
|
|
187
187
|
## When The Engine Isn't Running
|
|
@@ -202,13 +202,8 @@ If the MCP tools report the engine isn't running:
|
|
|
202
202
|
3. Only if neither is possible: ask the user for an in-game perf overlay reading (FPS, frame time, draw call count) and walk the bisect with them — "run on commit X, tell me the FPS; run on commit Y, tell me the FPS."
|
|
203
203
|
4. Do not claim a fix is verified from code reading alone.
|
|
204
204
|
|
|
205
|
-
##
|
|
205
|
+
## Related skills
|
|
206
206
|
|
|
207
|
-
A regression is a delta. Diagnose the delta, not the codebase.
|
|
208
|
-
|
|
209
|
-
Measure now. Measure last-good. Bisect what changed. Match to a Godot perf cliff. A/B one variable. Re-measure. Done.
|
|
210
|
-
|
|
211
|
-
**Related skills:**
|
|
212
207
|
- `tune-performance` — for general optimization once the regression is fixed or when no regression exists.
|
|
213
208
|
- `investigating-bugs` — when the slow path turns out to be a logic bug (errors in a tight loop).
|
|
214
209
|
- `debug` — when the perf issue is actually a crash or freeze.
|
|
@@ -130,7 +130,7 @@ Return: Summary of what you found and what you fixed.
|
|
|
130
130
|
**Exploratory debugging:** You don't know what's broken yet
|
|
131
131
|
**Shared state:** Agents would interfere (editing same files, using same resources)
|
|
132
132
|
|
|
133
|
-
##
|
|
133
|
+
## Example
|
|
134
134
|
|
|
135
135
|
**Scenario:** 6 test failures across 3 files after major refactoring
|
|
136
136
|
|
|
@@ -155,15 +155,6 @@ Agent 3 → Fix tool-approval-race-conditions.test.ts
|
|
|
155
155
|
|
|
156
156
|
**Integration:** All fixes independent, no conflicts, full suite green
|
|
157
157
|
|
|
158
|
-
**Time saved:** 3 problems solved in parallel vs sequentially
|
|
159
|
-
|
|
160
|
-
## Key Benefits
|
|
161
|
-
|
|
162
|
-
1. **Parallelization** - Multiple investigations happen simultaneously
|
|
163
|
-
2. **Focus** - Each agent has narrow scope, less context to track
|
|
164
|
-
3. **Independence** - Agents don't interfere with each other
|
|
165
|
-
4. **Speed** - 3 problems solved in time of 1
|
|
166
|
-
|
|
167
158
|
## Verification
|
|
168
159
|
|
|
169
160
|
After agents return:
|
|
@@ -171,12 +162,3 @@ After agents return:
|
|
|
171
162
|
2. **Check for conflicts** - Did agents edit same code?
|
|
172
163
|
3. **Run full suite** - Verify all fixes work together
|
|
173
164
|
4. **Spot check** - Agents can make systematic errors
|
|
174
|
-
|
|
175
|
-
## Real-World Impact
|
|
176
|
-
|
|
177
|
-
From debugging session (2025-10-03):
|
|
178
|
-
- 6 failures across 3 files
|
|
179
|
-
- 3 agents dispatched in parallel
|
|
180
|
-
- All investigations completed concurrently
|
|
181
|
-
- All fixes integrated successfully
|
|
182
|
-
- Zero conflicts between agent changes
|
|
@@ -13,7 +13,7 @@ paths: ["assets/kits/**", "assets/models/**", "**/*.tscn", "**/*.gd"]
|
|
|
13
13
|
|
|
14
14
|
A kit is a *family* of meshes — wall, floor, door, pillar, corner, arch — that the level designer snaps together to build interiors and exteriors. The skill exists to solve **one specific failure mode**: generating each piece with a fresh prompt produces six pieces that look like they came from six different games. The fix is the **style anchor pattern** — generate one piece first, lock its prompt suffix, and reuse that exact suffix for every subsequent piece.
|
|
15
15
|
|
|
16
|
-
The backing tool is `summer_generate_3d`, called
|
|
16
|
+
The backing tool is `summer_generate_3d`, called once per piece. A 6-piece kit is six generations and about 5 minutes. Generation uses credits, so confirm scope before starting.
|
|
17
17
|
|
|
18
18
|
## When to use
|
|
19
19
|
|
|
@@ -32,7 +32,7 @@ The backing tool is `summer_generate_3d`, called multiple times. Each call costs
|
|
|
32
32
|
|
|
33
33
|
## The style anchor pattern
|
|
34
34
|
|
|
35
|
-
This is the whole skill. Get
|
|
35
|
+
This is the whole skill. Get it right and the kit looks unified. Get it wrong and every piece is wasted.
|
|
36
36
|
|
|
37
37
|
1. **Generate the anchor piece first.** Pick the most visually defining piece — usually the wall or the door. Iterate the prompt until the user approves it visually.
|
|
38
38
|
2. **Extract the style suffix.** Everything after the object description. Example anchor prompt:
|
|
@@ -69,7 +69,7 @@ Kit pieces only feel modular if they snap to a fixed grid. Pick the grid before
|
|
|
69
69
|
|
|
70
70
|
### 1. Confirm scope and pick the grid
|
|
71
71
|
|
|
72
|
-
> About to build a dungeon kit. Suggested pieces: wall, floor, pillar, door, corner, arch (6
|
|
72
|
+
> About to build a dungeon kit. Suggested pieces: wall, floor, pillar, door, corner, arch (6 generations, ~5 min). Snap grid: 2m (standard interior). OK?
|
|
73
73
|
|
|
74
74
|
### 2. Generate the anchor (wall)
|
|
75
75
|
|
|
@@ -131,13 +131,13 @@ Three things the shape of those calls encodes:
|
|
|
131
131
|
summer_inspect_resource(path="res://assets/kits/dungeon/wall.glb")
|
|
132
132
|
```
|
|
133
133
|
|
|
134
|
-
Check the AABB. If the wall is 1.85m tall when you asked for 3m, scale it in the editor (or re-import with `Scale` in the import dock). Pivots should sit at the *bottom-back* corner for walls and *bottom-center* for floors — that makes snapping to a 2m grid trivial. If pivots are wrong, use
|
|
134
|
+
Check the AABB. If the wall is 1.85m tall when you asked for 3m, scale it in the editor (or re-import with `Scale` in the import dock). Pivots should sit at the *bottom-back* corner for walls and *bottom-center* for floors — that makes snapping to a 2m grid trivial. If pivots are wrong, use the "Center to Origin" import option.
|
|
135
135
|
|
|
136
136
|
## Anti-patterns
|
|
137
137
|
|
|
138
138
|
- **Drifting style suffix.** Each piece gets a slightly different suffix → the kit looks mismatched. Copy-paste the exact string.
|
|
139
139
|
- **Different polycount per piece.** A 5k-tri pillar next to a 500-tri wall reads as "the pillar is a hero piece" — wrong; they should feel like equal kit citizens. Match polycount within ~2× across the kit.
|
|
140
|
-
- **Skipping the anchor approval.** If you generate all six pieces in a batch, you bake in whatever the first call's interpretation of the style was — and the user may hate it after
|
|
140
|
+
- **Skipping the anchor approval.** If you generate all six pieces in a batch, you bake in whatever the first call's interpretation of the style was — and the user may hate it after six generations.
|
|
141
141
|
- **Generating walls / floors as individual meshes when you only need a tileable texture.** A flat wall section is cheaper as a textured `CSGBox3D`. Reserve the kit for pieces that need actual geometric detail (sconces, mouldings, doorways, arches).
|
|
142
142
|
- **No scale cue in the prompt.** Wall comes back 0.4m tall. Always include `2 meter wide by 3 meter tall` (or your chosen grid).
|
|
143
143
|
- **Forgetting the snap grid.** A 1.87m-tall wall with no scale fix → level looks crooked when tiled.
|