summer-engine 1.5.0 → 2.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 (101) hide show
  1. package/{marketplace.json → .claude-plugin/marketplace.json} +3 -3
  2. package/.claude-plugin/plugin.json +52 -11
  3. package/.codex-plugin/plugin.json +69 -8
  4. package/.cursor-plugin/plugin.json +53 -12
  5. package/.factory-plugin/plugin.json +20 -0
  6. package/.opencode/INSTALL.md +75 -0
  7. package/.opencode/plugins/summer.js +9 -6
  8. package/AGENTS.md +51 -0
  9. package/CHANGELOG.md +31 -1
  10. package/CLAUDE.md +5 -0
  11. package/GEMINI.md +56 -0
  12. package/README.md +409 -80
  13. package/_persona/summer/SKILL.md +113 -0
  14. package/dist/bin/summer.js +0 -0
  15. package/dist/commands/assets.d.ts +2 -0
  16. package/dist/commands/assets.js +189 -0
  17. package/dist/commands/create.js +55 -17
  18. package/dist/commands/debug.d.ts +2 -0
  19. package/dist/commands/debug.js +127 -0
  20. package/dist/commands/install.js +2 -2
  21. package/dist/commands/list.js +24 -5
  22. package/dist/commands/project.d.ts +2 -0
  23. package/dist/commands/project.js +170 -0
  24. package/dist/commands/scene.d.ts +2 -0
  25. package/dist/commands/scene.js +290 -0
  26. package/dist/lib/banner.js +2 -2
  27. package/dist/lib/log-filters.d.ts +53 -0
  28. package/dist/lib/log-filters.js +130 -0
  29. package/dist/lib/plugin-manifests.test.d.ts +1 -0
  30. package/dist/lib/plugin-manifests.test.js +134 -0
  31. package/dist/lib/remote-templates.d.ts +25 -0
  32. package/dist/lib/remote-templates.js +86 -0
  33. package/dist/lib/skills-registry.d.ts +283 -3
  34. package/dist/lib/skills-registry.js +522 -2
  35. package/dist/lib/telemetry.d.ts +13 -0
  36. package/dist/lib/telemetry.js +63 -0
  37. package/dist/lib/with-engine.d.ts +14 -0
  38. package/dist/lib/with-engine.js +109 -0
  39. package/dist/mcp/tools/asset-tools.js +12 -13
  40. package/dist/mcp/tools/debug-tools.js +32 -9
  41. package/dist/mcp/tools/generate-tools.js +101 -0
  42. package/dist/mcp/tools/with-engine.js +4 -0
  43. package/gemini-extension.json +2 -2
  44. package/hooks/pre-commit-doctor.sh +0 -0
  45. package/hooks/run-hook.cmd +0 -0
  46. package/hooks/session-start.sh +0 -0
  47. package/package.json +11 -5
  48. package/skills/2d-assets/character-portrait/SKILL.md +196 -0
  49. package/skills/2d-assets/concept-art/SKILL.md +152 -0
  50. package/skills/2d-assets/pixel-art/SKILL.md +180 -0
  51. package/skills/2d-assets/skybox-panorama/SKILL.md +207 -0
  52. package/skills/2d-assets/sprite-sheet/SKILL.md +239 -0
  53. package/skills/2d-assets/tileable-texture/SKILL.md +205 -0
  54. package/skills/2d-assets/ui-graphics/SKILL.md +210 -0
  55. package/skills/3d-assets/character-model/SKILL.md +225 -0
  56. package/skills/3d-assets/environment-kit/SKILL.md +164 -0
  57. package/skills/3d-assets/organic-model/SKILL.md +192 -0
  58. package/skills/3d-assets/prop-model/SKILL.md +133 -0
  59. package/skills/3d-assets/vehicle-model/SKILL.md +202 -0
  60. package/skills/README.md +1 -1
  61. package/skills/_meta/skill-create/SKILL.md +1 -1
  62. package/skills/_meta/skill-improve/SKILL.md +1 -1
  63. package/skills/_meta/skill-test/SKILL.md +1 -1
  64. package/skills/_meta/using-summer/SKILL.md +130 -0
  65. package/skills/ai-and-npcs/design-npc/SKILL.md +3 -1
  66. package/skills/animation/animation-tree/SKILL.md +260 -0
  67. package/skills/animation/facial-and-lipsync/SKILL.md +282 -0
  68. package/skills/animation/generate-motion/SKILL.md +129 -0
  69. package/skills/animation/procedural-animation/SKILL.md +234 -0
  70. package/skills/animation/retarget/SKILL.md +172 -0
  71. package/skills/asset-pipeline/asset-strategy/SKILL.md +102 -212
  72. package/skills/audio/adaptive-music/SKILL.md +326 -0
  73. package/skills/audio/ambient-bed/SKILL.md +278 -0
  74. package/skills/audio/music-track/SKILL.md +268 -0
  75. package/skills/audio/sound-effect/SKILL.md +237 -0
  76. package/skills/audio/voice-line/SKILL.md +253 -0
  77. package/skills/catalog.yaml +266 -5
  78. package/skills/character-controllers/fps-controller/SKILL.md +1 -1
  79. package/skills/debugging/debug/SKILL.md +102 -82
  80. package/skills/rendering-and-lighting/3d-lighting/SKILL.md +1 -1
  81. package/skills/scene-and-project/browse-templates/SKILL.md +105 -0
  82. package/skills/scene-and-project/make-game/SKILL.md +159 -346
  83. package/skills/scene-and-project/new-project/SKILL.md +106 -0
  84. package/skills/scene-and-project/scene-composition/SKILL.md +1 -1
  85. package/skills/scripting-patterns/gdscript-patterns/SKILL.md +1 -1
  86. package/skills/ui-and-ux/ui-basics/SKILL.md +1 -1
  87. package/skills/video/animated-loop/SKILL.md +200 -0
  88. package/skills/video/cinematic-cutscene/SKILL.md +204 -0
  89. package/skills/video/trailer-shot/SKILL.md +203 -0
  90. package/skills/visual-effects/_building-blocks/additive-billboard-particles.md +28 -0
  91. package/skills/visual-effects/_building-blocks/noise-3d-fbm.gdshaderinc +45 -0
  92. package/skills/visual-effects/_building-blocks/trauma-shake-snippet.md +51 -0
  93. package/skills/visual-effects/{vfx → game-feel}/SKILL.md +1 -1
  94. package/skills/visual-effects/recipes/dissolve/SKILL.md +349 -0
  95. package/skills/visual-effects/recipes/fire/SKILL.md +387 -0
  96. package/skills/visual-effects/recipes/hit-spark/SKILL.md +330 -0
  97. package/skills/visual-effects/recipes/lightning/SKILL.md +372 -0
  98. package/skills/visual-effects/recipes/magic-glow/SKILL.md +377 -0
  99. package/skills/visual-effects/recipes/muzzle-flash/SKILL.md +326 -0
  100. package/skills/visual-effects/recipes/smoke/SKILL.md +381 -0
  101. package/skills/visual-effects/recipes/water-ripple/SKILL.md +340 -0
@@ -0,0 +1,133 @@
1
+ ---
2
+ name: prop-model
3
+ description: Use when generating a single static 3D prop — sword, barrel, chest, lantern, throne, statue, crate, key, potion, banner. One isolated object, no rigging, wired into the scene as a MeshInstance3D. Trigger on "make a sword", "generate a chest", "I need a barrel", "add a lantern model", "give me a treasure prop", "create a statue".
4
+ license: MIT
5
+ compatibility: [Cursor, Claude Code, Windsurf, Codex]
6
+ category: 3d-assets
7
+ user-invocable: true
8
+ allowed-tools: Read Grep summer_search_assets summer_generate_3d summer_generate_image summer_import_from_url summer_add_node summer_set_prop summer_inspect_node summer_get_scene_tree summer_save_scene
9
+ paths: ["assets/models/**", "**/*.tscn", "**/*.gd"]
10
+ ---
11
+
12
+ # Prop Model — Generate One Static 3D Prop and Wire It
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/`.
15
+
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
+
18
+ ## When to use
19
+
20
+ - "Make me a treasure chest."
21
+ - "Generate a viking axe."
22
+ - "I need a wooden barrel for the cellar."
23
+ - "Create a sci-fi crate."
24
+ - Any single, static, non-character, non-modular object the player will see in 3D space.
25
+
26
+ ## When NOT to use
27
+
28
+ - Character / humanoid → `summer:3d-assets/character-model` (needs T-pose + rig pass).
29
+ - A set of matching pieces (walls, floors, doors, pillars) → `summer:3d-assets/environment-kit` (style-locked family).
30
+ - Trees, rocks, foliage → `summer:3d-assets/organic-model` (organic forgives AI artifacts; cheaper recipe).
31
+ - Cars, ships, mechs → `summer:3d-assets/vehicle-model` (hard-surface specifics).
32
+ - Walls / floors / repeating geometry → `summer:asset-pipeline/asset-strategy` Pipeline 2 (textures + CSG).
33
+ - "I just need a placeholder" → propose a primitive (`BoxMesh` / `CylinderMesh`) instead. Generation is metered.
34
+
35
+ ## Steps
36
+
37
+ ### 1. Search before generating
38
+
39
+ ```
40
+ summer_search_assets(query="<prop name>", filter={ kind: "model" })
41
+ ```
42
+
43
+ If a fitting model exists, propose reuse:
44
+
45
+ > Found `assets/models/treasure_chest_01.glb`. Reuse this, or generate fresh?
46
+
47
+ ### 2. Pick a polycount target
48
+
49
+ | Use case | Tris | Pass via |
50
+ |---|---|---|
51
+ | Hero prop (sword on hip, key item) | 3k–8k | `options: { target_polycount: 5000 }` |
52
+ | Background prop (crate, barrel, sack) | 200–800 | `options: { target_polycount: 600 }` |
53
+ | Mid-range interactive (chest, lantern) | 1k–3k | `options: { target_polycount: 2000 }` |
54
+ | Cinematic showcase (throne, statue) | 10k–30k | `options: { target_polycount: 20000 }` |
55
+
56
+ Default if you don't pass it: provider picks (~10k–30k). For most game-world props, that's overkill — pass a target.
57
+
58
+ ### 3. Build the prompt
59
+
60
+ Pattern: `<object> + <material> + <silhouette/details> + isolated-object suffix`.
61
+
62
+ | Goal | Prompt that works |
63
+ |---|---|
64
+ | Treasure chest | `A wooden treasure chest with iron bands and a heavy padlock, lid slightly ajar, gold coins spilling. Game asset, centered, stylized, white background, isolated object.` |
65
+ | Viking axe | `A two-handed viking battle axe, weathered iron head with rune etchings, leather-wrapped wooden haft. Game asset, centered, stylized, white background, isolated object.` |
66
+ | Lantern | `A medieval brass lantern with stained glass panels and a hooked handle, candle inside. Game asset, centered, stylized, white background, isolated object.` |
67
+ | Throne | `An ornate stone throne carved with serpent motifs, red velvet cushion, tall pointed back. Game asset, centered, stylized, white background, isolated object.` |
68
+ | Sci-fi crate | `A weathered sci-fi cargo crate, metal panels with yellow hazard stripes, recessed handles. Game asset, centered, stylized, white background, isolated object.` |
69
+ | Potion bottle | `A glass potion bottle with a cork stopper, glowing purple liquid inside, leather strap around the neck. Game asset, centered, stylized, white background, isolated object.` |
70
+
71
+ The `isolated object` and `white background` clauses are load-bearing — without them you get scene context (table, ground plane) baked into the mesh.
72
+
73
+ ### 4. Confirm and call
74
+
75
+ > About to generate `viking_axe` via `hunyuan`, target ~5k tris. ~$0.50, ~60s. OK?
76
+
77
+ ```
78
+ summer_generate_3d(
79
+ prompt="A two-handed viking battle axe, weathered iron head with rune etchings, leather-wrapped wooden haft. Game asset, centered, stylized, white background, isolated object.",
80
+ model="hunyuan",
81
+ options={ target_polycount: 5000 },
82
+ wait=true
83
+ )
84
+ ```
85
+
86
+ Returns `{ asset: { fileUrl }, ... }`.
87
+
88
+ ### 5. Import and wire
89
+
90
+ ```
91
+ summer_import_from_url(url="<fileUrl>", path="res://assets/models/viking_axe.glb")
92
+ summer_add_node(parent="./World/Props", type="MeshInstance3D", name="VikingAxe")
93
+ summer_set_prop(path="./World/Props/VikingAxe", property="mesh", value="res://assets/models/viking_axe.glb")
94
+ summer_save_scene
95
+ ```
96
+
97
+ For interactive props (chest the player opens, lantern the player picks up), wrap the MeshInstance3D in a `StaticBody3D` (or `RigidBody3D` for physics props) with a `CollisionShape3D` sibling — see `summer:scene-composition` for the parent-shape pattern.
98
+
99
+ ## Anti-patterns
100
+
101
+ - **Scene context in the prompt.** "A sword lying on a wooden table" → the table becomes geometry. Always say `isolated object`.
102
+ - **Multi-object prompts.** "A sword and a shield" → fused single mesh. Generate separately.
103
+ - **Skipping `target_polycount` for background props.** A 30k-tri barrel in the background tanks frame rate when the level has 50 of them.
104
+ - **Forgetting to import.** `fileUrl` from `summer_generate_3d` is a remote URL — you MUST `summer_import_from_url` before referencing it as `res://...`.
105
+ - **Generating before searching.** Reuse beats regenerate every time.
106
+ - **Picking `meshy` by default.** It's legacy. `hunyuan` is better; `trellis` is faster.
107
+
108
+ ## Edge cases
109
+
110
+ - **Transparent objects (glass, ice, gem).** AI 3D gen makes these opaque. Generate the mesh, then assign a `StandardMaterial3D` with `transparency = ALPHA` and a low `albedo_color.a` in the editor.
111
+ - **Long thin props (spear, staff, banner pole).** Hunyuan sometimes thickens the shaft. Trellis handles thin geometry better — try it as the second attempt.
112
+ - **Concave interior (open chest, hollow vase).** Specify "lid open" or "hollow inside" — Hunyuan defaults to closed solids.
113
+ - **Symmetrical prop comes back asymmetric.** Add `symmetric, mirrored` to the prompt and regenerate.
114
+
115
+ ## Fallback (no MCP)
116
+
117
+ The user can run the same prompt at the Summer dashboard (or directly via the Hunyuan / Trellis web UIs), download the `.glb`, drop it into `res://assets/models/`, and Godot's import dock will pick it up. Then add a MeshInstance3D manually in the Godot editor and assign the mesh.
118
+
119
+ ## Handoff
120
+
121
+ After the prop is wired:
122
+
123
+ > `viking_axe.glb` imported and placed at `./World/Props/VikingAxe`. Next:
124
+ > - For physics (player can knock it over), wrap in `RigidBody3D` + `CollisionShape3D` — see `summer:scene-composition`.
125
+ > - For pickup interaction, see `summer:design-mechanic` for the pickup pattern.
126
+ > - For matching props in the same style (chest → barrel → crate as a treasure-room kit), use `summer:3d-assets/environment-kit` with this prop as the style anchor.
127
+
128
+ ## See also
129
+
130
+ - `summer:asset-pipeline/asset-strategy` — the meta-router that decides between this skill and Pipeline 2 (textures).
131
+ - `summer:3d-assets/character-model` — for humanoids.
132
+ - `summer:3d-assets/environment-kit` — for style-locked sets.
133
+ - `_shared/mcp-tools-reference.md` — `summer_generate_3d` parameter schema.
@@ -0,0 +1,202 @@
1
+ ---
2
+ name: vehicle-model
3
+ description: Use when generating a hard-surface vehicle — car, motorcycle, spaceship, hover bike, boat, mech, tank, helicopter. Static mesh, optional secondary detail-texture pass, wired as Vehicle3D (player-driven) or MeshInstance3D (background). Trigger on "make a car", "spaceship model", "generate a mech", "I need a vehicle", "hover bike", "tank model", "racing car".
4
+ license: MIT
5
+ compatibility: [Cursor, Claude Code, Windsurf, Codex]
6
+ category: 3d-assets
7
+ user-invocable: true
8
+ allowed-tools: Read Grep summer_search_assets summer_generate_3d summer_generate_image summer_import_from_url summer_add_node summer_set_prop summer_inspect_node summer_inspect_resource summer_get_scene_tree summer_save_scene
9
+ paths: ["assets/vehicles/**", "assets/models/**", "**/*.tscn", "**/*.gd"]
10
+ ---
11
+
12
+ # Vehicle Model — Hard-Surface 3D Generation
13
+
14
+ Vehicles are the hardest 3D-gen category. Hard surfaces (flat panels, sharp edges, symmetrical bodies) expose every flaw the AI mesher has — smoothing-group artifacts on flat panels, asymmetric headlights, melted door seams. This skill exists to push the success rate up by giving the model **multi-angle reference**, picking the right backend, and using a **secondary detail-texture pass** to recover crispness on the body panels.
15
+
16
+ Backing tool: `summer_generate_3d`. Default model is `hunyuan` (best general quality). For pure hard-surface (clean spaceship, F1 car), try `trellis` first — it tends to preserve panel edges better.
17
+
18
+ ## When to use
19
+
20
+ - "Make me a player car for a racing game."
21
+ - "Generate a sci-fi fighter spaceship."
22
+ - "I need a hover bike for the desert level."
23
+ - "Create a mech for the boss fight."
24
+ - "Background traffic — generate three civilian sedans."
25
+
26
+ ## When NOT to use
27
+
28
+ - Character driving the vehicle → that's `summer:3d-assets/character-model`. Generate them separately and parent the character to the vehicle's seat.
29
+ - Vehicle interior (cockpit, dashboard) as a first-person view → generate as a separate "interior" prop via `summer:3d-assets/prop-model` with first-person framing.
30
+ - A scenery vehicle that never moves and is far from camera (parked truck in the distance) → `summer:3d-assets/prop-model` is fine; vehicle-model's overhead isn't worth it.
31
+ - Procedural / customizable vehicles (modular ship parts) → use `summer:3d-assets/environment-kit` to generate a vehicle-parts kit instead.
32
+
33
+ ## Polycount targets
34
+
35
+ | Use case | Tris | Pass via |
36
+ |---|---|---|
37
+ | Player vehicle (close camera, lots of screen time) | 15k–30k | `target_polycount: 25000` |
38
+ | Hero showpiece (cinematic, garage view) | 30k–60k | `target_polycount: 50000` |
39
+ | Background traffic (mid-range, multiple onscreen) | 2k–5k | `target_polycount: 4000` |
40
+ | Distant flyby / parked scenery | 1k–2k | `target_polycount: 1500` |
41
+
42
+ Vehicles benefit more from polycount than props — flat panels need edge density to look right. Don't go below 2k for anything the camera will get close to.
43
+
44
+ ## Multi-angle reference — the single biggest quality lever
45
+
46
+ Vehicles are highly view-dependent. A front-only reference produces a mesh with great front detail and a melted rear. The fix: generate a **front + 3/4 side composite reference** before the 3D pass.
47
+
48
+ ```
49
+ summer_generate_image(
50
+ prompt="A sleek red sports car, front view AND 3/4 rear-side view side by side, two angles in one image, white background, studio lighting, clean references for 3D modeling, isolated, no scenery."
51
+ )
52
+ ```
53
+
54
+ Most image models will produce a two-view composite. Then feed it to image-to-3D:
55
+
56
+ ```
57
+ summer_generate_3d(
58
+ kind="image-to-3d",
59
+ imageUrl="<composite reference url>",
60
+ model="hunyuan",
61
+ options={ target_polycount: 25000 }
62
+ )
63
+ ```
64
+
65
+ If the user has reference images already (concept art, photos), prefer those — composite them into a single image first if they aren't already.
66
+
67
+ ## Steps
68
+
69
+ ### 1. Search before generating
70
+
71
+ ```
72
+ summer_search_assets(query="<vehicle type>", filter={ kind: "model" })
73
+ ```
74
+
75
+ ### 2. Pick model and polycount
76
+
77
+ For hard-edged vehicles (spaceships, F1, mechs), try `trellis` first — sharper panel edges. For organic-curved vehicles (muscle cars, motorcycles, classic boats), `hunyuan` handles the curves better.
78
+
79
+ ### 3. Build the prompt
80
+
81
+ Pattern: `<vehicle type> + <silhouette / era / style> + <materials> + <surface state> + isolated suffix`.
82
+
83
+ | Goal | Prompt that works |
84
+ |---|---|
85
+ | Player race car | `A sleek modern Formula 1 race car, aerodynamic carbon-fiber bodywork, large rear wing, exposed wheels, racing livery in red and white. Front and 3/4 side views. Game asset, stylized, clean white background, isolated vehicle.` |
86
+ | Sci-fi fighter | `A sleek single-seat sci-fi space fighter, swept-forward wings, twin engine nacelles, glass cockpit canopy, painted matte gray with cyan trim. Front and 3/4 side views. Game asset, stylized hard-surface, white background, isolated vehicle.` |
87
+ | Hover bike | `A rusted desert hover bike, exposed engine block, single seat, handlebars, no wheels (hover thrusters underneath), weathered orange paint. Front and 3/4 side views. Game asset, stylized, white background, isolated vehicle.` |
88
+ | Mech | `A 4 meter tall bipedal combat mech, blocky armored torso, articulated arms with rifle and missile pod, thick legs with hydraulic pistons, painted olive drab with hazard stripes. Front and 3/4 side views. Game asset, hard-surface stylized, white background, isolated vehicle.` |
89
+ | Background sedan | `A generic 90s civilian sedan, four doors, beige paint, slightly worn. Front and 3/4 side views. Game asset, low-detail stylized, white background, isolated vehicle.` |
90
+
91
+ The phrase `front and 3/4 side views` is what triggers the multi-angle composite reference internally.
92
+
93
+ ### 4. Confirm and call
94
+
95
+ > About to generate `red_race_car` via `hunyuan`, target ~25k tris, multi-angle ref. ~$0.60, ~90s. OK?
96
+
97
+ ```
98
+ summer_generate_3d(
99
+ prompt="A sleek modern Formula 1 race car, ...",
100
+ model="hunyuan",
101
+ options={ target_polycount: 25000 },
102
+ wait=true
103
+ )
104
+ summer_import_from_url(url="<fileUrl>", path="res://assets/vehicles/race_car.glb")
105
+ ```
106
+
107
+ ### 5. Inspect for hard-surface artifacts
108
+
109
+ ```
110
+ summer_inspect_resource(path="res://assets/vehicles/race_car.glb")
111
+ ```
112
+
113
+ Open the import preview. Look for:
114
+ - **Smoothing-group artifacts on flat panels** (visible as banding under light) → fix in step 6 with a detail texture, or re-import with `Generate Tangents = on` and a custom shader.
115
+ - **Asymmetric headlights / wheels** → regenerate with `symmetric, mirrored bilateral` added to the prompt.
116
+ - **Melted door seams / panel gaps** → run the detail-texture pass (step 6).
117
+
118
+ ### 6. Optional: secondary detail-texture pass
119
+
120
+ For hero vehicles, run a texture-only pass to recover panel-line crispness without re-meshing:
121
+
122
+ ```
123
+ summer_generate_3d(
124
+ kind="texture",
125
+ imageUrl="<original front-view reference>",
126
+ model="hunyuan",
127
+ options={ target_polycount: 25000 } // matched to existing mesh
128
+ )
129
+ ```
130
+
131
+ This re-textures the existing mesh with sharper detail — panel lines, decals, weathering. Cheaper than re-meshing. Apply via material override in the editor.
132
+
133
+ ### 7. Wire into the scene
134
+
135
+ | Use case | Parent type | Notes |
136
+ |---|---|---|
137
+ | Player-driven (car, bike, hover) | `VehicleBody3D` (Godot 4.5 wheeled) or `RigidBody3D` (free physics) | Add `VehicleWheel3D` children for wheeled vehicles |
138
+ | Player-driven (spaceship, mech) | `RigidBody3D` or `CharacterBody3D` | Custom thrust / walk code, see `summer:character-controllers` |
139
+ | Background scenery (parked, flyby) | `MeshInstance3D` under a `Node3D` | No physics, no collision needed for distant traffic |
140
+ | Background traffic (moving but not interactive) | `Node3D` + `AnimationPlayer` driving the position | Cheap, no physics overhead |
141
+
142
+ **Player car wiring:**
143
+
144
+ ```
145
+ summer_add_node(parent="./World", type="VehicleBody3D", name="RaceCar")
146
+ summer_add_node(parent="./World/RaceCar", type="MeshInstance3D", name="Body")
147
+ summer_set_prop(path="./World/RaceCar/Body", property="mesh", value="res://assets/vehicles/race_car.glb")
148
+ summer_add_node(parent="./World/RaceCar", type="CollisionShape3D", name="Collider")
149
+ # Add a BoxShape3D resource matched to the AABB
150
+ # Add VehicleWheel3D children at each wheel position
151
+ summer_save_scene
152
+ ```
153
+
154
+ **Background scenery wiring:**
155
+
156
+ ```
157
+ summer_add_node(parent="./World/Street", type="MeshInstance3D", name="ParkedSedan")
158
+ summer_set_prop(path="./World/Street/ParkedSedan", property="mesh", value="res://assets/vehicles/sedan.glb")
159
+ summer_save_scene
160
+ ```
161
+
162
+ ## Anti-patterns
163
+
164
+ - **Single-angle reference for a hero vehicle.** Front-only → melted rear. Always go multi-angle for anything the player gets close to.
165
+ - **Flat-shaded prompt for hard surfaces.** "Smooth shading", "rounded edges" → loses the panel-line crispness that defines vehicles. Prefer "hard-surface", "panel-lined", "crisp edges".
166
+ - **Skipping symmetry callouts.** Vehicles are bilaterally symmetric — without `symmetric, mirrored` you get one headlight bigger than the other 30% of the time.
167
+ - **Asking the mesh pass to invent decals / liveries.** It can't — the mesh has the silhouette but the decals get geometry-baked weirdly. Use the texture pass for liveries.
168
+ - **Wrapping a background sedan in VehicleBody3D.** Wastes physics for a parked car. Use MeshInstance3D under Node3D.
169
+ - **Picking `meshy` (legacy).** Worse hard-surface fidelity than hunyuan or trellis.
170
+
171
+ ## Edge cases
172
+
173
+ - **Tracked vehicle (tank).** AI mesh-gen handles the hull but the tracks come back as a fused ring. Generate the hull only, then add tracks as a separate `summer:3d-assets/prop-model` (or use a tiled texture on a torus). For animation, scroll the track texture's UV.
174
+ - **Articulated vehicle (mech with shoulders, hips, knees).** The mesh is one piece — joints aren't separated. For animated mechs, treat as a humanoid: generate as `summer:3d-assets/character-model` with the rig pass, then animate via `summer:animation/generate-motion` (custom backend, prompt as "mech walks heavily").
175
+ - **Vehicle with rotor (helicopter, drone).** Generate without rotor, then add the rotor as a separate `summer:3d-assets/prop-model` and parent it. Spin via code in `_process`.
176
+ - **Open-top vehicle (convertible, jeep).** Specify "open top, no roof" — defaults often add a roof.
177
+ - **The user wants the cockpit interior visible.** Generate exterior here, then a separate `summer:3d-assets/prop-model` for the interior, and switch meshes when the camera enters first-person view.
178
+
179
+ ## Fallback (no MCP)
180
+
181
+ 1. Generate the multi-angle reference at the Summer dashboard (or Midjourney / nano-banana web).
182
+ 2. Upload to Hunyuan or Trellis web playground → image-to-3D → download `.glb`.
183
+ 3. Drop into `res://assets/vehicles/`.
184
+ 4. Wire as VehicleBody3D / MeshInstance3D in the Godot editor manually.
185
+
186
+ ## Handoff
187
+
188
+ After the vehicle is wired:
189
+
190
+ > `race_car.glb` placed at `./World/RaceCar` as a VehicleBody3D. Next:
191
+ > - **Vehicle controls:** WASD steering / accel — see `summer:character-controllers` for the vehicle controller pattern (or write directly with `engine_force`, `steering`, and `brake` on VehicleBody3D).
192
+ > - **Driver character:** generate via `summer:3d-assets/character-model` and parent to the seat position.
193
+ > - **Engine sound + tire screech:** `summer:audio/sound-effect` for one-shots, `summer:audio/ambient-bed` for the engine loop.
194
+ > - **Particles:** exhaust smoke, dust trail, sparks on collision — `summer:vfx/particles` (when available) or built-in GPUParticles3D.
195
+
196
+ ## See also
197
+
198
+ - `summer:3d-assets/character-model` — for the driver/pilot.
199
+ - `summer:3d-assets/prop-model` — for separable parts (rotors, decals as decals, modular kit pieces).
200
+ - `summer:asset-pipeline/asset-strategy` — meta-router.
201
+ - `summer:character-controllers` — for player-driven vehicle input wiring.
202
+ - `_shared/mcp-tools-reference.md` — `summer_generate_3d` schema, including `kind: "texture"` for the secondary detail pass.
package/skills/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  The canonical agent-readable game-dev knowledge source for Claude Code, Cursor, Codex, and Windsurf.
4
4
 
5
- When an agent is asked to make a game in Godot, this is what it reads to learn how.
5
+ When an agent is asked to make a game in Summer Engine, this is what it reads to learn how.
6
6
 
7
7
  ## Layout
8
8
 
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: skill-create
3
- description: Bootstrap a new Summer skill with the canonical folder structure, frontmatter, and stub sections. Use when adding a new skill to the library. Trigger on "create skill", "add skill", "new skill".
3
+ description: Use when a contributor wants to add a new skill to the Summer library — bootstraps the canonical folder structure, frontmatter, and stub sections. Trigger on "create skill", "add skill", "new skill", "scaffold a skill".
4
4
  license: MIT
5
5
  compatibility: [Cursor, Claude Code, Windsurf, Codex]
6
6
  category: _meta
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: skill-improve
3
- description: Iterate on an existing Summer skill using a parallel-eval harness — run the skill against a behavioral spec with and without proposed changes, compare outputs, ship the version that wins. Use to upgrade a skill that's underperforming. Trigger on "improve skill", "iterate on skill", "make this skill better".
3
+ description: Use when a contributor wants to upgrade a Summer skill that is underperforming or to fix a regression — runs the skill against a behavioral spec with and without proposed changes via parallel-eval harness and ships the version that wins. Trigger on "improve skill", "iterate on skill", "make this skill better".
4
4
  license: MIT
5
5
  compatibility: [Cursor, Claude Code, Windsurf, Codex]
6
6
  category: _meta
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: skill-test
3
- description: Validate a Summer skill against static structural rules and per-skill behavioral specs. Use to lint a skill before commit, audit the whole library, or check a behavioral spec assertion. Trigger on "skill test", "lint skill", "validate skill".
3
+ description: Use when a contributor wants to lint a Summer skill before commit, audit the whole library, or check a behavioral spec assertion — validates against static structural rules and per-skill behavioral specs. Trigger on "skill test", "lint skill", "validate skill".
4
4
  license: MIT
5
5
  compatibility: [Cursor, Claude Code, Windsurf, Codex]
6
6
  category: _meta
@@ -0,0 +1,130 @@
1
+ ---
2
+ name: using-summer
3
+ description: Use when starting any conversation in a Summer Engine project — establishes how to find and use Summer skills and the summer-engine MCP, requiring Skill tool invocation before ANY response including clarifying questions.
4
+ license: MIT
5
+ compatibility: [Cursor, Claude Code, Codex, Windsurf, Gemini, OpenCode, Factory, Copilot]
6
+ category: _meta
7
+ user-invocable: false
8
+ ---
9
+
10
+ <SUBAGENT-STOP>
11
+ If you were dispatched as a subagent to execute a specific task, skip this skill. The parent agent has already loaded it.
12
+ </SUBAGENT-STOP>
13
+
14
+ <EXTREMELY-IMPORTANT>
15
+ If you think there is even a 1% chance a Summer skill might apply to what you are doing, you ABSOLUTELY MUST invoke the skill.
16
+
17
+ IF A SKILL APPLIES TO YOUR TASK, YOU DO NOT HAVE A CHOICE. YOU MUST USE IT.
18
+
19
+ This is not negotiable. This is not optional. You cannot rationalize your way out of this.
20
+ </EXTREMELY-IMPORTANT>
21
+
22
+ ## Instruction Priority
23
+
24
+ Summer skills override default model behavior, but **user instructions always win**:
25
+
26
+ 1. **User's explicit instructions** (CLAUDE.md, GEMINI.md, AGENTS.md, direct requests) — highest priority.
27
+ 2. **Summer skills** — override default agent behavior where they conflict.
28
+ 3. **Default system prompt** — lowest priority.
29
+
30
+ If `CLAUDE.md` says "skip the brainstorm, just build it" and a skill says "always brainstorm first" — follow the user. The user is in control.
31
+
32
+ ## What Summer Is
33
+
34
+ **Summer Engine** is an AI-native game engine — editor, scene graph, asset pipeline, and runtime are all instrumented for programmatic control by AI agents. **Summer** (this skill set + MCP server) is how your coding agent talks to it.
35
+
36
+ Two layers:
37
+
38
+ - **Skills** — discipline guides that fire on specific situations: brainstorming a game, designing a mechanic, building an FPS controller, debugging a crash, shipping a build. Each one is a SKILL.md you load via the Skill tool.
39
+ - **MCP tools** — `summer_*` tools that talk to the running Summer Engine on `localhost:6550`. Scene mutation (`summer_add_node`, `summer_set_prop`), inspection (`summer_get_scene_tree`, `summer_inspect_node`), play/diagnostics (`summer_play`, `summer_get_diagnostics`), asset import/generation (`summer_import_from_url`, `summer_generate_3d`), and 30+ more.
40
+
41
+ **Scripting language:** Summer Engine is compatible with Godot 4.5. You can write game code in either:
42
+
43
+ - **GDScript** (`.gd`) — the default. Best supported by Summer skills (see `summer:gdscript-patterns`). Use this unless the user has explicitly chosen C#.
44
+ - **C#** (`.cs`) — fully supported by the engine. There is no `summer:csharp-patterns` skill yet — when writing C#, use the Godot 4.5 C# API from first principles. The patterns are different (different lifecycle method names, different signal API, different export attributes), so don't blindly translate GDScript idioms. Confirm with the user that they want C# before producing it; switching languages mid-project is painful.
45
+
46
+ Scenes are always `.tscn`/`.scn`. Resources are always `.tres`/`.res`. Drive the engine through `summer_*` tools — do not hand-edit `.tscn` files; the editor holds in-memory state that diverges from disk.
47
+
48
+ The engine must be running for MCP tools that touch scenes or diagnostics. If it isn't, the tool returns an error pointing the user at `summer run`.
49
+
50
+ ## How to Access Skills
51
+
52
+ **Claude Code / Cursor / Codex / Copilot CLI:** Use the `Skill` tool. When you invoke a skill, its content loads — follow it directly. Never use `Read` on a skill file.
53
+
54
+ **Gemini CLI:** Use `activate_skill`.
55
+
56
+ **OpenCode:** Skills are auto-discovered from the registered directory; load via OpenCode's native skill mechanism.
57
+
58
+ ## The Rule
59
+
60
+ **Invoke the relevant skill BEFORE any response or action.** Even a 1% chance a skill might apply means you check. If the loaded skill turns out not to fit, you don't have to follow it — but you do have to load it first to know.
61
+
62
+ ```
63
+ User message arrives.
64
+ │
65
+ ├── Does any Summer skill match? ── No ──▶ Respond directly.
66
+ │ │
67
+ │ Yes
68
+ │ │
69
+ ├── Invoke the Skill tool.
70
+ ├── Announce: "Using summer:<skill> to <purpose>."
71
+ ├── If the skill has a checklist, create a todo per item.
72
+ └── Follow the skill exactly.
73
+ ```
74
+
75
+ ## Red Flags (You Are Rationalizing — Stop)
76
+
77
+ These thoughts mean STOP. Check skills first.
78
+
79
+ | Thought | Reality |
80
+ |---|---|
81
+ | "This is just a quick fix" | Quick fixes break games. Check the skill. |
82
+ | "I know how to add a node, I'll just call the MCP" | The skill encodes the order of operations. Check it. |
83
+ | "The user just wants me to start" | Most "just build it" requests still benefit from the brainstorm-game skill. Offer it. |
84
+ | "I can read the .tscn file directly" | `summer_get_scene_tree` and `summer_inspect_node` are authoritative. Files lag the editor's in-memory state. |
85
+ | "I'll skip the soul file" | `.summer/GameSoul.md` is what every other skill reads. Honor it. |
86
+ | "I don't need to brainstorm — they said FPS" | Even with the genre named, brainstorm-game scopes mechanics, art direction, and the cut list. Skip only if explicitly told to. |
87
+ | "I'll write the GDScript myself, no skill" | `gdscript-patterns` encodes idioms that Claude/Codex/Cursor regularly get wrong (signal connection, type hints, `_ready` vs `_process`). |
88
+ | "The engine isn't running, I'll just edit files" | Editing scene files directly while the engine is running silently overwrites in-memory state. Check the skill. |
89
+ | "I remember this skill" | Skills evolve. Re-read the current version. |
90
+
91
+ ## Skill Priority
92
+
93
+ When multiple Summer skills could apply, run them in this order:
94
+
95
+ 1. **Process skills first** — `brainstorm-game`, `debug`, `play`. These determine HOW to approach the task.
96
+ 2. **Discipline skills second** — `gdscript-patterns`, `scene-composition`, `art-direction`, `audio-direction`. These shape the content.
97
+ 3. **Build skills third** — `fps-controller`, `design-mechanic`, `design-level`, `setup-multiplayer`. These produce the artifacts.
98
+
99
+ > "I want to make a game" → `brainstorm-game` first, then build skills.
100
+ > "Fix this crash" → `debug` first, then domain skills.
101
+ > "Add an FPS controller" → check `scene-composition` first, then `fps-controller`.
102
+
103
+ ## Skill Types
104
+
105
+ - **Rigid skills** (`debug`, `gdscript-patterns`): follow exactly. Don't adapt away the discipline.
106
+ - **Flexible skills** (`art-direction`, `design-mechanic`): adapt the principles to the project.
107
+
108
+ The skill itself tells you which. Default to rigid when unsure.
109
+
110
+ ## When the Engine Isn't Running
111
+
112
+ If an MCP tool returns "Summer Engine is not running":
113
+
114
+ 1. Tell the user: `summer run` to start it (or open Summer Engine and load the project).
115
+ 2. While waiting, do non-MCP work — read code, plan the next steps, draft GDScript.
116
+ 3. Retry the tool. The MCP server lazy-reconnects on the next call.
117
+
118
+ Do NOT fall back to editing `.tscn` files directly. The engine reads them on disk but holds in-memory state that diverges, and saving from the editor will overwrite your file edits.
119
+
120
+ ## When the User Hasn't Set Up Summer
121
+
122
+ If skills aren't found or the MCP server fails to start:
123
+
124
+ 1. Check whether `summer` is on PATH: `which summer` / `where summer`.
125
+ 2. If not, point them at: `npm install -g summer-engine` then `summer setup <agent> --yes`.
126
+ 3. If `summer doctor` is available, run it: `summer doctor` reports auth, engine, port, and skill state.
127
+
128
+ ## User Instructions Trump Everything
129
+
130
+ A direct user instruction ("skip the brainstorm", "just write the code", "don't use the MCP, edit files") overrides this skill. Surface the trade-off in one sentence ("Skipping brainstorm — heads up, scope creep is the most common reason game projects die.") and proceed as instructed.
@@ -481,5 +481,7 @@ For a fully-rigged enemy with anim controller + loot drop:
481
481
  - `ai-and-npcs/navmesh-pathfinding/SKILL.md` — NavigationAgent3D for movement
482
482
  - `ai-and-npcs/llm-driven-dialogue/SKILL.md` — Summer's wedge for talking NPCs
483
483
  - `ai-and-npcs/boss-patterns/SKILL.md` — phase transitions, mechanics
484
- - `visual-effects/vfx/SKILL.md` — hit flash and death VFX recipes
484
+ - `visual-effects/recipes/hit-spark/SKILL.md` — hit flash recipe
485
+ - `visual-effects/recipes/dissolve/SKILL.md` — death dissolve recipe
486
+ - `visual-effects/game-feel/SKILL.md` — screen-feel discipline (camera shake, hit-stop)
485
487
  - `scripting-patterns/state-machine-patterns/SKILL.md` — generic FSM patterns