@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.
- package/bench/handlers/bake_emissive.py +2 -2
- package/bench/handlers/decimate.py +2 -2
- package/bench/handlers/fracture.py +1 -1
- package/bench/handlers/normalize_transform.py +3 -3
- package/bench/handlers/render_views.py +2 -2
- package/bench/handlers/views.py +6 -6
- package/dist/cli.js +8 -9
- package/dist/commands/feedback.js +5 -5
- package/dist/commands/init.js +1 -1
- package/dist/direct/read.js +1 -1
- package/dist/doctor/unity-checks.js +5 -5
- package/dist/doctor/unity-history.js +17 -33
- package/dist/feedback/ab.js +0 -40
- package/dist/gen/unity.js +3 -3
- package/dist/mcp/server.js +2 -1
- package/dist/pipeline/pipeline.js +6 -6
- package/dist/playtest/moments.js +1 -1
- package/dist/playtest/report.js +1 -1
- package/dist/production/mirror.js +2 -2
- package/dist/sim/curve.js +3 -3
- package/dist/spec/scaffold.js +1 -1
- package/dist/studio/pitch.js +1 -1
- package/dist/unity/probe/install.js +1 -1
- package/dist/vendor/verify/src/page/actors.js +2 -2
- package/dist/vendor/verify/src/page/capture_view.js +2 -2
- package/dist/vendor/verify/src/page/dressing.js +1 -1
- package/dist/vendor/verify/src/page/frame_honesty.js +1 -1
- package/dist/vendor/verify/src/page/front_door.js +2 -2
- package/dist/vendor/verify/src/page/grounding.js +3 -3
- package/dist/vendor/verify/src/page/hud.js +3 -3
- package/dist/vendor/verify/src/page/layout.js +5 -5
- package/dist/vendor/verify/src/page/life_anim.js +6 -6
- package/dist/vendor/verify/src/page/mechanic_check.js +1 -1
- package/dist/vendor/verify/src/page/phone_check.js +2 -2
- package/dist/vendor/verify/src/page/recorder.js +2 -2
- package/dist/vendor/verify/src/page/surfaces.js +2 -2
- package/dist/vendor/verify/src/page/world_actors.js +3 -3
- package/package.json +2 -2
- package/plugins/README.md +16 -0
- package/plugins/claude/README.md +2 -3
- package/plugins/claude/agents/art-director.md +2 -2
- package/plugins/claude/commands/playtest.md +2 -2
- package/plugins/claude/hooks/brief.md +1 -1
- package/plugins/claude/hooks/guidance.json +1 -1
- package/plugins/claude/hooks/vendor/pipeline/pipeline.mjs +6 -6
- package/plugins/claude/hooks/vendor/studio/pitch.mjs +1 -1
- package/plugins/claude/skills/3d/references/bake-off.md +3 -3
- package/plugins/claude/skills/3d/references/characters.md +1 -1
- package/plugins/claude/skills/3d/references/hero-route.md +5 -5
- package/plugins/claude/skills/3d/references/level-spec.md +1 -1
- package/plugins/claude/skills/3d/references/levels.md +3 -3
- package/plugins/claude/skills/3d/references/light-and-places.md +3 -3
- package/plugins/claude/skills/3d/references/painted-target.md +7 -7
- package/plugins/claude/skills/3d/references/three-loading.md +4 -4
- package/plugins/claude/skills/3d/references/unity.md +13 -13
- package/plugins/claude/skills/art/references/animation.md +1 -1
- package/plugins/claude/skills/art/references/cast.md +3 -3
- package/plugins/claude/skills/art/references/effects.md +2 -2
- package/plugins/claude/skills/art/references/frames.md +6 -6
- package/plugins/claude/skills/art/references/judging-frames.md +8 -8
- package/plugins/claude/skills/art/references/look.md +4 -4
- package/plugins/claude/skills/art/references/pipeline.md +2 -2
- package/plugins/claude/skills/art/references/prompts.md +4 -4
- package/plugins/claude/skills/art/references/ui.md +15 -15
- package/plugins/claude/skills/art/references/unity.md +14 -14
- package/plugins/claude/skills/audio/references/adaptive-music.md +4 -4
- package/plugins/claude/skills/audio/references/engine.md +2 -2
- package/plugins/claude/skills/audio/references/measure.md +1 -1
- package/plugins/claude/skills/audio/references/unity.md +20 -19
- package/plugins/claude/skills/game-feel/SKILL.md +4 -4
- package/plugins/claude/skills/game-feel/references/contact.md +6 -6
- package/plugins/claude/skills/game-feel/references/unity.md +18 -23
- package/plugins/claude/skills/game-logic/SKILL.md +3 -3
- package/plugins/claude/skills/game-logic/references/balance.md +2 -2
- package/plugins/claude/skills/game-logic/references/depth.md +2 -2
- package/plugins/claude/skills/game-logic/references/escalation.md +5 -5
- package/plugins/claude/skills/game-logic/references/probes.md +10 -10
- package/plugins/claude/skills/game-logic/references/unity.md +28 -28
- package/plugins/claude/skills/game-spine/SKILL.md +1 -1
- package/plugins/claude/skills/game-spine/references/performance.md +2 -2
- package/plugins/claude/skills/game-spine/references/replay.md +11 -11
- package/plugins/claude/skills/game-spine/references/room-api.md +1 -1
- package/plugins/claude/skills/game-spine/references/sdk.md +1 -1
- package/plugins/claude/skills/gdd/SKILL.md +2 -2
- package/plugins/claude/skills/gdd/references/as-built.md +2 -2
- package/plugins/claude/skills/gdd/references/design-measures.md +2 -2
- package/plugins/claude/skills/gdd/references/design-note.md +1 -1
- package/plugins/claude/skills/gdd/references/first-look.md +1 -1
- package/plugins/claude/skills/gdd/references/floors.md +2 -2
- package/plugins/claude/skills/gdd/references/gameplay-contract.md +1 -1
- package/plugins/claude/skills/gdd/references/genre-puzzle.md +4 -4
- package/plugins/claude/skills/gdd/references/genre-racing.md +2 -2
- package/plugins/claude/skills/gdd/references/genre-rpg.md +2 -2
- package/plugins/claude/skills/gdd/references/genre-shooter.md +2 -2
- package/plugins/claude/skills/gdd/references/genre-survival.md +2 -2
- package/plugins/claude/skills/gdd/references/invent-first.md +3 -3
- package/plugins/claude/skills/gdd/references/level-and-fun.md +11 -11
- package/plugins/claude/skills/gdd/references/pages.md +2 -5
- package/plugins/claude/skills/gdd/references/plan-at-size.md +5 -5
- package/plugins/claude/skills/gdd/references/production-tiers.md +11 -11
- package/plugins/claude/skills/gdd/references/sections.md +7 -7
- package/plugins/claude/skills/gdd/references/spec-folder.md +3 -3
- package/plugins/claude/skills/gdd/references/the-path.md +3 -4
- package/plugins/claude/skills/gdd/references/world-and-identity.md +4 -4
- package/plugins/claude/skills/gdd/references/worth.md +4 -4
- package/plugins/claude/skills/mobile-ui/SKILL.md +3 -3
- package/plugins/claude/skills/mobile-ui/references/hud-and-title.md +3 -3
- package/plugins/claude/skills/mobile-ui/references/phone-check.md +1 -1
- package/plugins/claude/skills/mobile-ui/references/recipes.md +1 -1
- package/plugins/claude/skills/mobile-ui/references/restyle-ui.md +11 -11
- package/plugins/claude/skills/mobile-ui/references/unity.md +23 -23
- package/plugins/claude/skills/publishing/references/compose.md +1 -1
- package/plugins/claude/skills/publishing/references/server-build.md +1 -1
- package/plugins/claude/skills/store/SKILL.md +3 -3
- package/plugins/claude/skills/store/references/app-store.md +1 -1
- package/plugins/claude/skills/store/references/google-play.md +2 -2
- package/plugins/claude/skills/store/references/ios-release.md +19 -20
- package/plugins/claude/skills/store/references/money.md +2 -2
- package/plugins/claude/skills/store/references/purchases-and-review.md +18 -18
- package/plugins/claude/skills/store/references/readiness-page.md +1 -1
- package/plugins/claude/skills/store/references/readiness.md +3 -3
- package/plugins/claude/skills/store/references/unity-store.md +9 -12
- package/plugins/claude/skills/unity-game/SKILL.md +28 -35
- package/plugins/claude/skills/unity-game/references/agent-ops.md +9 -9
- package/plugins/claude/skills/unity-game/references/fixes.md +21 -21
- package/plugins/claude/skills/unity-game/references/from-a-web-game.md +17 -17
- package/plugins/claude/skills/unity-game/references/handing-off.md +4 -4
- package/plugins/claude/skills/unity-game/references/performance.md +10 -14
- package/plugins/claude/skills/unity-game/references/probe.md +4 -4
- package/plugins/claude/skills/unity-game/references/shared-mac.md +1 -1
- package/plugins/claude/skills/unity-game/references/traps.md +13 -14
- package/plugins/claude/skills/verifying/references/bar.md +1 -1
- package/plugins/claude/skills/verifying/references/fidelity.md +11 -11
- package/plugins/claude/skills/verifying/references/mobile-qa.md +10 -10
- package/plugins/claude/skills/verifying/references/playtest.md +14 -14
- package/plugins/claude/skills/verifying/references/unity.md +11 -11
- package/plugins/claude/skills/world-and-story/SKILL.md +1 -1
- package/plugins/claude/skills/world-and-story/references/atmosphere.md +4 -4
- package/plugins/claude/skills/world-and-story/references/living-world.md +2 -2
- package/plugins/claude/skills/world-and-story/references/opening-and-chapters.md +1 -1
- package/plugins/claude/skills/world-and-story/references/story-at-size.md +2 -2
- package/plugins/claude/skills/world-and-story/references/voice.md +1 -1
- package/plugins/codex/AGENTS.md +1 -1
- package/plugins/codex/README.md +1 -1
- package/plugins/codex/hooks/brief.md +1 -1
- package/plugins/codex/hooks/guidance.json +1 -1
- package/plugins/codex/hooks/host.md +1 -1
- package/plugins/codex/hooks/vendor/pipeline/pipeline.mjs +6 -6
- package/plugins/codex/hooks/vendor/studio/pitch.mjs +1 -1
- package/plugins/codex/skills/fp-art-director/SKILL.md +2 -2
- package/plugins/codex/skills/fp-art-director/references/codex.md +1 -1
- package/plugins/codex/skills/fp-audio-director/references/codex.md +1 -1
- package/plugins/codex/skills/fp-critic/references/codex.md +1 -1
- package/plugins/codex/skills/fp-lane/references/codex.md +1 -1
- package/plugins/codex/skills/fp-level-designer/references/codex.md +1 -1
- package/plugins/codex/skills/fp-mobile-qa-seat/references/codex.md +1 -1
- package/plugins/codex/skills/fp-player/references/codex.md +1 -1
- package/plugins/codex/skills/fp-playtest/SKILL.md +2 -2
- package/plugins/codex/skills/fp-qa-lead/references/codex.md +1 -1
- package/plugins/codex/skills/fp-studio/SKILL.md +1 -1
- package/plugins/codex/skills/funpixel-3d/references/bake-off.md +3 -3
- package/plugins/codex/skills/funpixel-3d/references/characters.md +1 -1
- package/plugins/codex/skills/funpixel-3d/references/hero-route.md +5 -5
- package/plugins/codex/skills/funpixel-3d/references/level-spec.md +1 -1
- package/plugins/codex/skills/funpixel-3d/references/levels.md +3 -3
- package/plugins/codex/skills/funpixel-3d/references/light-and-places.md +3 -3
- package/plugins/codex/skills/funpixel-3d/references/painted-target.md +7 -7
- package/plugins/codex/skills/funpixel-3d/references/three-loading.md +4 -4
- package/plugins/codex/skills/funpixel-3d/references/unity.md +13 -13
- package/plugins/codex/skills/funpixel-art/references/animation.md +1 -1
- package/plugins/codex/skills/funpixel-art/references/cast.md +3 -3
- package/plugins/codex/skills/funpixel-art/references/effects.md +2 -2
- package/plugins/codex/skills/funpixel-art/references/frames.md +6 -6
- package/plugins/codex/skills/funpixel-art/references/judging-frames.md +8 -8
- package/plugins/codex/skills/funpixel-art/references/look.md +4 -4
- package/plugins/codex/skills/funpixel-art/references/pipeline.md +2 -2
- package/plugins/codex/skills/funpixel-art/references/prompts.md +4 -4
- package/plugins/codex/skills/funpixel-art/references/ui.md +15 -15
- package/plugins/codex/skills/funpixel-art/references/unity.md +14 -14
- package/plugins/codex/skills/funpixel-audio/references/adaptive-music.md +4 -4
- package/plugins/codex/skills/funpixel-audio/references/engine.md +2 -2
- package/plugins/codex/skills/funpixel-audio/references/measure.md +1 -1
- package/plugins/codex/skills/funpixel-audio/references/unity.md +20 -19
- package/plugins/codex/skills/funpixel-game-feel/SKILL.md +4 -4
- package/plugins/codex/skills/funpixel-game-feel/references/contact.md +6 -6
- package/plugins/codex/skills/funpixel-game-feel/references/unity.md +18 -23
- package/plugins/codex/skills/funpixel-game-logic/SKILL.md +3 -3
- package/plugins/codex/skills/funpixel-game-logic/references/balance.md +2 -2
- package/plugins/codex/skills/funpixel-game-logic/references/depth.md +2 -2
- package/plugins/codex/skills/funpixel-game-logic/references/escalation.md +5 -5
- package/plugins/codex/skills/funpixel-game-logic/references/probes.md +10 -10
- package/plugins/codex/skills/funpixel-game-logic/references/unity.md +28 -28
- package/plugins/codex/skills/funpixel-game-spine/SKILL.md +1 -1
- package/plugins/codex/skills/funpixel-game-spine/references/performance.md +2 -2
- package/plugins/codex/skills/funpixel-game-spine/references/replay.md +11 -11
- package/plugins/codex/skills/funpixel-game-spine/references/room-api.md +1 -1
- package/plugins/codex/skills/funpixel-game-spine/references/sdk.md +1 -1
- package/plugins/codex/skills/funpixel-gdd/SKILL.md +2 -2
- package/plugins/codex/skills/funpixel-gdd/references/as-built.md +2 -2
- package/plugins/codex/skills/funpixel-gdd/references/design-measures.md +2 -2
- package/plugins/codex/skills/funpixel-gdd/references/design-note.md +1 -1
- package/plugins/codex/skills/funpixel-gdd/references/first-look.md +1 -1
- package/plugins/codex/skills/funpixel-gdd/references/floors.md +2 -2
- package/plugins/codex/skills/funpixel-gdd/references/gameplay-contract.md +1 -1
- package/plugins/codex/skills/funpixel-gdd/references/genre-puzzle.md +4 -4
- package/plugins/codex/skills/funpixel-gdd/references/genre-racing.md +2 -2
- package/plugins/codex/skills/funpixel-gdd/references/genre-rpg.md +2 -2
- package/plugins/codex/skills/funpixel-gdd/references/genre-shooter.md +2 -2
- package/plugins/codex/skills/funpixel-gdd/references/genre-survival.md +2 -2
- package/plugins/codex/skills/funpixel-gdd/references/invent-first.md +3 -3
- package/plugins/codex/skills/funpixel-gdd/references/level-and-fun.md +11 -11
- package/plugins/codex/skills/funpixel-gdd/references/pages.md +2 -5
- package/plugins/codex/skills/funpixel-gdd/references/plan-at-size.md +5 -5
- package/plugins/codex/skills/funpixel-gdd/references/production-tiers.md +11 -11
- package/plugins/codex/skills/funpixel-gdd/references/sections.md +7 -7
- package/plugins/codex/skills/funpixel-gdd/references/spec-folder.md +3 -3
- package/plugins/codex/skills/funpixel-gdd/references/the-path.md +3 -4
- package/plugins/codex/skills/funpixel-gdd/references/world-and-identity.md +4 -4
- package/plugins/codex/skills/funpixel-gdd/references/worth.md +4 -4
- package/plugins/codex/skills/funpixel-mobile-ui/SKILL.md +3 -3
- package/plugins/codex/skills/funpixel-mobile-ui/references/hud-and-title.md +3 -3
- package/plugins/codex/skills/funpixel-mobile-ui/references/phone-check.md +1 -1
- package/plugins/codex/skills/funpixel-mobile-ui/references/recipes.md +1 -1
- package/plugins/codex/skills/funpixel-mobile-ui/references/restyle-ui.md +11 -11
- package/plugins/codex/skills/funpixel-mobile-ui/references/unity.md +23 -23
- package/plugins/codex/skills/funpixel-publish/references/compose.md +1 -1
- package/plugins/codex/skills/funpixel-publish/references/server-build.md +1 -1
- package/plugins/codex/skills/funpixel-store/SKILL.md +3 -3
- package/plugins/codex/skills/funpixel-store/references/app-store.md +1 -1
- package/plugins/codex/skills/funpixel-store/references/google-play.md +2 -2
- package/plugins/codex/skills/funpixel-store/references/ios-release.md +19 -20
- package/plugins/codex/skills/funpixel-store/references/money.md +2 -2
- package/plugins/codex/skills/funpixel-store/references/purchases-and-review.md +18 -18
- package/plugins/codex/skills/funpixel-store/references/readiness-page.md +1 -1
- package/plugins/codex/skills/funpixel-store/references/readiness.md +3 -3
- package/plugins/codex/skills/funpixel-store/references/unity-store.md +9 -12
- package/plugins/codex/skills/funpixel-unity-game/SKILL.md +28 -35
- package/plugins/codex/skills/funpixel-unity-game/references/agent-ops.md +9 -9
- package/plugins/codex/skills/funpixel-unity-game/references/fixes.md +21 -21
- package/plugins/codex/skills/funpixel-unity-game/references/from-a-web-game.md +17 -17
- package/plugins/codex/skills/funpixel-unity-game/references/handing-off.md +4 -4
- package/plugins/codex/skills/funpixel-unity-game/references/performance.md +10 -14
- package/plugins/codex/skills/funpixel-unity-game/references/probe.md +4 -4
- package/plugins/codex/skills/funpixel-unity-game/references/shared-mac.md +1 -1
- package/plugins/codex/skills/funpixel-unity-game/references/traps.md +13 -14
- package/plugins/codex/skills/funpixel-verify/references/bar.md +1 -1
- package/plugins/codex/skills/funpixel-verify/references/fidelity.md +11 -11
- package/plugins/codex/skills/funpixel-verify/references/mobile-qa.md +10 -10
- package/plugins/codex/skills/funpixel-verify/references/playtest.md +14 -14
- package/plugins/codex/skills/funpixel-verify/references/unity.md +11 -11
- package/plugins/codex/skills/funpixel-world-and-story/SKILL.md +1 -1
- package/plugins/codex/skills/funpixel-world-and-story/references/atmosphere.md +4 -4
- package/plugins/codex/skills/funpixel-world-and-story/references/living-world.md +2 -2
- package/plugins/codex/skills/funpixel-world-and-story/references/opening-and-chapters.md +1 -1
- package/plugins/codex/skills/funpixel-world-and-story/references/story-at-size.md +2 -2
- package/plugins/codex/skills/funpixel-world-and-story/references/voice.md +1 -1
- package/plugins/cursor/README.md +1 -1
- package/plugins/cursor/agents/art-director.md +2 -2
- package/plugins/cursor/commands/playtest.md +2 -2
- package/plugins/cursor/hooks/brief.md +1 -1
- package/plugins/cursor/hooks/guidance.json +1 -1
- package/plugins/cursor/hooks/vendor/pipeline/pipeline.mjs +6 -6
- package/plugins/cursor/hooks/vendor/studio/pitch.mjs +1 -1
- package/plugins/cursor/rules/funpixel-brief.mdc +1 -1
- package/plugins/cursor/skills/funpixel-3d/references/bake-off.md +3 -3
- package/plugins/cursor/skills/funpixel-3d/references/characters.md +1 -1
- package/plugins/cursor/skills/funpixel-3d/references/hero-route.md +5 -5
- package/plugins/cursor/skills/funpixel-3d/references/level-spec.md +1 -1
- package/plugins/cursor/skills/funpixel-3d/references/levels.md +3 -3
- package/plugins/cursor/skills/funpixel-3d/references/light-and-places.md +3 -3
- package/plugins/cursor/skills/funpixel-3d/references/painted-target.md +7 -7
- package/plugins/cursor/skills/funpixel-3d/references/three-loading.md +4 -4
- package/plugins/cursor/skills/funpixel-3d/references/unity.md +13 -13
- package/plugins/cursor/skills/funpixel-art/references/animation.md +1 -1
- package/plugins/cursor/skills/funpixel-art/references/cast.md +3 -3
- package/plugins/cursor/skills/funpixel-art/references/effects.md +2 -2
- package/plugins/cursor/skills/funpixel-art/references/frames.md +6 -6
- package/plugins/cursor/skills/funpixel-art/references/judging-frames.md +8 -8
- package/plugins/cursor/skills/funpixel-art/references/look.md +4 -4
- package/plugins/cursor/skills/funpixel-art/references/pipeline.md +2 -2
- package/plugins/cursor/skills/funpixel-art/references/prompts.md +4 -4
- package/plugins/cursor/skills/funpixel-art/references/ui.md +15 -15
- package/plugins/cursor/skills/funpixel-art/references/unity.md +14 -14
- package/plugins/cursor/skills/funpixel-audio/references/adaptive-music.md +4 -4
- package/plugins/cursor/skills/funpixel-audio/references/engine.md +2 -2
- package/plugins/cursor/skills/funpixel-audio/references/measure.md +1 -1
- package/plugins/cursor/skills/funpixel-audio/references/unity.md +20 -19
- package/plugins/cursor/skills/funpixel-game-feel/SKILL.md +4 -4
- package/plugins/cursor/skills/funpixel-game-feel/references/contact.md +6 -6
- package/plugins/cursor/skills/funpixel-game-feel/references/unity.md +18 -23
- package/plugins/cursor/skills/funpixel-game-logic/SKILL.md +3 -3
- package/plugins/cursor/skills/funpixel-game-logic/references/balance.md +2 -2
- package/plugins/cursor/skills/funpixel-game-logic/references/depth.md +2 -2
- package/plugins/cursor/skills/funpixel-game-logic/references/escalation.md +5 -5
- package/plugins/cursor/skills/funpixel-game-logic/references/probes.md +10 -10
- package/plugins/cursor/skills/funpixel-game-logic/references/unity.md +28 -28
- package/plugins/cursor/skills/funpixel-game-spine/SKILL.md +1 -1
- package/plugins/cursor/skills/funpixel-game-spine/references/performance.md +2 -2
- package/plugins/cursor/skills/funpixel-game-spine/references/replay.md +11 -11
- package/plugins/cursor/skills/funpixel-game-spine/references/room-api.md +1 -1
- package/plugins/cursor/skills/funpixel-game-spine/references/sdk.md +1 -1
- package/plugins/cursor/skills/funpixel-gdd/SKILL.md +2 -2
- package/plugins/cursor/skills/funpixel-gdd/references/as-built.md +2 -2
- package/plugins/cursor/skills/funpixel-gdd/references/design-measures.md +2 -2
- package/plugins/cursor/skills/funpixel-gdd/references/design-note.md +1 -1
- package/plugins/cursor/skills/funpixel-gdd/references/first-look.md +1 -1
- package/plugins/cursor/skills/funpixel-gdd/references/floors.md +2 -2
- package/plugins/cursor/skills/funpixel-gdd/references/gameplay-contract.md +1 -1
- package/plugins/cursor/skills/funpixel-gdd/references/genre-puzzle.md +4 -4
- package/plugins/cursor/skills/funpixel-gdd/references/genre-racing.md +2 -2
- package/plugins/cursor/skills/funpixel-gdd/references/genre-rpg.md +2 -2
- package/plugins/cursor/skills/funpixel-gdd/references/genre-shooter.md +2 -2
- package/plugins/cursor/skills/funpixel-gdd/references/genre-survival.md +2 -2
- package/plugins/cursor/skills/funpixel-gdd/references/invent-first.md +3 -3
- package/plugins/cursor/skills/funpixel-gdd/references/level-and-fun.md +11 -11
- package/plugins/cursor/skills/funpixel-gdd/references/pages.md +2 -5
- package/plugins/cursor/skills/funpixel-gdd/references/plan-at-size.md +5 -5
- package/plugins/cursor/skills/funpixel-gdd/references/production-tiers.md +11 -11
- package/plugins/cursor/skills/funpixel-gdd/references/sections.md +7 -7
- package/plugins/cursor/skills/funpixel-gdd/references/spec-folder.md +3 -3
- package/plugins/cursor/skills/funpixel-gdd/references/the-path.md +3 -4
- package/plugins/cursor/skills/funpixel-gdd/references/world-and-identity.md +4 -4
- package/plugins/cursor/skills/funpixel-gdd/references/worth.md +4 -4
- package/plugins/cursor/skills/funpixel-mobile-ui/SKILL.md +3 -3
- package/plugins/cursor/skills/funpixel-mobile-ui/references/hud-and-title.md +3 -3
- package/plugins/cursor/skills/funpixel-mobile-ui/references/phone-check.md +1 -1
- package/plugins/cursor/skills/funpixel-mobile-ui/references/recipes.md +1 -1
- package/plugins/cursor/skills/funpixel-mobile-ui/references/restyle-ui.md +11 -11
- package/plugins/cursor/skills/funpixel-mobile-ui/references/unity.md +23 -23
- package/plugins/cursor/skills/funpixel-publish/references/compose.md +1 -1
- package/plugins/cursor/skills/funpixel-publish/references/server-build.md +1 -1
- package/plugins/cursor/skills/funpixel-store/SKILL.md +3 -3
- package/plugins/cursor/skills/funpixel-store/references/app-store.md +1 -1
- package/plugins/cursor/skills/funpixel-store/references/google-play.md +2 -2
- package/plugins/cursor/skills/funpixel-store/references/ios-release.md +19 -20
- package/plugins/cursor/skills/funpixel-store/references/money.md +2 -2
- package/plugins/cursor/skills/funpixel-store/references/purchases-and-review.md +18 -18
- package/plugins/cursor/skills/funpixel-store/references/readiness-page.md +1 -1
- package/plugins/cursor/skills/funpixel-store/references/readiness.md +3 -3
- package/plugins/cursor/skills/funpixel-store/references/unity-store.md +9 -12
- package/plugins/cursor/skills/funpixel-unity-game/SKILL.md +28 -35
- package/plugins/cursor/skills/funpixel-unity-game/references/agent-ops.md +9 -9
- package/plugins/cursor/skills/funpixel-unity-game/references/fixes.md +21 -21
- package/plugins/cursor/skills/funpixel-unity-game/references/from-a-web-game.md +17 -17
- package/plugins/cursor/skills/funpixel-unity-game/references/handing-off.md +4 -4
- package/plugins/cursor/skills/funpixel-unity-game/references/performance.md +10 -14
- package/plugins/cursor/skills/funpixel-unity-game/references/probe.md +4 -4
- package/plugins/cursor/skills/funpixel-unity-game/references/shared-mac.md +1 -1
- package/plugins/cursor/skills/funpixel-unity-game/references/traps.md +13 -14
- package/plugins/cursor/skills/funpixel-verify/references/bar.md +1 -1
- package/plugins/cursor/skills/funpixel-verify/references/fidelity.md +11 -11
- package/plugins/cursor/skills/funpixel-verify/references/mobile-qa.md +10 -10
- package/plugins/cursor/skills/funpixel-verify/references/playtest.md +14 -14
- package/plugins/cursor/skills/funpixel-verify/references/unity.md +11 -11
- package/plugins/cursor/skills/funpixel-world-and-story/SKILL.md +1 -1
- package/plugins/cursor/skills/funpixel-world-and-story/references/atmosphere.md +4 -4
- package/plugins/cursor/skills/funpixel-world-and-story/references/living-world.md +2 -2
- package/plugins/cursor/skills/funpixel-world-and-story/references/opening-and-chapters.md +1 -1
- package/plugins/cursor/skills/funpixel-world-and-story/references/story-at-size.md +2 -2
- package/plugins/cursor/skills/funpixel-world-and-story/references/voice.md +1 -1
- package/plugins/kiro/AGENTS.md +1 -1
- package/plugins/kiro/README.md +1 -1
- package/plugins/kiro/hooks/brief.md +1 -1
- package/plugins/kiro/hooks/guidance.json +1 -1
- package/plugins/kiro/hooks/vendor/pipeline/pipeline.mjs +6 -6
- package/plugins/kiro/hooks/vendor/studio/pitch.mjs +1 -1
- package/plugins/kiro/skills/fp-art-director/SKILL.md +2 -2
- package/plugins/kiro/skills/fp-playtest/SKILL.md +2 -2
- package/plugins/kiro/skills/funpixel-3d/references/bake-off.md +3 -3
- package/plugins/kiro/skills/funpixel-3d/references/characters.md +1 -1
- package/plugins/kiro/skills/funpixel-3d/references/hero-route.md +5 -5
- package/plugins/kiro/skills/funpixel-3d/references/level-spec.md +1 -1
- package/plugins/kiro/skills/funpixel-3d/references/levels.md +3 -3
- package/plugins/kiro/skills/funpixel-3d/references/light-and-places.md +3 -3
- package/plugins/kiro/skills/funpixel-3d/references/painted-target.md +7 -7
- package/plugins/kiro/skills/funpixel-3d/references/three-loading.md +4 -4
- package/plugins/kiro/skills/funpixel-3d/references/unity.md +13 -13
- package/plugins/kiro/skills/funpixel-art/references/animation.md +1 -1
- package/plugins/kiro/skills/funpixel-art/references/cast.md +3 -3
- package/plugins/kiro/skills/funpixel-art/references/effects.md +2 -2
- package/plugins/kiro/skills/funpixel-art/references/frames.md +6 -6
- package/plugins/kiro/skills/funpixel-art/references/judging-frames.md +8 -8
- package/plugins/kiro/skills/funpixel-art/references/look.md +4 -4
- package/plugins/kiro/skills/funpixel-art/references/pipeline.md +2 -2
- package/plugins/kiro/skills/funpixel-art/references/prompts.md +4 -4
- package/plugins/kiro/skills/funpixel-art/references/ui.md +15 -15
- package/plugins/kiro/skills/funpixel-art/references/unity.md +14 -14
- package/plugins/kiro/skills/funpixel-audio/references/adaptive-music.md +4 -4
- package/plugins/kiro/skills/funpixel-audio/references/engine.md +2 -2
- package/plugins/kiro/skills/funpixel-audio/references/measure.md +1 -1
- package/plugins/kiro/skills/funpixel-audio/references/unity.md +20 -19
- package/plugins/kiro/skills/funpixel-game-feel/SKILL.md +4 -4
- package/plugins/kiro/skills/funpixel-game-feel/references/contact.md +6 -6
- package/plugins/kiro/skills/funpixel-game-feel/references/unity.md +18 -23
- package/plugins/kiro/skills/funpixel-game-logic/SKILL.md +3 -3
- package/plugins/kiro/skills/funpixel-game-logic/references/balance.md +2 -2
- package/plugins/kiro/skills/funpixel-game-logic/references/depth.md +2 -2
- package/plugins/kiro/skills/funpixel-game-logic/references/escalation.md +5 -5
- package/plugins/kiro/skills/funpixel-game-logic/references/probes.md +10 -10
- package/plugins/kiro/skills/funpixel-game-logic/references/unity.md +28 -28
- package/plugins/kiro/skills/funpixel-game-spine/SKILL.md +1 -1
- package/plugins/kiro/skills/funpixel-game-spine/references/performance.md +2 -2
- package/plugins/kiro/skills/funpixel-game-spine/references/replay.md +11 -11
- package/plugins/kiro/skills/funpixel-game-spine/references/room-api.md +1 -1
- package/plugins/kiro/skills/funpixel-game-spine/references/sdk.md +1 -1
- package/plugins/kiro/skills/funpixel-gdd/SKILL.md +2 -2
- package/plugins/kiro/skills/funpixel-gdd/references/as-built.md +2 -2
- package/plugins/kiro/skills/funpixel-gdd/references/design-measures.md +2 -2
- package/plugins/kiro/skills/funpixel-gdd/references/design-note.md +1 -1
- package/plugins/kiro/skills/funpixel-gdd/references/first-look.md +1 -1
- package/plugins/kiro/skills/funpixel-gdd/references/floors.md +2 -2
- package/plugins/kiro/skills/funpixel-gdd/references/gameplay-contract.md +1 -1
- package/plugins/kiro/skills/funpixel-gdd/references/genre-puzzle.md +4 -4
- package/plugins/kiro/skills/funpixel-gdd/references/genre-racing.md +2 -2
- package/plugins/kiro/skills/funpixel-gdd/references/genre-rpg.md +2 -2
- package/plugins/kiro/skills/funpixel-gdd/references/genre-shooter.md +2 -2
- package/plugins/kiro/skills/funpixel-gdd/references/genre-survival.md +2 -2
- package/plugins/kiro/skills/funpixel-gdd/references/invent-first.md +3 -3
- package/plugins/kiro/skills/funpixel-gdd/references/level-and-fun.md +11 -11
- package/plugins/kiro/skills/funpixel-gdd/references/pages.md +2 -5
- package/plugins/kiro/skills/funpixel-gdd/references/plan-at-size.md +5 -5
- package/plugins/kiro/skills/funpixel-gdd/references/production-tiers.md +11 -11
- package/plugins/kiro/skills/funpixel-gdd/references/sections.md +7 -7
- package/plugins/kiro/skills/funpixel-gdd/references/spec-folder.md +3 -3
- package/plugins/kiro/skills/funpixel-gdd/references/the-path.md +3 -4
- package/plugins/kiro/skills/funpixel-gdd/references/world-and-identity.md +4 -4
- package/plugins/kiro/skills/funpixel-gdd/references/worth.md +4 -4
- package/plugins/kiro/skills/funpixel-mobile-ui/SKILL.md +3 -3
- package/plugins/kiro/skills/funpixel-mobile-ui/references/hud-and-title.md +3 -3
- package/plugins/kiro/skills/funpixel-mobile-ui/references/phone-check.md +1 -1
- package/plugins/kiro/skills/funpixel-mobile-ui/references/recipes.md +1 -1
- package/plugins/kiro/skills/funpixel-mobile-ui/references/restyle-ui.md +11 -11
- package/plugins/kiro/skills/funpixel-mobile-ui/references/unity.md +23 -23
- package/plugins/kiro/skills/funpixel-publish/references/compose.md +1 -1
- package/plugins/kiro/skills/funpixel-publish/references/server-build.md +1 -1
- package/plugins/kiro/skills/funpixel-store/SKILL.md +3 -3
- package/plugins/kiro/skills/funpixel-store/references/app-store.md +1 -1
- package/plugins/kiro/skills/funpixel-store/references/google-play.md +2 -2
- package/plugins/kiro/skills/funpixel-store/references/ios-release.md +19 -20
- package/plugins/kiro/skills/funpixel-store/references/money.md +2 -2
- package/plugins/kiro/skills/funpixel-store/references/purchases-and-review.md +18 -18
- package/plugins/kiro/skills/funpixel-store/references/readiness-page.md +1 -1
- package/plugins/kiro/skills/funpixel-store/references/readiness.md +3 -3
- package/plugins/kiro/skills/funpixel-store/references/unity-store.md +9 -12
- package/plugins/kiro/skills/funpixel-unity-game/SKILL.md +28 -35
- package/plugins/kiro/skills/funpixel-unity-game/references/agent-ops.md +9 -9
- package/plugins/kiro/skills/funpixel-unity-game/references/fixes.md +21 -21
- package/plugins/kiro/skills/funpixel-unity-game/references/from-a-web-game.md +17 -17
- package/plugins/kiro/skills/funpixel-unity-game/references/handing-off.md +4 -4
- package/plugins/kiro/skills/funpixel-unity-game/references/performance.md +10 -14
- package/plugins/kiro/skills/funpixel-unity-game/references/probe.md +4 -4
- package/plugins/kiro/skills/funpixel-unity-game/references/shared-mac.md +1 -1
- package/plugins/kiro/skills/funpixel-unity-game/references/traps.md +13 -14
- package/plugins/kiro/skills/funpixel-verify/references/bar.md +1 -1
- package/plugins/kiro/skills/funpixel-verify/references/fidelity.md +11 -11
- package/plugins/kiro/skills/funpixel-verify/references/mobile-qa.md +10 -10
- package/plugins/kiro/skills/funpixel-verify/references/playtest.md +14 -14
- package/plugins/kiro/skills/funpixel-verify/references/unity.md +11 -11
- package/plugins/kiro/skills/funpixel-world-and-story/SKILL.md +1 -1
- package/plugins/kiro/skills/funpixel-world-and-story/references/atmosphere.md +4 -4
- package/plugins/kiro/skills/funpixel-world-and-story/references/living-world.md +2 -2
- package/plugins/kiro/skills/funpixel-world-and-story/references/opening-and-chapters.md +1 -1
- package/plugins/kiro/skills/funpixel-world-and-story/references/story-at-size.md +2 -2
- package/plugins/kiro/skills/funpixel-world-and-story/references/voice.md +1 -1
- package/plugins/robin/README.md +1 -1
- package/plugins/robin/claude/README.md +2 -3
- package/plugins/robin/claude/agents/art-director.md +2 -2
- package/plugins/robin/claude/commands/playtest.md +2 -2
- package/plugins/robin/claude/hooks/brief.md +1 -1
- package/plugins/robin/claude/hooks/guidance.json +1 -1
- package/plugins/robin/claude/hooks/vendor/pipeline/pipeline.mjs +6 -6
- package/plugins/robin/claude/hooks/vendor/studio/pitch.mjs +1 -1
- package/plugins/robin/claude/skills/3d/references/bake-off.md +3 -3
- package/plugins/robin/claude/skills/3d/references/characters.md +1 -1
- package/plugins/robin/claude/skills/3d/references/hero-route.md +5 -5
- package/plugins/robin/claude/skills/3d/references/level-spec.md +1 -1
- package/plugins/robin/claude/skills/3d/references/levels.md +3 -3
- package/plugins/robin/claude/skills/3d/references/light-and-places.md +3 -3
- package/plugins/robin/claude/skills/3d/references/painted-target.md +7 -7
- package/plugins/robin/claude/skills/3d/references/three-loading.md +4 -4
- package/plugins/robin/claude/skills/3d/references/unity.md +13 -13
- package/plugins/robin/claude/skills/art/references/animation.md +1 -1
- package/plugins/robin/claude/skills/art/references/cast.md +3 -3
- package/plugins/robin/claude/skills/art/references/effects.md +2 -2
- package/plugins/robin/claude/skills/art/references/frames.md +6 -6
- package/plugins/robin/claude/skills/art/references/judging-frames.md +8 -8
- package/plugins/robin/claude/skills/art/references/look.md +4 -4
- package/plugins/robin/claude/skills/art/references/pipeline.md +2 -2
- package/plugins/robin/claude/skills/art/references/prompts.md +4 -4
- package/plugins/robin/claude/skills/art/references/ui.md +15 -15
- package/plugins/robin/claude/skills/art/references/unity.md +14 -14
- package/plugins/robin/claude/skills/audio/references/adaptive-music.md +4 -4
- package/plugins/robin/claude/skills/audio/references/engine.md +2 -2
- package/plugins/robin/claude/skills/audio/references/measure.md +1 -1
- package/plugins/robin/claude/skills/audio/references/unity.md +20 -19
- package/plugins/robin/claude/skills/game-feel/SKILL.md +4 -4
- package/plugins/robin/claude/skills/game-feel/references/contact.md +6 -6
- package/plugins/robin/claude/skills/game-feel/references/unity.md +18 -23
- package/plugins/robin/claude/skills/game-logic/SKILL.md +3 -3
- package/plugins/robin/claude/skills/game-logic/references/balance.md +2 -2
- package/plugins/robin/claude/skills/game-logic/references/depth.md +2 -2
- package/plugins/robin/claude/skills/game-logic/references/escalation.md +5 -5
- package/plugins/robin/claude/skills/game-logic/references/probes.md +10 -10
- package/plugins/robin/claude/skills/game-logic/references/unity.md +28 -28
- package/plugins/robin/claude/skills/game-spine/SKILL.md +1 -1
- package/plugins/robin/claude/skills/game-spine/references/performance.md +2 -2
- package/plugins/robin/claude/skills/game-spine/references/replay.md +11 -11
- package/plugins/robin/claude/skills/game-spine/references/room-api.md +1 -1
- package/plugins/robin/claude/skills/game-spine/references/sdk.md +1 -1
- package/plugins/robin/claude/skills/gdd/SKILL.md +2 -2
- package/plugins/robin/claude/skills/gdd/references/as-built.md +2 -2
- package/plugins/robin/claude/skills/gdd/references/design-measures.md +2 -2
- package/plugins/robin/claude/skills/gdd/references/design-note.md +1 -1
- package/plugins/robin/claude/skills/gdd/references/first-look.md +1 -1
- package/plugins/robin/claude/skills/gdd/references/floors.md +2 -2
- package/plugins/robin/claude/skills/gdd/references/gameplay-contract.md +1 -1
- package/plugins/robin/claude/skills/gdd/references/genre-puzzle.md +4 -4
- package/plugins/robin/claude/skills/gdd/references/genre-racing.md +2 -2
- package/plugins/robin/claude/skills/gdd/references/genre-rpg.md +2 -2
- package/plugins/robin/claude/skills/gdd/references/genre-shooter.md +2 -2
- package/plugins/robin/claude/skills/gdd/references/genre-survival.md +2 -2
- package/plugins/robin/claude/skills/gdd/references/invent-first.md +3 -3
- package/plugins/robin/claude/skills/gdd/references/level-and-fun.md +11 -11
- package/plugins/robin/claude/skills/gdd/references/pages.md +2 -5
- package/plugins/robin/claude/skills/gdd/references/plan-at-size.md +5 -5
- package/plugins/robin/claude/skills/gdd/references/production-tiers.md +11 -11
- package/plugins/robin/claude/skills/gdd/references/sections.md +7 -7
- package/plugins/robin/claude/skills/gdd/references/spec-folder.md +3 -3
- package/plugins/robin/claude/skills/gdd/references/the-path.md +3 -4
- package/plugins/robin/claude/skills/gdd/references/world-and-identity.md +4 -4
- package/plugins/robin/claude/skills/gdd/references/worth.md +4 -4
- package/plugins/robin/claude/skills/mobile-ui/SKILL.md +3 -3
- package/plugins/robin/claude/skills/mobile-ui/references/hud-and-title.md +3 -3
- package/plugins/robin/claude/skills/mobile-ui/references/phone-check.md +1 -1
- package/plugins/robin/claude/skills/mobile-ui/references/recipes.md +1 -1
- package/plugins/robin/claude/skills/mobile-ui/references/restyle-ui.md +11 -11
- package/plugins/robin/claude/skills/mobile-ui/references/unity.md +23 -23
- package/plugins/robin/claude/skills/publishing/references/compose.md +1 -1
- package/plugins/robin/claude/skills/publishing/references/server-build.md +1 -1
- package/plugins/robin/claude/skills/store/SKILL.md +3 -3
- package/plugins/robin/claude/skills/store/references/app-store.md +1 -1
- package/plugins/robin/claude/skills/store/references/google-play.md +2 -2
- package/plugins/robin/claude/skills/store/references/ios-release.md +19 -20
- package/plugins/robin/claude/skills/store/references/money.md +2 -2
- package/plugins/robin/claude/skills/store/references/purchases-and-review.md +18 -18
- package/plugins/robin/claude/skills/store/references/readiness-page.md +1 -1
- package/plugins/robin/claude/skills/store/references/readiness.md +3 -3
- package/plugins/robin/claude/skills/store/references/unity-store.md +9 -12
- package/plugins/robin/claude/skills/unity-game/SKILL.md +28 -35
- package/plugins/robin/claude/skills/unity-game/references/agent-ops.md +9 -9
- package/plugins/robin/claude/skills/unity-game/references/fixes.md +21 -21
- package/plugins/robin/claude/skills/unity-game/references/from-a-web-game.md +17 -17
- package/plugins/robin/claude/skills/unity-game/references/handing-off.md +4 -4
- package/plugins/robin/claude/skills/unity-game/references/performance.md +10 -14
- package/plugins/robin/claude/skills/unity-game/references/probe.md +4 -4
- package/plugins/robin/claude/skills/unity-game/references/shared-mac.md +1 -1
- package/plugins/robin/claude/skills/unity-game/references/traps.md +13 -14
- package/plugins/robin/claude/skills/verifying/references/bar.md +1 -1
- package/plugins/robin/claude/skills/verifying/references/fidelity.md +11 -11
- package/plugins/robin/claude/skills/verifying/references/mobile-qa.md +10 -10
- package/plugins/robin/claude/skills/verifying/references/playtest.md +14 -14
- package/plugins/robin/claude/skills/verifying/references/unity.md +11 -11
- package/plugins/robin/claude/skills/world-and-story/SKILL.md +1 -1
- package/plugins/robin/claude/skills/world-and-story/references/atmosphere.md +4 -4
- package/plugins/robin/claude/skills/world-and-story/references/living-world.md +2 -2
- package/plugins/robin/claude/skills/world-and-story/references/opening-and-chapters.md +1 -1
- package/plugins/robin/claude/skills/world-and-story/references/story-at-size.md +2 -2
- package/plugins/robin/claude/skills/world-and-story/references/voice.md +1 -1
- package/plugins/robin/skills/fp-playtest/SKILL.md +2 -2
- package/plugins/robin/skills/funpixel-3d/references/bake-off.md +3 -3
- package/plugins/robin/skills/funpixel-3d/references/characters.md +1 -1
- package/plugins/robin/skills/funpixel-3d/references/hero-route.md +5 -5
- package/plugins/robin/skills/funpixel-3d/references/level-spec.md +1 -1
- package/plugins/robin/skills/funpixel-3d/references/levels.md +3 -3
- package/plugins/robin/skills/funpixel-3d/references/light-and-places.md +3 -3
- package/plugins/robin/skills/funpixel-3d/references/painted-target.md +7 -7
- package/plugins/robin/skills/funpixel-3d/references/three-loading.md +4 -4
- package/plugins/robin/skills/funpixel-3d/references/unity.md +13 -13
- package/plugins/robin/skills/funpixel-art/references/animation.md +1 -1
- package/plugins/robin/skills/funpixel-art/references/cast.md +3 -3
- package/plugins/robin/skills/funpixel-art/references/effects.md +2 -2
- package/plugins/robin/skills/funpixel-art/references/frames.md +6 -6
- package/plugins/robin/skills/funpixel-art/references/judging-frames.md +8 -8
- package/plugins/robin/skills/funpixel-art/references/look.md +4 -4
- package/plugins/robin/skills/funpixel-art/references/pipeline.md +2 -2
- package/plugins/robin/skills/funpixel-art/references/prompts.md +4 -4
- package/plugins/robin/skills/funpixel-art/references/ui.md +15 -15
- package/plugins/robin/skills/funpixel-art/references/unity.md +14 -14
- package/plugins/robin/skills/funpixel-audio/references/adaptive-music.md +4 -4
- package/plugins/robin/skills/funpixel-audio/references/engine.md +2 -2
- package/plugins/robin/skills/funpixel-audio/references/measure.md +1 -1
- package/plugins/robin/skills/funpixel-audio/references/unity.md +20 -19
- package/plugins/robin/skills/funpixel-brief/SKILL.md +1 -1
- package/plugins/robin/skills/funpixel-game-feel/SKILL.md +4 -4
- package/plugins/robin/skills/funpixel-game-feel/references/contact.md +6 -6
- package/plugins/robin/skills/funpixel-game-feel/references/unity.md +18 -23
- package/plugins/robin/skills/funpixel-game-logic/SKILL.md +3 -3
- package/plugins/robin/skills/funpixel-game-logic/references/balance.md +2 -2
- package/plugins/robin/skills/funpixel-game-logic/references/depth.md +2 -2
- package/plugins/robin/skills/funpixel-game-logic/references/escalation.md +5 -5
- package/plugins/robin/skills/funpixel-game-logic/references/probes.md +10 -10
- package/plugins/robin/skills/funpixel-game-logic/references/unity.md +28 -28
- package/plugins/robin/skills/funpixel-game-spine/SKILL.md +1 -1
- package/plugins/robin/skills/funpixel-game-spine/references/performance.md +2 -2
- package/plugins/robin/skills/funpixel-game-spine/references/replay.md +11 -11
- package/plugins/robin/skills/funpixel-game-spine/references/room-api.md +1 -1
- package/plugins/robin/skills/funpixel-game-spine/references/sdk.md +1 -1
- package/plugins/robin/skills/funpixel-gdd/SKILL.md +2 -2
- package/plugins/robin/skills/funpixel-gdd/references/as-built.md +2 -2
- package/plugins/robin/skills/funpixel-gdd/references/design-measures.md +2 -2
- package/plugins/robin/skills/funpixel-gdd/references/design-note.md +1 -1
- package/plugins/robin/skills/funpixel-gdd/references/first-look.md +1 -1
- package/plugins/robin/skills/funpixel-gdd/references/floors.md +2 -2
- package/plugins/robin/skills/funpixel-gdd/references/gameplay-contract.md +1 -1
- package/plugins/robin/skills/funpixel-gdd/references/genre-puzzle.md +4 -4
- package/plugins/robin/skills/funpixel-gdd/references/genre-racing.md +2 -2
- package/plugins/robin/skills/funpixel-gdd/references/genre-rpg.md +2 -2
- package/plugins/robin/skills/funpixel-gdd/references/genre-shooter.md +2 -2
- package/plugins/robin/skills/funpixel-gdd/references/genre-survival.md +2 -2
- package/plugins/robin/skills/funpixel-gdd/references/invent-first.md +3 -3
- package/plugins/robin/skills/funpixel-gdd/references/level-and-fun.md +11 -11
- package/plugins/robin/skills/funpixel-gdd/references/pages.md +2 -5
- package/plugins/robin/skills/funpixel-gdd/references/plan-at-size.md +5 -5
- package/plugins/robin/skills/funpixel-gdd/references/production-tiers.md +11 -11
- package/plugins/robin/skills/funpixel-gdd/references/sections.md +7 -7
- package/plugins/robin/skills/funpixel-gdd/references/spec-folder.md +3 -3
- package/plugins/robin/skills/funpixel-gdd/references/the-path.md +3 -4
- package/plugins/robin/skills/funpixel-gdd/references/world-and-identity.md +4 -4
- package/plugins/robin/skills/funpixel-gdd/references/worth.md +4 -4
- package/plugins/robin/skills/funpixel-mobile-ui/SKILL.md +3 -3
- package/plugins/robin/skills/funpixel-mobile-ui/references/hud-and-title.md +3 -3
- package/plugins/robin/skills/funpixel-mobile-ui/references/phone-check.md +1 -1
- package/plugins/robin/skills/funpixel-mobile-ui/references/recipes.md +1 -1
- package/plugins/robin/skills/funpixel-mobile-ui/references/restyle-ui.md +11 -11
- package/plugins/robin/skills/funpixel-mobile-ui/references/unity.md +23 -23
- package/plugins/robin/skills/funpixel-publish/references/compose.md +1 -1
- package/plugins/robin/skills/funpixel-publish/references/server-build.md +1 -1
- package/plugins/robin/skills/funpixel-store/SKILL.md +3 -3
- package/plugins/robin/skills/funpixel-store/references/app-store.md +1 -1
- package/plugins/robin/skills/funpixel-store/references/google-play.md +2 -2
- package/plugins/robin/skills/funpixel-store/references/ios-release.md +19 -20
- package/plugins/robin/skills/funpixel-store/references/money.md +2 -2
- package/plugins/robin/skills/funpixel-store/references/purchases-and-review.md +18 -18
- package/plugins/robin/skills/funpixel-store/references/readiness-page.md +1 -1
- package/plugins/robin/skills/funpixel-store/references/readiness.md +3 -3
- package/plugins/robin/skills/funpixel-store/references/unity-store.md +9 -12
- package/plugins/robin/skills/funpixel-unity-game/SKILL.md +28 -35
- package/plugins/robin/skills/funpixel-unity-game/references/agent-ops.md +9 -9
- package/plugins/robin/skills/funpixel-unity-game/references/fixes.md +21 -21
- package/plugins/robin/skills/funpixel-unity-game/references/from-a-web-game.md +17 -17
- package/plugins/robin/skills/funpixel-unity-game/references/handing-off.md +4 -4
- package/plugins/robin/skills/funpixel-unity-game/references/performance.md +10 -14
- package/plugins/robin/skills/funpixel-unity-game/references/probe.md +4 -4
- package/plugins/robin/skills/funpixel-unity-game/references/shared-mac.md +1 -1
- package/plugins/robin/skills/funpixel-unity-game/references/traps.md +13 -14
- package/plugins/robin/skills/funpixel-verify/references/bar.md +1 -1
- package/plugins/robin/skills/funpixel-verify/references/fidelity.md +11 -11
- package/plugins/robin/skills/funpixel-verify/references/mobile-qa.md +10 -10
- package/plugins/robin/skills/funpixel-verify/references/playtest.md +14 -14
- package/plugins/robin/skills/funpixel-verify/references/unity.md +11 -11
- package/plugins/robin/skills/funpixel-world-and-story/SKILL.md +1 -1
- package/plugins/robin/skills/funpixel-world-and-story/references/atmosphere.md +4 -4
- package/plugins/robin/skills/funpixel-world-and-story/references/living-world.md +2 -2
- package/plugins/robin/skills/funpixel-world-and-story/references/opening-and-chapters.md +1 -1
- package/plugins/robin/skills/funpixel-world-and-story/references/story-at-size.md +2 -2
- package/plugins/robin/skills/funpixel-world-and-story/references/voice.md +1 -1
- package/templates/common/.agents/skills/funpixel-3d/references/bake-off.md +3 -3
- package/templates/common/.agents/skills/funpixel-3d/references/characters.md +1 -1
- package/templates/common/.agents/skills/funpixel-3d/references/hero-route.md +5 -5
- package/templates/common/.agents/skills/funpixel-3d/references/level-spec.md +1 -1
- package/templates/common/.agents/skills/funpixel-3d/references/levels.md +3 -3
- package/templates/common/.agents/skills/funpixel-3d/references/light-and-places.md +3 -3
- package/templates/common/.agents/skills/funpixel-3d/references/painted-target.md +7 -7
- package/templates/common/.agents/skills/funpixel-3d/references/three-loading.md +4 -4
- package/templates/common/.agents/skills/funpixel-3d/references/unity.md +13 -13
- package/templates/common/.agents/skills/funpixel-art/references/animation.md +1 -1
- package/templates/common/.agents/skills/funpixel-art/references/cast.md +3 -3
- package/templates/common/.agents/skills/funpixel-art/references/effects.md +2 -2
- package/templates/common/.agents/skills/funpixel-art/references/frames.md +6 -6
- package/templates/common/.agents/skills/funpixel-art/references/judging-frames.md +8 -8
- package/templates/common/.agents/skills/funpixel-art/references/look.md +4 -4
- package/templates/common/.agents/skills/funpixel-art/references/pipeline.md +2 -2
- package/templates/common/.agents/skills/funpixel-art/references/prompts.md +4 -4
- package/templates/common/.agents/skills/funpixel-art/references/ui.md +15 -15
- package/templates/common/.agents/skills/funpixel-art/references/unity.md +14 -14
- package/templates/common/.agents/skills/funpixel-audio/references/adaptive-music.md +4 -4
- package/templates/common/.agents/skills/funpixel-audio/references/engine.md +2 -2
- package/templates/common/.agents/skills/funpixel-audio/references/measure.md +1 -1
- package/templates/common/.agents/skills/funpixel-audio/references/unity.md +20 -19
- package/templates/common/.agents/skills/funpixel-game-feel/SKILL.md +4 -4
- package/templates/common/.agents/skills/funpixel-game-feel/references/contact.md +6 -6
- package/templates/common/.agents/skills/funpixel-game-feel/references/unity.md +18 -23
- package/templates/common/.agents/skills/funpixel-game-logic/SKILL.md +3 -3
- package/templates/common/.agents/skills/funpixel-game-logic/references/balance.md +2 -2
- package/templates/common/.agents/skills/funpixel-game-logic/references/depth.md +2 -2
- package/templates/common/.agents/skills/funpixel-game-logic/references/escalation.md +5 -5
- package/templates/common/.agents/skills/funpixel-game-logic/references/probes.md +10 -10
- package/templates/common/.agents/skills/funpixel-game-logic/references/unity.md +28 -28
- package/templates/common/.agents/skills/funpixel-game-spine/SKILL.md +1 -1
- package/templates/common/.agents/skills/funpixel-game-spine/references/performance.md +2 -2
- package/templates/common/.agents/skills/funpixel-game-spine/references/replay.md +11 -11
- package/templates/common/.agents/skills/funpixel-game-spine/references/room-api.md +1 -1
- package/templates/common/.agents/skills/funpixel-game-spine/references/sdk.md +1 -1
- package/templates/common/.agents/skills/funpixel-gdd/SKILL.md +2 -2
- package/templates/common/.agents/skills/funpixel-gdd/references/as-built.md +2 -2
- package/templates/common/.agents/skills/funpixel-gdd/references/design-measures.md +2 -2
- package/templates/common/.agents/skills/funpixel-gdd/references/design-note.md +1 -1
- package/templates/common/.agents/skills/funpixel-gdd/references/first-look.md +1 -1
- package/templates/common/.agents/skills/funpixel-gdd/references/floors.md +2 -2
- package/templates/common/.agents/skills/funpixel-gdd/references/gameplay-contract.md +1 -1
- package/templates/common/.agents/skills/funpixel-gdd/references/genre-puzzle.md +4 -4
- package/templates/common/.agents/skills/funpixel-gdd/references/genre-racing.md +2 -2
- package/templates/common/.agents/skills/funpixel-gdd/references/genre-rpg.md +2 -2
- package/templates/common/.agents/skills/funpixel-gdd/references/genre-shooter.md +2 -2
- package/templates/common/.agents/skills/funpixel-gdd/references/genre-survival.md +2 -2
- package/templates/common/.agents/skills/funpixel-gdd/references/invent-first.md +3 -3
- package/templates/common/.agents/skills/funpixel-gdd/references/level-and-fun.md +11 -11
- package/templates/common/.agents/skills/funpixel-gdd/references/pages.md +2 -5
- package/templates/common/.agents/skills/funpixel-gdd/references/plan-at-size.md +5 -5
- package/templates/common/.agents/skills/funpixel-gdd/references/production-tiers.md +11 -11
- package/templates/common/.agents/skills/funpixel-gdd/references/sections.md +7 -7
- package/templates/common/.agents/skills/funpixel-gdd/references/spec-folder.md +3 -3
- package/templates/common/.agents/skills/funpixel-gdd/references/the-path.md +3 -4
- package/templates/common/.agents/skills/funpixel-gdd/references/world-and-identity.md +4 -4
- package/templates/common/.agents/skills/funpixel-gdd/references/worth.md +4 -4
- package/templates/common/.agents/skills/funpixel-mobile-ui/SKILL.md +3 -3
- package/templates/common/.agents/skills/funpixel-mobile-ui/references/hud-and-title.md +3 -3
- package/templates/common/.agents/skills/funpixel-mobile-ui/references/phone-check.md +1 -1
- package/templates/common/.agents/skills/funpixel-mobile-ui/references/recipes.md +1 -1
- package/templates/common/.agents/skills/funpixel-mobile-ui/references/restyle-ui.md +11 -11
- package/templates/common/.agents/skills/funpixel-mobile-ui/references/unity.md +23 -23
- package/templates/common/.agents/skills/funpixel-publish/references/compose.md +1 -1
- package/templates/common/.agents/skills/funpixel-publish/references/server-build.md +1 -1
- package/templates/common/.agents/skills/funpixel-store/SKILL.md +3 -3
- package/templates/common/.agents/skills/funpixel-store/references/app-store.md +1 -1
- package/templates/common/.agents/skills/funpixel-store/references/google-play.md +2 -2
- package/templates/common/.agents/skills/funpixel-store/references/ios-release.md +19 -20
- package/templates/common/.agents/skills/funpixel-store/references/money.md +2 -2
- package/templates/common/.agents/skills/funpixel-store/references/purchases-and-review.md +18 -18
- package/templates/common/.agents/skills/funpixel-store/references/readiness-page.md +1 -1
- package/templates/common/.agents/skills/funpixel-store/references/readiness.md +3 -3
- package/templates/common/.agents/skills/funpixel-store/references/unity-store.md +9 -12
- package/templates/common/.agents/skills/funpixel-unity-game/SKILL.md +28 -35
- package/templates/common/.agents/skills/funpixel-unity-game/references/agent-ops.md +9 -9
- package/templates/common/.agents/skills/funpixel-unity-game/references/fixes.md +21 -21
- package/templates/common/.agents/skills/funpixel-unity-game/references/from-a-web-game.md +17 -17
- package/templates/common/.agents/skills/funpixel-unity-game/references/handing-off.md +4 -4
- package/templates/common/.agents/skills/funpixel-unity-game/references/performance.md +10 -14
- package/templates/common/.agents/skills/funpixel-unity-game/references/probe.md +4 -4
- package/templates/common/.agents/skills/funpixel-unity-game/references/shared-mac.md +1 -1
- package/templates/common/.agents/skills/funpixel-unity-game/references/traps.md +13 -14
- package/templates/common/.agents/skills/funpixel-verify/references/bar.md +1 -1
- package/templates/common/.agents/skills/funpixel-verify/references/fidelity.md +11 -11
- package/templates/common/.agents/skills/funpixel-verify/references/mobile-qa.md +10 -10
- package/templates/common/.agents/skills/funpixel-verify/references/playtest.md +14 -14
- package/templates/common/.agents/skills/funpixel-verify/references/unity.md +11 -11
- package/templates/common/.agents/skills/funpixel-world-and-story/SKILL.md +1 -1
- package/templates/common/.agents/skills/funpixel-world-and-story/references/atmosphere.md +4 -4
- package/templates/common/.agents/skills/funpixel-world-and-story/references/living-world.md +2 -2
- package/templates/common/.agents/skills/funpixel-world-and-story/references/opening-and-chapters.md +1 -1
- package/templates/common/.agents/skills/funpixel-world-and-story/references/story-at-size.md +2 -2
- package/templates/common/.agents/skills/funpixel-world-and-story/references/voice.md +1 -1
- package/templates/common/AGENTS.md +1 -1
- package/templates/common/src/platform.ts +1 -1
- package/templates/common/src/probe-human.ts +3 -3
- package/templates/common/src/save.ts +1 -1
- package/templates/common/test/platform.test.ts +1 -1
- package/templates/three-world/src/budget.ts +1 -1
- package/templates/three-world/src/cutouts.ts +2 -2
- package/templates/three-world/src/game.ts +1 -1
- package/templates/three-world/src/models.ts +1 -1
- package/unity/com.funpixel.probe/Runtime/Player/Args.cs +1 -1
- package/unity/com.funpixel.probe/Runtime/Player/Bridge.cs +2 -2
- package/unity/com.funpixel.probe/Runtime/Player/Capture.cs +2 -2
- package/unity/com.funpixel.probe/Runtime/Player/Inject.cs +1 -2
- package/unity/com.funpixel.probe/Runtime/Player/Probe.cs +2 -2
- package/unity/com.funpixel.probe/Runtime/Player/UiTargets.cs +1 -1
- package/plugins/claude/skills/unity-game/references/studio-packages.md +0 -127
- package/plugins/codex/skills/funpixel-unity-game/references/studio-packages.md +0 -127
- package/plugins/cursor/skills/funpixel-unity-game/references/studio-packages.md +0 -127
- package/plugins/kiro/skills/funpixel-unity-game/references/studio-packages.md +0 -127
- package/plugins/robin/claude/skills/unity-game/references/studio-packages.md +0 -127
- package/plugins/robin/skills/funpixel-unity-game/references/studio-packages.md +0 -127
- 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 (
|
|
22
|
-
removes (5 reverts in 24 hours on
|
|
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
|
-
| "
|
|
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.
|
|
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 (
|
|
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;
|
|
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
|
|
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
|
|
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
|
|
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
|
-
|
|
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.
|
|
61
|
-
- A warm-up that leaves global state changed.
|
|
62
|
-
- Reading "Complete build size": in
|
|
63
|
-
- Test files in `Resources/`.
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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;
|
|
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
|
|
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 (
|
|
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
|
|
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` (
|
|
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
|
|
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
|
|
44
|
-
|
|
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 (
|
|
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
|
|
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 (
|
|
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 (
|
|
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:
|
|
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
|
|
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.
|
|
4
|
-
third-person horror chapter
|
|
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:
|
|
46
|
-
seat could only say the target's pile and squish were missing;
|
|
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
|
|
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:
|
|
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
|
|
81
|
-
|
|
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
|
|
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,
|
|
116
|
-
lanterns and the visible chain (creative 6);
|
|
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.
|
|
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
|
-
|
|
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
|
-
|
|
|
105
|
-
|
|
|
106
|
-
|
|
|
107
|
-
|
|
|
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
|
-
|
|
|
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
|
|
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
|
|
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
|
-
-
|
|
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
|
|
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
|
-
|
|
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 (
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
|
100
|
-
|
|
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
|
-
|
|
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:
|
|
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
|
|
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.
|
|
143
|
-
|
|
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.
|
|
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:
|
|
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`;
|
|
10
|
-
- Build for the Simulator with the
|
|
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`, `-
|
|
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
|
|
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
|
-
|
|
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.
|
|
55
|
-
- A smoke that asserts only "no errors".
|
|
56
|
-
- Reading screenshots and skipping the log. In
|
|
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.
|
|
59
|
-
- A regression test that passes on the old code, as
|
|
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),
|
|
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.
|
|
4
|
-
|
|
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
|
|
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.
|
|
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 (
|
|
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
|
|
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
|
package/templates/common/.agents/skills/funpixel-world-and-story/references/opening-and-chapters.md
CHANGED
|
@@ -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
|
-
|
|
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
|
package/templates/common/.agents/skills/funpixel-world-and-story/references/story-at-size.md
CHANGED
|
@@ -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.
|
|
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.
|
|
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;
|
|
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
|