summer-engine 2.6.6 → 2.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +1 -1
- package/.claude-plugin/plugin.json +4 -1
- package/.codex-plugin/plugin.json +6 -2
- package/.cursor-plugin/plugin.json +5 -1
- package/.opencode/INSTALL.md +1 -1
- package/.opencode/plugins/summer.js +2 -2
- package/AGENTS.md +11 -7
- package/CHANGELOG.md +40 -0
- package/GEMINI.md +9 -7
- package/README.md +63 -21
- package/_persona/summer/SKILL.md +1 -0
- package/assets/autopilot/README.md +51 -0
- package/assets/autopilot/autopilot.gd +222 -0
- package/assets/autopilot/probe_base.gd +262 -0
- package/assets/autopilot/run.sh +78 -0
- package/commands/gameskill.md +11 -2
- package/commands/summer.md +13 -0
- package/dist/bin/summer.js +12 -0
- package/dist/commands/config.d.ts +2 -0
- package/dist/commands/config.js +53 -0
- package/dist/commands/create.d.ts +1 -0
- package/dist/commands/create.js +38 -6
- package/dist/commands/debug.d.ts +2 -0
- package/dist/commands/debug.js +44 -0
- package/dist/commands/doctor.js +112 -8
- package/dist/commands/list.js +1 -1
- package/dist/commands/login.d.ts +19 -0
- package/dist/commands/login.js +123 -36
- package/dist/commands/logout.js +3 -16
- package/dist/commands/logs.d.ts +2 -0
- package/dist/commands/logs.js +19 -0
- package/dist/commands/mcp.js +7 -2
- package/dist/commands/open.js +1 -1
- package/dist/commands/publish.d.ts +2 -0
- package/dist/commands/publish.js +20 -0
- package/dist/commands/releases.d.ts +2 -0
- package/dist/commands/releases.js +20 -0
- package/dist/commands/run.js +1 -1
- package/dist/commands/skills.js +1 -1
- package/dist/lib/api-client.d.ts +15 -4
- package/dist/lib/api-client.js +138 -13
- package/dist/lib/async-op-lifecycle.d.ts +7 -2
- package/dist/lib/async-op-lifecycle.js +32 -9
- package/dist/lib/auth.d.ts +40 -12
- package/dist/lib/auth.js +173 -37
- package/dist/lib/cloud/engine-bridge.d.ts +17 -4
- package/dist/lib/cloud/engine-bridge.js +32 -6
- package/dist/lib/config.d.ts +20 -0
- package/dist/lib/config.js +142 -0
- package/dist/lib/creator.d.ts +93 -0
- package/dist/lib/creator.js +393 -0
- package/dist/lib/debug-report.d.ts +50 -0
- package/dist/lib/debug-report.js +308 -0
- package/dist/lib/engine.d.ts +35 -2
- package/dist/lib/engine.js +240 -6
- package/dist/lib/game-task-plan.js +4 -4
- package/dist/lib/mcp-boot-notice.d.ts +3 -0
- package/dist/lib/mcp-boot-notice.js +7 -0
- package/dist/lib/mcp-log.d.ts +3 -0
- package/dist/lib/mcp-log.js +72 -0
- package/dist/lib/public-surface-paths.d.ts +13 -0
- package/dist/lib/public-surface-paths.js +42 -0
- package/dist/lib/skills-registry.d.ts +33 -1
- package/dist/lib/skills-registry.js +55 -0
- package/dist/lib/store.d.ts +14 -0
- package/dist/lib/store.js +145 -0
- package/dist/lib/summer-compatibility.d.ts +6 -0
- package/dist/lib/summer-compatibility.js +22 -0
- package/dist/mcp/server.d.ts +10 -3
- package/dist/mcp/server.js +104 -11
- package/dist/mcp/tools/asset-tools.js +33 -12
- package/dist/mcp/tools/cloud-tools.js +15 -15
- package/dist/mcp/tools/creator-tools.d.ts +2 -0
- package/dist/mcp/tools/creator-tools.js +105 -0
- package/dist/mcp/tools/debug-tools.js +44 -1
- package/dist/mcp/tools/file-tools.d.ts +2 -0
- package/dist/mcp/tools/file-tools.js +154 -0
- package/dist/mcp/tools/generate-tools.js +159 -11
- package/dist/mcp/tools/project-tools.js +37 -27
- package/dist/mcp/tools/scene-tools.js +106 -29
- package/dist/mcp/tools/visual-tools.js +4 -3
- package/dist/mcp/tools/with-engine.js +4 -4
- package/hooks/session-start.sh +5 -5
- package/package.json +3 -1
- package/references/collaborative-protocol.md +50 -0
- package/references/gd-style.md +121 -0
- package/references/godot-version.md +51 -0
- package/references/mcp-tools-reference.md +199 -0
- package/references/public-surface-language.md +30 -0
- package/references/summer-folder.md +90 -0
- package/references/template-registry.md +73 -0
- package/skills/2d-assets/character-portrait/SKILL.md +17 -12
- package/skills/2d-assets/concept-art/SKILL.md +10 -9
- package/skills/2d-assets/create-asset-sheet/SKILL.md +17 -15
- package/skills/2d-assets/pixel-art/SKILL.md +36 -20
- package/skills/2d-assets/skybox-panorama/SKILL.md +32 -37
- package/skills/2d-assets/sprite-sheet/SKILL.md +40 -35
- package/skills/2d-assets/tileable-texture/SKILL.md +28 -22
- package/skills/2d-assets/ui-graphics/SKILL.md +46 -32
- package/skills/2d-assets/use-widget-asset/SKILL.md +8 -6
- package/skills/3d-assets/character-model/SKILL.md +34 -19
- package/skills/3d-assets/environment-kit/SKILL.md +11 -5
- package/skills/3d-assets/organic-model/SKILL.md +8 -5
- package/skills/3d-assets/prop-model/SKILL.md +9 -3
- package/skills/3d-assets/vehicle-model/SKILL.md +32 -19
- package/skills/README.md +1 -1
- package/skills/ai-and-npcs/design-npc/SKILL.md +31 -13
- package/skills/animation/animation-tree/SKILL.md +39 -15
- package/skills/animation/facial-and-lipsync/SKILL.md +25 -8
- package/skills/animation/generate-motion/SKILL.md +47 -15
- package/skills/animation/procedural-animation/SKILL.md +31 -13
- package/skills/animation/retarget/SKILL.md +127 -79
- package/skills/audio/adaptive-music/SKILL.md +24 -20
- package/skills/audio/ambient-bed/SKILL.md +22 -16
- package/skills/audio/audio-direction/SKILL.md +15 -10
- package/skills/audio/music-track/SKILL.md +18 -12
- package/skills/audio/sound-effect/SKILL.md +17 -12
- package/skills/audio/voice-line/SKILL.md +42 -42
- package/skills/character-controllers/fps-controller/SKILL.md +26 -16
- package/skills/debugging/debug/SKILL.md +74 -20
- package/skills/deployment/export-and-ship/SKILL.md +105 -38
- package/skills/deployment/remote-deploy/SKILL.md +140 -0
- package/skills/gameplay-mechanics/auto-fire-targeting/SKILL.md +26 -1
- package/skills/gameplay-mechanics/design-mechanic/SKILL.md +23 -15
- package/skills/level-design/design-level/SKILL.md +22 -8
- package/skills/level-design/scene-to-level/SKILL.md +13 -7
- package/skills/multiplayer-and-networking/host-authoritative-state/SKILL.md +8 -8
- package/skills/multiplayer-and-networking/peer-to-peer-multiplayer/SKILL.md +2 -7
- package/skills/multiplayer-and-networking/setup-multiplayer/SKILL.md +26 -18
- package/skills/performance/tune-performance/SKILL.md +51 -32
- package/skills/rendering-and-lighting/3d-lighting/SKILL.md +34 -5
- package/skills/rendering-and-lighting/art-direction/SKILL.md +6 -8
- package/skills/scene-and-project/brainstorm-game/SKILL.md +7 -9
- package/skills/scene-and-project/make-game/SKILL.md +2 -1
- package/skills/scene-and-project/play/SKILL.md +10 -4
- package/skills/scene-and-project/scene-composition/SKILL.md +21 -8
- package/skills/scene-and-project/summer-cloud/SKILL.md +92 -0
- package/skills/scripting-patterns/gdscript-patterns/SKILL.md +1 -1
- package/skills/ui-and-ux/ui-basics/SKILL.md +16 -7
- package/skills/video/animated-loop/SKILL.md +63 -39
- package/skills/video/cinematic-cutscene/SKILL.md +66 -30
- package/skills/video/trailer-shot/SKILL.md +30 -21
- package/skills/visual-effects/_building-blocks/additive-billboard-particles.md +25 -16
- package/skills/visual-effects/_building-blocks/trauma-shake-snippet.md +5 -3
- package/skills/visual-effects/game-feel/SKILL.md +51 -33
- package/skills/visual-effects/recipes/dissolve/SKILL.md +51 -9
- package/skills/visual-effects/recipes/fire/SKILL.md +136 -49
- package/skills/visual-effects/recipes/hit-spark/SKILL.md +45 -8
- package/skills/visual-effects/recipes/lightning/SKILL.md +59 -27
- package/skills/visual-effects/recipes/magic-glow/SKILL.md +59 -26
- package/skills/visual-effects/recipes/muzzle-flash/SKILL.md +68 -25
- package/skills/visual-effects/recipes/smoke/SKILL.md +89 -28
- package/skills/visual-effects/recipes/water-ripple/SKILL.md +83 -23
- package/skills/workflow/brainstorming/SKILL.md +1 -1
- package/skills/workflow/debugging-game-feel/SKILL.md +29 -9
- package/skills/workflow/diagnosing-perf-regressions/SKILL.md +46 -21
- package/skills/workflow/gameskill/SKILL.md +11 -2
- package/skills/workflow/headless-scripting/SKILL.md +407 -0
- package/skills/workflow/investigating-bugs/SKILL.md +4 -2
- package/skills/workflow/mcpupdate/SKILL.md +9 -9
- package/skills/workflow/playtesting-a-feature/SKILL.md +94 -21
- package/skills/workflow/skill-create/SKILL.md +7 -7
- package/skills/workflow/skill-test/SKILL.md +3 -3
- package/skills/workflow/using-summer/SKILL.md +32 -3
- package/skills/workflow/verification-before-completion/SKILL.md +2 -0
- package/skills/workflow/writing-plans/SKILL.md +7 -7
- package/skills/workflow/writing-skills/SKILL.md +7 -5
- package/skills/workflow/writing-skills/testing-skills-with-subagents.md +1 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: export-and-ship
|
|
3
|
-
description: Use when the user
|
|
3
|
+
description: Use when the user wants to assess or prepare a Summer game export. Inventories the templates and targets actually available in the installed Summer Engine build, validates release assets and configuration, and produces only locally supported builds after approval. It does not publish, upload, host, or submit a game. Trigger on "export", "ship", "release", "build", "Steam", "itch", "HTML5", "iOS", "Android", "submit", "publish".
|
|
4
4
|
license: MIT
|
|
5
5
|
compatibility: [Cursor, Claude Code, Windsurf, Codex]
|
|
6
6
|
category: deployment
|
|
@@ -13,21 +13,54 @@ paths: ["**/*.gd", "**/*.tscn", "project.godot", "export_presets.cfg", "**/*.png
|
|
|
13
13
|
|
|
14
14
|
## Overview
|
|
15
15
|
|
|
16
|
-
Shipping is a checklist, not a creative act. This skill
|
|
16
|
+
Shipping is a checklist, not a creative act. This skill first inventories the
|
|
17
|
+
export templates and targets actually present in the installed Summer Engine
|
|
18
|
+
build. It can then validate platform-specific assets and configuration and
|
|
19
|
+
produce a local build for an available target after approval. It does not
|
|
20
|
+
upload, host, submit, or promise a target that is absent from the installation.
|
|
17
21
|
|
|
18
|
-
**Core principle:**
|
|
22
|
+
**Core principle:** prove the target is locally available, then read its list,
|
|
23
|
+
satisfy the list, and build. Treat store submission and hosting as separate
|
|
24
|
+
user-controlled workflows.
|
|
19
25
|
|
|
20
26
|
## Steps
|
|
21
27
|
|
|
22
|
-
### 1.
|
|
28
|
+
### 1. Prove local export capability
|
|
23
29
|
|
|
24
|
-
|
|
30
|
+
Do this before presenting destinations, writing presets, or constructing an
|
|
31
|
+
export command.
|
|
25
32
|
|
|
26
|
-
|
|
33
|
+
1. Read `engineBinaryPath` from `summer_get_project_context`.
|
|
34
|
+
2. Resolve the matching export-template directory for that exact Summer
|
|
35
|
+
technical base.
|
|
36
|
+
3. Inventory the installed templates and any `custom_template/release` paths
|
|
37
|
+
already configured in `export_presets.cfg`.
|
|
38
|
+
4. Build a capability table with `available`, `missing prerequisite`, or
|
|
39
|
+
`impossible on this build` for every requested target.
|
|
40
|
+
|
|
41
|
+
A stock Summer 4.6.1 Mono install has only the macOS template. Web export is
|
|
42
|
+
incompatible with that Mono build. Windows, Linux, Android, and iOS require a
|
|
43
|
+
matching custom template or an external CI/build environment, plus their
|
|
44
|
+
platform toolchains where applicable.
|
|
45
|
+
|
|
46
|
+
**Hard gate:** an absent template or toolchain means the target is unavailable.
|
|
47
|
+
Do not create its preset, recommend it as a local option, or invoke an export
|
|
48
|
+
command. Route it to an explicitly configured external CI job or stop and tell
|
|
49
|
+
the user which prerequisite is missing. An export pack is not a runnable
|
|
50
|
+
platform build and must not be presented as one.
|
|
51
|
+
|
|
52
|
+
### 2. Pick among proven destinations
|
|
53
|
+
|
|
54
|
+
Offer only targets marked `available` by step 1. Record other requested
|
|
55
|
+
destinations as blocked follow-ups with their exact prerequisite.
|
|
56
|
+
|
|
57
|
+
> Locally proven targets: **macOS**. Requested but blocked: **Windows**
|
|
58
|
+
> (matching template or external CI), **Web** (non-Mono build), **Android**
|
|
59
|
+
> (template + Android toolchain). Which proven target should I prepare?
|
|
27
60
|
|
|
28
61
|
Each destination has a different list. Multiple destinations = multiple lists. Don't shortcut — the iOS list does not satisfy the Steam list.
|
|
29
62
|
|
|
30
|
-
###
|
|
63
|
+
### 3. Run the pre-flight checklist
|
|
31
64
|
|
|
32
65
|
Always do this first, regardless of destination.
|
|
33
66
|
|
|
@@ -39,7 +72,9 @@ summer_get_console # any "import failed" warnings?
|
|
|
39
72
|
summer_get_scene_tree # is the main scene set?
|
|
40
73
|
```
|
|
41
74
|
|
|
42
|
-
**Fallback (no MCP):** ask the user to confirm
|
|
75
|
+
**Fallback (no MCP):** ask the user to confirm in Summer Engine: Project →
|
|
76
|
+
Project Settings → Application → Run → Main Scene is set, and the Output panel
|
|
77
|
+
has no errors.
|
|
43
78
|
|
|
44
79
|
#### Pre-flight blockers (any one = stop)
|
|
45
80
|
|
|
@@ -59,9 +94,11 @@ If any check fails, list them in one message and ask:
|
|
|
59
94
|
|
|
60
95
|
> Pre-flight failed on N items: <list>. Fix these before exporting? I can take them one by one.
|
|
61
96
|
|
|
62
|
-
###
|
|
97
|
+
### 4. Per-platform distribution requirements
|
|
63
98
|
|
|
64
|
-
|
|
99
|
+
These lists describe distribution requirements only. They do not establish
|
|
100
|
+
local export capability. Walk a list only after step 1 proves its target or
|
|
101
|
+
the user has selected an external build environment that does.
|
|
65
102
|
|
|
66
103
|
#### a) Steam
|
|
67
104
|
|
|
@@ -81,7 +118,8 @@ Walk the list for each chosen destination. Each is non-negotiable.
|
|
|
81
118
|
|
|
82
119
|
Build config for Steam:
|
|
83
120
|
|
|
84
|
-
- Export
|
|
121
|
+
- Export only the platform builds proven in step 1. Additional Steam platforms
|
|
122
|
+
require their own matching template or external build job.
|
|
85
123
|
- Export options: `Embed PCK = true` for single-EXE distribution.
|
|
86
124
|
- Steam SDK integration: GodotSteam (`https://godotsteam.com`) is the standard. Add the GDExtension before exporting.
|
|
87
125
|
- App ID must be set in the Steam SDK init code.
|
|
@@ -100,13 +138,16 @@ Lower bar than Steam. itch is forgiving.
|
|
|
100
138
|
| Build files | ZIP per platform OR `butler` upload | Yes |
|
|
101
139
|
|
|
102
140
|
Build config:
|
|
103
|
-
-
|
|
141
|
+
- Package each proven platform build as a ZIP.
|
|
104
142
|
- Or use `butler push` (itch's CLI) for atomic versioning and patches.
|
|
105
|
-
-
|
|
143
|
+
- A browser build is optional and requires a separately proven non-Mono Web
|
|
144
|
+
export environment.
|
|
106
145
|
|
|
107
|
-
#### c) Web (HTML5)
|
|
146
|
+
#### c) Web (HTML5) — unavailable on the stock Mono build
|
|
108
147
|
|
|
109
|
-
|
|
148
|
+
Do not recommend or attempt this target from the stock Summer installation.
|
|
149
|
+
Route it to a verified non-Mono Summer-compatible build environment first.
|
|
150
|
+
Once that prerequisite is proven, these browser constraints apply:
|
|
110
151
|
|
|
111
152
|
- No threading without `cross-origin-isolated` headers (most hosts don't set them).
|
|
112
153
|
- No ENet — use WebSocket / WebRTC if multiplayer.
|
|
@@ -173,7 +214,7 @@ Build config:
|
|
|
173
214
|
- Code-signing certificate ($75–$300/year from a CA) — without it, SmartScreen flags the EXE.
|
|
174
215
|
- Installer: NSIS or InnoSetup are the standards. Or just ship a ZIP.
|
|
175
216
|
|
|
176
|
-
###
|
|
217
|
+
### 5. Build config consistency check
|
|
177
218
|
|
|
178
219
|
Before producing builds, verify `export_presets.cfg` for each target:
|
|
179
220
|
|
|
@@ -186,34 +227,59 @@ For each preset:
|
|
|
186
227
|
| Field | Production value | Why |
|
|
187
228
|
|---|---|---|
|
|
188
229
|
| `binary_format/embed_pck` | `true` | Single EXE per platform |
|
|
189
|
-
| `debug` | `false` | Debug builds leak source paths and run slower |
|
|
190
230
|
| `texture_format/etc2_astc` | `true` for mobile | Smaller texture compression |
|
|
191
231
|
| `application/short_version` | matches `application/config/version` | Steam reads it |
|
|
192
|
-
| `
|
|
232
|
+
| `script_encryption_key` in `export_credentials.cfg` | set only when the user explicitly chooses script encryption | The similarly named preset field does not exist |
|
|
193
233
|
| `application/icon` | path to your `.ico` / `.icns` / `.png` | Otherwise generic Godot icon ships |
|
|
194
234
|
|
|
195
|
-
###
|
|
235
|
+
### 6. Propose the build sequence
|
|
196
236
|
|
|
197
|
-
>
|
|
237
|
+
> Capability proof: macOS available locally; Windows and Linux require external
|
|
238
|
+
> CI; Web is unavailable on this Mono build. Pre-flight is clean for the macOS
|
|
239
|
+
> preset. May I produce that one proven build now?
|
|
198
240
|
|
|
199
|
-
###
|
|
241
|
+
### 7. Produce a proven build
|
|
200
242
|
|
|
201
|
-
|
|
243
|
+
CLI export is the standard scripted path. **Get the binary from `summer_get_project_context` → `engineBinaryPath`.** Do not type an engine binary name from memory:
|
|
202
244
|
|
|
245
|
+
- There is no `godot` on a Summer user's machine.
|
|
246
|
+
- `summer` is the npm CLI, not the engine. It takes subcommands and would never accept `--export-release`.
|
|
247
|
+
- On macOS the engine is `/Applications/Summer.app/Contents/MacOS/Summer`; on Windows, `%LOCALAPPDATA%\Summer\current\Summer.exe`.
|
|
248
|
+
|
|
249
|
+
After step 1 has marked a preset `available`, substitute only that exact proven
|
|
250
|
+
preset and output:
|
|
251
|
+
|
|
252
|
+
```bash
|
|
253
|
+
ENGINE=<engineBinaryPath>
|
|
254
|
+
PROJ=<absolute project dir>
|
|
255
|
+
PROVEN_PRESET=<exact available preset name>
|
|
256
|
+
PROVEN_OUTPUT=<output path valid for that target>
|
|
257
|
+
|
|
258
|
+
"$ENGINE" --headless --path "$PROJ" --export-release "$PROVEN_PRESET" "$PROVEN_OUTPUT"
|
|
203
259
|
```
|
|
204
|
-
godot --headless --export-release "Windows Desktop" build/win/MyGame.exe
|
|
205
|
-
godot --headless --export-release "Linux" build/linux/MyGame.x86_64
|
|
206
|
-
godot --headless --export-release "macOS" build/mac/MyGame.app
|
|
207
|
-
godot --headless --export-release "Web" build/web/index.html
|
|
208
|
-
godot --headless --export-release "Android" build/android/MyGame.aab
|
|
209
|
-
godot --headless --export-release "iOS" build/ios/MyGame.xcodeproj
|
|
210
|
-
```
|
|
211
260
|
|
|
212
|
-
|
|
261
|
+
`--path` is not optional in a script — without it the export targets the current working directory.
|
|
262
|
+
|
|
263
|
+
The quoted preset name must match a `name=` in `export_presets.cfg` exactly. That file is plain text you can write yourself if it is missing: a hand-written preset plus this command was measured producing a runnable 144 MB `.app`, exit code 0.
|
|
264
|
+
|
|
265
|
+
To enable another target, prove one of these before returning to step 2:
|
|
266
|
+
|
|
267
|
+
- a matching installed export template;
|
|
268
|
+
- a valid `custom_template/release="<path>"` for the current technical base;
|
|
269
|
+
- an external CI/build job with the matching template and platform toolchain.
|
|
270
|
+
|
|
271
|
+
### Export-option cautions
|
|
272
|
+
|
|
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` (`editor/export/editor_export.cpp:101,372-373`). Writing the wrong name produces an **unencrypted build with no error at all**.
|
|
274
|
+
- **There is no `debug` field in a preset.** Debug versus release is chosen by `--export-debug` versus `--export-release`, nothing else.
|
|
275
|
+
|
|
276
|
+
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
|
+
|
|
278
|
+
See `summer:headless-scripting` for the wider pattern this is one instance of.
|
|
213
279
|
|
|
214
280
|
If the user is on a CI system (GitHub Actions etc), this is the right place to point them at a cross-compile workflow — Godot can export Windows + Linux from a Linux runner.
|
|
215
281
|
|
|
216
|
-
###
|
|
282
|
+
### 8. Verify each build
|
|
217
283
|
|
|
218
284
|
For each build:
|
|
219
285
|
- Launch it. Confirm the title screen renders.
|
|
@@ -221,7 +287,7 @@ For each build:
|
|
|
221
287
|
- Check the file size (anything over 500 MB needs justification — usually unstripped textures or unused assets).
|
|
222
288
|
- For mobile: install on a real device, not just the emulator.
|
|
223
289
|
|
|
224
|
-
###
|
|
290
|
+
### 9. Hand off distribution
|
|
225
291
|
|
|
226
292
|
Per platform, point the user at the correct upload path:
|
|
227
293
|
|
|
@@ -248,7 +314,7 @@ Use this as a one-shot grep before any export:
|
|
|
248
314
|
| Icon assets present | Per-platform icon files exist at the paths referenced in `export_presets.cfg` |
|
|
249
315
|
| LICENSE file | Exists at repo root |
|
|
250
316
|
| Attribution file | Exists if any community assets used |
|
|
251
|
-
|
|
|
317
|
+
| Release mode selected | Build invocation uses `--export-release` |
|
|
252
318
|
| Export preset `embed_pck = true` | For all desktop release presets |
|
|
253
319
|
| `.gitignore` excludes build artifacts | `build/`, `.godot/`, `.import/`, `*.tmp` listed |
|
|
254
320
|
| Screenshots ≥ minimum count for platform | 3 for itch, 5 for Steam, 2 for Play |
|
|
@@ -258,7 +324,7 @@ Use this as a one-shot grep before any export:
|
|
|
258
324
|
|
|
259
325
|
| Don't | Do | Why |
|
|
260
326
|
|---|---|---|
|
|
261
|
-
| Ship debug builds to Steam |
|
|
327
|
+
| Ship debug builds to Steam | Use `--export-release` after capability proof | Debug builds leak paths and run slower |
|
|
262
328
|
| Use 256×256 icon for iOS | 1024×1024 (Apple downscales) | iOS rejects undersized icons |
|
|
263
329
|
| Skip Steam trailer | Record at least 30 sec gameplay before launch | Steam blocks the release without it |
|
|
264
330
|
| Ship APK to Play Store | Build AAB | Play requires AAB since 2021 |
|
|
@@ -280,7 +346,7 @@ Use this as a one-shot grep before any export:
|
|
|
280
346
|
|
|
281
347
|
## Collaborative protocol
|
|
282
348
|
|
|
283
|
-
This skill produces release artifacts. Always ask before each build is invoked. Group platforms — "I'm about to build Windows + Mac + Linux release configs into `build/`. OK?". See
|
|
349
|
+
This skill produces release artifacts. Always ask before each build is invoked. Group platforms — "I'm about to build Windows + Mac + Linux release configs into `build/`. OK?". See `../../../references/collaborative-protocol.md`.
|
|
284
350
|
|
|
285
351
|
## Want a working starter?
|
|
286
352
|
|
|
@@ -288,9 +354,10 @@ No template — this is a workflow. Each project's export config and store asset
|
|
|
288
354
|
|
|
289
355
|
## See also
|
|
290
356
|
|
|
291
|
-
-
|
|
292
|
-
-
|
|
293
|
-
-
|
|
357
|
+
- `../../../references/mcp-tools-reference.md` — full MCP tool list
|
|
358
|
+
- `../../../references/godot-version.md` — Summer compatibility and
|
|
359
|
+
export-template versioning
|
|
360
|
+
- `../../../references/collaborative-protocol.md` — "May I write" pattern
|
|
294
361
|
- `deployment/export-presets/SKILL.md` — preset config deep dive
|
|
295
362
|
- `deployment/web-html5-export/SKILL.md` — HTML5-specific traps
|
|
296
363
|
- `deployment/steam-uploader/SKILL.md` — `steamcmd` + GodotSteam (when shipped)
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: remote-deploy
|
|
3
|
+
description: Use when the user wants to run or test the game on a real target instead of the editor — a phone, tablet, or another computer ("deploy to my phone", "run on device", "test on Android/iOS", "remote deploy", "one-click deploy", "play on hardware"). Covers the topnav Remote Deploy button, runnable export presets, export templates, and on-device remote debugging. Use when the Remote Deploy button is greyed out and the user wants to know why.
|
|
4
|
+
license: MIT
|
|
5
|
+
compatibility: [Cursor, Claude Code, Windsurf, Codex]
|
|
6
|
+
category: deployment
|
|
7
|
+
user-invocable: true
|
|
8
|
+
allowed-tools: Read Grep Edit summer_project_setting summer_get_diagnostics summer_get_console summer_get_script_errors
|
|
9
|
+
paths: ["project.godot", "export_presets.cfg"]
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# /remote-deploy — Test the Game on a Real Device
|
|
13
|
+
|
|
14
|
+
## Overview
|
|
15
|
+
|
|
16
|
+
Remote Deploy runs the game on an actual target device — a phone, tablet, or another machine — instead of inside the editor. It exports a **debug** build, installs and launches it on the device, and connects the running game back to the editor's debugger so the Output panel, errors, breakpoints, and profiler all work exactly like a local run.
|
|
17
|
+
|
|
18
|
+
**Core principle:** Remote Deploy is "Play, but on the hardware." Same debug loop, real device.
|
|
19
|
+
|
|
20
|
+
**Capability gate comes first:** before adding a Runnable preset or telling the
|
|
21
|
+
user to pick a device, inventory the exact Summer build's export templates and
|
|
22
|
+
the platform toolchain. A stock Summer 4.6.1 Mono install has only the macOS
|
|
23
|
+
template. It cannot export Web, and Android/iOS/Windows/Linux are unavailable
|
|
24
|
+
until a matching custom template or external build environment is configured.
|
|
25
|
+
Never recommend or attempt a Remote Deploy target that has not passed this
|
|
26
|
+
proof.
|
|
27
|
+
|
|
28
|
+
It is **not** the same as two neighbours:
|
|
29
|
+
|
|
30
|
+
| Action | What it does | Use it for |
|
|
31
|
+
|---|---|---|
|
|
32
|
+
| **Play** (▶) | Runs in the editor (embedded or windowed) | Fast iteration on the dev machine |
|
|
33
|
+
| **Remote Deploy** | Debug build → installs + runs on a device, remote-debugged | Testing real input/perf/screen on hardware |
|
|
34
|
+
| **export-and-ship** (`summer:export-and-ship`) | Supported local release builds | Preparing an artifact for a separate user-controlled distribution workflow |
|
|
35
|
+
|
|
36
|
+
If the user wants a release build for Steam / itch / the App Store, that is `summer:export-and-ship`, not this.
|
|
37
|
+
|
|
38
|
+
## Where it is in the UI
|
|
39
|
+
|
|
40
|
+
- **Agent-layout topnav:** the button with the remote-play icon, immediately right of the **Play/Stop** button and the **`▾`** run-options dropdown. Hover tooltip reads **"Remote Deploy"**.
|
|
41
|
+
- Clicking it opens a **dropdown of detected targets**, grouped by platform (e.g. an `Android` header with each connected device under it). Picking a target deploys and runs there.
|
|
42
|
+
- It is **disabled (greyed out)** with the tooltip **"No Remote Deploy export presets configured."** until the prerequisites below are met. A greyed button is the #1 thing users ask about — it almost always means "no runnable preset or no device detected," not a bug.
|
|
43
|
+
|
|
44
|
+
## Step 1 — prove the requested target is available
|
|
45
|
+
|
|
46
|
+
Use `summer_get_project_context` to identify the exact engine binary and
|
|
47
|
+
technical base, inspect its matching export-template directory, then check the
|
|
48
|
+
requested platform toolchain. Report one of:
|
|
49
|
+
|
|
50
|
+
- `available`: matching template and toolchain are present;
|
|
51
|
+
- `blocked`: name the missing template, toolchain, signing, or device
|
|
52
|
+
prerequisite;
|
|
53
|
+
- `impossible on this build`: Web on the stock Mono build.
|
|
54
|
+
|
|
55
|
+
Stop on `blocked` or `impossible`. Route the user to template installation,
|
|
56
|
+
custom-template setup, or an external CI/device workflow. Do not add a preset
|
|
57
|
+
as if that made the target runnable.
|
|
58
|
+
|
|
59
|
+
## Step 2 — prerequisites for a proven target
|
|
60
|
+
|
|
61
|
+
The button auto-enables the moment a runnable preset **and** at least one detected target both exist for the same platform.
|
|
62
|
+
|
|
63
|
+
| Requirement | How to satisfy it | Why it matters |
|
|
64
|
+
|---|---|---|
|
|
65
|
+
| A **proven template and toolchain** | Complete step 1 | Without both, a visible target still fails at deploy time. |
|
|
66
|
+
| A **runnable export preset** for that proven platform | Project → Export → add the proven preset → toggle **Runnable** on | A preset that exists but isn't marked Runnable does **not** count. |
|
|
67
|
+
| A **detected target** | For example, an authorized Android device or a connected, trusted iOS device | The button enables only when at least one target is reported for a runnable platform. |
|
|
68
|
+
|
|
69
|
+
**Important nuance:** the button does **not** pre-check that templates/toolchain are installed. Enable state is gated only on *runnable preset + detected target*. If templates or the toolchain are missing, the deploy **fails at run time** and the errors appear in a result dialog. So:
|
|
70
|
+
|
|
71
|
+
> **Runnable preset + a detected device make the button appear/enable. Installed export templates make the deploy actually succeed.**
|
|
72
|
+
|
|
73
|
+
This matters when guiding a user mid-setup (e.g. building out a mobile flow): you can see the button enable as soon as a phone is plugged in and the preset is Runnable, even before templates finish downloading.
|
|
74
|
+
|
|
75
|
+
## Step 3 — deploy after proof (the flow)
|
|
76
|
+
|
|
77
|
+
1. The editor continuously polls the export platforms and rebuilds the dropdown: each runnable platform, with each of its detected devices listed underneath.
|
|
78
|
+
2. The user picks a target. Summer Engine exports a **debug** build for that
|
|
79
|
+
preset when the matching template and toolchain are installed.
|
|
80
|
+
3. The build is installed and launched on the device (e.g. `adb install` + launch for Android).
|
|
81
|
+
4. The running game opens a **remote-debug** connection back to the editor — Output, the debugger, and the profiler reflect the on-device session. Stop it from the editor like any normal run.
|
|
82
|
+
5. Any export/deploy error (missing template, no toolchain, unsigned build, device went away) is surfaced in a **result dialog**. Read it; it names the prerequisite to fix.
|
|
83
|
+
|
|
84
|
+
## Mobile paths after capability proof
|
|
85
|
+
|
|
86
|
+
**Android**
|
|
87
|
+
1. First prove a matching Android template, Android SDK, `adb`, and debug
|
|
88
|
+
signing are installed. Otherwise stop.
|
|
89
|
+
2. Enable Developer Options → USB debugging on the phone; plug it in; accept the "Allow USB debugging?" prompt.
|
|
90
|
+
3. Confirm `adb devices` lists it as `device` (not `unauthorized`).
|
|
91
|
+
4. Project → Export → Android preset → **Runnable** on.
|
|
92
|
+
5. The phone appears in the Remote Deploy dropdown → pick it.
|
|
93
|
+
|
|
94
|
+
**iOS**
|
|
95
|
+
1. First prove a matching iOS template, Xcode toolchain, and signing identity
|
|
96
|
+
are installed. Otherwise stop.
|
|
97
|
+
2. Connect and trust the device; ensure a valid signing team in the iOS preset.
|
|
98
|
+
3. The device appears in the dropdown → pick it.
|
|
99
|
+
|
|
100
|
+
**Web**
|
|
101
|
+
|
|
102
|
+
Web is unavailable on the stock Summer Mono build. Do not add a Web Runnable
|
|
103
|
+
preset or direct the user to a browser target. Use ordinary local Play for a
|
|
104
|
+
sanity check, or first provision and verify a separate non-Mono-compatible
|
|
105
|
+
export environment.
|
|
106
|
+
|
|
107
|
+
## Guiding the user (orchestrator playbook)
|
|
108
|
+
|
|
109
|
+
When a user says "deploy to my phone" / "run this on device" and the button is greyed:
|
|
110
|
+
|
|
111
|
+
1. **Prove target capability first** — inspect the exact build's matching
|
|
112
|
+
template directory and platform toolchain. Stop or route externally if
|
|
113
|
+
either is absent; Web is impossible on the stock Mono build.
|
|
114
|
+
2. **Check the build is healthy** — a project with script errors won't export.
|
|
115
|
+
- `summer_get_script_errors` and `summer_get_diagnostics` clean? If not, fix those before anything else.
|
|
116
|
+
- `summer_get_console` for "import failed" noise.
|
|
117
|
+
3. **Confirm a runnable preset exists** for the proven target platform — Read/Grep `export_presets.cfg` for the platform and a `runnable=true` entry. If missing, walk them through Project → Export → add preset → mark Runnable.
|
|
118
|
+
4. **Confirm the main scene is set** — `summer_project_setting` / `project.godot` `application/run/main_scene`. A deploy to a blank main scene launches to nothing.
|
|
119
|
+
5. **Confirm a device is detected** — plugged in, debugging enabled, authorized.
|
|
120
|
+
6. Then point them at the topnav **Remote Deploy** button → pick the device.
|
|
121
|
+
|
|
122
|
+
Order matters: capability proof → healthy project → preset → device. The
|
|
123
|
+
button can enable before the build is actually possible, so its visible state
|
|
124
|
+
never replaces the proof.
|
|
125
|
+
|
|
126
|
+
## Common mistakes
|
|
127
|
+
|
|
128
|
+
- **Confusing it with shipping.** Remote Deploy makes *debug* builds for testing. Store/distribution builds are `summer:export-and-ship`.
|
|
129
|
+
- **Preset exists but isn't Runnable** → button stays greyed. The Runnable toggle is the gate, not the preset's existence.
|
|
130
|
+
- **Expecting it to work without export templates** → button may be enabled (device detected) but the deploy then fails in the result dialog. Install templates.
|
|
131
|
+
- **Android device `unauthorized`** in `adb devices` → the device won't show as a target. Re-accept the USB-debugging prompt on the phone.
|
|
132
|
+
- **Trying to script it via MCP** — there is no `summer_*` tool that triggers Remote Deploy; it is a UI action. The orchestrator's job is to get the prerequisites green and point the user at the button.
|
|
133
|
+
|
|
134
|
+
## Quick reference
|
|
135
|
+
|
|
136
|
+
| Button state | Meaning | Fix |
|
|
137
|
+
|---|---|---|
|
|
138
|
+
| Greyed, "No Remote Deploy export presets configured." | No runnable preset **or** no detected device | Add a Runnable preset; connect/authorize a device |
|
|
139
|
+
| Enabled, dropdown lists devices | Ready to deploy | Pick a device to build + run |
|
|
140
|
+
| Deploy fails in result dialog | Templates/toolchain/signing/device issue | Read the dialog; install the named missing piece |
|
|
@@ -167,4 +167,29 @@ Test scenario: spawn a single weak enemy directly in front of the player at poin
|
|
|
167
167
|
Before: 5-15 bullets continue past the corpse over the next ~0.5s.
|
|
168
168
|
After: 1-2 bullets continue (the ones that were already past the half-flight point), the rest of the fire pool redirects to whatever target Targeting picks next, or stops if there's none in range.
|
|
169
169
|
|
|
170
|
-
Use `summer_get_diagnostics` to confirm no new errors.
|
|
170
|
+
Use `summer_get_diagnostics` to confirm no new errors.
|
|
171
|
+
|
|
172
|
+
`summer_inspect_node` will **not** show you `pending_damage` mid-fight. It reads
|
|
173
|
+
the edited scene in the editor — the response even tags itself
|
|
174
|
+
`provenance: editor_scene` — so it reports the saved node, not the live
|
|
175
|
+
instance. Runtime values need a runtime probe.
|
|
176
|
+
|
|
177
|
+
The route that works from MCP is the `RunVerification` op, sent through
|
|
178
|
+
`summer_batch`. It spins up a hidden, disposable game instance that runs a
|
|
179
|
+
GDScript probe and exits; it never touches the editor:
|
|
180
|
+
|
|
181
|
+
```
|
|
182
|
+
summer_batch(ops=[{
|
|
183
|
+
"op": "RunVerification",
|
|
184
|
+
"max_seconds": 20,
|
|
185
|
+
"probe_source": "extends SummerProbeBase\nfunc _ready():\n\tawait super._ready()\n\t# spawn one enemy, fire at it, then:\n\treport('pending_damage', enemy.pending_damage)\n\tfinish()"
|
|
186
|
+
}])
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
Probe API: `report()`, `save_frame()`, `press()`, `key()`, `finish()`. Returns
|
|
190
|
+
`{ok, results, frames, out_dir}`.
|
|
191
|
+
|
|
192
|
+
Do **not** reach for `SimulateInput` here. It is only reachable from the
|
|
193
|
+
in-editor chat bridge; an MCP or CLI caller gets
|
|
194
|
+
`{ok: false, failure_reason: "unsupported_transport"}` back. Drive input from
|
|
195
|
+
inside the probe with `press()` / `key()` instead.
|
|
@@ -126,15 +126,27 @@ Show this to the user. Ask:
|
|
|
126
126
|
**Preferred (Summer MCP):**
|
|
127
127
|
|
|
128
128
|
```
|
|
129
|
-
summer_get_scene_tree
|
|
130
|
-
summer_add_node(parent="./World/Player", type="GPUParticles3D", name="DoubleJumpFX")
|
|
131
|
-
summer_set_prop("./World/Player/DoubleJumpFX", "emitting", "false")
|
|
132
|
-
summer_add_node(parent="./World/Player", type="AudioStreamPlayer3D", name="JumpAudio")
|
|
133
|
-
summer_input_map_bind(name="jump", events=[{type:"key", key:"Space"}])
|
|
134
|
-
summer_save_scene
|
|
135
|
-
summer_get_script_errors
|
|
129
|
+
summer_get_scene_tree() # confirm Player exists where expected
|
|
130
|
+
summer_add_node(scenePath="res://main.tscn", parent="./World/Player", type="GPUParticles3D", name="DoubleJumpFX")
|
|
131
|
+
summer_set_prop(scenePath="res://main.tscn", path="./World/Player/DoubleJumpFX", key="emitting", value="false")
|
|
132
|
+
summer_add_node(scenePath="res://main.tscn", parent="./World/Player", type="AudioStreamPlayer3D", name="JumpAudio")
|
|
133
|
+
summer_input_map_bind(name="jump", events=[{"type": "key", "key": "Space"}]) # idempotent
|
|
134
|
+
summer_save_scene(scenePath="res://main.tscn")
|
|
135
|
+
summer_get_script_errors(path="res://scripts/player_controller.gd")
|
|
136
136
|
```
|
|
137
137
|
|
|
138
|
+
Argument notes, all of which the tool schema enforces:
|
|
139
|
+
|
|
140
|
+
- `scenePath` is required on `summer_add_node`, `summer_set_prop` and
|
|
141
|
+
`summer_save_scene`. It names the exact `res://` scene; there is no
|
|
142
|
+
"current scene" default.
|
|
143
|
+
- `summer_set_prop` takes named `path` / `key` / `value` — not positional.
|
|
144
|
+
- `summer_input_map_bind` events are dicts. `{"type": "key", "key": "Space"}`
|
|
145
|
+
works; key names go through Godot's keycode table, so `W`, `Space`, `Shift`,
|
|
146
|
+
`Escape` resolve and typos silently produce no event.
|
|
147
|
+
- `summer_get_script_errors` checks one file and requires `path`. Use
|
|
148
|
+
`summer_get_diagnostics()` (no args) for a project-wide check.
|
|
149
|
+
|
|
138
150
|
**Fallback (no MCP):** Print the `.tscn` snippet for the user to paste:
|
|
139
151
|
|
|
140
152
|
```
|
|
@@ -148,7 +160,7 @@ lifetime = 0.4
|
|
|
148
160
|
|
|
149
161
|
### 7. Write the GDScript stub
|
|
150
162
|
|
|
151
|
-
Stub only — implementation is the next session.
|
|
163
|
+
Stub only — implementation is the next session. Typed GDScript throughout (see `summer:scripting-patterns/gdscript-patterns`). For double-jump:
|
|
152
164
|
|
|
153
165
|
```gdscript
|
|
154
166
|
class_name PlayerController
|
|
@@ -236,12 +248,12 @@ Ask:
|
|
|
236
248
|
| Hand-wave depth | "Players will use it strategically" is not depth. Name the choice the player makes. |
|
|
237
249
|
| Tunables hard-coded as `const` | Use `@export` so designers tune in the inspector. |
|
|
238
250
|
| Adding the mechanic without the FX/audio nodes | Without nodes for feedback, the mechanic ships feeling cheap. Scaffold the nodes alongside the script. |
|
|
239
|
-
| Setting `position` for movement instead of `velocity` | Physics objects use `velocity` in `_physics_process`.
|
|
240
|
-
| Calling SetResourceProperty
|
|
251
|
+
| Setting `position` for movement instead of `velocity` | Physics objects use `velocity` in `_physics_process`. |
|
|
252
|
+
| Calling SetResourceProperty before the property holds a resource | Explicit `resource is null` error, not a silent drop. Assign the resource first (`summer_set_prop key="mesh" value="BoxMesh"`), then set its sub-properties. Scene-embedded sub_resources are fully supported targets. |
|
|
241
253
|
|
|
242
254
|
## Collaborative protocol
|
|
243
255
|
|
|
244
|
-
This skill writes scene nodes and one or more files (`.gd`, `.summer/mechanics/<name>.md`). Group writes into one ask per phase.
|
|
256
|
+
This skill writes scene nodes and one or more files (`.gd`, `.summer/mechanics/<name>.md`). Group writes into one ask per phase.
|
|
245
257
|
|
|
246
258
|
## Want a working starter?
|
|
247
259
|
|
|
@@ -254,10 +266,6 @@ This skill is a workflow that designs and scaffolds — the templates are runnab
|
|
|
254
266
|
|
|
255
267
|
## See also
|
|
256
268
|
|
|
257
|
-
- `references/collaborative-protocol.md`
|
|
258
|
-
- `references/mcp-tools-reference.md`
|
|
259
|
-
- `references/gd-style.md` — GDScript conventions
|
|
260
|
-
- `references/godot-version.md` — Godot 4.5 API notes
|
|
261
269
|
- `scene-and-project/brainstorm-game/SKILL.md` — produces `.summer/GameSoul.md` this skill reads
|
|
262
270
|
- `level-design/design-level/SKILL.md` — design the levels that exercise the mechanic
|
|
263
271
|
- `character-controllers/fps-controller/SKILL.md` — FPS movement scaffolding
|
|
@@ -150,9 +150,20 @@ Show the skeleton. Ask:
|
|
|
150
150
|
|
|
151
151
|
**Preferred (Summer MCP):**
|
|
152
152
|
|
|
153
|
+
`summer_create_scene` takes `path`, `rootName`, and a mandatory safety gate.
|
|
154
|
+
There is no `root_type` or `root_name` argument. The tool refuses to run unless
|
|
155
|
+
`allow_temporary_scene_mutation` is explicitly true, because of how it works: it
|
|
156
|
+
opens the currently-open scene (or the project's main scene) as a template,
|
|
157
|
+
removes every child, renames the root, saves-as to the new path, then reopens
|
|
158
|
+
the original. Ask the user before setting the flag.
|
|
159
|
+
|
|
160
|
+
The consequence to plan around: **the new scene's root node type is copied from
|
|
161
|
+
the template's root**, not chosen by you. Create levels from a scene whose root
|
|
162
|
+
is already `Node3D`, or fix the root afterwards in the editor.
|
|
163
|
+
|
|
153
164
|
```
|
|
154
|
-
summer_create_scene(path="res://levels/level_01.tscn",
|
|
155
|
-
summer_add_node(parent="./World", type="Node3D", name="Geometry")
|
|
165
|
+
summer_create_scene(path="res://levels/level_01.tscn", rootName="World", allow_temporary_scene_mutation=true)
|
|
166
|
+
summer_add_node(scenePath="res://levels/level_01.tscn", parent="./World", type="Node3D", name="Geometry")
|
|
156
167
|
summer_add_node(parent="./World/Geometry", type="Node3D", name="IntroAtrium")
|
|
157
168
|
summer_add_node(parent="./World/Geometry", type="Node3D", name="Corridor")
|
|
158
169
|
summer_add_node(parent="./World/Geometry", type="Node3D", name="PeakArena")
|
|
@@ -167,9 +178,15 @@ summer_add_node(parent="./World/Triggers", type="Area3D", name="E2_GateTrigger")
|
|
|
167
178
|
summer_add_node(parent="./World", type="Node3D", name="Lighting")
|
|
168
179
|
summer_add_node(parent="./World/Lighting", type="WorldEnvironment", name="WorldEnvironment")
|
|
169
180
|
summer_add_node(parent="./World/Lighting", type="DirectionalLight3D", name="Sun")
|
|
170
|
-
summer_save_scene
|
|
181
|
+
summer_save_scene(scenePath="res://levels/level_01.tscn")
|
|
171
182
|
```
|
|
172
183
|
|
|
184
|
+
Every `summer_add_node` above takes the same required
|
|
185
|
+
`scenePath="res://levels/level_01.tscn"`; it is elided after the first line only
|
|
186
|
+
to keep the tree readable. A call without `scenePath` is rejected by the tool
|
|
187
|
+
schema. Better still, send the whole block as one `summer_batch(scenePath=...,
|
|
188
|
+
ops=[...])` so the user can undo the skeleton with a single Ctrl+Z.
|
|
189
|
+
|
|
173
190
|
This is a **skeleton, not playable geometry**. Markers and Area3Ds, no meshes, no enemy scripts. Implementation in subsequent sessions / templates.
|
|
174
191
|
|
|
175
192
|
**Fallback (no MCP):** Print the `.tscn` file contents for the user to save manually.
|
|
@@ -239,11 +256,11 @@ End with:
|
|
|
239
256
|
| Reward gating too generous | Free heals before the peak deflate the peak. Gate them after the test. |
|
|
240
257
|
| Blending level types | Stealth + puzzle + boss in one level = three half-baked levels. Pick one. |
|
|
241
258
|
| Building geometry before the skeleton | Skeleton-first lets you iterate on layout cheaply. Geometry comes after the design is locked. |
|
|
242
|
-
| Calling SetResourceProperty
|
|
259
|
+
| Calling SetResourceProperty before the property holds a resource | Explicit `resource is null` error, not a silent drop. Assign the resource first (`summer_set_prop key="mesh" value="BoxMesh"`), then set its sub-properties. Scene-embedded sub_resources are fully supported targets. |
|
|
243
260
|
|
|
244
261
|
## Collaborative protocol
|
|
245
262
|
|
|
246
|
-
This skill creates a new scene file (`.tscn`) and a design doc (`.md`). Group writes per phase. Always ask before `summer_create_scene`.
|
|
263
|
+
This skill creates a new scene file (`.tscn`) and a design doc (`.md`). Group writes per phase. Always ask before `summer_create_scene`.
|
|
247
264
|
|
|
248
265
|
## Want a working starter?
|
|
249
266
|
|
|
@@ -256,9 +273,6 @@ The skeleton this skill produces is meant to be filled in via `/summer:design-me
|
|
|
256
273
|
|
|
257
274
|
## See also
|
|
258
275
|
|
|
259
|
-
- `references/collaborative-protocol.md`
|
|
260
|
-
- `references/mcp-tools-reference.md`
|
|
261
|
-
- `references/godot-version.md` — Godot 4.5 API notes
|
|
262
276
|
- `scene-and-project/brainstorm-game/SKILL.md` — produces `.summer/GameSoul.md`
|
|
263
277
|
- `gameplay-mechanics/design-mechanic/SKILL.md` — designs the verbs the level exercises
|
|
264
278
|
- `ai-and-npcs/design-npc/SKILL.md` — designs the enemies the encounters reference
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: scene-to-level
|
|
3
|
-
description: Use when the user wants to go from a
|
|
3
|
+
description: Use when the user wants to go from a scene reference image or concept art to a playable Summer Engine scene populated with the right assets and terrain. Orchestrates concept, asset pack, terrain, composition, and scene assembly. Trigger on "build this scene", "make this playable", "I want a level that looks like this", "from a screenshot to a game", "implement this concept".
|
|
4
4
|
license: MIT
|
|
5
5
|
compatibility: [Cursor, Claude Code, Windsurf, Codex]
|
|
6
6
|
category: level-design
|
|
@@ -11,7 +11,9 @@ paths: ["**/*.tscn", "**/*.gd", "assets/**", ".summer/**", "levels/**"]
|
|
|
11
11
|
|
|
12
12
|
# scene-to-level — From a reference image to a playable scene
|
|
13
13
|
|
|
14
|
-
This is the **orchestrator** skill. It
|
|
14
|
+
This is the **orchestrator** skill. It does not generate art, slice sheets, or
|
|
15
|
+
write game code. It routes the user through the chain of skills that do and
|
|
16
|
+
stitches their outputs into a placeable Summer Engine scene.
|
|
15
17
|
|
|
16
18
|
Use it when the user shows you a screenshot or concept image and says "build this." The output is a `.tscn` you can hit play on, populated with assets that match the reference's style.
|
|
17
19
|
|
|
@@ -53,16 +55,20 @@ Use it when the user shows you a screenshot or concept image and says "build thi
|
|
|
53
55
|
/ etc. (see summer:2d-assets/use-widget-asset)
|
|
54
56
|
|
|
55
57
|
4. Compose the scene:
|
|
56
|
-
- summer_create_scene
|
|
57
|
-
scene
|
|
58
|
-
|
|
59
|
-
|
|
58
|
+
- summer_create_scene(path=..., rootName=..., allow_temporary_scene_mutation=true).
|
|
59
|
+
It has no root-type argument: the new scene's root is copied from the
|
|
60
|
+
currently-open (or main) scene's root, children stripped and root renamed.
|
|
61
|
+
Start from a 2D scene if you want a Node2D root.
|
|
62
|
+
- Add a TileMapLayer node for terrain; assign the generated tileset
|
|
63
|
+
resource (`TileMap` is deprecated on the current Summer technical line)
|
|
60
64
|
- Place props as Sprite2D / TextureRect children, positioned to
|
|
61
65
|
match the reference's composition
|
|
62
66
|
- Wire UI as Control nodes anchored to the viewport
|
|
67
|
+
- Every mutation tool here takes a required `scenePath`
|
|
63
68
|
|
|
64
69
|
5. Validate:
|
|
65
|
-
-
|
|
70
|
+
- summer_get_diagnostics (no args, project-wide) — or
|
|
71
|
+
summer_get_script_errors(path="res://...gd") for one specific file
|
|
66
72
|
- summer_play (the user takes over from here)
|
|
67
73
|
```
|
|
68
74
|
|