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.
- package/.claude-plugin/marketplace.json +2 -2
- package/.claude-plugin/plugin.json +27 -5
- package/.codex-plugin/plugin.json +28 -6
- package/.cursor-plugin/plugin.json +27 -5
- package/.factory-plugin/plugin.json +27 -5
- package/.opencode/plugins/summer.js +1 -1
- package/CHANGELOG.md +102 -0
- package/README.md +18 -3
- package/assets/audit/scene_audit.gd +4136 -0
- package/assets/seeing/seeing_probe.gd +1873 -0
- package/dist/cli/commands/skills.js +20 -2
- package/dist/core/api-client.d.ts +9 -1
- package/dist/core/api-client.js +21 -4
- package/dist/core/capabilities/agent-playbook.js +46 -0
- package/dist/core/capabilities/audit/accept.d.ts +55 -0
- package/dist/core/capabilities/audit/accept.js +147 -0
- package/dist/core/capabilities/audit/args.d.ts +95 -0
- package/dist/core/capabilities/audit/args.js +89 -0
- package/dist/core/capabilities/audit/audit.d.ts +56 -0
- package/dist/core/capabilities/audit/audit.js +287 -0
- package/dist/core/capabilities/audit/frame.d.ts +14 -0
- package/dist/core/capabilities/audit/frame.js +35 -0
- package/dist/core/capabilities/audit/gaps.d.ts +96 -0
- package/dist/core/capabilities/audit/gaps.js +257 -0
- package/dist/core/capabilities/audit/judge.d.ts +162 -0
- package/dist/core/capabilities/audit/judge.js +1134 -0
- package/dist/core/capabilities/audit/math.d.ts +110 -0
- package/dist/core/capabilities/audit/math.js +263 -0
- package/dist/core/capabilities/audit/summary.d.ts +74 -0
- package/dist/core/capabilities/audit/summary.js +212 -0
- package/dist/core/capabilities/board.d.ts +31 -0
- package/dist/core/capabilities/board.js +43 -0
- package/dist/core/capabilities/camera-view.d.ts +4 -2
- package/dist/core/capabilities/camera-view.js +6 -3
- package/dist/core/capabilities/connect-signal.d.ts +85 -0
- package/dist/core/capabilities/connect-signal.js +285 -0
- package/dist/core/capabilities/engine-fallbacks.d.ts +5 -0
- package/dist/core/capabilities/engine-fallbacks.js +5 -0
- package/dist/core/capabilities/engine-ops.d.ts +5 -1
- package/dist/core/capabilities/engine-ops.js +0 -3
- package/dist/core/capabilities/engine-receipt.d.ts +12 -0
- package/dist/core/capabilities/engine-receipt.js +26 -0
- package/dist/core/capabilities/file-read.d.ts +64 -0
- package/dist/core/capabilities/file-read.js +325 -0
- package/dist/core/capabilities/game-task-plan.js +4 -2
- package/dist/core/capabilities/grep.d.ts +60 -0
- package/dist/core/capabilities/grep.js +190 -0
- package/dist/core/capabilities/inspect-node.d.ts +56 -0
- package/dist/core/capabilities/inspect-node.js +225 -0
- package/dist/core/capabilities/inspect-resource.d.ts +61 -0
- package/dist/core/capabilities/inspect-resource.js +376 -0
- package/dist/core/capabilities/math3d.d.ts +28 -0
- package/dist/core/capabilities/math3d.js +88 -0
- package/dist/core/capabilities/motion-generation.d.ts +62 -0
- package/dist/core/capabilities/motion-generation.js +138 -0
- package/dist/core/capabilities/placement-batch.d.ts +102 -0
- package/dist/core/capabilities/placement-batch.js +483 -0
- package/dist/core/capabilities/placement-math.d.ts +70 -0
- package/dist/core/capabilities/placement-math.js +209 -0
- package/dist/core/capabilities/placement-script.d.ts +42 -0
- package/dist/core/capabilities/placement-script.js +1096 -0
- package/dist/core/capabilities/placement.d.ts +485 -0
- package/dist/core/capabilities/placement.js +1731 -0
- package/dist/core/capabilities/project-context.d.ts +33 -2
- package/dist/core/capabilities/project-context.js +87 -4
- package/dist/core/capabilities/replace-node.d.ts +91 -0
- package/dist/core/capabilities/replace-node.js +423 -0
- package/dist/core/capabilities/runtime-control.d.ts +18 -2
- package/dist/core/capabilities/runtime-control.js +67 -2
- package/dist/core/capabilities/scene-batch.d.ts +63 -0
- package/dist/core/capabilities/scene-batch.js +394 -0
- package/dist/core/capabilities/scene-readback.d.ts +36 -0
- package/dist/core/capabilities/scene-readback.js +54 -0
- package/dist/core/capabilities/seeing/args.d.ts +348 -0
- package/dist/core/capabilities/seeing/args.js +178 -0
- package/dist/core/capabilities/seeing/candidates.d.ts +127 -0
- package/dist/core/capabilities/seeing/candidates.js +282 -0
- package/dist/core/capabilities/seeing/math.d.ts +134 -0
- package/dist/core/capabilities/seeing/math.js +269 -0
- package/dist/core/capabilities/seeing/probe.d.ts +62 -0
- package/dist/core/capabilities/seeing/probe.js +188 -0
- package/dist/core/capabilities/seeing/scoring.d.ts +235 -0
- package/dist/core/capabilities/seeing/scoring.js +639 -0
- package/dist/core/capabilities/seeing/seeing.d.ts +233 -0
- package/dist/core/capabilities/seeing/seeing.js +1341 -0
- package/dist/core/capabilities/seeing/shot-store.d.ts +52 -0
- package/dist/core/capabilities/seeing/shot-store.js +204 -0
- package/dist/core/capabilities/surface-snap-mesh.d.ts +88 -0
- package/dist/core/capabilities/surface-snap-mesh.js +425 -0
- package/dist/core/capabilities/surface-snap.d.ts +77 -0
- package/dist/core/capabilities/surface-snap.js +461 -0
- package/dist/core/capabilities/tool-dispatch.js +231 -72
- package/dist/core/capabilities/tscn.d.ts +85 -0
- package/dist/core/capabilities/tscn.js +391 -0
- package/dist/core/capabilities/world-snapshot.d.ts +58 -0
- package/dist/core/capabilities/world-snapshot.js +150 -0
- package/dist/core/capability-skew.d.ts +5 -5
- package/dist/core/capability-skew.js +14 -6
- package/dist/core/headless/worker-engine-client.d.ts +1 -1
- package/dist/core/headless/worker-engine-client.js +2 -2
- package/dist/core/library-read.d.ts +37 -5
- package/dist/core/library-read.js +264 -33
- package/dist/core/library-search.d.ts +2 -2
- package/dist/installer/agent-config.js +5 -3
- package/dist/installer/agent-table.d.ts +16 -0
- package/dist/installer/agent-table.js +52 -17
- package/dist/mcp/server.js +9 -3
- package/dist/mcp/tools/asset-tools.js +21 -3
- package/dist/mcp/tools/audit-tools.d.ts +23 -0
- package/dist/mcp/tools/audit-tools.js +60 -0
- package/dist/mcp/tools/debug-tools.js +3 -1
- package/dist/mcp/tools/file-tools.js +17 -4
- package/dist/mcp/tools/generate-tools.js +74 -66
- package/dist/mcp/tools/library-tools.js +2 -0
- package/dist/mcp/tools/perception-tools.js +6 -19
- package/dist/mcp/tools/placement-tools.d.ts +24 -0
- package/dist/mcp/tools/placement-tools.js +91 -0
- package/dist/mcp/tools/project-tools.js +18 -15
- package/dist/mcp/tools/scene-tools.js +71 -83
- package/dist/mcp/tools/seeing-tools.d.ts +24 -0
- package/dist/mcp/tools/seeing-tools.js +64 -0
- package/dist/mcp/tools/spatial-tools.js +17 -9
- package/dist/mcp/tools/visual-tools.js +59 -7
- package/gemini-extension.json +26 -4
- package/integrations/amp/README.md +1 -1
- package/integrations/crush/README.md +1 -1
- package/integrations/grok-build/README.md +1 -1
- package/integrations/hermes/README.md +1 -1
- package/integrations/kimi-code/README.md +1 -1
- package/integrations/mistral-vibe/README.md +1 -1
- package/integrations/opencode/README.md +1 -1
- package/integrations/rovo-dev/README.md +1 -1
- package/integrations/vscode-copilot/README.md +1 -1
- package/integrations/warp/README.md +1 -1
- package/integrations/windsurf/README.md +1 -1
- package/library/references/mcp-tools-reference/mcp-tools-reference.md +59 -15
- package/library/references/mcp-tools-reference/resource.yaml +1 -1
- package/library/references/summer-folder/resource.yaml +1 -1
- package/library/references/summer-folder/summer-folder.md +1 -1
- package/library/skills/3d-lighting/SKILL.md +1 -1
- package/library/skills/README.md +36 -14
- package/library/skills/adaptive-music/SKILL.md +1 -1
- package/library/skills/agent-playtesting/SKILL.md +1 -1
- package/library/skills/ai-characters-in-games/SKILL.md +220 -0
- package/library/skills/ai-characters-in-games/resource.yaml +30 -0
- package/library/skills/ambient-bed/SKILL.md +1 -1
- package/library/skills/animated-loop/SKILL.md +1 -1
- package/library/skills/animation-tree/SKILL.md +1 -1
- package/library/skills/art-direction/SKILL.md +1 -1
- package/library/skills/asset-strategy/SKILL.md +2 -1
- package/library/skills/asset-strategy/resource.yaml +2 -1
- package/library/skills/audio-direction/SKILL.md +1 -1
- package/library/skills/auto-fire-targeting/SKILL.md +1 -1
- package/library/skills/brainstorm-game/SKILL.md +1 -1
- package/library/skills/brainstorming/SKILL.md +1 -1
- package/library/skills/browse-templates/SKILL.md +3 -3
- package/library/skills/browse-templates/resource.yaml +1 -1
- package/library/skills/camera-rigs/SKILL.md +128 -0
- package/library/skills/camera-rigs/resource.yaml +29 -0
- package/library/skills/celeste-momentum-platforming/SKILL.md +1 -1
- package/library/skills/character-animation-wiring/SKILL.md +1 -1
- package/library/skills/character-model/SKILL.md +1 -1
- package/library/skills/character-movement/SKILL.md +326 -0
- package/library/skills/character-movement/references/default-third-person-controller.gd +201 -0
- package/library/skills/character-movement/references/default-third-person-verification-probe.gd +154 -0
- package/library/skills/character-movement/references/movement-3d.md +136 -0
- package/library/skills/character-movement/references/platformer-feel.md +83 -0
- package/library/skills/character-movement/resource.yaml +40 -0
- package/library/skills/character-portrait/SKILL.md +1 -1
- package/library/skills/cinematic-cutscene/SKILL.md +1 -1
- package/library/skills/combat-basics/SKILL.md +159 -0
- package/library/skills/combat-basics/references/projectiles-and-aoe.md +100 -0
- package/library/skills/combat-basics/resource.yaml +34 -0
- package/library/skills/concept-art/SKILL.md +1 -1
- package/library/skills/create-asset-sheet/SKILL.md +1 -1
- package/library/skills/debug/SKILL.md +1 -1
- package/library/skills/debugging-game-feel/SKILL.md +1 -1
- package/library/skills/design-level/SKILL.md +1 -1
- package/library/skills/design-mechanic/SKILL.md +1 -1
- package/library/skills/design-npc/SKILL.md +1 -1
- package/library/skills/diagnosing-perf-regressions/SKILL.md +1 -1
- package/library/skills/dispatching-parallel-agents/SKILL.md +1 -1
- package/library/skills/driving-the-editor-ui/SKILL.md +1 -1
- package/library/skills/environment-kit/SKILL.md +1 -1
- package/library/skills/export-and-ship/SKILL.md +1 -1
- package/library/skills/fabricating-assets/SKILL.md +1 -1
- package/library/skills/facial-and-lipsync/SKILL.md +1 -1
- package/library/skills/fps-controller/SKILL.md +9 -7
- package/library/skills/fps-controller/resource.yaml +4 -1
- package/library/skills/game-feel/SKILL.md +1 -1
- package/library/skills/gameskill/SKILL.md +1 -1
- package/library/skills/gdscript-patterns/SKILL.md +1 -1
- package/library/skills/generate-motion/SKILL.md +9 -9
- package/library/skills/generate-motion/resource.yaml +2 -1
- package/library/skills/godogen-visual-proof-game-generation/SKILL.md +1 -1
- package/library/skills/headless-scripting/SKILL.md +1 -1
- package/library/skills/in-game-purchases/SKILL.md +254 -0
- package/library/skills/in-game-purchases/resource.yaml +29 -0
- package/library/skills/instantiate-asset-pack/SKILL.md +1 -1
- package/library/skills/investigating-bugs/SKILL.md +1 -1
- package/library/skills/lumera-single-image-scene-reconstruction/SKILL.md +1 -1
- package/library/skills/make-game/SKILL.md +25 -3
- package/library/skills/make-game/references/2d-platformer-polish.md +93 -0
- package/library/skills/make-game/references/2d-platformer.md +117 -0
- package/library/skills/make-game/references/2d-rpg-content.md +234 -0
- package/library/skills/make-game/references/2d-rpg.md +241 -0
- package/library/skills/make-game/references/2d-survivors-progression.md +201 -0
- package/library/skills/make-game/references/2d-survivors.md +237 -0
- package/library/skills/make-game/references/3d-fps-systems.md +216 -0
- package/library/skills/make-game/references/3d-fps.md +177 -0
- package/library/skills/make-game/references/3d-horror-systems.md +186 -0
- package/library/skills/make-game/references/3d-horror.md +201 -0
- package/library/skills/make-game/references/3d-third-person-systems.md +220 -0
- package/library/skills/make-game/references/3d-third-person.md +215 -0
- package/library/skills/make-game/resource.yaml +6 -1
- package/library/skills/multiplayer/SKILL.md +150 -0
- package/library/skills/multiplayer/resource.yaml +33 -0
- package/library/skills/multiplayer-movement/SKILL.md +510 -0
- package/library/skills/multiplayer-movement/files.md +501 -0
- package/library/skills/multiplayer-movement/resource.yaml +30 -0
- package/library/skills/multiplayer-project/SKILL.md +521 -0
- package/library/skills/multiplayer-project/files.md +448 -0
- package/library/skills/multiplayer-project/resource.yaml +36 -0
- package/library/skills/multiplayer-publish/SKILL.md +229 -0
- package/library/skills/multiplayer-publish/export-errors.md +89 -0
- package/library/skills/multiplayer-publish/resource.yaml +28 -0
- package/library/skills/multiplayer-state/SKILL.md +438 -0
- package/library/skills/multiplayer-state/files.md +592 -0
- package/library/skills/multiplayer-state/resource.yaml +35 -0
- package/library/skills/multiplayer-testing/SKILL.md +236 -0
- package/library/skills/multiplayer-testing/resource.yaml +39 -0
- package/library/skills/music-track/SKILL.md +1 -1
- package/library/skills/navigate-summer/SKILL.md +1 -1
- package/library/skills/new-project/SKILL.md +1 -1
- package/library/skills/organic-model/SKILL.md +1 -1
- package/library/skills/pixel-art/SKILL.md +1 -1
- package/library/skills/play/SKILL.md +1 -1
- package/library/skills/playtesting-a-feature/SKILL.md +1 -1
- package/library/skills/procedural-animation/SKILL.md +2 -2
- package/library/skills/procedural-animation/resource.yaml +1 -1
- package/library/skills/prop-model/SKILL.md +1 -1
- package/library/skills/psx-retro-rendering/SKILL.md +1 -1
- package/library/skills/realtime-wet-surfaces/SKILL.md +2 -2
- package/library/skills/remote-deploy/SKILL.md +1 -1
- package/library/skills/retarget/SKILL.md +1 -1
- package/library/skills/running-in-the-cloud/SKILL.md +1 -1
- package/library/skills/save-load/SKILL.md +156 -0
- package/library/skills/save-load/resource.yaml +27 -0
- package/library/skills/scene-composition/SKILL.md +1 -1
- package/library/skills/scene-hierarchy-design/SKILL.md +1 -1
- package/library/skills/scene-scripting/SKILL.md +1 -1
- package/library/skills/scene-to-level/SKILL.md +1 -1
- package/library/skills/skill-create/SKILL.md +1 -1
- package/library/skills/skill-improve/SKILL.md +1 -1
- package/library/skills/skill-test/SKILL.md +1 -1
- package/library/skills/skintokens-auto-rigging/SKILL.md +1 -1
- package/library/skills/skybox-panorama/SKILL.md +1 -1
- package/library/skills/sound-effect/SKILL.md +1 -1
- package/library/skills/spatial-placement/SKILL.md +134 -3
- package/library/skills/spatial-placement/references/kit-placement-tools.md +364 -0
- package/library/skills/spatial-placement/resource.yaml +16 -2
- package/library/skills/sprite-sheet/SKILL.md +1 -1
- package/library/skills/summer-analytics/SKILL.md +147 -0
- package/library/skills/summer-analytics/resource.yaml +28 -0
- package/library/skills/summer-friends/SKILL.md +226 -0
- package/library/skills/summer-friends/resource.yaml +28 -0
- package/library/skills/summer-leaderboards/SKILL.md +231 -0
- package/library/skills/summer-leaderboards/resource.yaml +30 -0
- package/library/skills/summer-match-results/SKILL.md +286 -0
- package/library/skills/summer-match-results/resource.yaml +32 -0
- package/library/skills/summer-matchmaking/SKILL.md +301 -0
- package/library/skills/summer-matchmaking/resource.yaml +32 -0
- package/library/skills/summer-parties/SKILL.md +253 -0
- package/library/skills/summer-parties/resource.yaml +30 -0
- package/library/skills/summer-player-data/SKILL.md +322 -0
- package/library/skills/summer-player-data/resource.yaml +30 -0
- package/library/skills/summer-store/SKILL.md +271 -0
- package/library/skills/summer-store/resource.yaml +29 -0
- package/library/skills/summer-world-chat/SKILL.md +195 -0
- package/library/skills/summer-world-chat/resource.yaml +30 -0
- package/library/skills/summer-world-saves/SKILL.md +284 -0
- package/library/skills/summer-world-saves/resource.yaml +29 -0
- package/library/skills/text-to-motion/SKILL.md +99 -0
- package/library/skills/text-to-motion/prompts-and-controls.md +34 -0
- package/library/skills/text-to-motion/resource.yaml +41 -0
- package/library/skills/text-to-motion/rigging-for-text-motion.md +54 -0
- package/library/skills/tileable-texture/SKILL.md +1 -1
- package/library/skills/trailer-shot/SKILL.md +1 -1
- package/library/skills/tune-performance/SKILL.md +1 -1
- package/library/skills/ui-basics/SKILL.md +10 -1
- package/library/skills/ui-graphics/SKILL.md +1 -1
- package/library/skills/use-widget-asset/SKILL.md +1 -1
- package/library/skills/using-summer/SKILL.md +2 -2
- package/library/skills/using-summer/resource.yaml +2 -2
- package/library/skills/vehicle-model/SKILL.md +1 -1
- package/library/skills/verification-before-completion/SKILL.md +1 -1
- package/library/skills/verifying-scenes/SKILL.md +76 -2
- package/library/skills/verifying-scenes/resource.yaml +13 -2
- package/library/skills/vfx-dissolve/SKILL.md +1 -1
- package/library/skills/vfx-fire/SKILL.md +1 -1
- package/library/skills/vfx-hit-spark/SKILL.md +1 -1
- package/library/skills/vfx-lightning/SKILL.md +1 -1
- package/library/skills/vfx-magic-glow/SKILL.md +1 -1
- package/library/skills/vfx-muzzle-flash/SKILL.md +1 -1
- package/library/skills/vfx-smoke/SKILL.md +1 -1
- package/library/skills/vfx-water-ripple/SKILL.md +1 -1
- package/library/skills/voice-line/SKILL.md +1 -1
- package/library/skills/web-and-touch-input/SKILL.md +38 -0
- package/library/skills/web-and-touch-input/resource.yaml +28 -0
- package/library/skills/web-compatibility-look/SKILL.md +62 -0
- package/library/skills/web-compatibility-look/resource.yaml +30 -0
- package/library/skills/world-building-3d/SKILL.md +8 -1
- package/library/skills/world-building-3d/references/spatial-tools.md +1 -1
- package/library/skills/world-building-3d/resource.yaml +2 -1
- package/library/skills/writing-plans/SKILL.md +1 -1
- package/library/skills/writing-skills/SKILL.md +1 -1
- package/library/templates/3d-lan-multiplayer-starter/resource.yaml +2 -2
- package/library/tools/attach-to-surface/resource.yaml +142 -0
- package/library/tools/batch/resource.yaml +9 -3
- package/library/tools/connect-ports/resource.yaml +120 -0
- package/library/tools/connect-signal/resource.yaml +3 -2
- package/library/tools/debug-views/resource.yaml +94 -0
- package/library/tools/frame-nodes/resource.yaml +104 -0
- package/library/tools/frame-shot/resource.yaml +134 -0
- package/library/tools/generate-motion/resource.yaml +44 -9
- package/library/tools/get-board/resource.yaml +50 -0
- package/library/tools/get-project-context/resource.yaml +13 -2
- package/library/tools/grep/resource.yaml +77 -0
- package/library/tools/inspect-asset/resource.yaml +71 -0
- package/library/tools/inspect-node/resource.yaml +9 -2
- package/library/tools/inspect-resource/resource.yaml +16 -5
- package/library/tools/instantiate-scene/resource.yaml +27 -2
- package/library/tools/measure/resource.yaml +96 -0
- package/library/tools/place-adjacent/resource.yaml +113 -0
- package/library/tools/play/resource.yaml +15 -2
- package/library/tools/raycast/resource.yaml +101 -0
- package/library/tools/read-file/resource.yaml +36 -2
- package/library/tools/read-library/resource.yaml +2 -2
- package/library/tools/repeat-along/resource.yaml +129 -0
- package/library/tools/replace-node/resource.yaml +11 -5
- package/library/tools/scene-audit/resource.yaml +144 -0
- package/library/tools/screenshot/resource.yaml +13 -2
- package/library/tools/search-assets/resource.yaml +18 -0
- package/library/tools/shot-sheet/resource.yaml +110 -0
- package/library/tools/snap-to-surface/resource.yaml +4 -1
- package/library/tools/world-snapshot/resource.yaml +24 -3
- package/library/tools/zoom/resource.yaml +105 -0
- package/package.json +1 -1
- package/registry/generated/aliases.json +17 -3
- package/registry/generated/counts.json +3 -3
- package/registry/generated/gemini-extension.json +26 -4
- package/registry/generated/index.json +2154 -469
- package/registry/generated/marketplace.claude.json +2 -2
- package/registry/generated/plugin.claude.json +27 -5
- package/registry/generated/plugin.codex.json +28 -6
- package/registry/generated/plugin.cursor.json +27 -5
- package/registry/generated/plugin.factory.json +27 -5
- package/registry/generated/skills-index.md +36 -14
- package/registry/generated/skills-registry.json +421 -124
- package/registry/generated/templates-registry.json +2 -2
- package/library/skills/host-authoritative-state/SKILL.md +0 -332
- package/library/skills/host-authoritative-state/resource.yaml +0 -28
- package/library/skills/peer-to-peer-multiplayer/SKILL.md +0 -373
- package/library/skills/peer-to-peer-multiplayer/resource.yaml +0 -28
- package/library/skills/setup-multiplayer/SKILL.md +0 -336
- 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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
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
|
+
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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
|
|
19
|
-
>
|
|
20
|
-
>
|
|
21
|
-
>
|
|
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
|
|
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", //
|
|
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
|
|
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
|
|
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
|
+
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: "
|
|
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:
|
|
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
|