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,286 @@
1
+ ---
2
+ name: evomeme-native-bridge-sdk
3
+ description: Integrate native capabilities such as camera, microphone, gyroscope, and vibration through the NativeBridge SDK inside the evomeme platform host. Web API fallback is prohibited; SDK calls and permission requests must be initiated synchronously as soon as the game loads. Use when an H5 game needs the above native capabilities, file access, client identity, or migration from an old bridge.
4
+ ---
5
+
6
+ # evomeme-native-bridge-sdk
7
+
8
+ ## NativeBridge Native Capability Rules (Hard Requirements)
9
+
10
+ Whenever a game involves camera, microphone, gyroscope, or vibration capabilities, `evomeme-native-bridge-sdk` must be used to complete the integration.
11
+
12
+ 1. Camera capabilities must be called through NativeBridge methods such as `camera.pickImage`, `camera.takePhoto`, `camera.preview.start`, `camera.preview.stop`, `camera.microphone.start`, and `camera.microphone.stop`.
13
+ 2. Microphone volume or recording-related input must be implemented through `microphone.startMeter`, `microphone.stopMeter`, and the `microphone.level` event.
14
+ 3. Gyroscope input must be implemented through `gyro.start`, `gyro.stop`, and the `gyro.data` event.
15
+ 4. Vibration feedback must be implemented through the `vibrate` method.
16
+
17
+ ### Web Capability Fallback Is Prohibited
18
+
19
+ **Camera, microphone, gyroscope, and vibration must all use only the NativeBridge SDK; using browser Web APIs for any fallback or parallel implementation is prohibited.**
20
+
21
+ Prohibited items include but are not limited to:
22
+
23
+ - `navigator.mediaDevices.getUserMedia` / `enumerateDevices` (camera, microphone)
24
+ - `DeviceOrientationEvent` / `DeviceMotionEvent` / `deviceorientation` (gyroscope)
25
+ - `navigator.vibrate` (vibration)
26
+ - Self-wrapped dual-path logic such as "fall back to Web if the SDK fails"
27
+ - Depending on browser-simulated results such as the SDK's internal `web-media-stream` / `web-media-stream-fallback` as the normal gameplay path
28
+
29
+ When the SDK is unavailable, `invoke` fails, or permission is denied: clearly tell the user they need to play / authorize inside the **evomeme platform host**, and **do not** silently switch to a Web implementation to pretend the capability is available.
30
+
31
+ ### Timeliness Must Be Guaranteed (Request on Load)
32
+
33
+ When using NativeBridgeSDK, **you must initiate the required SDK calls and permission-related requests as soon as the game has just loaded and is still foregrounded and interactive**, ensuring the authorization flow occurs in the current session visible to the user.
34
+
35
+ It is **prohibited** to defer permission requests until:
36
+
37
+ - after the game has entered the background, the page has changed, or a modal covers the main interface;
38
+ - after a long-running asynchronous process (asset loading, network request, level generation) completes and then "make up" the request;
39
+ - inside a delayed callback after the user has left the current game context.
40
+
41
+ Otherwise this will occur: **the game is already in the background, and only then does the host show an asynchronous permission authorization prompt**, which will seriously confuse the user (they will not know which app is asking for permission or why a prompt suddenly appears).
42
+
43
+ Recommended practice:
44
+
45
+ 1. Obtain the bridge at the earliest startup stage (see "Step 1" below).
46
+ 2. If gameplay depends on camera / microphone / gyroscope / vibration, call the corresponding `invoke` (or the host-agreed permission precheck method) **immediately** after the first screen becomes interactive; do not wait until the player reaches a certain level to request permission for the first time.
47
+ 3. Keep the game foregrounded while the permission prompt is shown; do not assume the capability is available before authorization is granted.
48
+
49
+ ## Overview
50
+
51
+ Use this skill when an H5 game inside the **evomeme platform host** (usually an RN WebView) needs to call native capabilities. Business code must depend only on the unified SDK:
52
+
53
+ ```js
54
+ const bridge = window.NativeBridge || window.NativeBridgeSDK;
55
+ ```
56
+
57
+ Do not directly call `window.ReactNativeWebView`, `postMessage`, or host-private objects in game business code.
58
+ For camera, microphone, gyroscope, and vibration: **recognize only the SDK, not browser Web APIs.**
59
+
60
+ If the repository contains `html/native-bridge-sdk.js` or an equivalent SDK implementation file, read that implementation first and treat the implementation as authoritative; if the implementation file does not exist, use the protocol conventions in this skill as the integration baseline. Do not rewrite the host-side bridge out of thin air, and do not impersonate the bridge with Web APIs.
61
+
62
+ ## When to Use This Skill
63
+
64
+ This skill must be used when any of the following requirements appear:
65
+
66
+ - The game needs native capabilities such as camera, microphone, gyroscope, vibration, file reading/writing, username, client information, and so on.
67
+ - Keywords such as `NativeBridge`, `NativeBridgeSDK`, `ReactNativeWebView`, `rn-webview`, `bridge.invoke`, or `gyro.start` appear in the code.
68
+ - Old direct host calls or old Web API device calls need to be migrated to unified `NativeBridge` SDK calls.
69
+
70
+ This skill **does not target** a goal where the above four device capability categories are fully usable in a "pure browser"; the target runtime environment is the evomeme platform host.
71
+
72
+ ## Stable API
73
+
74
+ Use only the following public API:
75
+
76
+ ```ts
77
+ interface NativeBridge {
78
+ version: string;
79
+ invoke<T = unknown>(method: string, params?: Record<string, unknown>): Promise<T>;
80
+ on(eventName: string, handler: (payload: unknown) => void): () => void;
81
+ off(eventName: string, handler: (payload: unknown) => void): void;
82
+ isAvailable(method: string): boolean;
83
+ getRuntime(): { host: "rn-webview" | "browser"; version: string };
84
+ reportReady(payload?: Record<string, unknown>): Record<string, unknown>;
85
+ dispose(): void;
86
+ }
87
+ ```
88
+
89
+ Obtain the bridge first during integration:
90
+
91
+ ```js
92
+ function getNativeBridge() {
93
+ return window.NativeBridge || window.NativeBridgeSDK || null;
94
+ }
95
+ ```
96
+
97
+ If `getNativeBridge()` is `null`: do not switch to Web APIs to implement camera/microphone/gyroscope/vibration; instead, indicate that the environment is unsupported and disable gameplay branches that depend on these capabilities.
98
+
99
+ ## Method List
100
+
101
+ Method names must match exactly, word for word; do not rewrite them to camelCase or old names.
102
+
103
+ | Type | Method |
104
+ | --- | --- |
105
+ | General capabilities | `bridge.ping`, `ping`, `vibrate`, `getUsername`, `getClientInfo` |
106
+ | Camera and microphone | `camera.pickImage`, `camera.takePhoto`, `camera.preview.start`, `camera.preview.stop`, `camera.microphone.start`, `camera.microphone.stop`, `microphone.startMeter`, `microphone.stopMeter` |
107
+ | File capabilities | `fs.readText`, `fs.writeText`, `fs.list` |
108
+ | Sensor capabilities | `gyro.start`, `gyro.stop` |
109
+
110
+ Important parameters and returns:
111
+
112
+ - `vibrate({ style })`: `style` may be `light | medium | heavy`.
113
+ - `gyro.start({ interval })`: `interval` defaults to `100`, in ms; `{ x, y, z, ts }` is pushed through `gyro.data`.
114
+ - `microphone.startMeter()`: returns `{ started: true }`; `{ level, ts }` is pushed through `microphone.level`.
115
+ - `camera.preview.start()` / `camera.microphone.start()`: follow the host SDK return value; **do not** implement gameplay based on browser `MediaStream` assumptions, and **do not** use Web media stream fallback.
116
+ - `fs.readText({ path }) -> { path, text }`.
117
+ - `fs.writeText({ path, text }) -> { path, bytes }`.
118
+ - `fs.list() -> { files: string[] }`.
119
+
120
+ ## Event List
121
+
122
+ Subscribe only to events supported by the current SDK:
123
+
124
+ | Event | payload |
125
+ | --- | --- |
126
+ | `camera.state` | `{ state: "started" | "stopped", ts, source? }` |
127
+ | `camera.microphone.state` | `{ state: "started" | "stopped", ts }` |
128
+ | `microphone.level` | `{ level, ts }` |
129
+ | `gyro.data` | `{ x, y, z, ts }` |
130
+
131
+ The current SDK does not have a `microphone.state` event. Do not subscribe to or trigger this event name.
132
+
133
+ ## Runtime Differences
134
+
135
+ ### rn-webview (Target Environment)
136
+
137
+ - `invoke` is sent by the SDK through `ReactNativeWebView.postMessage(JSON.stringify(message))` as `{ id, type: "invoke", method, params }`.
138
+ - The host returns `{ id, ok: true, result }` or `{ id, ok: false, error }`.
139
+ - The SDK receives host events as `{ type: "event", event, payload }`.
140
+ - The `invoke` timeout threshold is `15000ms`; timeout throws `TIMEOUT`.
141
+ - `isAvailable(method)` is always `true` in the RN runtime, and does not mean the host definitely implements that capability; `invoke` failures must still be handled.
142
+
143
+ ### browser (Non-Target Full Environment)
144
+
145
+ - **Web APIs must not** be used to provide usable implementations for camera, microphone, gyroscope, or vibration.
146
+ - If `getRuntime().host === "browser"` is detected, or the bridge is missing: disable gameplay related to the above four capability categories, and prompt the user to open it inside the evomeme platform.
147
+ - If `fs.*` is not injected by the host, it may be shown as unavailable; do not forge device sensor data just to make it "playable."
148
+
149
+ ## Integration Workflow
150
+
151
+ ### Step 1: Initialize the bridge and initiate permission-related calls on load (timeliness)
152
+
153
+ When the game starts and is still foregrounded, immediately get the bridge and runtime, and `invoke` the capabilities needed by gameplay **as early as possible** (triggering the host permission prompt), to avoid background asynchronous authorization.
154
+
155
+ ```js
156
+ const bridge = getNativeBridge();
157
+ const runtime = bridge?.getRuntime?.();
158
+
159
+ if (!bridge || runtime?.host === "browser") {
160
+ // Disable camera/microphone/gyroscope/vibration-related gameplay; prompt the user to play inside the evomeme platform
161
+ } else {
162
+ // Whichever capabilities gameplay needs, initiate the corresponding invoke at this stage (or at the immediately following first-screen interactive moment)
163
+ // Example: await bridge.invoke("gyro.start", { interval: 100 });
164
+ // Example: await bridge.invoke("microphone.startMeter");
165
+ // Prohibited: placing the first permission request after a long-running asynchronous task completes
166
+ }
167
+
168
+ bridge?.reportReady?.({ scene: "game-main", host: runtime?.host || "unknown" });
169
+ ```
170
+
171
+ `reportReady` is used to notify the host that "the game is interactive." It should be called once after core resources have loaded and the first screen is operable; **permission-related `invoke` calls must not be deliberately scheduled after the user has already left the foreground.**
172
+
173
+ ### Step 2: Wrap safe calls (no Web fallback)
174
+
175
+ Every `invoke` must use `try/catch` and branch by `error.code`. Bare calls are prohibited. On failure, return a clear "unavailable" state, and **do not** internally call Web APIs instead.
176
+
177
+ ```js
178
+ async function invokeNative(method, params) {
179
+ const bridge = getNativeBridge();
180
+ if (!bridge) {
181
+ return { ok: false, reason: "NO_BRIDGE" };
182
+ }
183
+
184
+ try {
185
+ const result = await bridge.invoke(method, params);
186
+ return { ok: true, result };
187
+ } catch (error) {
188
+ switch (error?.code) {
189
+ case "UNAVAILABLE":
190
+ case "PERMISSION_DENIED":
191
+ case "TIMEOUT":
192
+ case "CANCELLED":
193
+ return { ok: false, reason: error.code, error };
194
+ default:
195
+ console.warn("[NativeBridge]", method, error);
196
+ return { ok: false, reason: error?.code || "UNKNOWN", error };
197
+ }
198
+ }
199
+ }
200
+ ```
201
+
202
+ Error codes that must be recognized:
203
+
204
+ - `UNAVAILABLE`
205
+ - `PERMISSION_DENIED`
206
+ - `INVALID_PARAMS`
207
+ - `INTERNAL_ERROR`
208
+ - `TIMEOUT`
209
+ - `CANCELLED`
210
+ - `NOT_FOUND`
211
+
212
+ ### Step 3: Subscribe to events and save unregister functions
213
+
214
+ All cancel-subscription functions returned by `on` must be saved, and must be called on React unmount, scene shutdown, or page destruction.
215
+
216
+ ```js
217
+ const nativeDisposers = [];
218
+
219
+ function subscribeGyro(onData) {
220
+ const bridge = getNativeBridge();
221
+ if (!bridge) return;
222
+ nativeDisposers.push(bridge.on("gyro.data", onData));
223
+ }
224
+
225
+ function cleanupNativeBridge() {
226
+ while (nativeDisposers.length) {
227
+ const off = nativeDisposers.pop();
228
+ try { off && off(); } catch (_) {}
229
+ }
230
+ }
231
+ ```
232
+
233
+ ### Step 4: Product behavior when a capability is unavailable (not Web fallback)
234
+
235
+ When SDK / permission fails:
236
+
237
+ - Clear UI copy must explain that platform authorization is required or that it must be opened inside evomeme.
238
+ - Alternative gameplay that **does not depend on device sensors** may be provided (such as pure touch-control levels), but this is not "using Web APIs to simulate gyroscope/camera."
239
+ - Do not use `getUserMedia` / `deviceorientation` / `navigator.vibrate` to fill the gap.
240
+
241
+ ### Step 5: Stop started capabilities on teardown
242
+
243
+ When the page or game scene is destroyed, first stop started capabilities, then unsubscribe events, and finally call `dispose`.
244
+
245
+ ```js
246
+ async function destroyNativeBridgeFeatures() {
247
+ const bridge = getNativeBridge();
248
+ if (!bridge) return;
249
+
250
+ await bridge.invoke("gyro.stop").catch(() => {});
251
+ await bridge.invoke("microphone.stopMeter").catch(() => {});
252
+ await bridge.invoke("camera.preview.stop").catch(() => {});
253
+ await bridge.invoke("camera.microphone.stop").catch(() => {});
254
+
255
+ cleanupNativeBridge();
256
+ bridge.dispose?.();
257
+ }
258
+ ```
259
+
260
+ ## Configuration Integration Constraints
261
+
262
+ - `/public/config.json` remains the configuration source for game assets, colors, values, copy, and adjustable parameters (for 2D, see `../phaser-2d-game/references/file-structure.md`; for 3D, see `../threejs-3d-game/references/file-structure.md`); NativeBridge only provides runtime capabilities and does not replace config.
263
+ - Do not write temporary objects returned by native capabilities into `config.json` (for example, media stream objects).
264
+ - Touchscreen operation on mobile must not be broken in order to integrate the bridge.
265
+ - Business logic that directly depends on `window.ReactNativeWebView` must not appear in code. If the host must be detected, do so only through `bridge.getRuntime()`.
266
+ - Direct Web API calls for camera/microphone/gyroscope/vibration must not appear in code.
267
+
268
+ ## Acceptance Checklist
269
+
270
+ After completing NativeBridge integration, check each item:
271
+
272
+ - H5 business code only calls `window.NativeBridge || window.NativeBridgeSDK`.
273
+ - Method names and event names exactly match the lists in this skill.
274
+ - **Request on load**: permission / startup-class `invoke` calls that depend on native capabilities occur while the game is foregrounded during the loading stage, with no path where "permission pops up only in the background."
275
+ - **No Web fallback**: the project has no implementation using `getUserMedia` / `deviceorientation` / `navigator.vibrate`, and similar APIs, to replace the above four capability categories.
276
+ - Every `invoke` has explicit error handling and can handle `UNAVAILABLE`, `PERMISSION_DENIED`, and `TIMEOUT`.
277
+ - Every event subscription has unregister logic.
278
+ - Started `gyro`, microphone, and camera preview are stopped on teardown.
279
+ - When the bridge is missing or the host is not the platform host, related capabilities are disabled and the user is prompted, instead of switching to browser APIs.
280
+
281
+ ## Example Trigger Requests
282
+
283
+ - "Make this H5 game call the gyroscope inside evomeme / RN WebView to control the character."
284
+ - "Integrate NativeBridge camera preview and microphone volume events; permissions must be requested on load."
285
+ - "Migrate old ReactNativeWebView.postMessage or getUserMedia calls to the SDK, with no Web fallback."
286
+ - "Add vibration feedback to the game, using only NativeBridge."
@@ -0,0 +1,8 @@
1
+ interface:
2
+ display_name: "evomemeNative Bridge SDK"
3
+ short_description: "Integrate camera, microphone, gyroscope, and vibration into platform games through the native bridge"
4
+ default_prompt: "Please use $evomeme-native-bridge-sdk to integrate the required mobile native capabilities for my platform game, and handle permissions, exceptions, and teardown flow."
5
+
6
+ policy:
7
+ allow_implicit_invocation: true
8
+
@@ -0,0 +1,47 @@
1
+ ---
2
+ name: evomeme-tos-upload
3
+ description: Upload supported local images, audio, video, or common 3D models to evomemeTOS through evomeme_upload_game_asset, and obtain a public asset_url after content review passes.
4
+ ---
5
+
6
+ # evomeme-tos-upload
7
+
8
+ ## Purpose
9
+
10
+ Upload supported local images, audio, video, or common 3D models to evomemeTOS and obtain a publicly accessible `asset_url`.
11
+
12
+ - Call the primary MCP (`evomeme`) tool **`evomeme_upload_game_asset`**; plugin_client selects the image/model synchronous interface or the unified audio/video interface based on the file extension, submits the original bytes, and the server uploads them to TOS. A link is returned only after the content safety review passes.
13
+ - Do not write AK/SK manually, do not forge CDN URLs, and do not put binaries directly into the source repository.
14
+
15
+ The only allowed extensions are:
16
+
17
+ - Images: PNG, JPG, JPEG, BMP, WEBP, TIFF, SVG, GIF, ICO, HEIC
18
+ - Audio: MP3, WAV, AAC, WMA, OGG, M4A, AMR
19
+ - Video: AVI, FLV, MP4, MPG, ASF, WMV, MOV, WMA, RMVB, RM, FLASH, TS, M3U8
20
+ - Models: GLB, GLTF, FBX, OBJ, STL (when there are external texture or buffer files, packaging as GLB first is recommended)
21
+
22
+ Fonts, archives, and other types not listed are prohibited from upload. WMA is handled as audio. Images and models undergo synchronous review; audio and video undergo asynchronous polling review.
23
+
24
+ ## Upload Workflow
25
+
26
+ Must already be logged in to EvoMeme. For upload and submission rules, see `../evomeme-cloud-fs/SKILL.md`; after authentication fails, then follow `../evomeme-login/SKILL.md`.
27
+
28
+ | Field | Required | Notes |
29
+ | --- | --- | --- |
30
+ | `local_path` | yes | Absolute local file path or a path relative to the MCP cwd |
31
+ | `folder` | no | TOS directory prefix |
32
+ | `extension` | no | Extension override |
33
+
34
+ On success, the tool returns a publicly accessible `asset_url`.
35
+
36
+ Use this upload workflow when local images / audio and video / common 3D models need a public URL; unlisted types are not supported.
37
+
38
+ ## Non-Negotiables
39
+
40
+ - Prefer `evomeme_upload_game_asset`; do not upload with ad-hoc credential scripts.
41
+ - Do not write TOS/AK/SK or bearer tokens into skill reports.
42
+ - evomemeMCP tool names always use the `evomeme_` prefix; for submission, see `../evomeme-cloud-fs/SKILL.md`; for generation summaries, see `../game-director/SKILL.md`.
43
+
44
+ ## References
45
+
46
+ - Cloud file system: `../evomeme-cloud-fs/SKILL.md`
47
+ - evomeme entry point: `../game-director/SKILL.md`
@@ -0,0 +1,5 @@
1
+ interface:
2
+ display_name: "evomemeTOS Upload"
3
+ short_description: "Upload local game assets to object storage and return publicly accessible asset links"
4
+ default_prompt: "Please use $evomeme-tos-upload to upload this local game asset and provide me with the returned public link."
5
+
@@ -0,0 +1,123 @@
1
+ ---
2
+ name: evomeme-ui
3
+ description: Define WebView container adaptation, UI layout, and multi-size acceptance requirements for evomeme platform games. MUST be read when developing any game intended to run, launch, or be published on evomeme, and followed when creating or modifying HUDs, menus, dialogs, touch regions, Canvas dimensions, or responsive layouts.
4
+ ---
5
+
6
+ # evomeme Game UI and Responsive Layout
7
+
8
+ ## Required Reading
9
+
10
+ For any game intended to run, launch, or be published on evomeme, MUST read this skill before starting development, migration, or modification. Follow it when building game UI, changing layouts, or addressing responsive adaptation; do not postpone adaptation until publication.
11
+
12
+ This skill defines platform container and layout constraints. Follow [`evomeme-game-maker`](../evomeme-game-maker/SKILL.md) for overall project requirements, and use [`game-ui`](../game-ui/SKILL.md) for UI style, information hierarchy, or concept design. For evomeme games, this skill governs dimension sources, safe-area handling, and responsive acceptance checks.
13
+
14
+ ## Host Container Contract
15
+
16
+ **The game runs inside the available WebView area already calculated by the App. A "full-screen" game fills that area.**
17
+
18
+ 1. Base layout on the game container's live `clientWidth`, `clientHeight`, or `ResizeObserver` measurements. MUST NOT calculate game height from the phone's full screen height.
19
+ 2. MUST NOT subtract the App Tab Bar, game information and action area, or phone safe areas again. MUST NOT use the native host's `3.75rem`, `4.5rem`, or `8.25rem` values in the game's web layout.
20
+ 3. The game root, render canvas, and background MUST fill the WebView container. MUST NOT preserve the design ratio with fixed-aspect-ratio containers, black borders, or uniform shrinking of the entire game frame.
21
+ 4. Backgrounds may be cropped or extended. Core characters, HUDs, text, buttons, and gameplay hit regions MUST remain visible and usable. Do not position key content solely using fixed absolute coordinates relative to the design draft's screen edges.
22
+ 5. When the container changes size, recalculate the layout, camera or playable area, Canvas rendering dimensions, and touch coordinate mapping. Layout overflow MUST NOT create page scrollbars.
23
+ 6. The native App's dynamic NativeWind `rem` does not automatically propagate into the WebView. Web CSS `rem` depends on the page's root font size. Use CSS px for logical dimensions, not the device's physical resolution.
24
+
25
+ Read [`references/host-layout.md`](references/host-layout.md) when you need the native deduction formula, the 402px design baseline, or the full estimated device matrix. These references are for design and testing only; MUST NOT use them to hardcode game height at runtime.
26
+
27
+ ## Design and Layout
28
+
29
+ Use **402×646 CSS px** as the primary design baseline. Typical WebView width-to-height ratios are approximately **1:1.60–1:1.78**, with an extreme short-screen case around **1:1.40**. These are test references, not runtime size limits.
30
+
31
+ - First ensure that core gameplay, primary buttons, and essential text fit short containers. Use additional height for background extension, spacing, or playable area.
32
+ - Position HUDs, menus, dialogs, and touch regions using container-relative anchors, relative layout, or responsive constraints. They must remain visible and clickable when content length changes.
33
+ - The game may have internal visual padding and touch spacing, but MUST NOT subtract phone safe areas already handled by the host under the guise of safe-area adaptation.
34
+ - Handle background cropping separately from critical content. Do not crop characters, buttons, or hit regions to make the background fill the container.
35
+ - Use the same container dimensions for the full-screen background, DOM UI, game camera, and input coordinates. Avoid scaling the scene while leaving buttons or hit regions at old coordinates.
36
+
37
+ ## Base Web Page Styles
38
+
39
+ Set a mobile viewport, for example:
40
+
41
+ ```html
42
+ <meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover" />
43
+ ```
44
+
45
+ Propagate dimensions from the WebView through every parent to the game root. The `#root` and `#game-root` selectors below should match the project's actual mount nodes. Any additional wrappers must preserve the height chain.
46
+
47
+ ```css
48
+ html,
49
+ body,
50
+ #root {
51
+ width: 100%;
52
+ height: 100%;
53
+ min-height: 0;
54
+ margin: 0;
55
+ overflow: hidden;
56
+ }
57
+
58
+ #game-root {
59
+ position: relative;
60
+ width: 100%;
61
+ height: 100%;
62
+ min-height: 0;
63
+ overflow: hidden;
64
+ }
65
+
66
+ #game-root canvas {
67
+ display: block;
68
+ width: 100%;
69
+ height: 100%;
70
+ touch-action: none;
71
+ }
72
+ ```
73
+
74
+ MUST NOT deduct the host layout again with formulas such as `100vh - App bar heights - safe-area-inset`. Use `overflow: hidden` to control page scrolling, not to conceal critical content overflowing the container.
75
+
76
+ ## Synchronizing Canvas and Engine Dimensions
77
+
78
+ Observe the game container instead of reading window dimensions only once at startup. The example below illustrates the separation between logical and rendering dimensions. `resizeGameLayout` represents the project's actual layout update function and must update the UI, playable area, and input mapping.
79
+
80
+ ```js
81
+ const container = document.querySelector('#game-root');
82
+ const canvas = container.querySelector('canvas');
83
+
84
+ const observer = new ResizeObserver(([entry]) => {
85
+ const { width, height } = entry.contentRect;
86
+ if (width <= 0 || height <= 0) return;
87
+ const dpr = Math.min(window.devicePixelRatio || 1, 2);
88
+
89
+ canvas.style.width = `${width}px`;
90
+ canvas.style.height = `${height}px`;
91
+ canvas.width = Math.round(width * dpr);
92
+ canvas.height = Math.round(height * dpr);
93
+
94
+ // Logical layout uses CSS px; the rendering buffer uses dimensions multiplied by DPR.
95
+ resizeGameLayout(width, height, dpr);
96
+ });
97
+
98
+ observer.observe(container);
99
+ // Call observer.disconnect() when the component unmounts or the scene is destroyed.
100
+ ```
101
+
102
+ For Phaser, Three.js, or other engines, implement equivalent behavior through the engine's existing resize, camera, and pixel-ratio APIs. Avoid managing the canvas a second time outside the engine. With native Canvas 2D, restore drawing transforms and state after changing canvas width or height. Consider capping DPR to prevent excessively large rendering buffers on high-resolution devices.
103
+
104
+ ## Required Responsive Acceptance Checks
105
+
106
+ Validate at least these three **game container sizes**. Do not subtract host UI from these heights again:
107
+
108
+ | Test purpose | Container size (CSS px) | Key checks |
109
+ | --- | --- | --- |
110
+ | Minimum usable height | 375×524 | Core gameplay, HUDs, dialogs, and primary controls do not overflow or become obscured |
111
+ | Standard design baseline | 402×646 | Main visuals, information hierarchy, and interaction flows are complete |
112
+ | Tall Android screen | 412×732 | Background extension, vertical layout, and touch coordinates remain correct |
113
+
114
+ Browser or embedded-container simulation is acceptable during development. Before delivery, verify the main states using the actual production `dist/` build and cover at least one container size change while the game is running.
115
+
116
+ - [ ] The root container, Canvas, and background always fill the WebView without black borders or uncovered areas.
117
+ - [ ] Layout does not use the phone's full screen height, enforce a fixed aspect ratio, or subtract native bars and safe areas again.
118
+ - [ ] Key characters, buttons, text, HUDs, and hit regions remain fully visible at all three sizes.
119
+ - [ ] Start, gameplay, pause, results, and any other main interfaces provided by the game remain operable.
120
+ - [ ] After scaling or resizing, the UI, rendered scene, and touch hit regions remain aligned.
121
+ - [ ] The page has no unintended scrollbars, and clipping does not conceal overflowing critical content.
122
+
123
+ At delivery, report the sizes, interface states, and results actually verified. If real-device or host WebView validation was not possible, state that limitation; do not describe browser simulation as real-device acceptance testing.
@@ -0,0 +1,4 @@
1
+ interface:
2
+ display_name: "evomeme UI"
3
+ short_description: "Adapt evomeme game UI to responsive WebView containers"
4
+ default_prompt: "Use $evomeme-ui to implement UI and responsive adaptation for a game intended for evomeme, and verify all three game container sizes."
@@ -0,0 +1,69 @@
1
+ # Native Host Layout and WebView Size Reference
2
+
3
+ This reference is adapted from the project's Game WebView Multi-Device Sizing Specification. Use it to understand the design baseline, estimate available space, and establish a test matrix. At runtime, the game must always use live container measurements. Do not move the native formulas below into the web page and subtract the same heights again.
4
+
5
+ ## The 402px Design Baseline and Native rem
6
+
7
+ The App's design baseline width is 402px, where `1rem = 16`. These design dimensions correspond to React Native's logical layout units, dp, rather than the device's physical pixels.
8
+
9
+ The native layer adjusts NativeWind rem in `app/_layout.tsx` according to the device window's logical width `W`:
10
+
11
+ ```text
12
+ Scale S = W / 402
13
+ Native 1rem = 16 × W / 402
14
+ ```
15
+
16
+ | Window width W | Native 1rem (approximately) |
17
+ | ---: | ---: |
18
+ | 360 | 14.33 |
19
+ | 375 | 14.93 |
20
+ | 393 | 15.64 |
21
+ | 402 | 16.00 |
22
+ | 430 | 17.11 |
23
+
24
+ CSS rem inside the WebView depends on the web page's own root font size, typically 16 CSS px by default. It does not inherit the dynamic NativeWind rem above.
25
+
26
+ ## Estimating the Game Area in the Native Layer
27
+
28
+ ```text
29
+ H_game ≈ H_window - safeTop - safeBottom - 8.25rem
30
+ ```
31
+
32
+ | Native region | NativeWind size | Logical height at the 402px baseline |
33
+ | --- | --- | ---: |
34
+ | Tab Bar body | h-13 / 3.25rem | 52 |
35
+ | Tab Bar top and bottom spacing | py-1 × 2 / 0.5rem | 8 |
36
+ | Complete Tab Bar | 3.75rem | 60 |
37
+ | Game information and action area | h-18 / 4.5rem | 72 |
38
+ | Total fixed deduction | 8.25rem | 132 |
39
+
40
+ Because native rem scales with width:
41
+
42
+ ```text
43
+ Fixed height deduction = 8.25 × 16 × W / 402
44
+ = 132 × W / 402
45
+ ≈ 0.32836W
46
+
47
+ Estimated WebView width = W
48
+ Estimated WebView height ≈ H - safeTop - safeBottom - 0.32836W
49
+ ```
50
+
51
+ For W values of 360, 375, 393, 402, and 430, the fixed height deductions are approximately 118.2, 123.1, 129.0, 132, and 141.2 logical units, respectively. The host has already applied these deductions; the game simply fills the WebView.
52
+
53
+ ## Estimated Device Matrix
54
+
55
+ The representative devices and assumed safe areas below come from the original specification. They are not device-detection rules. OS versions, display scaling, orientation changes, and Android vendor implementations may introduce differences of approximately 5–15px. Actual available dimensions must still be measured.
56
+
57
+ | Representative device | Logical screen size | Assumed safe areas (top/bottom) | Estimated WebView size | Width-to-height ratio |
58
+ | --- | --- | --- | --- | --- |
59
+ | iPhone SE 2/3 | 375×667 | 20 / 0 | 375×524 | 1:1.40 |
60
+ | iPhone 13 mini | 360×780 | 50 / 34 | 360×578 | 1:1.61 |
61
+ | iPhone 12/13/14 | 390×844 | 47 / 34 | 390×635 | 1:1.63 |
62
+ | iPhone 14 Pro / 15 | 393×852 | 59 / 34 | 393×630 | 1:1.60 |
63
+ | iPhone 16 Pro / 17 | 402×874 | 62 / 34 | 402×646 | 1:1.61 |
64
+ | iPhone Plus / Pro Max | 430×932 | 59 / 34 | 430×698 | 1:1.62 |
65
+ | Compact Android | 360×800 | 24 / 24 | 360×634 | 1:1.76 |
66
+ | Standard Android | 384×832 | 24 / 24 | 384×658 | 1:1.71 |
67
+ | Large-screen Android | 412×915 | 24 / 24 | 412×732 | 1:1.78 |
68
+
69
+ The original specification estimates an overall range of approximately 1:1.40–1:1.78. Modern iPhones are mainly around 1:1.60–1:1.63, and mainstream Android devices around 1:1.70–1:1.78. Use 375×524 as the minimum-height reference, 402×646 as the primary design reference, and 412×732 as the tall-screen reference. Continue responding to container changes even when actual dimensions fall outside this range.