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,142 @@
|
|
|
1
|
+
id: tool/attach-to-surface
|
|
2
|
+
kind: tool
|
|
3
|
+
version: 1.0.0
|
|
4
|
+
summary: Mount a piece on a wall, ceiling or floor — turn its measured back into the surface found by a ray, keep it upright, seat it at a standoff. Saves the scene.
|
|
5
|
+
use_when:
|
|
6
|
+
- mounting a downpipe, gutter, lamp, AC unit, sign or fire escape on a facade
|
|
7
|
+
- turning a piece so its back faces a wall instead of guessing its rotation
|
|
8
|
+
- seating a piece against a surface at an exact standoff
|
|
9
|
+
do_not_use_when:
|
|
10
|
+
- seating a prop on a floor without turning it — summer_snap_to_surface
|
|
11
|
+
- joining a pipe to another pipe's end — summer_connect_ports
|
|
12
|
+
facets:
|
|
13
|
+
lifecycle:
|
|
14
|
+
- build
|
|
15
|
+
domains:
|
|
16
|
+
- scenes
|
|
17
|
+
- 3d
|
|
18
|
+
- world-building
|
|
19
|
+
- level-design
|
|
20
|
+
modalities:
|
|
21
|
+
- scenes
|
|
22
|
+
compatibility:
|
|
23
|
+
engine: ">=4.6"
|
|
24
|
+
related:
|
|
25
|
+
tools:
|
|
26
|
+
- tool/raycast
|
|
27
|
+
- tool/snap-to-surface
|
|
28
|
+
- tool/inspect-asset
|
|
29
|
+
- tool/starcast
|
|
30
|
+
skills:
|
|
31
|
+
- skill/spatial-placement
|
|
32
|
+
source: official
|
|
33
|
+
license: MIT
|
|
34
|
+
status: preview
|
|
35
|
+
aliases:
|
|
36
|
+
- summer_attach_to_surface
|
|
37
|
+
implementation:
|
|
38
|
+
module: src/mcp/tools/placement-tools.ts
|
|
39
|
+
export: registerPlacementTools
|
|
40
|
+
surfaces:
|
|
41
|
+
mcp:
|
|
42
|
+
tool_name: summer_attach_to_surface
|
|
43
|
+
remote: false
|
|
44
|
+
input_schema:
|
|
45
|
+
type: object
|
|
46
|
+
properties:
|
|
47
|
+
scenePath:
|
|
48
|
+
type: string
|
|
49
|
+
minLength: 1
|
|
50
|
+
maxLength: 512
|
|
51
|
+
description: Exact scene, e.g. 'res://levels/street.tscn'. It must be open; physics rays need it to be the active tab.
|
|
52
|
+
subject:
|
|
53
|
+
type: string
|
|
54
|
+
minLength: 1
|
|
55
|
+
maxLength: 256
|
|
56
|
+
description: Piece to mount (exact path from the scene root).
|
|
57
|
+
surface:
|
|
58
|
+
type: string
|
|
59
|
+
minLength: 1
|
|
60
|
+
maxLength: 256
|
|
61
|
+
description: Surface node. Without ray, the ray runs from the subject's origin to the nearest point of this node's bounds; with ray, hits on other nodes are skipped. The seat must land on this node (or inside it); a seat on any other node is refused and the piece is put back.
|
|
62
|
+
ray:
|
|
63
|
+
type: object
|
|
64
|
+
properties:
|
|
65
|
+
origin:
|
|
66
|
+
type: array
|
|
67
|
+
minItems: 3
|
|
68
|
+
maxItems: 3
|
|
69
|
+
items:
|
|
70
|
+
type: number
|
|
71
|
+
description: Ray start [x, y, z] in scene space.
|
|
72
|
+
direction:
|
|
73
|
+
type: array
|
|
74
|
+
minItems: 3
|
|
75
|
+
maxItems: 3
|
|
76
|
+
items:
|
|
77
|
+
type: number
|
|
78
|
+
description: Ray direction [x, y, z].
|
|
79
|
+
required:
|
|
80
|
+
- origin
|
|
81
|
+
- direction
|
|
82
|
+
additionalProperties: false
|
|
83
|
+
description: Explicit ray that finds the surface plane and its normal. Pass this or surface (or both). With a ray only, a seat on another node is refused unless that node lies on the hit plane (a coplanar neighbour module, warned).
|
|
84
|
+
backAxis:
|
|
85
|
+
type: string
|
|
86
|
+
enum: ["+x", "-x", "+y", "-y", "+z", "-z"]
|
|
87
|
+
default: "-z"
|
|
88
|
+
description: The subject's LOCAL axis that faces into the surface. Measure it with summer_inspect_asset.
|
|
89
|
+
upAxis:
|
|
90
|
+
type: string
|
|
91
|
+
enum: ["+x", "-x", "+y", "-y", "+z", "-z"]
|
|
92
|
+
default: "+y"
|
|
93
|
+
description: The subject's LOCAL axis kept toward worldUp; not on the same line as backAxis.
|
|
94
|
+
worldUp:
|
|
95
|
+
type: array
|
|
96
|
+
minItems: 3
|
|
97
|
+
maxItems: 3
|
|
98
|
+
items:
|
|
99
|
+
type: number
|
|
100
|
+
default: [0, 1, 0]
|
|
101
|
+
description: World direction the upAxis follows (projected onto the surface).
|
|
102
|
+
standoff:
|
|
103
|
+
type: number
|
|
104
|
+
minimum: 0
|
|
105
|
+
maximum: 10
|
|
106
|
+
default: 0
|
|
107
|
+
description: Gap between the subject's measured back face (the extreme of its visible bounds along backAxis) and the surface.
|
|
108
|
+
placeAt:
|
|
109
|
+
type: string
|
|
110
|
+
enum: [current, hit]
|
|
111
|
+
default: current
|
|
112
|
+
description: "current: the piece keeps its height and its place along the surface and only moves along the surface normal. hit: it also slides so the centre of its back face lands on the ray hit point (its height then follows the ray)."
|
|
113
|
+
maxMove:
|
|
114
|
+
type: number
|
|
115
|
+
exclusiveMinimum: 0
|
|
116
|
+
maximum: 100
|
|
117
|
+
default: 2
|
|
118
|
+
description: Refuse, changing nothing, when the piece would end farther than this from where it starts. Place the piece near its mount first; raise this only for a deliberate long move.
|
|
119
|
+
maxDistance:
|
|
120
|
+
type: number
|
|
121
|
+
exclusiveMinimum: 0
|
|
122
|
+
maximum: 1000
|
|
123
|
+
default: 20
|
|
124
|
+
description: Maximum ray length when looking for the surface.
|
|
125
|
+
collisionMask:
|
|
126
|
+
type: integer
|
|
127
|
+
minimum: 0
|
|
128
|
+
maximum: 4294967295
|
|
129
|
+
default: 4294967295
|
|
130
|
+
description: Godot 3D physics layer mask for the ray.
|
|
131
|
+
required:
|
|
132
|
+
- scenePath
|
|
133
|
+
- subject
|
|
134
|
+
additionalProperties: false
|
|
135
|
+
authority:
|
|
136
|
+
filesystem: true
|
|
137
|
+
editor_mutation: true
|
|
138
|
+
network: false
|
|
139
|
+
credentials: false
|
|
140
|
+
publish: false
|
|
141
|
+
evidence_checks:
|
|
142
|
+
- scene-valid
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
id: tool/batch
|
|
2
2
|
kind: tool
|
|
3
|
-
version: 1.0
|
|
4
|
-
summary: Run
|
|
3
|
+
version: 1.1.0
|
|
4
|
+
summary: Run engine ops in one call, verbatim; one undo step unless single-only ops split it. ReparentNode keeps and verifies its subtree; raw ConnectSignal is refused.
|
|
5
5
|
use_when:
|
|
6
6
|
- multi-node builds that should undo as one step (no single-only ops in the list)
|
|
7
7
|
- reaching engine ops that have no dedicated tool
|
|
8
|
+
- placing many kit pieces, one InstantiateScene op per piece with its position and rotation, read back with receipt summary
|
|
8
9
|
do_not_use_when:
|
|
9
10
|
- you need the whole list to be exactly one undo step but it contains a single-only op (the engine splits it; expect one undo step per chunk)
|
|
11
|
+
- connecting a signal — a raw ConnectSignal is refused; use summer_connect_signal
|
|
10
12
|
facets:
|
|
11
13
|
lifecycle:
|
|
12
14
|
- build
|
|
@@ -38,7 +40,11 @@ input_schema:
|
|
|
38
40
|
items:
|
|
39
41
|
type: object
|
|
40
42
|
additionalProperties: {}
|
|
41
|
-
description: Array of operation objects, each with 'op' plus its parameters
|
|
43
|
+
description: Array of operation objects, each with 'op' plus its parameters. InstantiateScene ops may also carry position, rotation_degrees, scale or transform; the tool sets them on the created node. Each InstantiateScene is its own engine request; the transforms of a run of them travel together before the next other op, so N placed pieces plus the save cost about N + 2 requests.
|
|
44
|
+
receipt:
|
|
45
|
+
type: string
|
|
46
|
+
enum: [full, summary]
|
|
47
|
+
description: "full (default): every engine receipt. summary: counts, failures with their op index, created node paths only (under 5 KB)."
|
|
42
48
|
required:
|
|
43
49
|
- ops
|
|
44
50
|
additionalProperties: false
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
id: tool/connect-ports
|
|
2
|
+
kind: tool
|
|
3
|
+
version: 1.0.0
|
|
4
|
+
summary: Join one piece's port (a Marker3D, or an open pipe end id such as '+Y') to another's, facing it; refuses joins that tilt the piece. Saves the scene.
|
|
5
|
+
use_when:
|
|
6
|
+
- joining a pipe, duct or gutter section end to end with the previous one
|
|
7
|
+
- fitting a bend, funnel or outlet onto a run
|
|
8
|
+
- snapping any two pieces together by named Marker3D anchors
|
|
9
|
+
do_not_use_when:
|
|
10
|
+
- mounting a piece on a wall — summer_attach_to_surface
|
|
11
|
+
- putting bounds faces together without ports — summer_place_adjacent
|
|
12
|
+
facets:
|
|
13
|
+
lifecycle:
|
|
14
|
+
- build
|
|
15
|
+
domains:
|
|
16
|
+
- scenes
|
|
17
|
+
- 3d
|
|
18
|
+
- world-building
|
|
19
|
+
modalities:
|
|
20
|
+
- scenes
|
|
21
|
+
compatibility:
|
|
22
|
+
engine: ">=4.6"
|
|
23
|
+
related:
|
|
24
|
+
tools:
|
|
25
|
+
- tool/inspect-asset
|
|
26
|
+
- tool/attach-to-surface
|
|
27
|
+
- tool/measure
|
|
28
|
+
skills:
|
|
29
|
+
- skill/spatial-placement
|
|
30
|
+
source: official
|
|
31
|
+
license: MIT
|
|
32
|
+
status: preview
|
|
33
|
+
aliases:
|
|
34
|
+
- summer_connect_ports
|
|
35
|
+
implementation:
|
|
36
|
+
module: src/mcp/tools/placement-tools.ts
|
|
37
|
+
export: registerPlacementTools
|
|
38
|
+
surfaces:
|
|
39
|
+
mcp:
|
|
40
|
+
tool_name: summer_connect_ports
|
|
41
|
+
remote: false
|
|
42
|
+
input_schema:
|
|
43
|
+
type: object
|
|
44
|
+
properties:
|
|
45
|
+
scenePath:
|
|
46
|
+
type: string
|
|
47
|
+
minLength: 1
|
|
48
|
+
maxLength: 512
|
|
49
|
+
description: Exact scene, e.g. 'res://levels/street.tscn'. It must be open in the editor (any tab).
|
|
50
|
+
subject:
|
|
51
|
+
type: string
|
|
52
|
+
minLength: 1
|
|
53
|
+
maxLength: 256
|
|
54
|
+
description: Piece to move.
|
|
55
|
+
subjectPort:
|
|
56
|
+
oneOf:
|
|
57
|
+
- type: string
|
|
58
|
+
minLength: 1
|
|
59
|
+
maxLength: 128
|
|
60
|
+
- type: integer
|
|
61
|
+
minimum: 0
|
|
62
|
+
maximum: 255
|
|
63
|
+
description: "An open-loop id from summer_inspect_asset, e.g. '+Y' (the outermost open loop facing +Y in the piece's own axes) or '+Y#2' (the next one facing +Y); or a Marker3D (or Node3D) name under the subject, whose -Z axis points out of the port; or an open-loop index. Ids and indices follow the stable order (facing, then position), never the radius."
|
|
64
|
+
target:
|
|
65
|
+
type: string
|
|
66
|
+
minLength: 1
|
|
67
|
+
maxLength: 256
|
|
68
|
+
description: Piece that stays put.
|
|
69
|
+
targetPort:
|
|
70
|
+
oneOf:
|
|
71
|
+
- type: string
|
|
72
|
+
minLength: 1
|
|
73
|
+
maxLength: 128
|
|
74
|
+
- type: integer
|
|
75
|
+
minimum: 0
|
|
76
|
+
maximum: 255
|
|
77
|
+
description: Port on the target (open-loop id such as '-Y', marker name, or open-loop index).
|
|
78
|
+
gap:
|
|
79
|
+
type: number
|
|
80
|
+
minimum: -1
|
|
81
|
+
maximum: 10
|
|
82
|
+
default: 0
|
|
83
|
+
description: Distance between the ports along the target port's direction.
|
|
84
|
+
rollDegrees:
|
|
85
|
+
type: number
|
|
86
|
+
minimum: -360
|
|
87
|
+
maximum: 360
|
|
88
|
+
default: 0
|
|
89
|
+
description: "Extra turn of the subject, in degrees, about the joined port axis, applied after the ports are lined up. Axis: the target port's direction reversed, pointing from the joint into the target (receipt roll_axis). Sign: right-hand rule about that axis; positive turns counter-clockwise when you look back along the axis from inside the target toward the subject. Zero: the shortest turn that makes the subject's port face the target's from the subject's CURRENT orientation, so the same value gives different results from different start poses. Read other_ports in the receipt; once the ports are joined, a second call turns by exactly rollDegrees about the joint (180 flips a bend's free end to the other side)."
|
|
90
|
+
maxTiltDegrees:
|
|
91
|
+
type: number
|
|
92
|
+
minimum: 0
|
|
93
|
+
maximum: 180
|
|
94
|
+
default: 5
|
|
95
|
+
description: Refuse the join, changing nothing, when it would tilt the subject's up axis (its local +Y) more than this many degrees from where it points now. Turning about the up axis is never tilt. The refusal names the predicted tilt and the subject ports that would join within the limit.
|
|
96
|
+
allowTilt:
|
|
97
|
+
type: boolean
|
|
98
|
+
default: false
|
|
99
|
+
description: true joins even when the subject tilts more than maxTiltDegrees (a bend laid on its side, a sloped run). The receipt still reports tilt_degrees.
|
|
100
|
+
maxTriangles:
|
|
101
|
+
type: integer
|
|
102
|
+
minimum: 100
|
|
103
|
+
maximum: 300000
|
|
104
|
+
default: 60000
|
|
105
|
+
description: Triangle budget (100-300000) per node when ports are open-loop ids or indices.
|
|
106
|
+
required:
|
|
107
|
+
- scenePath
|
|
108
|
+
- subject
|
|
109
|
+
- subjectPort
|
|
110
|
+
- target
|
|
111
|
+
- targetPort
|
|
112
|
+
additionalProperties: false
|
|
113
|
+
authority:
|
|
114
|
+
filesystem: true
|
|
115
|
+
editor_mutation: true
|
|
116
|
+
network: false
|
|
117
|
+
credentials: false
|
|
118
|
+
publish: false
|
|
119
|
+
evidence_checks:
|
|
120
|
+
- scene-valid
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
id: tool/connect-signal
|
|
2
2
|
kind: tool
|
|
3
|
-
version: 1.0
|
|
4
|
-
summary: Connect a signal between two nodes; the receiver
|
|
3
|
+
version: 1.1.0
|
|
4
|
+
summary: Connect a signal between two nodes so the saved scene keeps it (CONNECT_PERSIST, verified from the saved .tscn); the receiver should define the target method.
|
|
5
5
|
use_when:
|
|
6
6
|
- wiring events like body_entered, pressed, or timeout
|
|
7
7
|
- '"when the button is pressed, call my function"'
|
|
8
8
|
- running code when the player enters an Area3D or a Timer finishes
|
|
9
9
|
do_not_use_when:
|
|
10
10
|
- the receiver script does not define the target method yet — write it first with summer_write_file / summer_replace_text
|
|
11
|
+
- the scene is a binary .scn — connect from summer_run_script with CONNECT_PERSIST, then summer_save_scene
|
|
11
12
|
facets:
|
|
12
13
|
lifecycle:
|
|
13
14
|
- build
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
id: tool/debug-views
|
|
2
|
+
kind: tool
|
|
3
|
+
version: 1.0.0
|
|
4
|
+
summary: 'One pose as a grid of beauty, lighting-only, unshaded/albedo, world normals, overdraw and wireframe views.'
|
|
5
|
+
use_when:
|
|
6
|
+
- 'understanding WHY a shot reads badly: light direction and pools, texture/value balance, normal seams, overdraw hot spots, triangle density'
|
|
7
|
+
- 'checking floating or duplicated geometry, flipped normals or missing light in one framed view'
|
|
8
|
+
- 'judging an environment like an artist, on the weakest shot of a sheet'
|
|
9
|
+
do_not_use_when:
|
|
10
|
+
- 'you only need the final image — summer_shot_sheet or summer_frame_nodes'
|
|
11
|
+
- 'a pixel-exact close-up of a problem — summer_zoom with the same pose'
|
|
12
|
+
facets:
|
|
13
|
+
lifecycle:
|
|
14
|
+
- build
|
|
15
|
+
domains:
|
|
16
|
+
- verification
|
|
17
|
+
- scenes
|
|
18
|
+
- 3d
|
|
19
|
+
modalities:
|
|
20
|
+
- scenes
|
|
21
|
+
compatibility:
|
|
22
|
+
engine: ">=4.6"
|
|
23
|
+
related:
|
|
24
|
+
tools:
|
|
25
|
+
- tool/shot-sheet
|
|
26
|
+
- tool/zoom
|
|
27
|
+
- tool/frame-shot
|
|
28
|
+
- tool/camera-bookmark
|
|
29
|
+
skills:
|
|
30
|
+
- skill/verifying-scenes
|
|
31
|
+
source: official
|
|
32
|
+
license: MIT
|
|
33
|
+
status: preview
|
|
34
|
+
aliases:
|
|
35
|
+
- summer_debug_views
|
|
36
|
+
implementation:
|
|
37
|
+
module: src/mcp/tools/seeing-tools.ts
|
|
38
|
+
export: registerSeeingTools
|
|
39
|
+
surfaces:
|
|
40
|
+
mcp:
|
|
41
|
+
tool_name: summer_debug_views
|
|
42
|
+
remote: false
|
|
43
|
+
input_schema:
|
|
44
|
+
type: object
|
|
45
|
+
properties:
|
|
46
|
+
scenePath:
|
|
47
|
+
type: string
|
|
48
|
+
description: Scene to look at, e.g. "res://levels/town.tscn" (the SAVED file). Omit for the scene open in the editor.
|
|
49
|
+
bookmark_name:
|
|
50
|
+
type: string
|
|
51
|
+
description: Pose from a camera bookmark (summer_camera_bookmark). Use INSTEAD of camera_position/camera_look_at.
|
|
52
|
+
camera_position:
|
|
53
|
+
type: string
|
|
54
|
+
description: 'Explicit pose: camera position, "Vector3(x, y, z)". Goes with camera_look_at.'
|
|
55
|
+
camera_look_at:
|
|
56
|
+
type: string
|
|
57
|
+
description: 'Explicit pose: point the camera looks at, "Vector3(x, y, z)".'
|
|
58
|
+
fov:
|
|
59
|
+
type: number
|
|
60
|
+
description: "Vertical field of view in degrees (1..179). Default: the bookmark's own, or 60."
|
|
61
|
+
views:
|
|
62
|
+
type: array
|
|
63
|
+
items:
|
|
64
|
+
type: string
|
|
65
|
+
enum:
|
|
66
|
+
- beauty
|
|
67
|
+
- lighting
|
|
68
|
+
- unshaded
|
|
69
|
+
- normals
|
|
70
|
+
- overdraw
|
|
71
|
+
- wireframe
|
|
72
|
+
maxItems: 8
|
|
73
|
+
description: "Which views, in grid order (default all six: beauty, lighting, unshaded, normals, overdraw, wireframe)."
|
|
74
|
+
update_previous:
|
|
75
|
+
type: boolean
|
|
76
|
+
description: 'bookmark_name only: replace the bookmark''s previous image (compare baseline) with this beauty tile. Default false: only a missing slot is created.'
|
|
77
|
+
max_size:
|
|
78
|
+
type: integer
|
|
79
|
+
minimum: 64
|
|
80
|
+
maximum: 4096
|
|
81
|
+
description: Longest edge of the returned JPEG in pixels (default 1536). Bigger costs more context; up to 4096 for detail work on a PC.
|
|
82
|
+
aspect:
|
|
83
|
+
type: number
|
|
84
|
+
description: Frame width/height (default 1.7778 = 16:9). Every tile uses it.
|
|
85
|
+
save_to:
|
|
86
|
+
type: string
|
|
87
|
+
description: Also write the returned image to res://.summer/shots/saved/<name>.jpg (1-64 of A-Z a-z 0-9 _ -; needs max_size <= 1024). Nothing is written without it, except one previous-image slot per rendered bookmark.
|
|
88
|
+
additionalProperties: false
|
|
89
|
+
authority:
|
|
90
|
+
filesystem: true
|
|
91
|
+
editor_mutation: false
|
|
92
|
+
network: false
|
|
93
|
+
credentials: false
|
|
94
|
+
publish: false
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
id: tool/frame-nodes
|
|
2
|
+
kind: tool
|
|
3
|
+
version: 1.0.0
|
|
4
|
+
summary: 'Frame nodes by their world bounds and render with the scene''s REAL environment and lights (optionally save the pose as a bookmark).'
|
|
5
|
+
use_when:
|
|
6
|
+
- '"show me the houses/props with the real lighting" — fit a camera to one or more nodes and render it with the scene''s WorldEnvironment'
|
|
7
|
+
- 'framing a node from a chosen side (front/back/left/right/top/iso or an explicit direction) for a lighting or mood check; an explicit direction is checked for walls and back faces between the camera and the nodes'
|
|
8
|
+
- 'creating a hero-view bookmark that fits a group of nodes, so later shot sheets and compares line up'
|
|
9
|
+
do_not_use_when:
|
|
10
|
+
- 'the editor viewport or a game frame is what you need — summer_screenshot'
|
|
11
|
+
- 'you do not know a good view — summer_frame_shot finds and scores poses for a shot type'
|
|
12
|
+
- 'requires an engine build with ScenePreview fixed-pose framings (Summer Engine 0.5.66 or newer); older engines return engine_lacks_op or framing_unsupported'
|
|
13
|
+
facets:
|
|
14
|
+
lifecycle:
|
|
15
|
+
- build
|
|
16
|
+
domains:
|
|
17
|
+
- verification
|
|
18
|
+
- scenes
|
|
19
|
+
- 3d
|
|
20
|
+
modalities:
|
|
21
|
+
- scenes
|
|
22
|
+
compatibility:
|
|
23
|
+
engine: ">=4.6"
|
|
24
|
+
related:
|
|
25
|
+
tools:
|
|
26
|
+
- tool/screenshot
|
|
27
|
+
- tool/camera-bookmark
|
|
28
|
+
- tool/shot-sheet
|
|
29
|
+
- tool/frame-shot
|
|
30
|
+
- tool/zoom
|
|
31
|
+
skills:
|
|
32
|
+
- skill/verifying-scenes
|
|
33
|
+
source: official
|
|
34
|
+
license: MIT
|
|
35
|
+
status: preview
|
|
36
|
+
aliases:
|
|
37
|
+
- summer_frame_nodes
|
|
38
|
+
implementation:
|
|
39
|
+
module: src/mcp/tools/seeing-tools.ts
|
|
40
|
+
export: registerSeeingTools
|
|
41
|
+
surfaces:
|
|
42
|
+
mcp:
|
|
43
|
+
tool_name: summer_frame_nodes
|
|
44
|
+
remote: false
|
|
45
|
+
input_schema:
|
|
46
|
+
type: object
|
|
47
|
+
properties:
|
|
48
|
+
scenePath:
|
|
49
|
+
type: string
|
|
50
|
+
description: Scene to look at, e.g. "res://levels/town.tscn" (the SAVED file). Omit for the scene open in the editor.
|
|
51
|
+
nodes:
|
|
52
|
+
type: array
|
|
53
|
+
items:
|
|
54
|
+
type: string
|
|
55
|
+
minItems: 1
|
|
56
|
+
maxItems: 16
|
|
57
|
+
description: Node paths relative to the scene root ("House1", "Props/Crate_02"). The camera fits their combined WORLD bounds (visible meshes, children included).
|
|
58
|
+
direction:
|
|
59
|
+
type: string
|
|
60
|
+
enum:
|
|
61
|
+
- front
|
|
62
|
+
- back
|
|
63
|
+
- left
|
|
64
|
+
- right
|
|
65
|
+
- top
|
|
66
|
+
- iso
|
|
67
|
+
description: 'Side the camera sits on: "front" (+Z), "back" (-Z), "left" (-X), "right" (+X), "top", "iso" (default, 3/4 from -X,+Y,-Z like summer_screenshot). Use from for anything else.'
|
|
68
|
+
from:
|
|
69
|
+
type: string
|
|
70
|
+
description: 'Explicit direction FROM the nodes TOWARD the camera, "Vector3(1, 0.4, 2)". Replaces direction. The fitted pose is checked in-engine: when walls block it, or it puts the camera behind or inside a one-sided surface (whose back is not drawn, so the image would look THROUGH it), the caption opens with a WARNING and offers the nearest valid from (+ fov); the requested view is still rendered.'
|
|
71
|
+
fill:
|
|
72
|
+
type: number
|
|
73
|
+
description: Share of the frame the nodes span along their limiting dimension (0.1..1.5, default 0.8).
|
|
74
|
+
fov:
|
|
75
|
+
type: number
|
|
76
|
+
description: Vertical field of view in degrees (default 50).
|
|
77
|
+
max_size:
|
|
78
|
+
type: integer
|
|
79
|
+
minimum: 64
|
|
80
|
+
maximum: 4096
|
|
81
|
+
description: Longest edge of the returned JPEG in pixels (default 1024). Bigger costs more context; up to 4096 for detail work on a PC.
|
|
82
|
+
aspect:
|
|
83
|
+
type: number
|
|
84
|
+
description: Frame width/height (default 1.7778 = 16:9). Every tile uses it.
|
|
85
|
+
marks:
|
|
86
|
+
type: boolean
|
|
87
|
+
description: 'Numbered Set-of-Mark labels over the largest visible nodes; the caption maps label -> node path (feed a label to summer_zoom mark). Each labelled node gets an occlusion test (centre + 4 bounds points); a node hidden behind other geometry is noted "(hidden behind <path>)" — ignore its label.'
|
|
88
|
+
max_marks:
|
|
89
|
+
type: integer
|
|
90
|
+
minimum: 1
|
|
91
|
+
maximum: 128
|
|
92
|
+
description: "marks only: cap on labels (engine default 32)."
|
|
93
|
+
bookmark_name:
|
|
94
|
+
type: string
|
|
95
|
+
description: Also save the fitted pose as this camera bookmark (1-64 of A-Z a-z 0-9 _ -), so later renders line up with it.
|
|
96
|
+
required:
|
|
97
|
+
- nodes
|
|
98
|
+
additionalProperties: false
|
|
99
|
+
authority:
|
|
100
|
+
filesystem: true
|
|
101
|
+
editor_mutation: false
|
|
102
|
+
network: false
|
|
103
|
+
credentials: false
|
|
104
|
+
publish: false
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
id: tool/frame-shot
|
|
2
|
+
kind: tool
|
|
3
|
+
version: 1.0.0
|
|
4
|
+
summary: 'Smart framing: find, score and bookmark camera poses for a shot type (establishing, eye level, low-angle, detail, corridor) with in-engine visibility tests.'
|
|
5
|
+
use_when:
|
|
6
|
+
- '"find a good view of X" / "frame an establishing shot" / "show it from the player''s eye" / "look down the street"'
|
|
7
|
+
- 'choosing hero views to bookmark for an environment review loop'
|
|
8
|
+
- 'checking whether walls or terrain block the view of a subject, and which props frame it (a camera behind or inside a one-sided wall is rejected; transparent foliage and glass are see-through cover)'
|
|
9
|
+
- 'three different establishing views at once (one per side while the score allows), scored on the key light''s direction and the world edge below the horizon'
|
|
10
|
+
do_not_use_when:
|
|
11
|
+
- 'you already have the pose — summer_shot_sheet, summer_frame_nodes or summer_screenshot'
|
|
12
|
+
- 'gameplay camera collision in the running game — that is the camera rig''s job (camera-collision-avoidance knowledge)'
|
|
13
|
+
- 'a 2D scene'
|
|
14
|
+
facets:
|
|
15
|
+
lifecycle:
|
|
16
|
+
- build
|
|
17
|
+
domains:
|
|
18
|
+
- verification
|
|
19
|
+
- scenes
|
|
20
|
+
- 3d
|
|
21
|
+
modalities:
|
|
22
|
+
- scenes
|
|
23
|
+
compatibility:
|
|
24
|
+
engine: ">=4.6"
|
|
25
|
+
related:
|
|
26
|
+
tools:
|
|
27
|
+
- tool/shot-sheet
|
|
28
|
+
- tool/camera-bookmark
|
|
29
|
+
- tool/frame-nodes
|
|
30
|
+
- tool/debug-views
|
|
31
|
+
- tool/zoom
|
|
32
|
+
skills:
|
|
33
|
+
- skill/verifying-scenes
|
|
34
|
+
source: official
|
|
35
|
+
license: MIT
|
|
36
|
+
status: preview
|
|
37
|
+
aliases:
|
|
38
|
+
- summer_frame_shot
|
|
39
|
+
implementation:
|
|
40
|
+
module: src/mcp/tools/seeing-tools.ts
|
|
41
|
+
export: registerSeeingTools
|
|
42
|
+
surfaces:
|
|
43
|
+
mcp:
|
|
44
|
+
tool_name: summer_frame_shot
|
|
45
|
+
remote: false
|
|
46
|
+
input_schema:
|
|
47
|
+
type: object
|
|
48
|
+
properties:
|
|
49
|
+
scenePath:
|
|
50
|
+
type: string
|
|
51
|
+
description: Scene to look at, e.g. "res://levels/town.tscn" (the SAVED file). Omit for the scene open in the editor.
|
|
52
|
+
shot:
|
|
53
|
+
type: string
|
|
54
|
+
enum:
|
|
55
|
+
- establishing
|
|
56
|
+
- eye_level
|
|
57
|
+
- low_angle
|
|
58
|
+
- detail
|
|
59
|
+
- corridor
|
|
60
|
+
description: '"establishing" (wide, whole subject, 12-40 deg up; a pose showing more than 15% empty ground or world edge ranks below every pose showing less), "eye_level" (player eye at spawn: its Camera3D kept inside 1.5-1.8 m, or eye_height, above the walkable surface under the camera), "low_angle" (hero, camera near the ground looking up), "detail" (close-up), "corridor" (down a lane/corridor inside the subject, found by a free-space scan, at eye height; prefers looking in from its open end). Eye-level and corridor cameras are never raised: a pose that cannot stand at eye height moves horizontally or is rejected. Every top pose states its camera height above the surface below it and its absolute y.'
|
|
61
|
+
subject:
|
|
62
|
+
type: array
|
|
63
|
+
items:
|
|
64
|
+
type: string
|
|
65
|
+
maxItems: 8
|
|
66
|
+
description: Node paths to frame (required except for eye_level, where it is what the player looks at).
|
|
67
|
+
spawn:
|
|
68
|
+
type: string
|
|
69
|
+
description: "eye_level only: node the player stands at, e.g. the player or a spawn marker. Its own geometry never counts as an occluder."
|
|
70
|
+
eye_height:
|
|
71
|
+
type: number
|
|
72
|
+
description: "eye_level/corridor: exact camera height in metres above the walkable surface under the camera (default: 1.6; an eye_level spawn's own Camera3D keeps its height clamped into 1.5-1.8)."
|
|
73
|
+
fov:
|
|
74
|
+
type: number
|
|
75
|
+
description: Override the shot type's field of view (establishing 55, eye_level 60/75, low_angle 60 then widened, detail 40, corridor 60/75).
|
|
76
|
+
aspect:
|
|
77
|
+
type: number
|
|
78
|
+
description: Frame width/height (default 1.7778 = 16:9). Every tile uses it.
|
|
79
|
+
occluders:
|
|
80
|
+
type: object
|
|
81
|
+
properties:
|
|
82
|
+
hard:
|
|
83
|
+
type: array
|
|
84
|
+
items:
|
|
85
|
+
type: string
|
|
86
|
+
description: "Path prefixes that must never block the view (walls, terrain): a pose they block is rejected."
|
|
87
|
+
soft:
|
|
88
|
+
type: array
|
|
89
|
+
items:
|
|
90
|
+
type: string
|
|
91
|
+
description: Path prefixes that may sit in front as framing (foliage, fences, props).
|
|
92
|
+
ignore:
|
|
93
|
+
type: array
|
|
94
|
+
items:
|
|
95
|
+
type: string
|
|
96
|
+
description: Path prefixes left out of the visibility pass entirely.
|
|
97
|
+
hard_layers:
|
|
98
|
+
type: integer
|
|
99
|
+
description: "Physics layer mask: geometry whose nearest CollisionObject3D is on these layers is hard."
|
|
100
|
+
soft_layers:
|
|
101
|
+
type: integer
|
|
102
|
+
description: Physics layer mask for soft geometry.
|
|
103
|
+
additionalProperties: false
|
|
104
|
+
description: "Override the occluder classification. Default: path names (wall/house/terrain... = hard; tree/fence/lamp/prop/pipe... = soft), MultiMesh = soft, else size (<= 2.5 m = soft). The caption reports the counts by rule."
|
|
105
|
+
max_soft_fraction:
|
|
106
|
+
type: number
|
|
107
|
+
description: Most of the subject that soft geometry may cover before a pose is rejected (0..1, default 0.67).
|
|
108
|
+
bookmark_name:
|
|
109
|
+
type: string
|
|
110
|
+
description: Name for the saved best pose (default <shot>_<subject leaf>).
|
|
111
|
+
save_bookmark:
|
|
112
|
+
type: boolean
|
|
113
|
+
description: Save the best pose as a camera bookmark (default true).
|
|
114
|
+
render:
|
|
115
|
+
type: string
|
|
116
|
+
enum:
|
|
117
|
+
- sheet
|
|
118
|
+
- best
|
|
119
|
+
- none
|
|
120
|
+
description: '"sheet" (default): the top 3 in one labelled grid with real lighting; "best": the winner only; "none": scores only.'
|
|
121
|
+
max_size:
|
|
122
|
+
type: integer
|
|
123
|
+
minimum: 64
|
|
124
|
+
maximum: 4096
|
|
125
|
+
description: Longest edge of the returned JPEG in pixels (default 1536). Bigger costs more context; up to 4096 for detail work on a PC.
|
|
126
|
+
required:
|
|
127
|
+
- shot
|
|
128
|
+
additionalProperties: false
|
|
129
|
+
authority:
|
|
130
|
+
filesystem: true
|
|
131
|
+
editor_mutation: false
|
|
132
|
+
network: false
|
|
133
|
+
credentials: false
|
|
134
|
+
publish: false
|