pxt-arcade 1.7.3 → 1.7.7

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 (227) hide show
  1. package/built/common-sim.d.ts +2 -0
  2. package/built/common-sim.js +4 -0
  3. package/built/target.js +1788 -236
  4. package/built/target.json +1788 -236
  5. package/built/targetlight.json +5 -5
  6. package/built/theme.json +3 -2
  7. package/docs/gamejam/global-2021.html +459 -0
  8. package/docs/hour-of-code/all.md +27 -0
  9. package/docs/hour-of-code/{educators.html → educators-2020.html} +25 -25
  10. package/docs/hour-of-code/educators-2021.html +625 -0
  11. package/docs/{hour-of-code.html → hour-of-code-2020.html} +37 -37
  12. package/docs/hour-of-code-2021.html +438 -183
  13. package/docs/hour-of-code-ref.json +3 -0
  14. package/docs/index-ref.json +1 -1
  15. package/docs/multipart-tutorials.md +0 -8
  16. package/docs/projects/SUMMARY.md +3 -2
  17. package/docs/recipes.md +0 -7
  18. package/docs/skillmap/clicker/clicker1.md +7 -7
  19. package/docs/skillmap/clicker/clicker2.md +9 -9
  20. package/docs/skillmap/clicker/clicker3.md +8 -8
  21. package/docs/skillmap/clicker/clicker4.md +8 -8
  22. package/docs/skillmap/clicker/clicker4a.md +7 -7
  23. package/docs/skillmap/clicker/clicker5.md +3 -3
  24. package/docs/skillmap/clicker-themed/clickert1.md +66 -38
  25. package/docs/skillmap/clicker-themed/clickert2.md +77 -58
  26. package/docs/skillmap/clicker-themed/clickert3.md +75 -55
  27. package/docs/skillmap/clicker-themed/clickert4.md +105 -118
  28. package/docs/skillmap/collector/collector1.md +11 -11
  29. package/docs/skillmap/collector/collector1a.md +8 -8
  30. package/docs/skillmap/collector/collector2.md +8 -8
  31. package/docs/skillmap/collector/collector3.md +8 -8
  32. package/docs/skillmap/collector/collector3a.md +7 -7
  33. package/docs/skillmap/collector/collector4.md +8 -8
  34. package/docs/skillmap/collector/collector5.md +2 -2
  35. package/docs/skillmap/collector-themed/collectort1.md +107 -88
  36. package/docs/skillmap/collector-themed/collectort2.md +109 -87
  37. package/docs/skillmap/collector-themed/collectort3.md +138 -115
  38. package/docs/skillmap/collector-themed/collectort4.md +130 -118
  39. package/docs/skillmap/collector-themed/collectort4old.md +23 -23
  40. package/docs/skillmap/collector-themed/collectort5.md +2 -2
  41. package/docs/skillmap/educator-info/forest-map-info.md +34 -25
  42. package/docs/skillmap/educator-info/pongo-map-info.md +55 -0
  43. package/docs/skillmap/educator-info/racer-map-info.md +105 -0
  44. package/docs/skillmap/educator-info/rockstar-map-info.md +1 -1
  45. package/docs/skillmap/educator-info/simple-shark-map-info.md +101 -0
  46. package/docs/skillmap/forest/forest1.md +1 -69
  47. package/docs/skillmap/forest/forest2.md +5 -65
  48. package/docs/skillmap/forest/forest3.md +1 -174
  49. package/docs/skillmap/forest/forest4.md +2 -336
  50. package/docs/skillmap/forest/forest5.md +1 -396
  51. package/docs/skillmap/forest/forest6.md +6 -372
  52. package/docs/skillmap/forest-old.md +92 -0
  53. package/docs/skillmap/forest.md +9 -9
  54. package/docs/skillmap/forest_new/forest1.md +191 -0
  55. package/docs/skillmap/forest_new/forest2.md +217 -0
  56. package/docs/skillmap/forest_new/forest3.md +333 -0
  57. package/docs/skillmap/forest_new/forest4.md +196 -0
  58. package/docs/skillmap/forest_new/forest5.md +291 -0
  59. package/docs/skillmap/forest_new/forest6.md +272 -0
  60. package/docs/skillmap/interface/activity1.md +41 -49
  61. package/docs/skillmap/jungle/jungle1.md +48 -28
  62. package/docs/skillmap/jungle/jungle2.md +50 -26
  63. package/docs/skillmap/jungle/jungle3.md +48 -27
  64. package/docs/skillmap/jungle/jungle4.md +76 -58
  65. package/docs/skillmap/jungle/jungle5.md +31 -25
  66. package/docs/skillmap/jungle/jungle6.md +34 -28
  67. package/docs/skillmap/jungle/jungle7.md +36 -24
  68. package/docs/skillmap/jungle/jungle8.md +27 -25
  69. package/docs/skillmap/jungle.md +7 -3
  70. package/docs/skillmap/long-shark.md +119 -0
  71. package/docs/skillmap/pongo/pongo1.md +256 -0
  72. package/docs/skillmap/pongo/pongo2.md +179 -0
  73. package/docs/skillmap/pongo/pongo3.md +177 -0
  74. package/docs/skillmap/pongo.md +59 -0
  75. package/docs/skillmap/racer.md +7 -7
  76. package/docs/skillmap/rockstar/rockstar1.md +32 -41
  77. package/docs/skillmap/rockstar/rockstar2.md +45 -27
  78. package/docs/skillmap/rockstar/rockstar3.md +45 -27
  79. package/docs/skillmap/rockstar.md +3 -1
  80. package/docs/skillmap/shark/shark1-simple.md +151 -0
  81. package/docs/skillmap/shark/shark2-simple.md +203 -0
  82. package/docs/skillmap/shark/shark3-simple.md +204 -0
  83. package/docs/skillmap/shark/shark4-simple.md +246 -0
  84. package/docs/skillmap/shark/shark4a-simple.md +244 -0
  85. package/docs/skillmap/shark.md +25 -58
  86. package/docs/skillmap/space/space1.md +63 -29
  87. package/docs/skillmap/space/space2.md +34 -25
  88. package/docs/skillmap/space/space3.md +86 -69
  89. package/docs/skillmap/space/space4.md +96 -65
  90. package/docs/skillmap/space/space4a.md +34 -25
  91. package/docs/skillmap/space/space5.md +81 -45
  92. package/docs/skillmap/space/space6.md +59 -81
  93. package/docs/skillmap/space.md +8 -5
  94. package/docs/skillmap/story/card.md +6 -6
  95. package/docs/skillmap/story/card2.md +6 -6
  96. package/docs/skillmap/story/story1.md +60 -175
  97. package/docs/skillmap/story/story2.md +89 -327
  98. package/docs/skillmap/story/story3.md +238 -228
  99. package/docs/skillmap/story/story4.md +23 -23
  100. package/docs/skillmap/zoo/zoo1.md +31 -16
  101. package/docs/skillmap/zoo/zoo2.md +45 -30
  102. package/docs/skillmap/zoo/zoo2a.md +51 -36
  103. package/docs/skillmap/zoo/zoo3.md +8 -7
  104. package/docs/skillmap/zoo/zoo4.md +61 -32
  105. package/docs/skillmap/zoo/zoo5.md +41 -31
  106. package/docs/skillmap/zoo.md +2 -2
  107. package/docs/skillmaps.md +20 -4
  108. package/docs/static/experiments/accessibleblocks.png +0 -0
  109. package/docs/static/experiments/blockserrorlist.png +0 -0
  110. package/docs/static/gamejam/jams/global-2021/assets/banner.png +0 -0
  111. package/docs/static/gamejam/jams/global-2021/info.json +10 -0
  112. package/docs/static/gamejam/jams/global-2021/rules.md +22 -0
  113. package/docs/static/gamejam/jams/global-2021/style.css +141 -0
  114. package/docs/static/gamejam/lib/gamejam.d.ts +1 -0
  115. package/docs/static/gamejam/lib/gamejam.js +34 -24
  116. package/docs/static/gamejam/lib/gamejam.ts +35 -24
  117. package/docs/static/hero-gallery/stream.png +0 -0
  118. package/docs/static/hour-of-code/{apple.png → 2020/apple.png} +0 -0
  119. package/docs/static/hour-of-code/{arcade.png → 2020/arcade.png} +0 -0
  120. package/docs/static/hour-of-code/{asphodel.png → 2020/asphodel.png} +0 -0
  121. package/docs/static/hour-of-code/{card.png → 2020/card.png} +0 -0
  122. package/docs/static/hour-of-code/{chase-the-pizza.png → 2020/chase-the-pizza.png} +0 -0
  123. package/docs/static/hour-of-code/{clovers.png → 2020/clovers.png} +0 -0
  124. package/docs/static/hour-of-code/{design.png → 2020/design.png} +0 -0
  125. package/docs/static/hour-of-code/{educators → 2020/educators}/asphodel-level1.png +0 -0
  126. package/docs/static/hour-of-code/{educators → 2020/educators}/asphodel-level4.png +0 -0
  127. package/docs/static/hour-of-code/{educators → 2020/educators}/asphodel-level6.png +0 -0
  128. package/docs/static/hour-of-code/{educators → 2020/educators}/asphodel-level7.png +0 -0
  129. package/docs/static/hour-of-code/{educators → 2020/educators}/asphodel-level9.png +0 -0
  130. package/docs/static/hour-of-code/{educators → 2020/educators}/clover-design.gif +0 -0
  131. package/docs/static/hour-of-code/{educators → 2020/educators}/shark-attack-tutorial.png +0 -0
  132. package/docs/static/hour-of-code/{galga.png → 2020/galga.png} +0 -0
  133. package/docs/static/hour-of-code/{lemon-leak.png → 2020/lemon-leak.png} +0 -0
  134. package/docs/static/hour-of-code/{micro-bit.png → 2020/micro-bit.png} +0 -0
  135. package/docs/static/hour-of-code/{minecraft.png → 2020/minecraft.png} +0 -0
  136. package/docs/static/hour-of-code/{nfl.png → 2020/nfl.png} +0 -0
  137. package/docs/static/hour-of-code/{ocean-jam.png → 2020/ocean-jam.png} +0 -0
  138. package/docs/static/hour-of-code/{pixel-background-primary.png → 2020/pixel-background-primary.png} +0 -0
  139. package/docs/static/hour-of-code/{pixel-background-secondary.png → 2020/pixel-background-secondary.png} +0 -0
  140. package/docs/static/hour-of-code/{shadowed-aside-frame.png → 2020/shadowed-aside-frame.png} +0 -0
  141. package/docs/static/hour-of-code/{shadowed-button-frame.png → 2020/shadowed-button-frame.png} +0 -0
  142. package/docs/static/hour-of-code/{shadowed-primary-frame.png → 2020/shadowed-primary-frame.png} +0 -0
  143. package/docs/static/hour-of-code/{shark-attack.png → 2020/shark-attack.png} +0 -0
  144. package/docs/static/hour-of-code/{simulator.gif → 2020/simulator.gif} +0 -0
  145. package/docs/static/hour-of-code/{simulator.png → 2020/simulator.png} +0 -0
  146. package/docs/static/hour-of-code/{styles.css → 2020/styles.css} +1 -1
  147. package/docs/static/hour-of-code/2021/Rowdies/OFL.txt +93 -0
  148. package/docs/static/hour-of-code/2021/Rowdies/Rowdies-Bold.ttf +0 -0
  149. package/docs/static/hour-of-code/2021/Rowdies/Rowdies-Regular.ttf +0 -0
  150. package/docs/static/hour-of-code/2021/beginner-skillmap.png +0 -0
  151. package/docs/static/hour-of-code/2021/favicon.png +0 -0
  152. package/docs/static/hour-of-code/2021/forest-skillmap-game.gif +0 -0
  153. package/docs/static/hour-of-code/2021/game-jam-hero.png +0 -0
  154. package/docs/static/hour-of-code/2021/hoc-2020.png +0 -0
  155. package/docs/static/hour-of-code/2021/hoc-card.png +0 -0
  156. package/docs/static/hour-of-code/2021/hoc-header-educators.png +0 -0
  157. package/docs/static/hour-of-code/2021/hoc-header-plane.gif +0 -0
  158. package/docs/static/hour-of-code/2021/hoc-header-scene.gif +0 -0
  159. package/docs/static/hour-of-code/2021/jungle-skillmap.png +0 -0
  160. package/docs/static/hour-of-code/2021/makecode-example.png +0 -0
  161. package/docs/static/hour-of-code/2021/microbit.png +0 -0
  162. package/docs/static/hour-of-code/2021/minecraft.png +0 -0
  163. package/docs/static/hour-of-code/2021/rockstar-skillmap.png +0 -0
  164. package/docs/static/hour-of-code/2021/styles.css +660 -62
  165. package/docs/static/logo.png +0 -0
  166. package/docs/static/skillmap/assets/my-assets-three.png +0 -0
  167. package/docs/static/skillmap/assets/sprite-from-container.gif +0 -0
  168. package/docs/static/skillmap/backgrounds/jungle-bg.png +0 -0
  169. package/docs/static/skillmap/backgrounds/jungle-map.png +0 -0
  170. package/docs/static/skillmap/backgrounds/rock-map.png +0 -0
  171. package/docs/static/skillmap/backgrounds/rockstar-card.gif +0 -0
  172. package/docs/static/skillmap/backgrounds/space-comp.png +0 -0
  173. package/docs/static/skillmap/backgrounds/space.png +0 -0
  174. package/docs/static/skillmap/certificates/forest-cert.pdf +0 -0
  175. package/docs/static/skillmap/certificates/forest-cert.png +0 -0
  176. package/docs/static/skillmap/certificates/jungle-cert.pdf +0 -0
  177. package/docs/static/skillmap/certificates/jungle-cert.png +0 -0
  178. package/docs/static/skillmap/certificates/rockstar-cert.pdf +0 -0
  179. package/docs/static/skillmap/certificates/rockstar-cert.png +0 -0
  180. package/docs/static/skillmap/certificates/shark-cert.pdf +0 -0
  181. package/docs/static/skillmap/certificates/shark-cert.png +0 -0
  182. package/docs/static/skillmap/certificates/space-cert.pdf +0 -0
  183. package/docs/static/skillmap/certificates/space-cert.png +0 -0
  184. package/docs/static/skillmap/pongo/pongo1.gif +0 -0
  185. package/docs/static/skillmap/pongo/pongo2gif +0 -0
  186. package/docs/static/skillmap/pongo/pongo3.gif +0 -0
  187. package/docs/static/skillmap/racer/racer1.gif +0 -0
  188. package/docs/static/skillmap/racer/racer2.gif +0 -0
  189. package/docs/static/skillmap/racer/racer3.gif +0 -0
  190. package/docs/static/skillmap/rockstar/rockstar1.gif +0 -0
  191. package/docs/static/skillmap/rockstar/rockstar2.gif +0 -0
  192. package/docs/static/skillmap/rockstar/rockstar3.gif +0 -0
  193. package/docs/static/skillmap/shark/shark1-simple.gif +0 -0
  194. package/docs/static/skillmap/shark/shark4a-simple.gif +0 -0
  195. package/docs/static/skillmap/zoo/overlaps-food-sprite.gif +0 -0
  196. package/docs/tutorials/barrel-dodger.md +4 -4
  197. package/docs/tutorials/collect-the-clovers.md +2 -2
  198. package/docs/tutorials/froggy.md +105 -90
  199. package/docs/tutorials/hundred.md +400 -0
  200. package/package.json +3 -3
  201. package/pxtarget.json +3 -2
  202. package/targetconfig.json +4 -1
  203. package/docs/recipes/wonder-woman-1984/01-maze.md +0 -291
  204. package/docs/recipes/wonder-woman-1984/02-artifact.md +0 -70
  205. package/docs/recipes/wonder-woman-1984/03-enemies.md +0 -65
  206. package/docs/skillmap/forest/forest9.md +0 -714
  207. package/docs/static/hour-of-code/2021/placeholder.png +0 -0
  208. package/docs/static/hour-of-code/ww-maze.png +0 -0
  209. package/docs/static/recipes/wonder-woman-1984/artifact-preview.png +0 -0
  210. package/docs/static/recipes/wonder-woman-1984/artifacts-location.gif +0 -0
  211. package/docs/static/recipes/wonder-woman-1984/draw-maze-backup.png +0 -0
  212. package/docs/static/recipes/wonder-woman-1984/draw-walls-backup.png +0 -0
  213. package/docs/static/recipes/wonder-woman-1984/end-position.png +0 -0
  214. package/docs/static/recipes/wonder-woman-1984/enemies-location.gif +0 -0
  215. package/docs/static/recipes/wonder-woman-1984/enemies-preview.png +0 -0
  216. package/docs/static/recipes/wonder-woman-1984/fill-maze.gif +0 -0
  217. package/docs/static/recipes/wonder-woman-1984/fill-walls.gif +0 -0
  218. package/docs/static/recipes/wonder-woman-1984/wonder-woman3.png +0 -0
  219. package/docs/static/recipes/wonder-woman-1984/ww-splash3.gif +0 -0
  220. package/docs/static/recipes/wonder-woman-1984/ww-splash3.mp4 +0 -0
  221. package/docs/static/ww84-background.png +0 -0
  222. package/docs/static/ww84-header.png +0 -0
  223. package/docs/ww84.html +0 -276
  224. package/sim/public/locales/zh-CN/bundled-strings.json +0 -1800
  225. package/sim/public/locales/zh-CN/target-strings.json +0 -13
  226. package/sim/public/locales/zh-TW/bundled-strings.json +0 -1903
  227. package/sim/public/locales/zh-TW/target-strings.json +0 -8
@@ -9,14 +9,14 @@ This tutorial will show you how to level-up after earning 10 points.
9
9
  ![Level Up!](/static/skillmap/space/spacet5.gif "Your patience shall be rewarded")
10
10
 
11
11
 
12
- ## Step 2
12
+ ## 2. Look Around
13
13
  **This game is amazing!**
14
14
 
15
- Take a minute to look at each separate chunk of code. Can you remember what they all do?
15
+ Take a minute to look at each separate chunk of code. Can you remember what everything does?
16
16
 
17
17
  ---
18
18
 
19
- Find the value that sets the speed of your enemy ship. How do you think you can make it go faster or slower?
19
+ - :binoculars: Find the value that sets the velocity of your enemy ship. How do you think you would make it go faster or slower?
20
20
 
21
21
 
22
22
 
@@ -25,32 +25,34 @@ Take a minute to look at each separate chunk of code. Can you remember what the
25
25
  myEnemy = sprites.createProjectileFromSide(assets.image`Spider`, 0, 50)
26
26
  ```
27
27
 
28
- ## Step 3
28
+ ## 3. Speed the Ships
29
29
 
30
30
  **Leveling-up should make enemy ships faster.**
31
31
 
32
- If we want to use a value for their speed that changes
32
+ If we want to use a value for enemy speed that changes
33
33
  during game-play, we're going to need a [__*variable*__](#varied "a label that holds the place for something that can change").
34
34
 
35
35
  ---
36
36
 
37
- Under the ``||variables:Variables||`` category, click inside the orange rectangle where it says
37
+ - :align justify: Under the ``||variables:Variables||`` category, click inside the orange rectangle where it says
38
38
  **Make a Variable...**.
39
39
 
40
- Name your new variable **enemySpeed** and click **Ok**.
40
+ - :mouse pointer: Name your new variable **enemySpeed** and click **Ok**.
41
41
 
42
42
 
43
43
 
44
- ## Step 4
44
+ ## 4. Variable Value
45
45
 
46
46
  **Before we can use the new variable, we need to give it a value.**
47
47
 
48
48
  ---
49
49
 
50
- From the ``||variables:Variables||`` category, grab ``||variables:set [enemySpeed] to [0]||``
51
- and snap it into **the bottom** of the ``||loops:on start||`` container.
50
+ - :align justify: Grab
51
+ ``||variables:set [enemySpeed] to [0]||``
52
+ and snap it into **the bottom** of the
53
+ ``||loops:on start||`` container.
52
54
 
53
- Change the value from **0** to **50**.
55
+ - :mouse pointer: Change the value from **0** to **50**.
54
56
 
55
57
 
56
58
  ```blocks
@@ -68,7 +70,7 @@ let enemySpeed = 50
68
70
  ```
69
71
 
70
72
 
71
- ## Step 5
73
+ ## 5. Add Velocity
72
74
 
73
75
  **🚀 Let's Fly 🚀**
74
76
 
@@ -77,10 +79,12 @@ to control the enemy ship's **vy** (vertical velocity).
77
79
 
78
80
  ---
79
81
 
80
- Go back to the ``||game:on game update every [2000]ms||`` container and find the block that sets-up the
82
+ - :mouse pointer: Go back to the
83
+ ``||game:on game update every [2000]ms||``
84
+ container that's already in your workspace, and find the block that sets-up the
81
85
  ``||variables:myEnemy||`` projectile.
82
86
 
83
- From ``||variables:Variables||`` grab ``||variables:enemySpeed||`` and snap it in to
87
+ - :align justify: Grab ``||variables:enemySpeed||`` and snap it in to
84
88
  replace the **vy** value of **50**.
85
89
 
86
90
 
@@ -94,15 +98,17 @@ game.onUpdateInterval(2000, function () {
94
98
  })
95
99
  ```
96
100
 
97
- ## Step 6
101
+ ## 6. Try it Out
98
102
 
99
103
  **🕹️ Play your game and make sure it works exactly the same as before 🕹️**
100
104
 
105
+ ---
106
+
101
107
  You shouldn't notice any difference in the speed of the ship.
102
108
 
103
109
 
104
110
 
105
- ## Step 7
111
+ ## 7. Trigger the Change
106
112
 
107
113
  **👀 Watch the score 👀**
108
114
 
@@ -110,9 +116,13 @@ We need code that checks to see **if** the score is **10** every time the player
110
116
 
111
117
  ---
112
118
 
113
- Find the ``||sprites:on [sprite] of kind [Projectile] overlaps [otherSprite] of kind [Enemy]||`` container already in your workspace.
119
+ - :binoculars: Find the
120
+ ``||sprites:on [sprite] of kind [Projectile] overlaps [otherSprite] of kind [Enemy]||``
121
+ container already in your workspace.
114
122
 
115
- From the ``||logic:Logic||`` category, drag a ``||logic:if <true> then||`` container and snap it into **the bottom** of the
123
+ - :random: Drag out a
124
+ ``||logic:if <true> then||``
125
+ container and snap it into **the bottom** of the
116
126
  **on Projectile overlaps Enemy** container.
117
127
 
118
128
 
@@ -128,13 +138,15 @@ sprites.onOverlap(SpriteKind.Projectile, SpriteKind.Enemy, function (sprite, oth
128
138
  ```
129
139
 
130
140
 
131
- ## Step 8
141
+ ## 8. Set the Points
132
142
 
133
- From ``||logic:Logic||``, grab ``||logic:<[0] [=] [0]>||`` and snap it in to the **if statement** to replace **true**.
143
+ - :random: Grab
144
+ ``||logic:<[0] [=] [0]>||``
145
+ and snap it in to the **if statement** to replace **`<true>`**.
134
146
 
135
- From ``||info:Info||``, grab ``||info:score||`` and snap it in to replace the **0** to the left of the **=**.
147
+ - :id card: Grab ``||info:score||`` and snap it in to replace the **0** to the left of the **=**.
136
148
 
137
- Change the **0** on the right of the **=** to **10**.
149
+ - :mouse pointer: Change the **0** on the right of the **=** to **10**.
138
150
 
139
151
  ```blocks
140
152
  sprites.onOverlap(SpriteKind.Projectile, SpriteKind.Enemy, function (sprite, otherSprite) {
@@ -149,16 +161,19 @@ sprites.onOverlap(SpriteKind.Projectile, SpriteKind.Enemy, function (sprite, oth
149
161
  ```
150
162
 
151
163
 
152
- ## Step 8
164
+ ## 9. Level-Up
153
165
 
154
166
  The first thing we should do when the score gets to **10** is give a level-up bonus!
155
167
 
156
168
  ---
157
169
 
158
- From ``||info:Info||``, grab ``||info:change score by [1]||`` and snap it inside the empty
159
- ``||logic:if <[score] [=] [10]> then||`` logic container.
170
+ - :id card: Grab
171
+ ``||info:change score by [1]||``
172
+ and snap it inside the empty
173
+ ``||logic:if <[score] [=] [10]> then||``
174
+ logic container.
160
175
 
161
- Change the amount added to the score from **1** to **5**.
176
+ - :mouse pointer: Change the amount added to the score from **1** to **5**.
162
177
 
163
178
 
164
179
  ```blocks
@@ -173,7 +188,7 @@ sprites.onOverlap(SpriteKind.Projectile, SpriteKind.Enemy, function (sprite, oth
173
188
  ```
174
189
 
175
190
 
176
- ## Step 9
191
+ ## 10. Bonus
177
192
 
178
193
  **📢 Say it LOUD 📢**
179
194
 
@@ -181,12 +196,15 @@ Let the player know they've earned a bonus!
181
196
 
182
197
  ---
183
198
 
184
- From ``||sprites:Sprites||``, drag ``||sprites:[mySprite] say [":)"]||`` into **the bottom**
185
- of the ``||logic:if <[score] [=] [10]> then||`` container.
199
+ - :paper plane: Drag
200
+ ``||sprites:[mySprite] say [":)"] ➕||``
201
+ into **the bottom** of the
202
+ ``||logic:if <[score] [=] [10]> then||``
203
+ container.
186
204
 
187
- Change the message to say **"+5 Level-Up Bonus!"**.
205
+ - :mouse pointer: Change the message to say **"+5 Level-Up Bonus!"**.
188
206
 
189
- Click the **+** to the right of the **say** block and change the length of the display from **500** ms to **2 seconds** (2000 ms).
207
+ - :mouse pointer: Click the to the right of the **say** block and change the length of the display from **500** ms to **2 seconds** (2000 ms).
190
208
 
191
209
 
192
210
 
@@ -199,12 +217,12 @@ sprites.onOverlap(SpriteKind.Projectile, SpriteKind.Enemy, function (sprite, oth
199
217
  if (info.score() == 10) {
200
218
  info.changeScoreBy(5)
201
219
  //@highlight
202
- mySprite.say("+5 Level-Up Bonus", 2000)
220
+ mySprite.sayText("+5 Level-Up Bonus", 2000)
203
221
  }
204
222
  })
205
223
  ```
206
224
 
207
- ## Step 10
225
+ ## 11. Speed It Up!
208
226
 
209
227
  **Here comes the fun part!**
210
228
 
@@ -213,10 +231,13 @@ Time to speed up the enemy ships!
213
231
  ---
214
232
 
215
233
 
216
- From ``||variables:Variables||``, grab ``||variables:set [enemySpeed] to [0]||``
217
- and snap it in to **the bottom** of the ``||logic:if <[score] [=] [10]> then||`` container.
234
+ - :align justify: Grab
235
+ ``||variables:set [enemySpeed] to [0]||``
236
+ and snap it in to **the bottom** of the
237
+ ``||logic:if <[score] [=] [10]> then||``
238
+ container.
218
239
 
219
- Change the value from **0** to **70**.
240
+ - :mouse pointer: Change the value from **0** to **70**.
220
241
 
221
242
  ```blocks
222
243
  let mySprite: Sprite = null
@@ -225,7 +246,7 @@ sprites.onOverlap(SpriteKind.Projectile, SpriteKind.Enemy, function (sprite, oth
225
246
  otherSprite.destroy()
226
247
  info.changeScoreBy(1)
227
248
  if (info.score() == 10) {
228
- mySprite.say("+5 Level-Up Bonus", 2000)
249
+ mySprite.sayText("+5 Level-Up Bonus", 2000)
229
250
  info.changeScoreBy(5)
230
251
  //@highlight
231
252
  enemySpeed = 70
@@ -233,26 +254,27 @@ sprites.onOverlap(SpriteKind.Projectile, SpriteKind.Enemy, function (sprite, oth
233
254
  })
234
255
  ```
235
256
 
236
- ## Step 11
257
+ ## 12. Play Your Game
237
258
  **That's it! That's all you needed to do.**
238
259
 
239
- Since we already have the ``||variables:enemySpeed||`` variable in place for the projectile's **vy**,
240
- it will automatically update when we change the speed in another part of the program!
260
+ Since we already have the ``||variables:enemySpeed||`` variable in place for the projectile's **vy**, it will automatically update when we change the speed in another part of the program!
241
261
 
242
262
  ---
243
263
 
244
- Play your finished game and see if you can get 10 points to level-up!
264
+ Play your finished game and see if you can get 10 points to level-up!
245
265
 
246
266
 
247
267
  ## Finale
248
268
 
249
269
  **Congratulations!!**
250
270
 
251
- Click **Done** to return to the main page where you can add this game to your gallery and share with family & friends.
271
+ ---
272
+
273
+ Click **Done** to return to the main skillmap where you can get your completion certificate before completing one last level that teaches you to customize your darts!
252
274
 
253
275
 
254
276
  ```package
255
- arcade-background-scroll=github:microsoft/arcade-background-scroll/
277
+ arcade-background-scroll=github:microsoft/arcade-background-scroll#926e12eefffd09d453c7cde73f8d6ebd0e666d9d/
256
278
  pxt-status-bar=github:jwunderl/pxt-status-bar
257
279
  ```
258
280
 
@@ -280,6 +302,7 @@ sprites.onOverlap(SpriteKind.Projectile, SpriteKind.Enemy, function (sprite, oth
280
302
  sprites.onOverlap(SpriteKind.Player, SpriteKind.Enemy, function (sprite, otherSprite) {
281
303
  info.changeLifeBy(-1)
282
304
  otherSprite.destroy(effects.disintegrate, 200)
305
+ scene.cameraShake(4, 500)
283
306
  })
284
307
  let myEnemy: Sprite = null
285
308
  let myFuel: Sprite = null
@@ -290,7 +313,14 @@ scene.setBackgroundImage(assets.image`Galaxy`)
290
313
  scroller.scrollBackgroundWithSpeed(0, 10)
291
314
  mySprite = sprites.create(assets.image`Rocket`, SpriteKind.Player)
292
315
  controller.moveSprite(mySprite)
316
+
293
317
  mySprite.setStayInScreen(true)
318
+ animation.runImageAnimation(
319
+ mySprite,
320
+ assets.animation`Flying Rocket`,
321
+ 100,
322
+ true
323
+ )
294
324
 
295
325
  statusbar = statusbars.create(20, 4, StatusBarKind.Energy)
296
326
  statusbar.attachToSprite(mySprite, -25, 0)
@@ -299,11 +329,17 @@ game.onUpdateInterval(5000, function () {
299
329
  myFuel.x = randint(5, 155)
300
330
  myFuel.setKind(SpriteKind.Gas)
301
331
  })
332
+
302
333
  game.onUpdateInterval(2000, function () {
303
334
  myEnemy = sprites.createProjectileFromSide(assets.image`Spider`, 0, 50)
304
335
  myEnemy.x = randint(5, 155)
305
336
  myEnemy.setKind(SpriteKind.Enemy)
306
-
337
+ animation.runImageAnimation(
338
+ myEnemy,
339
+ assets.animation`Flying Spider`,
340
+ 100,
341
+ true
342
+ )
307
343
  })
308
344
  game.onUpdateInterval(300, function () {
309
345
  statusbar.value += -1
@@ -375,7 +411,7 @@ game.onUpdateInterval(300, function () {
375
411
  })
376
412
  forever(function () {
377
413
  if (info.score() == 10) {
378
- mySprite.say("+5 Level-Up Bonus", 2000)
414
+ mySprite.sayText("+5 Level-Up Bonus", 2000)
379
415
  info.changeScoreBy(5)
380
416
  enemySpeed = 70
381
417
  }
@@ -9,7 +9,7 @@ This tutorial will show you how to send an array of different darts when you fir
9
9
  ![Take a shot!](/static/skillmap/space/spacet6.gif "They'll never know what hit them.")
10
10
 
11
11
 
12
- ## Step 2
12
+ ## 2. Start the Darts
13
13
 
14
14
  **🎯 Take aim! 🎯**
15
15
 
@@ -18,11 +18,13 @@ of darts.
18
18
 
19
19
  ---
20
20
 
21
- Expand the ``||statusbars:Advanced||`` category in the toolbox and click
22
- ``||arrays:Arrays||``.
21
+ - :chevron down: Expand the ``||statusbars:Advanced||`` category in the toolbox and click ``||arrays:Arrays||``.
23
22
 
24
- Drag ``||variables:set [list] to array of [0] [1]||`` into **the top** of the
25
- ``||controller:on [A] button [pressed]||`` container already in the workspace.
23
+ - :list ol: Drag
24
+ ``||variables:set [list] to array of [0] [1]||``
25
+ into **the top** of the
26
+ ``||controller:on [A] button [pressed]||``
27
+ container already in the workspace.
26
28
 
27
29
 
28
30
  ```block
@@ -34,16 +36,17 @@ controller.A.onEvent(ControllerButtonEvent.Pressed, function () {
34
36
  })
35
37
  ```
36
38
 
37
- ## Step 3
39
+ ## 3. List of Darts
38
40
 
39
41
  Right now, we have a **list** of numbers. Let's make it a list of darts.
40
42
 
41
43
  ---
42
44
 
43
- Click the name **list** inside ``||variables:set [list] to array of [0] [1]||`` and
44
- choose "Rename variable..." from the dropdown menu.
45
+ - :mouse pointer: Click the name **list** inside
46
+ ``||variables:set [list] to array of [0] [1]||``
47
+ and choose "Rename variable..." from the dropdown menu.
45
48
 
46
- Call your list **darts** and click **Ok**.
49
+ - :mouse pointer: Call your list **darts** and click **Ok**.
47
50
 
48
51
  ```block
49
52
  controller.A.onEvent(ControllerButtonEvent.Pressed, function () {
@@ -54,100 +57,56 @@ controller.A.onEvent(ControllerButtonEvent.Pressed, function () {
54
57
  })
55
58
  ```
56
59
 
57
- ## Step 4
60
+ ## 4. Prepare the Images
58
61
 
59
- Beneath the ``||statusbars:Advanced||`` category in the toolbox, click
62
+ - :image: Beneath the ``||statusbars:Advanced||`` category in the toolbox, click
60
63
  ``||images:Images||``.
61
64
 
62
- Drag out **3** empty grey image boxes into the workspace (we'll use them in
65
+ - :image: Drag out **3** empty grey image boxes into the workspace (we'll use them in
63
66
  the next step).
64
67
 
65
68
 
66
69
 
67
- ## Step 5
70
+ ## 5. Dart Images
68
71
 
69
- Snap the first two grey image boxes into ``||variables:set [list] to array of [0] [1]||`` to
70
- replace the numbers **0** and **1**.
72
+ - :mouse pointer: Snap the first two grey image boxes into
73
+ ``||variables:set [list] to array of [0] [1]||``
74
+ to replace the numbers **0** and **1**.
71
75
 
72
- Add space for the new image box by clicking the **+** symbol at the right of
76
+ - :mouse pointer: Add space for the new image box by clicking the symbol at the right of
73
77
  the block, then snap the last image box into place.
74
78
 
75
79
 
76
80
  ```blocks
77
81
  controller.A.onEvent(ControllerButtonEvent.Pressed, function () {
78
82
  let darts = [img`
79
- . . . . . . . . . . . . . . . .
80
- . . . . . . . . . . . . . . . .
81
- . . . . . . . . . . . . . . . .
82
- . . . . . . . . . . . . . . . .
83
- . . . . . . . . . . . . . . . .
84
- . . . . . . . . . . . . . . . .
85
- . . . . . . . . . . . . . . . .
86
- . . . . . . . . . . . . . . . .
87
- . . . . . . . . . . . . . . . .
88
- . . . . . . . . . . . . . . . .
89
- . . . . . . . . . . . . . . . .
90
- . . . . . . . . . . . . . . . .
91
- . . . . . . . . . . . . . . . .
92
- . . . . . . . . . . . . . . . .
93
- . . . . . . . . . . . . . . . .
94
- . . . . . . . . . . . . . . . .
83
+ .
95
84
  `, img`
96
- . . . . . . . . . . . . . . . .
97
- . . . . . . . . . . . . . . . .
98
- . . . . . . . . . . . . . . . .
99
- . . . . . . . . . . . . . . . .
100
- . . . . . . . . . . . . . . . .
101
- . . . . . . . . . . . . . . . .
102
- . . . . . . . . . . . . . . . .
103
- . . . . . . . . . . . . . . . .
104
- . . . . . . . . . . . . . . . .
105
- . . . . . . . . . . . . . . . .
106
- . . . . . . . . . . . . . . . .
107
- . . . . . . . . . . . . . . . .
108
- . . . . . . . . . . . . . . . .
109
- . . . . . . . . . . . . . . . .
110
- . . . . . . . . . . . . . . . .
111
- . . . . . . . . . . . . . . . .
85
+ .
112
86
  `, img`
113
- . . . . . . . . . . . . . . . .
114
- . . . . . . . . . . . . . . . .
115
- . . . . . . . . . . . . . . . .
116
- . . . . . . . . . . . . . . . .
117
- . . . . . . . . . . . . . . . .
118
- . . . . . . . . . . . . . . . .
119
- . . . . . . . . . . . . . . . .
120
- . . . . . . . . . . . . . . . .
121
- . . . . . . . . . . . . . . . .
122
- . . . . . . . . . . . . . . . .
123
- . . . . . . . . . . . . . . . .
124
- . . . . . . . . . . . . . . . .
125
- . . . . . . . . . . . . . . . .
126
- . . . . . . . . . . . . . . . .
127
- . . . . . . . . . . . . . . . .
128
- . . . . . . . . . . . . . . . .
87
+ .
129
88
  `]
130
89
  let projectile = sprites.createProjectileFromSprite(assets.image`Dart1`, mySprite, 0, -150)
131
90
  projectile.startEffect(effects.ashes)
132
91
  })
133
92
  ```
134
93
 
135
- ## Step 6
94
+ ## 6. Choose Wisely
136
95
 
137
96
  **⤅ Time to choose the darts ⬶**
138
97
 
139
98
  ---
140
99
 
141
- Click the first empty grey image box and toggle to **My Assets** to select **Dart1**.
100
+ - :paint brush: Click the first empty grey image box and toggle to **My Assets** to select **Dart1**.
142
101
 
143
- Click the second empty grey image box and toggle to **My Assets** to select **Dart2**.
102
+ - :paint brush: Click the second empty grey image box and toggle to **My Assets** to select **Dart2**.
144
103
 
145
- In the final box, draw your own dart!
104
+ - :paint brush: In the final box, draw your own dart!
146
105
 
147
106
  ---
148
107
 
149
- **Tip:** Keep in mind that the provided darts are both 3px by 4px in size.
150
- What do you think will happen if you make yours larger or smaller?
108
+ _💡 Keep in mind that the provided darts are both 3px by 4px in size.
109
+ What do you think will happen if you make yours larger or smaller?_
151
110
 
152
111
  ```blocks
153
112
  controller.A.onEvent(ControllerButtonEvent.Pressed, function () {
@@ -162,16 +121,20 @@ controller.A.onEvent(ControllerButtonEvent.Pressed, function () {
162
121
  })
163
122
  ```
164
123
 
165
- ## Step 7
124
+ ## 7. Random Darts
166
125
 
167
126
  **Tell the computer you want a random dart from the array each time you fire!**
168
127
 
169
128
  ---
170
129
 
171
- From ``||arrays:Arrays||``, drag ``||arrays:get random value from [list]||`` in to replace the current
172
- dart image in the ``||variables:set [projectile] to ...||`` block (just beneath the list you have created.)
130
+ - :align justify: From ``||arrays:Arrays||``, drag
131
+ ``||arrays:get random value from [list]||``
132
+ in to replace the current
133
+ dart image in the
134
+ ``||variables:set [projectile] to ...||``
135
+ block (just beneath the list you have created.)
173
136
 
174
- Click **list** and change it to **darts** using the dropdown menu.
137
+ - :mouse pointer: Click **list** and change it to **darts** using the dropdown menu.
175
138
 
176
139
 
177
140
  ```blocks
@@ -188,7 +151,7 @@ controller.A.onEvent(ControllerButtonEvent.Pressed, function () {
188
151
  ```
189
152
 
190
153
 
191
- ## Step 8
154
+ ## 8. Play Your Game!
192
155
 
193
156
  **🎮 Now give your project a try on the game screen 🎮**
194
157
 
@@ -201,14 +164,16 @@ If there's anything you don't like, now is a great time to dig in and change it!
201
164
 
202
165
  **You've done it!!**
203
166
 
167
+ ---
168
+
204
169
  You've finished your Space Explorer game!
205
170
 
206
171
  When you're done playing with it, click **Done** to return to the main
207
- page where you can add this game to your gallery to keep building, then share with family & friends.
172
+ page where you can share with family and friends, then add this game to your gallery to keep building!
208
173
 
209
174
 
210
175
  ```package
211
- arcade-background-scroll=github:microsoft/arcade-background-scroll/
176
+ arcade-background-scroll=github:microsoft/arcade-background-scroll#926e12eefffd09d453c7cde73f8d6ebd0e666d9d/
212
177
  pxt-status-bar=github:jwunderl/pxt-status-bar
213
178
  ```
214
179
 
@@ -236,6 +201,7 @@ sprites.onOverlap(SpriteKind.Projectile, SpriteKind.Enemy, function (sprite, oth
236
201
  sprites.onOverlap(SpriteKind.Player, SpriteKind.Enemy, function (sprite, otherSprite) {
237
202
  info.changeLifeBy(-1)
238
203
  otherSprite.destroy(effects.disintegrate, 200)
204
+ scene.cameraShake(4, 500)
239
205
  })
240
206
  let myEnemy: Sprite = null
241
207
  let myFuel: Sprite = null
@@ -246,7 +212,14 @@ scene.setBackgroundImage(assets.image`Galaxy`)
246
212
  scroller.scrollBackgroundWithSpeed(0, 10)
247
213
  mySprite = sprites.create(assets.image`Rocket`, SpriteKind.Player)
248
214
  controller.moveSprite(mySprite)
215
+
249
216
  mySprite.setStayInScreen(true)
217
+ animation.runImageAnimation(
218
+ mySprite,
219
+ assets.animation`Flying Rocket`,
220
+ 100,
221
+ true
222
+ )
250
223
 
251
224
  statusbar = statusbars.create(20, 4, StatusBarKind.Energy)
252
225
  statusbar.attachToSprite(mySprite, -25, 0)
@@ -257,17 +230,22 @@ game.onUpdateInterval(5000, function () {
257
230
  myFuel.setKind(SpriteKind.Gas)
258
231
  })
259
232
  game.onUpdateInterval(2000, function () {
260
- myEnemy = sprites.createProjectileFromSide(assets.image`Spider`, 0, enemySpeed)
233
+ myEnemy = sprites.createProjectileFromSide(assets.image`Spider`, 0, 50)
261
234
  myEnemy.x = randint(5, 155)
262
235
  myEnemy.setKind(SpriteKind.Enemy)
263
-
236
+ animation.runImageAnimation(
237
+ myEnemy,
238
+ assets.animation`Flying Spider`,
239
+ 100,
240
+ true
241
+ )
264
242
  })
265
243
  game.onUpdateInterval(300, function () {
266
244
  statusbar.value += -1
267
245
  })
268
246
  forever(function () {
269
247
  if (info.score() == 10) {
270
- mySprite.say("+5 Level-Up Bonus", 2000)
248
+ mySprite.sayText("+5 Level-Up Bonus", 2000)
271
249
  info.changeScoreBy(5)
272
250
  enemySpeed = 70
273
251
  }
@@ -339,7 +317,7 @@ game.onUpdateInterval(2000, function () {
339
317
  })
340
318
  forever(function () {
341
319
  if (info.score() == 10) {
342
- mySprite.say("+5 Level-Up Bonus", 2000)
320
+ mySprite.sayText("+5 Level-Up Bonus", 2000)
343
321
  info.changeScoreBy(5)
344
322
  enemySpeed = 70
345
323
  }
@@ -1,9 +1,9 @@
1
- # Space Adventure
1
+ # Create a Space Adventure
2
2
  * name: Create a Space Adventure Game
3
- * description: Learn to make a Galaga-style game by following this short series of tutorials. You will create a rocket that fires projectiles at enemies, design your outerspace view, create amazing animations, and MORE! What are you waiting for? Double-click the first level to begin!"
3
+ * description: Make a Galaga-style game by following this short series of tutorials. You will create a rocket that fires projectiles at enemies, design your outerspace view, create amazing animations, and MORE! What are you waiting for? Double-click the first level to begin!
4
4
  * infoUrl: skillmap/educator-info/space-map-info
5
5
  * bannerUrl: /static/skillmap/space/spacet6.gif
6
- * backgroundurl: /static/skillmap/backgrounds/space-comp.gif
6
+ * backgroundurl: /static/skillmap/backgrounds/space-comp.png
7
7
  * primarycolor: #2EA9B0
8
8
  * secondarycolor: #d6f7fa
9
9
  * tertiarycolor: #5d416b
@@ -42,7 +42,7 @@
42
42
  * description: Watch out for danger! Add enemies and countdown lives in your game.
43
43
  * type: tutorial
44
44
  * tags: intermediate, enemies, kinds
45
- * next: space-activity4, space-activity4a
45
+ * next: space-activity4a
46
46
  * url: /skillmap/space/space3
47
47
  * imageUrl: /static/skillmap/space/spacet3.gif
48
48
  * position: 2 1
@@ -94,7 +94,10 @@
94
94
  * kind: completion
95
95
  * type: certificate
96
96
  * imageUrl: /static/skillmap/certificates/space-cert.png
97
- * url: /static/skillmap/certificates/design-a-space-explorer.pdf
97
+ * url: /static/skillmap/certificates/space-cert.pdf
98
98
  * position: 5 0
99
+ * map: [Try 80s Rockstar Maze](/skillmap/rockstar)
100
+ * map: [Try Jungle Monkey Jump](/skillmap/jungle)
101
+ * editor: [Edit Your Project with a Full Toolbox](/)
99
102
 
100
103
 
@@ -249,7 +249,7 @@ let mySprite = sprites.create(img`
249
249
  music.playMelody("G B A G C5 B A B ", 120)
250
250
  ```
251
251
 
252
- ## Intro @unplugged
252
+ ## {Intro @unplugged}
253
253
 
254
254
  Are you ready to make greeting cards for your friends and family?
255
255
 
@@ -257,7 +257,7 @@ Follow these quick steps and you'll have one in no time!
257
257
 
258
258
  ![Greetings](/static/skillmaps/story/card.gif "Happy birthday to you!" )
259
259
 
260
- ## Step 1
260
+ ## {Step 1}
261
261
 
262
262
  🎨 This card centers around an artistic background 🎨
263
263
 
@@ -391,7 +391,7 @@ scene.setBackgroundImage(img`
391
391
  ```
392
392
 
393
393
 
394
- ## Step 2
394
+ ## {Step 2}
395
395
 
396
396
  💛 Let's add a heartfelt greeting 💛
397
397
 
@@ -647,7 +647,7 @@ let mySprite = sprites.create(img`
647
647
 
648
648
  ```
649
649
 
650
- ## Step 3
650
+ ## {Step 3}
651
651
 
652
652
  🎉 Time for a celebration 🎉
653
653
 
@@ -905,7 +905,7 @@ let mySprite = sprites.create(img`
905
905
  ```
906
906
 
907
907
 
908
- ## Step 4
908
+ ## {Step 4}
909
909
 
910
910
  Add a personal 🎵 note 🎵 using ``||music:play melody [ ] at tempo [120] (bpm)||``!
911
911
  You can create your own song, or choose one from our gallery!
@@ -1161,7 +1161,7 @@ let mySprite = sprites.create(img`
1161
1161
  music.playMelody("G B A G C5 B A B ", 120)
1162
1162
  ```
1163
1163
 
1164
- ## Finish
1164
+ ## {Finish}
1165
1165
 
1166
1166
  Congratulations, you've finished your greeting card!
1167
1167