pxt-arcade 1.7.2 → 1.7.6

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 (235) hide show
  1. package/built/common-sim.d.ts +2 -0
  2. package/built/common-sim.js +4 -0
  3. package/built/target.js +1795 -242
  4. package/built/target.json +1795 -242
  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/hardware.md +1 -1
  9. package/docs/hour-of-code/all.md +27 -0
  10. package/docs/hour-of-code/{educators.html → educators-2020.html} +25 -25
  11. package/docs/hour-of-code/educators-2021.html +625 -0
  12. package/docs/{hour-of-code.html → hour-of-code-2020.html} +37 -37
  13. package/docs/hour-of-code-2021.html +438 -183
  14. package/docs/hour-of-code-ref.json +3 -0
  15. package/docs/index-ref.json +1 -1
  16. package/docs/multipart-tutorials.md +0 -8
  17. package/docs/projects/SUMMARY.md +4 -3
  18. package/docs/recipes.md +0 -7
  19. package/docs/skillmap/clicker/clicker1.md +7 -7
  20. package/docs/skillmap/clicker/clicker2.md +9 -9
  21. package/docs/skillmap/clicker/clicker3.md +8 -8
  22. package/docs/skillmap/clicker/clicker4.md +8 -8
  23. package/docs/skillmap/clicker/clicker4a.md +7 -7
  24. package/docs/skillmap/clicker/clicker5.md +3 -3
  25. package/docs/skillmap/clicker-themed/clickert1.md +66 -38
  26. package/docs/skillmap/clicker-themed/clickert2.md +77 -58
  27. package/docs/skillmap/clicker-themed/clickert3.md +75 -55
  28. package/docs/skillmap/clicker-themed/clickert4.md +105 -118
  29. package/docs/skillmap/collector/collector1.md +11 -11
  30. package/docs/skillmap/collector/collector1a.md +8 -8
  31. package/docs/skillmap/collector/collector2.md +8 -8
  32. package/docs/skillmap/collector/collector3.md +8 -8
  33. package/docs/skillmap/collector/collector3a.md +7 -7
  34. package/docs/skillmap/collector/collector4.md +8 -8
  35. package/docs/skillmap/collector/collector5.md +2 -2
  36. package/docs/skillmap/collector-themed/collectort1.md +107 -88
  37. package/docs/skillmap/collector-themed/collectort2.md +109 -87
  38. package/docs/skillmap/collector-themed/collectort3.md +138 -115
  39. package/docs/skillmap/collector-themed/collectort4.md +130 -118
  40. package/docs/skillmap/collector-themed/collectort4old.md +23 -23
  41. package/docs/skillmap/collector-themed/collectort5.md +2 -2
  42. package/docs/skillmap/educator-info/forest-map-info.md +70 -21
  43. package/docs/skillmap/educator-info/pongo-map-info.md +55 -0
  44. package/docs/skillmap/educator-info/racer-map-info.md +105 -0
  45. package/docs/skillmap/educator-info/rockstar-map-info.md +1 -1
  46. package/docs/skillmap/educator-info/simple-shark-map-info.md +101 -0
  47. package/docs/skillmap/forest/forest1.md +8 -75
  48. package/docs/skillmap/forest/forest2.md +7 -67
  49. package/docs/skillmap/forest/forest3.md +3 -176
  50. package/docs/skillmap/forest/forest4.md +9 -337
  51. package/docs/skillmap/forest/forest5.md +5 -398
  52. package/docs/skillmap/forest/forest6.md +11 -407
  53. package/docs/skillmap/forest-old.md +92 -0
  54. package/docs/skillmap/forest.md +10 -10
  55. package/docs/skillmap/forest_new/forest1.md +191 -0
  56. package/docs/skillmap/forest_new/forest2.md +217 -0
  57. package/docs/skillmap/forest_new/forest3.md +333 -0
  58. package/docs/skillmap/forest_new/forest4.md +196 -0
  59. package/docs/skillmap/forest_new/forest5.md +291 -0
  60. package/docs/skillmap/forest_new/forest6.md +272 -0
  61. package/docs/skillmap/interface/activity1.md +41 -49
  62. package/docs/skillmap/jungle/jungle1.md +48 -28
  63. package/docs/skillmap/jungle/jungle2.md +50 -26
  64. package/docs/skillmap/jungle/jungle3.md +48 -27
  65. package/docs/skillmap/jungle/jungle4.md +76 -58
  66. package/docs/skillmap/jungle/jungle5.md +31 -25
  67. package/docs/skillmap/jungle/jungle6.md +34 -28
  68. package/docs/skillmap/jungle/jungle7.md +36 -24
  69. package/docs/skillmap/jungle/jungle8.md +27 -25
  70. package/docs/skillmap/jungle.md +7 -3
  71. package/docs/skillmap/long-shark.md +119 -0
  72. package/docs/skillmap/pongo/pongo1.md +256 -0
  73. package/docs/skillmap/pongo/pongo2.md +179 -0
  74. package/docs/skillmap/pongo/pongo3.md +177 -0
  75. package/docs/skillmap/pongo.md +59 -0
  76. package/docs/skillmap/racer.md +7 -7
  77. package/docs/skillmap/rockstar/rockstar1.md +32 -41
  78. package/docs/skillmap/rockstar/rockstar2.md +45 -27
  79. package/docs/skillmap/rockstar/rockstar3.md +45 -27
  80. package/docs/skillmap/rockstar.md +3 -1
  81. package/docs/skillmap/shark/shark1-simple.md +151 -0
  82. package/docs/skillmap/shark/shark2-simple.md +203 -0
  83. package/docs/skillmap/shark/shark3-simple.md +204 -0
  84. package/docs/skillmap/shark/shark4-simple.md +246 -0
  85. package/docs/skillmap/shark/shark4a-simple.md +244 -0
  86. package/docs/skillmap/shark.md +25 -58
  87. package/docs/skillmap/space/space1.md +63 -29
  88. package/docs/skillmap/space/space2.md +34 -25
  89. package/docs/skillmap/space/space3.md +86 -69
  90. package/docs/skillmap/space/space4.md +96 -65
  91. package/docs/skillmap/space/space4a.md +34 -25
  92. package/docs/skillmap/space/space5.md +81 -45
  93. package/docs/skillmap/space/space6.md +59 -81
  94. package/docs/skillmap/space.md +8 -5
  95. package/docs/skillmap/story/card.md +6 -6
  96. package/docs/skillmap/story/card2.md +6 -6
  97. package/docs/skillmap/story/story1.md +60 -175
  98. package/docs/skillmap/story/story2.md +89 -327
  99. package/docs/skillmap/story/story3.md +238 -228
  100. package/docs/skillmap/story/story4.md +23 -23
  101. package/docs/skillmap/zoo/zoo1.md +31 -16
  102. package/docs/skillmap/zoo/zoo2.md +45 -30
  103. package/docs/skillmap/zoo/zoo2a.md +51 -36
  104. package/docs/skillmap/zoo/zoo3.md +8 -7
  105. package/docs/skillmap/zoo/zoo4.md +61 -32
  106. package/docs/skillmap/zoo/zoo5.md +41 -31
  107. package/docs/skillmap/zoo.md +2 -2
  108. package/docs/skillmaps.md +20 -4
  109. package/docs/static/experiments/accessibleblocks.png +0 -0
  110. package/docs/static/experiments/blockserrorlist.png +0 -0
  111. package/docs/static/gamejam/jams/global-2021/assets/banner.png +0 -0
  112. package/docs/static/gamejam/jams/global-2021/info.json +10 -0
  113. package/docs/static/gamejam/jams/global-2021/rules.md +22 -0
  114. package/docs/static/gamejam/jams/global-2021/style.css +141 -0
  115. package/docs/static/gamejam/lib/gamejam.d.ts +1 -0
  116. package/docs/static/gamejam/lib/gamejam.js +34 -24
  117. package/docs/static/gamejam/lib/gamejam.ts +35 -24
  118. package/docs/static/hero-gallery/stream.png +0 -0
  119. package/docs/static/hour-of-code/{apple.png → 2020/apple.png} +0 -0
  120. package/docs/static/hour-of-code/{arcade.png → 2020/arcade.png} +0 -0
  121. package/docs/static/hour-of-code/{asphodel.png → 2020/asphodel.png} +0 -0
  122. package/docs/static/hour-of-code/{card.png → 2020/card.png} +0 -0
  123. package/docs/static/hour-of-code/{chase-the-pizza.png → 2020/chase-the-pizza.png} +0 -0
  124. package/docs/static/hour-of-code/{clovers.png → 2020/clovers.png} +0 -0
  125. package/docs/static/hour-of-code/{design.png → 2020/design.png} +0 -0
  126. package/docs/static/hour-of-code/{educators → 2020/educators}/asphodel-level1.png +0 -0
  127. package/docs/static/hour-of-code/{educators → 2020/educators}/asphodel-level4.png +0 -0
  128. package/docs/static/hour-of-code/{educators → 2020/educators}/asphodel-level6.png +0 -0
  129. package/docs/static/hour-of-code/{educators → 2020/educators}/asphodel-level7.png +0 -0
  130. package/docs/static/hour-of-code/{educators → 2020/educators}/asphodel-level9.png +0 -0
  131. package/docs/static/hour-of-code/{educators → 2020/educators}/clover-design.gif +0 -0
  132. package/docs/static/hour-of-code/{educators → 2020/educators}/shark-attack-tutorial.png +0 -0
  133. package/docs/static/hour-of-code/{galga.png → 2020/galga.png} +0 -0
  134. package/docs/static/hour-of-code/{lemon-leak.png → 2020/lemon-leak.png} +0 -0
  135. package/docs/static/hour-of-code/{micro-bit.png → 2020/micro-bit.png} +0 -0
  136. package/docs/static/hour-of-code/{minecraft.png → 2020/minecraft.png} +0 -0
  137. package/docs/static/hour-of-code/{nfl.png → 2020/nfl.png} +0 -0
  138. package/docs/static/hour-of-code/{ocean-jam.png → 2020/ocean-jam.png} +0 -0
  139. package/docs/static/hour-of-code/{pixel-background-primary.png → 2020/pixel-background-primary.png} +0 -0
  140. package/docs/static/hour-of-code/{pixel-background-secondary.png → 2020/pixel-background-secondary.png} +0 -0
  141. package/docs/static/hour-of-code/{shadowed-aside-frame.png → 2020/shadowed-aside-frame.png} +0 -0
  142. package/docs/static/hour-of-code/{shadowed-button-frame.png → 2020/shadowed-button-frame.png} +0 -0
  143. package/docs/static/hour-of-code/{shadowed-primary-frame.png → 2020/shadowed-primary-frame.png} +0 -0
  144. package/docs/static/hour-of-code/{shark-attack.png → 2020/shark-attack.png} +0 -0
  145. package/docs/static/hour-of-code/{simulator.gif → 2020/simulator.gif} +0 -0
  146. package/docs/static/hour-of-code/{simulator.png → 2020/simulator.png} +0 -0
  147. package/docs/static/hour-of-code/{styles.css → 2020/styles.css} +1 -1
  148. package/docs/static/hour-of-code/2021/Rowdies/OFL.txt +93 -0
  149. package/docs/static/hour-of-code/2021/Rowdies/Rowdies-Bold.ttf +0 -0
  150. package/docs/static/hour-of-code/2021/Rowdies/Rowdies-Regular.ttf +0 -0
  151. package/docs/static/hour-of-code/2021/beginner-skillmap.png +0 -0
  152. package/docs/static/hour-of-code/2021/favicon.png +0 -0
  153. package/docs/static/hour-of-code/2021/forest-skillmap-game.gif +0 -0
  154. package/docs/static/hour-of-code/2021/game-jam-hero.png +0 -0
  155. package/docs/static/hour-of-code/2021/hoc-2020.png +0 -0
  156. package/docs/static/hour-of-code/2021/hoc-card.png +0 -0
  157. package/docs/static/hour-of-code/2021/hoc-header-educators.png +0 -0
  158. package/docs/static/hour-of-code/2021/hoc-header-plane.gif +0 -0
  159. package/docs/static/hour-of-code/2021/hoc-header-scene.gif +0 -0
  160. package/docs/static/hour-of-code/2021/jungle-skillmap.png +0 -0
  161. package/docs/static/hour-of-code/2021/makecode-example.png +0 -0
  162. package/docs/static/hour-of-code/2021/microbit.png +0 -0
  163. package/docs/static/hour-of-code/2021/minecraft.png +0 -0
  164. package/docs/static/hour-of-code/2021/rockstar-skillmap.png +0 -0
  165. package/docs/static/hour-of-code/2021/styles.css +660 -62
  166. package/docs/static/logo.png +0 -0
  167. package/docs/static/skillmap/assets/my-assets-three.png +0 -0
  168. package/docs/static/skillmap/assets/my-assets.png +0 -0
  169. package/docs/static/skillmap/assets/sprite-from-container.gif +0 -0
  170. package/docs/static/skillmap/backgrounds/jungle-bg.png +0 -0
  171. package/docs/static/skillmap/backgrounds/jungle-map.png +0 -0
  172. package/docs/static/skillmap/backgrounds/rock-map.png +0 -0
  173. package/docs/static/skillmap/backgrounds/rockstar-card.gif +0 -0
  174. package/docs/static/skillmap/backgrounds/space-comp.png +0 -0
  175. package/docs/static/skillmap/backgrounds/space.png +0 -0
  176. package/docs/static/skillmap/certificates/forest-cert.pdf +0 -0
  177. package/docs/static/skillmap/certificates/forest-cert.png +0 -0
  178. package/docs/static/skillmap/certificates/jungle-cert.pdf +0 -0
  179. package/docs/static/skillmap/certificates/jungle-cert.png +0 -0
  180. package/docs/static/skillmap/certificates/rockstar-cert.pdf +0 -0
  181. package/docs/static/skillmap/certificates/rockstar-cert.png +0 -0
  182. package/docs/static/skillmap/certificates/shark-cert.pdf +0 -0
  183. package/docs/static/skillmap/certificates/shark-cert.png +0 -0
  184. package/docs/static/skillmap/certificates/space-cert.pdf +0 -0
  185. package/docs/static/skillmap/certificates/space-cert.png +0 -0
  186. package/docs/static/skillmap/forest/forest1.gif +0 -0
  187. package/docs/static/skillmap/forest/forest2.gif +0 -0
  188. package/docs/static/skillmap/forest/forest3.gif +0 -0
  189. package/docs/static/skillmap/forest/forest4.gif +0 -0
  190. package/docs/static/skillmap/forest/forest5.gif +0 -0
  191. package/docs/static/skillmap/forest/forest6.gif +0 -0
  192. package/docs/static/skillmap/pongo/pongo1.gif +0 -0
  193. package/docs/static/skillmap/pongo/pongo2gif +0 -0
  194. package/docs/static/skillmap/pongo/pongo3.gif +0 -0
  195. package/docs/static/skillmap/racer/racer1.gif +0 -0
  196. package/docs/static/skillmap/racer/racer2.gif +0 -0
  197. package/docs/static/skillmap/racer/racer3.gif +0 -0
  198. package/docs/static/skillmap/rockstar/rockstar1.gif +0 -0
  199. package/docs/static/skillmap/rockstar/rockstar2.gif +0 -0
  200. package/docs/static/skillmap/rockstar/rockstar3.gif +0 -0
  201. package/docs/static/skillmap/shark/shark1-simple.gif +0 -0
  202. package/docs/static/skillmap/shark/shark4a-simple.gif +0 -0
  203. package/docs/static/skillmap/zoo/overlaps-food-sprite.gif +0 -0
  204. package/docs/tutorials/barrel-dodger.md +4 -4
  205. package/docs/tutorials/collect-the-clovers.md +2 -2
  206. package/docs/tutorials/froggy.md +105 -90
  207. package/docs/tutorials/hundred.md +400 -0
  208. package/package.json +3 -3
  209. package/pxtarget.json +3 -2
  210. package/targetconfig.json +4 -1
  211. package/docs/recipes/wonder-woman-1984/01-maze.md +0 -291
  212. package/docs/recipes/wonder-woman-1984/02-artifact.md +0 -70
  213. package/docs/recipes/wonder-woman-1984/03-enemies.md +0 -65
  214. package/docs/skillmap/forest/forest9.md +0 -714
  215. package/docs/static/hour-of-code/2021/placeholder.png +0 -0
  216. package/docs/static/hour-of-code/ww-maze.png +0 -0
  217. package/docs/static/recipes/wonder-woman-1984/artifact-preview.png +0 -0
  218. package/docs/static/recipes/wonder-woman-1984/artifacts-location.gif +0 -0
  219. package/docs/static/recipes/wonder-woman-1984/draw-maze-backup.png +0 -0
  220. package/docs/static/recipes/wonder-woman-1984/draw-walls-backup.png +0 -0
  221. package/docs/static/recipes/wonder-woman-1984/end-position.png +0 -0
  222. package/docs/static/recipes/wonder-woman-1984/enemies-location.gif +0 -0
  223. package/docs/static/recipes/wonder-woman-1984/enemies-preview.png +0 -0
  224. package/docs/static/recipes/wonder-woman-1984/fill-maze.gif +0 -0
  225. package/docs/static/recipes/wonder-woman-1984/fill-walls.gif +0 -0
  226. package/docs/static/recipes/wonder-woman-1984/wonder-woman3.png +0 -0
  227. package/docs/static/recipes/wonder-woman-1984/ww-splash3.gif +0 -0
  228. package/docs/static/recipes/wonder-woman-1984/ww-splash3.mp4 +0 -0
  229. package/docs/static/ww84-background.png +0 -0
  230. package/docs/static/ww84-header.png +0 -0
  231. package/docs/ww84.html +0 -276
  232. package/sim/public/locales/zh-CN/bundled-strings.json +0 -1800
  233. package/sim/public/locales/zh-CN/target-strings.json +0 -13
  234. package/sim/public/locales/zh-TW/bundled-strings.json +0 -1903
  235. package/sim/public/locales/zh-TW/target-strings.json +0 -8
@@ -152,7 +152,7 @@ Does it get out of control too quickly?
152
152
 
153
153
  ## 7. No Fuel, No Fire
154
154
 
155
- Right now, the fires don't burn the trees,
155
+ Right now, the fires don't burn the trees
156
156
  so they can appear on the same tree over and over.
157
157
  When a flame burns out, we want to mark that spot in the forest with a special tile.
158
158
 
@@ -221,6 +221,8 @@ with
221
221
  - :mouse pointer: To get the location for the correct sprite, replace ``||variables:mySprite||`` with the ``||variables:sprite||``
222
222
  value from the outer ** on destroyed** container.
223
223
 
224
+ ![Grab the sprite value from the title bar of the outer container](/static/skillmap/assets/sprite-from-container.gif "This is how your block knows which sprite to use")
225
+
224
226
 
225
227
  ```blocks
226
228
  namespace SpriteKind {
@@ -235,6 +237,10 @@ sprites.onDestroyed(SpriteKind.Fire, function (sprite) {
235
237
 
236
238
  ```
237
239
 
240
+ ---
241
+
242
+ ![Grab the sprite value from the title bar of the outer container](/static/skillmap/assets/sprite-from-container.gif "This is how your block knows which sprite to use")
243
+
238
244
 
239
245
 
240
246
  ## 10. Smoke Screen
@@ -302,7 +308,7 @@ When the fire overlaps another flame, we can destroy one of the flames.
302
308
  ``||sprites:on [sprite] of kind [Player] overlaps [otherSprite] of kind [Player]||``
303
309
  container into an empty area of the workspace.
304
310
 
305
- - :mouse pointer: Change both sprite kinds to ``||variables:Fire||``.
311
+ - :mouse pointer: Change both sprite kinds to ``||sprites:Fire||``.
306
312
 
307
313
 
308
314
 
@@ -372,25 +378,12 @@ keep moving through the skillmap to find out how to add a heads-up display to yo
372
378
 
373
379
 
374
380
 
375
-
376
381
  ```package
377
- pxt-tilemaps=github:microsoft/pxt-tilemaps/
378
- pxt-text=github:microsoft/arcade-text
379
- arcade-premium-life=github:jwunderl/arcade-premium-life/
380
- pxt-characterAnimations=github:microsoft/arcade-character-animations/
381
- pxt-data=github:microsoft/arcade-sprite-data/
382
- pxt-story=github:microsoft/arcade-storytelling/
383
- arcade-sprite-util=github:jwunderl/arcade-sprite-util/
384
- pxt-status-bar=github:jwunderl/pxt-status-bar
382
+ pxt-forest-special=github:kiki-lee/forest-special/
385
383
  ```
386
384
 
387
385
 
388
386
  ```template
389
- namespace SpriteKind {
390
- export const Water = SpriteKind.create()
391
- export const Fire = SpriteKind.create()
392
- export const Burnt = SpriteKind.create()
393
- }
394
387
 
395
388
  controller.A.onEvent(ControllerButtonEvent.Repeated, function () {
396
389
  sprites.spray(mySprite, assets.image`water`)
@@ -418,327 +411,6 @@ sprites.onOverlap(SpriteKind.Water, SpriteKind.Fire, function (sprite, otherSpri
418
411
 
419
412
  ```
420
413
 
421
-
422
- ```customts
423
-
424
- let spreadOptions: number[] = []
425
-
426
- let windSpeed = 5
427
- let tinder = 4
428
- let dryGrass = 5
429
- let spreadTimeBase = 2000
430
- let hoseDirection = 270
431
- let facing = 0
432
- let changeRate = 7
433
- let burnedColor = 2
434
- let healthyColor = 3
435
-
436
- let statusbar = statusbars.create(82, 4, StatusBarKind.Health)
437
- statusbar.top = 12
438
- statusbar.left = 4
439
- statusbar.max = tiles.tilemapRows() * tiles.tilemapColumns()
440
- statusbar.value = tiles.tilemapRows() * tiles.tilemapColumns()
441
- statusbar.setColor(healthyColor, burnedColor)
442
- let statusLabel = textsprite.create("Healthy Forest", 0, 1)
443
- statusLabel.setFlag(SpriteFlag.RelativeToCamera, true)
444
- statusLabel.top = 2
445
- statusLabel.left = 4
446
- let fireLabel = textsprite.create("Fires:")
447
- fireLabel.right = 145
448
- fireLabel.top = 2
449
- fireLabel.setMaxFontHeight(4)
450
- fireLabel.setFlag(SpriteFlag.RelativeToCamera, true)
451
- statusLabel.setFlag(SpriteFlag.Invisible, true)
452
- statusbar.setFlag(SpriteFlag.Invisible, true)
453
- fireLabel.setFlag(SpriteFlag.Invisible, true)
454
- info.showScore(false)
455
-
456
-
457
-
458
- game.onUpdate(function () {
459
- statusbar.max = tiles.tilemapRows() * tiles.tilemapColumns()
460
- statusbar.value = tiles.tilemapRows() * tiles.tilemapColumns() - tiles.getTilesByType(assets.tile`burnt tree`).length
461
- spreadTimeBase = 4500 - (250 * windSpeed + 250 * dryGrass - 100 * tinder)
462
- if (sprites.allOfKind(SpriteKind.Fire).length <= 0) {
463
- hud.fire_hud(false)
464
- info.setScore(statusbar.value / statusbar.max * 100)
465
- game.splash("You saved " + convertToText(info.score()) + "% of the forest!")
466
- game.over(true)
467
- } else {
468
- info.setScore(sprites.allOfKind(SpriteKind.Fire).length)
469
- }
470
- })
471
-
472
-
473
-
474
- namespace animation {
475
- /*
476
- * Loops the passed frames on the sprite at the given interval whenever
477
- * the specified rule is true for that sprite.
478
- *
479
- * If more than one rule applies, the most specific rule will be used.
480
- * If multiple rules are equally specific, the currently executing rule
481
- * is favored (or one is chosen at random).
482
- *
483
- * @param sprite the sprite to animate
484
- * @param frames the images that make up that animation
485
- * @param frame Interval the amount of time to spend on each frame in milliseconds
486
- * @param rule the rule that decides when this animation will play
487
- */
488
- //% blockId=arcade_character_loop_frames2
489
- //% block="animate $sprite loop frames $frames interval (ms) $frameInterval when $rule"
490
- //% sprite.defl=mySprite
491
- //% frames.defl=Fire Plane Right
492
- //% sprite.shadow=variables_get
493
- //% frames.shadow=animation_editor
494
- //% frameInterval.shadow=timePicker
495
- //% rule.shadow=arcade_character_make_rule
496
- //% weight=100
497
- //% blockGap=8
498
- //% help=github:arcade-character-animations/docs/loop-character-animation
499
- export function loopFrames2(sprite: Sprite, frames: Image[], frameInterval: number, rule: number) {
500
- characterAnimations.loopFrames(sprite, frames, frameInterval, rule);
501
- }
502
- }
503
-
504
-
505
- namespace game {
506
-
507
- /*
508
- * Set the strength of your wind.
509
- * Higher numbers spread fire faster.
510
- */
511
- //% block="set strength of wind to $num"
512
- //% num.defl=3
513
- export function set_strength_of_wind (num: number) {
514
- windSpeed = num
515
- }
516
-
517
- /*
518
- * Set the health of your trees.
519
- * Lower numbers spread fire faster.
520
- */
521
- //% block="set health of trees to $num"
522
- //% num.defl=7
523
- export function set_health_of_trees (num: number) {
524
- tinder = num
525
- }
526
-
527
- /*
528
- * Set how dry your grass is.
529
- * Higher numbers spread fire faster.
530
- */
531
- //% block="set dryness of grass to $num"
532
- //% num.defl=3
533
- export function set_dryness_of_grass (num: number) {
534
- dryGrass = num
535
- }
536
- }
537
-
538
- //% color="#09282d" icon="\uf1e5"
539
- //% block="HUD"
540
- namespace hud {
541
-
542
- /*
543
- * Show or hide the current number of burning fires.
544
- */
545
- //% block="show fire HUD $answer"
546
- //% answer.shadow="toggleYesNo"
547
- //% answer.defl=true
548
- export function fire_hud (answer: boolean) {
549
-
550
- if (answer) {
551
- fireLabel.setFlag(SpriteFlag.Invisible, false)
552
- info.showScore(true)
553
- } else {
554
- fireLabel.setFlag(SpriteFlag.Invisible, true)
555
- info.showScore(false)
556
- }
557
-
558
- }
559
-
560
- /*
561
- * Show or hide how much of the forest has burned.
562
- */
563
- //% block="show forest HUD $answer"
564
- //% answer.shadow="toggleYesNo"
565
- //% answer.defl=true
566
- export function forest_hud (answer: boolean) {
567
-
568
- if (answer) {
569
- statusLabel.setFlag(SpriteFlag.Invisible, false)
570
- statusbar.setFlag(SpriteFlag.Invisible, false)
571
-
572
- } else {
573
- statusLabel.setFlag(SpriteFlag.Invisible, true)
574
- statusbar.setFlag(SpriteFlag.Invisible, true)
575
- }
576
-
577
- }
578
-
579
-
580
- /*
581
- * Set the color for remaining live forest
582
- */
583
- //% block="set color of healthy forest meter to $color"
584
- //% color.shadow="colorindexpicker"
585
- //% color.defl=2
586
- export function forest_hud_healthy (color: number) {
587
- healthyColor = color
588
- statusbar.setColor(healthyColor, burnedColor)
589
- }
590
-
591
- /*
592
- * Set the color for burned forest
593
- */
594
- //% block="set color of burned forest meter to $color"
595
- //% color.shadow="colorindexpicker"
596
- //% color.defl=3
597
- export function forest_hud_burned (color: number) {
598
- burnedColor = color
599
- statusbar.setColor(healthyColor, burnedColor)
600
- }
601
-
602
- /*
603
- * Set the label for the forest HUD
604
- */
605
- //% block="set forest HUD label to $name"
606
- //% name.defl="Healthy Forest"
607
- export function forest_hud_label (name: string) {
608
- statusLabel.setText(name)
609
- }
610
-
611
-
612
- /*
613
- * Set the label for the fire-counting HUD
614
- */
615
- //% block="set fire HUD label to $name"
616
- //% name.defl="Fires:"
617
- export function fire_hud_label (name: string) {
618
- fireLabel.setText(name)
619
- }
620
-
621
-
622
- }
623
-
624
- namespace sprites {
625
-
626
- /*
627
- * Set the number of "lives" for your sprite.
628
- */
629
- //% block="set strength of $thisSprite=variables_get(mySprite) to $num"
630
- //% num.defl=10
631
- export function set_flame_strength (thisSprite: Sprite, num: number) {
632
- sprites.setDataNumber(thisSprite, "life", num)
633
- sprites.setDataNumber(thisSprite, "spreadTime", spreadTimeBase + 1000)
634
- }
635
-
636
- /*
637
- * Add or remove "lives" from your sprite.
638
- */
639
- //% block="change strength of $thisSprite=variables_get(mySprite) by $num"
640
- //% num.defl=-1
641
- export function change_flame_strength_by (thisSprite: Sprite, num: number) {
642
- sprites.changeDataNumberBy(thisSprite, "life", num)
643
- for (let value of sprites.allOfKind(SpriteKind.Fire)) {
644
- if (sprites.readDataNumber(value, "life") <= 0) {
645
- effects.clearParticles(value)
646
- value.destroy()
647
- }
648
- }
649
- }
650
-
651
- /*
652
- * Choose a sprite to "spray" an image (in sprite form.)
653
- */
654
- //% block="spray from $thisSprite=variables_get(mySprite) using $img=screen_image_picker"
655
- //% img.defl=water
656
- export function spray (thisSprite: Sprite, img: Image) {
657
-
658
- if (controller.up.isPressed()) {
659
- if (controller.left.isPressed()) {
660
- facing = 225
661
- } else if (controller.right.isPressed()) {
662
- facing = 315
663
- } else if (controller.down.isPressed()) {
664
-
665
- } else {
666
- facing = 270
667
- }
668
- } else if (controller.left.isPressed()) {
669
- if (controller.right.isPressed()) {
670
-
671
- } else if (controller.down.isPressed()) {
672
- facing = 135
673
- } else {
674
- facing = 180
675
- }
676
- } else if (controller.right.isPressed()) {
677
- if (controller.down.isPressed()) {
678
- facing = 45
679
- } else {
680
- facing = 0
681
- }
682
- } else if (controller.down.isPressed()) {
683
- facing = 90
684
- }
685
-
686
- if (Math.abs(facing - hoseDirection) < 180) {
687
- if (facing < hoseDirection) {
688
- hoseDirection += 0 - changeRate
689
- } else {
690
- hoseDirection += changeRate
691
- }
692
- } else{
693
- if (facing < hoseDirection) {
694
- hoseDirection += changeRate
695
- } else {
696
- hoseDirection += 0 - changeRate
697
- }
698
- if (hoseDirection < 0) {
699
- hoseDirection += 360
700
- } else if (hoseDirection > 360) {
701
- hoseDirection += -360
702
- }
703
- hoseDirection = hoseDirection % 360
704
- }
705
- let waterProj = sprites.createProjectileFromSprite(img, thisSprite, 150 * Math.cos(spriteutils.degreesToRadians(hoseDirection)), 150 * Math.sin(spriteutils.degreesToRadians(hoseDirection)))
706
- waterProj.setKind(SpriteKind.Water)
707
- }
708
-
709
- /*
710
- * Spread current fires according to wind speed,
711
- * dryness of grass, and health of trees.
712
- */
713
- //% block="random spread $myImage=screen_image_picker"
714
- export function random_spread (myImage: Image) {
715
-
716
- for (let value of sprites.allOfKind(SpriteKind.Fire)) {
717
- if (sprites.readDataNumber(value, "life") <= 0) {
718
- effects.clearParticles(value)
719
- value.destroy()
720
- }
721
-
722
- let list2 = [-32,-16,0,16,32,16,-16]
723
- if (game.runtime() > sprites.readDataNumber(value, "spreadTime")) {
724
- sprites.setDataNumber(value, "spreadTime", game.runtime() + randint(spreadTimeBase, spreadTimeBase + 1000))
725
- let newFire = sprites.create(myImage, SpriteKind.Fire)
726
- newFire.setPosition(value.x + list2._pickRandom(), value.y)
727
- sprites.setDataNumber(newFire, "spreadTime", game.runtime() + randint(spreadTimeBase, spreadTimeBase + 1000))
728
- if (Math.percentChance(50)) {
729
- newFire.y += list2._pickRandom()
730
- }
731
- if (tiles.tileIsWall(tiles.locationOfSprite(newFire))) {
732
- newFire.setPosition(value.x, value.y)
733
- }
734
- }
735
- }
736
- }
737
-
738
- }
739
- ```
740
-
741
-
742
414
  ```assetjson
743
415
  {
744
416
  "README.md": " ",