evomeme 0.1.9 → 0.1.10-beta.13
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/README.md +2 -0
- package/dist/canvas-public/app.js +509 -5999
- package/dist/canvas-public/assets/presets/catalog.json +47 -0
- package/dist/canvas-public/assets/presets/tiles/A_01_CaoDi.png +0 -0
- package/dist/canvas-public/assets/presets/tiles/A_02_ShaMo.png +0 -0
- package/dist/canvas-public/assets/presets/tiles/A_03_TianKong.png +0 -0
- package/dist/canvas-public/assets/presets/tiles/A_04_ShuiBo.png +0 -0
- package/dist/canvas-public/assets/presets/tiles/A_05_HaiMian.png +0 -0
- package/dist/canvas-public/assets/presets/tiles/A_06_MuDiBan.png +0 -0
- package/dist/canvas-public/assets/presets/tiles/A_07_ShiZhuan.png +0 -0
- package/dist/canvas-public/assets/presets/tiles/A_08_AnRongYan.png +0 -0
- package/dist/canvas-public/assets/presets/tiles/A_09_QingTaiShi.png +0 -0
- package/dist/canvas-public/assets/presets/tiles/A_10_ShenHai.png +0 -0
- package/dist/canvas-public/assets/presets/tiles/A_11_HuiYanShi.png +0 -0
- package/dist/canvas-public/assets/presets/tiles/A_12_HongTu.png +0 -0
- package/dist/canvas-public/assets/presets/tiles/A_13_GengDi.png +0 -0
- package/dist/canvas-public/assets/presets/tiles/A_14_HuoShanYan.png +0 -0
- package/dist/canvas-public/assets/presets/tiles/A_15_NiTu.png +0 -0
- package/dist/canvas-public/assets/presets/tiles/A_16_HuangSha.png +0 -0
- package/dist/canvas-public/assets/presets/tiles/A_17_CongLin.png +0 -0
- package/dist/canvas-public/assets/presets/tiles/A_18_ZiYanShi.png +0 -0
- package/dist/canvas-public/assets/presets/tiles/A_19_MoGuTu.png +0 -0
- package/dist/canvas-public/assets/presets/tiles/A_20_HuaDian.png +0 -0
- package/dist/canvas-public/assets/presets/tiles/A_21_HaiLang.png +0 -0
- package/dist/canvas-public/assets/presets/tiles/A_22_GanTu.png +0 -0
- package/dist/canvas-public/assets/presets/tiles/A_23_QingTaiShiBan.png +0 -0
- package/dist/canvas-public/assets/presets/tiles/A_24_XingKong.png +0 -0
- package/dist/canvas-public/assets/presets/tiles/A_25_MoFaFuWen.png +0 -0
- package/dist/canvas-public/assets/presets/tiles/A_26_ShiTuYeDi.png +0 -0
- package/dist/canvas-public/assets/presets/tiles/A_27_LanZhuan.png +0 -0
- package/dist/canvas-public/assets/presets/tiles/A_28_HongZhuan.png +0 -0
- package/dist/canvas-public/assets/presets/tiles/A_29_YueQiu.png +0 -0
- package/dist/canvas-public/assets/presets/tiles/A_30_JinShuGe.png +0 -0
- package/dist/canvas-public/assets/presets/tiles/A_31_JinShuJingGai.png +0 -0
- package/dist/canvas-public/assets/presets/tiles/A_32_ShuZiChuang.png +0 -0
- package/dist/canvas-public/canvas/actions.js +144 -0
- package/dist/canvas-public/canvas/camera.js +28 -0
- package/dist/canvas-public/canvas/chrome.js +14 -0
- package/dist/canvas-public/canvas/data.js +123 -0
- package/dist/canvas-public/canvas/dependencies.js +19 -0
- package/dist/canvas-public/canvas/interactions.js +544 -0
- package/dist/canvas-public/canvas/panel-resize.js +5 -0
- package/dist/canvas-public/canvas/renderer.js +297 -0
- package/dist/canvas-public/canvas/selection.js +62 -0
- package/dist/canvas-public/canvas/serialization.js +118 -0
- package/dist/canvas-public/canvas/sync.js +202 -0
- package/dist/canvas-public/core/api.js +32 -0
- package/dist/canvas-public/core/feature-registry.js +29 -0
- package/dist/canvas-public/core/feature-state.js +228 -0
- package/dist/canvas-public/core/layout.js +133 -0
- package/dist/canvas-public/core/operations.js +38 -0
- package/dist/canvas-public/core/project.js +203 -0
- package/dist/canvas-public/core/state.js +27 -0
- package/dist/canvas-public/dialogs/context-menu.js +118 -0
- package/dist/canvas-public/elements/base.js +100 -0
- package/dist/canvas-public/elements/connections.js +105 -0
- package/dist/canvas-public/elements/drag.js +53 -0
- package/dist/canvas-public/elements/image.js +259 -0
- package/dist/canvas-public/elements/loading-recovery.js +5 -0
- package/dist/canvas-public/elements/loading.js +21 -0
- package/dist/canvas-public/elements/map.js +64 -0
- package/dist/canvas-public/elements/registry.js +58 -0
- package/dist/canvas-public/elements/replacement.js +78 -0
- package/dist/canvas-public/elements/resize.js +210 -0
- package/dist/canvas-public/elements/task-pipeline.js +235 -0
- package/dist/canvas-public/elements/types.js +21 -0
- package/dist/canvas-public/elements/ui.js +14 -0
- package/dist/canvas-public/elements/video.js +64 -0
- package/dist/canvas-public/features/assets/local-assets.js +72 -0
- package/dist/canvas-public/features/assets/official-assets.js +539 -0
- package/dist/canvas-public/features/editing/canvas-size.js +532 -0
- package/dist/canvas-public/features/editing/color-key.js +471 -0
- package/dist/canvas-public/features/editing/cutout.js +20 -0
- package/dist/canvas-public/features/editing/interactive-image-editing.js +982 -0
- package/dist/canvas-public/features/editing/layer-decomposition.js +45 -0
- package/dist/canvas-public/features/editing/manual-split.js +115 -0
- package/dist/canvas-public/features/editing/perfect-pixel.js +299 -0
- package/dist/canvas-public/features/editing/scroll-preview.js +130 -0
- package/dist/canvas-public/features/editing/scroll-seam-elimination.js +71 -0
- package/dist/canvas-public/features/editing/seam-elimination.js +46 -0
- package/dist/canvas-public/features/editing/smart-split.js +49 -0
- package/dist/canvas-public/features/editing/source-preview.js +43 -0
- package/dist/canvas-public/features/editing/video-cycle.js +49 -0
- package/dist/canvas-public/features/editing/video-frames.js +35 -0
- package/dist/canvas-public/features/frame-editor/frame-editing.js +755 -0
- package/dist/canvas-public/features/frame-editor/frame-model.js +63 -0
- package/dist/canvas-public/features/frame-editor/playback.js +83 -0
- package/dist/canvas-public/features/frame-editor/preview.js +151 -0
- package/dist/canvas-public/features/generation/animation.js +272 -0
- package/dist/canvas-public/features/generation/asset-batch.js +102 -0
- package/dist/canvas-public/features/generation/direction.js +163 -0
- package/dist/canvas-public/features/generation/fields.js +73 -0
- package/dist/canvas-public/features/generation/game-ui.js +64 -0
- package/dist/canvas-public/features/generation/image.js +96 -0
- package/dist/canvas-public/features/generation/scroll-image.js +157 -0
- package/dist/canvas-public/features/generation/seamless-tile.js +52 -0
- package/dist/canvas-public/features/generation/tile-transition-atlas.js +79 -0
- package/dist/canvas-public/features/generation/video.js +105 -0
- package/dist/canvas-public/features/map/creation.js +73 -0
- package/dist/canvas-public/features/map/tile-map-editor.js +2520 -0
- package/dist/canvas-public/features/registry.js +59 -0
- package/dist/canvas-public/index.html +84 -259
- package/dist/canvas-public/inspector/controls.js +49 -0
- package/dist/canvas-public/inspector/frame-preview.js +11 -0
- package/dist/canvas-public/inspector/inspector.js +190 -0
- package/dist/canvas-public/inspector/media-inspector.js +517 -0
- package/dist/canvas-public/inspector/media-preview.js +56 -0
- package/dist/canvas-public/inspector/number-stepper.js +96 -0
- package/dist/canvas-public/inspector/resize.js +88 -0
- package/dist/canvas-public/inspector/scroll-preview.js +11 -0
- package/dist/canvas-public/inspector/ui-inspector.js +14 -0
- package/dist/canvas-public/language/en-US.js +1059 -0
- package/dist/canvas-public/language/index.js +91 -0
- package/dist/canvas-public/language/zh-CN.js +1059 -0
- package/dist/canvas-public/map/export.js +10 -0
- package/dist/canvas-public/map/inspector.js +8 -0
- package/dist/canvas-public/map/model.js +409 -0
- package/dist/canvas-public/map/tile-map-editor.js +2 -0
- package/dist/canvas-public/media/metadata.js +183 -0
- package/dist/canvas-public/media/support.js +183 -0
- package/dist/canvas-public/styles/base.css +49 -0
- package/dist/canvas-public/styles/canvas.css +127 -0
- package/dist/canvas-public/styles/controls.css +203 -0
- package/dist/canvas-public/styles/dialogs.css +521 -0
- package/dist/canvas-public/styles/feature-form.css +409 -0
- package/dist/canvas-public/styles/inspector.css +441 -0
- package/dist/canvas-public/styles/layout.css +344 -0
- package/dist/canvas-public/styles/map.css +11 -0
- package/dist/canvas-public/styles/nodes.css +636 -0
- package/dist/canvas-public/styles.css +9 -2247
- package/dist/canvas-public/ui/controls.js +222 -0
- package/dist/canvas-public/ui/elements.js +9 -0
- package/dist/canvas-public/ui/feature-controller.js +296 -0
- package/dist/canvas-public/ui/feature-form.js +402 -0
- package/dist/canvas-public/ui/settings.js +84 -0
- package/dist/canvas-public/ui/toolbar.js +55 -0
- package/dist/canvas-public/vendor/pixi-tilemap.js +126 -0
- package/dist/canvas-public/vendor/pixi.min.js +2340 -0
- package/dist/canvas-public/workers/color-key-worker.js +289 -0
- package/dist/image-workers/perfect-pixel/perfect-pixel-core.js +441 -0
- package/dist/image-workers/perfect-pixel/perfect-pixel-worker.cjs +10 -0
- package/dist/index.js +46710 -12400
- package/dist/skills/en-US/evomeme-canvas/SKILL.md +52 -0
- package/dist/skills/en-US/evomeme-canvas/agents/openai.yaml +7 -0
- package/dist/skills/en-US/evomeme-cloud-fs/SKILL.md +203 -0
- package/dist/skills/en-US/evomeme-cloud-fs/agents/openai.yaml +7 -0
- package/dist/skills/en-US/evomeme-cover/SKILL.md +131 -0
- package/dist/skills/en-US/evomeme-cover/agents/openai.yaml +7 -0
- package/dist/skills/en-US/evomeme-game-maker/SKILL.md +288 -0
- package/dist/skills/en-US/evomeme-game-maker/agents/openai.yaml +4 -0
- package/dist/skills/en-US/evomeme-login/SKILL.md +97 -0
- package/dist/skills/en-US/evomeme-login/agents/openai.yaml +7 -0
- package/dist/skills/en-US/evomeme-mcp/SKILL.md +71 -0
- package/dist/skills/en-US/evomeme-mcp/agents/openai.yaml +7 -0
- package/dist/skills/en-US/evomeme-mcp/references/troubleshooting.md +55 -0
- package/dist/skills/en-US/evomeme-native-bridge-sdk/SKILL.md +286 -0
- package/dist/skills/en-US/evomeme-native-bridge-sdk/agents/openai.yaml +8 -0
- package/dist/skills/en-US/evomeme-tos-upload/SKILL.md +47 -0
- package/dist/skills/en-US/evomeme-tos-upload/agents/openai.yaml +5 -0
- package/dist/skills/en-US/evomeme-ui/SKILL.md +123 -0
- package/dist/skills/en-US/evomeme-ui/agents/openai.yaml +4 -0
- package/dist/skills/en-US/evomeme-ui/references/host-layout.md +69 -0
- package/dist/skills/en-US/game-art/SKILL.md +121 -0
- package/dist/skills/en-US/game-art/agents/openai.yaml +8 -0
- package/dist/skills/en-US/game-asset-align/SKILL.md +47 -0
- package/dist/skills/en-US/game-asset-align/agents/openai.yaml +8 -0
- package/dist/skills/en-US/game-asset-align/references/alignment-contract.md +61 -0
- package/dist/skills/en-US/game-asset-align/references/blender-scene-pipeline.md +35 -0
- package/dist/skills/en-US/game-asset-align/references/canonical-package.md +26 -0
- package/dist/skills/en-US/game-asset-align/references/engine-capabilities.md +14 -0
- package/dist/skills/en-US/game-asset-align/references/lightweight-review.md +34 -0
- package/dist/skills/en-US/game-asset-align/references/repair-policy.md +30 -0
- package/dist/skills/en-US/game-asset-align/references/tool-contract.md +69 -0
- package/dist/skills/en-US/game-asset-align/references/visual-review.md +26 -0
- package/dist/skills/en-US/game-asset-batch-generator/SKILL.md +117 -0
- package/dist/skills/en-US/game-asset-batch-generator/agents/openai.yaml +7 -0
- package/dist/skills/en-US/game-asset-image-generator/SKILL.md +86 -0
- package/dist/skills/en-US/game-asset-image-generator/agents/openai.yaml +7 -0
- package/dist/skills/en-US/game-asset-image-generator/references/background.md +34 -0
- package/dist/skills/en-US/game-asset-image-generator/references/static-game-assets.md +38 -0
- package/dist/skills/en-US/game-asset-mesh-generator/SKILL.md +35 -0
- package/dist/skills/en-US/game-asset-mesh-generator/agents/openai.yaml +7 -0
- package/dist/skills/en-US/game-asset-mesh-generator/references/animation-presets.md +313 -0
- package/dist/skills/en-US/game-asset-mesh-generator/references/generation-contracts.md +131 -0
- package/dist/skills/en-US/game-asset-mesh-generator/references/image-generator-workflows.md +65 -0
- package/dist/skills/en-US/game-asset-mesh-generator/references/postprocess-contracts.md +187 -0
- package/dist/skills/en-US/game-asset-mesh-generator/references/threejs-integration.md +113 -0
- package/dist/skills/en-US/game-asset-mesh-generator/references/tool-reference.md +67 -0
- package/dist/skills/en-US/game-audio/SKILL.md +121 -0
- package/dist/skills/en-US/game-audio/agents/openai.yaml +4 -0
- package/{skills → dist/skills/en-US}/game-audio/references/bgm-cdn.md +7 -11
- package/{skills → dist/skills/en-US}/game-audio/references/sfx-cdn.md +6 -4
- package/dist/skills/en-US/game-character-view-generator/SKILL.md +110 -0
- package/dist/skills/en-US/game-character-view-generator/agents/openai.yaml +7 -0
- package/dist/skills/en-US/game-demo/SKILL.md +103 -0
- package/dist/skills/en-US/game-demo/agents/openai.yaml +7 -0
- package/dist/skills/en-US/game-image-layer-decomposer/SKILL.md +99 -0
- package/dist/skills/en-US/game-image-layer-decomposer/agents/openai.yaml +7 -0
- package/dist/skills/en-US/game-image-splitter/SKILL.md +114 -0
- package/dist/skills/en-US/game-image-splitter/agents/openai.yaml +7 -0
- package/dist/skills/en-US/game-maker/SKILL.md +111 -0
- package/dist/skills/en-US/game-maker/agents/openai.yaml +4 -0
- package/dist/skills/en-US/game-perfect-pixel/SKILL.md +123 -0
- package/dist/skills/en-US/game-perfect-pixel/agents/openai.yaml +7 -0
- package/dist/skills/en-US/game-scroll-generator/SKILL.md +110 -0
- package/dist/skills/en-US/game-scroll-generator/agents/openai.yaml +7 -0
- package/dist/skills/en-US/game-test/SKILL.md +58 -0
- package/dist/skills/en-US/game-test/agents/openai.yaml +7 -0
- package/dist/skills/en-US/game-tile-generator/SKILL.md +152 -0
- package/dist/skills/en-US/game-tile-generator/agents/openai.yaml +7 -0
- package/dist/skills/en-US/game-ui/SKILL.md +177 -0
- package/dist/skills/en-US/game-ui/agents/openai.yaml +4 -0
- package/dist/skills/en-US/game-ui-generator/SKILL.md +82 -0
- package/dist/skills/en-US/game-ui-generator/agents/openai.yaml +7 -0
- package/dist/skills/en-US/game-ui-generator/references/component-patterns.md +65 -0
- package/dist/skills/en-US/game-ui-generator/references/runtime-integration.md +45 -0
- package/dist/skills/en-US/game-video-cycle/SKILL.md +98 -0
- package/dist/skills/en-US/game-video-cycle/agents/openai.yaml +7 -0
- package/dist/skills/en-US/game-video-generator/SKILL.md +78 -0
- package/dist/skills/en-US/game-video-generator/agents/openai.yaml +7 -0
- package/dist/skills/en-US/godot-3d-game/SKILL.md +41 -0
- package/dist/skills/en-US/godot-3d-game/agents/openai.yaml +8 -0
- package/dist/skills/en-US/godot-3d-game/references/alignment-gates.md +26 -0
- package/dist/skills/en-US/godot-3d-game/references/appearance-alignment.md +54 -0
- package/dist/skills/en-US/godot-3d-game/references/build-and-qa.md +22 -0
- package/dist/skills/en-US/godot-3d-game/references/canonical-asset-runtime.md +27 -0
- package/dist/skills/en-US/godot-3d-game/references/import-and-wrapper-scenes.md +20 -0
- package/dist/skills/en-US/godot-3d-game/references/physics-colliders.md +13 -0
- package/dist/skills/en-US/godot-3d-game/references/project-structure.md +22 -0
- package/dist/skills/en-US/godot-3d-game/references/skeleton-animation.md +16 -0
- package/dist/skills/en-US/phaser-2d-game/SKILL.md +127 -0
- package/dist/skills/en-US/phaser-2d-game/agents/openai.yaml +8 -0
- package/dist/skills/en-US/phaser-2d-game/references/engine-performance.md +64 -0
- package/dist/skills/en-US/phaser-2d-game/references/engine-physics.md +139 -0
- package/dist/skills/en-US/phaser-2d-game/references/engine-runtime.md +129 -0
- package/dist/skills/en-US/phaser-2d-game/references/engine-spritesheets.md +99 -0
- package/dist/skills/en-US/phaser-2d-game/references/engine-tilemaps.md +80 -0
- package/dist/skills/en-US/phaser-2d-game/references/file-structure.md +94 -0
- package/dist/skills/en-US/phaser-2d-graphics-builder/SKILL.md +68 -0
- package/dist/skills/en-US/phaser-2d-graphics-builder/agents/openai.yaml +7 -0
- package/dist/skills/en-US/threejs-3d-game/SKILL.md +117 -0
- package/dist/skills/en-US/threejs-3d-game/agents/openai.yaml +7 -0
- package/dist/skills/en-US/threejs-3d-game/references/engine-asset-pipeline.md +155 -0
- package/dist/skills/en-US/threejs-3d-game/references/engine-audio.md +70 -0
- package/dist/skills/en-US/threejs-3d-game/references/engine-input-camera.md +84 -0
- package/dist/skills/en-US/threejs-3d-game/references/engine-performance.md +96 -0
- package/dist/skills/en-US/threejs-3d-game/references/engine-physics.md +142 -0
- package/dist/skills/en-US/threejs-3d-game/references/engine-runtime.md +199 -0
- package/dist/skills/en-US/threejs-3d-game/references/file-structure.md +353 -0
- package/dist/skills/en-US/threejs-aaa-graphics-builder/SKILL.md +62 -0
- package/dist/skills/en-US/threejs-aaa-graphics-builder/agents/openai.yaml +7 -0
- package/{skills → dist/skills/zh-CN}/evomeme-cloud-fs/SKILL.md +33 -6
- package/{skills → dist/skills/zh-CN}/evomeme-cover/SKILL.md +7 -8
- package/{skills → dist/skills/zh-CN}/evomeme-game-maker/SKILL.md +91 -88
- package/{skills → dist/skills/zh-CN}/evomeme-login/SKILL.md +5 -0
- package/dist/skills/zh-CN/evomeme-mcp/SKILL.md +71 -0
- package/dist/skills/zh-CN/evomeme-mcp/agents/openai.yaml +7 -0
- package/dist/skills/zh-CN/evomeme-mcp/references/troubleshooting.md +55 -0
- package/{skills → dist/skills/zh-CN}/evomeme-tos-upload/SKILL.md +6 -5
- package/dist/skills/zh-CN/evomeme-ui/SKILL.md +123 -0
- package/dist/skills/zh-CN/evomeme-ui/agents/openai.yaml +4 -0
- package/dist/skills/zh-CN/evomeme-ui/references/host-layout.md +69 -0
- package/dist/skills/zh-CN/game-asset-align/SKILL.md +47 -0
- package/dist/skills/zh-CN/game-asset-align/agents/openai.yaml +8 -0
- package/dist/skills/zh-CN/game-asset-align/references/alignment-contract.md +61 -0
- package/dist/skills/zh-CN/game-asset-align/references/blender-scene-pipeline.md +35 -0
- package/dist/skills/zh-CN/game-asset-align/references/canonical-package.md +26 -0
- package/dist/skills/zh-CN/game-asset-align/references/engine-capabilities.md +14 -0
- package/dist/skills/zh-CN/game-asset-align/references/lightweight-review.md +34 -0
- package/dist/skills/zh-CN/game-asset-align/references/repair-policy.md +30 -0
- package/dist/skills/zh-CN/game-asset-align/references/tool-contract.md +69 -0
- package/dist/skills/zh-CN/game-asset-align/references/visual-review.md +26 -0
- package/dist/skills/zh-CN/game-asset-batch-generator/SKILL.md +117 -0
- package/dist/skills/zh-CN/game-asset-batch-generator/agents/openai.yaml +7 -0
- package/dist/skills/zh-CN/game-asset-image-generator/SKILL.md +86 -0
- package/{skills → dist/skills/zh-CN}/game-asset-image-generator/references/background.md +3 -1
- package/{skills → dist/skills/zh-CN}/game-asset-image-generator/references/static-game-assets.md +2 -2
- package/dist/skills/zh-CN/game-asset-mesh-generator/SKILL.md +35 -0
- package/dist/skills/zh-CN/game-asset-mesh-generator/agents/openai.yaml +7 -0
- package/dist/skills/zh-CN/game-asset-mesh-generator/references/animation-presets.md +313 -0
- package/dist/skills/zh-CN/game-asset-mesh-generator/references/generation-contracts.md +131 -0
- package/dist/skills/zh-CN/game-asset-mesh-generator/references/image-generator-workflows.md +65 -0
- package/dist/skills/zh-CN/game-asset-mesh-generator/references/postprocess-contracts.md +187 -0
- package/dist/skills/zh-CN/game-asset-mesh-generator/references/threejs-integration.md +113 -0
- package/dist/skills/zh-CN/game-asset-mesh-generator/references/tool-reference.md +67 -0
- package/dist/skills/zh-CN/game-audio/SKILL.md +121 -0
- package/dist/skills/zh-CN/game-audio/agents/openai.yaml +4 -0
- package/dist/skills/zh-CN/game-audio/references/bgm-cdn.md +123 -0
- package/dist/skills/zh-CN/game-audio/references/sfx-cdn.md +79 -0
- package/dist/skills/zh-CN/game-character-view-generator/SKILL.md +110 -0
- package/dist/skills/zh-CN/game-character-view-generator/agents/openai.yaml +7 -0
- package/dist/skills/zh-CN/game-image-layer-decomposer/SKILL.md +99 -0
- package/dist/skills/zh-CN/game-image-layer-decomposer/agents/openai.yaml +7 -0
- package/dist/skills/zh-CN/game-image-splitter/SKILL.md +114 -0
- package/dist/skills/zh-CN/game-image-splitter/agents/openai.yaml +7 -0
- package/dist/skills/zh-CN/game-perfect-pixel/SKILL.md +123 -0
- package/dist/skills/zh-CN/game-perfect-pixel/agents/openai.yaml +7 -0
- package/dist/skills/zh-CN/game-scroll-generator/SKILL.md +110 -0
- package/dist/skills/zh-CN/game-scroll-generator/agents/openai.yaml +7 -0
- package/dist/skills/zh-CN/game-test/references/checklists/playtest-qa.md +12 -0
- package/dist/skills/zh-CN/game-tile-generator/SKILL.md +151 -0
- package/dist/skills/zh-CN/game-tile-generator/agents/openai.yaml +7 -0
- package/{skills → dist/skills/zh-CN}/game-ui/SKILL.md +9 -1
- package/dist/skills/zh-CN/game-ui/references/checklists/game-ui-quality.md +14 -0
- package/dist/skills/zh-CN/game-ui/references/checklists/hud-readability.md +12 -0
- package/dist/skills/zh-CN/game-ui/references/checklists/mobile-input.md +12 -0
- package/dist/skills/zh-CN/game-ui/references/checklists/responsive-ui-fit.md +12 -0
- package/dist/skills/zh-CN/game-ui/references/ui-patterns.md +140 -0
- package/dist/skills/zh-CN/game-ui/references/ui-prompt-templates.md +63 -0
- package/dist/skills/zh-CN/game-ui-generator/SKILL.md +82 -0
- package/dist/skills/zh-CN/game-ui-generator/agents/openai.yaml +7 -0
- package/dist/skills/zh-CN/game-ui-generator/references/component-patterns.md +65 -0
- package/dist/skills/zh-CN/game-ui-generator/references/runtime-integration.md +45 -0
- package/dist/skills/zh-CN/game-video-cycle/SKILL.md +98 -0
- package/dist/skills/zh-CN/game-video-cycle/agents/openai.yaml +7 -0
- package/dist/skills/zh-CN/game-video-generator/SKILL.md +78 -0
- package/dist/skills/zh-CN/game-video-generator/agents/openai.yaml +7 -0
- package/dist/skills/zh-CN/godot-3d-game/SKILL.md +41 -0
- package/dist/skills/zh-CN/godot-3d-game/agents/openai.yaml +8 -0
- package/dist/skills/zh-CN/godot-3d-game/references/alignment-gates.md +26 -0
- package/dist/skills/zh-CN/godot-3d-game/references/appearance-alignment.md +54 -0
- package/dist/skills/zh-CN/godot-3d-game/references/build-and-qa.md +22 -0
- package/dist/skills/zh-CN/godot-3d-game/references/canonical-asset-runtime.md +27 -0
- package/dist/skills/zh-CN/godot-3d-game/references/import-and-wrapper-scenes.md +20 -0
- package/dist/skills/zh-CN/godot-3d-game/references/physics-colliders.md +13 -0
- package/dist/skills/zh-CN/godot-3d-game/references/project-structure.md +22 -0
- package/dist/skills/zh-CN/godot-3d-game/references/skeleton-animation.md +16 -0
- package/dist/skills/zh-CN/phaser-2d-graphics-builder/assets/scorecard-anchors/scene-1.jpeg +0 -0
- package/dist/skills/zh-CN/phaser-2d-graphics-builder/assets/scorecard-anchors/scene-2.jpeg +0 -0
- package/dist/skills/zh-CN/phaser-2d-graphics-builder/assets/scorecard-anchors/scene-3.jpg +0 -0
- package/dist/skills/zh-CN/phaser-2d-graphics-builder/references/checklists/compose-quality.md +10 -0
- package/dist/skills/zh-CN/phaser-2d-graphics-builder/references/checklists/performance-safe-visual-detail.md +9 -0
- package/dist/skills/zh-CN/phaser-2d-graphics-builder/references/checklists/premium-game-quality-gate.md +15 -0
- package/dist/skills/zh-CN/phaser-2d-graphics-builder/references/checklists/sprite-quality.md +10 -0
- package/dist/skills/zh-CN/phaser-2d-graphics-builder/references/checklists/technical-art-quality.md +9 -0
- package/dist/skills/zh-CN/phaser-2d-graphics-builder/references/checklists/visual-scorecard.md +9 -0
- package/dist/skills/zh-CN/phaser-2d-graphics-builder/references/compose-recipes.md +71 -0
- package/dist/skills/zh-CN/phaser-2d-graphics-builder/references/graphics-prompt-templates.md +33 -0
- package/dist/skills/zh-CN/phaser-2d-graphics-builder/references/implementation-blueprint.md +82 -0
- package/dist/skills/zh-CN/phaser-2d-graphics-builder/references/sprite-recipes.md +90 -0
- package/dist/skills/zh-CN/phaser-2d-graphics-builder/references/technical-art.md +67 -0
- package/dist/skills/zh-CN/phaser-2d-graphics-builder/references/vfx-recipes.md +67 -0
- package/dist/skills/zh-CN/phaser-2d-graphics-builder/references/visual-scorecard.md +129 -0
- package/{skills → dist/skills/zh-CN}/threejs-3d-game/SKILL.md +6 -2
- package/dist/skills/zh-CN/threejs-3d-game/references/engine-asset-pipeline.md +155 -0
- package/{skills → dist/skills/zh-CN}/threejs-aaa-graphics-builder/SKILL.md +6 -6
- package/dist/skills/zh-CN/threejs-aaa-graphics-builder/assets/scorecard-anchors/scene-1.jpg +0 -0
- package/dist/skills/zh-CN/threejs-aaa-graphics-builder/assets/scorecard-anchors/scene-2.jpg +0 -0
- package/dist/skills/zh-CN/threejs-aaa-graphics-builder/assets/scorecard-anchors/scene-3.jpg +0 -0
- package/dist/skills/zh-CN/threejs-aaa-graphics-builder/references/checklists/aaa-game-quality-gate.md +23 -0
- package/dist/skills/zh-CN/threejs-aaa-graphics-builder/references/checklists/aaa-visual-scorecard.md +19 -0
- package/dist/skills/zh-CN/threejs-aaa-graphics-builder/references/checklists/material-lighting-quality.md +14 -0
- package/dist/skills/zh-CN/threejs-aaa-graphics-builder/references/checklists/performance-safe-visual-detail.md +14 -0
- package/dist/skills/zh-CN/threejs-aaa-graphics-builder/references/checklists/procedural-model-quality.md +15 -0
- package/dist/skills/zh-CN/threejs-aaa-graphics-builder/references/checklists/technical-art-quality.md +17 -0
- package/dist/skills/zh-CN/threejs-aaa-graphics-builder/references/graphics-prompt-templates.md +236 -0
- package/dist/skills/zh-CN/threejs-aaa-graphics-builder/references/implementation-blueprint.md +161 -0
- package/dist/skills/zh-CN/threejs-aaa-graphics-builder/references/model-recipes.md +146 -0
- package/dist/skills/zh-CN/threejs-aaa-graphics-builder/references/render-recipes.md +90 -0
- package/dist/skills/zh-CN/threejs-aaa-graphics-builder/references/shader-cookbook.md +292 -0
- package/dist/skills/zh-CN/threejs-aaa-graphics-builder/references/technical-art.md +167 -0
- package/dist/skills/zh-CN/threejs-aaa-graphics-builder/references/visual-scorecard.md +147 -0
- package/dist/stage-blender/bake_materials.py +102 -0
- package/dist/stage-blender/export_scene.py +275 -0
- package/dist/stage-blender/preview_camera.py +90 -0
- package/dist/stage-blender/repair_mesh.py +112 -0
- package/dist/stage-public/app.js +759 -0
- package/dist/stage-public/baked/bakePilot.js +44 -0
- package/dist/stage-public/baked/bakedScene.js +129 -0
- package/dist/stage-public/baked/sceneAppearance.js +225 -0
- package/dist/stage-public/baked/sceneCamera.js +45 -0
- package/dist/stage-public/comparison-contract.js +28 -0
- package/dist/stage-public/delivery.html +4 -0
- package/dist/stage-public/delivery.js +17 -0
- package/dist/stage-public/godot/appearance.gd +170 -0
- package/dist/stage-public/godot/preview.gd +79 -0
- package/dist/stage-public/index.html +141 -0
- package/dist/stage-public/review-app.js +289 -0
- package/dist/stage-public/review-runtime.js +63 -0
- package/dist/stage-public/review.css +24 -0
- package/dist/stage-public/review.html +47 -0
- package/dist/stage-public/scene-runtime.js +212 -0
- package/dist/stage-public/sceneContractRuntime.js +235 -0
- package/dist/stage-public/styles.css +328 -0
- package/dist/stage-public/three-appearance.js +104 -0
- package/dist/stage-public/vendor/three170/LICENSE +21 -0
- package/dist/stage-public/vendor/three170/build/three.module.js +54571 -0
- package/dist/stage-public/vendor/three170/examples/jsm/controls/OrbitControls.js +1523 -0
- package/dist/stage-public/vendor/three170/examples/jsm/environments/RoomEnvironment.js +144 -0
- package/dist/stage-public/vendor/three170/examples/jsm/libs/fflate.module.js +2672 -0
- package/dist/stage-public/vendor/three170/examples/jsm/loaders/EXRLoader.js +2563 -0
- package/dist/stage-public/vendor/three170/examples/jsm/loaders/GLTFLoader.js +4727 -0
- package/dist/stage-public/vendor/three170/examples/jsm/utils/BufferGeometryUtils.js +1373 -0
- package/dist/tile-transition-mask.svg +40 -0
- package/package.json +24 -8
- package/dist/canvas-public/cycle-detect.js +0 -166
- package/dist/canvas-public/smart-split.js +0 -185
- package/skills/game-asset-image-generator/SKILL.md +0 -104
- package/skills/game-audio/SKILL.md +0 -82
- package/skills/game-audio/agents/openai.yaml +0 -4
- package/skills/threejs-3d-game/references/engine-asset-pipeline.md +0 -116
- /package/{skills → dist/skills/en-US}/game-test/references/checklists/playtest-qa.md +0 -0
- /package/{skills → dist/skills/en-US}/game-ui/references/checklists/game-ui-quality.md +0 -0
- /package/{skills → dist/skills/en-US}/game-ui/references/checklists/hud-readability.md +0 -0
- /package/{skills → dist/skills/en-US}/game-ui/references/checklists/mobile-input.md +0 -0
- /package/{skills → dist/skills/en-US}/game-ui/references/checklists/responsive-ui-fit.md +0 -0
- /package/{skills → dist/skills/en-US}/game-ui/references/ui-patterns.md +0 -0
- /package/{skills → dist/skills/en-US}/game-ui/references/ui-prompt-templates.md +0 -0
- /package/{skills → dist/skills/en-US}/phaser-2d-graphics-builder/assets/scorecard-anchors/scene-1.jpeg +0 -0
- /package/{skills → dist/skills/en-US}/phaser-2d-graphics-builder/assets/scorecard-anchors/scene-2.jpeg +0 -0
- /package/{skills → dist/skills/en-US}/phaser-2d-graphics-builder/assets/scorecard-anchors/scene-3.jpg +0 -0
- /package/{skills → dist/skills/en-US}/phaser-2d-graphics-builder/references/checklists/compose-quality.md +0 -0
- /package/{skills → dist/skills/en-US}/phaser-2d-graphics-builder/references/checklists/performance-safe-visual-detail.md +0 -0
- /package/{skills → dist/skills/en-US}/phaser-2d-graphics-builder/references/checklists/premium-game-quality-gate.md +0 -0
- /package/{skills → dist/skills/en-US}/phaser-2d-graphics-builder/references/checklists/sprite-quality.md +0 -0
- /package/{skills → dist/skills/en-US}/phaser-2d-graphics-builder/references/checklists/technical-art-quality.md +0 -0
- /package/{skills → dist/skills/en-US}/phaser-2d-graphics-builder/references/checklists/visual-scorecard.md +0 -0
- /package/{skills → dist/skills/en-US}/phaser-2d-graphics-builder/references/compose-recipes.md +0 -0
- /package/{skills → dist/skills/en-US}/phaser-2d-graphics-builder/references/graphics-prompt-templates.md +0 -0
- /package/{skills → dist/skills/en-US}/phaser-2d-graphics-builder/references/implementation-blueprint.md +0 -0
- /package/{skills → dist/skills/en-US}/phaser-2d-graphics-builder/references/sprite-recipes.md +0 -0
- /package/{skills → dist/skills/en-US}/phaser-2d-graphics-builder/references/technical-art.md +0 -0
- /package/{skills → dist/skills/en-US}/phaser-2d-graphics-builder/references/vfx-recipes.md +0 -0
- /package/{skills → dist/skills/en-US}/phaser-2d-graphics-builder/references/visual-scorecard.md +0 -0
- /package/{skills → dist/skills/en-US}/threejs-aaa-graphics-builder/assets/scorecard-anchors/scene-1.jpg +0 -0
- /package/{skills → dist/skills/en-US}/threejs-aaa-graphics-builder/assets/scorecard-anchors/scene-2.jpg +0 -0
- /package/{skills → dist/skills/en-US}/threejs-aaa-graphics-builder/assets/scorecard-anchors/scene-3.jpg +0 -0
- /package/{skills → dist/skills/en-US}/threejs-aaa-graphics-builder/references/checklists/aaa-game-quality-gate.md +0 -0
- /package/{skills → dist/skills/en-US}/threejs-aaa-graphics-builder/references/checklists/aaa-visual-scorecard.md +0 -0
- /package/{skills → dist/skills/en-US}/threejs-aaa-graphics-builder/references/checklists/material-lighting-quality.md +0 -0
- /package/{skills → dist/skills/en-US}/threejs-aaa-graphics-builder/references/checklists/performance-safe-visual-detail.md +0 -0
- /package/{skills → dist/skills/en-US}/threejs-aaa-graphics-builder/references/checklists/procedural-model-quality.md +0 -0
- /package/{skills → dist/skills/en-US}/threejs-aaa-graphics-builder/references/checklists/technical-art-quality.md +0 -0
- /package/{skills → dist/skills/en-US}/threejs-aaa-graphics-builder/references/graphics-prompt-templates.md +0 -0
- /package/{skills → dist/skills/en-US}/threejs-aaa-graphics-builder/references/implementation-blueprint.md +0 -0
- /package/{skills → dist/skills/en-US}/threejs-aaa-graphics-builder/references/model-recipes.md +0 -0
- /package/{skills → dist/skills/en-US}/threejs-aaa-graphics-builder/references/render-recipes.md +0 -0
- /package/{skills → dist/skills/en-US}/threejs-aaa-graphics-builder/references/shader-cookbook.md +0 -0
- /package/{skills → dist/skills/en-US}/threejs-aaa-graphics-builder/references/technical-art.md +0 -0
- /package/{skills → dist/skills/en-US}/threejs-aaa-graphics-builder/references/visual-scorecard.md +0 -0
- /package/{skills → dist/skills/zh-CN}/evomeme-canvas/SKILL.md +0 -0
- /package/{skills → dist/skills/zh-CN}/evomeme-canvas/agents/openai.yaml +0 -0
- /package/{skills → dist/skills/zh-CN}/evomeme-cloud-fs/agents/openai.yaml +0 -0
- /package/{skills → dist/skills/zh-CN}/evomeme-cover/agents/openai.yaml +0 -0
- /package/{skills → dist/skills/zh-CN}/evomeme-game-maker/agents/openai.yaml +0 -0
- /package/{skills → dist/skills/zh-CN}/evomeme-login/agents/openai.yaml +0 -0
- /package/{skills → dist/skills/zh-CN}/evomeme-native-bridge-sdk/SKILL.md +0 -0
- /package/{skills → dist/skills/zh-CN}/evomeme-native-bridge-sdk/agents/openai.yaml +0 -0
- /package/{skills → dist/skills/zh-CN}/evomeme-tos-upload/agents/openai.yaml +0 -0
- /package/{skills → dist/skills/zh-CN}/game-art/SKILL.md +0 -0
- /package/{skills → dist/skills/zh-CN}/game-art/agents/openai.yaml +0 -0
- /package/{skills → dist/skills/zh-CN}/game-asset-image-generator/agents/openai.yaml +0 -0
- /package/{skills → dist/skills/zh-CN}/game-demo/SKILL.md +0 -0
- /package/{skills → dist/skills/zh-CN}/game-demo/agents/openai.yaml +0 -0
- /package/{skills → dist/skills/zh-CN}/game-maker/SKILL.md +0 -0
- /package/{skills → dist/skills/zh-CN}/game-maker/agents/openai.yaml +0 -0
- /package/{skills → dist/skills/zh-CN}/game-test/SKILL.md +0 -0
- /package/{skills → dist/skills/zh-CN}/game-test/agents/openai.yaml +0 -0
- /package/{skills → dist/skills/zh-CN}/game-ui/agents/openai.yaml +0 -0
- /package/{skills → dist/skills/zh-CN}/phaser-2d-game/SKILL.md +0 -0
- /package/{skills → dist/skills/zh-CN}/phaser-2d-game/agents/openai.yaml +0 -0
- /package/{skills → dist/skills/zh-CN}/phaser-2d-game/references/engine-performance.md +0 -0
- /package/{skills → dist/skills/zh-CN}/phaser-2d-game/references/engine-physics.md +0 -0
- /package/{skills → dist/skills/zh-CN}/phaser-2d-game/references/engine-runtime.md +0 -0
- /package/{skills → dist/skills/zh-CN}/phaser-2d-game/references/engine-spritesheets.md +0 -0
- /package/{skills → dist/skills/zh-CN}/phaser-2d-game/references/engine-tilemaps.md +0 -0
- /package/{skills → dist/skills/zh-CN}/phaser-2d-game/references/file-structure.md +0 -0
- /package/{skills → dist/skills/zh-CN}/phaser-2d-graphics-builder/SKILL.md +0 -0
- /package/{skills → dist/skills/zh-CN}/phaser-2d-graphics-builder/agents/openai.yaml +0 -0
- /package/{skills → dist/skills/zh-CN}/threejs-3d-game/agents/openai.yaml +0 -0
- /package/{skills → dist/skills/zh-CN}/threejs-3d-game/references/engine-audio.md +0 -0
- /package/{skills → dist/skills/zh-CN}/threejs-3d-game/references/engine-input-camera.md +0 -0
- /package/{skills → dist/skills/zh-CN}/threejs-3d-game/references/engine-performance.md +0 -0
- /package/{skills → dist/skills/zh-CN}/threejs-3d-game/references/engine-physics.md +0 -0
- /package/{skills → dist/skills/zh-CN}/threejs-3d-game/references/engine-runtime.md +0 -0
- /package/{skills → dist/skills/zh-CN}/threejs-3d-game/references/file-structure.md +0 -0
- /package/{skills → dist/skills/zh-CN}/threejs-aaa-graphics-builder/agents/openai.yaml +0 -0
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: game-video-cycle
|
|
3
|
+
description: Use evomeme_extract_video_cycle to extract a candidate loop from an existing video using its first frame as reference, saving one new MP4. Use for repeating idle, walking or rotation actions and looping video backgrounds. Explains detection and extraction, output files, similarity threshold, minimum gap, detection frame rate and seam inspection. Not for generating new motion, finding arbitrary middle sections, repairing seams or exporting frame sheets.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Video Cycle Extraction
|
|
7
|
+
|
|
8
|
+
Use `evomeme_extract_video_cycle` to extract a candidate loop from the beginning of an existing video. Inspect whether it starts at a suitable loop pose and contains a complete return to that pose before selecting a similarity threshold and minimum gap. Success means an endpoint met the algorithm's threshold; playback inspection is still needed.
|
|
9
|
+
|
|
10
|
+
## What it does and produces
|
|
11
|
+
|
|
12
|
+
MCP and canvas share the `video_cycle` task and `extractVideoCycleAsset`, with the existing `extractVideoCycle` coordinating detection and extraction. Processing is local, without MCP-to-MCP calls or changes to shared task/image algorithms or prompts.
|
|
13
|
+
|
|
14
|
+
One call:
|
|
15
|
+
|
|
16
|
+
1. Read the existing workspace video's duration and dimensions.
|
|
17
|
+
2. Generate analysis grayscale thumbnails at a fixed **24 frames/second**, default width 96 pixels with proportional height and a minimum height of 8. These are analysis dimensions, not export dimensions.
|
|
18
|
+
3. Use the first sampled frame as reference. Skip candidate endpoints before `min_gap_sec`, compare each remaining frame's structural similarity to the reference, and stop at the first `score >= threshold`.
|
|
19
|
+
4. Extract **from 0 seconds to the matched time**, re-encode as H.264 and save **one MP4** into `assets/`. Usable audio is encoded as AAC with the segment. Preserve the source and register the task.
|
|
20
|
+
|
|
21
|
+
The output name is based on `cycle.mp4` with a unique identifier; use the returned path. This is not lossless copying of compressed source bytes. No AI, automatic upload, GIF, transparent video or frame-sheet output. It does not regenerate motion or create a loop through interpolation, reversal, crossfades or audio repair.
|
|
22
|
+
|
|
23
|
+
In this implementation, “first complete cycle” means **the candidate interval from the video start to the first qualifying match**. It does not skip intros to search arbitrary middle sections, seek the highest score in the entire video or verify a semantically complete action. Similar poses with different velocities, directions or action phases can still match.
|
|
24
|
+
|
|
25
|
+
## When to use it
|
|
26
|
+
|
|
27
|
+
| Need or source | Guidance |
|
|
28
|
+
| --- | --- |
|
|
29
|
+
| Repeating idle, walking or rotating motion that returns to its initial pose | Use this tool and check camera, position and background stability. |
|
|
30
|
+
| Multiple repetitions in an existing video, needing the first one | Start with defaults and choose minimum gap from the actual cycle. Exactly one repetition is not guaranteed. |
|
|
31
|
+
| A repeating video background or effect | Try extraction, but camera motion, lighting changes or random particles may prevent a match or leave a visible seam. |
|
|
32
|
+
| A fade-in, title, static hold or unrelated intro at the start | Trim that intro separately, then process the trimmed video. There is no start-time input. |
|
|
33
|
+
| Trimming to specified start/end times only | Use existing video editing capabilities; this tool detects its endpoint and accepts no `start` / `end` inputs. |
|
|
34
|
+
| Generate new looping motion | Use the [video generation skill](../game-video-generator/SKILL.md), setting the first and last frame to copies of the same image or the same asset URL. Extract and inspect afterward when needed. |
|
|
35
|
+
| Convert video into a game sprite frame sheet | This tool supplies only a candidate-loop MP4; frame extraction and sheet layout are separate work. Do not claim a frame sheet was produced. |
|
|
36
|
+
|
|
37
|
+
Large static backgrounds can mask a small subject's changes, while nearly uniform frames may provide no useful correlation signal. Camera movement, changing backgrounds, subject displacement and brief pauses can affect detection; lowering the threshold does not repair these conditions.
|
|
38
|
+
|
|
39
|
+
## Parameters and terminology
|
|
40
|
+
|
|
41
|
+
| Parameter | Actual meaning |
|
|
42
|
+
| --- | --- |
|
|
43
|
+
| `id` | Required existing video asset ID inside workspace `assets/`, such as `assets/idle.mp4`. No images, URLs, absolute paths or Base64. |
|
|
44
|
+
| `threshold` | Default `0.98`, range `0.5–0.999`. Pass a fraction, not `98`. The canvas value 98 corresponds to 0.98 here. |
|
|
45
|
+
| `min_gap_sec` | Default `0.4`, range `0.1–10`, in seconds. How long after the first frame to start comparing candidate endpoints. |
|
|
46
|
+
| `workspace_dir` | Optional absolute workspace root; set explicitly when possible. Defaults to the MCP working directory. |
|
|
47
|
+
|
|
48
|
+
- **Loop / cycle**: A segment intended to connect naturally when replayed. Similar endpoint images are a useful reference, but motion speed, direction, background and audio must also be continuous. This tool uses only visual similarity to select a candidate endpoint.
|
|
49
|
+
- **Similarity score / NCC (normalized cross-correlation)**: Subtract average brightness from each grayscale thumbnail, divide by its brightness variation, then compare light/dark structure at corresponding positions. Scores nearer 1 indicate more similar structure. This is not an identical-pixel percentage, AI confidence or action-recognition probability. Grayscale downsampling can hide color, small objects and fine detail differences.
|
|
50
|
+
- **Threshold**: Required candidate score. Higher is generally stricter and more likely to fail; lower may accept incomplete actions or visible seams. It does not apply a similarity repair to the video.
|
|
51
|
+
- **Minimum gap**: Avoids immediately treating similar adjacent frames as a full loop. It is not desired duration, maximum search duration or trim start. Too large a value may skip the first real cycle, include multiple cycles or cause failure.
|
|
52
|
+
- **Detection fps**: Analysis samples per second, fixed at 24, with candidate time steps of approximately 1/24 second. Returned `fps` is this analysis value, not the source or exported video's actual frame rate. There is no configurable `fps` input.
|
|
53
|
+
- **Re-encoding**: Compress the extracted images as H.264 and usable audio as AAC inside MP4. Quality, bitrate and file bytes may change. Audio endpoints are not chosen from waveform or beat analysis, and no fades are added automatically.
|
|
54
|
+
|
|
55
|
+
Source duration must exceed `min_gap_sec + 1/24` seconds or a too-short error is returned. There are no `prompt`, `model`, desired duration, candidate count, audio repair, mute, quality, resolution or custom start/end inputs.
|
|
56
|
+
|
|
57
|
+
## Invocation
|
|
58
|
+
|
|
59
|
+
Call `evomeme_extract_video_cycle`:
|
|
60
|
+
|
|
61
|
+
```json
|
|
62
|
+
{
|
|
63
|
+
"workspace_dir": "D:/my-game",
|
|
64
|
+
"id": "assets/idle.mp4",
|
|
65
|
+
"threshold": 0.98,
|
|
66
|
+
"min_gap_sec": 0.4
|
|
67
|
+
}
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
If inspection confirms that a full action cannot finish within 1.2 seconds, set `min_gap_sec=1.2` to exclude earlier similar frames. This does not set output duration to 1.2 seconds: the tool still finds the first qualifying frame at or after that time. Do not increase the gap arbitrarily just because a short result looks wrong.
|
|
71
|
+
|
|
72
|
+
If an upstream video generation tool returns only `local_path`, verify it is inside this workspace's `assets/` and derive its actual `assets/...` relative asset ID. Do not pass a remote URL or full local path as `id`, or assume the upstream tool necessarily returned an `asset_id`.
|
|
73
|
+
|
|
74
|
+
## Outputs
|
|
75
|
+
|
|
76
|
+
Returns text metadata without embedded video bytes or Base64:
|
|
77
|
+
|
|
78
|
+
| Field | Meaning |
|
|
79
|
+
| --- | --- |
|
|
80
|
+
| `asset_id`, `local_path`, `mime_type` | New MP4's workspace ID, absolute local path and `video/mp4`. |
|
|
81
|
+
| `source_id`, `operation_id`, `status` | Source video ID, local operation ID and success status. No remote AI `job_id`. |
|
|
82
|
+
| `start`, `end` | Candidate trim times in source-video seconds. `start` is currently always 0. `end-start` is the requested segment duration, not a probe of the exact muxed file duration. |
|
|
83
|
+
| `score` | Correlation of the matched endpoint with the reference frame, not the best score in the whole video. |
|
|
84
|
+
| `fps` | Detection sampling rate, fixed at 24. |
|
|
85
|
+
| `scanned` | Number of candidate frames actually compared, excluding the reference and frames skipped before the minimum gap. Not the source's total frame count. |
|
|
86
|
+
| `threshold`, `min_gap_sec` | Actual similarity threshold and minimum gap. |
|
|
87
|
+
|
|
88
|
+
No additional width/height, actual export frame rate, `duration`, frame sheet, candidate list or public URL is returned. The shared task's `minGapSec` becomes `min_gap_sec` in MCP output. A similar detection endpoint does not mean the exported last frame is pixel-identical to the first.
|
|
89
|
+
|
|
90
|
+
## Inspection and integration
|
|
91
|
+
|
|
92
|
+
Play at least two consecutive repetitions. Check for jumps, pauses, position changes, speed discontinuities, background or lighting flicker, and audio clicks or interrupted rhythm when audio exists. Do not declare a seamless loop based solely on a high `score`.
|
|
93
|
+
|
|
94
|
+
For an unexpectedly short result, inspect whether static background, an initial hold or a similar half-cycle pose caused an early match. Adjust the minimum gap or raise the threshold only with evidence. When no match is found, check whether the full action returns to the first frame and whether the source is long enough. A modestly lower threshold requires renewed inspection; do not report failure as a successful copy of the full source or automatically use paid generation to replace it.
|
|
95
|
+
|
|
96
|
+
Use the output MP4 in the webpage or game and enable repeat playback at runtime. That setting controls playback behavior; the file itself does not guarantee an infinite seamless loop. Configure muting in the project if needed, since this tool has no mute parameter. For a public URL, upload the output `local_path` through `evomeme_upload_game_asset`, not the source video's URL.
|
|
97
|
+
|
|
98
|
+
On failure, inspect the error and task records. No match means no candidate MP4 is exported; an encoding failure may leave an incomplete file. Do not treat residual files as successful outputs.
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
interface:
|
|
2
|
+
display_name: "Video Cycle Extraction"
|
|
3
|
+
short_description: "Extract candidate loops and explain scores, timing and seams"
|
|
4
|
+
default_prompt: "Use $game-video-cycle to inspect an existing video, extract a candidate loop, and explain the interval, similarity score and seam checks."
|
|
5
|
+
|
|
6
|
+
policy:
|
|
7
|
+
allow_implicit_invocation: true
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: game-video-generator
|
|
3
|
+
description: Generate one video with evomeme_generate_game_video from a prompt, first/last frames or image/video/audio references. Use for game demonstrations, cutscenes and source footage for character actions. Explains using copies of the same image as both endpoint frames for looping animation, reference URLs, parameters and local video output; does not automatically extract frames, cut out subjects or repair loop seams.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Game Video Generation
|
|
7
|
+
|
|
8
|
+
## Action, Output and Use Cases
|
|
9
|
+
|
|
10
|
+
`evomeme_generate_game_video` (Video Generation) shares the canvas video client functions. It submits a prompt and optional references, waits for completion, downloads one video under workspace `assets/`, and returns its local path and cloud URL. Read the actual format from `mime_type`. Use it for cutscenes, promotional demonstrations or source footage for character actions.
|
|
11
|
+
|
|
12
|
+
A video contains images changing over time. This tool does not directly produce a character sprite sheet, extract frames, cut out backgrounds or guarantee a seamless loop. Use [Game Images](../game-asset-image-generator/SKILL.md) for static images and [Character Views](../game-character-view-generator/SKILL.md) for multiple orientations.
|
|
13
|
+
|
|
14
|
+
## References and Terminology
|
|
15
|
+
|
|
16
|
+
- **First frame**: the desired image at the beginning of the video; use an image reference with `role="first_frame"`.
|
|
17
|
+
- **Last frame**: the desired image at the end; use an image reference with `role="last_frame"`. For looping animation, use a copy of the first-frame image as described below.
|
|
18
|
+
- **Reference image**: constrains appearance, style or setting, using `role="reference_image"`; it does not designate the first frame.
|
|
19
|
+
- **Reference video/audio**: supplies motion or sound references, using `type="video"` or `type="audio"`; the effect depends on model support.
|
|
20
|
+
|
|
21
|
+
Each `references` item is `{type,url,role?}`. `url` must be an accessible HTTP/HTTPS URL, not an asset ID, local path or Base64. For uploaded attachments or local assets, locate a readable file and copy it under workspace `assets/` without overwriting different content. Upload it through [Cloud Asset Upload](../evomeme-tos-upload/SKILL.md) and use the returned `asset_url`. Reuse existing accessible URLs.
|
|
22
|
+
|
|
23
|
+
## Key Looping Technique: Use the Same Image for Both Endpoint Frames
|
|
24
|
+
|
|
25
|
+
**For looping animation, use copies of the same image as the first and last frames so both endpoint references are identical and the action can return to its starting point.** Do not generate two merely similar endpoint images: small differences in pose, position, composition or lighting can disrupt the loop.
|
|
26
|
+
|
|
27
|
+
In the MCP request, repeat the same actual image URL in two image references, with `role="first_frame"` and `role="last_frame"`. This expresses the identical-copy technique without uploading the image twice. Ask for one complete action cycle, a return to the starting pose and position, and continuous motion across the loop boundary. In-place idle, walk or attack loops should usually also use a fixed camera and consistent background.
|
|
28
|
+
|
|
29
|
+
```json
|
|
30
|
+
{
|
|
31
|
+
"prompt": "The reference character completes one full idle breathing cycle in place, fixed camera and consistent background, returning to the first-frame pose and position with continuous motion across the boundary for repeated looping playback",
|
|
32
|
+
"references": [
|
|
33
|
+
{"type": "image", "url": "https://example.com/hero-idle.png", "role": "first_frame"},
|
|
34
|
+
{"type": "image", "url": "https://example.com/hero-idle.png", "role": "last_frame"}
|
|
35
|
+
],
|
|
36
|
+
"generate_audio": false,
|
|
37
|
+
"workspace_dir": "D:/my-game"
|
|
38
|
+
}
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
Replace both example URLs with the same real image link. After generation, play at least two consecutive cycles and inspect the join for jumps, pauses or abrupt speed changes. Identical endpoint references constrain the endpoint images; the intervening action and final loop still need inspection.
|
|
42
|
+
|
|
43
|
+
## Inputs
|
|
44
|
+
|
|
45
|
+
| Parameter | Required | Meaning |
|
|
46
|
+
| --- | --- | --- |
|
|
47
|
+
| `prompt` | Yes | Describe the subject, start/end of the action, camera motion, scene and style. |
|
|
48
|
+
| `references` | No | Array of `{type,url,role?}`; `type` is `image`, `video` or `audio`. |
|
|
49
|
+
| `ratio` | No | Width-to-height ratio: `16:9`, `9:16`, `1:1`, `4:3`, `3:4`, `21:9` or `adaptive` (service-selected adaptation). |
|
|
50
|
+
| `duration` | No | Seconds: 4, 5, 6, 8, 10, 12 or 15; `-1` selects automatic duration. |
|
|
51
|
+
| `resolution` | No | Resolution tier: `480p`, `720p` or `1080p`. |
|
|
52
|
+
| `generate_audio` | No | Generate audio; default `true`. Set `false` for silent footage. |
|
|
53
|
+
| `watermark` | No | Add a watermark; default `false`. |
|
|
54
|
+
| `seed` | No | Nonnegative integer random seed; controls randomness without guaranteeing identical repeated outputs. |
|
|
55
|
+
| `video_model` | No | Currently supports `doubao-seedance-2-5-260628`, also the default. |
|
|
56
|
+
| `workspace_dir` | No | Absolute current workspace root; pass it explicitly. |
|
|
57
|
+
|
|
58
|
+
The service selects defaults for omitted ratio, duration and resolution. Pass explicit values when requirements are known.
|
|
59
|
+
|
|
60
|
+
```json
|
|
61
|
+
{
|
|
62
|
+
"prompt": "The reference character swings its sword once in place, fixed camera, consistent design and background",
|
|
63
|
+
"references": [{"type": "image", "url": "https://example.com/hero.png", "role": "first_frame"}],
|
|
64
|
+
"ratio": "1:1",
|
|
65
|
+
"duration": 4,
|
|
66
|
+
"resolution": "720p",
|
|
67
|
+
"generate_audio": false,
|
|
68
|
+
"workspace_dir": "D:/my-game"
|
|
69
|
+
}
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
The example URL illustrates the format. Use an actual upload result or accessible reference URL for calls.
|
|
73
|
+
|
|
74
|
+
## Outputs and Errors
|
|
75
|
+
|
|
76
|
+
Success returns text containing `job_id`, `local_path`, `mime_type`, `bytes`, `asset_url`/`tos_url`, `status`, `attempts`, `model`, `ratio`, `duration` and `resolution`. Record the path and URL; do not put video bytes or Base64 into the conversation. This video tool does not return the image tools' `asset_id` field.
|
|
77
|
+
|
|
78
|
+
Failures return `isError: true` with the specific error. Use [Login Recovery](../evomeme-login/SKILL.md) for authentication errors. Do not report failed generation as successful or blindly repeat a submission after an interrupted wait.
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
interface:
|
|
2
|
+
display_name: "Game Video Generation"
|
|
3
|
+
short_description: "Generate game videos with clear references and outputs"
|
|
4
|
+
default_prompt: "Use $game-video-generator to generate a game video with a clear purpose, action, optional frame references and output path."
|
|
5
|
+
|
|
6
|
+
policy:
|
|
7
|
+
allow_implicit_invocation: true
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: godot-3d-game
|
|
3
|
+
description: Build and maintain 3D games with Godot 4, and consume EvoMeme canonical asset packages. Use when the work involves Godot scene structure, GLB import, alignment wrappers, skeleton animation, colliders, builds, or 3D runtime QA; when assets are not ready, you must return to game-asset-align.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Godot 3D Game
|
|
7
|
+
|
|
8
|
+
## Responsibility boundary
|
|
9
|
+
|
|
10
|
+
Godot is the shipping runtime, not an asset-orientation guesser. The source of truth for asset alignment belongs to `game-asset-align`; this skill is responsible for import gates, the single wrapper, game-scene integration, and real-device Godot validation.
|
|
11
|
+
|
|
12
|
+
## Required workflow
|
|
13
|
+
|
|
14
|
+
Use the local CLI by default. Read the [CLI contract](../game-asset-align/references/tool-contract.md) for the launcher: `evomeme` below abbreviates `npx -y evomeme@latest` or a local build of the same version. Supply `--workspace` and use `--json` for machine-readable results. Keep Stage running in a persistent session; return its URL when startup completes and run subsequent commands in another terminal.
|
|
15
|
+
|
|
16
|
+
1. Confirm that the project root contains `project.godot`, and read the reference files relevant to the task.
|
|
17
|
+
2. **After Blender modeling, you must open the Stage board first, and only import into Godot after confirmation.** Read the canonical `asset.json` and run format checks, call `evomeme stage --asset <id> --workspace "<workspace>" --target godot --json`, and compare space, structure, materials, and lighting between Blender and the native Godot view in Stage. The user clicks "Confirm current version, allow import". You must not click for the user, write confirmation files, or skip this using a technical ready status.
|
|
18
|
+
3. Call `evomeme asset sync <id> --target godot --project "<project>" --workspace "<workspace>" --json`; do not manually copy some files.
|
|
19
|
+
4. Use `CanonicalAssetLoader.load_scene(parent, package_dir)` for complete scenes, while also connecting the Stage-confirmed PBR material calibration, lights, environment, exposure, and camera. Use `load_package` when a prop enters an existing level to avoid stacking scene environments. A model may only be under one `A3AlignmentRoot` with `canonical_alignment_key`.
|
|
20
|
+
5. Layer gameplay nodes, animation, collision, and the visible model separately; do not compensate the canonical Transform in the character controller or animation tree.
|
|
21
|
+
6. Check composition, grounding, orientation, scale, materials, and interactive collision in the real Godot runtime view.
|
|
22
|
+
|
|
23
|
+
## Routing references
|
|
24
|
+
|
|
25
|
+
- Project directory and scene layering: read [project-structure.md](references/project-structure.md).
|
|
26
|
+
- Materials, lighting, exposure, camera, and Stage native preview: read [appearance-alignment.md](references/appearance-alignment.md).
|
|
27
|
+
- v2 loader, revision, and single-wrapper rules: read [canonical-asset-runtime.md](references/canonical-asset-runtime.md).
|
|
28
|
+
- Pre-import/runtime/delivery gates: read [alignment-gates.md](references/alignment-gates.md).
|
|
29
|
+
- GLB import, inherited scenes, and wrapper maintenance: read [import-and-wrapper-scenes.md](references/import-and-wrapper-scenes.md).
|
|
30
|
+
- Character skeletons and animation: read [skeleton-animation.md](references/skeleton-animation.md).
|
|
31
|
+
- Physics bodies and collision layers: read [physics-colliders.md](references/physics-colliders.md).
|
|
32
|
+
- Build, runtime, and screenshot QA: read [build-and-qa.md](references/build-and-qa.md).
|
|
33
|
+
|
|
34
|
+
## Completion gates
|
|
35
|
+
|
|
36
|
+
- The sync result has `alignment_status=aligned` and a non-empty `alignment_key`.
|
|
37
|
+
- Stage confirmation comes from the current native Godot view; after changing the model or display configuration, view and confirm again, then sync.
|
|
38
|
+
- The same asset has only one canonical alignment root in the Godot scene.
|
|
39
|
+
- Model nodes preserve the original imported Transform, and game logic does not apply repair recipes repeatedly.
|
|
40
|
+
- Skeleton, animation, collision, and visual nodes have separated responsibilities.
|
|
41
|
+
- Accept using actual Godot runtime screenshots; when deviations are found, update the canonical package and do not patch locally in Godot.
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
interface:
|
|
2
|
+
display_name: "Godot 3D Game"
|
|
3
|
+
short_description: "Build Godot 4 3D games and safely consume continuously aligned canonical assets"
|
|
4
|
+
default_prompt: "Please use $godot-3d-game to integrate the accepted canonical assets into this Godot 4 project, and complete scene, runtime, and build validation."
|
|
5
|
+
|
|
6
|
+
policy:
|
|
7
|
+
allow_implicit_invocation: true
|
|
8
|
+
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# Alignment gates
|
|
2
|
+
|
|
3
|
+
## Before sync
|
|
4
|
+
|
|
5
|
+
- Godot root contains `project.godot`.
|
|
6
|
+
- Blender modeling/changes MUST be followed by opening Stage with target=godot and explicit user confirmation of the current native Godot view. Opening the page or setting ready/spec metadata is insufficient; no manual-copy bypass.
|
|
7
|
+
- Package is v2 and all required conditions are aligned or explicitly waived.
|
|
8
|
+
- Current `model.glb` bytes match the recorded SHA-256 and byte count.
|
|
9
|
+
- Recipe binds current source and intent revisions.
|
|
10
|
+
- Scene supplement, when present, passes coordinate, camera, manifest and path validation.
|
|
11
|
+
- Current confirmation binds the Godot profile, native screenshot, shared adapter, camera and source revision. A Three.js confirmation cannot authorize a Godot sync.
|
|
12
|
+
|
|
13
|
+
`evomeme asset sync <id> --target godot --project "<project>" --workspace "<workspace>" --json` performs these checks before creating or overwriting destination files.
|
|
14
|
+
|
|
15
|
+
## At runtime
|
|
16
|
+
|
|
17
|
+
The loader repeats lightweight schema/revision assertions before loading the PackedScene. It does not recompute SHA-256 inside Godot; host-side sync owns byte validation. A package edited after sync is unsupported—resync it.
|
|
18
|
+
|
|
19
|
+
## Before delivery
|
|
20
|
+
|
|
21
|
+
- inspect the remote scene tree for one `A3AlignmentRoot` per asset instance;
|
|
22
|
+
- verify intended forward motion, ground contact, scale and camera framing;
|
|
23
|
+
- exercise animation and physics so they do not reapply the wrapper transform;
|
|
24
|
+
- record a Godot run capture for render acceptance.
|
|
25
|
+
|
|
26
|
+
If any gate fails, use `game-asset-align`. Do not turn off assertions or hard-code fallback rotations.
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# Godot Basic Material and Lighting Alignment
|
|
2
|
+
|
|
3
|
+
Launch commands according to the [CLI contract](../../game-asset-align/references/tool-contract.md); keep Stage in a persistent foreground session. JSON results are under `data`.
|
|
4
|
+
|
|
5
|
+
## Required Order
|
|
6
|
+
|
|
7
|
+
**Model/modify and save with Blender MCP -> `evomeme scene export "<scene.blend>" --id <id>` -> select Godot in Stage -> user reviews and confirms -> `evomeme asset sync <id> --target godot --project "<project>"` -> Godot project integration and revalidation.** For the source contract, optional procedural material baking, and parameters, see [scene export workflow](../../game-asset-align/references/blender-scene-pipeline.md).
|
|
8
|
+
|
|
9
|
+
`evomeme stage --asset <id> --workspace "<workspace>" --target godot --json` opens the target-engine viewport. The host provides `godot` through `EVOMEME_GODOT` / `GODOT_PATH` (absolute executable path) or PATH. The PNG on the right comes from an independent native Godot process, and the model snapshot is written to `.evomeme/godot-previews/`; it is not written into the final game project early. The left side uses the Blender baseline that matches the contract camera or a native render from the current camera position. You cannot confirm an old frame when Godot is not installed, native rendering fails, or the camera position changes.
|
|
10
|
+
|
|
11
|
+
## Data and Adjustable Parameters
|
|
12
|
+
|
|
13
|
+
By default, preserve standard GLB PBR materials and textures, normals, and transparency; enable linear vertex colors for meshes with COLOR_0. By default, rebuild SUN/POINT/SPOT from `scene.contract.json.blender_lights`, converting positions and Blender Euler XYZ light directions as `[x,y,z]->[x,z,-y]`. AREA is approximated with a spotlight, and the interface shows this clearly; power is a basic conversion and must be visually calibrated.
|
|
14
|
+
|
|
15
|
+
When calibration is needed, write `runtime/godot.profile.json` inside the package, add the file byte count and SHA-256 to `scene.contract.json.files`, and set `display_profiles.godot.profile_file` to that path. For example:
|
|
16
|
+
|
|
17
|
+
```json
|
|
18
|
+
{
|
|
19
|
+
"schema": "evomeme.godot_scene_profile.v1",
|
|
20
|
+
"asset_id": "my_scene",
|
|
21
|
+
"renderer": "gl_compatibility",
|
|
22
|
+
"environment": {
|
|
23
|
+
"background_srgb": [0.10, 0.14, 0.16],
|
|
24
|
+
"ambient_srgb": [0.75, 0.82, 0.85],
|
|
25
|
+
"ambient_energy": 0.5,
|
|
26
|
+
"exposure": 1.0,
|
|
27
|
+
"tonemapper": "filmic",
|
|
28
|
+
"fog": {"enabled": false, "color_srgb": [0.6, 0.7, 0.8], "density": 0.01}
|
|
29
|
+
},
|
|
30
|
+
"materials": [{"material_name": "Stone", "roughness": 0.8, "metallic": 0.0}]
|
|
31
|
+
}
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
Materials are overridden by exact name. Missing names cause native preview failure to avoid silent no-ops. You can also specify `albedo_srgb` RGBA, `emission_srgb` RGB, `emission_energy`, and `double_sided`; unspecified fields preserve GLB values and textures.
|
|
35
|
+
|
|
36
|
+
You can explicitly provide a `lights` array to replace derived lights. Each item's `type` is `directional/omni/spot`, using Godot Y-up metric `position`, `quaternion_xyzw`, `color_linear` RGB, `energy`, `range`, `spot_angle_degrees` (half-angle, 0.1-89), and `shadow_enabled`. `lights:[]` explicitly disables extra lights. Explicit configuration uses Godot energy values and no longer performs Blender power conversion.
|
|
37
|
+
|
|
38
|
+
## Comparison and Modification Loop
|
|
39
|
+
|
|
40
|
+
Color ambient light is fixed at `ambient_light_sky_contribution=0`, preventing the default sky contribution value from making the profile's color ambient light ineffective. Compatibility vertex colors participate in shading as sRGB and cannot rely only on the `vertex_color_is_srgb` switch: the shared adapter encodes glTF linear COLOR_0 into a private mesh copy, updates only RGB bytes, and preserves Alpha, UVs, indices, skeletons, LOD, and source resources; Forward+/Mobile keep linear data. Native Stage hides `-colonly` / `-convcolonly` helper meshes (including copy suffixes) to prevent GLTFDocument runtime loading from drawing colliders as physical objects.
|
|
41
|
+
|
|
42
|
+
1. Fix the camera quaternion, vertical FOV, and frame, and check front/back faces, normals, transparency, textures, and vertex colors.
|
|
43
|
+
2. Check key light direction, light/dark relationships, shadows, roughness, metallic highlights, emission, ambient color, and exposure.
|
|
44
|
+
3. Fix geometry/node materials back in Blender; make basic engine calibration changes in the Godot profile, and update the manifest summary.
|
|
45
|
+
4. Reload Stage and click confirm in the current native Godot view. `ready=true`, passing spec checks, or Three.js confirmation cannot replace this step.
|
|
46
|
+
5. After sync, use `CanonicalAssetLoader.load_scene(parent, package_dir)` for complete scenes. It applies the same `canonical_appearance.gd`, `godot.appearance.json`, and camera as the preview; `load_package` only handles prop models and spatial transforms.
|
|
47
|
+
|
|
48
|
+
## Runtime and Scope
|
|
49
|
+
|
|
50
|
+
profile.renderer supports gl_compatibility (default), mobile, and forward_plus. During export, the actual renderer of an existing project can be read; Stage uses the same mode for native preview and does not silently fall back to OpenGL; during sync, it verifies that the target project mode is consistent. Choosing a more advanced renderer does not automatically implement volumetric or GI resource conversion, and the board still clearly shows missing items. Camera3D keeps vertical FOV; callers use SubViewport or margins to preserve the confirmed frame. The scene environment is connected only once to avoid stacking with the level's existing WorldEnvironment/lights. The gameplay camera can take over after integration, and after changes, composition and materials must be revalidated.
|
|
51
|
+
|
|
52
|
+
Godot export settings must include `*.json` non-resource files to ensure asset.json/godot.appearance.json are packaged into the game. Three.js shaders, Cycles full-scene baked display modules, and LUTs in the spec are not executed by Godot. Basic PBR and real-time lights/fog do not promise pixel-by-pixel equivalence for Blender procedural nodes, volumetric light, or indirect light.
|
|
53
|
+
|
|
54
|
+
API basis: [GLTFDocument](https://docs.godotengine.org/en/stable/classes/class_gltfdocument.html), [Environment](https://docs.godotengine.org/en/stable/classes/class_environment.html), [SpotLight3D](https://docs.godotengine.org/en/stable/classes/class_spotlight3d.html).
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# Build and QA
|
|
2
|
+
|
|
3
|
+
## Minimum verification
|
|
4
|
+
|
|
5
|
+
1. Let Godot finish GLB import with no resource errors.
|
|
6
|
+
2. Run the scene that instances the asset through `CanonicalAssetLoader`.
|
|
7
|
+
3. Confirm one alignment root and the expected alignment key in the remote scene tree.
|
|
8
|
+
4. Exercise movement, animation, collision, camera and material visibility.
|
|
9
|
+
5. Restart the scene or load the asset twice to confirm idempotency.
|
|
10
|
+
6. Capture the actual Godot viewport/build for visual acceptance.
|
|
11
|
+
|
|
12
|
+
## Failure routing
|
|
13
|
+
|
|
14
|
+
- schema/readiness/revision assertion: resync or return to `game-asset-align`;
|
|
15
|
+
- missing PackedScene/import failure: inspect GLB export and Godot import log, then repair/re-export the canonical source;
|
|
16
|
+
- wrong pose or missing parts: structural review/Blender path;
|
|
17
|
+
- wrong identity/detail: semantic review/source regeneration;
|
|
18
|
+
- material/culling/texture mismatch: render review, with Godot capture as evidence;
|
|
19
|
+
- collision or gameplay transform issue: fix the authored Godot scene above/beside the visual root without modifying canonical TRS.
|
|
20
|
+
|
|
21
|
+
Do not claim completion from a successful file copy alone. A successful run and target-engine visual check are required.
|
|
22
|
+
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# Canonical asset runtime
|
|
2
|
+
|
|
3
|
+
Before any engine sync, open Stage with `target=godot` after Blender modeling and obtain the user's explicit confirmation of the current native frame. Technical alignment metadata alone cannot authorize import.
|
|
4
|
+
|
|
5
|
+
For a complete scene, call `CanonicalAssetLoader.load_scene(parent, package_dir)`. It applies the same material overrides, native lights, environment/exposure and reference camera reviewed in Stage. Use `load_package` below for props in a level with its own lighting. See [appearance-alignment.md](appearance-alignment.md).
|
|
6
|
+
|
|
7
|
+
Call:
|
|
8
|
+
|
|
9
|
+
```gdscript
|
|
10
|
+
var visual := CanonicalAssetLoader.load_package(
|
|
11
|
+
visual_parent,
|
|
12
|
+
"res://assets/canonical/hero"
|
|
13
|
+
)
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
The generated loader verifies:
|
|
17
|
+
|
|
18
|
+
- canonical asset and alignment schema versions;
|
|
19
|
+
- `alignment.ready=true` and `overall_status=aligned`;
|
|
20
|
+
- source fingerprint revision equality;
|
|
21
|
+
- recipe source and intent revision equality;
|
|
22
|
+
- a non-empty `alignment_key`;
|
|
23
|
+
- complete translation, quaternion and positive scale values.
|
|
24
|
+
|
|
25
|
+
It creates `<asset_id>_A3AlignmentRoot`, tags it with the asset ID and alignment key, and places the raw imported model below it. A second call with the same key returns the existing root. A newer key replaces that one root; calling it below another canonical root is rejected.
|
|
26
|
+
|
|
27
|
+
Do not copy recipe values into a `.tscn`, animation track or controller. The generated loader remains the only application point. Gameplay transform belongs above the canonical root; model-local animation remains below it.
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# Import and wrapper scenes
|
|
2
|
+
|
|
3
|
+
Godot imports GLB as a `PackedScene`. Keep that import generated and reproducible. Put scripts, collision, navigation, interaction markers and gameplay signals in a separate authored scene.
|
|
4
|
+
|
|
5
|
+
Recommended hierarchy:
|
|
6
|
+
|
|
7
|
+
```text
|
|
8
|
+
EntityRoot (gameplay/world transform)
|
|
9
|
+
CollisionRoot
|
|
10
|
+
VisualParent
|
|
11
|
+
<asset_id>_A3AlignmentRoot (canonical recipe)
|
|
12
|
+
ImportedGLBRoot (unchanged)
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
Do not edit the imported GLB child transform to fix orientation. Do not put the canonical recipe on `EntityRoot`, because its transform changes during gameplay. Do not wrap an inherited scene and then call the loader again inside it.
|
|
16
|
+
|
|
17
|
+
When the canonical asset changes, resync and let the alignment key replace the visual root. Preserve authored gameplay nodes outside that root.
|
|
18
|
+
|
|
19
|
+
For full scenes/maps with `pivot=origin`, instance under a world parent with identity transform. A level streaming offset is gameplay/world placement and belongs above the canonical root; it must not be written back as asset repair.
|
|
20
|
+
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# Physics and colliders
|
|
2
|
+
|
|
3
|
+
Collision belongs to the gameplay scene, not inside the generated canonical package unless the source contract explicitly carries collider data.
|
|
4
|
+
|
|
5
|
+
- Use simple authored primitives for dynamic actors where possible.
|
|
6
|
+
- Use trimesh collision only for appropriate static environment geometry.
|
|
7
|
+
- Keep collision and visual roots as siblings under the entity so visual alignment does not silently scale physics twice.
|
|
8
|
+
- Validate collision layers, masks, ground clearance and center of mass after every source/recipe revision.
|
|
9
|
+
|
|
10
|
+
If the canonical wrapper scale is not `[1,1,1]`, size authored colliders against the accepted world dimensions. Do not copy the wrapper scale onto both the collision root and its shapes.
|
|
11
|
+
|
|
12
|
+
Physics mismatch can reveal a spatial or semantic defect. If the visual object cannot align with a reasonable collider without local hacks, mark the relevant canonical condition non-ready and repair the source or recipe.
|
|
13
|
+
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# Godot project structure
|
|
2
|
+
|
|
3
|
+
Use a stable separation between imported assets, authored wrapper scenes and gameplay systems.
|
|
4
|
+
|
|
5
|
+
```text
|
|
6
|
+
res://
|
|
7
|
+
assets/canonical/<asset_id>/
|
|
8
|
+
model.glb
|
|
9
|
+
asset.json
|
|
10
|
+
canonical_loader.gd
|
|
11
|
+
scenes/assets/
|
|
12
|
+
scenes/levels/
|
|
13
|
+
scripts/gameplay/
|
|
14
|
+
scripts/presentation/
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
The synchronized package is generated input. Do not hand-edit it in the Godot project; update the workspace canonical package and sync again.
|
|
18
|
+
|
|
19
|
+
Keep gameplay state on a stable parent such as `CharacterBody3D` or an entity root. Add the canonical visual root as a child. This lets control, networking and save state remain stable when the visual package revision changes.
|
|
20
|
+
|
|
21
|
+
Use authored `.tscn` scenes for gameplay composition, signals and engine-specific components. Keep the imported GLB scene read-only or inherited. Never save canonical compensation transforms into multiple scene layers.
|
|
22
|
+
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# Skeleton and animation
|
|
2
|
+
|
|
3
|
+
Keep the canonical wrapper above the imported skeleton. Never apply alignment rotation to individual bones or bake it into animation clips.
|
|
4
|
+
|
|
5
|
+
After sync, verify:
|
|
6
|
+
|
|
7
|
+
- Skeleton3D and skinned meshes share the expected imported hierarchy;
|
|
8
|
+
- animations bind to existing node/bone paths;
|
|
9
|
+
- root motion is handled by one gameplay policy, not both AnimationTree and entity movement;
|
|
10
|
+
- frame zero does not snap because an animation track overwrites the wrapper;
|
|
11
|
+
- sockets for weapons or effects attach to bones/markers below the imported root as intended.
|
|
12
|
+
|
|
13
|
+
Retargeting, missing bones, broken weights and unusable clip naming are structural problems. Mark structural review non-ready and return to the canonical/Blender repair flow. A Godot AnimationTree state machine is not a geometry repair mechanism.
|
|
14
|
+
|
|
15
|
+
When replacing a character source, repeat structural and semantic review even if the silhouette appears unchanged; bone names and clip bindings are part of the maintained state.
|
|
16
|
+
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: phaser-2d-game
|
|
3
|
+
description: Implement 2D browser games with Phaser, TypeScript, and Vite. Use when scenes, gameplay systems, cameras, sprite animation, Arcade physics, tilemaps, DOM-overlay HUDs, or portrait touch controls are needed.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Phaser 2D Game Implementation
|
|
7
|
+
|
|
8
|
+
## Overview
|
|
9
|
+
|
|
10
|
+
This skill is used for the concrete implementation phase of 2D browser games.
|
|
11
|
+
|
|
12
|
+
Tech stack: **Phaser 3 + TypeScript + Vite + pnpm**. Production HUDs/menus use a **DOM overlay** (usually React) layered over the Canvas.
|
|
13
|
+
|
|
14
|
+
## Architecture Principles
|
|
15
|
+
|
|
16
|
+
1. **Separate Systems and Scenes**
|
|
17
|
+
- Systems own game rules, turn order, movement, combat, inventory, objectives, and progress logic. (Aligned with `game/simulation` in the 3D skill: the rules source-of-truth layer)
|
|
18
|
+
- Phaser Scene only maps system state to sprite positions, camera movement, animation playback, and effects; it does not hold game truth.
|
|
19
|
+
|
|
20
|
+
2. **Keep Scenes Lightweight**
|
|
21
|
+
- Boot Scene: configuration initialization and asset preloading
|
|
22
|
+
- Menu Scene: main menu or shell layer (complex menus can still use DOM)
|
|
23
|
+
- Gameplay Scene: main game-loop view
|
|
24
|
+
- Optional: parallel debug Scene (does not replace the production HUD)
|
|
25
|
+
|
|
26
|
+
3. **Renderable Objects Are Disposable**
|
|
27
|
+
- Sprite containers, particles, Tweens, and camera rigs are view state, not data sources.
|
|
28
|
+
|
|
29
|
+
4. **Asset Keys Are Stable**
|
|
30
|
+
- Reference assets through a manifest / `public/config.json`; business code must not hardcode scattered URLs.
|
|
31
|
+
|
|
32
|
+
## Implementation Guidance
|
|
33
|
+
|
|
34
|
+
- Scene reads System through a single boundary and sends input intents back to System.
|
|
35
|
+
- Prefer deterministic system updates; avoid piling complete rules into `update`.
|
|
36
|
+
- Use DOM, not dense Canvas text, for text-heavy HUDs/menus with complex state.
|
|
37
|
+
- Derive animation state from game state.
|
|
38
|
+
- **Use only Phaser Scale Manager for viewport scaling**; CSS/`transform` hand-rolled scaling is forbidden (see `references/engine-runtime.md`).
|
|
39
|
+
- **Measure the image before writing a spritesheet loader** (see `references/engine-spritesheets.md`).
|
|
40
|
+
|
|
41
|
+
## Engine References (Load As Needed)
|
|
42
|
+
|
|
43
|
+
When writing/modifying Phaser runtime code, load references by task in addition to `file-structure.md`; do not preread all of them at once:
|
|
44
|
+
|
|
45
|
+
| Task | Load |
|
|
46
|
+
| --- | --- |
|
|
47
|
+
| Scene lifecycle, Scale, delta, scene switching | `references/engine-runtime.md` |
|
|
48
|
+
| Arcade/Matter selection, collisions, object pools | `references/engine-physics.md` |
|
|
49
|
+
| Any spritesheet / atlas / nine-slice | `references/engine-spritesheets.md` (before loading the sheet) |
|
|
50
|
+
| Tiled maps, collision layers, spawning objects | `references/engine-tilemaps.md` |
|
|
51
|
+
| Stutter, pooling, culling, update allocations | `references/engine-performance.md` |
|
|
52
|
+
|
|
53
|
+
## Covered 2D Game Types
|
|
54
|
+
|
|
55
|
+
- Turn-based grids and tactical chess-like games
|
|
56
|
+
- Top-down exploration maps
|
|
57
|
+
- Side-scrolling action platformers
|
|
58
|
+
- Character action combat (sprite animation frames)
|
|
59
|
+
- Lightweight management or card/command-battle scenes
|
|
60
|
+
|
|
61
|
+
## Camera and Presentation
|
|
62
|
+
|
|
63
|
+
- Decide the camera model early: locked, follow, room switching, tactical panning.
|
|
64
|
+
- Keep camera logic completely separate from game rules.
|
|
65
|
+
- Shake, hit-stop, and parallax must improve readability and must not obscure key information.
|
|
66
|
+
- Large maps: align `cameras.setBounds` with `physics.world.setBounds`.
|
|
67
|
+
|
|
68
|
+
## UI Integration
|
|
69
|
+
|
|
70
|
+
- Use DOM overlays for HUDs, command menus, settings, and narrative.
|
|
71
|
+
- Canvas is responsible for the game world, combat readability, and motion presentation.
|
|
72
|
+
- Unless the project explicitly requires it, do not render dense text or complex settings UI inside Phaser.
|
|
73
|
+
|
|
74
|
+
## Asset Directory Convention
|
|
75
|
+
|
|
76
|
+
```
|
|
77
|
+
assets/
|
|
78
|
+
characters/ sprites, frame animations
|
|
79
|
+
environment/ backgrounds, tiles, scene props
|
|
80
|
+
ui/ HUD images, icons, buttons
|
|
81
|
+
fx/ particles, effects
|
|
82
|
+
audio/ BGM, SFX
|
|
83
|
+
data/ level config, dialogue data, Tiled JSON
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
## Scaffolding and Configuration
|
|
87
|
+
|
|
88
|
+
New project entry points: `index.html`, `src/main.ts`, `public/config.json`. The package manager is **pnpm**. Build output includes `dist/index.html` and `dist/config.json`. The directory and config schema use `references/file-structure.md` as the only normative source.
|
|
89
|
+
|
|
90
|
+
## Common Anti-Patterns
|
|
91
|
+
|
|
92
|
+
When React and Phaser coexist, calling `createGame()` immediately after `root.render()` creates a startup race: React has not yet committed `#game-container`, so Phaser may mount the Canvas at the wrong layer and cover the menu, while the game still remains in the `menu` or `inputLocked` state; the result is a visible screen that cannot be operated. Use `flushSync`, `useLayoutEffect`, a callback ref, or an explicit container-ready signal, start in the order "React container commit complete -> container exists and has valid dimensions -> create Phaser", and check the container and Canvas mount relationship before initialization; when clicks are ineffective, first confirm UI state, input locks, and DOM structure, then adjust the event path.
|
|
93
|
+
|
|
94
|
+
React development mode performs one extra mount cleanup and restart. If an old Phaser Scene is destroyed without unregistering its event listeners, a button may receive the click, but the event may first hit the already-destroyed old Scene, then throw and interrupt the new Scene's click handling. It is forbidden to destroy only the Phaser instance while leaving Scene listeners registered on the input system, DOM, `window`, a shared EventEmitter, or the React bridge layer; every `on`, `addEventListener`, or subscription must have a corresponding `off`, `removeEventListener`, or unsubscribe, and cleanup must be completed in the Scene's `SHUTDOWN`/`DESTROY` and React effect cleanup. In development mode, you must verify that after repeated "create -> cleanup -> create", only the current Scene responds to a click once.
|
|
95
|
+
|
|
96
|
+
- Game rules are written in Scene `update` with no system boundary
|
|
97
|
+
- Scenes pass state through mutable `window` globals
|
|
98
|
+
- CSS scaling is used for Canvas instead of Scale Manager
|
|
99
|
+
- spritesheet frameWidth/Height are guessed without measurement
|
|
100
|
+
- Matter is used for simple AABB
|
|
101
|
+
- Bullets/enemies are constantly created and destroyed without pooling
|
|
102
|
+
- Production HUD is drawn on Canvas just for convenience
|
|
103
|
+
- Asset paths are hardcoded in many places
|
|
104
|
+
- A generic React dashboard pattern is applied to game UI
|
|
105
|
+
- CRA / Next.js / npm-only scaffolding replaces this specification (unless the user explicitly requests it)
|
|
106
|
+
|
|
107
|
+
## References
|
|
108
|
+
|
|
109
|
+
**Engine (This Skill)**
|
|
110
|
+
- File structure and layering: `references/file-structure.md`
|
|
111
|
+
- Runtime / scaling: `references/engine-runtime.md`
|
|
112
|
+
- Physics and object pools: `references/engine-physics.md`
|
|
113
|
+
- Spritesheet / atlas: `references/engine-spritesheets.md`
|
|
114
|
+
- Tilemap: `references/engine-tilemaps.md`
|
|
115
|
+
- Performance: `references/engine-performance.md`
|
|
116
|
+
|
|
117
|
+
**Cross-Skill**
|
|
118
|
+
- Art style: `../game-art/references/art-styles.md`
|
|
119
|
+
- Spatial composition patterns: `../game-art/references/scene-profiles.md`
|
|
120
|
+
- 2D visual quality improvement: `../phaser-2d-graphics-builder/SKILL.md`
|
|
121
|
+
- Animation specs: `../game-art/references/animation-specs.md`
|
|
122
|
+
- UI style: `../game-ui/references/ui-styles.md`
|
|
123
|
+
- Game feel: `../game-designer/references/game-feel.md`
|
|
124
|
+
- Level design: `../game-designer/references/game-design-level-design.md`
|
|
125
|
+
- New game DoD: `../game-designer/references/checklists/new-game-definition-of-done.md`
|
|
126
|
+
- Game feel checklist: `../game-designer/references/checklists/game-feel.md`
|
|
127
|
+
- Level checklist: `../game-designer/references/checklists/game-design-level-design.md`
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
interface:
|
|
2
|
+
display_name: "Phaser 2D Game"
|
|
3
|
+
short_description: "Build clearly structured 2D browser games, handling scenes, gameplay, input, and UI integration"
|
|
4
|
+
default_prompt: "Please use $phaser-2d-game to implement this 2D browser game according to my requirements, and keep the scene, gameplay system, and UI boundaries clear."
|
|
5
|
+
|
|
6
|
+
policy:
|
|
7
|
+
allow_implicit_invocation: true
|
|
8
|
+
|