@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
package/plugins/cursor/README.md
CHANGED
|
@@ -10,4 +10,4 @@ Needs funtools: `npm i -g @funpixel/tools` (the kit's CLI; `npx @funpixel/tools
|
|
|
10
10
|
|
|
11
11
|
Commands: `/first-look`, `/flow`, `/lanes`, `/mobile-qa`, `/new`, `/playtest`, `/publish`, `/smoke-build`, `/verify`.
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
This folder is built from Funpixel's source and published as is: changes made here are replaced by the next release.
|
|
@@ -22,8 +22,8 @@ whole-game target creation belongs to an unresolved or new-game direction.
|
|
|
22
22
|
comfort (match the targets' quality, not their density), and framing numbers left to the owner
|
|
23
23
|
(`funpixel-art`, references/judging-frames.md).
|
|
24
24
|
3. **Generated assets.** The words live in `assets/style.json`: the medium sentence, the palette
|
|
25
|
-
roles, one isolation clause per asset family. Sets drift when each prompt is free text (
|
|
26
|
-
|
|
25
|
+
roles, one isolation clause per asset family. Sets drift when each prompt is free text (one game
|
|
26
|
+
shipped a whole family at 0% chroma), so a new asset changes the subject or the
|
|
27
27
|
repair and keeps the rest of the words.
|
|
28
28
|
4. **Asset specs.** Before generation, list the assets this task needs and settle the choices that
|
|
29
29
|
change the result. For each: family, role size, the reference it uses, the one-line prompt
|
|
@@ -21,7 +21,7 @@ person: it changes nothing in the game, and its steps are suggestions they pick
|
|
|
21
21
|
seat. Each prompt carries those numbers as facts F1, F2, … to read before the frames (Scenario's
|
|
22
22
|
numbers first, then eyes); the report says which facts each seat cited.
|
|
23
23
|
4. Run every seat now, in parallel in the foreground (a background seat answered after a session
|
|
24
|
-
had already ended,
|
|
24
|
+
had already ended, in one game's third session), each as a fresh agent given only the contents of its prompt
|
|
25
25
|
file: one per `seats/<name>.md`, per `versus/<name>.md` and `fidelity/fidelity.md` when printed (and `fidelity/ui.md` from step 5), each a general-purpose
|
|
26
26
|
agent (the `critic` agent's own format would override the prompt's), and the `player` agent with
|
|
27
27
|
`player.md` at phone size. The Mobile QA seat (`mobile/mobile-qa.md`, the `mobile-qa` agent: is
|
|
@@ -45,7 +45,7 @@ person: it changes nothing in the game, and its steps are suggestions they pick
|
|
|
45
45
|
(`.funtools/playtest/history.json`: panel axes, the experience bar, the blind player, minutes of
|
|
46
46
|
real play, fidelity per moment and the AD lines, every round), with each drop marked. When it
|
|
47
47
|
opens with "Look at the captures first", open those frames before trusting any score: a view
|
|
48
|
-
that never reached its beat is scored as the wrong game (
|
|
48
|
+
that never reached its beat is scored as the wrong game (one game scored 4.9 on views stuck at
|
|
49
49
|
the opening shot, 6.55 once they reached their beats). A thing on the list that is lost is a
|
|
50
50
|
regression: the report leads with it and exits 1, the flow makes putting it back the round's first
|
|
51
51
|
step, and only the owner takes an item off (`playtest keep --drop K<n> --by owner "<their words>"`).
|
|
@@ -87,7 +87,7 @@ the demo with your game (`rules.ts`, `session.ts`, `game.ts`, `feel.ts`, `hud.ts
|
|
|
87
87
|
paths, an environment map (they render flat grey without one), and `mixer.update(dt)` every frame.
|
|
88
88
|
- Pixi: every display object gets a `.label`; `window.__PIXI_APP__ = app` after `app.init()`.
|
|
89
89
|
- Room codes, share codes and seeds carry `data-funpixel-selectable` (else they cannot be copied).
|
|
90
|
-
- `@funpixel/sdk` is pinned exactly (`"0.
|
|
90
|
+
- `@funpixel/sdk` is pinned exactly (`"0.7.0"`). Import the root only for `setupGameResize`;
|
|
91
91
|
everything else from a subpath. Multiplayer is `Room.autoJoin(getGameKey(), …)`, never a raw
|
|
92
92
|
WebSocket (skill `funpixel-game-spine`).
|
|
93
93
|
- A performance fix changes how a frame is made (pooling, atlases, instancing), never what it shows.
|
|
@@ -16,7 +16,7 @@ export const PANEL_DEFAULT = 7.3;
|
|
|
16
16
|
export const CATALOGUE = {
|
|
17
17
|
pitch: {
|
|
18
18
|
title: 'Invent and pitch',
|
|
19
|
-
why: 'a game whose answers are generic loses to one that invented something (
|
|
19
|
+
why: 'a game whose answers are generic loses to one that invented something (an A/B, 3 of 3 seats)',
|
|
20
20
|
gates: [{ kind: 'gdd', headings: ['The invention'] }, { kind: 'studio' }, { kind: 'worth' }],
|
|
21
21
|
rules: [
|
|
22
22
|
'Answer the six forcing questions for THIS game in the GDD\'s `## The invention`: what the core object means, why the verb exists in this world, who wants what (names), what the twist costs, the one system that lives, what only this game has. A generic answer means the idea is not there yet.',
|
|
@@ -71,20 +71,20 @@ export const CATALOGUE = {
|
|
|
71
71
|
},
|
|
72
72
|
'first-look': {
|
|
73
73
|
title: 'First look',
|
|
74
|
-
why: 'identity drifts between frames unless it is locked first (
|
|
74
|
+
why: 'identity drifts between frames unless it is locked first (one game: 7 of 7 redraws on-model with reference sheets)',
|
|
75
75
|
gates: [{ kind: 'refs', min: 1 }, { kind: 'targets', min: 4 }, { kind: 'kit' }, { kind: 'set' }],
|
|
76
76
|
rules: [
|
|
77
77
|
`The whole game, not a few frames (owner, 4 Oct, asked twice): key art; every screen (the title as the play world, pause, the end; past small settings, results, a level select); the HUD on the phone and the desktop; a frame per place, each tied to a story beat; a living-world sheet; an animation board; a juice board; the sound list; the fun page. \`${T} firstlook\` lists what is missing; places and the living world only for a world game.`,
|
|
78
78
|
'Reference sheets (identity lock) BEFORE moment frames; every recurring design drawn with its references and one verbatim style block.',
|
|
79
79
|
'A target frame per hook moment at the play framing (desktop 1280x720, phone held sideways 852x393).',
|
|
80
|
-
`The world's kit beside the hero: sheets of its made parts (structures, ground, props, the living cast), cut into pieces before the slice (\`${T} cut\`); the slice is built from them, never from plain shapes (a fresh
|
|
80
|
+
`The world's kit beside the hero: sheets of its made parts (structures, ground, props, the living cast), cut into pieces before the slice (\`${T} cut\`); the slice is built from them, never from plain shapes (a fresh build shipped code-drawn primitives until the owner's note).`,
|
|
81
81
|
'A picture of every place; no two places alike in shape, material, era and light.',
|
|
82
82
|
'The HUD mockup drawn over a target frame.',
|
|
83
83
|
],
|
|
84
84
|
},
|
|
85
85
|
'core-test': {
|
|
86
86
|
title: 'Core test (A1): the game bites',
|
|
87
|
-
why: 'both
|
|
87
|
+
why: 'both builds of one game spent their rounds on looks and the challenge never bit ("no challenges at all")',
|
|
88
88
|
gates: [{ kind: 'tests' }, { kind: 'sim' }],
|
|
89
89
|
rules: [
|
|
90
90
|
`The GDD's named bots play the REAL level (\`${T} sim\`): an engine-free, fixed-step, seeded sim, plus a replay test.`,
|
|
@@ -119,7 +119,7 @@ export const CATALOGUE = {
|
|
|
119
119
|
},
|
|
120
120
|
expand: {
|
|
121
121
|
title: 'Expand, room by room',
|
|
122
|
-
why: 'our real games are 10 to 18 minutes of designed play, grown room by room from a slice that passed (
|
|
122
|
+
why: 'our real games are 10 to 18 minutes of designed play, grown room by room from a slice that passed (one plan: "nothing in Rooms 2-6 starts until the slice passes its gates")',
|
|
123
123
|
gates: [{ kind: 'rooms' }],
|
|
124
124
|
rules: [
|
|
125
125
|
`Slice first: a room is opened for building only once the room before it passes (\`${T} rooms open <id>\`); the owner alone releases one early (\`--by owner\`).`,
|
|
@@ -162,7 +162,7 @@ export const CATALOGUE = {
|
|
|
162
162
|
},
|
|
163
163
|
'blind-play': {
|
|
164
164
|
title: 'Blind play from the title',
|
|
165
|
-
why: 'blind players from the title found the blockers no panel could
|
|
165
|
+
why: 'blind players from the title found the blockers no panel could',
|
|
166
166
|
gates: [{ kind: 'play' }, { kind: 'sim' }],
|
|
167
167
|
rules: [
|
|
168
168
|
`A blind player from the title, no instructions (\`${T} play\`): a stall counts as blocking.`,
|
|
@@ -51,7 +51,7 @@ export const CATALOGUE = [
|
|
|
51
51
|
{ id: 'cutscenes', label: 'Cutscenes', why: 'one earned cinematic (the ending, a reveal), skippable', cost: '$1–3 each, plus a scene to stage' },
|
|
52
52
|
{ id: 'photo', label: 'Photo mode', why: 'players share the wow moments; the share card carries the game', cost: 'a free camera, a frame and a share sheet: about a day' },
|
|
53
53
|
{ id: 'multiplayer', label: 'Multiplayer', why: 'friends in one room through the relay', cost: 'doubles the test work; the host owns the world state' },
|
|
54
|
-
{ id: 'two-takes', label: 'Two takes', why: 'for a deep game: two parallel builds of the same locked plan, each winning different areas (one the environment, one the dynamics); `funtools compare-takes` plays both from the title and writes a best-of-both table, and the mix beats both (
|
|
54
|
+
{ id: 'two-takes', label: 'Two takes', why: 'for a deep game: two parallel builds of the same locked plan, each winning different areas (one the environment, one the dynamics); `funtools compare-takes` plays both from the title and writes a best-of-both table, and the mix beats both (one game, 3 rounds)', cost: 'twice the build sessions, plus a merge round' },
|
|
55
55
|
{ id: 'none', label: 'None', why: 'everything goes into the core' },
|
|
56
56
|
],
|
|
57
57
|
},
|
|
@@ -93,7 +93,7 @@ the demo with your game (`rules.ts`, `session.ts`, `game.ts`, `feel.ts`, `hud.ts
|
|
|
93
93
|
paths, an environment map (they render flat grey without one), and `mixer.update(dt)` every frame.
|
|
94
94
|
- Pixi: every display object gets a `.label`; `window.__PIXI_APP__ = app` after `app.init()`.
|
|
95
95
|
- Room codes, share codes and seeds carry `data-funpixel-selectable` (else they cannot be copied).
|
|
96
|
-
- `@funpixel/sdk` is pinned exactly (`"0.
|
|
96
|
+
- `@funpixel/sdk` is pinned exactly (`"0.7.0"`). Import the root only for `setupGameResize`;
|
|
97
97
|
everything else from a subpath. Multiplayer is `Room.autoJoin(getGameKey(), …)`, never a raw
|
|
98
98
|
WebSocket (skill `funpixel-game-spine`).
|
|
99
99
|
- A performance fix changes how a frame is made (pooling, atlases, instancing), never what it shows.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# The model bake-off: several candidates, one judged against the master
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
from turntable sheets;
|
|
3
|
+
One game tried its hero three ways (three providers' takes of the same front picture) and picked
|
|
4
|
+
from turntable sheets; another made two to four models of each crew member before one held.
|
|
5
5
|
A model is the most expensive asset a game makes, and the first one is rarely the keeper. The
|
|
6
6
|
bake-off makes the choice cheap to see and puts it on record.
|
|
7
7
|
|
|
@@ -41,7 +41,7 @@ never before (step 5 of the skill).
|
|
|
41
41
|
|
|
42
42
|
## What it showed on real files
|
|
43
43
|
|
|
44
|
-
On
|
|
44
|
+
On the first game's own models, rendered by the bench: each prop's model was ranked first against its own
|
|
45
45
|
reference picture, by 0.03 to 0.13 over the next (crate, door, lockers, canister, bell); the three
|
|
46
46
|
providers' takes of the hero scored within 0.03 of each other, and well above any prop. The team
|
|
47
47
|
kept the Rodin take for reasons a silhouette cannot see (triangle budget, separable limbs). That is
|
|
@@ -44,7 +44,7 @@ pins up to 8 colours. It changes the paint, not the shape: a knight is not a res
|
|
|
44
44
|
|
|
45
45
|
## When the game poses its own skeleton
|
|
46
46
|
|
|
47
|
-
|
|
47
|
+
A three.js horror game (29 Sep 2026) posed a code skeleton from its sim every frame, and
|
|
48
48
|
its enemies lose limbs, so neither the library nor an auto-rig fit: their bones carry their own
|
|
49
49
|
names, rolls and rest rotations, and none splits a body for severing. What it did instead, run in
|
|
50
50
|
local Blender:
|
|
@@ -4,10 +4,10 @@ The default path for every hero of a 3D game: the player, the rivals, the bosses
|
|
|
4
4
|
prop the player stares at. A choice the person locked (a code-built toy style, a budget of zero
|
|
5
5
|
credits, a library character) overrides it. Environment and background may stay procedural.
|
|
6
6
|
|
|
7
|
-
Why it exists:
|
|
7
|
+
Why it exists: a phone racer was offered `generate_3d_model` in three creator rounds
|
|
8
8
|
and never called it. Its boats and world were boxes, cones and extrusions; stills of tidy
|
|
9
9
|
primitives read as a style, and the blind panel scored the look above 7 while the owner saw "a
|
|
10
|
-
shapes game".
|
|
10
|
+
shapes game". Another game, rooms of code geometry, reached 7.28 against Monument Valley 2's 8.60.
|
|
11
11
|
|
|
12
12
|
## Declared, proven, or named
|
|
13
13
|
|
|
@@ -40,7 +40,7 @@ numbered fact. Three honest states for a code-built hero:
|
|
|
40
40
|
([levels.md](levels.md)): 300K triangles on Meshy 7.1 (the default engine, 2048 px maps,
|
|
41
41
|
about 160 credits), 500K faces and 4096 px PNG maps with `engine: "hunyuan"` (about 135), or
|
|
42
42
|
500K triangles and 4096 px PBR maps with `engine: "rodin"` (about 240; the hard-surface take:
|
|
43
|
-
|
|
43
|
+
one game kept Rodin's crate, door, lockers and bell). A rigged hero stays `standard`, and
|
|
44
44
|
never Rodin (it has no rig).
|
|
45
45
|
|
|
46
46
|
Rodin 2.5 (`engine: "rodin"`) runs only when named and never falls back: static only (with
|
|
@@ -51,12 +51,12 @@ numbered fact. Three honest states for a code-built hero:
|
|
|
51
51
|
`raw: true`: the engine's file untouched (the optimized copy clamps maps to 1024 px), then
|
|
52
52
|
cut it to the device yourself. `npx @funpixel/tools gen model3d --image-asset front.png
|
|
53
53
|
--back-asset back.png --style hero --engine hunyuan --raw` does all of it from the CLI.
|
|
54
|
-
**Fidelity against the views** (
|
|
54
|
+
**Fidelity against the views** (one game's hero, 10 Oct 2026, `npx @funpixel/tools fidelity`):
|
|
55
55
|
from one view the model is a slab whose end views score ~46%; four views (front, back, both
|
|
56
56
|
ends) fix the depth. Projecting the views onto the mesh was the largest single gain (a profile
|
|
57
57
|
84 → 91%), and generation plus projection plateaued near 73% (Hunyuan from four views 72.8%,
|
|
58
58
|
Meshy hero 73.3%: Meshy keeps profiles sharper, Hunyuan the ends). Check the views agree
|
|
59
|
-
first: `fidelity` names views no one object can match (the
|
|
59
|
+
first: `fidelity` names views no one object can match (the hero's drawings drew the drum two
|
|
60
60
|
sizes, which capped even a hand-built mesh at ~74%). For 95% (reached, 95.0% mean), the studio
|
|
61
61
|
order: block the shape in Blender from primitives measured off the views (6.4K faces); render
|
|
62
62
|
the plain mesh in four orthographic views; `gen edit` each render into a paintover in the house
|
|
@@ -93,7 +93,7 @@ A heist in a two-room cottage with a garden:
|
|
|
93
93
|
## Common mistakes
|
|
94
94
|
|
|
95
95
|
- Colliding against the art: a character snags on every table leg and falls through foliage.
|
|
96
|
-
- Colliders for the hero but not the camera:
|
|
96
|
+
- Colliders for the hero but not the camera: one game's shoulder camera entered walls six
|
|
97
97
|
times in one blind phone run and lost her; cast it against the walls and planes at the kit's faces.
|
|
98
98
|
- Dressing before walking the blockout: every prop moved twice.
|
|
99
99
|
- A marker the code asks for that the spec never declared.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Quality levels: one source, a cut per device
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
One game decimated every model once for every device (the station kit 150,000 → 4,000
|
|
4
4
|
triangles, characters → 13,000, props → 1,200–3,000, textures 4096² → 512–1024²). Next to its
|
|
5
5
|
target frames it read flat and melted on a desktop that had headroom to spare, and the untouched
|
|
6
6
|
generations survived only in a git-ignored temporary folder. Levels are the other way to do it:
|
|
@@ -40,7 +40,7 @@ failure: the level is the most the source allows at that quality.
|
|
|
40
40
|
Where the source lives is your call. A generation made with `gen model3d` keeps the provider's
|
|
41
41
|
untouched GLB in `.funtools/sources/models/` (never published); the platform keeps its own copy
|
|
42
42
|
beside the shipped one. Cut from that, never from a file you already decimated: a level cut from
|
|
43
|
-
|
|
43
|
+
its shipped walker (18K triangles) reached only 16K on phone, because the detail it needed
|
|
44
44
|
to trade was already gone.
|
|
45
45
|
|
|
46
46
|
A `hero` generation (`style: "hero"`) is the source this is built for, cut down per device
|
|
@@ -67,7 +67,7 @@ saver or a low GPU gets `phone`; `high` needs a GPU known to be high
|
|
|
67
67
|
(`levelSignals(renderer.getContext())` reads it) and 8 GB; everything else `desktop`. A phone never
|
|
68
68
|
downloads the desktop set. No manifest (a model never cut) loads the plain file, as before.
|
|
69
69
|
|
|
70
|
-
## Measured on
|
|
70
|
+
## Measured on that game's sources (29 Sep 2026)
|
|
71
71
|
|
|
72
72
|
Release build of the engine on a shared M-series laptop; the time is mostly KTX2 texture encoding.
|
|
73
73
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Light, dressing and places: directing the world
|
|
2
2
|
|
|
3
|
-
A world reads as shapes when it is evenly lit, sparsely dressed and the same everywhere.
|
|
4
|
-
|
|
3
|
+
A world reads as shapes when it is evenly lit, sparsely dressed and the same everywhere. One heist
|
|
4
|
+
game's plan was dark and moonlit, with spot-lit art and deep shadow, and its first build came back
|
|
5
5
|
bright and evenly lit. Silt & Signal, by contrast, puts 42k instanced flowers along a clear road and
|
|
6
6
|
gives each of its seven places its own light. The 3D starter (`funtools init --framework three-world`)
|
|
7
7
|
directs all three from data, so you change values instead of writing a renderer:
|
|
@@ -116,7 +116,7 @@ palette (`sky-top`, `sky-horizon`, `ground`, `ground-2`, `stone`, `accent`, `glo
|
|
|
116
116
|
(`grass`, `sand`, `cobble`, `flagstone`, `snow` or `moss`); its kit; its landmark; its road; its
|
|
117
117
|
`density` target; and its `target` picture when the plan has one.
|
|
118
118
|
|
|
119
|
-
|
|
119
|
+
One heist game's spec is the model for a row: each room has a size and shape, a material, an era, a
|
|
120
120
|
light and a colour, and differs from the others in all five. For example:
|
|
121
121
|
|
|
122
122
|
- "Long Gallery, oxblood velvet, cool moonlight from the lunette against warm gold picture lights"
|
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
# From a painted target to a 3D scene that holds up
|
|
2
2
|
|
|
3
|
-
Why this exists:
|
|
3
|
+
Why this exists: one game was built twice from one plan (1 Oct). In both builds the title and
|
|
4
4
|
menus reached their painted targets, and the 3D walk stayed a flat, empty plane under a plain
|
|
5
5
|
sky: a tech demo. In one build the cut-out hero's legs and arms drifted off the body as she
|
|
6
6
|
walked. The walk is the first minutes of play, the stretch that decides whether people stay (the
|
|
7
|
-
hook).
|
|
8
|
-
framings, today beside the target, and the next pass worked on the largest gap.
|
|
9
|
-
boxes and cones handed back as finished) and
|
|
7
|
+
hook). Another game shows the way that worked: every look pass ended in fidelity strips at fixed
|
|
8
|
+
framings, today beside the target, and the next pass worked on the largest gap. A racer (boats of
|
|
9
|
+
boxes and cones handed back as finished) and a puzzle game (57 code primitives) show what happens
|
|
10
10
|
when nobody puts the game beside the picture.
|
|
11
11
|
|
|
12
12
|
## Read the target first (five minutes, written down)
|
|
13
13
|
|
|
14
14
|
Before any code, measure the target frame and write the answers beside it in the GDD's place row:
|
|
15
15
|
|
|
16
|
-
| Read | Example (
|
|
16
|
+
| Read | Example (one game, f3_walk) |
|
|
17
17
|
|---|---|
|
|
18
18
|
| Horizon height, share of frame from the top | 0.42 |
|
|
19
19
|
| Hero height, share of frame | 0.22, standing left of centre |
|
|
@@ -93,7 +93,7 @@ point at a closed gap in its strip did not close it.
|
|
|
93
93
|
|
|
94
94
|
# A walk that reads as a person, in one piece
|
|
95
95
|
|
|
96
|
-
The owner, after
|
|
96
|
+
The owner, after that game: "better walking animations, not like a robot; smooth movement like
|
|
97
97
|
us humans." A robot walk is limbs swinging at a constant speed about fixed points while the body
|
|
98
98
|
glides. A person's walk is the body falling forward and catching itself.
|
|
99
99
|
|
|
@@ -150,7 +150,7 @@ size on screen wins, whichever took less work.
|
|
|
150
150
|
## Many painted cut-outs, one draw call
|
|
151
151
|
|
|
152
152
|
A painted world of props, creatures and folk drawn as one `THREE.Sprite` each costs a draw call
|
|
153
|
-
each:
|
|
153
|
+
each: one build reached 164 against its budget of 150 with about 200 cut-outs. The 3D
|
|
154
154
|
world starter's `src/cutouts.ts` draws every cut-out that shares an atlas as one instanced mesh, so
|
|
155
155
|
300 cut-outs are one draw call. Cut the figures with `npx @funpixel/tools cut sheet.jpg` (clean
|
|
156
156
|
alpha, no paper or floor patches), build the atlas in the page with `atlasFrom([...pngs])` (or use
|
|
@@ -48,8 +48,8 @@ root.traverse((o) => { const m = (o as THREE.Mesh).material as THREE.MeshStandar
|
|
|
48
48
|
|
|
49
49
|
A free HDRI, when the game has one, replaces `RoomEnvironment` as both lighting and sky.
|
|
50
50
|
|
|
51
|
-
Judge the result in the game's own light, not the generator's preview.
|
|
52
|
-
horror game
|
|
51
|
+
Judge the result in the game's own light, not the generator's preview. A dark three.js
|
|
52
|
+
horror game (29 Sep 2026) tuned every material in its loader rather than in the files: the hero's
|
|
53
53
|
suit to metalness 0.3 (it read as chrome under the torch), the crew's cloth to metalness 0 and 72%
|
|
54
54
|
albedo (it burnt white in the beam). Its generated textures read near-black, and lifting the
|
|
55
55
|
enemy's albedo ×1.9 made it go pure white a few metres into a spotlight: a colour above 1 has
|
|
@@ -169,13 +169,13 @@ function floorOffset(mixer: THREE.AnimationMixer, clip: THREE.AnimationClip) {
|
|
|
169
169
|
|
|
170
170
|
Optimized GLBs are often quantized: positions stored as normalized int16, the real scale carried in
|
|
171
171
|
the node. Baking a node transform into that geometry (`geometry.applyMatrix4`) clamps every vertex
|
|
172
|
-
to ±1;
|
|
172
|
+
to ±1; one game's 3 m wall modules stood 1 m tall for a whole pass. Keep transforms in the object
|
|
173
173
|
or instance matrix. The same quantization moves each mesh's scale into its node, so a part scaled
|
|
174
174
|
at runtime (a gauge's fill) has that scale baked back first, or `scale.y = fraction` is not literal.
|
|
175
175
|
|
|
176
176
|
A skinned mesh keeps `frustumCulled = false` (its bind-pose bounds lie), so nothing culls a crowd
|
|
177
177
|
of them: every one animates and casts shadows everywhere. Cull them by distance and screen yourself
|
|
178
|
-
(skill `funpixel-art`, its frames reference, has
|
|
178
|
+
(skill `funpixel-art`, its frames reference, has one game's numbers).
|
|
179
179
|
|
|
180
180
|
Generated models usually face +Z, but not always. Wrap each in a group; yaw the inner model once
|
|
181
181
|
at load (a vehicle whose posed size has x greater than z was authored sideways), and keep steering
|
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
# 3D models from generator to Unity
|
|
2
2
|
|
|
3
|
-
A 3D model can fail in Unity without an error. glTFast (the glTF importer, package `com.unity.cloud.gltfast`) decodes textures embedded in a GLB to raw RGBA32, 4–16 MB each, and imports a web GLB packed with meshopt or WebP as nothing. That made the 3D games 3–5× bigger than the 2D ones:
|
|
3
|
+
A 3D model can fail in Unity without an error. glTFast (the glTF importer, package `com.unity.cloud.gltfast`) decodes textures embedded in a GLB to raw RGBA32, 4–16 MB each, and imports a web GLB packed with meshopt or WebP as nothing. That made the 3D games 3–5× bigger than the 2D ones: one idle game was 386 MB before this pipeline and 106 MB after. This skill takes a model from the generator to a compressed, collidable asset.
|
|
4
4
|
|
|
5
5
|
## Tools
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
Not shipped by the kit: the Unity starter, its checks and the studio scripts (`blender_prep.py`, `render_glb.py`, a collision audit, a size audit). Do the rest with what exists:
|
|
8
8
|
|
|
9
|
-
- Generate into the project: `npx @funpixel/tools gen model3d "<subject>" --image-asset concept.png --unity .` (after `npx @funpixel/tools login`) asks for the engine's own GLB (`--raw`: glTFast reads no Draco, meshopt or KTX2 without three more packages), splits it into `.gltf` + `.bin` + `model__basecolor`/`__normal`/`__mr` textures in `Assets/_Game/Generated/Models/<name>/` (the studio's `glb_split.py`, ported), and writes an import rule that sets those textures once, ASTC 6×6 at most 1024, sRGB only for colour, and keeps `__normal` a NormalMap
|
|
9
|
+
- Generate into the project: `npx @funpixel/tools gen model3d "<subject>" --image-asset concept.png --unity .` (after `npx @funpixel/tools login`) asks for the engine's own GLB (`--raw`: glTFast reads no Draco, meshopt or KTX2 without three more packages), splits it into `.gltf` + `.bin` + `model__basecolor`/`__normal`/`__mr` textures in `Assets/_Game/Generated/Models/<name>/` (the studio's `glb_split.py`, ported), and writes an import rule that sets those textures once, ASTC 6×6 at most 1024, sRGB only for colour, and keeps `__normal` a NormalMap. Checked on 6000.6 with a Meshy and a Hunyuan model: meshes and textures import. The studio's `gen_3d.py` calls fal with a `.env` key: no metering, no cost log.
|
|
10
10
|
|
|
11
11
|
- Prepare in Blender through the kit's bench: `npx @funpixel/tools model --local normalize hero.glb --height-m 1` (unit height), `model --local decimate hero.glb --target-triangles 3000`, `model --local inspect hero.glb` (triangle count). The hosted `inspect_model`, `optimize_model` and `fracture_model` do the same on a model a job made. Joining meshes and moving the origin to the base centre are not in the bench; do them in Blender by hand or in your own script.
|
|
12
12
|
- Proof render: the hosted `render_model`, or `npx @funpixel/tools model --local render hero.glb --frames 3`, gives the three angles.
|
|
13
13
|
- Split a GLB for Unity with gltf-transform (`gltf-transform copy model.glb model.gltf` writes `.gltf` + `.bin` + texture files); name the textures by role (`model__basecolor`, `model__normal`, `model__mr`) so the import rule can find them. gltf-transform also decodes web GLBs (meshopt + WebP).
|
|
14
|
-
- Name split textures by role and keep them under `Art/` or `Models/`, so
|
|
14
|
+
- Name split textures by role and keep them under `Art/` or `Models/`, so the import rule finds them: write it as an `AssetPostprocessor` in `Assets/Editor/`, or use the one `gen --unity` writes.
|
|
15
15
|
- Collision and size audits are your own Edit Mode tests until the checks ship: compare each prop's `Renderer.bounds` with its `Collider.bounds`, and read the Editor's build report for texture formats.
|
|
16
16
|
|
|
17
17
|
Checks: `texture_audit`, `drawn_vs_solid`, `glb_import`, `tri_budget` and `lfs_audit` are proposed, not built (partial versions exist in single games). Until then `model --local inspect` gives the triangle count.
|
|
@@ -45,7 +45,7 @@ Checks: `texture_audit`, `drawn_vs_solid`, `glb_import`, `tri_budget` and `lfs_a
|
|
|
45
45
|
| Kind | Setting |
|
|
46
46
|
|---|---|
|
|
47
47
|
| Model textures | ASTC 6×6, mipmaps, sRGB only for basecolor and emissive, max 512 (props) or 1024 (stalls) |
|
|
48
|
-
| 3D models | default glTFast import of the split `.gltf`; no LODs except
|
|
48
|
+
| 3D models | default glTFast import of the split `.gltf`; no LODs except one game's mid LOD |
|
|
49
49
|
| Rigged characters (FBX) | Generic rig, root `Hips`, Loop Time on, Apply Root Motion off, in-place clips at 30 fps |
|
|
50
50
|
|
|
51
51
|
8. Confirm the import (`glb_import`): every GLB yields at least 1 mesh with more than 0 vertices, and no `.webp` or `.woff2` sits under Assets.
|
|
@@ -55,24 +55,24 @@ Checks: `texture_audit`, `drawn_vs_solid`, `glb_import`, `tri_budget` and `lfs_a
|
|
|
55
55
|
12. Audit the build (`texture_audit`): 0 unwhitelisted RGBA32 textures, RGBA32 total under 1 MB. Mipmapped textures must be power of two; Unity 6000.6 ships a mipmapped non-power-of-two texture as RGBA32 even with an ASTC override.
|
|
56
56
|
13. Store baked binary data as `.bytes` in LFS (`lfs_audit`: 0 tracked binaries over 500 KB outside LFS, no untracked paid art).
|
|
57
57
|
|
|
58
|
-
Rigs: one shared skeleton gives one Animator for the whole cast. Large crowds use no rigs at runtime:
|
|
58
|
+
Rigs: one shared skeleton gives one Animator for the whole cast. Large crowds use no rigs at runtime: one game bakes rigged GLBs to vertex-animation textures.
|
|
59
59
|
|
|
60
60
|
## Worked example
|
|
61
61
|
|
|
62
|
-
|
|
62
|
+
A new 3D idle game, done with the studio's own scripts (proposed for the kit). Steps 2–4 are the report's general pipeline; it does not log them per game.
|
|
63
63
|
|
|
64
64
|
1. Props and stalls as generated GLB; characters as Meshy-rigged FBX (the auto-rig survived import 7 of 7).
|
|
65
65
|
2. Blender prep at 3,000 triangles: joined, unit height, origin at base centre.
|
|
66
66
|
3. A 3-angle proof render and the triangle count.
|
|
67
67
|
4. Split: `.gltf` + `.bin` + `model__basecolor`, `model__normal`, `model__mr` PNGs.
|
|
68
68
|
5. The texture import rule: ASTC 6×6, max 512 for props and 1024 for stalls.
|
|
69
|
-
6. Result: data 315 → 61 MB; the app 386 → 106 MB with the build size settings also on.
|
|
69
|
+
6. Result: data 315 → 61 MB; the app 386 → 106 MB with the build size settings also on. Another game went 229 → 75 MB.
|
|
70
70
|
|
|
71
71
|
## Common mistakes
|
|
72
72
|
|
|
73
|
-
- Importing a web GLB as it is.
|
|
74
|
-
- A prop with no collider, or art bigger than its collider. 42
|
|
75
|
-
- `shader_feature` on a runtime-created material.
|
|
76
|
-
- Baked data as serialised YAML in git.
|
|
73
|
+
- Importing a web GLB as it is. One game's 12 heads "did not import at all", with no error.
|
|
74
|
+
- A prop with no collider, or art bigger than its collider. 42 props in one game could be walked through; another's paperweight art was 54 px taller than its collider; a head drawn 1.15× its hitbox was removed.
|
|
75
|
+
- `shader_feature` on a runtime-created material. One game's instanced sets drew at the origin on device.
|
|
76
|
+
- Baked data as serialised YAML in git. One game's vertex-animation crowd assets are about 70 MB of YAML (minotaur 13.0 MB, cyclops 11.8 MB), and every re-bake adds about 70 MB to history.
|
|
77
77
|
- Paid generations outside LFS: about 840 MB lived on one Mac.
|
|
78
|
-
- Trusting Meshy's Idle preset. It bowed the head to the chest
|
|
78
|
+
- Trusting Meshy's Idle preset. It bowed the head to the chest and was re-keyed in Blender.
|
|
@@ -38,7 +38,7 @@ is edited from, so the frames stay that character.
|
|
|
38
38
|
the distinct poses per cycle.
|
|
39
39
|
- The frames share one scale and one ground line; the feet are each frame's anchor.
|
|
40
40
|
- The sheet draws every frame from the side or the front. An actor seen from above (a maze
|
|
41
|
-
chase, a twin-stick arena) has no ground line, and
|
|
41
|
+
chase, a twin-stick arena) has no ground line, and one run got a side-view gecko back
|
|
42
42
|
for a top-down maze (57 credits, discarded). Give such an actor its two to four key poses as
|
|
43
43
|
`edit_image` pose edits of the top-down sprite (below), stepped at the stride rate.
|
|
44
44
|
- Measured (the studio's animation evals): the character holds across frames, but each
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# The cast: lock first, check second
|
|
2
2
|
|
|
3
|
-
A game with a cast draws each member dozens of times:
|
|
4
|
-
each and its crew in rest, brace and cover poses;
|
|
3
|
+
A game with a cast draws each member dozens of times: one heist game drew its keepers 6 to 13 times
|
|
4
|
+
each and its crew in rest, brace and cover poses; another kept front, back and left pictures of
|
|
5
5
|
every character. What kept them on model was never a better sentence. It was the same picture
|
|
6
6
|
attached to every call, and a look at each result against that picture before it was kept.
|
|
7
7
|
|
|
@@ -68,6 +68,6 @@ measure on any picture.
|
|
|
68
68
|
## What the numbers cannot see
|
|
69
69
|
|
|
70
70
|
They catch a recolour, a lost signature colour, the wrong subject and a changed build. Two crew
|
|
71
|
-
members in one uniform read close by numbers (
|
|
71
|
+
members in one uniform read close by numbers (one heist game's two crew members: 58% outline
|
|
72
72
|
overlap, the same colours). Named features (the face, the earring, what the hand holds) are the
|
|
73
73
|
identity seat's: `npx @funpixel/tools judge identity --concept design/cast/ren/master.png <views…>`.
|
|
@@ -57,7 +57,7 @@ what each one measured. Pick what serves the look the game chose; a clean flat s
|
|
|
57
57
|
9. **In a whole 3D game, read the slow frames.** Averages hide hitches: read p95/p99 at a named
|
|
58
58
|
beat (the first fight, not the whole run), and name what appeared on each slow frame (a shader
|
|
59
59
|
compile, a texture upload) before fixing it. Warm-up, culling skinned actors, a pixel budget,
|
|
60
|
-
pacing to the refresh, and the leaks
|
|
60
|
+
pacing to the refresh, and the leaks one game met: [frames.md](frames.md).
|
|
61
61
|
|
|
62
62
|
## Worked example
|
|
63
63
|
|
|
@@ -76,7 +76,7 @@ textures; at resolution 1 it held 4.1 MB, and on the software renderer its frame
|
|
|
76
76
|
- A custom Pixi filter that redeclares `uInputSize` in the fragment shader: the precisions differ
|
|
77
77
|
from the vertex stage and the program fails to link (a black screen). Pass a varying instead.
|
|
78
78
|
- `EffectComposer` without `OutputPass`: colours come out dark and tone mapping is skipped.
|
|
79
|
-
- A white starburst or full-screen flash on contact:
|
|
79
|
+
- A white starburst or full-screen flash on contact: one racer's (Oct 2026) read as glare, one 38% clipped.
|
|
80
80
|
A small warm glow at the contact point, about 0.16 s, answers the hit.
|
|
81
81
|
- Dither or halftone transparency in a shader: at phone size it reads as a glitch. Fade in broad, slow bands or
|
|
82
82
|
real alpha. To find which module owns a fault, capture with one module off
|
|
@@ -2,13 +2,13 @@
|
|
|
2
2
|
|
|
3
3
|
The recipe lab ([cost](cost.md)) measures one effect in a small scene. A whole game adds things a
|
|
4
4
|
lab never meets: first-use compiles, a crowd of skinned actors, level rebuilds, big retina windows
|
|
5
|
-
and displays faster than 60 Hz. This is what
|
|
5
|
+
and displays faster than 60 Hz. This is what one game (a three.js third-person horror game, 29 Sep
|
|
6
6
|
2026, `design/PERF.md` in its repo) measured, and what each fix bought. The numbers are that game's
|
|
7
7
|
on that machine; the causes recur.
|
|
8
8
|
|
|
9
9
|
## Smooth is a distribution, not an average
|
|
10
10
|
|
|
11
|
-
At 78 fps average
|
|
11
|
+
At 78 fps average that game still stuttered. Read p95, p99 and the worst frame, and where the slow
|
|
12
12
|
frames land. Then name each slow frame's cause before changing anything: on a hitch frame, read
|
|
13
13
|
`renderer.info` for what appeared (new shader programs, textures, geometries). Every hitch it
|
|
14
14
|
found had a cause that showed there.
|
|
@@ -21,7 +21,7 @@ Profile vsync-capped, as a player sees it. An uncapped run (`--disable-frame-rat
|
|
|
21
21
|
the game's own refresh detection into cutting resolution at 2.5 ms frames. And profile on a machine
|
|
22
22
|
nobody is playing on: films and profilers share the GPU and read as lag to the player.
|
|
23
23
|
|
|
24
|
-
## What
|
|
24
|
+
## What that game found, and what each fix bought
|
|
25
25
|
|
|
26
26
|
| Symptom | Cause (measured) | Fix |
|
|
27
27
|
|---|---|---|
|
|
@@ -44,13 +44,13 @@ Results on the same recorded run: desktop 1600×900 @2x worst frame 87 → 29 ms
|
|
|
44
44
|
A 1950×1090 window at pixel ratio 1.5 is 4.8 M pixels through AO, depth of field and bloom:
|
|
45
45
|
GPU-bound (p99 26 ms). On a 120 Hz display, 9 ms frames flip between 8 and 16 ms and judder.
|
|
46
46
|
|
|
47
|
-
- **A pixel budget** caps the ratio by pixel count (
|
|
47
|
+
- **A pixel budget** caps the ratio by pixel count (that game: 2.6 M on desktop, 1.3 M on a phone);
|
|
48
48
|
the DOM HUD stays at full retina.
|
|
49
49
|
- **Pace to the refresh.** Detect the refresh from the fastest frames, judge each second's p90
|
|
50
50
|
against that slot, and when 120 cannot hold, lock to 60 (render every other refresh) before
|
|
51
51
|
lowering resolution.
|
|
52
52
|
- **Hysteresis.** Each resolution change rebuilds the post-processing targets (41 textures, a 70–100
|
|
53
|
-
ms frame), so an oscillating scaler stutters every few seconds.
|
|
53
|
+
ms frame), so an oscillating scaler stutters every few seconds. Its rule: no step up within
|
|
54
54
|
12 s of a step down, five fast seconds to earn one, none after two downs.
|
|
55
55
|
|
|
56
56
|
Result: 119.2 fps on a 120 Hz display at 1950×1090 @2x, p99 9.4 ms, worst 17.5 ms, zero hitches.
|
|
@@ -74,7 +74,7 @@ with its animations paused, removed it.
|
|
|
74
74
|
|
|
75
75
|
## When something glows that should not
|
|
76
76
|
|
|
77
|
-
"Anything that looks like a white ball is a light" held four times in
|
|
77
|
+
"Anything that looks like a white ball is a light" held four times in that game: the torch's
|
|
78
78
|
hotspot on a close surface, the beam cone seen end-on, coral pushed past the bloom's white point,
|
|
79
79
|
and the worst one, an additive ray-marched beam seen down its own axis. From the camera behind her,
|
|
80
80
|
the view ray ran down the whole lit cone and eight summed samples bloomed into a white disc that
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Judging frames against the targets: a fixed rubric, fixes by module, eye comfort
|
|
2
2
|
|
|
3
|
-
From
|
|
3
|
+
From a Unity 6 3D racer (Oct 2026) built by several module agents (world, racers, levels) and one
|
|
4
4
|
integrator. An independent judge scored real captures against the painted targets every round; what follows is
|
|
5
5
|
what held up, with its numbers. `funtools score` measures the same frames (layout, palette and light, density,
|
|
6
6
|
comfort); this is the judge that reads what numbers cannot.
|
|
@@ -16,7 +16,7 @@ comfort); this is the judge that reads what numbers cannot.
|
|
|
16
16
|
|
|
17
17
|
- **The same rubric every round**, written before seeing the frames, so a score moves only when a frame changed.
|
|
18
18
|
- **Full-resolution phone captures from the real build** (the player on the target device size, not the editor, not
|
|
19
|
-
a web stand-in):
|
|
19
|
+
a web stand-in): the racer judged 1172×2532 frames; half-size shots hid the material detail being scored.
|
|
20
20
|
- **Per frame:** a total, the four category scores, the change since last round, and one eye-comfort word
|
|
21
21
|
(yes, mild, glare, busy, no): could a person look at it for a minute without strain?
|
|
22
22
|
|
|
@@ -26,7 +26,7 @@ Every fix names the module that owns it, `[WORLD]`, `[RACERS]`, `[LEVELS]` (or t
|
|
|
26
26
|
frame, the pixel region and the number: "[WORLD] the sun bloom washes out the upper right (11% clipped): bloom
|
|
27
27
|
intensity −50%, exposure −0.4 EV". The integrator routes each tag to that module's agent (its lane, where
|
|
28
28
|
`funtools lanes` runs them), so no agent reads another's list. End with the five changes that would raise the average most,
|
|
29
|
-
each with its expected gain;
|
|
29
|
+
each with its expected gain; the racer's round-2 list predicted 76–80 from 64.
|
|
30
30
|
|
|
31
31
|
**Find the owner before assigning a fault.** Capture the same frame with one module turned off (a launch flag
|
|
32
32
|
per module: no world dressing, no racer effects). The fault that disappears belongs to the module that was off;
|
|
@@ -34,7 +34,7 @@ a stripe under the racer that stays with the effects off is not the effects agen
|
|
|
34
34
|
|
|
35
35
|
## Read the categories, not only the total
|
|
36
36
|
|
|
37
|
-
|
|
37
|
+
The racer's round 2 rose 55.6 → 64.2, but composition gave +5.1 and effects +2.2 while light gave +0.7 and
|
|
38
38
|
detail +0.6: the gain came from removing noise (a white halo, crossing speed lines, a fourth trail), not from
|
|
39
39
|
adding quality. Calm is not finished. When light and detail stall, give materials and lighting a round of their
|
|
40
40
|
own (per place: a key light, a rim, a regrade, authored hero surfaces, a bake-off of each hero asset against
|
|
@@ -48,17 +48,17 @@ frames than the targets are the goal, as long as the quality matches.
|
|
|
48
48
|
- `funtools score` prints each frame's **busyness** (the mean brightness step between neighbouring pixels on a grey
|
|
49
49
|
copy 360 px on its short side) and **clipped share** (pixels at luma ≤ 2 or ≥ 253) beside its target's, and
|
|
50
50
|
stamps the zero board's `comfort` counter. It warns, never fails: over 14, over 1.25× the targets' busiest, or
|
|
51
|
-
over 6% clipped.
|
|
52
|
-
games' frames 2.0–11.9;
|
|
51
|
+
over 6% clipped. The racer's painted targets read 9.2–15.4 there and its web frames 6.9–8.5; our liked
|
|
52
|
+
games' frames 2.0–11.9; one heist game's room read 7.8% clipped before its light round and 0 after.
|
|
53
53
|
- A calm frame has room for detail: add mid-ground surface detail at about half the target's density, low
|
|
54
|
-
contrast and slow (
|
|
54
|
+
contrast and slow (the racer's near road, on its judge's own scale: a bottom-quarter gradient of about 3,
|
|
55
55
|
against 1–2 then and 5–6 in the targets).
|
|
56
56
|
- Clip sources are fixes, not taste: blown bloom, a white flash, an emissive that clips to white instead of
|
|
57
57
|
keeping its colour (clamp it).
|
|
58
58
|
|
|
59
59
|
## Framing calls are the owner's
|
|
60
60
|
|
|
61
|
-
A rubric's framing numbers are a judge's proposal.
|
|
61
|
+
A rubric's framing numbers are a judge's proposal. The racer's rubric asked for the racer at 80% of the frame
|
|
62
62
|
width; the owner settled on about 40%. Record the owner's number as a rule in the GDD (a tuning row), tell the
|
|
63
63
|
judge it is fixed and not to mark it down, and judge what fills the space the smaller hero leaves instead. Ask
|
|
64
64
|
the owner before a judge's hero size, camera height or crop becomes a fix.
|
|
@@ -23,7 +23,7 @@ game, the moves below are what held our bar games' looks together.
|
|
|
23
23
|
procedural proven by a rendered study; "primitives for now" is a stand-in, not a route).
|
|
24
24
|
At the first look the world's kit stands beside the hero: sheets of its structures, ground,
|
|
25
25
|
props and living cast, cut (`npx @funpixel/tools cut`) before the slice is built from them;
|
|
26
|
-
without it
|
|
26
|
+
without it one fresh build coded its world from shapes.
|
|
27
27
|
2. **Write five AD rules.** The critic panel reads them:
|
|
28
28
|
each checkable in a frame (colour roles, outline weight, light, material, actor readability at
|
|
29
29
|
a stated phone size); no universal percentage for hero size.
|
|
@@ -36,7 +36,7 @@ game, the moves below are what held our bar games' looks together.
|
|
|
36
36
|
paying for new art. Check phone and desktop; a rule revised to excuse a defect stops measuring anything.
|
|
37
37
|
For a game with a moment ladder, a target frame per moment and captures of the same seconds
|
|
38
38
|
from a recorded run make a loop: name the biggest difference, fix it, recapture. Judge
|
|
39
|
-
generated models under the game's own light, where
|
|
39
|
+
generated models under the game's own light, where one game's near-black textures were
|
|
40
40
|
lifted into white blow-outs. Both, with what they found:
|
|
41
41
|
[prompts.md](prompts.md#target-frames-at-moments-and-the-loop-that-closes-the-gap).
|
|
42
42
|
Match the targets' quality, not their density (`score` warns on a busy or clipped frame); the rubric,
|
|
@@ -55,7 +55,7 @@ game, the moves below are what held our bar games' looks together.
|
|
|
55
55
|
a target, hero or key art where the comparison is worth its cost.
|
|
56
56
|
- Before the game exists, `npx @funpixel/tools look --sheet` puts every sprite at play heights
|
|
57
57
|
(24, 48, 96 px) on a neutral band and on the real ground colour (`roles.ground` or `--ground`)
|
|
58
|
-
and measures each against it.
|
|
58
|
+
and measures each against it. One game's sheet found its terracotta army vanishing on the
|
|
59
59
|
pass floor at 24 px before any game code.
|
|
60
60
|
- A pixel-art look can be exact rather than imitated: `pixelArt` (scale, palette) in
|
|
61
61
|
`funpixel.json` has `assets process` and `gen` snap every picture to the grid and palette, and
|
|
@@ -89,7 +89,7 @@ funpixel.json `art3d` declares it with its reason and a proof frame (skill `funp
|
|
|
89
89
|
|
|
90
90
|
## Worked example
|
|
91
91
|
|
|
92
|
-
|
|
92
|
+
One game's sandstone rooms wore dark pills: `look --hud` read system type, 20 dark plates and
|
|
93
93
|
the scaffold's glyphs. A `## UI` section chose sandstone plaques, a carved face and an inked icon
|
|
94
94
|
family; a generated plate went in through `border-image`.
|
|
95
95
|
|