@almadar/std 16.108.0 → 16.109.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 (90) hide show
  1. package/behaviors/registry/ui/game/2d/organisms/ui-battle-board.orb +213 -125
  2. package/behaviors/registry/ui/game/2d/organisms/ui-fishing-board.orb +2302 -705
  3. package/behaviors/registry/ui/game/2d/organisms/ui-minigolf-board.orb +7872 -1934
  4. package/behaviors/registry/ui/game/2d/organisms/ui-pinball-board.orb +2739 -3050
  5. package/behaviors/registry/ui/game/2d/organisms/ui-roguelike-board.orb +5204 -2967
  6. package/behaviors/registry/ui/game/2d/organisms/ui-sokoban-board.orb +3330 -1619
  7. package/behaviors/registry/ui/game/2d/organisms/ui-space-shmup-board.orb +4637 -4059
  8. package/behaviors/registry/ui/game/2d/organisms/ui-tanks-board.orb +76 -103
  9. package/behaviors/registry/ui/game/2d/organisms/ui-topdown-dungeon-board.orb +4579 -4356
  10. package/behaviors/registry/ui/game/2d/organisms/ui-uncontrolled-battle-board.orb +1164 -2247
  11. package/behaviors/registry/ui/game/2d/organisms/ui-winter-ski-board.orb +4573 -4553
  12. package/behaviors/registry/ui/game/3d/organisms/ui-arcade-board-3d.orb +379 -2
  13. package/behaviors/registry/ui/game/3d/organisms/ui-brick-sandbox-board-3d.orb +168 -1
  14. package/behaviors/registry/ui/game/3d/organisms/ui-city-board-3d.orb +801 -169
  15. package/behaviors/registry/ui/game/3d/organisms/ui-fantasy-town-board-3d.orb +1666 -702
  16. package/behaviors/registry/ui/game/3d/organisms/ui-game-board-3d.orb +1323 -514
  17. package/behaviors/registry/ui/game/3d/organisms/ui-graveyard-board-3d.orb +1186 -384
  18. package/behaviors/registry/ui/game/3d/organisms/ui-hex-strategy-board-3d.orb +342 -170
  19. package/behaviors/registry/ui/game/3d/organisms/ui-holiday-board-3d.orb +509 -3
  20. package/behaviors/registry/ui/game/3d/organisms/ui-market-board-3d.orb +632 -419
  21. package/behaviors/registry/ui/game/3d/organisms/ui-minigolf-board-3d.orb +503 -145
  22. package/behaviors/registry/ui/game/3d/organisms/ui-nature-survival-board-3d.orb +1157 -134
  23. package/behaviors/registry/ui/game/3d/organisms/ui-pirate-board-3d.orb +1203 -383
  24. package/behaviors/registry/ui/game/3d/organisms/ui-platformer-board-3d.orb +1157 -205
  25. package/behaviors/registry/ui/game/3d/organisms/ui-racing-board-3d.orb +656 -565
  26. package/behaviors/registry/ui/game/3d/organisms/ui-skatepark-board-3d.orb +1205 -137
  27. package/behaviors/registry/ui/game/3d/organisms/ui-space-board-3d.orb +1333 -513
  28. package/behaviors/registry/ui/game/3d/organisms/ui-tower-defense-board-3d.orb +332 -7
  29. package/behaviors/registry/ui/game/3d/organisms/ui-toy-track-board-3d.orb +1202 -287
  30. package/dist/behaviors/behaviors-registry.json +282 -273
  31. package/dist/behaviors/registry/ui/game/2d/organisms/ui-battle-board.orb +213 -125
  32. package/dist/behaviors/registry/ui/game/2d/organisms/ui-fishing-board.orb +2302 -705
  33. package/dist/behaviors/registry/ui/game/2d/organisms/ui-minigolf-board.orb +7872 -1934
  34. package/dist/behaviors/registry/ui/game/2d/organisms/ui-pinball-board.orb +2739 -3050
  35. package/dist/behaviors/registry/ui/game/2d/organisms/ui-roguelike-board.orb +5204 -2967
  36. package/dist/behaviors/registry/ui/game/2d/organisms/ui-sokoban-board.orb +3330 -1619
  37. package/dist/behaviors/registry/ui/game/2d/organisms/ui-space-shmup-board.orb +4637 -4059
  38. package/dist/behaviors/registry/ui/game/2d/organisms/ui-tanks-board.orb +76 -103
  39. package/dist/behaviors/registry/ui/game/2d/organisms/ui-topdown-dungeon-board.orb +4579 -4356
  40. package/dist/behaviors/registry/ui/game/2d/organisms/ui-uncontrolled-battle-board.orb +1164 -2247
  41. package/dist/behaviors/registry/ui/game/2d/organisms/ui-winter-ski-board.orb +4573 -4553
  42. package/dist/behaviors/registry/ui/game/3d/organisms/ui-arcade-board-3d.orb +379 -2
  43. package/dist/behaviors/registry/ui/game/3d/organisms/ui-brick-sandbox-board-3d.orb +168 -1
  44. package/dist/behaviors/registry/ui/game/3d/organisms/ui-city-board-3d.orb +801 -169
  45. package/dist/behaviors/registry/ui/game/3d/organisms/ui-fantasy-town-board-3d.orb +1666 -702
  46. package/dist/behaviors/registry/ui/game/3d/organisms/ui-game-board-3d.orb +1323 -514
  47. package/dist/behaviors/registry/ui/game/3d/organisms/ui-graveyard-board-3d.orb +1186 -384
  48. package/dist/behaviors/registry/ui/game/3d/organisms/ui-hex-strategy-board-3d.orb +342 -170
  49. package/dist/behaviors/registry/ui/game/3d/organisms/ui-holiday-board-3d.orb +509 -3
  50. package/dist/behaviors/registry/ui/game/3d/organisms/ui-market-board-3d.orb +632 -419
  51. package/dist/behaviors/registry/ui/game/3d/organisms/ui-minigolf-board-3d.orb +503 -145
  52. package/dist/behaviors/registry/ui/game/3d/organisms/ui-nature-survival-board-3d.orb +1157 -134
  53. package/dist/behaviors/registry/ui/game/3d/organisms/ui-pirate-board-3d.orb +1203 -383
  54. package/dist/behaviors/registry/ui/game/3d/organisms/ui-platformer-board-3d.orb +1157 -205
  55. package/dist/behaviors/registry/ui/game/3d/organisms/ui-racing-board-3d.orb +656 -565
  56. package/dist/behaviors/registry/ui/game/3d/organisms/ui-skatepark-board-3d.orb +1205 -137
  57. package/dist/behaviors/registry/ui/game/3d/organisms/ui-space-board-3d.orb +1333 -513
  58. package/dist/behaviors/registry/ui/game/3d/organisms/ui-tower-defense-board-3d.orb +332 -7
  59. package/dist/behaviors/registry/ui/game/3d/organisms/ui-toy-track-board-3d.orb +1202 -287
  60. package/dist/behaviors-registry.json +282 -273
  61. package/dist/registry/ui/game/2d/organisms/ui-battle-board.orb +213 -125
  62. package/dist/registry/ui/game/2d/organisms/ui-fishing-board.orb +2302 -705
  63. package/dist/registry/ui/game/2d/organisms/ui-minigolf-board.orb +7872 -1934
  64. package/dist/registry/ui/game/2d/organisms/ui-pinball-board.orb +2739 -3050
  65. package/dist/registry/ui/game/2d/organisms/ui-roguelike-board.orb +5204 -2967
  66. package/dist/registry/ui/game/2d/organisms/ui-sokoban-board.orb +3330 -1619
  67. package/dist/registry/ui/game/2d/organisms/ui-space-shmup-board.orb +4637 -4059
  68. package/dist/registry/ui/game/2d/organisms/ui-tanks-board.orb +76 -103
  69. package/dist/registry/ui/game/2d/organisms/ui-topdown-dungeon-board.orb +4579 -4356
  70. package/dist/registry/ui/game/2d/organisms/ui-uncontrolled-battle-board.orb +1164 -2247
  71. package/dist/registry/ui/game/2d/organisms/ui-winter-ski-board.orb +4573 -4553
  72. package/dist/registry/ui/game/3d/organisms/ui-arcade-board-3d.orb +379 -2
  73. package/dist/registry/ui/game/3d/organisms/ui-brick-sandbox-board-3d.orb +168 -1
  74. package/dist/registry/ui/game/3d/organisms/ui-city-board-3d.orb +801 -169
  75. package/dist/registry/ui/game/3d/organisms/ui-fantasy-town-board-3d.orb +1666 -702
  76. package/dist/registry/ui/game/3d/organisms/ui-game-board-3d.orb +1323 -514
  77. package/dist/registry/ui/game/3d/organisms/ui-graveyard-board-3d.orb +1186 -384
  78. package/dist/registry/ui/game/3d/organisms/ui-hex-strategy-board-3d.orb +342 -170
  79. package/dist/registry/ui/game/3d/organisms/ui-holiday-board-3d.orb +509 -3
  80. package/dist/registry/ui/game/3d/organisms/ui-market-board-3d.orb +632 -419
  81. package/dist/registry/ui/game/3d/organisms/ui-minigolf-board-3d.orb +503 -145
  82. package/dist/registry/ui/game/3d/organisms/ui-nature-survival-board-3d.orb +1157 -134
  83. package/dist/registry/ui/game/3d/organisms/ui-pirate-board-3d.orb +1203 -383
  84. package/dist/registry/ui/game/3d/organisms/ui-platformer-board-3d.orb +1157 -205
  85. package/dist/registry/ui/game/3d/organisms/ui-racing-board-3d.orb +656 -565
  86. package/dist/registry/ui/game/3d/organisms/ui-skatepark-board-3d.orb +1205 -137
  87. package/dist/registry/ui/game/3d/organisms/ui-space-board-3d.orb +1333 -513
  88. package/dist/registry/ui/game/3d/organisms/ui-tower-defense-board-3d.orb +332 -7
  89. package/dist/registry/ui/game/3d/organisms/ui-toy-track-board-3d.orb +1202 -287
  90. package/package.json +1 -1
@@ -1,5 +1,5 @@
1
1
  {
2
- "description": "PlatformerBoard3D — 3D twin of ui-platformer-board: same entity/events/physics, game-canvas-3d side view with follow camera and GLB clips.",
2
+ "description": "PlatformerBoard3D — side-view platformer: pit jump, hazard, coin pickups, GLB clips, follow camera, win/lose overlay.",
3
3
  "name": "ui-platformer-board-3d",
4
4
  "orbitals": [
5
5
  {
@@ -104,7 +104,7 @@
104
104
  "type": "object"
105
105
  },
106
106
  {
107
- "default": 720.0,
107
+ "default": 700.0,
108
108
  "name": "goalX",
109
109
  "type": "number"
110
110
  },
@@ -122,16 +122,81 @@
122
122
  "default": [],
123
123
  "items": {
124
124
  "properties": {
125
- "key": {
126
- "name": "key",
125
+ "id": {
126
+ "name": "id",
127
127
  "required": true,
128
128
  "type": "string"
129
129
  },
130
+ "message": {
131
+ "name": "message",
132
+ "required": false,
133
+ "type": "string"
134
+ },
130
135
  "ttl": {
131
136
  "name": "ttl",
132
137
  "required": true,
133
138
  "type": "number"
134
139
  },
140
+ "type": {
141
+ "name": "type",
142
+ "required": true,
143
+ "type": "string"
144
+ },
145
+ "x": {
146
+ "name": "x",
147
+ "required": true,
148
+ "type": "number"
149
+ },
150
+ "y": {
151
+ "name": "y",
152
+ "required": false,
153
+ "type": "number"
154
+ }
155
+ },
156
+ "type": "object"
157
+ },
158
+ "name": "fx",
159
+ "type": "array"
160
+ },
161
+ {
162
+ "default": [
163
+ {
164
+ "id": "coin-1",
165
+ "taken": false,
166
+ "x": 200.0,
167
+ "y": 250.0
168
+ },
169
+ {
170
+ "id": "coin-2",
171
+ "taken": false,
172
+ "x": 350.0,
173
+ "y": 300.0
174
+ },
175
+ {
176
+ "id": "coin-3",
177
+ "taken": false,
178
+ "x": 390.0,
179
+ "y": 280.0
180
+ },
181
+ {
182
+ "id": "coin-4",
183
+ "taken": false,
184
+ "x": 470.0,
185
+ "y": 190.0
186
+ }
187
+ ],
188
+ "items": {
189
+ "properties": {
190
+ "id": {
191
+ "name": "id",
192
+ "required": true,
193
+ "type": "string"
194
+ },
195
+ "taken": {
196
+ "name": "taken",
197
+ "required": false,
198
+ "type": "boolean"
199
+ },
135
200
  "x": {
136
201
  "name": "x",
137
202
  "required": true,
@@ -145,7 +210,7 @@
145
210
  },
146
211
  "type": "object"
147
212
  },
148
- "name": "effects",
213
+ "name": "coins",
149
214
  "type": "array"
150
215
  },
151
216
  {
@@ -254,8 +319,93 @@
254
319
  "tier": "presentation",
255
320
  "type": "string"
256
321
  },
322
+ "coinSprite": {
323
+ "default": {
324
+ "animations": [
325
+ "static"
326
+ ],
327
+ "aspect": "1:1",
328
+ "category": "coin",
329
+ "dimension": "3d",
330
+ "name": "coin",
331
+ "role": "feature",
332
+ "style": "lowpoly-flat",
333
+ "thumbnailUrl": "",
334
+ "url": "https://almadar-kflow-assets.web.app/shared/ui-platformer-board-3d/kenney-platformer-kit/features/coin-gold.glb",
335
+ "variant": ""
336
+ },
337
+ "description": "Collectible coin GLB Asset rendered above platforms and over the pit",
338
+ "label": "Coin Model",
339
+ "properties": {
340
+ "animations": {
341
+ "items": {
342
+ "type": "string"
343
+ },
344
+ "name": "animations",
345
+ "required": false,
346
+ "type": "array"
347
+ },
348
+ "aspect": {
349
+ "name": "aspect",
350
+ "required": false,
351
+ "type": "string"
352
+ },
353
+ "atlas": {
354
+ "name": "atlas",
355
+ "required": false,
356
+ "type": "string"
357
+ },
358
+ "category": {
359
+ "name": "category",
360
+ "required": false,
361
+ "type": "string"
362
+ },
363
+ "dimension": {
364
+ "name": "dimension",
365
+ "required": false,
366
+ "type": "string"
367
+ },
368
+ "name": {
369
+ "name": "name",
370
+ "required": false,
371
+ "type": "string"
372
+ },
373
+ "role": {
374
+ "name": "role",
375
+ "required": false,
376
+ "type": "string"
377
+ },
378
+ "sprite": {
379
+ "name": "sprite",
380
+ "required": false,
381
+ "type": "string"
382
+ },
383
+ "style": {
384
+ "name": "style",
385
+ "required": false,
386
+ "type": "string"
387
+ },
388
+ "thumbnailUrl": {
389
+ "name": "thumbnailUrl",
390
+ "required": false,
391
+ "type": "string"
392
+ },
393
+ "url": {
394
+ "name": "url",
395
+ "required": false,
396
+ "type": "string"
397
+ },
398
+ "variant": {
399
+ "name": "variant",
400
+ "required": false,
401
+ "type": "string"
402
+ }
403
+ },
404
+ "tier": "presentation",
405
+ "type": "Asset"
406
+ },
257
407
  "goalX": {
258
- "default": 720.0,
408
+ "default": 700.0,
259
409
  "description": "X pixel of the goal tile (used for display)",
260
410
  "label": "Goal X",
261
411
  "tier": "presentation",
@@ -294,10 +444,17 @@
294
444
  {
295
445
  "height": 32.0,
296
446
  "type": "ground",
297
- "width": 800.0,
447
+ "width": 340.0,
298
448
  "x": 0.0,
299
449
  "y": 368.0
300
450
  },
451
+ {
452
+ "height": 32.0,
453
+ "type": "ground",
454
+ "width": 360.0,
455
+ "x": 440.0,
456
+ "y": 368.0
457
+ },
301
458
  {
302
459
  "height": 16.0,
303
460
  "type": "platform",
@@ -314,20 +471,27 @@
314
471
  },
315
472
  {
316
473
  "height": 16.0,
474
+ "type": "platform",
475
+ "width": 120.0,
476
+ "x": 680.0,
477
+ "y": 280.0
478
+ },
479
+ {
480
+ "height": 32.0,
317
481
  "type": "hazard",
318
- "width": 80.0,
319
- "x": 580.0,
320
- "y": 300.0
482
+ "width": 64.0,
483
+ "x": 560.0,
484
+ "y": 336.0
321
485
  },
322
486
  {
323
487
  "height": 28.0,
324
488
  "type": "goal",
325
489
  "width": 64.0,
326
490
  "x": 700.0,
327
- "y": 340.0
491
+ "y": 252.0
328
492
  }
329
493
  ],
330
- "description": "Level geometry including hazard and goal tiles",
494
+ "description": "Level geometry: a pit between two ground segments, floating platforms, a hazard on the walking path, and a raised goal",
331
495
  "items": {
332
496
  "properties": {
333
497
  "height": {
@@ -723,7 +887,8 @@
723
887
  ],
724
888
  "entityContract": {
725
889
  "provides": [
726
- "effects",
890
+ "coins",
891
+ "fx",
727
892
  "goalX",
728
893
  "level",
729
894
  "lives",
@@ -900,9 +1065,39 @@
900
1065
  ],
901
1066
  [
902
1067
  "set",
903
- "@entity.effects",
1068
+ "@entity.fx",
904
1069
  []
905
1070
  ],
1071
+ [
1072
+ "set",
1073
+ "@entity.coins",
1074
+ [
1075
+ {
1076
+ "id": "coin-1",
1077
+ "taken": false,
1078
+ "x": 200.0,
1079
+ "y": 250.0
1080
+ },
1081
+ {
1082
+ "id": "coin-2",
1083
+ "taken": false,
1084
+ "x": 350.0,
1085
+ "y": 300.0
1086
+ },
1087
+ {
1088
+ "id": "coin-3",
1089
+ "taken": false,
1090
+ "x": 390.0,
1091
+ "y": 280.0
1092
+ },
1093
+ {
1094
+ "id": "coin-4",
1095
+ "taken": false,
1096
+ "x": 470.0,
1097
+ "y": 190.0
1098
+ }
1099
+ ]
1100
+ ],
906
1101
  [
907
1102
  "set",
908
1103
  "@entity.player",
@@ -956,6 +1151,34 @@
956
1151
  {
957
1152
  "backgroundColor": "@config.bgColor",
958
1153
  "cameraMode": "follow",
1154
+ "events": "@entity.fx",
1155
+ "features": [
1156
+ "array/map",
1157
+ [
1158
+ "array/filter",
1159
+ "@entity.coins",
1160
+ [
1161
+ "fn",
1162
+ "c",
1163
+ [
1164
+ "==",
1165
+ "@c.taken",
1166
+ false
1167
+ ]
1168
+ ]
1169
+ ],
1170
+ [
1171
+ "fn",
1172
+ "c",
1173
+ {
1174
+ "assetUrl": "@config.coinSprite",
1175
+ "id": "@c.id",
1176
+ "type": "coin",
1177
+ "x": "@c.x",
1178
+ "y": "@c.y"
1179
+ }
1180
+ ]
1181
+ ],
959
1182
  "interpolateUnits": true,
960
1183
  "keyMap": {
961
1184
  "ArrowLeft": "LEFT",
@@ -1059,6 +1282,7 @@
1059
1282
  }
1060
1283
  },
1061
1284
  "directionEvents": {
1285
+ "down": "STOP",
1062
1286
  "left": "LEFT",
1063
1287
  "right": "RIGHT",
1064
1288
  "up": "JUMP"
@@ -1253,112 +1477,598 @@
1253
1477
  "from": "playing",
1254
1478
  "to": "playing"
1255
1479
  },
1256
- {
1257
- "event": "GAME_END",
1258
- "from": "playing",
1259
- "guard": [
1260
- "==",
1261
- "@entity.result",
1262
- "won"
1263
- ],
1264
- "to": "won"
1265
- },
1266
- {
1267
- "event": "GAME_END",
1268
- "from": "playing",
1269
- "guard": [
1270
- "==",
1271
- "@entity.result",
1272
- "lost"
1273
- ],
1274
- "to": "lost"
1275
- },
1276
- {
1277
- "effects": [
1278
- [
1279
- "set",
1280
- "@entity.level",
1281
- [
1282
- "+",
1283
- "@entity.level",
1284
- 1.0
1285
- ]
1286
- ],
1287
- [
1288
- "set",
1289
- "@entity.result",
1290
- "none"
1291
- ],
1292
- [
1293
- "set",
1294
- "@entity.effects",
1295
- []
1296
- ],
1297
- [
1298
- "set",
1299
- "@entity.player",
1300
- {
1301
- "animation": "idle",
1302
- "facingRight": true,
1303
- "frame": 0.0,
1304
- "grounded": false,
1305
- "height": 48.0,
1306
- "vx": 0.0,
1307
- "vy": 0.0,
1308
- "width": 32.0,
1309
- "x": 80.0,
1310
- "y": 320.0
1311
- }
1312
- ]
1313
- ],
1314
- "event": "PLAY_AGAIN",
1315
- "from": "won",
1316
- "to": "playing"
1317
- },
1318
1480
  {
1319
1481
  "effects": [
1320
1482
  [
1321
- "set",
1322
- "@entity.level",
1323
- 1.0
1324
- ],
1325
- [
1326
- "set",
1327
- "@entity.score",
1328
- 0.0
1329
- ],
1330
- [
1331
- "set",
1332
- "@entity.lives",
1333
- 3.0
1334
- ],
1335
- [
1336
- "set",
1337
- "@entity.result",
1338
- "none"
1339
- ],
1340
- [
1341
- "set",
1342
- "@entity.effects",
1343
- []
1344
- ],
1345
- [
1346
- "set",
1347
- "@entity.player",
1483
+ "render-ui",
1484
+ "main",
1348
1485
  {
1349
- "animation": "idle",
1350
- "facingRight": true,
1351
- "frame": 0.0,
1352
- "grounded": false,
1353
- "height": 48.0,
1354
- "vx": 0.0,
1355
- "vy": 0.0,
1356
- "width": 32.0,
1357
- "x": 80.0,
1358
- "y": 320.0
1359
- }
1360
- ]
1361
- ],
1486
+ "backgroundAsset": {
1487
+ "animations": [],
1488
+ "aspect": "1:1",
1489
+ "atlas": "https://almadar-kflow-assets.web.app/shared/_shared/kenney-ui-adventure-pack/ui/uipack_rpg_sheet.json",
1490
+ "category": "ui",
1491
+ "dimension": "2d",
1492
+ "name": "panel",
1493
+ "role": "ui",
1494
+ "sprite": "panelInset_beige.png",
1495
+ "style": "vector-flat",
1496
+ "thumbnailUrl": "",
1497
+ "url": "https://almadar-kflow-assets.web.app/shared/_shared/kenney-ui-adventure-pack/ui/uipack_rpg_sheet.png",
1498
+ "variant": ""
1499
+ },
1500
+ "children": [
1501
+ {
1502
+ "backgroundColor": "@config.bgColor",
1503
+ "cameraMode": "follow",
1504
+ "events": "@entity.fx",
1505
+ "features": [
1506
+ "array/map",
1507
+ [
1508
+ "array/filter",
1509
+ "@entity.coins",
1510
+ [
1511
+ "fn",
1512
+ "c",
1513
+ [
1514
+ "==",
1515
+ "@c.taken",
1516
+ false
1517
+ ]
1518
+ ]
1519
+ ],
1520
+ [
1521
+ "fn",
1522
+ "c",
1523
+ {
1524
+ "assetUrl": "@config.coinSprite",
1525
+ "id": "@c.id",
1526
+ "type": "coin",
1527
+ "x": "@c.x",
1528
+ "y": "@c.y"
1529
+ }
1530
+ ]
1531
+ ],
1532
+ "interpolateUnits": true,
1533
+ "keyMap": {
1534
+ "ArrowLeft": "LEFT",
1535
+ "ArrowRight": "RIGHT",
1536
+ "ArrowUp": "JUMP",
1537
+ "KeyA": "LEFT",
1538
+ "KeyD": "RIGHT",
1539
+ "KeyW": "JUMP",
1540
+ "Space": "JUMP"
1541
+ },
1542
+ "keyUpMap": {
1543
+ "ArrowLeft": "STOP",
1544
+ "ArrowRight": "STOP",
1545
+ "KeyA": "STOP",
1546
+ "KeyD": "STOP"
1547
+ },
1548
+ "pixelsPerUnit": 32.0,
1549
+ "platforms": "@config.platforms",
1550
+ "player": "@entity.player",
1551
+ "playerSprite": "@config.playerSprite",
1552
+ "tileClickEvent": "TILE_CLICK",
1553
+ "tileSprites": "@config.tileSprites",
1554
+ "type": "game-canvas-3d",
1555
+ "unitClickEvent": "UNIT_CLICK",
1556
+ "worldHeight": "@entity.worldHeight",
1557
+ "worldWidth": "@entity.worldWidth"
1558
+ }
1559
+ ],
1560
+ "hud": {
1561
+ "children": [
1562
+ {
1563
+ "stats": [
1564
+ {
1565
+ "label": "Score",
1566
+ "value": "@entity.score"
1567
+ },
1568
+ {
1569
+ "label": "Lives",
1570
+ "value": "@entity.lives"
1571
+ }
1572
+ ],
1573
+ "type": "game-hud"
1574
+ },
1575
+ {
1576
+ "directionAssets": {
1577
+ "down": {
1578
+ "animations": [],
1579
+ "aspect": "1:1",
1580
+ "atlas": "https://almadar-kflow-assets.web.app/shared/_shared/kenney-input-prompts/ui/generic_sheet_default.json",
1581
+ "category": "ui",
1582
+ "dimension": "2d",
1583
+ "name": "stick-down",
1584
+ "role": "ui",
1585
+ "sprite": "generic_stick_down",
1586
+ "style": "vector-flat",
1587
+ "thumbnailUrl": "",
1588
+ "url": "https://almadar-kflow-assets.web.app/shared/_shared/kenney-input-prompts/ui/generic_sheet_default.png",
1589
+ "variant": ""
1590
+ },
1591
+ "left": {
1592
+ "animations": [],
1593
+ "aspect": "1:1",
1594
+ "atlas": "https://almadar-kflow-assets.web.app/shared/_shared/kenney-input-prompts/ui/generic_sheet_default.json",
1595
+ "category": "ui",
1596
+ "dimension": "2d",
1597
+ "name": "stick-left",
1598
+ "role": "ui",
1599
+ "sprite": "generic_stick_left",
1600
+ "style": "vector-flat",
1601
+ "thumbnailUrl": "",
1602
+ "url": "https://almadar-kflow-assets.web.app/shared/_shared/kenney-input-prompts/ui/generic_sheet_default.png",
1603
+ "variant": ""
1604
+ },
1605
+ "right": {
1606
+ "animations": [],
1607
+ "aspect": "1:1",
1608
+ "atlas": "https://almadar-kflow-assets.web.app/shared/_shared/kenney-input-prompts/ui/generic_sheet_default.json",
1609
+ "category": "ui",
1610
+ "dimension": "2d",
1611
+ "name": "stick-right",
1612
+ "role": "ui",
1613
+ "sprite": "generic_stick_right",
1614
+ "style": "vector-flat",
1615
+ "thumbnailUrl": "",
1616
+ "url": "https://almadar-kflow-assets.web.app/shared/_shared/kenney-input-prompts/ui/generic_sheet_default.png",
1617
+ "variant": ""
1618
+ },
1619
+ "up": {
1620
+ "animations": [],
1621
+ "aspect": "1:1",
1622
+ "atlas": "https://almadar-kflow-assets.web.app/shared/_shared/kenney-input-prompts/ui/generic_sheet_default.json",
1623
+ "category": "ui",
1624
+ "dimension": "2d",
1625
+ "name": "stick-up",
1626
+ "role": "ui",
1627
+ "sprite": "generic_stick_up",
1628
+ "style": "vector-flat",
1629
+ "thumbnailUrl": "",
1630
+ "url": "https://almadar-kflow-assets.web.app/shared/_shared/kenney-input-prompts/ui/generic_sheet_default.png",
1631
+ "variant": ""
1632
+ }
1633
+ },
1634
+ "directionEvents": {
1635
+ "down": "STOP",
1636
+ "left": "LEFT",
1637
+ "right": "RIGHT",
1638
+ "up": "JUMP"
1639
+ },
1640
+ "directionReleaseEvents": {
1641
+ "left": "STOP",
1642
+ "right": "STOP"
1643
+ },
1644
+ "kind": "dpad",
1645
+ "type": "control-grid"
1646
+ },
1647
+ {
1648
+ "action": "PLAY_AGAIN",
1649
+ "label": "Restart",
1650
+ "type": "button",
1651
+ "variant": "secondary"
1652
+ }
1653
+ ],
1654
+ "direction": "horizontal",
1655
+ "gap": "md",
1656
+ "justify": "between",
1657
+ "type": "stack"
1658
+ },
1659
+ "hudBackgroundAsset": {
1660
+ "animations": [],
1661
+ "aspect": "1:1",
1662
+ "atlas": "https://almadar-kflow-assets.web.app/shared/_shared/kenney-ui-adventure-pack/ui/uipack_rpg_sheet.json",
1663
+ "category": "ui",
1664
+ "dimension": "2d",
1665
+ "name": "hud-panel",
1666
+ "role": "ui",
1667
+ "sprite": "panelInset_beigeLight.png",
1668
+ "style": "vector-flat",
1669
+ "thumbnailUrl": "",
1670
+ "url": "https://almadar-kflow-assets.web.app/shared/_shared/kenney-ui-adventure-pack/ui/uipack_rpg_sheet.png",
1671
+ "variant": ""
1672
+ },
1673
+ "overlay": {
1674
+ "options": [
1675
+ {
1676
+ "event": "PLAY_AGAIN",
1677
+ "id": "again",
1678
+ "label": "Play Again",
1679
+ "variant": "primary"
1680
+ }
1681
+ ],
1682
+ "subtitle": [
1683
+ "str/concat",
1684
+ "Score: ",
1685
+ "@entity.score"
1686
+ ],
1687
+ "title": "YOU WIN!",
1688
+ "type": "game-menu"
1689
+ },
1690
+ "type": "game-shell"
1691
+ }
1692
+ ]
1693
+ ],
1694
+ "event": "GAME_END",
1695
+ "from": "playing",
1696
+ "guard": [
1697
+ "==",
1698
+ "@entity.result",
1699
+ "won"
1700
+ ],
1701
+ "to": "won"
1702
+ },
1703
+ {
1704
+ "effects": [
1705
+ [
1706
+ "render-ui",
1707
+ "main",
1708
+ {
1709
+ "backgroundAsset": {
1710
+ "animations": [],
1711
+ "aspect": "1:1",
1712
+ "atlas": "https://almadar-kflow-assets.web.app/shared/_shared/kenney-ui-adventure-pack/ui/uipack_rpg_sheet.json",
1713
+ "category": "ui",
1714
+ "dimension": "2d",
1715
+ "name": "panel",
1716
+ "role": "ui",
1717
+ "sprite": "panelInset_beige.png",
1718
+ "style": "vector-flat",
1719
+ "thumbnailUrl": "",
1720
+ "url": "https://almadar-kflow-assets.web.app/shared/_shared/kenney-ui-adventure-pack/ui/uipack_rpg_sheet.png",
1721
+ "variant": ""
1722
+ },
1723
+ "children": [
1724
+ {
1725
+ "backgroundColor": "@config.bgColor",
1726
+ "cameraMode": "follow",
1727
+ "events": "@entity.fx",
1728
+ "features": [
1729
+ "array/map",
1730
+ [
1731
+ "array/filter",
1732
+ "@entity.coins",
1733
+ [
1734
+ "fn",
1735
+ "c",
1736
+ [
1737
+ "==",
1738
+ "@c.taken",
1739
+ false
1740
+ ]
1741
+ ]
1742
+ ],
1743
+ [
1744
+ "fn",
1745
+ "c",
1746
+ {
1747
+ "assetUrl": "@config.coinSprite",
1748
+ "id": "@c.id",
1749
+ "type": "coin",
1750
+ "x": "@c.x",
1751
+ "y": "@c.y"
1752
+ }
1753
+ ]
1754
+ ],
1755
+ "interpolateUnits": true,
1756
+ "keyMap": {
1757
+ "ArrowLeft": "LEFT",
1758
+ "ArrowRight": "RIGHT",
1759
+ "ArrowUp": "JUMP",
1760
+ "KeyA": "LEFT",
1761
+ "KeyD": "RIGHT",
1762
+ "KeyW": "JUMP",
1763
+ "Space": "JUMP"
1764
+ },
1765
+ "keyUpMap": {
1766
+ "ArrowLeft": "STOP",
1767
+ "ArrowRight": "STOP",
1768
+ "KeyA": "STOP",
1769
+ "KeyD": "STOP"
1770
+ },
1771
+ "pixelsPerUnit": 32.0,
1772
+ "platforms": "@config.platforms",
1773
+ "player": "@entity.player",
1774
+ "playerSprite": "@config.playerSprite",
1775
+ "tileClickEvent": "TILE_CLICK",
1776
+ "tileSprites": "@config.tileSprites",
1777
+ "type": "game-canvas-3d",
1778
+ "unitClickEvent": "UNIT_CLICK",
1779
+ "worldHeight": "@entity.worldHeight",
1780
+ "worldWidth": "@entity.worldWidth"
1781
+ }
1782
+ ],
1783
+ "hud": {
1784
+ "children": [
1785
+ {
1786
+ "stats": [
1787
+ {
1788
+ "label": "Score",
1789
+ "value": "@entity.score"
1790
+ },
1791
+ {
1792
+ "label": "Lives",
1793
+ "value": "@entity.lives"
1794
+ }
1795
+ ],
1796
+ "type": "game-hud"
1797
+ },
1798
+ {
1799
+ "directionAssets": {
1800
+ "down": {
1801
+ "animations": [],
1802
+ "aspect": "1:1",
1803
+ "atlas": "https://almadar-kflow-assets.web.app/shared/_shared/kenney-input-prompts/ui/generic_sheet_default.json",
1804
+ "category": "ui",
1805
+ "dimension": "2d",
1806
+ "name": "stick-down",
1807
+ "role": "ui",
1808
+ "sprite": "generic_stick_down",
1809
+ "style": "vector-flat",
1810
+ "thumbnailUrl": "",
1811
+ "url": "https://almadar-kflow-assets.web.app/shared/_shared/kenney-input-prompts/ui/generic_sheet_default.png",
1812
+ "variant": ""
1813
+ },
1814
+ "left": {
1815
+ "animations": [],
1816
+ "aspect": "1:1",
1817
+ "atlas": "https://almadar-kflow-assets.web.app/shared/_shared/kenney-input-prompts/ui/generic_sheet_default.json",
1818
+ "category": "ui",
1819
+ "dimension": "2d",
1820
+ "name": "stick-left",
1821
+ "role": "ui",
1822
+ "sprite": "generic_stick_left",
1823
+ "style": "vector-flat",
1824
+ "thumbnailUrl": "",
1825
+ "url": "https://almadar-kflow-assets.web.app/shared/_shared/kenney-input-prompts/ui/generic_sheet_default.png",
1826
+ "variant": ""
1827
+ },
1828
+ "right": {
1829
+ "animations": [],
1830
+ "aspect": "1:1",
1831
+ "atlas": "https://almadar-kflow-assets.web.app/shared/_shared/kenney-input-prompts/ui/generic_sheet_default.json",
1832
+ "category": "ui",
1833
+ "dimension": "2d",
1834
+ "name": "stick-right",
1835
+ "role": "ui",
1836
+ "sprite": "generic_stick_right",
1837
+ "style": "vector-flat",
1838
+ "thumbnailUrl": "",
1839
+ "url": "https://almadar-kflow-assets.web.app/shared/_shared/kenney-input-prompts/ui/generic_sheet_default.png",
1840
+ "variant": ""
1841
+ },
1842
+ "up": {
1843
+ "animations": [],
1844
+ "aspect": "1:1",
1845
+ "atlas": "https://almadar-kflow-assets.web.app/shared/_shared/kenney-input-prompts/ui/generic_sheet_default.json",
1846
+ "category": "ui",
1847
+ "dimension": "2d",
1848
+ "name": "stick-up",
1849
+ "role": "ui",
1850
+ "sprite": "generic_stick_up",
1851
+ "style": "vector-flat",
1852
+ "thumbnailUrl": "",
1853
+ "url": "https://almadar-kflow-assets.web.app/shared/_shared/kenney-input-prompts/ui/generic_sheet_default.png",
1854
+ "variant": ""
1855
+ }
1856
+ },
1857
+ "directionEvents": {
1858
+ "down": "STOP",
1859
+ "left": "LEFT",
1860
+ "right": "RIGHT",
1861
+ "up": "JUMP"
1862
+ },
1863
+ "directionReleaseEvents": {
1864
+ "left": "STOP",
1865
+ "right": "STOP"
1866
+ },
1867
+ "kind": "dpad",
1868
+ "type": "control-grid"
1869
+ },
1870
+ {
1871
+ "action": "PLAY_AGAIN",
1872
+ "label": "Restart",
1873
+ "type": "button",
1874
+ "variant": "secondary"
1875
+ }
1876
+ ],
1877
+ "direction": "horizontal",
1878
+ "gap": "md",
1879
+ "justify": "between",
1880
+ "type": "stack"
1881
+ },
1882
+ "hudBackgroundAsset": {
1883
+ "animations": [],
1884
+ "aspect": "1:1",
1885
+ "atlas": "https://almadar-kflow-assets.web.app/shared/_shared/kenney-ui-adventure-pack/ui/uipack_rpg_sheet.json",
1886
+ "category": "ui",
1887
+ "dimension": "2d",
1888
+ "name": "hud-panel",
1889
+ "role": "ui",
1890
+ "sprite": "panelInset_beigeLight.png",
1891
+ "style": "vector-flat",
1892
+ "thumbnailUrl": "",
1893
+ "url": "https://almadar-kflow-assets.web.app/shared/_shared/kenney-ui-adventure-pack/ui/uipack_rpg_sheet.png",
1894
+ "variant": ""
1895
+ },
1896
+ "overlay": {
1897
+ "options": [
1898
+ {
1899
+ "event": "PLAY_AGAIN",
1900
+ "id": "again",
1901
+ "label": "Play Again",
1902
+ "variant": "primary"
1903
+ }
1904
+ ],
1905
+ "subtitle": [
1906
+ "str/concat",
1907
+ "Score: ",
1908
+ "@entity.score"
1909
+ ],
1910
+ "title": "GAME OVER",
1911
+ "type": "game-menu"
1912
+ },
1913
+ "type": "game-shell"
1914
+ }
1915
+ ]
1916
+ ],
1917
+ "event": "GAME_END",
1918
+ "from": "playing",
1919
+ "guard": [
1920
+ "==",
1921
+ "@entity.result",
1922
+ "lost"
1923
+ ],
1924
+ "to": "lost"
1925
+ },
1926
+ {
1927
+ "effects": [
1928
+ [
1929
+ "set",
1930
+ "@entity.level",
1931
+ [
1932
+ "+",
1933
+ "@entity.level",
1934
+ 1.0
1935
+ ]
1936
+ ],
1937
+ [
1938
+ "set",
1939
+ "@entity.result",
1940
+ "none"
1941
+ ],
1942
+ [
1943
+ "set",
1944
+ "@entity.fx",
1945
+ []
1946
+ ],
1947
+ [
1948
+ "set",
1949
+ "@entity.coins",
1950
+ [
1951
+ {
1952
+ "id": "coin-1",
1953
+ "taken": false,
1954
+ "x": 200.0,
1955
+ "y": 250.0
1956
+ },
1957
+ {
1958
+ "id": "coin-2",
1959
+ "taken": false,
1960
+ "x": 350.0,
1961
+ "y": 300.0
1962
+ },
1963
+ {
1964
+ "id": "coin-3",
1965
+ "taken": false,
1966
+ "x": 390.0,
1967
+ "y": 280.0
1968
+ },
1969
+ {
1970
+ "id": "coin-4",
1971
+ "taken": false,
1972
+ "x": 470.0,
1973
+ "y": 190.0
1974
+ }
1975
+ ]
1976
+ ],
1977
+ [
1978
+ "set",
1979
+ "@entity.player",
1980
+ {
1981
+ "animation": "idle",
1982
+ "facingRight": true,
1983
+ "frame": 0.0,
1984
+ "grounded": false,
1985
+ "height": 48.0,
1986
+ "vx": 0.0,
1987
+ "vy": 0.0,
1988
+ "width": 32.0,
1989
+ "x": 80.0,
1990
+ "y": 320.0
1991
+ }
1992
+ ]
1993
+ ],
1994
+ "event": "PLAY_AGAIN",
1995
+ "from": "won",
1996
+ "to": "playing"
1997
+ },
1998
+ {
1999
+ "effects": [
2000
+ [
2001
+ "set",
2002
+ "@entity.level",
2003
+ 1.0
2004
+ ],
2005
+ [
2006
+ "set",
2007
+ "@entity.score",
2008
+ 0.0
2009
+ ],
2010
+ [
2011
+ "set",
2012
+ "@entity.lives",
2013
+ 3.0
2014
+ ],
2015
+ [
2016
+ "set",
2017
+ "@entity.result",
2018
+ "none"
2019
+ ],
2020
+ [
2021
+ "set",
2022
+ "@entity.fx",
2023
+ []
2024
+ ],
2025
+ [
2026
+ "set",
2027
+ "@entity.coins",
2028
+ [
2029
+ {
2030
+ "id": "coin-1",
2031
+ "taken": false,
2032
+ "x": 200.0,
2033
+ "y": 250.0
2034
+ },
2035
+ {
2036
+ "id": "coin-2",
2037
+ "taken": false,
2038
+ "x": 350.0,
2039
+ "y": 300.0
2040
+ },
2041
+ {
2042
+ "id": "coin-3",
2043
+ "taken": false,
2044
+ "x": 390.0,
2045
+ "y": 280.0
2046
+ },
2047
+ {
2048
+ "id": "coin-4",
2049
+ "taken": false,
2050
+ "x": 470.0,
2051
+ "y": 190.0
2052
+ }
2053
+ ]
2054
+ ],
2055
+ [
2056
+ "set",
2057
+ "@entity.player",
2058
+ {
2059
+ "animation": "idle",
2060
+ "facingRight": true,
2061
+ "frame": 0.0,
2062
+ "grounded": false,
2063
+ "height": 48.0,
2064
+ "vx": 0.0,
2065
+ "vy": 0.0,
2066
+ "width": 32.0,
2067
+ "x": 80.0,
2068
+ "y": 320.0
2069
+ }
2070
+ ]
2071
+ ],
1362
2072
  "event": "PLAY_AGAIN",
1363
2073
  "from": "lost",
1364
2074
  "to": "playing"
@@ -1669,9 +2379,13 @@
1669
2379
  [
1670
2380
  "fell",
1671
2381
  [
1672
- ">",
1673
- "@py3",
1674
- "@entity.worldHeight"
2382
+ "and",
2383
+ "@atGround",
2384
+ [
2385
+ "==",
2386
+ "@landed",
2387
+ false
2388
+ ]
1675
2389
  ]
1676
2390
  ]
1677
2391
  ],
@@ -1692,116 +2406,320 @@
1692
2406
  ]
1693
2407
  ],
1694
2408
  [
1695
- "do",
1696
- [
1697
- "set",
1698
- "@entity.player",
1699
- [
1700
- "object/merge",
1701
- "@entity.player",
1702
- {
1703
- "grounded": "@grounded",
1704
- "vy": "@vy3",
1705
- "x": "@px1",
1706
- "y": "@py3"
1707
- }
1708
- ]
1709
- ],
2409
+ "let",
1710
2410
  [
1711
- "set",
1712
- "@entity.result",
1713
2411
  [
1714
- "if",
2412
+ "coinHits",
1715
2413
  [
1716
- "!=",
1717
- "@goalHit",
1718
- null
1719
- ],
1720
- "won",
2414
+ "array/filter",
2415
+ "@entity.coins",
2416
+ [
2417
+ "fn",
2418
+ "c",
2419
+ [
2420
+ "and",
2421
+ [
2422
+ "==",
2423
+ "@c.taken",
2424
+ false
2425
+ ],
2426
+ [
2427
+ "geo/aabb-overlap",
2428
+ "@playerRect",
2429
+ {
2430
+ "h": 24.0,
2431
+ "w": 24.0,
2432
+ "x": "@c.x",
2433
+ "y": "@c.y"
2434
+ }
2435
+ ]
2436
+ ]
2437
+ ]
2438
+ ]
2439
+ ],
2440
+ [
2441
+ "updatedCoins",
1721
2442
  [
1722
- "if",
2443
+ "array/map",
2444
+ "@entity.coins",
1723
2445
  [
1724
- "and",
1725
- "@damaged",
2446
+ "fn",
2447
+ "c",
1726
2448
  [
1727
- "<=",
1728
- "@livesLeft",
1729
- 0.0
2449
+ "if",
2450
+ [
2451
+ "and",
2452
+ [
2453
+ "==",
2454
+ "@c.taken",
2455
+ false
2456
+ ],
2457
+ [
2458
+ "geo/aabb-overlap",
2459
+ "@playerRect",
2460
+ {
2461
+ "h": 24.0,
2462
+ "w": 24.0,
2463
+ "x": "@c.x",
2464
+ "y": "@c.y"
2465
+ }
2466
+ ]
2467
+ ],
2468
+ [
2469
+ "object/merge",
2470
+ "@c",
2471
+ {
2472
+ "taken": true
2473
+ }
2474
+ ],
2475
+ "@c"
1730
2476
  ]
2477
+ ]
2478
+ ]
2479
+ ],
2480
+ [
2481
+ "newResult",
2482
+ [
2483
+ "if",
2484
+ [
2485
+ "!=",
2486
+ "@goalHit",
2487
+ null
1731
2488
  ],
1732
- "lost",
1733
- "none"
2489
+ "won",
2490
+ [
2491
+ "if",
2492
+ [
2493
+ "and",
2494
+ "@damaged",
2495
+ [
2496
+ "<=",
2497
+ "@livesLeft",
2498
+ 0.0
2499
+ ]
2500
+ ],
2501
+ "lost",
2502
+ "none"
2503
+ ]
1734
2504
  ]
1735
2505
  ]
1736
2506
  ],
1737
2507
  [
1738
- "set",
1739
- "@entity.score",
2508
+ "let",
1740
2509
  [
1741
- "if",
1742
2510
  [
1743
- "!=",
1744
- "@goalHit",
1745
- null
2511
+ "coinGain",
2512
+ [
2513
+ "*",
2514
+ [
2515
+ "array/len",
2516
+ "@coinHits"
2517
+ ],
2518
+ 10.0
2519
+ ]
1746
2520
  ],
1747
2521
  [
1748
- "+",
1749
- "@entity.score",
1750
- 100.0
2522
+ "pickupFx",
2523
+ [
2524
+ "array/map",
2525
+ "@coinHits",
2526
+ [
2527
+ "fn",
2528
+ "c",
2529
+ {
2530
+ "id": [
2531
+ "str/concat",
2532
+ "fx-coin-",
2533
+ "@c.id"
2534
+ ],
2535
+ "message": "+10",
2536
+ "ttl": 20.0,
2537
+ "type": "pickup",
2538
+ "x": "@c.x",
2539
+ "y": "@c.y"
2540
+ }
2541
+ ]
2542
+ ]
1751
2543
  ],
1752
- "@entity.score"
1753
- ]
1754
- ],
1755
- [
1756
- "set",
1757
- "@entity.lives",
1758
- [
1759
- "if",
1760
2544
  [
1761
- "and",
1762
- "@damaged",
1763
- [
1764
- ">",
1765
- "@entity.lives",
1766
- 0.0
1767
- ],
2545
+ "damageFx",
1768
2546
  [
1769
- "==",
1770
- "@entity.result",
1771
- "none"
2547
+ "if",
2548
+ [
2549
+ "and",
2550
+ "@damaged",
2551
+ [
2552
+ "==",
2553
+ "@newResult",
2554
+ "none"
2555
+ ]
2556
+ ],
2557
+ [
2558
+ {
2559
+ "id": [
2560
+ "str/concat",
2561
+ "fx-dmg-",
2562
+ "@entity.lives"
2563
+ ],
2564
+ "message": "-1",
2565
+ "ttl": 20.0,
2566
+ "type": "damage",
2567
+ "x": "@px1",
2568
+ "y": "@py3"
2569
+ }
2570
+ ],
2571
+ []
1772
2572
  ]
1773
2573
  ],
1774
- "@livesLeft",
1775
- "@entity.lives"
1776
- ]
1777
- ],
1778
- [
1779
- "set",
1780
- "@entity.player",
2574
+ [
2575
+ "winFx",
2576
+ [
2577
+ "if",
2578
+ [
2579
+ "==",
2580
+ "@newResult",
2581
+ "won"
2582
+ ],
2583
+ [
2584
+ {
2585
+ "id": "fx-win",
2586
+ "message": "You Win!",
2587
+ "ttl": 40.0,
2588
+ "type": "win",
2589
+ "x": "@px1",
2590
+ "y": "@py3"
2591
+ }
2592
+ ],
2593
+ []
2594
+ ]
2595
+ ]
2596
+ ],
1781
2597
  [
1782
- "if",
2598
+ "let",
1783
2599
  [
1784
- "and",
1785
- "@damaged",
1786
2600
  [
1787
- "==",
1788
- "@entity.result",
1789
- "none"
2601
+ "newFx",
2602
+ [
2603
+ "array/concat",
2604
+ "@entity.fx",
2605
+ [
2606
+ "array/concat",
2607
+ "@pickupFx",
2608
+ [
2609
+ "array/concat",
2610
+ "@damageFx",
2611
+ "@winFx"
2612
+ ]
2613
+ ]
2614
+ ]
1790
2615
  ]
1791
2616
  ],
1792
- {
1793
- "animation": "idle",
1794
- "facingRight": true,
1795
- "frame": 0.0,
1796
- "grounded": false,
1797
- "height": 48.0,
1798
- "vx": 0.0,
1799
- "vy": 0.0,
1800
- "width": 32.0,
1801
- "x": 80.0,
1802
- "y": 320.0
1803
- },
1804
- "@entity.player"
2617
+ [
2618
+ "do",
2619
+ [
2620
+ "set",
2621
+ "@entity.player",
2622
+ [
2623
+ "object/merge",
2624
+ "@entity.player",
2625
+ {
2626
+ "grounded": "@grounded",
2627
+ "vy": "@vy3",
2628
+ "x": "@px1",
2629
+ "y": "@py3"
2630
+ }
2631
+ ]
2632
+ ],
2633
+ [
2634
+ "set",
2635
+ "@entity.result",
2636
+ "@newResult"
2637
+ ],
2638
+ [
2639
+ "set",
2640
+ "@entity.score",
2641
+ [
2642
+ "+",
2643
+ [
2644
+ "+",
2645
+ "@entity.score",
2646
+ "@coinGain"
2647
+ ],
2648
+ [
2649
+ "if",
2650
+ [
2651
+ "!=",
2652
+ "@goalHit",
2653
+ null
2654
+ ],
2655
+ 100.0,
2656
+ 0.0
2657
+ ]
2658
+ ]
2659
+ ],
2660
+ [
2661
+ "set",
2662
+ "@entity.lives",
2663
+ [
2664
+ "if",
2665
+ [
2666
+ "and",
2667
+ "@damaged",
2668
+ [
2669
+ ">",
2670
+ "@entity.lives",
2671
+ 0.0
2672
+ ],
2673
+ [
2674
+ "==",
2675
+ "@newResult",
2676
+ "none"
2677
+ ]
2678
+ ],
2679
+ "@livesLeft",
2680
+ "@entity.lives"
2681
+ ]
2682
+ ],
2683
+ [
2684
+ "set",
2685
+ "@entity.coins",
2686
+ "@updatedCoins"
2687
+ ],
2688
+ [
2689
+ "set",
2690
+ "@entity.fx",
2691
+ "@newFx"
2692
+ ],
2693
+ [
2694
+ "set",
2695
+ "@entity.player",
2696
+ [
2697
+ "if",
2698
+ [
2699
+ "and",
2700
+ "@damaged",
2701
+ [
2702
+ "==",
2703
+ "@newResult",
2704
+ "none"
2705
+ ]
2706
+ ],
2707
+ {
2708
+ "animation": "idle",
2709
+ "facingRight": true,
2710
+ "frame": 0.0,
2711
+ "grounded": false,
2712
+ "height": 48.0,
2713
+ "vx": 0.0,
2714
+ "vy": 0.0,
2715
+ "width": 32.0,
2716
+ "x": 80.0,
2717
+ "y": 320.0
2718
+ },
2719
+ "@entity.player"
2720
+ ]
2721
+ ]
2722
+ ]
1805
2723
  ]
1806
2724
  ]
1807
2725
  ]
@@ -1869,12 +2787,12 @@
1869
2787
  ],
1870
2788
  [
1871
2789
  "set",
1872
- "@entity.effects",
2790
+ "@entity.fx",
1873
2791
  [
1874
2792
  "array/filter",
1875
2793
  [
1876
2794
  "array/map",
1877
- "@entity.effects",
2795
+ "@entity.fx",
1878
2796
  [
1879
2797
  "fn",
1880
2798
  "e",
@@ -1932,6 +2850,34 @@
1932
2850
  {
1933
2851
  "backgroundColor": "@config.bgColor",
1934
2852
  "cameraMode": "follow",
2853
+ "events": "@entity.fx",
2854
+ "features": [
2855
+ "array/map",
2856
+ [
2857
+ "array/filter",
2858
+ "@entity.coins",
2859
+ [
2860
+ "fn",
2861
+ "c",
2862
+ [
2863
+ "==",
2864
+ "@c.taken",
2865
+ false
2866
+ ]
2867
+ ]
2868
+ ],
2869
+ [
2870
+ "fn",
2871
+ "c",
2872
+ {
2873
+ "assetUrl": "@config.coinSprite",
2874
+ "id": "@c.id",
2875
+ "type": "coin",
2876
+ "x": "@c.x",
2877
+ "y": "@c.y"
2878
+ }
2879
+ ]
2880
+ ],
1935
2881
  "interpolateUnits": true,
1936
2882
  "keyMap": {
1937
2883
  "ArrowLeft": "LEFT",
@@ -2035,6 +2981,7 @@
2035
2981
  }
2036
2982
  },
2037
2983
  "directionEvents": {
2984
+ "down": "STOP",
2038
2985
  "left": "LEFT",
2039
2986
  "right": "RIGHT",
2040
2987
  "up": "JUMP"
@@ -2076,6 +3023,11 @@
2076
3023
  }
2077
3024
  ]
2078
3025
  ],
3026
+ "guard": [
3027
+ "==",
3028
+ "@entity.result",
3029
+ "none"
3030
+ ],
2079
3031
  "interval": 100.0,
2080
3032
  "name": "animTick"
2081
3033
  }