evomeme 0.1.9 → 0.1.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (405) hide show
  1. package/dist/canvas-public/app.js +509 -5999
  2. package/dist/canvas-public/assets/presets/catalog.json +47 -0
  3. package/dist/canvas-public/assets/presets/tiles/A_01_CaoDi.png +0 -0
  4. package/dist/canvas-public/assets/presets/tiles/A_02_ShaMo.png +0 -0
  5. package/dist/canvas-public/assets/presets/tiles/A_03_TianKong.png +0 -0
  6. package/dist/canvas-public/assets/presets/tiles/A_04_ShuiBo.png +0 -0
  7. package/dist/canvas-public/assets/presets/tiles/A_05_HaiMian.png +0 -0
  8. package/dist/canvas-public/assets/presets/tiles/A_06_MuDiBan.png +0 -0
  9. package/dist/canvas-public/assets/presets/tiles/A_07_ShiZhuan.png +0 -0
  10. package/dist/canvas-public/assets/presets/tiles/A_08_AnRongYan.png +0 -0
  11. package/dist/canvas-public/assets/presets/tiles/A_09_QingTaiShi.png +0 -0
  12. package/dist/canvas-public/assets/presets/tiles/A_10_ShenHai.png +0 -0
  13. package/dist/canvas-public/assets/presets/tiles/A_11_HuiYanShi.png +0 -0
  14. package/dist/canvas-public/assets/presets/tiles/A_12_HongTu.png +0 -0
  15. package/dist/canvas-public/assets/presets/tiles/A_13_GengDi.png +0 -0
  16. package/dist/canvas-public/assets/presets/tiles/A_14_HuoShanYan.png +0 -0
  17. package/dist/canvas-public/assets/presets/tiles/A_15_NiTu.png +0 -0
  18. package/dist/canvas-public/assets/presets/tiles/A_16_HuangSha.png +0 -0
  19. package/dist/canvas-public/assets/presets/tiles/A_17_CongLin.png +0 -0
  20. package/dist/canvas-public/assets/presets/tiles/A_18_ZiYanShi.png +0 -0
  21. package/dist/canvas-public/assets/presets/tiles/A_19_MoGuTu.png +0 -0
  22. package/dist/canvas-public/assets/presets/tiles/A_20_HuaDian.png +0 -0
  23. package/dist/canvas-public/assets/presets/tiles/A_21_HaiLang.png +0 -0
  24. package/dist/canvas-public/assets/presets/tiles/A_22_GanTu.png +0 -0
  25. package/dist/canvas-public/assets/presets/tiles/A_23_QingTaiShiBan.png +0 -0
  26. package/dist/canvas-public/assets/presets/tiles/A_24_XingKong.png +0 -0
  27. package/dist/canvas-public/assets/presets/tiles/A_25_MoFaFuWen.png +0 -0
  28. package/dist/canvas-public/assets/presets/tiles/A_26_ShiTuYeDi.png +0 -0
  29. package/dist/canvas-public/assets/presets/tiles/A_27_LanZhuan.png +0 -0
  30. package/dist/canvas-public/assets/presets/tiles/A_28_HongZhuan.png +0 -0
  31. package/dist/canvas-public/assets/presets/tiles/A_29_YueQiu.png +0 -0
  32. package/dist/canvas-public/assets/presets/tiles/A_30_JinShuGe.png +0 -0
  33. package/dist/canvas-public/assets/presets/tiles/A_31_JinShuJingGai.png +0 -0
  34. package/dist/canvas-public/assets/presets/tiles/A_32_ShuZiChuang.png +0 -0
  35. package/dist/canvas-public/canvas/actions.js +143 -0
  36. package/dist/canvas-public/canvas/camera.js +28 -0
  37. package/dist/canvas-public/canvas/chrome.js +13 -0
  38. package/dist/canvas-public/canvas/data.js +123 -0
  39. package/dist/canvas-public/canvas/dependencies.js +19 -0
  40. package/dist/canvas-public/canvas/interactions.js +544 -0
  41. package/dist/canvas-public/canvas/panel-resize.js +5 -0
  42. package/dist/canvas-public/canvas/renderer.js +297 -0
  43. package/dist/canvas-public/canvas/selection.js +62 -0
  44. package/dist/canvas-public/canvas/serialization.js +118 -0
  45. package/dist/canvas-public/canvas/sync.js +202 -0
  46. package/dist/canvas-public/core/api.js +27 -0
  47. package/dist/canvas-public/core/feature-registry.js +29 -0
  48. package/dist/canvas-public/core/feature-state.js +228 -0
  49. package/dist/canvas-public/core/layout.js +133 -0
  50. package/dist/canvas-public/core/operations.js +38 -0
  51. package/dist/canvas-public/core/project.js +203 -0
  52. package/dist/canvas-public/core/state.js +27 -0
  53. package/dist/canvas-public/dialogs/context-menu.js +118 -0
  54. package/dist/canvas-public/elements/base.js +100 -0
  55. package/dist/canvas-public/elements/connections.js +105 -0
  56. package/dist/canvas-public/elements/drag.js +53 -0
  57. package/dist/canvas-public/elements/image.js +259 -0
  58. package/dist/canvas-public/elements/loading-recovery.js +5 -0
  59. package/dist/canvas-public/elements/loading.js +21 -0
  60. package/dist/canvas-public/elements/map.js +64 -0
  61. package/dist/canvas-public/elements/registry.js +58 -0
  62. package/dist/canvas-public/elements/replacement.js +78 -0
  63. package/dist/canvas-public/elements/resize.js +210 -0
  64. package/dist/canvas-public/elements/task-pipeline.js +234 -0
  65. package/dist/canvas-public/elements/types.js +21 -0
  66. package/dist/canvas-public/elements/ui.js +14 -0
  67. package/dist/canvas-public/elements/video.js +64 -0
  68. package/dist/canvas-public/features/assets/local-assets.js +72 -0
  69. package/dist/canvas-public/features/assets/official-assets.js +538 -0
  70. package/dist/canvas-public/features/editing/canvas-size.js +532 -0
  71. package/dist/canvas-public/features/editing/color-key.js +469 -0
  72. package/dist/canvas-public/features/editing/cutout.js +20 -0
  73. package/dist/canvas-public/features/editing/interactive-image-editing.js +981 -0
  74. package/dist/canvas-public/features/editing/layer-decomposition.js +44 -0
  75. package/dist/canvas-public/features/editing/manual-split.js +114 -0
  76. package/dist/canvas-public/features/editing/perfect-pixel.js +336 -0
  77. package/dist/canvas-public/features/editing/scroll-preview.js +129 -0
  78. package/dist/canvas-public/features/editing/scroll-seam-elimination.js +71 -0
  79. package/dist/canvas-public/features/editing/seam-elimination.js +46 -0
  80. package/dist/canvas-public/features/editing/smart-split.js +48 -0
  81. package/dist/canvas-public/features/editing/source-preview.js +43 -0
  82. package/dist/canvas-public/features/editing/video-cycle.js +49 -0
  83. package/dist/canvas-public/features/editing/video-frames.js +35 -0
  84. package/dist/canvas-public/features/frame-editor/frame-editing.js +755 -0
  85. package/dist/canvas-public/features/frame-editor/frame-model.js +63 -0
  86. package/dist/canvas-public/features/frame-editor/playback.js +83 -0
  87. package/dist/canvas-public/features/frame-editor/preview.js +149 -0
  88. package/dist/canvas-public/features/generation/animation.js +272 -0
  89. package/dist/canvas-public/features/generation/asset-batch.js +102 -0
  90. package/dist/canvas-public/features/generation/direction.js +163 -0
  91. package/dist/canvas-public/features/generation/fields.js +73 -0
  92. package/dist/canvas-public/features/generation/game-ui.js +64 -0
  93. package/dist/canvas-public/features/generation/image.js +83 -0
  94. package/dist/canvas-public/features/generation/scroll-image.js +157 -0
  95. package/dist/canvas-public/features/generation/seamless-tile.js +52 -0
  96. package/dist/canvas-public/features/generation/tile-transition-atlas.js +79 -0
  97. package/dist/canvas-public/features/generation/video.js +105 -0
  98. package/dist/canvas-public/features/map/creation.js +73 -0
  99. package/dist/canvas-public/features/map/tile-map-editor.js +2518 -0
  100. package/dist/canvas-public/features/registry.js +59 -0
  101. package/dist/canvas-public/index.html +84 -259
  102. package/dist/canvas-public/inspector/controls.js +49 -0
  103. package/dist/canvas-public/inspector/frame-preview.js +11 -0
  104. package/dist/canvas-public/inspector/inspector.js +190 -0
  105. package/dist/canvas-public/inspector/media-inspector.js +517 -0
  106. package/dist/canvas-public/inspector/media-preview.js +56 -0
  107. package/dist/canvas-public/inspector/number-stepper.js +96 -0
  108. package/dist/canvas-public/inspector/resize.js +88 -0
  109. package/dist/canvas-public/inspector/scroll-preview.js +11 -0
  110. package/dist/canvas-public/inspector/ui-inspector.js +14 -0
  111. package/dist/canvas-public/language/en-US.js +1059 -0
  112. package/dist/canvas-public/language/index.js +79 -0
  113. package/dist/canvas-public/language/zh-CN.js +1059 -0
  114. package/dist/canvas-public/map/export.js +9 -0
  115. package/dist/canvas-public/map/inspector.js +8 -0
  116. package/dist/canvas-public/map/model.js +409 -0
  117. package/dist/canvas-public/map/tile-map-editor.js +2 -0
  118. package/dist/canvas-public/media/metadata.js +183 -0
  119. package/dist/canvas-public/media/support.js +183 -0
  120. package/dist/canvas-public/styles/base.css +49 -0
  121. package/dist/canvas-public/styles/canvas.css +127 -0
  122. package/dist/canvas-public/styles/controls.css +203 -0
  123. package/dist/canvas-public/styles/dialogs.css +521 -0
  124. package/dist/canvas-public/styles/feature-form.css +409 -0
  125. package/dist/canvas-public/styles/inspector.css +441 -0
  126. package/dist/canvas-public/styles/layout.css +344 -0
  127. package/dist/canvas-public/styles/map.css +11 -0
  128. package/dist/canvas-public/styles/nodes.css +636 -0
  129. package/dist/canvas-public/styles.css +9 -2247
  130. package/dist/canvas-public/ui/controls.js +222 -0
  131. package/dist/canvas-public/ui/elements.js +9 -0
  132. package/dist/canvas-public/ui/feature-controller.js +296 -0
  133. package/dist/canvas-public/ui/feature-form.js +401 -0
  134. package/dist/canvas-public/ui/settings.js +83 -0
  135. package/dist/canvas-public/ui/toolbar.js +55 -0
  136. package/dist/canvas-public/vendor/pixi-tilemap.js +126 -0
  137. package/dist/canvas-public/vendor/pixi.min.js +2340 -0
  138. package/dist/canvas-public/workers/color-key-worker.js +289 -0
  139. package/dist/canvas-public/workers/perfect-pixel-worker.js +510 -0
  140. package/dist/index.js +42236 -13382
  141. package/dist/skills/en-US/evomeme-canvas/SKILL.md +52 -0
  142. package/dist/skills/en-US/evomeme-canvas/agents/openai.yaml +7 -0
  143. package/dist/skills/en-US/evomeme-cloud-fs/SKILL.md +176 -0
  144. package/dist/skills/en-US/evomeme-cloud-fs/agents/openai.yaml +7 -0
  145. package/dist/skills/en-US/evomeme-cover/SKILL.md +132 -0
  146. package/dist/skills/en-US/evomeme-cover/agents/openai.yaml +7 -0
  147. package/dist/skills/en-US/evomeme-game-maker/SKILL.md +288 -0
  148. package/dist/skills/en-US/evomeme-game-maker/agents/openai.yaml +4 -0
  149. package/dist/skills/en-US/evomeme-login/SKILL.md +92 -0
  150. package/dist/skills/en-US/evomeme-login/agents/openai.yaml +7 -0
  151. package/dist/skills/en-US/evomeme-native-bridge-sdk/SKILL.md +286 -0
  152. package/dist/skills/en-US/evomeme-native-bridge-sdk/agents/openai.yaml +8 -0
  153. package/dist/skills/en-US/evomeme-tos-upload/SKILL.md +47 -0
  154. package/dist/skills/en-US/evomeme-tos-upload/agents/openai.yaml +5 -0
  155. package/dist/skills/en-US/evomeme-ui/SKILL.md +123 -0
  156. package/dist/skills/en-US/evomeme-ui/agents/openai.yaml +4 -0
  157. package/dist/skills/en-US/evomeme-ui/references/host-layout.md +69 -0
  158. package/dist/skills/en-US/game-art/SKILL.md +121 -0
  159. package/dist/skills/en-US/game-art/agents/openai.yaml +8 -0
  160. package/dist/skills/en-US/game-asset-align/SKILL.md +45 -0
  161. package/dist/skills/en-US/game-asset-align/agents/openai.yaml +8 -0
  162. package/dist/skills/en-US/game-asset-align/references/alignment-contract.md +61 -0
  163. package/dist/skills/en-US/game-asset-align/references/blender-scene-pipeline.md +45 -0
  164. package/dist/skills/en-US/game-asset-align/references/canonical-package.md +26 -0
  165. package/dist/skills/en-US/game-asset-align/references/engine-capabilities.md +14 -0
  166. package/dist/skills/en-US/game-asset-align/references/lightweight-review.md +32 -0
  167. package/dist/skills/en-US/game-asset-align/references/repair-policy.md +30 -0
  168. package/dist/skills/en-US/game-asset-align/references/tool-contract.md +39 -0
  169. package/dist/skills/en-US/game-asset-align/references/visual-review.md +26 -0
  170. package/dist/skills/en-US/game-asset-image-generator/SKILL.md +104 -0
  171. package/dist/skills/en-US/game-asset-image-generator/agents/openai.yaml +7 -0
  172. package/dist/skills/en-US/game-asset-image-generator/references/background.md +32 -0
  173. package/dist/skills/en-US/game-asset-image-generator/references/static-game-assets.md +38 -0
  174. package/dist/skills/en-US/game-audio/SKILL.md +82 -0
  175. package/dist/skills/en-US/game-audio/agents/openai.yaml +4 -0
  176. package/dist/skills/en-US/game-demo/SKILL.md +103 -0
  177. package/dist/skills/en-US/game-demo/agents/openai.yaml +7 -0
  178. package/dist/skills/en-US/game-maker/SKILL.md +111 -0
  179. package/dist/skills/en-US/game-maker/agents/openai.yaml +4 -0
  180. package/dist/skills/en-US/game-test/SKILL.md +58 -0
  181. package/dist/skills/en-US/game-test/agents/openai.yaml +7 -0
  182. package/dist/skills/en-US/game-ui/SKILL.md +177 -0
  183. package/dist/skills/en-US/game-ui/agents/openai.yaml +4 -0
  184. package/dist/skills/en-US/godot-3d-game/SKILL.md +39 -0
  185. package/dist/skills/en-US/godot-3d-game/agents/openai.yaml +8 -0
  186. package/dist/skills/en-US/godot-3d-game/references/alignment-gates.md +26 -0
  187. package/dist/skills/en-US/godot-3d-game/references/appearance-alignment.md +52 -0
  188. package/dist/skills/en-US/godot-3d-game/references/build-and-qa.md +22 -0
  189. package/dist/skills/en-US/godot-3d-game/references/canonical-asset-runtime.md +27 -0
  190. package/dist/skills/en-US/godot-3d-game/references/import-and-wrapper-scenes.md +20 -0
  191. package/dist/skills/en-US/godot-3d-game/references/physics-colliders.md +13 -0
  192. package/dist/skills/en-US/godot-3d-game/references/project-structure.md +22 -0
  193. package/dist/skills/en-US/godot-3d-game/references/skeleton-animation.md +16 -0
  194. package/dist/skills/en-US/phaser-2d-game/SKILL.md +127 -0
  195. package/dist/skills/en-US/phaser-2d-game/agents/openai.yaml +8 -0
  196. package/dist/skills/en-US/phaser-2d-game/references/engine-performance.md +64 -0
  197. package/dist/skills/en-US/phaser-2d-game/references/engine-physics.md +139 -0
  198. package/dist/skills/en-US/phaser-2d-game/references/engine-runtime.md +129 -0
  199. package/dist/skills/en-US/phaser-2d-game/references/engine-spritesheets.md +99 -0
  200. package/dist/skills/en-US/phaser-2d-game/references/engine-tilemaps.md +80 -0
  201. package/dist/skills/en-US/phaser-2d-game/references/file-structure.md +94 -0
  202. package/dist/skills/en-US/phaser-2d-graphics-builder/SKILL.md +68 -0
  203. package/dist/skills/en-US/phaser-2d-graphics-builder/agents/openai.yaml +7 -0
  204. package/dist/skills/en-US/threejs-3d-game/SKILL.md +117 -0
  205. package/dist/skills/en-US/threejs-3d-game/agents/openai.yaml +7 -0
  206. package/dist/skills/en-US/threejs-3d-game/references/engine-asset-pipeline.md +153 -0
  207. package/dist/skills/en-US/threejs-3d-game/references/engine-audio.md +70 -0
  208. package/dist/skills/en-US/threejs-3d-game/references/engine-input-camera.md +84 -0
  209. package/dist/skills/en-US/threejs-3d-game/references/engine-performance.md +96 -0
  210. package/dist/skills/en-US/threejs-3d-game/references/engine-physics.md +142 -0
  211. package/dist/skills/en-US/threejs-3d-game/references/engine-runtime.md +199 -0
  212. package/dist/skills/en-US/threejs-3d-game/references/file-structure.md +353 -0
  213. package/dist/skills/en-US/threejs-aaa-graphics-builder/SKILL.md +62 -0
  214. package/dist/skills/en-US/threejs-aaa-graphics-builder/agents/openai.yaml +7 -0
  215. package/{skills → dist/skills/zh-CN}/evomeme-cloud-fs/SKILL.md +4 -4
  216. package/{skills → dist/skills/zh-CN}/evomeme-cover/SKILL.md +1 -1
  217. package/{skills → dist/skills/zh-CN}/evomeme-game-maker/SKILL.md +91 -88
  218. package/{skills → dist/skills/zh-CN}/evomeme-tos-upload/SKILL.md +6 -5
  219. package/dist/skills/zh-CN/evomeme-ui/SKILL.md +123 -0
  220. package/dist/skills/zh-CN/evomeme-ui/agents/openai.yaml +4 -0
  221. package/dist/skills/zh-CN/evomeme-ui/references/host-layout.md +69 -0
  222. package/dist/skills/zh-CN/game-asset-align/SKILL.md +45 -0
  223. package/dist/skills/zh-CN/game-asset-align/agents/openai.yaml +8 -0
  224. package/dist/skills/zh-CN/game-asset-align/references/alignment-contract.md +61 -0
  225. package/dist/skills/zh-CN/game-asset-align/references/blender-scene-pipeline.md +45 -0
  226. package/dist/skills/zh-CN/game-asset-align/references/canonical-package.md +26 -0
  227. package/dist/skills/zh-CN/game-asset-align/references/engine-capabilities.md +14 -0
  228. package/dist/skills/zh-CN/game-asset-align/references/lightweight-review.md +32 -0
  229. package/dist/skills/zh-CN/game-asset-align/references/repair-policy.md +30 -0
  230. package/dist/skills/zh-CN/game-asset-align/references/tool-contract.md +39 -0
  231. package/dist/skills/zh-CN/game-asset-align/references/visual-review.md +26 -0
  232. package/{skills → dist/skills/zh-CN}/game-asset-image-generator/SKILL.md +1 -1
  233. package/dist/skills/zh-CN/game-audio/references/bgm-cdn.md +127 -0
  234. package/dist/skills/zh-CN/game-audio/references/sfx-cdn.md +77 -0
  235. package/dist/skills/zh-CN/game-test/references/checklists/playtest-qa.md +12 -0
  236. package/{skills → dist/skills/zh-CN}/game-ui/SKILL.md +9 -1
  237. package/dist/skills/zh-CN/game-ui/references/checklists/game-ui-quality.md +14 -0
  238. package/dist/skills/zh-CN/game-ui/references/checklists/hud-readability.md +12 -0
  239. package/dist/skills/zh-CN/game-ui/references/checklists/mobile-input.md +12 -0
  240. package/dist/skills/zh-CN/game-ui/references/checklists/responsive-ui-fit.md +12 -0
  241. package/dist/skills/zh-CN/game-ui/references/ui-patterns.md +140 -0
  242. package/dist/skills/zh-CN/game-ui/references/ui-prompt-templates.md +63 -0
  243. package/dist/skills/zh-CN/godot-3d-game/SKILL.md +39 -0
  244. package/dist/skills/zh-CN/godot-3d-game/agents/openai.yaml +8 -0
  245. package/dist/skills/zh-CN/godot-3d-game/references/alignment-gates.md +26 -0
  246. package/dist/skills/zh-CN/godot-3d-game/references/appearance-alignment.md +52 -0
  247. package/dist/skills/zh-CN/godot-3d-game/references/build-and-qa.md +22 -0
  248. package/dist/skills/zh-CN/godot-3d-game/references/canonical-asset-runtime.md +27 -0
  249. package/dist/skills/zh-CN/godot-3d-game/references/import-and-wrapper-scenes.md +20 -0
  250. package/dist/skills/zh-CN/godot-3d-game/references/physics-colliders.md +13 -0
  251. package/dist/skills/zh-CN/godot-3d-game/references/project-structure.md +22 -0
  252. package/dist/skills/zh-CN/godot-3d-game/references/skeleton-animation.md +16 -0
  253. package/dist/skills/zh-CN/phaser-2d-graphics-builder/assets/scorecard-anchors/scene-1.jpeg +0 -0
  254. package/dist/skills/zh-CN/phaser-2d-graphics-builder/assets/scorecard-anchors/scene-2.jpeg +0 -0
  255. package/dist/skills/zh-CN/phaser-2d-graphics-builder/assets/scorecard-anchors/scene-3.jpg +0 -0
  256. package/dist/skills/zh-CN/phaser-2d-graphics-builder/references/checklists/compose-quality.md +10 -0
  257. package/dist/skills/zh-CN/phaser-2d-graphics-builder/references/checklists/performance-safe-visual-detail.md +9 -0
  258. package/dist/skills/zh-CN/phaser-2d-graphics-builder/references/checklists/premium-game-quality-gate.md +15 -0
  259. package/dist/skills/zh-CN/phaser-2d-graphics-builder/references/checklists/sprite-quality.md +10 -0
  260. package/dist/skills/zh-CN/phaser-2d-graphics-builder/references/checklists/technical-art-quality.md +9 -0
  261. package/dist/skills/zh-CN/phaser-2d-graphics-builder/references/checklists/visual-scorecard.md +9 -0
  262. package/dist/skills/zh-CN/phaser-2d-graphics-builder/references/compose-recipes.md +71 -0
  263. package/dist/skills/zh-CN/phaser-2d-graphics-builder/references/graphics-prompt-templates.md +33 -0
  264. package/dist/skills/zh-CN/phaser-2d-graphics-builder/references/implementation-blueprint.md +82 -0
  265. package/dist/skills/zh-CN/phaser-2d-graphics-builder/references/sprite-recipes.md +90 -0
  266. package/dist/skills/zh-CN/phaser-2d-graphics-builder/references/technical-art.md +67 -0
  267. package/dist/skills/zh-CN/phaser-2d-graphics-builder/references/vfx-recipes.md +67 -0
  268. package/dist/skills/zh-CN/phaser-2d-graphics-builder/references/visual-scorecard.md +129 -0
  269. package/{skills → dist/skills/zh-CN}/threejs-3d-game/SKILL.md +6 -2
  270. package/{skills → dist/skills/zh-CN}/threejs-3d-game/references/engine-asset-pipeline.md +52 -15
  271. package/dist/skills/zh-CN/threejs-aaa-graphics-builder/assets/scorecard-anchors/scene-1.jpg +0 -0
  272. package/dist/skills/zh-CN/threejs-aaa-graphics-builder/assets/scorecard-anchors/scene-2.jpg +0 -0
  273. package/dist/skills/zh-CN/threejs-aaa-graphics-builder/assets/scorecard-anchors/scene-3.jpg +0 -0
  274. package/dist/skills/zh-CN/threejs-aaa-graphics-builder/references/checklists/aaa-game-quality-gate.md +23 -0
  275. package/dist/skills/zh-CN/threejs-aaa-graphics-builder/references/checklists/aaa-visual-scorecard.md +19 -0
  276. package/dist/skills/zh-CN/threejs-aaa-graphics-builder/references/checklists/material-lighting-quality.md +14 -0
  277. package/dist/skills/zh-CN/threejs-aaa-graphics-builder/references/checklists/performance-safe-visual-detail.md +14 -0
  278. package/dist/skills/zh-CN/threejs-aaa-graphics-builder/references/checklists/procedural-model-quality.md +15 -0
  279. package/dist/skills/zh-CN/threejs-aaa-graphics-builder/references/checklists/technical-art-quality.md +17 -0
  280. package/dist/skills/zh-CN/threejs-aaa-graphics-builder/references/graphics-prompt-templates.md +236 -0
  281. package/dist/skills/zh-CN/threejs-aaa-graphics-builder/references/implementation-blueprint.md +161 -0
  282. package/dist/skills/zh-CN/threejs-aaa-graphics-builder/references/model-recipes.md +146 -0
  283. package/dist/skills/zh-CN/threejs-aaa-graphics-builder/references/render-recipes.md +90 -0
  284. package/dist/skills/zh-CN/threejs-aaa-graphics-builder/references/shader-cookbook.md +292 -0
  285. package/dist/skills/zh-CN/threejs-aaa-graphics-builder/references/technical-art.md +167 -0
  286. package/dist/skills/zh-CN/threejs-aaa-graphics-builder/references/visual-scorecard.md +147 -0
  287. package/dist/stage-blender/bake_materials.py +102 -0
  288. package/dist/stage-blender/export_scene.py +275 -0
  289. package/dist/stage-blender/preview_camera.py +90 -0
  290. package/dist/stage-blender/repair_mesh.py +112 -0
  291. package/dist/stage-public/app.js +759 -0
  292. package/dist/stage-public/baked/bakePilot.js +44 -0
  293. package/dist/stage-public/baked/bakedScene.js +129 -0
  294. package/dist/stage-public/baked/sceneAppearance.js +225 -0
  295. package/dist/stage-public/baked/sceneCamera.js +45 -0
  296. package/dist/stage-public/comparison-contract.js +28 -0
  297. package/dist/stage-public/delivery.html +4 -0
  298. package/dist/stage-public/delivery.js +17 -0
  299. package/dist/stage-public/godot/appearance.gd +170 -0
  300. package/dist/stage-public/godot/preview.gd +79 -0
  301. package/dist/stage-public/index.html +141 -0
  302. package/dist/stage-public/review-app.js +289 -0
  303. package/dist/stage-public/review-runtime.js +63 -0
  304. package/dist/stage-public/review.css +24 -0
  305. package/dist/stage-public/review.html +47 -0
  306. package/dist/stage-public/scene-runtime.js +212 -0
  307. package/dist/stage-public/sceneContractRuntime.js +235 -0
  308. package/dist/stage-public/styles.css +328 -0
  309. package/dist/stage-public/three-appearance.js +104 -0
  310. package/dist/stage-public/vendor/three170/LICENSE +21 -0
  311. package/dist/stage-public/vendor/three170/build/three.module.js +54571 -0
  312. package/dist/stage-public/vendor/three170/examples/jsm/controls/OrbitControls.js +1523 -0
  313. package/dist/stage-public/vendor/three170/examples/jsm/environments/RoomEnvironment.js +144 -0
  314. package/dist/stage-public/vendor/three170/examples/jsm/libs/fflate.module.js +2672 -0
  315. package/dist/stage-public/vendor/three170/examples/jsm/loaders/EXRLoader.js +2563 -0
  316. package/dist/stage-public/vendor/three170/examples/jsm/loaders/GLTFLoader.js +4727 -0
  317. package/dist/stage-public/vendor/three170/examples/jsm/utils/BufferGeometryUtils.js +1373 -0
  318. package/dist/tile-transition-mask.svg +40 -0
  319. package/package.json +21 -7
  320. package/dist/canvas-public/cycle-detect.js +0 -166
  321. package/dist/canvas-public/smart-split.js +0 -185
  322. /package/{skills → dist/skills/en-US}/game-audio/references/bgm-cdn.md +0 -0
  323. /package/{skills → dist/skills/en-US}/game-audio/references/sfx-cdn.md +0 -0
  324. /package/{skills → dist/skills/en-US}/game-test/references/checklists/playtest-qa.md +0 -0
  325. /package/{skills → dist/skills/en-US}/game-ui/references/checklists/game-ui-quality.md +0 -0
  326. /package/{skills → dist/skills/en-US}/game-ui/references/checklists/hud-readability.md +0 -0
  327. /package/{skills → dist/skills/en-US}/game-ui/references/checklists/mobile-input.md +0 -0
  328. /package/{skills → dist/skills/en-US}/game-ui/references/checklists/responsive-ui-fit.md +0 -0
  329. /package/{skills → dist/skills/en-US}/game-ui/references/ui-patterns.md +0 -0
  330. /package/{skills → dist/skills/en-US}/game-ui/references/ui-prompt-templates.md +0 -0
  331. /package/{skills → dist/skills/en-US}/phaser-2d-graphics-builder/assets/scorecard-anchors/scene-1.jpeg +0 -0
  332. /package/{skills → dist/skills/en-US}/phaser-2d-graphics-builder/assets/scorecard-anchors/scene-2.jpeg +0 -0
  333. /package/{skills → dist/skills/en-US}/phaser-2d-graphics-builder/assets/scorecard-anchors/scene-3.jpg +0 -0
  334. /package/{skills → dist/skills/en-US}/phaser-2d-graphics-builder/references/checklists/compose-quality.md +0 -0
  335. /package/{skills → dist/skills/en-US}/phaser-2d-graphics-builder/references/checklists/performance-safe-visual-detail.md +0 -0
  336. /package/{skills → dist/skills/en-US}/phaser-2d-graphics-builder/references/checklists/premium-game-quality-gate.md +0 -0
  337. /package/{skills → dist/skills/en-US}/phaser-2d-graphics-builder/references/checklists/sprite-quality.md +0 -0
  338. /package/{skills → dist/skills/en-US}/phaser-2d-graphics-builder/references/checklists/technical-art-quality.md +0 -0
  339. /package/{skills → dist/skills/en-US}/phaser-2d-graphics-builder/references/checklists/visual-scorecard.md +0 -0
  340. /package/{skills → dist/skills/en-US}/phaser-2d-graphics-builder/references/compose-recipes.md +0 -0
  341. /package/{skills → dist/skills/en-US}/phaser-2d-graphics-builder/references/graphics-prompt-templates.md +0 -0
  342. /package/{skills → dist/skills/en-US}/phaser-2d-graphics-builder/references/implementation-blueprint.md +0 -0
  343. /package/{skills → dist/skills/en-US}/phaser-2d-graphics-builder/references/sprite-recipes.md +0 -0
  344. /package/{skills → dist/skills/en-US}/phaser-2d-graphics-builder/references/technical-art.md +0 -0
  345. /package/{skills → dist/skills/en-US}/phaser-2d-graphics-builder/references/vfx-recipes.md +0 -0
  346. /package/{skills → dist/skills/en-US}/phaser-2d-graphics-builder/references/visual-scorecard.md +0 -0
  347. /package/{skills → dist/skills/en-US}/threejs-aaa-graphics-builder/assets/scorecard-anchors/scene-1.jpg +0 -0
  348. /package/{skills → dist/skills/en-US}/threejs-aaa-graphics-builder/assets/scorecard-anchors/scene-2.jpg +0 -0
  349. /package/{skills → dist/skills/en-US}/threejs-aaa-graphics-builder/assets/scorecard-anchors/scene-3.jpg +0 -0
  350. /package/{skills → dist/skills/en-US}/threejs-aaa-graphics-builder/references/checklists/aaa-game-quality-gate.md +0 -0
  351. /package/{skills → dist/skills/en-US}/threejs-aaa-graphics-builder/references/checklists/aaa-visual-scorecard.md +0 -0
  352. /package/{skills → dist/skills/en-US}/threejs-aaa-graphics-builder/references/checklists/material-lighting-quality.md +0 -0
  353. /package/{skills → dist/skills/en-US}/threejs-aaa-graphics-builder/references/checklists/performance-safe-visual-detail.md +0 -0
  354. /package/{skills → dist/skills/en-US}/threejs-aaa-graphics-builder/references/checklists/procedural-model-quality.md +0 -0
  355. /package/{skills → dist/skills/en-US}/threejs-aaa-graphics-builder/references/checklists/technical-art-quality.md +0 -0
  356. /package/{skills → dist/skills/en-US}/threejs-aaa-graphics-builder/references/graphics-prompt-templates.md +0 -0
  357. /package/{skills → dist/skills/en-US}/threejs-aaa-graphics-builder/references/implementation-blueprint.md +0 -0
  358. /package/{skills → dist/skills/en-US}/threejs-aaa-graphics-builder/references/model-recipes.md +0 -0
  359. /package/{skills → dist/skills/en-US}/threejs-aaa-graphics-builder/references/render-recipes.md +0 -0
  360. /package/{skills → dist/skills/en-US}/threejs-aaa-graphics-builder/references/shader-cookbook.md +0 -0
  361. /package/{skills → dist/skills/en-US}/threejs-aaa-graphics-builder/references/technical-art.md +0 -0
  362. /package/{skills → dist/skills/en-US}/threejs-aaa-graphics-builder/references/visual-scorecard.md +0 -0
  363. /package/{skills → dist/skills/zh-CN}/evomeme-canvas/SKILL.md +0 -0
  364. /package/{skills → dist/skills/zh-CN}/evomeme-canvas/agents/openai.yaml +0 -0
  365. /package/{skills → dist/skills/zh-CN}/evomeme-cloud-fs/agents/openai.yaml +0 -0
  366. /package/{skills → dist/skills/zh-CN}/evomeme-cover/agents/openai.yaml +0 -0
  367. /package/{skills → dist/skills/zh-CN}/evomeme-game-maker/agents/openai.yaml +0 -0
  368. /package/{skills → dist/skills/zh-CN}/evomeme-login/SKILL.md +0 -0
  369. /package/{skills → dist/skills/zh-CN}/evomeme-login/agents/openai.yaml +0 -0
  370. /package/{skills → dist/skills/zh-CN}/evomeme-native-bridge-sdk/SKILL.md +0 -0
  371. /package/{skills → dist/skills/zh-CN}/evomeme-native-bridge-sdk/agents/openai.yaml +0 -0
  372. /package/{skills → dist/skills/zh-CN}/evomeme-tos-upload/agents/openai.yaml +0 -0
  373. /package/{skills → dist/skills/zh-CN}/game-art/SKILL.md +0 -0
  374. /package/{skills → dist/skills/zh-CN}/game-art/agents/openai.yaml +0 -0
  375. /package/{skills → dist/skills/zh-CN}/game-asset-image-generator/agents/openai.yaml +0 -0
  376. /package/{skills → dist/skills/zh-CN}/game-asset-image-generator/references/background.md +0 -0
  377. /package/{skills → dist/skills/zh-CN}/game-asset-image-generator/references/static-game-assets.md +0 -0
  378. /package/{skills → dist/skills/zh-CN}/game-audio/SKILL.md +0 -0
  379. /package/{skills → dist/skills/zh-CN}/game-audio/agents/openai.yaml +0 -0
  380. /package/{skills → dist/skills/zh-CN}/game-demo/SKILL.md +0 -0
  381. /package/{skills → dist/skills/zh-CN}/game-demo/agents/openai.yaml +0 -0
  382. /package/{skills → dist/skills/zh-CN}/game-maker/SKILL.md +0 -0
  383. /package/{skills → dist/skills/zh-CN}/game-maker/agents/openai.yaml +0 -0
  384. /package/{skills → dist/skills/zh-CN}/game-test/SKILL.md +0 -0
  385. /package/{skills → dist/skills/zh-CN}/game-test/agents/openai.yaml +0 -0
  386. /package/{skills → dist/skills/zh-CN}/game-ui/agents/openai.yaml +0 -0
  387. /package/{skills → dist/skills/zh-CN}/phaser-2d-game/SKILL.md +0 -0
  388. /package/{skills → dist/skills/zh-CN}/phaser-2d-game/agents/openai.yaml +0 -0
  389. /package/{skills → dist/skills/zh-CN}/phaser-2d-game/references/engine-performance.md +0 -0
  390. /package/{skills → dist/skills/zh-CN}/phaser-2d-game/references/engine-physics.md +0 -0
  391. /package/{skills → dist/skills/zh-CN}/phaser-2d-game/references/engine-runtime.md +0 -0
  392. /package/{skills → dist/skills/zh-CN}/phaser-2d-game/references/engine-spritesheets.md +0 -0
  393. /package/{skills → dist/skills/zh-CN}/phaser-2d-game/references/engine-tilemaps.md +0 -0
  394. /package/{skills → dist/skills/zh-CN}/phaser-2d-game/references/file-structure.md +0 -0
  395. /package/{skills → dist/skills/zh-CN}/phaser-2d-graphics-builder/SKILL.md +0 -0
  396. /package/{skills → dist/skills/zh-CN}/phaser-2d-graphics-builder/agents/openai.yaml +0 -0
  397. /package/{skills → dist/skills/zh-CN}/threejs-3d-game/agents/openai.yaml +0 -0
  398. /package/{skills → dist/skills/zh-CN}/threejs-3d-game/references/engine-audio.md +0 -0
  399. /package/{skills → dist/skills/zh-CN}/threejs-3d-game/references/engine-input-camera.md +0 -0
  400. /package/{skills → dist/skills/zh-CN}/threejs-3d-game/references/engine-performance.md +0 -0
  401. /package/{skills → dist/skills/zh-CN}/threejs-3d-game/references/engine-physics.md +0 -0
  402. /package/{skills → dist/skills/zh-CN}/threejs-3d-game/references/engine-runtime.md +0 -0
  403. /package/{skills → dist/skills/zh-CN}/threejs-3d-game/references/file-structure.md +0 -0
  404. /package/{skills → dist/skills/zh-CN}/threejs-aaa-graphics-builder/SKILL.md +0 -0
  405. /package/{skills → dist/skills/zh-CN}/threejs-aaa-graphics-builder/agents/openai.yaml +0 -0
@@ -0,0 +1,39 @@
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
+ 1. Confirm that the project root contains `project.godot`, and read the reference files relevant to the task.
15
+ 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_open({workspace_dir, asset_id, target:"godot"})`, 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.
16
+ 3. Call `evomeme_asset_sync_to_godot`; do not manually copy some files.
17
+ 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`.
18
+ 5. Layer gameplay nodes, animation, collision, and the visible model separately; do not compensate the canonical Transform in the character controller or animation tree.
19
+ 6. Check composition, grounding, orientation, scale, materials, and interactive collision in the real Godot runtime view.
20
+
21
+ ## Routing references
22
+
23
+ - Project directory and scene layering: read [project-structure.md](references/project-structure.md).
24
+ - Materials, lighting, exposure, camera, and Stage native preview: read [appearance-alignment.md](references/appearance-alignment.md).
25
+ - v2 loader, revision, and single-wrapper rules: read [canonical-asset-runtime.md](references/canonical-asset-runtime.md).
26
+ - Pre-import/runtime/delivery gates: read [alignment-gates.md](references/alignment-gates.md).
27
+ - GLB import, inherited scenes, and wrapper maintenance: read [import-and-wrapper-scenes.md](references/import-and-wrapper-scenes.md).
28
+ - Character skeletons and animation: read [skeleton-animation.md](references/skeleton-animation.md).
29
+ - Physics bodies and collision layers: read [physics-colliders.md](references/physics-colliders.md).
30
+ - Build, runtime, and screenshot QA: read [build-and-qa.md](references/build-and-qa.md).
31
+
32
+ ## Completion gates
33
+
34
+ - The sync result has `alignment_status=aligned` and a non-empty `alignment_key`.
35
+ - Stage confirmation comes from the current native Godot view; after changing the model or display configuration, view and confirm again, then sync.
36
+ - The same asset has only one canonical alignment root in the Godot scene.
37
+ - Model nodes preserve the original imported Transform, and game logic does not apply repair recipes repeatedly.
38
+ - Skeleton, animation, collision, and visual nodes have separated responsibilities.
39
+ - 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_to_godot` 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,52 @@
1
+ # Godot Basic Material and Lighting Alignment
2
+
3
+ ## Required Order
4
+
5
+ **Model/modify and save with Blender MCP -> evomeme_scene_export_blender -> select Godot in Stage -> user reviews and confirms -> sync_to_godot -> 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).
6
+
7
+ `evomeme_stage_open({workspace_dir,asset_id,target:"godot"})` 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.
8
+
9
+ ## Data and Adjustable Parameters
10
+
11
+ 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.
12
+
13
+ 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:
14
+
15
+ ```json
16
+ {
17
+ "schema": "evomeme.godot_scene_profile.v1",
18
+ "asset_id": "my_scene",
19
+ "renderer": "gl_compatibility",
20
+ "environment": {
21
+ "background_srgb": [0.10, 0.14, 0.16],
22
+ "ambient_srgb": [0.75, 0.82, 0.85],
23
+ "ambient_energy": 0.5,
24
+ "exposure": 1.0,
25
+ "tonemapper": "filmic",
26
+ "fog": {"enabled": false, "color_srgb": [0.6, 0.7, 0.8], "density": 0.01}
27
+ },
28
+ "materials": [{"material_name": "Stone", "roughness": 0.8, "metallic": 0.0}]
29
+ }
30
+ ```
31
+
32
+ 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.
33
+
34
+ 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.
35
+
36
+ ## Comparison and Modification Loop
37
+
38
+ 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.
39
+
40
+ 1. Fix the camera quaternion, vertical FOV, and frame, and check front/back faces, normals, transparency, textures, and vertex colors.
41
+ 2. Check key light direction, light/dark relationships, shadows, roughness, metallic highlights, emission, ambient color, and exposure.
42
+ 3. Fix geometry/node materials back in Blender; make basic engine calibration changes in the Godot profile, and update the manifest summary.
43
+ 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.
44
+ 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.
45
+
46
+ ## Runtime and Scope
47
+
48
+ 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.
49
+
50
+ 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.
51
+
52
+ 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
+
@@ -0,0 +1,64 @@
1
+ # Engine: Performance
2
+
3
+ Load this when there is stutter, frame drops, or spawn spikes.
4
+
5
+ ## Priority Items
6
+
7
+ 1. **Object pools**: bullets, enemies, floating text, short-lived particle carriers — see `engine-physics.md`
8
+ 2. **Atlases**: keep on-screen assets in the same atlas where possible to reduce texture switching
9
+ 3. **Fewer collision pairs**: attach only needed collider/overlap pairs; disable offscreen bodies
10
+ 4. **No allocations in update**: do not create `{}` / `new Vector2` every frame; reuse temporary vectors
11
+ 5. **Use delta for time**: `delta/1000`; AI/pathfinding can run at a lower frequency
12
+
13
+ ## Physics
14
+
15
+ ```ts
16
+ // Offscreen bodies can be disabled
17
+ enemy.body.enable = cam.worldView.contains(enemy.x, enemy.y);
18
+
19
+ // Circular collision is often cheaper than a large rectangle
20
+ sprite.body.setCircle(16);
21
+ ```
22
+
23
+ With many dynamic bodies, evaluate `arcade.useTree` / `maxEntries`; consider disabling the tree only after >5000 bodies (based on measurement).
24
+
25
+ ## Rendering
26
+
27
+ - Use `tileSprite` or a static image for backgrounds; do not redraw large images every frame
28
+ - Use ADD/MULTIPLY and similar blending cautiously (they can easily split batches)
29
+ - Set particle `maxParticles` / `frequency`
30
+ - Sprites outside the camera are culled by default; fixed UI with `scrollFactor 0` on Canvas must be intentional (production HUD still uses DOM)
31
+
32
+ ## Memory and Scene Switching
33
+
34
+ ```ts
35
+ shutdown() {
36
+ this.enemies?.clear(true, true);
37
+ // this.textures.remove('only-this-level') as needed;
38
+ }
39
+ ```
40
+
41
+ When changing levels, unload only this level's large images/tilemap; shared atlases can stay.
42
+
43
+ ## Reduce Frequency of Expensive Logic
44
+
45
+ ```ts
46
+ if (time - this.lastAiAt > 100) {
47
+ this.lastAiAt = time;
48
+ this.updateEnemyAi(); // Can also be on the System side
49
+ }
50
+ ```
51
+
52
+ Movement/camera runs every frame; AI, pathfinding, and cleanup scans can run at 5-10Hz.
53
+
54
+ ## Quick Check Table
55
+
56
+ | Symptom | Common Cause | Handling |
57
+ | --- | --- | --- |
58
+ | Slower over time | Leak not destroyed | Check pools and shutdown |
59
+ | Periodic stutter | GC | Pool, reduce update allocations |
60
+ | Constant low FPS | Too many objects/draws | Cull, atlas, reduce particles |
61
+ | Spawn spike | Create on the spot | Pre-pool |
62
+ | Collision stutter | Check pair-count explosion | Reduce pairs, simplify shape |
63
+
64
+ During development, you can inspect `this.game.loop.actualFps`; for release, turn off physics debug and dense FPS text (or keep only a DOM debug toggle).
@@ -0,0 +1,139 @@
1
+ # Engine: Arcade Physics and Object Pools
2
+
3
+ Gameplay values still belong to System / `config.json`; this file only covers Phaser physics APIs and common pitfalls.
4
+
5
+ Load this when modifying collisions, platforms, bullet pools, knockback, or one-way platforms.
6
+
7
+ ## World Config (Excerpt)
8
+
9
+ ```ts
10
+ physics: {
11
+ default: 'arcade',
12
+ arcade: {
13
+ gravity: { x: 0, y: 300 }, // Can be multiplied by config gravity_scale
14
+ debug: false, // Turn off for release
15
+ fps: 60,
16
+ overlapBias: 4,
17
+ tileBias: 16,
18
+ useTree: true, // Re-evaluate false only with extremely many dynamic bodies
19
+ },
20
+ }
21
+ ```
22
+
23
+ ## Body Types
24
+
25
+ - **Dynamic**: velocity, gravity, collision response (player, enemies, bullets).
26
+ - **Static**: unmoving platforms; call `refreshBody()` / group `refresh()` after changing scale/position.
27
+
28
+ ```ts
29
+ const player = this.physics.add.sprite(100, 100, 'player');
30
+ player.body.setCollideWorldBounds(true);
31
+ player.body.setSize(24, 40, true);
32
+ player.body.setOffset(4, 8);
33
+ player.body.setMaxVelocity(300, 400);
34
+ player.body.setDrag(100, 0);
35
+ ```
36
+
37
+ Circle body: `setCircle(radius, offsetX, offsetY)`. The visual mesh can be larger than the body; **do not** use an entire large image as the collision box.
38
+
39
+ ## Collider vs Overlap
40
+
41
+ ```ts
42
+ // Physical separation
43
+ this.physics.add.collider(player, platforms);
44
+ this.physics.add.collider(player, enemies, onHit, processCb, this);
45
+
46
+ // Detect overlap only (pickup, trigger)
47
+ this.physics.add.overlap(player, coins, onCollect, undefined, this);
48
+ ```
49
+
50
+ A `process` callback can return `false` to skip this collision (invulnerability frames, one-way platforms).
51
+
52
+ ### Grounded / Wall Contact
53
+
54
+ ```ts
55
+ if (player.body.blocked.down) { /* grounded */ }
56
+ if (player.body.touching.down) { /* standing on a body */ }
57
+ if (player.body.wasTouching.down && !player.body.touching.down) { /* just left the ground */ }
58
+ ```
59
+
60
+ ### World Bounds
61
+
62
+ ```ts
63
+ this.physics.world.setBounds(0, 0, mapWidth, mapHeight);
64
+ this.cameras.main.setBounds(0, 0, mapWidth, mapHeight);
65
+ this.cameras.main.startFollow(player, true, 0.08, 0.08);
66
+ ```
67
+
68
+ ## Object Pools (Required for High-Frequency Spawning)
69
+
70
+ ```ts
71
+ this.bullets = this.physics.add.group({
72
+ defaultKey: 'bullet',
73
+ maxSize: 100,
74
+ });
75
+
76
+ function fire(x: number, y: number, vx: number, vy: number) {
77
+ const b = this.bullets.get(x, y);
78
+ if (!b) return;
79
+ b.setActive(true).setVisible(true);
80
+ b.body.enable = true;
81
+ b.body.reset(x, y);
82
+ b.setVelocity(vx, vy);
83
+ }
84
+
85
+ function kill(b: Phaser.Physics.Arcade.Sprite) {
86
+ b.setActive(false).setVisible(false);
87
+ b.body.enable = false;
88
+ b.body.stop();
89
+ }
90
+ ```
91
+
92
+ It is forbidden to `new` / `destroy` bullets and particle carriers every frame on hot paths.
93
+
94
+ ## Common Patterns
95
+
96
+ ### Platform Jump
97
+
98
+ ```ts
99
+ if (jumpPressed && player.body.blocked.down) {
100
+ player.setVelocityY(-330); // Height uses config
101
+ }
102
+ ```
103
+
104
+ ### Acceleration Movement
105
+
106
+ ```ts
107
+ player.body.setMaxVelocity(maxSpeed);
108
+ player.body.setDrag(drag, 0);
109
+ player.body.setAccelerationX(left ? -accel : right ? accel : 0);
110
+ ```
111
+
112
+ ### One-Way Platform
113
+
114
+ ```ts
115
+ function oneWay(
116
+ player: Phaser.Physics.Arcade.Sprite,
117
+ platform: Phaser.Physics.Arcade.Sprite,
118
+ ) {
119
+ return (
120
+ player.body.velocity.y > 0 &&
121
+ player.body.bottom <= platform.body.top + 10
122
+ );
123
+ }
124
+ this.physics.add.collider(player, platforms, undefined, oneWay, this);
125
+ ```
126
+
127
+ ### Knockback
128
+
129
+ After changing velocity, System records invulnerability; Scene only plays feedback. The `setVelocity` direction is determined by relative position.
130
+
131
+ ## Layering with System
132
+
133
+ - In collision callbacks: hand the event to System **first** (damage, pickup), then modify the view (white flash, disable sprite).
134
+ - Do not scatter duplicate win/loss rules inside callbacks.
135
+ - `debug: true` is development-only; turn it off before release and screenshots.
136
+
137
+ ## Matter?
138
+
139
+ Only when Arcade AABB is insufficient (complex polygons, joints, ragdolls). Do not enable physics for menus/cards. For detailed requirements, consult the Phaser Matter docs; keep Arcade as the default path.