pxt-arcade 1.13.16 → 1.13.17

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 (39) hide show
  1. package/built/target.js +1 -1
  2. package/built/target.json +1 -1
  3. package/built/targetlight.json +1 -1
  4. package/built/theme.json +1 -1
  5. package/docs/skillmap/educator-info/dino-map-info.md +2 -2
  6. package/docs/skillmap/educator-info/galaxy-map-info.md +2 -2
  7. package/docs/skillmap/educator-info/star-map-info.md +2 -2
  8. package/docs/skillmap/educator-info/story-map-info.md +3 -2
  9. package/docs/skillmap/story-new/joke-examples.md +41 -0
  10. package/docs/skillmap/story-new/story-example.md +17 -0
  11. package/docs/skillmap/story-new/story1.md +272 -0
  12. package/docs/skillmap/story-new/story2.md +340 -0
  13. package/docs/skillmap/story-new/story3.md +435 -0
  14. package/docs/skillmap/story-new/story4.md +561 -0
  15. package/docs/static/hero-gallery/galaxy.png +0 -0
  16. package/docs/static/skillmap/backgrounds/dino-map.png +0 -0
  17. package/docs/static/skillmap/backgrounds/galaxy-comp.png +0 -0
  18. package/docs/static/skillmap/backgrounds/galaxy-map.png +0 -0
  19. package/docs/static/skillmap/backgrounds/story-map.png +0 -0
  20. package/docs/static/tutorials/arrows/arrows.png +0 -0
  21. package/docs/static/tutorials/blazing/blazing.png +0 -0
  22. package/docs/static/tutorials/collect-the-clovers/clovers.png +0 -0
  23. package/docs/static/tutorials/holiday/birthday.png +0 -0
  24. package/docs/static/tutorials/horse/horse.png +0 -0
  25. package/docs/static/tutorials/music/zune.png +0 -0
  26. package/docs/test/skillmap/adventure/adventure1.md +438 -0
  27. package/docs/test/skillmap/adventure/adventure2.md +440 -0
  28. package/docs/test/skillmap/adventure/adventure3.md +489 -0
  29. package/docs/test/skillmap/galaxy/galaxy2.md +4 -4
  30. package/docs/test/skillmap/galaxy/galaxy3.md +2 -2
  31. package/docs/test/skillmap/racer/racer1.md +1 -1
  32. package/docs/test/skillmap/racer/racer3.md +3 -3
  33. package/docs/test/skillmap/racer.md +1 -1
  34. package/docs/test/skillmap/story-new/story4.md +2 -2
  35. package/docs/test/tutorials/blazing.md +11 -11
  36. package/docs/test/tutorials/music.md +40 -14
  37. package/docs/tours/editor-tour.md +39 -0
  38. package/package.json +1 -1
  39. package/pxtarget.json +4 -1
@@ -0,0 +1,561 @@
1
+ # The Shortest Story
2
+ ### @explicitHints true
3
+
4
+
5
+ ## {Introduction @showdialog}
6
+
7
+ Let's use what we've learned to make a short story to share with family and friends.
8
+
9
+ ![Here's the story](/static/skillmap/story/story4.gif "Example of a page in our story." )
10
+
11
+
12
+ ## {Step 2}
13
+
14
+ Before you start this lesson, you're going to need a story to tell.
15
+
16
+ You can either write a story of your own or use this one:
17
+
18
+ [**_Click here to copy lines from our story._**](#doc:/skillmap/story/story-example "Copy lines from our story here.")
19
+
20
+
21
+
22
+
23
+
24
+ ## {Step 3}
25
+
26
+
27
+ Do you have your story?
28
+
29
+ **Design your first page!** <br/>
30
+ 📚 📖 📚
31
+
32
+ ---
33
+
34
+ - :tree: From ``||scene:Scene||``, snap
35
+ ```block
36
+ scene.setBackgroundImage(img`.`)
37
+ ```
38
+ into **the empty**<br/>
39
+ ``||loops(noclick):on start||`` <br/>
40
+ container already in the workspace.
41
+
42
+
43
+ - :paint brush: **Click the empty image box** to draw a the first picture for your story.
44
+
45
+ 💡 _Don't have a story in mind? You can use one of our backgrounds._
46
+
47
+
48
+ #### ~ tutorialhint
49
+
50
+ ```blocks
51
+ // @highlight
52
+ scene.setBackgroundImage(img`
53
+ 9 9 9 9
54
+ 9 9 9 9
55
+ 7 7 7 7
56
+ `)
57
+ ```
58
+
59
+
60
+
61
+
62
+ ## {Step 4}
63
+
64
+ **Take a look at the game screen.**
65
+
66
+ - :binoculars: How does your background look? Where do you plan to add the text? Top? Middle? Bottom?
67
+
68
+
69
+
70
+
71
+ ## {Step 5}
72
+
73
+ **✨ Great ✨**
74
+
75
+ Give the reader a chance to enjoy your art before you cover it with text.
76
+
77
+ - :redo: From ``||loops: Loops||``, drag
78
+ ```block
79
+ pause(1000)
80
+ ```
81
+ it into **the end** of the <br/>
82
+ ``||loops(noclick):on start||``<br/>
83
+ container that's already in the workspace.
84
+
85
+
86
+ - :mouse pointer: This pause block will stop the program for 1 second (1000ms) before moving to the next line. If you want more time, you can change it to a larger number.
87
+
88
+ #### ~ tutorialhint
89
+
90
+ ```blocks
91
+ scene.setBackgroundImage(img`
92
+ 9 9 9 9 
93
+ 9 9 9 9 
94
+ 7 7 7 7 
95
+ `)
96
+ // @highlight
97
+ pause(1000)
98
+
99
+ ```
100
+
101
+ ## {Step 6}
102
+
103
+ Add your first page of text.
104
+
105
+ ---
106
+
107
+
108
+ - :circle: From ``||game:Game||``, drag
109
+ ```block
110
+ game.showLongText("Once upon a time...", DialogLayout.Bottom)
111
+ ```
112
+ into **the end** of the <br/>
113
+ ``||loops(noclick):on start||``<br/>
114
+ container that's already in the workspace.
115
+
116
+
117
+ - :mouse pointer: Change the text to whatever works as the first line of your story. You can also change the location of your text from ``||game(noclick):bottom||`` to another area of the screen.
118
+
119
+
120
+ 💡 _Did you find a different way to add text in another level that you like better? Feel free to use that instead!_
121
+
122
+
123
+
124
+
125
+ #### ~ tutorialhint
126
+
127
+ ```blocks
128
+ scene.setBackgroundImage(img`
129
+ 9 9 9 9 
130
+ 9 9 9 9 
131
+ 7 7 7 7 
132
+ `)
133
+ pause(1000)
134
+ //@highlight
135
+ game.showLongText("Once upon a time...", DialogLayout.Bottom)
136
+ ```
137
+
138
+
139
+ ## {Step 7}
140
+
141
+ **Make another page!**
142
+
143
+ Add another set of blocks with a new picture and a new line from your story.
144
+
145
+ ---
146
+
147
+ - :mouse pointer: Keep adding sets of blocks until you get to the end.
148
+ ```block
149
+ scene.setBackgroundImage(img`
150
+ 9 9 9 9 
151
+ 9 9 9 9 
152
+ 7 7 7 7 
153
+ `)
154
+ pause(1000)
155
+ game.showLongText("Next door...", DialogLayout.Bottom)
156
+ ```
157
+
158
+ 💡 _You don't always need to add the blocks in the same order. Want to show some pictures without text? Want to change the text without changing the picture? Play around and see what works for you!_
159
+
160
+
161
+ #### ~ tutorialhint
162
+
163
+ ```blocks
164
+ scene.setBackgroundImage(img`
165
+ 9 9 9 9 
166
+ 9 9 9 9 
167
+ 7 7 7 7 
168
+ `)
169
+ pause(1000)
170
+ game.showLongText("Once upon a time, there was a lizard who lived beneath a toadstool.", DialogLayout.Bottom)
171
+ scene.setBackgroundImage(img`
172
+ 9 9 9 9 
173
+ 9 9 9 9 
174
+ 7 7 7 7 
175
+ `)
176
+ pause(1000)
177
+ game.showLongText("Next door, there lived a butterfly on a daisy.", DialogLayout.Bottom)
178
+ scene.setBackgroundImage(img`
179
+ 9 9 9 9 
180
+ 9 9 9 9 
181
+ 7 7 7 7 
182
+ `)
183
+ pause(1000)
184
+ game.showLongText("Every day, the butterfly would sweep past and taunt the lizard from the sky.", DialogLayout.Bottom)
185
+ game.showLongText("\"Ha ha!\" He would say. \"Your house doesn't smell as good as mine.\"", DialogLayout.Bottom)
186
+ scene.setBackgroundImage(img`
187
+ 9 9 9 9 
188
+ 9 9 9 9 
189
+ 7 7 7 7 
190
+ `)
191
+ pause(1000)
192
+ game.showLongText("Finally, one day, the lizard decided to find a daisy of her own.", DialogLayout.Bottom)
193
+ scene.setBackgroundImage(img`
194
+ 9 9 9 9 
195
+ 9 9 9 9 
196
+ 7 7 7 7 
197
+ `)
198
+ pause(2000)
199
+ scene.setBackgroundImage(img`
200
+ 9 9 9 9 
201
+ 9 9 9 9 
202
+ 7 7 7 7 
203
+ `)
204
+ pause(2000)
205
+ scene.setBackgroundImage(img`
206
+ 9 9 9 9 
207
+ 9 9 9 9 
208
+ 7 7 7 7 
209
+ `)
210
+ pause(2000)
211
+ game.showLongText("She tried and tried, but she just couldn't get comfortable.", DialogLayout.Bottom)
212
+ scene.setBackgroundImage(img`
213
+ 9 9 9 9 
214
+ 9 9 9 9 
215
+ 7 7 7 7 
216
+ `)
217
+ pause(1000)
218
+ game.showLongText("No matter what she did, the fragrant flower didn't make her happy.", DialogLayout.Bottom)
219
+ scene.setBackgroundImage(img`
220
+ 9 9 9 9 
221
+ 9 9 9 9 
222
+ 7 7 7 7 
223
+ `)
224
+ pause(1000)
225
+ game.showLongText("The next day, the lizard moved back to her toadstool and lived happily ever after.", DialogLayout.Bottom)
226
+ })
227
+ ```
228
+
229
+
230
+ ## {Step 8}
231
+
232
+ **Look at what you have.**
233
+
234
+ - :binoculars: Don't forget to click through your story as you build to make sure the timing feels right.
235
+
236
+
237
+
238
+
239
+ ## {Step 9}
240
+
241
+ **Need more action?**<br/>
242
+ 🎥 🎥 🎥
243
+
244
+ You can use what you learned in the last level to add sprites to your story.
245
+
246
+ ---
247
+
248
+ - :paper plane: From ``||sprites:Sprites||``, grab
249
+ ```block
250
+ let mySprite = sprites.create(img`
251
+ . . . . . . . . . . . . . . . .
252
+ . . . . . . . . . . . . . . . .
253
+ . . . . . . . . . . . . . . . .
254
+ . . . . . . . . . . . . . . . .
255
+ . . . . . . . . . . . . . . . .
256
+ . . . . . . . . . . . . . . . .
257
+ . . . . . . . . . . . . . . . .
258
+ . . . . . . . . . . . . . . . .
259
+ . . . . . . . . . . . . . . . .
260
+ . . . . . . . . . . . . . . . .
261
+ . . . . . . . . . . . . . . . .
262
+ . . . . . . . . . . . . . . . .
263
+ . . . . . . . . . . . . . . . .
264
+ . . . . . . . . . . . . . . . .
265
+ . . . . . . . . . . . . . . . .
266
+ . . . . . . . . . . . . . . . .
267
+ `, SpriteKind.Player)
268
+ ```
269
+ and snap it in to the <br/>
270
+ ``||loops(noclick):on start||``<br/>
271
+ container wherever it works best for your story.
272
+
273
+
274
+ - :mouse pointer: Choose your sprite, then check out the ``||sprites:Sprites||`` category to find other blocks that
275
+ let you perfectly position your sprite or add movement.
276
+
277
+
278
+
279
+
280
+ #### ~ tutorialhint
281
+
282
+ ```blocks
283
+ scene.setBackgroundImage(img`
284
+ 9 9 9 9 
285
+ 9 9 9 9 
286
+ 7 7 7 7 
287
+ `)
288
+ //@highlight
289
+ let mySprite = sprites.create(img`
290
+ ........................
291
+ ............cc..........
292
+ ............ccc.........
293
+ ........ccc.ccccccc.....
294
+ ........ccccc555555cc...
295
+ ........ccb5555555555c..
296
+ .....ccc.b55555ff15555c.
297
+ .....cccb5555555ff55555c
298
+ ......cb555555555555d55c
299
+ ....c.b555555555bb55555c
300
+ ....ccb555ddd5555b13bbc.
301
+ ....ccd55ddddd555b3335c.
302
+ .....cdd5ddddddd55b335c.
303
+ ...c.bddddb555bbbd555c..
304
+ ...ccdddddb555555bccc...
305
+ ..cccddddddcc5555bcc....
306
+ .cdccddddddddbcccbcccc..
307
+ .cddbdddddddddbbbbc55c..
308
+ .cdddddddddd55dbbbc5c...
309
+ .cbddddbbbbd55ddbccc....
310
+ ..cbdddbbbbd555dccc.....
311
+ ...cccbbbbbbddd555c.....
312
+ .....ccccccbd55555c.....
313
+ ...........cc5555c......
314
+ `, SpriteKind.Player)
315
+ //@highlight
316
+ mySprite.setPosition(80, 90)
317
+ pause(1000)
318
+ game.showLongText("...happily ever after", DialogLayout.Bottom)
319
+
320
+ ```
321
+
322
+
323
+
324
+
325
+ ## {Step 10}
326
+
327
+ **👏 Happily ever after 👏**
328
+
329
+ Want to do something special to end your story?
330
+
331
+ ---
332
+
333
+ - :tree: From ``||scene:Scene||``, grab
334
+ ```block
335
+ effects.confetti.startScreenEffect()
336
+ ```
337
+ and snap it into **the end** of the <br/>
338
+ ``||loops(noclick):on start||``<br/>
339
+ container that's already in the workspace.
340
+
341
+
342
+ - :mouse pointer: Change **confetti** to whatever works best for your story!
343
+
344
+
345
+ #### ~ tutorialhint
346
+
347
+ ```blocks
348
+ scene.setBackgroundImage(img`
349
+ 9 9 9 9 
350
+ 9 9 9 9 
351
+ 7 7 7 7 
352
+ `)
353
+ let mySprite = sprites.create(img`
354
+ ........................
355
+ ............cc..........
356
+ ............ccc.........
357
+ ........ccc.ccccccc.....
358
+ ........ccccc555555cc...
359
+ ........ccb5555555555c..
360
+ .....ccc.b55555ff15555c.
361
+ .....cccb5555555ff55555c
362
+ ......cb555555555555d55c
363
+ ....c.b555555555bb55555c
364
+ ....ccb555ddd5555b13bbc.
365
+ ....ccd55ddddd555b3335c.
366
+ .....cdd5ddddddd55b335c.
367
+ ...c.bddddb555bbbd555c..
368
+ ...ccdddddb555555bccc...
369
+ ..cccddddddcc5555bcc....
370
+ .cdccddddddddbcccbcccc..
371
+ .cddbdddddddddbbbbc55c..
372
+ .cdddddddddd55dbbbc5c...
373
+ .cbddddbbbbd55ddbccc....
374
+ ..cbdddbbbbd555dccc.....
375
+ ...cccbbbbbbddd555c.....
376
+ .....ccccccbd55555c.....
377
+ ...........cc5555c......
378
+ `, SpriteKind.Player)
379
+ mySprite.setPosition(80, 90)
380
+ pause(1000)
381
+ game.showLongText("...happily ever after", DialogLayout.Bottom)
382
+ //@highlight
383
+ effects.bubbles.startScreenEffect()
384
+
385
+ ```
386
+
387
+
388
+ ## {Step 10}
389
+
390
+ **🎹 Sound Effects 🎹**
391
+
392
+ Does your story need a soundtrack?
393
+
394
+ ---
395
+
396
+ - :mouse pointer: From ``||music:Music||``, grab any of the <br/>
397
+ ``||music: play [ ]||`` blocks <br/>
398
+ and add them to your project.
399
+
400
+
401
+ - :mouse pointer: Experiment with the sounds and where to put them to create the biggest impact.
402
+
403
+ #### ~ tutorialhint
404
+
405
+ ```blocks
406
+ //@highlight
407
+ music.play(music.melodyPlayable(music.baDing), music.PlaybackMode.InBackground)
408
+ scene.setBackgroundImage(img`
409
+ 9 9 9 9 
410
+ 9 9 9 9 
411
+ 7 7 7 7 
412
+ `)
413
+ let mySprite = sprites.create(img`
414
+ ........................
415
+ ............cc..........
416
+ ............ccc.........
417
+ ........ccc.ccccccc.....
418
+ ........ccccc555555cc...
419
+ ........ccb5555555555c..
420
+ .....ccc.b55555ff15555c.
421
+ .....cccb5555555ff55555c
422
+ ......cb555555555555d55c
423
+ ....c.b555555555bb55555c
424
+ ....ccb555ddd5555b13bbc.
425
+ ....ccd55ddddd555b3335c.
426
+ .....cdd5ddddddd55b335c.
427
+ ...c.bddddb555bbbd555c..
428
+ ...ccdddddb555555bccc...
429
+ ..cccddddddcc5555bcc....
430
+ .cdccddddddddbcccbcccc..
431
+ .cddbdddddddddbbbbc55c..
432
+ .cdddddddddd55dbbbc5c...
433
+ .cbddddbbbbd55ddbccc....
434
+ ..cbdddbbbbd555dccc.....
435
+ ...cccbbbbbbddd555c.....
436
+ .....ccccccbd55555c.....
437
+ ...........cc5555c......
438
+ `, SpriteKind.Player)
439
+ mySprite.setPosition(80, 90)
440
+ pause(1000)
441
+ game.showLongText("...happily ever after", DialogLayout.Bottom)
442
+ effects.bubbles.startScreenEffect()
443
+ })
444
+ ```
445
+
446
+
447
+ ## {Finale}
448
+
449
+ **🤣 Congrats 🤣**
450
+
451
+ You've written a story that you can be proud of!
452
+
453
+
454
+ ~hint How do I share my story?💡
455
+
456
+ ---
457
+
458
+ **Want to share your project?**
459
+
460
+ Click "Done" to get back out to the skillmap, then look in the lower-right corner for the share button.
461
+
462
+ ![Share your card](/static/skillmap/assets/share.gif )
463
+
464
+ hint~
465
+
466
+
467
+ When you're done reading your story, click **Done** to return to the main page where you can share with everyone you know!
468
+
469
+ ```blockconfig.global
470
+ pause(1000)
471
+ let mySprite: Sprite = null
472
+ carnival.addLabelTo(" ", carnival.Areas.Top)
473
+ game.showLongText("Once upon a time...", DialogLayout.Bottom)
474
+ music.play(music.melodyPlayable(music.baDing), music.PlaybackMode.InBackground)
475
+ mySprite.setFlag(SpriteFlag.StayInScreen, true)
476
+
477
+ ```
478
+
479
+ ```package
480
+ carnival=github:microsoft/arcade-carnival#v0.0.7
481
+ arcade-storytelling=github:microsoft/arcade-storytelling/
482
+ arcade-animations=github:microsoft/arcade-character-animations
483
+ short-story-assets-2=github:kiki-lee/short-story-assets-2#v0.0.5
484
+ short-story-assets-1=github:kiki-lee/short-story-assets-1#v0.0.6
485
+ ```
486
+
487
+ ```ghost
488
+ music.stopAllSounds()
489
+ scene.setBackgroundColor(1)
490
+ pauseUntil(() => controller.anyButton.isPressed())
491
+ scene.setBackgroundImage(img`
492
+ 9 9 9 9 
493
+ 9 9 9 9 
494
+ 7 7 7 7 
495
+ `)
496
+ pause(1000)
497
+ game.showLongText("Once upon a time", DialogLayout.Bottom)
498
+ scene.setBackgroundImage(img`
499
+ 9 9 9 9 
500
+ 9 9 9 9 
501
+ 7 7 7 7 
502
+ `)
503
+ scene.setBackgroundImage(img`
504
+ 9 9 9 9 
505
+ 9 9 9 9 
506
+ 7 7 7 7 
507
+ `)
508
+ pause(1000)
509
+ game.showLongText("Finally, one day, the lizard decided to find a daisy of her own.", DialogLayout.Bottom)
510
+ scene.setBackgroundImage(img`
511
+ 9 9 9 9 
512
+ 9 9 9 9 
513
+ 7 7 7 7 
514
+ `)
515
+ music.play(music.createSoundEffect(WaveShape.Sine, 5000, 0, 255, 0, 500, SoundExpressionEffect.None, InterpolationCurve.Linear), music.PlaybackMode.UntilDone)
516
+ music.play(music.createSong(hexhex`00780004080200`), music.PlaybackMode.InBackground)
517
+ let mySprite = sprites.create(img`.`, SpriteKind.Player)
518
+ story.printText(":)", 0, 0)
519
+ story.startCutscene(function () {
520
+ story.spriteSayText(mySprite, ":)")
521
+ })
522
+ story.setPagePauseLength(1000, 1000)
523
+ story.printCharacterText("")
524
+ story.setSoundEnabled(false)
525
+ mySprite.sayText(" ")
526
+ game.splash("")
527
+ game.showLongText("", DialogLayout.Bottom)
528
+ carnival.addLabelTo("Whack-the-Mole", carnival.Areas.Top)
529
+ mySprite.setPosition(0, 0)
530
+ story.cancelCurrentCutscene()
531
+ story.cancelSpriteMovement(mySprite)
532
+ story.spriteMoveToLocation(mySprite, 0, 0, 100)
533
+ music.setVolume(20)
534
+ music.play(music.createSong(hex`00780004080200`), music.PlaybackMode.UntilDone)
535
+ music.play(music.stringPlayable("- - - - - - - - ", 120), music.PlaybackMode.UntilDone)
536
+ music.play(music.melodyPlayable(music.baDing), music.PlaybackMode.UntilDone)
537
+ music.play(music.createSoundEffect(WaveShape.Sine, 5000, 0, 255, 0, 500, SoundExpressionEffect.None, InterpolationCurve.Linear), music.PlaybackMode.UntilDone)
538
+ music.stopAllSounds()
539
+ animation.runImageAnimation(
540
+ mySprite,
541
+ [img`.`],
542
+ 100,
543
+ true
544
+ )
545
+
546
+ characterAnimations.loopFrames(
547
+ mySprite,
548
+ [img`.`],
549
+ 500,
550
+ characterAnimations.rule(Predicate.NotMoving)
551
+ )
552
+
553
+ mySprite.startEffect(effects.spray)
554
+ mySprite.setImage(img`.`)
555
+ scene.cameraShake(4, 500)
556
+ mySprite.setVelocity(-20, 0)
557
+ mySprite.x = 0
558
+ mySprite.setFlag(SpriteFlag.StayInScreen, false)
559
+ ```
560
+
561
+
Binary file