@playcraft/skills 0.0.2

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 (479) hide show
  1. package/README.md +333 -0
  2. package/dist/src/index.d.ts +3 -0
  3. package/dist/src/index.d.ts.map +1 -0
  4. package/dist/src/index.js +2 -0
  5. package/dist/src/index.js.map +1 -0
  6. package/dist/src/skills.loader.d.ts +31 -0
  7. package/dist/src/skills.loader.d.ts.map +1 -0
  8. package/dist/src/skills.loader.js +200 -0
  9. package/dist/src/skills.loader.js.map +1 -0
  10. package/dist/src/skills.types.d.ts +44 -0
  11. package/dist/src/skills.types.d.ts.map +1 -0
  12. package/dist/src/skills.types.js +9 -0
  13. package/dist/src/skills.types.js.map +1 -0
  14. package/package.json +35 -0
  15. package/skills/2048_core.aigameplay/SKILL.md +123 -0
  16. package/skills/2048_core.aigameplay/manifest.json +159 -0
  17. package/skills/2048_core.aigameplay/ref/pgs-schema.json +194 -0
  18. package/skills/2048_core.aigameplay/ref/reducer.template.ts +189 -0
  19. package/skills/SKILL.md +46 -0
  20. package/skills/ad_compliance_rules.aiconfig/SKILL.md +85 -0
  21. package/skills/ad_compliance_rules.aiconfig/manifest.json +60 -0
  22. package/skills/agent_remix_orchestrator.aicomponent/SKILL.md +257 -0
  23. package/skills/agent_remix_orchestrator.aicomponent/manifest.json +12 -0
  24. package/skills/app_metadata.aiconfig/SKILL.md +53 -0
  25. package/skills/app_metadata.aiconfig/manifest.json +32 -0
  26. package/skills/appear_sfx.aiaudio/SKILL.md +59 -0
  27. package/skills/appear_sfx.aiaudio/manifest.json +45 -0
  28. package/skills/appear_sfx.aiaudio/ref/appear.mp3 +0 -0
  29. package/skills/arrow_move_error_sfx.aiaudio/SKILL.md +59 -0
  30. package/skills/arrow_move_error_sfx.aiaudio/manifest.json +45 -0
  31. package/skills/arrow_move_error_sfx.aiaudio/ref/arrow_move_error.mp3 +0 -0
  32. package/skills/arrow_path_data_format.aicomponent/SKILL.md +152 -0
  33. package/skills/arrow_path_data_format.aicomponent/manifest.json +57 -0
  34. package/skills/arrow_path_data_format.aicomponent/ref/LevelParser.ts +188 -0
  35. package/skills/arrow_path_data_format.aicomponent/ref/LevelTypes.ts +131 -0
  36. package/skills/arrow_pick_match_rules.aigameplay/SKILL.md +117 -0
  37. package/skills/arrow_pick_match_rules.aigameplay/manifest.json +105 -0
  38. package/skills/arrow_pick_match_rules.aigameplay/ref/pgs-schema.json +180 -0
  39. package/skills/asset_pipeline_scripts.aicomponent/SKILL.md +117 -0
  40. package/skills/asset_pipeline_scripts.aicomponent/manifest.json +17 -0
  41. package/skills/asset_pipeline_scripts.aicomponent/ref/gen-sprite.sh +105 -0
  42. package/skills/ball_sort.aigameplay/SKILL.md +109 -0
  43. package/skills/ball_sort.aigameplay/manifest.json +155 -0
  44. package/skills/ball_sort.aigameplay/ref/pgs-schema.json +192 -0
  45. package/skills/ball_sort.aigameplay/ref/reducer.template.ts +156 -0
  46. package/skills/basketball_shot.aigameplay/SKILL.md +94 -0
  47. package/skills/basketball_shot.aigameplay/manifest.json +150 -0
  48. package/skills/basketball_shot.aigameplay/ref/pgs-schema.json +229 -0
  49. package/skills/basketball_shot.aigameplay/ref/reducer.template.ts +189 -0
  50. package/skills/bg_music.aiaudio/SKILL.md +61 -0
  51. package/skills/bg_music.aiaudio/manifest.json +48 -0
  52. package/skills/bg_music.aiaudio/ref/bg.mp3 +0 -0
  53. package/skills/big_watermelon.aigameplay/SKILL.md +94 -0
  54. package/skills/big_watermelon.aigameplay/manifest.json +155 -0
  55. package/skills/big_watermelon.aigameplay/ref/pgs-schema.json +191 -0
  56. package/skills/big_watermelon.aigameplay/ref/reducer.template.ts +202 -0
  57. package/skills/block_puzzle.aigameplay/SKILL.md +121 -0
  58. package/skills/block_puzzle.aigameplay/manifest.json +154 -0
  59. package/skills/block_puzzle.aigameplay/ref/pgs-schema.json +170 -0
  60. package/skills/block_puzzle.aigameplay/ref/reducer.template.ts +182 -0
  61. package/skills/board_entity_sprite.aiimage/SKILL.md +255 -0
  62. package/skills/board_entity_sprite.aiimage/manifest.json +153 -0
  63. package/skills/board_entity_sprite.aiimage/ref/ProceduralCar.ts +357 -0
  64. package/skills/board_entity_sprite.aiimage/ref/car.png +0 -0
  65. package/skills/board_entity_sprite.aiimage/ref/car.webp +0 -0
  66. package/skills/bottom_ui_bar.aicomponent/SKILL.md +50 -0
  67. package/skills/bottom_ui_bar.aicomponent/manifest.json +31 -0
  68. package/skills/bottom_ui_bar.aicomponent/ref/GameBottomUI.ts +27 -0
  69. package/skills/bubble_shooter.aigameplay/SKILL.md +129 -0
  70. package/skills/bubble_shooter.aigameplay/manifest.json +181 -0
  71. package/skills/bubble_shooter.aigameplay/ref/pgs-schema.json +226 -0
  72. package/skills/bubble_shooter.aigameplay/ref/reducer.template.ts +228 -0
  73. package/skills/button_click_sfx.aiaudio/SKILL.md +59 -0
  74. package/skills/button_click_sfx.aiaudio/manifest.json +45 -0
  75. package/skills/button_click_sfx.aiaudio/ref/button_click.mp3 +0 -0
  76. package/skills/calm_piano.aiaudio/SKILL.md +68 -0
  77. package/skills/calm_piano.aiaudio/manifest.json +50 -0
  78. package/skills/camera_controller_3d.aicomponent/SKILL.md +100 -0
  79. package/skills/camera_controller_3d.aicomponent/manifest.json +52 -0
  80. package/skills/camera_controller_3d.aicomponent/ref/CameraController.ts +199 -0
  81. package/skills/camera_controller_3d.aicomponent/ref/OrbitControlsAdapter.ts +152 -0
  82. package/skills/candy_tile.aiimage/SKILL.md +62 -0
  83. package/skills/candy_tile.aiimage/manifest.json +49 -0
  84. package/skills/car_parking.aigameplay/SKILL.md +105 -0
  85. package/skills/car_parking.aigameplay/manifest.json +164 -0
  86. package/skills/car_parking.aigameplay/ref/pgs-schema.json +163 -0
  87. package/skills/car_parking.aigameplay/ref/reducer.template.ts +166 -0
  88. package/skills/castle.aiimage/SKILL.md +64 -0
  89. package/skills/castle.aiimage/manifest.json +48 -0
  90. package/skills/cheerful_ukulele.aiaudio/SKILL.md +72 -0
  91. package/skills/cheerful_ukulele.aiaudio/manifest.json +50 -0
  92. package/skills/click_sfx.aiaudio/SKILL.md +59 -0
  93. package/skills/click_sfx.aiaudio/manifest.json +45 -0
  94. package/skills/click_sfx.aiaudio/ref/click.mp3 +0 -0
  95. package/skills/combo_display.aicomponent/SKILL.md +45 -0
  96. package/skills/combo_display.aicomponent/manifest.json +31 -0
  97. package/skills/combo_display.aicomponent/ref/ComboManager.ts +362 -0
  98. package/skills/combo_display.aicomponent/ref/ComboSmallUI.ts +232 -0
  99. package/skills/combo_praise_text.aicomponent/SKILL.md +56 -0
  100. package/skills/combo_praise_text.aicomponent/manifest.json +34 -0
  101. package/skills/combo_praise_text.aicomponent/ref/ComboManager.ts +362 -0
  102. package/skills/countdown_timer.aicomponent/SKILL.md +44 -0
  103. package/skills/countdown_timer.aicomponent/manifest.json +35 -0
  104. package/skills/countdown_timer.aicomponent/ref/CountdownDisplay.ts +213 -0
  105. package/skills/cta_platform_config.aiconfig/SKILL.md +72 -0
  106. package/skills/cta_platform_config.aiconfig/manifest.json +56 -0
  107. package/skills/debug_overlay.aicomponent/SKILL.md +75 -0
  108. package/skills/debug_overlay.aicomponent/manifest.json +17 -0
  109. package/skills/debug_overlay.aicomponent/ref/DebugOverlay.ts +144 -0
  110. package/skills/desert.aiimage/SKILL.md +63 -0
  111. package/skills/desert.aiimage/manifest.json +49 -0
  112. package/skills/difficulty_curve_designer.aiconfig/SKILL.md +68 -0
  113. package/skills/difficulty_curve_designer.aiconfig/manifest.json +36 -0
  114. package/skills/digit_renderer.aicomponent/SKILL.md +43 -0
  115. package/skills/digit_renderer.aicomponent/manifest.json +25 -0
  116. package/skills/digit_renderer.aicomponent/ref/DigitRenderer.ts +237 -0
  117. package/skills/download_button.aicomponent/SKILL.md +44 -0
  118. package/skills/download_button.aicomponent/manifest.json +25 -0
  119. package/skills/download_button.aicomponent/ref/DownloadButton.ts +137 -0
  120. package/skills/draw_line_puzzle.aigameplay/SKILL.md +84 -0
  121. package/skills/draw_line_puzzle.aigameplay/manifest.json +152 -0
  122. package/skills/draw_line_puzzle.aigameplay/ref/pgs-schema.json +189 -0
  123. package/skills/draw_line_puzzle.aigameplay/ref/reducer.template.ts +194 -0
  124. package/skills/easy_to_hard.aiconfig/SKILL.md +52 -0
  125. package/skills/easy_to_hard.aiconfig/manifest.json +33 -0
  126. package/skills/eight_ball_pool.aigameplay/SKILL.md +104 -0
  127. package/skills/eight_ball_pool.aigameplay/manifest.json +152 -0
  128. package/skills/eight_ball_pool.aigameplay/ref/pgs-schema.json +205 -0
  129. package/skills/eight_ball_pool.aigameplay/ref/reducer.template.ts +198 -0
  130. package/skills/energetic_electronic.aiaudio/SKILL.md +69 -0
  131. package/skills/energetic_electronic.aiaudio/manifest.json +51 -0
  132. package/skills/fail_sfx.aiaudio/SKILL.md +59 -0
  133. package/skills/fail_sfx.aiaudio/manifest.json +44 -0
  134. package/skills/fail_sfx.aiaudio/ref/fail.mp3 +0 -0
  135. package/skills/figer_icon.aiimage/SKILL.md +58 -0
  136. package/skills/figer_icon.aiimage/manifest.json +48 -0
  137. package/skills/figer_icon.aiimage/ref/figer.png +0 -0
  138. package/skills/figer_icon.aiimage/ref/figer.webp +0 -0
  139. package/skills/forest.aiimage/SKILL.md +74 -0
  140. package/skills/forest.aiimage/manifest.json +48 -0
  141. package/skills/fruit_tile.aiimage/SKILL.md +68 -0
  142. package/skills/fruit_tile.aiimage/manifest.json +48 -0
  143. package/skills/game_over_panel.aicomponent/SKILL.md +47 -0
  144. package/skills/game_over_panel.aicomponent/manifest.json +61 -0
  145. package/skills/game_over_panel.aicomponent/ref/GameOverPanel.ts +74 -0
  146. package/skills/game_scene.aicomponent/SKILL.md +57 -0
  147. package/skills/game_scene.aicomponent/manifest.json +36 -0
  148. package/skills/game_scene.aicomponent/ref/Game.ts +748 -0
  149. package/skills/gameplay_balance_check.aivalidator/SKILL.md +69 -0
  150. package/skills/gameplay_balance_check.aivalidator/manifest.json +21 -0
  151. package/skills/gameplay_unit_test.aivalidator/SKILL.md +89 -0
  152. package/skills/gameplay_unit_test.aivalidator/manifest.json +17 -0
  153. package/skills/gameplay_unit_test.aivalidator/ref/gameplay.test.ts +202 -0
  154. package/skills/gameplay_unit_test.aivalidator/ref/vitest.config.ts +13 -0
  155. package/skills/grid_board_layout.aicomponent/SKILL.md +85 -0
  156. package/skills/grid_board_layout.aicomponent/manifest.json +69 -0
  157. package/skills/grid_board_layout.aicomponent/ref/BoardLayout.ts +416 -0
  158. package/skills/grid_board_layout.aicomponent/ref/BoardLayout3D.ts +125 -0
  159. package/skills/grid_board_layout.aicomponent/ref/BoardLayoutMath.ts +85 -0
  160. package/skills/grid_board_layout.aicomponent/ref/BoardRenderer3D.ts +298 -0
  161. package/skills/heart_lives.aicomponent/SKILL.md +42 -0
  162. package/skills/heart_lives.aicomponent/manifest.json +25 -0
  163. package/skills/heart_lives.aicomponent/ref/HeartDisplay.ts +96 -0
  164. package/skills/idle-breathe.aicomponent/SKILL.md +27 -0
  165. package/skills/idle-breathe.aicomponent/manifest.json +20 -0
  166. package/skills/idle-breathe.aicomponent/ref/phaser.js +25 -0
  167. package/skills/idle-breathe.aicomponent/ref/playcanvas.js +29 -0
  168. package/skills/jewel_tile.aiimage/SKILL.md +63 -0
  169. package/skills/jewel_tile.aiimage/manifest.json +49 -0
  170. package/skills/knife_hit.aigameplay/SKILL.md +103 -0
  171. package/skills/knife_hit.aigameplay/manifest.json +151 -0
  172. package/skills/knife_hit.aigameplay/ref/pgs-schema.json +202 -0
  173. package/skills/knife_hit.aigameplay/ref/reducer.template.ts +196 -0
  174. package/skills/left_right_parkour.aigameplay/SKILL.md +120 -0
  175. package/skills/left_right_parkour.aigameplay/manifest.json +165 -0
  176. package/skills/left_right_parkour.aigameplay/ref/pgs-schema.json +200 -0
  177. package/skills/left_right_parkour.aigameplay/ref/reducer.template.ts +194 -0
  178. package/skills/level_data_pack.aiconfig/SKILL.md +64 -0
  179. package/skills/level_data_pack.aiconfig/manifest.json +37 -0
  180. package/skills/level_data_validator.aivalidator/SKILL.md +85 -0
  181. package/skills/level_data_validator.aivalidator/manifest.json +17 -0
  182. package/skills/level_data_validator.aivalidator/ref/LevelValidator.ts +113 -0
  183. package/skills/level_lifecycle.aicomponent/SKILL.md +81 -0
  184. package/skills/level_lifecycle.aicomponent/manifest.json +87 -0
  185. package/skills/level_lifecycle.aicomponent/ref/LevelLifecycle.ts +235 -0
  186. package/skills/level_solvability_validator.aivalidator/SKILL.md +74 -0
  187. package/skills/level_solvability_validator.aivalidator/manifest.json +23 -0
  188. package/skills/level_solvability_validator.aivalidator/ref/LevelValidator.ts +186 -0
  189. package/skills/level_state.aicomponent/SKILL.md +55 -0
  190. package/skills/level_state.aicomponent/manifest.json +34 -0
  191. package/skills/level_state.aicomponent/ref/LevelDataManager.ts +26 -0
  192. package/skills/level_state.aicomponent/ref/LevelManager.ts +26 -0
  193. package/skills/loading_screen.aicomponent/SKILL.md +57 -0
  194. package/skills/loading_screen.aicomponent/manifest.json +43 -0
  195. package/skills/loading_screen.aicomponent/ref/LoadingUI.ts +339 -0
  196. package/skills/lose_result_panel.aiimage/SKILL.md +58 -0
  197. package/skills/lose_result_panel.aiimage/manifest.json +47 -0
  198. package/skills/lose_result_panel.aiimage/ref/lose.png +0 -0
  199. package/skills/lose_result_panel.aiimage/ref/lose.webp +0 -0
  200. package/skills/lose_sfx.aiaudio/SKILL.md +59 -0
  201. package/skills/lose_sfx.aiaudio/manifest.json +45 -0
  202. package/skills/lose_sfx.aiaudio/ref/lose.mp3 +0 -0
  203. package/skills/match-pop.aicomponent/SKILL.md +29 -0
  204. package/skills/match-pop.aicomponent/manifest.json +19 -0
  205. package/skills/match-pop.aicomponent/ref/phaser.js +30 -0
  206. package/skills/match-pop.aicomponent/ref/playcanvas.js +22 -0
  207. package/skills/match3_core.aigameplay/SKILL.md +125 -0
  208. package/skills/match3_core.aigameplay/manifest.json +107 -0
  209. package/skills/match3_core.aigameplay/ref/pgs-schema.json +154 -0
  210. package/skills/match3_core.aigameplay/ref/reducer.template.ts +191 -0
  211. package/skills/match_engine.aicomponent/SKILL.md +84 -0
  212. package/skills/match_engine.aicomponent/manifest.json +23 -0
  213. package/skills/match_engine.aicomponent/ref/MatchEngine.ts +75 -0
  214. package/skills/memory_match.aigameplay/SKILL.md +111 -0
  215. package/skills/memory_match.aigameplay/manifest.json +164 -0
  216. package/skills/memory_match.aigameplay/ref/pgs-schema.json +190 -0
  217. package/skills/memory_match.aigameplay/ref/reducer.template.ts +162 -0
  218. package/skills/merge_core.aigameplay/SKILL.md +112 -0
  219. package/skills/merge_core.aigameplay/manifest.json +154 -0
  220. package/skills/merge_core.aigameplay/ref/pgs-schema.json +202 -0
  221. package/skills/merge_core.aigameplay/ref/reducer.template.ts +179 -0
  222. package/skills/mistake_sfx.aiaudio/SKILL.md +59 -0
  223. package/skills/mistake_sfx.aiaudio/manifest.json +45 -0
  224. package/skills/mistake_sfx.aiaudio/ref/mistake.mp3 +0 -0
  225. package/skills/nomove_hint_overlay.aiimage/SKILL.md +58 -0
  226. package/skills/nomove_hint_overlay.aiimage/manifest.json +48 -0
  227. package/skills/nomove_hint_overlay.aiimage/ref/nomove_hint.png +0 -0
  228. package/skills/nomove_hint_overlay.aiimage/ref/nomove_hint.webp +0 -0
  229. package/skills/normal_dot.aiimage/SKILL.md +58 -0
  230. package/skills/normal_dot.aiimage/manifest.json +46 -0
  231. package/skills/normal_dot.aiimage/ref/normal_dot.png +0 -0
  232. package/skills/normal_dot.aiimage/ref/normal_dot.webp +0 -0
  233. package/skills/ocean.aiimage/SKILL.md +71 -0
  234. package/skills/ocean.aiimage/manifest.json +49 -0
  235. package/skills/particle-confetti.aicomponent/SKILL.md +32 -0
  236. package/skills/particle-confetti.aicomponent/manifest.json +21 -0
  237. package/skills/particle-confetti.aicomponent/ref/html5-spritesheet.js +17 -0
  238. package/skills/particle-confetti.aicomponent/ref/phaser.js +38 -0
  239. package/skills/particle-explosion.aicomponent/SKILL.md +37 -0
  240. package/skills/particle-explosion.aicomponent/manifest.json +24 -0
  241. package/skills/particle-explosion.aicomponent/ref/html5-spritesheet.js +40 -0
  242. package/skills/particle-explosion.aicomponent/ref/phaser.js +46 -0
  243. package/skills/particle-explosion.aicomponent/ref/playcanvas.js +33 -0
  244. package/skills/particle-trail.aicomponent/SKILL.md +25 -0
  245. package/skills/particle-trail.aicomponent/manifest.json +22 -0
  246. package/skills/particle-trail.aicomponent/ref/phaser.js +31 -0
  247. package/skills/path_animation.aicomponent/SKILL.md +82 -0
  248. package/skills/path_animation.aicomponent/manifest.json +77 -0
  249. package/skills/path_animation.aicomponent/ref/AnimationManager.ts +694 -0
  250. package/skills/path_animation.aicomponent/ref/AnimationManager3D.ts +317 -0
  251. package/skills/path_elimination_rules.aigameplay/SKILL.md +88 -0
  252. package/skills/path_elimination_rules.aigameplay/manifest.json +119 -0
  253. package/skills/path_elimination_rules.aigameplay/ref/pgs-schema.json +227 -0
  254. package/skills/path_input_handler.aicomponent/SKILL.md +87 -0
  255. package/skills/path_input_handler.aicomponent/manifest.json +97 -0
  256. package/skills/path_input_handler.aicomponent/ref/InputHandler.ts +714 -0
  257. package/skills/path_input_handler.aicomponent/ref/InputHandler3D.ts +204 -0
  258. package/skills/path_renderer.aicomponent/SKILL.md +101 -0
  259. package/skills/path_renderer.aicomponent/manifest.json +69 -0
  260. package/skills/path_renderer.aicomponent/ref/PathRenderer.ts +509 -0
  261. package/skills/path_renderer.aicomponent/ref/PathRenderer3D.ts +176 -0
  262. package/skills/path_renderer.aicomponent/ref/PathRenderers.ts +640 -0
  263. package/skills/phaser.aicomponent/SKILL.md +315 -0
  264. package/skills/phaser.aicomponent/manifest.json +156 -0
  265. package/skills/phaser.aicomponent/ref/BootScene.ts +29 -0
  266. package/skills/phaser.aicomponent/ref/GameConfig.ts +29 -0
  267. package/skills/phaser.aicomponent/ref/GameScene.ts +88 -0
  268. package/skills/phaser.aicomponent/ref/PreloaderScene.ts +78 -0
  269. package/skills/phaser.aicomponent/ref/SceneKeys.ts +7 -0
  270. package/skills/phaser.aicomponent/ref/SoundUtils.ts +21 -0
  271. package/skills/phaser.aicomponent/ref/UiLayout.ts +74 -0
  272. package/skills/phaser.aicomponent/ref/globals.d.ts +52 -0
  273. package/skills/phaser.aicomponent/ref/index.css +40 -0
  274. package/skills/phaser.aicomponent/ref/index.html +14 -0
  275. package/skills/phaser.aicomponent/ref/index.ts +48 -0
  276. package/skills/phaser.aicomponent/ref/main.ts +16 -0
  277. package/skills/phaser.aicomponent/ref/package.json +22 -0
  278. package/skills/phaser.aicomponent/ref/tsconfig.json +25 -0
  279. package/skills/phaser.aicomponent/ref/webpack.config.js +57 -0
  280. package/skills/phaser_scene_lifecycle.aicomponent/SKILL.md +63 -0
  281. package/skills/phaser_scene_lifecycle.aicomponent/manifest.json +33 -0
  282. package/skills/pick_and_match_rules.aigameplay/SKILL.md +113 -0
  283. package/skills/pick_and_match_rules.aigameplay/manifest.json +121 -0
  284. package/skills/pick_and_match_rules.aigameplay/ref/pgs-schema.json +354 -0
  285. package/skills/pin_pull.aigameplay/SKILL.md +110 -0
  286. package/skills/pin_pull.aigameplay/manifest.json +164 -0
  287. package/skills/pin_pull.aigameplay/ref/pgs-schema.json +201 -0
  288. package/skills/pin_pull.aigameplay/ref/reducer.template.ts +216 -0
  289. package/skills/playable_app_logo.aiimage/SKILL.md +58 -0
  290. package/skills/playable_app_logo.aiimage/manifest.json +47 -0
  291. package/skills/playable_app_logo.aiimage/ref/logo.png +0 -0
  292. package/skills/playable_app_logo.aiimage/ref/logo.webp +0 -0
  293. package/skills/playable_end_screen_layout.aicomponent/SKILL.md +75 -0
  294. package/skills/playable_end_screen_layout.aicomponent/manifest.json +24 -0
  295. package/skills/playable_guidance_layer.aicomponent/SKILL.md +89 -0
  296. package/skills/playable_guidance_layer.aicomponent/manifest.json +24 -0
  297. package/skills/playable_hud_layout.aicomponent/SKILL.md +96 -0
  298. package/skills/playable_hud_layout.aicomponent/manifest.json +24 -0
  299. package/skills/playable_scripts_build.aicomponent/SKILL.md +69 -0
  300. package/skills/playable_scripts_build.aicomponent/manifest.json +53 -0
  301. package/skills/playable_scripts_build.aicomponent/ref/builds.config.js +257 -0
  302. package/skills/playcraft-3d-flip-sprite/SKILL.md +336 -0
  303. package/skills/playcraft-3d-flip-sprite/renderer/flatten_glb.mjs +62 -0
  304. package/skills/playcraft-3d-flip-sprite/renderer/render.mjs +325 -0
  305. package/skills/playcraft-3d-flip-sprite/renderer/render_single.mjs +138 -0
  306. package/skills/playcraft-asset-management/SKILL.md +73 -0
  307. package/skills/playcraft-audio-generation/SKILL.md +126 -0
  308. package/skills/playcraft-build/SKILL.md +44 -0
  309. package/skills/playcraft-code-editor/SKILL.md +71 -0
  310. package/skills/playcraft-create-remix/SKILL.md +62 -0
  311. package/skills/playcraft-deploy/SKILL.md +59 -0
  312. package/skills/playcraft-image-generation/SKILL.md +148 -0
  313. package/skills/playcraft-image-processing/SKILL.md +216 -0
  314. package/skills/playcraft-platform-intro/SKILL.md +41 -0
  315. package/skills/playcraft-prefab/SKILL.md +98 -0
  316. package/skills/playcraft-project-management/SKILL.md +57 -0
  317. package/skills/playcraft-remix-workflow/SKILL.md +119 -0
  318. package/skills/playcraft-remix-workflow/references/xplatform.schema.json5 +31 -0
  319. package/skills/playcraft-save/SKILL.md +46 -0
  320. package/skills/playcraft-skill-recommender/SKILL.md +152 -0
  321. package/skills/playcraft-sprite-generation/SKILL.md +534 -0
  322. package/skills/playcraft-sprite-remix/SKILL.md +155 -0
  323. package/skills/playcraft-sprite-sheet/SKILL.md +97 -0
  324. package/skills/playtest_report.aivalidator/SKILL.md +103 -0
  325. package/skills/playtest_report.aivalidator/manifest.json +21 -0
  326. package/skills/preloader_scene.aicomponent/SKILL.md +58 -0
  327. package/skills/preloader_scene.aicomponent/manifest.json +43 -0
  328. package/skills/preloader_scene.aicomponent/ref/Preloader.ts +339 -0
  329. package/skills/progress_bar.aicomponent/SKILL.md +38 -0
  330. package/skills/progress_bar.aicomponent/manifest.json +25 -0
  331. package/skills/progress_bar.aicomponent/ref/ProgressDisplay.ts +140 -0
  332. package/skills/references/xplatform.schema.json5 +31 -0
  333. package/skills/responsive_2d_layout.aicomponent/SKILL.md +161 -0
  334. package/skills/responsive_2d_layout.aicomponent/manifest.json +43 -0
  335. package/skills/responsive_2d_layout.aicomponent/ref/UiLayout.ts +56 -0
  336. package/skills/run_context_state.aicomponent/SKILL.md +54 -0
  337. package/skills/run_context_state.aicomponent/manifest.json +40 -0
  338. package/skills/run_context_state.aicomponent/ref/RunContextRuntime.ts +30 -0
  339. package/skills/score-fly.aicomponent/SKILL.md +31 -0
  340. package/skills/score-fly.aicomponent/manifest.json +21 -0
  341. package/skills/score-fly.aicomponent/ref/phaser.js +26 -0
  342. package/skills/score-fly.aicomponent/ref/playcanvas.js +28 -0
  343. package/skills/score_goal.aiconfig/SKILL.md +46 -0
  344. package/skills/score_goal.aiconfig/manifest.json +33 -0
  345. package/skills/screen-flash.aicomponent/SKILL.md +30 -0
  346. package/skills/screen-flash.aicomponent/manifest.json +20 -0
  347. package/skills/screen-flash.aicomponent/ref/phaser.js +48 -0
  348. package/skills/screen-shake.aicomponent/SKILL.md +30 -0
  349. package/skills/screen-shake.aicomponent/manifest.json +19 -0
  350. package/skills/screen-shake.aicomponent/ref/phaser.js +23 -0
  351. package/skills/screen-shake.aicomponent/ref/playcanvas.js +44 -0
  352. package/skills/screw_puzzle.aigameplay/SKILL.md +116 -0
  353. package/skills/screw_puzzle.aigameplay/manifest.json +164 -0
  354. package/skills/screw_puzzle.aigameplay/ref/pgs-schema.json +235 -0
  355. package/skills/screw_puzzle.aigameplay/ref/reducer.template.ts +213 -0
  356. package/skills/settings_state.aicomponent/SKILL.md +61 -0
  357. package/skills/settings_state.aicomponent/manifest.json +33 -0
  358. package/skills/settings_state.aicomponent/ref/SettingsManager.ts +130 -0
  359. package/skills/slide_out_to_tray_animation.aicomponent/SKILL.md +64 -0
  360. package/skills/slide_out_to_tray_animation.aicomponent/manifest.json +58 -0
  361. package/skills/slide_out_to_tray_animation.aicomponent/ref/AnimationManager.ts +164 -0
  362. package/skills/slide_out_to_tray_animation.aicomponent/ref/AnimationManager3D.ts +198 -0
  363. package/skills/slide_out_to_tray_animation.aicomponent/ref/BezierUtils.ts +59 -0
  364. package/skills/slot_machine.aigameplay/SKILL.md +119 -0
  365. package/skills/slot_machine.aigameplay/manifest.json +166 -0
  366. package/skills/slot_machine.aigameplay/ref/pgs-schema.json +212 -0
  367. package/skills/slot_machine.aigameplay/ref/reducer.template.ts +212 -0
  368. package/skills/sniper_shot.aigameplay/SKILL.md +84 -0
  369. package/skills/sniper_shot.aigameplay/manifest.json +153 -0
  370. package/skills/sniper_shot.aigameplay/ref/pgs-schema.json +211 -0
  371. package/skills/sniper_shot.aigameplay/ref/reducer.template.ts +211 -0
  372. package/skills/solitaire.aigameplay/SKILL.md +101 -0
  373. package/skills/solitaire.aigameplay/manifest.json +151 -0
  374. package/skills/solitaire.aigameplay/ref/pgs-schema.json +200 -0
  375. package/skills/solitaire.aigameplay/ref/reducer.template.ts +176 -0
  376. package/skills/sound-effects/SKILL.md +46 -0
  377. package/skills/sound_utils.aicomponent/SKILL.md +52 -0
  378. package/skills/sound_utils.aicomponent/manifest.json +30 -0
  379. package/skills/sound_utils.aicomponent/ref/SoundUtils.ts +29 -0
  380. package/skills/sprite-animation-2d.aicomponent/SKILL.md +45 -0
  381. package/skills/sprite-animation-2d.aicomponent/manifest.json +28 -0
  382. package/skills/sprite-animation-2d.aicomponent/ref/html5.js +83 -0
  383. package/skills/sprite-animation-2d.aicomponent/ref/phaser.js +38 -0
  384. package/skills/sprite-animation-2d.aicomponent/ref/playcanvas.js +67 -0
  385. package/skills/sprite_entity_renderer.aicomponent/SKILL.md +148 -0
  386. package/skills/sprite_entity_renderer.aicomponent/manifest.json +17 -0
  387. package/skills/sprite_entity_renderer.aicomponent/ref/SpriteEntityRenderer.ts +126 -0
  388. package/skills/success_sfx.aiaudio/SKILL.md +59 -0
  389. package/skills/success_sfx.aiaudio/manifest.json +45 -0
  390. package/skills/success_sfx.aiaudio/ref/success.mp3 +0 -0
  391. package/skills/tap_blast.aigameplay/SKILL.md +116 -0
  392. package/skills/tap_blast.aigameplay/manifest.json +153 -0
  393. package/skills/tap_blast.aigameplay/ref/pgs-schema.json +208 -0
  394. package/skills/tap_blast.aigameplay/ref/reducer.template.ts +202 -0
  395. package/skills/theme_state.aicomponent/SKILL.md +53 -0
  396. package/skills/theme_state.aicomponent/manifest.json +33 -0
  397. package/skills/theme_state.aicomponent/ref/ThemeManager.ts +174 -0
  398. package/skills/theme_switcher_build.aicomponent/SKILL.md +62 -0
  399. package/skills/theme_switcher_build.aicomponent/manifest.json +38 -0
  400. package/skills/theme_switcher_build.aicomponent/ref/theme-index.ts +8 -0
  401. package/skills/theme_variant.aiconfig/SKILL.md +78 -0
  402. package/skills/theme_variant.aiconfig/manifest.json +39 -0
  403. package/skills/theme_variant.aiconfig/ref/ExampleTheme/index.ts +16 -0
  404. package/skills/theme_variant.aiconfig/ref/ExampleTheme/levelEasy.json +141 -0
  405. package/skills/threejs.aicomponent/SKILL.md +422 -0
  406. package/skills/threejs.aicomponent/manifest.json +166 -0
  407. package/skills/threejs.aicomponent/ref/AssetLoader.ts +158 -0
  408. package/skills/threejs.aicomponent/ref/BaseScene.ts +88 -0
  409. package/skills/threejs.aicomponent/ref/GameConfig.ts +47 -0
  410. package/skills/threejs.aicomponent/ref/MainScene.ts +170 -0
  411. package/skills/threejs.aicomponent/ref/PreloaderScene.ts +93 -0
  412. package/skills/threejs.aicomponent/ref/SceneKeys.ts +6 -0
  413. package/skills/threejs.aicomponent/ref/SceneManager.ts +69 -0
  414. package/skills/threejs.aicomponent/ref/ViewportManager.ts +62 -0
  415. package/skills/threejs.aicomponent/ref/globals.d.ts +74 -0
  416. package/skills/threejs.aicomponent/ref/index.css +80 -0
  417. package/skills/threejs.aicomponent/ref/index.html +20 -0
  418. package/skills/threejs.aicomponent/ref/index.ts +117 -0
  419. package/skills/threejs.aicomponent/ref/main.ts +10 -0
  420. package/skills/threejs.aicomponent/ref/package.json +23 -0
  421. package/skills/threejs.aicomponent/ref/tsconfig.json +24 -0
  422. package/skills/threejs.aicomponent/ref/webpack.config.js +61 -0
  423. package/skills/time_clear_goal.aiconfig/SKILL.md +46 -0
  424. package/skills/time_clear_goal.aiconfig/manifest.json +32 -0
  425. package/skills/time_icon.aiimage/SKILL.md +58 -0
  426. package/skills/time_icon.aiimage/manifest.json +47 -0
  427. package/skills/time_icon.aiimage/ref/time.png +0 -0
  428. package/skills/time_icon.aiimage/ref/time.webp +0 -0
  429. package/skills/top_ui_bar.aicomponent/SKILL.md +45 -0
  430. package/skills/top_ui_bar.aicomponent/manifest.json +27 -0
  431. package/skills/top_ui_bar.aicomponent/ref/GameTopUI.ts +229 -0
  432. package/skills/tower_defence.aigameplay/SKILL.md +117 -0
  433. package/skills/tower_defence.aigameplay/manifest.json +175 -0
  434. package/skills/tower_defence.aigameplay/ref/pgs-schema.json +247 -0
  435. package/skills/tower_defence.aigameplay/ref/reducer.template.ts +239 -0
  436. package/skills/tray_container.aicomponent/SKILL.md +143 -0
  437. package/skills/tray_container.aicomponent/manifest.json +58 -0
  438. package/skills/tray_container.aicomponent/ref/TrayRenderer.ts +155 -0
  439. package/skills/tray_container.aicomponent/ref/TrayRenderer3D.ts +281 -0
  440. package/skills/tray_container.aicomponent/ref/TrayRendererHtmlOverlay.ts +228 -0
  441. package/skills/tutorial_overlay.aicomponent/SKILL.md +46 -0
  442. package/skills/tutorial_overlay.aicomponent/manifest.json +34 -0
  443. package/skills/tutorial_overlay.aicomponent/ref/TutorialManager.ts +367 -0
  444. package/skills/tween-animation-2d.aicomponent/SKILL.md +35 -0
  445. package/skills/tween-animation-2d.aicomponent/manifest.json +28 -0
  446. package/skills/tween-animation-2d.aicomponent/ref/phaser.js +49 -0
  447. package/skills/tween-animation-2d.aicomponent/ref/playcanvas.js +36 -0
  448. package/skills/typescript_module_patterns.aicomponent/SKILL.md +209 -0
  449. package/skills/typescript_module_patterns.aicomponent/manifest.json +28 -0
  450. package/skills/typescript_module_patterns.aicomponent/ref/globals.d.ts +31 -0
  451. package/skills/ui-transition.aicomponent/SKILL.md +33 -0
  452. package/skills/ui-transition.aicomponent/manifest.json +19 -0
  453. package/skills/ui-transition.aicomponent/ref/phaser.js +45 -0
  454. package/skills/ux_flow_spec.aiconfig/SKILL.md +82 -0
  455. package/skills/ux_flow_spec.aiconfig/manifest.json +39 -0
  456. package/skills/wave_difficulty.aiconfig/SKILL.md +46 -0
  457. package/skills/wave_difficulty.aiconfig/manifest.json +33 -0
  458. package/skills/webpack_build.aicomponent/SKILL.md +204 -0
  459. package/skills/webpack_build.aicomponent/manifest.json +29 -0
  460. package/skills/webpack_build.aicomponent/ref/package.json +16 -0
  461. package/skills/webpack_build.aicomponent/ref/webpack.config.js +53 -0
  462. package/skills/win_anim_sfx.aiaudio/SKILL.md +59 -0
  463. package/skills/win_anim_sfx.aiaudio/manifest.json +46 -0
  464. package/skills/win_anim_sfx.aiaudio/ref/win_anim.mp3 +0 -0
  465. package/skills/win_dot.aiimage/SKILL.md +58 -0
  466. package/skills/win_dot.aiimage/manifest.json +47 -0
  467. package/skills/win_dot.aiimage/ref/win_dot.png +0 -0
  468. package/skills/win_dot.aiimage/ref/win_dot.webp +0 -0
  469. package/skills/win_result_panel.aiimage/SKILL.md +58 -0
  470. package/skills/win_result_panel.aiimage/manifest.json +47 -0
  471. package/skills/win_result_panel.aiimage/ref/win.png +0 -0
  472. package/skills/win_result_panel.aiimage/ref/win.webp +0 -0
  473. package/skills/word_connect.aigameplay/SKILL.md +86 -0
  474. package/skills/word_connect.aigameplay/manifest.json +154 -0
  475. package/skills/word_connect.aigameplay/ref/pgs-schema.json +212 -0
  476. package/skills/word_connect.aigameplay/ref/reducer.template.ts +186 -0
  477. package/src/index.ts +10 -0
  478. package/src/skills.loader.ts +225 -0
  479. package/src/skills.types.ts +42 -0
@@ -0,0 +1,59 @@
1
+ ---
2
+ name: fail_sfx.aiaudio
3
+ description: 生命耗尽触发游戏结束时的失败提示音效。
4
+ triggers: 需要生成游戏结束失败音效时触发。
5
+ ---
6
+
7
+ # 失败音效
8
+
9
+ ## Recipe
10
+
11
+ 生成提示词见 manifest.json generation.prompt。
12
+ - model: Google Lyria 3(平台默认,见 manifest.json generation.platformSkill)
13
+ - format: mp3
14
+ - loop: false
15
+
16
+ ## Result
17
+
18
+ - 产物文件:`fail.mp3`
19
+ - 在 Preloader.ts 中作为 `sfxFail` key 加载
20
+
21
+ ## Binding
22
+
23
+ ```json
24
+ {
25
+ "role": "sfxFail",
26
+ "target": "assets/sounds/fail.mp3",
27
+ "type": "audio-asset-reference"
28
+ }
29
+ ```
30
+
31
+ ## 生成方式
32
+
33
+ Platform Skill: `playcraft-audio-generation`
34
+
35
+ ```bash
36
+ # 1. 生成 SFX(--prompt 必须英文)
37
+ playcraft tools generate-sfx \
38
+ --prompt "failure sound for game over, not too harsh, brief" \
39
+ --duration 1 \
40
+ --output ta-workspace/raw_sfx.mp3
41
+
42
+ # 2. 归一化音量
43
+ playcraft audio normalize --input ta-workspace/raw_sfx.mp3 --output ta-workspace/raw_sfx.mp3 --target-loudness -16
44
+
45
+ # 3. 压缩(SFX 目标 ≤15KB)
46
+ playcraft audio compress --input ta-workspace/raw_sfx.mp3 --output ta-workspace/fail.mp3 --target-size 15KB
47
+
48
+ # 4. 将产物写入 sandbox 对应路径(见 binding.target)
49
+ ```
50
+ ## Skill Definition
51
+
52
+ ```yaml
53
+ tools:
54
+ - generate_audio
55
+ inputs:
56
+ - prompt: see manifest.json
57
+ outputs:
58
+ - audio: fail.mp3
59
+ ```
@@ -0,0 +1,44 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "atomId": "fail_sfx.aiaudio",
4
+ "bundleType": "aiaudio",
5
+ "category": "audio",
6
+ "mode": "generative",
7
+ "label": {
8
+ "zh": "失败音效",
9
+ "en": "Fail SFX"
10
+ },
11
+ "tags": [
12
+ "audio",
13
+ "sfx",
14
+ "fail",
15
+ "game-over"
16
+ ],
17
+ "bindingRoles": [
18
+ "sfxFail"
19
+ ],
20
+ "generation": {
21
+ "kind": "sfx",
22
+ "prompt": "failure sound for game over, not too harsh, brief",
23
+ "duration": 1,
24
+ "loop": false,
25
+ "referenceAudio": "ref/fail.mp3",
26
+ "platformSkill": "playcraft-audio-generation"
27
+ },
28
+ "result": {
29
+ "outputFile": "ref/fail.mp3",
30
+ "format": "mp3",
31
+ "constraints": {
32
+ "maxDuration": 1
33
+ }
34
+ },
35
+ "binding": {
36
+ "role": "sfxFail",
37
+ "target": "assets/sounds/fail.mp3",
38
+ "type": "audio-asset-reference"
39
+ },
40
+ "files": {
41
+ "skill": "SKILL.md",
42
+ "asset": "ref/fail.mp3"
43
+ }
44
+ }
@@ -0,0 +1,58 @@
1
+ ---
2
+ name: figer_icon.aiimage
3
+ description: 新手引导中指示玩家应该点击哪条路径的手指动画图片。
4
+ triggers: 需要生成新手引导手指指示图标时触发。
5
+ ---
6
+
7
+ # 引导手指图标
8
+
9
+ ## Recipe
10
+
11
+ 生成提示词见 manifest.json generation.prompt。
12
+ - model: google/imagen-3.0-generate-002(默认,见 manifest.json generation.platformSkill)
13
+ - format: webp, 透明背景
14
+
15
+ ## Result
16
+
17
+ - 产物文件:`figer.webp`
18
+ - 在 Preloader.ts 中作为 `tutorialPointer` key 加载
19
+
20
+ ## Binding
21
+
22
+ ```json
23
+ {
24
+ "role": "tutorialPointer",
25
+ "target": "assets/figer.webp",
26
+ "type": "image-asset-reference"
27
+ }
28
+ ```
29
+
30
+ ## 生成方式
31
+
32
+ Platform Skill: `playcraft-image-generation`
33
+
34
+ ```bash
35
+ # 1. 生成图片(参考 ref/ 中的参考图)
36
+ playcraft tools generate-image \
37
+ --prompt "hand with pointing finger icon for game tutorial, cartoon style, transparent background, tap gesture" \
38
+ --aspect-ratio 1:1 \
39
+ --reference-image ${SKILL_DIR}/ref/figer.png \
40
+ --image-model google/imagen-3.0-generate-002 \
41
+ --output ta-workspace/raw.png
42
+
43
+ # 2. 后处理(去白底 + 格式转换)
44
+ playcraft image remove-background --input ta-workspace/raw.png --output ta-workspace/trimmed.png
45
+ playcraft image convert --input ta-workspace/trimmed.png --output ta-workspace/figer.webp --quality 85
46
+
47
+ # 3. 将产物写入 sandbox 对应路径(见 binding.target)
48
+ ```
49
+ ## Skill Definition
50
+
51
+ ```yaml
52
+ tools:
53
+ - generate_image
54
+ inputs:
55
+ - prompt: see manifest.json
56
+ outputs:
57
+ - image: figer.webp
58
+ ```
@@ -0,0 +1,48 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "atomId": "figer_icon.aiimage",
4
+ "bundleType": "aiimage",
5
+ "category": "visual",
6
+ "mode": "generative",
7
+ "label": {
8
+ "zh": "引导手指图标",
9
+ "en": "Tutorial finger pointer"
10
+ },
11
+ "tags": [
12
+ "visual",
13
+ "finger",
14
+ "tutorial",
15
+ "pointer",
16
+ "gesture",
17
+ "tap"
18
+ ],
19
+ "bindingRoles": [
20
+ "tutorialPointer"
21
+ ],
22
+ "generation": {
23
+ "kind": "image",
24
+ "prompt": "hand with pointing finger icon for game tutorial, cartoon style, transparent background, tap gesture",
25
+ "aspectRatio": "1:1",
26
+ "model": "google/imagen-3.0-generate-002",
27
+ "referenceImage": "ref/figer.png",
28
+ "platformSkill": "playcraft-image-generation"
29
+ },
30
+ "result": {
31
+ "outputFile": "ref/figer.webp",
32
+ "format": "webp",
33
+ "constraints": {
34
+ "minWidth": 128,
35
+ "minHeight": 128
36
+ }
37
+ },
38
+ "binding": {
39
+ "role": "tutorialPointer",
40
+ "target": "assets/figer.webp",
41
+ "type": "image-asset-reference"
42
+ },
43
+ "files": {
44
+ "skill": "SKILL.md",
45
+ "asset": "ref/figer.webp",
46
+ "assetPng": "ref/figer.png"
47
+ }
48
+ }
@@ -0,0 +1,74 @@
1
+ ---
2
+ name: forest.aiimage
3
+ description: 森林背景图封包 - 热带/温带森林场景,适合休闲消除类游戏的背景贴图生成
4
+ triggers: 森林,forest,背景,background,热带,自然,绿色,nature,casual,tree
5
+ ---
6
+
7
+ # forest.aiimage
8
+
9
+ 森林主题背景图封包。适合休闲消除、跑酷等类型游戏,营造自然清新的视觉氛围。
10
+
11
+ ## Recipe
12
+
13
+ 生成方式:调用 AI 图像生成接口,基于以下参数生成或 fork:
14
+
15
+ - **基础 prompt**:`lush green forest clearing, dappled sunlight through canopy, casual mobile game style, flat design, vibrant colors`
16
+ - **宽高比**:9:16(竖屏移动端)
17
+ - **风格**:cartoon / flat design
18
+ - **可 fork 的变体方向**:
19
+ - 热带雨林:在 prompt 中加入 `tropical rainforest, palm trees, exotic flowers`
20
+ - 秋季森林:替换为 `autumn forest, golden leaves, warm tones`
21
+ - 夜间森林:替换为 `moonlit forest, bioluminescent plants, dark atmosphere`
22
+
23
+ **生成步骤:**
24
+ 1. 确认 Prefab 容器对背景贴图的尺寸约束(默认 1080×1920 PNG)
25
+ 2. 调用图像生成 API,传入 prompt 和宽高比
26
+ 3. 验证输出尺寸 ≥ 1080px 宽
27
+ 4. 将生成图写入封包目录为 `background.png`
28
+ 5. 更新 `manifest.json` 中 `generation.prompt` 和 `generation.seed` 字段
29
+
30
+ ## Result
31
+
32
+ - **产物文件**:`background.png`
33
+ - **格式**:PNG,透明度可选
34
+ - **最小分辨率**:1080×1920
35
+ - **引用方式**:通过 `manifest.json.result.outputFile` 引用,Binding 层写入 scene 路径
36
+
37
+ ## Binding
38
+
39
+ - **Binding Role**:`backgroundTexture`
40
+ - **挂载目标**:`scene://entities/Background/element/textureAsset`
41
+ - **引用类型**:`texture-asset-reference`
42
+ - **约束**:format=png,minWidth=1080
43
+ - **从 Prefab 读取 Binding 模板**:`.prefab/manifest.json` → `bindingTemplates.backgroundTexture`
44
+ - **写入路径**:将 `background.png` 的 asset id 写入 scene 对应实体的 textureAsset 字段
45
+
46
+ ## 生成方式
47
+
48
+ Platform Skill: `playcraft-image-generation`
49
+
50
+ ```bash
51
+ # 1. 生成图片(参考 ref/ 中的参考图)
52
+ playcraft tools generate-image \
53
+ --prompt "lush green forest clearing, dappled sunlight through canopy, casual mobile game style, flat design, vibrant colors" \
54
+ --aspect-ratio 9:16 \
55
+ --image-model google/imagen-3.0-generate-002 \
56
+ --output ta-workspace/raw.png
57
+
58
+ # 2. 后处理(去白底 + 格式转换)
59
+ playcraft image remove-background --input ta-workspace/raw.png --output ta-workspace/trimmed.png
60
+ playcraft image convert --input ta-workspace/trimmed.png --output ta-workspace/background.webp --quality 85
61
+
62
+ # 3. 将产物写入 sandbox 对应路径(见 binding.target)
63
+ ```
64
+ ## Skill Definition
65
+
66
+ tools:
67
+ - bash
68
+ - write
69
+ - read
70
+ prompt_extension: |
71
+ You are generating a forest background image for a mobile casual game.
72
+ Follow the Recipe section to call the image generation API with the specified prompt and parameters.
73
+ After generation, verify the output meets the Result constraints, then apply the Binding to wire it into the scene.
74
+ If forking this skill, modify the prompt in manifest.json to reflect the new visual style before generating.
@@ -0,0 +1,48 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "atomId": "forest.aiimage",
4
+ "bundleType": "aiimage",
5
+ "category": "visual",
6
+ "mode": "generative",
7
+ "label": {
8
+ "zh": "森林背景",
9
+ "en": "Forest background"
10
+ },
11
+ "tags": [
12
+ "background",
13
+ "visual",
14
+ "forest",
15
+ "nature",
16
+ "casual",
17
+ "green"
18
+ ],
19
+ "bindingRoles": ["backgroundTexture"],
20
+ "generation": {
21
+ "kind": "image",
22
+ "prompt": "lush green forest clearing, dappled sunlight through canopy, casual mobile game style, flat design, vibrant colors",
23
+ "aspectRatio": "9:16",
24
+ "model": "google/imagen-3.0-generate-002",
25
+ "style": "cartoon",
26
+ "platformSkill": "playcraft-image-generation"
27
+ },
28
+ "result": {
29
+ "outputFile": "background.png",
30
+ "format": "png",
31
+ "constraints": {
32
+ "minWidth": 1080,
33
+ "minHeight": 1920
34
+ }
35
+ },
36
+ "binding": {
37
+ "role": "backgroundTexture",
38
+ "target": "scene://entities/Background/element/textureAsset",
39
+ "type": "texture-asset-reference",
40
+ "constraints": {
41
+ "format": "png",
42
+ "minWidth": 1080
43
+ }
44
+ },
45
+ "files": {
46
+ "skill": "SKILL.md"
47
+ }
48
+ }
@@ -0,0 +1,68 @@
1
+ ---
2
+ name: fruit_tile.aiimage
3
+ description: 水果牌面贴图组封包 - 卡通水果精灵图集,适合三消/对对碰/连线消除的牌面素材
4
+ triggers: 水果,fruit,牌面,tile,贴图,三消,match3,消除,苹果,草莓,葡萄
5
+ ---
6
+
7
+ # fruit_tile.aiimage
8
+
9
+ 水果主题牌面贴图组封包。提供一套卡通风格水果精灵图,用于三消、对对碰、连线消除等棋盘类玩法的牌面。
10
+
11
+ ## Recipe
12
+
13
+ - **基础 prompt**:`cute cartoon fruit icons sprite sheet, apple strawberry grape orange lemon watermelon cherry, flat design, vibrant colors, white background, game assets`
14
+ - **宽高比**:1:1(正方形精灵图)
15
+ - **风格**:cartoon / flat design
16
+ - **需包含的水果种类**:苹果、草莓、葡萄、橙子、柠檬、西瓜、樱桃(共 7 种)
17
+ - **可 fork 变体**:
18
+ - 蔬菜替换:用蔬菜图标替换水果
19
+ - 暗黑风格:深色背景,光泽质感
20
+ - 3D 风格:立体渲染水果图标
21
+
22
+ **生成步骤:**
23
+ 1. 确认棋盘牌面所需图标种类和尺寸(每格 ≥ 64×64px)
24
+ 2. 生成精灵图集(512×512 或 1024×512)
25
+ 3. 写入 `tiles.png`,更新 manifest
26
+
27
+ ## Result
28
+
29
+ - **产物文件**:`tiles.png`
30
+ - **格式**:PNG(透明背景),最小 512×512
31
+ - **图标排列**:水平排列 7 种,每种 1 帧(可扩展动画帧)
32
+
33
+ ## Binding
34
+
35
+ - **Binding Role**:`tileTextureSet`
36
+ - **挂载目标**:`scene://entities/Board/tileRenderer/tileAtlas`
37
+ - **引用类型**:`sprite-atlas-reference`
38
+ - **约束**:format=png,minWidth=512
39
+
40
+ ## 生成方式
41
+
42
+ Platform Skill: `playcraft-image-generation`
43
+
44
+ ```bash
45
+ # 1. 生成图片(参考 ref/ 中的参考图)
46
+ playcraft tools generate-image \
47
+ --prompt "cute cartoon fruit icons sprite sheet, apple strawberry grape orange lemon watermelon cherry, flat design, vibrant colors, white background, game assets" \
48
+ --aspect-ratio 1:1 \
49
+ --image-model google/imagen-3.0-generate-002 \
50
+ --output ta-workspace/raw.png
51
+
52
+ # 2. 后处理(去白底 + 格式转换)
53
+ playcraft image remove-background --input ta-workspace/raw.png --output ta-workspace/trimmed.png
54
+ playcraft image convert --input ta-workspace/trimmed.png --output ta-workspace/tiles.webp --quality 85
55
+
56
+ # 3. 将产物写入 sandbox 对应路径(见 binding.target)
57
+ ```
58
+ ## Skill Definition
59
+
60
+ tools:
61
+ - bash
62
+ - write
63
+ - read
64
+ prompt_extension: |
65
+ You are generating a fruit tile sprite sheet for a match-3 casual game.
66
+ Follow the Recipe to generate the sprite sheet with the specified fruit icons.
67
+ Ensure the output is a proper sprite atlas that can be used as a tile set in the board renderer.
68
+ After generation, apply the Binding to wire the atlas into the scene's tileRenderer.
@@ -0,0 +1,48 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "atomId": "fruit_tile.aiimage",
4
+ "bundleType": "aiimage",
5
+ "category": "visual",
6
+ "mode": "generative",
7
+ "label": {
8
+ "zh": "水果牌面贴图组",
9
+ "en": "Fruit tile set"
10
+ },
11
+ "tags": [
12
+ "tile",
13
+ "visual",
14
+ "fruit",
15
+ "match3",
16
+ "casual",
17
+ "colorful"
18
+ ],
19
+ "bindingRoles": ["tileTextureSet"],
20
+ "generation": {
21
+ "kind": "sprite-sheet",
22
+ "prompt": "cute cartoon fruit icons sprite sheet, apple strawberry grape orange lemon watermelon cherry, flat design, vibrant colors, white background, game assets",
23
+ "aspectRatio": "1:1",
24
+ "model": "google/imagen-3.0-generate-002",
25
+ "style": "cartoon",
26
+ "platformSkill": "playcraft-image-generation"
27
+ },
28
+ "result": {
29
+ "outputFile": "tiles.png",
30
+ "format": "png",
31
+ "constraints": {
32
+ "minWidth": 512,
33
+ "minHeight": 512
34
+ }
35
+ },
36
+ "binding": {
37
+ "role": "tileTextureSet",
38
+ "target": "scene://entities/Board/tileRenderer/tileAtlas",
39
+ "type": "sprite-atlas-reference",
40
+ "constraints": {
41
+ "format": "png",
42
+ "minWidth": 512
43
+ }
44
+ },
45
+ "files": {
46
+ "skill": "SKILL.md"
47
+ }
48
+ }
@@ -0,0 +1,47 @@
1
+ ---
2
+ name: game_over_panel.aicomponent
3
+ description: 游戏结束结果面板。半透明遮罩 + 胜利/失败图片 + 下载 CTA 按钮,在关卡胜利或失败后展示,是试玩广告转化的关键界面。
4
+ triggers: 需要实现游戏结束结果展示面板时触发。
5
+ ---
6
+
7
+ # 游戏结束面板(Game Over Result Panel)
8
+
9
+ **结算全屏结构、安全区与 CTA 锚点** 见 `playable_end_screen_layout.aicomponent`;底层缩放见 `responsive_2d_layout.aicomponent` 第一节。
10
+
11
+ ## Scaffold
12
+
13
+ `src/game/scenes/GameUI/GameOverPanel.ts`
14
+
15
+ ## Recipe
16
+
17
+ | 决策 | 原因 |
18
+ |------|------|
19
+ | **胜败面板独立于关卡逻辑** | 结果面板是视觉表现层;与 LevelLifecycle(状态机)分离后,不同 Remix 变体可用不同视觉风格的面板,而不改任何游戏逻辑 |
20
+ | **软槽位 win/lose Panel** | 胜败图片是典型的 AI 生成资产,每个 Remix 变体可以有不同画风;软槽位允许通过资产替换实现视觉差异化 |
21
+ | **遵从结算屏布局规范** | 面板布局(遮罩→主视觉→CTA 位置)遵从 `playable_end_screen_layout.aicomponent` 约定,保证转化率关键的 CTA 位置在安全区内 |
22
+
23
+ ## Adapter
24
+
25
+ - **Role**: `gameOverDialog` — 胜利/失败结果面板(遮罩 + 结果图 + 下载 CTA 按钮)
26
+ - **Provides**: `GameOverPanel` 类(`showWin()`、`showLose()`)
27
+ - **Requires**: `phaser.aicomponent`、`tencent_playable_sdk.aicomponent`(sdk.install());软槽位:`winPanel`、`losePanel`
28
+ - **Consumed by**: `level_lifecycle.aicomponent`(关卡胜利/失败时调用 `showWin()`/`showLose()`)
29
+ - **Integration point**: `src/game/scenes/GameUI/GameOverPanel.ts` → LevelLifecycle 内部实例化和触发
30
+
31
+ ## Imports
32
+
33
+ - `phaser.aicomponent` / `tencent_playable_sdk.aicomponent`(硬依赖)
34
+ - `winPanel`(软槽位:胜利面板图片,可替换)
35
+ - `losePanel`(软槽位:失败面板图片,可替换)
36
+
37
+ ## Skill Definition
38
+
39
+ ```yaml
40
+ tools:
41
+ - read_file
42
+ - write_file
43
+ inputs:
44
+ - source: src/game/scenes/GameUI/GameOverPanel.ts
45
+ outputs:
46
+ - gameOverPanel: GameOverPanel class (win/lose result modal)
47
+ ```
@@ -0,0 +1,61 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "atomId": "game_over_panel.aicomponent",
4
+ "bundleType": "aicomponent",
5
+ "category": "component",
6
+ "mode": "fixed",
7
+ "label": { "zh": "游戏结束面板", "en": "Game over result panel" },
8
+ "tags": ["ui", "game-over", "win", "lose", "result-panel", "modal"],
9
+ "bindingRoles": ["gameOverDialog"],
10
+ "scaffold": {
11
+ "files": {
12
+ "src/game/scenes/GameUI/GameOverPanel.ts": { "source": "ref/GameOverPanel.ts", "mode": "full", "weight": 10 }
13
+ }
14
+ },
15
+ "imports": [
16
+ { "slot": "engine", "pinAtomId": "phaser.aicomponent", "edgeKind": "requires", "bindAs": "engine" },
17
+ {
18
+ "slot": "winPanel",
19
+ "description": "胜利结果面板视觉图片",
20
+ "bindAs": "winTexture",
21
+ "required": false,
22
+ "edgeKind": "compatibleWith",
23
+ "matchBindingRoles": ["successFeedbackPanel"],
24
+ "allowedBundleTypes": ["aiimage"]
25
+ },
26
+ {
27
+ "slot": "losePanel",
28
+ "description": "失败结果面板视觉图片",
29
+ "bindAs": "loseTexture",
30
+ "required": false,
31
+ "edgeKind": "compatibleWith",
32
+ "matchBindingRoles": ["failFeedbackPanel"],
33
+ "allowedBundleTypes": ["aiimage"]
34
+ },
35
+ {
36
+ "slot": "sfxWinAnim",
37
+ "description": "胜利动画播放时的音效",
38
+ "bindAs": "sfxWinAnim",
39
+ "required": false,
40
+ "edgeKind": "compatibleWith",
41
+ "matchBindingRoles": ["sfxSuccess"],
42
+ "allowedBundleTypes": ["aiaudio"]
43
+ },
44
+ {
45
+ "slot": "sfxButtonClick",
46
+ "description": "面板按钮点击音效",
47
+ "bindAs": "sfxButtonClick",
48
+ "required": false,
49
+ "edgeKind": "compatibleWith",
50
+ "matchBindingRoles": ["sfxButtonClick"],
51
+ "allowedBundleTypes": ["aiaudio"]
52
+ }
53
+ ],
54
+ "exports": [
55
+ { "name": "GameOverPanel", "kind": "class", "location": "src/game/scenes/GameUI/GameOverPanel.ts" }
56
+ ],
57
+ "neutralDescriptor": {
58
+ "geometry": "semi-transparent overlay modal showing win or lose result image with download CTA button, triggered after game ends"
59
+ },
60
+ "files": { "skill": "SKILL.md", "gameOverPanel": "ref/GameOverPanel.ts" }
61
+ }
@@ -0,0 +1,74 @@
1
+ import * as Phaser from "phaser";
2
+ // import { DOWNLOAD_BUTTON_URL } from '../../DebugConfig';
3
+
4
+ /** 游戏结束面板的配置选项 */
5
+ export interface GameOverPanelConfig {
6
+ type: "win" | "lose"; // 'win' 使用 win_panel, 'lose' 使用 lose_panel
7
+ onClose?: () => void;
8
+ }
9
+
10
+ /**
11
+ * 游戏结束面板组件。
12
+ * 显示胜利或失败的全屏面板,包含半透明遮罩和结果图片。
13
+ */
14
+ export class GameOverPanel extends Phaser.GameObjects.Container {
15
+ private readonly config: GameOverPanelConfig;
16
+
17
+ constructor(scene: Phaser.Scene, config: GameOverPanelConfig) {
18
+ super(scene);
19
+ this.config = config;
20
+
21
+ scene.add.existing(this);
22
+ // Ensure the game-over panel renders above ALL other UI (GameTopUI=500, nomoveHint=1600, back=1702)
23
+ this.setDepth(2000);
24
+ this.setScrollFactor(0);
25
+
26
+ // 半透明黑色背景遮罩
27
+ const { width: gameWidth, height: gameHeight } = scene.scale;
28
+ const overlay = scene.add.rectangle(
29
+ 0,
30
+ 0,
31
+ gameWidth,
32
+ gameHeight,
33
+ 0x000000,
34
+ 0.7,
35
+ );
36
+ overlay.setOrigin(0, 0);
37
+ this.add(overlay);
38
+
39
+ // 根据类型选择图片
40
+ const imageKey = config.type === "win" ? "win_panel" : "lose_panel";
41
+ const gameOverImage = scene.add.image(
42
+ gameWidth / 2,
43
+ gameHeight / 2,
44
+ imageKey,
45
+ );
46
+
47
+ // 根据屏幕大小自适应缩放图片
48
+ const maxWidth = gameWidth * 0.8;
49
+ const maxHeight = gameHeight * 0.6;
50
+ const scaleX = maxWidth / gameOverImage.width;
51
+ const scaleY = maxHeight / gameOverImage.height;
52
+ const scale = Math.min(scaleX, scaleY, 1); // 不放大,只缩小
53
+
54
+ gameOverImage.setScale(scale);
55
+ this.add(gameOverImage);
56
+
57
+ // 点击任意位置跳转到下载链接
58
+ overlay.setInteractive({ useHandCursor: true });
59
+ overlay.on("pointerup", () => {
60
+ this.handleClick();
61
+ });
62
+
63
+ // 也可以点击图片跳转
64
+ gameOverImage.setInteractive({ useHandCursor: true });
65
+ gameOverImage.on("pointerup", () => {
66
+ this.handleClick();
67
+ });
68
+ }
69
+
70
+ /** 处理点击事件,触发关闭回调。 */
71
+ private handleClick() {
72
+ this.config.onClose?.();
73
+ }
74
+ }