pxt-arcade 1.12.7 → 1.12.10

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 (57) hide show
  1. package/built/target-strings.json +1 -0
  2. package/built/target.js +1143 -1037
  3. package/built/target.json +1143 -1037
  4. package/built/targetlight.json +5 -5
  5. package/built/theme.json +1 -0
  6. package/docs/developer/kiosk.md +116 -0
  7. package/docs/firefox-picture-in-picture.md +29 -0
  8. package/docs/kiosk.html +1 -1
  9. package/docs/multiplayer-games.md +56 -0
  10. package/docs/projects/SUMMARY.md +7 -0
  11. package/docs/projects.md +6 -0
  12. package/docs/static/browser-pip/firefox/firefox-settings.png +0 -0
  13. package/docs/static/browser-pip/firefox/hide-pip-toggle.png +0 -0
  14. package/docs/static/browser-pip/firefox/pip-icon.png +0 -0
  15. package/docs/static/developer/kiosk/add-to-kiosk.png +0 -0
  16. package/docs/static/developer/kiosk/add-your-game.png +0 -0
  17. package/docs/static/developer/kiosk/keyboard-controls.png +0 -0
  18. package/docs/static/developer/kiosk/locked-state.png +0 -0
  19. package/docs/static/developer/kiosk/menu-bar.png +0 -0
  20. package/docs/static/developer/kiosk/multiple-uploaded-games.png +0 -0
  21. package/docs/static/developer/kiosk/no-uploaded-games.png +0 -0
  22. package/docs/static/developer/kiosk/qr-code-enlarged.png +0 -0
  23. package/docs/static/developer/kiosk/select-a-game.png +0 -0
  24. package/docs/static/developer/kiosk/share-project.png +0 -0
  25. package/docs/static/developer/kiosk/shared-project-link.png +0 -0
  26. package/docs/static/developer/kiosk/shared-project-name.png +0 -0
  27. package/docs/static/developer/kiosk/single-uploaded-game.png +0 -0
  28. package/docs/static/hardware/arcade-kiosks/cabinet.png +0 -0
  29. package/docs/static/kiosk/asset-manifest.json +3 -3
  30. package/docs/static/kiosk/static/js/{main.0fe8d35c.js → main.3ab95ea3.js} +3 -3
  31. package/docs/static/kiosk/static/js/{main.0fe8d35c.js.LICENSE.txt → main.3ab95ea3.js.LICENSE.txt} +0 -0
  32. package/docs/static/kiosk/static/js/main.3ab95ea3.js.map +1 -0
  33. package/docs/static/multiplayer/tag.png +0 -0
  34. package/docs/static/skillmap/racer/assets-tab.png +0 -0
  35. package/docs/static/skillmap/racer/image-editor.png +0 -0
  36. package/docs/static/skillmap/racer/truck2.png +0 -0
  37. package/docs/test/hardware/cardboard-arcade.md +139 -0
  38. package/docs/test/hardware/full-size-kiosk.md +101 -0
  39. package/docs/test/skillmap/dino/dino1.md +76 -133
  40. package/docs/test/skillmap/dino/dino2.md +111 -86
  41. package/docs/test/skillmap/dino/dino3.md +103 -137
  42. package/docs/test/skillmap/dino/dino4.md +112 -85
  43. package/docs/test/skillmap/dino/dino5.md +1 -2
  44. package/docs/test/skillmap/racer/racer-pre.md +147 -0
  45. package/docs/test/skillmap/racer/racer1.md +245 -0
  46. package/docs/test/skillmap/racer/racer2.md +220 -0
  47. package/docs/test/skillmap/racer/racer3.md +174 -0
  48. package/docs/test/skillmap/star/star1.md +124 -70
  49. package/docs/test/skillmap/star/star2.md +62 -64
  50. package/docs/test/skillmap/star/star3.md +48 -53
  51. package/docs/test/skillmap/star/star4.md +28 -10
  52. package/docs/test/tutorials/hawk.md +819 -0
  53. package/docs/test/tutorials/holiday.md +14 -2
  54. package/package.json +3 -3
  55. package/pxtarget.json +2 -1
  56. package/targetconfig.json +12 -5
  57. package/docs/static/kiosk/static/js/main.0fe8d35c.js.map +0 -1
@@ -1,4 +1,5 @@
1
1
  # Join the Audience
2
+ ### @explicitHints true
2
3
 
3
4
 
4
5
  ## {Introduction @showdialog}
@@ -28,17 +29,18 @@ Let's add an audience!
28
29
 
29
30
  ---
30
31
 
31
- - :paper plane: From ``||sprites:Sprites||`` drag <br/>
32
- ``||variables(sprites):set [mySprite2] to sprite [ ] of kind [Player]||`` <br/>
32
+ - :paper plane: From ``||sprites:Sprites||`` drag
33
+
34
+ ```block
35
+ let audience = sprites.create(assets.image`clap1`, SpriteKind.Player)
36
+ ```
33
37
  and snap it into **the bottom** of the <br/>
34
38
  ``||loops:on start||`` container.
35
39
 
36
-
37
- - :mouse pointer: Click ``||variables:mySprite2||`` and scroll to the bottom of the pop-up list to rename it ``||variables:audience||``.
38
-
39
40
  - :paint brush: Click the empty grey square and toggle to **My Assets**
40
41
  to choose the long audience sprite called **clap1**.
41
42
 
43
+ #### ~ tutorialhint
42
44
 
43
45
  ```blocks
44
46
  scene.setBackgroundImage(assets.image`stage`)
@@ -59,28 +61,26 @@ repositioned the star of the show!
59
61
  ---
60
62
 
61
63
  - :paper plane: Grab <br/>
62
- ``||sprites:set [mySprite] [x] to [0]||`` <br/>
63
- and snap it into **the end** of the <br/>
64
- ``||loops:on start||`` container.
65
-
66
64
 
67
- - :mouse pointer: Change ``||variables(noclick):mySprite||`` to
68
- ``||variables(noclick):audience||``.
69
-
70
- - :mouse pointer: Change ``||sprites:x||`` to
71
- ``||sprites:bottom||``.
65
+ ```block
66
+ let audience: Sprite = null
72
67
 
73
- - :mouse pointer: Change **0** to **120** to put the bottom of the audience sprite at the bottom of the stage.
68
+ audience.bottom = 120
69
+ ```
70
+ and snap it into **the end** of the <br/>
71
+ ``||loops:on start||`` container.
74
72
 
73
+ #### ~ tutorialhint
75
74
 
76
75
  ```blocks
77
76
  scene.setBackgroundImage(assets.image`stage`)
78
- let mySprite = sprites.create(assets.image`towering turtles`, SpriteKind.Player)
79
- mySprite.bottom = 115
77
+ let talent = sprites.create(assets.image`towering turtles`, SpriteKind.Player)
78
+ talent.bottom = 115
80
79
  game.splash("Press (A) to play!")
81
80
  info.startCountdown(10)
82
- //@highlight
83
81
  let audience = sprites.create(assets.image`clap1`, SpriteKind.Player)
82
+ //@highlight
83
+ audience.bottom = 120
84
84
  ```
85
85
 
86
86
 
@@ -104,16 +104,19 @@ with each click** <br/>
104
104
  ---
105
105
 
106
106
  - :paper plane: From ``||sprites:Sprites||``, grab <br/>
107
- ``||sprites: set [mySprite] image to [ ]||`` <br/>
107
+
108
+ ```block
109
+ let audience: Sprite = null
110
+ audience.setImage(img`.`)
111
+ ```
108
112
  and snap it into **the bottom** of the <br/>
109
113
  ``||controller:on [A] button [pressed]||`` container.
110
114
 
111
- - :mouse pointer: Click ``||variables(noclick):mySprite||`` and change it to
112
- ``||variables(noclick):audience||`` so that the correct sprite is swapped during your clicks.
113
-
114
115
  - :paint brush: Click the grey square and toggle to **My Assets** and
115
116
  choose the other audience pose (called **clap2**.)
116
117
 
118
+ #### ~ tutorialhint
119
+
117
120
  ```blocks
118
121
  let audience: Sprite = null
119
122
  controller.A.onEvent(ControllerButtonEvent.Pressed, function () {
@@ -141,21 +144,28 @@ Right now, the audience only claps once. <br/>
141
144
 
142
145
  ---
143
146
 
144
- - :game: Drag another<br/>
145
- ``||controller:on [A] button [pressed]||``<br/>
146
- container into an empty area of the workspace.
147
-
148
- - :mouse pointer: To change the audience image back when you release the
149
- (A) button, change ``||controller:[pressed]||`` to ``||controller:[released]||``
150
- using the dropdown menu.
147
+ - :game: Drag the<br/>
151
148
 
152
- - :paper plane: Snap a new<br/>
153
- ``||sprites: set [mySprite] image to [ ]||``<br/>
154
- block inside the empty container.
149
+ ```block
150
+ let audience: Sprite = null
151
+ controller.A.onEvent(ControllerButtonEvent.Released, function () {
152
+ audience.setImage(img`.`)
153
+ })
154
+ ```
155
+ container into an empty area of the workspace.
155
156
 
156
157
  - :mouse pointer: Change the variable to ``||variables(noclick):audience||`` and click the empty grey square to choose the same
157
158
  **clap1** image that was used for the original sprite.
158
159
 
160
+ ```blockconfig.local
161
+ let audience: Sprite = null
162
+ controller.A.onEvent(ControllerButtonEvent.Released, function () {
163
+ audience.setImage(img`.`)
164
+ })
165
+ ```
166
+
167
+ #### ~ tutorialhint
168
+
159
169
  ```blocks
160
170
  let audience: Sprite = null
161
171
  controller.A.onEvent(ControllerButtonEvent.Released, function () {
@@ -179,44 +189,31 @@ It also automatically tells you that **you've lost** when time runs out. Let's c
179
189
 
180
190
  ---
181
191
 
182
- - :id card: From the ``||info:Info||`` category, grab an<br/>
183
- ``||info:on countdown end||``<br/>
184
- container and drop it into an empty area of the workspace.
185
-
186
- - :circle: Now, open the ``||game:Game||`` category and pick<br/>
187
- ``||game: game over <LOSE> ⊕||``.<br/>
188
- Snap it inside the empty **on countdown end** container.
192
+ - :id card: From the ``||info:Info||`` category, grab an
189
193
 
190
- - :mouse pointer: Toggle **LOSE** to **WIN**.
191
-
192
- ```blocks
194
+ ```block
193
195
  info.onCountdownEnd(function () {
194
- game.over(true)
196
+ game.over(true, effects.confetti)
195
197
  })
196
198
  ```
199
+ container and drop it into an empty area of the workspace.
197
200
 
198
- ## {Step 9}
199
-
200
- **Fantastic!!**<br/>
201
- 🎉 🎉 🎉
202
-
203
- Now add a final celebration with some **game over** effects!
204
-
205
- ---
206
201
 
207
- - :mouse pointer: Click the **+** icon to the right of the <br/>
208
- ``||game: game over <WIN> ⊕||`` block.
202
+ ```blockconfig.local
203
+ info.onCountdownEnd(function () {
204
+ game.over(true, effects.confetti)
205
+ })
206
+ ```
209
207
 
210
- - :mouse pointer: If you want an effect other than confetti,
211
- click the word **confetti**
212
- and choose a new option from the dropdown.
208
+ #### ~ tutorialhint
213
209
 
214
210
  ```blocks
215
211
  info.onCountdownEnd(function () {
216
- game.over(true, effects.confetti)
212
+ game.over(true)
217
213
  })
218
214
  ```
219
215
 
216
+
220
217
  ## {Step 9}
221
218
 
222
219
  **That's it!**
@@ -227,6 +224,12 @@ Compete for the most clicks in 10 seconds! When you're finished, click **Done**
227
224
  return to the main page where you can keep going and find out how to throw stars at the stage.
228
225
 
229
226
 
227
+ ```blockconfig.global
228
+ game.over(true, effects.confetti)
229
+ let audience = sprites.create(assets.image`clap1`, SpriteKind.Player)
230
+ audience.setImage(assets.image`clap2`)
231
+ audience.bottom = 120
232
+ ```
230
233
 
231
234
  ```template
232
235
  controller.A.onEvent(ControllerButtonEvent.Pressed, function () {
@@ -235,18 +238,13 @@ controller.A.onEvent(ControllerButtonEvent.Pressed, function () {
235
238
 
236
239
 
237
240
  scene.setBackgroundImage(assets.image`stage`)
238
- let mySprite = sprites.create(assets.image`towering turtles`, SpriteKind.Player)
239
- mySprite.bottom = 115
241
+ let talent = sprites.create(assets.image`towering turtles`, SpriteKind.Player)
242
+ talent.bottom = 115
240
243
  game.splash("Press (A) to play!")
241
244
  info.startCountdown(10)
242
245
  ```
243
246
 
244
247
 
245
-
246
- ```package
247
- simple-blocks=github:microsoft/arcade-tutorial-extensions/simple-blocks/
248
- ```
249
-
250
248
  ```assetjson
251
249
  {
252
250
  "README.md": " ",
@@ -1,4 +1,5 @@
1
1
  # The Biggest Star
2
+ ### @explicitHints true
2
3
 
3
4
 
4
5
  ## {Introduction @showdialog}
@@ -18,71 +19,61 @@ some flying star [__*projectiles*__](#projected "sprites that moves on their own
18
19
  ---
19
20
 
20
21
  - :paper plane: From ``||sprites:Sprites||``, grab<br/>
21
- ``||variables(sprites):set [projectile] to projectile [ ] from [mySprite] with vx [50] vy [50]||``<br/>
22
+
23
+ ```block
24
+ let star = sprites.createProjectileFromSprite(img`.`, audience, 50, 50)
25
+ ```
22
26
  and drop it into **the end** of the<br/>
23
27
  ``||controller:on [A] button [pressed]||`` container
24
28
  already in the workspace.
25
29
 
26
- - :mouse pointer: Click **Next** to move on to the next instruction.
27
-
28
- ```blocks
29
- let audience: Sprite = null
30
- controller.A.onEvent(ControllerButtonEvent.Pressed, function () {
31
- info.changeScoreBy(1)
32
- audience.setImage(assets.image`clap1`)
33
- //@highlight
34
- projectile = sprites.createProjectileFromSprite(img`
35
- . . . .
36
- . . . .
37
- . . . .
38
- . . . .
39
- `, mySprite, 50, 50)
40
- })
41
- ```
42
-
43
-
44
- ## {Step 3}
45
-
46
30
  - :paint brush: Click the empty grey square and toggle to **My Assets**
47
- to select the star.
31
+ to choose the long audience sprite called **star**.
32
+
33
+ - :mouse pointer: Click **Next** to move on to the next instruction.
48
34
 
49
- - :mouse pointer: Click ``||variables(noclick): mySprite||`` and change it to ``||variables(noclick): audience||``.
50
35
 
36
+ #### ~ tutorialhint
51
37
 
52
38
  ```blocks
53
39
  let audience: Sprite = null
54
-
55
40
  controller.A.onEvent(ControllerButtonEvent.Pressed, function () {
56
41
  info.changeScoreBy(1)
57
42
  audience.setImage(assets.image`clap1`)
58
43
  //@highlight
59
- projectile = sprites.createProjectileFromSprite(assets.image`star`, audience, 50, 50)
44
+ let star = sprites.createProjectileFromSprite(assets.image`star`, audience, 50, 50)
60
45
  })
61
46
  ```
62
47
 
48
+
63
49
  ## {Step 4}
64
50
 
65
51
  **Try your project on the game screen to see what you think**
66
52
 
67
- Does a star come from the audience each time you press the (A) button?
68
-
53
+ Does a star come from the audience each time you press the **Ⓐ** button?
69
54
 
70
55
  ## {Step 5}
71
56
 
72
- **🌟 Let's make the star projectiles float 🌟**
57
+ **🌟 Let's make the star projectiles shoot up 🌟**
73
58
 
74
59
  ---
75
60
 
76
- - :calculator: From the ``||math:Math||`` category, drag out **TWO**<br/>
77
- ``||math: pick random [0] to [10]||``<br/>
78
- blocks.
61
+ - :calculator: From the ``||math:Math||`` category, drag out the<br/>
62
+
63
+ ```block
64
+ randint(-80, 80)
65
+ ```
66
+ block.
79
67
 
80
- - :mouse pointer: Add the first to the [__*vx*__](#whatVX "horizontal velocity") argument of the<br/>
81
- ``||variables(sprites):set [projectile] to projectile [⭐] from [mySprite] with vx [50] vy [50]||``<br/>
68
+ - :mouse pointer: Add this block to the [__*vx*__](#whatVX "horizontal velocity") value of the<br/>
69
+ ``||variables(sprites):set [star] to projectile [⭐] from [mySprite] with vx [50] vy [50]||``<br/>
82
70
  block.
83
71
 
84
- - :mouse pointer: Add the second to the [__*vy*__](#whatVY "vertical velocity") argument.
72
+ ```blockconfig.local
73
+ randint(-80, 80)
74
+ ```
85
75
 
76
+ #### ~ tutorialhint
86
77
 
87
78
  ```blocks
88
79
  let audience: Sprite = null
@@ -90,26 +81,28 @@ let audience: Sprite = null
90
81
  controller.A.onEvent(ControllerButtonEvent.Pressed, function () {
91
82
  info.changeScoreBy(1)
92
83
  audience.setImage(assets.image`clap1`)
93
- projectile = sprites.createProjectileFromSprite(assets.image`star`, audience, randint(0, 10), randint(0, 10))
84
+ projectile = sprites.createProjectileFromSprite(assets.image`star`, audience, randint(-80, 80), 50)
94
85
  })
95
86
  ```
96
87
 
97
-
98
88
  ## {Step 6}
99
89
 
90
+ - :calculator: Now, drag out the e<br/>
100
91
 
101
- - :mouse pointer: Change the range of the first<br/>
102
- ``||math: pick random [0] to [10]||``<br/>
103
- block (next to **vx**) to pick between
104
- **-100** and **100**.<br/>This will scatter stars randomly from side to side.
92
+ ```block
93
+ randint(-50, -100)
94
+ ```
95
+ block
105
96
 
106
- - :mouse pointer: Change the range of the second<br/>
107
- ``||math: pick random [0] to [10]||``<br/>
108
- block (next to **vy**) to pick between
109
- **-50** and **-100**.<br/>
110
- This will make sure the stars only move upward.
97
+ - :mouse pointer: Add this block to the [__*vy*__](#whatVY "horizontal velocity") value of the<br/>
98
+ ``||variables(sprites):set [star] to projectile [] from [mySprite] with vx [pick random] vy [50]||``<br/>
99
+ block.
111
100
 
101
+ ```blockconfig.local
102
+ randint(-50, -100)
103
+ ```
112
104
 
105
+ #### ~ tutorialhint
113
106
 
114
107
  ```blocks
115
108
  let audience: Sprite = null
@@ -117,7 +110,7 @@ let audience: Sprite = null
117
110
  controller.A.onEvent(ControllerButtonEvent.Pressed, function () {
118
111
  info.changeScoreBy(1)
119
112
  audience.setImage(assets.image`clap1`)
120
- projectile = sprites.createProjectileFromSprite(assets.image`star`, audience, randint(-100, 100), randint(-50, -100))
113
+ projectile = sprites.createProjectileFromSprite(assets.image`star`, audience, randint(-80, 80), randint(-50, -100))
121
114
  })
122
115
  ```
123
116
 
@@ -142,6 +135,13 @@ continue on to figure out how to toss roses!
142
135
 
143
136
 
144
137
 
138
+ ```blockconfig.global
139
+ game.over(true, effects.confetti)
140
+ let audience = sprites.create(assets.image`clap1`, SpriteKind.Player)
141
+ audience.setImage(assets.image`clap2`)
142
+ audience.bottom = 120
143
+ let star = sprites.createProjectileFromSprite(img`.`, audience, 50, 50)
144
+ ```
145
145
 
146
146
 
147
147
  ```template
@@ -157,8 +157,8 @@ controller.A.onEvent(ControllerButtonEvent.Released, function () {
157
157
  })
158
158
  let audience: Sprite = null
159
159
  scene.setBackgroundImage(assets.image`stage`)
160
- let mySprite = sprites.create(assets.image`towering turtles`, SpriteKind.Player)
161
- mySprite.bottom = 115
160
+ let talent = sprites.create(assets.image`towering turtles`, SpriteKind.Player)
161
+ talent.bottom = 115
162
162
  audience = sprites.create(assets.image`clap1`, SpriteKind.Player)
163
163
  audience.bottom = 120
164
164
  game.splash("Press (A) to play!")
@@ -166,11 +166,6 @@ info.startCountdown(10)
166
166
  ```
167
167
 
168
168
 
169
-
170
- ```package
171
- simple-blocks=github:microsoft/arcade-tutorial-extensions/simple-blocks/
172
- ```
173
-
174
169
  ```assetjson
175
170
  {
176
171
  "README.md": " ",
@@ -1,9 +1,10 @@
1
1
  # Coming Up Roses
2
+ ### @explicitHints true
2
3
 
3
4
 
4
5
  ## {Introduction @showdialog}
5
6
 
6
- Let's add some variety! Show your performer love with roses.
7
+ Let's add some variety! Show your talent love with roses.
7
8
 
8
9
  ![Click away](/static/skillmap/star/star4.gif "Evrything's coming up roses!" )
9
10
 
@@ -17,20 +18,25 @@ Instead of always throwing stars, we can put a whole list of items inside the **
17
18
  - :mouse pointer: Open the ``||simplified:Simplified||`` category.
18
19
 
19
20
  - :puzzle: Grab<br/>
20
- ``||simplified:choose one of [ ] [ ] +||``<br/>
21
+
22
+ ```block
23
+ simplified.chooseRandomImage(img`.`, img`.`)
24
+ ```
21
25
  and use it to replace the image of the star in the **projectile**
22
26
  block (inside of <br/>
23
27
  ``||controller:on [A] button [pressed]||``).
24
28
 
25
29
  - :mouse pointer: Click **Next** to move on to the next instruction.
26
30
 
31
+ #### ~ tutorialhint
32
+
27
33
  ```blocks
28
34
  let audience: Sprite = null
29
35
  controller.A.onEvent(ControllerButtonEvent.Pressed, function () {
30
36
  info.changeScoreBy(1)
31
37
  audience.setImage(assets.image`clap1`)
32
38
  //@highlight
33
- let projectile = sprites.createProjectileFromSprite(simplified.chooseRandomImage(img`.`, img`.`), audience, randint(-100, 100), randint(-50, -100))
39
+ let star = sprites.createProjectileFromSprite(simplified.chooseRandomImage(img`.`, img`.`), audience, randint(-80, 80), randint(-50, -100))
34
40
  })
35
41
  ```
36
42
 
@@ -40,6 +46,7 @@ controller.A.onEvent(ControllerButtonEvent.Pressed, function () {
40
46
  - :paint brush: Click the empty grey squares and toggle to **My Assets**
41
47
  to grab a star for the first box and a rose for the second one.
42
48
 
49
+ #### ~ tutorialhint
43
50
 
44
51
  ```blocks
45
52
  let audience: Sprite = null
@@ -47,7 +54,7 @@ controller.A.onEvent(ControllerButtonEvent.Pressed, function () {
47
54
  info.changeScoreBy(1)
48
55
  audience.setImage(assets.image`clap1`)
49
56
  //@highlight
50
- let projectile = sprites.createProjectileFromSprite(simplified.chooseRandomImage(assets.image`star`, assets.image`rose`), audience, randint(-100, 100), randint(-50, -100))
57
+ let star = sprites.createProjectileFromSprite(simplified.chooseRandomImage(assets.image`star`, assets.image`rose`), audience, randint(-80, 80), randint(-50, -100))
51
58
 
52
59
  })
53
60
  ```
@@ -66,20 +73,24 @@ Does the audience now throw a random number of stars and roses?
66
73
  ---
67
74
 
68
75
  - :mouse pointer: Click the white **plus** at the right of <br/>
69
- ``||simplified:choose one of [⭐] [🌹] +||`` <br/>
76
+
77
+ ```block
78
+ simplified.chooseRandomImage(assets.image`star`, assets.image`rose`, img`.`)
79
+ ```
70
80
  to create a new empty box.
71
81
 
72
82
  - :paint brush: Click the new empty box and draw another item for the audience to send to the stage (like hearts or flower petals.)
73
83
 
74
84
  _💡 You can choose up to **5** things!_
75
85
 
86
+ #### ~ tutorialhint
76
87
 
77
88
  ```blocks
78
89
  let mySprite: Sprite = null
79
90
  controller.A.onEvent(ControllerButtonEvent.Pressed, function () {
80
91
  info.changeScoreBy(1)
81
92
  mySprite.setImage(assets.image`clap1`)
82
- projectile = sprites.createProjectileFromSprite(simplified.chooseRandomImage(assets.image`star`, assets.image`rose`, img`
93
+ let star = sprites.createProjectileFromSprite(simplified.chooseRandomImage(assets.image`star`, assets.image`rose`, img`
83
94
  . . . . . . . . . . . . . . . .
84
95
  . . . . . . . . . . . . . . . .
85
96
  . . . . . . . . . . . . . . . .
@@ -96,7 +107,7 @@ controller.A.onEvent(ControllerButtonEvent.Pressed, function () {
96
107
  . . . . . . . . 2 . . . . . . .
97
108
  . . . . . . . . . . . . . . . .
98
109
  . . . . . . . . . . . . . . . .
99
- `), audience, randint(-100, 100), randint(-50, -100))
110
+ `), audience, randint(-80, 80), randint(-50, -100))
100
111
  })
101
112
  ```
102
113
 
@@ -116,12 +127,19 @@ When you're finished, click **Done** to return to the main page where you can
116
127
  collect your badge and share your final game with family and friends.
117
128
 
118
129
 
130
+ ```blockconfig.global
131
+ game.over(true, effects.confetti)
132
+ let audience = sprites.create(assets.image`clap1`, SpriteKind.Player)
133
+ audience.setImage(assets.image`clap2`)
134
+ audience.bottom = 120
135
+ let star = sprites.createProjectileFromSprite(img`.`, audience, 50, 50)
136
+ ```
119
137
 
120
138
  ```template
121
139
  controller.A.onEvent(ControllerButtonEvent.Pressed, function () {
122
140
  info.changeScoreBy(1)
123
141
  audience.setImage(assets.image`clap2`)
124
- projectile = sprites.createProjectileFromSprite(assets.image`star`, audience, randint(-100, 100), randint(-50, -100))
142
+ let star = sprites.createProjectileFromSprite(assets.image`star`, audience, randint(-80, 80), randint(-50, -100))
125
143
  })
126
144
  info.onCountdownEnd(function () {
127
145
  game.over(true, effects.hearts)
@@ -131,8 +149,8 @@ controller.A.onEvent(ControllerButtonEvent.Released, function () {
131
149
  })
132
150
  let audience: Sprite = null
133
151
  scene.setBackgroundImage(assets.image`stage`)
134
- let mySprite = sprites.create(assets.image`towering turtles`, SpriteKind.Player)
135
- mySprite.bottom = 115
152
+ let talent = sprites.create(assets.image`towering turtles`, SpriteKind.Player)
153
+ talent.bottom = 115
136
154
  audience = sprites.create(assets.image`clap1`, SpriteKind.Player)
137
155
  audience.bottom = 120
138
156
  game.splash("Press (A) to play!")