summer-engine 3.3.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 +2 -2
- package/.claude-plugin/plugin.json +4 -2
- package/.codex-plugin/plugin.json +5 -3
- package/.cursor-plugin/plugin.json +4 -2
- package/.factory-plugin/plugin.json +4 -2
- package/.opencode/INSTALL.md +8 -8
- package/.opencode/plugins/summer.js +2 -2
- package/AGENTS.md +7 -7
- package/CHANGELOG.md +50 -0
- package/GEMINI.md +1 -1
- package/NOTICE +1 -1
- package/README.md +32 -35
- package/assets/api-docs.json.gz +0 -0
- 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/install.d.ts +10 -0
- package/dist/cli/commands/install.js +55 -10
- 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/cli/commands/tool.d.ts +7 -0
- package/dist/cli/commands/tool.js +36 -1
- 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/capture-gameplay.d.ts +69 -0
- package/dist/core/capabilities/capture-gameplay.js +283 -0
- 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/creator.js +1 -1
- package/dist/core/capabilities/doctor.d.ts +9 -1
- package/dist/core/capabilities/doctor.js +47 -4
- package/dist/core/capabilities/engine-receipt.d.ts +5 -7
- package/dist/core/capabilities/engine-receipt.js +7 -9
- package/dist/core/capabilities/engine-run.d.ts +4 -0
- package/dist/core/capabilities/engine-run.js +33 -5
- package/dist/core/capabilities/export-engine-version.d.ts +15 -0
- package/dist/core/capabilities/export-engine-version.js +24 -0
- package/dist/core/capabilities/export-game.d.ts +9 -1
- package/dist/core/capabilities/export-game.js +115 -39
- 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/image-generation.d.ts +9 -0
- package/dist/core/capabilities/image-generation.js +19 -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 +15 -2
- package/dist/core/capabilities/publish-build.js +78 -28
- 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 +11 -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/config.js +2 -2
- package/dist/core/engine-install.d.ts +16 -0
- package/dist/core/engine-install.js +32 -2
- package/dist/core/feedback/client.js +1 -1
- package/dist/core/hosted-mcp.d.ts +115 -0
- package/dist/core/hosted-mcp.js +164 -0
- package/dist/core/launch-posture.d.ts +6 -3
- package/dist/core/launch-posture.js +18 -5
- 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/hosted-mount.d.ts +13 -59
- package/dist/mcp/hosted-mount.js +24 -30
- package/dist/mcp/server.d.ts +2 -2
- package/dist/mcp/server.js +5 -4
- package/dist/mcp/tools/creator-tools.js +14 -4
- package/dist/mcp/tools/debug-tools.js +1 -1
- package/dist/mcp/tools/generate-tools.js +19 -9
- 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 +3 -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 +18 -16
- 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 +11 -9
- 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 +95 -0
- package/library/skills/bounded-engine-runs/resource.yaml +29 -0
- 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 +78 -0
- package/library/skills/compatibility-renderer-traps/resource.yaml +28 -0
- package/library/skills/concept-art/SKILL.md +4 -4
- 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 +25 -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/headless-scripting/resource.yaml +1 -0
- package/library/skills/in-game-purchases/SKILL.md +123 -118
- package/library/skills/in-game-purchases/resource.yaml +2 -2
- 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/web-compatibility-look/resource.yaml +1 -0
- 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/capture-gameplay/resource.yaml +73 -0
- package/library/tools/creator-publish/resource.yaml +4 -4
- package/library/tools/creator-releases/resource.yaml +5 -5
- package/library/tools/generate-image/resource.yaml +15 -1
- package/library/tools/publish-build/resource.yaml +6 -2
- package/package.json +1 -1
- package/registry/generated/aliases.json +1 -0
- package/registry/generated/counts.json +3 -3
- package/registry/generated/gemini-extension.json +3 -1
- package/registry/generated/index.json +248 -135
- package/registry/generated/marketplace.claude.json +2 -2
- package/registry/generated/plugin.claude.json +4 -2
- package/registry/generated/plugin.codex.json +5 -3
- package/registry/generated/plugin.cursor.json +4 -2
- package/registry/generated/plugin.factory.json +4 -2
- package/registry/generated/skills-index.md +11 -9
- package/registry/generated/skills-registry.json +33 -6
- package/registry/schemas/domains.json +1 -1
|
@@ -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
|
-
|
|
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,14 +114,14 @@ 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
|
|
121
121
|
|
|
122
122
|
- **User says "just one" after you propose 4.** That's a `character-portrait` job. Hand off.
|
|
123
123
|
- **User wants 8+ variants.** Generate 4 first; if the user wants more on the same axis, generate 4 more. Don't dump 8 at once — overload paralyzes choice.
|
|
124
|
-
- **Subject is a fully described scene, not an asset.** You're producing key art, not asset reference.
|
|
124
|
+
- **Subject is a fully described scene, not an asset.** You're producing key art, not asset reference. Pass `aspectRatio: "16:9"` (or `width: 1920, height: 1080` for store key art) and bias toward atmospheric.
|
|
125
125
|
- **User wants the final to be 3D.** After they pick a direction, route to `asset-strategy` — concept-art images are not 3D-ready references (they have backgrounds, scene context, dramatic lighting baked in). The 3D pipeline needs its own clean white-background reference.
|
|
126
126
|
|
|
127
127
|
## Fallback (no MCP)
|
|
@@ -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.
|
|
@@ -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
|
|
|
@@ -293,6 +297,8 @@ Per platform, point the user at the correct upload path:
|
|
|
293
297
|
|
|
294
298
|
- **summer.games:** `summer_export_game` writes the summer.games `.zip`; `summer_publish_build` uploads it to the game's store listing after the user confirms the exact game, file and version (needs `summer login --store`). If it answers `store_auth_refused`, the user uploads the `.zip` in Studio instead.
|
|
295
299
|
- Per platform, the store takes: iPhone, Android, macOS and Windows in the Summer apps = one summer.games bundle (`summer_export_game` `targets`, format `bundle`; no template, no signing; a game without a server targets `ios`/`android` only). Web = an HTML5 `.zip` on Summer's WebGPU Forward+ template (`targets:["web"]`; the project must render with Forward+ or Mobile). A macOS or Windows download for the store page = `targets:["macos"]` or `["windows"]` with format `download`. Download exports need the template: `summer_export_templates` `install` fetches it from Summer's CDN.
|
|
300
|
+
- Hosted games: if `summer_export_game` fails with "… is in the source graph's authority_engine domain, which the client pack leaves out", an authority root in `source-domains.json` holds a file the client loads (often the composition `.tres`). Narrow that root to the server-only files, or move the shared file under a `shared` path, then export again. Every exporter message is in the `multiplayer-publish` skill's export-errors.md; the folder rules are in `multiplayer-project`.
|
|
301
|
+
- Store page art: key art, covers and icons carry no text, logos or UI (the store page shows the title). Screenshots are real gameplay and may show the game's own HUD; add no captions, logos or overlays. Capture them with `summer_capture_gameplay` (offscreen, no editor needed; `resolution` `1920x1080`, or `1080x1920` for portrait; pass the gameplay `scene` when the main scene is a title menu), or `summer_screenshot` target `game` while the editor runs the game.
|
|
296
302
|
- **Steam:** `steamcmd` + Steam Pipe (`builder_app_xxx.vdf`). Set up depots first in Steamworks.
|
|
297
303
|
- **itch.io:** `butler push <path> <user>/<game>:<channel>` (e.g. `butler push build/win <user>/mygame:windows`).
|
|
298
304
|
- **Web (itch hosted):** zip + drop into itch upload UI as "playable in browser".
|
|
@@ -352,7 +358,7 @@ This skill produces release artifacts. Always ask before each build is invoked.
|
|
|
352
358
|
|
|
353
359
|
## Want a working starter?
|
|
354
360
|
|
|
355
|
-
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.
|
|
356
362
|
|
|
357
363
|
## See also
|
|
358
364
|
|
|
@@ -360,10 +366,5 @@ No template — this is a workflow. Each project's export config and store asset
|
|
|
360
366
|
- `../../references/godot-version/godot-version.md` — Summer compatibility and
|
|
361
367
|
export-template versioning
|
|
362
368
|
- `../../references/collaborative-protocol/collaborative-protocol.md` — "May I write" pattern
|
|
363
|
-
- `
|
|
364
|
-
- `
|
|
365
|
-
- `deployment/steam-uploader/SKILL.md` — `steamcmd` + GodotSteam (when shipped)
|
|
366
|
-
- `deployment/itch-uploader/SKILL.md` — `butler` workflow (when shipped)
|
|
367
|
-
- `deployment/mobile-export/SKILL.md` — iOS / Android specifics (when shipped)
|
|
368
|
-
- `asset-pipeline/attribution-and-licensing/SKILL.md` — community asset attribution
|
|
369
|
-
- `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
|
|