@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,166 @@
1
+ /**
2
+ * car_parking.aigameplay — reducer 接口模板
3
+ *
4
+ * Agent 生成实际 reducer 时,必须导出以下函数。
5
+ * 此文件是接口约束模板,不是可执行代码。
6
+ *
7
+ * ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
8
+ * ⚠️ 重要:渲染层(GameScene)不应直接调用 dispatch()
9
+ *
10
+ * dispatch() 是一体化接口,内部执行完整的移动+胜利检测后只返回最终状态。
11
+ * 渲染层需要知道具体哪辆车移动了多少格才能播放位移动画,
12
+ * 因此必须使用下方的「分步函数」逐步驱动。
13
+ *
14
+ * dispatch() 的用途:无头测试、AI 模拟、快速验证关卡可解性。
15
+ * ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
16
+ */
17
+
18
+ // ─── 配置类型 ─────────────────────────────────────────────────────────────────
19
+
20
+ export type CarParkingConfig = {
21
+ /** 棋盘列数,默认 6 */
22
+ cols: number;
23
+ /** 棋盘行数,默认 6 */
24
+ rows: number;
25
+ /** 初始车辆配置 */
26
+ cars: CarConfig[];
27
+ /** 出口位置 */
28
+ exit: { col: number; row: number };
29
+ };
30
+
31
+ export type CarConfig = {
32
+ /** 车辆唯一标识 */
33
+ id: string;
34
+ /** 朝向:H=水平,V=垂直 */
35
+ orientation: 'H' | 'V';
36
+ /** 初始占据格子坐标 */
37
+ cells: Array<{ col: number; row: number }>;
38
+ /** 车辆颜色/显示类型 */
39
+ color: string;
40
+ /** 是否为目标车(需移至出口) */
41
+ isTarget: boolean;
42
+ };
43
+
44
+ // ─── 动作类型 ─────────────────────────────────────────────────────────────────
45
+
46
+ export type CarParkingAction =
47
+ | { type: 'move_car'; carId: string; steps: number }
48
+ | { type: 'reset' };
49
+
50
+ // ─── 状态类型 ─────────────────────────────────────────────────────────────────
51
+
52
+ export type Car = {
53
+ id: string;
54
+ orientation: 'H' | 'V';
55
+ /** 当前占据格子坐标(按朝向排序,从小到大) */
56
+ cells: Array<{ col: number; row: number }>;
57
+ color: string;
58
+ isTarget: boolean;
59
+ };
60
+
61
+ export type CarParkingState = {
62
+ /** 棋盘尺寸 */
63
+ cols: number;
64
+ rows: number;
65
+ /** 所有车辆当前状态 */
66
+ cars: Car[];
67
+ /** 出口位置 */
68
+ exit: { col: number; row: number };
69
+ /** 游戏是否结束 */
70
+ gameOver: boolean;
71
+ /** 是否胜利 */
72
+ win: boolean;
73
+ /** 已执行的移动步数(用于评分) */
74
+ moveCount: number;
75
+ };
76
+
77
+ // ─── 分步操作返回类型 ─────────────────────────────────────────────────────────
78
+
79
+ /** getCarMoveRange 返回值:该车可移动的范围(负=向左/上,正=向右/下) */
80
+ export type MoveRange = {
81
+ /** 可向负方向(左/上)移动的最大格数(负数,如 -2 表示最多向左2格) */
82
+ minSteps: number;
83
+ /** 可向正方向(右/下)移动的最大格数(正数,如 3 表示最多向右3格) */
84
+ maxSteps: number;
85
+ };
86
+
87
+ /** isBlocked 检测方向 */
88
+ export type BlockDirection = 'positive' | 'negative';
89
+
90
+ // ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
91
+ // 必须导出的函数
92
+ // ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
93
+
94
+ // ─── 初始化 ──────────────────────────────────────────────────────────────────
95
+
96
+ /**
97
+ * init:根据配置初始化游戏状态
98
+ */
99
+ export declare function init(config: CarParkingConfig): CarParkingState;
100
+
101
+ // ─── 一体化接口(测试/AI 模拟用) ───────────────────────────────────────────
102
+
103
+ /**
104
+ * dispatch:接收动作,返回新状态(纯函数,不得修改原 state)
105
+ * - move_car:移动指定车辆指定步数,检测胜利条件
106
+ * - reset:重置到初始状态
107
+ *
108
+ * ⚠️ 仅用于无头测试和 AI 模拟。渲染层请使用下方分步函数。
109
+ */
110
+ export declare function dispatch(state: CarParkingState, action: CarParkingAction): CarParkingState;
111
+
112
+ /**
113
+ * getState:返回当前状态快照
114
+ */
115
+ export declare function getState(state: CarParkingState): CarParkingState;
116
+
117
+ // ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
118
+ // 分步函数(渲染层/场景层必须使用这些函数驱动动画)
119
+ // ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
120
+
121
+ /**
122
+ * getCarMoveRange:查询指定车辆在当前状态下可移动的步数范围。
123
+ *
124
+ * 场景层在玩家按下/拖动某辆车时调用,用于限制拖动范围。
125
+ * minSteps <= 0 <= maxSteps,均值为0时表示该车完全被阻挡(四面无路)。
126
+ *
127
+ * @param state 当前游戏状态
128
+ * @param carId 目标车辆 ID
129
+ * @returns 可移动范围 { minSteps(负=向左/上), maxSteps(正=向右/下)}
130
+ */
131
+ export declare function getCarMoveRange(state: CarParkingState, carId: string): MoveRange;
132
+
133
+ /**
134
+ * moveCar:执行车辆移动,返回新状态。
135
+ *
136
+ * 场景层在确认移动格数后调用(应先经过 getCarMoveRange 验证 steps 在合法范围内)。
137
+ * 返回的新状态中 cars 已更新,win 字段已反映胜利检测结果。
138
+ *
139
+ * @param state 当前游戏状态(不可变)
140
+ * @param carId 目标车辆 ID
141
+ * @param steps 移动步数(正=向右/下,负=向左/上)
142
+ * @returns 更新后的游戏状态
143
+ */
144
+ export declare function moveCar(state: CarParkingState, carId: string, steps: number): CarParkingState;
145
+
146
+ /**
147
+ * checkWin:检测目标车是否已到达出口。
148
+ *
149
+ * 场景层在每次 moveCar 动画播放完毕后调用,判断是否触发胜利演出。
150
+ *
151
+ * @param state 当前游戏状态
152
+ * @returns true 表示目标车已到达出口
153
+ */
154
+ export declare function checkWin(state: CarParkingState): boolean;
155
+
156
+ /**
157
+ * isBlocked:检测指定车辆在给定方向上是否被阻挡(无法移动)。
158
+ *
159
+ * 场景层可用于显示"该车无法移动"的视觉反馈(如抖动动画)。
160
+ *
161
+ * @param state 当前游戏状态
162
+ * @param carId 目标车辆 ID
163
+ * @param direction 检测方向:'positive'(右/下)或 'negative'(左/上)
164
+ * @returns true 表示该方向完全被阻挡
165
+ */
166
+ export declare function isBlocked(state: CarParkingState, carId: string, direction: BlockDirection): boolean;
@@ -0,0 +1,64 @@
1
+ ---
2
+ name: castle.aiimage
3
+ description: 城堡背景图封包 - 奇幻城堡/中世纪场景,适合逃脱益智类游戏的史诗风格背景贴图
4
+ triggers: 城堡,castle,奇幻,fantasy,中世纪,medieval,背景,background,宫殿,palace
5
+ ---
6
+
7
+ # castle.aiimage
8
+
9
+ 奇幻城堡主题背景图封包。适合逃脱益智、停车逃脱等类型游戏,营造史诗奇幻氛围。
10
+
11
+ ## Recipe
12
+
13
+ - **基础 prompt**:`majestic fantasy castle on a hill, mystical atmosphere, casual mobile game style, flat design, vibrant colors, blue sky`
14
+ - **宽高比**:9:16
15
+ - **风格**:cartoon / flat design
16
+ - **可 fork 变体**:
17
+ - 黑暗城堡:`dark gothic castle, ominous clouds, bats, dramatic lighting`
18
+ - 冰雪城堡:`ice crystal palace, frozen landscape, blue and white tones`
19
+ - 废墟城堡:`ruined castle, overgrown with vines, mysterious fog`
20
+
21
+ **生成步骤:**
22
+ 1. 确认尺寸约束(1080×1920 PNG)
23
+ 2. 调用图像生成 API
24
+ 3. 验证输出尺寸 ≥ 1080px 宽
25
+ 4. 写入 `background.png`,更新 manifest
26
+
27
+ ## Result
28
+
29
+ - **产物文件**:`background.png`
30
+ - **格式**:PNG,最小 1080×1920
31
+
32
+ ## Binding
33
+
34
+ - **Binding Role**:`backgroundTexture`
35
+ - **挂载目标**:`scene://entities/Background/element/textureAsset`
36
+ - **引用类型**:`texture-asset-reference`
37
+
38
+ ## 生成方式
39
+
40
+ Platform Skill: `playcraft-image-generation`
41
+
42
+ ```bash
43
+ # 1. 生成图片(参考 ref/ 中的参考图)
44
+ playcraft tools generate-image \
45
+ --prompt "majestic fantasy castle on a hill, mystical atmosphere, casual mobile game style, flat design, vibrant colors, blue sky" \
46
+ --aspect-ratio 9:16 \
47
+ --image-model google/imagen-3.0-generate-002 \
48
+ --output ta-workspace/raw.png
49
+
50
+ # 2. 后处理(去白底 + 格式转换)
51
+ playcraft image remove-background --input ta-workspace/raw.png --output ta-workspace/trimmed.png
52
+ playcraft image convert --input ta-workspace/trimmed.png --output ta-workspace/background.webp --quality 85
53
+
54
+ # 3. 将产物写入 sandbox 对应路径(见 binding.target)
55
+ ```
56
+ ## Skill Definition
57
+
58
+ tools:
59
+ - bash
60
+ - write
61
+ - read
62
+ prompt_extension: |
63
+ You are generating a castle background image for a mobile game.
64
+ Follow the Recipe to call the image generation API. Verify output meets Result constraints, then apply Binding.
@@ -0,0 +1,48 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "atomId": "castle.aiimage",
4
+ "bundleType": "aiimage",
5
+ "category": "visual",
6
+ "mode": "generative",
7
+ "label": {
8
+ "zh": "城堡背景",
9
+ "en": "Castle background"
10
+ },
11
+ "tags": [
12
+ "background",
13
+ "visual",
14
+ "castle",
15
+ "fantasy",
16
+ "medieval",
17
+ "epic"
18
+ ],
19
+ "bindingRoles": ["backgroundTexture"],
20
+ "generation": {
21
+ "kind": "image",
22
+ "prompt": "majestic fantasy castle on a hill, mystical atmosphere, casual mobile game style, flat design, vibrant colors, blue sky",
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,72 @@
1
+ ---
2
+ name: cheerful_ukulele.aiaudio
3
+ description: 轻快尤克里里 BGM 封包 - 热带轻松氛围的循环背景音乐,适合休闲消除类游戏
4
+ triggers: 背景音乐,bgm,轻快,cheerful,尤克里里,ukulele,休闲,casual,循环,loop,热带
5
+ ---
6
+
7
+ # cheerful_ukulele.aiaudio
8
+
9
+ 轻快尤克里里主题 BGM (Background Music, 背景音乐) 封包。营造轻松愉快的休闲游戏氛围,适合三消、分类排序等节奏平缓的玩法。
10
+
11
+ ## Recipe
12
+
13
+ - **基础 prompt**:`cheerful upbeat ukulele loop, casual mobile game background music, tropical feel, light percussion, 120 BPM`
14
+ - **时长**:30 秒(循环)
15
+ - **BPM**:约 120
16
+ - **风格**:轻快、热带、节奏感轻柔
17
+ - **可 fork 变体**:
18
+ - 更欢快:提高 BPM 到 140,加入更多打击乐
19
+ - 更轻柔:降低 BPM 到 90,以钢琴为主
20
+ - 节日版:加入铃声和节庆元素
21
+
22
+ **生成步骤:**
23
+ 1. 确认目标时长和循环点(默认 30s)
24
+ 2. 调用音频生成 API,传入 prompt 和时长参数
25
+ 3. 验证输出时长在 15-60s 范围内
26
+ 4. 写入 `audio.mp3`,更新 manifest 中的 `generation.seed`
27
+
28
+ ## Result
29
+
30
+ - **产物文件**:`audio.mp3`
31
+ - **格式**:MP3
32
+ - **时长**:15-60 秒(循环无缝)
33
+ - **引用方式**:通过 `manifest.json.result.outputFile` 引用
34
+
35
+ ## Binding
36
+
37
+ - **Binding Role**:`backgroundMusic`
38
+ - **挂载目标**:`scene://entities/AudioManager/bgm/asset`
39
+ - **引用类型**:`audio-asset-reference`
40
+ - **播放模式**:loop(无缝循环)
41
+
42
+ ## 生成方式
43
+
44
+ Platform Skill: `playcraft-audio-generation`
45
+
46
+ ```bash
47
+ # 1. 生成 BGM(Google Lyria 3,固定 30s)
48
+ playcraft tools generate-bgm \
49
+ --prompt "cheerful upbeat ukulele loop, casual mobile game background music, tropical feel, light percussion, 120 BPM" \
50
+ --style casual \
51
+ --bpm 120 \
52
+ --output ta-workspace/raw_bgm.mp3
53
+
54
+ # 2. 处理无缝循环 + 归一化
55
+ playcraft audio loop --input ta-workspace/raw_bgm.mp3 --output ta-workspace/bgm_loop.mp3 --crossfade 0.5
56
+ playcraft audio normalize --input ta-workspace/bgm_loop.mp3 --output ta-workspace/bgm_loop.mp3 --target-loudness -16
57
+
58
+ # 3. 压缩至体积预算(Facebook 可玩广告 BGM 目标 ≤60KB)
59
+ playcraft audio compress --input ta-workspace/bgm_loop.mp3 --output ta-workspace/asset --target-size 60KB
60
+
61
+ # 4. 将产物写入 sandbox 对应路径(见 binding.target)
62
+ ```
63
+ ## Skill Definition
64
+
65
+ tools:
66
+ - bash
67
+ - write
68
+ - read
69
+ prompt_extension: |
70
+ You are generating a cheerful ukulele BGM for a casual mobile game.
71
+ Follow the Recipe to call the audio generation API with the specified prompt and duration.
72
+ Ensure the output is a proper loop-ready MP3 file. Apply the Binding to wire it into the AudioManager.
@@ -0,0 +1,50 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "atomId": "cheerful_ukulele.aiaudio",
4
+ "bundleType": "aiaudio",
5
+ "category": "audio",
6
+ "mode": "generative",
7
+ "label": {
8
+ "zh": "轻快尤克里里 BGM",
9
+ "en": "Cheerful ukulele BGM"
10
+ },
11
+ "tags": [
12
+ "audio",
13
+ "bgm",
14
+ "music",
15
+ "cheerful",
16
+ "ukulele",
17
+ "casual",
18
+ "loop",
19
+ "upbeat"
20
+ ],
21
+ "bindingRoles": ["bgMusic"],
22
+ "generation": {
23
+ "kind": "bgm",
24
+ "prompt": "cheerful upbeat ukulele loop, casual mobile game background music, tropical feel, light percussion, 120 BPM",
25
+ "duration": 30,
26
+ "loop": true,
27
+ "platformSkill": "playcraft-audio-generation",
28
+ "bgmStyle": "casual",
29
+ "bpm": 120
30
+ },
31
+ "result": {
32
+ "outputFile": "audio.mp3",
33
+ "format": "mp3",
34
+ "constraints": {
35
+ "minDuration": 15,
36
+ "maxDuration": 60
37
+ }
38
+ },
39
+ "binding": {
40
+ "role": "backgroundMusic",
41
+ "target": "scene://entities/AudioManager/bgm/asset",
42
+ "type": "audio-asset-reference",
43
+ "constraints": {
44
+ "playMode": "loop"
45
+ }
46
+ },
47
+ "files": {
48
+ "skill": "SKILL.md"
49
+ }
50
+ }
@@ -0,0 +1,59 @@
1
+ ---
2
+ name: click_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
+ - 产物文件:`click.mp3`
19
+ - 在 Preloader.ts 中作为 `sfxClick` key 加载
20
+
21
+ ## Binding
22
+
23
+ ```json
24
+ {
25
+ "role": "sfxClick",
26
+ "target": "assets/sounds/click.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 "satisfying click sound for successful path removal in a puzzle game" \
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/click.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: click.mp3
59
+ ```
@@ -0,0 +1,45 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "atomId": "click_sfx.aiaudio",
4
+ "bundleType": "aiaudio",
5
+ "category": "audio",
6
+ "mode": "generative",
7
+ "label": {
8
+ "zh": "路径点击消除音效",
9
+ "en": "Path click elimination SFX"
10
+ },
11
+ "tags": [
12
+ "audio",
13
+ "sfx",
14
+ "click",
15
+ "success",
16
+ "path"
17
+ ],
18
+ "bindingRoles": [
19
+ "sfxClick"
20
+ ],
21
+ "generation": {
22
+ "kind": "sfx",
23
+ "prompt": "satisfying click sound for successful path removal in a puzzle game",
24
+ "duration": 1,
25
+ "loop": false,
26
+ "referenceAudio": "ref/click.mp3",
27
+ "platformSkill": "playcraft-audio-generation"
28
+ },
29
+ "result": {
30
+ "outputFile": "ref/click.mp3",
31
+ "format": "mp3",
32
+ "constraints": {
33
+ "maxDuration": 1
34
+ }
35
+ },
36
+ "binding": {
37
+ "role": "sfxClick",
38
+ "target": "assets/sounds/click.mp3",
39
+ "type": "audio-asset-reference"
40
+ },
41
+ "files": {
42
+ "skill": "SKILL.md",
43
+ "asset": "ref/click.mp3"
44
+ }
45
+ }
@@ -0,0 +1,45 @@
1
+ ---
2
+ name: combo_display.aicomponent
3
+ description: 连击计数 UI。追踪时间窗口内的连续成功消除次数,显示连击数字和倒计时进度环,超时后重置连击。
4
+ triggers: 需要实现连击系统 UI 时触发。
5
+ ---
6
+
7
+ # 连击计数 UI(Combo Display UI)
8
+
9
+ ## Scaffold
10
+
11
+ - `src/game/scenes/GameUI/ComboManager.ts`(连击逻辑)
12
+ - `src/game/scenes/GameUI/ComboSmallUI.ts`(小连击 UI 进度环)
13
+
14
+ ## Recipe
15
+
16
+ | 决策 | 原因 |
17
+ |------|------|
18
+ | **逻辑与 UI 同 skill** | ComboManager(连击计数+时间窗口)和 ComboSmallUI(进度环动画)高度耦合;拆分没有复用价值,合并为一个 skill 降低管理成本 |
19
+ | **时间窗口重置** | 玩家在时间窗口内连续消除才累积连击,超时后连击归零;给玩家明确的视觉反馈(进度环倒计时)提升参与感 |
20
+
21
+ ## Adapter
22
+
23
+ - **Role**: `comboDisplay` — 连击计数追踪 + 进度环 UI
24
+ - **Provides**: `ComboManager` 类(连击计数、时间窗口、触发 `maybeShowComboPraiseText`)、`ComboSmallUI` 类(圆形进度环动画)
25
+ - **Requires**: `phaser.aicomponent`(硬依赖)
26
+ - **Consumed by**: `game_scene.aicomponent`(持有 ComboManager)、`path_input_handler.aicomponent`(成功消除时调用 `addCombo()`)
27
+ - **Integration point**: `src/game/scenes/GameUI/ComboManager.ts` + `ComboSmallUI.ts`
28
+
29
+ ## Imports
30
+
31
+ - `phaser.aicomponent`(硬依赖)
32
+
33
+ ## Skill Definition
34
+
35
+ ```yaml
36
+ tools:
37
+ - read_file
38
+ - write_file
39
+ inputs:
40
+ - source: src/game/scenes/GameUI/ComboManager.ts
41
+ - source: src/game/scenes/GameUI/ComboSmallUI.ts
42
+ outputs:
43
+ - comboManager: ComboManager class (combo logic + praise text trigger)
44
+ - comboSmallUI: ComboSmallUI class (circular countdown ring)
45
+ ```
@@ -0,0 +1,31 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "atomId": "combo_display.aicomponent",
4
+ "bundleType": "aicomponent",
5
+ "category": "component",
6
+ "mode": "fixed",
7
+ "label": { "zh": "连击计数 UI", "en": "Combo display UI" },
8
+ "tags": ["ui", "combo", "streak", "chain", "multiplier"],
9
+ "bindingRoles": ["comboDisplay"],
10
+ "scaffold": {
11
+ "files": {
12
+ "src/game/scenes/GameUI/ComboManager.ts": { "source": "ref/ComboManager.ts", "mode": "full", "weight": 10 },
13
+ "src/game/scenes/GameUI/ComboSmallUI.ts": { "source": "ref/ComboSmallUI.ts", "mode": "full", "weight": 10 }
14
+ }
15
+ },
16
+ "imports": [
17
+ { "slot": "engine", "pinAtomId": "phaser.aicomponent", "edgeKind": "requires", "bindAs": "engine" }
18
+ ],
19
+ "exports": [
20
+ { "name": "ComboManager", "kind": "class", "location": "src/game/scenes/GameUI/ComboManager.ts" },
21
+ { "name": "ComboSmallUI", "kind": "class", "location": "src/game/scenes/GameUI/ComboSmallUI.ts" }
22
+ ],
23
+ "neutralDescriptor": {
24
+ "geometry": "combo streak UI showing consecutive success count with a circular countdown progress ring"
25
+ },
26
+ "files": {
27
+ "skill": "SKILL.md",
28
+ "comboManager": "ref/ComboManager.ts",
29
+ "comboSmallUI": "ref/ComboSmallUI.ts"
30
+ }
31
+ }