incanto 0.12.0 → 0.13.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 (82) hide show
  1. package/README.md +22 -0
  2. package/bin/incanto-new.mjs +87 -0
  3. package/dist/2d.d.ts +2 -2
  4. package/dist/2d.js +3 -3
  5. package/dist/3d.d.ts +194 -71
  6. package/dist/3d.js +74 -4
  7. package/dist/{behavior-Bod1AyJS.d.ts → behavior-CPibUfnH.d.ts} +4 -2
  8. package/dist/{create-game-C_xf4gm9.js → create-game-Ct86zczq.js} +5 -5
  9. package/dist/{create-game-B2fewJUy.js → create-game-J6g4QInv.js} +5 -5
  10. package/dist/debug.d.ts +1 -1
  11. package/dist/{duplicate-BEvGBtb_.js → duplicate-BINwP0WG.js} +1 -1
  12. package/dist/{gameplay-Dn3yidJw.js → gameplay-sSqrUcnz.js} +75 -3
  13. package/dist/gameplay.d.ts +37 -2
  14. package/dist/gameplay.js +2 -2
  15. package/dist/index.d.ts +3 -3
  16. package/dist/index.js +4 -4
  17. package/dist/{loader-B4OEXDZ8.js → loader-BZqOKfI2.js} +3 -1
  18. package/dist/{loader-BcUDfNHn.d.ts → loader-DILt9PGC.d.ts} +1 -1
  19. package/dist/net.d.ts +1 -1
  20. package/dist/net.js +3 -3
  21. package/dist/{pathfinding-BSiXjd6W.d.ts → pathfinding-RWYkNKx9.d.ts} +1 -1
  22. package/dist/{physics-2d-B6D864oZ.js → physics-2d-BiIdl51r.js} +2 -2
  23. package/dist/{physics-3d-RLNaxRyw.js → physics-3d-DhaAaKJo.js} +2 -2
  24. package/dist/react.d.ts +1 -1
  25. package/dist/react.js +1 -1
  26. package/dist/{register-Cwc-yCYx.js → register-BFFE1Mh1.js} +2 -2
  27. package/dist/{register-ysLR3WQS.js → register-BFw4c83z.js} +508 -123
  28. package/dist/{register-BD6zgrv_.js → register-Djwckzgx.js} +2 -2
  29. package/dist/{register-DJZXxwAn.js → register-nObreUQR.js} +1 -1
  30. package/dist/test.d.ts +2 -2
  31. package/dist/test.js +10 -10
  32. package/editor/assets/{agent8-D_4QY8Aq.js → agent8-BF8Jfbkl.js} +1 -1
  33. package/editor/assets/{index-s0DZuroe.js → index-DSq0gdhE.js} +74 -74
  34. package/editor/index.html +1 -1
  35. package/package.json +4 -2
  36. package/schemas/scene.schema.json +263 -0
  37. package/skills/incanto-3d-character.md +35 -0
  38. package/skills/incanto-building-3d-games.md +48 -0
  39. package/skills/incanto-gameplay-behaviors.md +23 -1
  40. package/skills/incanto-node-reference.md +51 -0
  41. package/templates-app/beacon-isle-3d/PROJECT/Context.md +44 -0
  42. package/templates-app/beacon-isle-3d/PROJECT/Requirements.md +16 -0
  43. package/templates-app/beacon-isle-3d/PROJECT/Status.md +38 -0
  44. package/templates-app/beacon-isle-3d/PROJECT/Structure.md +24 -0
  45. package/templates-app/beacon-isle-3d/docs/project-3d-rules.md +38 -0
  46. package/templates-app/beacon-isle-3d/generate-world.ts +814 -0
  47. package/templates-app/beacon-isle-3d/index.html +68 -0
  48. package/templates-app/beacon-isle-3d/package.json +26 -0
  49. package/templates-app/beacon-isle-3d/src/behaviors.ts +570 -0
  50. package/templates-app/beacon-isle-3d/src/game.scene.json +2992 -0
  51. package/templates-app/beacon-isle-3d/src/main.ts +33 -0
  52. package/templates-app/beacon-isle-3d/tsconfig.json +13 -0
  53. package/templates-app/beacon-isle-3d/verify.ts +285 -0
  54. package/templates-app/beacon-isle-3d/vite.config.ts +5 -0
  55. package/templates-app/tps-3d/PROJECT/Context.md +49 -0
  56. package/templates-app/tps-3d/PROJECT/Requirements.md +38 -0
  57. package/templates-app/tps-3d/PROJECT/Status.md +41 -0
  58. package/templates-app/tps-3d/PROJECT/Structure.md +44 -0
  59. package/templates-app/tps-3d/docs/project-3d-rules.md +38 -0
  60. package/templates-app/tps-3d/index.html +244 -0
  61. package/templates-app/tps-3d/package.json +25 -0
  62. package/templates-app/tps-3d/src/behaviors.ts +405 -0
  63. package/templates-app/tps-3d/src/game.scene.json +677 -0
  64. package/templates-app/tps-3d/src/main.ts +64 -0
  65. package/templates-app/tps-3d/tsconfig.json +13 -0
  66. package/templates-app/tps-3d/verify.ts +167 -0
  67. package/templates-app/tps-3d/vite.config.ts +5 -0
  68. package/templates-app/village-quest-3d/PROJECT/Context.md +39 -0
  69. package/templates-app/village-quest-3d/PROJECT/Requirements.md +36 -0
  70. package/templates-app/village-quest-3d/PROJECT/Status.md +26 -0
  71. package/templates-app/village-quest-3d/PROJECT/Structure.md +30 -0
  72. package/templates-app/village-quest-3d/docs/project-3d-rules.md +38 -0
  73. package/templates-app/village-quest-3d/index.html +68 -0
  74. package/templates-app/village-quest-3d/package.json +25 -0
  75. package/templates-app/village-quest-3d/src/behaviors.ts +529 -0
  76. package/templates-app/village-quest-3d/src/grove.scene.json +826 -0
  77. package/templates-app/village-quest-3d/src/main.ts +35 -0
  78. package/templates-app/village-quest-3d/src/quest.ts +18 -0
  79. package/templates-app/village-quest-3d/src/village.scene.json +680 -0
  80. package/templates-app/village-quest-3d/tsconfig.json +13 -0
  81. package/templates-app/village-quest-3d/verify.ts +254 -0
  82. package/templates-app/village-quest-3d/vite.config.ts +5 -0
@@ -0,0 +1,677 @@
1
+ {
2
+ "format": 1,
3
+ "type": "scene",
4
+ "dimension": "3d",
5
+ "name": "Vanguard",
6
+ "environment": {
7
+ "sky": {
8
+ "type": "atmosphere",
9
+ "elevationDeg": 28,
10
+ "azimuthDeg": 135,
11
+ "turbidity": 3.2,
12
+ "rayleigh": 2
13
+ },
14
+ "fog": {
15
+ "near": 40,
16
+ "far": 180
17
+ },
18
+ "shadows": {
19
+ "mapSize": 2048
20
+ },
21
+ "exposure": 1.05,
22
+ "ambient": {
23
+ "color": "#bcd0f0",
24
+ "intensity": 0.28
25
+ },
26
+ "iblIntensity": 0.8,
27
+ "background": "#243047"
28
+ },
29
+ "physics": {
30
+ "gravity": [0, -9.81, 0]
31
+ },
32
+ "input": {
33
+ "move": {
34
+ "type": "vector2",
35
+ "keys": {
36
+ "up": ["KeyW", "ArrowUp"],
37
+ "down": ["KeyS", "ArrowDown"],
38
+ "left": ["KeyA", "ArrowLeft"],
39
+ "right": ["KeyD", "ArrowRight"]
40
+ }
41
+ },
42
+ "jump": {
43
+ "type": "button",
44
+ "keys": ["Space"]
45
+ },
46
+ "sprint": {
47
+ "type": "button",
48
+ "keys": ["ShiftLeft", "ShiftRight"]
49
+ },
50
+ "fire": {
51
+ "type": "button",
52
+ "keys": ["Mouse0", "KeyF"]
53
+ },
54
+ "reload": {
55
+ "type": "button",
56
+ "keys": ["KeyR"]
57
+ }
58
+ },
59
+ "assets": {
60
+ "characters/base": {
61
+ "type": "model",
62
+ "url": "https://agent8-games.verse8.io/assets/3d/characters/realistic style/base-model.glb"
63
+ },
64
+ "anims/idle": {
65
+ "type": "animation",
66
+ "url": "https://agent8-games.verse8.io/assets/3d/animations/mixamorig/idle-00.glb"
67
+ },
68
+ "anims/walk": {
69
+ "type": "animation",
70
+ "url": "https://agent8-games.verse8.io/assets/3d/animations/mixamorig/walk.glb"
71
+ },
72
+ "anims/run": {
73
+ "type": "animation",
74
+ "url": "https://agent8-games.verse8.io/assets/3d/animations/mixamorig/run-medium.glb"
75
+ },
76
+ "anims/runFast": {
77
+ "type": "animation",
78
+ "url": "https://agent8-games.verse8.io/assets/3d/animations/mixamorig/run-fast.glb"
79
+ },
80
+ "anims/jump": {
81
+ "type": "animation",
82
+ "url": "https://agent8-games.verse8.io/assets/3d/animations/mixamorig/jump.glb"
83
+ }
84
+ },
85
+ "root": {
86
+ "name": "Game",
87
+ "type": "Node",
88
+ "script": {
89
+ "name": "ScoreKeeper",
90
+ "props": {
91
+ "lives": 1
92
+ }
93
+ },
94
+ "children": [
95
+ {
96
+ "name": "Arena",
97
+ "type": "Node3D",
98
+ "children": [
99
+ {
100
+ "name": "Floor",
101
+ "type": "StaticBody3D",
102
+ "props": {
103
+ "collider": {
104
+ "shape": "box",
105
+ "size": [48, 0.1, 48]
106
+ },
107
+ "position": [0, -0.05, 0]
108
+ },
109
+ "children": [
110
+ {
111
+ "name": "Skin",
112
+ "type": "MeshInstance3D",
113
+ "props": {
114
+ "mesh": "box",
115
+ "size": [48, 0.1, 48],
116
+ "material": {
117
+ "color": "#3a4253",
118
+ "roughness": 1
119
+ },
120
+ "receiveShadow": true
121
+ }
122
+ }
123
+ ]
124
+ },
125
+ {
126
+ "name": "Wall1",
127
+ "type": "StaticBody3D",
128
+ "props": {
129
+ "collider": {
130
+ "shape": "box",
131
+ "size": [49, 3, 0.5]
132
+ },
133
+ "position": [0, 1.5, -24.25]
134
+ },
135
+ "children": [
136
+ {
137
+ "name": "Skin",
138
+ "type": "MeshInstance3D",
139
+ "props": {
140
+ "mesh": "box",
141
+ "size": [49, 3, 0.5],
142
+ "material": {
143
+ "color": "#4a5468",
144
+ "roughness": 0.9
145
+ },
146
+ "receiveShadow": true
147
+ }
148
+ }
149
+ ]
150
+ },
151
+ {
152
+ "name": "Wall2",
153
+ "type": "StaticBody3D",
154
+ "props": {
155
+ "collider": {
156
+ "shape": "box",
157
+ "size": [49, 3, 0.5]
158
+ },
159
+ "position": [0, 1.5, 24.25]
160
+ },
161
+ "children": [
162
+ {
163
+ "name": "Skin",
164
+ "type": "MeshInstance3D",
165
+ "props": {
166
+ "mesh": "box",
167
+ "size": [49, 3, 0.5],
168
+ "material": {
169
+ "color": "#4a5468",
170
+ "roughness": 0.9
171
+ },
172
+ "receiveShadow": true
173
+ }
174
+ }
175
+ ]
176
+ },
177
+ {
178
+ "name": "Wall3",
179
+ "type": "StaticBody3D",
180
+ "props": {
181
+ "collider": {
182
+ "shape": "box",
183
+ "size": [0.5, 3, 48]
184
+ },
185
+ "position": [-24.25, 1.5, 0]
186
+ },
187
+ "children": [
188
+ {
189
+ "name": "Skin",
190
+ "type": "MeshInstance3D",
191
+ "props": {
192
+ "mesh": "box",
193
+ "size": [0.5, 3, 48],
194
+ "material": {
195
+ "color": "#4a5468",
196
+ "roughness": 0.9
197
+ },
198
+ "receiveShadow": true
199
+ }
200
+ }
201
+ ]
202
+ },
203
+ {
204
+ "name": "Wall4",
205
+ "type": "StaticBody3D",
206
+ "props": {
207
+ "collider": {
208
+ "shape": "box",
209
+ "size": [0.5, 3, 48]
210
+ },
211
+ "position": [24.25, 1.5, 0]
212
+ },
213
+ "children": [
214
+ {
215
+ "name": "Skin",
216
+ "type": "MeshInstance3D",
217
+ "props": {
218
+ "mesh": "box",
219
+ "size": [0.5, 3, 48],
220
+ "material": {
221
+ "color": "#4a5468",
222
+ "roughness": 0.9
223
+ },
224
+ "receiveShadow": true
225
+ }
226
+ }
227
+ ]
228
+ },
229
+ {
230
+ "name": "Cover1",
231
+ "type": "StaticBody3D",
232
+ "props": {
233
+ "collider": {
234
+ "shape": "box",
235
+ "size": [2, 1.2, 2]
236
+ },
237
+ "position": [-8, 0.6, -8]
238
+ },
239
+ "children": [
240
+ {
241
+ "name": "Skin",
242
+ "type": "MeshInstance3D",
243
+ "props": {
244
+ "mesh": "box",
245
+ "size": [2, 1.2, 2],
246
+ "material": {
247
+ "color": "#5b6678",
248
+ "roughness": 0.85,
249
+ "metalness": 0.1
250
+ },
251
+ "castShadow": true,
252
+ "receiveShadow": true
253
+ }
254
+ }
255
+ ]
256
+ },
257
+ {
258
+ "name": "Cover2",
259
+ "type": "StaticBody3D",
260
+ "props": {
261
+ "collider": {
262
+ "shape": "box",
263
+ "size": [2, 1.2, 2]
264
+ },
265
+ "position": [8, 0.6, -8]
266
+ },
267
+ "children": [
268
+ {
269
+ "name": "Skin",
270
+ "type": "MeshInstance3D",
271
+ "props": {
272
+ "mesh": "box",
273
+ "size": [2, 1.2, 2],
274
+ "material": {
275
+ "color": "#5b6678",
276
+ "roughness": 0.85,
277
+ "metalness": 0.1
278
+ },
279
+ "castShadow": true,
280
+ "receiveShadow": true
281
+ }
282
+ }
283
+ ]
284
+ },
285
+ {
286
+ "name": "Pillar1",
287
+ "type": "StaticBody3D",
288
+ "props": {
289
+ "collider": {
290
+ "shape": "box",
291
+ "size": [1.1, 4, 1.1]
292
+ },
293
+ "position": [-14, 2, 6]
294
+ },
295
+ "children": [
296
+ {
297
+ "name": "Skin",
298
+ "type": "MeshInstance3D",
299
+ "props": {
300
+ "mesh": "box",
301
+ "size": [1.1, 4, 1.1],
302
+ "material": {
303
+ "color": "#454f61",
304
+ "roughness": 0.95
305
+ },
306
+ "castShadow": true
307
+ }
308
+ }
309
+ ]
310
+ },
311
+ {
312
+ "name": "Pillar2",
313
+ "type": "StaticBody3D",
314
+ "props": {
315
+ "collider": {
316
+ "shape": "box",
317
+ "size": [1.1, 4, 1.1]
318
+ },
319
+ "position": [14, 2, 6]
320
+ },
321
+ "children": [
322
+ {
323
+ "name": "Skin",
324
+ "type": "MeshInstance3D",
325
+ "props": {
326
+ "mesh": "box",
327
+ "size": [1.1, 4, 1.1],
328
+ "material": {
329
+ "color": "#454f61",
330
+ "roughness": 0.95
331
+ },
332
+ "castShadow": true
333
+ }
334
+ }
335
+ ]
336
+ },
337
+ {
338
+ "name": "Ramp",
339
+ "type": "StaticBody3D",
340
+ "props": {
341
+ "collider": {
342
+ "shape": "box",
343
+ "size": [5, 0.6, 3]
344
+ },
345
+ "position": [0, 0.3, -14]
346
+ },
347
+ "children": [
348
+ {
349
+ "name": "Skin",
350
+ "type": "MeshInstance3D",
351
+ "props": {
352
+ "mesh": "box",
353
+ "size": [5, 0.6, 3],
354
+ "material": {
355
+ "color": "#5b6678",
356
+ "roughness": 0.85
357
+ },
358
+ "castShadow": true,
359
+ "receiveShadow": true
360
+ }
361
+ }
362
+ ]
363
+ },
364
+ {
365
+ "name": "Sun",
366
+ "type": "DirectionalLight3D",
367
+ "props": {
368
+ "position": [38, 70, 28],
369
+ "intensity": 2,
370
+ "castShadow": true,
371
+ "shadowArea": 58,
372
+ "shadowMapSize": 2048
373
+ }
374
+ },
375
+ {
376
+ "name": "FillLight",
377
+ "type": "DirectionalLight3D",
378
+ "props": {
379
+ "position": [-38, 36, -28],
380
+ "intensity": 0.4,
381
+ "color": "#b9d4ff"
382
+ }
383
+ }
384
+ ]
385
+ },
386
+ {
387
+ "name": "Player",
388
+ "type": "RigidBody3D",
389
+ "groups": ["player"],
390
+ "props": {
391
+ "position": [0, 1.4, 18],
392
+ "fixedRotation": true,
393
+ "friction": 0,
394
+ "collider": {
395
+ "shape": "capsule",
396
+ "radius": 0.34,
397
+ "height": 1
398
+ }
399
+ },
400
+ "script": {
401
+ "name": "Health",
402
+ "props": {
403
+ "max": 100,
404
+ "invulnerableFor": 0.6
405
+ }
406
+ },
407
+ "children": [
408
+ {
409
+ "name": "Controller",
410
+ "type": "CharacterController3D",
411
+ "props": {
412
+ "view": "free",
413
+ "camDistance": 4.2,
414
+ "eyeHeight": 1.1,
415
+ "maxSpeed": 4.2,
416
+ "sprintMultiplier": 1.7,
417
+ "pitchMin": -0.5,
418
+ "pitchMax": 1.1
419
+ },
420
+ "script": {
421
+ "name": "Shoot"
422
+ }
423
+ },
424
+ {
425
+ "name": "Skin",
426
+ "type": "ModelInstance3D",
427
+ "props": {
428
+ "model": "$characters/base",
429
+ "targetHeight": 1.7,
430
+ "animation": "$anims/idle",
431
+ "castShadow": true,
432
+ "position": [0, -0.85, 0]
433
+ }
434
+ },
435
+ {
436
+ "name": "Muzzle",
437
+ "type": "Node3D",
438
+ "props": {
439
+ "position": [0, 0.4, 0.4]
440
+ },
441
+ "children": [
442
+ {
443
+ "name": "ShotSfx",
444
+ "type": "AudioPlayer",
445
+ "props": {
446
+ "preset": "shoot",
447
+ "volume": 0.5,
448
+ "spatial": true,
449
+ "refDistance": 3,
450
+ "maxDistance": 50
451
+ }
452
+ },
453
+ {
454
+ "name": "KillSfx",
455
+ "type": "AudioPlayer",
456
+ "props": {
457
+ "preset": "explosion",
458
+ "volume": 0.6,
459
+ "spatial": true,
460
+ "refDistance": 4,
461
+ "maxDistance": 60
462
+ }
463
+ },
464
+ {
465
+ "name": "EmptySfx",
466
+ "type": "AudioPlayer",
467
+ "props": {
468
+ "preset": "blip",
469
+ "volume": 0.4,
470
+ "pitch": 0.7
471
+ }
472
+ },
473
+ {
474
+ "name": "Flash",
475
+ "type": "OmniLight3D",
476
+ "props": {
477
+ "color": "#ffd27f",
478
+ "intensity": 0,
479
+ "range": 7
480
+ }
481
+ }
482
+ ]
483
+ }
484
+ ]
485
+ },
486
+ {
487
+ "name": "Camera",
488
+ "type": "Camera3D",
489
+ "props": {
490
+ "position": [0, 2.6, 23],
491
+ "fov": 70,
492
+ "current": true,
493
+ "far": 400
494
+ }
495
+ },
496
+ {
497
+ "name": "HurtSfx",
498
+ "type": "AudioPlayer",
499
+ "props": {
500
+ "preset": "hurt",
501
+ "volume": 0.6
502
+ }
503
+ },
504
+ {
505
+ "name": "Spawner",
506
+ "type": "Node3D",
507
+ "props": {
508
+ "position": [0, 0, 0]
509
+ },
510
+ "script": {
511
+ "name": "WaveSpawner",
512
+ "props": {
513
+ "waves": [
514
+ {
515
+ "prefab": "EnemyTemplate",
516
+ "count": 4,
517
+ "interval": 1.1,
518
+ "delayBefore": 2
519
+ },
520
+ {
521
+ "prefab": "EnemyTemplate",
522
+ "count": 6,
523
+ "interval": 0.9,
524
+ "delayBefore": 3
525
+ },
526
+ {
527
+ "prefab": "EnemyTemplate",
528
+ "count": 8,
529
+ "interval": 0.7,
530
+ "delayBefore": 3
531
+ }
532
+ ]
533
+ }
534
+ },
535
+ "children": [
536
+ {
537
+ "name": "EnemyTemplate",
538
+ "type": "CharacterBody3D",
539
+ "groups": ["enemy"],
540
+ "props": {
541
+ "position": [0, 0.95, -20],
542
+ "visible": false,
543
+ "collider": {
544
+ "shape": "capsule",
545
+ "radius": 0.4,
546
+ "height": 1.1
547
+ }
548
+ },
549
+ "script": {
550
+ "name": "Health",
551
+ "props": {
552
+ "max": 30,
553
+ "freeOnDeath": true
554
+ }
555
+ },
556
+ "children": [
557
+ {
558
+ "name": "Skin",
559
+ "type": "MeshInstance3D",
560
+ "props": {
561
+ "mesh": "capsule",
562
+ "size": [0.4, 1.1, 0.4],
563
+ "material": {
564
+ "color": "#c0392b",
565
+ "roughness": 0.7,
566
+ "emissive": "#511",
567
+ "emissiveIntensity": 0.4
568
+ },
569
+ "castShadow": true
570
+ }
571
+ },
572
+ {
573
+ "name": "Eye",
574
+ "type": "MeshInstance3D",
575
+ "props": {
576
+ "mesh": "sphere",
577
+ "size": [0.12, 0.12, 0.12],
578
+ "position": [0, 0.55, 0.32],
579
+ "material": {
580
+ "color": "#ffec5c",
581
+ "emissive": "#ffd000",
582
+ "emissiveIntensity": 2
583
+ }
584
+ }
585
+ },
586
+ {
587
+ "name": "AI",
588
+ "type": "Node3D",
589
+ "script": {
590
+ "name": "Chase",
591
+ "props": {
592
+ "target": "/root/Player",
593
+ "speed": 2.6,
594
+ "stopRange": 1.8,
595
+ "moveParent": true
596
+ }
597
+ }
598
+ },
599
+ {
600
+ "name": "Hit",
601
+ "type": "Area3D",
602
+ "props": {
603
+ "collider": {
604
+ "shape": "sphere",
605
+ "radius": 1.5
606
+ }
607
+ },
608
+ "script": {
609
+ "name": "DamageOnContact",
610
+ "props": {
611
+ "amount": 12,
612
+ "targetGroup": "player",
613
+ "oncePerTarget": false
614
+ }
615
+ }
616
+ },
617
+ {
618
+ "name": "Growl",
619
+ "type": "AudioPlayer",
620
+ "props": {
621
+ "preset": "hit",
622
+ "volume": 0.5,
623
+ "loop": false,
624
+ "autoplay": true,
625
+ "spatial": true,
626
+ "refDistance": 3,
627
+ "maxDistance": 35,
628
+ "rolloff": "inverse",
629
+ "pitch": 0.6
630
+ }
631
+ }
632
+ ]
633
+ }
634
+ ]
635
+ },
636
+ {
637
+ "name": "Grove",
638
+ "type": "Tree3D",
639
+ "props": {
640
+ "type": "conifer",
641
+ "tier": "simple",
642
+ "count": 8,
643
+ "area": [44, 44],
644
+ "seed": 17,
645
+ "height": 6
646
+ }
647
+ },
648
+ {
649
+ "name": "Hud",
650
+ "type": "Node",
651
+ "script": {
652
+ "name": "HudUpdater"
653
+ }
654
+ }
655
+ ]
656
+ },
657
+ "connections": [
658
+ {
659
+ "signal": "died",
660
+ "from": "Player",
661
+ "to": "/root",
662
+ "handler": "loseLife"
663
+ },
664
+ {
665
+ "signal": "damaged",
666
+ "from": "Player",
667
+ "to": "HurtSfx",
668
+ "handler": "play"
669
+ },
670
+ {
671
+ "signal": "allCleared",
672
+ "from": "Spawner",
673
+ "to": "Hud",
674
+ "handler": "onAllCleared"
675
+ }
676
+ ]
677
+ }