summer-engine 3.4.0 → 3.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (259) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/.claude-plugin/plugin.json +1 -1
  3. package/.codex-plugin/plugin.json +1 -1
  4. package/.cursor-plugin/plugin.json +1 -1
  5. package/.factory-plugin/plugin.json +1 -1
  6. package/.opencode/INSTALL.md +8 -8
  7. package/.opencode/plugins/summer.js +2 -2
  8. package/AGENTS.md +7 -7
  9. package/CHANGELOG.md +14 -0
  10. package/GEMINI.md +1 -1
  11. package/NOTICE +1 -1
  12. package/README.md +30 -34
  13. package/assets/autopilot/run.sh +2 -2
  14. package/assets/navigation/web-routes.json +1 -1
  15. package/commands/gameskill.md +2 -2
  16. package/commands/summer.md +25 -25
  17. package/dist/cli/commands/open.d.ts +1 -1
  18. package/dist/cli/commands/run.d.ts +1 -1
  19. package/dist/cli/commands/run.js +1 -1
  20. package/dist/cli/commands/skills.js +2 -2
  21. package/dist/core/api-client.d.ts +5 -6
  22. package/dist/core/api-client.js +12 -15
  23. package/dist/core/auth.js +2 -2
  24. package/dist/core/capabilities/asset-import.d.ts +0 -1
  25. package/dist/core/capabilities/camera-view.d.ts +1 -1
  26. package/dist/core/capabilities/camera-view.js +2 -2
  27. package/dist/core/capabilities/connect-signal.d.ts +1 -2
  28. package/dist/core/capabilities/connect-signal.js +1 -2
  29. package/dist/core/capabilities/console-read.d.ts +2 -2
  30. package/dist/core/capabilities/console-read.js +2 -2
  31. package/dist/core/capabilities/engine-receipt.d.ts +5 -7
  32. package/dist/core/capabilities/engine-receipt.js +7 -9
  33. package/dist/core/capabilities/export-game.js +3 -3
  34. package/dist/core/capabilities/export-presets.d.ts +1 -1
  35. package/dist/core/capabilities/export-presets.js +1 -1
  36. package/dist/core/capabilities/fabricate-mesh.d.ts +2 -3
  37. package/dist/core/capabilities/fabricate-mesh.js +2 -3
  38. package/dist/core/capabilities/frame-quality.d.ts +4 -4
  39. package/dist/core/capabilities/frame-quality.js +4 -4
  40. package/dist/core/capabilities/grep.d.ts +1 -1
  41. package/dist/core/capabilities/grep.js +1 -1
  42. package/dist/core/capabilities/navigation/open.d.ts +1 -1
  43. package/dist/core/capabilities/navigation/open.js +1 -1
  44. package/dist/core/capabilities/navigation/render-product-map.js +1 -1
  45. package/dist/core/capabilities/navigation/targets.js +2 -2
  46. package/dist/core/capabilities/placement-batch.d.ts +1 -1
  47. package/dist/core/capabilities/placement-batch.js +2 -2
  48. package/dist/core/capabilities/play-determinism.d.ts +1 -1
  49. package/dist/core/capabilities/play-determinism.js +1 -1
  50. package/dist/core/capabilities/publish-build.d.ts +1 -1
  51. package/dist/core/capabilities/publish-build.js +4 -6
  52. package/dist/core/capabilities/publish-download.d.ts +1 -2
  53. package/dist/core/capabilities/publish-download.js +2 -3
  54. package/dist/core/capabilities/replace-node.d.ts +1 -3
  55. package/dist/core/capabilities/replace-node.js +1 -3
  56. package/dist/core/capabilities/runtime-control.d.ts +5 -7
  57. package/dist/core/capabilities/runtime-control.js +7 -9
  58. package/dist/core/capabilities/scene-batch.d.ts +1 -1
  59. package/dist/core/capabilities/scene-batch.js +1 -1
  60. package/dist/core/capabilities/scene-kind.js +1 -1
  61. package/dist/core/capabilities/scene-readback.d.ts +3 -4
  62. package/dist/core/capabilities/scene-readback.js +3 -4
  63. package/dist/core/capabilities/scene-script.d.ts +2 -2
  64. package/dist/core/capabilities/scene-script.js +2 -2
  65. package/dist/core/capabilities/seeing/shot-store.d.ts +1 -1
  66. package/dist/core/capabilities/seeing/shot-store.js +1 -1
  67. package/dist/core/capabilities/summer-bundle.d.ts +2 -3
  68. package/dist/core/capabilities/summer-bundle.js +2 -3
  69. package/dist/core/capabilities/surface-snap.d.ts +1 -1
  70. package/dist/core/capabilities/surface-snap.js +1 -1
  71. package/dist/core/capabilities/tool-dispatch.js +1 -1
  72. package/dist/core/capabilities/ui-control.d.ts +1 -2
  73. package/dist/core/capabilities/ui-control.js +1 -2
  74. package/dist/core/capabilities/world-snapshot.d.ts +1 -1
  75. package/dist/core/capabilities/world-snapshot.js +1 -1
  76. package/dist/core/capability-skew.d.ts +2 -3
  77. package/dist/core/capability-skew.js +4 -5
  78. package/dist/core/feedback/client.js +1 -1
  79. package/dist/core/launch-posture.d.ts +3 -3
  80. package/dist/core/launch-posture.js +3 -3
  81. package/dist/core/library-read.js +1 -2
  82. package/dist/core/templates.d.ts +1 -2
  83. package/dist/core/templates.js +1 -2
  84. package/dist/mcp/server.d.ts +2 -2
  85. package/dist/mcp/server.js +2 -2
  86. package/dist/mcp/tools/creator-tools.js +1 -1
  87. package/dist/mcp/tools/debug-tools.js +1 -1
  88. package/dist/mcp/tools/generate-tools.js +7 -7
  89. package/dist/mcp/tools/navigation-tools.d.ts +1 -1
  90. package/dist/mcp/tools/navigation-tools.js +1 -1
  91. package/dist/mcp/tools/spatial-tools.js +1 -1
  92. package/dist/mcp/tools/visual-tools.js +2 -2
  93. package/dist/mcp/tools/with-engine.d.ts +1 -2
  94. package/dist/mcp/tools/with-engine.js +1 -2
  95. package/gemini-extension.json +1 -1
  96. package/hooks/session-start.sh +2 -2
  97. package/integrations/README.md +70 -76
  98. package/integrations/claude/README.md +0 -3
  99. package/integrations/codex/README.md +1 -2
  100. package/integrations/copilot-jetbrains/README.md +1 -1
  101. package/integrations/cursor/README.md +1 -2
  102. package/integrations/factory/README.md +15 -11
  103. package/integrations/mistral-vibe/README.md +1 -1
  104. package/integrations/opencode/README.md +1 -1
  105. package/integrations/roo-code/README.md +1 -1
  106. package/integrations/rovo-dev/README.md +1 -1
  107. package/integrations/trae/README.md +1 -1
  108. package/integrations/windsurf/README.md +3 -3
  109. package/library/references/collaborative-protocol/collaborative-protocol.md +5 -5
  110. package/library/references/gd-style/gd-style.md +4 -6
  111. package/library/references/godot-version/godot-version.md +3 -3
  112. package/library/references/headless-routing/headless-routing.md +2 -2
  113. package/library/references/mcp-fresh-chat-playbook/mcp-fresh-chat-playbook.md +2 -2
  114. package/library/references/mcp-tools-reference/mcp-tools-reference.md +15 -14
  115. package/library/references/product-map/product-map.md +1 -1
  116. package/library/references/public-surface-language/public-surface-language.md +1 -1
  117. package/library/references/summer-folder/summer-folder.md +1 -1
  118. package/library/skills/3d-lighting/SKILL.md +4 -4
  119. package/library/skills/README.md +5 -5
  120. package/library/skills/adaptive-music/SKILL.md +7 -7
  121. package/library/skills/ai-characters-in-games/SKILL.md +1 -1
  122. package/library/skills/ambient-bed/SKILL.md +12 -14
  123. package/library/skills/animated-loop/SKILL.md +42 -42
  124. package/library/skills/animation-tree/SKILL.md +6 -6
  125. package/library/skills/art-direction/SKILL.md +8 -11
  126. package/library/skills/asset-strategy/SKILL.md +3 -3
  127. package/library/skills/audio-direction/SKILL.md +8 -10
  128. package/library/skills/auto-fire-targeting/SKILL.md +4 -3
  129. package/library/skills/bounded-engine-runs/SKILL.md +6 -7
  130. package/library/skills/brainstorm-game/SKILL.md +5 -5
  131. package/library/skills/brainstorming/SKILL.md +9 -15
  132. package/library/skills/celeste-momentum-platforming/SKILL.md +8 -13
  133. package/library/skills/celeste-momentum-platforming/resource.yaml +1 -1
  134. package/library/skills/character-animation-wiring/SKILL.md +2 -2
  135. package/library/skills/character-model/SKILL.md +15 -26
  136. package/library/skills/character-movement/SKILL.md +1 -1
  137. package/library/skills/character-movement/references/movement-3d.md +1 -1
  138. package/library/skills/character-portrait/SKILL.md +4 -4
  139. package/library/skills/cinematic-cutscene/SKILL.md +38 -38
  140. package/library/skills/combat-basics/SKILL.md +1 -1
  141. package/library/skills/compatibility-renderer-traps/SKILL.md +2 -2
  142. package/library/skills/concept-art/SKILL.md +3 -3
  143. package/library/skills/create-asset-sheet/SKILL.md +12 -31
  144. package/library/skills/debug/SKILL.md +5 -4
  145. package/library/skills/debugging-game-feel/SKILL.md +1 -4
  146. package/library/skills/debugging-game-feel/resource.yaml +1 -1
  147. package/library/skills/design-level/SKILL.md +5 -5
  148. package/library/skills/design-mechanic/SKILL.md +6 -6
  149. package/library/skills/design-npc/SKILL.md +8 -15
  150. package/library/skills/diagnosing-perf-regressions/SKILL.md +5 -10
  151. package/library/skills/dispatching-parallel-agents/SKILL.md +1 -19
  152. package/library/skills/environment-kit/SKILL.md +5 -5
  153. package/library/skills/export-and-ship/SKILL.md +23 -24
  154. package/library/skills/fabricating-assets/SKILL.md +1 -1
  155. package/library/skills/facial-and-lipsync/SKILL.md +5 -5
  156. package/library/skills/fps-controller/SKILL.md +17 -16
  157. package/library/skills/fps-controller/resource.yaml +0 -2
  158. package/library/skills/game-feel/SKILL.md +6 -7
  159. package/library/skills/gameskill/SKILL.md +3 -3
  160. package/library/skills/gdscript-patterns/SKILL.md +3 -3
  161. package/library/skills/generate-motion/SKILL.md +5 -22
  162. package/library/skills/godogen-visual-proof-game-generation/SKILL.md +72 -90
  163. package/library/skills/godogen-visual-proof-game-generation/resource.yaml +0 -1
  164. package/library/skills/headless-scripting/SKILL.md +8 -8
  165. package/library/skills/instantiate-asset-pack/SKILL.md +7 -3
  166. package/library/skills/investigating-bugs/SKILL.md +3 -11
  167. package/library/skills/investigating-bugs/condition-based-waiting.md +0 -10
  168. package/library/skills/investigating-bugs/root-cause-tracing.md +0 -8
  169. package/library/skills/lumera-single-image-scene-reconstruction/SKILL.md +15 -15
  170. package/library/skills/lumera-single-image-scene-reconstruction/resource.yaml +0 -1
  171. package/library/skills/make-game/SKILL.md +3 -5
  172. package/library/skills/make-game/references/2d-platformer.md +1 -1
  173. package/library/skills/multiplayer-project/SKILL.md +1 -1
  174. package/library/skills/multiplayer-testing/SKILL.md +4 -4
  175. package/library/skills/music-track/SKILL.md +40 -38
  176. package/library/skills/new-project/SKILL.md +4 -6
  177. package/library/skills/organic-model/SKILL.md +9 -9
  178. package/library/skills/pixel-art/SKILL.md +6 -6
  179. package/library/skills/play/SKILL.md +3 -4
  180. package/library/skills/playtesting-a-feature/SKILL.md +4 -6
  181. package/library/skills/procedural-animation/SKILL.md +10 -11
  182. package/library/skills/prop-model/SKILL.md +4 -4
  183. package/library/skills/psx-retro-rendering/SKILL.md +20 -20
  184. package/library/skills/psx-retro-rendering/resource.yaml +2 -3
  185. package/library/skills/realtime-wet-surfaces/SKILL.md +15 -15
  186. package/library/skills/realtime-wet-surfaces/resource.yaml +1 -2
  187. package/library/skills/remote-deploy/SKILL.md +20 -21
  188. package/library/skills/retarget/SKILL.md +19 -23
  189. package/library/skills/running-in-the-cloud/SKILL.md +5 -5
  190. package/library/skills/scene-composition/SKILL.md +5 -5
  191. package/library/skills/scene-hierarchy-design/SKILL.md +3 -3
  192. package/library/skills/scene-hierarchy-design/resource.yaml +0 -1
  193. package/library/skills/scene-scripting/SKILL.md +3 -3
  194. package/library/skills/scene-to-level/SKILL.md +28 -31
  195. package/library/skills/skill-create/SKILL.md +1 -1
  196. package/library/skills/skill-improve/SKILL.md +9 -9
  197. package/library/skills/skill-test/SKILL.md +10 -10
  198. package/library/skills/skintokens-auto-rigging/SKILL.md +18 -18
  199. package/library/skills/skintokens-auto-rigging/resource.yaml +3 -3
  200. package/library/skills/skybox-panorama/SKILL.md +8 -9
  201. package/library/skills/sound-effect/SKILL.md +19 -19
  202. package/library/skills/spatial-placement/SKILL.md +2 -2
  203. package/library/skills/spatial-placement/references/kit-placement-tools.md +12 -22
  204. package/library/skills/sprite-sheet/SKILL.md +10 -10
  205. package/library/skills/summer-analytics/SKILL.md +3 -3
  206. package/library/skills/summer-friends/SKILL.md +10 -10
  207. package/library/skills/summer-leaderboards/SKILL.md +6 -6
  208. package/library/skills/summer-match-results/SKILL.md +13 -13
  209. package/library/skills/summer-matchmaking/SKILL.md +11 -11
  210. package/library/skills/summer-parties/SKILL.md +9 -9
  211. package/library/skills/summer-player-data/SKILL.md +12 -12
  212. package/library/skills/summer-store/SKILL.md +6 -6
  213. package/library/skills/summer-world-chat/SKILL.md +9 -9
  214. package/library/skills/summer-world-saves/SKILL.md +7 -7
  215. package/library/skills/text-to-motion/rigging-for-text-motion.md +1 -1
  216. package/library/skills/tileable-texture/SKILL.md +1 -1
  217. package/library/skills/trailer-shot/SKILL.md +36 -36
  218. package/library/skills/tune-performance/SKILL.md +13 -13
  219. package/library/skills/tune-performance/resource.yaml +1 -1
  220. package/library/skills/ui-graphics/SKILL.md +7 -7
  221. package/library/skills/use-widget-asset/SKILL.md +7 -7
  222. package/library/skills/using-summer/SKILL.md +5 -7
  223. package/library/skills/vehicle-model/SKILL.md +6 -7
  224. package/library/skills/vehicle-model/resource.yaml +2 -2
  225. package/library/skills/verification-before-completion/SKILL.md +5 -6
  226. package/library/skills/vfx-dissolve/SKILL.md +4 -4
  227. package/library/skills/vfx-fire/SKILL.md +6 -6
  228. package/library/skills/vfx-fire/_building-blocks/additive-billboard-particles.md +3 -3
  229. package/library/skills/vfx-hit-spark/SKILL.md +4 -4
  230. package/library/skills/vfx-hit-spark/_building-blocks/additive-billboard-particles.md +3 -3
  231. package/library/skills/vfx-lightning/SKILL.md +5 -5
  232. package/library/skills/vfx-lightning/_building-blocks/additive-billboard-particles.md +3 -3
  233. package/library/skills/vfx-lightning/_building-blocks/trauma-shake-snippet.md +9 -3
  234. package/library/skills/vfx-magic-glow/SKILL.md +4 -4
  235. package/library/skills/vfx-magic-glow/_building-blocks/additive-billboard-particles.md +3 -3
  236. package/library/skills/vfx-muzzle-flash/SKILL.md +5 -5
  237. package/library/skills/vfx-muzzle-flash/_building-blocks/additive-billboard-particles.md +3 -3
  238. package/library/skills/vfx-muzzle-flash/_building-blocks/trauma-shake-snippet.md +9 -3
  239. package/library/skills/vfx-smoke/SKILL.md +5 -5
  240. package/library/skills/vfx-water-ripple/SKILL.md +2 -2
  241. package/library/skills/vfx-water-ripple/_building-blocks/additive-billboard-particles.md +3 -3
  242. package/library/skills/voice-line/SKILL.md +9 -9
  243. package/library/skills/world-building-3d/references/spatial-tools.md +2 -2
  244. package/library/skills/writing-plans/SKILL.md +4 -4
  245. package/library/skills/writing-skills/SKILL.md +8 -8
  246. package/library/tools/creator-publish/resource.yaml +4 -4
  247. package/library/tools/creator-releases/resource.yaml +5 -5
  248. package/library/tools/publish-build/resource.yaml +5 -1
  249. package/package.json +1 -1
  250. package/registry/generated/gemini-extension.json +1 -1
  251. package/registry/generated/index.json +130 -130
  252. package/registry/generated/marketplace.claude.json +1 -1
  253. package/registry/generated/plugin.claude.json +1 -1
  254. package/registry/generated/plugin.codex.json +1 -1
  255. package/registry/generated/plugin.cursor.json +1 -1
  256. package/registry/generated/plugin.factory.json +1 -1
  257. package/registry/generated/skills-index.md +5 -5
  258. package/registry/generated/skills-registry.json +5 -5
  259. package/registry/schemas/domains.json +1 -1
@@ -33,15 +33,17 @@ export command.
33
33
  1. Read `engineBinaryPath` from `summer_get_project_context`.
34
34
  2. Resolve the matching export-template directory for that exact Summer
35
35
  technical base.
36
- 3. Inventory the installed templates and any `custom_template/release` paths
37
- already configured in `export_presets.cfg`.
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 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.
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
- > (matching template or external CI), **Web** (non-Mono build), **Android**
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 Summer installation.
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". Keep: "GLES3 Fallback to GLES2" if targeting old browsers.
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 (Godot generates) |
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 generic Godot icon ships |
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 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?
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` (`editor/export/editor_export.cpp:101,372-373`). Writing the wrong name produces an **unencrypted build with no error at all**.
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), this is the right place to point them at a cross-compile workflow — Godot can export Windows + Linux from a Linux runner.
284
+ If the user is on a CI system (GitHub Actions etc), point them at a cross-compile workflow: the engine can export Windows and Linux from a Linux runner.
281
285
 
282
286
  ### 8. Verify each build
283
287
 
@@ -354,7 +358,7 @@ This skill produces release artifacts. Always ask before each build is invoked.
354
358
 
355
359
  ## Want a working starter?
356
360
 
357
- No template — this is a workflow. Each project's export config and store assets are project-specific. For the Steam-specific GodotSteam GDExtension setup, see `deployment/steam-uploader/SKILL.md` (when shipped).
361
+ No template — this is a workflow. Each project's export config and store assets are project-specific.
358
362
 
359
363
  ## See also
360
364
 
@@ -362,10 +366,5 @@ No template — this is a workflow. Each project's export config and store asset
362
366
  - `../../references/godot-version/godot-version.md` — Summer compatibility and
363
367
  export-template versioning
364
368
  - `../../references/collaborative-protocol/collaborative-protocol.md` — "May I write" pattern
365
- - `deployment/export-presets/SKILL.md` — preset config deep dive
366
- - `deployment/web-html5-export/SKILL.md` — HTML5-specific traps
367
- - `deployment/steam-uploader/SKILL.md` — `steamcmd` + GodotSteam (when shipped)
368
- - `deployment/itch-uploader/SKILL.md` — `butler` workflow (when shipped)
369
- - `deployment/mobile-export/SKILL.md` — iOS / Android specifics (when shipped)
370
- - `asset-pipeline/attribution-and-licensing/SKILL.md` — community asset attribution
371
- - `performance/tune-performance/SKILL.md` — pre-ship performance pass
369
+ - `headless-scripting` — the headless CLI pattern the export command follows
370
+ - `tune-performance` — pre-ship performance pass
@@ -24,7 +24,7 @@ Three facts shape every use:
24
24
  | Blockout / placeholder | `scene-scripting` primitives or CSG | fabricate | Must be instant and in-scene; no process spawn is justified |
25
25
  | Generic hard-surface prop ("a barrel") | `summer_search_assets` → `summer_import_asset` (`prop-model`) | `summer_generate_3d` | The free library plus `target_size` beats paid generation and a 2-minute wait, in a consistent style |
26
26
  | Bespoke prop ("the artifact from our GDD") | `summer_generate_3d` | fabricate | Image-to-3D is exactly what generation is for; fabricate when exact dimensions or parametric variants matter |
27
- | **Modular kit** (walls, pipes, fences, rails that snap) | **fabricate** | library kit (`environment-kit`) | Generation cannot hold dimensions and style across 30 pieces; array + boolean + bevel + one material is the classic kit workflow |
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 2026 production stack:
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, the industry standard for game-dev 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.
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
- Cost: Rhubarb is free + ~5s CPU per 30s clip locally. Cloud fallback ~$0.02 / minute, ~5s wall-clock for a 30s clip.
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 and wants to map manually, this is the table to apply.
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
- - For full performance capture (face + body together), out of scope — see Meshy's mocap docs or external pipelines.
303
+ - Full performance capture (face and body together) is out of scope; use an external capture pipeline.
304
304
 
305
305
  ## See also
306
306
 
@@ -5,14 +5,14 @@ license: MIT
5
5
  compatibility: [Cursor, Claude Code, Windsurf, Codex]
6
6
  category: character-controllers
7
7
  user-invocable: false
8
- template-id: template-3d-fps
8
+ template-id: template-3d-fps-old-school
9
9
  allowed-tools: Read Grep summer_get_scene_tree summer_add_node summer_set_prop summer_set_resource_property summer_input_map_bind summer_save_scene summer_get_script_errors
10
10
  paths: ["**/*.gd", "**/*.tscn"]
11
11
  ---
12
12
 
13
13
  # FPS Controller for Summer Engine
14
14
 
15
- The canonical first-person controller. Coyote time, jump buffering, air control, external-velocity, the works. This is the production minimum for an FPS that doesn't feel like a Unity tutorial — it follows the shipping FPS standard for movement (gravity, grace timers, separate ground/air acceleration, external force accumulator) so the player never says "this feels stiff" or "I jumped right at the edge and died unfairly".
15
+ The canonical first-person controller: coyote time, jump buffering, air control and external velocity. It follows the standard shipping FPS movement model (asymmetric gravity, grace timers, separate ground/air acceleration, an external force accumulator), so the player never says "this feels stiff" or "I jumped right at the edge and died unfairly".
16
16
 
17
17
  ## Scene Structure
18
18
 
@@ -24,7 +24,7 @@ Player (CharacterBody3D)
24
24
  └── (optional) RayCast3D # ground / interaction probe
25
25
  ```
26
26
 
27
- The Head/Camera split is the industry-standard movement model: yaw rotates the body, pitch rotates only the head. Don't pitch the body or you get tilted capsules and slope-collision bugs.
27
+ The Head/Camera split is the standard: yaw rotates the body, pitch rotates only the head. Don't pitch the body or you get tilted capsules and slope-collision bugs.
28
28
 
29
29
  ## Step-by-Step Setup via MCP
30
30
 
@@ -48,7 +48,7 @@ summer_set_resource_property(scenePath="res://main.tscn", nodePath="./World/Play
48
48
  summer_set_resource_property(scenePath="res://main.tscn", nodePath="./World/Player/Collision", resourceProperty="shape", subProperty="height", value="1.8")
49
49
  ```
50
50
 
51
- Two things the older version of this skill got wrong:
51
+ Two rules for these calls:
52
52
 
53
53
  - **`scenePath` is required** on `summer_add_node`, `summer_set_prop`,
54
54
  `summer_set_resource_property` and `summer_save_scene`. Omit it and the call
@@ -61,7 +61,7 @@ Two things the older version of this skill got wrong:
61
61
  and external `.tres` resources take the same path. Structural failures are
62
62
  explicit — `node not found`, `property is not a resource`, or `resource is
63
63
  null` when the property was never assigned — but a bad value shape is silent
64
- on current engines: a JSON object instead of a Godot literal string, a
64
+ on current engines: a JSON object instead of an engine variant string, a
65
65
  misspelled `key`/`subProperty`, or a wrong-typed value returns `ok:true` yet
66
66
  no-ops or coerces destructively. Assign the resource first, pass class names
67
67
  and `Vector3(...)`/`Color(...)` strings, and confirm in the saved `.tscn`,
@@ -234,18 +234,18 @@ func add_external_velocity(impulse: Vector3) -> void:
234
234
  | `fall_gravity_multiplier` | `1.4` | Snappier descent than ascent (variable-jump-feel staple). |
235
235
  | `ground_accel` / `ground_friction` | `80 / 90` | Crisp start, near-instant stop. |
236
236
  | `air_accel` / `air_friction` | `25 / 5` | Reduced air control + minimal air drag. |
237
- | `coyote_time` | `0.1` | Standard 0.08–0.15s grace — invisible to players, fixes 60% of "unfair death" complaints. |
237
+ | `coyote_time` | `0.1` | Standard 0.08–0.15s grace — invisible to players, removes most "unfair death" complaints. |
238
238
  | `jump_buffer_time` | `0.1` | Same window the other direction. |
239
239
  | `mouse_sensitivity` | `0.002` | Default raw multiplier; expose via settings. |
240
240
  | `external_damping` | `8.0` | Knockback decays over ~0.5s. |
241
241
 
242
242
  ## Why Each Feature Matters
243
243
 
244
- **Coyote time (~0.1s)** — Players judge ledges by what they see, not by frame-perfect collision. A small grace period after walking off a ledge where jump still works fixes the "I jumped right at the edge and died unfairly" complaint that breaks 60% of new players' tutorials. Cost: 3 lines. Industry-standard window is 0.08–0.15s — short enough to be invisible, long enough to mask the imprecision of human reaction time.
244
+ **Coyote time (~0.1s)** — Players judge ledges by what they see, not by frame-perfect collision. A small grace period after walking off a ledge where jump still works fixes the "I jumped right at the edge and died unfairly" complaint. Cost: 3 lines. The usual window is 0.08–0.15s — short enough to be invisible, long enough to mask the imprecision of human reaction time.
245
245
 
246
246
  **Jump buffering (~0.1s)** — Pressing jump 50ms before landing should not be punished. Buffer the input for ~0.1s and fire on touchdown. Without this, fast-moving players feel like the controller "ate their input" — they pressed jump, they saw nothing happen, they blame the game. With it, every "near-miss" jump becomes a successful one. Cost: 4 lines.
247
247
 
248
- **Air control with reduced acceleration (~30% of ground)** — Zero air control feels like ice; the player commits to a direction at jump-takeoff and can't course-correct. Full air control feels like a Unity tutorial; momentum is meaningless and a strafe-jump cancels itself. The shipping FPS standard sits around 25–30% of ground accel: enough to course-correct mid-jump, not enough to cancel realistic momentum. The `move_toward` formulation lets designers tune this with one number — `air_accel` — without forking code.
248
+ **Air control with reduced acceleration (~30% of ground)** — Zero air control feels like ice; the player commits to a direction at jump-takeoff and can't course-correct. Full air control feels weightless; momentum is meaningless and a strafe-jump cancels itself. The shipping FPS standard sits around 25–30% of ground accel: enough to course-correct mid-jump, not enough to cancel realistic momentum. The `move_toward` formulation lets designers tune this with one number — `air_accel` — without forking code.
249
249
 
250
250
  **External velocity accumulator** — Knockback, explosions, jump pads, conveyor belts, wind volumes, and grapple-yanks must not fight player input. Storing them in a separate `external_velocity`, applying once per frame, and decaying via `move_toward(0, damping * delta)` means an explosion shoves the player and then control returns smoothly — no "stuck at terminal velocity" or "input cancels the punch" bugs. The subtract-previous-contribution trick (line 1 of `_physics_process`) is the production fix that prevents accumulation when the player is also sprinting; it's the kind of detail you only learn by shipping multiplayer. Public API (`add_external_velocity`) means any system — AOE attack, jump pad scene, grapple ability — can shove the player with one call, no coupling.
251
251
 
@@ -255,7 +255,7 @@ func add_external_velocity(impulse: Vector3) -> void:
255
255
 
256
256
  Once the skeleton is in, designers tune by feel. Common targets:
257
257
 
258
- **Snappy military shooter (industry-standard FPS feel):**
258
+ **Snappy military shooter:**
259
259
  - `walk_speed = 5.5`, `sprint_speed = 8.0`
260
260
  - `ground_accel = 90`, `ground_friction = 100`
261
261
  - `air_accel = 20`, `air_friction = 4`
@@ -284,14 +284,14 @@ The skeleton doesn't change — only the `@export` defaults. That's the point of
284
284
  - **Pressing jump just before landing does nothing** — `_jump_buffer_timer` is being decremented to zero before the player touches floor. The buffer must NOT be cleared by anything except a successful jump.
285
285
  - **Knockback compounds forever** — `_prev_external_applied` isn't being subtracted. Step 1 of `_physics_process` MUST run before gravity, or external impulses pile up frame after frame.
286
286
  - **Knockback decays too fast / too slow** — tune `external_damping`. `8.0` decays a 5 m/s impulse to near-zero in ~0.6s. Lower = longer hangtime.
287
- - **Air control feels like ice OR like a Unity tutorial** — `air_accel` is the only knob. Industry-standard is 20–30% of `ground_accel`. Zero = ice. Equal = arcade-y. The shipping FPS standard sits around 25.
287
+ - **Air control feels like ice OR weightless** — `air_accel` is the only knob. The usual range is 20–30% of `ground_accel`. Zero = ice. Equal = arcade-y.
288
288
  - **Camera tilts on slopes** — pitch is on the body instead of the Head. Pitch only on `Head`; yaw only on `Player`.
289
289
  - **Camera rolls when looking around** — you're calling `rotate_x` on something that's already rotated on Y. Fix: only ever rotate Y on Player and X on Head, never combine.
290
290
  - **Mouse look doesn't work** — `Input.mouse_mode` isn't set to `MOUSE_MODE_CAPTURED`, or another node is consuming `_input` before this script. Use `_unhandled_input` to be a good citizen.
291
291
  - **Mouse look feels laggy at low FPS** — sensitivity is being applied in `_physics_process`. Mouse-motion handling MUST stay in `_input` or `_unhandled_input` — those fire per-event, not per-physics-tick.
292
292
  - **Falling through floor** — floor needs a StaticBody3D + CollisionShape3D on the same physics layer as the player.
293
293
  - **Camera clipping geometry** — push `Camera.near` to ~0.05 or shrink the capsule radius slightly.
294
- - **Player jitters on slopes / stairs** — enable `floor_snap_length = 0.5` and `floor_max_angle = 0.785` (~45°) on the CharacterBody3D. Out of scope for this skeleton; see the character-body-tuning skill when it ships.
294
+ - **Player jitters on slopes / stairs** — enable `floor_snap_length = 0.5` and `floor_max_angle = 0.785` (~45°) on the CharacterBody3D. Out of scope for this skeleton.
295
295
 
296
296
  ## Networking Note
297
297
 
@@ -312,8 +312,8 @@ The skeleton is intentionally ~90 lines. When you outgrow it, add features by *l
312
312
  - **Crouch.** Lerp the capsule height (e.g., 1.8 → 1.0) and the Head Y (1.6 → 0.9) over ~0.15s. Halve `walk_speed` while crouched. Block standing if a short upward shapecast hits ceiling.
313
313
  - **Sprint FOV punch.** Tween `Camera.fov` from 75 → 82 over 0.2s when sprint starts, back when it ends. The single cheapest "feel of speed" effect available.
314
314
  - **Slide.** When sprint + crouch are pressed together with horizontal speed above a threshold, lock direction to current velocity, set a `slide_timer`, and skip the wish-direction step. Apply slide-specific friction. Restore on timer expiry, ceiling clearance, or speed-below-threshold.
315
- - **Wallrun, dash, double-jump.** Each is its own override state. Build a state machine (see `scripting-patterns/state-machine-patterns/SKILL.md`) and let each state run its own `_physics_process` branch with an early `move_and_slide()` return. Don't pile them as `if/elif` in a single function.
316
- - **Camera shake.** Add a `trauma` float on the camera, accumulate via `add_trauma(amount)`, decay each frame, apply a randomized rotation offset proportional to `trauma * trauma`. Subtract the previous frame's shake offset before applying the new one to prevent drift. See the post-processing/screen-shake skill.
315
+ - **Wallrun, dash, double-jump.** Each is its own override state. Build a state machine (see `gdscript-patterns`) and let each state run its own `_physics_process` branch with an early `move_and_slide()` return. Don't pile them as `if/elif` in a single function.
316
+ - **Camera shake.** Add a `trauma` float on the camera, accumulate via `add_trauma(amount)`, decay each frame, apply a randomized rotation offset proportional to `trauma * trauma`. Subtract the previous frame's shake offset before applying the new one to prevent drift. See `game-feel`.
317
317
 
318
318
  Each of these is a separate skill or a separate function, not a fork of this script.
319
319
 
@@ -349,9 +349,10 @@ Then patch `project.godot` with the InputMap actions (`input/move_forward = { ..
349
349
 
350
350
  This skill writes scene nodes, an InputMap, and a `.gd` script. Always ask before applying. Group writes per phase: "May I add the Player + Collision + Head + Camera, bind WASD/jump/sprint, and attach `player_controller.gd`?"
351
351
 
352
- If the user asks for a "third-person FPS", flag the contradiction: FPS = first-person. Either clarify, or hand off to the `tps-controller` skill when it ships.
352
+ If the user asks for a "third-person FPS", flag the contradiction: FPS = first-person. Either clarify, or hand off to `character-movement`, which has the third-person controller.
353
353
 
354
354
  ## See Also
355
355
 
356
- - `scripting-patterns/state-machine-patterns/SKILL.md` — once movement grows past this skeleton (slide, grapple, hover), refactor into a state machine instead of stuffing more branches into `_physics_process`.
357
- - `physics/character-body-tuning/SKILL.md` (when shipped) — slope handling, step-up, floor-snap.
356
+ - `gdscript-patterns` — once movement grows past this skeleton (slide, grapple, hover), refactor into a state machine instead of stuffing more branches into `_physics_process`.
357
+ - `character-movement` — 2D and third-person controllers.
358
+ - `game-feel` — camera shake and hit feedback.
@@ -20,8 +20,6 @@ related:
20
20
  skills:
21
21
  - skill/character-movement
22
22
  - skill/camera-rigs
23
- # Legacy frontmatter declared template-id: template-3d-fps (no such repo exists);
24
- # mapped to the real repo template-3d-fps-old-school.
25
23
  templates:
26
24
  - template/3d-fps-old-school
27
25
  source: official
@@ -9,7 +9,7 @@ allowed-tools: Read Grep Edit Write summer_write_file summer_read_file summer_ge
9
9
  paths: ["**/*.gd", "**/*.tscn", "**/*.tres"]
10
10
  ---
11
11
 
12
- # /vfx — The Trio That Makes Games Feel Punchy
12
+ # Game Feel — The Trio That Makes Hits Land
13
13
 
14
14
  Particles do not make a game feel good. Screen shake alone does not either.
15
15
  What makes a hit land is three systems firing on the same frame: a sub-frame
@@ -327,7 +327,7 @@ summer_connect_signal(scenePath="res://levels/world.tscn", emitter="./World/Enem
327
327
 
328
328
  ## Step 8 — Scaling intensity per hit weight
329
329
 
330
- The trio's whole magic is that the same code makes a glancing parry feel different from a critical hit. Calibrate the curve once:
330
+ The same code makes a glancing parry feel different from a critical hit. Calibrate the curve once:
331
331
 
332
332
  | Hit type | `damage` (HP) | trauma | duck amount |
333
333
  |---|---|---|---|
@@ -343,7 +343,7 @@ Because trauma is squared inside the camera, the *felt* difference between 0.35
343
343
 
344
344
  ```
345
345
  summer_save_scene(scenePath="res://levels/world.tscn")
346
- summer_get_script_errors # all three scripts parsed?
346
+ summer_get_script_errors(path="res://scripts/vfx/hit_flash.gd") # repeat for each of the three scripts
347
347
  summer_play
348
348
  # user reproduces a hit
349
349
  summer_get_debugger_errors # runtime errors from the tweens / bus lookups
@@ -391,7 +391,6 @@ This skill writes 3 GDScript files and adds 1 node + 1 autoload entry. Always as
391
391
  version-sensitive API notes
392
392
  - `../../references/collaborative-protocol/collaborative-protocol.md` — "May I write" pattern
393
393
  - `../../references/gd-style/gd-style.md` — typed GDScript conventions
394
- - `audio/audio-direction/SKILL.md` — bus layout setup (prerequisite for ducking)
395
- - `post-processing/screen-shake/SKILL.md` — deeper trauma variants (Perlin noise, stacked sources)
396
- - `visual-effects/gpuparticles-3d-basics/SKILL.md` — particles to layer on top of the trio
397
- - `visual-effects/hit-impact-flashes/SKILL.md` — flash material variations beyond white pulse
394
+ - `audio-direction` — bus layout setup (prerequisite for ducking)
395
+ - `vfx-hit-spark` — particles to layer on top of the trio
396
+ - `debugging-game-feel` — when the trio is installed and it still feels wrong
@@ -15,9 +15,9 @@ You are being invoked at the end (or middle) of a game-development session. Turn
15
15
 
16
16
  Summer resolves skills in this order: the game project, then the user's agent skills directory, then the skills bundled with the Summer package. Pick the narrowest home that fits:
17
17
 
18
- 1. **The game project** (default). Write `SKILL.md` into the project-scoped skills directory of the agent you are running in: `.claude/skills/<slug>/` for Claude Code, `.agents/skills/<slug>/` for Codex, `.cursor/rules/` for Cursor, `.windsurfrules` for Windsurf. `summer skills install --scope project` shows the exact path for the current agent. Commit it with the game.
18
+ 1. **The game project** (default). Write `SKILL.md` into the project-scoped skills directory of the agent you are running in: `.claude/skills/<slug>/` for Claude Code, `.agents/skills/<slug>/` for Codex, Cursor, Devin Desktop and the other agents that read the shared folder. `summer skills install --scope project` shows the exact path for the current agent. Commit it with the game.
19
19
  2. **The user's agent skills directory** when the lesson applies to every project on this machine (`~/.claude/skills/<slug>/`, `~/.agents/skills/<slug>/`). Do not edit skills that Summer installed there; they are overwritten on the next `summer setup`.
20
- 3. **The Summer library** when the lesson is general enough for every Summer user. Only possible inside a checkout of the summer-engine agent repository: add `library/skills/<slug>/resource.yaml` and `library/skills/<slug>/SKILL.md` (flat slugs, no category folders), then run `npm run generate:registry` and `npm run validate:library`. Everything under `registry/generated/` and every plugin manifest is generated from `library/`; never hand-edit them. Outside that checkout, send the lesson through `summer_library_feedback` (or `summer tool library-feedback`) with the id of the closest existing skill so the maintainers can fold it in.
20
+ 3. **The Summer library** when the lesson is general enough for every Summer user. Only possible inside a checkout of the `summerengine/summer` repository: add `library/skills/<slug>/resource.yaml` and `library/skills/<slug>/SKILL.md` (flat slugs, no category folders), then run `npm run generate:registry` and `npm run validate:library`. Everything under `registry/generated/` and every plugin manifest is generated from `library/`; never hand-edit them. Outside that checkout, send the lesson through `summer_library_feedback` (or `summer tool library-feedback`) with the id of the closest existing skill so the maintainers can fold it in.
21
21
 
22
22
  Read the current project as ground truth. Working code from the real project beats invented examples.
23
23
 
@@ -32,7 +32,7 @@ Read the current project as ground truth. Working code from the real project bea
32
32
  - A GDScript idiom that beat the obvious approach
33
33
  - A UI layout that survived the design pass
34
34
  - A bug, its root cause and the fix that was not in any docs
35
- - A Godot 4.x quirk (type inference, signal gotchas, plugin configuration)
35
+ - An engine quirk (type inference, signal gotchas, plugin configuration)
36
36
  - A spawning, AI or enemy pattern that worked
37
37
  - A performance fix with measured before and after
38
38
  - An asset workflow that beat the alternatives
@@ -11,7 +11,7 @@ paths: ["**/*.gd"]
11
11
 
12
12
  # GDScript Patterns for Summer Engine
13
13
 
14
- When writing GDScript for Summer Engine projects, follow these patterns. They align with Godot 4.x conventions and work well with MCP scene operations.
14
+ When writing GDScript for Summer Engine projects, follow these patterns. They match the engine's GDScript 4 conventions and work well with MCP scene operations.
15
15
 
16
16
  ## Type Hints
17
17
 
@@ -92,7 +92,7 @@ For health systems, input handling, and state machines, see [reference.md](refer
92
92
 
93
93
  ## Anti-patterns — introspection traps
94
94
 
95
- Godot's introspection API has Object-instance methods that look like they should work on script-class references. They don't. Calling them on a `const ScriptName = preload(...)` reference is a parse error, not a runtime no-op.
95
+ The engine's introspection API has Object-instance methods that look like they should work on script-class references. They don't. Calling them on a `const ScriptName = preload(...)` reference is a parse error, not a runtime no-op.
96
96
 
97
97
  | Wrong | Right | Why |
98
98
  |---|---|---|
@@ -106,7 +106,7 @@ Godot's introspection API has Object-instance methods that look like they should
106
106
 
107
107
  ## Anti-pattern — `@onready var = $Path` on nodes that don't exist on every variant
108
108
 
109
- Godot resolves `$Path` (the `get_node` shorthand) at `@implicit_ready` time. If the node is missing from the current scene, you get `Node not found: "X" (relative to "Y")` errors before any of your `_ready()` runtime guards can run.
109
+ The engine resolves `$Path` (the `get_node` shorthand) at `@implicit_ready` time. If the node is missing from the current scene, you get `Node not found: "X" (relative to "Y")` errors before any of your `_ready()` runtime guards can run.
110
110
 
111
111
  Common case: a script is shared by multiple scene variants where some variants have an optional child. Even if every code path that touches the variable has a `if inventory_ui:` guard, the `@onready` line itself errors at scene load.
112
112
 
@@ -11,7 +11,7 @@ paths: ["**/*.tscn", "**/*.tres", "**/*.gd"]
11
11
 
12
12
  # Generate Motion — Curated Meshy Library
13
13
 
14
- Picks a clip from a **curated mocap library** by name and wires it onto a Meshy-rigged humanoid. Fast (~30s) and cheap (~$0.10) and looks great because it's real mocap. The five short aliases that always work are `idle`, `walk`, `run`, `jump`, `attack`; anything else must be an exact library name — see the Reference card before you invent one.
14
+ Picks a clip from a **curated mocap library** by name and wires it onto a Meshy-rigged humanoid. Fast (~30s), and it looks good because it is real mocap. The five short aliases that always work are `idle`, `walk`, `run`, `jump`, `attack`; anything else must be an exact library name — see the Reference card before you invent one.
15
15
 
16
16
  The target must be a **Meshy-rigged humanoid** — a `rigAssetId` from a prior `summer_generate_3d({ kind: "image-to-3d", imageUrl: "...", options: { rig: true } })` call. The result job includes `rigAssetId`. If the user points at a non-rigged mesh, stop and route to `asset-strategy` (or directly call `summer_generate_3d` with `options.rig: true`) before generating motion.
17
17
 
@@ -20,22 +20,6 @@ The target must be a **Meshy-rigged humanoid** — a `rigAssetId` from a prior `
20
20
  > (`backend: "text-to-motion"`) when the server has it enabled; otherwise fall
21
21
  > back to hand-authoring in Summer Engine or importing from Mixamo.
22
22
 
23
- ## Web Chat / Public Orchestrator Equivalent
24
-
25
- In PublicSummerEngine chat, the equivalent direct tools are:
26
-
27
- ```
28
- rigModel({ modelAssetId })
29
- generateAnimation({ rigAssetId, animationName })
30
- meshyJobStatus({ jobId })
31
- ```
32
-
33
- If the character came from `createCharacter`, it may already be rigged and have `metadata.meshyRigTaskId`; generate animations directly against that rig asset. Verified animation names from the recovered production flow are `idle`, `walk`, `run`, `jump`, and `attack`. `fall` returned `invalid_animation`, so do not present it as a default.
34
-
35
- Before generating clips in PublicSummerEngine chat, confirm the rig asset listing/status exposes `hasMeshyRigTask` or `animationsReady:true`. If `generateAnimation` returns `animations_preparing`, wait, poll/list the rig again, and retry; this is the post-rig setup catching up, not a reason to send the user to Studio.
36
-
37
- After animation jobs complete, import the rig plus child animation assets together and wire them through `import-character`. Do not hand off to Studio unless the user asked for Studio/manual control or the direct chat tools fail.
38
-
39
23
  ## When to use this skill
40
24
 
41
25
  - "Add a walk animation to the goblin."
@@ -64,7 +48,7 @@ The result must include `rigAssetId: <id>` on a Meshy rig. If it shows `rigAsset
64
48
 
65
49
  ### 2. Confirm with the user before spending
66
50
 
67
- > I'm about to generate a "run" animation on `goblin_rigged` via meshy-library — about 30s, ~$0.10. OK?
51
+ > I'm about to generate a "run" animation on `goblin_rigged` via meshy-library — about 30s, and it uses credits. OK?
68
52
 
69
53
  ### 3. Call the tool
70
54
 
@@ -107,7 +91,7 @@ If the character will use multiple clips, leave the AnimationPlayer in place —
107
91
 
108
92
  ## Confirmation gates
109
93
 
110
- - **Before generation:** state the motion name and est. cost (~$0.10). Wait for OK.
94
+ - **Before generation:** state the motion name and that it uses credits. Wait for OK.
111
95
  - **Before attaching:** state which AnimationPlayer and which library slot. Wait for OK.
112
96
  - **After generation:** if the user hasn't seen the preview, link `previewUrl` and ask "land or regenerate?" before wiring it into the scene.
113
97
 
@@ -129,9 +113,8 @@ nothing like a tidy snake_case scheme — real names look like `Walking_Woman`,
129
113
  Plausible-looking names that do **not** resolve, verified against the resolver:
130
114
  `attack_sword`, `hit_react`, `death`, `sprint`, `block`, `dodge_left`,
131
115
  `crouch_idle`, `walk_back`, `run_strafe_left`, `jump_land`, `idle_combat`,
132
- `wave`, `dance`, `sit_idle`. They return `null` and the call errors. The tool's
133
- own description uses `attack_sword` as an example — that example is wrong; use
134
- `attack`.
116
+ `wave`, `dance`, `sit_idle`. They return `null` and the call errors. For a sword
117
+ attack, use `attack`.
135
118
 
136
119
  So: if the user asks for something outside the five aliases, do not guess a
137
120
  snake_case name. Either use one of the five, quote an exact raw library name you