summer-engine 3.3.0 → 3.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (293) hide show
  1. package/.claude-plugin/marketplace.json +2 -2
  2. package/.claude-plugin/plugin.json +4 -2
  3. package/.codex-plugin/plugin.json +5 -3
  4. package/.cursor-plugin/plugin.json +4 -2
  5. package/.factory-plugin/plugin.json +4 -2
  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 +50 -0
  10. package/GEMINI.md +1 -1
  11. package/NOTICE +1 -1
  12. package/README.md +32 -35
  13. package/assets/api-docs.json.gz +0 -0
  14. package/assets/autopilot/run.sh +2 -2
  15. package/assets/navigation/web-routes.json +1 -1
  16. package/commands/gameskill.md +2 -2
  17. package/commands/summer.md +25 -25
  18. package/dist/cli/commands/install.d.ts +10 -0
  19. package/dist/cli/commands/install.js +55 -10
  20. package/dist/cli/commands/open.d.ts +1 -1
  21. package/dist/cli/commands/run.d.ts +1 -1
  22. package/dist/cli/commands/run.js +1 -1
  23. package/dist/cli/commands/skills.js +2 -2
  24. package/dist/cli/commands/tool.d.ts +7 -0
  25. package/dist/cli/commands/tool.js +36 -1
  26. package/dist/core/api-client.d.ts +5 -6
  27. package/dist/core/api-client.js +12 -15
  28. package/dist/core/auth.js +2 -2
  29. package/dist/core/capabilities/asset-import.d.ts +0 -1
  30. package/dist/core/capabilities/camera-view.d.ts +1 -1
  31. package/dist/core/capabilities/camera-view.js +2 -2
  32. package/dist/core/capabilities/capture-gameplay.d.ts +69 -0
  33. package/dist/core/capabilities/capture-gameplay.js +283 -0
  34. package/dist/core/capabilities/connect-signal.d.ts +1 -2
  35. package/dist/core/capabilities/connect-signal.js +1 -2
  36. package/dist/core/capabilities/console-read.d.ts +2 -2
  37. package/dist/core/capabilities/console-read.js +2 -2
  38. package/dist/core/capabilities/creator.js +1 -1
  39. package/dist/core/capabilities/doctor.d.ts +9 -1
  40. package/dist/core/capabilities/doctor.js +47 -4
  41. package/dist/core/capabilities/engine-receipt.d.ts +5 -7
  42. package/dist/core/capabilities/engine-receipt.js +7 -9
  43. package/dist/core/capabilities/engine-run.d.ts +4 -0
  44. package/dist/core/capabilities/engine-run.js +33 -5
  45. package/dist/core/capabilities/export-engine-version.d.ts +15 -0
  46. package/dist/core/capabilities/export-engine-version.js +24 -0
  47. package/dist/core/capabilities/export-game.d.ts +9 -1
  48. package/dist/core/capabilities/export-game.js +115 -39
  49. package/dist/core/capabilities/export-presets.d.ts +1 -1
  50. package/dist/core/capabilities/export-presets.js +1 -1
  51. package/dist/core/capabilities/fabricate-mesh.d.ts +2 -3
  52. package/dist/core/capabilities/fabricate-mesh.js +2 -3
  53. package/dist/core/capabilities/frame-quality.d.ts +4 -4
  54. package/dist/core/capabilities/frame-quality.js +4 -4
  55. package/dist/core/capabilities/grep.d.ts +1 -1
  56. package/dist/core/capabilities/grep.js +1 -1
  57. package/dist/core/capabilities/image-generation.d.ts +9 -0
  58. package/dist/core/capabilities/image-generation.js +19 -1
  59. package/dist/core/capabilities/navigation/open.d.ts +1 -1
  60. package/dist/core/capabilities/navigation/open.js +1 -1
  61. package/dist/core/capabilities/navigation/render-product-map.js +1 -1
  62. package/dist/core/capabilities/navigation/targets.js +2 -2
  63. package/dist/core/capabilities/placement-batch.d.ts +1 -1
  64. package/dist/core/capabilities/placement-batch.js +2 -2
  65. package/dist/core/capabilities/play-determinism.d.ts +1 -1
  66. package/dist/core/capabilities/play-determinism.js +1 -1
  67. package/dist/core/capabilities/publish-build.d.ts +15 -2
  68. package/dist/core/capabilities/publish-build.js +78 -28
  69. package/dist/core/capabilities/publish-download.d.ts +1 -2
  70. package/dist/core/capabilities/publish-download.js +2 -3
  71. package/dist/core/capabilities/replace-node.d.ts +1 -3
  72. package/dist/core/capabilities/replace-node.js +1 -3
  73. package/dist/core/capabilities/runtime-control.d.ts +5 -7
  74. package/dist/core/capabilities/runtime-control.js +7 -9
  75. package/dist/core/capabilities/scene-batch.d.ts +1 -1
  76. package/dist/core/capabilities/scene-batch.js +1 -1
  77. package/dist/core/capabilities/scene-kind.js +1 -1
  78. package/dist/core/capabilities/scene-readback.d.ts +3 -4
  79. package/dist/core/capabilities/scene-readback.js +3 -4
  80. package/dist/core/capabilities/scene-script.d.ts +2 -2
  81. package/dist/core/capabilities/scene-script.js +2 -2
  82. package/dist/core/capabilities/seeing/shot-store.d.ts +1 -1
  83. package/dist/core/capabilities/seeing/shot-store.js +1 -1
  84. package/dist/core/capabilities/summer-bundle.d.ts +2 -3
  85. package/dist/core/capabilities/summer-bundle.js +2 -3
  86. package/dist/core/capabilities/surface-snap.d.ts +1 -1
  87. package/dist/core/capabilities/surface-snap.js +1 -1
  88. package/dist/core/capabilities/tool-dispatch.js +11 -1
  89. package/dist/core/capabilities/ui-control.d.ts +1 -2
  90. package/dist/core/capabilities/ui-control.js +1 -2
  91. package/dist/core/capabilities/world-snapshot.d.ts +1 -1
  92. package/dist/core/capabilities/world-snapshot.js +1 -1
  93. package/dist/core/capability-skew.d.ts +2 -3
  94. package/dist/core/capability-skew.js +4 -5
  95. package/dist/core/config.js +2 -2
  96. package/dist/core/engine-install.d.ts +16 -0
  97. package/dist/core/engine-install.js +32 -2
  98. package/dist/core/feedback/client.js +1 -1
  99. package/dist/core/hosted-mcp.d.ts +115 -0
  100. package/dist/core/hosted-mcp.js +164 -0
  101. package/dist/core/launch-posture.d.ts +6 -3
  102. package/dist/core/launch-posture.js +18 -5
  103. package/dist/core/library-read.js +1 -2
  104. package/dist/core/templates.d.ts +1 -2
  105. package/dist/core/templates.js +1 -2
  106. package/dist/mcp/hosted-mount.d.ts +13 -59
  107. package/dist/mcp/hosted-mount.js +24 -30
  108. package/dist/mcp/server.d.ts +2 -2
  109. package/dist/mcp/server.js +5 -4
  110. package/dist/mcp/tools/creator-tools.js +14 -4
  111. package/dist/mcp/tools/debug-tools.js +1 -1
  112. package/dist/mcp/tools/generate-tools.js +19 -9
  113. package/dist/mcp/tools/navigation-tools.d.ts +1 -1
  114. package/dist/mcp/tools/navigation-tools.js +1 -1
  115. package/dist/mcp/tools/spatial-tools.js +1 -1
  116. package/dist/mcp/tools/visual-tools.js +2 -2
  117. package/dist/mcp/tools/with-engine.d.ts +1 -2
  118. package/dist/mcp/tools/with-engine.js +1 -2
  119. package/gemini-extension.json +3 -1
  120. package/hooks/session-start.sh +2 -2
  121. package/integrations/README.md +70 -76
  122. package/integrations/claude/README.md +0 -3
  123. package/integrations/codex/README.md +1 -2
  124. package/integrations/copilot-jetbrains/README.md +1 -1
  125. package/integrations/cursor/README.md +1 -2
  126. package/integrations/factory/README.md +15 -11
  127. package/integrations/mistral-vibe/README.md +1 -1
  128. package/integrations/opencode/README.md +1 -1
  129. package/integrations/roo-code/README.md +1 -1
  130. package/integrations/rovo-dev/README.md +1 -1
  131. package/integrations/trae/README.md +1 -1
  132. package/integrations/windsurf/README.md +3 -3
  133. package/library/references/collaborative-protocol/collaborative-protocol.md +5 -5
  134. package/library/references/gd-style/gd-style.md +4 -6
  135. package/library/references/godot-version/godot-version.md +3 -3
  136. package/library/references/headless-routing/headless-routing.md +2 -2
  137. package/library/references/mcp-fresh-chat-playbook/mcp-fresh-chat-playbook.md +2 -2
  138. package/library/references/mcp-tools-reference/mcp-tools-reference.md +18 -16
  139. package/library/references/product-map/product-map.md +1 -1
  140. package/library/references/public-surface-language/public-surface-language.md +1 -1
  141. package/library/references/summer-folder/summer-folder.md +1 -1
  142. package/library/skills/3d-lighting/SKILL.md +4 -4
  143. package/library/skills/README.md +11 -9
  144. package/library/skills/adaptive-music/SKILL.md +7 -7
  145. package/library/skills/ai-characters-in-games/SKILL.md +1 -1
  146. package/library/skills/ambient-bed/SKILL.md +12 -14
  147. package/library/skills/animated-loop/SKILL.md +42 -42
  148. package/library/skills/animation-tree/SKILL.md +6 -6
  149. package/library/skills/art-direction/SKILL.md +8 -11
  150. package/library/skills/asset-strategy/SKILL.md +3 -3
  151. package/library/skills/audio-direction/SKILL.md +8 -10
  152. package/library/skills/auto-fire-targeting/SKILL.md +4 -3
  153. package/library/skills/bounded-engine-runs/SKILL.md +95 -0
  154. package/library/skills/bounded-engine-runs/resource.yaml +29 -0
  155. package/library/skills/brainstorm-game/SKILL.md +5 -5
  156. package/library/skills/brainstorming/SKILL.md +9 -15
  157. package/library/skills/celeste-momentum-platforming/SKILL.md +8 -13
  158. package/library/skills/celeste-momentum-platforming/resource.yaml +1 -1
  159. package/library/skills/character-animation-wiring/SKILL.md +2 -2
  160. package/library/skills/character-model/SKILL.md +15 -26
  161. package/library/skills/character-movement/SKILL.md +1 -1
  162. package/library/skills/character-movement/references/movement-3d.md +1 -1
  163. package/library/skills/character-portrait/SKILL.md +4 -4
  164. package/library/skills/cinematic-cutscene/SKILL.md +38 -38
  165. package/library/skills/combat-basics/SKILL.md +1 -1
  166. package/library/skills/compatibility-renderer-traps/SKILL.md +78 -0
  167. package/library/skills/compatibility-renderer-traps/resource.yaml +28 -0
  168. package/library/skills/concept-art/SKILL.md +4 -4
  169. package/library/skills/create-asset-sheet/SKILL.md +12 -31
  170. package/library/skills/debug/SKILL.md +5 -4
  171. package/library/skills/debugging-game-feel/SKILL.md +1 -4
  172. package/library/skills/debugging-game-feel/resource.yaml +1 -1
  173. package/library/skills/design-level/SKILL.md +5 -5
  174. package/library/skills/design-mechanic/SKILL.md +6 -6
  175. package/library/skills/design-npc/SKILL.md +8 -15
  176. package/library/skills/diagnosing-perf-regressions/SKILL.md +5 -10
  177. package/library/skills/dispatching-parallel-agents/SKILL.md +1 -19
  178. package/library/skills/environment-kit/SKILL.md +5 -5
  179. package/library/skills/export-and-ship/SKILL.md +25 -24
  180. package/library/skills/fabricating-assets/SKILL.md +1 -1
  181. package/library/skills/facial-and-lipsync/SKILL.md +5 -5
  182. package/library/skills/fps-controller/SKILL.md +17 -16
  183. package/library/skills/fps-controller/resource.yaml +0 -2
  184. package/library/skills/game-feel/SKILL.md +6 -7
  185. package/library/skills/gameskill/SKILL.md +3 -3
  186. package/library/skills/gdscript-patterns/SKILL.md +3 -3
  187. package/library/skills/generate-motion/SKILL.md +5 -22
  188. package/library/skills/godogen-visual-proof-game-generation/SKILL.md +72 -90
  189. package/library/skills/godogen-visual-proof-game-generation/resource.yaml +0 -1
  190. package/library/skills/headless-scripting/SKILL.md +8 -8
  191. package/library/skills/headless-scripting/resource.yaml +1 -0
  192. package/library/skills/in-game-purchases/SKILL.md +123 -118
  193. package/library/skills/in-game-purchases/resource.yaml +2 -2
  194. package/library/skills/instantiate-asset-pack/SKILL.md +7 -3
  195. package/library/skills/investigating-bugs/SKILL.md +3 -11
  196. package/library/skills/investigating-bugs/condition-based-waiting.md +0 -10
  197. package/library/skills/investigating-bugs/root-cause-tracing.md +0 -8
  198. package/library/skills/lumera-single-image-scene-reconstruction/SKILL.md +15 -15
  199. package/library/skills/lumera-single-image-scene-reconstruction/resource.yaml +0 -1
  200. package/library/skills/make-game/SKILL.md +3 -5
  201. package/library/skills/make-game/references/2d-platformer.md +1 -1
  202. package/library/skills/multiplayer-project/SKILL.md +1 -1
  203. package/library/skills/multiplayer-testing/SKILL.md +4 -4
  204. package/library/skills/music-track/SKILL.md +40 -38
  205. package/library/skills/new-project/SKILL.md +4 -6
  206. package/library/skills/organic-model/SKILL.md +9 -9
  207. package/library/skills/pixel-art/SKILL.md +6 -6
  208. package/library/skills/play/SKILL.md +3 -4
  209. package/library/skills/playtesting-a-feature/SKILL.md +4 -6
  210. package/library/skills/procedural-animation/SKILL.md +10 -11
  211. package/library/skills/prop-model/SKILL.md +4 -4
  212. package/library/skills/psx-retro-rendering/SKILL.md +20 -20
  213. package/library/skills/psx-retro-rendering/resource.yaml +2 -3
  214. package/library/skills/realtime-wet-surfaces/SKILL.md +15 -15
  215. package/library/skills/realtime-wet-surfaces/resource.yaml +1 -2
  216. package/library/skills/remote-deploy/SKILL.md +20 -21
  217. package/library/skills/retarget/SKILL.md +19 -23
  218. package/library/skills/running-in-the-cloud/SKILL.md +5 -5
  219. package/library/skills/scene-composition/SKILL.md +5 -5
  220. package/library/skills/scene-hierarchy-design/SKILL.md +3 -3
  221. package/library/skills/scene-hierarchy-design/resource.yaml +0 -1
  222. package/library/skills/scene-scripting/SKILL.md +3 -3
  223. package/library/skills/scene-to-level/SKILL.md +28 -31
  224. package/library/skills/skill-create/SKILL.md +1 -1
  225. package/library/skills/skill-improve/SKILL.md +9 -9
  226. package/library/skills/skill-test/SKILL.md +10 -10
  227. package/library/skills/skintokens-auto-rigging/SKILL.md +18 -18
  228. package/library/skills/skintokens-auto-rigging/resource.yaml +3 -3
  229. package/library/skills/skybox-panorama/SKILL.md +8 -9
  230. package/library/skills/sound-effect/SKILL.md +19 -19
  231. package/library/skills/spatial-placement/SKILL.md +2 -2
  232. package/library/skills/spatial-placement/references/kit-placement-tools.md +12 -22
  233. package/library/skills/sprite-sheet/SKILL.md +10 -10
  234. package/library/skills/summer-analytics/SKILL.md +3 -3
  235. package/library/skills/summer-friends/SKILL.md +10 -10
  236. package/library/skills/summer-leaderboards/SKILL.md +6 -6
  237. package/library/skills/summer-match-results/SKILL.md +13 -13
  238. package/library/skills/summer-matchmaking/SKILL.md +11 -11
  239. package/library/skills/summer-parties/SKILL.md +9 -9
  240. package/library/skills/summer-player-data/SKILL.md +12 -12
  241. package/library/skills/summer-store/SKILL.md +6 -6
  242. package/library/skills/summer-world-chat/SKILL.md +9 -9
  243. package/library/skills/summer-world-saves/SKILL.md +7 -7
  244. package/library/skills/text-to-motion/rigging-for-text-motion.md +1 -1
  245. package/library/skills/tileable-texture/SKILL.md +1 -1
  246. package/library/skills/trailer-shot/SKILL.md +36 -36
  247. package/library/skills/tune-performance/SKILL.md +13 -13
  248. package/library/skills/tune-performance/resource.yaml +1 -1
  249. package/library/skills/ui-graphics/SKILL.md +7 -7
  250. package/library/skills/use-widget-asset/SKILL.md +7 -7
  251. package/library/skills/using-summer/SKILL.md +5 -7
  252. package/library/skills/vehicle-model/SKILL.md +6 -7
  253. package/library/skills/vehicle-model/resource.yaml +2 -2
  254. package/library/skills/verification-before-completion/SKILL.md +5 -6
  255. package/library/skills/vfx-dissolve/SKILL.md +4 -4
  256. package/library/skills/vfx-fire/SKILL.md +6 -6
  257. package/library/skills/vfx-fire/_building-blocks/additive-billboard-particles.md +3 -3
  258. package/library/skills/vfx-hit-spark/SKILL.md +4 -4
  259. package/library/skills/vfx-hit-spark/_building-blocks/additive-billboard-particles.md +3 -3
  260. package/library/skills/vfx-lightning/SKILL.md +5 -5
  261. package/library/skills/vfx-lightning/_building-blocks/additive-billboard-particles.md +3 -3
  262. package/library/skills/vfx-lightning/_building-blocks/trauma-shake-snippet.md +9 -3
  263. package/library/skills/vfx-magic-glow/SKILL.md +4 -4
  264. package/library/skills/vfx-magic-glow/_building-blocks/additive-billboard-particles.md +3 -3
  265. package/library/skills/vfx-muzzle-flash/SKILL.md +5 -5
  266. package/library/skills/vfx-muzzle-flash/_building-blocks/additive-billboard-particles.md +3 -3
  267. package/library/skills/vfx-muzzle-flash/_building-blocks/trauma-shake-snippet.md +9 -3
  268. package/library/skills/vfx-smoke/SKILL.md +5 -5
  269. package/library/skills/vfx-water-ripple/SKILL.md +2 -2
  270. package/library/skills/vfx-water-ripple/_building-blocks/additive-billboard-particles.md +3 -3
  271. package/library/skills/voice-line/SKILL.md +9 -9
  272. package/library/skills/web-compatibility-look/resource.yaml +1 -0
  273. package/library/skills/world-building-3d/references/spatial-tools.md +2 -2
  274. package/library/skills/writing-plans/SKILL.md +4 -4
  275. package/library/skills/writing-skills/SKILL.md +8 -8
  276. package/library/tools/capture-gameplay/resource.yaml +73 -0
  277. package/library/tools/creator-publish/resource.yaml +4 -4
  278. package/library/tools/creator-releases/resource.yaml +5 -5
  279. package/library/tools/generate-image/resource.yaml +15 -1
  280. package/library/tools/publish-build/resource.yaml +6 -2
  281. package/package.json +1 -1
  282. package/registry/generated/aliases.json +1 -0
  283. package/registry/generated/counts.json +3 -3
  284. package/registry/generated/gemini-extension.json +3 -1
  285. package/registry/generated/index.json +248 -135
  286. package/registry/generated/marketplace.claude.json +2 -2
  287. package/registry/generated/plugin.claude.json +4 -2
  288. package/registry/generated/plugin.codex.json +5 -3
  289. package/registry/generated/plugin.cursor.json +4 -2
  290. package/registry/generated/plugin.factory.json +4 -2
  291. package/registry/generated/skills-index.md +11 -9
  292. package/registry/generated/skills-registry.json +33 -6
  293. package/registry/schemas/domains.json +1 -1
@@ -11,7 +11,7 @@ paths: ["assets/models/**", "**/*.tscn", "**/*.gd"]
11
11
 
12
12
  # Prop Model — Generate One Static 3D Prop and Wire It
13
13
 
14
- One prop, one mesh, one MeshInstance3D. This is the bread-and-butter call of the 3D-asset family — most game-world objects are static props. The skill exists to keep two things tight: the **prompt shape** that produces a clean isolated mesh on the first try, and the **wire-in pattern** that gets the asset into the scene without leaving orphans in `res://assets/models/`.
14
+ One prop, one mesh, one MeshInstance3D. Most game-world objects are static props, so this is the most common 3D-asset call. The skill keeps two things tight: the **prompt shape** that produces a clean isolated mesh on the first try, and the **wire-in pattern** that gets the asset into the scene without leaving orphans in `res://assets/models/`.
15
15
 
16
16
  The backing tool is `summer_generate_3d`. Default model is `hunyuan` (Hunyuan 3D v3.1 Pro — best quality). Use `trellis` when speed matters (Trellis 2 is ~2× faster, slightly lower fidelity). `meshy` is the legacy fallback — only pick it if the user asks by name.
17
17
 
@@ -72,7 +72,7 @@ The `isolated object` and `white background` clauses are load-bearing — withou
72
72
 
73
73
  ### 4. Confirm and call
74
74
 
75
- > About to generate `viking_axe` via `hunyuan`, target ~5k tris. ~$0.50, ~60s. OK?
75
+ > About to generate `viking_axe` via `hunyuan`, target ~5k tris, ~60s. This uses credits. OK?
76
76
 
77
77
  ```
78
78
  summer_generate_3d(
@@ -127,8 +127,8 @@ the parent-shape pattern.
127
127
 
128
128
  The user can run the same prompt in the Summer dashboard or a supported
129
129
  provider UI, download the `.glb`, and drop it into `res://assets/models/`.
130
- Summer Engine's Import dock will pick it up. Then add a MeshInstance3D and
131
- assign the mesh.
130
+ Summer Engine's Import dock will pick it up. Then instance the `.glb` scene in
131
+ the level (an imported `.glb` is a scene, not a `Mesh`).
132
132
 
133
133
  ## Handoff
134
134
 
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: psx-retro-rendering
3
- description: "Hardware-informed PlayStation 1 rendering in Godot 4 — low-res output, RGB5 and exact dither, affine textures, vertex snapping, blend modes, fog; limits named."
3
+ description: "PlayStation 1 rendering in Summer Engine — low-res output, RGB5 and exact dither, affine textures, vertex snapping, blend modes, fog; limits named."
4
4
  license: MIT
5
5
  category: shaders
6
6
  tags:
@@ -13,19 +13,19 @@ confidence: extracted
13
13
  adaptation: translated
14
14
  ---
15
15
 
16
- # PSX Retro Rendering in Godot 4
16
+ # PSX Retro Rendering in Summer Engine
17
17
 
18
18
  ## Outcome
19
19
 
20
20
  Recreate the visible behavior of the original PlayStation rendering pipeline while keeping three things distinct:
21
21
 
22
22
  1. behavior the PS1 actually had;
23
- 2. the Godot technique used to imitate it;
23
+ 2. the engine technique used to imitate it;
24
24
  3. places where the imitation cannot reproduce the hardware exactly.
25
25
 
26
26
  The characteristic result comes from several interacting constraints, not from a single fullscreen filter: a low-resolution framebuffer, 5-bit color, conditional polygon dithering, unfiltered affine textures, integer screen-coordinate vertices, CPU-style polygon ordering, vertex colors and lighting, fixed semi-transparency equations, and depth-cued fog.
27
27
 
28
- The article author's MIT-licensed Godot 4 addon is useful implementation evidence:
28
+ The article author's MIT-licensed addon is useful implementation evidence:
29
29
 
30
30
  - `https://github.com/wyvernbw/godot-psxlike`
31
31
  - Treat it as a reference implementation, not as proof that every approximation is hardware-exact, compatible with the current Summer Engine build, or suitable for every scene.
@@ -40,7 +40,7 @@ Do not activate this skill for an ordinary low-resolution or pixel-art presentat
40
40
 
41
41
  ## Authenticity Boundary
42
42
 
43
- | Visible behavior | Original hardware mechanism | Practical Godot implementation | Accuracy boundary |
43
+ | Visible behavior | Original hardware mechanism | Practical engine implementation | Accuracy boundary |
44
44
  |---|---|---|---|
45
45
  | Low resolution | 1 MB VRAM shared by framebuffers and textures | Render the root viewport at a PSX-era base size | Does not reproduce the VRAM budget |
46
46
  | RGB5 color | GPU draws RGB555 plus one mask bit | Quantize fragment color to 31 levels per channel | Mask-bit write protection is normally omitted |
@@ -48,7 +48,7 @@ Do not activate this skill for an ordinary low-resolution or pixel-art presentat
48
48
  | Texture warping | UVs are interpolated affinely | Cancel the GPU's perspective correction with clip `w` | Subdivision strongly changes the result |
49
49
  | Vertex wobble | Integer screen coordinates and no subpixel rasterization | Quantize clip/NDC coordinates against the viewport | Do not use an arbitrary object-space grid |
50
50
  | Polygon overlap | No hardware Z-buffer; the CPU submits depth-sorted primitives | Flat `DEPTH`, mesh subdivision, and an optional depth bias | Flat depth is only a proxy for draw ordering |
51
- | Lighting | CPU/GTE-derived colors, Gouraud interpolation | Calculate light at vertices and carry it through `COLOR` | Godot's ordinary per-pixel light pass is different |
51
+ | Lighting | CPU/GTE-derived colors, Gouraud interpolation | Calculate light at vertices and carry it through `COLOR` | The engine's ordinary per-pixel light pass is different |
52
52
  | Semi-transparency | Four fixed framebuffer blend equations | Sample the screen texture in a transparent material | Transparent objects cannot reliably blend with each other |
53
53
  | Fog | GTE depth cue and color operations | Quantized per-vertex factor plus modulation or a fragment blend | Authentic Silent Hill fog is a two-pass technique |
54
54
 
@@ -56,9 +56,9 @@ The PS1 GPU is fundamentally a 2D ordered polygon rasterizer. Avoid saying that
56
56
 
57
57
  ## Summer Engine Integration
58
58
 
59
- At the pinned Summer Engine revision, `ShaderMaterial` supports shared shaders, material uniforms, and per-instance uniforms through `GeometryInstance3D.set_instance_shader_parameter()`. Prefer per-instance uniforms over duplicating materials when changing mesh-local PSX settings. See `SummerEngine/SummerEngine@a8e5ca520efa927bde6131c9fb36557f19c1bb18:doc/classes/ShaderMaterial.xml`.
59
+ `ShaderMaterial` supports shared shaders, material uniforms, and per-instance uniforms through `GeometryInstance3D.set_instance_shader_parameter()`. Prefer per-instance uniforms over duplicating materials when changing mesh-local PSX settings.
60
60
 
61
- In Summer's material workflow, attach a `.tres` material override to the `MeshInstance3D`, not its parent `Node3D`, and save the scene after assignment. A custom PSX pipeline is an appropriate `ShaderMaterial` use because `StandardMaterial3D` cannot express affine interpolation, screen-coordinate snapping, or fixed framebuffer blend equations. See `SummerEngine/PublicSummerEngine@63f6e5cf71d0ddd5df9092cbbe82fee9b9ecf6c0:skills/look/materials-and-vfx/SKILL.md`.
61
+ In Summer's material workflow, attach a `.tres` material override to the `MeshInstance3D`, not its parent `Node3D`, and save the scene after assignment. A custom PSX pipeline is an appropriate `ShaderMaterial` use because `StandardMaterial3D` cannot express affine interpolation, screen-coordinate snapping, or fixed framebuffer blend equations.
62
62
 
63
63
  Use this project shape:
64
64
 
@@ -84,7 +84,7 @@ Assign the spatial shader material to meshes. A `WorldEnvironment` or camera env
84
84
 
85
85
  Shared materials, texture arrays, instance uniforms, and Forward+ can improve batching opportunities. They do not guarantee that arbitrary meshes render in one draw call. Transparent and opaque rendering already require separate materials.
86
86
 
87
- Compatibility-sensitive names and shader behavior must be checked against the installed Summer Engine build. The pinned references document the integration surface used for this translation; they are not a permanent API guarantee.
87
+ Check compatibility-sensitive names and shader behavior against the installed Summer Engine build.
88
88
 
89
89
  ## Agent Procedure
90
90
 
@@ -109,7 +109,7 @@ Disable MSAA, TAA, FXAA, texture filtering, and modern post-effects on the PSX p
109
109
 
110
110
  ### 2. Keep the Color Pipeline Explicit
111
111
 
112
- RGB5 quantization and the PS1 dither operate on display-encoded RGB values, not on linear-light values. Godot's Forward+ color conversions can otherwise change the palette and dither response.
112
+ RGB5 quantization and the PS1 dither operate on display-encoded RGB values, not on linear-light values. The Forward+ color conversions can otherwise change the palette and dither response.
113
113
 
114
114
  Choose one coherent texture path:
115
115
 
@@ -159,7 +159,7 @@ vec3 psx_dither(vec3 color, vec2 fragcoord, bool eligible) {
159
159
  }
160
160
  ```
161
161
 
162
- On hardware, dithering was selectable per polygon and was available only to Gouraud-shaded or texture-modulated polygons. In a normal Godot mesh shader, a per-mesh instance uniform is a practical compromise:
162
+ On hardware, dithering was selectable per polygon and was available only to Gouraud-shaded or texture-modulated polygons. In a normal mesh shader, a per-mesh instance uniform is a practical compromise:
163
163
 
164
164
  ```glsl
165
165
  bool dither_eligible = shading == SHADING_GOURAUD || use_modulation;
@@ -200,7 +200,7 @@ if (texturing == TEX_TEXTURED && all(equal(color, vec3(0.0)))) {
200
200
 
201
201
  PS1 polygons can be flat- or Gouraud-shaded, textured or untextured, and raw-textured or texture-modulated. Preserve those as explicit modes.
202
202
 
203
- True per-triangle flat colors are awkward in an ordinary Godot mesh shader. Practical choices are:
203
+ True per-triangle flat colors are awkward in an ordinary mesh shader. Practical choices are:
204
204
 
205
205
  - use one `flat_color` instance uniform for a whole mesh;
206
206
  - duplicate triangle vertices and bake the same color into all three;
@@ -258,7 +258,7 @@ Use the snapped value for `POSITION` and for the clip position carried to the fr
258
258
 
259
259
  ### 8. Treat Flat Depth as an Approximation
260
260
 
261
- The original GPU drew polygons in submission order. A Godot shader cannot reproduce the CPU ordering table, so the reference shader uses a non-interpolated depth value:
261
+ The original GPU drew polygons in submission order. A spatial shader cannot reproduce the CPU ordering table, so the reference shader uses a non-interpolated depth value:
262
262
 
263
263
  ```glsl
264
264
  varying flat float polygon_depth;
@@ -287,7 +287,7 @@ If exact ordering is a requirement, sort and submit appropriately partitioned ge
287
287
 
288
288
  On original hardware, the CPU/GTE calculates vertex colors. Normals are not interpolated and lit per fragment. The GTE provides a basic three-light directional model; games can also implement their own point-light logic.
289
289
 
290
- Godot's normal `light()` path is per fragment. Enabling Godot vertex lighting gets closer geometrically, but lighting can be applied after the custom fragment pipeline, which leaves gradients too smooth and bypasses the intended RGB5/dither response.
290
+ The normal `light()` path is per fragment. Enabling vertex lighting gets closer geometrically, but lighting can be applied after the custom fragment pipeline, which leaves gradients too smooth and bypasses the intended RGB5/dither response.
291
291
 
292
292
  For a consistent result:
293
293
 
@@ -314,7 +314,7 @@ For existing framebuffer color `B` and incoming fragment color `F`, support:
314
314
  | Subtract | `B - F` |
315
315
  | Quarter add | `B + 0.25 * F` |
316
316
 
317
- These are fixed blend modes, not ordinary source-alpha blending. In Godot, screen-texture access moves the material into the transparent pass. Keep common pipeline code in a `.gdshaderinc` file and provide separate opaque and transparent shaders.
317
+ These are fixed blend modes, not ordinary source-alpha blending. Screen-texture access moves the material into the transparent pass. Keep common pipeline code in a `.gdshaderinc` file and provide separate opaque and transparent shaders.
318
318
 
319
319
  Apply the selected blend before the final dither, RGB5 quantization, and linear conversion:
320
320
 
@@ -361,8 +361,8 @@ Preserve these relationships even if the implementation is reorganized:
361
361
  - Affine UV compensation multiplies at the vertex and divides after interpolation.
362
362
  - Vertex lighting and modulation happen before fragment dithering and quantization.
363
363
  - Dithering uses fragment coordinates and precedes RGB5 quantization.
364
- - RGB5 and dithering operate in sRGB; the final `ALBEDO` is converted to linear for Godot.
365
- - Flat depth is explicitly labeled as a Godot approximation of ordered drawing.
364
+ - RGB5 and dithering operate in sRGB; the final `ALBEDO` is converted to linear.
365
+ - Flat depth is explicitly labeled as an approximation of ordered drawing.
366
366
  - Opaque and transparent materials share code but remain separate render paths.
367
367
  - Silent Hill-style single-pass fog is labeled as an approximation if geometry is not actually rendered twice.
368
368
 
@@ -390,7 +390,7 @@ Preserve these relationships even if the implementation is reorganized:
390
390
  - **Textures explode on large surfaces:** subdivide geometry or reduce grazing camera angles; affine mapping is working but uncontrolled.
391
391
  - **A floor covers nearby meshes:** this is a flat-depth proxy failure; subdivide first, then apply a small depth modifier.
392
392
  - **Transparent objects do not blend with each other:** this is the screen-texture/transparent-pass limitation.
393
- - **Lighting gradients look modern and smooth:** Godot's per-fragment lighting is bypassing the custom vertex-color pipeline.
393
+ - **Lighting gradients look modern and smooth:** the engine's per-fragment lighting is bypassing the custom vertex-color pipeline.
394
394
  - **Colored modulation fog looks too bright:** modulation is not a conventional color lerp; choose black or use the labeled Silent Hill-style approximation.
395
395
  - **Flat fog is excessively patterned:** use an RGB5-representable fog color, dither before quantizing, and quantize with `round()`.
396
396
  - **Batching is worse than expected:** different meshes, materials, transparency paths, shader variants, or instance state can split batches; shared materials do not guarantee one draw call.
@@ -406,11 +406,11 @@ Verify the running client, not only shader compilation:
406
406
  5. Rotate a large textured quad to expose affine warping, then subdivide it and confirm the distortion decreases.
407
407
  6. Overlap intersecting triangles and verify the chosen flat-depth approximation and depth modifiers are understood.
408
408
  7. Test raw texture mode, half-gray neutral modulation, and the pure-black transparency rule independently.
409
- 8. Compare a custom vertex-lit mesh against Godot per-pixel lighting and confirm the light gradient passes through dither and RGB5.
409
+ 8. Compare a custom vertex-lit mesh against the engine's per-pixel lighting and confirm the light gradient passes through dither and RGB5.
410
410
  9. Exercise every transparency equation over known background colors, then separately demonstrate the overlapping-transparent limitation.
411
411
  10. Test black modulation fog, colored modulation fog, and the Silent Hill-style approximation at the near and far planes.
412
412
  11. Capture the same scene in Compatibility and Forward+ if both are supported; investigate color-space or feature differences rather than assuming parity.
413
413
 
414
414
  ## Confidence
415
415
 
416
- `extracted` — Hardware mechanisms and the Godot techniques are drawn from Calin P's hardware-informed article and MIT reference addon. The skill explicitly identifies modern approximations and known limitations. It has not been verified end to end inside SummerEngine, so do not label a project `summerengine-verified` until the visible client flow and renderer-specific behavior have been tested.
416
+ `extracted` — Hardware mechanisms and the engine techniques are drawn from Calin P's hardware-informed article and MIT reference addon. The skill explicitly identifies modern approximations and known limitations. It has not been verified end to end inside Summer Engine. Test the visible client flow and renderer-specific behavior before calling a project verified.
@@ -1,7 +1,7 @@
1
1
  id: skill/psx-retro-rendering
2
2
  kind: skill
3
3
  version: 0.1.1
4
- summary: "Hardware-informed PlayStation 1 rendering in Godot 4 — low-res output, RGB5 and exact dither, affine textures, vertex snapping, blend modes, fog; limits named."
4
+ summary: "PlayStation 1 rendering in Summer Engine — low-res output, RGB5 and exact dither, affine textures, vertex snapping, blend modes, fog; limits named."
5
5
  use_when:
6
6
  - "make my game render like a PlayStation 1 game, with texture warping, vertex wobble, and dithering"
7
7
  - "add a PSX retro shader to the 3D scene"
@@ -10,7 +10,6 @@ use_when:
10
10
  do_not_use_when:
11
11
  - "an ordinary low-resolution or pixel-art presentation that does not need PS1-specific rendering behavior"
12
12
  - "defining the overall visual style, palette, or mood — use art-direction first"
13
- - "intake from the gamedev-knowledge pipeline (source-cited, pipeline-validated, not yet exercised in-engine by the Summer team) — verify results in the engine as you would any technique"
14
13
  facets:
15
14
  lifecycle:
16
15
  - build
@@ -33,4 +32,4 @@ status: preview
33
32
  recommended: false
34
33
  lint_exceptions:
35
34
  - url-allowlist
36
- lint_exception_reason: "Source citation for knowledge extracted by the gamedev-knowledge pipeline: the body links the MIT-licensed godot-psxlike reference addon on GitHub (wyvernbw) that the extracted article names as its implementation evidence. Read-only provenance link; the skill never fetches or installs it."
35
+ lint_exception_reason: "Source citation: the body links the MIT-licensed godot-psxlike reference addon on GitHub (wyvernbw) that the extracted article names as its implementation evidence. Read-only provenance link; the skill never fetches or installs it."
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: realtime-wet-surfaces
3
- description: "Real-time wetness on existing Godot 4 materials without losing their values — value-copying wet shader, geometry-driven wet mask, instance-uniform wet amount."
3
+ description: "Real-time wetness on existing materials without losing their values — value-copying wet shader, geometry-driven wet mask, instance-uniform wet amount."
4
4
  license: MIT
5
5
  category: shaders
6
6
  tags:
@@ -12,11 +12,11 @@ tags:
12
12
  confidence: extracted
13
13
  ---
14
14
 
15
- # Real-Time Wet Surfaces (Value-Preserving Wet Materials in Godot 4)
15
+ # Real-Time Wet Surfaces (Value-Preserving Wet Materials)
16
16
 
17
17
  ## Outcome
18
18
 
19
- Implement a real-time wetness effect in SummerEngine that can be applied to existing materials **without losing their configured values** (albedo, metallic, roughness, textures). The wet mask is driven by geometry alone (upward-facing surfaces collect wetness first), with a global/per-instance wet amount that can be animated at runtime. This mirrors the Unity architecture described in the source evidence: a pre-configured shader-graph swap that keeps the standard Lit material's values, driven by a CustomFunction bridge.
19
+ Implement a real-time wetness effect in Summer Engine that can be applied to existing materials **without losing their configured values** (albedo, metallic, roughness, textures). The wet mask is driven by geometry alone (upward-facing surfaces collect wetness first), with a global/per-instance wet amount that can be animated at runtime. This follows the source technique: a pre-configured shader swap that keeps the standard material's values, fed by a custom-function bridge.
20
20
 
21
21
  ## When to Use
22
22
 
@@ -28,17 +28,17 @@ Implement a real-time wetness effect in SummerEngine that can be applied to exis
28
28
 
29
29
  The source technique's key idea is **separation of wetness from material authoring**: the wet logic is a self-contained graph/function that receives material values and injects a wet mask, so enabling wetness is a swap, not a rewrite.
30
30
 
31
- Godot 4 mapping of the Unity concepts:
31
+ How the source concepts map to Summer Engine:
32
32
 
33
- | Unity concept (from source) | Godot 4 equivalent |
33
+ | Source concept | Summer Engine equivalent |
34
34
  |---|---|
35
- | Standard Lit material with retained values | `StandardMaterial3D` values copied into a `ShaderMaterial` by a one-time converter |
36
- | Pre-configured ShaderGraph swap | Shared wet-enabled `.gdshader`; swap the material once, keep all parameter values |
37
- | CustomFunction carrying values into the graph | Shader uniforms + instance uniforms (`set_instance_shader_parameter`) or `RenderingServer` global shader parameters for scene-wide wet state |
35
+ | Standard lit material with retained values | `StandardMaterial3D` values copied into a `ShaderMaterial` by a one-time converter |
36
+ | Pre-configured shader-graph swap | Shared wet-enabled `.gdshader`; swap the material once, keep all parameter values |
37
+ | Custom-function node carrying values into the graph | Shader uniforms + instance uniforms (`set_instance_shader_parameter`) or `RenderingServer` global shader parameters for scene-wide wet state |
38
38
  | Wet mask from geometry shape alone | Fragment mask from world-space normal up-facing component (`world_normal.y`), optionally broken up by world-position noise |
39
39
  | Planned heightmap flow | Sample a heightmap texture and offset the wet mask along its gradient (future extension; not evidenced in source) |
40
40
 
41
- **Important constraint:** Godot cannot inject custom nodes into a `StandardMaterial3D` at runtime. The faithful equivalent of "swap in the pre-configured SG while keeping all values" is a **converter that copies `StandardMaterial3D` parameters into the wet shader** (below). The alternative — leaving `StandardMaterial3D` untouched and overlaying wetness via decals or post-processing — does not match the source's material-preserving architecture and is not recommended here.
41
+ **Constraint:** the engine cannot inject custom nodes into a `StandardMaterial3D` at runtime. The equivalent of "swap in the pre-configured shader while keeping all values" is a **converter that copies `StandardMaterial3D` parameters into the wet shader** (below). The alternative — leaving `StandardMaterial3D` untouched and overlaying wetness via decals or post-processing — does not match the source's material-preserving architecture and is not recommended here.
42
42
 
43
43
  ## Scene / Node Shape
44
44
 
@@ -58,7 +58,7 @@ Scene
58
58
 
59
59
  ### 1. Write the shared wet-enabled spatial shader
60
60
 
61
- Preserve the PBR parameters as uniforms and compute the wet mask from geometry. In Godot 4, fragment-stage `NORMAL` is **view-space**, so pass a world-space normal from the vertex stage — otherwise the "upward-facing" mask rotates with the camera.
61
+ Preserve the PBR parameters as uniforms and compute the wet mask from geometry. Fragment-stage `NORMAL` is **view-space**, so pass a world-space normal from the vertex stage — otherwise the "upward-facing" mask rotates with the camera.
62
62
 
63
63
  ```glsl
64
64
  shader_type spatial;
@@ -108,7 +108,7 @@ Assumes near-uniform mesh scale; for heavily non-uniform scale, use the inverse-
108
108
 
109
109
  ### 2. Convert existing materials while preserving their values
110
110
 
111
- This is the Godot equivalent of the source's "swap in the pre-configured SG; all values retained" step. Run once (editor tool or import-time), not per frame.
111
+ This is the source's "swap in the pre-configured shader; all values retained" step. Run once (editor tool or import-time), not per frame.
112
112
 
113
113
  ```gdscript
114
114
  @tool
@@ -150,7 +150,7 @@ Use `Area3D` rain zones to toggle `raining` for objects inside them. For scene-w
150
150
 
151
151
  ### 4. Planned extension: heightmap-guided flow
152
152
 
153
- The source author states heightmap support so wetness flows along map bumps is **planned, not shipped**. When implementing later in Godot: sample a heightmap texture in the fragment stage and bias the wet mask along its gradient (e.g., offset `world_pos.xz` lookups downhill using the height texture derivatives) so streaks follow surface relief. Do not treat this as part of the evidenced technique.
153
+ The source author states heightmap support so wetness flows along map bumps is **planned, not shipped**. To implement it: sample a heightmap texture in the fragment stage and bias the wet mask along its gradient (e.g., offset `world_pos.xz` lookups downhill using the height texture derivatives) so streaks follow surface relief. Do not treat this as part of the evidenced technique.
154
154
 
155
155
  ## Tunables
156
156
 
@@ -166,7 +166,7 @@ The source author states heightmap support so wetness flows along map bumps is *
166
166
  ## Failure Modes & Gotchas
167
167
 
168
168
  - **View-space normal mistake:** using fragment `NORMAL` directly makes the up-facing mask rotate with the camera. Always pass world normal from `vertex()` via a varying.
169
- - **Expecting in-place injection:** Godot cannot add wet logic to a live `StandardMaterial3D`. The value-preserving step is the one-time conversion, not runtime patching.
169
+ - **Expecting in-place injection:** the engine cannot add wet logic to a live `StandardMaterial3D`. The value-preserving step is the one-time conversion, not runtime patching.
170
170
  - **Duplicate shaders per material:** keep ONE shared `.gdshader`; per-material differences live in uniforms, per-object state in instance uniforms. Otherwise you pay shader compilation and draw-call overhead.
171
171
  - **Over-darkening:** on already-dark albedos, clamp the darkened result or lower `darkening`.
172
172
  - **Transparent/unshaded materials:** out of scope; this skill targets opaque PBR surfaces.
@@ -182,8 +182,8 @@ The source author states heightmap support so wetness flows along map bumps is *
182
182
 
183
183
  ## Confidence
184
184
 
185
- `extracted` — the Unity-side architecture (Lit-preserving wet swap, CustomFunction→ShaderGraph value bridge, geometry-only mask, planned heightmap flow) is extracted from the linked X post (see evidence boundaries in the source file: demo video and replies not retrievable, no code published). The Godot 4 mapping, shader, and scripts are librarian engineering guidance consistent with that evidence, **not** source-extracted implementation and **not** verified inside SummerEngine.
185
+ `extracted` — the architecture (material-preserving wet swap, custom-function value bridge, geometry-only mask, planned heightmap flow) comes from a public post that showed the technique in another engine; no code was published. The mapping, shader, and scripts here are engineering guidance consistent with that post, **not** source-extracted implementation and **not** verified inside Summer Engine.
186
186
 
187
187
  ## Evidence
188
188
 
189
- - Source record `sources/x/tenmomo-unity-realtime-wet/source.md`, kept outside this package (the evidence boundaries above summarise it).
189
+ - A public X post describing the technique (demo video only, no code).
@@ -1,7 +1,7 @@
1
1
  id: skill/realtime-wet-surfaces
2
2
  kind: skill
3
3
  version: 0.1.1
4
- summary: "Real-time wetness on existing Godot 4 materials without losing their values — value-copying wet shader, geometry-driven wet mask, instance-uniform wet amount."
4
+ summary: "Real-time wetness on existing materials without losing their values — value-copying wet shader, geometry-driven wet mask, instance-uniform wet amount."
5
5
  use_when:
6
6
  - "make surfaces look wet when it rains and dry off afterwards"
7
7
  - "add rain wetness to the level without redoing every material"
@@ -9,7 +9,6 @@ use_when:
9
9
  - "wet cave, shoreline, or post-rain look on existing PBR materials"
10
10
  do_not_use_when:
11
11
  - "transparent or unshaded materials, water bodies, or puddle simulation — this targets opaque PBR surfaces"
12
- - "intake from the gamedev-knowledge pipeline (source-cited, pipeline-validated, not yet exercised in-engine by the Summer team) — verify results in the engine as you would any technique"
13
12
  facets:
14
13
  lifecycle:
15
14
  - build
@@ -15,15 +15,14 @@ paths: ["project.godot", "export_presets.cfg"]
15
15
 
16
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
17
 
18
- **Core principle:** Remote Deploy is "Play, but on the hardware." Same debug loop, real device.
19
-
20
18
  **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.
19
+ user to pick a device, check the installed Summer Engine's export templates and
20
+ the platform toolchain. Remote Deploy exports a debug build, so it needs the
21
+ debug template for that platform. `summer_export_templates` with
22
+ `action: "list"` shows what is installed and published; `action: "install"`
23
+ with `includeDebug: true` adds missing ones. Android and iOS also need their SDK
24
+ toolchain and signing. Never recommend or attempt a Remote Deploy target that
25
+ has not passed this check.
27
26
 
28
27
  It is **not** the same as two neighbours:
29
28
 
@@ -31,7 +30,7 @@ It is **not** the same as two neighbours:
31
30
  |---|---|---|
32
31
  | **Play** (▶) | Runs in the editor (embedded or windowed) | Fast iteration on the dev machine |
33
32
  | **Remote Deploy** | Debug build → installs + runs on a device, remote-debugged | Testing real input/perf/screen on hardware |
34
- | **export-and-ship** (`export-and-ship`) | Supported local release builds | Preparing an artifact for a separate user-controlled distribution workflow |
33
+ | **Release export** (`export-and-ship`) | Supported local release builds | Preparing an artifact for a separate user-controlled distribution workflow |
35
34
 
36
35
  If the user wants a release build for Steam / itch / the App Store, that is `export-and-ship`, not this.
37
36
 
@@ -39,22 +38,22 @@ If the user wants a release build for Steam / itch / the App Store, that is `exp
39
38
 
40
39
  - **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
40
  - 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.
41
+ - 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 most common question; it almost always means "no runnable preset or no device detected," not a bug.
43
42
 
44
43
  ## Step 1 — prove the requested target is available
45
44
 
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:
45
+ Run `summer_export_templates` with `action: "list"`, then check the requested
46
+ platform toolchain. Report one of:
49
47
 
50
- - `available`: matching template and toolchain are present;
48
+ - `available`: the matching debug template and toolchain are present;
51
49
  - `blocked`: name the missing template, toolchain, signing, or device
52
50
  prerequisite;
53
51
  - `impossible on this build`: Web on the stock Mono build.
54
52
 
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.
53
+ Stop on `impossible`. On `blocked`, install the missing template (`summer_export_templates`
54
+ `action: "install"`, `includeDebug: true`) after the user agrees, or route the
55
+ user to the toolchain setup. Do not add a preset as if that made the target
56
+ runnable.
58
57
 
59
58
  ## Step 2 — prerequisites for a proven target
60
59
 
@@ -66,7 +65,7 @@ The button auto-enables the moment a runnable preset **and** at least one detect
66
65
  | 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
66
  | 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
67
 
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:
68
+ **Note:** 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
69
 
71
70
  > **Runnable preset + a detected device make the button appear/enable. Installed export templates make the deploy actually succeed.**
72
71
 
@@ -108,9 +107,9 @@ export environment.
108
107
 
109
108
  When a user says "deploy to my phone" / "run this on device" and the button is greyed:
110
109
 
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.
110
+ 1. **Prove target capability first** — check the matching debug template
111
+ (`summer_export_templates`) and the platform toolchain. Stop or route
112
+ externally if either is absent; Web is impossible on the stock Mono build.
114
113
  2. **Check the build is healthy** — a project with script errors won't export.
115
114
  - `summer_get_script_errors` and `summer_get_diagnostics` clean? If not, fix those before anything else.
116
115
  - `summer_get_console` for "import failed" noise.
@@ -15,19 +15,17 @@ paths: ["**/*.tscn", "**/*.tres"]
15
15
 
16
16
  Summer ships **no** `summer_retarget_motion` tool, and no other MCP tool that
17
17
  re-projects an existing animation asset onto a second rig. Verify it yourself:
18
- `summer tool --list` prints every registered tool and there is no retarget entry. Never call one — the MCP server rejects
19
- unknown tool names outright, and inventing a cost table for it ("$0.05 a clip")
20
- is worse than saying nothing.
18
+ `summer tool --list` prints every registered tool and there is no retarget entry. Never call one: the MCP server rejects
19
+ unknown tool names outright.
21
20
 
22
21
  Two real paths exist. Pick by whether the target rig is Meshy-rigged.
23
22
 
24
23
  | Situation | Path |
25
24
  |---|---|
26
- | Target is Meshy-rigged and the clip name is on the curated list | Re-run `summer_generate_motion` against the target's `rigAssetId`. Same clip, ~$0.10, ~30s. |
25
+ | Target is Meshy-rigged and the clip name is on the curated list | Re-run `summer_generate_motion` against the target's `rigAssetId`. Same clip, ~30s, uses credits. |
27
26
  | Target is not Meshy-rigged, or the clip is hand-authored / Mixamo / bought | In-engine retargeting: `BoneMap` + `SkeletonProfileHumanoid` + `RetargetModifier3D`. No credits, no network, but you configure the bone mapping. |
28
27
 
29
- The rest of this skill covers both. The cost math that used to live here assumed a
30
- retarget API that does not exist; the honest math is below.
28
+ The rest of this skill covers both.
31
29
 
32
30
  ## When to use this skill
33
31
 
@@ -65,15 +63,15 @@ summer_search_assets(query: "<target character>", assetType: "3d_model", source:
65
63
  ```
66
64
 
67
65
  Confirm a `rigAssetId` is present. If it is null the model was never rigged —
68
- stop and propose `summer_generate_3d({ kind: "image-to-3d", imageUrl: "...", options: { rig: true } })`
66
+ stop and propose `summer_generate_3d({ kind: "image-to-3d", imageUrl: "...", rig: true })`
69
67
  first, or route to `asset-strategy`.
70
68
 
71
69
  ### 3. Confirm with user before spending
72
70
 
73
- Regeneration is a real generation per clip per character. Say the total.
71
+ Regeneration is a real generation per clip per character, and each one uses credits. Say the total count.
74
72
 
75
- > I'm about to generate 12 clips (idle, walk, run, attack, ...) on `orc_rigged` —
76
- > 12 × ~$0.10 = ~$1.20, a few minutes total. OK?
73
+ > I'm about to generate 12 clips (idle, walk, run, attack, ...) on `orc_rigged`.
74
+ > That is 12 generations, a few minutes total. OK?
77
75
 
78
76
  ### 4. Loop the generation calls
79
77
 
@@ -107,9 +105,8 @@ summer_set_resource_property(
107
105
 
108
106
  ## Path B — in-engine retargeting (non-Meshy rigs, bought or hand-authored clips)
109
107
 
110
- The current Summer Engine build ships the retargeting stack that the MCP layer
111
- does not wrap. Verified
112
- instantiable on the shipped binary: `BoneMap`, `SkeletonProfileHumanoid`
108
+ The current Summer Engine build ships a retargeting stack that the MCP layer
109
+ does not wrap. Verified instantiable on the shipped binary: `BoneMap`, `SkeletonProfileHumanoid`
113
110
  (56 bones), `RetargetModifier3D`.
114
111
 
115
112
  The shape:
@@ -129,23 +126,23 @@ skeleton, once.
129
126
 
130
127
  ## Confirmation gates
131
128
 
132
- - **Before any generation call:** show the full clip list and total cost.
129
+ - **Before any generation call:** show the full clip list and the number of generations.
133
130
  - **After the first clip:** preview the result. If it looks wrong, stop the loop
134
131
  and re-evaluate (proportions, T-pose, missing bones).
135
132
  - **Before saving the scene:** confirm the AnimationPlayer additions you're about to write.
136
133
 
137
134
  ## Reference card
138
135
 
139
- ### Cost math (decision rule)
136
+ ### Decision rule
140
137
 
141
- There is no cheaper "retarget" rate to compare against, so the real decision is
142
- generate-per-character versus spend the time on a `BoneMap`.
138
+ The real decision is generating per character versus spending the time on a
139
+ `BoneMap`.
143
140
 
144
141
  | Scenario | Regenerate (Path A) | In-engine BoneMap (Path B) |
145
142
  |---|---|---|
146
- | 1 character, 12 clips | ~$1.20 | n/a — nothing to share yet |
147
- | 5 characters, same 12 clips | ~$6.00 | $0, plus ~1 bone-map pass per distinct skeleton |
148
- | 30 NPCs sharing one skeleton | ~$36.00 | $0 — same rig, so the clips already play on all of them |
143
+ | 1 character, 12 clips | 12 generations | n/a — nothing to share yet |
144
+ | 5 characters, same 12 clips | 60 generations | No credits, plus ~1 bone-map pass per distinct skeleton |
145
+ | 30 NPCs sharing one skeleton | 360 generations | No credits — same rig, so the clips already play on all of them |
149
146
 
150
147
  Note the case that makes most of this moot: **NPCs that share one rig share one
151
148
  animation library already.** If the user's 30 enemies are 30 instances of the
@@ -177,7 +174,6 @@ same rigged `.glb`, nothing needs retargeting — instance the scene.
177
174
  ## Anti-patterns
178
175
 
179
176
  - Calling a `summer_retarget_motion` / `summer_retarget_*` tool. None exists.
180
- - Quoting a retarget price. There is no retarget SKU to price.
181
177
  - Passing an asset ID to `summer_inspect_resource`. That tool takes a `res://`
182
178
  **path** to a resource in the project, not a cloud asset ID. Use
183
179
  `summer_get_asset(assetId: ...)` for asset metadata.
@@ -191,7 +187,7 @@ same rigged `.glb`, nothing needs retargeting — instance the scene.
191
187
  to re-author per character.
192
188
  - **Target rig is a different Meshy skeleton generation.** Symptom: bone-count
193
189
  mismatch even though both are Meshy. Re-rig the target with a fresh
194
- `summer_generate_3d({ kind: "image-to-3d", options: { rig: true } })` call.
190
+ `summer_generate_3d({ kind: "image-to-3d", rig: true })` call.
195
191
  - **The clip the user wants is not on the curated list.** Path A cannot produce
196
192
  it. Either hand-author it, or import a Mixamo clip and take Path B.
197
193
 
@@ -201,7 +197,7 @@ Path B is the fallback and does not need MCP at all. In Summer Engine: select
201
197
  the source `.glb` in the FileSystem dock, open the Import tab, create/assign a
202
198
  `BoneMap` with a `SkeletonProfileHumanoid` profile, re-import. On the target
203
199
  character add a `RetargetModifier3D` under `Skeleton3D` with the same profile.
204
- Documented in the Godot 4.x "Retargeting 3D Skeletons" docs.
200
+ The upstream engine docs cover this under "Retargeting 3D Skeletons".
205
201
 
206
202
  ## Handoff
207
203
 
@@ -7,7 +7,7 @@ description: "Run Summer Engine on a Linux box with no display — install it, l
7
7
 
8
8
  ## Overview
9
9
 
10
- Summer Engine runs fine on a Linux machine with no display and no human. Everything in this skill was measured in a real cloud container: headless engine boots, MCP tools answer, and renders work under xvfb + llvmpipe.
10
+ Summer Engine runs on a Linux machine with no display and no human. Everything in this skill was measured in a real cloud container: headless engine boots, MCP tools answer, and renders work under xvfb + llvmpipe.
11
11
 
12
12
  Three facts carry the whole setup:
13
13
 
@@ -21,14 +21,14 @@ Three facts carry the whole setup:
21
21
 
22
22
  | Priority | Source | When |
23
23
  |---|---|---|
24
- | 1 | `SUMMER_ENGINE_BINARY=<abs path>` | The container already carries a prebuilt engine binary (for example a source build's `bin/godot.linuxbsd.editor.x86_64`). Registers that binary — no download. |
24
+ | 1 | `SUMMER_ENGINE_BINARY=<abs path>` | The container already carries a prebuilt engine binary. Registers that binary — no download. |
25
25
  | 2 | `SUMMER_ENGINE_URL=<url>` | Download any artifact URL: `.tar.gz`, `.zip`, or a raw executable. |
26
26
  | 3 | (default) | The newest published Linux release artifact (`Summer-linux-x86_64-<tag>.tar.gz`). |
27
27
 
28
28
  All three register the binary at `~/.summer/engine/summer-linux-x86_64`, which is where `summer run` and `summer doctor` look. `SUMMER_ENGINE_BINARY` is also honored directly at lookup time, so setting the env var alone (without ever running `summer install`) is enough for `summer doctor` to report the engine as installed.
29
29
 
30
30
  ```bash
31
- # Container with a prebuilt binary — today's cloud unlock:
31
+ # Container with a prebuilt binary:
32
32
  export SUMMER_ENGINE_BINARY=/abs/path/to/engine-binary
33
33
  summer install # registers it; summer doctor now shows Engine: ok
34
34
  ```
@@ -68,7 +68,7 @@ apt-get install -y xvfb libgl1-mesa-dri # names vary by distro
68
68
  xvfb-run -a <engine-binary> --path <project-dir> --rendering-driver opengl3 ...
69
69
  ```
70
70
 
71
- Honest limitations:
71
+ Limitations:
72
72
 
73
73
  - **No Vulkan in most containers** → Forward+/Mobile renderers are unavailable; you get software GL (Compatibility). Colors and composition are trustworthy; GPU-specific effects, performance numbers, and driver-dependent output are not.
74
74
  - Software rendering is slow. Budget seconds per frame, not milliseconds, and never quote FPS measured this way.
@@ -100,4 +100,4 @@ Treat it as a secret: env-inject it from the runner's secret store, never bake i
100
100
  **Related skills:**
101
101
  - `headless-scripting` — the headless invocation contract, exit-code traps, and what scripts unlock.
102
102
  - `playtesting-a-feature` — the verify instance and probes (run them under xvfb in the cloud).
103
- - `verification-before-completion` — judging work by artifacts, which matters double when nobody can see a screen.
103
+ - `verification-before-completion` — judging work by artifacts, which matters more when nobody can see a screen.
@@ -113,7 +113,7 @@ screenshot alone.
113
113
 
114
114
  1. **Wrong parent path:** `./NonExistent` fails. Ensure the parent exists before adding children.
115
115
  2. **Unnamed scene:** Saving without a path fails if the scene was never saved. Use `path` for new scenes.
116
- 3. **Duplicate names:** Godot auto-renames (Node, Node2, etc.). Use descriptive unique names.
116
+ 3. **Duplicate names:** the engine auto-renames (Node, Node2, etc.). Use descriptive unique names.
117
117
  4. **Mixing 2D and 3D:** Don't put Node2D under Node3D or vice versa in the same hierarchy.
118
118
 
119
119
  ## Fallback
@@ -121,7 +121,7 @@ screenshot alone.
121
121
  MCP is the preferred path, not a requirement. Hand-written `.tscn` text loads and
122
122
  instantiates fine — including `[ext_resource]` lines with **no `uid=` field**,
123
123
  which the engine resolves by path (verified by loading such a scene on the
124
- shipped 4.6.1 build). Format version 3 is current for Godot 4.
124
+ shipped 4.6.1 build). Format version 3 is current.
125
125
 
126
126
  What actually goes wrong when you hand-write scenes is mundane and checkable:
127
127
  a `SubResource("id")` with no matching `[sub_resource id="id"]` block, a
@@ -146,7 +146,7 @@ Rule when copying a scene as a template:
146
146
 
147
147
  ## Trap — Third-person camera collision when foliage shouldn't block
148
148
 
149
- Godot's `SpringArm3D` shortens the camera boom when it raycasts into geometry on the configured `collision_mask`. If your trees, bushes, or grass have collision so the player physically bumps them, on the same layer the SpringArm queries, the camera shortens for foliage too. Players see the camera awkwardly snap forward whenever they walk near a tree.
149
+ `SpringArm3D` shortens the camera boom when it raycasts into geometry on the configured `collision_mask`. If your trees, bushes, or grass have collision so the player physically bumps them, on the same layer the SpringArm queries, the camera shortens for foliage too. Players see the camera awkwardly snap forward whenever they walk near a tree.
150
150
 
151
151
  The pattern that works:
152
152
 
@@ -156,9 +156,9 @@ The pattern that works:
156
156
  - Player `CharacterBody3D`: `collision_mask = 259` (which is 1 + 2 + 256, Entities + Level + Foliage).
157
157
  3. SpringArm uses a mask that catches solid level geometry but excludes foliage.
158
158
  - SpringArm: `collision_mask = 3` (which is 1 + 2, Entities + Level only).
159
- 4. For the visual fade the user expects when the camera is "behind" a tree, add the foliage mesh to the `camera_fade` group. An existing camera-occlusion fade system can ghost the mesh by AABB intersection with the camera-to-player segment without touching collision.
159
+ 4. For the visual fade the user expects when the camera is "behind" a tree, use a camera-occlusion fade instead of collision: if the project has one, add the foliage mesh to its group (for example `camera_fade`) so it ghosts the mesh when it crosses the camera-to-player segment.
160
160
 
161
- Why per-layer split: there's no clean way to exclude a single body type from `SpringArm3D`'s collision check via `add_excluded_object` for dynamically-spawned foliage. You'd have to register every tree at spawn time and re-register on level change. Layer-level filtering is set-and-forget.
161
+ Why per-layer split: there's no clean way to exclude a single body type from `SpringArm3D`'s collision check via `add_excluded_object` for dynamically-spawned foliage. You'd have to register every tree at spawn time and re-register on level change. Layer filtering needs no upkeep.
162
162
 
163
163
  Don't skip the player mask update. If you only move foliage to layer 9 without adding it to the player's mask, the player walks straight through trees.
164
164