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,253 @@
1
+ ---
2
+ name: voice-line
3
+ description: Use when generating TTS voice lines — NPC barks, narrator, dialogue. Includes voice-id discovery via summer_list_models family:'audio-voice', a character-to-voice decision tree, stability/style/similarity guidance, and the multi-line dialogue case via text_to_dialogue. Trigger on "make a voice line", "narrator", "NPC says", "voice for the merchant", "TTS line", "dialogue".
4
+ license: MIT
5
+ compatibility: [Cursor, Claude Code, Windsurf, Codex]
6
+ category: audio
7
+ user-invocable: true
8
+ allowed-tools: Read Grep Glob Write Edit summer_generate_voice summer_generate_audio summer_list_models summer_search_assets summer_import_from_url summer_add_node summer_set_prop summer_inspect_node
9
+ paths: ["audio/voice/**", "scripts/**", "**/*.tscn"]
10
+ ---
11
+
12
+ # /voice-line — Generate TTS Voice for NPCs, Narrator, Dialogue
13
+
14
+ ## Overview
15
+
16
+ The hardest part of TTS isn't the line — it's picking the right voice. ElevenLabs ships hundreds; pick wrong and a tough warlord NPC sounds like a podcast host. This skill walks the voice-id discovery flow (`summer_list_models` family `audio-voice`), narrows by gender / accent / age / energy, presents 4–5 finalists with sample URLs for the user to audition, and locks the pick before generating.
17
+
18
+ Then it generates one line (or a multi-turn dialogue) with the right stability / style / similarity / speed for the delivery — flat for narration, expressive for a bark, fast for an excited shout.
19
+
20
+ ## When to use
21
+
22
+ - NPC bark, narrator line, dialogue between two characters, tutorial voice, menu announcer.
23
+ - Multi-line conversation with two or more voices → use `text_to_dialogue` capability.
24
+
25
+ ## When NOT to use
26
+
27
+ - Non-verbal vocal SFX (grunt, scream) → `audio/sound-effect` with prompt `male grunt of pain, mid-thirties, sharp, 400ms`.
28
+ - Pre-recorded voice from a real actor — import the .mp3 / .wav with `summer_import_from_url` and skip TTS.
29
+
30
+ ## Steps
31
+
32
+ ### 1. Read the audio bible and any character notes
33
+
34
+ ```
35
+ Read .summer/audio-bible.md
36
+ Read .summer/characters.md # if present
37
+ Glob .summer/characters/*.md
38
+ ```
39
+
40
+ If a character bible exists, the voice should match the character's age / gender / regional origin / energy. If it doesn't, ask:
41
+
42
+ > Tell me the character: gender, rough age, accent or regional flavor, and energy (calm / measured / excited / gruff). Or just give me a reference — "sounds like the captain in Mass Effect" works.
43
+
44
+ ### 2. Browse the voice catalog
45
+
46
+ ```
47
+ summer_list_models(family="audio-voice")
48
+ ```
49
+
50
+ Returns a list with `id`, `name`, `accent`, `gender`, `age`, `description`, and `previewUrl`. Filter mentally to 8–12 candidates by the character's hard constraints (gender + age + accent), then pick 4–5 finalists with maximally distinct character (gruff vs warm vs neutral vs theatrical).
51
+
52
+ Present them to the user like this:
53
+
54
+ > Four finalists for "old gruff dwarven warlord":
55
+ > 1. **Brogan** — male, 50s, rough Scottish, gravelly. Sample: `<previewUrl>`
56
+ > 2. **Hodge** — male, 60s, neutral, weathered baritone. Sample: `<previewUrl>`
57
+ > 3. **Marrick** — male, 40s, rough English, mid-energy. Sample: `<previewUrl>`
58
+ > 4. **Old Drum** — male, 70s, deep, slow speech. Sample: `<previewUrl>`
59
+ > Audition and pick one. Or ask for four more.
60
+
61
+ Wait for the user. Do not pick for them — voice is the highest-stakes audio decision in the project.
62
+
63
+ ### 3. Character-to-voice decision tree (when the user wants a recommendation)
64
+
65
+ If the user says "you pick", lean on this tree:
66
+
67
+ | Character archetype | Look for |
68
+ |---|---|
69
+ | Old gruff warlord | male, 50–70, rough or weathered, low pitch, slow speech, regional accent for color |
70
+ | Wise mentor | male or female, 50+, neutral or warm, measured cadence, mid-low pitch |
71
+ | Excited young hero | 18–28, high energy, mid-high pitch, your own region's dominant accent |
72
+ | Cold villain | 30–50, neutral or theatrical, low-mid pitch, slow with sharp consonants |
73
+ | Mischievous trickster | varies age, theatrical, light pitch, fast cadence |
74
+ | Calm scholarly NPC | 30–50, neutral, mid pitch, even cadence, no regional color |
75
+ | Scared child | child voice if available; otherwise high-pitched young adult with high stability |
76
+ | Robotic / AI | flat / synthesized voice; or any voice with `stability=1.0` and `style=0.0` for monotone |
77
+ | Narrator (cinematic) | mid-deep male or female, neutral or theatrical, even cadence, very stable |
78
+ | Narrator (intimate) | warmer, mid pitch, lower stability for breathy nuance |
79
+
80
+ ### 4. Lock the voice id
81
+
82
+ After the pick:
83
+
84
+ > Locked voice: `Hodge` (id `21m00Tcm4TlvDq8ikWAM`). I'll use this for all `<character>` lines unless you say otherwise.
85
+
86
+ Save it in `.summer/voice-cast.md`:
87
+
88
+ ```markdown
89
+ # Voice Cast
90
+
91
+ | Character | Voice name | Voice id | Notes |
92
+ |---|---|---|---|
93
+ | Captain Hodge | Hodge | 21m00Tcm4TlvDq8ikWAM | Calm, weathered, low-mid |
94
+ | Bram the Smith | Brogan | <id> | Gruff Scottish, mid energy |
95
+ ```
96
+
97
+ This is the cast bible. Every future voice line uses these ids — consistency is the point.
98
+
99
+ ### 5. Tune stability / similarity / style / speed for delivery
100
+
101
+ ElevenLabs voice options:
102
+
103
+ | Param | Range | Effect |
104
+ |---|---|---|
105
+ | `stability` | 0.0–1.0 | Higher = monotone, consistent. Lower = expressive, variable. |
106
+ | `similarity_boost` | 0.0–1.0 | Higher = closer to the original sample. Lower = more freedom (can drift). |
107
+ | `style` | 0.0–1.0 | Higher = more theatrical / exaggerated. 0 = neutral. |
108
+ | `speed` | 0.7–1.2 | Speech speed multiplier. |
109
+
110
+ Defaults that work as a starting point:
111
+
112
+ | Delivery | stability | similarity_boost | style | speed |
113
+ |---|---|---|---|---|
114
+ | Calm narration | 0.75 | 0.75 | 0.0 | 1.0 |
115
+ | Cinematic narration | 0.5 | 0.85 | 0.4 | 0.95 |
116
+ | NPC bark (combat shout) | 0.3 | 0.75 | 0.6 | 1.1 |
117
+ | NPC bark (calm idle) | 0.6 | 0.75 | 0.2 | 1.0 |
118
+ | Excited youth | 0.35 | 0.7 | 0.55 | 1.1 |
119
+ | Cold villain | 0.65 | 0.85 | 0.3 | 0.92 |
120
+ | Robotic | 1.0 | 0.85 | 0.0 | 1.0 |
121
+ | Scared / breathy | 0.25 | 0.7 | 0.5 | 1.05 |
122
+
123
+ Ask:
124
+
125
+ > Delivery flavor? Calm idle / combat shout / cinematic / robotic / scared / cold? I'll set stability and style to match.
126
+
127
+ ### 6. Build the line
128
+
129
+ For a single line, the prompt is just the text. Punctuation and formatting matter:
130
+
131
+ - **Periods** = clear pauses (~300ms). Use them.
132
+ - **Commas** = short pauses (~100ms).
133
+ - **Em dashes** = sharp cut. (Note: avoid em dashes in user-facing UI copy per project standard, but they're fine in voice prompts as a delivery cue.)
134
+ - **All-caps word** = stress: `You SHALL not pass.`
135
+ - **Ellipsis** = trailing pause: `I... I don't know what to say.`
136
+ - **Parenthetical stage direction is ignored** — `(angrily)` is read as the word "angrily". Use stability/style instead.
137
+
138
+ Example lines:
139
+
140
+ ```
141
+ "Hold the line. They're coming through the south gate. Ready arrows."
142
+ "You shall not pass. Turn back."
143
+ "I... I don't know if I can do this."
144
+ "BREACH! BREACH! Fall back to the inner courtyard!"
145
+ ```
146
+
147
+ ### 7. Confirm and call
148
+
149
+ ```
150
+ summer_generate_voice(
151
+ text="Hold the line. They're coming through the south gate. Ready arrows.",
152
+ voiceId="21m00Tcm4TlvDq8ikWAM",
153
+ modelId="eleven_multilingual_v2",
154
+ stability=0.6,
155
+ similarity_boost=0.75,
156
+ style=0.2,
157
+ speed=1.0,
158
+ outputPath="audio/voice/hodge_hold_the_line.mp3"
159
+ )
160
+ ```
161
+
162
+ `modelId` defaults to `eleven_multilingual_v2`. For very short / latency-sensitive in-game barks, `eleven_turbo_v2_5` is faster; for highest fidelity, `eleven_multilingual_v2` is the default.
163
+
164
+ ### 8. Multi-line dialogue (two or more speakers)
165
+
166
+ Use `summer_generate_audio` with `capability: "text_to_dialogue"`:
167
+
168
+ ```
169
+ summer_generate_audio(
170
+ capability="text_to_dialogue",
171
+ speakers=[
172
+ { name: "Hodge", voiceId: "21m00Tcm4TlvDq8ikWAM" },
173
+ { name: "Brogan", voiceId: "<brogan-id>" }
174
+ ],
175
+ script=[
176
+ { speaker: "Hodge", text: "They're at the gate." },
177
+ { speaker: "Brogan", text: "Aye. Let 'em come." },
178
+ { speaker: "Hodge", text: "Steady. On my mark." }
179
+ ],
180
+ outputPath="audio/voice/dialogue_gate_warning.mp3"
181
+ )
182
+ ```
183
+
184
+ This produces a single MP3 with both voices, with dialogue-aware pacing the model handles internally. For very long scripts, split into chunks of ~6 turns and concatenate.
185
+
186
+ ### 9. Wire the line as `AudioStreamPlayer` on the Voice bus
187
+
188
+ ```
189
+ summer_add_node(parentPath="/root/Game/NPC", type="AudioStreamPlayer", name="VoiceLine")
190
+ summer_set_prop(path="/root/Game/NPC/VoiceLine", property="stream", value="res://audio/voice/hodge_hold_the_line.mp3")
191
+ summer_set_prop(path="/root/Game/NPC/VoiceLine", property="bus", value="Voice")
192
+ summer_set_prop(path="/root/Game/NPC/VoiceLine", property="volume_db", value=0.0)
193
+ summer_set_prop(path="/root/Game/NPC/VoiceLine", property="autoplay", value=false)
194
+ ```
195
+
196
+ For positional NPCs, `AudioStreamPlayer3D` with `max_distance=15.0` so distant NPCs aren't audible.
197
+
198
+ The bible's mix rule says voice ducks music: when this player starts, fade the music bus by `-6 dB`. Wire this in the bus setup or in code with `AudioServer.set_bus_volume_db()`.
199
+
200
+ ### 10. Save to the cast bible
201
+
202
+ After generation, append to `.summer/voice-cast.md` so future skills find existing lines and don't regenerate. Include line text + filename + voice id.
203
+
204
+ ## Reference card — voice-pick by archetype
205
+
206
+ ```
207
+ Old gruff warlord: male, 50-70, rough/weathered, low pitch, slow
208
+ Wise mentor: male/female, 50+, warm, measured, mid-low pitch
209
+ Excited young hero: 18-28, high energy, mid-high pitch
210
+ Cold villain: 30-50, neutral/theatrical, low-mid, slow with sharp consonants
211
+ Mischievous trickster: theatrical, light, fast cadence
212
+ Calm scholar: 30-50, neutral, mid, even cadence
213
+ Scared / breathy: high stability=0.25, style=0.5
214
+ Robotic AI: stability=1.0, style=0.0
215
+ Narrator cinematic: mid-deep, neutral/theatrical, even, very stable
216
+ Narrator intimate: warmer mid pitch, lower stability for breath
217
+ ```
218
+
219
+ ## Anti-patterns
220
+
221
+ - **Picking a voice without auditioning samples.** The user must hear it.
222
+ - **Reusing a voice id across two characters.** Players notice instantly. Lock the cast.
223
+ - **Stage directions in the text.** `(angrily) Get out!` is read literally as "angrily get out". Use stability/style.
224
+ - **One long blob for a multi-turn scene.** Use `text_to_dialogue` so pacing is dialogue-aware.
225
+ - **Voice on `Master` bus.** Must be on `Voice` bus so it can duck music per the bible.
226
+ - **No ducking on dialogue.** Music drowns voice; players miss lines. Always duck.
227
+ - **Picking a voice that doesn't match the character bible.** A noble queen with a cockney accent breaks immersion unless that's the joke.
228
+
229
+ ## Edge cases
230
+
231
+ - **Line longer than ~1000 characters.** ElevenLabs caps per-call. Split at sentence boundaries, generate each, concatenate with `AudioStreamPlayer.queue` or chained `finished` signals.
232
+ - **Mispronunciation of a fictional word.** Spell it phonetically: `Caelthorne` → `KEL-thorn` or `KAYL-thorn`. Or use SSML if the model supports it.
233
+ - **Voice drifts in long lines.** Increase `similarity_boost` toward 0.9; or split.
234
+ - **Need a non-English line.** `eleven_multilingual_v2` supports 29 languages. Just write in the target language; the same voice id works.
235
+ - **User wants the line shorter on regen.** Edit the text first; don't try to compress with `speed` past 1.15 (artifacts).
236
+ - **NPC bark variants.** Generate 3–5 variants of the same intent (`"They're at the gate!"`, `"Enemy approaching!"`, `"Look out!"`) and pick at random in code so the bark doesn't repeat.
237
+
238
+ ## Fallback (no MCP)
239
+
240
+ Print the call (text, voice id, params, target path). User runs via the Summer dashboard, then `summer_import_from_url` the result.
241
+
242
+ ## Handoff
243
+
244
+ > Line `hodge_hold_the_line.mp3` wired to `NPC/VoiceLine` on the `Voice` bus. Cast bible updated. Next:
245
+ > - Generate 3 bark variants of the same intent so the NPC doesn't sound like a recording.
246
+ > - For the upcoming gate scene, run `/voice-line` with `text_to_dialogue` for the multi-turn exchange.
247
+ > - Set up music ducking on the `Music` bus when `Voice` is active (one Tween or a `BusEffect Compressor` sidechained to `Voice`).
248
+
249
+ ## See also
250
+
251
+ - `audio/audio-direction` — Voice bus and ducking rules
252
+ - `audio/sound-effect` — non-verbal vocal SFX (grunt, scream)
253
+ - `audio/adaptive-music` — ducking integration
@@ -4,7 +4,7 @@
4
4
  # When adding/changing a skill, update this file in the same commit.
5
5
 
6
6
  version: 1
7
- generated: 2026-05-05
7
+ generated: 2026-05-10
8
8
 
9
9
  skills:
10
10
  # ── character-controllers ──
@@ -146,6 +146,20 @@ skills:
146
146
  recommended: true
147
147
  user-invocable: true
148
148
  last-tested: 2026-05-05
149
+ - name: new-project
150
+ category: scene-and-project
151
+ status: HAVE
152
+ public: true
153
+ recommended: true
154
+ user-invocable: true
155
+ last-tested: 2026-05-09
156
+ - name: browse-templates
157
+ category: scene-and-project
158
+ status: HAVE
159
+ public: true
160
+ recommended: true
161
+ user-invocable: true
162
+ last-tested: 2026-05-09
149
163
  - name: scene-composition
150
164
  category: scene-and-project
151
165
  status: HAVE
@@ -163,8 +177,9 @@ skills:
163
177
  category: scene-and-project
164
178
  status: HAVE
165
179
  public: true
166
- recommended: false
167
- last-tested: 2026-05-05
180
+ recommended: true
181
+ user-invocable: true
182
+ last-tested: 2026-05-09
168
183
  - name: godot-project-conventions
169
184
  category: scene-and-project
170
185
  status: NEXT
@@ -276,13 +291,69 @@ skills:
276
291
  public: true
277
292
 
278
293
  # ── visual-effects ──
279
- - name: vfx
294
+ - name: game-feel
280
295
  category: visual-effects
281
296
  status: HAVE
282
297
  public: true
283
298
  recommended: true
284
299
  user-invocable: true
285
- last-tested: 2026-05-05
300
+ last-tested: 2026-05-10
301
+ - name: fire
302
+ category: visual-effects
303
+ status: HAVE
304
+ public: true
305
+ recommended: true
306
+ user-invocable: true
307
+ last-tested: 2026-05-10
308
+ - name: muzzle-flash
309
+ category: visual-effects
310
+ status: HAVE
311
+ public: true
312
+ recommended: true
313
+ user-invocable: true
314
+ last-tested: 2026-05-10
315
+ - name: water-ripple
316
+ category: visual-effects
317
+ status: HAVE
318
+ public: true
319
+ recommended: false
320
+ user-invocable: true
321
+ last-tested: 2026-05-10
322
+ - name: lightning
323
+ category: visual-effects
324
+ status: HAVE
325
+ public: true
326
+ recommended: false
327
+ user-invocable: true
328
+ last-tested: 2026-05-10
329
+ - name: dissolve
330
+ category: visual-effects
331
+ status: HAVE
332
+ public: true
333
+ recommended: false
334
+ user-invocable: true
335
+ last-tested: 2026-05-10
336
+ - name: smoke
337
+ category: visual-effects
338
+ status: HAVE
339
+ public: true
340
+ recommended: false
341
+ user-invocable: true
342
+ last-tested: 2026-05-10
343
+ - name: hit-spark
344
+ category: visual-effects
345
+ status: HAVE
346
+ public: true
347
+ recommended: false
348
+ user-invocable: true
349
+ last-tested: 2026-05-10
350
+ - name: magic-glow
351
+ category: visual-effects
352
+ status: HAVE
353
+ public: true
354
+ recommended: false
355
+ user-invocable: true
356
+ last-tested: 2026-05-10
286
357
  - name: gpuparticles-3d-basics
287
358
  category: visual-effects
288
359
  status: NEXT
@@ -335,6 +406,41 @@ skills:
335
406
  public: true
336
407
 
337
408
  # ── animation ──
409
+ - name: generate-motion
410
+ category: animation
411
+ status: HAVE
412
+ public: true
413
+ recommended: true
414
+ user-invocable: true
415
+ last-tested: 2026-05-10
416
+ - name: retarget
417
+ category: animation
418
+ status: HAVE
419
+ public: true
420
+ recommended: false
421
+ user-invocable: true
422
+ last-tested: 2026-05-10
423
+ - name: animation-tree
424
+ category: animation
425
+ status: HAVE
426
+ public: true
427
+ recommended: false
428
+ user-invocable: true
429
+ last-tested: 2026-05-10
430
+ - name: procedural-animation
431
+ category: animation
432
+ status: HAVE
433
+ public: true
434
+ recommended: false
435
+ user-invocable: true
436
+ last-tested: 2026-05-10
437
+ - name: facial-and-lipsync
438
+ category: animation
439
+ status: HAVE
440
+ public: true
441
+ recommended: false
442
+ user-invocable: true
443
+ last-tested: 2026-05-10
338
444
  - name: animation-tree-basics
339
445
  category: animation
340
446
  status: NEXT
@@ -368,6 +474,41 @@ skills:
368
474
  recommended: true
369
475
  user-invocable: true
370
476
  last-tested: 2026-05-05
477
+ - name: sound-effect
478
+ category: audio
479
+ status: HAVE
480
+ public: true
481
+ recommended: true
482
+ user-invocable: true
483
+ last-tested: 2026-05-10
484
+ - name: music-track
485
+ category: audio
486
+ status: HAVE
487
+ public: true
488
+ recommended: true
489
+ user-invocable: true
490
+ last-tested: 2026-05-10
491
+ - name: ambient-bed
492
+ category: audio
493
+ status: HAVE
494
+ public: true
495
+ recommended: false
496
+ user-invocable: true
497
+ last-tested: 2026-05-10
498
+ - name: voice-line
499
+ category: audio
500
+ status: HAVE
501
+ public: true
502
+ recommended: true
503
+ user-invocable: true
504
+ last-tested: 2026-05-10
505
+ - name: adaptive-music
506
+ category: audio
507
+ status: HAVE
508
+ public: true
509
+ recommended: false
510
+ user-invocable: true
511
+ last-tested: 2026-05-10
371
512
  - name: audio-bus-setup
372
513
  category: audio
373
514
  status: NEXT
@@ -393,6 +534,117 @@ skills:
393
534
  status: LATER
394
535
  public: true
395
536
 
537
+ # ── 2d-assets ──
538
+ - name: concept-art
539
+ category: 2d-assets
540
+ status: HAVE
541
+ public: true
542
+ recommended: true
543
+ user-invocable: true
544
+ last-tested: 2026-05-10
545
+ - name: character-portrait
546
+ category: 2d-assets
547
+ status: HAVE
548
+ public: true
549
+ recommended: true
550
+ user-invocable: true
551
+ last-tested: 2026-05-10
552
+ - name: pixel-art
553
+ category: 2d-assets
554
+ status: HAVE
555
+ public: true
556
+ recommended: true
557
+ user-invocable: true
558
+ last-tested: 2026-05-10
559
+ - name: ui-graphics
560
+ category: 2d-assets
561
+ status: HAVE
562
+ public: true
563
+ recommended: false
564
+ user-invocable: true
565
+ last-tested: 2026-05-10
566
+ - name: tileable-texture
567
+ category: 2d-assets
568
+ status: HAVE
569
+ public: true
570
+ recommended: false
571
+ user-invocable: true
572
+ last-tested: 2026-05-10
573
+ - name: sprite-sheet
574
+ category: 2d-assets
575
+ status: HAVE
576
+ public: true
577
+ recommended: false
578
+ user-invocable: true
579
+ last-tested: 2026-05-10
580
+ - name: skybox-panorama
581
+ category: 2d-assets
582
+ status: HAVE
583
+ public: true
584
+ recommended: false
585
+ user-invocable: true
586
+ last-tested: 2026-05-10
587
+
588
+ # ── 3d-assets ──
589
+ - name: prop-model
590
+ category: 3d-assets
591
+ status: HAVE
592
+ public: true
593
+ recommended: true
594
+ user-invocable: true
595
+ last-tested: 2026-05-10
596
+ - name: character-model
597
+ category: 3d-assets
598
+ status: HAVE
599
+ public: true
600
+ recommended: true
601
+ user-invocable: true
602
+ last-tested: 2026-05-10
603
+ - name: environment-kit
604
+ category: 3d-assets
605
+ status: HAVE
606
+ public: true
607
+ recommended: false
608
+ user-invocable: true
609
+ last-tested: 2026-05-10
610
+ - name: vehicle-model
611
+ category: 3d-assets
612
+ status: HAVE
613
+ public: true
614
+ recommended: false
615
+ user-invocable: true
616
+ last-tested: 2026-05-10
617
+ - name: organic-model
618
+ category: 3d-assets
619
+ status: HAVE
620
+ public: true
621
+ recommended: false
622
+ user-invocable: true
623
+ last-tested: 2026-05-10
624
+
625
+ # ── video ──
626
+ - name: cinematic-cutscene
627
+ category: video
628
+ status: HAVE
629
+ public: true
630
+ recommended: true
631
+ user-invocable: true
632
+ last-tested: 2026-05-10
633
+ - name: trailer-shot
634
+ category: video
635
+ status: HAVE
636
+ public: true
637
+ recommended: false
638
+ user-invocable: true
639
+ last-tested: 2026-05-10
640
+ - name: animated-loop
641
+ category: video
642
+ status: HAVE
643
+ public: true
644
+ recommended: false
645
+ user-invocable: true
646
+ last-tested: 2026-05-10
647
+
396
648
  # ── physics ──
397
649
  - name: rigid-bodies
398
650
  category: physics
@@ -728,3 +980,12 @@ skills:
728
980
  category: deployment
729
981
  status: LATER
730
982
  public: true
983
+
984
+ # ── _persona ──
985
+ - name: summer
986
+ category: _persona
987
+ status: HAVE
988
+ public: true
989
+ recommended: true
990
+ user-invocable: true
991
+ last-tested: 2026-05-10
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: fps-controller
3
- description: First-person character controller with WASD, mouse look, jump, coyote time, jump buffering, air control, and external-velocity handling. Use when building an FPS, first-person movement, or a 3D character that walks, jumps, and gets shoved around. Trigger on "FPS", "first-person", "WASD", "character controller", "mouse look".
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".
4
4
  license: MIT
5
5
  compatibility: [Cursor, Claude Code, Windsurf, Codex]
6
6
  category: character-controllers