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.
Files changed (477) hide show
  1. package/README.md +2 -0
  2. package/dist/canvas-public/app.js +509 -5999
  3. package/dist/canvas-public/assets/presets/catalog.json +47 -0
  4. package/dist/canvas-public/assets/presets/tiles/A_01_CaoDi.png +0 -0
  5. package/dist/canvas-public/assets/presets/tiles/A_02_ShaMo.png +0 -0
  6. package/dist/canvas-public/assets/presets/tiles/A_03_TianKong.png +0 -0
  7. package/dist/canvas-public/assets/presets/tiles/A_04_ShuiBo.png +0 -0
  8. package/dist/canvas-public/assets/presets/tiles/A_05_HaiMian.png +0 -0
  9. package/dist/canvas-public/assets/presets/tiles/A_06_MuDiBan.png +0 -0
  10. package/dist/canvas-public/assets/presets/tiles/A_07_ShiZhuan.png +0 -0
  11. package/dist/canvas-public/assets/presets/tiles/A_08_AnRongYan.png +0 -0
  12. package/dist/canvas-public/assets/presets/tiles/A_09_QingTaiShi.png +0 -0
  13. package/dist/canvas-public/assets/presets/tiles/A_10_ShenHai.png +0 -0
  14. package/dist/canvas-public/assets/presets/tiles/A_11_HuiYanShi.png +0 -0
  15. package/dist/canvas-public/assets/presets/tiles/A_12_HongTu.png +0 -0
  16. package/dist/canvas-public/assets/presets/tiles/A_13_GengDi.png +0 -0
  17. package/dist/canvas-public/assets/presets/tiles/A_14_HuoShanYan.png +0 -0
  18. package/dist/canvas-public/assets/presets/tiles/A_15_NiTu.png +0 -0
  19. package/dist/canvas-public/assets/presets/tiles/A_16_HuangSha.png +0 -0
  20. package/dist/canvas-public/assets/presets/tiles/A_17_CongLin.png +0 -0
  21. package/dist/canvas-public/assets/presets/tiles/A_18_ZiYanShi.png +0 -0
  22. package/dist/canvas-public/assets/presets/tiles/A_19_MoGuTu.png +0 -0
  23. package/dist/canvas-public/assets/presets/tiles/A_20_HuaDian.png +0 -0
  24. package/dist/canvas-public/assets/presets/tiles/A_21_HaiLang.png +0 -0
  25. package/dist/canvas-public/assets/presets/tiles/A_22_GanTu.png +0 -0
  26. package/dist/canvas-public/assets/presets/tiles/A_23_QingTaiShiBan.png +0 -0
  27. package/dist/canvas-public/assets/presets/tiles/A_24_XingKong.png +0 -0
  28. package/dist/canvas-public/assets/presets/tiles/A_25_MoFaFuWen.png +0 -0
  29. package/dist/canvas-public/assets/presets/tiles/A_26_ShiTuYeDi.png +0 -0
  30. package/dist/canvas-public/assets/presets/tiles/A_27_LanZhuan.png +0 -0
  31. package/dist/canvas-public/assets/presets/tiles/A_28_HongZhuan.png +0 -0
  32. package/dist/canvas-public/assets/presets/tiles/A_29_YueQiu.png +0 -0
  33. package/dist/canvas-public/assets/presets/tiles/A_30_JinShuGe.png +0 -0
  34. package/dist/canvas-public/assets/presets/tiles/A_31_JinShuJingGai.png +0 -0
  35. package/dist/canvas-public/assets/presets/tiles/A_32_ShuZiChuang.png +0 -0
  36. package/dist/canvas-public/canvas/actions.js +144 -0
  37. package/dist/canvas-public/canvas/camera.js +28 -0
  38. package/dist/canvas-public/canvas/chrome.js +14 -0
  39. package/dist/canvas-public/canvas/data.js +123 -0
  40. package/dist/canvas-public/canvas/dependencies.js +19 -0
  41. package/dist/canvas-public/canvas/interactions.js +544 -0
  42. package/dist/canvas-public/canvas/panel-resize.js +5 -0
  43. package/dist/canvas-public/canvas/renderer.js +297 -0
  44. package/dist/canvas-public/canvas/selection.js +62 -0
  45. package/dist/canvas-public/canvas/serialization.js +118 -0
  46. package/dist/canvas-public/canvas/sync.js +202 -0
  47. package/dist/canvas-public/core/api.js +32 -0
  48. package/dist/canvas-public/core/feature-registry.js +29 -0
  49. package/dist/canvas-public/core/feature-state.js +228 -0
  50. package/dist/canvas-public/core/layout.js +133 -0
  51. package/dist/canvas-public/core/operations.js +38 -0
  52. package/dist/canvas-public/core/project.js +203 -0
  53. package/dist/canvas-public/core/state.js +27 -0
  54. package/dist/canvas-public/dialogs/context-menu.js +118 -0
  55. package/dist/canvas-public/elements/base.js +100 -0
  56. package/dist/canvas-public/elements/connections.js +105 -0
  57. package/dist/canvas-public/elements/drag.js +53 -0
  58. package/dist/canvas-public/elements/image.js +259 -0
  59. package/dist/canvas-public/elements/loading-recovery.js +5 -0
  60. package/dist/canvas-public/elements/loading.js +21 -0
  61. package/dist/canvas-public/elements/map.js +64 -0
  62. package/dist/canvas-public/elements/registry.js +58 -0
  63. package/dist/canvas-public/elements/replacement.js +78 -0
  64. package/dist/canvas-public/elements/resize.js +210 -0
  65. package/dist/canvas-public/elements/task-pipeline.js +235 -0
  66. package/dist/canvas-public/elements/types.js +21 -0
  67. package/dist/canvas-public/elements/ui.js +14 -0
  68. package/dist/canvas-public/elements/video.js +64 -0
  69. package/dist/canvas-public/features/assets/local-assets.js +72 -0
  70. package/dist/canvas-public/features/assets/official-assets.js +539 -0
  71. package/dist/canvas-public/features/editing/canvas-size.js +532 -0
  72. package/dist/canvas-public/features/editing/color-key.js +471 -0
  73. package/dist/canvas-public/features/editing/cutout.js +20 -0
  74. package/dist/canvas-public/features/editing/interactive-image-editing.js +982 -0
  75. package/dist/canvas-public/features/editing/layer-decomposition.js +45 -0
  76. package/dist/canvas-public/features/editing/manual-split.js +115 -0
  77. package/dist/canvas-public/features/editing/perfect-pixel.js +299 -0
  78. package/dist/canvas-public/features/editing/scroll-preview.js +130 -0
  79. package/dist/canvas-public/features/editing/scroll-seam-elimination.js +71 -0
  80. package/dist/canvas-public/features/editing/seam-elimination.js +46 -0
  81. package/dist/canvas-public/features/editing/smart-split.js +49 -0
  82. package/dist/canvas-public/features/editing/source-preview.js +43 -0
  83. package/dist/canvas-public/features/editing/video-cycle.js +49 -0
  84. package/dist/canvas-public/features/editing/video-frames.js +35 -0
  85. package/dist/canvas-public/features/frame-editor/frame-editing.js +755 -0
  86. package/dist/canvas-public/features/frame-editor/frame-model.js +63 -0
  87. package/dist/canvas-public/features/frame-editor/playback.js +83 -0
  88. package/dist/canvas-public/features/frame-editor/preview.js +151 -0
  89. package/dist/canvas-public/features/generation/animation.js +272 -0
  90. package/dist/canvas-public/features/generation/asset-batch.js +102 -0
  91. package/dist/canvas-public/features/generation/direction.js +163 -0
  92. package/dist/canvas-public/features/generation/fields.js +73 -0
  93. package/dist/canvas-public/features/generation/game-ui.js +64 -0
  94. package/dist/canvas-public/features/generation/image.js +96 -0
  95. package/dist/canvas-public/features/generation/scroll-image.js +157 -0
  96. package/dist/canvas-public/features/generation/seamless-tile.js +52 -0
  97. package/dist/canvas-public/features/generation/tile-transition-atlas.js +79 -0
  98. package/dist/canvas-public/features/generation/video.js +105 -0
  99. package/dist/canvas-public/features/map/creation.js +73 -0
  100. package/dist/canvas-public/features/map/tile-map-editor.js +2520 -0
  101. package/dist/canvas-public/features/registry.js +59 -0
  102. package/dist/canvas-public/index.html +84 -259
  103. package/dist/canvas-public/inspector/controls.js +49 -0
  104. package/dist/canvas-public/inspector/frame-preview.js +11 -0
  105. package/dist/canvas-public/inspector/inspector.js +190 -0
  106. package/dist/canvas-public/inspector/media-inspector.js +517 -0
  107. package/dist/canvas-public/inspector/media-preview.js +56 -0
  108. package/dist/canvas-public/inspector/number-stepper.js +96 -0
  109. package/dist/canvas-public/inspector/resize.js +88 -0
  110. package/dist/canvas-public/inspector/scroll-preview.js +11 -0
  111. package/dist/canvas-public/inspector/ui-inspector.js +14 -0
  112. package/dist/canvas-public/language/en-US.js +1059 -0
  113. package/dist/canvas-public/language/index.js +91 -0
  114. package/dist/canvas-public/language/zh-CN.js +1059 -0
  115. package/dist/canvas-public/map/export.js +10 -0
  116. package/dist/canvas-public/map/inspector.js +8 -0
  117. package/dist/canvas-public/map/model.js +409 -0
  118. package/dist/canvas-public/map/tile-map-editor.js +2 -0
  119. package/dist/canvas-public/media/metadata.js +183 -0
  120. package/dist/canvas-public/media/support.js +183 -0
  121. package/dist/canvas-public/styles/base.css +49 -0
  122. package/dist/canvas-public/styles/canvas.css +127 -0
  123. package/dist/canvas-public/styles/controls.css +203 -0
  124. package/dist/canvas-public/styles/dialogs.css +521 -0
  125. package/dist/canvas-public/styles/feature-form.css +409 -0
  126. package/dist/canvas-public/styles/inspector.css +441 -0
  127. package/dist/canvas-public/styles/layout.css +344 -0
  128. package/dist/canvas-public/styles/map.css +11 -0
  129. package/dist/canvas-public/styles/nodes.css +636 -0
  130. package/dist/canvas-public/styles.css +9 -2247
  131. package/dist/canvas-public/ui/controls.js +222 -0
  132. package/dist/canvas-public/ui/elements.js +9 -0
  133. package/dist/canvas-public/ui/feature-controller.js +296 -0
  134. package/dist/canvas-public/ui/feature-form.js +402 -0
  135. package/dist/canvas-public/ui/settings.js +84 -0
  136. package/dist/canvas-public/ui/toolbar.js +55 -0
  137. package/dist/canvas-public/vendor/pixi-tilemap.js +126 -0
  138. package/dist/canvas-public/vendor/pixi.min.js +2340 -0
  139. package/dist/canvas-public/workers/color-key-worker.js +289 -0
  140. package/dist/image-workers/perfect-pixel/perfect-pixel-core.js +441 -0
  141. package/dist/image-workers/perfect-pixel/perfect-pixel-worker.cjs +10 -0
  142. package/dist/index.js +46710 -12400
  143. package/dist/skills/en-US/evomeme-canvas/SKILL.md +52 -0
  144. package/dist/skills/en-US/evomeme-canvas/agents/openai.yaml +7 -0
  145. package/dist/skills/en-US/evomeme-cloud-fs/SKILL.md +203 -0
  146. package/dist/skills/en-US/evomeme-cloud-fs/agents/openai.yaml +7 -0
  147. package/dist/skills/en-US/evomeme-cover/SKILL.md +131 -0
  148. package/dist/skills/en-US/evomeme-cover/agents/openai.yaml +7 -0
  149. package/dist/skills/en-US/evomeme-game-maker/SKILL.md +288 -0
  150. package/dist/skills/en-US/evomeme-game-maker/agents/openai.yaml +4 -0
  151. package/dist/skills/en-US/evomeme-login/SKILL.md +97 -0
  152. package/dist/skills/en-US/evomeme-login/agents/openai.yaml +7 -0
  153. package/dist/skills/en-US/evomeme-mcp/SKILL.md +71 -0
  154. package/dist/skills/en-US/evomeme-mcp/agents/openai.yaml +7 -0
  155. package/dist/skills/en-US/evomeme-mcp/references/troubleshooting.md +55 -0
  156. package/dist/skills/en-US/evomeme-native-bridge-sdk/SKILL.md +286 -0
  157. package/dist/skills/en-US/evomeme-native-bridge-sdk/agents/openai.yaml +8 -0
  158. package/dist/skills/en-US/evomeme-tos-upload/SKILL.md +47 -0
  159. package/dist/skills/en-US/evomeme-tos-upload/agents/openai.yaml +5 -0
  160. package/dist/skills/en-US/evomeme-ui/SKILL.md +123 -0
  161. package/dist/skills/en-US/evomeme-ui/agents/openai.yaml +4 -0
  162. package/dist/skills/en-US/evomeme-ui/references/host-layout.md +69 -0
  163. package/dist/skills/en-US/game-art/SKILL.md +121 -0
  164. package/dist/skills/en-US/game-art/agents/openai.yaml +8 -0
  165. package/dist/skills/en-US/game-asset-align/SKILL.md +47 -0
  166. package/dist/skills/en-US/game-asset-align/agents/openai.yaml +8 -0
  167. package/dist/skills/en-US/game-asset-align/references/alignment-contract.md +61 -0
  168. package/dist/skills/en-US/game-asset-align/references/blender-scene-pipeline.md +35 -0
  169. package/dist/skills/en-US/game-asset-align/references/canonical-package.md +26 -0
  170. package/dist/skills/en-US/game-asset-align/references/engine-capabilities.md +14 -0
  171. package/dist/skills/en-US/game-asset-align/references/lightweight-review.md +34 -0
  172. package/dist/skills/en-US/game-asset-align/references/repair-policy.md +30 -0
  173. package/dist/skills/en-US/game-asset-align/references/tool-contract.md +69 -0
  174. package/dist/skills/en-US/game-asset-align/references/visual-review.md +26 -0
  175. package/dist/skills/en-US/game-asset-batch-generator/SKILL.md +117 -0
  176. package/dist/skills/en-US/game-asset-batch-generator/agents/openai.yaml +7 -0
  177. package/dist/skills/en-US/game-asset-image-generator/SKILL.md +86 -0
  178. package/dist/skills/en-US/game-asset-image-generator/agents/openai.yaml +7 -0
  179. package/dist/skills/en-US/game-asset-image-generator/references/background.md +34 -0
  180. package/dist/skills/en-US/game-asset-image-generator/references/static-game-assets.md +38 -0
  181. package/dist/skills/en-US/game-asset-mesh-generator/SKILL.md +35 -0
  182. package/dist/skills/en-US/game-asset-mesh-generator/agents/openai.yaml +7 -0
  183. package/dist/skills/en-US/game-asset-mesh-generator/references/animation-presets.md +313 -0
  184. package/dist/skills/en-US/game-asset-mesh-generator/references/generation-contracts.md +131 -0
  185. package/dist/skills/en-US/game-asset-mesh-generator/references/image-generator-workflows.md +65 -0
  186. package/dist/skills/en-US/game-asset-mesh-generator/references/postprocess-contracts.md +187 -0
  187. package/dist/skills/en-US/game-asset-mesh-generator/references/threejs-integration.md +113 -0
  188. package/dist/skills/en-US/game-asset-mesh-generator/references/tool-reference.md +67 -0
  189. package/dist/skills/en-US/game-audio/SKILL.md +121 -0
  190. package/dist/skills/en-US/game-audio/agents/openai.yaml +4 -0
  191. package/{skills → dist/skills/en-US}/game-audio/references/bgm-cdn.md +7 -11
  192. package/{skills → dist/skills/en-US}/game-audio/references/sfx-cdn.md +6 -4
  193. package/dist/skills/en-US/game-character-view-generator/SKILL.md +110 -0
  194. package/dist/skills/en-US/game-character-view-generator/agents/openai.yaml +7 -0
  195. package/dist/skills/en-US/game-demo/SKILL.md +103 -0
  196. package/dist/skills/en-US/game-demo/agents/openai.yaml +7 -0
  197. package/dist/skills/en-US/game-image-layer-decomposer/SKILL.md +99 -0
  198. package/dist/skills/en-US/game-image-layer-decomposer/agents/openai.yaml +7 -0
  199. package/dist/skills/en-US/game-image-splitter/SKILL.md +114 -0
  200. package/dist/skills/en-US/game-image-splitter/agents/openai.yaml +7 -0
  201. package/dist/skills/en-US/game-maker/SKILL.md +111 -0
  202. package/dist/skills/en-US/game-maker/agents/openai.yaml +4 -0
  203. package/dist/skills/en-US/game-perfect-pixel/SKILL.md +123 -0
  204. package/dist/skills/en-US/game-perfect-pixel/agents/openai.yaml +7 -0
  205. package/dist/skills/en-US/game-scroll-generator/SKILL.md +110 -0
  206. package/dist/skills/en-US/game-scroll-generator/agents/openai.yaml +7 -0
  207. package/dist/skills/en-US/game-test/SKILL.md +58 -0
  208. package/dist/skills/en-US/game-test/agents/openai.yaml +7 -0
  209. package/dist/skills/en-US/game-tile-generator/SKILL.md +152 -0
  210. package/dist/skills/en-US/game-tile-generator/agents/openai.yaml +7 -0
  211. package/dist/skills/en-US/game-ui/SKILL.md +177 -0
  212. package/dist/skills/en-US/game-ui/agents/openai.yaml +4 -0
  213. package/dist/skills/en-US/game-ui-generator/SKILL.md +82 -0
  214. package/dist/skills/en-US/game-ui-generator/agents/openai.yaml +7 -0
  215. package/dist/skills/en-US/game-ui-generator/references/component-patterns.md +65 -0
  216. package/dist/skills/en-US/game-ui-generator/references/runtime-integration.md +45 -0
  217. package/dist/skills/en-US/game-video-cycle/SKILL.md +98 -0
  218. package/dist/skills/en-US/game-video-cycle/agents/openai.yaml +7 -0
  219. package/dist/skills/en-US/game-video-generator/SKILL.md +78 -0
  220. package/dist/skills/en-US/game-video-generator/agents/openai.yaml +7 -0
  221. package/dist/skills/en-US/godot-3d-game/SKILL.md +41 -0
  222. package/dist/skills/en-US/godot-3d-game/agents/openai.yaml +8 -0
  223. package/dist/skills/en-US/godot-3d-game/references/alignment-gates.md +26 -0
  224. package/dist/skills/en-US/godot-3d-game/references/appearance-alignment.md +54 -0
  225. package/dist/skills/en-US/godot-3d-game/references/build-and-qa.md +22 -0
  226. package/dist/skills/en-US/godot-3d-game/references/canonical-asset-runtime.md +27 -0
  227. package/dist/skills/en-US/godot-3d-game/references/import-and-wrapper-scenes.md +20 -0
  228. package/dist/skills/en-US/godot-3d-game/references/physics-colliders.md +13 -0
  229. package/dist/skills/en-US/godot-3d-game/references/project-structure.md +22 -0
  230. package/dist/skills/en-US/godot-3d-game/references/skeleton-animation.md +16 -0
  231. package/dist/skills/en-US/phaser-2d-game/SKILL.md +127 -0
  232. package/dist/skills/en-US/phaser-2d-game/agents/openai.yaml +8 -0
  233. package/dist/skills/en-US/phaser-2d-game/references/engine-performance.md +64 -0
  234. package/dist/skills/en-US/phaser-2d-game/references/engine-physics.md +139 -0
  235. package/dist/skills/en-US/phaser-2d-game/references/engine-runtime.md +129 -0
  236. package/dist/skills/en-US/phaser-2d-game/references/engine-spritesheets.md +99 -0
  237. package/dist/skills/en-US/phaser-2d-game/references/engine-tilemaps.md +80 -0
  238. package/dist/skills/en-US/phaser-2d-game/references/file-structure.md +94 -0
  239. package/dist/skills/en-US/phaser-2d-graphics-builder/SKILL.md +68 -0
  240. package/dist/skills/en-US/phaser-2d-graphics-builder/agents/openai.yaml +7 -0
  241. package/dist/skills/en-US/threejs-3d-game/SKILL.md +117 -0
  242. package/dist/skills/en-US/threejs-3d-game/agents/openai.yaml +7 -0
  243. package/dist/skills/en-US/threejs-3d-game/references/engine-asset-pipeline.md +155 -0
  244. package/dist/skills/en-US/threejs-3d-game/references/engine-audio.md +70 -0
  245. package/dist/skills/en-US/threejs-3d-game/references/engine-input-camera.md +84 -0
  246. package/dist/skills/en-US/threejs-3d-game/references/engine-performance.md +96 -0
  247. package/dist/skills/en-US/threejs-3d-game/references/engine-physics.md +142 -0
  248. package/dist/skills/en-US/threejs-3d-game/references/engine-runtime.md +199 -0
  249. package/dist/skills/en-US/threejs-3d-game/references/file-structure.md +353 -0
  250. package/dist/skills/en-US/threejs-aaa-graphics-builder/SKILL.md +62 -0
  251. package/dist/skills/en-US/threejs-aaa-graphics-builder/agents/openai.yaml +7 -0
  252. package/{skills → dist/skills/zh-CN}/evomeme-cloud-fs/SKILL.md +33 -6
  253. package/{skills → dist/skills/zh-CN}/evomeme-cover/SKILL.md +7 -8
  254. package/{skills → dist/skills/zh-CN}/evomeme-game-maker/SKILL.md +91 -88
  255. package/{skills → dist/skills/zh-CN}/evomeme-login/SKILL.md +5 -0
  256. package/dist/skills/zh-CN/evomeme-mcp/SKILL.md +71 -0
  257. package/dist/skills/zh-CN/evomeme-mcp/agents/openai.yaml +7 -0
  258. package/dist/skills/zh-CN/evomeme-mcp/references/troubleshooting.md +55 -0
  259. package/{skills → dist/skills/zh-CN}/evomeme-tos-upload/SKILL.md +6 -5
  260. package/dist/skills/zh-CN/evomeme-ui/SKILL.md +123 -0
  261. package/dist/skills/zh-CN/evomeme-ui/agents/openai.yaml +4 -0
  262. package/dist/skills/zh-CN/evomeme-ui/references/host-layout.md +69 -0
  263. package/dist/skills/zh-CN/game-asset-align/SKILL.md +47 -0
  264. package/dist/skills/zh-CN/game-asset-align/agents/openai.yaml +8 -0
  265. package/dist/skills/zh-CN/game-asset-align/references/alignment-contract.md +61 -0
  266. package/dist/skills/zh-CN/game-asset-align/references/blender-scene-pipeline.md +35 -0
  267. package/dist/skills/zh-CN/game-asset-align/references/canonical-package.md +26 -0
  268. package/dist/skills/zh-CN/game-asset-align/references/engine-capabilities.md +14 -0
  269. package/dist/skills/zh-CN/game-asset-align/references/lightweight-review.md +34 -0
  270. package/dist/skills/zh-CN/game-asset-align/references/repair-policy.md +30 -0
  271. package/dist/skills/zh-CN/game-asset-align/references/tool-contract.md +69 -0
  272. package/dist/skills/zh-CN/game-asset-align/references/visual-review.md +26 -0
  273. package/dist/skills/zh-CN/game-asset-batch-generator/SKILL.md +117 -0
  274. package/dist/skills/zh-CN/game-asset-batch-generator/agents/openai.yaml +7 -0
  275. package/dist/skills/zh-CN/game-asset-image-generator/SKILL.md +86 -0
  276. package/{skills → dist/skills/zh-CN}/game-asset-image-generator/references/background.md +3 -1
  277. package/{skills → dist/skills/zh-CN}/game-asset-image-generator/references/static-game-assets.md +2 -2
  278. package/dist/skills/zh-CN/game-asset-mesh-generator/SKILL.md +35 -0
  279. package/dist/skills/zh-CN/game-asset-mesh-generator/agents/openai.yaml +7 -0
  280. package/dist/skills/zh-CN/game-asset-mesh-generator/references/animation-presets.md +313 -0
  281. package/dist/skills/zh-CN/game-asset-mesh-generator/references/generation-contracts.md +131 -0
  282. package/dist/skills/zh-CN/game-asset-mesh-generator/references/image-generator-workflows.md +65 -0
  283. package/dist/skills/zh-CN/game-asset-mesh-generator/references/postprocess-contracts.md +187 -0
  284. package/dist/skills/zh-CN/game-asset-mesh-generator/references/threejs-integration.md +113 -0
  285. package/dist/skills/zh-CN/game-asset-mesh-generator/references/tool-reference.md +67 -0
  286. package/dist/skills/zh-CN/game-audio/SKILL.md +121 -0
  287. package/dist/skills/zh-CN/game-audio/agents/openai.yaml +4 -0
  288. package/dist/skills/zh-CN/game-audio/references/bgm-cdn.md +123 -0
  289. package/dist/skills/zh-CN/game-audio/references/sfx-cdn.md +79 -0
  290. package/dist/skills/zh-CN/game-character-view-generator/SKILL.md +110 -0
  291. package/dist/skills/zh-CN/game-character-view-generator/agents/openai.yaml +7 -0
  292. package/dist/skills/zh-CN/game-image-layer-decomposer/SKILL.md +99 -0
  293. package/dist/skills/zh-CN/game-image-layer-decomposer/agents/openai.yaml +7 -0
  294. package/dist/skills/zh-CN/game-image-splitter/SKILL.md +114 -0
  295. package/dist/skills/zh-CN/game-image-splitter/agents/openai.yaml +7 -0
  296. package/dist/skills/zh-CN/game-perfect-pixel/SKILL.md +123 -0
  297. package/dist/skills/zh-CN/game-perfect-pixel/agents/openai.yaml +7 -0
  298. package/dist/skills/zh-CN/game-scroll-generator/SKILL.md +110 -0
  299. package/dist/skills/zh-CN/game-scroll-generator/agents/openai.yaml +7 -0
  300. package/dist/skills/zh-CN/game-test/references/checklists/playtest-qa.md +12 -0
  301. package/dist/skills/zh-CN/game-tile-generator/SKILL.md +151 -0
  302. package/dist/skills/zh-CN/game-tile-generator/agents/openai.yaml +7 -0
  303. package/{skills → dist/skills/zh-CN}/game-ui/SKILL.md +9 -1
  304. package/dist/skills/zh-CN/game-ui/references/checklists/game-ui-quality.md +14 -0
  305. package/dist/skills/zh-CN/game-ui/references/checklists/hud-readability.md +12 -0
  306. package/dist/skills/zh-CN/game-ui/references/checklists/mobile-input.md +12 -0
  307. package/dist/skills/zh-CN/game-ui/references/checklists/responsive-ui-fit.md +12 -0
  308. package/dist/skills/zh-CN/game-ui/references/ui-patterns.md +140 -0
  309. package/dist/skills/zh-CN/game-ui/references/ui-prompt-templates.md +63 -0
  310. package/dist/skills/zh-CN/game-ui-generator/SKILL.md +82 -0
  311. package/dist/skills/zh-CN/game-ui-generator/agents/openai.yaml +7 -0
  312. package/dist/skills/zh-CN/game-ui-generator/references/component-patterns.md +65 -0
  313. package/dist/skills/zh-CN/game-ui-generator/references/runtime-integration.md +45 -0
  314. package/dist/skills/zh-CN/game-video-cycle/SKILL.md +98 -0
  315. package/dist/skills/zh-CN/game-video-cycle/agents/openai.yaml +7 -0
  316. package/dist/skills/zh-CN/game-video-generator/SKILL.md +78 -0
  317. package/dist/skills/zh-CN/game-video-generator/agents/openai.yaml +7 -0
  318. package/dist/skills/zh-CN/godot-3d-game/SKILL.md +41 -0
  319. package/dist/skills/zh-CN/godot-3d-game/agents/openai.yaml +8 -0
  320. package/dist/skills/zh-CN/godot-3d-game/references/alignment-gates.md +26 -0
  321. package/dist/skills/zh-CN/godot-3d-game/references/appearance-alignment.md +54 -0
  322. package/dist/skills/zh-CN/godot-3d-game/references/build-and-qa.md +22 -0
  323. package/dist/skills/zh-CN/godot-3d-game/references/canonical-asset-runtime.md +27 -0
  324. package/dist/skills/zh-CN/godot-3d-game/references/import-and-wrapper-scenes.md +20 -0
  325. package/dist/skills/zh-CN/godot-3d-game/references/physics-colliders.md +13 -0
  326. package/dist/skills/zh-CN/godot-3d-game/references/project-structure.md +22 -0
  327. package/dist/skills/zh-CN/godot-3d-game/references/skeleton-animation.md +16 -0
  328. package/dist/skills/zh-CN/phaser-2d-graphics-builder/assets/scorecard-anchors/scene-1.jpeg +0 -0
  329. package/dist/skills/zh-CN/phaser-2d-graphics-builder/assets/scorecard-anchors/scene-2.jpeg +0 -0
  330. package/dist/skills/zh-CN/phaser-2d-graphics-builder/assets/scorecard-anchors/scene-3.jpg +0 -0
  331. package/dist/skills/zh-CN/phaser-2d-graphics-builder/references/checklists/compose-quality.md +10 -0
  332. package/dist/skills/zh-CN/phaser-2d-graphics-builder/references/checklists/performance-safe-visual-detail.md +9 -0
  333. package/dist/skills/zh-CN/phaser-2d-graphics-builder/references/checklists/premium-game-quality-gate.md +15 -0
  334. package/dist/skills/zh-CN/phaser-2d-graphics-builder/references/checklists/sprite-quality.md +10 -0
  335. package/dist/skills/zh-CN/phaser-2d-graphics-builder/references/checklists/technical-art-quality.md +9 -0
  336. package/dist/skills/zh-CN/phaser-2d-graphics-builder/references/checklists/visual-scorecard.md +9 -0
  337. package/dist/skills/zh-CN/phaser-2d-graphics-builder/references/compose-recipes.md +71 -0
  338. package/dist/skills/zh-CN/phaser-2d-graphics-builder/references/graphics-prompt-templates.md +33 -0
  339. package/dist/skills/zh-CN/phaser-2d-graphics-builder/references/implementation-blueprint.md +82 -0
  340. package/dist/skills/zh-CN/phaser-2d-graphics-builder/references/sprite-recipes.md +90 -0
  341. package/dist/skills/zh-CN/phaser-2d-graphics-builder/references/technical-art.md +67 -0
  342. package/dist/skills/zh-CN/phaser-2d-graphics-builder/references/vfx-recipes.md +67 -0
  343. package/dist/skills/zh-CN/phaser-2d-graphics-builder/references/visual-scorecard.md +129 -0
  344. package/{skills → dist/skills/zh-CN}/threejs-3d-game/SKILL.md +6 -2
  345. package/dist/skills/zh-CN/threejs-3d-game/references/engine-asset-pipeline.md +155 -0
  346. package/{skills → dist/skills/zh-CN}/threejs-aaa-graphics-builder/SKILL.md +6 -6
  347. package/dist/skills/zh-CN/threejs-aaa-graphics-builder/assets/scorecard-anchors/scene-1.jpg +0 -0
  348. package/dist/skills/zh-CN/threejs-aaa-graphics-builder/assets/scorecard-anchors/scene-2.jpg +0 -0
  349. package/dist/skills/zh-CN/threejs-aaa-graphics-builder/assets/scorecard-anchors/scene-3.jpg +0 -0
  350. package/dist/skills/zh-CN/threejs-aaa-graphics-builder/references/checklists/aaa-game-quality-gate.md +23 -0
  351. package/dist/skills/zh-CN/threejs-aaa-graphics-builder/references/checklists/aaa-visual-scorecard.md +19 -0
  352. package/dist/skills/zh-CN/threejs-aaa-graphics-builder/references/checklists/material-lighting-quality.md +14 -0
  353. package/dist/skills/zh-CN/threejs-aaa-graphics-builder/references/checklists/performance-safe-visual-detail.md +14 -0
  354. package/dist/skills/zh-CN/threejs-aaa-graphics-builder/references/checklists/procedural-model-quality.md +15 -0
  355. package/dist/skills/zh-CN/threejs-aaa-graphics-builder/references/checklists/technical-art-quality.md +17 -0
  356. package/dist/skills/zh-CN/threejs-aaa-graphics-builder/references/graphics-prompt-templates.md +236 -0
  357. package/dist/skills/zh-CN/threejs-aaa-graphics-builder/references/implementation-blueprint.md +161 -0
  358. package/dist/skills/zh-CN/threejs-aaa-graphics-builder/references/model-recipes.md +146 -0
  359. package/dist/skills/zh-CN/threejs-aaa-graphics-builder/references/render-recipes.md +90 -0
  360. package/dist/skills/zh-CN/threejs-aaa-graphics-builder/references/shader-cookbook.md +292 -0
  361. package/dist/skills/zh-CN/threejs-aaa-graphics-builder/references/technical-art.md +167 -0
  362. package/dist/skills/zh-CN/threejs-aaa-graphics-builder/references/visual-scorecard.md +147 -0
  363. package/dist/stage-blender/bake_materials.py +102 -0
  364. package/dist/stage-blender/export_scene.py +275 -0
  365. package/dist/stage-blender/preview_camera.py +90 -0
  366. package/dist/stage-blender/repair_mesh.py +112 -0
  367. package/dist/stage-public/app.js +759 -0
  368. package/dist/stage-public/baked/bakePilot.js +44 -0
  369. package/dist/stage-public/baked/bakedScene.js +129 -0
  370. package/dist/stage-public/baked/sceneAppearance.js +225 -0
  371. package/dist/stage-public/baked/sceneCamera.js +45 -0
  372. package/dist/stage-public/comparison-contract.js +28 -0
  373. package/dist/stage-public/delivery.html +4 -0
  374. package/dist/stage-public/delivery.js +17 -0
  375. package/dist/stage-public/godot/appearance.gd +170 -0
  376. package/dist/stage-public/godot/preview.gd +79 -0
  377. package/dist/stage-public/index.html +141 -0
  378. package/dist/stage-public/review-app.js +289 -0
  379. package/dist/stage-public/review-runtime.js +63 -0
  380. package/dist/stage-public/review.css +24 -0
  381. package/dist/stage-public/review.html +47 -0
  382. package/dist/stage-public/scene-runtime.js +212 -0
  383. package/dist/stage-public/sceneContractRuntime.js +235 -0
  384. package/dist/stage-public/styles.css +328 -0
  385. package/dist/stage-public/three-appearance.js +104 -0
  386. package/dist/stage-public/vendor/three170/LICENSE +21 -0
  387. package/dist/stage-public/vendor/three170/build/three.module.js +54571 -0
  388. package/dist/stage-public/vendor/three170/examples/jsm/controls/OrbitControls.js +1523 -0
  389. package/dist/stage-public/vendor/three170/examples/jsm/environments/RoomEnvironment.js +144 -0
  390. package/dist/stage-public/vendor/three170/examples/jsm/libs/fflate.module.js +2672 -0
  391. package/dist/stage-public/vendor/three170/examples/jsm/loaders/EXRLoader.js +2563 -0
  392. package/dist/stage-public/vendor/three170/examples/jsm/loaders/GLTFLoader.js +4727 -0
  393. package/dist/stage-public/vendor/three170/examples/jsm/utils/BufferGeometryUtils.js +1373 -0
  394. package/dist/tile-transition-mask.svg +40 -0
  395. package/package.json +24 -8
  396. package/dist/canvas-public/cycle-detect.js +0 -166
  397. package/dist/canvas-public/smart-split.js +0 -185
  398. package/skills/game-asset-image-generator/SKILL.md +0 -104
  399. package/skills/game-audio/SKILL.md +0 -82
  400. package/skills/game-audio/agents/openai.yaml +0 -4
  401. package/skills/threejs-3d-game/references/engine-asset-pipeline.md +0 -116
  402. /package/{skills → dist/skills/en-US}/game-test/references/checklists/playtest-qa.md +0 -0
  403. /package/{skills → dist/skills/en-US}/game-ui/references/checklists/game-ui-quality.md +0 -0
  404. /package/{skills → dist/skills/en-US}/game-ui/references/checklists/hud-readability.md +0 -0
  405. /package/{skills → dist/skills/en-US}/game-ui/references/checklists/mobile-input.md +0 -0
  406. /package/{skills → dist/skills/en-US}/game-ui/references/checklists/responsive-ui-fit.md +0 -0
  407. /package/{skills → dist/skills/en-US}/game-ui/references/ui-patterns.md +0 -0
  408. /package/{skills → dist/skills/en-US}/game-ui/references/ui-prompt-templates.md +0 -0
  409. /package/{skills → dist/skills/en-US}/phaser-2d-graphics-builder/assets/scorecard-anchors/scene-1.jpeg +0 -0
  410. /package/{skills → dist/skills/en-US}/phaser-2d-graphics-builder/assets/scorecard-anchors/scene-2.jpeg +0 -0
  411. /package/{skills → dist/skills/en-US}/phaser-2d-graphics-builder/assets/scorecard-anchors/scene-3.jpg +0 -0
  412. /package/{skills → dist/skills/en-US}/phaser-2d-graphics-builder/references/checklists/compose-quality.md +0 -0
  413. /package/{skills → dist/skills/en-US}/phaser-2d-graphics-builder/references/checklists/performance-safe-visual-detail.md +0 -0
  414. /package/{skills → dist/skills/en-US}/phaser-2d-graphics-builder/references/checklists/premium-game-quality-gate.md +0 -0
  415. /package/{skills → dist/skills/en-US}/phaser-2d-graphics-builder/references/checklists/sprite-quality.md +0 -0
  416. /package/{skills → dist/skills/en-US}/phaser-2d-graphics-builder/references/checklists/technical-art-quality.md +0 -0
  417. /package/{skills → dist/skills/en-US}/phaser-2d-graphics-builder/references/checklists/visual-scorecard.md +0 -0
  418. /package/{skills → dist/skills/en-US}/phaser-2d-graphics-builder/references/compose-recipes.md +0 -0
  419. /package/{skills → dist/skills/en-US}/phaser-2d-graphics-builder/references/graphics-prompt-templates.md +0 -0
  420. /package/{skills → dist/skills/en-US}/phaser-2d-graphics-builder/references/implementation-blueprint.md +0 -0
  421. /package/{skills → dist/skills/en-US}/phaser-2d-graphics-builder/references/sprite-recipes.md +0 -0
  422. /package/{skills → dist/skills/en-US}/phaser-2d-graphics-builder/references/technical-art.md +0 -0
  423. /package/{skills → dist/skills/en-US}/phaser-2d-graphics-builder/references/vfx-recipes.md +0 -0
  424. /package/{skills → dist/skills/en-US}/phaser-2d-graphics-builder/references/visual-scorecard.md +0 -0
  425. /package/{skills → dist/skills/en-US}/threejs-aaa-graphics-builder/assets/scorecard-anchors/scene-1.jpg +0 -0
  426. /package/{skills → dist/skills/en-US}/threejs-aaa-graphics-builder/assets/scorecard-anchors/scene-2.jpg +0 -0
  427. /package/{skills → dist/skills/en-US}/threejs-aaa-graphics-builder/assets/scorecard-anchors/scene-3.jpg +0 -0
  428. /package/{skills → dist/skills/en-US}/threejs-aaa-graphics-builder/references/checklists/aaa-game-quality-gate.md +0 -0
  429. /package/{skills → dist/skills/en-US}/threejs-aaa-graphics-builder/references/checklists/aaa-visual-scorecard.md +0 -0
  430. /package/{skills → dist/skills/en-US}/threejs-aaa-graphics-builder/references/checklists/material-lighting-quality.md +0 -0
  431. /package/{skills → dist/skills/en-US}/threejs-aaa-graphics-builder/references/checklists/performance-safe-visual-detail.md +0 -0
  432. /package/{skills → dist/skills/en-US}/threejs-aaa-graphics-builder/references/checklists/procedural-model-quality.md +0 -0
  433. /package/{skills → dist/skills/en-US}/threejs-aaa-graphics-builder/references/checklists/technical-art-quality.md +0 -0
  434. /package/{skills → dist/skills/en-US}/threejs-aaa-graphics-builder/references/graphics-prompt-templates.md +0 -0
  435. /package/{skills → dist/skills/en-US}/threejs-aaa-graphics-builder/references/implementation-blueprint.md +0 -0
  436. /package/{skills → dist/skills/en-US}/threejs-aaa-graphics-builder/references/model-recipes.md +0 -0
  437. /package/{skills → dist/skills/en-US}/threejs-aaa-graphics-builder/references/render-recipes.md +0 -0
  438. /package/{skills → dist/skills/en-US}/threejs-aaa-graphics-builder/references/shader-cookbook.md +0 -0
  439. /package/{skills → dist/skills/en-US}/threejs-aaa-graphics-builder/references/technical-art.md +0 -0
  440. /package/{skills → dist/skills/en-US}/threejs-aaa-graphics-builder/references/visual-scorecard.md +0 -0
  441. /package/{skills → dist/skills/zh-CN}/evomeme-canvas/SKILL.md +0 -0
  442. /package/{skills → dist/skills/zh-CN}/evomeme-canvas/agents/openai.yaml +0 -0
  443. /package/{skills → dist/skills/zh-CN}/evomeme-cloud-fs/agents/openai.yaml +0 -0
  444. /package/{skills → dist/skills/zh-CN}/evomeme-cover/agents/openai.yaml +0 -0
  445. /package/{skills → dist/skills/zh-CN}/evomeme-game-maker/agents/openai.yaml +0 -0
  446. /package/{skills → dist/skills/zh-CN}/evomeme-login/agents/openai.yaml +0 -0
  447. /package/{skills → dist/skills/zh-CN}/evomeme-native-bridge-sdk/SKILL.md +0 -0
  448. /package/{skills → dist/skills/zh-CN}/evomeme-native-bridge-sdk/agents/openai.yaml +0 -0
  449. /package/{skills → dist/skills/zh-CN}/evomeme-tos-upload/agents/openai.yaml +0 -0
  450. /package/{skills → dist/skills/zh-CN}/game-art/SKILL.md +0 -0
  451. /package/{skills → dist/skills/zh-CN}/game-art/agents/openai.yaml +0 -0
  452. /package/{skills → dist/skills/zh-CN}/game-asset-image-generator/agents/openai.yaml +0 -0
  453. /package/{skills → dist/skills/zh-CN}/game-demo/SKILL.md +0 -0
  454. /package/{skills → dist/skills/zh-CN}/game-demo/agents/openai.yaml +0 -0
  455. /package/{skills → dist/skills/zh-CN}/game-maker/SKILL.md +0 -0
  456. /package/{skills → dist/skills/zh-CN}/game-maker/agents/openai.yaml +0 -0
  457. /package/{skills → dist/skills/zh-CN}/game-test/SKILL.md +0 -0
  458. /package/{skills → dist/skills/zh-CN}/game-test/agents/openai.yaml +0 -0
  459. /package/{skills → dist/skills/zh-CN}/game-ui/agents/openai.yaml +0 -0
  460. /package/{skills → dist/skills/zh-CN}/phaser-2d-game/SKILL.md +0 -0
  461. /package/{skills → dist/skills/zh-CN}/phaser-2d-game/agents/openai.yaml +0 -0
  462. /package/{skills → dist/skills/zh-CN}/phaser-2d-game/references/engine-performance.md +0 -0
  463. /package/{skills → dist/skills/zh-CN}/phaser-2d-game/references/engine-physics.md +0 -0
  464. /package/{skills → dist/skills/zh-CN}/phaser-2d-game/references/engine-runtime.md +0 -0
  465. /package/{skills → dist/skills/zh-CN}/phaser-2d-game/references/engine-spritesheets.md +0 -0
  466. /package/{skills → dist/skills/zh-CN}/phaser-2d-game/references/engine-tilemaps.md +0 -0
  467. /package/{skills → dist/skills/zh-CN}/phaser-2d-game/references/file-structure.md +0 -0
  468. /package/{skills → dist/skills/zh-CN}/phaser-2d-graphics-builder/SKILL.md +0 -0
  469. /package/{skills → dist/skills/zh-CN}/phaser-2d-graphics-builder/agents/openai.yaml +0 -0
  470. /package/{skills → dist/skills/zh-CN}/threejs-3d-game/agents/openai.yaml +0 -0
  471. /package/{skills → dist/skills/zh-CN}/threejs-3d-game/references/engine-audio.md +0 -0
  472. /package/{skills → dist/skills/zh-CN}/threejs-3d-game/references/engine-input-camera.md +0 -0
  473. /package/{skills → dist/skills/zh-CN}/threejs-3d-game/references/engine-performance.md +0 -0
  474. /package/{skills → dist/skills/zh-CN}/threejs-3d-game/references/engine-physics.md +0 -0
  475. /package/{skills → dist/skills/zh-CN}/threejs-3d-game/references/engine-runtime.md +0 -0
  476. /package/{skills → dist/skills/zh-CN}/threejs-3d-game/references/file-structure.md +0 -0
  477. /package/{skills → dist/skills/zh-CN}/threejs-aaa-graphics-builder/agents/openai.yaml +0 -0
@@ -0,0 +1,40 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg xmlns="http://www.w3.org/2000/svg" width="1024" height="1024" viewBox="0 0 8 8" shape-rendering="geometricPrecision">
3
+ <title>Two-terrain 4x4 transition mask</title>
4
+ <desc>White is terrain 0 and black is terrain 1. Every 2x2 logical region forms one tile. Rounded transitions begin halfway through a logical half-tile and use an exact quarter-circle with radius 0.5.</desc>
5
+ <defs>
6
+ <mask id="terrain-one" maskUnits="userSpaceOnUse" x="0" y="0" width="8" height="8">
7
+ <rect width="8" height="8" fill="black"/>
8
+ <!-- 00011000 / 10011111 / 10011111 / 01111110 / 01111110 / 00000110 / 00000110 / 00011000 -->
9
+ <g fill="white">
10
+ <rect x="3" y="0" width="2" height="1"/><rect x="0" y="1" width="1" height="1"/>
11
+ <rect x="3" y="1" width="5" height="1"/><rect x="0" y="2" width="1" height="1"/>
12
+ <rect x="3" y="2" width="5" height="1"/><rect x="1" y="3" width="6" height="1"/>
13
+ <rect x="1" y="4" width="6" height="1"/><rect x="5" y="5" width="2" height="1"/>
14
+ <rect x="5" y="6" width="2" height="1"/><rect x="3" y="7" width="2" height="1"/>
15
+ </g>
16
+ <g fill="black">
17
+ <rect x="0.5" y="1" width="0.5" height="0.5"/><rect x="0.5" y="2.5" width="0.5" height="0.5"/>
18
+ <rect x="1" y="3" width="0.5" height="0.5"/><rect x="1" y="4.5" width="0.5" height="0.5"/>
19
+ <rect x="3" y="7" width="0.5" height="0.5"/><rect x="5" y="6.5" width="0.5" height="0.5"/>
20
+ <rect x="4.5" y="7" width="0.5" height="0.5"/><rect x="6.5" y="6.5" width="0.5" height="0.5"/>
21
+ </g>
22
+ <g fill="white">
23
+ <circle cx="0.5" cy="1.5" r="0.5"/><circle cx="0.5" cy="2.5" r="0.5"/>
24
+ <circle cx="1.5" cy="3.5" r="0.5"/><circle cx="1.5" cy="4.5" r="0.5"/>
25
+ <circle cx="3.5" cy="7.5" r="0.5"/><circle cx="5.5" cy="6.5" r="0.5"/>
26
+ <circle cx="4.5" cy="7.5" r="0.5"/><circle cx="6.5" cy="6.5" r="0.5"/>
27
+ </g>
28
+ <g fill="white">
29
+ <rect x="5" y="0.5" width="0.5" height="0.5"/><rect x="2.5" y="2.5" width="0.5" height="0.5"/>
30
+ <rect x="7" y="3" width="0.5" height="0.5"/><rect x="4.5" y="5" width="0.5" height="0.5"/>
31
+ </g>
32
+ <g fill="black">
33
+ <circle cx="5.5" cy="0.5" r="0.5"/><circle cx="2.5" cy="2.5" r="0.5"/>
34
+ <circle cx="7.5" cy="3.5" r="0.5"/><circle cx="4.5" cy="5.5" r="0.5"/>
35
+ </g>
36
+ </mask>
37
+ </defs>
38
+ <rect width="8" height="8" fill="white"/>
39
+ <rect width="8" height="8" fill="black" mask="url(#terrain-one)"/>
40
+ </svg>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "evomeme",
3
- "version": "0.1.9",
3
+ "version": "0.1.10-beta.13",
4
4
  "type": "module",
5
5
  "description": "evomemeplugin_client - local stdio MCP server. Install: npx -y evomeme@latest install --ide cursor. Init: npx -y evomeme@latest init.",
6
6
  "main": "dist/index.js",
@@ -9,9 +9,13 @@
9
9
  },
10
10
  "files": [
11
11
  "dist/index.js",
12
+ "dist/tile-transition-mask.svg",
13
+ "dist/image-workers",
12
14
  "dist/canvas-public",
15
+ "dist/stage-public",
16
+ "dist/stage-blender",
13
17
  "bin/evomeme",
14
- "skills"
18
+ "dist/skills"
15
19
  ],
16
20
  "engines": {
17
21
  "node": ">=18.14.1"
@@ -20,21 +24,28 @@
20
24
  "version:sync": "node scripts/sync-version.mjs",
21
25
  "prepare:prod": "node scripts/prepare-channel.mjs --channel prod",
22
26
  "prepare:dev": "node scripts/prepare-channel.mjs --channel dev",
23
- "prebuild": "npm run version:sync",
27
+ "skills:render": "node scripts/render-skills.mjs",
28
+ "skills:validate": "npm run skills:render && node scripts/validate-skills.mjs --skills-dir dist/skills",
29
+ "errors:check": "node ../shared/errors/sync.mjs --check",
30
+ "prebuild": "npm run errors:check && npm run version:sync",
24
31
  "build": "node scripts/bundle.mjs",
25
32
  "start": "node bin/evomeme",
26
33
  "dev": "tsx src/index.ts",
27
34
  "canvas:dev": "tsx watch src/index.ts canvas --no-open",
35
+ "stage:dev": "tsx watch src/index.ts stage --no-open",
28
36
  "mcp:list": "node scripts/call-mcp.mjs --list",
29
37
  "mcp:call": "node scripts/call-mcp.mjs",
30
38
  "mcp:image:demo": "node scripts/call-mcp.mjs --demo-image",
31
39
  "typecheck": "tsc -p tsconfig.json --noEmit",
32
40
  "test": "jest",
33
- "prepublishOnly": "npm run build",
34
- "pack:local": "npm run prepare:prod && npm run build && npm pack",
35
- "pack:dev": "npm run prepare:dev && npm run build && npm pack && npm run prepare:prod",
36
- "publish:prod": "npm run prepare:prod && npm run build && npm publish --access public && npm run prepare:prod",
37
- "publish:dev": "npm run prepare:dev && npm run build && npm publish --access public && npm run prepare:prod"
41
+ "test:publish": "node --test __tests__/scripts/renderSkills.test.mjs",
42
+ "test:canvas": "jest --runInBand __tests__/canvas",
43
+ "test:canvas:browser": "node scripts/canvas-feature-smoke.mjs",
44
+ "prepack": "npm run build",
45
+ "pack:local": "npm run prepare:prod && npm pack",
46
+ "pack:dev": "npm run prepare:dev && npm pack && npm run prepare:prod",
47
+ "publish:prod": "npm run prepare:prod && npm publish --access public && npm run prepare:prod",
48
+ "publish:dev": "npm run prepare:dev && npm publish --access public && npm run prepare:prod"
38
49
  },
39
50
  "publishConfig": {
40
51
  "access": "public"
@@ -51,6 +62,9 @@
51
62
  "@ffmpeg-installer/ffmpeg": "^1.1.0",
52
63
  "@ffprobe-installer/ffprobe": "^2.1.2",
53
64
  "@modelcontextprotocol/sdk": "^1.27.1",
65
+ "@pixi/tilemap": "^5.0.2",
66
+ "gltf-validator": "2.0.0-dev.3.10",
67
+ "pixi.js": "^8.20.1",
54
68
  "semver": "^7.8.5",
55
69
  "update-notifier": "^7.3.1"
56
70
  },
@@ -61,7 +75,9 @@
61
75
  "@types/update-notifier": "^6.0.8",
62
76
  "esbuild": "^0.27.0",
63
77
  "jest": "^29.7.0",
78
+ "jsdom": "26.1.0",
64
79
  "painterro": "^1.2.92",
80
+ "playwright": "1.63.0",
65
81
  "ts-jest": "^29.2.5",
66
82
  "tsx": "^4.20.6",
67
83
  "typescript": "^5.6.3"
@@ -1,166 +0,0 @@
1
- /**
2
- * 浏览器端:缩略灰度 + z-score + 点积,从前向后找最早高相似帧。
3
- */
4
-
5
- function zscoreInPlace(vec) {
6
- let sum = 0
7
- for (let i = 0; i < vec.length; i++) sum += vec[i]
8
- const mean = sum / vec.length
9
- let varSum = 0
10
- for (let i = 0; i < vec.length; i++) {
11
- const d = vec[i] - mean
12
- varSum += d * d
13
- }
14
- const std = Math.sqrt(varSum / vec.length) + 1e-8
15
- for (let i = 0; i < vec.length; i++) vec[i] = (vec[i] - mean) / std
16
- return vec
17
- }
18
-
19
- function featureFromImageData(imageData) {
20
- const { data, width, height } = imageData
21
- const n = width * height
22
- const vec = new Float32Array(n)
23
- for (let i = 0, p = 0; i < n; i++, p += 4) {
24
- // ITU-R BT.601 亮度
25
- vec[i] = data[p] * 0.299 + data[p + 1] * 0.587 + data[p + 2] * 0.114
26
- }
27
- return zscoreInPlace(vec)
28
- }
29
-
30
- function nccScore(a, b) {
31
- const n = Math.min(a.length, b.length)
32
- if (!n) return 0
33
- let sum = 0
34
- for (let i = 0; i < n; i++) sum += a[i] * b[i]
35
- return sum / n
36
- }
37
-
38
- function waitEvent(target, event, { signal } = {}) {
39
- return new Promise((resolve, reject) => {
40
- if (signal?.aborted) {
41
- reject(new DOMException('Aborted', 'AbortError'))
42
- return
43
- }
44
- const onAbort = () => {
45
- cleanup()
46
- reject(new DOMException('Aborted', 'AbortError'))
47
- }
48
- const onOk = () => {
49
- cleanup()
50
- resolve()
51
- }
52
- const cleanup = () => {
53
- target.removeEventListener(event, onOk)
54
- signal?.removeEventListener('abort', onAbort)
55
- }
56
- target.addEventListener(event, onOk, { once: true })
57
- signal?.addEventListener('abort', onAbort, { once: true })
58
- })
59
- }
60
-
61
- async function seekVideo(video, time, signal) {
62
- const duration = Number(video.duration)
63
- const maxT = Number.isFinite(duration) && duration > 0 ? Math.max(0, duration - 1e-4) : time
64
- const t = Math.min(Math.max(0, time), maxT)
65
- if (Math.abs((video.currentTime || 0) - t) < 1e-4) return
66
- const p = waitEvent(video, 'seeked', { signal })
67
- video.currentTime = t
68
- await p
69
- }
70
-
71
- function drawFeature(video, canvas, ctx, thumbWidth) {
72
- const vw = video.videoWidth || 1
73
- const vh = video.videoHeight || 1
74
- const w = Math.max(8, Math.round(thumbWidth))
75
- const h = Math.max(8, Math.round((vh / vw) * w))
76
- if (canvas.width !== w) canvas.width = w
77
- if (canvas.height !== h) canvas.height = h
78
- ctx.drawImage(video, 0, 0, w, h)
79
- return featureFromImageData(ctx.getImageData(0, 0, w, h))
80
- }
81
-
82
- /**
83
- * @param {string} videoUrl
84
- * @param {{
85
- * threshold?: number,
86
- * minGapSec?: number,
87
- * thumbWidth?: number,
88
- * onProgress?: (info: object) => void,
89
- * signal?: AbortSignal,
90
- * }} [options]
91
- * @returns {Promise<{ start: number, end: number, score: number, fps: number, scanned: number }>}
92
- */
93
- export async function detectFirstCycle(videoUrl, options = {}) {
94
- const threshold = Math.min(0.999, Math.max(0.5, Number(options.threshold) || 0.98))
95
- const minGapSec = Math.max(0.05, Number(options.minGapSec) || 0.4)
96
- const thumbWidth = Math.max(16, Math.round(Number(options.thumbWidth) || 96))
97
- const onProgress = typeof options.onProgress === 'function' ? options.onProgress : null
98
- const signal = options.signal
99
-
100
- const video = document.createElement('video')
101
- video.muted = true
102
- video.playsInline = true
103
- video.preload = 'auto'
104
- video.crossOrigin = 'anonymous'
105
-
106
- const canvas = document.createElement('canvas')
107
- const ctx = canvas.getContext('2d', { willReadFrequently: true })
108
- if (!ctx) throw new Error('无法创建 canvas')
109
-
110
- try {
111
- const loaded = waitEvent(video, 'loadedmetadata', { signal })
112
- video.src = videoUrl
113
- video.load()
114
- await loaded
115
- if (!video.videoWidth || !Number.isFinite(video.duration) || video.duration <= 0) {
116
- throw new Error('无法读取视频元数据')
117
- }
118
-
119
- const duration = video.duration
120
- const step = 1 / 24
121
- const minT = Math.min(duration - step, minGapSec)
122
- if (!(minT > step)) {
123
- throw new Error('视频太短,无法提取周期')
124
- }
125
-
126
- await seekVideo(video, 0, signal)
127
- // 部分浏览器 seek(0) 后需一帧稳定
128
- await new Promise((r) => requestAnimationFrame(() => requestAnimationFrame(r)))
129
- const ref = drawFeature(video, canvas, ctx, thumbWidth)
130
-
131
- let scanned = 0
132
- for (let t = minT; t < duration - 1e-4; t += step) {
133
- if (signal?.aborted) throw new DOMException('Aborted', 'AbortError')
134
- await seekVideo(video, t, signal)
135
- const feat = drawFeature(video, canvas, ctx, thumbWidth)
136
- const score = nccScore(ref, feat)
137
- scanned += 1
138
- onProgress?.({
139
- time: t,
140
- score,
141
- scanned,
142
- duration,
143
- threshold,
144
- })
145
- if (score >= threshold) {
146
- return {
147
- start: 0,
148
- end: Math.min(t, duration),
149
- score,
150
- fps: 24,
151
- scanned,
152
- threshold,
153
- minGapSec,
154
- }
155
- }
156
- }
157
-
158
- throw new Error(
159
- `未找到相似度 ≥ ${(threshold * 100).toFixed(0)}% 的周期终点(已扫 ${scanned} 帧,最短间隔 ${minGapSec}s)`,
160
- )
161
- } finally {
162
- video.pause()
163
- video.removeAttribute('src')
164
- video.load()
165
- }
166
- }
@@ -1,185 +0,0 @@
1
- /**
2
- * 智能切分:从一张含多主体的图中提取连通区域,按阅读顺序返回裁切 dataURL。
3
- * 纯浏览器 Canvas,无外部依赖。
4
- */
5
-
6
- function isForeground(r, g, b, a, bg) {
7
- if (a < 24) return false
8
- // 相对背景色差够大才算前景(兼容白底 / 棋盘格近似色)
9
- const dr = r - bg.r
10
- const dg = g - bg.g
11
- const db = b - bg.b
12
- const dist = Math.sqrt(dr * dr + dg * dg + db * db)
13
- return dist > 28 || a < 250 && a > 24
14
- }
15
-
16
- function sampleBackground(data, w, h) {
17
- // 取四角均值作为背景估计
18
- const pts = [
19
- [0, 0],
20
- [w - 1, 0],
21
- [0, h - 1],
22
- [w - 1, h - 1],
23
- [Math.floor(w / 2), 0],
24
- [0, Math.floor(h / 2)],
25
- ]
26
- let r = 0
27
- let g = 0
28
- let b = 0
29
- let n = 0
30
- for (const [x, y] of pts) {
31
- const i = (y * w + x) * 4
32
- r += data[i]
33
- g += data[i + 1]
34
- b += data[i + 2]
35
- n += 1
36
- }
37
- return { r: r / n, g: g / n, b: b / n }
38
- }
39
-
40
- function loadImageElement(url) {
41
- return new Promise((resolve, reject) => {
42
- const img = new Image()
43
- img.crossOrigin = 'anonymous'
44
- img.onload = () => resolve(img)
45
- img.onerror = () => reject(new Error('图片加载失败'))
46
- img.src = url
47
- })
48
- }
49
-
50
- /**
51
- * @param {string} imageUrl
52
- * @returns {Promise<string[]>} PNG dataURL 列表(至少 2 张才有意义;找不到则空数组)
53
- */
54
- export async function smartSplitImage(imageUrl) {
55
- const img = await loadImageElement(imageUrl)
56
- const maxSide = 1600
57
- const scale = Math.min(1, maxSide / Math.max(img.naturalWidth, img.naturalHeight))
58
- const w = Math.max(1, Math.round(img.naturalWidth * scale))
59
- const h = Math.max(1, Math.round(img.naturalHeight * scale))
60
-
61
- const canvas = document.createElement('canvas')
62
- canvas.width = w
63
- canvas.height = h
64
- const ctx = canvas.getContext('2d', { willReadFrequently: true })
65
- ctx.drawImage(img, 0, 0, w, h)
66
- const { data } = ctx.getImageData(0, 0, w, h)
67
- const bg = sampleBackground(data, w, h)
68
-
69
- const visited = new Uint8Array(w * h)
70
- const boxes = []
71
- const minArea = Math.max(64, Math.floor((w * h) / 800))
72
- const queue = new Int32Array(w * h)
73
-
74
- for (let y = 0; y < h; y += 1) {
75
- for (let x = 0; x < w; x += 1) {
76
- const start = y * w + x
77
- if (visited[start]) continue
78
- const i0 = start * 4
79
- if (!isForeground(data[i0], data[i0 + 1], data[i0 + 2], data[i0 + 3], bg)) {
80
- visited[start] = 1
81
- continue
82
- }
83
-
84
- let qh = 0
85
- let qt = 0
86
- queue[qt++] = start
87
- visited[start] = 1
88
- let minX = x
89
- let maxX = x
90
- let minY = y
91
- let maxY = y
92
- let area = 0
93
-
94
- while (qh < qt) {
95
- const p = queue[qh++]
96
- const px = p % w
97
- const py = (p / w) | 0
98
- area += 1
99
- if (px < minX) minX = px
100
- if (px > maxX) maxX = px
101
- if (py < minY) minY = py
102
- if (py > maxY) maxY = py
103
-
104
- const neighbors = [p - 1, p + 1, p - w, p + w]
105
- for (const n of neighbors) {
106
- if (n < 0 || n >= w * h) continue
107
- if (visited[n]) continue
108
- const nx = n % w
109
- const ny = (n / w) | 0
110
- // 防跨行左右邻居
111
- if (Math.abs(nx - px) + Math.abs(ny - py) !== 1) continue
112
- const ni = n * 4
113
- if (!isForeground(data[ni], data[ni + 1], data[ni + 2], data[ni + 3], bg)) {
114
- visited[n] = 1
115
- continue
116
- }
117
- visited[n] = 1
118
- queue[qt++] = n
119
- }
120
- }
121
-
122
- const bw = maxX - minX + 1
123
- const bh = maxY - minY + 1
124
- if (area >= minArea && bw >= 8 && bh >= 8) {
125
- // 过滤几乎铺满整图的单一大块(切不出多图)
126
- if (bw * bh < w * h * 0.92) {
127
- boxes.push({ minX, minY, maxX, maxY, area })
128
- }
129
- }
130
- }
131
- }
132
-
133
- if (boxes.length < 2) return []
134
-
135
- // 阅读顺序:先上后下,同行按左到右
136
- const rowTol = Math.max(12, Math.floor(h * 0.03))
137
- boxes.sort((a, b) => {
138
- if (Math.abs(a.minY - b.minY) > rowTol) return a.minY - b.minY
139
- return a.minX - b.minX
140
- })
141
-
142
- // 原图尺寸裁切(更高清),并统一到完全相同的画布尺寸,保证序列播放不抖动
143
- const inv = 1 / scale
144
- const crops = []
145
- for (const box of boxes) {
146
- const sx = Math.max(0, Math.floor(box.minX * inv))
147
- const sy = Math.max(0, Math.floor(box.minY * inv))
148
- const sw = Math.min(img.naturalWidth - sx, Math.ceil((box.maxX - box.minX + 1) * inv))
149
- const sh = Math.min(img.naturalHeight - sy, Math.ceil((box.maxY - box.minY + 1) * inv))
150
- if (sw < 4 || sh < 4) continue
151
- crops.push({ sx, sy, sw, sh })
152
- }
153
- if (crops.length < 2) return []
154
-
155
- // 统一尺寸:先按最高补上方白边,再按最宽左右均匀补白边
156
- const frameW = Math.max(...crops.map((c) => c.sw))
157
- const frameH = Math.max(...crops.map((c) => c.sh))
158
- const full = document.createElement('canvas')
159
- full.width = frameW
160
- full.height = frameH
161
- const fctx = full.getContext('2d')
162
-
163
- const out = []
164
- for (const crop of crops) {
165
- fctx.fillStyle = '#ffffff'
166
- fctx.fillRect(0, 0, frameW, frameH)
167
- const padTop = frameH - crop.sh
168
- const padX = frameW - crop.sw
169
- const dx = Math.floor(padX / 2)
170
- const dy = padTop
171
- fctx.drawImage(
172
- img,
173
- crop.sx,
174
- crop.sy,
175
- crop.sw,
176
- crop.sh,
177
- dx,
178
- dy,
179
- crop.sw,
180
- crop.sh,
181
- )
182
- out.push(full.toDataURL('image/png'))
183
- }
184
- return out
185
- }
@@ -1,104 +0,0 @@
1
- ---
2
- name: game-asset-image-generator
3
- description: 指导 Agent 正确使用 MCP 提供的各类游戏素材生成与编辑工具。凡涉及生成或编辑游戏概念图和游戏素材(包括图片、模型、视频等),都必须先调用本技能,并确保最终产物按规范保存到当前工作区的 assets/ 目录。
4
- ---
5
-
6
- # 游戏素材生成
7
-
8
- ## 工作区素材准则
9
-
10
- 必须遵守以下规则:
11
-
12
- 1. 所有 AI 生成的图片和视频都必须保存到当前工作区根目录的 `assets/` 文件夹。不得只保留远程 URL;即使运行时不直接读取本地文件,`assets/` 中仍必须存在对应素材文件。
13
- 2. evomeme平台游戏使用的所有素材都必须把 TOS URL 写入项目配置(通常为 `public/config.json`)。游戏代码必须通过配置项读取素材 URL,禁止从 `assets/` 导入、读取或拼接素材路径。
14
-
15
- 调用素材工具时,始终把当前工作区根目录的绝对路径传给 `workspace_dir`,确保工具把返回文件保存到正确的 `assets/` 文件夹。
16
-
17
- ## 素材工具
18
-
19
- 当前提供两个素材工具:
20
-
21
- - `evomeme_generate_game_image`:根据文本提示生成图片。
22
- - `evomeme_cutout_game_image`:对已有图片做透明背景抠图。
23
-
24
- 两个工具都会提交异步任务并自行轮询,直到任务成功或失败。成功后,工具会下载最终 TOS 图片到 `<workspace_dir>/assets/`,同时返回文本元数据和 MCP `image` 多模态内容块。
25
-
26
- ## 并行调用
27
-
28
- 生成多项素材时,尽可能通过异步 MCP 调用并行发起互不依赖的任务,不要逐项等待一个任务完成后才调用下一个。并行前为每项素材固定提示词、参数和标识;每个调用都显式传入相同的正确 `workspace_dir`,结果返回后依据任务与素材的对应关系分别记录 `job_id`、TOS URL 和本地文件。
29
-
30
- 存在输出依赖的步骤必须保持顺序,例如抠图必须等待待处理图片生成完成,后一张图片必须引用前一张结果时也要先取得有效 URL。并行只用于依赖关系允许同时执行的任务;单个 MCP 工具内部的轮询等待不应阻塞其他独立素材任务的发起。
31
-
32
- ## `evomeme_generate_game_image`
33
-
34
- 根据提示词生成游戏图片。
35
-
36
- 生成小石头、独立云朵、固定姿态敌人等无需动画或动态特效的单个静态游戏元素时,使用 `image_type=asset`,并且必须先读取并遵循 [静态游戏元素提示词指南](references/static-game-assets.md)。如果存在游戏概念图或当前元素的设定概念图,必须按该指南将概念图作为 `reference_image_url` 使用。该指南不适用于背景、视差层、tileset、动画、特效、视频或模型。
37
-
38
- 生成铺满游戏画面的完整单层背景时,使用 `image_type=background`,并且必须先读取并遵循 [游戏背景提示词指南](references/background.md)。如果存在游戏概念图或当前场景的设定概念图,必须按该指南将概念图作为 `reference_image_url` 使用。
39
-
40
- ### 入参
41
-
42
- | 参数 | 必填 | 类型/可选值 | 说明 |
43
- | --- | --- | --- | --- |
44
- | `prompt` | 是 | `string` | 生图提示词。 |
45
- | `image_type` | 否 | `asset`、`background`、`parallax background`、`tileset` | 图片类型,默认 `background`。`asset`、`parallax background`、`tileset` 会自动抠图。 |
46
- | `size` | 否 | `2048x2048`、`1728x2304`、`2304x1728`、`2560x1440`、`1440x2560`、`1664x2496`、`2496x1664`、`3024x1296` | 输出尺寸,默认 `2048x2048`。 |
47
- | `reference_image_url` | 否 | `string` | 参考图片的可访问 URL。 |
48
- | `image_model` | 否 | `asset-lite`、`asset-pro` | 生图模型,默认 `asset-lite`。 |
49
- | `workspace_dir` | 否 | `string` | Agent 当前工作区根目录的绝对路径。为满足素材准则,调用时必须显式传入。 |
50
-
51
- ### 出参
52
-
53
- 成功结果的 `content` 包含:
54
-
55
- 1. `content[0]`:文本元数据,包括:
56
- - `job_id`:异步任务 ID。
57
- - `tos_url`:最终图片的 TOS URL。
58
- - `asset_url`:与 `tos_url` 相同,便于兼容已有配置逻辑。
59
- - `status`:终态,成功时为 `SUCCEEDED`。
60
- - `attempts`:已执行次数与最大尝试次数。
61
- - `size`:服务端确认的图片尺寸。
62
- - `image_type`:服务端确认的图片类型。
63
- - `has_transparent_background`:是否具有透明背景。
64
- - `local_path`:下载到当前工作区 `assets/` 的本地绝对路径。
65
- - `multimodal_base64`:Base64 所在内容块及字符数说明。
66
- - `mime_type`:图片 MIME 类型。
67
- 2. `content[1]`:MCP 多模态图片内容块:
68
- - `type: "image"`
69
- - `data`:不带 Data URL 前缀的 Base64 图片数据。
70
- - `mimeType`:图片 MIME 类型。
71
-
72
- 本地文件名取最终 TOS URL 路径的最后一段,并清理操作系统不允许的字符。失败时结果带 `isError: true`,文本内容为失败或超时信息。
73
-
74
- ## `evomeme_cutout_game_image`
75
-
76
- 把已有图片处理为透明背景图片。
77
-
78
- ### 入参
79
-
80
- | 参数 | 必填 | 类型 | 说明 |
81
- | --- | --- | --- | --- |
82
- | `image_url` | 是 | `string` | 待抠图原图的可访问 URL。 |
83
- | `workspace_dir` | 否 | `string` | Agent 当前工作区根目录的绝对路径。为满足素材准则,调用时必须显式传入。 |
84
-
85
- ### 出参
86
-
87
- 成功结果的 `content` 包含:
88
-
89
- 1. `content[0]`:文本元数据,包括:
90
- - `job_id`:异步任务 ID。
91
- - `tos_url`:最终抠图结果的 TOS URL。
92
- - `asset_url`:与 `tos_url` 相同,便于兼容已有配置逻辑。
93
- - `status`:终态,成功时为 `SUCCEEDED`。
94
- - `attempts`:已执行次数与最大尝试次数。
95
- - `has_transparent_background`:透明背景标记,成功结果通常为 `true`。
96
- - `local_path`:下载到当前工作区 `assets/` 的本地绝对路径。
97
- - `multimodal_base64`:Base64 所在内容块及字符数说明。
98
- - `mime_type`:图片 MIME 类型。
99
- 2. `content[1]`:MCP 多模态图片内容块:
100
- - `type: "image"`
101
- - `data`:不带 Data URL 前缀的 Base64 图片数据。
102
- - `mimeType`:图片 MIME 类型。
103
-
104
- 本地文件名取最终 TOS URL 路径的最后一段,并清理操作系统不允许的字符。失败时结果带 `isError: true`,文本内容为失败或超时信息。
@@ -1,82 +0,0 @@
1
- ---
2
- name: game-audio
3
- description: 将已托管的 BGM / SFX 接入 Phaser / Three.js 运行时配置。在游戏需要可用的 CDN 音频 URL、配置绑定或加载器接入,且不在本地生成音频时使用。
4
- ---
5
-
6
- # 游戏音频
7
-
8
- ## 概述
9
-
10
- 将此技能用于已托管在 CDN 或对象存储中的游戏音频。按参考文档中的约定将对象键拼成可加载的 HTTPS URL,并写入 `public/config.json` 或运行时加载器。
11
-
12
- **不生成新音频**。如果所需音频对象在 CDN 中不存在且用户未提供 URL,停止并请用户确认对象键或更新参考清单,不得编造路径。
13
-
14
- ## 何时使用此技能
15
-
16
- - 设计文档、配置文件或用户指定了某首 BGM 或 SFX 的文件名/键,需要给出可加载 URL
17
- - 填写 `bgm_main`、`audio_bgm_gameplay`、`audio_sfx_click`、`backgroundMusic`、`src`、`url` 等音频字段
18
- - 用户明确说音频来自公司 CDN、对象存储或固定托管 URL
19
- - 接入点击音、拾取音、碰撞音、射击音、爆炸音、成功/失败音等游戏反馈音效
20
-
21
- ---
22
-
23
- ## 阅读顺序
24
-
25
- 1. 读完本节后,根据任务类型选择并**打开对应参考文档**,不得在未读参考的情况下拼接 URL
26
- 2. **BGM(循环背景音乐)**:`references/bgm-cdn.md`
27
- 3. **SFX(短促触发音效)**:`references/sfx-cdn.md`
28
- 4. 同时涉及 BGM 和 SFX 时,读取两个参考
29
-
30
- ---
31
-
32
- ## BGM 路由
33
-
34
- - 加载 BGM 参考文档,从中提取 CDN 根、路径前缀和曲目清单
35
- - 用于循环背景音乐,对应配置键如 `bgm_main`、`audio_bgm_gameplay`、`audio_bgm_menu`、`backgroundMusic`
36
- - 曲目不在清单中时,不得编造路径;请用户确认对象键后再配置
37
-
38
- 推荐技能:`game-audio`;BGM 参考 `references/bgm-cdn.md`。
39
-
40
- ## SFX 路由
41
-
42
- - 加载 `references/sfx-cdn.md`,提取 CDN 根和文件名规则
43
- - 用于短促触发音效,对应配置键如 `audio_sfx_click`、`audio_sfx_pickup`、`audio_sfx_impact`、`audio_sfx_shoot`、`audio_sfx_explosion`、`audio_sfx_success`、`audio_sfx_fail`
44
- - 高频触发音效(脚步、拖动、持续碰撞)作为节流或循环播放处理,不逐帧重触发
45
-
46
- 推荐技能:`game-audio`;SFX 参考 `references/sfx-cdn.md`。
47
-
48
- ---
49
-
50
- ## 工作流
51
-
52
- 1. 确认任务类型:BGM、SFX 或两者
53
- 2. 读取对应参考文档,提取 CDN 根、必需前缀和文件名规则
54
- 3. 从用户、策划案、配置表或参考清单中找到确切的对象键
55
- 4. 拼出完整 HTTPS URL(使用参考中的 CDN 根和前缀,不额外编码整个 URL)
56
- 5. 将 URL 写入对应配置键、清单或运行时加载代码,保留项目现有音频架构
57
- 6. 验证控制标志:BGM 遵守 `audio_music_enabled`,SFX 遵守 `audio_sfx_enabled`;游戏内循环不泄漏到菜单或结算页
58
-
59
- ### 写入 2D 项目配置(`public/config.json`)
60
-
61
- ```json
62
- "bgm_main": { "value": "https://...", "type": "audio", "label": "背景音乐" },
63
- "sfx_jump": { "value": "https://...", "type": "audio", "label": "跳跃音效" }
64
- ```
65
-
66
- ### 写入 3D 项目配置
67
-
68
- 按项目现有配置结构写入,config 键名遵循 `audio_bgm_*` / `audio_sfx_*` 命名规范。
69
-
70
- ---
71
-
72
- ## 护栏
73
-
74
- - 不编造文件名、CDN 域名、目录前缀或百分比编码片段
75
- - 不静默替换 BGM 和 SFX 的根路径
76
- - 不以生成音频为由加载已移除的本地音频生成技能
77
- - 对象键缺失或用户未提供完整 URL 时,停止并要求用户提供或更新参考,不猜测
78
-
79
- ## References
80
-
81
- - BGM CDN 清单:`references/bgm-cdn.md`
82
- - SFX CDN 清单:`references/sfx-cdn.md`
@@ -1,4 +0,0 @@
1
- interface:
2
- display_name: "Game Audio"
3
- short_description: "从已托管资源中选择背景音乐和音效,并接入游戏配置与播放流程"
4
- default_prompt: "请使用 $game-audio 为我的游戏选择合适的已托管背景音乐和音效,并接入现有配置与播放流程。"