@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,72 @@
1
+ ---
2
+ name: cta_platform_config.aiconfig
3
+ description: CTA 按钮的多平台适配配置 - 支持 Facebook、Google、TikTok、Unity Ads 等平台的 CTA SDK 差异化接入
4
+ triggers: CTA,call to action,下载按钮,install button,平台适配,platform,facebook,google,tiktok,unity ads
5
+ ---
6
+
7
+ # cta_platform_config.aiconfig
8
+
9
+ CTA(Call-to-Action)按钮的多平台适配配置。不同广告平台对 CTA 的实现方式有显著差异:
10
+
11
+ | 平台 | SDK | 调用方式 |
12
+ |------|-----|---------|
13
+ | Facebook | `FbPlayableAd` | `FbPlayableAd.onCTAClick()` |
14
+ | Google | `ExitApi` | `ExitApi.exit()` |
15
+ | TikTok | `window.playableSDK` | `window.playableSDK.openAppStore()` |
16
+ | Unity Ads | `mraid` | `mraid.open(storeUrl)` |
17
+
18
+ 本配置统一管理 CTA 按钮的文案、位置、显示时机和平台 SDK 调用方式。
19
+
20
+ ## Recipe
21
+
22
+ - **配置方式**:参数化(parametric)
23
+ - **核心参数**:
24
+ - `defaultPlatform`: `"facebook"` — 默认目标平台
25
+ - `ctaText`: `{ "zh": "立即下载", "en": "Install Now" }` — CTA 文案(多语言)
26
+ - `ctaPosition`: `"bottom-center"` — CTA 按钮位置
27
+ - `ctaShowAfterLevel`: `1` — 第几关后显示 CTA
28
+ - `ctaAlwaysVisible`: `false` — 是否始终显示
29
+ - `platforms`: 各平台 SDK 和方法的映射表
30
+ - **可 fork 变体**:
31
+ - 激进型:`ctaAlwaysVisible: true`,始终显示 CTA
32
+ - Google 优先:`defaultPlatform: "google"`, `ctaShowAfterLevel: 0`
33
+ - TikTok 全屏点击:追加 `ctaFullScreenTap: true`
34
+
35
+ **配置步骤:**
36
+ 1. 读取项目的 `game/config.json`
37
+ 2. 写入 `cta` 配置块,包含默认平台、文案、位置
38
+ 3. 写入 `cta.platforms` 子对象,包含各平台的 SDK 和调用方法
39
+ 4. 确保 `cta.showAfterLevel` 与难度曲线的 `ctaTriggerAfterLevel` 一致
40
+
41
+ ## Result
42
+
43
+ - **产物**:修改 `game/config.json` 的 CTA 配置块
44
+ - **格式**:JSON patch
45
+ - **目标键**:`cta`
46
+ - **包含子键**:`defaultPlatform`, `ctaText`, `ctaPosition`, `ctaShowAfterLevel`, `ctaAlwaysVisible`, `platforms`
47
+
48
+ ## Binding
49
+
50
+ - **Binding Role**:`gameConfig`
51
+ - **挂载目标**:`game/config.json`
52
+ - **引用类型**:`config-key-value`
53
+ - **与其他 Skill 的关系**:
54
+ - 与 `difficulty_curve_designer.aiconfig` 联动:CTA 触发时机应在峰值体验之后
55
+ - 与 `ad_compliance_rules.aiconfig` 联动:CTA 实现必须符合各平台合规要求
56
+
57
+ ## Skill Definition
58
+
59
+ tools:
60
+ - read
61
+ - write
62
+ prompt_extension: |
63
+ You are configuring CTA (Call-to-Action) behavior for a playable ad.
64
+ Each ad platform has its own SDK for triggering the app store redirect:
65
+ - Facebook: FbPlayableAd.onCTAClick()
66
+ - Google: ExitApi.exit()
67
+ - TikTok: window.playableSDK.openAppStore()
68
+ - Unity Ads: mraid.open(storeUrl)
69
+ Read game/config.json and write the cta config block.
70
+ The CTA button implementation in code should detect the platform at runtime
71
+ and call the appropriate SDK method. Write a platform-agnostic wrapper function.
72
+ Ensure ctaShowAfterLevel aligns with the difficulty curve's peak level.
@@ -0,0 +1,56 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "atomId": "cta_platform_config.aiconfig",
4
+ "bundleType": "aiconfig",
5
+ "category": "config",
6
+ "mode": "parametric",
7
+ "label": {
8
+ "zh": "CTA 多平台适配配置",
9
+ "en": "CTA platform adaptation config"
10
+ },
11
+ "tags": ["config", "cta", "platform", "facebook", "google", "tiktok", "unity-ads", "playable-ads", "download", "install"],
12
+ "bindingRoles": ["gameConfig"],
13
+ "generation": {
14
+ "kind": "config-patch",
15
+ "params": {
16
+ "defaultPlatform": "facebook",
17
+ "ctaText": {
18
+ "zh": "立即下载",
19
+ "en": "Install Now"
20
+ },
21
+ "ctaPosition": "bottom-center",
22
+ "ctaShowAfterLevel": 1,
23
+ "ctaAlwaysVisible": false,
24
+ "platforms": {
25
+ "facebook": {
26
+ "sdk": "FbPlayableAd",
27
+ "method": "FbPlayableAd.onCTAClick()"
28
+ },
29
+ "google": {
30
+ "sdk": "ExitApi",
31
+ "method": "ExitApi.exit()"
32
+ },
33
+ "tiktok": {
34
+ "sdk": "window.playableSDK",
35
+ "method": "window.playableSDK.openAppStore()"
36
+ },
37
+ "unity": {
38
+ "sdk": "mraid",
39
+ "method": "mraid.open(storeUrl)"
40
+ }
41
+ }
42
+ }
43
+ },
44
+ "result": {
45
+ "configKey": "cta",
46
+ "format": "json-patch"
47
+ },
48
+ "binding": {
49
+ "role": "gameConfig",
50
+ "target": "game/config.json",
51
+ "type": "config-key-value"
52
+ },
53
+ "files": {
54
+ "skill": "SKILL.md"
55
+ }
56
+ }
@@ -0,0 +1,75 @@
1
+ ---
2
+ name: debug_overlay.aicomponent
3
+ description: 开发调试覆盖层。在游戏画面上叠加可视化调试信息:格子坐标、碰撞区域、命中范围、方向向量、FPS、关卡切换控制。通过 DebugConfig 开关控制。
4
+ triggers: 调试,debug,overlay,格子坐标,碰撞可视化,FPS,开发工具,dev tools
5
+ ---
6
+
7
+ # 开发调试覆盖层(Debug Overlay)
8
+
9
+ ## 说明
10
+
11
+ 在 Game 场景上叠加半透明调试信息层,帮助开发者快速定位问题:
12
+
13
+ - **格子坐标网格** — 每个格子中心显示 `(col,row)` 文字
14
+ - **碰撞区域高亮** — 被路径占据的格子用半透明色块标记
15
+ - **点击命中范围** — 显示每个箭头头部的点击判定圆形
16
+ - **方向向量** — 从箭头头部画出方向辅助线到棋盘边界
17
+ - **路径索引** — 每条路径显示 `#0` `#1` 编号
18
+ - **FPS / 内存** — 左上角实时帧率
19
+ - **关卡切换** — 底部 ← → 按钮快速切换关卡
20
+
21
+ ## Scaffold
22
+
23
+ | 目标路径 | 来源 | 说明 |
24
+ |---------|-----|------|
25
+ | `src/game/scenes/GameUI/DebugOverlay.ts` | `ref/DebugOverlay.ts` | 完整调试覆盖层 |
26
+
27
+ ## 开关控制
28
+
29
+ 在 `DebugConfig.ts` 中添加:
30
+
31
+ ```typescript
32
+ /** 是否显示调试覆盖层 */
33
+ export const SHOW_DEBUG_OVERLAY = true; // 发布前改为 false
34
+ ```
35
+
36
+ 在 `Game.ts` 的 `create()` 末尾:
37
+
38
+ ```typescript
39
+ if (SHOW_DEBUG_OVERLAY) {
40
+ new DebugOverlay(this);
41
+ }
42
+ ```
43
+
44
+ ## Recipe
45
+
46
+ | 决策 | 原因 |
47
+ |------|------|
48
+ | **独立组件,条件加载** | 调试渲染在发布版本中必须零开销;独立 class + 单一开关标志(`SHOW_DEBUG_OVERLAY`)保证发布时完整移除,不影响游戏逻辑 |
49
+ | **Graphics 叠加而非精灵** | 调试信息(坐标网格、碰撞区域)是动态内容,用 Phaser Graphics API 绘制无需额外资产文件 |
50
+ | **可视化命中范围** | 箭头头部的点击判定圆是最常见的调试需求(用户反馈"点不到"),优先可视化 |
51
+
52
+ ## Adapter
53
+
54
+ - **Role**: `debugOverlay` — 开发期可视化调试层(生产构建中条件禁用)
55
+ - **Provides**: `DebugOverlay` 类(格子坐标、碰撞区域、FPS、关卡切换 UI)
56
+ - **Requires**: `phaser.aicomponent`、`grid_board_layout.aicomponent`(格子坐标计算)
57
+ - **Consumed by**: `game_scene.aicomponent`(在 `Game.create()` 末尾条件实例化)
58
+ - **Integration point**: `src/game/scenes/Game.ts` → `if (SHOW_DEBUG_OVERLAY) new DebugOverlay(this)`
59
+
60
+ ## Imports
61
+
62
+ - `phaser.aicomponent`(硬依赖)
63
+ - `grid_board_layout.aicomponent`(硬依赖:格子坐标计算)
64
+
65
+ ## Skill Definition
66
+
67
+ ```yaml
68
+ tools:
69
+ - read_file
70
+ - write_file
71
+ inputs:
72
+ - source: ref/DebugOverlay.ts
73
+ outputs:
74
+ - debugOverlay: DebugOverlay class
75
+ ```
@@ -0,0 +1,17 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "atomId": "debug_overlay.aicomponent",
4
+ "bundleType": "aicomponent",
5
+ "category": "tool",
6
+ "mode": "fixed",
7
+ "label": {
8
+ "zh": "开发调试覆盖层",
9
+ "en": "Debug overlay for development"
10
+ },
11
+ "tags": ["debug", "overlay", "grid", "collision", "fps", "development"],
12
+ "bindingRoles": ["debugTool"],
13
+ "files": {
14
+ "skill": "SKILL.md",
15
+ "ref": ["ref/DebugOverlay.ts"]
16
+ }
17
+ }
@@ -0,0 +1,144 @@
1
+ import * as Phaser from "phaser";
2
+
3
+ /**
4
+ * 开发调试覆盖层
5
+ * 在游戏场景上叠加可视化调试信息
6
+ */
7
+ export class DebugOverlay {
8
+ private scene: any;
9
+ private graphics!: Phaser.GameObjects.Graphics;
10
+ private texts: Phaser.GameObjects.Text[] = [];
11
+ private fpsText!: Phaser.GameObjects.Text;
12
+ private visible = true;
13
+
14
+ constructor(scene: any) {
15
+ this.scene = scene;
16
+ this.create();
17
+ }
18
+
19
+ private create(): void {
20
+ const scene = this.scene;
21
+
22
+ // FPS 文本
23
+ this.fpsText = scene.add
24
+ .text(10, 10, "FPS: 0", {
25
+ fontSize: "14px",
26
+ color: "#00ff00",
27
+ backgroundColor: "#00000088",
28
+ padding: { x: 4, y: 2 },
29
+ })
30
+ .setScrollFactor(0)
31
+ .setDepth(9000);
32
+
33
+ // 调试图形层
34
+ this.graphics = scene.add.graphics();
35
+ this.graphics.setDepth(8999);
36
+ scene.boardContainer.add(this.graphics);
37
+
38
+ // 绘制初始调试信息
39
+ this.drawDebugInfo();
40
+
41
+ // 每帧更新 FPS
42
+ scene.events.on("update", () => {
43
+ this.fpsText.setText(`FPS: ${scene.game.loop.actualFps.toFixed(0)}`);
44
+ });
45
+
46
+ // 按 D 键切换显示/隐藏
47
+ scene.input.keyboard?.on("keydown-D", () => {
48
+ this.visible = !this.visible;
49
+ this.graphics.setVisible(this.visible);
50
+ this.texts.forEach(t => t.setVisible(this.visible));
51
+ this.fpsText.setVisible(this.visible);
52
+ });
53
+ }
54
+
55
+ private drawDebugInfo(): void {
56
+ const scene = this.scene;
57
+ const level = scene.level;
58
+ if (!level) return;
59
+
60
+ const g = this.graphics;
61
+ g.clear();
62
+
63
+ // 1. 格子网格线
64
+ g.lineStyle(1, 0x444444, 0.3);
65
+ for (let row = 0; row <= level.rows; row++) {
66
+ const y = row * scene.cellHeight;
67
+ g.lineBetween(0, y, level.cols * scene.cellWidth, y);
68
+ }
69
+ for (let col = 0; col <= level.cols; col++) {
70
+ const x = col * scene.cellWidth;
71
+ g.lineBetween(x, 0, x, level.rows * scene.cellHeight);
72
+ }
73
+
74
+ // 2. 格子坐标文字 + 碰撞区域
75
+ for (let row = 0; row < level.rows; row++) {
76
+ for (let col = 0; col < level.cols; col++) {
77
+ const cx = col * scene.cellWidth + scene.cellWidth / 2;
78
+ const cy = row * scene.cellHeight + scene.cellHeight / 2;
79
+
80
+ // 坐标文字
81
+ const coordText = scene.add
82
+ .text(cx, cy, `${col},${row}`, {
83
+ fontSize: "10px",
84
+ color: "#888888",
85
+ })
86
+ .setOrigin(0.5)
87
+ .setDepth(8998);
88
+ scene.boardContainer.add(coordText);
89
+ this.texts.push(coordText);
90
+
91
+ // 碰撞区域高亮
92
+ const idx = row * level.cols + col;
93
+ const occupied = level.paths.some((p: any, i: number) => {
94
+ if (scene.removedPaths.has(i)) return false;
95
+ return p.indices.includes(idx);
96
+ });
97
+ if (occupied) {
98
+ g.fillStyle(0xff0000, 0.1);
99
+ g.fillRect(
100
+ col * scene.cellWidth + 2,
101
+ row * scene.cellHeight + 2,
102
+ scene.cellWidth - 4,
103
+ scene.cellHeight - 4,
104
+ );
105
+ }
106
+ }
107
+ }
108
+
109
+ // 3. 路径索引 + 命中范围 + 方向向量
110
+ for (let i = 0; i < level.paths.length; i++) {
111
+ if (scene.removedPaths.has(i)) continue;
112
+
113
+ const path = level.paths[i];
114
+ const hx = path.head.x * scene.cellWidth + scene.cellWidth / 2;
115
+ const hy = path.head.y * scene.cellHeight + scene.cellHeight / 2;
116
+
117
+ // 路径编号
118
+ const idxText = scene.add
119
+ .text(hx, hy - scene.cellHeight * 0.4, `#${i}`, {
120
+ fontSize: "12px",
121
+ color: "#ffff00",
122
+ fontStyle: "bold",
123
+ backgroundColor: "#00000088",
124
+ padding: { x: 2, y: 1 },
125
+ })
126
+ .setOrigin(0.5)
127
+ .setDepth(9001);
128
+ scene.boardContainer.add(idxText);
129
+ this.texts.push(idxText);
130
+
131
+ // 命中判定圆
132
+ const hitRadius = scene.cellSize * 0.6;
133
+ g.lineStyle(1, 0x00ff00, 0.5);
134
+ g.strokeCircle(hx, hy, hitRadius);
135
+
136
+ // 方向辅助线
137
+ const dx = path.direction === "right" ? 1 : path.direction === "left" ? -1 : 0;
138
+ const dy = path.direction === "down" ? 1 : path.direction === "up" ? -1 : 0;
139
+ const lineLen = Math.max(level.cols, level.rows) * scene.cellSize;
140
+ g.lineStyle(1, 0x00ffff, 0.4);
141
+ g.lineBetween(hx, hy, hx + dx * lineLen, hy + dy * lineLen);
142
+ }
143
+ }
144
+ }
@@ -0,0 +1,63 @@
1
+ ---
2
+ name: desert.aiimage
3
+ description: 沙漠背景图封包 - 金色沙丘/干旱场景,适合停车逃脱、箭头逃脱类游戏的暖色背景
4
+ triggers: 沙漠,desert,沙丘,sand,背景,background,黄色,yellow,暖色,warm,干旱
5
+ ---
6
+
7
+ # desert.aiimage
8
+
9
+ 沙漠主题背景图封包。适合逃脱益智类游戏,营造紧张干旱的视觉氛围。
10
+
11
+ ## Recipe
12
+
13
+ - **基础 prompt**:`vast desert landscape, golden sand dunes, clear blue sky, casual mobile game style, flat design, warm colors`
14
+ - **宽高比**:9:16
15
+ - **风格**:cartoon / flat design
16
+ - **可 fork 变体**:
17
+ - 夜间沙漠:`desert at night, starry sky, moonlit sand dunes, cool blue tones`
18
+ - 绿洲:`desert oasis, palm trees, turquoise water, lush contrast`
19
+ - 沙暴:`sandstorm, orange sky, dramatic visibility, tension`
20
+
21
+ **生成步骤:**
22
+ 1. 确认尺寸约束(1080×1920 PNG)
23
+ 2. 调用图像生成 API
24
+ 3. 验证并写入 `background.png`,更新 manifest
25
+
26
+ ## Result
27
+
28
+ - **产物文件**:`background.png`
29
+ - **格式**:PNG,最小 1080×1920
30
+
31
+ ## Binding
32
+
33
+ - **Binding Role**:`backgroundTexture`
34
+ - **挂载目标**:`scene://entities/Background/element/textureAsset`
35
+ - **引用类型**:`texture-asset-reference`
36
+
37
+ ## 生成方式
38
+
39
+ Platform Skill: `playcraft-image-generation`
40
+
41
+ ```bash
42
+ # 1. 生成图片(参考 ref/ 中的参考图)
43
+ playcraft tools generate-image \
44
+ --prompt "vast desert landscape, golden sand dunes, clear blue sky, casual mobile game style, flat design, warm colors" \
45
+ --aspect-ratio 9:16 \
46
+ --image-model google/imagen-3.0-generate-002 \
47
+ --output ta-workspace/raw.png
48
+
49
+ # 2. 后处理(去白底 + 格式转换)
50
+ playcraft image remove-background --input ta-workspace/raw.png --output ta-workspace/trimmed.png
51
+ playcraft image convert --input ta-workspace/trimmed.png --output ta-workspace/background.webp --quality 85
52
+
53
+ # 3. 将产物写入 sandbox 对应路径(见 binding.target)
54
+ ```
55
+ ## Skill Definition
56
+
57
+ tools:
58
+ - bash
59
+ - write
60
+ - read
61
+ prompt_extension: |
62
+ You are generating a desert background image for a mobile game.
63
+ Follow the Recipe to generate the image. Verify output constraints, then apply Binding.
@@ -0,0 +1,49 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "atomId": "desert.aiimage",
4
+ "bundleType": "aiimage",
5
+ "category": "visual",
6
+ "mode": "generative",
7
+ "label": {
8
+ "zh": "沙漠背景",
9
+ "en": "Desert background"
10
+ },
11
+ "tags": [
12
+ "background",
13
+ "visual",
14
+ "desert",
15
+ "sand",
16
+ "hot",
17
+ "arid",
18
+ "casual"
19
+ ],
20
+ "bindingRoles": ["backgroundTexture"],
21
+ "generation": {
22
+ "kind": "image",
23
+ "prompt": "vast desert landscape, golden sand dunes, clear blue sky, casual mobile game style, flat design, warm colors",
24
+ "aspectRatio": "9:16",
25
+ "model": "google/imagen-3.0-generate-002",
26
+ "style": "cartoon",
27
+ "platformSkill": "playcraft-image-generation"
28
+ },
29
+ "result": {
30
+ "outputFile": "background.png",
31
+ "format": "png",
32
+ "constraints": {
33
+ "minWidth": 1080,
34
+ "minHeight": 1920
35
+ }
36
+ },
37
+ "binding": {
38
+ "role": "backgroundTexture",
39
+ "target": "scene://entities/Background/element/textureAsset",
40
+ "type": "texture-asset-reference",
41
+ "constraints": {
42
+ "format": "png",
43
+ "minWidth": 1080
44
+ }
45
+ },
46
+ "files": {
47
+ "skill": "SKILL.md"
48
+ }
49
+ }
@@ -0,0 +1,68 @@
1
+ ---
2
+ name: difficulty_curve_designer.aiconfig
3
+ description: 试玩广告全局难度曲线设计配置 - 定义关卡难度递进策略,包括首关保胜、峰值关卡、CTA 触发时机
4
+ triggers: 难度曲线,difficulty curve,关卡难度,level difficulty,曲线设计,progression,试玩广告难度,playable-ads difficulty
5
+ ---
6
+
7
+ # difficulty_curve_designer.aiconfig
8
+
9
+ 试玩广告全局难度曲线设计配置。定义关卡难度递进策略,包括:
10
+
11
+ - **首关保胜**:第一关必须保证玩家成功,建立正反馈
12
+ - **峰值体验**:在第 3 关左右制造峰值难度,让玩家感受到挑战
13
+ - **CTA 触发时机**:峰值体验后触发 CTA,利用玩家的高参与度
14
+ - **难度回落**:峰值后适当降低难度,给予"差一点就赢"的体验,驱动下载
15
+
16
+ ## Recipe
17
+
18
+ - **配置方式**:参数化(parametric)
19
+ - **核心参数**:
20
+ - `curveType`: `"playable-ads-standard"` — 试玩广告标准曲线
21
+ - `firstLevelGuaranteeWin`: `true` — 首关保胜
22
+ - `peakDifficultyLevel`: `3` — 峰值难度在第几关
23
+ - `ctaTriggerAfterLevel`: `3` — CTA 在第几关后触发
24
+ - `totalLevels`: `5` — 总关卡数
25
+ - `difficultyScale`: `[0.2, 0.4, 0.8, 0.6, 0.5]` — 每关难度系数(0-1)
26
+ - **可 fork 变体**:
27
+ - 急速体验:`totalLevels: 3`, `difficultyScale: [0.2, 0.7, 0.5]`
28
+ - 平缓入门:`difficultyScale: [0.1, 0.2, 0.5, 0.8, 0.4]`
29
+ - 持续攀升(失败驱动下载):`difficultyScale: [0.2, 0.4, 0.6, 0.8, 1.0]`
30
+
31
+ **配置步骤:**
32
+ 1. 读取项目的 `game/config.json`
33
+ 2. 写入 `difficulty.curve` 配置块,包含曲线类型和关卡参数
34
+ 3. 写入 `difficulty.scale` 数组,定义每关的难度系数
35
+ 4. 设置 `difficulty.firstLevelGuaranteeWin` 标志
36
+ 5. 关联 CTA 触发时机 `cta.triggerAfterLevel`
37
+
38
+ ## Result
39
+
40
+ - **产物**:修改 `game/config.json` 的难度曲线配置块
41
+ - **格式**:JSON patch
42
+ - **目标键**:`difficulty.curve`
43
+ - **包含子键**:`curveType`, `firstLevelGuaranteeWin`, `peakDifficultyLevel`, `totalLevels`, `difficultyScale`
44
+
45
+ ## Binding
46
+
47
+ - **Binding Role**:`gameConfig`
48
+ - **挂载目标**:`game/config.json`
49
+ - **引用类型**:`config-key-value`
50
+ - **与其他 Skill 的关系**:
51
+ - 与 `ux_flow_spec.aiconfig` 联动:`totalLevels` 应与 UX 流程的 gameplay 阶段一致
52
+ - 与 `gameplay_balance_check.aivalidator` 联动:校验器会读取此配置检查平衡性
53
+
54
+ ## Skill Definition
55
+
56
+ tools:
57
+ - read
58
+ - write
59
+ prompt_extension: |
60
+ You are designing the difficulty curve for a playable ad (试玩广告).
61
+ The curve must follow the "hook → challenge → CTA" pattern:
62
+ 1. Level 1 MUST guarantee player success (firstLevelGuaranteeWin: true)
63
+ 2. Difficulty ramps up to a peak around level 3 (peakDifficultyLevel)
64
+ 3. After the peak, trigger CTA while engagement is highest
65
+ 4. Post-peak levels should feel "almost winnable" to drive downloads
66
+ Read game/config.json, apply the difficulty.curve config patch, and save.
67
+ The difficultyScale array values range from 0.0 (trivial) to 1.0 (impossible).
68
+ Total playable ad duration should stay within 30-60 seconds across all levels.
@@ -0,0 +1,36 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "atomId": "difficulty_curve_designer.aiconfig",
4
+ "bundleType": "aiconfig",
5
+ "category": "config",
6
+ "mode": "parametric",
7
+ "label": {
8
+ "zh": "试玩广告难度曲线设计",
9
+ "en": "Playable ads difficulty curve designer"
10
+ },
11
+ "tags": ["config", "difficulty", "curve", "design", "progression", "cta", "playable-ads"],
12
+ "bindingRoles": ["gameConfig"],
13
+ "generation": {
14
+ "kind": "config-patch",
15
+ "params": {
16
+ "curveType": "playable-ads-standard",
17
+ "firstLevelGuaranteeWin": true,
18
+ "peakDifficultyLevel": 3,
19
+ "ctaTriggerAfterLevel": 3,
20
+ "totalLevels": 5,
21
+ "difficultyScale": [0.2, 0.4, 0.8, 0.6, 0.5]
22
+ }
23
+ },
24
+ "result": {
25
+ "configKey": "difficulty.curve",
26
+ "format": "json-patch"
27
+ },
28
+ "binding": {
29
+ "role": "gameConfig",
30
+ "target": "game/config.json",
31
+ "type": "config-key-value"
32
+ },
33
+ "files": {
34
+ "skill": "SKILL.md"
35
+ }
36
+ }
@@ -0,0 +1,43 @@
1
+ ---
2
+ name: digit_renderer.aicomponent
3
+ description: 七段数码管风格数字渲染器。用 Phaser Graphics API 绘制倒计时数字和冒号分隔符,模拟 LED 七段显示效果。
4
+ triggers: 需要绘制七段数码管风格数字显示时触发。
5
+ ---
6
+
7
+ # 七段数码管渲染器(Seven-Segment Digit Renderer)
8
+
9
+ ## Scaffold
10
+
11
+ `src/game/scenes/GameUI/DigitRenderer.ts`
12
+
13
+ ## Recipe
14
+
15
+ | 决策 | 原因 |
16
+ |------|------|
17
+ | **七段数码管风格** | 倒计时数字用 LED 风格,视觉上比普通字体更紧凑、更"游戏感";且无字体资产依赖 |
18
+ | **纯 Graphics API 实现** | 不依赖字体文件或图片资产;七段数字用矩形拼接,跨平台渲染一致 |
19
+ | **抽取为独立 skill** | `countdown_timer.aicomponent` 复用本渲染器,不同场景(倒计时、得分)可组合使用而不重复实现绘制逻辑 |
20
+
21
+ ## Adapter
22
+
23
+ - **Role**: `digitRenderer` — 七段数码管风格数字 Graphics 渲染器
24
+ - **Provides**: `DigitRenderer` 类(绘制数字、冒号分隔符)
25
+ - **Requires**: `phaser.aicomponent`(硬依赖:Graphics API)
26
+ - **Consumed by**: `countdown_timer.aicomponent`(倒计时显示)
27
+ - **Integration point**: `src/game/scenes/GameUI/DigitRenderer.ts` → CountdownDisplay 持有实例
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/DigitRenderer.ts
41
+ outputs:
42
+ - digitRenderer: DigitRenderer class
43
+ ```
@@ -0,0 +1,25 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "atomId": "digit_renderer.aicomponent",
4
+ "bundleType": "aicomponent",
5
+ "category": "component",
6
+ "mode": "fixed",
7
+ "label": { "zh": "七段数码管渲染器", "en": "Seven-segment digit renderer" },
8
+ "tags": ["ui", "digit", "seven-segment", "number-display", "graphics", "phaser"],
9
+ "bindingRoles": ["digitGlyphRenderer"],
10
+ "scaffold": {
11
+ "files": {
12
+ "src/game/scenes/GameUI/DigitRenderer.ts": { "source": "ref/DigitRenderer.ts", "mode": "full", "weight": 10 }
13
+ }
14
+ },
15
+ "imports": [
16
+ { "slot": "engine", "pinAtomId": "phaser.aicomponent", "edgeKind": "requires", "bindAs": "engine" }
17
+ ],
18
+ "exports": [
19
+ { "name": "DigitRenderer", "kind": "class", "location": "src/game/scenes/GameUI/DigitRenderer.ts" }
20
+ ],
21
+ "neutralDescriptor": {
22
+ "geometry": "seven-segment LED digit renderer drawing numbers and colon separators using Phaser Graphics primitives"
23
+ },
24
+ "files": { "skill": "SKILL.md", "digitRenderer": "ref/DigitRenderer.ts" }
25
+ }