incanto 0.57.0 → 0.58.0

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 (63) hide show
  1. package/README.md +6 -4
  2. package/bin/incanto-check.mjs +27 -0
  3. package/bin/incanto-new.mjs +29 -7
  4. package/bin/incanto-playtest.mjs +28 -2
  5. package/bin/incanto-verify.mjs +87 -15
  6. package/bin/incanto.mjs +106 -0
  7. package/dist/2d.js +2 -2
  8. package/dist/3d.js +2 -2
  9. package/dist/{create-game-DpbUrMOQ.js → create-game-BZwWJIns.js} +1 -1
  10. package/dist/{create-game-C5jQYPah.js → create-game-D10bU5_J.js} +56 -8
  11. package/dist/index.js +1 -1
  12. package/dist/{physics-2d-BLcvEFDR.js → physics-2d-EqA-jddf.js} +2 -1
  13. package/dist/{physics-3d-QBrfIT2Y.js → physics-3d-Dnz4fsXX.js} +2 -1
  14. package/dist/quiet-rapier-BAJ4K94N.js +46 -0
  15. package/dist/react.js +1 -1
  16. package/dist/{src-CGjmPw65.js → src-C1J09Op6.js} +1 -1
  17. package/dist/{test-it1VekWs.js → test-ZBga8kQ9.js} +36 -10
  18. package/dist/test.d.ts +1 -1
  19. package/dist/test.js +1 -1
  20. package/dist/vite.js +2 -2
  21. package/editor/assets/{agent8-CGT7r3Mb.js → agent8-BQQjE9UQ.js} +1 -1
  22. package/editor/assets/{debug-BxWSIHG3.js → debug-C9UCsXBS.js} +1 -1
  23. package/editor/assets/{index-CV1m-aX5.js → index-CBgfM3WD.js} +51 -51
  24. package/editor/index.html +1 -1
  25. package/package.json +2 -1
  26. package/skills/incanto-building-2d-games.md +13 -0
  27. package/skills/incanto-building-3d-games.md +3 -3
  28. package/skills/incanto-playtesting.md +19 -5
  29. package/skills/incanto-verifying-your-game.md +11 -4
  30. package/templates-app/beacon-isle-3d/package.json +1 -1
  31. package/templates-app/beacon-isle-3d/src/game.scene.json +7 -6
  32. package/templates-app/platformer-2d/PROJECT/Context.md +70 -0
  33. package/templates-app/platformer-2d/PROJECT/Requirements.md +63 -0
  34. package/templates-app/platformer-2d/PROJECT/Status.md +60 -0
  35. package/templates-app/platformer-2d/PROJECT/Structure.md +77 -0
  36. package/templates-app/platformer-2d/docs/project-2d-rules.md +61 -0
  37. package/templates-app/platformer-2d/index.html +99 -0
  38. package/templates-app/platformer-2d/package.json +23 -0
  39. package/templates-app/platformer-2d/src/behaviors.ts +541 -0
  40. package/templates-app/platformer-2d/src/game.scene.json +2061 -0
  41. package/templates-app/platformer-2d/src/main.ts +68 -0
  42. package/templates-app/platformer-2d/tsconfig.json +13 -0
  43. package/templates-app/platformer-2d/verify.ts +275 -0
  44. package/templates-app/platformer-2d/vite.config.ts +12 -0
  45. package/templates-app/star-survivor/PROJECT/Context.md +55 -0
  46. package/templates-app/star-survivor/PROJECT/Requirements.md +47 -0
  47. package/templates-app/star-survivor/PROJECT/Status.md +44 -0
  48. package/templates-app/star-survivor/PROJECT/Structure.md +63 -0
  49. package/templates-app/star-survivor/docs/project-2d-rules.md +53 -0
  50. package/templates-app/star-survivor/index.html +232 -0
  51. package/templates-app/star-survivor/package.json +23 -0
  52. package/templates-app/star-survivor/src/behaviors.ts +624 -0
  53. package/templates-app/star-survivor/src/game.scene.json +464 -0
  54. package/templates-app/star-survivor/src/main.ts +49 -0
  55. package/templates-app/star-survivor/tsconfig.json +13 -0
  56. package/templates-app/star-survivor/verify.ts +193 -0
  57. package/templates-app/star-survivor/vite.config.ts +12 -0
  58. package/templates-app/tps-3d/package.json +1 -1
  59. package/templates-app/tps-3d/src/game.scene.json +6 -3
  60. package/templates-app/tps-3d/verify.ts +17 -1
  61. package/templates-app/village-quest-3d/package.json +1 -1
  62. package/templates-app/village-quest-3d/src/grove.scene.json +14 -13
  63. package/templates-app/village-quest-3d/src/village.scene.json +5 -5
@@ -0,0 +1,2061 @@
1
+ {
2
+ "format": 1,
3
+ "type": "scene",
4
+ "dimension": "2d",
5
+ "name": "CastleRun",
6
+ "environment": {
7
+ "background": "#8fd0ef"
8
+ },
9
+ "viewport": {
10
+ "design": [960, 540],
11
+ "fit": "expand"
12
+ },
13
+ "physics": {
14
+ "gravity": [0, 1800]
15
+ },
16
+ "input": {
17
+ "move": {
18
+ "type": "vector2",
19
+ "keys": {
20
+ "up": [],
21
+ "down": [],
22
+ "left": ["KeyA", "ArrowLeft"],
23
+ "right": ["KeyD", "ArrowRight"]
24
+ },
25
+ "touch": "joystick"
26
+ },
27
+ "jump": {
28
+ "type": "button",
29
+ "keys": ["Space", "KeyW", "ArrowUp"],
30
+ "touch": "button"
31
+ }
32
+ },
33
+ "assets": {
34
+ "knight": {
35
+ "type": "spritesheet",
36
+ "url": "incanto/assets/characters/medieval-knight.png",
37
+ "frameWidth": 192,
38
+ "frameHeight": 192,
39
+ "filter": "nearest",
40
+ "source": "built-in catalog 'medieval-knight' \u2014 idle 0-5, move 6-11, attack 12-17. URL injected in main.ts so the art ships with the package."
41
+ },
42
+ "goblin": {
43
+ "type": "spritesheet",
44
+ "url": "incanto/assets/characters/goblin.png",
45
+ "frameWidth": 192,
46
+ "frameHeight": 192,
47
+ "filter": "nearest",
48
+ "source": "built-in catalog 'goblin' \u2014 idle 0-6, move 7-12. URL injected in main.ts."
49
+ },
50
+ "coin": {
51
+ "type": "texture",
52
+ "url": "incanto/assets/items/coin.png",
53
+ "filter": "nearest",
54
+ "source": "built-in catalog 'coin' \u2014 gold collectible. URL injected in main.ts."
55
+ },
56
+ "gem": {
57
+ "type": "texture",
58
+ "url": "incanto/assets/items/gem.png",
59
+ "filter": "nearest",
60
+ "source": "built-in catalog 'gem' \u2014 valuable collectible. URL injected in main.ts."
61
+ }
62
+ },
63
+ "root": {
64
+ "name": "Game",
65
+ "type": "Node",
66
+ "script": {
67
+ "name": "ScoreKeeper",
68
+ "props": {
69
+ "scoreToWin": 100000,
70
+ "lives": 3
71
+ }
72
+ },
73
+ "children": [
74
+ {
75
+ "name": "Sky",
76
+ "type": "ColorRect2D",
77
+ "props": {
78
+ "position": [1400, 250],
79
+ "size": [6000, 1500],
80
+ "color": "#8fd0ef",
81
+ "renderOrder": -60,
82
+ "anchor": [0.5, 0.5]
83
+ },
84
+ "script": {
85
+ "name": "ParallaxLayer",
86
+ "props": {
87
+ "factor": 0.96
88
+ }
89
+ }
90
+ },
91
+ {
92
+ "name": "Sun",
93
+ "type": "ColorRect2D",
94
+ "props": {
95
+ "position": [760, 150],
96
+ "size": [120, 120],
97
+ "color": "#fff2c4",
98
+ "renderOrder": -59,
99
+ "anchor": [0.5, 0.5]
100
+ },
101
+ "script": {
102
+ "name": "ParallaxLayer",
103
+ "props": {
104
+ "factor": 0.94
105
+ }
106
+ }
107
+ },
108
+ {
109
+ "name": "Cloud1",
110
+ "type": "ColorRect2D",
111
+ "props": {
112
+ "position": [500, 130],
113
+ "size": [220, 46],
114
+ "color": "#eaf6ff",
115
+ "opacity": 0.9,
116
+ "renderOrder": -58,
117
+ "anchor": [0.5, 0.5]
118
+ },
119
+ "script": {
120
+ "name": "ParallaxLayer",
121
+ "props": {
122
+ "factor": 0.9
123
+ }
124
+ }
125
+ },
126
+ {
127
+ "name": "Cloud2",
128
+ "type": "ColorRect2D",
129
+ "props": {
130
+ "position": [1150, 180],
131
+ "size": [300, 56],
132
+ "color": "#eaf6ff",
133
+ "opacity": 0.9,
134
+ "renderOrder": -58,
135
+ "anchor": [0.5, 0.5]
136
+ },
137
+ "script": {
138
+ "name": "ParallaxLayer",
139
+ "props": {
140
+ "factor": 0.9
141
+ }
142
+ }
143
+ },
144
+ {
145
+ "name": "Cloud3",
146
+ "type": "ColorRect2D",
147
+ "props": {
148
+ "position": [1850, 120],
149
+ "size": [260, 50],
150
+ "color": "#eaf6ff",
151
+ "opacity": 0.9,
152
+ "renderOrder": -58,
153
+ "anchor": [0.5, 0.5]
154
+ },
155
+ "script": {
156
+ "name": "ParallaxLayer",
157
+ "props": {
158
+ "factor": 0.9
159
+ }
160
+ }
161
+ },
162
+ {
163
+ "name": "CastleFarLayer",
164
+ "type": "Node2D",
165
+ "props": {
166
+ "position": [0, 0],
167
+ "renderOrder": -50
168
+ },
169
+ "script": {
170
+ "name": "ParallaxLayer",
171
+ "props": {
172
+ "factor": 0.82
173
+ }
174
+ },
175
+ "children": [
176
+ {
177
+ "name": "Band",
178
+ "type": "ColorRect2D",
179
+ "props": {
180
+ "position": [1400, 430],
181
+ "size": [6000, 460],
182
+ "color": "#9aa9cf",
183
+ "anchor": [0.5, 0.5]
184
+ }
185
+ },
186
+ {
187
+ "name": "T1",
188
+ "type": "ColorRect2D",
189
+ "props": {
190
+ "position": [420, 250],
191
+ "size": [110, 320],
192
+ "color": "#8a9bc6",
193
+ "anchor": [0.5, 0.5]
194
+ }
195
+ },
196
+ {
197
+ "name": "T1cap",
198
+ "type": "ColorRect2D",
199
+ "props": {
200
+ "position": [420, 96],
201
+ "size": [140, 26],
202
+ "color": "#8a9bc6",
203
+ "anchor": [0.5, 0.5]
204
+ }
205
+ },
206
+ {
207
+ "name": "T2",
208
+ "type": "ColorRect2D",
209
+ "props": {
210
+ "position": [1150, 225],
211
+ "size": [124, 370],
212
+ "color": "#8a9bc6",
213
+ "anchor": [0.5, 0.5]
214
+ }
215
+ },
216
+ {
217
+ "name": "T2cap",
218
+ "type": "ColorRect2D",
219
+ "props": {
220
+ "position": [1150, 58],
221
+ "size": [156, 28],
222
+ "color": "#8a9bc6",
223
+ "anchor": [0.5, 0.5]
224
+ }
225
+ },
226
+ {
227
+ "name": "T3",
228
+ "type": "ColorRect2D",
229
+ "props": {
230
+ "position": [1950, 265],
231
+ "size": [104, 300],
232
+ "color": "#8a9bc6",
233
+ "anchor": [0.5, 0.5]
234
+ }
235
+ },
236
+ {
237
+ "name": "T3cap",
238
+ "type": "ColorRect2D",
239
+ "props": {
240
+ "position": [1950, 124],
241
+ "size": [132, 24],
242
+ "color": "#8a9bc6",
243
+ "anchor": [0.5, 0.5]
244
+ }
245
+ },
246
+ {
247
+ "name": "T4",
248
+ "type": "ColorRect2D",
249
+ "props": {
250
+ "position": [2620, 245],
251
+ "size": [120, 330],
252
+ "color": "#8a9bc6",
253
+ "anchor": [0.5, 0.5]
254
+ }
255
+ },
256
+ {
257
+ "name": "T4cap",
258
+ "type": "ColorRect2D",
259
+ "props": {
260
+ "position": [2620, 88],
261
+ "size": [150, 26],
262
+ "color": "#8a9bc6",
263
+ "anchor": [0.5, 0.5]
264
+ }
265
+ }
266
+ ]
267
+ },
268
+ {
269
+ "name": "CastleNearLayer",
270
+ "type": "Node2D",
271
+ "props": {
272
+ "position": [0, 0],
273
+ "renderOrder": -42
274
+ },
275
+ "script": {
276
+ "name": "ParallaxLayer",
277
+ "props": {
278
+ "factor": 0.6
279
+ }
280
+ },
281
+ "children": [
282
+ {
283
+ "name": "Band",
284
+ "type": "ColorRect2D",
285
+ "props": {
286
+ "position": [1400, 540],
287
+ "size": [6000, 460],
288
+ "color": "#6776a8",
289
+ "anchor": [0.5, 0.5]
290
+ }
291
+ },
292
+ {
293
+ "name": "GateTower",
294
+ "type": "ColorRect2D",
295
+ "props": {
296
+ "position": [1120, 330],
297
+ "size": [150, 440],
298
+ "color": "#51608c",
299
+ "anchor": [0.5, 0.5]
300
+ }
301
+ },
302
+ {
303
+ "name": "Gate",
304
+ "type": "ColorRect2D",
305
+ "props": {
306
+ "position": [1120, 430],
307
+ "size": [76, 150],
308
+ "color": "#2c2640",
309
+ "anchor": [0.5, 0.5]
310
+ }
311
+ },
312
+ {
313
+ "name": "GateWin",
314
+ "type": "ColorRect2D",
315
+ "props": {
316
+ "position": [1120, 210],
317
+ "size": [26, 34],
318
+ "color": "#ffd98a",
319
+ "anchor": [0.5, 0.5]
320
+ }
321
+ },
322
+ {
323
+ "name": "TA",
324
+ "type": "ColorRect2D",
325
+ "props": {
326
+ "position": [560, 360],
327
+ "size": [136, 420],
328
+ "color": "#51608c",
329
+ "anchor": [0.5, 0.5]
330
+ }
331
+ },
332
+ {
333
+ "name": "TAcap",
334
+ "type": "ColorRect2D",
335
+ "props": {
336
+ "position": [560, 150],
337
+ "size": [168, 30],
338
+ "color": "#51608c",
339
+ "anchor": [0.5, 0.5]
340
+ }
341
+ },
342
+ {
343
+ "name": "TAm1",
344
+ "type": "ColorRect2D",
345
+ "props": {
346
+ "position": [500, 124],
347
+ "size": [26, 26],
348
+ "color": "#51608c",
349
+ "anchor": [0.5, 0.5]
350
+ }
351
+ },
352
+ {
353
+ "name": "TAm2",
354
+ "type": "ColorRect2D",
355
+ "props": {
356
+ "position": [560, 124],
357
+ "size": [26, 26],
358
+ "color": "#51608c",
359
+ "anchor": [0.5, 0.5]
360
+ }
361
+ },
362
+ {
363
+ "name": "TAm3",
364
+ "type": "ColorRect2D",
365
+ "props": {
366
+ "position": [620, 124],
367
+ "size": [26, 26],
368
+ "color": "#51608c",
369
+ "anchor": [0.5, 0.5]
370
+ }
371
+ },
372
+ {
373
+ "name": "TAw1",
374
+ "type": "ColorRect2D",
375
+ "props": {
376
+ "position": [560, 250],
377
+ "size": [26, 36],
378
+ "color": "#ffd98a",
379
+ "anchor": [0.5, 0.5]
380
+ }
381
+ },
382
+ {
383
+ "name": "TAw2",
384
+ "type": "ColorRect2D",
385
+ "props": {
386
+ "position": [560, 340],
387
+ "size": [26, 36],
388
+ "color": "#ffd98a",
389
+ "anchor": [0.5, 0.5]
390
+ }
391
+ },
392
+ {
393
+ "name": "TB",
394
+ "type": "ColorRect2D",
395
+ "props": {
396
+ "position": [1750, 330],
397
+ "size": [150, 460],
398
+ "color": "#51608c",
399
+ "anchor": [0.5, 0.5]
400
+ }
401
+ },
402
+ {
403
+ "name": "TBcap",
404
+ "type": "ColorRect2D",
405
+ "props": {
406
+ "position": [1750, 108],
407
+ "size": [184, 30],
408
+ "color": "#51608c",
409
+ "anchor": [0.5, 0.5]
410
+ }
411
+ },
412
+ {
413
+ "name": "TBm1",
414
+ "type": "ColorRect2D",
415
+ "props": {
416
+ "position": [1685, 84],
417
+ "size": [28, 28],
418
+ "color": "#51608c",
419
+ "anchor": [0.5, 0.5]
420
+ }
421
+ },
422
+ {
423
+ "name": "TBm2",
424
+ "type": "ColorRect2D",
425
+ "props": {
426
+ "position": [1750, 84],
427
+ "size": [28, 28],
428
+ "color": "#51608c",
429
+ "anchor": [0.5, 0.5]
430
+ }
431
+ },
432
+ {
433
+ "name": "TBm3",
434
+ "type": "ColorRect2D",
435
+ "props": {
436
+ "position": [1815, 84],
437
+ "size": [28, 28],
438
+ "color": "#51608c",
439
+ "anchor": [0.5, 0.5]
440
+ }
441
+ },
442
+ {
443
+ "name": "TBpennant",
444
+ "type": "ColorRect2D",
445
+ "props": {
446
+ "position": [1772, 64],
447
+ "size": [40, 24],
448
+ "color": "#ef476f",
449
+ "anchor": [0, 0.5]
450
+ }
451
+ },
452
+ {
453
+ "name": "TBw1",
454
+ "type": "ColorRect2D",
455
+ "props": {
456
+ "position": [1750, 230],
457
+ "size": [28, 38],
458
+ "color": "#ffd98a",
459
+ "anchor": [0.5, 0.5]
460
+ }
461
+ },
462
+ {
463
+ "name": "TBw2",
464
+ "type": "ColorRect2D",
465
+ "props": {
466
+ "position": [1750, 330],
467
+ "size": [28, 38],
468
+ "color": "#ffd98a",
469
+ "anchor": [0.5, 0.5]
470
+ }
471
+ },
472
+ {
473
+ "name": "TC",
474
+ "type": "ColorRect2D",
475
+ "props": {
476
+ "position": [2480, 360],
477
+ "size": [136, 420],
478
+ "color": "#51608c",
479
+ "anchor": [0.5, 0.5]
480
+ }
481
+ },
482
+ {
483
+ "name": "TCcap",
484
+ "type": "ColorRect2D",
485
+ "props": {
486
+ "position": [2480, 150],
487
+ "size": [168, 30],
488
+ "color": "#51608c",
489
+ "anchor": [0.5, 0.5]
490
+ }
491
+ },
492
+ {
493
+ "name": "TCm1",
494
+ "type": "ColorRect2D",
495
+ "props": {
496
+ "position": [2420, 124],
497
+ "size": [26, 26],
498
+ "color": "#51608c",
499
+ "anchor": [0.5, 0.5]
500
+ }
501
+ },
502
+ {
503
+ "name": "TCm2",
504
+ "type": "ColorRect2D",
505
+ "props": {
506
+ "position": [2480, 124],
507
+ "size": [26, 26],
508
+ "color": "#51608c",
509
+ "anchor": [0.5, 0.5]
510
+ }
511
+ },
512
+ {
513
+ "name": "TCm3",
514
+ "type": "ColorRect2D",
515
+ "props": {
516
+ "position": [2540, 124],
517
+ "size": [26, 26],
518
+ "color": "#51608c",
519
+ "anchor": [0.5, 0.5]
520
+ }
521
+ },
522
+ {
523
+ "name": "TCw1",
524
+ "type": "ColorRect2D",
525
+ "props": {
526
+ "position": [2480, 250],
527
+ "size": [26, 36],
528
+ "color": "#ffd98a",
529
+ "anchor": [0.5, 0.5]
530
+ }
531
+ },
532
+ {
533
+ "name": "TCw2",
534
+ "type": "ColorRect2D",
535
+ "props": {
536
+ "position": [2480, 340],
537
+ "size": [26, 36],
538
+ "color": "#ffd98a",
539
+ "anchor": [0.5, 0.5]
540
+ }
541
+ }
542
+ ]
543
+ },
544
+ {
545
+ "name": "GroundA",
546
+ "type": "StaticBody2D",
547
+ "groups": ["ground"],
548
+ "props": {
549
+ "position": [300, 520],
550
+ "collider": {
551
+ "shape": "rect",
552
+ "size": [640, 120]
553
+ }
554
+ },
555
+ "children": [
556
+ {
557
+ "name": "Skin",
558
+ "type": "ColorRect2D",
559
+ "props": {
560
+ "size": [640, 120],
561
+ "color": "#6a5b4a"
562
+ }
563
+ },
564
+ {
565
+ "name": "Moss",
566
+ "type": "ColorRect2D",
567
+ "props": {
568
+ "position": [0, -54],
569
+ "size": [640, 14],
570
+ "color": "#79bd54"
571
+ }
572
+ }
573
+ ]
574
+ },
575
+ {
576
+ "name": "GroundB",
577
+ "type": "StaticBody2D",
578
+ "groups": ["ground"],
579
+ "props": {
580
+ "position": [1020, 520],
581
+ "collider": {
582
+ "shape": "rect",
583
+ "size": [560, 120]
584
+ }
585
+ },
586
+ "children": [
587
+ {
588
+ "name": "Skin",
589
+ "type": "ColorRect2D",
590
+ "props": {
591
+ "size": [560, 120],
592
+ "color": "#6a5b4a"
593
+ }
594
+ },
595
+ {
596
+ "name": "Moss",
597
+ "type": "ColorRect2D",
598
+ "props": {
599
+ "position": [0, -54],
600
+ "size": [560, 14],
601
+ "color": "#79bd54"
602
+ }
603
+ }
604
+ ]
605
+ },
606
+ {
607
+ "name": "GroundC",
608
+ "type": "StaticBody2D",
609
+ "groups": ["ground"],
610
+ "props": {
611
+ "position": [1760, 520],
612
+ "collider": {
613
+ "shape": "rect",
614
+ "size": [560, 120]
615
+ }
616
+ },
617
+ "children": [
618
+ {
619
+ "name": "Skin",
620
+ "type": "ColorRect2D",
621
+ "props": {
622
+ "size": [560, 120],
623
+ "color": "#6a5b4a"
624
+ }
625
+ },
626
+ {
627
+ "name": "Moss",
628
+ "type": "ColorRect2D",
629
+ "props": {
630
+ "position": [0, -54],
631
+ "size": [560, 14],
632
+ "color": "#79bd54"
633
+ }
634
+ }
635
+ ]
636
+ },
637
+ {
638
+ "name": "GroundD",
639
+ "type": "StaticBody2D",
640
+ "groups": ["ground"],
641
+ "props": {
642
+ "position": [2520, 520],
643
+ "collider": {
644
+ "shape": "rect",
645
+ "size": [600, 120]
646
+ }
647
+ },
648
+ "children": [
649
+ {
650
+ "name": "Skin",
651
+ "type": "ColorRect2D",
652
+ "props": {
653
+ "size": [600, 120],
654
+ "color": "#6a5b4a"
655
+ }
656
+ },
657
+ {
658
+ "name": "Moss",
659
+ "type": "ColorRect2D",
660
+ "props": {
661
+ "position": [0, -54],
662
+ "size": [600, 14],
663
+ "color": "#79bd54"
664
+ }
665
+ }
666
+ ]
667
+ },
668
+ {
669
+ "name": "Plat1",
670
+ "type": "StaticBody2D",
671
+ "groups": ["ground"],
672
+ "props": {
673
+ "position": [680, 360],
674
+ "collider": {
675
+ "shape": "rect",
676
+ "size": [150, 26]
677
+ }
678
+ },
679
+ "children": [
680
+ {
681
+ "name": "Skin",
682
+ "type": "ColorRect2D",
683
+ "props": {
684
+ "size": [150, 26],
685
+ "color": "#7d6f5c"
686
+ }
687
+ },
688
+ {
689
+ "name": "Moss",
690
+ "type": "ColorRect2D",
691
+ "props": {
692
+ "position": [0, -9],
693
+ "size": [150, 8],
694
+ "color": "#88c060"
695
+ }
696
+ }
697
+ ]
698
+ },
699
+ {
700
+ "name": "Plat2",
701
+ "type": "StaticBody2D",
702
+ "groups": ["ground"],
703
+ "props": {
704
+ "position": [1180, 320],
705
+ "collider": {
706
+ "shape": "rect",
707
+ "size": [150, 26]
708
+ }
709
+ },
710
+ "children": [
711
+ {
712
+ "name": "Skin",
713
+ "type": "ColorRect2D",
714
+ "props": {
715
+ "size": [150, 26],
716
+ "color": "#7d6f5c"
717
+ }
718
+ },
719
+ {
720
+ "name": "Moss",
721
+ "type": "ColorRect2D",
722
+ "props": {
723
+ "position": [0, -9],
724
+ "size": [150, 8],
725
+ "color": "#88c060"
726
+ }
727
+ }
728
+ ]
729
+ },
730
+ {
731
+ "name": "Plat3",
732
+ "type": "StaticBody2D",
733
+ "groups": ["ground"],
734
+ "props": {
735
+ "position": [1760, 300],
736
+ "collider": {
737
+ "shape": "rect",
738
+ "size": [180, 26]
739
+ }
740
+ },
741
+ "children": [
742
+ {
743
+ "name": "Skin",
744
+ "type": "ColorRect2D",
745
+ "props": {
746
+ "size": [180, 26],
747
+ "color": "#7d6f5c"
748
+ }
749
+ },
750
+ {
751
+ "name": "Moss",
752
+ "type": "ColorRect2D",
753
+ "props": {
754
+ "position": [0, -9],
755
+ "size": [180, 8],
756
+ "color": "#88c060"
757
+ }
758
+ }
759
+ ]
760
+ },
761
+ {
762
+ "name": "Plat4",
763
+ "type": "StaticBody2D",
764
+ "groups": ["ground"],
765
+ "props": {
766
+ "position": [2380, 320],
767
+ "collider": {
768
+ "shape": "rect",
769
+ "size": [150, 26]
770
+ }
771
+ },
772
+ "children": [
773
+ {
774
+ "name": "Skin",
775
+ "type": "ColorRect2D",
776
+ "props": {
777
+ "size": [150, 26],
778
+ "color": "#7d6f5c"
779
+ }
780
+ },
781
+ {
782
+ "name": "Moss",
783
+ "type": "ColorRect2D",
784
+ "props": {
785
+ "position": [0, -9],
786
+ "size": [150, 8],
787
+ "color": "#88c060"
788
+ }
789
+ }
790
+ ]
791
+ },
792
+ {
793
+ "name": "MovePlat",
794
+ "type": "StaticBody2D",
795
+ "groups": ["ground", "platform"],
796
+ "props": {
797
+ "position": [1320, 430],
798
+ "collider": {
799
+ "shape": "rect",
800
+ "size": [150, 24]
801
+ }
802
+ },
803
+ "script": {
804
+ "name": "Patrol",
805
+ "props": {
806
+ "points": [[1320, 430], [1470, 430]],
807
+ "speed": 90,
808
+ "mode": "pingpong",
809
+ "pauseAt": 0.4
810
+ }
811
+ },
812
+ "children": [
813
+ {
814
+ "name": "Skin",
815
+ "type": "ColorRect2D",
816
+ "props": {
817
+ "size": [150, 24],
818
+ "color": "#b07b3c"
819
+ }
820
+ },
821
+ {
822
+ "name": "Top",
823
+ "type": "ColorRect2D",
824
+ "props": {
825
+ "position": [0, -8],
826
+ "size": [150, 8],
827
+ "color": "#ffd166"
828
+ }
829
+ }
830
+ ]
831
+ },
832
+ {
833
+ "name": "Lift",
834
+ "type": "StaticBody2D",
835
+ "groups": ["ground", "platform"],
836
+ "props": {
837
+ "position": [2140, 430],
838
+ "collider": {
839
+ "shape": "rect",
840
+ "size": [140, 24]
841
+ }
842
+ },
843
+ "script": {
844
+ "name": "Oscillate",
845
+ "props": {
846
+ "axis": "y",
847
+ "amplitude": 90,
848
+ "frequency": 0.32,
849
+ "mode": "position"
850
+ }
851
+ },
852
+ "children": [
853
+ {
854
+ "name": "Skin",
855
+ "type": "ColorRect2D",
856
+ "props": {
857
+ "size": [140, 24],
858
+ "color": "#b07b3c"
859
+ }
860
+ },
861
+ {
862
+ "name": "Top",
863
+ "type": "ColorRect2D",
864
+ "props": {
865
+ "position": [0, -8],
866
+ "size": [140, 8],
867
+ "color": "#ffd166"
868
+ }
869
+ }
870
+ ]
871
+ },
872
+ {
873
+ "name": "Spikes1",
874
+ "type": "Area2D",
875
+ "groups": ["hazard"],
876
+ "props": {
877
+ "position": [680, 548],
878
+ "collider": {
879
+ "shape": "rect",
880
+ "size": [120, 36]
881
+ }
882
+ },
883
+ "children": [
884
+ {
885
+ "name": "Skin",
886
+ "type": "ColorRect2D",
887
+ "props": {
888
+ "position": [0, 2],
889
+ "size": [120, 26],
890
+ "color": "#b0392f"
891
+ }
892
+ }
893
+ ]
894
+ },
895
+ {
896
+ "name": "Spikes2",
897
+ "type": "Area2D",
898
+ "groups": ["hazard"],
899
+ "props": {
900
+ "position": [2140, 548],
901
+ "collider": {
902
+ "shape": "rect",
903
+ "size": [200, 36]
904
+ }
905
+ },
906
+ "children": [
907
+ {
908
+ "name": "Skin",
909
+ "type": "ColorRect2D",
910
+ "props": {
911
+ "position": [0, 2],
912
+ "size": [200, 26],
913
+ "color": "#b0392f"
914
+ }
915
+ }
916
+ ]
917
+ },
918
+ {
919
+ "name": "DeathPlane",
920
+ "type": "Area2D",
921
+ "groups": ["pit"],
922
+ "props": {
923
+ "position": [1400, 880],
924
+ "collider": {
925
+ "shape": "rect",
926
+ "size": [6000, 120]
927
+ }
928
+ }
929
+ },
930
+ {
931
+ "name": "Checkpoint",
932
+ "type": "Area2D",
933
+ "groups": ["checkpoint"],
934
+ "props": {
935
+ "position": [1520, 392],
936
+ "collider": {
937
+ "shape": "rect",
938
+ "size": [40, 120]
939
+ }
940
+ },
941
+ "children": [
942
+ {
943
+ "name": "Pole",
944
+ "type": "ColorRect2D",
945
+ "props": {
946
+ "size": [8, 120],
947
+ "color": "#cfd6e6"
948
+ }
949
+ },
950
+ {
951
+ "name": "Flag",
952
+ "type": "ColorRect2D",
953
+ "props": {
954
+ "position": [26, -44],
955
+ "size": [44, 28],
956
+ "color": "#56d8ff"
957
+ }
958
+ }
959
+ ]
960
+ },
961
+ {
962
+ "name": "Goal",
963
+ "type": "Area2D",
964
+ "groups": ["goal"],
965
+ "props": {
966
+ "position": [2740, 380],
967
+ "collider": {
968
+ "shape": "rect",
969
+ "size": [60, 160]
970
+ }
971
+ },
972
+ "children": [
973
+ {
974
+ "name": "Pole",
975
+ "type": "ColorRect2D",
976
+ "props": {
977
+ "size": [10, 160],
978
+ "color": "#e9e2cf"
979
+ }
980
+ },
981
+ {
982
+ "name": "Flag",
983
+ "type": "ColorRect2D",
984
+ "props": {
985
+ "position": [34, -60],
986
+ "size": [56, 36],
987
+ "color": "#ffd166"
988
+ }
989
+ },
990
+ {
991
+ "name": "Gate",
992
+ "type": "ColorRect2D",
993
+ "props": {
994
+ "position": [0, 60],
995
+ "size": [120, 40],
996
+ "color": "#3f3550"
997
+ }
998
+ }
999
+ ]
1000
+ },
1001
+ {
1002
+ "name": "Gob1",
1003
+ "type": "Node2D",
1004
+ "groups": ["enemy"],
1005
+ "props": {
1006
+ "position": [1020, 430]
1007
+ },
1008
+ "script": {
1009
+ "name": "Patrol",
1010
+ "props": {
1011
+ "points": [[820, 430], [1240, 430]],
1012
+ "speed": 72,
1013
+ "mode": "pingpong"
1014
+ }
1015
+ },
1016
+ "children": [
1017
+ {
1018
+ "name": "Skin",
1019
+ "type": "AnimatedSprite2D",
1020
+ "props": {
1021
+ "sheet": "$goblin",
1022
+ "autoplay": "move",
1023
+ "scale": [0.46, 0.46],
1024
+ "anchor": [0.5, 0.348],
1025
+ "animations": {
1026
+ "idle": {
1027
+ "frames": [0, 6],
1028
+ "fps": 9,
1029
+ "loop": true
1030
+ },
1031
+ "move": {
1032
+ "frames": [7, 12],
1033
+ "fps": 12,
1034
+ "loop": true
1035
+ }
1036
+ }
1037
+ }
1038
+ },
1039
+ {
1040
+ "name": "AI",
1041
+ "type": "Node2D",
1042
+ "script": {
1043
+ "name": "GoblinSkin"
1044
+ }
1045
+ }
1046
+ ]
1047
+ },
1048
+ {
1049
+ "name": "Gob2",
1050
+ "type": "Node2D",
1051
+ "groups": ["enemy"],
1052
+ "props": {
1053
+ "position": [1760, 430]
1054
+ },
1055
+ "script": {
1056
+ "name": "Patrol",
1057
+ "props": {
1058
+ "points": [[1540, 430], [1980, 430]],
1059
+ "speed": 84,
1060
+ "mode": "pingpong"
1061
+ }
1062
+ },
1063
+ "children": [
1064
+ {
1065
+ "name": "Skin",
1066
+ "type": "AnimatedSprite2D",
1067
+ "props": {
1068
+ "sheet": "$goblin",
1069
+ "autoplay": "move",
1070
+ "scale": [0.46, 0.46],
1071
+ "anchor": [0.5, 0.348],
1072
+ "animations": {
1073
+ "idle": {
1074
+ "frames": [0, 6],
1075
+ "fps": 9,
1076
+ "loop": true
1077
+ },
1078
+ "move": {
1079
+ "frames": [7, 12],
1080
+ "fps": 12,
1081
+ "loop": true
1082
+ }
1083
+ }
1084
+ }
1085
+ },
1086
+ {
1087
+ "name": "AI",
1088
+ "type": "Node2D",
1089
+ "script": {
1090
+ "name": "GoblinSkin"
1091
+ }
1092
+ }
1093
+ ]
1094
+ },
1095
+ {
1096
+ "name": "Gob3",
1097
+ "type": "Node2D",
1098
+ "groups": ["enemy"],
1099
+ "props": {
1100
+ "position": [2520, 430]
1101
+ },
1102
+ "script": {
1103
+ "name": "Patrol",
1104
+ "props": {
1105
+ "points": [[2300, 430], [2740, 430]],
1106
+ "speed": 78,
1107
+ "mode": "pingpong"
1108
+ }
1109
+ },
1110
+ "children": [
1111
+ {
1112
+ "name": "Skin",
1113
+ "type": "AnimatedSprite2D",
1114
+ "props": {
1115
+ "sheet": "$goblin",
1116
+ "autoplay": "move",
1117
+ "scale": [0.46, 0.46],
1118
+ "anchor": [0.5, 0.348],
1119
+ "animations": {
1120
+ "idle": {
1121
+ "frames": [0, 6],
1122
+ "fps": 9,
1123
+ "loop": true
1124
+ },
1125
+ "move": {
1126
+ "frames": [7, 12],
1127
+ "fps": 12,
1128
+ "loop": true
1129
+ }
1130
+ }
1131
+ }
1132
+ },
1133
+ {
1134
+ "name": "AI",
1135
+ "type": "Node2D",
1136
+ "script": {
1137
+ "name": "GoblinSkin"
1138
+ }
1139
+ }
1140
+ ]
1141
+ },
1142
+ {
1143
+ "name": "Coins",
1144
+ "type": "Node2D",
1145
+ "props": {
1146
+ "position": [0, 0]
1147
+ },
1148
+ "children": [
1149
+ {
1150
+ "name": "Coin1",
1151
+ "type": "Area2D",
1152
+ "props": {
1153
+ "position": [300, 380],
1154
+ "collider": {
1155
+ "shape": "circle",
1156
+ "radius": 16
1157
+ }
1158
+ },
1159
+ "script": {
1160
+ "name": "Pickup",
1161
+ "props": {
1162
+ "value": 10,
1163
+ "kind": "coin"
1164
+ }
1165
+ },
1166
+ "children": [
1167
+ {
1168
+ "name": "Skin",
1169
+ "type": "Sprite2D",
1170
+ "props": {
1171
+ "texture": "$coin",
1172
+ "scale": [0.6, 0.6]
1173
+ },
1174
+ "script": {
1175
+ "name": "Oscillate",
1176
+ "props": {
1177
+ "axis": "y",
1178
+ "amplitude": 6,
1179
+ "frequency": 1.1,
1180
+ "mode": "position"
1181
+ }
1182
+ }
1183
+ }
1184
+ ]
1185
+ },
1186
+ {
1187
+ "name": "Coin2",
1188
+ "type": "Area2D",
1189
+ "props": {
1190
+ "position": [430, 350],
1191
+ "collider": {
1192
+ "shape": "circle",
1193
+ "radius": 16
1194
+ }
1195
+ },
1196
+ "script": {
1197
+ "name": "Pickup",
1198
+ "props": {
1199
+ "value": 10,
1200
+ "kind": "coin"
1201
+ }
1202
+ },
1203
+ "children": [
1204
+ {
1205
+ "name": "Skin",
1206
+ "type": "Sprite2D",
1207
+ "props": {
1208
+ "texture": "$coin",
1209
+ "scale": [0.6, 0.6]
1210
+ },
1211
+ "script": {
1212
+ "name": "Oscillate",
1213
+ "props": {
1214
+ "axis": "y",
1215
+ "amplitude": 6,
1216
+ "frequency": 1.1,
1217
+ "mode": "position"
1218
+ }
1219
+ }
1220
+ }
1221
+ ]
1222
+ },
1223
+ {
1224
+ "name": "Coin3",
1225
+ "type": "Area2D",
1226
+ "props": {
1227
+ "position": [680, 300],
1228
+ "collider": {
1229
+ "shape": "circle",
1230
+ "radius": 16
1231
+ }
1232
+ },
1233
+ "script": {
1234
+ "name": "Pickup",
1235
+ "props": {
1236
+ "value": 10,
1237
+ "kind": "coin"
1238
+ }
1239
+ },
1240
+ "children": [
1241
+ {
1242
+ "name": "Skin",
1243
+ "type": "Sprite2D",
1244
+ "props": {
1245
+ "texture": "$coin",
1246
+ "scale": [0.6, 0.6]
1247
+ },
1248
+ "script": {
1249
+ "name": "Oscillate",
1250
+ "props": {
1251
+ "axis": "y",
1252
+ "amplitude": 6,
1253
+ "frequency": 1.1,
1254
+ "mode": "position"
1255
+ }
1256
+ }
1257
+ }
1258
+ ]
1259
+ },
1260
+ {
1261
+ "name": "Coin4",
1262
+ "type": "Area2D",
1263
+ "props": {
1264
+ "position": [940, 410],
1265
+ "collider": {
1266
+ "shape": "circle",
1267
+ "radius": 16
1268
+ }
1269
+ },
1270
+ "script": {
1271
+ "name": "Pickup",
1272
+ "props": {
1273
+ "value": 10,
1274
+ "kind": "coin"
1275
+ }
1276
+ },
1277
+ "children": [
1278
+ {
1279
+ "name": "Skin",
1280
+ "type": "Sprite2D",
1281
+ "props": {
1282
+ "texture": "$coin",
1283
+ "scale": [0.6, 0.6]
1284
+ },
1285
+ "script": {
1286
+ "name": "Oscillate",
1287
+ "props": {
1288
+ "axis": "y",
1289
+ "amplitude": 6,
1290
+ "frequency": 1.1,
1291
+ "mode": "position"
1292
+ }
1293
+ }
1294
+ }
1295
+ ]
1296
+ },
1297
+ {
1298
+ "name": "Coin5",
1299
+ "type": "Area2D",
1300
+ "props": {
1301
+ "position": [1100, 410],
1302
+ "collider": {
1303
+ "shape": "circle",
1304
+ "radius": 16
1305
+ }
1306
+ },
1307
+ "script": {
1308
+ "name": "Pickup",
1309
+ "props": {
1310
+ "value": 10,
1311
+ "kind": "coin"
1312
+ }
1313
+ },
1314
+ "children": [
1315
+ {
1316
+ "name": "Skin",
1317
+ "type": "Sprite2D",
1318
+ "props": {
1319
+ "texture": "$coin",
1320
+ "scale": [0.6, 0.6]
1321
+ },
1322
+ "script": {
1323
+ "name": "Oscillate",
1324
+ "props": {
1325
+ "axis": "y",
1326
+ "amplitude": 6,
1327
+ "frequency": 1.1,
1328
+ "mode": "position"
1329
+ }
1330
+ }
1331
+ }
1332
+ ]
1333
+ },
1334
+ {
1335
+ "name": "Coin6",
1336
+ "type": "Area2D",
1337
+ "props": {
1338
+ "position": [1180, 285],
1339
+ "collider": {
1340
+ "shape": "circle",
1341
+ "radius": 16
1342
+ }
1343
+ },
1344
+ "script": {
1345
+ "name": "Pickup",
1346
+ "props": {
1347
+ "value": 10,
1348
+ "kind": "coin"
1349
+ }
1350
+ },
1351
+ "children": [
1352
+ {
1353
+ "name": "Skin",
1354
+ "type": "Sprite2D",
1355
+ "props": {
1356
+ "texture": "$coin",
1357
+ "scale": [0.6, 0.6]
1358
+ },
1359
+ "script": {
1360
+ "name": "Oscillate",
1361
+ "props": {
1362
+ "axis": "y",
1363
+ "amplitude": 6,
1364
+ "frequency": 1.1,
1365
+ "mode": "position"
1366
+ }
1367
+ }
1368
+ }
1369
+ ]
1370
+ },
1371
+ {
1372
+ "name": "Coin7",
1373
+ "type": "Area2D",
1374
+ "props": {
1375
+ "position": [1395, 360],
1376
+ "collider": {
1377
+ "shape": "circle",
1378
+ "radius": 16
1379
+ }
1380
+ },
1381
+ "script": {
1382
+ "name": "Pickup",
1383
+ "props": {
1384
+ "value": 10,
1385
+ "kind": "coin"
1386
+ }
1387
+ },
1388
+ "children": [
1389
+ {
1390
+ "name": "Skin",
1391
+ "type": "Sprite2D",
1392
+ "props": {
1393
+ "texture": "$coin",
1394
+ "scale": [0.6, 0.6]
1395
+ },
1396
+ "script": {
1397
+ "name": "Oscillate",
1398
+ "props": {
1399
+ "axis": "y",
1400
+ "amplitude": 6,
1401
+ "frequency": 1.1,
1402
+ "mode": "position"
1403
+ }
1404
+ }
1405
+ }
1406
+ ]
1407
+ },
1408
+ {
1409
+ "name": "Coin8",
1410
+ "type": "Area2D",
1411
+ "props": {
1412
+ "position": [1620, 410],
1413
+ "collider": {
1414
+ "shape": "circle",
1415
+ "radius": 16
1416
+ }
1417
+ },
1418
+ "script": {
1419
+ "name": "Pickup",
1420
+ "props": {
1421
+ "value": 10,
1422
+ "kind": "coin"
1423
+ }
1424
+ },
1425
+ "children": [
1426
+ {
1427
+ "name": "Skin",
1428
+ "type": "Sprite2D",
1429
+ "props": {
1430
+ "texture": "$coin",
1431
+ "scale": [0.6, 0.6]
1432
+ },
1433
+ "script": {
1434
+ "name": "Oscillate",
1435
+ "props": {
1436
+ "axis": "y",
1437
+ "amplitude": 6,
1438
+ "frequency": 1.1,
1439
+ "mode": "position"
1440
+ }
1441
+ }
1442
+ }
1443
+ ]
1444
+ },
1445
+ {
1446
+ "name": "Coin9",
1447
+ "type": "Area2D",
1448
+ "props": {
1449
+ "position": [1900, 410],
1450
+ "collider": {
1451
+ "shape": "circle",
1452
+ "radius": 16
1453
+ }
1454
+ },
1455
+ "script": {
1456
+ "name": "Pickup",
1457
+ "props": {
1458
+ "value": 10,
1459
+ "kind": "coin"
1460
+ }
1461
+ },
1462
+ "children": [
1463
+ {
1464
+ "name": "Skin",
1465
+ "type": "Sprite2D",
1466
+ "props": {
1467
+ "texture": "$coin",
1468
+ "scale": [0.6, 0.6]
1469
+ },
1470
+ "script": {
1471
+ "name": "Oscillate",
1472
+ "props": {
1473
+ "axis": "y",
1474
+ "amplitude": 6,
1475
+ "frequency": 1.1,
1476
+ "mode": "position"
1477
+ }
1478
+ }
1479
+ }
1480
+ ]
1481
+ },
1482
+ {
1483
+ "name": "Coin10",
1484
+ "type": "Area2D",
1485
+ "props": {
1486
+ "position": [2140, 300],
1487
+ "collider": {
1488
+ "shape": "circle",
1489
+ "radius": 16
1490
+ }
1491
+ },
1492
+ "script": {
1493
+ "name": "Pickup",
1494
+ "props": {
1495
+ "value": 10,
1496
+ "kind": "coin"
1497
+ }
1498
+ },
1499
+ "children": [
1500
+ {
1501
+ "name": "Skin",
1502
+ "type": "Sprite2D",
1503
+ "props": {
1504
+ "texture": "$coin",
1505
+ "scale": [0.6, 0.6]
1506
+ },
1507
+ "script": {
1508
+ "name": "Oscillate",
1509
+ "props": {
1510
+ "axis": "y",
1511
+ "amplitude": 6,
1512
+ "frequency": 1.1,
1513
+ "mode": "position"
1514
+ }
1515
+ }
1516
+ }
1517
+ ]
1518
+ },
1519
+ {
1520
+ "name": "Coin11",
1521
+ "type": "Area2D",
1522
+ "props": {
1523
+ "position": [2380, 285],
1524
+ "collider": {
1525
+ "shape": "circle",
1526
+ "radius": 16
1527
+ }
1528
+ },
1529
+ "script": {
1530
+ "name": "Pickup",
1531
+ "props": {
1532
+ "value": 10,
1533
+ "kind": "coin"
1534
+ }
1535
+ },
1536
+ "children": [
1537
+ {
1538
+ "name": "Skin",
1539
+ "type": "Sprite2D",
1540
+ "props": {
1541
+ "texture": "$coin",
1542
+ "scale": [0.6, 0.6]
1543
+ },
1544
+ "script": {
1545
+ "name": "Oscillate",
1546
+ "props": {
1547
+ "axis": "y",
1548
+ "amplitude": 6,
1549
+ "frequency": 1.1,
1550
+ "mode": "position"
1551
+ }
1552
+ }
1553
+ }
1554
+ ]
1555
+ },
1556
+ {
1557
+ "name": "Coin12",
1558
+ "type": "Area2D",
1559
+ "props": {
1560
+ "position": [2600, 410],
1561
+ "collider": {
1562
+ "shape": "circle",
1563
+ "radius": 16
1564
+ }
1565
+ },
1566
+ "script": {
1567
+ "name": "Pickup",
1568
+ "props": {
1569
+ "value": 10,
1570
+ "kind": "coin"
1571
+ }
1572
+ },
1573
+ "children": [
1574
+ {
1575
+ "name": "Skin",
1576
+ "type": "Sprite2D",
1577
+ "props": {
1578
+ "texture": "$coin",
1579
+ "scale": [0.6, 0.6]
1580
+ },
1581
+ "script": {
1582
+ "name": "Oscillate",
1583
+ "props": {
1584
+ "axis": "y",
1585
+ "amplitude": 6,
1586
+ "frequency": 1.1,
1587
+ "mode": "position"
1588
+ }
1589
+ }
1590
+ }
1591
+ ]
1592
+ }
1593
+ ]
1594
+ },
1595
+ {
1596
+ "name": "Gem1",
1597
+ "type": "Area2D",
1598
+ "props": {
1599
+ "position": [1760, 255],
1600
+ "collider": {
1601
+ "shape": "circle",
1602
+ "radius": 20
1603
+ }
1604
+ },
1605
+ "script": {
1606
+ "name": "Pickup",
1607
+ "props": {
1608
+ "value": 50,
1609
+ "kind": "gem"
1610
+ }
1611
+ },
1612
+ "children": [
1613
+ {
1614
+ "name": "Skin",
1615
+ "type": "Sprite2D",
1616
+ "props": {
1617
+ "texture": "$gem",
1618
+ "scale": [0.7, 0.7]
1619
+ },
1620
+ "script": {
1621
+ "name": "Oscillate",
1622
+ "props": {
1623
+ "axis": "y",
1624
+ "amplitude": 8,
1625
+ "frequency": 0.9,
1626
+ "mode": "position"
1627
+ }
1628
+ }
1629
+ }
1630
+ ]
1631
+ },
1632
+ {
1633
+ "name": "Gem2",
1634
+ "type": "Area2D",
1635
+ "props": {
1636
+ "position": [2140, 230],
1637
+ "collider": {
1638
+ "shape": "circle",
1639
+ "radius": 20
1640
+ }
1641
+ },
1642
+ "script": {
1643
+ "name": "Pickup",
1644
+ "props": {
1645
+ "value": 50,
1646
+ "kind": "gem"
1647
+ }
1648
+ },
1649
+ "children": [
1650
+ {
1651
+ "name": "Skin",
1652
+ "type": "Sprite2D",
1653
+ "props": {
1654
+ "texture": "$gem",
1655
+ "scale": [0.7, 0.7]
1656
+ },
1657
+ "script": {
1658
+ "name": "Oscillate",
1659
+ "props": {
1660
+ "axis": "y",
1661
+ "amplitude": 8,
1662
+ "frequency": 0.9,
1663
+ "mode": "position"
1664
+ }
1665
+ }
1666
+ }
1667
+ ]
1668
+ },
1669
+ {
1670
+ "name": "Player",
1671
+ "type": "CharacterBody2D",
1672
+ "groups": ["player"],
1673
+ "props": {
1674
+ "position": [120, 360],
1675
+ "collider": {
1676
+ "shape": "capsule",
1677
+ "radius": 18,
1678
+ "height": 30
1679
+ }
1680
+ },
1681
+ "script": {
1682
+ "name": "PlayerController"
1683
+ },
1684
+ "children": [
1685
+ {
1686
+ "name": "Skin",
1687
+ "type": "AnimatedSprite2D",
1688
+ "props": {
1689
+ "sheet": "$knight",
1690
+ "autoplay": "idle",
1691
+ "scale": [0.72, 0.72],
1692
+ "anchor": [0.5, 0.464],
1693
+ "animations": {
1694
+ "idle": {
1695
+ "frames": [0, 5],
1696
+ "fps": 10,
1697
+ "loop": true
1698
+ },
1699
+ "run": {
1700
+ "frames": [6, 11],
1701
+ "fps": 14,
1702
+ "loop": true
1703
+ },
1704
+ "jump": {
1705
+ "frames": [9, 9],
1706
+ "fps": 1,
1707
+ "loop": false
1708
+ }
1709
+ }
1710
+ }
1711
+ },
1712
+ {
1713
+ "name": "Feet",
1714
+ "type": "Area2D",
1715
+ "props": {
1716
+ "position": [0, 30],
1717
+ "collider": {
1718
+ "shape": "rect",
1719
+ "size": [30, 14]
1720
+ }
1721
+ }
1722
+ }
1723
+ ]
1724
+ },
1725
+ {
1726
+ "name": "Camera",
1727
+ "type": "Camera2D",
1728
+ "props": {
1729
+ "current": true
1730
+ },
1731
+ "script": {
1732
+ "name": "FollowCam",
1733
+ "props": {
1734
+ "target": "/root/Player",
1735
+ "offset": [60, -28],
1736
+ "lookahead": 90,
1737
+ "limits": [480, 210, 2320, 348]
1738
+ }
1739
+ }
1740
+ },
1741
+ {
1742
+ "name": "SfxJump",
1743
+ "type": "AudioPlayer",
1744
+ "props": {
1745
+ "preset": "jump",
1746
+ "bus": "sfx",
1747
+ "volume": 0.4
1748
+ }
1749
+ },
1750
+ {
1751
+ "name": "SfxCoin",
1752
+ "type": "AudioPlayer",
1753
+ "props": {
1754
+ "preset": "coin",
1755
+ "bus": "sfx",
1756
+ "volume": 0.5
1757
+ }
1758
+ },
1759
+ {
1760
+ "name": "SfxStomp",
1761
+ "type": "AudioPlayer",
1762
+ "props": {
1763
+ "preset": "hit",
1764
+ "bus": "sfx",
1765
+ "volume": 0.55
1766
+ }
1767
+ },
1768
+ {
1769
+ "name": "SfxHurt",
1770
+ "type": "AudioPlayer",
1771
+ "props": {
1772
+ "preset": "hurt",
1773
+ "bus": "sfx",
1774
+ "volume": 0.6
1775
+ }
1776
+ },
1777
+ {
1778
+ "name": "SfxCheckpoint",
1779
+ "type": "AudioPlayer",
1780
+ "props": {
1781
+ "preset": "powerup",
1782
+ "bus": "sfx",
1783
+ "volume": 0.6
1784
+ }
1785
+ },
1786
+ {
1787
+ "name": "SfxWin",
1788
+ "type": "AudioPlayer",
1789
+ "props": {
1790
+ "preset": "win",
1791
+ "bus": "sfx",
1792
+ "volume": 0.8
1793
+ }
1794
+ },
1795
+ {
1796
+ "name": "SfxLose",
1797
+ "type": "AudioPlayer",
1798
+ "props": {
1799
+ "preset": "lose",
1800
+ "bus": "sfx",
1801
+ "volume": 0.8
1802
+ }
1803
+ },
1804
+ {
1805
+ "name": "HUD",
1806
+ "type": "UILayer",
1807
+ "props": {
1808
+ "anchor": "top-left"
1809
+ },
1810
+ "script": {
1811
+ "name": "HudUpdater"
1812
+ },
1813
+ "children": [
1814
+ {
1815
+ "name": "CoinLabel",
1816
+ "type": "Label",
1817
+ "props": {
1818
+ "position": [20, 30],
1819
+ "text": "\u25c6 0",
1820
+ "fontSize": 26,
1821
+ "color": "#ffd166"
1822
+ }
1823
+ },
1824
+ {
1825
+ "name": "HeartLabel",
1826
+ "type": "Label",
1827
+ "props": {
1828
+ "position": [20, 64],
1829
+ "text": "\u2665\u2665\u2665",
1830
+ "fontSize": 26,
1831
+ "color": "#ff6b81"
1832
+ }
1833
+ },
1834
+ {
1835
+ "name": "LivesLabel",
1836
+ "type": "Label",
1837
+ "props": {
1838
+ "position": [120, 64],
1839
+ "text": "x 3",
1840
+ "fontSize": 22,
1841
+ "color": "#f4f4f4"
1842
+ }
1843
+ },
1844
+ {
1845
+ "name": "Hint",
1846
+ "type": "Label",
1847
+ "props": {
1848
+ "position": [20, 100],
1849
+ "text": "A/D run \u00b7 Space jump (double-jump!) \u00b7 stomp goblins \u00b7 reach the gold flag",
1850
+ "fontSize": 15,
1851
+ "color": "#1d2a44"
1852
+ }
1853
+ }
1854
+ ]
1855
+ },
1856
+ {
1857
+ "name": "BannerLayer",
1858
+ "type": "UILayer",
1859
+ "props": {
1860
+ "anchor": "center"
1861
+ },
1862
+ "children": [
1863
+ {
1864
+ "name": "Banner",
1865
+ "type": "Label",
1866
+ "props": {
1867
+ "position": [0, 0],
1868
+ "text": "",
1869
+ "fontSize": 64,
1870
+ "color": "#ffffff",
1871
+ "align": "center"
1872
+ }
1873
+ }
1874
+ ]
1875
+ }
1876
+ ],
1877
+ "uid": "n_d9t51gs0vhpnp2jj"
1878
+ },
1879
+ "connections": [
1880
+ {
1881
+ "signal": "collected",
1882
+ "from": "Coins/Coin1",
1883
+ "to": "/root",
1884
+ "handler": "addScore"
1885
+ },
1886
+ {
1887
+ "signal": "collected",
1888
+ "from": "Coins/Coin2",
1889
+ "to": "/root",
1890
+ "handler": "addScore"
1891
+ },
1892
+ {
1893
+ "signal": "collected",
1894
+ "from": "Coins/Coin3",
1895
+ "to": "/root",
1896
+ "handler": "addScore"
1897
+ },
1898
+ {
1899
+ "signal": "collected",
1900
+ "from": "Coins/Coin4",
1901
+ "to": "/root",
1902
+ "handler": "addScore"
1903
+ },
1904
+ {
1905
+ "signal": "collected",
1906
+ "from": "Coins/Coin5",
1907
+ "to": "/root",
1908
+ "handler": "addScore"
1909
+ },
1910
+ {
1911
+ "signal": "collected",
1912
+ "from": "Coins/Coin6",
1913
+ "to": "/root",
1914
+ "handler": "addScore"
1915
+ },
1916
+ {
1917
+ "signal": "collected",
1918
+ "from": "Coins/Coin7",
1919
+ "to": "/root",
1920
+ "handler": "addScore"
1921
+ },
1922
+ {
1923
+ "signal": "collected",
1924
+ "from": "Coins/Coin8",
1925
+ "to": "/root",
1926
+ "handler": "addScore"
1927
+ },
1928
+ {
1929
+ "signal": "collected",
1930
+ "from": "Coins/Coin9",
1931
+ "to": "/root",
1932
+ "handler": "addScore"
1933
+ },
1934
+ {
1935
+ "signal": "collected",
1936
+ "from": "Coins/Coin10",
1937
+ "to": "/root",
1938
+ "handler": "addScore"
1939
+ },
1940
+ {
1941
+ "signal": "collected",
1942
+ "from": "Coins/Coin11",
1943
+ "to": "/root",
1944
+ "handler": "addScore"
1945
+ },
1946
+ {
1947
+ "signal": "collected",
1948
+ "from": "Coins/Coin12",
1949
+ "to": "/root",
1950
+ "handler": "addScore"
1951
+ },
1952
+ {
1953
+ "signal": "collected",
1954
+ "from": "Gem1",
1955
+ "to": "/root",
1956
+ "handler": "addScore"
1957
+ },
1958
+ {
1959
+ "signal": "collected",
1960
+ "from": "Gem2",
1961
+ "to": "/root",
1962
+ "handler": "addScore"
1963
+ },
1964
+ {
1965
+ "signal": "collected",
1966
+ "from": "Coins/Coin1",
1967
+ "to": "SfxCoin",
1968
+ "handler": "play"
1969
+ },
1970
+ {
1971
+ "signal": "collected",
1972
+ "from": "Coins/Coin2",
1973
+ "to": "SfxCoin",
1974
+ "handler": "play"
1975
+ },
1976
+ {
1977
+ "signal": "collected",
1978
+ "from": "Coins/Coin3",
1979
+ "to": "SfxCoin",
1980
+ "handler": "play"
1981
+ },
1982
+ {
1983
+ "signal": "collected",
1984
+ "from": "Coins/Coin4",
1985
+ "to": "SfxCoin",
1986
+ "handler": "play"
1987
+ },
1988
+ {
1989
+ "signal": "collected",
1990
+ "from": "Coins/Coin5",
1991
+ "to": "SfxCoin",
1992
+ "handler": "play"
1993
+ },
1994
+ {
1995
+ "signal": "collected",
1996
+ "from": "Coins/Coin6",
1997
+ "to": "SfxCoin",
1998
+ "handler": "play"
1999
+ },
2000
+ {
2001
+ "signal": "collected",
2002
+ "from": "Coins/Coin7",
2003
+ "to": "SfxCoin",
2004
+ "handler": "play"
2005
+ },
2006
+ {
2007
+ "signal": "collected",
2008
+ "from": "Coins/Coin8",
2009
+ "to": "SfxCoin",
2010
+ "handler": "play"
2011
+ },
2012
+ {
2013
+ "signal": "collected",
2014
+ "from": "Coins/Coin9",
2015
+ "to": "SfxCoin",
2016
+ "handler": "play"
2017
+ },
2018
+ {
2019
+ "signal": "collected",
2020
+ "from": "Coins/Coin10",
2021
+ "to": "SfxCoin",
2022
+ "handler": "play"
2023
+ },
2024
+ {
2025
+ "signal": "collected",
2026
+ "from": "Coins/Coin11",
2027
+ "to": "SfxCoin",
2028
+ "handler": "play"
2029
+ },
2030
+ {
2031
+ "signal": "collected",
2032
+ "from": "Coins/Coin12",
2033
+ "to": "SfxCoin",
2034
+ "handler": "play"
2035
+ },
2036
+ {
2037
+ "signal": "collected",
2038
+ "from": "Gem1",
2039
+ "to": "SfxCheckpoint",
2040
+ "handler": "play"
2041
+ },
2042
+ {
2043
+ "signal": "collected",
2044
+ "from": "Gem2",
2045
+ "to": "SfxCheckpoint",
2046
+ "handler": "play"
2047
+ },
2048
+ {
2049
+ "signal": "won",
2050
+ "from": "/root",
2051
+ "to": "SfxWin",
2052
+ "handler": "play"
2053
+ },
2054
+ {
2055
+ "signal": "lost",
2056
+ "from": "/root",
2057
+ "to": "SfxLose",
2058
+ "handler": "play"
2059
+ }
2060
+ ]
2061
+ }