summer-engine 3.1.0 → 3.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (366) hide show
  1. package/.claude-plugin/marketplace.json +2 -2
  2. package/.claude-plugin/plugin.json +27 -5
  3. package/.codex-plugin/plugin.json +28 -6
  4. package/.cursor-plugin/plugin.json +27 -5
  5. package/.factory-plugin/plugin.json +27 -5
  6. package/.opencode/plugins/summer.js +1 -1
  7. package/CHANGELOG.md +102 -0
  8. package/README.md +18 -3
  9. package/assets/audit/scene_audit.gd +4136 -0
  10. package/assets/seeing/seeing_probe.gd +1873 -0
  11. package/dist/cli/commands/skills.js +20 -2
  12. package/dist/core/api-client.d.ts +9 -1
  13. package/dist/core/api-client.js +21 -4
  14. package/dist/core/capabilities/agent-playbook.js +46 -0
  15. package/dist/core/capabilities/audit/accept.d.ts +55 -0
  16. package/dist/core/capabilities/audit/accept.js +147 -0
  17. package/dist/core/capabilities/audit/args.d.ts +95 -0
  18. package/dist/core/capabilities/audit/args.js +89 -0
  19. package/dist/core/capabilities/audit/audit.d.ts +56 -0
  20. package/dist/core/capabilities/audit/audit.js +287 -0
  21. package/dist/core/capabilities/audit/frame.d.ts +14 -0
  22. package/dist/core/capabilities/audit/frame.js +35 -0
  23. package/dist/core/capabilities/audit/gaps.d.ts +96 -0
  24. package/dist/core/capabilities/audit/gaps.js +257 -0
  25. package/dist/core/capabilities/audit/judge.d.ts +162 -0
  26. package/dist/core/capabilities/audit/judge.js +1134 -0
  27. package/dist/core/capabilities/audit/math.d.ts +110 -0
  28. package/dist/core/capabilities/audit/math.js +263 -0
  29. package/dist/core/capabilities/audit/summary.d.ts +74 -0
  30. package/dist/core/capabilities/audit/summary.js +212 -0
  31. package/dist/core/capabilities/board.d.ts +31 -0
  32. package/dist/core/capabilities/board.js +43 -0
  33. package/dist/core/capabilities/camera-view.d.ts +4 -2
  34. package/dist/core/capabilities/camera-view.js +6 -3
  35. package/dist/core/capabilities/connect-signal.d.ts +85 -0
  36. package/dist/core/capabilities/connect-signal.js +285 -0
  37. package/dist/core/capabilities/engine-fallbacks.d.ts +5 -0
  38. package/dist/core/capabilities/engine-fallbacks.js +5 -0
  39. package/dist/core/capabilities/engine-ops.d.ts +5 -1
  40. package/dist/core/capabilities/engine-ops.js +0 -3
  41. package/dist/core/capabilities/engine-receipt.d.ts +12 -0
  42. package/dist/core/capabilities/engine-receipt.js +26 -0
  43. package/dist/core/capabilities/file-read.d.ts +64 -0
  44. package/dist/core/capabilities/file-read.js +325 -0
  45. package/dist/core/capabilities/game-task-plan.js +4 -2
  46. package/dist/core/capabilities/grep.d.ts +60 -0
  47. package/dist/core/capabilities/grep.js +190 -0
  48. package/dist/core/capabilities/inspect-node.d.ts +56 -0
  49. package/dist/core/capabilities/inspect-node.js +225 -0
  50. package/dist/core/capabilities/inspect-resource.d.ts +61 -0
  51. package/dist/core/capabilities/inspect-resource.js +376 -0
  52. package/dist/core/capabilities/math3d.d.ts +28 -0
  53. package/dist/core/capabilities/math3d.js +88 -0
  54. package/dist/core/capabilities/motion-generation.d.ts +62 -0
  55. package/dist/core/capabilities/motion-generation.js +138 -0
  56. package/dist/core/capabilities/placement-batch.d.ts +102 -0
  57. package/dist/core/capabilities/placement-batch.js +483 -0
  58. package/dist/core/capabilities/placement-math.d.ts +70 -0
  59. package/dist/core/capabilities/placement-math.js +209 -0
  60. package/dist/core/capabilities/placement-script.d.ts +42 -0
  61. package/dist/core/capabilities/placement-script.js +1096 -0
  62. package/dist/core/capabilities/placement.d.ts +485 -0
  63. package/dist/core/capabilities/placement.js +1731 -0
  64. package/dist/core/capabilities/project-context.d.ts +33 -2
  65. package/dist/core/capabilities/project-context.js +87 -4
  66. package/dist/core/capabilities/replace-node.d.ts +91 -0
  67. package/dist/core/capabilities/replace-node.js +423 -0
  68. package/dist/core/capabilities/runtime-control.d.ts +18 -2
  69. package/dist/core/capabilities/runtime-control.js +67 -2
  70. package/dist/core/capabilities/scene-batch.d.ts +63 -0
  71. package/dist/core/capabilities/scene-batch.js +394 -0
  72. package/dist/core/capabilities/scene-readback.d.ts +36 -0
  73. package/dist/core/capabilities/scene-readback.js +54 -0
  74. package/dist/core/capabilities/seeing/args.d.ts +348 -0
  75. package/dist/core/capabilities/seeing/args.js +178 -0
  76. package/dist/core/capabilities/seeing/candidates.d.ts +127 -0
  77. package/dist/core/capabilities/seeing/candidates.js +282 -0
  78. package/dist/core/capabilities/seeing/math.d.ts +134 -0
  79. package/dist/core/capabilities/seeing/math.js +269 -0
  80. package/dist/core/capabilities/seeing/probe.d.ts +62 -0
  81. package/dist/core/capabilities/seeing/probe.js +188 -0
  82. package/dist/core/capabilities/seeing/scoring.d.ts +235 -0
  83. package/dist/core/capabilities/seeing/scoring.js +639 -0
  84. package/dist/core/capabilities/seeing/seeing.d.ts +233 -0
  85. package/dist/core/capabilities/seeing/seeing.js +1341 -0
  86. package/dist/core/capabilities/seeing/shot-store.d.ts +52 -0
  87. package/dist/core/capabilities/seeing/shot-store.js +204 -0
  88. package/dist/core/capabilities/surface-snap-mesh.d.ts +88 -0
  89. package/dist/core/capabilities/surface-snap-mesh.js +425 -0
  90. package/dist/core/capabilities/surface-snap.d.ts +77 -0
  91. package/dist/core/capabilities/surface-snap.js +461 -0
  92. package/dist/core/capabilities/tool-dispatch.js +231 -72
  93. package/dist/core/capabilities/tscn.d.ts +85 -0
  94. package/dist/core/capabilities/tscn.js +391 -0
  95. package/dist/core/capabilities/world-snapshot.d.ts +58 -0
  96. package/dist/core/capabilities/world-snapshot.js +150 -0
  97. package/dist/core/capability-skew.d.ts +5 -5
  98. package/dist/core/capability-skew.js +14 -6
  99. package/dist/core/headless/worker-engine-client.d.ts +1 -1
  100. package/dist/core/headless/worker-engine-client.js +2 -2
  101. package/dist/core/library-read.d.ts +37 -5
  102. package/dist/core/library-read.js +264 -33
  103. package/dist/core/library-search.d.ts +2 -2
  104. package/dist/installer/agent-config.js +5 -3
  105. package/dist/installer/agent-table.d.ts +16 -0
  106. package/dist/installer/agent-table.js +52 -17
  107. package/dist/mcp/server.js +9 -3
  108. package/dist/mcp/tools/asset-tools.js +21 -3
  109. package/dist/mcp/tools/audit-tools.d.ts +23 -0
  110. package/dist/mcp/tools/audit-tools.js +60 -0
  111. package/dist/mcp/tools/debug-tools.js +3 -1
  112. package/dist/mcp/tools/file-tools.js +17 -4
  113. package/dist/mcp/tools/generate-tools.js +74 -66
  114. package/dist/mcp/tools/library-tools.js +2 -0
  115. package/dist/mcp/tools/perception-tools.js +6 -19
  116. package/dist/mcp/tools/placement-tools.d.ts +24 -0
  117. package/dist/mcp/tools/placement-tools.js +91 -0
  118. package/dist/mcp/tools/project-tools.js +18 -15
  119. package/dist/mcp/tools/scene-tools.js +71 -83
  120. package/dist/mcp/tools/seeing-tools.d.ts +24 -0
  121. package/dist/mcp/tools/seeing-tools.js +64 -0
  122. package/dist/mcp/tools/spatial-tools.js +17 -9
  123. package/dist/mcp/tools/visual-tools.js +59 -7
  124. package/gemini-extension.json +26 -4
  125. package/integrations/amp/README.md +1 -1
  126. package/integrations/crush/README.md +1 -1
  127. package/integrations/grok-build/README.md +1 -1
  128. package/integrations/hermes/README.md +1 -1
  129. package/integrations/kimi-code/README.md +1 -1
  130. package/integrations/mistral-vibe/README.md +1 -1
  131. package/integrations/opencode/README.md +1 -1
  132. package/integrations/rovo-dev/README.md +1 -1
  133. package/integrations/vscode-copilot/README.md +1 -1
  134. package/integrations/warp/README.md +1 -1
  135. package/integrations/windsurf/README.md +1 -1
  136. package/library/references/mcp-tools-reference/mcp-tools-reference.md +59 -15
  137. package/library/references/mcp-tools-reference/resource.yaml +1 -1
  138. package/library/references/summer-folder/resource.yaml +1 -1
  139. package/library/references/summer-folder/summer-folder.md +1 -1
  140. package/library/skills/3d-lighting/SKILL.md +1 -1
  141. package/library/skills/README.md +36 -14
  142. package/library/skills/adaptive-music/SKILL.md +1 -1
  143. package/library/skills/agent-playtesting/SKILL.md +1 -1
  144. package/library/skills/ai-characters-in-games/SKILL.md +220 -0
  145. package/library/skills/ai-characters-in-games/resource.yaml +30 -0
  146. package/library/skills/ambient-bed/SKILL.md +1 -1
  147. package/library/skills/animated-loop/SKILL.md +1 -1
  148. package/library/skills/animation-tree/SKILL.md +1 -1
  149. package/library/skills/art-direction/SKILL.md +1 -1
  150. package/library/skills/asset-strategy/SKILL.md +2 -1
  151. package/library/skills/asset-strategy/resource.yaml +2 -1
  152. package/library/skills/audio-direction/SKILL.md +1 -1
  153. package/library/skills/auto-fire-targeting/SKILL.md +1 -1
  154. package/library/skills/brainstorm-game/SKILL.md +1 -1
  155. package/library/skills/brainstorming/SKILL.md +1 -1
  156. package/library/skills/browse-templates/SKILL.md +3 -3
  157. package/library/skills/browse-templates/resource.yaml +1 -1
  158. package/library/skills/camera-rigs/SKILL.md +128 -0
  159. package/library/skills/camera-rigs/resource.yaml +29 -0
  160. package/library/skills/celeste-momentum-platforming/SKILL.md +1 -1
  161. package/library/skills/character-animation-wiring/SKILL.md +1 -1
  162. package/library/skills/character-model/SKILL.md +1 -1
  163. package/library/skills/character-movement/SKILL.md +326 -0
  164. package/library/skills/character-movement/references/default-third-person-controller.gd +201 -0
  165. package/library/skills/character-movement/references/default-third-person-verification-probe.gd +154 -0
  166. package/library/skills/character-movement/references/movement-3d.md +136 -0
  167. package/library/skills/character-movement/references/platformer-feel.md +83 -0
  168. package/library/skills/character-movement/resource.yaml +40 -0
  169. package/library/skills/character-portrait/SKILL.md +1 -1
  170. package/library/skills/cinematic-cutscene/SKILL.md +1 -1
  171. package/library/skills/combat-basics/SKILL.md +159 -0
  172. package/library/skills/combat-basics/references/projectiles-and-aoe.md +100 -0
  173. package/library/skills/combat-basics/resource.yaml +34 -0
  174. package/library/skills/concept-art/SKILL.md +1 -1
  175. package/library/skills/create-asset-sheet/SKILL.md +1 -1
  176. package/library/skills/debug/SKILL.md +1 -1
  177. package/library/skills/debugging-game-feel/SKILL.md +1 -1
  178. package/library/skills/design-level/SKILL.md +1 -1
  179. package/library/skills/design-mechanic/SKILL.md +1 -1
  180. package/library/skills/design-npc/SKILL.md +1 -1
  181. package/library/skills/diagnosing-perf-regressions/SKILL.md +1 -1
  182. package/library/skills/dispatching-parallel-agents/SKILL.md +1 -1
  183. package/library/skills/driving-the-editor-ui/SKILL.md +1 -1
  184. package/library/skills/environment-kit/SKILL.md +1 -1
  185. package/library/skills/export-and-ship/SKILL.md +1 -1
  186. package/library/skills/fabricating-assets/SKILL.md +1 -1
  187. package/library/skills/facial-and-lipsync/SKILL.md +1 -1
  188. package/library/skills/fps-controller/SKILL.md +9 -7
  189. package/library/skills/fps-controller/resource.yaml +4 -1
  190. package/library/skills/game-feel/SKILL.md +1 -1
  191. package/library/skills/gameskill/SKILL.md +1 -1
  192. package/library/skills/gdscript-patterns/SKILL.md +1 -1
  193. package/library/skills/generate-motion/SKILL.md +9 -9
  194. package/library/skills/generate-motion/resource.yaml +2 -1
  195. package/library/skills/godogen-visual-proof-game-generation/SKILL.md +1 -1
  196. package/library/skills/headless-scripting/SKILL.md +1 -1
  197. package/library/skills/in-game-purchases/SKILL.md +254 -0
  198. package/library/skills/in-game-purchases/resource.yaml +29 -0
  199. package/library/skills/instantiate-asset-pack/SKILL.md +1 -1
  200. package/library/skills/investigating-bugs/SKILL.md +1 -1
  201. package/library/skills/lumera-single-image-scene-reconstruction/SKILL.md +1 -1
  202. package/library/skills/make-game/SKILL.md +25 -3
  203. package/library/skills/make-game/references/2d-platformer-polish.md +93 -0
  204. package/library/skills/make-game/references/2d-platformer.md +117 -0
  205. package/library/skills/make-game/references/2d-rpg-content.md +234 -0
  206. package/library/skills/make-game/references/2d-rpg.md +241 -0
  207. package/library/skills/make-game/references/2d-survivors-progression.md +201 -0
  208. package/library/skills/make-game/references/2d-survivors.md +237 -0
  209. package/library/skills/make-game/references/3d-fps-systems.md +216 -0
  210. package/library/skills/make-game/references/3d-fps.md +177 -0
  211. package/library/skills/make-game/references/3d-horror-systems.md +186 -0
  212. package/library/skills/make-game/references/3d-horror.md +201 -0
  213. package/library/skills/make-game/references/3d-third-person-systems.md +220 -0
  214. package/library/skills/make-game/references/3d-third-person.md +215 -0
  215. package/library/skills/make-game/resource.yaml +6 -1
  216. package/library/skills/multiplayer/SKILL.md +150 -0
  217. package/library/skills/multiplayer/resource.yaml +33 -0
  218. package/library/skills/multiplayer-movement/SKILL.md +510 -0
  219. package/library/skills/multiplayer-movement/files.md +501 -0
  220. package/library/skills/multiplayer-movement/resource.yaml +30 -0
  221. package/library/skills/multiplayer-project/SKILL.md +521 -0
  222. package/library/skills/multiplayer-project/files.md +448 -0
  223. package/library/skills/multiplayer-project/resource.yaml +36 -0
  224. package/library/skills/multiplayer-publish/SKILL.md +229 -0
  225. package/library/skills/multiplayer-publish/export-errors.md +89 -0
  226. package/library/skills/multiplayer-publish/resource.yaml +28 -0
  227. package/library/skills/multiplayer-state/SKILL.md +438 -0
  228. package/library/skills/multiplayer-state/files.md +592 -0
  229. package/library/skills/multiplayer-state/resource.yaml +35 -0
  230. package/library/skills/multiplayer-testing/SKILL.md +236 -0
  231. package/library/skills/multiplayer-testing/resource.yaml +39 -0
  232. package/library/skills/music-track/SKILL.md +1 -1
  233. package/library/skills/navigate-summer/SKILL.md +1 -1
  234. package/library/skills/new-project/SKILL.md +1 -1
  235. package/library/skills/organic-model/SKILL.md +1 -1
  236. package/library/skills/pixel-art/SKILL.md +1 -1
  237. package/library/skills/play/SKILL.md +1 -1
  238. package/library/skills/playtesting-a-feature/SKILL.md +1 -1
  239. package/library/skills/procedural-animation/SKILL.md +2 -2
  240. package/library/skills/procedural-animation/resource.yaml +1 -1
  241. package/library/skills/prop-model/SKILL.md +1 -1
  242. package/library/skills/psx-retro-rendering/SKILL.md +1 -1
  243. package/library/skills/realtime-wet-surfaces/SKILL.md +2 -2
  244. package/library/skills/remote-deploy/SKILL.md +1 -1
  245. package/library/skills/retarget/SKILL.md +1 -1
  246. package/library/skills/running-in-the-cloud/SKILL.md +1 -1
  247. package/library/skills/save-load/SKILL.md +156 -0
  248. package/library/skills/save-load/resource.yaml +27 -0
  249. package/library/skills/scene-composition/SKILL.md +1 -1
  250. package/library/skills/scene-hierarchy-design/SKILL.md +1 -1
  251. package/library/skills/scene-scripting/SKILL.md +1 -1
  252. package/library/skills/scene-to-level/SKILL.md +1 -1
  253. package/library/skills/skill-create/SKILL.md +1 -1
  254. package/library/skills/skill-improve/SKILL.md +1 -1
  255. package/library/skills/skill-test/SKILL.md +1 -1
  256. package/library/skills/skintokens-auto-rigging/SKILL.md +1 -1
  257. package/library/skills/skybox-panorama/SKILL.md +1 -1
  258. package/library/skills/sound-effect/SKILL.md +1 -1
  259. package/library/skills/spatial-placement/SKILL.md +134 -3
  260. package/library/skills/spatial-placement/references/kit-placement-tools.md +364 -0
  261. package/library/skills/spatial-placement/resource.yaml +16 -2
  262. package/library/skills/sprite-sheet/SKILL.md +1 -1
  263. package/library/skills/summer-analytics/SKILL.md +147 -0
  264. package/library/skills/summer-analytics/resource.yaml +28 -0
  265. package/library/skills/summer-friends/SKILL.md +226 -0
  266. package/library/skills/summer-friends/resource.yaml +28 -0
  267. package/library/skills/summer-leaderboards/SKILL.md +231 -0
  268. package/library/skills/summer-leaderboards/resource.yaml +30 -0
  269. package/library/skills/summer-match-results/SKILL.md +286 -0
  270. package/library/skills/summer-match-results/resource.yaml +32 -0
  271. package/library/skills/summer-matchmaking/SKILL.md +301 -0
  272. package/library/skills/summer-matchmaking/resource.yaml +32 -0
  273. package/library/skills/summer-parties/SKILL.md +253 -0
  274. package/library/skills/summer-parties/resource.yaml +30 -0
  275. package/library/skills/summer-player-data/SKILL.md +322 -0
  276. package/library/skills/summer-player-data/resource.yaml +30 -0
  277. package/library/skills/summer-store/SKILL.md +271 -0
  278. package/library/skills/summer-store/resource.yaml +29 -0
  279. package/library/skills/summer-world-chat/SKILL.md +195 -0
  280. package/library/skills/summer-world-chat/resource.yaml +30 -0
  281. package/library/skills/summer-world-saves/SKILL.md +284 -0
  282. package/library/skills/summer-world-saves/resource.yaml +29 -0
  283. package/library/skills/text-to-motion/SKILL.md +99 -0
  284. package/library/skills/text-to-motion/prompts-and-controls.md +34 -0
  285. package/library/skills/text-to-motion/resource.yaml +41 -0
  286. package/library/skills/text-to-motion/rigging-for-text-motion.md +54 -0
  287. package/library/skills/tileable-texture/SKILL.md +1 -1
  288. package/library/skills/trailer-shot/SKILL.md +1 -1
  289. package/library/skills/tune-performance/SKILL.md +1 -1
  290. package/library/skills/ui-basics/SKILL.md +10 -1
  291. package/library/skills/ui-graphics/SKILL.md +1 -1
  292. package/library/skills/use-widget-asset/SKILL.md +1 -1
  293. package/library/skills/using-summer/SKILL.md +2 -2
  294. package/library/skills/using-summer/resource.yaml +2 -2
  295. package/library/skills/vehicle-model/SKILL.md +1 -1
  296. package/library/skills/verification-before-completion/SKILL.md +1 -1
  297. package/library/skills/verifying-scenes/SKILL.md +76 -2
  298. package/library/skills/verifying-scenes/resource.yaml +13 -2
  299. package/library/skills/vfx-dissolve/SKILL.md +1 -1
  300. package/library/skills/vfx-fire/SKILL.md +1 -1
  301. package/library/skills/vfx-hit-spark/SKILL.md +1 -1
  302. package/library/skills/vfx-lightning/SKILL.md +1 -1
  303. package/library/skills/vfx-magic-glow/SKILL.md +1 -1
  304. package/library/skills/vfx-muzzle-flash/SKILL.md +1 -1
  305. package/library/skills/vfx-smoke/SKILL.md +1 -1
  306. package/library/skills/vfx-water-ripple/SKILL.md +1 -1
  307. package/library/skills/voice-line/SKILL.md +1 -1
  308. package/library/skills/web-and-touch-input/SKILL.md +38 -0
  309. package/library/skills/web-and-touch-input/resource.yaml +28 -0
  310. package/library/skills/web-compatibility-look/SKILL.md +62 -0
  311. package/library/skills/web-compatibility-look/resource.yaml +30 -0
  312. package/library/skills/world-building-3d/SKILL.md +8 -1
  313. package/library/skills/world-building-3d/references/spatial-tools.md +1 -1
  314. package/library/skills/world-building-3d/resource.yaml +2 -1
  315. package/library/skills/writing-plans/SKILL.md +1 -1
  316. package/library/skills/writing-skills/SKILL.md +1 -1
  317. package/library/templates/3d-lan-multiplayer-starter/resource.yaml +2 -2
  318. package/library/tools/attach-to-surface/resource.yaml +142 -0
  319. package/library/tools/batch/resource.yaml +9 -3
  320. package/library/tools/connect-ports/resource.yaml +120 -0
  321. package/library/tools/connect-signal/resource.yaml +3 -2
  322. package/library/tools/debug-views/resource.yaml +94 -0
  323. package/library/tools/frame-nodes/resource.yaml +104 -0
  324. package/library/tools/frame-shot/resource.yaml +134 -0
  325. package/library/tools/generate-motion/resource.yaml +44 -9
  326. package/library/tools/get-board/resource.yaml +50 -0
  327. package/library/tools/get-project-context/resource.yaml +13 -2
  328. package/library/tools/grep/resource.yaml +77 -0
  329. package/library/tools/inspect-asset/resource.yaml +71 -0
  330. package/library/tools/inspect-node/resource.yaml +9 -2
  331. package/library/tools/inspect-resource/resource.yaml +16 -5
  332. package/library/tools/instantiate-scene/resource.yaml +27 -2
  333. package/library/tools/measure/resource.yaml +96 -0
  334. package/library/tools/place-adjacent/resource.yaml +113 -0
  335. package/library/tools/play/resource.yaml +15 -2
  336. package/library/tools/raycast/resource.yaml +101 -0
  337. package/library/tools/read-file/resource.yaml +36 -2
  338. package/library/tools/read-library/resource.yaml +2 -2
  339. package/library/tools/repeat-along/resource.yaml +129 -0
  340. package/library/tools/replace-node/resource.yaml +11 -5
  341. package/library/tools/scene-audit/resource.yaml +144 -0
  342. package/library/tools/screenshot/resource.yaml +13 -2
  343. package/library/tools/search-assets/resource.yaml +18 -0
  344. package/library/tools/shot-sheet/resource.yaml +110 -0
  345. package/library/tools/snap-to-surface/resource.yaml +4 -1
  346. package/library/tools/world-snapshot/resource.yaml +24 -3
  347. package/library/tools/zoom/resource.yaml +105 -0
  348. package/package.json +1 -1
  349. package/registry/generated/aliases.json +17 -3
  350. package/registry/generated/counts.json +3 -3
  351. package/registry/generated/gemini-extension.json +26 -4
  352. package/registry/generated/index.json +2154 -469
  353. package/registry/generated/marketplace.claude.json +2 -2
  354. package/registry/generated/plugin.claude.json +27 -5
  355. package/registry/generated/plugin.codex.json +28 -6
  356. package/registry/generated/plugin.cursor.json +27 -5
  357. package/registry/generated/plugin.factory.json +27 -5
  358. package/registry/generated/skills-index.md +36 -14
  359. package/registry/generated/skills-registry.json +421 -124
  360. package/registry/generated/templates-registry.json +2 -2
  361. package/library/skills/host-authoritative-state/SKILL.md +0 -332
  362. package/library/skills/host-authoritative-state/resource.yaml +0 -28
  363. package/library/skills/peer-to-peer-multiplayer/SKILL.md +0 -373
  364. package/library/skills/peer-to-peer-multiplayer/resource.yaml +0 -28
  365. package/library/skills/setup-multiplayer/SKILL.md +0 -336
  366. package/library/skills/setup-multiplayer/resource.yaml +0 -28
@@ -0,0 +1,159 @@
1
+ ---
2
+ name: combat-basics
3
+ description: "Damage in Summer Engine: hitbox and hurtbox Areas on opposing layers, a reusable Health component, damage signals, knockback, hit feedback, projectiles."
4
+ license: MIT
5
+ compatibility: [Cursor, Claude Code, Codex, Windsurf, Gemini, OpenCode]
6
+ category: gameplay-mechanics
7
+ user-invocable: false
8
+ allowed-tools: Read Grep summer_read_file summer_write_file summer_replace_text summer_add_node summer_set_prop summer_batch summer_project_setting summer_save_scene summer_get_script_errors summer_get_diagnostics
9
+ paths: ["**/*.gd", "**/*.tscn"]
10
+ ---
11
+
12
+ # Combat Basics
13
+
14
+ The Godot combat pattern is hitbox + hurtbox + health, wired by signals. Build it
15
+ component-first: the same three pieces work for player, enemies, and destructibles.
16
+
17
+ ## The layer model (set this up first)
18
+
19
+ Attacks are `Area2D`/`Area3D`, not solid bodies. A hitbox (the attack) detects a
20
+ hurtbox (the thing that can be hurt) via collision layers/masks:
21
+
22
+ | Node | on layer | masks (detects) |
23
+ |------|----------|-----------------|
24
+ | Player hurtbox | PlayerHurt | EnemyHit |
25
+ | Player hitbox (sword) | PlayerHit | EnemyHurt |
26
+ | Enemy hurtbox | EnemyHurt | PlayerHit |
27
+ | Enemy hitbox | EnemyHit | PlayerHurt |
28
+
29
+ Rule: every combat Area masks only the OPPOSING side. This is why the player's
30
+ sword never damages the player. An Area reports `area_entered` only for areas on
31
+ a layer in its OWN mask, so the hurtbox below (which listens) must mask the
32
+ opposing hitbox layer; a hurtbox with an empty mask never registers a hit.
33
+
34
+ Name the layers once so you are not counting bits by hand —
35
+ `summer_project_setting(key="layer_names/2d_physics/layer_4", value="PlayerHit")`
36
+ (use `layer_names/3d_physics/...` for 3D), one call per layer.
37
+
38
+ ## Health component (reuse everywhere)
39
+
40
+ Attach to any damageable node. It owns HP and fires signals; UI and death logic
41
+ just listen.
42
+
43
+ ```gdscript
44
+ class_name Health extends Node
45
+
46
+ signal damaged(amount: int, current: int)
47
+ signal died
48
+
49
+ @export var max_health: int = 100
50
+ var current: int
51
+
52
+ func _ready() -> void:
53
+ current = max_health
54
+
55
+ func take_damage(amount: int) -> void:
56
+ if current <= 0:
57
+ return
58
+ current = maxi(0, current - amount)
59
+ damaged.emit(amount, current)
60
+ if current == 0:
61
+ died.emit()
62
+
63
+ func heal(amount: int) -> void:
64
+ current = mini(max_health, current + amount)
65
+ ```
66
+
67
+ ## Hurtbox -> Health
68
+
69
+ The hurtbox is an Area on the body; when a hitbox overlaps it, read the hitbox's
70
+ damage and route it to the Health node.
71
+
72
+ ```gdscript
73
+ extends Area2D # Hurtbox, child of the character
74
+
75
+ @export var health_path: NodePath
76
+ @onready var health: Health = get_node(health_path)
77
+
78
+ func _ready() -> void:
79
+ area_entered.connect(_on_area_entered)
80
+
81
+ func _on_area_entered(hitbox: Area2D) -> void:
82
+ if hitbox.has_method("get_damage"):
83
+ health.take_damage(hitbox.get_damage())
84
+ ```
85
+
86
+ ## Hitbox
87
+
88
+ ```gdscript
89
+ extends Area2D # Hitbox, child of weapon or attack
90
+
91
+ @export var damage: int = 10
92
+ func get_damage() -> int:
93
+ return damage
94
+ ```
95
+
96
+ Enable the hitbox only during the active frames of a swing (toggle
97
+ `monitoring`/`monitorable` or the CollisionShape's `disabled`), driven by an
98
+ AnimationPlayer track. An always-on melee hitbox hits on touch, which feels wrong.
99
+
100
+ ## Death, knockback, feedback
101
+
102
+ - On `died`: `queue_free()`, spawn a death VFX, drop loot, `add_kill()` on your
103
+ game manager. For the player, switch to a GAME_OVER state instead of freeing.
104
+ - Knockback: push the victim `velocity = (victim.global_position -
105
+ attacker.global_position).normalized() * force`, decay it each frame.
106
+ - Every hit needs feedback or it reads as broken: a flash (`modulate` to white for
107
+ 0.05s), a damage number (floating Label), a small screen shake, a hitstop
108
+ (`Engine.time_scale = 0.05` for one frame). Silent damage feels like a no-op.
109
+
110
+ ## Projectiles (short version)
111
+
112
+ An `Area2D/3D` that moves forward and calls `take_damage` on what it hits, then
113
+ frees itself.
114
+
115
+ ```gdscript
116
+ extends Area2D # projectile
117
+
118
+ @export var speed: float = 600.0
119
+ @export var damage: int = 15
120
+ var direction: Vector2 = Vector2.RIGHT
121
+
122
+ func _ready() -> void:
123
+ body_entered.connect(_on_hit)
124
+ get_tree().create_timer(3.0).timeout.connect(queue_free) # lifetime
125
+
126
+ func _physics_process(delta: float) -> void:
127
+ position += direction * speed * delta
128
+
129
+ func _on_hit(body: Node) -> void:
130
+ if body.has_node("Health"):
131
+ body.get_node("Health").take_damage(damage)
132
+ queue_free()
133
+ ```
134
+
135
+ Homing, piercing, AoE, and pooling many bullets are in this skill's
136
+ `references/projectiles-and-aoe.md` — read it only when you need one of those.
137
+
138
+ ## Traps
139
+
140
+ - Hitbox on the wrong layer/mask = no hits or friendly fire. Verify the layer
141
+ table above before debugging the scripts.
142
+ - Two Areas with neither `monitoring` nor `monitorable` never report overlap.
143
+ - Freeing a node mid-signal can error - defer with `queue_free()` (safe), not
144
+ `free()`.
145
+ - Damaging in `_process` instead of on overlap = continuous per-frame damage.
146
+
147
+ ## Applying it in Summer Engine
148
+
149
+ - Scripts (`health.gd`, `hurtbox.gd`, `hitbox.gd`, `projectile.gd`) are files:
150
+ create with `summer_write_file(path=..., content=..., create_only=true)`,
151
+ change with `summer_replace_text`. Check each with `summer_get_script_errors`.
152
+ - Nodes (the Area, its CollisionShape, the Health child) are scene mutations:
153
+ `summer_add_node` / `summer_set_prop` with `scenePath`, or one `summer_batch`
154
+ with `AddNode` / `SetProp` ops so the scene saves once. Set `collision_layer`
155
+ and `collision_mask` as integers (bit values), not layer names.
156
+ - Prove a hit with a `RunVerification` probe (see `playtesting-a-feature`):
157
+ spawn or find one enemy, press the attack action, `report()` the enemy's
158
+ `Health.current` before and after. A static scene check cannot show that a
159
+ hit registered.
@@ -0,0 +1,100 @@
1
+ # Projectiles, AoE, and Pooling
2
+
3
+ Extends the base projectile in SKILL.md. Pick the behavior you need; they compose.
4
+
5
+ ## Homing
6
+
7
+ Steer the direction toward the nearest target each frame. Turn rate keeps it from
8
+ being unavoidable.
9
+
10
+ ```gdscript
11
+ @export var turn_rate: float = 4.0
12
+ var target: Node2D
13
+
14
+ func _physics_process(delta: float) -> void:
15
+ if is_instance_valid(target):
16
+ var desired := (target.global_position - global_position).normalized()
17
+ direction = direction.lerp(desired, turn_rate * delta).normalized()
18
+ position += direction * speed * delta
19
+ rotation = direction.angle()
20
+ ```
21
+
22
+ Find the nearest target by querying a group: iterate
23
+ `get_tree().get_nodes_in_group("enemies")` and keep the min `distance_to`. For
24
+ hundreds of enemies, cache the list and refresh every few frames, not per bullet.
25
+
26
+ ## Piercing
27
+
28
+ Do not free on first hit; count hits and track who was already hit.
29
+
30
+ ```gdscript
31
+ @export var pierce: int = 3
32
+ var _hit: Array = []
33
+
34
+ func _on_hit(body: Node) -> void:
35
+ if body in _hit:
36
+ return
37
+ _hit.append(body)
38
+ _apply_damage(body)
39
+ pierce -= 1
40
+ if pierce <= 0:
41
+ queue_free()
42
+ ```
43
+
44
+ ## Area of effect (explosion)
45
+
46
+ Spawn an Area with a large CollisionShape for one frame, damage everything
47
+ overlapping, then free. Scale damage by distance for a shockwave feel.
48
+
49
+ ```gdscript
50
+ func explode() -> void:
51
+ for body in $Blast.get_overlapping_bodies():
52
+ if body.has_node("Health"):
53
+ var t := 1.0 - global_position.distance_to(body.global_position) / radius
54
+ body.get_node("Health").take_damage(int(max_damage * maxf(t, 0.2)))
55
+ spawn_vfx()
56
+ queue_free()
57
+ ```
58
+
59
+ Ground DOT (burning patch): an Area that ticks damage on a `Timer.timeout` to
60
+ bodies currently inside it, for a lifetime, then frees.
61
+
62
+ ## Object pooling (many projectiles)
63
+
64
+ Instancing and freeing hundreds of bullets per second stutters. Reuse a fixed pool.
65
+
66
+ ```gdscript
67
+ extends Node2D # BulletPool autoload or level node
68
+
69
+ @export var bullet_scene: PackedScene
70
+ @export var pool_size: int = 200
71
+ var _pool: Array[Node2D] = []
72
+ var _next: int = 0
73
+
74
+ func _ready() -> void:
75
+ for i in pool_size:
76
+ var b := bullet_scene.instantiate()
77
+ b.set_process(false)
78
+ b.hide()
79
+ add_child(b)
80
+ _pool.append(b)
81
+
82
+ func fire(pos: Vector2, dir: Vector2) -> void:
83
+ var b := _pool[_next]
84
+ _next = (_next + 1) % pool_size
85
+ b.global_position = pos
86
+ b.direction = dir
87
+ b.set_process(true)
88
+ b.show()
89
+ # bullet hides + set_process(false) instead of queue_free on hit/lifetime
90
+ ```
91
+
92
+ Deactivate (hide + `set_process(false)`) instead of freeing; the pool recycles the
93
+ oldest. This is how survivors-style games sustain thousands of projectiles.
94
+
95
+ ## Traps
96
+
97
+ - Homing with no turn cap = undodgeable and unfun. Cap `turn_rate`.
98
+ - Pooled bullets that `queue_free()` defeat the pool - hide and disable instead.
99
+ - AoE that reads overlaps in `_process` re-damages every frame; do it once.
100
+ - Distance-scaled damage with no floor (`maxf(t, 0.2)`) makes edges deal 0.
@@ -0,0 +1,34 @@
1
+ id: skill/combat-basics
2
+ kind: skill
3
+ version: 1.0.0
4
+ summary: "Damage in Summer Engine: hitbox and hurtbox Areas on opposing layers, a reusable Health component, damage signals, knockback, hit feedback, projectiles."
5
+ use_when:
6
+ - adding attacks, health and damage, or enemies that can be hit and hit back
7
+ - adding projectiles or bullets — homing, piercing, area-of-effect, or pooling hundreds of them
8
+ - wiring death and respawn, or debugging hits that never land or friendly fire
9
+ do_not_use_when:
10
+ - auto-fire weapons that over-commit or overkill targets — that is the pending-damage pattern in auto-fire-targeting
11
+ - hits work but feel weak or floaty — tune the feedback layer with game-feel or debugging-game-feel
12
+ facets:
13
+ lifecycle:
14
+ - build
15
+ domains:
16
+ - gameplay
17
+ - scripting
18
+ - game-design
19
+ modalities:
20
+ - scripts
21
+ - scenes
22
+ compatibility:
23
+ engine: ">=4.6"
24
+ related:
25
+ skills:
26
+ - skill/make-game
27
+ - skill/character-movement
28
+ - skill/game-feel
29
+ - skill/auto-fire-targeting
30
+ - skill/design-npc
31
+ source: official
32
+ license: MIT
33
+ status: preview
34
+ recommended: false
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: concept-art
3
- description: Use when the user is exploring art direction — wants 3-4 rough variants of a character, environment, or prop to pick a vibe before committing to a final asset. Generates a batch of evocative concept images, not finals. Trigger on "concept art", "art direction", "explore the look", "give me some variants", "what could this character look like", "mood board", "rough sketches".
3
+ description: "Explore art direction with 3-4 rough concept variants of a character, environment, or prop to pick a vibe before committing to a final asset."
4
4
  license: MIT
5
5
  compatibility: [Cursor, Claude Code, Windsurf, Codex]
6
6
  category: 2d-assets
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: create-asset-sheet
3
- description: Use when the user wants to generate a pack of 2D game assets from a single prompt — a tile sheet, UI kit, menu screen, character pack, or biome set. The skill plans the prompt, generates a coherent sheet, removes the background, vision-detects each item, classifies it, and saves as a single pack ArtAsset. Trigger on "asset sheet", "asset pack", "tile sheet", "tileset", "UI kit", "asset pack for", "make me a sheet of", "generate a bunch of <category> assets".
3
+ description: "Generate a pack of 2D game assets from one prompt — tile sheet, UI kit, character pack, or biome set — sliced, classified, and saved as one pack ArtAsset."
4
4
  license: MIT
5
5
  compatibility: [Cursor, Claude Code, Windsurf, Codex]
6
6
  category: 2d-assets
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: debug
3
- description: Use when the user reports a bug, crash, error, or unexpected behavior in a Summer project, before making code or scene changes. Runs a disciplined script-errors, console, debugger, hypothesis, fix, and verify loop. Trigger on "debug", "crash", "error", "broken", "not working", "freezes", "wrong".
3
+ description: "Disciplined bug/crash/error loop for Summer projects — script errors, console, debugger, hypothesis, fix, verify — before making code or scene changes."
4
4
  license: MIT
5
5
  compatibility: [Cursor, Claude Code, Codex, Windsurf, Gemini, OpenCode]
6
6
  category: debugging
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: debugging-game-feel
3
- description: Use when a gameplay feature works correctly but feels wrong — floaty jumps, mushy combat, sluggish camera, weightless impacts. Different from logical bug debugging; the bug is subjective and lives in tuning, timing, and feedback layers.
3
+ description: "Debug features that work but feel wrong — floaty jumps, mushy combat, sluggish camera — subjective bugs living in tuning, timing, and feedback layers."
4
4
  ---
5
5
 
6
6
  # Debugging Game Feel
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: design-level
3
- description: Use when designing a single level — layout, pacing, encounters, secrets, reward gating. Outputs a level design doc and a concrete node-tree skeleton for `summer_create_scene`. Trigger on "design a level", "design level 1", "tutorial level", "boss arena", "design the encounter", "make a level layout".
3
+ description: "Design a single level — layout, pacing, encounters, secrets, reward gating — outputs a level design doc and a node-tree skeleton for summer_create_scene."
4
4
  license: MIT
5
5
  compatibility: [Cursor, Claude Code, Windsurf, Codex]
6
6
  category: level-design
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: design-mechanic
3
- description: Use when designing one specific game mechanic in detail — input, response, feedback, failure modes, depth, tunables. Outputs a design doc and a scaffolding-ready node-graph sketch + GDScript stub. Trigger on "design a mechanic", "how should X work", "design the parry", "design the dash", "design the inventory", "the loop is broken".
3
+ description: "Design one game mechanic in detail — input, response, feedback, failure modes, depth, tunables — outputs a design doc, node-graph sketch, GDScript stub."
4
4
  license: MIT
5
5
  compatibility: [Cursor, Claude Code, Windsurf, Codex]
6
6
  category: gameplay-mechanics
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: design-npc
3
- description: Use when the user wants to design an enemy, NPC, boss, companion, civilian, or wave-spawned mob's behavior. Walks perception, personality knobs, intent layer, action state machine, telegraphs, defeat handling, and group emergence — outputs a state-machine GDScript stub plus the recommended node tree. Trigger on "enemy", "NPC", "boss", "companion", "AI", "behavior", "mob", "perception", "design enemy".
3
+ description: "Design enemy/NPC/boss/companion behavior — perception, personality, intent, action state machine, telegraphs — outputs a GDScript stub plus node tree."
4
4
  license: MIT
5
5
  compatibility: [Cursor, Claude Code, Windsurf, Codex]
6
6
  category: ai-and-npcs
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: diagnosing-perf-regressions
3
- description: Use when frame rate, frame time, or load time has gotten worse since a known-good state — "it used to run at 60, now it's at 30." Focused on finding the cause of a regression, not general performance tuning.
3
+ description: "Find why frame rate, frame time, or load time got worse since a known-good state — regression hunting, not general performance tuning."
4
4
  ---
5
5
 
6
6
  # Diagnosing Performance Regressions
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: dispatching-parallel-agents
3
- description: Use when facing 2+ independent tasks that can be worked on without shared state or sequential dependencies
3
+ description: "Work 2+ independent tasks in parallel when they share no state and have no sequential dependencies."
4
4
  ---
5
5
 
6
6
  # Dispatching Parallel Agents
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: driving-the-editor-ui
3
- description: Use when a task is an editor-workflow step a human would do with the mouse — open Project Settings or a dock, switch the 2D/3D/Script main screen, toggle a panel, clear a dialog that is blocking the editor, read what a dock shows — and when deciding whether a request is UI work or scene work. Drives the editor by NAME through summer_ui_actions, reads it as structure through summer_ui_tree, activates the long tail by path through summer_ui_activate, and treats summer_ui_screenshot as the pixels-last fallback. Preview — the ops ship with a follow-up engine build.
3
+ description: "Drive the editor UI by name: invoke actions, clear blocking dialogs, switch the main screen, read a dock — and route scene work to the scene tools instead."
4
4
  ---
5
5
 
6
6
  # Driving the Editor UI
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: environment-kit
3
- description: Use when generating a modular environment kit — wall pieces, floor tiles, pillars, doors, arches, corner blocks that snap together to form a level. Multiple meshes that share a visual style. Trigger on "build a dungeon kit", "modular walls", "level kit", "tileset", "interior pieces", "snap-together pieces", "make a kit for the temple".
3
+ description: "Generate a modular environment kit — wall pieces, floor tiles, pillars, doors, arches, corners — snap-together meshes sharing one visual style."
4
4
  license: MIT
5
5
  compatibility: [Cursor, Claude Code, Windsurf, Codex]
6
6
  category: 3d-assets
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: export-and-ship
3
- description: Use when the user wants to assess or prepare a Summer game export. Inventories the templates and targets actually available in the installed Summer Engine build, validates release assets and configuration, and produces only locally supported builds after approval. It does not publish, upload, host, or submit a game. Trigger on "export", "ship", "release", "build", "Steam", "itch", "HTML5", "iOS", "Android", "submit", "publish".
3
+ description: "Assess and prepare a game export: inventory installed templates and targets, validate release assets and config, produce supported builds after approval."
4
4
  license: MIT
5
5
  compatibility: [Cursor, Claude Code, Windsurf, Codex]
6
6
  category: deployment
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: fabricating-assets
3
- description: Use when an asset needs Blender's mesh tooling rather than generation or a library download — a modular kit with exact dimensions and snapping, VFX meshes (shatter fragments, curve sweeps, LOD chains), or decimating/UV-unwrapping/baking a generated model — and you are about to write a bpy script for summer_fabricate_3d. Covers the route decision (fabricate vs generate vs import), the bpy rules that survive glTF export, the script -> import -> snapshot -> screenshot loop, every failure_reason and what to do about it, and the licensing shape (the user's own Blender, never bundled).
3
+ description: "Fabricate meshes with a bpy script in the user's own Blender (summer_fabricate_3d) — kits with exact dimensions, VFX meshes, post-processing generated models."
4
4
  ---
5
5
 
6
6
  # Fabricating Assets
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: facial-and-lipsync
3
- description: Use when the user has a voice-over (or wants one) and needs the character's mouth to actually move with the words — phoneme extraction from audio, mapping to viseme blendshapes, plus emotional facial expressions (smile, frown, surprise). Trigger on "lipsync", "lip sync", "talking head", "phonemes", "viseme", "facial animation", "blendshapes", "make him talk", "dialogue animation".
3
+ description: "Make a character's mouth move with a voice-over — phoneme extraction from audio, viseme blendshape mapping, and emotional facial expressions."
4
4
  license: MIT
5
5
  compatibility: [Cursor, Claude Code, Windsurf, Codex]
6
6
  category: animation
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: fps-controller
3
- description: Use when building an FPS, first-person movement, or a 3D character that walks, jumps, and reacts to external forces — production-quality first-person controller with WASD, mouse look, jump, coyote time, jump buffering, air control, and external-velocity handling. Trigger on "FPS", "first-person", "WASD", "character controller", "mouse look", "player movement", "jump".
3
+ description: "Production-quality first-person controller — WASD, mouse look, jump, coyote time, jump buffering, air control, and external-velocity handling."
4
4
  license: MIT
5
5
  compatibility: [Cursor, Claude Code, Windsurf, Codex]
6
6
  category: character-controllers
@@ -295,12 +295,14 @@ The skeleton doesn't change — only the `@export` defaults. That's the point of
295
295
 
296
296
  ## Networking Note
297
297
 
298
- For multiplayer, two viable patterns:
299
-
300
- 1. **Server-authoritative (the open-source-friendly path):** gate physics with `if not multiplayer.is_server(): return` for non-local players, sync `global_position` + `velocity` via `MultiplayerSynchronizer`, send input via RPC. This skeleton is compatible — wrap the `_physics_process` body in a `is_local_player` check and add a separate `apply_remote_player_physics` that interpolates from network snapshots.
301
- 2. **Custom action protocol (the shipped-game path):** the same skeleton runs on every client; one peer is "host" and broadcasts authoritative state at a fixed interval. Out of scope for this skill — see the multiplayer-and-networking category.
302
-
303
- The external-velocity accumulator pattern is a multiplayer-correctness gift either way: explosions and knockbacks happen on the host, the impulse is RPC'd to the affected player, and the client's controller absorbs it without fighting local input. That's why the subtract-previous-contribution trick at the top of `_physics_process` exists — it is the single fix that prevents knockback drift in netcode.
298
+ In a Summer multiplayer game this controller stays on the player's own
299
+ client: it moves the local body, and the client publishes the resulting pose
300
+ for the authority to check (`multiplayer-movement`). Other players' bodies
301
+ are drawn from their published poses, never simulated locally. Never sync it
302
+ with `@rpc` or `MultiplayerSynchronizer`. Knockback, explosions and jump pads
303
+ that the authority decides arrive as an authority `reset()` of the pose, or
304
+ as State the owner applies to `external_velocity`; the external-velocity
305
+ accumulator above absorbs them without fighting input.
304
306
 
305
307
  ## Beyond This Skeleton
306
308
 
@@ -1,6 +1,6 @@
1
1
  id: skill/fps-controller
2
2
  kind: skill
3
- version: 1.0.3
3
+ version: 1.0.4
4
4
  summary: Production-quality first-person controller — WASD, mouse look, jump, coyote time, jump buffering, air control, and external-velocity handling.
5
5
  use_when:
6
6
  - building an FPS, first-person movement, or a 3D character that walks, jumps, and reacts to external forces
@@ -17,6 +17,9 @@ facets:
17
17
  compatibility:
18
18
  engine: ">=4.6"
19
19
  related:
20
+ skills:
21
+ - skill/character-movement
22
+ - skill/camera-rigs
20
23
  # Legacy frontmatter declared template-id: template-3d-fps (no such repo exists);
21
24
  # mapped to the real repo template-3d-fps-old-school.
22
25
  templates:
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: game-feel
3
- description: Use when a Summer game "feels flat", "lacks impact", "needs juice", or "needs punch", or the user asks for hit feedback, screen shake, camera shake, audio ducking, or general game feel. Walks through Summer Engine's hit-flash, trauma camera shake, and audio-ducking stack, wired so one hit fires all three. Trigger on "vfx", "juice", "punch", "feels flat", "game feel", "hit flash", "screen shake", "camera shake", "ducking".
3
+ description: "Add juice: hit-flash, trauma-based camera shake, and audio ducking wired so one hit fires all three — for games that feel flat or lack impact."
4
4
  license: MIT
5
5
  compatibility: [Cursor, Claude Code, Windsurf, Codex]
6
6
  category: visual-effects
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: gameskill
3
- description: Use when finishing a game-development session and you want to capture what you just learned as a reusable skill so the next session starts smarter. Trigger on "gameskill", "/gameskill", "capture learnings", "save to skills".
3
+ description: "Capture what a game-dev session just learned as a reusable skill (project, user or Summer library) so the next session starts smarter."
4
4
  license: MIT
5
5
  compatibility: [Cursor, Claude Code, Windsurf, Codex]
6
6
  category: workflow
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: gdscript-patterns
3
- description: Use when writing or refactoring GDScript — type hints, signals, exports, onready, lifecycle methods (`_ready` vs `_process` vs `_physics_process`), `get_node` vs `$NodePath`, naming conventions. Trigger on "GDScript", "script", "signals", "exports", "onready", "_ready", "_process".
3
+ description: "GDScript conventions — type hints, signals, exports, onready, lifecycle methods, get_node vs $NodePath, naming."
4
4
  license: MIT
5
5
  compatibility: [Cursor, Claude Code, Windsurf, Codex]
6
6
  category: scripting-patterns
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: generate-motion
3
- description: Use when the user needs an animation clip on a rigged character — idle/walk/run/attack from the curated Meshy library. Picks the right curated motion, attaches the resulting clip to an AnimationPlayer. Trigger on "animation", "animate", "idle", "walk", "run", "attack animation", "motion", "mocap", "dance", "death animation".
3
+ description: "Attach an animation clip to a rigged character from the curated Meshy motion library — idle, walk, run, attack — wired via AnimationPlayer."
4
4
  license: MIT
5
5
  compatibility: [Cursor, Claude Code, Windsurf, Codex]
6
6
  category: animation
@@ -15,10 +15,10 @@ Picks a clip from a **curated mocap library** by name and wires it onto a Meshy-
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
 
18
- > **Custom prompt-driven motion** (e.g. "drops to one knee, draws bow") is on
19
- > the roadmap but not shipped yet. For one-off signature moves not on the
20
- > curated list, fall back to hand-authoring in Summer Engine or importing from
21
- > Mixamo. See the Edge cases section.
18
+ > **Custom or non-humanoid motion** (e.g. "drops to one knee, draws bow", a
19
+ > nodding flower, a creature) goes to the `text-to-motion` skill
20
+ > (`backend: "text-to-motion"`) when the server has it enabled; otherwise fall
21
+ > back to hand-authoring in Summer Engine or importing from Mixamo.
22
22
 
23
23
  ## Web Chat / Public Orchestrator Equivalent
24
24
 
@@ -50,7 +50,7 @@ After animation jobs complete, import the rig plus child animation assets togeth
50
50
  - The user wants facial / lipsync animation — that's `facial-and-lipsync`.
51
51
  - The mesh isn't rigged. Rig first; never call `summer_generate_motion` on a static `.glb`.
52
52
  - The user wants procedural look-at, IK, foot placement — that's `procedural-animation`.
53
- - The user described a **custom signature move** that isn't on the curated list. Today, route to the manual-authoring fallback below.
53
+ - The user described a **custom signature move** that isn't on the curated list — use `text-to-motion`; if the server answers `backend_unavailable`, use the manual-authoring fallback below.
54
54
 
55
55
  ## Steps
56
56
 
@@ -71,7 +71,7 @@ The result must include `rigAssetId: <id>` on a Meshy rig. If it shows `rigAsset
71
71
  ```
72
72
  summer_generate_motion(
73
73
  rigAssetId: "<id>",
74
- backend: "meshy-library", // only option today
74
+ backend: "meshy-library", // curated library (default)
75
75
  motionName: "run" // exact name from the curated list — see Reference card
76
76
  )
77
77
  ```
@@ -154,11 +154,11 @@ have actually seen, or route to the manual-authoring fallback.
154
154
  ## Edge cases
155
155
 
156
156
  - **Custom signature move** (e.g. "drops to one knee, draws bow"). The custom
157
- prompt-driven backend is on the roadmap but not shipped today. Workarounds:
157
+ prompt-driven route is `text-to-motion`. If it is unavailable, workarounds:
158
158
  hand-author the clip in Summer Engine's animation panel, import a licensed
159
159
  clip as an `AnimationLibrary`, or compose curated clips in an
160
160
  `AnimationTree` OneShot blend.
161
- - **Quadruped rig.** Meshy library is humanoid-only. For quadrupeds, hand-author or import a Mixamo-style external library (out of scope for this skill).
161
+ - **Quadruped rig.** Meshy library is humanoid-only. For quadrupeds and other non-humanoid rigs use `text-to-motion`, or hand-author / import an external library.
162
162
  - **Character is < 1m tall (child / dwarf).** Library clips assume a ~1.8m humanoid. Apply the clip; the proportions retarget but stride length looks long. Either accept it or tune `playback_speed` on the AnimationPlayer track.
163
163
  - **Character has wings / tail.** The library ignores the extra bones — they sag. Hand-author additive overlays for the extra bones, or accept the visual hit.
164
164
 
@@ -1,6 +1,6 @@
1
1
  id: skill/generate-motion
2
2
  kind: skill
3
- version: 1.0.3
3
+ version: 1.0.4
4
4
  summary: Attach an animation clip to a rigged character from the curated Meshy motion library — idle, walk, run, attack — wired via AnimationPlayer.
5
5
  use_when:
6
6
  - the user needs an animation clip on a rigged character — idle/walk/run/attack from the curated Meshy library
@@ -24,6 +24,7 @@ related:
24
24
  - skill/facial-and-lipsync
25
25
  - skill/procedural-animation
26
26
  - skill/retarget
27
+ - skill/text-to-motion
27
28
  - skill/asset-strategy
28
29
  - skill/fps-controller
29
30
  source: official
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: godogen-visual-proof-game-generation
3
- description: "Use when adopting Godogen's thin-runtime autonomous game generation and its 'proof over claims' visual QC loop for SummerEngine: capture frames from the running engine, let the host agent self-verify against the brief, and drive bounded fix iterations until a proof recording closes the run."
3
+ description: "Godogen-style game generation with a visual QC loop — capture frames from the running game, self-verify against the brief, bounded fix rounds, proof clip."
4
4
  license: MIT
5
5
  category: workflow
6
6
  tags:
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: headless-scripting
3
- description: Use when a Summer project needs an operation no MCP tool exposes, such as baking a navmesh, generating collision shapes, authoring an Animation, building a TileSet, re-importing assets after file changes, or preparing a supported local export. Runs a GDScript file against Summer Engine from the shell. Also use when a plan involves "run it headless and screenshot it", which does not work and this skill explains why.
3
+ description: "Run a GDScript file against Summer Engine from the shell for operations no MCP tool exposes — navmesh baking, collision shapes, TileSets, re-imports."
4
4
  ---
5
5
 
6
6
  # Headless Scripting