@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
@@ -4,9 +4,6 @@ Four of eight first submissions were rejected (guideline 2.1(b) twice, 2.3.3, 2.
4
4
 
5
5
  ## Tools
6
6
 
7
- - The studio's `com.joydle.core` (`fp:unity-game`, `references/studio-packages.md`):
8
- `IapService(catalog, grant)` with `Init()`, `Buy(id)`, `Restore(done)` and `Price(id)`;
9
- `Ads.CreateDefault(font)` and `Ads.Available`; `Telemetry` with `com.joydle.firebase` as its sink.
10
7
  - `npx @funpixel/tools store init --store ios` writes `store/answers.json` (listing, products, the
11
8
  SDK list, review notes); `npx @funpixel/tools store lint --store ios` checks lengths, price words and
12
9
  the privacy answers against the SDKs. App Store Connect (web or API) takes the listing.
@@ -31,13 +28,13 @@ Four of eight first submissions were rejected (guideline 2.1(b) twice, 2.3.3, 2.
31
28
 
32
29
  ## Procedure
33
30
 
34
- 1. Sell only what the binary holds (`iap_truth`). Every IAP id needs an App Store Connect product and an entry point, and copy names nothing unbuilt. Store copy promised modes that existed only as data, and a Supporter IAP had nothing to buy (guideline 3.1.1). No ad network is live, so hide No Ads (four such IAPs had to be held): while `Ads.Available` is false, every ad button is hidden. Put one purchase gate at the first line of `StartLevel`, and a store interface even when 1.0 sells nothing (report §12).
31
+ 1. Sell only what the binary holds (`iap_truth`). Every IAP id needs an App Store Connect product and an entry point, and copy names nothing unbuilt. Store copy promised modes that existed only as data, and a Supporter IAP had nothing to buy (guideline 3.1.1). No ad network is live, so hide No Ads (four such IAPs had to be held): while no ad network is available, every ad button is hidden. Put one purchase gate at the first line of `StartLevel`, and a store interface even when 1.0 sells nothing (report §12).
35
32
  2. Put Buy within two taps of the title on a fresh install (`iap_reach`): an Unlock row in Settings next to Restore, plus a title-screen entry. Name the path in the review notes.
36
- 3. Make Restore real (`restore_real`). It calls `RestoreTransactions` only from a tap, because a launch-time restore shows an Apple sign-in prompt, and it ends in "restored" or "nothing to restore". App Review always taps Restore; Scrap Riot's only fetched purchases and spun for 45 s.
37
- 4. Show prices only from `Price(id)`, the store's localised string. Failure text is plain; a cancel says nothing.
38
- 5. Grant a pending order exactly once (`iap_pending_once`). Unity IAP 5 routes pending orders to `OnPurchasePending`; the shared `IapService` granted them again from the fetch too, until the fix of 7 Oct (it now grants once per transaction). A game built before it needs a new build.
33
+ 3. Make Restore real (`restore_real`). It calls `RestoreTransactions` only from a tap, because a launch-time restore shows an Apple sign-in prompt, and it ends in "restored" or "nothing to restore". App Review always taps Restore; one game's only fetched purchases and spun for 45 s.
34
+ 4. Show prices only from the store's localised string. Failure text is plain; a cancel says nothing.
35
+ 5. Grant a pending order exactly once (`iap_pending_once`). Unity IAP 5 routes pending orders to `OnPurchasePending`; a shared purchase service granted them again from the fetch too, until the fix of 7 Oct (it now grants once per transaction). A game built before it needs a new build.
39
36
  6. Buy end to end before review. Products never load on the Simulator without a StoreKit configuration, and no game bought an IAP end to end before submitting; a person checks IAP and Restore on a device.
40
- 7. Derive App Privacy from the SDKs linked (`store lint`: declared ⊇ collected). With `com.joydle.firebase` the games declare Device ID, Coarse Location, Product Interaction and Crash Data, plus Purchase History where there is an IAP: not linked, no tracking, no tracking prompt (the package turns off the advertising identifier). A person enters them.
37
+ 7. Derive App Privacy from the SDKs linked (`store lint`: declared ⊇ collected). With Firebase Analytics and Crashlytics the games declare Device ID, Coarse Location, Product Interaction and Crash Data, plus Purchase History where there is an IAP: not linked, no tracking, no tracking prompt (with the advertising identifier turned off). A person enters them.
41
38
  8. Pick the icon small. 1024×1024 RGB, no alpha (check with `sips`); one big idea, judged at 60 and 40 px against competitors. Make candidates with `npx @funpixel/tools gen image "<the idea>" --size 1024x1024 --out design/icons/` (metered, after `npx @funpixel/tools login`; a generator's default may be 9:16); the pick goes to `Assets/_Game/Art/Icon/app_icon.png`.
42
39
  9. Compose 5–8 screenshots at 6.9": 1320×2868 portrait or 2868×1320 landscape, from real captures taken at game-state markers in the log. `store_shots` passes when sizes are exact, the real HUD is visible, no tutorial UI shows and each caption is true of its frame. How capture bursts are taken: not in the report.
43
40
  10. Validate any video before it is shared or uploaded. `recording_check`: 0 frame gaps over 34 ms, audio ≥ 44.1 kHz. `preview_validate`: 15–30 s, ≤ 30 fps, bt709 tags, square pixels, AAC ≤ 256 kb/s; after upload, `previewImage.width > 0`.
@@ -47,12 +44,12 @@ Rejections by guideline, what 1.0 sold and the ad plan: `purchases-and-review.md
47
44
 
48
45
  ## Worked example
49
46
 
50
- Pocket Crew's App Preview: 25 s, 1920×886, cuts about every 1.5 s. App Store Connect showed a red "!" on it twice. The causes were an sRGB colour tag where bt709 is required, non-square pixels, and audio at 263 kb/s against the 256 cap. Setting the poster time through the API then made the preview image 0×0. What held: validate with `ffprobe`, upload, read back `previewImage.width > 0`, leave the poster frame alone.
47
+ One game's App Preview: 25 s, 1920×886, cuts about every 1.5 s. App Store Connect showed a red "!" on it twice. The causes were an sRGB colour tag where bt709 is required, non-square pixels, and audio at 263 kb/s against the 256 cap. Setting the poster time through the API then made the preview image 0×0. What held: validate with `ffprobe`, upload, read back `previewImage.width > 0`, leave the poster frame alone.
51
48
 
52
49
  ## Common mistakes
53
50
 
54
- - Resubmitting fast instead of linting first: Dead Letter, Scrap Riot and Noodle Nights each went back to "Waiting for Review" for over a week.
55
- - Icons by prompt alone: Dawg Ball spent $21.46 over 7 rounds before a pick, round one at 720×1280 from the 9:16 default, no competitor benchmark until round 4. The Hot Gates' bake-off cost $5.95.
51
+ - Resubmitting fast instead of linting first: three games each went back to "Waiting for Review" for over a week.
52
+ - Icons by prompt alone: one game spent $21.46 over 7 rounds before a pick, round one at 720×1280 from the 9:16 default, no competitor benchmark until round 4. Another's bake-off cost $5.95.
56
53
  - A Restore label whose hit area covers the shop card: taps on products showed "Restoring purchases" in four games.
57
54
  - "Data Not Collected" left in the docs after Firebase shipped in all games.
58
- - A Simulator recording shown before it was measured: The Hot Gates' `simctl recordVideo` clip had 19 gaps up to 0.85 s and 24 kHz audio.
55
+ - A Simulator recording shown before it was measured: one game's `simctl recordVideo` clip had 19 gaps up to 0.85 s and 24 kHz audio.
@@ -1,20 +1,17 @@
1
1
  ---
2
2
  name: unity-game
3
- description: Use when making a game in Unity (new from the starter, a port of a web game, a clone of a sibling), measuring or improving its frame time, memory, battery, load time or size, or running several agents on Unity projects on one Mac. Covers the studio's packages, rules in C# tested outside the Editor, settings by script, launch flags, parity, player-side probes and Simulator leases.
3
+ description: Use when making a game in Unity (new from the starter, a port of a web game, a clone of a sibling), measuring or improving its frame time, memory, battery, load time or size, or running several agents on Unity projects on one Mac. Covers rules in C# tested outside the Editor, settings by script, launch flags, parity, player-side probes and Simulator leases.
4
4
  ---
5
5
 
6
6
  # Making a game in Unity
7
7
 
8
8
  Games rebuilt from web builds played end to end 2 hours after kickoff. What goes wrong is silent:
9
9
  all four first games reached TestFlight with no sound, cloned projects inherited a sibling's
10
- settings, and Simulator timings measured the host. This skill starts a game on the studio's
11
- packages when it uses them, makes the rest a failed check at scaffold, and routes the measuring and
12
- the shared Mac to their references.
10
+ settings, and Simulator timings measured the host. This skill makes each of these a failed check
11
+ at scaffold, and routes the measuring and the shared Mac to their references.
13
12
 
14
13
  ## Tools
15
14
 
16
- - The studio's packages, `com.joydle.core` and `com.joydle.firebase`, are optional (Floe Jam uses
17
- neither): adding them and what each settles, `references/studio-packages.md`.
18
15
  - `funtools gen <kind> "…" --unity .` (after `funtools login`): pictures, sounds, music and models
19
16
  into `Assets/_Game/Generated/` with import settings, metered; never a provider call with a `.env` key.
20
17
  - `funtools unity run -- -nographics -executeMethod Setup.Configure`: your editor script, queued
@@ -43,41 +40,38 @@ the shared Mac to their references.
43
40
  landscape), devices (a phone game: iPhone only for 1.0, oldest iPhone 11 at a locked
44
41
  60 fps), the business model (skill `fp:store`, `references/money.md`), a content
45
42
  minimum, which visual elements carry rules, and the name on the App Store. Targets: iOS
46
- first, Android (`BuildTools.Android`); WebGL without Firebase, whose C++ SDK has no web build
47
- (Floe Jam: `unity/build.sh webgl`); Mac and Windows by the game's own build methods (Knockout Lap).
48
- 3. Add what the game uses: the studio packages if any, Input System 1.20.0, uGUI 2.6.0, URP 17.6.0
49
- unless it stays built-in (Floe Jam), glTFast 6.20.0 for 3D ("latest" was an
43
+ first, Android; WebGL without Firebase, whose C++ SDK has no web build; Mac and Windows by the
44
+ game's own build methods.
45
+ 3. Add what the game uses: Input System 1.20.0, uGUI 2.6.0, URP 17.6.0
46
+ unless it stays built-in, glTFast 6.20.0 for 3D ("latest" was an
50
47
  experimental 7.0). Remove collab-proxy, learn and visual scripting. Import TMP Essential
51
48
  Resources.
52
49
  4. Lay out `Assets/_Game/` as `Scripts/Core`, `Scripts/Game`, `Editor`, `Tests/Editor` (or
53
50
  `Tests/EditMode`), `Art`, `Fonts`, `Scenes`, plus `design/`, `store/` and a README. The rules go
54
51
  in `Scripts/Core`, an asmdef with `noEngineReferences: true`; the rest stays in Assembly-CSharp
55
- (the monorepo games) or splits into Game, View and World asmdefs (Knockout Lap). Add `CoreTests~`
52
+ (the monorepo games) or splits into Game, View and World asmdefs. Add `CoreTests~`
56
53
  for `dotnet test` and un-ignore its project (`!**/CoreTests~/*.csproj`): the root `.gitignore`
57
- drops every `*.csproj`. Play Mode tests get an asmdef of their own (Floe Jam's `Tests/Play`).
54
+ drops every `*.csproj`. Play Mode tests get an asmdef of their own (`Tests/Play`).
58
55
  5. Generate the one scene from code: a camera and one `GameDriver` (input, sim, each event to every
59
- presenter once, render), so agents rebuild it headless and never conflict on a scene. `Sfx.Create(music)`
60
- adds the AudioListener a code-made camera lacks; hold `audio_runtime`: 1
56
+ presenter once, render), so agents rebuild it headless and never conflict on a scene. Add the
57
+ AudioListener a code-made camera lacks; hold `audio_runtime`: 1
61
58
  listener, 48 kHz, music within 3 s (of the splash's end, if one plays).
62
- 6. Set every setting in `Setup.Configure`: `ProjectConfig.ApplyIOS(name, bundleId, "1.0.0",
63
- landscape)` and `ApplyAndroid(bundleId)` with the package (else set what they set), then colour
59
+ 6. Set every setting in `Setup.Configure`: company name, bundle id, version, IL2CPP, a fixed
60
+ orientation, Unity splash off, the Android API levels and ARM64, then colour
64
61
  space, 48 kHz audio, render scale 1, ProMotion, accelerometer off, physics auto-simulation off with
65
- your own sim, and `ProjectSettings/JoydleLz4hc.txt` for LZ4HC. Build through it. Keep a per-game manifest
62
+ your own sim, and LZ4HC compression. Build through it. Keep a per-game manifest
66
63
  (orientation, bundle id, colour space, a unique productGUID, audio on, render scale) to diff against.
67
64
  7. Register the bundle id, the profile and (with Firebase) one Firebase project per game at scaffold; agents may,
68
65
  with approval (who does what: fp:store).
69
66
  8. Add dev-only launch flags for every screen and state, `-tour`, `-smoke` (plays to an ending, writes
70
- `smoke.txt`) and the probe (`unity probe install`), read through one wrapper over `LaunchArgs.Get()` that returns nothing
71
- unless `Debug.isDebugBuild` (on iOS the package does not gate them), with `Telemetry.Muted` set
67
+ `smoke.txt`) and the probe (`unity probe install`), read through one wrapper that returns nothing
68
+ unless `Debug.isDebugBuild`, with analytics muted
72
69
  while a flag is on. Keep flag names apart from save keys: `-coins` shadows the PlayerPrefs key
73
70
  `coins`. Judged frames: `references/traps.md`.
74
- 9. With the package, wire its pieces switched off: `IapService` with the catalog (Buy and Restore in
75
- Settings from the first build), `Ads.CreateDefault` (none in release), a `.storekit` file for Xcode runs.
76
- 10. Never make a splash or a "Funpixel presents" card. With a studio splash package (today Joydle
77
- Core's `JoydleSplash`), wire it on day one: the opt-in asset `Assets/_Game/Resources/JoydleSplashOn.txt`;
78
- it plays before the first scene holding the game's audio, skipped in the Editor and on any `-flag`
79
- (`-splash` forces it); title music waits on `JoydleSplash.Playing`; credits name that studio.
80
- 11. Plug content in through a registry, so parallel agents add files: Pocket Crew's branches
71
+ 9. Wire purchases and ads switched off: the catalog with Buy and Restore in
72
+ Settings from the first build, no ads in release, a `.storekit` file for Xcode runs.
73
+ 10. Never make a splash or a "Funpixel presents" card.
74
+ 11. Plug content in through a registry, so parallel agents add files: one game's branches
81
75
  without one cost 43 hand-resolved merge hunks.
82
76
  12. Give each agent its own worktree and Simulator; one Editor per project, closed by its
83
77
  opener (`references/agent-ops.md`).
@@ -94,17 +88,16 @@ Other day-one rules:
94
88
 
95
89
  ## Worked example
96
90
 
97
- Koi Out, a new 2D puzzle game (URP 2D, Linear, portrait):
91
+ A new 2D puzzle game (URP 2D, Linear, portrait):
98
92
  Playable on the Simulator in about 1.5 hours; 600 levels by reverse removal, solvable by
99
- construction, 29 tests. The first TestFlight on day 1 was silent (no AudioListener, fixed once in
100
- `Sfx`), and its `-setcoins` flag worked in release builds (no dev gate, step 8).
93
+ construction, 29 tests. The first TestFlight on day 1 was silent (no AudioListener), and its `-setcoins` flag worked in release builds (no dev gate, step 8).
101
94
 
102
95
  ## Common mistakes
103
96
 
104
- - Cloning a sibling: Dawg Ball and Pocket Crew launched in portrait, Dead Letter inherited
105
- `m_DisableAudio: 1`, and Particle Rush still carries The Hot Gates' `.gitattributes` paths.
106
- - URP `m_RenderScale: 0.8`: Dawg Ball drew soft.
107
- - Writing again what the packages give, or patching one game's copy.
108
- - Ungated debug flags: `-lgr-unlocked` granted paid floors in Scrap Riot's release build.
109
- - Rebuilding a web game from its design doc instead of its shipped code: Scrap Riot's improvised
97
+ - Cloning a sibling: two games launched in portrait, one inherited
98
+ `m_DisableAudio: 1`, and one still carries a sibling's `.gitattributes` paths.
99
+ - URP `m_RenderScale: 0.8`: one game drew soft.
100
+ - Patching one game's copy of shared code instead of the shared package.
101
+ - Ungated debug flags: an unlock flag granted paid floors in one game's release build.
102
+ - Rebuilding a web game from its design doc instead of its shipped code: one port's improvised
110
103
  fixes were torn out (`references/from-a-web-game.md`).
@@ -1,6 +1,6 @@
1
1
  # Several agents on one Mac
2
2
 
3
- Unity allows one Editor per project and every game here was built on one Mac with no CI, so parallel agents share a lock, the Simulators and the host's load. When they also shared a Simulator or scratch folder, runs were invalidated. When liveness meant "the process exists", a performance agent on The Hot Gates sat idle about 8 hours overnight. This skill gives each agent its own resources and makes progress measurable.
3
+ Unity allows one Editor per project and every game here was built on one Mac with no CI, so parallel agents share a lock, the Simulators and the host's load. When they also shared a Simulator or scratch folder, runs were invalidated. When liveness meant "the process exists", a performance agent on one game sat idle about 8 hours overnight. This skill gives each agent its own resources and makes progress measurable.
4
4
 
5
5
  ## Tools
6
6
 
@@ -26,29 +26,29 @@ build: `handing-off.md`.
26
26
 
27
27
  1. Claim four things before the first build: a worktree, a leased Simulator, a remote-play port and a scratch folder. `sim_isolation` passes when the Simulator id, port and folder are unique per agent.
28
28
  2. Send every batch run through `funtools unity run`, and run the engine-free tests between them. One batch run (1–2 min) per project serialised parallel agents, and a half-written file broke other agents' compiles until each had its own build folder.
29
- 3. One Editor per project, opened by the agent that needs it (`--open`, with the bridge) and closed by it (`funtools unity editor close`), never by another. With none open, batch through the queue. MCP for Unity got 0 calls in 29 sessions under a no-Editor rule: no `.mcp.json`, `settings.local.json` disables it, only Koi Out lists `com.coplaydev.unity-mcp` (unpinned, `#main`).
29
+ 3. One Editor per project, opened by the agent that needs it (`--open`, with the bridge) and closed by it (`funtools unity editor close`), never by another. With none open, batch through the queue. MCP for Unity got 0 calls in 29 sessions under a no-Editor rule: no `.mcp.json`, `settings.local.json` disables it, only one game lists `com.coplaydev.unity-mcp` (unpinned, `#main`).
30
30
  4. Run anything over a minute in the background. Background agents stalled on the 600 s stream watchdog during foreground Unity and Xcode steps. Read the whole output; `| tail` hid a failing compile check and a commit went through.
31
31
  5. Judge a running agent by progress (`agent_liveness`): files under the game changed in the last 30 minutes, or a Unity or `xcodebuild` process at work.
32
32
  6. Expect host load to change results. Parallel sessions caused a Burst timeout in one export and slowed another session's 363-test suite from 10–15 to about 27 minutes, so read export logs before trusting a build made under load.
33
33
  7. Stage by path. A broad commit glob staged another session's 18 files. Keep `git stash pop` and pattern `pkill` out of agent scripts; both hit work that was not the agent's (see Common mistakes).
34
34
  8. Commit and push as work lands, and keep nothing in scratch or /tmp. `lfs_audit` passes at 0 tracked binaries over 500 KB outside LFS, 0 untracked paid art and 0 unpushed LFS objects; about 840 MB of paid generations lived on one Mac.
35
35
  9. Publish status at milestones, merged, with the session id on every entry: a network drop killed three sessions and nobody knew which was which. The owner asked "where we are? what's left? how long?" every 20–60 minutes in long sessions; answer from a tracker updated by tools (step, status, who, clock time), not memory.
36
- 10. Sync before saying it is synced. The owner asked "did you sync to remote?" on Dawg Ball, The Hot Gates and Scrap Riot. Push after green checks, rewrite status sections from repo state, and run a docs-freshness check at the end of each task.
36
+ 10. Sync before saying it is synced. The owner asked "did you sync to remote?" on three games. Push after green checks, rewrite status sections from repo state, and run a docs-freshness check at the end of each task.
37
37
  11. Show nothing unverified: `ffprobe` gaps = 0 before sharing a video, and read a published page back. After a change, show the real draw path with the real HUD at full resolution, the player log's exception count, before and after numbers, and the all-screens sheet for UI work; never the Scene view.
38
- 12. After each change, sweep for leftovers: a workaround, a dead flag, a comment that says `(was …`, a date or "the owner". The owner on Dawg Ball: "no workarounds, remove all leftovers". Never delete an "unused" asset unasked: an agent deleted 20 files the game loads by name.
39
- 13. End a report with at most 3 numbered decisions, each with options, a default, and a picture when it is visual. The owner on Dawg Ball: "What actually you're asking me now?"
38
+ 12. After each change, sweep for leftovers: a workaround, a dead flag, a comment that says `(was …`, a date or "the owner". The owner: "no workarounds, remove all leftovers". Never delete an "unused" asset unasked: an agent deleted 20 files the game loads by name.
39
+ 13. End a report with at most 3 numbered decisions, each with options, a default, and a picture when it is visual. The owner: "What actually you're asking me now?"
40
40
  14. At hand-back, stop what you started (`agent_hygiene`): `funtools sim release` each lease, then your Unity batch processes, child processes and monitors, and only your own. Never quit Simulator.app or run `xcrun simctl shutdown all`.
41
41
 
42
42
  ## Worked example
43
43
 
44
- The Hot Gates performance pass, overnight. The agent stalled twice on the stream watchdog and then sat about 8 hours idle; its login had expired. The heartbeat only checked that the agent existed. The probe that would have caught it is `find -mmin -30` under the game folder plus `pgrep Unity|xcodebuild`: no changed file and no build process for 30 minutes means stalled.
44
+ One game's performance pass, overnight. The agent stalled twice on the stream watchdog and then sat about 8 hours idle; its login had expired. The heartbeat only checked that the agent existed. The probe that would have caught it is `find -mmin -30` under the game folder plus `pgrep Unity|xcodebuild`: no changed file and no build process for 30 minutes means stalled.
45
45
 
46
46
  ## Common mistakes
47
47
 
48
- - Sharing a Simulator or scratch folder (Scrap Riot, Pocket Crew): invalidated runs, a tap in another agent's app, an install that killed the coordinator's remote-play session; quitting Simulator.app or `shutdown all` killed other agents' runs three times (Knockout Lap).
48
+ - Sharing a Simulator or scratch folder: invalidated runs, a tap in another agent's app, an install that killed the coordinator's remote-play session; quitting Simulator.app or `shutdown all` killed other agents' runs three times.
49
49
  - A repo-wide status Stop hook (studio-wide): it forced a publish on every turn, fired on other sessions' files, hit the 200/day publish cap; the agent could not edit its own settings.
50
- - `git stash pop` in a script (Dead Letter seam fix, 30 Sep): an unquoted zsh `$FILES` stashed nothing, and the pop applied and dropped a stash that was not the agent's.
50
+ - `git stash pop` in a script (a seam fix, 30 Sep): an unquoted zsh `$FILES` stashed nothing, and the pop applied and dropped a stash that was not the agent's.
51
51
  - `pkill -f` by pattern (Atlas session, 4 Oct): it killed other agents' runs.
52
- - Uncommitted work: The Hot Gates port lived 11+ hours uncommitted, and 79 files of a size pass were nearly lost.
52
+ - Uncommitted work: one port lived 11+ hours uncommitted, and 79 files of a size pass were nearly lost.
53
53
  - Infrastructure in /tmp: a restart wiped a Caddy config and build 22 shipped pointing at a dead tunnel.
54
54
  - Simulators left running: 5 at about 200% CPU, and a stale app ran 8.8 hours.
@@ -5,36 +5,36 @@ From the Unity field report, sections 3 (lighting and materials), 6 (post-proces
5
5
 
6
6
  ## Fixes, before and after
7
7
 
8
- | Fix | Before → after | Game |
9
- |---|---|---|
10
- | Split GLBs, ASTC for model textures | data 315 → 61 MB (app 386 → 106 MB with the size settings) | Noodle Nights |
11
- | Size settings (stripping High, engine stripping, IL2CPP OptimizeSize) | engine 66–69 → 40–42 MB | all |
12
- | LZ4HC player data (about 25 minutes of work) | 126 → 94 MB installed | The Hot Gates |
13
- | Shaders, pipeline states and the Vase grab warmed on the first frames | worst frame of the tide 249 → 18.6 ms | The Hot Gates |
14
- | A throwaway run prewarmed behind the title | Play tap 87 → 1.9 ms | The Hot Gates |
15
- | Glyph warm-up | 183–266 ms (Dawg Ball), 50–270 ms (Pocket Crew) → 17–20 ms first use | Dawg Ball, Pocket Crew |
16
- | No world drawn behind opaque menus; menus at 30 fps | 759 M → 0 3D px/s; CPU 94 → 32 ms/s; GC 52 → 2.4 KB/s | Dawg Ball |
17
- | A blur that stopped re-rendering the world (it did 20 times a second) | about a third of all draws gone | Pocket Crew |
18
- | Instanced sets culled, cheap shadow proxies, far LODs | World 1 376–448k → 116–224k triangles | Pocket Crew |
19
- | The next level built while a menu is up; every level warmed | 82–99 ms (and 398 ms) → under 34 ms | Pocket Crew |
20
- | A quality governor that judges the median of 90 frames, not the mean | one hitch no longer drops a resolution rung | The Hot Gates |
8
+ | Fix | Before → after |
9
+ |---|---|
10
+ | Split GLBs, ASTC for model textures | data 315 → 61 MB (app 386 → 106 MB with the size settings) |
11
+ | Size settings (stripping High, engine stripping, IL2CPP OptimizeSize, every game) | engine 66–69 → 40–42 MB |
12
+ | LZ4HC player data (about 25 minutes of work) | 126 → 94 MB installed |
13
+ | Shaders, pipeline states and the Vase grab warmed on the first frames | worst frame of the tide 249 → 18.6 ms |
14
+ | A throwaway run prewarmed behind the title | Play tap 87 → 1.9 ms |
15
+ | Glyph warm-up | 183–266 ms (one game), 50–270 ms (another) → 17–20 ms first use |
16
+ | No world drawn behind opaque menus; menus at 30 fps | 759 M → 0 3D px/s; CPU 94 → 32 ms/s; GC 52 → 2.4 KB/s |
17
+ | A blur that stopped re-rendering the world (it did 20 times a second) | about a third of all draws gone |
18
+ | Instanced sets culled, cheap shadow proxies, far LODs | World 1 376–448k → 116–224k triangles |
19
+ | The next level built while a menu is up; every level warmed | 82–99 ms (and 398 ms) → under 34 ms |
20
+ | A quality governor that judges the median of 90 frames, not the mean | one hitch no longer drops a resolution rung |
21
21
 
22
22
  ## The phone pipeline the games used
23
23
 
24
24
  - No light probes or lightmaps in any game; mostly unlit or emissive materials.
25
- - The Hot Gates' phone pipeline: no realtime shadows, MSAA 4×, HDR off, SRP Batcher on.
26
- Post-processing is off on The Hot Gates and Dawg Ball.
27
- - Noodle Nights keeps bloom and ACES tone mapping in a night volume: an emissive strength of 3.5 blew
25
+ - One game's phone pipeline: no realtime shadows, MSAA 4×, HDR off, SRP Batcher on.
26
+ Post-processing is off on it and on another.
27
+ - One game keeps bloom and ACES tone mapping in a night volume: an emissive strength of 3.5 blew
28
28
  the bloom out (down to 2.2), and the HDR glow washed out the price text.
29
- - Scrap Riot's URP bloom and depth-of-field shaders were found stripped from its builds: check a
29
+ - One game's URP bloom and depth-of-field shaders were found stripped from its builds: check a
30
30
  post effect in the player build, not the Editor.
31
- - Pocket Crew carries three.js's physical shading over in HLSL with quality tiers that drop shadows and
31
+ - One port carries three.js's physical shading over in HLSL with quality tiers that drop shadows and
32
32
  render scale on a hot or Low Power phone. Shed load through render scale, never MSAA (step 7).
33
33
  - No millisecond cost of any post effect was measured on a device.
34
34
 
35
35
  ## Load
36
36
 
37
- Boot to title 0.32 s (The Hot Gates); title interactive in 0.22 s and floor 1 playable 3.0 s after
38
- launch (Scrap Riot). About 14 MB of textures still load synchronously at boot in Scrap Riot, which
39
- uses no Addressables (Gallery Heist's views branch loads each room through them). A lobby frame of 50 ms went once each screen's textures were preloaded
37
+ Boot to title 0.32 s (one game); title interactive in 0.22 s and floor 1 playable 3.0 s after
38
+ launch (another). About 14 MB of textures still load synchronously at boot in the second, which
39
+ uses no Addressables (a third game's views branch loads each room through them). A lobby frame of 50 ms went once each screen's textures were preloaded
40
40
  while loading. Memory measured 117–174 MB in use; there is no memory budget yet.
@@ -1,9 +1,9 @@
1
1
  # A Unity game from a web game
2
2
 
3
3
  Five of the nine Unity games started as Funpixel web games (Pixi or three.js) and were rebuilt in
4
- Unity. That rebuild is hours of work when it has a fixed contract. The Hot Gates and Pocket Crew
4
+ Unity. That rebuild is hours of work when it has a fixed contract. Two of them
5
5
  each had a bit-exact C# core checked against golden traces recorded from the web sim, and both
6
- played end to end on the Simulator about 2 hours after kickoff. Scrap Riot had a moving spec: it
6
+ played end to end on the Simulator about 2 hours after kickoff. A third had a moving spec: it
7
7
  logged 85 entries in its iOS phase, agents built seven fixes from one-line descriptions, and their
8
8
  versions were torn out when the web game's author shipped different code. This page keeps the
9
9
  rebuild on the contract: shipped web code, goldens and `parity.md`. Field report sections 0, 1, 2
@@ -35,13 +35,13 @@ and 10, and its dead ends.
35
35
  the web sim under node, and capture reference frames of the web game at phone sizes. The
36
36
  project adds `design/web-ref` and `parity.md`.
37
37
  2. Fix the content minimum before the rebuild. The owner asked for "at least 5 different levels":
38
- Dead Letter grew from 1 letter to 5 in about 7 hours, Pocket Crew from 4 levels to 26.
38
+ one game grew from 1 letter to 5 in about 7 hours, another from 4 levels to 26.
39
39
  3. Fix colour space on day one to match the source renderer. Pixi and three.js without a linear
40
- composer blend in gamma: Dead Letter, Scrap Riot, Hot Gates and Dawg Ball are Gamma. Pocket
41
- Crew, whose web build used a linear composer, stays Linear.
40
+ composer blend in gamma: four of the ports are Gamma. The one whose web build used a linear
41
+ composer stays Linear.
42
42
  4. Rebuild the Core first, in an asmdef with `noEngineReferences: true`. Copy web numbers verbatim
43
- into `Scripts/Core/Config.cs`, carry every web test over 1:1 to NUnit (Scrap Riot 98 of 98
44
- cases), and load the web's level JSON from `Resources/Data`. Dead Letter's core had 229 tests
43
+ into `Scripts/Core/Config.cs`, carry every web test over 1:1 to NUnit (one port: 98 of 98
44
+ cases), and load the web's level JSON from `Resources/Data`. One port's core had 229 tests
45
45
  about 50 minutes after kickoff.
46
46
  5. Apply the determinism kit while writing it, because C# and V8 disagree silently:
47
47
 
@@ -58,7 +58,7 @@ and 10, and its dead ends.
58
58
  `DateTime.Now` outside the shims; until it exists, search for them.
59
59
  6. Replay the goldens. Pass is 0 diffs at zero tolerance, and the same hash under IL2CPP. Where the
60
60
  web's own math is not reproducible, bit-exact is not the rule: V8's libm (fdlibm `sin`, `log10`) is
61
- compiled with fused multiply-adds on arm64, which C# cannot match bit for bit. Particle Rush (Oct 2026)
61
+ compiled with fused multiply-adds on arm64, which C# cannot match bit for bit. One port (Oct 2026)
62
62
  compares at a relative tolerance of 1e-9 with identical events, frames and results (80 runs), and
63
63
  records it as a `parity.md` row.
64
64
  7. Record every deviation as a `parity.md` row and a default-off `Rules` flag, then check that
@@ -68,10 +68,10 @@ and 10, and its dead ends.
68
68
 
69
69
  | Reuse | What |
70
70
  |---|---|
71
- | As it is | sim rules, tests, tuning, level JSON (Pocket Crew: 1,515 numbers bit-identical), save formats (33 Scrap Riot fixtures loaded byte-identical), sprite art, audio clips, key art |
71
+ | As it is | sim rules, tests, tuning, level JSON (one port: 1,515 numbers bit-identical), save formats (33 fixtures of one port loaded byte-identical), sprite art, audio clips, key art |
72
72
  | After conversion | WebP to PNG; WOFF2 to TTF with full fonts; meshopt and WebP GLBs decoded; loops rebuilt as OGG at exact sample counts; Web Audio synths re-rendered offline in C# |
73
73
  | Redo | every view, HUD and menu (UGUI in code), input, haptics, app lifecycle, shaders, store art, icon, the IAP and economy layer |
74
- | No path yet | online play: the kit's relay client is the JavaScript SDK (`fp:game-spine`), with no C# client. The one online Unity game, Dawg Ball (branch `dawg-ball/online`), vendors LiteNetLib with its own `Server~` and `Api~` matchmaker |
74
+ | No path yet | online play: the kit's relay client is the JavaScript SDK (`fp:game-spine`), with no C# client. The one online Unity game vendors LiteNetLib with its own `Server~` and `Api~` matchmaker |
75
75
 
76
76
  9. Build the views in parallel behind the written APIs. One frame owner, `GameDriver`, runs
77
77
  input, `sim.Update(dt)`, each `SimEvent` to every presenter, then `Render(alpha)`, so every
@@ -82,7 +82,7 @@ and 10, and its dead ends.
82
82
 
83
83
  ## Worked example
84
84
 
85
- The Hot Gates, from three.js (about 20,000 lines) to URP 3D, Gamma, portrait:
85
+ A port from three.js (about 20,000 lines) to URP 3D, Gamma, portrait:
86
86
  1. A bit-exact core checked against goldens: seed 1 ended on the web's hash 1936916133.
87
87
  2. 358 core tests run with `dotnet test`.
88
88
  3. The web's 41 procedural audio cues were re-rendered offline in C#, correlation 0.999998
@@ -92,17 +92,17 @@ The Hot Gates, from three.js (about 20,000 lines) to URP 3D, Gamma, portrait:
92
92
 
93
93
  ## Common mistakes
94
94
 
95
- - Improvising fixes: Scrap Riot's agents built 8 props, a chain shockwave, a countdown, a
95
+ - Improvising fixes: one port's agents built 8 props, a chain shockwave, a countdown, a
96
96
  recolour and a 4 s PA delay that were torn out, and 3 of 6 earlier fixes were never re-audited
97
97
  and still differed from the web.
98
98
  - `Math.Round` in the Core: banker's rounding drew 2 sparks where the web drew 3 (game not in the
99
99
  report).
100
- - Tidying art that encodes a rule: an agent "cleaned up" Dawg Ball's goal sill, which held the
100
+ - Tidying art that encodes a rule: an agent "cleaned up" one game's goal sill, which held the
101
101
  balance up.
102
- - Linear colour space on a Pixi game: overlays about 2× too strong in Dead Letter until it
102
+ - Linear colour space on a Pixi game: overlays about 2× too strong in one game until it
103
103
  switched to Gamma.
104
104
  - Web MP3s as loops: they ran 1,245–1,997 samples long.
105
- - Importing a web GLB undecoded: glTFast imports it as nothing with no error; Dawg Ball's 12
105
+ - Importing a web GLB undecoded: glTFast imports it as nothing with no error; one game's 12
106
106
  heads "did not import at all".
107
- - A UI with its own catch-up loop: Dead Letter's seal pick never reached audio or FX.
108
- - An ignored `.csproj`: Dead Letter's tests could not run from a fresh clone.
107
+ - A UI with its own catch-up loop: One game's seal pick never reached audio or FX.
108
+ - An ignored `.csproj`: One game's tests could not run from a fresh clone.
@@ -18,8 +18,8 @@ From the Unity field report, section 14 (agents making Unity games) and the owne
18
18
  On what looks fine in its own captures: no sound (captures are silent), settings inherited from a
19
19
  cloned project, UI that overflows only at the owner's phone shape, keyboard wording, a level that
20
20
  breaks only when reached from the one before, and art that passes every gameplay gate while looking
21
- like grey blockout (Pocket Crew's Worlds 3 and 4). Then on taste: it adds decoration the owner
22
- removes (5 reverts in 24 hours on Dawg Ball) and grades its own art favourably. The answer to both is
21
+ like grey blockout (one game's Worlds 3 and 4). Then on taste: it adds decoration the owner
22
+ removes (5 reverts in 24 hours on one game) and grades its own art favourably. The answer to both is
23
23
  evidence a person can judge: the real frame at full size against the target and the competitors.
24
24
 
25
25
  ## What the owner asked for again and again
@@ -28,7 +28,7 @@ evidence a person can judge: the real frame at full size against the target and
28
28
  |---|---|
29
29
  | "where we are? what's left? how long?" | a tracker updated by tools (step, status, who, clock time), with the session id on every entry |
30
30
  | "did you sync to remote?" | push after green checks; rewrite status sections from repo state; a docs-freshness check at the end of each task |
31
- | "add joydle splash to dawg ball as we did for other games" | carry every studio standard from the start (the studio's packages, `fp:unity-game`) and check parity with the sibling games: splash, store fields, Restore placement |
31
+ | "…as we did for other games" | carry every studio standard from the start and check parity with the sibling games: store fields, Restore placement |
32
32
  | "no workarounds, remove all leftovers" | a leftover sweep and a comment lint after each change |
33
33
  | "What actually you're asking me now?" | a report that ends with at most 3 numbered decisions, each with options, a default and a picture when it is visual |
34
34
  | "go do it by yourself" (website, Firebase) | the list of what an agent may do (bundle id, profile, Firebase, an upload with approval) against what only a person does (app record, App Privacy, agreements, the first purchase tick, Submit) |
@@ -36,7 +36,7 @@ evidence a person can judge: the real frame at full size against the target and
36
36
  ## What earns trust in a build an agent made
37
37
 
38
38
  The checks green, the launch with no flags clean, the smoke run reaching an ending on a stripped
39
- build, the archive pre-flight passed, and the owner's own 15-minute session on a phone. Pocket Crew's
39
+ build, the archive pre-flight passed, and the owner's own 15-minute session on a phone. One game's
40
40
  build 1 was "mostly liked" and still unshippable: a production gate (fresh install, every level
41
41
  through the real flows, 7 kill-and-relaunch cycles, every setting persisted) found 4 more bugs behind
42
42
  1,377 green tests. A hand-off with a dirty worktree is refused: commit by path first.
@@ -4,10 +4,6 @@ This skill turns a performance worry into a number measured in the player, befor
4
4
 
5
5
  ## Tools
6
6
 
7
- - The studio's `com.joydle.core` (`fp:unity-game`, `studio-packages.md`): every
8
- `BuildTools` build applies the size settings (stripping High, engine stripping, IL2CPP OptimizeSize);
9
- `ProjectSettings/JoydleLz4hc.txt` turns on LZ4HC; `JoydleSplash` holds on black until the first
10
- scene has loaded and 10 smooth frames pass.
11
7
  - `npx @funpixel/tools unity probe --target mac|sim --path path.json`: the kit's in-player probe
12
8
  (`com.funpixel.probe`, added by `unity probe install`; development builds only). It builds or reuses
13
9
  the player through the Unity queue, plays the path, reads `ProfilerRecorder` per frame (frame, main,
@@ -29,10 +25,10 @@ This skill turns a performance worry into a number measured in the player, befor
29
25
  | Frame rate | 60 fps locked on iPhone 11 (A13); 120 Hz on ProMotion only when cool; menus 30 fps | |
30
26
  | Frames | first entry to a screen or level under 34 ms; none over 20 ms after warm-up; p99 at most 17.5 ms | `unity probe` |
31
27
  | GC | 0 B per warm sim step or quiet frame | `alloc_quiet` |
32
- | Draws, triangles | 120 and 250k per view (Pocket Crew, a 3D platformer) | |
28
+ | Draws, triangles | 120 and 250k per view (a 3D platformer) | |
33
29
  | Behind a full-screen menu | 0 world cameras or passes; 1 pass in play | `invisible_work` |
34
30
  | Look | `RenderSettings` and shared materials identical before and after each level and warm-up | `look_leak` |
35
- | Unpacked `.app` | 2D 80 MB, 3D 100 MB, engine 45 MB, at most 2 MiB unexplained growth per build (proposed; Dead Letter, 2D, is 133 MB) | `size_budget` |
31
+ | Unpacked `.app` | 2D 80 MB, 3D 100 MB, engine 45 MB, at most 2 MiB unexplained growth per build (proposed; one 2D game is 133 MB) | `size_budget` |
36
32
  | `Resources/` | 0 bytes of test-only or Editor-only files | `resources_hygiene` |
37
33
  | Memory | 117–174 MB was measured; a budget is not in the report | |
38
34
 
@@ -40,24 +36,24 @@ Per tier (phone, tablet, Mac): `unity probe --tier`, from `probe.md`.
40
36
 
41
37
  ## Procedure
42
38
 
43
- 1. Measure in a player build, with `unity probe`. Editor draws read 134–151 against 74–114 in the player. Under URP draws read 0 in some players (Particle Rush), so read SetPass calls too.
39
+ 1. Measure in a player build, with `unity probe`. Editor draws read 134–151 against 74–114 in the player. Under URP draws read 0 in some players, so read SetPass calls too.
44
40
  2. Attribute each slow frame before fixing it: game work, GC, the host Mac, or your own screenshot. A `ScreenCapture` costs 100–130 ms, and it and a Mac at load 36 were blamed on the game twice; game work in those frames was 0.4–0.7 ms. The probe reports hitches with their own work and skips 4 frames after each capture.
45
41
  3. Fix first-use stutters. Put every level id in the warm queue; warm glyphs, the first level's shaders (a ShaderVariantCollection, never `Shader.WarmupAllShaders`) and sounds behind the title; build the next level while a menu is up. Then run `look_leak`, since a warm-up can leave global state changed.
46
42
  4. Turn off invisible work: no world drawn behind opaque menus, and menus at 30 fps.
47
43
  5. Take allocations to 0 B. Use flat `struct` events in a reused list, no LINQ, closures or string building per frame, and rebuild text only on change. Measure in a release player, since 30–200 B per frame in the dev player is engine-side.
48
- 6. Load: hold the splash on black until the scene is loaded and 10 smooth frames pass (1 s minimum, 3 s cap; `JoydleSplash` does). Async-preload each screen's textures while loading, and prewarm a throwaway run behind the title: The Hot Gates' Play tap went from 87 to 1.9 ms.
49
- 7. Heat and battery: poll thermal state and Low Power Mode every 2 s. Hot or Low Power drops render scale from 0.83 to 0.66; critical caps matches at 30 fps; 120 Hz only when cool, falling back with a doubling back-off. Keep MSAA fixed, because changing it at runtime recompiled every pipeline state in Pocket Crew (a 1.5 s frame). Turn off Unity's own thermal frame-rate adjust: two controllers on one knob.
44
+ 6. Load: hold the splash on black until the scene is loaded and 10 smooth frames pass (1 s minimum, 3 s cap). Async-preload each screen's textures while loading, and prewarm a throwaway run behind the title: one game's Play tap went from 87 to 1.9 ms.
45
+ 7. Heat and battery: poll thermal state and Low Power Mode every 2 s. Hot or Low Power drops render scale from 0.83 to 0.66; critical caps matches at 30 fps; 120 Hz only when cool, falling back with a doubling back-off. Keep MSAA fixed, because changing it at runtime recompiled every pipeline state in one game (a 1.5 s frame). Turn off Unity's own thermal frame-rate adjust: two controllers on one knob.
50
46
  8. Size: measure the unpacked `.app` from the archive, with a delta against the last build. Apply the size settings (stripping High, engine stripping, IL2CPP OptimizeSize), then LZ4HC. Keep test files out of `Resources/`: the Unity test runner drops `PerformanceTestRun*.json` there, and it ships.
51
47
  9. Report every claim as before and after. The owner's direction ("ensure the performance is top") became `frame_budget` and `invisible_work` in every round.
52
48
  The fixes that gave the most, each with its before and after: `fixes.md`.
53
49
 
54
50
  ## Worked example
55
51
 
56
- The Hot Gates, the whole seed-7 run. Over 17,246 frames, frames over 34 ms went from 17 to 2 and the worst frame from 98.4 to 19.0 ms; p99 was 18.2 ms. Warming shaders, pipeline states and the Vase grab on the first frames took the worst frame of the "tide" (a moment the report does not define) from 249 to 18.6 ms. The last 48 ms hitch was a missing glyph, and the last allocation was a "+N" badge string; the game holds 0 B over 600 frames. The quality governor now judges the median of 90 frames, so one hitch no longer drops a resolution rung.
52
+ A port from three.js, the whole seed-7 run. Over 17,246 frames, frames over 34 ms went from 17 to 2 and the worst frame from 98.4 to 19.0 ms; p99 was 18.2 ms. Warming shaders, pipeline states and the Vase grab on the first frames took the worst frame of the "tide" (a moment the report does not define) from 249 to 18.6 ms. The last 48 ms hitch was a missing glyph, and the last allocation was a "+N" badge string; the game holds 0 B over 600 frames. The quality governor now judges the median of 90 frames, so one hitch no longer drops a resolution rung.
57
53
 
58
54
  ## Common mistakes
59
55
 
60
- - A short warm list. Pocket Crew warmed World 1 only, so World 2 started with a 398 ms hitch.
61
- - A warm-up that leaves global state changed. Pocket Crew's left fog and sky altered and every launch flashed violet for about 1 s; another kept references, so movers drew frozen.
62
- - Reading "Complete build size": in Hot Gates it was the Xcode project.
63
- - Test files in `Resources/`. Pocket Crew's release export carried about 1 MB of test reference meshes.
56
+ - A short warm list. One game warmed World 1 only, so World 2 started with a 398 ms hitch.
57
+ - A warm-up that leaves global state changed. One game's left fog and sky altered and every launch flashed violet for about 1 s; another kept references, so movers drew frozen.
58
+ - Reading "Complete build size": in one game it was the Xcode project.
59
+ - Test files in `Resources/`. One game's release export carried about 1 MB of test reference meshes.
@@ -1,10 +1,10 @@
1
1
  # Measuring the player: com.funpixel.probe and funtools unity probe
2
2
 
3
- Five games each wrote a probe of their own: Knockout Lap's `HitchProbe`, Particle Rush's `PerfProbe`, The Hot Gates' `PerfRecorder`, Pocket Crew's `PerfProbe` and `Hitch`, and Gallery Heist's. Pocket Crew also wrote a 661-line `RemotePlay.cs` for input over TCP. The kit now ships one package with both halves. Don't write another probe; give the package your game's facts instead.
3
+ Five games each wrote a probe of their own (`HitchProbe`, `PerfProbe`, `PerfRecorder`, `PerfProbe` and `Hitch`, and one more). One of them also wrote a 661-line `RemotePlay.cs` for input over TCP. The kit now ships one package with both halves. Don't write another probe; give the package your game's facts instead.
4
4
 
5
5
  ## Getting it into a project
6
6
 
7
- `npx @funpixel/tools unity probe install --project <dir>` adds one line to `Packages/manifest.json` and prints it. The line is a `file:` path to the kit's copy, relative to `Packages/`, the way the studio's games reference `com.joydle.core`. Pass `--git <url> --ref <tag>` for a pinned git URL; an unpinned one is refused. `--tests` also lists the package under `testables`; leave it off on a game whose test count is a baseline. `unity probe uninstall` takes the line out. Nothing is installed silently: `probe`, `play` and `capture` refuse a project without the line and say how to add it.
7
+ `npx @funpixel/tools unity probe install --project <dir>` adds one line to `Packages/manifest.json` and prints it. The line is a `file:` path to the kit's copy, relative to `Packages/`, the way a game references a local package. Pass `--git <url> --ref <tag>` for a pinned git URL; an unpinned one is refused. `--tests` also lists the package under `testables`; leave it off on a game whose test count is a baseline. `unity probe uninstall` takes the line out. Nothing is installed silently: `probe`, `play` and `capture` refuse a project without the line and say how to add it.
8
8
 
9
9
  What reaches a store build: nothing. The player assembly (`Funpixel.Probe.Player`) has define constraints `DEVELOPMENT_BUILD || UNITY_EDITOR || FUNPIXEL_PROBE` and `!FUNPIXEL_NO_PROBE`. The game calls `FunpixelProbe`, whose methods are `[Conditional]`, so in a release build the calls and their arguments are compiled away. `FUNPIXEL_PROBE` exists only for the capture build (below), and the package's build guard fails any build whose Player Settings carry it.
10
10
 
@@ -53,7 +53,7 @@ Left out, and counted: the first 30 frames of the path, every capture frame and
53
53
  | tablet | 17.5 ms | 20 ms | 34 ms | 160 | 200 | 400k | 256 B | 1536 MB |
54
54
  | mac | 17.5 ms | 20 ms | 34 ms | 400 | 400 | 4M | 256 B | 3072 MB |
55
55
 
56
- The frame numbers are `frame_budget`; draws and triangles are Pocket Crew's per view; SetPass and memory are Particle Rush's tiers. The GC line allows the 30–200 B a development player allocates in the engine. Judge 0 B (`alloc_quiet`) in a release player or in tests. A Mac target is judged as `mac`, and a Simulator as `phone` or `tablet` by its device name. `--tier` and `--budget '{"draws": 200}'` (or a file, one budget per tier) override this.
56
+ The frame numbers are `frame_budget`; draws and triangles are one game's per view; SetPass and memory are another's tiers. The GC line allows the 30–200 B a development player allocates in the engine. Judge 0 B (`alloc_quiet`) in a release player or in tests. A Mac target is judged as `mac`, and a Simulator as `phone` or `tablet` by its device name. `--tier` and `--budget '{"draws": 200}'` (or a file, one budget per tier) override this.
57
57
 
58
58
  Three states, as on the web: a number the player did not report is "not observed", never a pass. A run under 120 measured frames does not judge frame time.
59
59
 
@@ -68,7 +68,7 @@ A Simulator, or a Mac at load 36 or more, adds single long frames the game did n
68
68
  - `play key Space`, `play pad south` and `play act "stick 1 0 800"`;
69
69
  - `play state`, `play ui` (every pressable thing with its rect), `play views` and `play scene Level2`;
70
70
  - `play shot --out f.png`, upright at full resolution;
71
- - `play record --seconds 10`: frames plus a WAV of the game's own mix, through Unity's offline `AudioRenderer` after Floe Jam's `Recorder.cs`, joined into an MP4 when ffmpeg is there;
71
+ - `play record --seconds 10`: frames plus a WAV of the game's own mix, through Unity's offline `AudioRenderer` after one game's `Recorder.cs`, joined into an MP4 when ffmpeg is there;
72
72
  - `play end`.
73
73
 
74
74
  Input goes in as Input System device state (touch, mouse with `--mouse`, keyboard, pad), so it takes the path a finger takes.
@@ -8,7 +8,7 @@ now has one of each, shared by every session of this user on the Mac.
8
8
  ## Unity: `funtools unity run`
9
9
 
10
10
  ```
11
- funtools unity run -- -nographics -buildTarget iOS -executeMethod Joydle.Core.Editor.BuildTools.SimulatorDev
11
+ funtools unity run -- -nographics -buildTarget iOS -executeMethod Setup.BuildSimulator
12
12
  funtools unity run --project ../my-game -- -nographics -runTests -testPlatform EditMode -testResults results.xml
13
13
  funtools unity jobs
14
14
  ```
@@ -12,14 +12,14 @@ starts Unity, and prints each finding with its fix. One line per trap it catches
12
12
  - Git LFS pointer files where binaries belong (FSBTool "Failed decoding audio clip", blank textures): fails, names the repository to pull in.
13
13
  - `activeInputHandler: 0`, the old Input Manager alone, on an iOS or Android project (no touch in a player build): fails.
14
14
  - `UnityEngine.Input` calls on a project set to the Input System only (each throws): fails.
15
- - The Input System hooked at `AfterAssembliesLoaded` (throws on iOS; `BackButton` hooks on first read): warns.
15
+ - The Input System hooked at `AfterAssembliesLoaded` (throws on iOS; hook on first read): warns.
16
16
  - TextMesh Pro used with no Essential Resources (`CreateFontAsset` returns null): fails; a batch-mode ImportPackage of them (hangs): warns.
17
- - A camera in a scene or made in code with nothing adding an AudioListener (a silent build; `Sfx.EnsureListener()`): warns.
17
+ - A camera in a scene or made in code with nothing adding an AudioListener (a silent build): warns.
18
18
  - `Shader.WarmupAllShaders` (segfaults with URP keyword spaces; warm a ShaderVariantCollection): fails on URP.
19
19
  - A GLB glTFast cannot decode (meshopt, Draco or Basis without its decoder package, WebP ever): fails, because it imports as nothing.
20
20
  - `Shader.Find` of a project shader nothing references (null in a build): warns.
21
21
  - `enableWordWrapping`, a bare `new RenderParams{}`, runtime `QualitySettings.antiAliasing`, `-quit` with `-runTests`: warn.
22
- - ProjectSettings drifted from the project's setup method (Knockout Lap's iOS graphics APIs went back to automatic three times): warns; build through `Setup.Configure`.
22
+ - ProjectSettings drifted from the project's setup method (one game's iOS graphics APIs went back to automatic three times): warns; build through `Setup.Configure`.
23
23
  - A build module a target needs (Mac IL2CPP and Windows were missing): warns with the Unity Hub line.
24
24
  - No distribution certificate, Xcode account or App Store Connect key on an iOS project (each blocks TestFlight): warns.
25
25
 
@@ -29,31 +29,30 @@ starts Unity, and prints each finding with its fix. One line per trap it catches
29
29
  says nothing about it (`fp:art`, Unity page).
30
30
  - glTFast decodes textures embedded in a GLB to RGBA32; its "latest" tag pointed at an experimental
31
31
  7.0, so pin 6.20 (`fp:3d`, Unity page).
32
- - `UnityRuntime.framework`'s plist says iOS 15.0 and its binary 16.0: ITMS-90208 (`IosPostprocess`).
32
+ - `UnityRuntime.framework`'s plist says iOS 15.0 and its binary 16.0: ITMS-90208: stamp each embedded framework's minimum OS with the app's in a post-process step.
33
33
  - High stripping removes an assembly reached only through `RuntimeInitializeOnLoadMethod`, and Unity
34
- ignores a package's own `link.xml` (`com.joydle.firebase` hands its file to the linker).
34
+ ignores a package's own `link.xml` (hand that file to the linker yourself).
35
35
  - TMP outline and underlay variants of materials made at runtime are stripped, and so are
36
36
  `shader_feature` variants: use `multi_compile_local`.
37
37
  - TMP lives in uGUI 2.x, not a package of its own; its Essential Resources still go in `Assets/TextMesh Pro`.
38
38
  - Burst can time out under heavy host load; never ship that export.
39
39
  - Re-importing an atlas regenerates sprite ids, and a PNG of a new size keeps the old sprite rect, so
40
40
  Unity drops the sprite.
41
- - iOS caches launch storyboards by name across updates: rename the storyboard (`JoydleLaunch`).
41
+ - iOS caches launch storyboards by name across updates: rename the storyboard.
42
42
  - A project can be URP with `GraphicsSettings` saying none: the monorepo games assign the URP asset only
43
- in `QualitySettings` (`m_CustomRenderPipeline: {fileID: 0}`), while Knockout Lap, Gallery Heist and
44
- Particle Rush set it in `GraphicsSettings`. Read both before calling a project built-in; Floe Jam is
45
- the one that is.
43
+ in `QualitySettings` (`m_CustomRenderPipeline: {fileID: 0}`), while others set it in
44
+ `GraphicsSettings`. Read both before calling a project built-in.
46
45
  - A WebGL build compressed with Brotli fails on a phone over the Mac's LAN address
47
46
  (`ERR_CONTENT_DECODING_FAILED`: Brotli needs https or localhost): serve it with `funtools serve`,
48
47
  which falls back to gzip there.
49
48
  - Addressables bundles built uncompressed (for a CDN to Brotli) weigh about twice as much from a
50
- server that sends them raw (Gallery Heist's Room 1: 99.7 MB against 47.3 MB). `funtools serve`
49
+ server that sends them raw (one game's Room 1: 99.7 MB against 47.3 MB). `funtools serve`
51
50
  compresses them on the fly as a CDN would, so its sizes and load times are what a player gets;
52
51
  `--no-compress` shows the raw weight.
53
52
 
54
53
  ## Runtime
55
54
 
56
- - Mono never sees `simctl launch` arguments: read them natively (`LaunchArgs.Get()`).
55
+ - Mono never sees `simctl launch` arguments: read them natively.
57
56
  - PlayerPrefs reads the launch-argument domain first: a flag `-coins` shadows the save key `coins`.
58
57
  - A Unity API call in a field initializer throws: move it to `Start`.
59
58
  - `OnApplicationPause(true)` also fires on resign-active (Control Center, Siri, call banners, Face ID).
@@ -64,7 +63,7 @@ starts Unity, and prints each finding with its fix. One line per trap it catches
64
63
  - `Screen.cutouts` allocates on every call: read it when the screen changes.
65
64
  - `preserveAspect` fits around the pivot; a `Slider` stretches to the row height; stretch anchors
66
65
  plus a non-zero `sizeDelta` double the width.
67
- - The first scene load can eat about 1 s of a startup animation (`JoydleSplash` waits for it).
66
+ - The first scene load can eat about 1 s of a startup animation (wait for it before one starts).
68
67
  - Unity 6 renamed the draw-call profiler counter, so an old probe reads 0.
69
68
  - C# `Math.Round` is banker's rounding, `List.Sort` is unstable, `Math.Sin` differs from V8 on about
70
69
  6% of inputs and a naive hypot on about 40% (`references/from-a-web-game.md`).
@@ -75,7 +74,7 @@ starts Unity, and prints each finding with its fix. One line per trap it catches
75
74
  - `Object.Destroy` does nothing in edit-mode captures: use `DestroyImmediate`.
76
75
  - `CaptureScreenshotIntoRenderTexture` is upside down on Metal, and `ScreenCapture` stalls the next
77
76
  frames.
78
- - Frames a judge scores come from a capture rig, not the Editor (Particle Rush, Oct 2026):
77
+ - Frames a judge scores come from a capture rig, not the Editor (Oct 2026):
79
78
  - a player build with a scripting define that turns the launch flags on and is not a development
80
79
  build, because a development build stamps its watermark and console into every frame;
81
80
  - `-shotscale 2` (passed to `ScreenCapture.CaptureScreenshot`'s supersize) for a full-resolution phone
@@ -97,7 +96,7 @@ starts Unity, and prints each finding with its fix. One line per trap it catches
97
96
  - TMP dynamic font assets are rewritten by every batch run and conflict on every merge: keep shipped
98
97
  fonts static, or clear them after captures.
99
98
  - The root `.gitignore`'s `*.csproj` silently drops hand-written test and server projects.
100
- - A copied project keeps its source's identity: Particle Rush's `.gitattributes` names The Hot Gates'
99
+ - A copied project keeps its source's identity: one game's `.gitattributes` names its source's
101
100
  paths, its Android id is still Unity's template `com.UnityTechnologies…urpblank`, and standalone ids
102
101
  are left as `com.DefaultCompany.2D-URP`. Check the ids and `.gitattributes` against the game's name.
103
102