@pix3/cli 1.6.0 → 1.6.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (126) hide show
  1. package/LICENSE +201 -201
  2. package/README.md +788 -754
  3. package/dist/index.js +208 -203
  4. package/dist/runtime-types.json +1 -1
  5. package/dist/smoke/prebuilt/{chunk-J2SJVMDO.mjs → chunk-7MZGPAUK.mjs} +1 -1
  6. package/dist/smoke/prebuilt/chunk-7WOFGLW3.mjs +239 -0
  7. package/dist/smoke/prebuilt/runtime.mjs +1 -1
  8. package/dist/smoke/prebuilt/smoke-worker.mjs +1 -1
  9. package/dist/smoke/prebuilt/tree-defaults.mjs +1 -1
  10. package/dist/validate/prebuilt/bundle-main.js +13 -13
  11. package/dist/validate/prebuilt/chunk-HKG6YI6Y.js +239 -0
  12. package/dist/validate/prebuilt/runtime.js +1 -1
  13. package/kit/files/.claude/skills/pix3-nodes/SKILL.md +210 -210
  14. package/kit/files/.claude/skills/pix3-nodes/reference.md +32 -24
  15. package/kit/files/.claude/skills/pix3-scene-format/SKILL.md +238 -235
  16. package/kit/files/.claude/skills/pix3-scene-format/reference.md +28 -28
  17. package/kit/files/.claude/skills/pix3-scripts/SKILL.md +285 -281
  18. package/kit/files/.claude/skills/pix3-scripts/reference.md +69 -52
  19. package/kit/files/.claude/skills/pix3-verify/SKILL.md +298 -256
  20. package/kit/files/.claude/skills/pix3-verify/reference.md +21 -21
  21. package/kit/files/AGENTS.md +203 -203
  22. package/kit/files/CLAUDE.md +1 -1
  23. package/kit/kit.json +2 -2
  24. package/package.json +54 -54
  25. package/templates/empty-2d/files/README.md +20 -20
  26. package/templates/empty-2d/files/scenes/main.pix3scene +68 -68
  27. package/templates/empty-2d/template.yaml +7 -7
  28. package/templates/empty-3d/files/README.md +20 -20
  29. package/templates/empty-3d/files/scenes/main.pix3scene +108 -108
  30. package/templates/empty-3d/template.yaml +7 -7
  31. package/templates/idea-blank/files/README.md +22 -22
  32. package/templates/idea-blank/files/scenes/main.pix3scene +37 -37
  33. package/templates/idea-blank/template.yaml +10 -10
  34. package/templates/minigame-2d/files/README.md +44 -44
  35. package/templates/minigame-2d/files/design/tests/reachability.json +1 -1
  36. package/templates/minigame-2d/files/design/tests/routines/mute-music.json +44 -44
  37. package/templates/minigame-2d/files/scenes/main.pix3scene +84 -84
  38. package/templates/minigame-2d/files/scenes/menu.pix3scene +118 -118
  39. package/templates/minigame-2d/files/scenes/ui/settings-window.pix3scene +138 -138
  40. package/templates/minigame-2d/files/scripts/GameFlow.ts +133 -133
  41. package/templates/minigame-2d/files/scripts/MenuFlow.ts +217 -217
  42. package/templates/minigame-2d/files/scripts/SettingsWindow.ts +198 -198
  43. package/templates/minigame-2d/template.yaml +10 -10
  44. package/templates/playable-2d/files/README.md +30 -30
  45. package/templates/playable-2d/files/design/recipe.md +83 -83
  46. package/templates/playable-2d/files/design/tests/reachability.json +4 -4
  47. package/templates/playable-2d/files/design/tests/routines/intro-to-cta.json +32 -32
  48. package/templates/playable-2d/files/scenes/main.pix3scene +111 -111
  49. package/templates/playable-2d/files/scenes/ui/end-screen.pix3scene +91 -91
  50. package/templates/playable-2d/files/scenes/ui/intro.pix3scene +65 -65
  51. package/templates/playable-2d/files/scripts/GameFlow.ts +256 -256
  52. package/templates/playable-2d/template.yaml +9 -9
  53. package/templates/playable-3d/files/README.md +32 -32
  54. package/templates/playable-3d/files/design/recipe.md +127 -127
  55. package/templates/playable-3d/files/design/tests/reachability.json +4 -4
  56. package/templates/playable-3d/files/design/tests/routines/intro-to-cta.json +32 -32
  57. package/templates/playable-3d/files/scenes/main.pix3scene +230 -230
  58. package/templates/playable-3d/files/scenes/ui/end-screen.pix3scene +91 -91
  59. package/templates/playable-3d/files/scenes/ui/intro.pix3scene +65 -65
  60. package/templates/playable-3d/files/scripts/GameFlow.ts +309 -309
  61. package/templates/playable-3d/files/scripts/GameRules.ts +290 -290
  62. package/templates/playable-3d/files/scripts/ScoreHud.ts +113 -113
  63. package/templates/playable-3d/template.yaml +9 -9
  64. package/templates/recipe-arena-2d/files/README.md +48 -48
  65. package/templates/recipe-arena-2d/files/design/recipe.md +127 -127
  66. package/templates/recipe-arena-2d/files/scenes/main.pix3scene +292 -292
  67. package/templates/recipe-arena-2d/files/scenes/menu.pix3scene +100 -100
  68. package/templates/recipe-arena-2d/files/scenes/prefabs/hazard.pix3scene +42 -42
  69. package/templates/recipe-arena-2d/files/scenes/prefabs/pickup.pix3scene +45 -45
  70. package/templates/recipe-arena-2d/files/scenes/ui/result.pix3scene +85 -85
  71. package/templates/recipe-arena-2d/files/scripts/GameRules.ts +368 -368
  72. package/templates/recipe-arena-2d/files/scripts/MenuFlow.ts +106 -106
  73. package/templates/recipe-arena-2d/files/scripts/PlayerController.ts +151 -151
  74. package/templates/recipe-arena-2d/files/scripts/ScoreHud.ts +94 -94
  75. package/templates/recipe-arena-2d/files/scripts/Spawner.ts +214 -214
  76. package/templates/recipe-arena-2d/files/scripts/TouchRules.ts +174 -174
  77. package/templates/recipe-arena-2d/template.yaml +10 -10
  78. package/templates/recipe-blank-2d/files/README.md +61 -61
  79. package/templates/recipe-blank-2d/files/design/recipe.md +148 -148
  80. package/templates/recipe-blank-2d/files/design/tests/reachability.json +4 -4
  81. package/templates/recipe-blank-2d/files/design/tests/routines/restart.json +27 -27
  82. package/templates/recipe-blank-2d/files/scenes/main.pix3scene +224 -224
  83. package/templates/recipe-blank-2d/files/scenes/ui/result.pix3scene +85 -85
  84. package/templates/recipe-blank-2d/files/scripts/GameRules.ts +350 -350
  85. package/templates/recipe-blank-2d/files/scripts/ScoreHud.ts +110 -110
  86. package/templates/recipe-blank-2d/template.yaml +10 -10
  87. package/templates/recipe-bouncer-2d/files/README.md +81 -81
  88. package/templates/recipe-bouncer-2d/files/design/recipe.md +146 -146
  89. package/templates/recipe-bouncer-2d/files/scenes/main.pix3scene +615 -615
  90. package/templates/recipe-bouncer-2d/files/scenes/menu.pix3scene +191 -191
  91. package/templates/recipe-bouncer-2d/files/scenes/ui/result.pix3scene +87 -87
  92. package/templates/recipe-bouncer-2d/files/scripts/BallBody.ts +298 -298
  93. package/templates/recipe-bouncer-2d/files/scripts/GameRules.ts +377 -377
  94. package/templates/recipe-bouncer-2d/files/scripts/MenuFlow.ts +109 -109
  95. package/templates/recipe-bouncer-2d/files/scripts/PaddleController.ts +112 -112
  96. package/templates/recipe-bouncer-2d/files/scripts/ScoreHud.ts +94 -94
  97. package/templates/recipe-bouncer-2d/files/scripts/TouchRules.ts +263 -263
  98. package/templates/recipe-bouncer-2d/files/scripts/ball-collision.ts +307 -307
  99. package/templates/recipe-bouncer-2d/template.yaml +10 -10
  100. package/templates/recipe-grid-3d/files/README.md +22 -22
  101. package/templates/recipe-grid-3d/files/design/recipe.md +110 -110
  102. package/templates/recipe-grid-3d/files/scenes/main.pix3scene +169 -169
  103. package/templates/recipe-grid-3d/files/scenes/menu.pix3scene +100 -100
  104. package/templates/recipe-grid-3d/files/scenes/ui/result.pix3scene +105 -105
  105. package/templates/recipe-grid-3d/files/scripts/GridBoard.ts +319 -319
  106. package/templates/recipe-grid-3d/files/scripts/GridRules.ts +278 -278
  107. package/templates/recipe-grid-3d/files/scripts/MenuFlow.ts +106 -106
  108. package/templates/recipe-grid-3d/files/scripts/ScoreHud.ts +94 -94
  109. package/templates/recipe-grid-3d/template.yaml +10 -10
  110. package/templates/recipe-tapper-2d/files/README.md +39 -39
  111. package/templates/recipe-tapper-2d/files/design/recipe.md +132 -132
  112. package/templates/recipe-tapper-2d/files/design/tests/reachability.json +4 -4
  113. package/templates/recipe-tapper-2d/files/design/tests/routines/terminal-retry.json +23 -23
  114. package/templates/recipe-tapper-2d/files/scenes/main.pix3scene +269 -269
  115. package/templates/recipe-tapper-2d/files/scenes/menu.pix3scene +100 -100
  116. package/templates/recipe-tapper-2d/files/scenes/prefabs/hazard.pix3scene +42 -42
  117. package/templates/recipe-tapper-2d/files/scenes/prefabs/target.pix3scene +45 -45
  118. package/templates/recipe-tapper-2d/files/scenes/ui/result.pix3scene +85 -85
  119. package/templates/recipe-tapper-2d/files/scripts/GameRules.ts +368 -368
  120. package/templates/recipe-tapper-2d/files/scripts/MenuFlow.ts +106 -106
  121. package/templates/recipe-tapper-2d/files/scripts/ScoreHud.ts +94 -94
  122. package/templates/recipe-tapper-2d/files/scripts/Spawner.ts +214 -214
  123. package/templates/recipe-tapper-2d/files/scripts/TouchRules.ts +192 -192
  124. package/templates/recipe-tapper-2d/template.yaml +10 -10
  125. package/dist/smoke/prebuilt/chunk-OJXQXIIQ.mjs +0 -239
  126. package/dist/validate/prebuilt/chunk-BS2OZM7U.js +0 -239
@@ -1,4 +1,4 @@
1
- {
2
- "version": 1,
3
- "proven": []
4
- }
1
+ {
2
+ "version": 1,
3
+ "proven": []
4
+ }
@@ -1,32 +1,32 @@
1
- {
2
- "name": "intro-to-cta",
3
- "description": "Tap through the intro gate, end the run by intent, and press the CTA on the end screen.",
4
- "note": "Run it with game_run {routine:'intro-to-cta'}. Steps are the game_input vocabulary (tap/key/keys/drag/hover/wait/invoke) plus {type:'command', name} for an intent the scene registered; `expect` holds the ordinary game_run predicates, ANDed and judged once after the last step. A step's `why` and this `note` are documentation — the runner ignores both — but they are why the routine also reads as a checklist. Note what is NOT here: no step calls a component method directly. Ending the run goes through the `finish` command, because a routine that called the handler would prove the handler works while skipping every wire between the player and it.",
5
- "scope": "scenes/main.pix3scene",
6
- "params": {},
7
- "uses": ["game-root", "intro-overlay", "end-screen", "cta-button"],
8
- "steps": [
9
- {
10
- "type": "tap",
11
- "target": "intro-overlay",
12
- "why": "The tap gate is the gesture under test: it hides the overlay and unlocks browser audio, so it is driven as a real tap rather than by dispatching start-game."
13
- },
14
- {
15
- "type": "command",
16
- "name": "finish",
17
- "why": "Reveal the end screen by intent instead of waiting out autoWinAfterSec — the timer is a placeholder every real playable replaces, and 15 s of wall clock in every run is a budget nobody gets back."
18
- },
19
- {
20
- "type": "tap",
21
- "target": "cta-button",
22
- "holdMs": 700,
23
- "why": "Button2D needs a real press; this proves the button is on screen and hittable, not just present in the tree."
24
- }
25
- ],
26
- "expect": [
27
- { "kind": "gameState", "path": "phase", "op": "eq", "value": "ended" },
28
- { "kind": "gameState", "path": "introVisible", "op": "eq", "value": false },
29
- { "kind": "gameState", "path": "endVisible", "op": "eq", "value": true },
30
- { "kind": "gameState", "path": "gameEnded", "op": "eq", "value": true }
31
- ]
32
- }
1
+ {
2
+ "name": "intro-to-cta",
3
+ "description": "Tap through the intro gate, end the run by intent, and press the CTA on the end screen.",
4
+ "note": "Run it with game_run {routine:'intro-to-cta'}. Steps are the game_input vocabulary (tap/key/keys/drag/hover/wait/invoke) plus {type:'command', name} for an intent the scene registered; `expect` holds the ordinary game_run predicates, ANDed and judged once after the last step. A step's `why` and this `note` are documentation — the runner ignores both — but they are why the routine also reads as a checklist. Note what is NOT here: no step calls a component method directly. Ending the run goes through the `finish` command, because a routine that called the handler would prove the handler works while skipping every wire between the player and it.",
5
+ "scope": "scenes/main.pix3scene",
6
+ "params": {},
7
+ "uses": ["game-root", "intro-overlay", "end-screen", "cta-button"],
8
+ "steps": [
9
+ {
10
+ "type": "tap",
11
+ "target": "intro-overlay",
12
+ "why": "The tap gate is the gesture under test: it hides the overlay and unlocks browser audio, so it is driven as a real tap rather than by dispatching start-game."
13
+ },
14
+ {
15
+ "type": "command",
16
+ "name": "finish",
17
+ "why": "Reveal the end screen by intent instead of waiting out autoWinAfterSec — the timer is a placeholder every real playable replaces, and 15 s of wall clock in every run is a budget nobody gets back."
18
+ },
19
+ {
20
+ "type": "tap",
21
+ "target": "cta-button",
22
+ "holdMs": 700,
23
+ "why": "Button2D needs a real press; this proves the button is on screen and hittable, not just present in the tree."
24
+ }
25
+ ],
26
+ "expect": [
27
+ { "kind": "gameState", "path": "phase", "op": "eq", "value": "ended" },
28
+ { "kind": "gameState", "path": "introVisible", "op": "eq", "value": false },
29
+ { "kind": "gameState", "path": "endVisible", "op": "eq", "value": true },
30
+ { "kind": "gameState", "path": "gameEnded", "op": "eq", "value": true }
31
+ ]
32
+ }
@@ -1,111 +1,111 @@
1
- # Pix3 Scene File (YAML)
2
- # Playable 2D blank (portrait 1080x1920): 2D gameplay placeholder plus a
3
- # tap-to-start intro overlay and an end screen with a CTA button.
4
- #
5
- # Full-screen UI lives in its own file under scenes/ui/ and is instanced here
6
- # hidden (`visible: false` = editor only; `initiallyVisible` in the overlay file
7
- # is what play mode reads), so opening this scene shows the game rather than a
8
- # dim or a CTA card:
9
- # intro-overlay (intro-dim, intro-label) scenes/ui/intro.pix3scene
10
- # end-screen (end-dim, end-label, cta-button) scenes/ui/end-screen.pix3scene
11
- # Instance children keep their ids, so `GameFlow`'s introNode/endNode and every
12
- # `findNode` still resolve. Node order in the tree is paint order.
13
- version: 1.0.0
14
- metadata:
15
- author: Pix3 Template
16
- description: Playable 2D blank with intro overlay and CTA end screen
17
- root:
18
- - id: game-root
19
- type: Group2D
20
- name: Game Root
21
- properties:
22
- width: 1080
23
- height: 1920
24
- layout:
25
- enabled: true
26
- horizontalAlign: stretch
27
- verticalAlign: stretch
28
- components:
29
- - id: game-flow
30
- type: user:GameFlow
31
- enabled: true
32
- config:
33
- introNode: intro-overlay
34
- endNode: end-screen
35
- autoWinAfterSec: 15
36
- children:
37
- - id: background
38
- type: ColorRect2D
39
- name: Background
40
- properties:
41
- width: 1080
42
- height: 1920
43
- color: "#16213e"
44
- transform:
45
- position: [0, 0]
46
- scale: [1, 1]
47
- rotation: 0
48
- layout:
49
- enabled: true
50
- horizontalAlign: stretch
51
- verticalAlign: stretch
52
- children: []
53
- - id: hero-sprite
54
- type: Sprite2D
55
- name: Hero Sprite
56
- properties:
57
- texture: { type: 'texture', url: 'res://sprites/pix3-logo.png' }
58
- width: 242
59
- height: 96
60
- transform:
61
- position: [0, 0]
62
- scale: [1, 1]
63
- rotation: 0
64
- layout:
65
- enabled: true
66
- horizontalAlign: center
67
- verticalAlign: center
68
- components:
69
- - id: hero-bob
70
- type: core:Sine
71
- enabled: true
72
- config:
73
- amplitude: 40
74
- frequency: 0.6
75
- axis: y
76
- children: []
77
- - id: hud-label
78
- type: Label2D
79
- name: HUD Label
80
- properties:
81
- label: "PROTOTYPE"
82
- labelFontSize: 40
83
- labelColor: "#ffffff"
84
- labelAlign: center
85
- transform:
86
- position: [0, 860]
87
- scale: [1, 1]
88
- rotation: 0
89
- layout:
90
- enabled: true
91
- horizontalAlign: center
92
- verticalAlign: top
93
- children: []
94
- # Tap gate — authored in scenes/ui/intro.pix3scene so this scene opens on
95
- # the GAME. `visible: false` hides it in the EDITOR only; `initiallyVisible`
96
- # (in the overlay file) is what play mode reads. Tick the eye to preview it
97
- # composited over the game.
98
- - id: intro-overlay
99
- name: Intro Overlay
100
- instance: res://scenes/ui/intro.pix3scene
101
- properties:
102
- visible: false
103
- # End screen — authored in scenes/ui/end-screen.pix3scene so this scene opens
104
- # on the GAME. `visible: false` hides it in the EDITOR only; `initiallyVisible`
105
- # (in the overlay file) is what play mode reads. Tick the eye to preview it
106
- # composited over the game.
107
- - id: end-screen
108
- name: End Screen
109
- instance: res://scenes/ui/end-screen.pix3scene
110
- properties:
111
- visible: false
1
+ # Pix3 Scene File (YAML)
2
+ # Playable 2D blank (portrait 1080x1920): 2D gameplay placeholder plus a
3
+ # tap-to-start intro overlay and an end screen with a CTA button.
4
+ #
5
+ # Full-screen UI lives in its own file under scenes/ui/ and is instanced here
6
+ # hidden (`visible: false` = editor only; `initiallyVisible` in the overlay file
7
+ # is what play mode reads), so opening this scene shows the game rather than a
8
+ # dim or a CTA card:
9
+ # intro-overlay (intro-dim, intro-label) scenes/ui/intro.pix3scene
10
+ # end-screen (end-dim, end-label, cta-button) scenes/ui/end-screen.pix3scene
11
+ # Instance children keep their ids, so `GameFlow`'s introNode/endNode and every
12
+ # `findNode` still resolve. Node order in the tree is paint order.
13
+ version: 1.0.0
14
+ metadata:
15
+ author: Pix3 Template
16
+ description: Playable 2D blank with intro overlay and CTA end screen
17
+ root:
18
+ - id: game-root
19
+ type: Group2D
20
+ name: Game Root
21
+ properties:
22
+ width: 1080
23
+ height: 1920
24
+ layout:
25
+ enabled: true
26
+ horizontalAlign: stretch
27
+ verticalAlign: stretch
28
+ components:
29
+ - id: game-flow
30
+ type: user:GameFlow
31
+ enabled: true
32
+ config:
33
+ introNode: intro-overlay
34
+ endNode: end-screen
35
+ autoWinAfterSec: 15
36
+ children:
37
+ - id: background
38
+ type: ColorRect2D
39
+ name: Background
40
+ properties:
41
+ width: 1080
42
+ height: 1920
43
+ color: "#16213e"
44
+ transform:
45
+ position: [0, 0]
46
+ scale: [1, 1]
47
+ rotation: 0
48
+ layout:
49
+ enabled: true
50
+ horizontalAlign: stretch
51
+ verticalAlign: stretch
52
+ children: []
53
+ - id: hero-sprite
54
+ type: Sprite2D
55
+ name: Hero Sprite
56
+ properties:
57
+ texture: { type: 'texture', url: 'res://sprites/pix3-logo.png' }
58
+ width: 242
59
+ height: 96
60
+ transform:
61
+ position: [0, 0]
62
+ scale: [1, 1]
63
+ rotation: 0
64
+ layout:
65
+ enabled: true
66
+ horizontalAlign: center
67
+ verticalAlign: center
68
+ components:
69
+ - id: hero-bob
70
+ type: core:Sine
71
+ enabled: true
72
+ config:
73
+ amplitude: 40
74
+ frequency: 0.6
75
+ axis: y
76
+ children: []
77
+ - id: hud-label
78
+ type: Label2D
79
+ name: HUD Label
80
+ properties:
81
+ label: "PROTOTYPE"
82
+ labelFontSize: 40
83
+ labelColor: "#ffffff"
84
+ labelAlign: center
85
+ transform:
86
+ position: [0, 860]
87
+ scale: [1, 1]
88
+ rotation: 0
89
+ layout:
90
+ enabled: true
91
+ horizontalAlign: center
92
+ verticalAlign: top
93
+ children: []
94
+ # Tap gate — authored in scenes/ui/intro.pix3scene so this scene opens on
95
+ # the GAME. `visible: false` hides it in the EDITOR only; `initiallyVisible`
96
+ # (in the overlay file) is what play mode reads. Tick the eye to preview it
97
+ # composited over the game.
98
+ - id: intro-overlay
99
+ name: Intro Overlay
100
+ instance: res://scenes/ui/intro.pix3scene
101
+ properties:
102
+ visible: false
103
+ # End screen — authored in scenes/ui/end-screen.pix3scene so this scene opens
104
+ # on the GAME. `visible: false` hides it in the EDITOR only; `initiallyVisible`
105
+ # (in the overlay file) is what play mode reads. Tick the eye to preview it
106
+ # composited over the game.
107
+ - id: end-screen
108
+ name: End Screen
109
+ instance: res://scenes/ui/end-screen.pix3scene
110
+ properties:
111
+ visible: false
@@ -1,91 +1,91 @@
1
- # Pix3 Scene File (YAML)
2
- # Playable 2D — the END screen (result + CTA), in its own file so the game
3
- # scene opens clean. `main.pix3scene` carries it as a one-line `instance:`
4
- # reference marked `visible: false`, which hides it in the EDITOR only;
5
- # `initiallyVisible: false` below is what play mode reads, and `user:GameFlow`
6
- # reveals it on `finish()`.
7
- #
8
- # Edit it here, full-screen, in its own tab. To preview it composited over the
9
- # game, tick the eye on `end-screen` in main.pix3scene — just do not commit
10
- # that tick, or every iteration starts behind a CTA card again.
11
- #
12
- # Stable node ids (design/recipe.md is the contract — do not rename these):
13
- # end-screen, end-dim, end-label, cta-button
14
- version: 1.0.0
15
- metadata:
16
- author: Pix3 Template
17
- description: End screen — dim, result headline and a PLAY NOW CTA button
18
- root:
19
- - id: end-screen
20
- type: Group2D
21
- name: End Screen
22
- properties:
23
- width: 1080
24
- height: 1920
25
- initiallyVisible: false
26
- layout:
27
- enabled: true
28
- horizontalAlign: stretch
29
- verticalAlign: stretch
30
- children:
31
- - id: end-dim
32
- type: ColorRect2D
33
- name: End Dim
34
- properties:
35
- width: 1080
36
- height: 1920
37
- color: "#000000"
38
- opacity: 0.75
39
- transform:
40
- position: [0, 0]
41
- scale: [1, 1]
42
- rotation: 0
43
- layout:
44
- enabled: true
45
- horizontalAlign: stretch
46
- verticalAlign: stretch
47
- children: []
48
- - id: end-label
49
- type: Label2D
50
- name: End Label
51
- properties:
52
- label: "GREAT RUN!"
53
- labelFontSize: 84
54
- labelColor: "#ffcf33"
55
- labelAlign: center
56
- transform:
57
- position: [0, 220]
58
- scale: [1, 1]
59
- rotation: 0
60
- layout:
61
- enabled: true
62
- horizontalAlign: center
63
- verticalAlign: center
64
- children: []
65
- - id: cta-button
66
- type: Button2D
67
- name: CTA Button
68
- properties:
69
- width: 480
70
- height: 140
71
- label: "PLAY NOW"
72
- labelFontSize: 56
73
- labelColor: "#1a1a2e"
74
- backgroundColor: "#ffcf33"
75
- hoverColor: "#ffe066"
76
- pressedColor: "#e6b800"
77
- buttonAction: cta
78
- transform:
79
- position: [0, -120]
80
- scale: [1, 1]
81
- rotation: 0
82
- layout:
83
- enabled: true
84
- horizontalAlign: center
85
- verticalAlign: center
86
- components:
87
- - id: cta-action
88
- type: user:CtaButton
89
- enabled: true
90
- config: {}
91
- children: []
1
+ # Pix3 Scene File (YAML)
2
+ # Playable 2D — the END screen (result + CTA), in its own file so the game
3
+ # scene opens clean. `main.pix3scene` carries it as a one-line `instance:`
4
+ # reference marked `visible: false`, which hides it in the EDITOR only;
5
+ # `initiallyVisible: false` below is what play mode reads, and `user:GameFlow`
6
+ # reveals it on `finish()`.
7
+ #
8
+ # Edit it here, full-screen, in its own tab. To preview it composited over the
9
+ # game, tick the eye on `end-screen` in main.pix3scene — just do not commit
10
+ # that tick, or every iteration starts behind a CTA card again.
11
+ #
12
+ # Stable node ids (design/recipe.md is the contract — do not rename these):
13
+ # end-screen, end-dim, end-label, cta-button
14
+ version: 1.0.0
15
+ metadata:
16
+ author: Pix3 Template
17
+ description: End screen — dim, result headline and a PLAY NOW CTA button
18
+ root:
19
+ - id: end-screen
20
+ type: Group2D
21
+ name: End Screen
22
+ properties:
23
+ width: 1080
24
+ height: 1920
25
+ initiallyVisible: false
26
+ layout:
27
+ enabled: true
28
+ horizontalAlign: stretch
29
+ verticalAlign: stretch
30
+ children:
31
+ - id: end-dim
32
+ type: ColorRect2D
33
+ name: End Dim
34
+ properties:
35
+ width: 1080
36
+ height: 1920
37
+ color: "#000000"
38
+ opacity: 0.75
39
+ transform:
40
+ position: [0, 0]
41
+ scale: [1, 1]
42
+ rotation: 0
43
+ layout:
44
+ enabled: true
45
+ horizontalAlign: stretch
46
+ verticalAlign: stretch
47
+ children: []
48
+ - id: end-label
49
+ type: Label2D
50
+ name: End Label
51
+ properties:
52
+ label: "GREAT RUN!"
53
+ labelFontSize: 84
54
+ labelColor: "#ffcf33"
55
+ labelAlign: center
56
+ transform:
57
+ position: [0, 220]
58
+ scale: [1, 1]
59
+ rotation: 0
60
+ layout:
61
+ enabled: true
62
+ horizontalAlign: center
63
+ verticalAlign: center
64
+ children: []
65
+ - id: cta-button
66
+ type: Button2D
67
+ name: CTA Button
68
+ properties:
69
+ width: 480
70
+ height: 140
71
+ label: "PLAY NOW"
72
+ labelFontSize: 56
73
+ labelColor: "#1a1a2e"
74
+ backgroundColor: "#ffcf33"
75
+ hoverColor: "#ffe066"
76
+ pressedColor: "#e6b800"
77
+ buttonAction: cta
78
+ transform:
79
+ position: [0, -120]
80
+ scale: [1, 1]
81
+ rotation: 0
82
+ layout:
83
+ enabled: true
84
+ horizontalAlign: center
85
+ verticalAlign: center
86
+ components:
87
+ - id: cta-action
88
+ type: user:CtaButton
89
+ enabled: true
90
+ config: {}
91
+ children: []
@@ -1,65 +1,65 @@
1
- # Pix3 Scene File (YAML)
2
- # Playable 2D — the tap-to-start INTRO overlay, in its own file so the
3
- # game scene opens clean. `main.pix3scene` carries it as a one-line `instance:`
4
- # reference marked `visible: false`, which hides it in the EDITOR only.
5
- # `initiallyVisible: true` below is what play mode reads, so the gate is UP at
6
- # t=0 — in an ad container that first tap is what unlocks browser audio.
7
- # `user:GameFlow` hides it on the first tap.
8
- #
9
- # Edit it here, full-screen, in its own tab. To preview it composited over the
10
- # game, tick the eye on `intro-overlay` in main.pix3scene — just do not commit
11
- # that tick, or every iteration starts behind the dim again.
12
- #
13
- # Stable node ids (design/recipe.md is the contract — do not rename these):
14
- # intro-overlay, intro-dim, intro-label
15
- version: 1.0.0
16
- metadata:
17
- author: Pix3 Template
18
- description: Intro overlay — dim plus a TAP TO START label
19
- root:
20
- - id: intro-overlay
21
- type: Group2D
22
- name: Intro Overlay
23
- properties:
24
- width: 1080
25
- height: 1920
26
- initiallyVisible: true
27
- layout:
28
- enabled: true
29
- horizontalAlign: stretch
30
- verticalAlign: stretch
31
- children:
32
- - id: intro-dim
33
- type: ColorRect2D
34
- name: Intro Dim
35
- properties:
36
- width: 1080
37
- height: 1920
38
- color: "#000000"
39
- opacity: 0.65
40
- transform:
41
- position: [0, 0]
42
- scale: [1, 1]
43
- rotation: 0
44
- layout:
45
- enabled: true
46
- horizontalAlign: stretch
47
- verticalAlign: stretch
48
- children: []
49
- - id: intro-label
50
- type: Label2D
51
- name: Tap To Start
52
- properties:
53
- label: "TAP TO START"
54
- labelFontSize: 72
55
- labelColor: "#ffffff"
56
- labelAlign: center
57
- transform:
58
- position: [0, 0]
59
- scale: [1, 1]
60
- rotation: 0
61
- layout:
62
- enabled: true
63
- horizontalAlign: center
64
- verticalAlign: center
65
- children: []
1
+ # Pix3 Scene File (YAML)
2
+ # Playable 2D — the tap-to-start INTRO overlay, in its own file so the
3
+ # game scene opens clean. `main.pix3scene` carries it as a one-line `instance:`
4
+ # reference marked `visible: false`, which hides it in the EDITOR only.
5
+ # `initiallyVisible: true` below is what play mode reads, so the gate is UP at
6
+ # t=0 — in an ad container that first tap is what unlocks browser audio.
7
+ # `user:GameFlow` hides it on the first tap.
8
+ #
9
+ # Edit it here, full-screen, in its own tab. To preview it composited over the
10
+ # game, tick the eye on `intro-overlay` in main.pix3scene — just do not commit
11
+ # that tick, or every iteration starts behind the dim again.
12
+ #
13
+ # Stable node ids (design/recipe.md is the contract — do not rename these):
14
+ # intro-overlay, intro-dim, intro-label
15
+ version: 1.0.0
16
+ metadata:
17
+ author: Pix3 Template
18
+ description: Intro overlay — dim plus a TAP TO START label
19
+ root:
20
+ - id: intro-overlay
21
+ type: Group2D
22
+ name: Intro Overlay
23
+ properties:
24
+ width: 1080
25
+ height: 1920
26
+ initiallyVisible: true
27
+ layout:
28
+ enabled: true
29
+ horizontalAlign: stretch
30
+ verticalAlign: stretch
31
+ children:
32
+ - id: intro-dim
33
+ type: ColorRect2D
34
+ name: Intro Dim
35
+ properties:
36
+ width: 1080
37
+ height: 1920
38
+ color: "#000000"
39
+ opacity: 0.65
40
+ transform:
41
+ position: [0, 0]
42
+ scale: [1, 1]
43
+ rotation: 0
44
+ layout:
45
+ enabled: true
46
+ horizontalAlign: stretch
47
+ verticalAlign: stretch
48
+ children: []
49
+ - id: intro-label
50
+ type: Label2D
51
+ name: Tap To Start
52
+ properties:
53
+ label: "TAP TO START"
54
+ labelFontSize: 72
55
+ labelColor: "#ffffff"
56
+ labelAlign: center
57
+ transform:
58
+ position: [0, 0]
59
+ scale: [1, 1]
60
+ rotation: 0
61
+ layout:
62
+ enabled: true
63
+ horizontalAlign: center
64
+ verticalAlign: center
65
+ children: []