@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
|
@@ -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.
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// quiet while its tab is hidden or a host holds it, progress flushed when the page goes (save.ts), fullscreen
|
|
3
3
|
// with the orientation lock on the first tap on a phone, a haptic pulse, and which input the player is using
|
|
4
4
|
// (on-screen controls show only for touch: the owner, 1 Oct, "no need for mobile controls on desktop").
|
|
5
|
-
// The owner's web games carry the same seams (
|
|
5
|
+
// The owner's web games carry the same seams (one has platform.ts, save.ts, fullscreen.ts,
|
|
6
6
|
// portal.ts; its platform test boots with storage that throws). What a check reads is the outcome: progress
|
|
7
7
|
// survives a reload, the game pauses when hidden, the page boots where storage is blocked.
|
|
8
8
|
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
// probe-human.ts — a probe player at a human rate, for test/probes.ts beside the sharp bot: sim reads a level the
|
|
2
|
-
// 60-decisions-a-second bot clears and this one cannot as a wall for people (
|
|
2
|
+
// 60-decisions-a-second bot clears and this one cannot as a wall for people (one race, 30 Sep).
|
|
3
3
|
|
|
4
4
|
import type { Policy } from './probe-kit.ts';
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
7
|
* The same player at a human rate: a fresh decision `hz` times a second (a thumb makes 10–15), each landing `reactMs`
|
|
8
8
|
* late (~200 ms to see and react). Between decisions the hand rests (`rest`, e.g. no press) or, with `hold`, keeps the
|
|
9
|
-
* last input (a steer held down). A level the 60-a-second bot clears and this one cannot is a wall for people (
|
|
10
|
-
*
|
|
9
|
+
* last input (a steer held down). A level the 60-a-second bot clears and this one cannot is a wall for people (one
|
|
10
|
+
* race, 30 Sep). Wrap a policy that decides each call; one with its own press timer slows further.
|
|
11
11
|
*/
|
|
12
12
|
export function humanRate<R, I>(p: Policy<R, I>, dt: number, o: { rest: I; hold?: boolean; hz?: number; reactMs?: number }): Policy<R, I> {
|
|
13
13
|
const hz = o.hz ?? 12, reactMs = o.reactMs ?? 200;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// Saving, engine-free so the rules' tests can load it: storage that never throws and progress kept through the
|
|
2
2
|
// SDK's SaveManager. Yours to reshape (a chapter list, a level map, settings); what a check reads is the
|
|
3
3
|
// outcome: progress survives a reload, and the page boots where storage is blocked (test/platform.test.ts;
|
|
4
|
-
//
|
|
4
|
+
// one of the owner's games boots its own with storage that throws).
|
|
5
5
|
|
|
6
6
|
import { SaveManager } from '@funpixel/sdk/save';
|
|
7
7
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// The page boots where storage is blocked, and progress survives a reload: outcomes a player meets in a
|
|
2
|
-
// sandboxed frame, private browsing or a full disk (
|
|
2
|
+
// sandboxed frame, private browsing or a full disk (one of the owner's games' platform test, in small).
|
|
3
3
|
// save.ts is engine-free so this runs under Node beside the rules.
|
|
4
4
|
|
|
5
5
|
import { test } from 'node:test';
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// fps when a frame stays under ~120 draw calls and ~300k triangles at a pixel ratio of at most 1.5. The
|
|
3
3
|
// pixel ratio steps down by itself when frames run long (and the shadows go first), and back up when there
|
|
4
4
|
// is room. `funtools profile` and `look --hud` read the same facts. Raise a number only after measuring.
|
|
5
|
-
// The quality tier follows the GPU, never the pointer
|
|
5
|
+
// The quality tier follows the GPU, never the pointer: a desktop window in
|
|
6
6
|
// touch emulation reports a coarse pointer and would get the phone's budget. The touch LAYOUT still follows
|
|
7
7
|
// the pointer (controls.tsx). The GPU's name rides in state.render too: a frame time means nothing without
|
|
8
8
|
// it (headless Chrome draws on SwiftShader, no GPU).
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
// Many painted cut-outs for one draw call. One THREE.Sprite per cut-out is a draw call each (
|
|
2
|
-
//
|
|
1
|
+
// Many painted cut-outs for one draw call. One THREE.Sprite per cut-out is a draw call each (one
|
|
2
|
+
// game's build reached 164 against a budget of 150); here every cut-out sharing an atlas is ONE
|
|
3
3
|
// InstancedMesh. Each instance has its place, height, tint, atlas frame and mirror, and a sway and
|
|
4
4
|
// squash the vertex shader bends it by (the foot stays planted, the top moves: animation, not a card
|
|
5
5
|
// bobbing on a stick). They turn round the vertical axis to the camera and cut their edge by alphaTest,
|
|
@@ -61,7 +61,7 @@ export async function startGame(host: HTMLElement): Promise<void> {
|
|
|
61
61
|
Object.assign(window, { __THREEJS_SCENE__: scene, __THREEJS_RENDERER__: renderer, __THREEJS_CAMERA__: camera, camera, THREE, __FPX_CAMERA__: () => cameraReport(rig, renderer.toneMappingExposure) });
|
|
62
62
|
setupGameResize((width, height) => { camera.aspect = width / height; camera.updateProjectionMatrix(); renderer.setSize(width, height); stage.setSize(width, height); });
|
|
63
63
|
startSession(); build();
|
|
64
|
-
// Warm-up: compile every material's shader before the first frame, so play never hitches on one
|
|
64
|
+
// Warm-up: compile every material's shader before the first frame, so play never hitches on one.
|
|
65
65
|
await renderer.compileAsync(scene, camera).catch(() => {});
|
|
66
66
|
const clock = new THREE.Clock(), life = new Living('player', ROLE.hero), lean = { x: 0 }, PLAY_SCREENS = new Set<string>(['playing', 'paused', 'won', 'lost']);
|
|
67
67
|
let lastScreen = '';
|
|
@@ -34,7 +34,7 @@ export async function model(name: string, height: number, placeholder: () => THR
|
|
|
34
34
|
m.scale.setScalar(height / Math.max(size.y, 1e-6));
|
|
35
35
|
m.position.y = -box.min.y * m.scale.y;
|
|
36
36
|
// A skinned mesh's bounds are its bind pose: an animated limb leaves them and the mesh vanishes at the frame's
|
|
37
|
-
// edge
|
|
37
|
+
// edge. One hero is cheap to never cull; a crowd gets real bounds instead.
|
|
38
38
|
m.traverse((o) => { if ((o as THREE.Mesh).isMesh) o.castShadow = true; if ((o as THREE.SkinnedMesh).isSkinnedMesh) o.frustumCulled = false; });
|
|
39
39
|
return new THREE.Group().add(m);
|
|
40
40
|
};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// Launch flags, from the command line and from the FUNPIXEL_PROBE_ARGS environment variable. On iOS, Mono does not see
|
|
2
|
-
// `simctl launch` arguments (
|
|
2
|
+
// `simctl launch` arguments (a package can read them through a native plugin); an environment variable needs no plugin:
|
|
3
3
|
// `SIMCTL_CHILD_FUNPIXEL_PROBE_ARGS="-fp-probe -fp-remote 7611" xcrun simctl launch <udid> <bundle>` sets it for the app.
|
|
4
4
|
// funtools passes both ways on a Mac and the variable on a Simulator. A device run (later) can use the same variable
|
|
5
5
|
// through Xcode's scheme or devicectl's --environment-variables.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// The player bridge: a TCP server on 127.0.0.1 inside a development player (an iOS Simulator shares the Mac's network,
|
|
2
|
-
// so funtools on the Mac reaches a Simulator's player the same way). Lifted from
|
|
3
|
-
// owner's,
|
|
2
|
+
// so funtools on the Mac reaches a Simulator's player the same way). Lifted from one game's remote-play server (the
|
|
3
|
+
// owner's, 661 lines with a Python driver) and made game-agnostic: the game's own facts,
|
|
4
4
|
// targets, views and commands come in through FunpixelProbe; the rest is here.
|
|
5
5
|
//
|
|
6
6
|
// One JSON object per line in ({"cmd": "tap", "x": 100, "y": 200, "id": 7}), one JSON reply per line out
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// Pictures and sound from inside the player, so nothing is read off the screen of the Mac: a still is the frame the
|
|
2
2
|
// game drew (ScreenCapture after the frame, overlay UI included, upright in the game's own orientation, whatever way
|
|
3
|
-
// a Simulator is held), and a recording is frames plus the game's own mix. The recording follows
|
|
4
|
-
//
|
|
3
|
+
// a Simulator is held), and a recording is frames plus the game's own mix. The recording follows one game's
|
|
4
|
+
// recorder (the owner's): game time steps at the recording's rate (Time.captureFramerate) and Unity's offline
|
|
5
5
|
// audio renderer (AudioRenderer) hands over exactly one frame's samples each frame, so picture and sound stay in step
|
|
6
6
|
// however slowly the frames are written. funtools joins them with ffmpeg. Every capture frame is marked for the probe.
|
|
7
7
|
using System;
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
// Input as real Input System device state, so a remote finger takes the whole path a real one does: the EventSystem and
|
|
2
|
-
// its buttons, the game's own touch layer, a HUD's hit test. Lifted from
|
|
3
|
-
// joydle-games/games/pocket-crew), with the game-specific parts left to FunpixelProbe.Target and .Command.
|
|
2
|
+
// its buttons, the game's own touch layer, a HUD's hit test. Lifted from one game's remote-play server (the owner's), with the game-specific parts left to FunpixelProbe.Target and .Command.
|
|
4
3
|
#if FUNPIXEL_INPUT_SYSTEM
|
|
5
4
|
using System;
|
|
6
5
|
using System.Collections.Generic;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// The probe: every frame in the player, read from the engine's own counters (ProfilerRecorder), which work in
|
|
2
2
|
// development players where UnityStats reads 0 in batch mode. Learned from the studio's five probes, each written for
|
|
3
|
-
// one game:
|
|
4
|
-
//
|
|
3
|
+
// one game: hitch probes, perf probes and a perf recorder
|
|
4
|
+
// (the Unity 6 draw counters, the player loop minus its waits as the frame's work).
|
|
5
5
|
//
|
|
6
6
|
// A frame is reported by the frame after it: Unity's counters and a frame's length are known once it has ended, so
|
|
7
7
|
// Update (first in the frame) records the one before. Frames are left out of the numbers, and counted, when they are
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// What a finger can press on screen, as rects in screen pixels (Unity's bottom-left origin): the game's registered
|
|
2
2
|
// targets (FunpixelProbe.Target) and every interactable UGUI Selectable with its name, hierarchy path and text. The
|
|
3
3
|
// text is read from any child component with a string `text` property (UGUI Text, TextMeshPro), so the package needs
|
|
4
|
-
// no TextMeshPro reference. Generalised from
|
|
4
|
+
// no TextMeshPro reference. Generalised from one game's remote-play UI targets.
|
|
5
5
|
using System;
|
|
6
6
|
using System.Collections.Generic;
|
|
7
7
|
using System.Reflection;
|
|
@@ -1,127 +0,0 @@
|
|
|
1
|
-
# The studio's Unity packages
|
|
2
|
-
|
|
3
|
-
The studio's two packages, `com.joydle.core` (0.1.0) and `com.joydle.firebase`, are optional: the
|
|
4
|
-
games inside its repository use both, Knockout Lap, Gallery Heist and Particle Rush the core only,
|
|
5
|
-
and Floe Jam neither. They live in that repository, `joydle/joydle-games` (private: the person needs
|
|
6
|
-
read access), under `packages/`. A game that uses them never writes their pieces again. The field report's starter
|
|
7
|
-
is "the SDK wired, switched off" (Starter project), and a fix made in the package reached every game at
|
|
8
|
-
once (§1). Read as of 9 Oct 2026, from the packages' own code; what changes there wins over this page.
|
|
9
|
-
|
|
10
|
-
## Adding them
|
|
11
|
-
|
|
12
|
-
Every project lists them by `file:` path. Inside the repository that is `file:../../../packages/…`;
|
|
13
|
-
the three outside it (Knockout Lap, Gallery Heist, Particle Rush) use `file:../../joydle-games/packages/…`
|
|
14
|
-
(Knockout Lap, one folder deeper, `../../../`), so `joydle-games` must be cloned beside them, and
|
|
15
|
-
`funtools doctor` warns when the path is missing. A git URL pinned to a commit needs no sibling
|
|
16
|
-
clone (`#main` moves under a store build); no project uses one yet. Run `git lfs install` first: the splash's pictures and sounds are LFS files, and without it they arrive as
|
|
17
|
-
pointer files. Inside the repository the same holds for a checkout whose LFS files were never pulled.
|
|
18
|
-
`funtools doctor` in the game finds pointer files in Assets, Packages, every local package and the
|
|
19
|
-
package cache, and names the repository to run `git lfs pull` in; run it before a build.
|
|
20
|
-
|
|
21
|
-
```json
|
|
22
|
-
"dependencies": {
|
|
23
|
-
"com.joydle.core": "file:../../joydle-games/packages/com.joydle.core",
|
|
24
|
-
"com.joydle.firebase": "file:../../joydle-games/packages/com.joydle.firebase",
|
|
25
|
-
"com.unity.inputsystem": "1.20.0",
|
|
26
|
-
"com.unity.render-pipelines.universal": "17.6.0",
|
|
27
|
-
"com.unity.test-framework": "1.8.0",
|
|
28
|
-
"com.unity.ugui": "2.6.0"
|
|
29
|
-
}
|
|
30
|
-
```
|
|
31
|
-
|
|
32
|
-
The pinned form is `https://github.com/joydle/joydle-games.git?path=/packages/com.joydle.core#<commit>`.
|
|
33
|
-
|
|
34
|
-
- `com.unity.inputsystem` goes in the game's own manifest: the core's assembly references it and its
|
|
35
|
-
`package.json` does not pull it in. Set the player to the new Input System only.
|
|
36
|
-
- `com.unity.purchasing` 5.4.3 comes with the core (StoreKit 2 on iOS, Play Billing on Android).
|
|
37
|
-
- The Firebase package needs Google's packages at 13.17.0 (app, analytics, crashlytics) and the External
|
|
38
|
-
Dependency Manager 1.2.189. The games repository keeps their `.tgz` files in `packages/vendor/` (LFS)
|
|
39
|
-
and lists them by `file:` path; another project keeps the same versions in its own folder, in LFS.
|
|
40
|
-
Each game has its own Firebase project, with its config file under `Assets/`.
|
|
41
|
-
- Take out what no game uses: collab-proxy, learn, visual scripting, the Aseprite and PSD importers
|
|
42
|
-
(Scrap Riot also dropped 2D animation, sprite shape, tilemap extras and timeline: 88 → 78 MiB). Keep
|
|
43
|
-
what a game uses: Gallery Heist loads its rooms through Addressables 4.1 (built into the app, no
|
|
44
|
-
remote catalog) and aims its camera with Cinemachine 6.6, beside VFX Graph, Splines and Timeline.
|
|
45
|
-
No game uses DOTween (`Juice` tweens).
|
|
46
|
-
|
|
47
|
-
## What each piece gives, and the rule it settles
|
|
48
|
-
|
|
49
|
-
Editor side of `com.joydle.core`:
|
|
50
|
-
|
|
51
|
-
| Piece | What it does | Settles |
|
|
52
|
-
|---|---|---|
|
|
53
|
-
| `ProjectConfig.ApplyIOS(name, bundleId, version, landscape)` | Company name, bundle id, IL2CPP, iOS 16, iPhone only, a fixed orientation, status bar hidden, Unity splash off; switches the build target to iOS | settings by script, not a copied file (`fp:unity-game` step 6). It does not set colour space, 48 kHz, render scale, ProMotion, the accelerometer or physics: `Setup.Configure` sets those after it |
|
|
54
|
-
| `ProjectConfig.ApplyAndroid(packageName)` | API 26 to 36 (pinned), ARM64, IL2CPP, App Category game, GameActivity, full screen under cutouts, R8 off (it strips Firebase and purchase classes reached by reflection) | the Android half of the same rule |
|
|
55
|
-
| `BuildTools.Simulator`, `SimulatorDev`, `SimulatorMuted`, `Device`, `TestFlight` | Headless iOS builds (`-executeMethod Joydle.Core.Editor.BuildTools.TestFlight`) into `Builds/iOS-sim` or `Builds/iOS`. Every build applies the size settings (stripping High, engine stripping, IL2CPP OptimizeSize, unused mesh channels off); LZ4HC when `ProjectSettings/JoydleLz4hc.txt` exists. `TestFlight` sets the studio's team and automatic signing, and the build number (`JOYDLE_BUILD_NUMBER`, else a `yyMMddHHmm` stamp) and refuses to build without `Assets/_Game/Art/Icon/app_icon.png`. `SimulatorMuted` turns audio off for that one build and restores it | size settings and LZ4HC ([performance](performance.md) step 8); the icon gate (Porcelain Panic shipped Unity's default icon); the CoreAudio wedge on a Simulator relaunched many times |
|
|
56
|
-
| `BuildTools.Android`, `AndroidApk`, `AndroidDev`, `VersionCode()` | A signed `.aab` with its symbols (refuses without `JOYDLE_KEYSTORE` and `JOYDLE_KEYSTORE_PASS`); a release `.apk` for tests that reads launch args (never upload it); versionCode = minutes since 1 Jan 2026, because the iOS stamp is over Play's 2,100,000,000 cap | Android, planned in the report and built since (§15) |
|
|
57
|
-
| `IosPostprocess` | Writes `ITSAppUsesNonExemptEncryption` false and stamps every embedded framework's minimum OS with the app's | ITMS-90208 (`fp:store`) |
|
|
58
|
-
| `JoydleLaunch` | A black launch storyboard under its own name, for games that play the splash | iOS caches a launch screen by name across updates (§10) |
|
|
59
|
-
| `SplashImport` | Splash parts scaled to a power of two, mipmapped, compressed | 10.3 MB of raw splash in every game, now about 2.6 MB |
|
|
60
|
-
| `TextureBudget` | Textures named `model__basecolor.png` (and `__normal`, `__mr`, `__emissive`) under an `Art/` or `Models/` folder: ASTC 6×6, mipmaps, sRGB only for base colour and emissive, at most 512 under `Food/`, `Props/` or `Characters/`, else 1024 | glTFast's raw RGBA32 model textures (`fp:3d`, Unity page) |
|
|
61
|
-
| `AndroidManifestPost` | Adds the vibrate permission the haptics need | |
|
|
62
|
-
|
|
63
|
-
Runtime side of `com.joydle.core`:
|
|
64
|
-
|
|
65
|
-
| Piece | What it does | Settles |
|
|
66
|
-
|---|---|---|
|
|
67
|
-
| `Sfx.Create(music)`, `Play(clip, volume)`, `Sfx.EnsureListener()` | 8 pooled one-shots with pitch jitter 0.06, one looping music source at 0.45, and exactly one AudioListener | the four silent TestFlight builds (`fp:audio`, Unity page, step 1) |
|
|
68
|
-
| `Haptics.Light`, `Medium`, `Heavy`, `Success`, `Error` | iOS taptics through the package's native plugin, Android vibration effects; off when `Settings.Haptics` is | haptics by strength (`fp:game-feel`, Unity page). The 80–90 ms throttle and the 120 ms merge are the game's |
|
|
69
|
-
| `Juice.Tween`, `Pop`, `Shake`, `EaseOutBack`, `EaseOutCubic`, `EaseInQuad`, `Ring`, `Dot`, `Rounded` | Coroutine tweens with the defaults the games used (pop 0.18 over 0.22 s, shake 0.08 over 0.25 s); a pop keeps the true rest scale | the compounding pop, fixed once for every game |
|
|
70
|
-
| `UiKit` | A canvas scaled at 1170×2532 (match 0.5), a `Safe` rect from `Screen.safeArea`, rounded panels, text, buttons that pop, modal cards, a dim layer, `FitToContent`; text and images take no taps | the code-built UI and the Restore label that covered the shop card (`fp:mobile-ui`, Unity page). `Safe` is read once when the kit is made, and the landscape island-side rule is not in it |
|
|
71
|
-
| `LaunchArgs.Get()` | Launch arguments: on iOS from the native process (Mono never sees `simctl launch` args), on Android from the intent extra `joydle_args`, in development builds and test APKs only | the basis of every automation flag. On iOS it is not gated: read it through the game's own wrapper that returns nothing unless `Debug.isDebugBuild` (Scrap Riot's), or a release build obeys an unlock flag (§1) |
|
|
72
|
-
| `Settings.Music`, `Sound`, `Haptics` | The three player toggles, kept in PlayerPrefs | |
|
|
73
|
-
| `Telemetry.Event`, `LevelStart`, `LevelEnd`, `TutorialComplete`, `ShopOpen`, `Log`; `Telemetry.Muted` | The one analytics and crash boundary; logs to the console in a development build with no sink | mute it under every dev flag: autoplay and capture runs must not reach analytics |
|
|
74
|
-
| `IapService(catalog, grant)` with `Init`, `Buy`, `Restore(done)`, `Price`, `Refetch` | Unity IAP 5. Grants in the pending-order handler once per transaction, then confirms; non-consumables come back from confirmed orders on every fetch; `Restore(done)` asks StoreKit to sync on iOS and answers true or false; `Price` is the store's localised string | the double grant (fixed on main on 7 Oct; a game built before needs a new build), Restore that ends (`fp:store`) |
|
|
75
|
-
| `Ads.CreateDefault(font)`, `Ads.Available`, `Ads.ShouldShowInterstitial(level, noAds)` | Test ads in development builds and the Editor, none in release; interstitials from level 15, every third level, never for a No Ads buyer | hide every ad button and No Ads while `Ads.Service` is null |
|
|
76
|
-
| `JoydleSplash` | The studio splash, 4.25 s, tap to skip after 1 s. A game opts in with a text asset `Resources/JoydleSplashOn`; it holds the game's audio, waits for the first scene and 10 smooth frames (1 s floor, 3 s cap), and is skipped in the Editor and on any launch with a `-flag` (`-splash` forces it); `JoydleSplash.Playing` says when it is up | "add joydle splash … as we did for other games" (the owner, twice) |
|
|
77
|
-
| `BackButton.PressedThisFrame`, `AndroidSystem.MoveToBack()`, `AndroidSystem.Density` | Android Back read from input events, since Back arrives pressed and released inside one frame and polling misses it; leave the app from the root screen; the dp scale | |
|
|
78
|
-
|
|
79
|
-
`com.joydle.firebase` boots itself before the first scene and installs Analytics and Crashlytics as
|
|
80
|
-
`Telemetry`'s sink (uncaught exceptions are fatal reports); the Editor keeps the console. It hands its
|
|
81
|
-
`link.xml` to the linker and marks its assembly always linked, because High stripping removed it and
|
|
82
|
-
Firebase never started in release builds (3 broken uploads). It pins the no-tracking setup: no
|
|
83
|
-
advertising identifier and no ad personalisation in the iOS plist, the advertising-id and ad-services
|
|
84
|
-
permissions removed on Android. That is what lets the privacy answers say nothing is used for
|
|
85
|
-
tracking, with no tracking prompt.
|
|
86
|
-
|
|
87
|
-
## A studio splash
|
|
88
|
-
|
|
89
|
-
A game never makes its own splash or a "Funpixel presents" card, package or not: the opening belongs
|
|
90
|
-
to the studio that makes the game, or to nothing. A studio's splash comes from its package, so one
|
|
91
|
-
fix reaches every game. Today
|
|
92
|
-
that is Joydle Core's `Joydle.Core.JoydleSplash` (read from its code on 10 Oct 2026; the code wins
|
|
93
|
-
over this table). A project on another studio's package wires that package's splash the same way; a
|
|
94
|
-
project with none ships no splash.
|
|
95
|
-
|
|
96
|
-
| Day-one rule | How `JoydleSplash` does it |
|
|
97
|
-
|---|---|
|
|
98
|
-
| Opt in, once | A text asset that `Resources.Load<TextAsset>("JoydleSplashOn")` finds, such as `Assets/_Game/Resources/JoydleSplashOn.txt` (the games write one line: what it does and "Delete this file to turn it off"), with its `.meta` committed. Nothing else is called: the package boots it before the first scene loads (`RuntimeInitializeOnLoadMethod(BeforeSceneLoad)`) |
|
|
99
|
-
| Before the first scene, on top | A `DontDestroyOnLoad` object with an overlay canvas at sorting order 32000. It waits for the first scene and 10 smooth frames (1 s floor, 3 s cap), then plays 4.25 s; a tap skips it after 1 s. On iOS `JoydleLaunch` makes the launch screen the black it opens on |
|
|
100
|
-
| Holds the game's audio | `AudioListener.pause` is true until it ends; its own sounds ignore the pause and follow `Settings.Sound` |
|
|
101
|
-
| Skipped in the Editor and on any flag | `Application.isEditor`, or any argument from `LaunchArgs.Get()` that starts with `-` (every automation, capture and test launch passes one); `-splash` forces it, to see it on the Simulator |
|
|
102
|
-
| Title music waits | `JoydleSplash.Playing` is true from before the first scene until the fade ends (false when it was skipped): start the title music once it is false. Pocket Crew also hides its loading view while it is up |
|
|
103
|
-
| The studio credit | Every credit line (Settings, About, an end card) names the studio, Joydle, and never Funpixel |
|
|
104
|
-
|
|
105
|
-
Its pictures and sounds are LFS files under the package's `Runtime/Resources/JoydleSplash/`. On a Mac
|
|
106
|
-
where the studio repository's LFS files were not pulled they are pointer text: the splash draws
|
|
107
|
-
blank parts and stays silent, and Unity logs "FSBTool ERROR: Failed decoding audio clip" for each
|
|
108
|
-
`JoydleSplash/*.wav` in every build. `funtools doctor` fails on them and says where to pull.
|
|
109
|
-
|
|
110
|
-
## What they do not give
|
|
111
|
-
|
|
112
|
-
What each game still writes by hand (§1): import rules (or `funtools gen --unity`'s, for what it
|
|
113
|
-
makes), the `SceneBuilder`, the TMP font builder, capture tools, the launch-flag dev gate, a safe-area
|
|
114
|
-
root off `UiKit`, the frame governor, saves, Firebase's Simulator stubs (its C++ SDK has no arm64
|
|
115
|
-
Simulator slice), a smoke driver and a UI audit. The repository's scripts are not in the packages.
|
|
116
|
-
|
|
117
|
-
## Rules for changing them
|
|
118
|
-
|
|
119
|
-
- Fix a shared bug in the package, once, never in one game's copy. The pop and the AudioListener fixes
|
|
120
|
-
reached four games at once; the purchase double grant lived on one branch while four games still had
|
|
121
|
-
it (§1).
|
|
122
|
-
- A change to the build pipeline every game shares (`BuildTools`) comes with a per-game opt-in marker,
|
|
123
|
-
as `JoydleLz4hc.txt` does, and a person looks before it lands (§10).
|
|
124
|
-
- Additive only: a game built on 0.1.0 keeps building.
|
|
125
|
-
- `BuildTools.TestFlight` signs automatically for the studio's own Apple team (KBAT76634X), and
|
|
126
|
-
`ApplyIOS` writes its company name. A game for another team needs its own build method until the
|
|
127
|
-
package takes a team per game.
|
|
@@ -1,127 +0,0 @@
|
|
|
1
|
-
# The studio's Unity packages
|
|
2
|
-
|
|
3
|
-
The studio's two packages, `com.joydle.core` (0.1.0) and `com.joydle.firebase`, are optional: the
|
|
4
|
-
games inside its repository use both, Knockout Lap, Gallery Heist and Particle Rush the core only,
|
|
5
|
-
and Floe Jam neither. They live in that repository, `joydle/joydle-games` (private: the person needs
|
|
6
|
-
read access), under `packages/`. A game that uses them never writes their pieces again. The field report's starter
|
|
7
|
-
is "the SDK wired, switched off" (Starter project), and a fix made in the package reached every game at
|
|
8
|
-
once (§1). Read as of 9 Oct 2026, from the packages' own code; what changes there wins over this page.
|
|
9
|
-
|
|
10
|
-
## Adding them
|
|
11
|
-
|
|
12
|
-
Every project lists them by `file:` path. Inside the repository that is `file:../../../packages/…`;
|
|
13
|
-
the three outside it (Knockout Lap, Gallery Heist, Particle Rush) use `file:../../joydle-games/packages/…`
|
|
14
|
-
(Knockout Lap, one folder deeper, `../../../`), so `joydle-games` must be cloned beside them, and
|
|
15
|
-
`funtools doctor` warns when the path is missing. A git URL pinned to a commit needs no sibling
|
|
16
|
-
clone (`#main` moves under a store build); no project uses one yet. Run `git lfs install` first: the splash's pictures and sounds are LFS files, and without it they arrive as
|
|
17
|
-
pointer files. Inside the repository the same holds for a checkout whose LFS files were never pulled.
|
|
18
|
-
`funtools doctor` in the game finds pointer files in Assets, Packages, every local package and the
|
|
19
|
-
package cache, and names the repository to run `git lfs pull` in; run it before a build.
|
|
20
|
-
|
|
21
|
-
```json
|
|
22
|
-
"dependencies": {
|
|
23
|
-
"com.joydle.core": "file:../../joydle-games/packages/com.joydle.core",
|
|
24
|
-
"com.joydle.firebase": "file:../../joydle-games/packages/com.joydle.firebase",
|
|
25
|
-
"com.unity.inputsystem": "1.20.0",
|
|
26
|
-
"com.unity.render-pipelines.universal": "17.6.0",
|
|
27
|
-
"com.unity.test-framework": "1.8.0",
|
|
28
|
-
"com.unity.ugui": "2.6.0"
|
|
29
|
-
}
|
|
30
|
-
```
|
|
31
|
-
|
|
32
|
-
The pinned form is `https://github.com/joydle/joydle-games.git?path=/packages/com.joydle.core#<commit>`.
|
|
33
|
-
|
|
34
|
-
- `com.unity.inputsystem` goes in the game's own manifest: the core's assembly references it and its
|
|
35
|
-
`package.json` does not pull it in. Set the player to the new Input System only.
|
|
36
|
-
- `com.unity.purchasing` 5.4.3 comes with the core (StoreKit 2 on iOS, Play Billing on Android).
|
|
37
|
-
- The Firebase package needs Google's packages at 13.17.0 (app, analytics, crashlytics) and the External
|
|
38
|
-
Dependency Manager 1.2.189. The games repository keeps their `.tgz` files in `packages/vendor/` (LFS)
|
|
39
|
-
and lists them by `file:` path; another project keeps the same versions in its own folder, in LFS.
|
|
40
|
-
Each game has its own Firebase project, with its config file under `Assets/`.
|
|
41
|
-
- Take out what no game uses: collab-proxy, learn, visual scripting, the Aseprite and PSD importers
|
|
42
|
-
(Scrap Riot also dropped 2D animation, sprite shape, tilemap extras and timeline: 88 → 78 MiB). Keep
|
|
43
|
-
what a game uses: Gallery Heist loads its rooms through Addressables 4.1 (built into the app, no
|
|
44
|
-
remote catalog) and aims its camera with Cinemachine 6.6, beside VFX Graph, Splines and Timeline.
|
|
45
|
-
No game uses DOTween (`Juice` tweens).
|
|
46
|
-
|
|
47
|
-
## What each piece gives, and the rule it settles
|
|
48
|
-
|
|
49
|
-
Editor side of `com.joydle.core`:
|
|
50
|
-
|
|
51
|
-
| Piece | What it does | Settles |
|
|
52
|
-
|---|---|---|
|
|
53
|
-
| `ProjectConfig.ApplyIOS(name, bundleId, version, landscape)` | Company name, bundle id, IL2CPP, iOS 16, iPhone only, a fixed orientation, status bar hidden, Unity splash off; switches the build target to iOS | settings by script, not a copied file (`funpixel-unity-game` step 6). It does not set colour space, 48 kHz, render scale, ProMotion, the accelerometer or physics: `Setup.Configure` sets those after it |
|
|
54
|
-
| `ProjectConfig.ApplyAndroid(packageName)` | API 26 to 36 (pinned), ARM64, IL2CPP, App Category game, GameActivity, full screen under cutouts, R8 off (it strips Firebase and purchase classes reached by reflection) | the Android half of the same rule |
|
|
55
|
-
| `BuildTools.Simulator`, `SimulatorDev`, `SimulatorMuted`, `Device`, `TestFlight` | Headless iOS builds (`-executeMethod Joydle.Core.Editor.BuildTools.TestFlight`) into `Builds/iOS-sim` or `Builds/iOS`. Every build applies the size settings (stripping High, engine stripping, IL2CPP OptimizeSize, unused mesh channels off); LZ4HC when `ProjectSettings/JoydleLz4hc.txt` exists. `TestFlight` sets the studio's team and automatic signing, and the build number (`JOYDLE_BUILD_NUMBER`, else a `yyMMddHHmm` stamp) and refuses to build without `Assets/_Game/Art/Icon/app_icon.png`. `SimulatorMuted` turns audio off for that one build and restores it | size settings and LZ4HC ([performance](performance.md) step 8); the icon gate (Porcelain Panic shipped Unity's default icon); the CoreAudio wedge on a Simulator relaunched many times |
|
|
56
|
-
| `BuildTools.Android`, `AndroidApk`, `AndroidDev`, `VersionCode()` | A signed `.aab` with its symbols (refuses without `JOYDLE_KEYSTORE` and `JOYDLE_KEYSTORE_PASS`); a release `.apk` for tests that reads launch args (never upload it); versionCode = minutes since 1 Jan 2026, because the iOS stamp is over Play's 2,100,000,000 cap | Android, planned in the report and built since (§15) |
|
|
57
|
-
| `IosPostprocess` | Writes `ITSAppUsesNonExemptEncryption` false and stamps every embedded framework's minimum OS with the app's | ITMS-90208 (`funpixel-store`) |
|
|
58
|
-
| `JoydleLaunch` | A black launch storyboard under its own name, for games that play the splash | iOS caches a launch screen by name across updates (§10) |
|
|
59
|
-
| `SplashImport` | Splash parts scaled to a power of two, mipmapped, compressed | 10.3 MB of raw splash in every game, now about 2.6 MB |
|
|
60
|
-
| `TextureBudget` | Textures named `model__basecolor.png` (and `__normal`, `__mr`, `__emissive`) under an `Art/` or `Models/` folder: ASTC 6×6, mipmaps, sRGB only for base colour and emissive, at most 512 under `Food/`, `Props/` or `Characters/`, else 1024 | glTFast's raw RGBA32 model textures (`funpixel-3d`, Unity page) |
|
|
61
|
-
| `AndroidManifestPost` | Adds the vibrate permission the haptics need | |
|
|
62
|
-
|
|
63
|
-
Runtime side of `com.joydle.core`:
|
|
64
|
-
|
|
65
|
-
| Piece | What it does | Settles |
|
|
66
|
-
|---|---|---|
|
|
67
|
-
| `Sfx.Create(music)`, `Play(clip, volume)`, `Sfx.EnsureListener()` | 8 pooled one-shots with pitch jitter 0.06, one looping music source at 0.45, and exactly one AudioListener | the four silent TestFlight builds (`funpixel-audio`, Unity page, step 1) |
|
|
68
|
-
| `Haptics.Light`, `Medium`, `Heavy`, `Success`, `Error` | iOS taptics through the package's native plugin, Android vibration effects; off when `Settings.Haptics` is | haptics by strength (`funpixel-game-feel`, Unity page). The 80–90 ms throttle and the 120 ms merge are the game's |
|
|
69
|
-
| `Juice.Tween`, `Pop`, `Shake`, `EaseOutBack`, `EaseOutCubic`, `EaseInQuad`, `Ring`, `Dot`, `Rounded` | Coroutine tweens with the defaults the games used (pop 0.18 over 0.22 s, shake 0.08 over 0.25 s); a pop keeps the true rest scale | the compounding pop, fixed once for every game |
|
|
70
|
-
| `UiKit` | A canvas scaled at 1170×2532 (match 0.5), a `Safe` rect from `Screen.safeArea`, rounded panels, text, buttons that pop, modal cards, a dim layer, `FitToContent`; text and images take no taps | the code-built UI and the Restore label that covered the shop card (`funpixel-mobile-ui`, Unity page). `Safe` is read once when the kit is made, and the landscape island-side rule is not in it |
|
|
71
|
-
| `LaunchArgs.Get()` | Launch arguments: on iOS from the native process (Mono never sees `simctl launch` args), on Android from the intent extra `joydle_args`, in development builds and test APKs only | the basis of every automation flag. On iOS it is not gated: read it through the game's own wrapper that returns nothing unless `Debug.isDebugBuild` (Scrap Riot's), or a release build obeys an unlock flag (§1) |
|
|
72
|
-
| `Settings.Music`, `Sound`, `Haptics` | The three player toggles, kept in PlayerPrefs | |
|
|
73
|
-
| `Telemetry.Event`, `LevelStart`, `LevelEnd`, `TutorialComplete`, `ShopOpen`, `Log`; `Telemetry.Muted` | The one analytics and crash boundary; logs to the console in a development build with no sink | mute it under every dev flag: autoplay and capture runs must not reach analytics |
|
|
74
|
-
| `IapService(catalog, grant)` with `Init`, `Buy`, `Restore(done)`, `Price`, `Refetch` | Unity IAP 5. Grants in the pending-order handler once per transaction, then confirms; non-consumables come back from confirmed orders on every fetch; `Restore(done)` asks StoreKit to sync on iOS and answers true or false; `Price` is the store's localised string | the double grant (fixed on main on 7 Oct; a game built before needs a new build), Restore that ends (`funpixel-store`) |
|
|
75
|
-
| `Ads.CreateDefault(font)`, `Ads.Available`, `Ads.ShouldShowInterstitial(level, noAds)` | Test ads in development builds and the Editor, none in release; interstitials from level 15, every third level, never for a No Ads buyer | hide every ad button and No Ads while `Ads.Service` is null |
|
|
76
|
-
| `JoydleSplash` | The studio splash, 4.25 s, tap to skip after 1 s. A game opts in with a text asset `Resources/JoydleSplashOn`; it holds the game's audio, waits for the first scene and 10 smooth frames (1 s floor, 3 s cap), and is skipped in the Editor and on any launch with a `-flag` (`-splash` forces it); `JoydleSplash.Playing` says when it is up | "add joydle splash … as we did for other games" (the owner, twice) |
|
|
77
|
-
| `BackButton.PressedThisFrame`, `AndroidSystem.MoveToBack()`, `AndroidSystem.Density` | Android Back read from input events, since Back arrives pressed and released inside one frame and polling misses it; leave the app from the root screen; the dp scale | |
|
|
78
|
-
|
|
79
|
-
`com.joydle.firebase` boots itself before the first scene and installs Analytics and Crashlytics as
|
|
80
|
-
`Telemetry`'s sink (uncaught exceptions are fatal reports); the Editor keeps the console. It hands its
|
|
81
|
-
`link.xml` to the linker and marks its assembly always linked, because High stripping removed it and
|
|
82
|
-
Firebase never started in release builds (3 broken uploads). It pins the no-tracking setup: no
|
|
83
|
-
advertising identifier and no ad personalisation in the iOS plist, the advertising-id and ad-services
|
|
84
|
-
permissions removed on Android. That is what lets the privacy answers say nothing is used for
|
|
85
|
-
tracking, with no tracking prompt.
|
|
86
|
-
|
|
87
|
-
## A studio splash
|
|
88
|
-
|
|
89
|
-
A game never makes its own splash or a "Funpixel presents" card, package or not: the opening belongs
|
|
90
|
-
to the studio that makes the game, or to nothing. A studio's splash comes from its package, so one
|
|
91
|
-
fix reaches every game. Today
|
|
92
|
-
that is Joydle Core's `Joydle.Core.JoydleSplash` (read from its code on 10 Oct 2026; the code wins
|
|
93
|
-
over this table). A project on another studio's package wires that package's splash the same way; a
|
|
94
|
-
project with none ships no splash.
|
|
95
|
-
|
|
96
|
-
| Day-one rule | How `JoydleSplash` does it |
|
|
97
|
-
|---|---|
|
|
98
|
-
| Opt in, once | A text asset that `Resources.Load<TextAsset>("JoydleSplashOn")` finds, such as `Assets/_Game/Resources/JoydleSplashOn.txt` (the games write one line: what it does and "Delete this file to turn it off"), with its `.meta` committed. Nothing else is called: the package boots it before the first scene loads (`RuntimeInitializeOnLoadMethod(BeforeSceneLoad)`) |
|
|
99
|
-
| Before the first scene, on top | A `DontDestroyOnLoad` object with an overlay canvas at sorting order 32000. It waits for the first scene and 10 smooth frames (1 s floor, 3 s cap), then plays 4.25 s; a tap skips it after 1 s. On iOS `JoydleLaunch` makes the launch screen the black it opens on |
|
|
100
|
-
| Holds the game's audio | `AudioListener.pause` is true until it ends; its own sounds ignore the pause and follow `Settings.Sound` |
|
|
101
|
-
| Skipped in the Editor and on any flag | `Application.isEditor`, or any argument from `LaunchArgs.Get()` that starts with `-` (every automation, capture and test launch passes one); `-splash` forces it, to see it on the Simulator |
|
|
102
|
-
| Title music waits | `JoydleSplash.Playing` is true from before the first scene until the fade ends (false when it was skipped): start the title music once it is false. Pocket Crew also hides its loading view while it is up |
|
|
103
|
-
| The studio credit | Every credit line (Settings, About, an end card) names the studio, Joydle, and never Funpixel |
|
|
104
|
-
|
|
105
|
-
Its pictures and sounds are LFS files under the package's `Runtime/Resources/JoydleSplash/`. On a Mac
|
|
106
|
-
where the studio repository's LFS files were not pulled they are pointer text: the splash draws
|
|
107
|
-
blank parts and stays silent, and Unity logs "FSBTool ERROR: Failed decoding audio clip" for each
|
|
108
|
-
`JoydleSplash/*.wav` in every build. `funtools doctor` fails on them and says where to pull.
|
|
109
|
-
|
|
110
|
-
## What they do not give
|
|
111
|
-
|
|
112
|
-
What each game still writes by hand (§1): import rules (or `funtools gen --unity`'s, for what it
|
|
113
|
-
makes), the `SceneBuilder`, the TMP font builder, capture tools, the launch-flag dev gate, a safe-area
|
|
114
|
-
root off `UiKit`, the frame governor, saves, Firebase's Simulator stubs (its C++ SDK has no arm64
|
|
115
|
-
Simulator slice), a smoke driver and a UI audit. The repository's scripts are not in the packages.
|
|
116
|
-
|
|
117
|
-
## Rules for changing them
|
|
118
|
-
|
|
119
|
-
- Fix a shared bug in the package, once, never in one game's copy. The pop and the AudioListener fixes
|
|
120
|
-
reached four games at once; the purchase double grant lived on one branch while four games still had
|
|
121
|
-
it (§1).
|
|
122
|
-
- A change to the build pipeline every game shares (`BuildTools`) comes with a per-game opt-in marker,
|
|
123
|
-
as `JoydleLz4hc.txt` does, and a person looks before it lands (§10).
|
|
124
|
-
- Additive only: a game built on 0.1.0 keeps building.
|
|
125
|
-
- `BuildTools.TestFlight` signs automatically for the studio's own Apple team (KBAT76634X), and
|
|
126
|
-
`ApplyIOS` writes its company name. A game for another team needs its own build method until the
|
|
127
|
-
package takes a team per game.
|
|
@@ -1,127 +0,0 @@
|
|
|
1
|
-
# The studio's Unity packages
|
|
2
|
-
|
|
3
|
-
The studio's two packages, `com.joydle.core` (0.1.0) and `com.joydle.firebase`, are optional: the
|
|
4
|
-
games inside its repository use both, Knockout Lap, Gallery Heist and Particle Rush the core only,
|
|
5
|
-
and Floe Jam neither. They live in that repository, `joydle/joydle-games` (private: the person needs
|
|
6
|
-
read access), under `packages/`. A game that uses them never writes their pieces again. The field report's starter
|
|
7
|
-
is "the SDK wired, switched off" (Starter project), and a fix made in the package reached every game at
|
|
8
|
-
once (§1). Read as of 9 Oct 2026, from the packages' own code; what changes there wins over this page.
|
|
9
|
-
|
|
10
|
-
## Adding them
|
|
11
|
-
|
|
12
|
-
Every project lists them by `file:` path. Inside the repository that is `file:../../../packages/…`;
|
|
13
|
-
the three outside it (Knockout Lap, Gallery Heist, Particle Rush) use `file:../../joydle-games/packages/…`
|
|
14
|
-
(Knockout Lap, one folder deeper, `../../../`), so `joydle-games` must be cloned beside them, and
|
|
15
|
-
`funtools doctor` warns when the path is missing. A git URL pinned to a commit needs no sibling
|
|
16
|
-
clone (`#main` moves under a store build); no project uses one yet. Run `git lfs install` first: the splash's pictures and sounds are LFS files, and without it they arrive as
|
|
17
|
-
pointer files. Inside the repository the same holds for a checkout whose LFS files were never pulled.
|
|
18
|
-
`funtools doctor` in the game finds pointer files in Assets, Packages, every local package and the
|
|
19
|
-
package cache, and names the repository to run `git lfs pull` in; run it before a build.
|
|
20
|
-
|
|
21
|
-
```json
|
|
22
|
-
"dependencies": {
|
|
23
|
-
"com.joydle.core": "file:../../joydle-games/packages/com.joydle.core",
|
|
24
|
-
"com.joydle.firebase": "file:../../joydle-games/packages/com.joydle.firebase",
|
|
25
|
-
"com.unity.inputsystem": "1.20.0",
|
|
26
|
-
"com.unity.render-pipelines.universal": "17.6.0",
|
|
27
|
-
"com.unity.test-framework": "1.8.0",
|
|
28
|
-
"com.unity.ugui": "2.6.0"
|
|
29
|
-
}
|
|
30
|
-
```
|
|
31
|
-
|
|
32
|
-
The pinned form is `https://github.com/joydle/joydle-games.git?path=/packages/com.joydle.core#<commit>`.
|
|
33
|
-
|
|
34
|
-
- `com.unity.inputsystem` goes in the game's own manifest: the core's assembly references it and its
|
|
35
|
-
`package.json` does not pull it in. Set the player to the new Input System only.
|
|
36
|
-
- `com.unity.purchasing` 5.4.3 comes with the core (StoreKit 2 on iOS, Play Billing on Android).
|
|
37
|
-
- The Firebase package needs Google's packages at 13.17.0 (app, analytics, crashlytics) and the External
|
|
38
|
-
Dependency Manager 1.2.189. The games repository keeps their `.tgz` files in `packages/vendor/` (LFS)
|
|
39
|
-
and lists them by `file:` path; another project keeps the same versions in its own folder, in LFS.
|
|
40
|
-
Each game has its own Firebase project, with its config file under `Assets/`.
|
|
41
|
-
- Take out what no game uses: collab-proxy, learn, visual scripting, the Aseprite and PSD importers
|
|
42
|
-
(Scrap Riot also dropped 2D animation, sprite shape, tilemap extras and timeline: 88 → 78 MiB). Keep
|
|
43
|
-
what a game uses: Gallery Heist loads its rooms through Addressables 4.1 (built into the app, no
|
|
44
|
-
remote catalog) and aims its camera with Cinemachine 6.6, beside VFX Graph, Splines and Timeline.
|
|
45
|
-
No game uses DOTween (`Juice` tweens).
|
|
46
|
-
|
|
47
|
-
## What each piece gives, and the rule it settles
|
|
48
|
-
|
|
49
|
-
Editor side of `com.joydle.core`:
|
|
50
|
-
|
|
51
|
-
| Piece | What it does | Settles |
|
|
52
|
-
|---|---|---|
|
|
53
|
-
| `ProjectConfig.ApplyIOS(name, bundleId, version, landscape)` | Company name, bundle id, IL2CPP, iOS 16, iPhone only, a fixed orientation, status bar hidden, Unity splash off; switches the build target to iOS | settings by script, not a copied file (`funpixel-unity-game` step 6). It does not set colour space, 48 kHz, render scale, ProMotion, the accelerometer or physics: `Setup.Configure` sets those after it |
|
|
54
|
-
| `ProjectConfig.ApplyAndroid(packageName)` | API 26 to 36 (pinned), ARM64, IL2CPP, App Category game, GameActivity, full screen under cutouts, R8 off (it strips Firebase and purchase classes reached by reflection) | the Android half of the same rule |
|
|
55
|
-
| `BuildTools.Simulator`, `SimulatorDev`, `SimulatorMuted`, `Device`, `TestFlight` | Headless iOS builds (`-executeMethod Joydle.Core.Editor.BuildTools.TestFlight`) into `Builds/iOS-sim` or `Builds/iOS`. Every build applies the size settings (stripping High, engine stripping, IL2CPP OptimizeSize, unused mesh channels off); LZ4HC when `ProjectSettings/JoydleLz4hc.txt` exists. `TestFlight` sets the studio's team and automatic signing, and the build number (`JOYDLE_BUILD_NUMBER`, else a `yyMMddHHmm` stamp) and refuses to build without `Assets/_Game/Art/Icon/app_icon.png`. `SimulatorMuted` turns audio off for that one build and restores it | size settings and LZ4HC ([performance](performance.md) step 8); the icon gate (Porcelain Panic shipped Unity's default icon); the CoreAudio wedge on a Simulator relaunched many times |
|
|
56
|
-
| `BuildTools.Android`, `AndroidApk`, `AndroidDev`, `VersionCode()` | A signed `.aab` with its symbols (refuses without `JOYDLE_KEYSTORE` and `JOYDLE_KEYSTORE_PASS`); a release `.apk` for tests that reads launch args (never upload it); versionCode = minutes since 1 Jan 2026, because the iOS stamp is over Play's 2,100,000,000 cap | Android, planned in the report and built since (§15) |
|
|
57
|
-
| `IosPostprocess` | Writes `ITSAppUsesNonExemptEncryption` false and stamps every embedded framework's minimum OS with the app's | ITMS-90208 (`funpixel-store`) |
|
|
58
|
-
| `JoydleLaunch` | A black launch storyboard under its own name, for games that play the splash | iOS caches a launch screen by name across updates (§10) |
|
|
59
|
-
| `SplashImport` | Splash parts scaled to a power of two, mipmapped, compressed | 10.3 MB of raw splash in every game, now about 2.6 MB |
|
|
60
|
-
| `TextureBudget` | Textures named `model__basecolor.png` (and `__normal`, `__mr`, `__emissive`) under an `Art/` or `Models/` folder: ASTC 6×6, mipmaps, sRGB only for base colour and emissive, at most 512 under `Food/`, `Props/` or `Characters/`, else 1024 | glTFast's raw RGBA32 model textures (`funpixel-3d`, Unity page) |
|
|
61
|
-
| `AndroidManifestPost` | Adds the vibrate permission the haptics need | |
|
|
62
|
-
|
|
63
|
-
Runtime side of `com.joydle.core`:
|
|
64
|
-
|
|
65
|
-
| Piece | What it does | Settles |
|
|
66
|
-
|---|---|---|
|
|
67
|
-
| `Sfx.Create(music)`, `Play(clip, volume)`, `Sfx.EnsureListener()` | 8 pooled one-shots with pitch jitter 0.06, one looping music source at 0.45, and exactly one AudioListener | the four silent TestFlight builds (`funpixel-audio`, Unity page, step 1) |
|
|
68
|
-
| `Haptics.Light`, `Medium`, `Heavy`, `Success`, `Error` | iOS taptics through the package's native plugin, Android vibration effects; off when `Settings.Haptics` is | haptics by strength (`funpixel-game-feel`, Unity page). The 80–90 ms throttle and the 120 ms merge are the game's |
|
|
69
|
-
| `Juice.Tween`, `Pop`, `Shake`, `EaseOutBack`, `EaseOutCubic`, `EaseInQuad`, `Ring`, `Dot`, `Rounded` | Coroutine tweens with the defaults the games used (pop 0.18 over 0.22 s, shake 0.08 over 0.25 s); a pop keeps the true rest scale | the compounding pop, fixed once for every game |
|
|
70
|
-
| `UiKit` | A canvas scaled at 1170×2532 (match 0.5), a `Safe` rect from `Screen.safeArea`, rounded panels, text, buttons that pop, modal cards, a dim layer, `FitToContent`; text and images take no taps | the code-built UI and the Restore label that covered the shop card (`funpixel-mobile-ui`, Unity page). `Safe` is read once when the kit is made, and the landscape island-side rule is not in it |
|
|
71
|
-
| `LaunchArgs.Get()` | Launch arguments: on iOS from the native process (Mono never sees `simctl launch` args), on Android from the intent extra `joydle_args`, in development builds and test APKs only | the basis of every automation flag. On iOS it is not gated: read it through the game's own wrapper that returns nothing unless `Debug.isDebugBuild` (Scrap Riot's), or a release build obeys an unlock flag (§1) |
|
|
72
|
-
| `Settings.Music`, `Sound`, `Haptics` | The three player toggles, kept in PlayerPrefs | |
|
|
73
|
-
| `Telemetry.Event`, `LevelStart`, `LevelEnd`, `TutorialComplete`, `ShopOpen`, `Log`; `Telemetry.Muted` | The one analytics and crash boundary; logs to the console in a development build with no sink | mute it under every dev flag: autoplay and capture runs must not reach analytics |
|
|
74
|
-
| `IapService(catalog, grant)` with `Init`, `Buy`, `Restore(done)`, `Price`, `Refetch` | Unity IAP 5. Grants in the pending-order handler once per transaction, then confirms; non-consumables come back from confirmed orders on every fetch; `Restore(done)` asks StoreKit to sync on iOS and answers true or false; `Price` is the store's localised string | the double grant (fixed on main on 7 Oct; a game built before needs a new build), Restore that ends (`funpixel-store`) |
|
|
75
|
-
| `Ads.CreateDefault(font)`, `Ads.Available`, `Ads.ShouldShowInterstitial(level, noAds)` | Test ads in development builds and the Editor, none in release; interstitials from level 15, every third level, never for a No Ads buyer | hide every ad button and No Ads while `Ads.Service` is null |
|
|
76
|
-
| `JoydleSplash` | The studio splash, 4.25 s, tap to skip after 1 s. A game opts in with a text asset `Resources/JoydleSplashOn`; it holds the game's audio, waits for the first scene and 10 smooth frames (1 s floor, 3 s cap), and is skipped in the Editor and on any launch with a `-flag` (`-splash` forces it); `JoydleSplash.Playing` says when it is up | "add joydle splash … as we did for other games" (the owner, twice) |
|
|
77
|
-
| `BackButton.PressedThisFrame`, `AndroidSystem.MoveToBack()`, `AndroidSystem.Density` | Android Back read from input events, since Back arrives pressed and released inside one frame and polling misses it; leave the app from the root screen; the dp scale | |
|
|
78
|
-
|
|
79
|
-
`com.joydle.firebase` boots itself before the first scene and installs Analytics and Crashlytics as
|
|
80
|
-
`Telemetry`'s sink (uncaught exceptions are fatal reports); the Editor keeps the console. It hands its
|
|
81
|
-
`link.xml` to the linker and marks its assembly always linked, because High stripping removed it and
|
|
82
|
-
Firebase never started in release builds (3 broken uploads). It pins the no-tracking setup: no
|
|
83
|
-
advertising identifier and no ad personalisation in the iOS plist, the advertising-id and ad-services
|
|
84
|
-
permissions removed on Android. That is what lets the privacy answers say nothing is used for
|
|
85
|
-
tracking, with no tracking prompt.
|
|
86
|
-
|
|
87
|
-
## A studio splash
|
|
88
|
-
|
|
89
|
-
A game never makes its own splash or a "Funpixel presents" card, package or not: the opening belongs
|
|
90
|
-
to the studio that makes the game, or to nothing. A studio's splash comes from its package, so one
|
|
91
|
-
fix reaches every game. Today
|
|
92
|
-
that is Joydle Core's `Joydle.Core.JoydleSplash` (read from its code on 10 Oct 2026; the code wins
|
|
93
|
-
over this table). A project on another studio's package wires that package's splash the same way; a
|
|
94
|
-
project with none ships no splash.
|
|
95
|
-
|
|
96
|
-
| Day-one rule | How `JoydleSplash` does it |
|
|
97
|
-
|---|---|
|
|
98
|
-
| Opt in, once | A text asset that `Resources.Load<TextAsset>("JoydleSplashOn")` finds, such as `Assets/_Game/Resources/JoydleSplashOn.txt` (the games write one line: what it does and "Delete this file to turn it off"), with its `.meta` committed. Nothing else is called: the package boots it before the first scene loads (`RuntimeInitializeOnLoadMethod(BeforeSceneLoad)`) |
|
|
99
|
-
| Before the first scene, on top | A `DontDestroyOnLoad` object with an overlay canvas at sorting order 32000. It waits for the first scene and 10 smooth frames (1 s floor, 3 s cap), then plays 4.25 s; a tap skips it after 1 s. On iOS `JoydleLaunch` makes the launch screen the black it opens on |
|
|
100
|
-
| Holds the game's audio | `AudioListener.pause` is true until it ends; its own sounds ignore the pause and follow `Settings.Sound` |
|
|
101
|
-
| Skipped in the Editor and on any flag | `Application.isEditor`, or any argument from `LaunchArgs.Get()` that starts with `-` (every automation, capture and test launch passes one); `-splash` forces it, to see it on the Simulator |
|
|
102
|
-
| Title music waits | `JoydleSplash.Playing` is true from before the first scene until the fade ends (false when it was skipped): start the title music once it is false. Pocket Crew also hides its loading view while it is up |
|
|
103
|
-
| The studio credit | Every credit line (Settings, About, an end card) names the studio, Joydle, and never Funpixel |
|
|
104
|
-
|
|
105
|
-
Its pictures and sounds are LFS files under the package's `Runtime/Resources/JoydleSplash/`. On a Mac
|
|
106
|
-
where the studio repository's LFS files were not pulled they are pointer text: the splash draws
|
|
107
|
-
blank parts and stays silent, and Unity logs "FSBTool ERROR: Failed decoding audio clip" for each
|
|
108
|
-
`JoydleSplash/*.wav` in every build. `funtools doctor` fails on them and says where to pull.
|
|
109
|
-
|
|
110
|
-
## What they do not give
|
|
111
|
-
|
|
112
|
-
What each game still writes by hand (§1): import rules (or `funtools gen --unity`'s, for what it
|
|
113
|
-
makes), the `SceneBuilder`, the TMP font builder, capture tools, the launch-flag dev gate, a safe-area
|
|
114
|
-
root off `UiKit`, the frame governor, saves, Firebase's Simulator stubs (its C++ SDK has no arm64
|
|
115
|
-
Simulator slice), a smoke driver and a UI audit. The repository's scripts are not in the packages.
|
|
116
|
-
|
|
117
|
-
## Rules for changing them
|
|
118
|
-
|
|
119
|
-
- Fix a shared bug in the package, once, never in one game's copy. The pop and the AudioListener fixes
|
|
120
|
-
reached four games at once; the purchase double grant lived on one branch while four games still had
|
|
121
|
-
it (§1).
|
|
122
|
-
- A change to the build pipeline every game shares (`BuildTools`) comes with a per-game opt-in marker,
|
|
123
|
-
as `JoydleLz4hc.txt` does, and a person looks before it lands (§10).
|
|
124
|
-
- Additive only: a game built on 0.1.0 keeps building.
|
|
125
|
-
- `BuildTools.TestFlight` signs automatically for the studio's own Apple team (KBAT76634X), and
|
|
126
|
-
`ApplyIOS` writes its company name. A game for another team needs its own build method until the
|
|
127
|
-
package takes a team per game.
|