@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
@@ -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, `funpixel-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` (`funpixel-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 (`funpixel-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 (`funpixel-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
 
@@ -39,7 +39,7 @@ the skeptic."). Each seat scores the same seven axes and overall; the persona de
39
39
  **Blind** means each seat gets what the calibrated panel gets: the frames, a store description, the
40
40
  five AD rules, the screen audit's numbers and its own previous verdict, and nothing else: no design
41
41
  note, no target frame, no verify summary, no builder's explanation, no other seat's scores, no code.
42
- On the same Lanternfall frames, seats briefed with the note and the builder's summary scored 7.10 where
42
+ On the same frames of one game, seats briefed with the note and the builder's summary scored 7.10 where
43
43
  blind seats scored 6.90 (Sonnet, one panel each), and the whole in-loop panel ran 0.6 above the
44
44
  calibrated anchored one, which also saw the payoff frame.
45
45
 
@@ -1,7 +1,7 @@
1
1
  # Plan fidelity: what was planned against what was built
2
2
 
3
- The critic panel never sees the plan, so it cannot see that the game drifted from it. Held Note (a
4
- third-person horror chapter, the Held Note lane, 29 Sep 2026) scored 6.55 overall and 7.62 on look
3
+ The critic panel never sees the plan, so it cannot see that the game drifted from it. A
4
+ third-person horror chapter (29 Sep 2026) scored 6.55 overall and 7.62 on look
5
5
  from the panel; a blind judge holding the same build against its own GDD gave art direction 4 and
6
6
  creative direction 3, and named what the panel could not: the thesis frame's fingers missing from
7
7
  the seam, the first walker at arm's length instead of far down the corridor, a stencil colour that
@@ -42,18 +42,18 @@ the reason, never scored.
42
42
  drew, the splice as it completes, the merge at its pop. A view whose `enter()` replays a recorded run
43
43
  to that beat (the playtest reference's `game.replay.seek('first-walker')`), or a journey mark placed
44
44
  at it, lands there on every build; a clock time drifts the first time the level changes. Two of our
45
- own fallback pairs show the cost: Plush Pop's play view was captured with an empty basket, so the
46
- seat could only say the target's pile and squish were missing; Gesundheit's was captured before
45
+ own fallback pairs show the cost: one game's play view was captured with an empty basket, so the
46
+ seat could only say the target's pile and squish were missing; another's was captured before
47
47
  any sneeze, so the flowers the target promises were not on the ground.
48
48
 
49
49
  **Or pin it to a time on the saved route, and name both.** From the first playtest on, the blind
50
50
  player's steps are kept as the route (`test/journeys/playtest-route.json`) and every playtest replays
51
51
  it with the same viewport and seed. A game frame `at 1:00` (or a moment written `1:00 the first
52
52
  walker`) is the route's frame at that time on the script's own clock: like with like every round,
53
- as Held Note's films were (0:10, 1:00, 2:00, 3:00, 5:00). A row that names both, `at 1:00, view
53
+ as the horror chapter's films were (0:10, 1:00, 2:00, 3:00, 5:00). A row that names both, `at 1:00, view
54
54
  firstWalker`, is judged on the played frame, and the view stays beside it as the staged frame. When
55
55
  the played route never reaches what a staged view or a lane's file shows (no moment, screen or beat
56
- by that name in play), the report says so: Held Note's Diver was showcase art in its lane's frame
56
+ by that name in play), the report says so: the horror chapter's diver was showcase art in its lane's frame
57
57
  and "a few coral points" in play. A moment past the route's end is play that never got there. Keep
58
58
  the route while the level holds; when the level changes, record a new one (`journey record
59
59
  playtest-route --force`) and read the history's next column as a new baseline, which the report marks.
@@ -77,8 +77,8 @@ Borrowed, with credit, from Scenario's quality skills (MIT; research 06 §2.2–
77
77
 
78
78
  ## The plan's interface: UI and UX as imagined or not
79
79
 
80
- The owner's second question, from the Held Note lane: is the interface the one the plan designed?
81
- Held Note's GDD draws its phone HUD and its message screen as HTML at 852 × 393, each element
80
+ The owner's second question, from that game's lane: is the interface the one the plan designed?
81
+ Its GDD draws its phone HUD and its message screen as HTML at 852 × 393, each element
82
82
  numbered with a line of spec ("1 collar ring: health, five cyan lights"; "nothing sits in the middle
83
83
  of the screen"). When a GDD has such mockups (a `.phone` or `[data-mockup]` element in any page under
84
84
  `design/`, the first look's `hud.html` first), `funtools playtest` renders each as an element
@@ -102,7 +102,7 @@ a dodge never taught). Per screen it scores ui (layout, what sits on the charact
102
102
  glass, sizes, the visual language) and ux (does it work as intended); each numbered element held,
103
103
  partly or missing; what the game adds that the plan does not have, and whether each serves or fights
104
104
  the plan's rules; then UI and UX fidelity and five changes. The report puts them beside the art
105
- seat's scores and ranks the changes, a missing planned element first. On Held Note's two mockups
105
+ seat's scores and ranks the changes, a missing planned element first. On that game's two mockups
106
106
  it gave UI 5 and UX 4: of 15 planned elements 3 held, 8 partly and 4 missing, and four additions
107
107
  (a tutorial line at top centre, a permanent minimap) fought "nothing sits in the middle".
108
108
 
@@ -112,8 +112,8 @@ The report puts art direction and creative direction beside the last round, each
112
112
  ranks the seat's changes among the next steps (a broken rule first). A low creative score with a
113
113
  held look usually means the moment was shot at the wrong time or the frame's subject is missing;
114
114
  fix the view or the moment before the art. When three of our games were judged against their
115
- single target frame, Lantern Night kept its palette and lantern design (art 8) but lost the wheel of
116
- lanterns and the visible chain (creative 6); Plush Pop built the target's set but not its round felt
115
+ single target frame, one kept its palette and lantern design (art 8) but lost the wheel of
116
+ lanterns and the visible chain (creative 6); another built the target's set but not its round felt
117
117
  critters or the squish (5 and 3, AD-1 broken).
118
118
 
119
119
  ## After a greenlight lock: reference-match rounds
@@ -1,7 +1,7 @@
1
1
  # Mobile QA: is it native to a phone?
2
2
 
3
3
  The critic panel scores stills (each seat re-reading the phone captures), and the blind player plays by touch.
4
- Neither asks whether the game was made for the phone it runs on. Floe (an ice-slide puzzle, round 3,
4
+ Neither asks whether the game was made for the phone it runs on. An ice-slide puzzle (round 3,
5
5
  29 Sep 2026) scored mobile 7 and up from the panel and passed its blind phone round, and the owner
6
6
  opened it on an iPhone simulator and saw desktop thinking: the board under half the screen, four
7
7
  large on-screen arrows repeating the swipe the board already took, Undo/Restart/Hint panels in the
@@ -95,24 +95,24 @@ showed once, plainly, and prefixes one only some showed with them, "[iOS Safari
95
95
 
96
96
  ## Calibration (29 Sep 2026)
97
97
 
98
- Floe round 3 (read-only copy) and Drift, a scratch swipe puzzle made phone-first for this (swipe
98
+ An ice puzzle's round 3 (read-only copy) and Drift, a scratch swipe puzzle made phone-first for this (swipe
99
99
  anywhere, board 75% of the screen, one undo button bottom-left, pause top-right), each through one
100
100
  seat, real Mobile Safari in both orientations:
101
101
 
102
102
  | Game | Seat | Phone-native | High findings |
103
103
  |---|---|---|---|
104
- | Floe R3 | Opus-class | 5 | controls (four arrows repeat the swipe), play-share (board ~48%) |
105
- | Floe R3 | Opus-class, second run | 6 | controls (arrows repeat the swipe; board ~37% of the screen) |
106
- | Floe R3 | Sonnet-class | 4 | controls, play-share (board ~40%) |
107
- | Floe R3 | Opus-class, with the window sweep | 6 | controls (arrows repeat the swipe; board ~44%) |
104
+ | Ice puzzle R3 | Opus-class | 5 | controls (four arrows repeat the swipe), play-share (board ~48%) |
105
+ | Ice puzzle R3 | Opus-class, second run | 6 | controls (arrows repeat the swipe; board ~37% of the screen) |
106
+ | Ice puzzle R3 | Sonnet-class | 4 | controls, play-share (board ~40%) |
107
+ | Ice puzzle R3 | Opus-class, with the window sweep | 6 | controls (arrows repeat the swipe; board ~44%) |
108
108
  | Drift | Opus-class | 8 | none (landscape board small: medium) |
109
109
  | Drift | Sonnet-class | 7 | none |
110
- | Plush Pop R3 | Opus-class, with the window sweep | 6 | none; medium: left/right/Drop buttons beside a drag the basket takes, the basket ~35% of the Mobile Safari page, landscape a squeezed sidebar |
110
+ | Basket game R3 | Opus-class, with the window sweep | 6 | none; medium: left/right/Drop buttons beside a drag the basket takes, the basket ~35% of the Mobile Safari page, landscape a squeezed sidebar |
111
111
 
112
- The first-paint times of the window sweep ran 2.5–7.7 s for Floe on a machine at load 50–60: read
112
+ The first-paint times of the window sweep ran 2.5–7.7 s for the ice puzzle on a machine at load 50–60: read
113
113
  them against runs made the same way, as the profile's numbers.
114
114
 
115
- The funtools scaffold is gesture-first since the Riad Rush phone round: a swipe on the play steps,
115
+ The funtools scaffold is gesture-first since one game's phone round: a swipe on the play steps,
116
116
  a tap or swipe up hops, and its on-screen buttons are a setting, off by default.
117
117
 
118
118
  ## Sources
@@ -120,4 +120,4 @@ a tap or swipe up hops, and its on-screen buttons are a setting, off by default.
120
120
  - The harness's mobile reviewer: `mobile_review.txt` (severity discipline, plan as intent),
121
121
  `quirks_mobile.txt` (thumb zones, targets, safe areas), `sections/base/mobile.txt`.
122
122
  - Skill `funpixel-mobile-ui`, `references/phone-check.md`: the 28 phone fixes and the four looks.
123
- - Floe's round 3 and the owner's look at it on an iPhone simulator.
123
+ - The ice puzzle's round 3 and the owner's look at it on an iPhone simulator.
@@ -2,11 +2,11 @@
2
2
 
3
3
  A playtest is the mirror held up between creator rounds: free measurements, three blind critics and
4
4
  a blind phone player look at the same build, and a short ranked list says what stands between this
5
- round and the next. It applies nothing. This page is what the Held Note lane learned running that
5
+ round and the next. It applies nothing. This page is what one game's lane learned running that
6
6
  loop on a survival-horror chapter in Three.js (29 Sep 2026): what made the evidence trustworthy,
7
7
  what misled once, and what the person read. Take what fits your game.
8
8
 
9
- Held Note, round by round, same panel words and bar:
9
+ That game, round by round, same panel words and bar:
10
10
 
11
11
  | Round | Overall | Look and feel | What happened |
12
12
  |---|---|---|---|
@@ -33,12 +33,12 @@ does scores it kinder (0.2 in the calibration): the separation is the instrument
33
33
  |---|---|---|
34
34
  | free measures | the build | numbers nobody argues with: HUD cover, text size, contrast, ΔE, frame time, verb timings |
35
35
  | three critic seats | premise, frames, facts | three personas notice different things; each re-reads the phone captures (no mobile seat) |
36
- | blind phone player | premise, the screen, touch | the only seat that plays: it finds what stills cannot (Held Note: the camera entering walls, a tell too short to see on a muted phone, a tap that cut nothing and showed nothing) |
36
+ | blind phone player | premise, the screen, touch | the only seat that plays: it finds what stills cannot (one game: the camera entering walls, a tell too short to see on a muted phone, a tap that cut nothing and showed nothing) |
37
37
  | report | all of the above | ranks what blocks a new player first, then what several seats asked for, weighted by where the game trails its genre hit most, so one loud seat does not set the agenda |
38
38
 
39
39
  ## The loop, round after round (the default)
40
40
 
41
- Held Note's v1 → v4 pages were worth reading because the instrument stayed the same; `playtest`
41
+ That game's v1 → v4 pages were worth reading because the instrument stayed the same; `playtest`
42
42
  runs that loop by default, and a round can run less.
43
43
 
44
44
  - **One route, one camera.** The first blind round's steps become the saved route; later playtests
@@ -54,7 +54,7 @@ runs that loop by default, and a round can run less.
54
54
 
55
55
  ## Look at the captures before you trust a score
56
56
 
57
- Held Note's first v2 round scored 4.9, and the seats were right about what they were shown. When the
57
+ Its first v2 round scored 4.9, and the seats were right about what they were shown. When the
58
58
  game was split into modules, the capture hooks reached the game through a loose cast; the replay
59
59
  cursor and the intro timer had moved, the cast hid it, and every view's fast-forward silently left
60
60
  the game at t = 0 behind the opening shot. Twenty frames of the title card's camera, scored as a
@@ -91,27 +91,27 @@ export function views(game: Game) {
91
91
  - **Name the actors so the instruments find them.** `look --read` measures the player and the
92
92
  threats against the ground around them. Name each actor's root node `player-…` or `threat-…`
93
93
  (or set `userData.role`); once a scene tags a role, only tagged nodes play it. Without tags it
94
- falls back to the usual words, which in Held Note took a prop, `hazard_barrier`, as a threat, and
94
+ falls back to the usual words, which in that game took a prop, `hazard_barrier`, as a threat, and
95
95
  the seats read "threat ΔE 0.7, weakest hazard_barrier at ΔE 0.5". Read the line `look --read` prints per role (how it found the
96
96
  role, the nodes it took) before reading its number.
97
97
  - **Wire `feel` early.** Expose `hero { x, y, grounded, unit, vx, state, invulnerable }`,
98
98
  `threats [{ id, phase }]` with a tell and a strike phase, `dead` and `control` in `__FPX_STATE__`,
99
- and write `test/feel.json` (skill `funpixel-game-feel`, references/measure.md). It read Held
100
- Note's dodge back from real key presses: 1.92 m in 0.30 s against the design's 2.0 m in 0.26 s,
99
+ and write `test/feel.json` (skill `funpixel-game-feel`, references/measure.md). It read one
100
+ game's dodge back from real key presses: 1.92 m in 0.30 s against the design's 2.0 m in 0.26 s,
101
101
  untouchable for 0.217 s against 0.21. Its script never reached a walker, so the tell, the death
102
102
  beat and the restart stayed "not measured": a script that walks to the first threat is what
103
103
  measures the fight.
104
104
  - **Run `feel` twice.** The first run's long frame (a warm-up shader compile) moved the wall-clock
105
105
  windows; one run's dodge hit the rail. Two runs that agree are a measurement; one is an anecdote.
106
106
  - **Faded screens.** The HUD judge and the phone audit skip what a faded or hidden ancestor hides.
107
- Held Note's chapter card, faded to opacity 0 but still on the page, once counted as HUD all
107
+ One game's chapter card, faded to opacity 0 but still on the page, once counted as HUD all
108
108
  chapter (41% of the play); taking faded layers out of the page after their fade also keeps them
109
109
  from screen readers.
110
110
 
111
111
  ## Films that show the game
112
112
 
113
113
  A still cannot carry a fight, so the review page leads with one filmed run: a bot on the real
114
- controls, nothing staged. Bots that only walk the route make films with no combat: Held Note's
114
+ controls, nothing staged. Bots that only walk the route make films with no combat: one game's
115
115
  route bots never fired the driver or used the knife, so no film showed the weapons the owner asked
116
116
  for. A film-only `fighter` bot style that plays the verbs a keen player would fixed it, while the
117
117
  tests keep the median bot, because tests measure a typical player and a film shows what the game
@@ -122,7 +122,7 @@ rebuild partway through a round leaves late steps on newer code (say so when it
122
122
  ## What the review page carries
123
123
 
124
124
  `playtest report` writes `report.md`: the ranked steps, this round against the last and the genre
125
- hit, what each seat said, the measures and the cost. The page Held Note's owner read added what
125
+ hit, what each seat said, the measures and the cost. The page that game's owner read added what
126
126
  only the creator can assemble, and each part earned its place:
127
127
 
128
128
  1. **The score against the last round**, overall and look-and-feel, the seats' scores, each
@@ -139,8 +139,8 @@ only the creator can assemble, and each part earned its place:
139
139
  (a script that never reached a walker is a finding about the script, not a pass).
140
140
  8. **Target frames against the game**: each GDD target frame beside the same beat in the game,
141
141
  one line each, "Close" or "Right idea", then what is missing.
142
- 9. **A pillar audit against the GDD**: each pillar graded, what matches, what still drifts. Held
143
- Note found requests made mid-build ("add guns", "make her faster") had quietly broken stated
142
+ 9. **A pillar audit against the GDD**: each pillar graded, what matches, what still drifts. One game
143
+ found requests made mid-build ("add guns", "make her faster") had quietly broken stated
144
144
  pillars; re-reading the pillars after each request folded them back in.
145
145
  10. **The critics in their own words**: each seat's one-line quote and its overall.
146
146
  11. **The blind round**: the steps where it struggled, as frames, its verdict and the caveats.
@@ -153,7 +153,7 @@ The kit does not build this page yet: `report.json` holds the numbers, `frames/`
153
153
 
154
154
  ## When the numbers disagree with your eyes
155
155
 
156
- Trust neither alone. Held Note's threat read ΔE 0.7 on the phone, part of it measured on a prop, and
156
+ Trust neither alone. One game's threat read ΔE 0.7 on the phone, part of it measured on a prop, and
157
157
  the critics independently called the walkers hard to read in the dark; the step stood on the
158
158
  critics and the frames: light the dark a notch. When a
159
159
  number says pass and the frames look wrong, the instrument may be measuring the wrong thing (the
@@ -1,16 +1,16 @@
1
1
  # Proving a Unity build plays
2
2
 
3
- This skill is the order of checks that shows a build boots, plays to a win and a loss, and logs no exception. The failure it prevents is trusting what a capture shows: a Dawg Ball tour log held 321 exceptions while every screenshot looked fine, and Pocket Crew's first TestFlight build drew every moving platform frozen after the first level, behind 1,118 green tests. A check sees only the path it runs, so these steps run the paths players take.
3
+ This skill is the order of checks that shows a build boots, plays to a win and a loss, and logs no exception. The failure it prevents is trusting what a capture shows: one game's tour log held 321 exceptions while every screenshot looked fine, and another's first TestFlight build drew every moving platform frozen after the first level, behind 1,118 green tests. A check sees only the path it runs, so these steps run the paths players take.
4
4
 
5
5
  ## Tools
6
6
 
7
7
  Not shipped by the kit: the Unity starter, its one `check` command (exit codes 0 pass, 1 fail, 2 not observed, 3 error), the checks below and the studio scripts they were learned with (`unity_check.py`, `unity_sim.sh`, `smoke_sim.sh`, `pcplay.py`, `testflight.sh`'s pre-flight, per-game smoke, remote-play and perf scripts) are proposed. Until the starter ships, run each step with what exists:
8
8
 
9
- - Compile and test: `dotnet build` and `dotnet test` on the engine-free core (its `CoreTests~` project; Unity ships a `dotnet` under `Contents/Resources/Scripting/DotNetSdk/`), and Unity's test runner for the rest: `funtools unity run -- -nographics -runTests -testPlatform EditMode -testResults results.xml` (the machine-wide queue: one run per project across agents; never with `-quit`: the test runner exits by itself). Play Mode tests run the same way with `-testPlatform PlayMode`; Floe Jam's `unity/build.sh test` runs Edit Mode then Play Mode (`FloeJam.PlayTests`) and reads the NUnit XML, the only project that does.
10
- - Build for the Simulator with the studio's `com.joydle.core` (funpixel-unity-game, `references/studio-packages.md`): `funtools unity run -- -nographics -buildTarget iOS -executeMethod Joydle.Core.Editor.BuildTools.SimulatorDev` (a development build: its dev flags and test ads work; `Simulator` is the stripped release build), then `xcodebuild -project Unity-iPhone.xcodeproj -scheme Unity-iPhone -sdk iphonesimulator build`; install and launch on a Simulator of your own (`udid=$(funtools sim lease)`) with `xcrun simctl install $udid <app>` and `xcrun simctl launch --console-pty $udid <bundle id> -smoke`, never `booted` (it may be another agent's), and `funtools sim release $udid` at the end. About 5–10 minutes a round.
9
+ - Compile and test: `dotnet build` and `dotnet test` on the engine-free core (its `CoreTests~` project; Unity ships a `dotnet` under `Contents/Resources/Scripting/DotNetSdk/`), and Unity's test runner for the rest: `funtools unity run -- -nographics -runTests -testPlatform EditMode -testResults results.xml` (the machine-wide queue: one run per project across agents; never with `-quit`: the test runner exits by itself). Play Mode tests run the same way with `-testPlatform PlayMode`; one game's `unity/build.sh test` runs Edit Mode then Play Mode and reads the NUnit XML, the only project that does.
10
+ - Build for the Simulator with the game's own build method: `funtools unity run -- -nographics -buildTarget iOS -executeMethod Setup.BuildSimulatorDev` (a development build: its dev flags and test ads work; keep a stripped release Simulator build beside it), then `xcodebuild -project Unity-iPhone.xcodeproj -scheme Unity-iPhone -sdk iphonesimulator build`; install and launch on a Simulator of your own (`udid=$(funtools sim lease)`) with `xcrun simctl install $udid <app>` and `xcrun simctl launch --console-pty $udid <bundle id> -smoke`, never `booted` (it may be another agent's), and `funtools sim release $udid` at the end. About 5–10 minutes a round.
11
11
  - A smoke run: a dev-only launch flag in your game that plays from the title to an ending and writes `smoke.txt` to the app's Documents; read it with `xcrun simctl get_app_container $udid <bundle id> data`.
12
- - Dev flags: launch arguments for dev builds that jump to a state or start a bot (the games used `-autoplay -startlevel N`, `-hg-seed 7 -hg-autoplay`, and a tour flag that writes every menu to PNG), read through `LaunchArgs.Get()` behind the game's own dev gate, with `Telemetry.Muted` set while a flag is on. A launch with any flag also skips the studio splash (`-splash` forces it).
13
- - Hand play from a script: `npx @funpixel/tools unity play start`, then `play tap`, `drag`, `key`, `pad`, `state`, `ui`, `shot`, `record` and `end` (the kit's `com.funpixel.probe`, lifted from Pocket Crew's remote play: real Input System device state, in the game's own upright coordinates). `unity probe --path path.json` plays a scripted path and measures it; `unity capture --all` shoots every registered view (funpixel-unity-game, `references/probe.md`).
12
+ - Dev flags: launch arguments for dev builds that jump to a state or start a bot (the games used `-autoplay -startlevel N`, `-seed 7 -autoplay`, and a tour flag that writes every menu to PNG), read natively (Mono never sees `simctl launch` arguments) behind the game's own dev gate, with telemetry muted while a flag is on.
13
+ - Hand play from a script: `npx @funpixel/tools unity play start`, then `play tap`, `drag`, `key`, `pad`, `state`, `ui`, `shot`, `record` and `end` (the kit's `com.funpixel.probe`, lifted from one game's remote play: real Input System device state, in the game's own upright coordinates). `unity probe --path path.json` plays a scripted path and measures it; `unity capture --all` shoots every registered view (funpixel-unity-game, `references/probe.md`).
14
14
  - Screens: `funtools sim shot $udid --out shot.png`, upright in the game's orientation; `funtools sim tap $udid x y` presses a point of that picture.
15
15
 
16
16
  ## Checks
@@ -47,14 +47,14 @@ A person still checks feel on a real phone and audio by ear.
47
47
 
48
48
  ## Worked example
49
49
 
50
- Pocket Crew, a three.js port with 26 levels. Build 1 went to TestFlight behind 1,118 green tests, and every level after the first of a session drew its movers frozen: a warm-up had left the views bound to a throwaway sim. Every audit had started levels fresh at boot, so none saw it. Once fixed, the audit's frozen category went from 219 to 0. A production gate (fresh install, every level through real flows, 7 kill-and-relaunch cycles, every setting persisted) found 4 more bugs behind 1,377 green tests. Hand play through the game's remote-play server found what bots had passed: fans that looked walkable, Tiny Pip drawn as a speck, and threats under the buttons.
50
+ A three.js port with 26 levels. Build 1 went to TestFlight behind 1,118 green tests, and every level after the first of a session drew its movers frozen: a warm-up had left the views bound to a throwaway sim. Every audit had started levels fresh at boot, so none saw it. Once fixed, the audit's frozen category went from 219 to 0. A production gate (fresh install, every level through real flows, 7 kill-and-relaunch cycles, every setting persisted) found 4 more bugs behind 1,377 green tests. Hand play through the game's remote-play server found what bots had passed: fans that looked walkable, the smallest hero drawn as a speck, and threats under the buttons.
51
51
 
52
52
  ## Common mistakes
53
53
 
54
- - Launching with dev flags every time. Dawg Ball's `-db-*` flags muted telemetry, so a Firebase crash path first ran when the owner launched normally.
55
- - A smoke that asserts only "no errors". Scrap Riot's bot failed to beat the boss for 11 minutes, then stood holding USE; the run now uses `-lgr-god`, `DebugBossHit` and a walk-to-lever script.
56
- - Reading screenshots and skipping the log. In Dawg Ball a NullReferenceException in `Hud.Pad` hung a demo match silently.
54
+ - Launching with dev flags every time. One game's dev flags muted telemetry, so a Firebase crash path first ran when the owner launched normally.
55
+ - A smoke that asserts only "no errors". One game's bot failed to beat the boss for 11 minutes, then stood holding USE; the run now uses a god-mode flag, `DebugBossHit` and a walk-to-lever script.
56
+ - Reading screenshots and skipping the log. In one game a NullReferenceException in `Hud.Pad` hung a demo match silently.
57
57
  - Trusting benches for boot. A static cache declared after the colours it used threw a TypeInitializationException and no build booted for about 7 h; which game is not in the report.
58
- - Hand-written `.csproj` files left ignored by git. Dead Letter's tests could not run from a fresh clone.
59
- - A regression test that passes on the old code, as a Dawg Ball cheat test did.
58
+ - Hand-written `.csproj` files left ignored by git. One game's tests could not run from a fresh clone.
59
+ - A regression test that passes on the old code, as one game's cheat test did.
60
60
  - Shipping without the audio check. All four first games reached TestFlight silent, because a camera made in code has no AudioListener (`funtools doctor` warns before the build).
@@ -96,4 +96,4 @@ clear, a ring round the tower, in 3 draw calls. The opening: title
96
96
  - A strange number never explained. Voices placed by room and deed, cards that name what happened:
97
97
  [references/opening-and-chapters.md](references/opening-and-chapters.md#a-radio-placed-rather-than-narrated).
98
98
 
99
- Where this comes from: the hits (research 18), Crayon's GDD (research 19), Held Note, our lab.
99
+ Where this comes from: the hits (research 18), Crayon's GDD (research 19), our own games, our lab.
@@ -1,7 +1,7 @@
1
1
  # Atmosphere: a world that notices the player
2
2
 
3
- A place feels alive when things in it move on their own and answer what the player does. Saltwake
4
- (our racer, 29 Sep) played well and still read as "a game of shapes": no one in the stands, nothing
3
+ A place feels alive when things in it move on their own and answer what the player does. Our
4
+ racer (29 Sep) played well and still read as "a game of shapes": no one in the stands, nothing
5
5
  at the trackside, no moment at the finish. The owner's words: "environment and crowd cheers were
6
6
  missing". This page is a shelf of patterns per genre and the cheap code under them. Pick what the
7
7
  brief wants; a puzzle in an empty white room may want none of it, on purpose.
@@ -175,7 +175,7 @@ The end of a race or a round is the moment players remember, so stage it like th
175
175
  2. The crowd at its loudest, a sting, the stand on its feet.
176
176
  3. Light: flashbulbs (small white sprites flickering at random in the stands for 1.5 s), a burst of
177
177
  confetti in the team colours, fireworks at night (particles: skill `funpixel-art`).
178
- 4. Someone says something: the announcer ("And it's Saltwake by a nose!"), a rival's line, the
178
+ 4. Someone says something: the announcer ("And it's the blue boat by a nose!"), a rival's line, the
179
179
  coach. One line, on screen and voiced if you have voice (see [voice.md](voice.md)).
180
180
  5. Then the result card over the still-cheering world, not over a black screen.
181
181
 
@@ -187,7 +187,7 @@ erupts, and declare the view `moment: true` so capture shoots it as a burst.
187
187
  Horror inverts the pattern: the world reacts by going quiet. Keep the bed low and let it drop out
188
188
  entirely about a second before a threat appears, so the silence is the warning. Space distant
189
189
  sounds unevenly (8–25 s apart, never on a timer the player can learn), pan them, and put one
190
- sound close and behind at the worst moment. Held Note's hum rising under the last recorder line is
190
+ sound close and behind at the worst moment. One horror game's hum rising under the last recorder line is
191
191
  the model: the world answers the story, not the player's score.
192
192
 
193
193
  ## Budget and cost
@@ -1,6 +1,6 @@
1
1
  # A living world: people, creatures and a place that moves
2
2
 
3
- The owner's verdict after three rounds of one game built two ways (Blue Freight, Oct 2026): "both
3
+ The owner's verdict after three rounds of one game built two ways (Oct 2026): "both
4
4
  did nice work, some in environment, some in dynamics... models static, NPCs static: it has to be a
5
5
  living environment." The build that lost on dynamics had 28 townsfolk animated in place (none
6
6
  walked anywhere), kites that slid, a still hound and one person standing inside a container. The
@@ -171,7 +171,7 @@ mesh.geometry.attributes.aAnim.needsUpdate = true;
171
171
  ## Technique 4: painted cut-outs that animate (Pixi, and billboards in Three)
172
172
 
173
173
  A picture moved is motion, not animation: a crab sprite slid along the ground, a goat card that bobs
174
- or flips, a kite that drifts and pulses its opacity all read as stones (fresh Blue Freight, 3 Oct).
174
+ or flips, a kite that drifts and pulses its opacity all read as stones (a fresh build of that game, 3 Oct).
175
175
  A cut-out lives by one of four means. **Frames by distance:** a walker gets 6+ frames, the hero
176
176
  8–12 (contact, down, passing, up for each foot), and the frame advances by ground covered, one
177
177
  cycle per about 0.8 body heights (1.4 m at 1.75 m), so it never treadmills when standing or skates
@@ -157,7 +157,7 @@ story.start(save.data.chapter ?? 0, save.data.step ?? 0);
157
157
 
158
158
  ## A radio, placed rather than narrated
159
159
 
160
- Held Note (a three.js horror game, 29 Sep 2026) told its story through two sources with different
160
+ One three.js horror game (29 Sep 2026) told its story through two sources with different
161
161
  voices, both in the world: the station speaks only in readouts (who is behind a door, open water,
162
162
  lift power, the nearest dead relay when she is lost), and a recorder plays fragments of the crew's
163
163
  last night, timestamped, with the enemies' hum rising under them until the last line ends in
@@ -34,7 +34,7 @@ words, it is the voice, the timing and the testing of each one.
34
34
  ## The outer story, at 10 minutes and up
35
35
 
36
36
  A want inside the hero is not enough past ten minutes; the player needs something to point at.
37
- Five lines in the GDD, each something the player sees or does. Blue Freight lacked all five.
37
+ Five lines in the GDD, each something the player sees or does. One of our games lacked all five.
38
38
 
39
39
  | Line | What it is | From |
40
40
  |---|---|---|
@@ -137,7 +137,7 @@ player does not hear the opening twice.
137
137
 
138
138
  ## Staged versus played
139
139
 
140
- A beat that exists only in a staged view is not in the game. The Held Note playtest caught a
140
+ A beat that exists only in a staged view is not in the game. One game's playtest caught a
141
141
  showcase frame play never reached; the same happens to story. Three places see it:
142
142
 
143
143
  - `funtools depth` reads the `## Story` table and the `beat` field in real play logs (blind
@@ -19,7 +19,7 @@ So for real words, four honest options: the platform's voice, then three cheaper
19
19
 
20
20
  **A story game offers voice by default** (the Silt bar S3:
21
21
  at least one voiced line before first control, every line voiced and captioned, a line advancing on
22
- its clip's end). Silt voiced 57 lines heard by objective 33; Blue Freight typed its radio lines and
22
+ its clip's end). Silt voiced 57 lines heard by objective 33; one of our games typed its radio lines and
23
23
  lost on it. So for a game with a story, characters who speak or a cold open, the plan's Art budget
24
24
  lists the voiced lines with their price as the default, and the creator picks voice, one of the
25
25
  cheaper options below, or none: still priced, still the creator's choice, never made unasked. For an