@funpixel/tools 0.1.0 → 0.1.1

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 (784) hide show
  1. package/bench/handlers/bake_emissive.py +2 -2
  2. package/bench/handlers/decimate.py +2 -2
  3. package/bench/handlers/fracture.py +1 -1
  4. package/bench/handlers/normalize_transform.py +3 -3
  5. package/bench/handlers/render_views.py +2 -2
  6. package/bench/handlers/views.py +6 -6
  7. package/dist/cli.js +8 -9
  8. package/dist/commands/feedback.js +5 -5
  9. package/dist/commands/init.js +1 -1
  10. package/dist/direct/read.js +1 -1
  11. package/dist/doctor/unity-checks.js +5 -5
  12. package/dist/doctor/unity-history.js +17 -33
  13. package/dist/feedback/ab.js +0 -40
  14. package/dist/gen/unity.js +3 -3
  15. package/dist/mcp/server.js +2 -1
  16. package/dist/pipeline/pipeline.js +6 -6
  17. package/dist/playtest/moments.js +1 -1
  18. package/dist/playtest/report.js +1 -1
  19. package/dist/production/mirror.js +2 -2
  20. package/dist/sim/curve.js +3 -3
  21. package/dist/spec/scaffold.js +1 -1
  22. package/dist/studio/pitch.js +1 -1
  23. package/dist/unity/probe/install.js +1 -1
  24. package/dist/vendor/verify/src/page/actors.js +2 -2
  25. package/dist/vendor/verify/src/page/capture_view.js +2 -2
  26. package/dist/vendor/verify/src/page/dressing.js +1 -1
  27. package/dist/vendor/verify/src/page/frame_honesty.js +1 -1
  28. package/dist/vendor/verify/src/page/front_door.js +2 -2
  29. package/dist/vendor/verify/src/page/grounding.js +3 -3
  30. package/dist/vendor/verify/src/page/hud.js +3 -3
  31. package/dist/vendor/verify/src/page/layout.js +5 -5
  32. package/dist/vendor/verify/src/page/life_anim.js +6 -6
  33. package/dist/vendor/verify/src/page/mechanic_check.js +1 -1
  34. package/dist/vendor/verify/src/page/phone_check.js +2 -2
  35. package/dist/vendor/verify/src/page/recorder.js +2 -2
  36. package/dist/vendor/verify/src/page/surfaces.js +2 -2
  37. package/dist/vendor/verify/src/page/world_actors.js +3 -3
  38. package/package.json +2 -2
  39. package/plugins/README.md +16 -0
  40. package/plugins/claude/README.md +2 -3
  41. package/plugins/claude/agents/art-director.md +2 -2
  42. package/plugins/claude/commands/playtest.md +2 -2
  43. package/plugins/claude/hooks/brief.md +1 -1
  44. package/plugins/claude/hooks/guidance.json +1 -1
  45. package/plugins/claude/hooks/vendor/pipeline/pipeline.mjs +6 -6
  46. package/plugins/claude/hooks/vendor/studio/pitch.mjs +1 -1
  47. package/plugins/claude/skills/3d/references/bake-off.md +3 -3
  48. package/plugins/claude/skills/3d/references/characters.md +1 -1
  49. package/plugins/claude/skills/3d/references/hero-route.md +5 -5
  50. package/plugins/claude/skills/3d/references/level-spec.md +1 -1
  51. package/plugins/claude/skills/3d/references/levels.md +3 -3
  52. package/plugins/claude/skills/3d/references/light-and-places.md +3 -3
  53. package/plugins/claude/skills/3d/references/painted-target.md +7 -7
  54. package/plugins/claude/skills/3d/references/three-loading.md +4 -4
  55. package/plugins/claude/skills/3d/references/unity.md +13 -13
  56. package/plugins/claude/skills/art/references/animation.md +1 -1
  57. package/plugins/claude/skills/art/references/cast.md +3 -3
  58. package/plugins/claude/skills/art/references/effects.md +2 -2
  59. package/plugins/claude/skills/art/references/frames.md +6 -6
  60. package/plugins/claude/skills/art/references/judging-frames.md +8 -8
  61. package/plugins/claude/skills/art/references/look.md +4 -4
  62. package/plugins/claude/skills/art/references/pipeline.md +2 -2
  63. package/plugins/claude/skills/art/references/prompts.md +4 -4
  64. package/plugins/claude/skills/art/references/ui.md +15 -15
  65. package/plugins/claude/skills/art/references/unity.md +14 -14
  66. package/plugins/claude/skills/audio/references/adaptive-music.md +4 -4
  67. package/plugins/claude/skills/audio/references/engine.md +2 -2
  68. package/plugins/claude/skills/audio/references/measure.md +1 -1
  69. package/plugins/claude/skills/audio/references/unity.md +20 -19
  70. package/plugins/claude/skills/game-feel/SKILL.md +4 -4
  71. package/plugins/claude/skills/game-feel/references/contact.md +6 -6
  72. package/plugins/claude/skills/game-feel/references/unity.md +18 -23
  73. package/plugins/claude/skills/game-logic/SKILL.md +3 -3
  74. package/plugins/claude/skills/game-logic/references/balance.md +2 -2
  75. package/plugins/claude/skills/game-logic/references/depth.md +2 -2
  76. package/plugins/claude/skills/game-logic/references/escalation.md +5 -5
  77. package/plugins/claude/skills/game-logic/references/probes.md +10 -10
  78. package/plugins/claude/skills/game-logic/references/unity.md +28 -28
  79. package/plugins/claude/skills/game-spine/SKILL.md +1 -1
  80. package/plugins/claude/skills/game-spine/references/performance.md +2 -2
  81. package/plugins/claude/skills/game-spine/references/replay.md +11 -11
  82. package/plugins/claude/skills/game-spine/references/room-api.md +1 -1
  83. package/plugins/claude/skills/game-spine/references/sdk.md +1 -1
  84. package/plugins/claude/skills/gdd/SKILL.md +2 -2
  85. package/plugins/claude/skills/gdd/references/as-built.md +2 -2
  86. package/plugins/claude/skills/gdd/references/design-measures.md +2 -2
  87. package/plugins/claude/skills/gdd/references/design-note.md +1 -1
  88. package/plugins/claude/skills/gdd/references/first-look.md +1 -1
  89. package/plugins/claude/skills/gdd/references/floors.md +2 -2
  90. package/plugins/claude/skills/gdd/references/gameplay-contract.md +1 -1
  91. package/plugins/claude/skills/gdd/references/genre-puzzle.md +4 -4
  92. package/plugins/claude/skills/gdd/references/genre-racing.md +2 -2
  93. package/plugins/claude/skills/gdd/references/genre-rpg.md +2 -2
  94. package/plugins/claude/skills/gdd/references/genre-shooter.md +2 -2
  95. package/plugins/claude/skills/gdd/references/genre-survival.md +2 -2
  96. package/plugins/claude/skills/gdd/references/invent-first.md +3 -3
  97. package/plugins/claude/skills/gdd/references/level-and-fun.md +11 -11
  98. package/plugins/claude/skills/gdd/references/pages.md +2 -5
  99. package/plugins/claude/skills/gdd/references/plan-at-size.md +5 -5
  100. package/plugins/claude/skills/gdd/references/production-tiers.md +11 -11
  101. package/plugins/claude/skills/gdd/references/sections.md +7 -7
  102. package/plugins/claude/skills/gdd/references/spec-folder.md +3 -3
  103. package/plugins/claude/skills/gdd/references/the-path.md +3 -4
  104. package/plugins/claude/skills/gdd/references/world-and-identity.md +4 -4
  105. package/plugins/claude/skills/gdd/references/worth.md +4 -4
  106. package/plugins/claude/skills/mobile-ui/SKILL.md +3 -3
  107. package/plugins/claude/skills/mobile-ui/references/hud-and-title.md +3 -3
  108. package/plugins/claude/skills/mobile-ui/references/phone-check.md +1 -1
  109. package/plugins/claude/skills/mobile-ui/references/recipes.md +1 -1
  110. package/plugins/claude/skills/mobile-ui/references/restyle-ui.md +11 -11
  111. package/plugins/claude/skills/mobile-ui/references/unity.md +23 -23
  112. package/plugins/claude/skills/publishing/references/compose.md +1 -1
  113. package/plugins/claude/skills/publishing/references/server-build.md +1 -1
  114. package/plugins/claude/skills/store/SKILL.md +3 -3
  115. package/plugins/claude/skills/store/references/app-store.md +1 -1
  116. package/plugins/claude/skills/store/references/google-play.md +2 -2
  117. package/plugins/claude/skills/store/references/ios-release.md +19 -20
  118. package/plugins/claude/skills/store/references/money.md +2 -2
  119. package/plugins/claude/skills/store/references/purchases-and-review.md +18 -18
  120. package/plugins/claude/skills/store/references/readiness-page.md +1 -1
  121. package/plugins/claude/skills/store/references/readiness.md +3 -3
  122. package/plugins/claude/skills/store/references/unity-store.md +9 -12
  123. package/plugins/claude/skills/unity-game/SKILL.md +28 -35
  124. package/plugins/claude/skills/unity-game/references/agent-ops.md +9 -9
  125. package/plugins/claude/skills/unity-game/references/fixes.md +21 -21
  126. package/plugins/claude/skills/unity-game/references/from-a-web-game.md +17 -17
  127. package/plugins/claude/skills/unity-game/references/handing-off.md +4 -4
  128. package/plugins/claude/skills/unity-game/references/performance.md +10 -14
  129. package/plugins/claude/skills/unity-game/references/probe.md +4 -4
  130. package/plugins/claude/skills/unity-game/references/shared-mac.md +1 -1
  131. package/plugins/claude/skills/unity-game/references/traps.md +13 -14
  132. package/plugins/claude/skills/verifying/references/bar.md +1 -1
  133. package/plugins/claude/skills/verifying/references/fidelity.md +11 -11
  134. package/plugins/claude/skills/verifying/references/mobile-qa.md +10 -10
  135. package/plugins/claude/skills/verifying/references/playtest.md +14 -14
  136. package/plugins/claude/skills/verifying/references/unity.md +11 -11
  137. package/plugins/claude/skills/world-and-story/SKILL.md +1 -1
  138. package/plugins/claude/skills/world-and-story/references/atmosphere.md +4 -4
  139. package/plugins/claude/skills/world-and-story/references/living-world.md +2 -2
  140. package/plugins/claude/skills/world-and-story/references/opening-and-chapters.md +1 -1
  141. package/plugins/claude/skills/world-and-story/references/story-at-size.md +2 -2
  142. package/plugins/claude/skills/world-and-story/references/voice.md +1 -1
  143. package/plugins/codex/AGENTS.md +1 -1
  144. package/plugins/codex/README.md +1 -1
  145. package/plugins/codex/hooks/brief.md +1 -1
  146. package/plugins/codex/hooks/guidance.json +1 -1
  147. package/plugins/codex/hooks/host.md +1 -1
  148. package/plugins/codex/hooks/vendor/pipeline/pipeline.mjs +6 -6
  149. package/plugins/codex/hooks/vendor/studio/pitch.mjs +1 -1
  150. package/plugins/codex/skills/fp-art-director/SKILL.md +2 -2
  151. package/plugins/codex/skills/fp-art-director/references/codex.md +1 -1
  152. package/plugins/codex/skills/fp-audio-director/references/codex.md +1 -1
  153. package/plugins/codex/skills/fp-critic/references/codex.md +1 -1
  154. package/plugins/codex/skills/fp-lane/references/codex.md +1 -1
  155. package/plugins/codex/skills/fp-level-designer/references/codex.md +1 -1
  156. package/plugins/codex/skills/fp-mobile-qa-seat/references/codex.md +1 -1
  157. package/plugins/codex/skills/fp-player/references/codex.md +1 -1
  158. package/plugins/codex/skills/fp-playtest/SKILL.md +2 -2
  159. package/plugins/codex/skills/fp-qa-lead/references/codex.md +1 -1
  160. package/plugins/codex/skills/fp-studio/SKILL.md +1 -1
  161. package/plugins/codex/skills/funpixel-3d/references/bake-off.md +3 -3
  162. package/plugins/codex/skills/funpixel-3d/references/characters.md +1 -1
  163. package/plugins/codex/skills/funpixel-3d/references/hero-route.md +5 -5
  164. package/plugins/codex/skills/funpixel-3d/references/level-spec.md +1 -1
  165. package/plugins/codex/skills/funpixel-3d/references/levels.md +3 -3
  166. package/plugins/codex/skills/funpixel-3d/references/light-and-places.md +3 -3
  167. package/plugins/codex/skills/funpixel-3d/references/painted-target.md +7 -7
  168. package/plugins/codex/skills/funpixel-3d/references/three-loading.md +4 -4
  169. package/plugins/codex/skills/funpixel-3d/references/unity.md +13 -13
  170. package/plugins/codex/skills/funpixel-art/references/animation.md +1 -1
  171. package/plugins/codex/skills/funpixel-art/references/cast.md +3 -3
  172. package/plugins/codex/skills/funpixel-art/references/effects.md +2 -2
  173. package/plugins/codex/skills/funpixel-art/references/frames.md +6 -6
  174. package/plugins/codex/skills/funpixel-art/references/judging-frames.md +8 -8
  175. package/plugins/codex/skills/funpixel-art/references/look.md +4 -4
  176. package/plugins/codex/skills/funpixel-art/references/pipeline.md +2 -2
  177. package/plugins/codex/skills/funpixel-art/references/prompts.md +4 -4
  178. package/plugins/codex/skills/funpixel-art/references/ui.md +15 -15
  179. package/plugins/codex/skills/funpixel-art/references/unity.md +14 -14
  180. package/plugins/codex/skills/funpixel-audio/references/adaptive-music.md +4 -4
  181. package/plugins/codex/skills/funpixel-audio/references/engine.md +2 -2
  182. package/plugins/codex/skills/funpixel-audio/references/measure.md +1 -1
  183. package/plugins/codex/skills/funpixel-audio/references/unity.md +20 -19
  184. package/plugins/codex/skills/funpixel-game-feel/SKILL.md +4 -4
  185. package/plugins/codex/skills/funpixel-game-feel/references/contact.md +6 -6
  186. package/plugins/codex/skills/funpixel-game-feel/references/unity.md +18 -23
  187. package/plugins/codex/skills/funpixel-game-logic/SKILL.md +3 -3
  188. package/plugins/codex/skills/funpixel-game-logic/references/balance.md +2 -2
  189. package/plugins/codex/skills/funpixel-game-logic/references/depth.md +2 -2
  190. package/plugins/codex/skills/funpixel-game-logic/references/escalation.md +5 -5
  191. package/plugins/codex/skills/funpixel-game-logic/references/probes.md +10 -10
  192. package/plugins/codex/skills/funpixel-game-logic/references/unity.md +28 -28
  193. package/plugins/codex/skills/funpixel-game-spine/SKILL.md +1 -1
  194. package/plugins/codex/skills/funpixel-game-spine/references/performance.md +2 -2
  195. package/plugins/codex/skills/funpixel-game-spine/references/replay.md +11 -11
  196. package/plugins/codex/skills/funpixel-game-spine/references/room-api.md +1 -1
  197. package/plugins/codex/skills/funpixel-game-spine/references/sdk.md +1 -1
  198. package/plugins/codex/skills/funpixel-gdd/SKILL.md +2 -2
  199. package/plugins/codex/skills/funpixel-gdd/references/as-built.md +2 -2
  200. package/plugins/codex/skills/funpixel-gdd/references/design-measures.md +2 -2
  201. package/plugins/codex/skills/funpixel-gdd/references/design-note.md +1 -1
  202. package/plugins/codex/skills/funpixel-gdd/references/first-look.md +1 -1
  203. package/plugins/codex/skills/funpixel-gdd/references/floors.md +2 -2
  204. package/plugins/codex/skills/funpixel-gdd/references/gameplay-contract.md +1 -1
  205. package/plugins/codex/skills/funpixel-gdd/references/genre-puzzle.md +4 -4
  206. package/plugins/codex/skills/funpixel-gdd/references/genre-racing.md +2 -2
  207. package/plugins/codex/skills/funpixel-gdd/references/genre-rpg.md +2 -2
  208. package/plugins/codex/skills/funpixel-gdd/references/genre-shooter.md +2 -2
  209. package/plugins/codex/skills/funpixel-gdd/references/genre-survival.md +2 -2
  210. package/plugins/codex/skills/funpixel-gdd/references/invent-first.md +3 -3
  211. package/plugins/codex/skills/funpixel-gdd/references/level-and-fun.md +11 -11
  212. package/plugins/codex/skills/funpixel-gdd/references/pages.md +2 -5
  213. package/plugins/codex/skills/funpixel-gdd/references/plan-at-size.md +5 -5
  214. package/plugins/codex/skills/funpixel-gdd/references/production-tiers.md +11 -11
  215. package/plugins/codex/skills/funpixel-gdd/references/sections.md +7 -7
  216. package/plugins/codex/skills/funpixel-gdd/references/spec-folder.md +3 -3
  217. package/plugins/codex/skills/funpixel-gdd/references/the-path.md +3 -4
  218. package/plugins/codex/skills/funpixel-gdd/references/world-and-identity.md +4 -4
  219. package/plugins/codex/skills/funpixel-gdd/references/worth.md +4 -4
  220. package/plugins/codex/skills/funpixel-mobile-ui/SKILL.md +3 -3
  221. package/plugins/codex/skills/funpixel-mobile-ui/references/hud-and-title.md +3 -3
  222. package/plugins/codex/skills/funpixel-mobile-ui/references/phone-check.md +1 -1
  223. package/plugins/codex/skills/funpixel-mobile-ui/references/recipes.md +1 -1
  224. package/plugins/codex/skills/funpixel-mobile-ui/references/restyle-ui.md +11 -11
  225. package/plugins/codex/skills/funpixel-mobile-ui/references/unity.md +23 -23
  226. package/plugins/codex/skills/funpixel-publish/references/compose.md +1 -1
  227. package/plugins/codex/skills/funpixel-publish/references/server-build.md +1 -1
  228. package/plugins/codex/skills/funpixel-store/SKILL.md +3 -3
  229. package/plugins/codex/skills/funpixel-store/references/app-store.md +1 -1
  230. package/plugins/codex/skills/funpixel-store/references/google-play.md +2 -2
  231. package/plugins/codex/skills/funpixel-store/references/ios-release.md +19 -20
  232. package/plugins/codex/skills/funpixel-store/references/money.md +2 -2
  233. package/plugins/codex/skills/funpixel-store/references/purchases-and-review.md +18 -18
  234. package/plugins/codex/skills/funpixel-store/references/readiness-page.md +1 -1
  235. package/plugins/codex/skills/funpixel-store/references/readiness.md +3 -3
  236. package/plugins/codex/skills/funpixel-store/references/unity-store.md +9 -12
  237. package/plugins/codex/skills/funpixel-unity-game/SKILL.md +28 -35
  238. package/plugins/codex/skills/funpixel-unity-game/references/agent-ops.md +9 -9
  239. package/plugins/codex/skills/funpixel-unity-game/references/fixes.md +21 -21
  240. package/plugins/codex/skills/funpixel-unity-game/references/from-a-web-game.md +17 -17
  241. package/plugins/codex/skills/funpixel-unity-game/references/handing-off.md +4 -4
  242. package/plugins/codex/skills/funpixel-unity-game/references/performance.md +10 -14
  243. package/plugins/codex/skills/funpixel-unity-game/references/probe.md +4 -4
  244. package/plugins/codex/skills/funpixel-unity-game/references/shared-mac.md +1 -1
  245. package/plugins/codex/skills/funpixel-unity-game/references/traps.md +13 -14
  246. package/plugins/codex/skills/funpixel-verify/references/bar.md +1 -1
  247. package/plugins/codex/skills/funpixel-verify/references/fidelity.md +11 -11
  248. package/plugins/codex/skills/funpixel-verify/references/mobile-qa.md +10 -10
  249. package/plugins/codex/skills/funpixel-verify/references/playtest.md +14 -14
  250. package/plugins/codex/skills/funpixel-verify/references/unity.md +11 -11
  251. package/plugins/codex/skills/funpixel-world-and-story/SKILL.md +1 -1
  252. package/plugins/codex/skills/funpixel-world-and-story/references/atmosphere.md +4 -4
  253. package/plugins/codex/skills/funpixel-world-and-story/references/living-world.md +2 -2
  254. package/plugins/codex/skills/funpixel-world-and-story/references/opening-and-chapters.md +1 -1
  255. package/plugins/codex/skills/funpixel-world-and-story/references/story-at-size.md +2 -2
  256. package/plugins/codex/skills/funpixel-world-and-story/references/voice.md +1 -1
  257. package/plugins/cursor/README.md +1 -1
  258. package/plugins/cursor/agents/art-director.md +2 -2
  259. package/plugins/cursor/commands/playtest.md +2 -2
  260. package/plugins/cursor/hooks/brief.md +1 -1
  261. package/plugins/cursor/hooks/guidance.json +1 -1
  262. package/plugins/cursor/hooks/vendor/pipeline/pipeline.mjs +6 -6
  263. package/plugins/cursor/hooks/vendor/studio/pitch.mjs +1 -1
  264. package/plugins/cursor/rules/funpixel-brief.mdc +1 -1
  265. package/plugins/cursor/skills/funpixel-3d/references/bake-off.md +3 -3
  266. package/plugins/cursor/skills/funpixel-3d/references/characters.md +1 -1
  267. package/plugins/cursor/skills/funpixel-3d/references/hero-route.md +5 -5
  268. package/plugins/cursor/skills/funpixel-3d/references/level-spec.md +1 -1
  269. package/plugins/cursor/skills/funpixel-3d/references/levels.md +3 -3
  270. package/plugins/cursor/skills/funpixel-3d/references/light-and-places.md +3 -3
  271. package/plugins/cursor/skills/funpixel-3d/references/painted-target.md +7 -7
  272. package/plugins/cursor/skills/funpixel-3d/references/three-loading.md +4 -4
  273. package/plugins/cursor/skills/funpixel-3d/references/unity.md +13 -13
  274. package/plugins/cursor/skills/funpixel-art/references/animation.md +1 -1
  275. package/plugins/cursor/skills/funpixel-art/references/cast.md +3 -3
  276. package/plugins/cursor/skills/funpixel-art/references/effects.md +2 -2
  277. package/plugins/cursor/skills/funpixel-art/references/frames.md +6 -6
  278. package/plugins/cursor/skills/funpixel-art/references/judging-frames.md +8 -8
  279. package/plugins/cursor/skills/funpixel-art/references/look.md +4 -4
  280. package/plugins/cursor/skills/funpixel-art/references/pipeline.md +2 -2
  281. package/plugins/cursor/skills/funpixel-art/references/prompts.md +4 -4
  282. package/plugins/cursor/skills/funpixel-art/references/ui.md +15 -15
  283. package/plugins/cursor/skills/funpixel-art/references/unity.md +14 -14
  284. package/plugins/cursor/skills/funpixel-audio/references/adaptive-music.md +4 -4
  285. package/plugins/cursor/skills/funpixel-audio/references/engine.md +2 -2
  286. package/plugins/cursor/skills/funpixel-audio/references/measure.md +1 -1
  287. package/plugins/cursor/skills/funpixel-audio/references/unity.md +20 -19
  288. package/plugins/cursor/skills/funpixel-game-feel/SKILL.md +4 -4
  289. package/plugins/cursor/skills/funpixel-game-feel/references/contact.md +6 -6
  290. package/plugins/cursor/skills/funpixel-game-feel/references/unity.md +18 -23
  291. package/plugins/cursor/skills/funpixel-game-logic/SKILL.md +3 -3
  292. package/plugins/cursor/skills/funpixel-game-logic/references/balance.md +2 -2
  293. package/plugins/cursor/skills/funpixel-game-logic/references/depth.md +2 -2
  294. package/plugins/cursor/skills/funpixel-game-logic/references/escalation.md +5 -5
  295. package/plugins/cursor/skills/funpixel-game-logic/references/probes.md +10 -10
  296. package/plugins/cursor/skills/funpixel-game-logic/references/unity.md +28 -28
  297. package/plugins/cursor/skills/funpixel-game-spine/SKILL.md +1 -1
  298. package/plugins/cursor/skills/funpixel-game-spine/references/performance.md +2 -2
  299. package/plugins/cursor/skills/funpixel-game-spine/references/replay.md +11 -11
  300. package/plugins/cursor/skills/funpixel-game-spine/references/room-api.md +1 -1
  301. package/plugins/cursor/skills/funpixel-game-spine/references/sdk.md +1 -1
  302. package/plugins/cursor/skills/funpixel-gdd/SKILL.md +2 -2
  303. package/plugins/cursor/skills/funpixel-gdd/references/as-built.md +2 -2
  304. package/plugins/cursor/skills/funpixel-gdd/references/design-measures.md +2 -2
  305. package/plugins/cursor/skills/funpixel-gdd/references/design-note.md +1 -1
  306. package/plugins/cursor/skills/funpixel-gdd/references/first-look.md +1 -1
  307. package/plugins/cursor/skills/funpixel-gdd/references/floors.md +2 -2
  308. package/plugins/cursor/skills/funpixel-gdd/references/gameplay-contract.md +1 -1
  309. package/plugins/cursor/skills/funpixel-gdd/references/genre-puzzle.md +4 -4
  310. package/plugins/cursor/skills/funpixel-gdd/references/genre-racing.md +2 -2
  311. package/plugins/cursor/skills/funpixel-gdd/references/genre-rpg.md +2 -2
  312. package/plugins/cursor/skills/funpixel-gdd/references/genre-shooter.md +2 -2
  313. package/plugins/cursor/skills/funpixel-gdd/references/genre-survival.md +2 -2
  314. package/plugins/cursor/skills/funpixel-gdd/references/invent-first.md +3 -3
  315. package/plugins/cursor/skills/funpixel-gdd/references/level-and-fun.md +11 -11
  316. package/plugins/cursor/skills/funpixel-gdd/references/pages.md +2 -5
  317. package/plugins/cursor/skills/funpixel-gdd/references/plan-at-size.md +5 -5
  318. package/plugins/cursor/skills/funpixel-gdd/references/production-tiers.md +11 -11
  319. package/plugins/cursor/skills/funpixel-gdd/references/sections.md +7 -7
  320. package/plugins/cursor/skills/funpixel-gdd/references/spec-folder.md +3 -3
  321. package/plugins/cursor/skills/funpixel-gdd/references/the-path.md +3 -4
  322. package/plugins/cursor/skills/funpixel-gdd/references/world-and-identity.md +4 -4
  323. package/plugins/cursor/skills/funpixel-gdd/references/worth.md +4 -4
  324. package/plugins/cursor/skills/funpixel-mobile-ui/SKILL.md +3 -3
  325. package/plugins/cursor/skills/funpixel-mobile-ui/references/hud-and-title.md +3 -3
  326. package/plugins/cursor/skills/funpixel-mobile-ui/references/phone-check.md +1 -1
  327. package/plugins/cursor/skills/funpixel-mobile-ui/references/recipes.md +1 -1
  328. package/plugins/cursor/skills/funpixel-mobile-ui/references/restyle-ui.md +11 -11
  329. package/plugins/cursor/skills/funpixel-mobile-ui/references/unity.md +23 -23
  330. package/plugins/cursor/skills/funpixel-publish/references/compose.md +1 -1
  331. package/plugins/cursor/skills/funpixel-publish/references/server-build.md +1 -1
  332. package/plugins/cursor/skills/funpixel-store/SKILL.md +3 -3
  333. package/plugins/cursor/skills/funpixel-store/references/app-store.md +1 -1
  334. package/plugins/cursor/skills/funpixel-store/references/google-play.md +2 -2
  335. package/plugins/cursor/skills/funpixel-store/references/ios-release.md +19 -20
  336. package/plugins/cursor/skills/funpixel-store/references/money.md +2 -2
  337. package/plugins/cursor/skills/funpixel-store/references/purchases-and-review.md +18 -18
  338. package/plugins/cursor/skills/funpixel-store/references/readiness-page.md +1 -1
  339. package/plugins/cursor/skills/funpixel-store/references/readiness.md +3 -3
  340. package/plugins/cursor/skills/funpixel-store/references/unity-store.md +9 -12
  341. package/plugins/cursor/skills/funpixel-unity-game/SKILL.md +28 -35
  342. package/plugins/cursor/skills/funpixel-unity-game/references/agent-ops.md +9 -9
  343. package/plugins/cursor/skills/funpixel-unity-game/references/fixes.md +21 -21
  344. package/plugins/cursor/skills/funpixel-unity-game/references/from-a-web-game.md +17 -17
  345. package/plugins/cursor/skills/funpixel-unity-game/references/handing-off.md +4 -4
  346. package/plugins/cursor/skills/funpixel-unity-game/references/performance.md +10 -14
  347. package/plugins/cursor/skills/funpixel-unity-game/references/probe.md +4 -4
  348. package/plugins/cursor/skills/funpixel-unity-game/references/shared-mac.md +1 -1
  349. package/plugins/cursor/skills/funpixel-unity-game/references/traps.md +13 -14
  350. package/plugins/cursor/skills/funpixel-verify/references/bar.md +1 -1
  351. package/plugins/cursor/skills/funpixel-verify/references/fidelity.md +11 -11
  352. package/plugins/cursor/skills/funpixel-verify/references/mobile-qa.md +10 -10
  353. package/plugins/cursor/skills/funpixel-verify/references/playtest.md +14 -14
  354. package/plugins/cursor/skills/funpixel-verify/references/unity.md +11 -11
  355. package/plugins/cursor/skills/funpixel-world-and-story/SKILL.md +1 -1
  356. package/plugins/cursor/skills/funpixel-world-and-story/references/atmosphere.md +4 -4
  357. package/plugins/cursor/skills/funpixel-world-and-story/references/living-world.md +2 -2
  358. package/plugins/cursor/skills/funpixel-world-and-story/references/opening-and-chapters.md +1 -1
  359. package/plugins/cursor/skills/funpixel-world-and-story/references/story-at-size.md +2 -2
  360. package/plugins/cursor/skills/funpixel-world-and-story/references/voice.md +1 -1
  361. package/plugins/kiro/AGENTS.md +1 -1
  362. package/plugins/kiro/README.md +1 -1
  363. package/plugins/kiro/hooks/brief.md +1 -1
  364. package/plugins/kiro/hooks/guidance.json +1 -1
  365. package/plugins/kiro/hooks/vendor/pipeline/pipeline.mjs +6 -6
  366. package/plugins/kiro/hooks/vendor/studio/pitch.mjs +1 -1
  367. package/plugins/kiro/skills/fp-art-director/SKILL.md +2 -2
  368. package/plugins/kiro/skills/fp-playtest/SKILL.md +2 -2
  369. package/plugins/kiro/skills/funpixel-3d/references/bake-off.md +3 -3
  370. package/plugins/kiro/skills/funpixel-3d/references/characters.md +1 -1
  371. package/plugins/kiro/skills/funpixel-3d/references/hero-route.md +5 -5
  372. package/plugins/kiro/skills/funpixel-3d/references/level-spec.md +1 -1
  373. package/plugins/kiro/skills/funpixel-3d/references/levels.md +3 -3
  374. package/plugins/kiro/skills/funpixel-3d/references/light-and-places.md +3 -3
  375. package/plugins/kiro/skills/funpixel-3d/references/painted-target.md +7 -7
  376. package/plugins/kiro/skills/funpixel-3d/references/three-loading.md +4 -4
  377. package/plugins/kiro/skills/funpixel-3d/references/unity.md +13 -13
  378. package/plugins/kiro/skills/funpixel-art/references/animation.md +1 -1
  379. package/plugins/kiro/skills/funpixel-art/references/cast.md +3 -3
  380. package/plugins/kiro/skills/funpixel-art/references/effects.md +2 -2
  381. package/plugins/kiro/skills/funpixel-art/references/frames.md +6 -6
  382. package/plugins/kiro/skills/funpixel-art/references/judging-frames.md +8 -8
  383. package/plugins/kiro/skills/funpixel-art/references/look.md +4 -4
  384. package/plugins/kiro/skills/funpixel-art/references/pipeline.md +2 -2
  385. package/plugins/kiro/skills/funpixel-art/references/prompts.md +4 -4
  386. package/plugins/kiro/skills/funpixel-art/references/ui.md +15 -15
  387. package/plugins/kiro/skills/funpixel-art/references/unity.md +14 -14
  388. package/plugins/kiro/skills/funpixel-audio/references/adaptive-music.md +4 -4
  389. package/plugins/kiro/skills/funpixel-audio/references/engine.md +2 -2
  390. package/plugins/kiro/skills/funpixel-audio/references/measure.md +1 -1
  391. package/plugins/kiro/skills/funpixel-audio/references/unity.md +20 -19
  392. package/plugins/kiro/skills/funpixel-game-feel/SKILL.md +4 -4
  393. package/plugins/kiro/skills/funpixel-game-feel/references/contact.md +6 -6
  394. package/plugins/kiro/skills/funpixel-game-feel/references/unity.md +18 -23
  395. package/plugins/kiro/skills/funpixel-game-logic/SKILL.md +3 -3
  396. package/plugins/kiro/skills/funpixel-game-logic/references/balance.md +2 -2
  397. package/plugins/kiro/skills/funpixel-game-logic/references/depth.md +2 -2
  398. package/plugins/kiro/skills/funpixel-game-logic/references/escalation.md +5 -5
  399. package/plugins/kiro/skills/funpixel-game-logic/references/probes.md +10 -10
  400. package/plugins/kiro/skills/funpixel-game-logic/references/unity.md +28 -28
  401. package/plugins/kiro/skills/funpixel-game-spine/SKILL.md +1 -1
  402. package/plugins/kiro/skills/funpixel-game-spine/references/performance.md +2 -2
  403. package/plugins/kiro/skills/funpixel-game-spine/references/replay.md +11 -11
  404. package/plugins/kiro/skills/funpixel-game-spine/references/room-api.md +1 -1
  405. package/plugins/kiro/skills/funpixel-game-spine/references/sdk.md +1 -1
  406. package/plugins/kiro/skills/funpixel-gdd/SKILL.md +2 -2
  407. package/plugins/kiro/skills/funpixel-gdd/references/as-built.md +2 -2
  408. package/plugins/kiro/skills/funpixel-gdd/references/design-measures.md +2 -2
  409. package/plugins/kiro/skills/funpixel-gdd/references/design-note.md +1 -1
  410. package/plugins/kiro/skills/funpixel-gdd/references/first-look.md +1 -1
  411. package/plugins/kiro/skills/funpixel-gdd/references/floors.md +2 -2
  412. package/plugins/kiro/skills/funpixel-gdd/references/gameplay-contract.md +1 -1
  413. package/plugins/kiro/skills/funpixel-gdd/references/genre-puzzle.md +4 -4
  414. package/plugins/kiro/skills/funpixel-gdd/references/genre-racing.md +2 -2
  415. package/plugins/kiro/skills/funpixel-gdd/references/genre-rpg.md +2 -2
  416. package/plugins/kiro/skills/funpixel-gdd/references/genre-shooter.md +2 -2
  417. package/plugins/kiro/skills/funpixel-gdd/references/genre-survival.md +2 -2
  418. package/plugins/kiro/skills/funpixel-gdd/references/invent-first.md +3 -3
  419. package/plugins/kiro/skills/funpixel-gdd/references/level-and-fun.md +11 -11
  420. package/plugins/kiro/skills/funpixel-gdd/references/pages.md +2 -5
  421. package/plugins/kiro/skills/funpixel-gdd/references/plan-at-size.md +5 -5
  422. package/plugins/kiro/skills/funpixel-gdd/references/production-tiers.md +11 -11
  423. package/plugins/kiro/skills/funpixel-gdd/references/sections.md +7 -7
  424. package/plugins/kiro/skills/funpixel-gdd/references/spec-folder.md +3 -3
  425. package/plugins/kiro/skills/funpixel-gdd/references/the-path.md +3 -4
  426. package/plugins/kiro/skills/funpixel-gdd/references/world-and-identity.md +4 -4
  427. package/plugins/kiro/skills/funpixel-gdd/references/worth.md +4 -4
  428. package/plugins/kiro/skills/funpixel-mobile-ui/SKILL.md +3 -3
  429. package/plugins/kiro/skills/funpixel-mobile-ui/references/hud-and-title.md +3 -3
  430. package/plugins/kiro/skills/funpixel-mobile-ui/references/phone-check.md +1 -1
  431. package/plugins/kiro/skills/funpixel-mobile-ui/references/recipes.md +1 -1
  432. package/plugins/kiro/skills/funpixel-mobile-ui/references/restyle-ui.md +11 -11
  433. package/plugins/kiro/skills/funpixel-mobile-ui/references/unity.md +23 -23
  434. package/plugins/kiro/skills/funpixel-publish/references/compose.md +1 -1
  435. package/plugins/kiro/skills/funpixel-publish/references/server-build.md +1 -1
  436. package/plugins/kiro/skills/funpixel-store/SKILL.md +3 -3
  437. package/plugins/kiro/skills/funpixel-store/references/app-store.md +1 -1
  438. package/plugins/kiro/skills/funpixel-store/references/google-play.md +2 -2
  439. package/plugins/kiro/skills/funpixel-store/references/ios-release.md +19 -20
  440. package/plugins/kiro/skills/funpixel-store/references/money.md +2 -2
  441. package/plugins/kiro/skills/funpixel-store/references/purchases-and-review.md +18 -18
  442. package/plugins/kiro/skills/funpixel-store/references/readiness-page.md +1 -1
  443. package/plugins/kiro/skills/funpixel-store/references/readiness.md +3 -3
  444. package/plugins/kiro/skills/funpixel-store/references/unity-store.md +9 -12
  445. package/plugins/kiro/skills/funpixel-unity-game/SKILL.md +28 -35
  446. package/plugins/kiro/skills/funpixel-unity-game/references/agent-ops.md +9 -9
  447. package/plugins/kiro/skills/funpixel-unity-game/references/fixes.md +21 -21
  448. package/plugins/kiro/skills/funpixel-unity-game/references/from-a-web-game.md +17 -17
  449. package/plugins/kiro/skills/funpixel-unity-game/references/handing-off.md +4 -4
  450. package/plugins/kiro/skills/funpixel-unity-game/references/performance.md +10 -14
  451. package/plugins/kiro/skills/funpixel-unity-game/references/probe.md +4 -4
  452. package/plugins/kiro/skills/funpixel-unity-game/references/shared-mac.md +1 -1
  453. package/plugins/kiro/skills/funpixel-unity-game/references/traps.md +13 -14
  454. package/plugins/kiro/skills/funpixel-verify/references/bar.md +1 -1
  455. package/plugins/kiro/skills/funpixel-verify/references/fidelity.md +11 -11
  456. package/plugins/kiro/skills/funpixel-verify/references/mobile-qa.md +10 -10
  457. package/plugins/kiro/skills/funpixel-verify/references/playtest.md +14 -14
  458. package/plugins/kiro/skills/funpixel-verify/references/unity.md +11 -11
  459. package/plugins/kiro/skills/funpixel-world-and-story/SKILL.md +1 -1
  460. package/plugins/kiro/skills/funpixel-world-and-story/references/atmosphere.md +4 -4
  461. package/plugins/kiro/skills/funpixel-world-and-story/references/living-world.md +2 -2
  462. package/plugins/kiro/skills/funpixel-world-and-story/references/opening-and-chapters.md +1 -1
  463. package/plugins/kiro/skills/funpixel-world-and-story/references/story-at-size.md +2 -2
  464. package/plugins/kiro/skills/funpixel-world-and-story/references/voice.md +1 -1
  465. package/plugins/robin/README.md +1 -1
  466. package/plugins/robin/claude/README.md +2 -3
  467. package/plugins/robin/claude/agents/art-director.md +2 -2
  468. package/plugins/robin/claude/commands/playtest.md +2 -2
  469. package/plugins/robin/claude/hooks/brief.md +1 -1
  470. package/plugins/robin/claude/hooks/guidance.json +1 -1
  471. package/plugins/robin/claude/hooks/vendor/pipeline/pipeline.mjs +6 -6
  472. package/plugins/robin/claude/hooks/vendor/studio/pitch.mjs +1 -1
  473. package/plugins/robin/claude/skills/3d/references/bake-off.md +3 -3
  474. package/plugins/robin/claude/skills/3d/references/characters.md +1 -1
  475. package/plugins/robin/claude/skills/3d/references/hero-route.md +5 -5
  476. package/plugins/robin/claude/skills/3d/references/level-spec.md +1 -1
  477. package/plugins/robin/claude/skills/3d/references/levels.md +3 -3
  478. package/plugins/robin/claude/skills/3d/references/light-and-places.md +3 -3
  479. package/plugins/robin/claude/skills/3d/references/painted-target.md +7 -7
  480. package/plugins/robin/claude/skills/3d/references/three-loading.md +4 -4
  481. package/plugins/robin/claude/skills/3d/references/unity.md +13 -13
  482. package/plugins/robin/claude/skills/art/references/animation.md +1 -1
  483. package/plugins/robin/claude/skills/art/references/cast.md +3 -3
  484. package/plugins/robin/claude/skills/art/references/effects.md +2 -2
  485. package/plugins/robin/claude/skills/art/references/frames.md +6 -6
  486. package/plugins/robin/claude/skills/art/references/judging-frames.md +8 -8
  487. package/plugins/robin/claude/skills/art/references/look.md +4 -4
  488. package/plugins/robin/claude/skills/art/references/pipeline.md +2 -2
  489. package/plugins/robin/claude/skills/art/references/prompts.md +4 -4
  490. package/plugins/robin/claude/skills/art/references/ui.md +15 -15
  491. package/plugins/robin/claude/skills/art/references/unity.md +14 -14
  492. package/plugins/robin/claude/skills/audio/references/adaptive-music.md +4 -4
  493. package/plugins/robin/claude/skills/audio/references/engine.md +2 -2
  494. package/plugins/robin/claude/skills/audio/references/measure.md +1 -1
  495. package/plugins/robin/claude/skills/audio/references/unity.md +20 -19
  496. package/plugins/robin/claude/skills/game-feel/SKILL.md +4 -4
  497. package/plugins/robin/claude/skills/game-feel/references/contact.md +6 -6
  498. package/plugins/robin/claude/skills/game-feel/references/unity.md +18 -23
  499. package/plugins/robin/claude/skills/game-logic/SKILL.md +3 -3
  500. package/plugins/robin/claude/skills/game-logic/references/balance.md +2 -2
  501. package/plugins/robin/claude/skills/game-logic/references/depth.md +2 -2
  502. package/plugins/robin/claude/skills/game-logic/references/escalation.md +5 -5
  503. package/plugins/robin/claude/skills/game-logic/references/probes.md +10 -10
  504. package/plugins/robin/claude/skills/game-logic/references/unity.md +28 -28
  505. package/plugins/robin/claude/skills/game-spine/SKILL.md +1 -1
  506. package/plugins/robin/claude/skills/game-spine/references/performance.md +2 -2
  507. package/plugins/robin/claude/skills/game-spine/references/replay.md +11 -11
  508. package/plugins/robin/claude/skills/game-spine/references/room-api.md +1 -1
  509. package/plugins/robin/claude/skills/game-spine/references/sdk.md +1 -1
  510. package/plugins/robin/claude/skills/gdd/SKILL.md +2 -2
  511. package/plugins/robin/claude/skills/gdd/references/as-built.md +2 -2
  512. package/plugins/robin/claude/skills/gdd/references/design-measures.md +2 -2
  513. package/plugins/robin/claude/skills/gdd/references/design-note.md +1 -1
  514. package/plugins/robin/claude/skills/gdd/references/first-look.md +1 -1
  515. package/plugins/robin/claude/skills/gdd/references/floors.md +2 -2
  516. package/plugins/robin/claude/skills/gdd/references/gameplay-contract.md +1 -1
  517. package/plugins/robin/claude/skills/gdd/references/genre-puzzle.md +4 -4
  518. package/plugins/robin/claude/skills/gdd/references/genre-racing.md +2 -2
  519. package/plugins/robin/claude/skills/gdd/references/genre-rpg.md +2 -2
  520. package/plugins/robin/claude/skills/gdd/references/genre-shooter.md +2 -2
  521. package/plugins/robin/claude/skills/gdd/references/genre-survival.md +2 -2
  522. package/plugins/robin/claude/skills/gdd/references/invent-first.md +3 -3
  523. package/plugins/robin/claude/skills/gdd/references/level-and-fun.md +11 -11
  524. package/plugins/robin/claude/skills/gdd/references/pages.md +2 -5
  525. package/plugins/robin/claude/skills/gdd/references/plan-at-size.md +5 -5
  526. package/plugins/robin/claude/skills/gdd/references/production-tiers.md +11 -11
  527. package/plugins/robin/claude/skills/gdd/references/sections.md +7 -7
  528. package/plugins/robin/claude/skills/gdd/references/spec-folder.md +3 -3
  529. package/plugins/robin/claude/skills/gdd/references/the-path.md +3 -4
  530. package/plugins/robin/claude/skills/gdd/references/world-and-identity.md +4 -4
  531. package/plugins/robin/claude/skills/gdd/references/worth.md +4 -4
  532. package/plugins/robin/claude/skills/mobile-ui/SKILL.md +3 -3
  533. package/plugins/robin/claude/skills/mobile-ui/references/hud-and-title.md +3 -3
  534. package/plugins/robin/claude/skills/mobile-ui/references/phone-check.md +1 -1
  535. package/plugins/robin/claude/skills/mobile-ui/references/recipes.md +1 -1
  536. package/plugins/robin/claude/skills/mobile-ui/references/restyle-ui.md +11 -11
  537. package/plugins/robin/claude/skills/mobile-ui/references/unity.md +23 -23
  538. package/plugins/robin/claude/skills/publishing/references/compose.md +1 -1
  539. package/plugins/robin/claude/skills/publishing/references/server-build.md +1 -1
  540. package/plugins/robin/claude/skills/store/SKILL.md +3 -3
  541. package/plugins/robin/claude/skills/store/references/app-store.md +1 -1
  542. package/plugins/robin/claude/skills/store/references/google-play.md +2 -2
  543. package/plugins/robin/claude/skills/store/references/ios-release.md +19 -20
  544. package/plugins/robin/claude/skills/store/references/money.md +2 -2
  545. package/plugins/robin/claude/skills/store/references/purchases-and-review.md +18 -18
  546. package/plugins/robin/claude/skills/store/references/readiness-page.md +1 -1
  547. package/plugins/robin/claude/skills/store/references/readiness.md +3 -3
  548. package/plugins/robin/claude/skills/store/references/unity-store.md +9 -12
  549. package/plugins/robin/claude/skills/unity-game/SKILL.md +28 -35
  550. package/plugins/robin/claude/skills/unity-game/references/agent-ops.md +9 -9
  551. package/plugins/robin/claude/skills/unity-game/references/fixes.md +21 -21
  552. package/plugins/robin/claude/skills/unity-game/references/from-a-web-game.md +17 -17
  553. package/plugins/robin/claude/skills/unity-game/references/handing-off.md +4 -4
  554. package/plugins/robin/claude/skills/unity-game/references/performance.md +10 -14
  555. package/plugins/robin/claude/skills/unity-game/references/probe.md +4 -4
  556. package/plugins/robin/claude/skills/unity-game/references/shared-mac.md +1 -1
  557. package/plugins/robin/claude/skills/unity-game/references/traps.md +13 -14
  558. package/plugins/robin/claude/skills/verifying/references/bar.md +1 -1
  559. package/plugins/robin/claude/skills/verifying/references/fidelity.md +11 -11
  560. package/plugins/robin/claude/skills/verifying/references/mobile-qa.md +10 -10
  561. package/plugins/robin/claude/skills/verifying/references/playtest.md +14 -14
  562. package/plugins/robin/claude/skills/verifying/references/unity.md +11 -11
  563. package/plugins/robin/claude/skills/world-and-story/SKILL.md +1 -1
  564. package/plugins/robin/claude/skills/world-and-story/references/atmosphere.md +4 -4
  565. package/plugins/robin/claude/skills/world-and-story/references/living-world.md +2 -2
  566. package/plugins/robin/claude/skills/world-and-story/references/opening-and-chapters.md +1 -1
  567. package/plugins/robin/claude/skills/world-and-story/references/story-at-size.md +2 -2
  568. package/plugins/robin/claude/skills/world-and-story/references/voice.md +1 -1
  569. package/plugins/robin/skills/fp-playtest/SKILL.md +2 -2
  570. package/plugins/robin/skills/funpixel-3d/references/bake-off.md +3 -3
  571. package/plugins/robin/skills/funpixel-3d/references/characters.md +1 -1
  572. package/plugins/robin/skills/funpixel-3d/references/hero-route.md +5 -5
  573. package/plugins/robin/skills/funpixel-3d/references/level-spec.md +1 -1
  574. package/plugins/robin/skills/funpixel-3d/references/levels.md +3 -3
  575. package/plugins/robin/skills/funpixel-3d/references/light-and-places.md +3 -3
  576. package/plugins/robin/skills/funpixel-3d/references/painted-target.md +7 -7
  577. package/plugins/robin/skills/funpixel-3d/references/three-loading.md +4 -4
  578. package/plugins/robin/skills/funpixel-3d/references/unity.md +13 -13
  579. package/plugins/robin/skills/funpixel-art/references/animation.md +1 -1
  580. package/plugins/robin/skills/funpixel-art/references/cast.md +3 -3
  581. package/plugins/robin/skills/funpixel-art/references/effects.md +2 -2
  582. package/plugins/robin/skills/funpixel-art/references/frames.md +6 -6
  583. package/plugins/robin/skills/funpixel-art/references/judging-frames.md +8 -8
  584. package/plugins/robin/skills/funpixel-art/references/look.md +4 -4
  585. package/plugins/robin/skills/funpixel-art/references/pipeline.md +2 -2
  586. package/plugins/robin/skills/funpixel-art/references/prompts.md +4 -4
  587. package/plugins/robin/skills/funpixel-art/references/ui.md +15 -15
  588. package/plugins/robin/skills/funpixel-art/references/unity.md +14 -14
  589. package/plugins/robin/skills/funpixel-audio/references/adaptive-music.md +4 -4
  590. package/plugins/robin/skills/funpixel-audio/references/engine.md +2 -2
  591. package/plugins/robin/skills/funpixel-audio/references/measure.md +1 -1
  592. package/plugins/robin/skills/funpixel-audio/references/unity.md +20 -19
  593. package/plugins/robin/skills/funpixel-brief/SKILL.md +1 -1
  594. package/plugins/robin/skills/funpixel-game-feel/SKILL.md +4 -4
  595. package/plugins/robin/skills/funpixel-game-feel/references/contact.md +6 -6
  596. package/plugins/robin/skills/funpixel-game-feel/references/unity.md +18 -23
  597. package/plugins/robin/skills/funpixel-game-logic/SKILL.md +3 -3
  598. package/plugins/robin/skills/funpixel-game-logic/references/balance.md +2 -2
  599. package/plugins/robin/skills/funpixel-game-logic/references/depth.md +2 -2
  600. package/plugins/robin/skills/funpixel-game-logic/references/escalation.md +5 -5
  601. package/plugins/robin/skills/funpixel-game-logic/references/probes.md +10 -10
  602. package/plugins/robin/skills/funpixel-game-logic/references/unity.md +28 -28
  603. package/plugins/robin/skills/funpixel-game-spine/SKILL.md +1 -1
  604. package/plugins/robin/skills/funpixel-game-spine/references/performance.md +2 -2
  605. package/plugins/robin/skills/funpixel-game-spine/references/replay.md +11 -11
  606. package/plugins/robin/skills/funpixel-game-spine/references/room-api.md +1 -1
  607. package/plugins/robin/skills/funpixel-game-spine/references/sdk.md +1 -1
  608. package/plugins/robin/skills/funpixel-gdd/SKILL.md +2 -2
  609. package/plugins/robin/skills/funpixel-gdd/references/as-built.md +2 -2
  610. package/plugins/robin/skills/funpixel-gdd/references/design-measures.md +2 -2
  611. package/plugins/robin/skills/funpixel-gdd/references/design-note.md +1 -1
  612. package/plugins/robin/skills/funpixel-gdd/references/first-look.md +1 -1
  613. package/plugins/robin/skills/funpixel-gdd/references/floors.md +2 -2
  614. package/plugins/robin/skills/funpixel-gdd/references/gameplay-contract.md +1 -1
  615. package/plugins/robin/skills/funpixel-gdd/references/genre-puzzle.md +4 -4
  616. package/plugins/robin/skills/funpixel-gdd/references/genre-racing.md +2 -2
  617. package/plugins/robin/skills/funpixel-gdd/references/genre-rpg.md +2 -2
  618. package/plugins/robin/skills/funpixel-gdd/references/genre-shooter.md +2 -2
  619. package/plugins/robin/skills/funpixel-gdd/references/genre-survival.md +2 -2
  620. package/plugins/robin/skills/funpixel-gdd/references/invent-first.md +3 -3
  621. package/plugins/robin/skills/funpixel-gdd/references/level-and-fun.md +11 -11
  622. package/plugins/robin/skills/funpixel-gdd/references/pages.md +2 -5
  623. package/plugins/robin/skills/funpixel-gdd/references/plan-at-size.md +5 -5
  624. package/plugins/robin/skills/funpixel-gdd/references/production-tiers.md +11 -11
  625. package/plugins/robin/skills/funpixel-gdd/references/sections.md +7 -7
  626. package/plugins/robin/skills/funpixel-gdd/references/spec-folder.md +3 -3
  627. package/plugins/robin/skills/funpixel-gdd/references/the-path.md +3 -4
  628. package/plugins/robin/skills/funpixel-gdd/references/world-and-identity.md +4 -4
  629. package/plugins/robin/skills/funpixel-gdd/references/worth.md +4 -4
  630. package/plugins/robin/skills/funpixel-mobile-ui/SKILL.md +3 -3
  631. package/plugins/robin/skills/funpixel-mobile-ui/references/hud-and-title.md +3 -3
  632. package/plugins/robin/skills/funpixel-mobile-ui/references/phone-check.md +1 -1
  633. package/plugins/robin/skills/funpixel-mobile-ui/references/recipes.md +1 -1
  634. package/plugins/robin/skills/funpixel-mobile-ui/references/restyle-ui.md +11 -11
  635. package/plugins/robin/skills/funpixel-mobile-ui/references/unity.md +23 -23
  636. package/plugins/robin/skills/funpixel-publish/references/compose.md +1 -1
  637. package/plugins/robin/skills/funpixel-publish/references/server-build.md +1 -1
  638. package/plugins/robin/skills/funpixel-store/SKILL.md +3 -3
  639. package/plugins/robin/skills/funpixel-store/references/app-store.md +1 -1
  640. package/plugins/robin/skills/funpixel-store/references/google-play.md +2 -2
  641. package/plugins/robin/skills/funpixel-store/references/ios-release.md +19 -20
  642. package/plugins/robin/skills/funpixel-store/references/money.md +2 -2
  643. package/plugins/robin/skills/funpixel-store/references/purchases-and-review.md +18 -18
  644. package/plugins/robin/skills/funpixel-store/references/readiness-page.md +1 -1
  645. package/plugins/robin/skills/funpixel-store/references/readiness.md +3 -3
  646. package/plugins/robin/skills/funpixel-store/references/unity-store.md +9 -12
  647. package/plugins/robin/skills/funpixel-unity-game/SKILL.md +28 -35
  648. package/plugins/robin/skills/funpixel-unity-game/references/agent-ops.md +9 -9
  649. package/plugins/robin/skills/funpixel-unity-game/references/fixes.md +21 -21
  650. package/plugins/robin/skills/funpixel-unity-game/references/from-a-web-game.md +17 -17
  651. package/plugins/robin/skills/funpixel-unity-game/references/handing-off.md +4 -4
  652. package/plugins/robin/skills/funpixel-unity-game/references/performance.md +10 -14
  653. package/plugins/robin/skills/funpixel-unity-game/references/probe.md +4 -4
  654. package/plugins/robin/skills/funpixel-unity-game/references/shared-mac.md +1 -1
  655. package/plugins/robin/skills/funpixel-unity-game/references/traps.md +13 -14
  656. package/plugins/robin/skills/funpixel-verify/references/bar.md +1 -1
  657. package/plugins/robin/skills/funpixel-verify/references/fidelity.md +11 -11
  658. package/plugins/robin/skills/funpixel-verify/references/mobile-qa.md +10 -10
  659. package/plugins/robin/skills/funpixel-verify/references/playtest.md +14 -14
  660. package/plugins/robin/skills/funpixel-verify/references/unity.md +11 -11
  661. package/plugins/robin/skills/funpixel-world-and-story/SKILL.md +1 -1
  662. package/plugins/robin/skills/funpixel-world-and-story/references/atmosphere.md +4 -4
  663. package/plugins/robin/skills/funpixel-world-and-story/references/living-world.md +2 -2
  664. package/plugins/robin/skills/funpixel-world-and-story/references/opening-and-chapters.md +1 -1
  665. package/plugins/robin/skills/funpixel-world-and-story/references/story-at-size.md +2 -2
  666. package/plugins/robin/skills/funpixel-world-and-story/references/voice.md +1 -1
  667. package/templates/common/.agents/skills/funpixel-3d/references/bake-off.md +3 -3
  668. package/templates/common/.agents/skills/funpixel-3d/references/characters.md +1 -1
  669. package/templates/common/.agents/skills/funpixel-3d/references/hero-route.md +5 -5
  670. package/templates/common/.agents/skills/funpixel-3d/references/level-spec.md +1 -1
  671. package/templates/common/.agents/skills/funpixel-3d/references/levels.md +3 -3
  672. package/templates/common/.agents/skills/funpixel-3d/references/light-and-places.md +3 -3
  673. package/templates/common/.agents/skills/funpixel-3d/references/painted-target.md +7 -7
  674. package/templates/common/.agents/skills/funpixel-3d/references/three-loading.md +4 -4
  675. package/templates/common/.agents/skills/funpixel-3d/references/unity.md +13 -13
  676. package/templates/common/.agents/skills/funpixel-art/references/animation.md +1 -1
  677. package/templates/common/.agents/skills/funpixel-art/references/cast.md +3 -3
  678. package/templates/common/.agents/skills/funpixel-art/references/effects.md +2 -2
  679. package/templates/common/.agents/skills/funpixel-art/references/frames.md +6 -6
  680. package/templates/common/.agents/skills/funpixel-art/references/judging-frames.md +8 -8
  681. package/templates/common/.agents/skills/funpixel-art/references/look.md +4 -4
  682. package/templates/common/.agents/skills/funpixel-art/references/pipeline.md +2 -2
  683. package/templates/common/.agents/skills/funpixel-art/references/prompts.md +4 -4
  684. package/templates/common/.agents/skills/funpixel-art/references/ui.md +15 -15
  685. package/templates/common/.agents/skills/funpixel-art/references/unity.md +14 -14
  686. package/templates/common/.agents/skills/funpixel-audio/references/adaptive-music.md +4 -4
  687. package/templates/common/.agents/skills/funpixel-audio/references/engine.md +2 -2
  688. package/templates/common/.agents/skills/funpixel-audio/references/measure.md +1 -1
  689. package/templates/common/.agents/skills/funpixel-audio/references/unity.md +20 -19
  690. package/templates/common/.agents/skills/funpixel-game-feel/SKILL.md +4 -4
  691. package/templates/common/.agents/skills/funpixel-game-feel/references/contact.md +6 -6
  692. package/templates/common/.agents/skills/funpixel-game-feel/references/unity.md +18 -23
  693. package/templates/common/.agents/skills/funpixel-game-logic/SKILL.md +3 -3
  694. package/templates/common/.agents/skills/funpixel-game-logic/references/balance.md +2 -2
  695. package/templates/common/.agents/skills/funpixel-game-logic/references/depth.md +2 -2
  696. package/templates/common/.agents/skills/funpixel-game-logic/references/escalation.md +5 -5
  697. package/templates/common/.agents/skills/funpixel-game-logic/references/probes.md +10 -10
  698. package/templates/common/.agents/skills/funpixel-game-logic/references/unity.md +28 -28
  699. package/templates/common/.agents/skills/funpixel-game-spine/SKILL.md +1 -1
  700. package/templates/common/.agents/skills/funpixel-game-spine/references/performance.md +2 -2
  701. package/templates/common/.agents/skills/funpixel-game-spine/references/replay.md +11 -11
  702. package/templates/common/.agents/skills/funpixel-game-spine/references/room-api.md +1 -1
  703. package/templates/common/.agents/skills/funpixel-game-spine/references/sdk.md +1 -1
  704. package/templates/common/.agents/skills/funpixel-gdd/SKILL.md +2 -2
  705. package/templates/common/.agents/skills/funpixel-gdd/references/as-built.md +2 -2
  706. package/templates/common/.agents/skills/funpixel-gdd/references/design-measures.md +2 -2
  707. package/templates/common/.agents/skills/funpixel-gdd/references/design-note.md +1 -1
  708. package/templates/common/.agents/skills/funpixel-gdd/references/first-look.md +1 -1
  709. package/templates/common/.agents/skills/funpixel-gdd/references/floors.md +2 -2
  710. package/templates/common/.agents/skills/funpixel-gdd/references/gameplay-contract.md +1 -1
  711. package/templates/common/.agents/skills/funpixel-gdd/references/genre-puzzle.md +4 -4
  712. package/templates/common/.agents/skills/funpixel-gdd/references/genre-racing.md +2 -2
  713. package/templates/common/.agents/skills/funpixel-gdd/references/genre-rpg.md +2 -2
  714. package/templates/common/.agents/skills/funpixel-gdd/references/genre-shooter.md +2 -2
  715. package/templates/common/.agents/skills/funpixel-gdd/references/genre-survival.md +2 -2
  716. package/templates/common/.agents/skills/funpixel-gdd/references/invent-first.md +3 -3
  717. package/templates/common/.agents/skills/funpixel-gdd/references/level-and-fun.md +11 -11
  718. package/templates/common/.agents/skills/funpixel-gdd/references/pages.md +2 -5
  719. package/templates/common/.agents/skills/funpixel-gdd/references/plan-at-size.md +5 -5
  720. package/templates/common/.agents/skills/funpixel-gdd/references/production-tiers.md +11 -11
  721. package/templates/common/.agents/skills/funpixel-gdd/references/sections.md +7 -7
  722. package/templates/common/.agents/skills/funpixel-gdd/references/spec-folder.md +3 -3
  723. package/templates/common/.agents/skills/funpixel-gdd/references/the-path.md +3 -4
  724. package/templates/common/.agents/skills/funpixel-gdd/references/world-and-identity.md +4 -4
  725. package/templates/common/.agents/skills/funpixel-gdd/references/worth.md +4 -4
  726. package/templates/common/.agents/skills/funpixel-mobile-ui/SKILL.md +3 -3
  727. package/templates/common/.agents/skills/funpixel-mobile-ui/references/hud-and-title.md +3 -3
  728. package/templates/common/.agents/skills/funpixel-mobile-ui/references/phone-check.md +1 -1
  729. package/templates/common/.agents/skills/funpixel-mobile-ui/references/recipes.md +1 -1
  730. package/templates/common/.agents/skills/funpixel-mobile-ui/references/restyle-ui.md +11 -11
  731. package/templates/common/.agents/skills/funpixel-mobile-ui/references/unity.md +23 -23
  732. package/templates/common/.agents/skills/funpixel-publish/references/compose.md +1 -1
  733. package/templates/common/.agents/skills/funpixel-publish/references/server-build.md +1 -1
  734. package/templates/common/.agents/skills/funpixel-store/SKILL.md +3 -3
  735. package/templates/common/.agents/skills/funpixel-store/references/app-store.md +1 -1
  736. package/templates/common/.agents/skills/funpixel-store/references/google-play.md +2 -2
  737. package/templates/common/.agents/skills/funpixel-store/references/ios-release.md +19 -20
  738. package/templates/common/.agents/skills/funpixel-store/references/money.md +2 -2
  739. package/templates/common/.agents/skills/funpixel-store/references/purchases-and-review.md +18 -18
  740. package/templates/common/.agents/skills/funpixel-store/references/readiness-page.md +1 -1
  741. package/templates/common/.agents/skills/funpixel-store/references/readiness.md +3 -3
  742. package/templates/common/.agents/skills/funpixel-store/references/unity-store.md +9 -12
  743. package/templates/common/.agents/skills/funpixel-unity-game/SKILL.md +28 -35
  744. package/templates/common/.agents/skills/funpixel-unity-game/references/agent-ops.md +9 -9
  745. package/templates/common/.agents/skills/funpixel-unity-game/references/fixes.md +21 -21
  746. package/templates/common/.agents/skills/funpixel-unity-game/references/from-a-web-game.md +17 -17
  747. package/templates/common/.agents/skills/funpixel-unity-game/references/handing-off.md +4 -4
  748. package/templates/common/.agents/skills/funpixel-unity-game/references/performance.md +10 -14
  749. package/templates/common/.agents/skills/funpixel-unity-game/references/probe.md +4 -4
  750. package/templates/common/.agents/skills/funpixel-unity-game/references/shared-mac.md +1 -1
  751. package/templates/common/.agents/skills/funpixel-unity-game/references/traps.md +13 -14
  752. package/templates/common/.agents/skills/funpixel-verify/references/bar.md +1 -1
  753. package/templates/common/.agents/skills/funpixel-verify/references/fidelity.md +11 -11
  754. package/templates/common/.agents/skills/funpixel-verify/references/mobile-qa.md +10 -10
  755. package/templates/common/.agents/skills/funpixel-verify/references/playtest.md +14 -14
  756. package/templates/common/.agents/skills/funpixel-verify/references/unity.md +11 -11
  757. package/templates/common/.agents/skills/funpixel-world-and-story/SKILL.md +1 -1
  758. package/templates/common/.agents/skills/funpixel-world-and-story/references/atmosphere.md +4 -4
  759. package/templates/common/.agents/skills/funpixel-world-and-story/references/living-world.md +2 -2
  760. package/templates/common/.agents/skills/funpixel-world-and-story/references/opening-and-chapters.md +1 -1
  761. package/templates/common/.agents/skills/funpixel-world-and-story/references/story-at-size.md +2 -2
  762. package/templates/common/.agents/skills/funpixel-world-and-story/references/voice.md +1 -1
  763. package/templates/common/AGENTS.md +1 -1
  764. package/templates/common/src/platform.ts +1 -1
  765. package/templates/common/src/probe-human.ts +3 -3
  766. package/templates/common/src/save.ts +1 -1
  767. package/templates/common/test/platform.test.ts +1 -1
  768. package/templates/three-world/src/budget.ts +1 -1
  769. package/templates/three-world/src/cutouts.ts +2 -2
  770. package/templates/three-world/src/game.ts +1 -1
  771. package/templates/three-world/src/models.ts +1 -1
  772. package/unity/com.funpixel.probe/Runtime/Player/Args.cs +1 -1
  773. package/unity/com.funpixel.probe/Runtime/Player/Bridge.cs +2 -2
  774. package/unity/com.funpixel.probe/Runtime/Player/Capture.cs +2 -2
  775. package/unity/com.funpixel.probe/Runtime/Player/Inject.cs +1 -2
  776. package/unity/com.funpixel.probe/Runtime/Player/Probe.cs +2 -2
  777. package/unity/com.funpixel.probe/Runtime/Player/UiTargets.cs +1 -1
  778. package/plugins/claude/skills/unity-game/references/studio-packages.md +0 -127
  779. package/plugins/codex/skills/funpixel-unity-game/references/studio-packages.md +0 -127
  780. package/plugins/cursor/skills/funpixel-unity-game/references/studio-packages.md +0 -127
  781. package/plugins/kiro/skills/funpixel-unity-game/references/studio-packages.md +0 -127
  782. package/plugins/robin/claude/skills/unity-game/references/studio-packages.md +0 -127
  783. package/plugins/robin/skills/funpixel-unity-game/references/studio-packages.md +0 -127
  784. package/templates/common/.agents/skills/funpixel-unity-game/references/studio-packages.md +0 -127
@@ -1,6 +1,6 @@
1
1
  # The world and its identities
2
2
 
3
- Blue Freight, one pitch (a courier walks a sleeping child across six moons), was planned twice on
3
+ One pitch (a courier walks a sleeping child across six moons), was planned twice on
4
4
  30 September 2026. The plan made through the kit had the better mechanics and story. The plan
5
5
  written by hand had the better world and held together: every place drawn, every recurring design
6
6
  the same in every picture. Its panel never complained of drift; the kit plan's panel named drift as
@@ -11,7 +11,7 @@ or a decline, a two-hour game gets all of it.
11
11
  ## Identity lock
12
12
 
13
13
  A game made of generated pictures drifts unless its designs are pinned. Across the first thirteen
14
- Blue Freight images the courier's hair, jacket and trousers changed from picture to picture, the
14
+ images the courier's hair, jacket and trousers changed from picture to picture, the
15
15
  ship was a different ship in each shot, and the walker robot was two robots. A studio fixes this
16
16
  with model sheets; so does the plan.
17
17
 
@@ -25,7 +25,7 @@ with model sheets; so does the plan.
25
25
  - **Every later picture names its sheets**: as input references where the image tool takes them,
26
26
  and always in words (the sheet's `pins`: "short dark jaw-length hair, a scar through one
27
27
  eyebrow, a patched burnt-orange flight jacket"). With the sheets and the block, seven of seven
28
- Blue Freight redraws came back on-model on the first try, for $0.30.
28
+ redraws came back on-model on the first try, for $0.30.
29
29
 
30
30
  ```markdown
31
31
  ## Identity lock
@@ -146,7 +146,7 @@ place and screen row carries three short cells: **Wow** (the one thing a player
146
146
  shares there), **Fun** (what they do there that feels good) and **Hook** (why they keep going: a
147
147
  question, a promise, a reward ahead). An empty cell is a place nobody will talk about.
148
148
 
149
- `## The hook` puts the first minutes on the clock with 2 to 4 wow moments. Blue Freight's plan
149
+ `## The hook` puts the first minutes on the clock with 2 to 4 wow moments. The courier game's plan
150
150
  (v0.8) named four: the title (the lounge window lights up and a sky whale drifts past), 0:42 (the
151
151
  hatch opens and the camera pulls back over the Dry Sea), 1:00 (the first searchlight sweeps the
152
152
  valley and the crabs scatter), and about 3:00 (moths settle on the cradle and the child hums).
@@ -2,12 +2,12 @@
2
2
 
3
3
  Not every idea is worth building, and not every idea fills the length the owner wants. Say so at the
4
4
  pitch, with numbers, before a single first-look picture is paid for. The owner asked for exactly this
5
- (4 Oct 2026): "If Wind Orchard is not a game to play 1.5 hours, challenge me; not every idea is worth
5
+ (4 Oct 2026): "If [this game] is not a game to play 1.5 hours, challenge me; not every idea is worth
6
6
  building; size the story and the game; also the best games in similar genres."
7
7
 
8
8
  ## Why
9
9
 
10
- Wind Orchard's GDD promised 30 minutes "in 5 chapters of 2 flights each, about 3 minutes each". Its
10
+ One game's GDD promised 30 minutes "in 5 chapters of 2 flights each, about 3 minutes each". Its
11
11
  own numbers said one flight is about 70 s and there are 10 flights: about 12 minutes of flight. Four
12
12
  areas whose frames look alike, three graft kinds, one character, no progression beyond a score. The
13
13
  genre's best that it cited hold one to three hours with a distinct place every 15–20 minutes. Nobody
@@ -63,10 +63,10 @@ and `greenlight lock` waits for their answer. Under the owner's own autonomy
63
63
  question again with that evidence. Short in content, never bare in look: build it in the game's own
64
64
  starter and camera and dress it with what the first look already made (title, how-to-play, the HUD
65
65
  on phone and desktop, one real place, the hero, the sounds and music, the core verb's juice). A grey
66
- page beside the game is not a prototype the owner can judge (Wind Orchard, 5 Oct: "this initial look
66
+ page beside the game is not a prototype the owner can judge (the same game, 5 Oct: "this initial look
67
67
  is worst of all I have seen").
68
68
 
69
- ## Wind Orchard, read
69
+ ## That game, read
70
70
 
71
71
  At the owner's 90 minutes: prove the core first (11.7 of 90 minutes; +2 places, a meta; recommended:
72
72
  the prototype). At 20 minutes: stretch (+9 minutes of play and a meta; recommended: shrink to the
@@ -50,7 +50,7 @@ games were phone layout: [references/phone-check.md](references/phone-check.md))
50
50
  6. **The gesture before the button.** Phone hits take the move on the play itself and give the
51
51
  freed screen to the board: a puzzle swipe or drag that previews where it goes (Threes, Two
52
52
  Dots), a maze swipe anywhere that queues the next turn (Pac-Man 256). A pad repeating the
53
- swipe reads as a desktop port (Floe, Riad Rush). Buttons earn a place where no gesture
53
+ swipe reads as a desktop port. Buttons earn a place where no gesture
54
54
  carries the action, or as an accessibility setting. `data-fpx-gesture="ArrowLeft …"` on the
55
55
  swiped or dragged element claims those keys (a lift that fires: `Space`) for key parity;
56
56
  on a phone `look --hud` reports `play_area_share` and `controls_duplicate_gesture`
@@ -100,8 +100,8 @@ A portrait block puzzle, fixing a phone report:
100
100
 
101
101
  - A rotate card over a blank screen, or none on a landscape game.
102
102
  - Trusting `safeArea.insets()` without the `--sai-*` bridge: zeros, and the HUD hugs the edge.
103
- - A toast per repeat: ×n badges heap over play (the Gesundheit `look --hud` found eight at once).
103
+ - A toast per repeat: ×n badges heap over play (one game's `look --hud` found eight at once).
104
104
  - A tip banner over the board: a ghost finger that swipes once and fades at the first move teaches
105
105
  by play.
106
106
  - A layer faded to opacity 0 but left in the tree: it still covers the play and still animates
107
- (Held Note's HUD read 41% until faded layers went `visibility: hidden`).
107
+ (one game's HUD read 41% until faded layers went `visibility: hidden`).
@@ -1,7 +1,7 @@
1
1
  # The HUD as data, and a real title
2
2
 
3
3
  Styled ad hoc, one CSS rule at a time, both surfaces drift to the default: a score top left, lives
4
- top right, a white sans-serif, a title that is a heading and a button. Dead Letter's bar names that
4
+ top right, a white sans-serif, a title that is a heading and a button. One game's bar names that
5
5
  layout as the mark of an unauthored game.
6
6
 
7
7
  ## The HUD is a list and a theme
@@ -44,9 +44,9 @@ export const HUD = [
44
44
  - **The data is this game's.** There is no preset to pick; a shared preset is how every game ends
45
45
  up with the same HUD.
46
46
 
47
- ## A 3D action HUD on a phone: what Held Note measured
47
+ ## A 3D action HUD on a phone: what one game measured
48
48
 
49
- Held Note (a three.js horror game, 29 Sep 2026) put what it could on the hero's model (collar
49
+ A three.js horror game (29 Sep 2026) put what it could on the hero's model (collar
50
50
  lights for health, a gas tube, a wrist dial) and kept on the glass only what the hands can do now:
51
51
  a contextual key bar on desktop (explore, fight, grab, hold with its progress), a thumb cluster on
52
52
  touch (a stick that appears under the thumb, a button whose word changes with the moment, a hold
@@ -117,7 +117,7 @@ Chromium at a phone size misses WebKit's own behaviour: audio that unlocks only
117
117
  Chrome and not in Safari. Each look below catches more and costs more; use each where it is cheapest.
118
118
 
119
119
  Safari's bars take about 160 px of an upright phone's height, and the 390x844 review frames have
120
- none: Plush Pop's basket filled 86% of the width in them and 60% on the owner's iPhone, because it
120
+ none: one game's basket filled 86% of the width in them and 60% on the owner's iPhone, because it
121
121
  was sized by the height. `look --hud --viewport phone` measures the play again on the page Safari
122
122
  leaves (390x684) and saves that frame beside its own (`hud-playing-phone-safari.png`);
123
123
  `capture --viewport phone --safari` shoots any view there (724x283 held sideways). Judge a phone
@@ -78,7 +78,7 @@ The JavaScript first guess matters: review browsers emulate touch through `match
78
78
  The hits of the genre give the phone's screen to the board and take the move on it: Threes and
79
79
  2048 slide on a swipe anywhere, Two Dots on a drag through the dots, Monument Valley on a tap in
80
80
  the world. The player's eyes stay on the board, and a pad under it costs a third of the screen
81
- (Floe's first phone build: a 5×5 board under half the screen, four arrows plus Undo, Restart and
81
+ (one ice puzzle's first phone build: a 5×5 board under half the screen, four arrows plus Undo, Restart and
82
82
  Hint panels in the bottom third, all repeating what the swipe already did).
83
83
 
84
84
  ```ts
@@ -75,21 +75,21 @@ Measure the inset on the picture (where the corner ornament ends), and read the
75
75
  smallest size: a corner that is larger than half the smallest plate squeezes. A button's pressed and
76
76
  disabled states can be the same picture filtered, or a second generation with the same reference.
77
77
 
78
- What the Fold Room proof ran into (30 Sep):
78
+ What the sandstone proof ran into (30 Sep):
79
79
  - `border-image` owns the border: it ignores `border-radius` (a round button under a plate rule
80
80
  turns square and loses its glow; give discs `border-image: none` and draw them as a medallion,
81
81
  a bevelled border and an inlaid centre) and `border-color` (a warning state that recolours the
82
- border does nothing; use a glow). Lantern Night hit the second.
82
+ border does nothing; use a glow). The lantern game hit the second.
83
83
  - A pale plate cannot carry the world's light colours: cyan, amber and magenta measured 1.3 to
84
84
  1.9:1 on sandstone. A dark inlay (a deep umber medallion behind the icon, 5.8 to 14:1) carries
85
85
  them and still reads as stone.
86
86
  - An ink derived to exactly 4.5:1 measured lower on the rendered frame (glyph edges blend):
87
- Lantern Night's small HUD numbers needed 5 to 5.5:1 on paper.
87
+ The lantern game's small HUD numbers needed 5 to 5.5:1 on paper.
88
88
  - A one-off class on a `button.primary` loses to `button.primary`'s own rule (element plus class
89
89
  outweighs a class): select it as `button.my-class`.
90
90
 
91
91
  The wordmark is generated alone on a plain field in the world's material, then keyed or cropped and
92
- placed as `<img src="/ui/wordmark.png" alt="Fold Room">`; its size comes from `clamp()` so it fits a
92
+ placed as `<img src="/ui/wordmark.png" alt="Game name">`; its size comes from `clamp()` so it fits a
93
93
  phone upright and sideways. Read every letter before using it; when a name will not come out right
94
94
  after one redraw, the display face with a carved treatment (below) is the honest fallback.
95
95
 
@@ -120,7 +120,7 @@ A hint drawn as the world's own object (a lit lamp, a snowflake, a paper crane)
120
120
  bulb. Put the set on one sheet at 24 and 48 px on the plate colour and compare it with the cast
121
121
  before the game uses it.
122
122
 
123
- ## Worked example 1: Fold Room, sandstone plaques
123
+ ## Worked example 1: a sandstone puzzle, plaques
124
124
 
125
125
  **Before** (R7, iPhone, landscape): the court is warm carved sandstone at sunset; the HUD is dark
126
126
  navy pills (`rgba(10, 13, 28, 0.82)`) with cyan outlines, `ui-rounded` system type and the
@@ -157,7 +157,7 @@ button.fold-start .arch-glow { animation: arch-glow 2.4s ease-in-out infinite; }
157
157
  The ink `#3a2618` on the plaque is 6.3:1, so the goal line reads on any wall. Colour still means
158
158
  what the rooms mean: a step's icon takes the tone of the light it names, on its umber inlay.
159
159
 
160
- **The title:** the court itself behind; "FOLD ROOM" as generated carved-sandstone lettering on a
160
+ **The title:** the court itself behind; the game's name as generated carved-sandstone lettering on a
161
161
  plaque (about a third of the width sideways, the upper band upright) with the caption carved in
162
162
  Cinzel under it; Play as "Step in", a small stone arch whose opening glows the fold's cyan, low in
163
163
  the thumb zone and clear of the real doorway; sound, help and settings as stone medallions.
@@ -165,7 +165,7 @@ the thumb zone and clear of the real doorway; sound, help and settings as stone
165
165
  in play; on the title, the wordmark in its own face. The busiest views came down from 26% HUD cover
166
166
  to 25%, and verify still passes 22 of 22.
167
167
 
168
- ## Worked example 2: Lantern Night, paper lanterns
168
+ ## Worked example 2: a lantern garden, paper lanterns
169
169
 
170
170
  **Before** (owner, iPhone, 30 Sep): a glowing wordmark, then a small dark board preview (about 40%
171
171
  of the width) floating in empty night sky, an orange Play pill, an outlined "Gardens" button and
@@ -205,7 +205,7 @@ under it, and sound, help and settings as small lantern icons in the top corner.
205
205
  goes; the garden itself is the preview.
206
206
 
207
207
  **After** (the proof, 30 Sep, four generations for $0.10): the title key art as the backdrop,
208
- "LANTERN NIGHT" lettered onto a string of lanterns (spelled right first time, keyed out), paper
208
+ the game's name lettered onto a string of lanterns (spelled right first time, keyed out), paper
209
209
  tag plates nine-sliced on the HUD, Shippori Mincho and Zen Maru Gothic. `look --hud` went from all
210
210
  system type, 9 of 10 dark plates and the scaffold's glyphs to none of the three; verify still
211
211
  passes. Left for the next round: the HUD tags sit too close to the goal line.
@@ -214,9 +214,9 @@ passes. Left for the next round: the HUD tags sit too close to the goal line.
214
214
 
215
215
  | World | Plate | Edge | Motion |
216
216
  |---|---|---|---|
217
- | Frosted ice (Floe) | pale teal gradient, 70% opaque, `backdrop-filter: blur(6px)` | a 1 px bright top rim, soft inner glow | slides in and frosts from the edge |
218
- | Carved wood (Riad Rush) | warm brown with a darker grain band | 3 px ink outline, a hard 3 px drop | drops and bounces once |
219
- | Plush and felt (Plush Pop) | soft pastel, `border-radius` 40% | a dashed stitch 4 px inside the edge | squashes on press |
217
+ | Frosted ice | pale teal gradient, 70% opaque, `backdrop-filter: blur(6px)` | a 1 px bright top rim, soft inner glow | slides in and frosts from the edge |
218
+ | Carved wood | warm brown with a darker grain band | 3 px ink outline, a hard 3 px drop | drops and bounces once |
219
+ | Plush and felt | soft pastel, `border-radius` 40% | a dashed stitch 4 px inside the edge | squashes on press |
220
220
 
221
221
  ## What not to do
222
222
 
@@ -1,26 +1,26 @@
1
1
  # Screens and HUD on a phone
2
2
 
3
- UI fit was the most frequent owner correction across the Unity games, and mobile UI passes took 3 rounds on The Hot Gates and 6 or more on Dawg Ball. The failure this skill prevents is an audit that reports 0 issues while the phone shows broken UI: Dawg Ball's capture audit of 144 shots passed, then the owner found overflowing cards on a phone.
3
+ UI fit was the most frequent owner correction across the Unity games, and mobile UI passes took 3 rounds on one game and 6 or more on another. The failure this skill prevents is an audit that reports 0 issues while the phone shows broken UI: one game's capture audit of 144 shots passed, then the owner found overflowing cards on a phone.
4
4
 
5
5
  ## Tools
6
6
 
7
- The studio's `com.joydle.core` package carries the UGUI helper kit, `UiKit` (fp:unity-game, `references/studio-packages.md`): a canvas scaled at 1170×2532, match 0.5; a `Safe` rect from `Screen.safeArea`; `Panel`, `Img`, `Text`, `Button` (with a pop), `Card`, `Dim` and `FitToContent`, with text and images that take no taps. Not shipped by the kit or the package: the Unity starter, these checks, a font builder and the per-game audit and capture scripts. "Partial" below means a version exists in one studio's games, not in the kit. Until the starter ships, write each check as an Edit Mode or Play Mode test in your own project, capture screens on a Simulator of your own (`funtools sim lease`, then `funtools sim shot <udid> --out shot.png` after a launch with a dev flag per screen; a landscape game comes back upright), and look at every shot yourself.
7
+ Not shipped by the kit: the Unity starter, these checks, a UGUI helper kit of your own (a canvas scaled at 1170×2532, match 0.5; one safe rect from `Screen.safeArea`; text and images that take no taps), a font builder and the per-game audit and capture scripts. "Partial" below means a version exists in one studio's games, not in the kit. Until the starter ships, write each check as an Edit Mode or Play Mode test in your own project, capture screens on a Simulator of your own (`funtools sim lease`, then `funtools sim shot <udid> --out shot.png` after a launch with a dev flag per screen; a landscape game comes back upright), and look at every shot yourself.
8
8
 
9
9
  | Check | Passes when | Status |
10
10
  |---|---|---|
11
- | `ui_audit` | 0 overflows against parent panel and visible art, siblings under 8 units apart, taps under 44 pt, or items outside the safe area | partial: Porcelain Panic (a `-uicheck` launch flag), Hot Gates and Dawg Ball (screen capture scripts) |
11
+ | `ui_audit` | 0 overflows against parent panel and visible art, siblings under 8 units apart, taps under 44 pt, or items outside the safe area | partial: one game (a `-uicheck` launch flag), two others (screen capture scripts) |
12
12
  | `raycast_ownership` | a raycast at each button's centre hits that button | proposed |
13
- | `screen_sheet` | N of N registered screens and states captured | partial: Hot Gates; Dawg Ball (a `-db-tour` flag that writes every menu to PNG); `funtools unity capture --all` shoots every registered view |
14
- | `touch_wording` | 0 keyboard or gamepad words in visible text | partial: Dead Letter's smoke run |
15
- | `frame_law` | player head and feet on screen, at least 9% of screen height, every journey step | partial: Pocket Crew |
16
- | `hud_occlusion` | 0% of frames where the hero's or boss's opaque bounds cross a HUD rect | partial: Dead Letter, a probe |
17
- | `drawn_vs_solid` | drawn mesh bounds against collider bounds within the baseline per category | partial: Pocket Crew |
13
+ | `screen_sheet` | N of N registered screens and states captured | partial: one game; another (a tour flag that writes every menu to PNG); `funtools unity capture --all` shoots every registered view |
14
+ | `touch_wording` | 0 keyboard or gamepad words in visible text | partial: one game's smoke run |
15
+ | `frame_law` | player head and feet on screen, at least 9% of screen height, every journey step | partial: one game |
16
+ | `hud_occlusion` | 0% of frames where the hero's or boss's opaque bounds cross a HUD rect | partial: one game, a probe |
17
+ | `drawn_vs_solid` | drawn mesh bounds against collider bounds within the baseline per category | partial: one game |
18
18
 
19
19
  Also proposed: a TMP SDF font builder (use TMP's Font Asset Creator) and `glyph_coverage` (every UI character exists in the static TMP atlas; `TMP_FontAsset.HasCharacters` in a test does it).
20
20
 
21
21
  ## Procedure
22
22
 
23
- 1. Build every screen in code with UGUI and TextMeshPro. `UiKit` scales with screen size at 1170×2532, match 0.5 (portrait); Hot Gates uses constant pixel size where 1 unit is 1 web CSS px, so a ported layout keeps its numbers.
23
+ 1. Build every screen in code with UGUI and TextMeshPro. Scale with screen size at 1170×2532, match 0.5 (portrait); one port uses constant pixel size where 1 unit is 1 web CSS px, so a ported layout keeps its numbers.
24
24
  2. Fix orientation per game (puzzle and idle portrait, action landscape) in an editor setup method (`PlayerSettings.defaultInterfaceOrientation`, run with `-executeMethod`) and check it: cloned settings came up wrong twice.
25
25
  3. Size controls from this table.
26
26
 
@@ -29,33 +29,33 @@ Also proposed: a TMP SDF font builder (use TMP's Font Asset Creator) and `glyph_
29
29
  | Any tap target | 44 pt or more |
30
30
  | Hero call to action | 64 pt, one per screen, in the thumb zone |
31
31
  | Buttons | primary 44 pt, secondary 36 pt, icon plus a 15–16 pt label |
32
- | Thumb action buttons | 72–80 pt (Hot Gates); 56 units with a 20 gap (Dawg Ball) |
32
+ | Thumb action buttons | 72–80 pt (one game); 56 units with a 20 gap (another) |
33
33
  | Body text | 16 pt or more, 12 pt hard floor; HUD numerals 40 pt |
34
34
  | HUD share of screen | 25% or less; one 44 pt top row |
35
35
  | Margins and spacing | 24 pt or more from safe edges; spacing only 4/8/12/16/24/32 |
36
36
 
37
- 4. Take safe areas from `Screen.safeArea` through one helper (`UiKit.Safe`, read once when the kit is made: rebuild it if the screen changes). In landscape the full inset (about 60 pt each side) read as too much padding. Scrap Riot's own helper clears only the rounded corner (radius 62 pt) on the top and bottom rows and applies the full inset only on the island's side, in the band at 32–68% of height. Centre a split or versus layout on the real screen, not on the lopsided safe area. `Screen.cutouts` allocates on every call, so read it when the screen changes.
37
+ 4. Take safe areas from `Screen.safeArea` through one helper (rebuild it if the screen changes). In landscape the full inset (about 60 pt each side) read as too much padding. One game's own helper clears only the rounded corner (radius 62 pt) on the top and bottom rows and applies the full inset only on the island's side, in the band at 32–68% of height. Centre a split or versus layout on the real screen, not on the lopsided safe area. `Screen.cutouts` allocates on every call, so read it when the screen changes.
38
38
  5. Stay in touch mode on iOS. `touch_wording` runs the regex `Press|Enter|Esc|WASD|Click|Keyboard` over visible text and expects 0 hits.
39
- One input path: the new Input System only. Pocket Crew lays an invisible full-screen graphic under the HUD to take touch; HUD buttons are not raycast targets, and the game asks the HUD for a hit with a 44 pt minimum box. `Gamepad.current` covers MFi, Xbox and PlayStation pads. A twin-stick game defers the system's edge gestures (`PlayerSettings.iOS.deferSystemGesturesMode`, top and bottom) and hides the home indicator. Reduce Motion follows the system setting through a native plugin in Scrap Riot and Pocket Crew; the others have only a manual "screen effects" setting.
40
- 6. Use full fonts and warm every glyph behind the title. A web subset lacked Ş Ğ İ; Nunito lacks ▶ ◀ ★. First-use glyph baking cost 183–266 ms in Dawg Ball against 17–20 ms once warm.
39
+ One input path: the new Input System only. One game lays an invisible full-screen graphic under the HUD to take touch; HUD buttons are not raycast targets, and the game asks the HUD for a hit with a 44 pt minimum box. `Gamepad.current` covers MFi, Xbox and PlayStation pads. A twin-stick game defers the system's edge gestures (`PlayerSettings.iOS.deferSystemGesturesMode`, top and bottom) and hides the home indicator. Reduce Motion follows the system setting through a native plugin in two games; the others have only a manual "screen effects" setting.
40
+ 6. Use full fonts and warm every glyph behind the title. A web subset lacked Ş Ğ İ; Nunito lacks ▶ ◀ ★. First-use glyph baking cost 183–266 ms in one game against 17–20 ms once warm.
41
41
  7. Give a label its own hit area: text stretched over its parent with raycast on takes the parent's taps.
42
42
  8. Capture every state, not only every screen: scroll positions, fresh and full saves, extreme values, 125% and 150% text, and every mode's end screen. Register each state with `FunpixelProbe.View(name, enter)` (`com.funpixel.probe`); `funtools unity capture --all` shoots them all, upright and without the development watermark.
43
43
  9. Run `ui_audit` at SE, Pro, Pro Max and 2000×920 (the owner's phone). It compares text with the parent panel and the visible art: text checked against its own box passed overlapping labels.
44
44
  10. After every UI change, rebuild the all-screens sheet with before, now and reference columns and the same file names, so an open viewer stays current. Then self-review each screen from 100% crops.
45
45
  11. For play screens, run `frame_law`, `hud_occlusion` and `drawn_vs_solid`.
46
- 12. Keep a mobile pass to size, depth, placement, copy and motion. Palette, fonts and art stay: on Hot Gates the owner said style and identity are kept.
46
+ 12. Keep a mobile pass to size, depth, placement, copy and motion. Palette, fonts and art stay: on one game the owner said style and identity are kept.
47
47
 
48
48
  ## Worked example
49
49
 
50
- Dawg Ball, a landscape port. The capture audit ran at 2868×1320 and 1334×750, took 144 shots and reported 0 issues. On a phone the owner found broken dog cards: the Pick screen overflowed at 2000×920, a shape the audit never ran. Every capture had been a Quick Match, so a stuck vs-Bot result screen shipped. The owner asked for all screens in a sheet twice. Steps 8 to 10 came out of it.
50
+ A landscape port. The capture audit ran at 2868×1320 and 1334×750, took 144 shots and reported 0 issues. On a phone the owner found broken dog cards: the Pick screen overflowed at 2000×920, a shape the audit never ran. Every capture had been a Quick Match, so a stuck vs-Bot result screen shipped. The owner asked for all screens in a sheet twice. Steps 8 to 10 came out of it.
51
51
 
52
52
  ## Common mistakes
53
53
 
54
- - Checking text against its own box. In Porcelain Panic `-uicheck` passed while the 'SHOTS' label sat on a shield rim drawn with `preserveAspect`.
55
- - Capturing only the top of a scrolling sheet. Scrap Riot's roster labels were broken from the first port until the owner found them on a phone.
56
- - A label stretched over its card. `UiKit.Text()` put the Restore label over the whole shop card; taps on products showed "Restoring purchases" in four games, until `UiKit` text stopped taking taps.
57
- - Keyboard wording: Dead Letter showed "Press Enter to continue" on the Simulator; Hot Gates captures said "A / D to steer".
58
- - Naive safe areas: Scrap Riot's HUD corners moved from 74 to 38–43 px.
59
- - UGUI geometry: `Slider` stretches fill and thumb to the row height, and stretch anchors plus a non-zero `sizeDelta` double the width. Pocket Crew's Photo pill sat over the paywall's Done and took its taps.
60
- - A player nobody can see. Pocket Crew's Tiny Pip drew at about 2% of screen height; Dead Letter's boss heads sat under the boss bar in 100% of frames.
61
- - Art without a matching collider: 42 Pocket Crew props had none.
54
+ - Checking text against its own box. In one game `-uicheck` passed while the 'SHOTS' label sat on a shield rim drawn with `preserveAspect`.
55
+ - Capturing only the top of a scrolling sheet. One game's roster labels were broken from the first port until the owner found them on a phone.
56
+ - A label stretched over its card. A shared text helper put the Restore label over the whole shop card; taps on products showed "Restoring purchases" in four games, until its text stopped taking taps.
57
+ - Keyboard wording: one game showed "Press Enter to continue" on the Simulator; another's captures said "A / D to steer".
58
+ - Naive safe areas: One game's HUD corners moved from 74 to 38–43 px.
59
+ - UGUI geometry: `Slider` stretches fill and thumb to the row height, and stretch anchors plus a non-zero `sizeDelta` double the width. One game's Photo pill sat over the paywall's Done and took its taps.
60
+ - A player nobody can see. One game's smallest hero drew at about 2% of screen height; another's boss heads sat under the boss bar in 100% of frames.
61
+ - Art without a matching collider: 42 props in one game had none.
@@ -34,7 +34,7 @@ For a store listing test or an A/B across ad networks, write `design/compose/ads
34
34
  ```json
35
35
  { "hooks": [{ "line": "Bugs don't pop. They sneeze.", "moment": "chain" }, { "line": "One puff, fifteen sneezes", "moment": "chain-desktop" }],
36
36
  "ctas": ["Play now", "Play free"], "lengths": [6, 15, 30], "aspects": ["9:16", "1:1", "16:9"],
37
- "end_card": { "title": "Gesundheit!", "tagline": "Sneeze them all" }, "max": 12 }
37
+ "end_card": { "title": "Achoo!", "tagline": "Sneeze them all" }, "max": 12 }
38
38
  ```
39
39
 
40
40
  - A hook's `moment` is a capture by name (`chain-desktop`, from `capture --all`) or a view (`chain`,
@@ -57,7 +57,7 @@ install. Image processing and browser tests belong to your tools, outside the ga
57
57
  **Local links.** `file:` and `link:` dependencies, and workspace links to a folder that is not in
58
58
  the upload, cannot resolve on the server. Depend on published versions.
59
59
 
60
- **An unpinned SDK.** `@funpixel/sdk` is pinned exactly (`"0.6.0"`); a caret range can resolve to a
60
+ **An unpinned SDK.** `@funpixel/sdk` is pinned exactly (`"0.7.0"`); a caret range can resolve to a
61
61
  different build on the server than on your machine.
62
62
 
63
63
  **Path case.** Your disk may treat `Hero.png` and `hero.png` as one file; the server and the
@@ -32,8 +32,8 @@ button are the person's.
32
32
  or You.
33
33
  - `npx @funpixel/tools check`, `verify` and `capture --all`: the build measured; `funtools doctor`'s
34
34
  iOS release block names a missing certificate, Xcode account or App Store Connect key.
35
- - Unity: `funtools unity run -- … -executeMethod Joydle.Core.Editor.BuildTools.TestFlight` with the
36
- studio package, then `xcodebuild archive` and `-exportArchive`; `funtools sim lease` and
35
+ - Unity: `funtools unity run -- … -executeMethod Setup.BuildTestFlight`, the game's own build
36
+ method, then `xcodebuild archive` and `-exportArchive`; `funtools sim lease` and
37
37
  `sim shot` for screenshots; `ffprobe` before any preview upload.
38
38
 
39
39
  ## The audit, for any store
@@ -65,7 +65,7 @@ build only from a clean main. Every policy fact carries the day it was read and
65
65
 
66
66
  ## Worked example
67
67
 
68
- Four Unity games for Google Play (Joydle, 8 Oct 2026): no Android build ever made, Unity IAP already
68
+ Four Unity games for Google Play (8 Oct 2026): no Android build ever made, Unity IAP already
69
69
  on Play Billing 9, analytics in all four while two listings said "no analytics". Verdict: none can
70
70
  upload today, none is blocked. A shared Android foundation first (an AAB pinned to API 36, one upload
71
71
  key, the AD_ID permission removed, one back handler), then 2–8 days per game; the screenshots
@@ -54,7 +54,7 @@ prints these steps in order with this column.
54
54
  | App Privacy | Console | From the SDK list; not in the public API (`asc web privacy` only on the person's session). |
55
55
  | Price and availability | Script: `asc pricing` | |
56
56
  | In-app purchases, prices | Script: `asc iap` | |
57
- | The first in-app purchase on the version | Console | Ticked onto the version; whether `asc` can attach it was not verified (Pocket Crew's was dropped when submitted by API alone). |
57
+ | The first in-app purchase on the version | Console | Ticked onto the version; whether `asc` can attach it was not verified (one game's was dropped when submitted by API alone). |
58
58
  | Review details | Script: `asc review` | Notes, contact, a way to the paid content. |
59
59
  | Validate | Script: `asc validate --strict`, `asc release stage --dry-run` | |
60
60
  | Submit for review | You | `--submit` only after the person's go-ahead. |
@@ -1,6 +1,6 @@
1
1
  # Google Play
2
2
 
3
- From Joydle's Google Play readiness audit (8 Oct 2026, four Unity games), with what changes for a
3
+ From a Google Play readiness audit (8 Oct 2026, four Unity games), with what changes for a
4
4
  web game. Policy facts were read on that day from Google Play Console Help and developer.android.com;
5
5
  read them again before the page is final.
6
6
 
@@ -75,7 +75,7 @@ Managed publishing on, so an approved release waits for a click. One game at a t
75
75
  account's first review can take 7 days or more. A staged rollout of 10–20%, then 100%, watching
76
76
  crash rate (under 1.09%) and ANR rate (under 0.47%) in Android vitals.
77
77
 
78
- ## Who does each step (Dead Letter, 8 Oct 2026)
78
+ ## Who does each step (one game, 8 Oct 2026)
79
79
 
80
80
  The first game went from its first Android build to Send for review in about 5 hours, but almost every
81
81
  console form was filled by an agent driving Chrome, because there was no Play API access. Set the API
@@ -1,16 +1,15 @@
1
1
  # iOS release for a Unity game
2
2
 
3
- A Unity iOS build can upload "successfully" and still be broken, because most release failures are silent. Across nine games, four reached TestFlight with no sound, Firebase never started in release builds (3 broken uploads), one upload drew ITMS-90208 by email afterwards, and Pocket Crew was pulled from review twice. This skill orders the checks so each failure shows on the Mac first.
3
+ A Unity iOS build can upload "successfully" and still be broken, because most release failures are silent. Across nine games, four reached TestFlight with no sound, Firebase never started in release builds (3 broken uploads), one upload drew ITMS-90208 by email afterwards, and one game was pulled from review twice. This skill orders the checks so each failure shows on the Mac first.
4
4
 
5
5
  ## Tools
6
6
 
7
- - The studio's `com.joydle.core` (`fp:unity-game`, `references/studio-packages.md`):
8
- `funtools unity run -- -nographics -buildTarget iOS -executeMethod Joydle.Core.Editor.BuildTools.TestFlight`
7
+ - The game's own build method,
8
+ `funtools unity run -- -nographics -buildTarget iOS -executeMethod Setup.BuildTestFlight`: it
9
9
  applies the size settings, signing and a unique build number, and refuses to build without
10
- `Assets/_Game/Art/Icon/app_icon.png`; `Device`, `Simulator` and `SimulatorMuted` beside it. Its
11
- `IosPostprocess` stamps every framework's minimum OS and the encryption key. `com.joydle.firebase`
12
- hands the linker what High stripping would remove. Without the package, the game's own method
13
- (Knockout Lap's `Build.IosDevice`).
10
+ `Assets/_Game/Art/Icon/app_icon.png`; a device and a Simulator build beside it. A post-process
11
+ step stamps every framework's minimum OS and the encryption key, and the linker is handed what
12
+ High stripping would remove.
14
13
  - Xcode: `xcodebuild archive` (automatic signing), then `xcodebuild -exportArchive` (manual signing;
15
14
  `destination: upload` uploads it): 15–25 minutes.
16
15
  - App Store Connect (ASC), on the web or its API: bundle ids, profiles, processing, listings.
@@ -35,30 +34,30 @@ No script changes the signing identity, team, bundle id or `ITSAppUsesNonExemptE
35
34
 
36
35
  ## Procedure
37
36
 
38
- 1. Build only when HEAD equals origin/main and the tree is clean. TestFlight builds came from an unmerged branch (Dead Letter's icon was missing on main), and two review builds (Dead Letter, Scrap Riot) from uncommitted reimports (190 `.wav.meta` files, 4 TMP font assets), so main was not what Apple reviewed. Until `build_from_main` exists, compare by hand.
39
- 2. Keep the Simulator's churn out of commits. Simulator builds rewrite `iPhoneSdkVersion` to 988 and dirty AudioManager, TMP font assets and URP global settings; `git commit -a` swept them in on Dawg Ball.
40
- 3. Confirm the build settings: IL2CPP, managed stripping High, strip engine code, code generation OptimizeSize, iOS 16.0, iPhone only (`ProjectConfig.ApplyIOS` and `BuildTools` set them), LZ4HC when `ProjectSettings/JoydleLz4hc.txt` exists. Signing: `BuildTools.TestFlight` sets team KBAT76634X and automatic signing; archive with `-allowProvisioningUpdates` and the ASC key, export manually with the Apple Distribution certificate and the bundle's App Store profile (`asc_profiles.py`). Never cloud-managed signing: it needs an Admin API key.
41
- 4. Preserve what High stripping removes. Anything reached only at runtime (collider types for `CreatePrimitive`, the game's own assemblies) needs the game's `link.xml`; Unity ignores a package's own, so `com.joydle.firebase` hands its file to the linker itself. Pass for `il2cpp_preserve`: every assembly with `RuntimeInitializeOnLoadMethod` is present in il2cppOutput. Pass for `tmp_variants`: TMP `OUTLINE_ON` and `UNDERLAY_ON` kept, no `shader_feature` in runtime materials.
37
+ 1. Build only when HEAD equals origin/main and the tree is clean. TestFlight builds came from an unmerged branch (one game's icon was missing on main), and two review builds from uncommitted reimports (190 `.wav.meta` files, 4 TMP font assets), so main was not what Apple reviewed. Until `build_from_main` exists, compare by hand.
38
+ 2. Keep the Simulator's churn out of commits. Simulator builds rewrite `iPhoneSdkVersion` to 988 and dirty AudioManager, TMP font assets and URP global settings; `git commit -a` swept them in on one game.
39
+ 3. Confirm the build settings: IL2CPP, managed stripping High, strip engine code, code generation OptimizeSize, iOS 16.0, iPhone only (the build method sets them), LZ4HC. Signing: the build method sets the team and automatic signing; archive with `-allowProvisioningUpdates` and the ASC key, export manually with the Apple Distribution certificate and the bundle's App Store profile (`asc_profiles.py`). Never cloud-managed signing: it needs an Admin API key.
40
+ 4. Preserve what High stripping removes. Anything reached only at runtime (collider types for `CreatePrimitive`, the game's own assemblies) needs the game's `link.xml`; Unity ignores a package's own, so an Editor step hands that file to the linker. Pass for `il2cpp_preserve`: every assembly with `RuntimeInitializeOnLoadMethod` is present in il2cppOutput. Pass for `tmp_variants`: TMP `OUTLINE_ON` and `UNDERLAY_ON` kept, no `shader_feature` in runtime materials.
42
41
  5. Empty `Resources/` of test files (`resources_hygiene`: 0 bytes). The Unity test runner drops `PerformanceTestRun*.json` into `Assets/Resources`, which ships.
43
42
  6. Close any Editor on the project, run `funtools doctor`, then build, export and archive. Read the whole output: `| tail` hid a failing compile check.
44
43
  7. Read the export log before archiving (`export_log`: 0 errors, Burst timeouts included). Burst can time out under heavy host load; that export does not ship.
45
- 8. Pre-flight the archive (`ios_preflight`): framework plist minimum OS equals the binary's, app icon present, audio on. Before the first TestFlight of a release, a fresh read-only agent does a publisher and story-consistency review: 6 blockers in Dead Letter, 30 issues in Scrap Riot.
44
+ 8. Pre-flight the archive (`ios_preflight`): framework plist minimum OS equals the binary's, app icon present, audio on. Before the first TestFlight of a release, a fresh read-only agent does a publisher and story-consistency review: 6 blockers in one game, 30 issues in another.
46
45
  9. Check what the archive holds (`archive_contents`): a known string per level in `.app/Data`, the plist, a new CFBundleVersion. One archive on disk held Letter 1 only.
47
- 10. Measure the unpacked `.app` from the archive (`size_budget`), not Unity's "Complete build size". Proposed budget: 2D ≤ 80 MB, 3D ≤ 100 MB, engine ≤ 45 MB, unexplained change ≤ 2 MiB per build; Dead Letter, a 2D game, is over it at 133 MB. `texture_audit` passes at 0 unwhitelisted RGBA32 or non-power-of-two mipmapped textures and RGBA32 under 1 MB in total.
46
+ 10. Measure the unpacked `.app` from the archive (`size_budget`), not Unity's "Complete build size". Proposed budget: 2D ≤ 80 MB, 3D ≤ 100 MB, engine ≤ 45 MB, unexplained change ≤ 2 MiB per build; one 2D game is over it at 133 MB. `texture_audit` passes at 0 unwhitelisted RGBA32 or non-power-of-two mipmapped textures and RGBA32 under 1 MB in total.
48
47
  11. Upload with approval, then watch processing in App Store Connect. An upload that reports success can still fail by email (ITMS-90208).
49
48
  12. Submit in two hands. The API builds the draft; a person ticks the first IAP on the version page and presses Submit. The Game Center drafts the API leaves: not in the report.
50
49
  13. After a metadata-only rejection, new screenshots uploaded through the API do not clear it: a person edits and saves the version, then resubmits.
51
- 14. A server-side minimum version compares the build number, not `CFBundleShortVersionString`: that is 1.0.0 on every TestFlight build, so Dawg Ball's kill switch could not tell them apart.
50
+ 14. A server-side minimum version compares the build number, not `CFBundleShortVersionString`: that is 1.0.0 on every TestFlight build, so one game's kill switch could not tell them apart.
52
51
 
53
52
  ## Worked example
54
53
 
55
- Koi Out, first upload, 25 Sep. The upload succeeded, then Apple emailed ITMS-90208: Unity 6000.6's `UnityRuntime.framework` says iOS 15.0 in its plist and 16.0 in its binary. The fix went into the shared package (a post-build step stamps every framework) and the upload script's pre-flight. Porcelain Panic's TestFlight build then carried Unity's default icon and its next upload was refused, so the build method now refuses without `app_icon.png`. The same pre-flight later refused `m_DisableAudio: 1`, a setting Dead Letter inherited from a cloned project.
54
+ A puzzle game's first upload, 25 Sep. The upload succeeded, then Apple emailed ITMS-90208: Unity 6000.6's `UnityRuntime.framework` says iOS 15.0 in its plist and 16.0 in its binary. The fix went into the shared package (a post-build step stamps every framework) and the upload script's pre-flight. Another game's TestFlight build then carried Unity's default icon and its next upload was refused, so the build method now refuses without `app_icon.png`. The same pre-flight later refused `m_DisableAudio: 1`, a setting a third game inherited from a cloned project.
56
55
 
57
56
  ## Common mistakes
58
57
 
59
- - No AudioListener on a code-made camera: four games reached TestFlight silent, and Simulator captures hide it (`funtools doctor` warns; `Sfx.EnsureListener()`).
58
+ - No AudioListener on a code-made camera: four games reached TestFlight silent, and Simulator captures hide it (`funtools doctor` warns).
60
59
  - Firebase reached only through `RuntimeInitializeOnLoadMethod` was stripped from release in every game: 3 broken uploads.
61
- - Submitting through the API alone: it dropped Pocket Crew's first IAP and left Game Center drafts, and the game was pulled from review twice.
62
- - Trusting "Complete build size": The Hot Gates' "1.08 GB" was the Xcode project; the archive was 123 MB.
63
- - Stripped TMP variants: outlined numbers drew as cream blobs in The Hot Gates player build.
64
- - Firebase C++ 13.17 has no arm64 Simulator slice, so every Firebase game failed to link for the Simulator; each game links null stubs (304 in The Hot Gates), detected by `SIMULATOR_UDID`, because a Simulator reports a real device model.
60
+ - Submitting through the API alone: it dropped one game's first IAP and left Game Center drafts, and the game was pulled from review twice.
61
+ - Trusting "Complete build size": One game's "1.08 GB" was the Xcode project; the archive was 123 MB.
62
+ - Stripped TMP variants: outlined numbers drew as cream blobs in one game's player build.
63
+ - Firebase C++ 13.17 has no arm64 Simulator slice, so every Firebase game failed to link for the Simulator; each game links null stubs (304 in one game), detected by `SIMULATOR_UDID`, because a Simulator reports a real device model.
@@ -4,7 +4,7 @@ A decision guide, not a market report: which way a game makes money, what the ev
4
4
  fits a platform and a feel. The model and every price are the owner's decision (step 0 of the work); this page
5
5
  gives them the numbers to decide with, and the GDD records the choice in its Scope (skill `fp:gdd`).
6
6
 
7
- Numbers as of Oct 2026, from Particle Rush's study (design/research/monetisation.md in that game's repository,
7
+ Numbers as of Oct 2026, from one racer's study (design/research/monetisation.md in that game's repository,
8
8
  researched 9 Oct 2026). Each figure keeps its source and date; **(snippet)** means it was seen only in a
9
9
  search-result summary, not on the page itself. Revenue from AppMagic, Sensor Tower and Steam trackers is a
10
10
  third-party estimate, not a company report. Read a source again before a price or a forecast is final.
@@ -55,7 +55,7 @@ shocks and things taken away, and too little free game.
55
55
 
56
56
  ## Worked example: a racer that sells no power
57
57
 
58
- Particle Rush (Unity, iOS and Android first; modules unlock by play, never bought) chose, on 9 Oct 2026:
58
+ A racer (Unity, iOS and Android first; modules unlock by play, never bought) chose, on 9 Oct 2026:
59
59
  - **Mobile launch:** free with rewarded ads first; interstitials capped, never on a retry and removed by any
60
60
  purchase; remove-ads at $2.99–3.99 bundled with a starter trail so the buyer sees something; cosmetics at
61
61
  $0.99–2.99.
@@ -6,11 +6,11 @@ sell by in the first place: [readiness](readiness.md), `references/money.md`.
6
6
 
7
7
  ## If review rejects anyway
8
8
 
9
- | Guideline | Game | Cause | Fix |
10
- |---|---|---|---|
11
- | 2.1(b) | Dead Letter, Scrap Riot | Purchase behind gameplay; reviewer on iPad could not find it | Step 2 |
12
- | 2.3.3 | Noodle Nights | Screenshots hid the real HUD and controls | Step 9 |
13
- | 2.3.7 | Koi Out | "free" in the subtitle | Step 11 |
9
+ | Guideline | Cause | Fix |
10
+ |---|---|---|
11
+ | 2.1(b) | Purchase behind gameplay; reviewer on iPad could not find it | Step 2 |
12
+ | 2.3.3 | Screenshots hid the real HUD and controls | Step 9 |
13
+ | 2.3.7 | "free" in the subtitle | Step 11 |
14
14
 
15
15
  After a metadata-only rejection, new screenshots uploaded through the API do not clear it; a person
16
16
  edits and saves the version, then resubmits. Messages to App Review stay short.
@@ -19,20 +19,20 @@ edits and saves the version, then resubmits. Messages to App Review stay short.
19
19
 
20
20
  | Kind | Sells | Examples |
21
21
  |---|---|---|
22
- | Casual | Coins, hints, boosters | Koi Out, Stitch Pop, Porcelain Panic, Noodle Nights |
23
- | Premium | Free first chapter and one non-consumable, Family Sharing on | Dead Letter $4.99 Full Route, Scrap Riot $2.99 Full Shift, Pocket Crew $4.99 Full Crew |
22
+ | Casual | Coins, hints, boosters | four games |
23
+ | Premium | Free first chapter and one non-consumable, Family Sharing on | three games, at $2.99 and $4.99 |
24
24
 
25
- Unity IAP 5.4.3 (StoreKit 2) through the studio's `IapService`, one-off products only, no server
25
+ Unity IAP 5.4.3 (StoreKit 2) through one shared purchase service, one-off products only, no server
26
26
  receipt validation, no ads in premium games. Restore runs only from a tap (a launch-time restore shows
27
27
  an Apple sign-in prompt); prices come only from the store's localised string; failure text is plain
28
28
  and a cancel says nothing.
29
29
 
30
30
  ## What the starter wires, switched off
31
31
 
32
- `IAdService` with no release implementation (`Ads.CreateDefault` gives test ads in development builds
33
- only) and the pacing rules; `IapService` with Restore in Settings and the purchase screen from the
32
+ `IAdService` with no release implementation (test ads in development builds
33
+ only) and the pacing rules; the purchase service with Restore in Settings and the purchase screen from the
34
34
  first launch; a `.storekit` file for Xcode runs; one purchase gate at the first line of `StartLevel`;
35
- telemetry muted by every dev flag; a store interface even when 1.0 sells nothing (The Hot Gates).
35
+ telemetry muted by every dev flag; a store interface even when 1.0 sells nothing.
36
36
 
37
37
  ## Ads
38
38
 
@@ -47,9 +47,9 @@ Pacing, coded and off:
47
47
 
48
48
  | Kind | Interstitial | Rewarded |
49
49
  |---|---|---|
50
- | Puzzle | from level 15, every third level (`Ads.ShouldShowInterstitial`) | +3 balls (Porcelain Panic) |
51
- | Idle | only after big unlocks, never in the first 5 minutes, at most one per 3 minutes | 2× cash and offline 2× (Noodle Nights) |
52
- | Versus | every third match after day one | double chest, timer skip with a daily cap (Dawg Ball) |
50
+ | Puzzle | from level 15, every third level | +3 balls |
51
+ | Idle | only after big unlocks, never in the first 5 minutes, at most one per 3 minutes | 2× cash and offline 2× |
52
+ | Versus | every third match after day one | double chest, timer skip with a daily cap |
53
53
 
54
54
  Never ads in a premium game, and never a No Ads purchase while no network ships. The only retention
55
55
  evidence is a teardown of Head Ball 2 from the owner's recording: ads took 44% of a session against
@@ -57,10 +57,10 @@ evidence is a teardown of Head Ball 2 from the owner's recording: ads took 44% o
57
57
 
58
58
  ## Privacy and analytics
59
59
 
60
- Firebase Analytics and Crashlytics in every game through `Telemetry`; events `level_start`,
60
+ Firebase Analytics and Crashlytics in every game through one telemetry boundary; events `level_start`,
61
61
  `level_end`, `tutorial_complete`, `shop_open`, `unlock_card_view`, `unlock_tap`, plus each game's own.
62
- No advertising identifier, no tracking prompt, ad personalisation pinned off (`com.joydle.firebase`
63
- does all three). App Privacy (website only) declares Device ID, Purchase History, Coarse Location,
62
+ No advertising identifier, no tracking prompt, ad personalisation pinned off (the shared Firebase
63
+ setup does all three). App Privacy (website only) declares Device ID, Purchase History, Coarse Location,
64
64
  Product Interaction and Crash Data: not linked, no tracking; Purchase History only where there is a
65
65
  purchase. The docs said "Data Not Collected" until Firebase shipped, and one draft missed Purchase
66
66
  History. No age gate and no Kids category; the ratings came out 9+ and 12+ (fantasy violence). No
@@ -70,5 +70,5 @@ dashboard review is recorded in any session.
70
70
 
71
71
  What the first week watched was App Review's state: three games sat in "Waiting for Review" for over a
72
72
  week after a resubmit. No content ships without a store release (no remote bundles or remote config;
73
- Gallery Heist's Addressables are built into the app, with no remote catalog), and a server's minimum-version check must compare the build number: the version string
73
+ one game's Addressables are built into the app, with no remote catalog), and a server's minimum-version check must compare the build number: the version string
74
74
  is 1.0.0 on every TestFlight build.
@@ -1,7 +1,7 @@
1
1
  # The readiness page
2
2
 
3
3
  One page per store, in the game's own look (or the studio's, for several games), written to
4
- `design/pages/<store>-readiness.html`. The shape that worked (Joydle's Google Play readiness):
4
+ `design/pages/<store>-readiness.html`. The shape that worked (a Google Play readiness page for four games):
5
5
 
6
6
  1. **Header:** the studio, the store, the date checked; the games by name; one line of what the page
7
7
  is based on (the repository at a named commit, the toolchain, the store's pages read that day, a
@@ -1,7 +1,7 @@
1
1
  # Store readiness
2
2
 
3
- "Can it go on the store?" is answered by an audit, not a guess. The model that worked (Joydle's
4
- Google Play readiness, 8 Oct 2026, four games) reads the repository and the toolchain, reads the
3
+ "Can it go on the store?" is answered by an audit, not a guess. The model that worked (a
4
+ Google Play readiness audit, 8 Oct 2026, four games) reads the repository and the toolchain, reads the
5
5
  store's current policy pages, and writes one page: a verdict in a sentence, each game at a glance,
6
6
  a matrix of every area by game, the store's rules that apply now, the work in order with who does
7
7
  each part, the effort, the risks and the questions only the owner can answer.
@@ -86,7 +86,7 @@ they carry; before the page is final, read each store's current page and correct
86
86
 
87
87
  ## Worked example
88
88
 
89
- Four Unity games for Google Play (Joydle, 8 Oct 2026): no Android build ever made, Unity IAP already
89
+ Four Unity games for Google Play (8 Oct 2026): no Android build ever made, Unity IAP already
90
90
  on Play Billing 9 (Play requires 8+), analytics in all four while two listings said "no analytics".
91
91
  Verdict: none can upload today, none is blocked. A shared Android foundation first (an AAB pinned to
92
92
  API 36, one upload key, the AD_ID permission removed, one back handler), then 2–8 days per game; the