@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": "SkateparkBoard3D — 3D side-view skate run: player/platforms pixel physics, keyMap/d-pad, follow camera, GLB skater clips.",
2
+ "description": "SkateparkBoard3D — 3D side-view skate run: jump the pit, dodge the rail hazard, grab-trick in the air for score, reach the deck.",
3
3
  "name": "ui-skatepark-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/_shared/kenney-prototype-kit/features/coin.glb",
335
+ "variant": ""
336
+ },
337
+ "description": "Collectible coin GLB Asset rendered above ledges 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": "Skate level: a pit between two floors to jump, ledges to grind, a rail hazard on the path, and a raised goal deck",
331
495
  "items": {
332
496
  "properties": {
333
497
  "height": {
@@ -374,6 +538,7 @@
374
538
  "skate-stand",
375
539
  "skate",
376
540
  "skate-air",
541
+ "skate-grab",
377
542
  "idle",
378
543
  "jump",
379
544
  "fall"
@@ -590,6 +755,13 @@
590
755
  "tier": "presentation",
591
756
  "type": "Map<string,Asset>"
592
757
  },
758
+ "trickScore": {
759
+ "default": 50.0,
760
+ "description": "Points awarded per airborne grab-trick",
761
+ "label": "Trick Score",
762
+ "tier": "presentation",
763
+ "type": "number"
764
+ },
593
765
  "worldHeight": {
594
766
  "default": 400.0,
595
767
  "description": "World pixel height",
@@ -697,6 +869,18 @@
697
869
  "scope": "external",
698
870
  "tier": "domain"
699
871
  },
872
+ {
873
+ "description": "Grab-trick intent while airborne (keyboard KeyJ/KeyK or d-pad Trick button) — awards score + fx",
874
+ "event": "TRICK",
875
+ "payloadSchema": [
876
+ {
877
+ "name": "id",
878
+ "type": "string"
879
+ }
880
+ ],
881
+ "scope": "external",
882
+ "tier": "domain"
883
+ },
700
884
  {
701
885
  "description": "Stop-horizontal intent (keyboard keyUpMap or d-pad directionReleaseEvents)",
702
886
  "event": "STOP",
@@ -724,7 +908,8 @@
724
908
  ],
725
909
  "entityContract": {
726
910
  "provides": [
727
- "effects",
911
+ "coins",
912
+ "fx",
728
913
  "goalX",
729
914
  "level",
730
915
  "lives",
@@ -784,6 +969,18 @@
784
969
  ],
785
970
  "tier": "domain"
786
971
  },
972
+ {
973
+ "description": "Grab-trick intent while airborne (keyboard KeyJ/KeyK or d-pad Trick button) — awards score + fx",
974
+ "key": "TRICK",
975
+ "name": "Trick",
976
+ "payloadSchema": [
977
+ {
978
+ "name": "id",
979
+ "type": "string"
980
+ }
981
+ ],
982
+ "tier": "domain"
983
+ },
787
984
  {
788
985
  "description": "Stop-horizontal intent (keyboard keyUpMap or d-pad directionReleaseEvents)",
789
986
  "key": "STOP",
@@ -901,9 +1098,39 @@
901
1098
  ],
902
1099
  [
903
1100
  "set",
904
- "@entity.effects",
1101
+ "@entity.fx",
905
1102
  []
906
1103
  ],
1104
+ [
1105
+ "set",
1106
+ "@entity.coins",
1107
+ [
1108
+ {
1109
+ "id": "coin-1",
1110
+ "taken": false,
1111
+ "x": 200.0,
1112
+ "y": 250.0
1113
+ },
1114
+ {
1115
+ "id": "coin-2",
1116
+ "taken": false,
1117
+ "x": 350.0,
1118
+ "y": 300.0
1119
+ },
1120
+ {
1121
+ "id": "coin-3",
1122
+ "taken": false,
1123
+ "x": 390.0,
1124
+ "y": 280.0
1125
+ },
1126
+ {
1127
+ "id": "coin-4",
1128
+ "taken": false,
1129
+ "x": 470.0,
1130
+ "y": 190.0
1131
+ }
1132
+ ]
1133
+ ],
907
1134
  [
908
1135
  "set",
909
1136
  "@entity.player",
@@ -957,6 +1184,34 @@
957
1184
  {
958
1185
  "backgroundColor": "@config.bgColor",
959
1186
  "cameraMode": "follow",
1187
+ "events": "@entity.fx",
1188
+ "features": [
1189
+ "array/map",
1190
+ [
1191
+ "array/filter",
1192
+ "@entity.coins",
1193
+ [
1194
+ "fn",
1195
+ "c",
1196
+ [
1197
+ "==",
1198
+ "@c.taken",
1199
+ false
1200
+ ]
1201
+ ]
1202
+ ],
1203
+ [
1204
+ "fn",
1205
+ "c",
1206
+ {
1207
+ "assetUrl": "@config.coinSprite",
1208
+ "id": "@c.id",
1209
+ "type": "coin",
1210
+ "x": "@c.x",
1211
+ "y": "@c.y"
1212
+ }
1213
+ ]
1214
+ ],
960
1215
  "interpolateUnits": true,
961
1216
  "keyMap": {
962
1217
  "ArrowLeft": "LEFT",
@@ -964,6 +1219,8 @@
964
1219
  "ArrowUp": "JUMP",
965
1220
  "KeyA": "LEFT",
966
1221
  "KeyD": "RIGHT",
1222
+ "KeyJ": "TRICK",
1223
+ "KeyK": "TRICK",
967
1224
  "KeyW": "JUMP",
968
1225
  "Space": "JUMP"
969
1226
  },
@@ -1060,6 +1317,7 @@
1060
1317
  }
1061
1318
  },
1062
1319
  "directionEvents": {
1320
+ "down": "STOP",
1063
1321
  "left": "LEFT",
1064
1322
  "right": "RIGHT",
1065
1323
  "up": "JUMP"
@@ -1071,6 +1329,12 @@
1071
1329
  "kind": "dpad",
1072
1330
  "type": "control-grid"
1073
1331
  },
1332
+ {
1333
+ "action": "TRICK",
1334
+ "label": "Trick",
1335
+ "type": "button",
1336
+ "variant": "primary"
1337
+ },
1074
1338
  {
1075
1339
  "action": "PLAY_AGAIN",
1076
1340
  "label": "Restart",
@@ -1196,6 +1460,70 @@
1196
1460
  ],
1197
1461
  "to": "playing"
1198
1462
  },
1463
+ {
1464
+ "effects": [
1465
+ [
1466
+ "set",
1467
+ "@entity.player",
1468
+ [
1469
+ "object/merge",
1470
+ "@entity.player",
1471
+ {
1472
+ "animation": "skate-grab"
1473
+ }
1474
+ ]
1475
+ ],
1476
+ [
1477
+ "set",
1478
+ "@entity.score",
1479
+ [
1480
+ "+",
1481
+ "@entity.score",
1482
+ "@config.trickScore"
1483
+ ]
1484
+ ],
1485
+ [
1486
+ "set",
1487
+ "@entity.fx",
1488
+ [
1489
+ "array/append",
1490
+ "@entity.fx",
1491
+ {
1492
+ "id": [
1493
+ "str/concat",
1494
+ "fx-trick-",
1495
+ "@entity.score"
1496
+ ],
1497
+ "message": [
1498
+ "str/concat",
1499
+ "+",
1500
+ "@config.trickScore"
1501
+ ],
1502
+ "ttl": 25.0,
1503
+ "type": "score",
1504
+ "x": "@entity.player.x",
1505
+ "y": "@entity.player.y"
1506
+ }
1507
+ ]
1508
+ ]
1509
+ ],
1510
+ "event": "TRICK",
1511
+ "from": "playing",
1512
+ "guard": [
1513
+ "and",
1514
+ [
1515
+ "==",
1516
+ "@entity.result",
1517
+ "none"
1518
+ ],
1519
+ [
1520
+ "==",
1521
+ "@entity.player.grounded",
1522
+ false
1523
+ ]
1524
+ ],
1525
+ "to": "playing"
1526
+ },
1199
1527
  {
1200
1528
  "effects": [
1201
1529
  [
@@ -1254,47 +1582,507 @@
1254
1582
  "from": "playing",
1255
1583
  "to": "playing"
1256
1584
  },
1257
- {
1258
- "event": "GAME_END",
1259
- "from": "playing",
1260
- "guard": [
1261
- "==",
1262
- "@entity.result",
1263
- "won"
1264
- ],
1265
- "to": "won"
1266
- },
1267
- {
1268
- "event": "GAME_END",
1269
- "from": "playing",
1270
- "guard": [
1271
- "==",
1272
- "@entity.result",
1273
- "lost"
1274
- ],
1275
- "to": "lost"
1276
- },
1277
1585
  {
1278
1586
  "effects": [
1279
1587
  [
1280
- "set",
1281
- "@entity.level",
1282
- [
1283
- "+",
1284
- "@entity.level",
1285
- 1.0
1286
- ]
1287
- ],
1288
- [
1289
- "set",
1290
- "@entity.result",
1291
- "none"
1588
+ "render-ui",
1589
+ "main",
1590
+ {
1591
+ "backgroundAsset": {
1592
+ "animations": [],
1593
+ "aspect": "1:1",
1594
+ "atlas": "https://almadar-kflow-assets.web.app/shared/_shared/kenney-ui-adventure-pack/ui/uipack_rpg_sheet.json",
1595
+ "category": "ui",
1596
+ "dimension": "2d",
1597
+ "name": "panel",
1598
+ "role": "ui",
1599
+ "sprite": "panelInset_beige.png",
1600
+ "style": "vector-flat",
1601
+ "thumbnailUrl": "",
1602
+ "url": "https://almadar-kflow-assets.web.app/shared/_shared/kenney-ui-adventure-pack/ui/uipack_rpg_sheet.png",
1603
+ "variant": ""
1604
+ },
1605
+ "children": [
1606
+ {
1607
+ "backgroundColor": "@config.bgColor",
1608
+ "cameraMode": "follow",
1609
+ "events": "@entity.fx",
1610
+ "features": [
1611
+ "array/map",
1612
+ [
1613
+ "array/filter",
1614
+ "@entity.coins",
1615
+ [
1616
+ "fn",
1617
+ "c",
1618
+ [
1619
+ "==",
1620
+ "@c.taken",
1621
+ false
1622
+ ]
1623
+ ]
1624
+ ],
1625
+ [
1626
+ "fn",
1627
+ "c",
1628
+ {
1629
+ "assetUrl": "@config.coinSprite",
1630
+ "id": "@c.id",
1631
+ "type": "coin",
1632
+ "x": "@c.x",
1633
+ "y": "@c.y"
1634
+ }
1635
+ ]
1636
+ ],
1637
+ "interpolateUnits": true,
1638
+ "keyMap": {
1639
+ "ArrowLeft": "LEFT",
1640
+ "ArrowRight": "RIGHT",
1641
+ "ArrowUp": "JUMP",
1642
+ "KeyA": "LEFT",
1643
+ "KeyD": "RIGHT",
1644
+ "KeyJ": "TRICK",
1645
+ "KeyK": "TRICK",
1646
+ "KeyW": "JUMP",
1647
+ "Space": "JUMP"
1648
+ },
1649
+ "keyUpMap": {
1650
+ "ArrowLeft": "STOP",
1651
+ "ArrowRight": "STOP",
1652
+ "KeyA": "STOP",
1653
+ "KeyD": "STOP"
1654
+ },
1655
+ "pixelsPerUnit": 32.0,
1656
+ "platforms": "@config.platforms",
1657
+ "player": "@entity.player",
1658
+ "playerSprite": "@config.playerSprite",
1659
+ "tileClickEvent": "TILE_CLICK",
1660
+ "tileSprites": "@config.tileSprites",
1661
+ "type": "game-canvas-3d",
1662
+ "unitClickEvent": "UNIT_CLICK",
1663
+ "worldHeight": "@entity.worldHeight",
1664
+ "worldWidth": "@entity.worldWidth"
1665
+ }
1666
+ ],
1667
+ "hud": {
1668
+ "children": [
1669
+ {
1670
+ "stats": [
1671
+ {
1672
+ "label": "Score",
1673
+ "value": "@entity.score"
1674
+ },
1675
+ {
1676
+ "label": "Lives",
1677
+ "value": "@entity.lives"
1678
+ }
1679
+ ],
1680
+ "type": "game-hud"
1681
+ },
1682
+ {
1683
+ "directionAssets": {
1684
+ "down": {
1685
+ "animations": [],
1686
+ "aspect": "1:1",
1687
+ "atlas": "https://almadar-kflow-assets.web.app/shared/_shared/kenney-input-prompts/ui/generic_sheet_default.json",
1688
+ "category": "ui",
1689
+ "dimension": "2d",
1690
+ "name": "stick-down",
1691
+ "role": "ui",
1692
+ "sprite": "generic_stick_down",
1693
+ "style": "vector-flat",
1694
+ "thumbnailUrl": "",
1695
+ "url": "https://almadar-kflow-assets.web.app/shared/_shared/kenney-input-prompts/ui/generic_sheet_default.png",
1696
+ "variant": ""
1697
+ },
1698
+ "left": {
1699
+ "animations": [],
1700
+ "aspect": "1:1",
1701
+ "atlas": "https://almadar-kflow-assets.web.app/shared/_shared/kenney-input-prompts/ui/generic_sheet_default.json",
1702
+ "category": "ui",
1703
+ "dimension": "2d",
1704
+ "name": "stick-left",
1705
+ "role": "ui",
1706
+ "sprite": "generic_stick_left",
1707
+ "style": "vector-flat",
1708
+ "thumbnailUrl": "",
1709
+ "url": "https://almadar-kflow-assets.web.app/shared/_shared/kenney-input-prompts/ui/generic_sheet_default.png",
1710
+ "variant": ""
1711
+ },
1712
+ "right": {
1713
+ "animations": [],
1714
+ "aspect": "1:1",
1715
+ "atlas": "https://almadar-kflow-assets.web.app/shared/_shared/kenney-input-prompts/ui/generic_sheet_default.json",
1716
+ "category": "ui",
1717
+ "dimension": "2d",
1718
+ "name": "stick-right",
1719
+ "role": "ui",
1720
+ "sprite": "generic_stick_right",
1721
+ "style": "vector-flat",
1722
+ "thumbnailUrl": "",
1723
+ "url": "https://almadar-kflow-assets.web.app/shared/_shared/kenney-input-prompts/ui/generic_sheet_default.png",
1724
+ "variant": ""
1725
+ },
1726
+ "up": {
1727
+ "animations": [],
1728
+ "aspect": "1:1",
1729
+ "atlas": "https://almadar-kflow-assets.web.app/shared/_shared/kenney-input-prompts/ui/generic_sheet_default.json",
1730
+ "category": "ui",
1731
+ "dimension": "2d",
1732
+ "name": "stick-up",
1733
+ "role": "ui",
1734
+ "sprite": "generic_stick_up",
1735
+ "style": "vector-flat",
1736
+ "thumbnailUrl": "",
1737
+ "url": "https://almadar-kflow-assets.web.app/shared/_shared/kenney-input-prompts/ui/generic_sheet_default.png",
1738
+ "variant": ""
1739
+ }
1740
+ },
1741
+ "directionEvents": {
1742
+ "down": "STOP",
1743
+ "left": "LEFT",
1744
+ "right": "RIGHT",
1745
+ "up": "JUMP"
1746
+ },
1747
+ "directionReleaseEvents": {
1748
+ "left": "STOP",
1749
+ "right": "STOP"
1750
+ },
1751
+ "kind": "dpad",
1752
+ "type": "control-grid"
1753
+ },
1754
+ {
1755
+ "action": "PLAY_AGAIN",
1756
+ "label": "Restart",
1757
+ "type": "button",
1758
+ "variant": "secondary"
1759
+ }
1760
+ ],
1761
+ "direction": "horizontal",
1762
+ "gap": "md",
1763
+ "justify": "between",
1764
+ "type": "stack"
1765
+ },
1766
+ "hudBackgroundAsset": {
1767
+ "animations": [],
1768
+ "aspect": "1:1",
1769
+ "atlas": "https://almadar-kflow-assets.web.app/shared/_shared/kenney-ui-adventure-pack/ui/uipack_rpg_sheet.json",
1770
+ "category": "ui",
1771
+ "dimension": "2d",
1772
+ "name": "hud-panel",
1773
+ "role": "ui",
1774
+ "sprite": "panelInset_beigeLight.png",
1775
+ "style": "vector-flat",
1776
+ "thumbnailUrl": "",
1777
+ "url": "https://almadar-kflow-assets.web.app/shared/_shared/kenney-ui-adventure-pack/ui/uipack_rpg_sheet.png",
1778
+ "variant": ""
1779
+ },
1780
+ "overlay": {
1781
+ "options": [
1782
+ {
1783
+ "event": "PLAY_AGAIN",
1784
+ "id": "again",
1785
+ "label": "Skate Again",
1786
+ "variant": "primary"
1787
+ }
1788
+ ],
1789
+ "subtitle": [
1790
+ "str/concat",
1791
+ "Score: ",
1792
+ "@entity.score"
1793
+ ],
1794
+ "title": "RUN LANDED!",
1795
+ "type": "game-menu"
1796
+ },
1797
+ "type": "game-shell"
1798
+ }
1799
+ ]
1800
+ ],
1801
+ "event": "GAME_END",
1802
+ "from": "playing",
1803
+ "guard": [
1804
+ "==",
1805
+ "@entity.result",
1806
+ "won"
1807
+ ],
1808
+ "to": "won"
1809
+ },
1810
+ {
1811
+ "effects": [
1812
+ [
1813
+ "render-ui",
1814
+ "main",
1815
+ {
1816
+ "backgroundAsset": {
1817
+ "animations": [],
1818
+ "aspect": "1:1",
1819
+ "atlas": "https://almadar-kflow-assets.web.app/shared/_shared/kenney-ui-adventure-pack/ui/uipack_rpg_sheet.json",
1820
+ "category": "ui",
1821
+ "dimension": "2d",
1822
+ "name": "panel",
1823
+ "role": "ui",
1824
+ "sprite": "panelInset_beige.png",
1825
+ "style": "vector-flat",
1826
+ "thumbnailUrl": "",
1827
+ "url": "https://almadar-kflow-assets.web.app/shared/_shared/kenney-ui-adventure-pack/ui/uipack_rpg_sheet.png",
1828
+ "variant": ""
1829
+ },
1830
+ "children": [
1831
+ {
1832
+ "backgroundColor": "@config.bgColor",
1833
+ "cameraMode": "follow",
1834
+ "events": "@entity.fx",
1835
+ "features": [
1836
+ "array/map",
1837
+ [
1838
+ "array/filter",
1839
+ "@entity.coins",
1840
+ [
1841
+ "fn",
1842
+ "c",
1843
+ [
1844
+ "==",
1845
+ "@c.taken",
1846
+ false
1847
+ ]
1848
+ ]
1849
+ ],
1850
+ [
1851
+ "fn",
1852
+ "c",
1853
+ {
1854
+ "assetUrl": "@config.coinSprite",
1855
+ "id": "@c.id",
1856
+ "type": "coin",
1857
+ "x": "@c.x",
1858
+ "y": "@c.y"
1859
+ }
1860
+ ]
1861
+ ],
1862
+ "interpolateUnits": true,
1863
+ "keyMap": {
1864
+ "ArrowLeft": "LEFT",
1865
+ "ArrowRight": "RIGHT",
1866
+ "ArrowUp": "JUMP",
1867
+ "KeyA": "LEFT",
1868
+ "KeyD": "RIGHT",
1869
+ "KeyJ": "TRICK",
1870
+ "KeyK": "TRICK",
1871
+ "KeyW": "JUMP",
1872
+ "Space": "JUMP"
1873
+ },
1874
+ "keyUpMap": {
1875
+ "ArrowLeft": "STOP",
1876
+ "ArrowRight": "STOP",
1877
+ "KeyA": "STOP",
1878
+ "KeyD": "STOP"
1879
+ },
1880
+ "pixelsPerUnit": 32.0,
1881
+ "platforms": "@config.platforms",
1882
+ "player": "@entity.player",
1883
+ "playerSprite": "@config.playerSprite",
1884
+ "tileClickEvent": "TILE_CLICK",
1885
+ "tileSprites": "@config.tileSprites",
1886
+ "type": "game-canvas-3d",
1887
+ "unitClickEvent": "UNIT_CLICK",
1888
+ "worldHeight": "@entity.worldHeight",
1889
+ "worldWidth": "@entity.worldWidth"
1890
+ }
1891
+ ],
1892
+ "hud": {
1893
+ "children": [
1894
+ {
1895
+ "stats": [
1896
+ {
1897
+ "label": "Score",
1898
+ "value": "@entity.score"
1899
+ },
1900
+ {
1901
+ "label": "Lives",
1902
+ "value": "@entity.lives"
1903
+ }
1904
+ ],
1905
+ "type": "game-hud"
1906
+ },
1907
+ {
1908
+ "directionAssets": {
1909
+ "down": {
1910
+ "animations": [],
1911
+ "aspect": "1:1",
1912
+ "atlas": "https://almadar-kflow-assets.web.app/shared/_shared/kenney-input-prompts/ui/generic_sheet_default.json",
1913
+ "category": "ui",
1914
+ "dimension": "2d",
1915
+ "name": "stick-down",
1916
+ "role": "ui",
1917
+ "sprite": "generic_stick_down",
1918
+ "style": "vector-flat",
1919
+ "thumbnailUrl": "",
1920
+ "url": "https://almadar-kflow-assets.web.app/shared/_shared/kenney-input-prompts/ui/generic_sheet_default.png",
1921
+ "variant": ""
1922
+ },
1923
+ "left": {
1924
+ "animations": [],
1925
+ "aspect": "1:1",
1926
+ "atlas": "https://almadar-kflow-assets.web.app/shared/_shared/kenney-input-prompts/ui/generic_sheet_default.json",
1927
+ "category": "ui",
1928
+ "dimension": "2d",
1929
+ "name": "stick-left",
1930
+ "role": "ui",
1931
+ "sprite": "generic_stick_left",
1932
+ "style": "vector-flat",
1933
+ "thumbnailUrl": "",
1934
+ "url": "https://almadar-kflow-assets.web.app/shared/_shared/kenney-input-prompts/ui/generic_sheet_default.png",
1935
+ "variant": ""
1936
+ },
1937
+ "right": {
1938
+ "animations": [],
1939
+ "aspect": "1:1",
1940
+ "atlas": "https://almadar-kflow-assets.web.app/shared/_shared/kenney-input-prompts/ui/generic_sheet_default.json",
1941
+ "category": "ui",
1942
+ "dimension": "2d",
1943
+ "name": "stick-right",
1944
+ "role": "ui",
1945
+ "sprite": "generic_stick_right",
1946
+ "style": "vector-flat",
1947
+ "thumbnailUrl": "",
1948
+ "url": "https://almadar-kflow-assets.web.app/shared/_shared/kenney-input-prompts/ui/generic_sheet_default.png",
1949
+ "variant": ""
1950
+ },
1951
+ "up": {
1952
+ "animations": [],
1953
+ "aspect": "1:1",
1954
+ "atlas": "https://almadar-kflow-assets.web.app/shared/_shared/kenney-input-prompts/ui/generic_sheet_default.json",
1955
+ "category": "ui",
1956
+ "dimension": "2d",
1957
+ "name": "stick-up",
1958
+ "role": "ui",
1959
+ "sprite": "generic_stick_up",
1960
+ "style": "vector-flat",
1961
+ "thumbnailUrl": "",
1962
+ "url": "https://almadar-kflow-assets.web.app/shared/_shared/kenney-input-prompts/ui/generic_sheet_default.png",
1963
+ "variant": ""
1964
+ }
1965
+ },
1966
+ "directionEvents": {
1967
+ "down": "STOP",
1968
+ "left": "LEFT",
1969
+ "right": "RIGHT",
1970
+ "up": "JUMP"
1971
+ },
1972
+ "directionReleaseEvents": {
1973
+ "left": "STOP",
1974
+ "right": "STOP"
1975
+ },
1976
+ "kind": "dpad",
1977
+ "type": "control-grid"
1978
+ },
1979
+ {
1980
+ "action": "PLAY_AGAIN",
1981
+ "label": "Restart",
1982
+ "type": "button",
1983
+ "variant": "secondary"
1984
+ }
1985
+ ],
1986
+ "direction": "horizontal",
1987
+ "gap": "md",
1988
+ "justify": "between",
1989
+ "type": "stack"
1990
+ },
1991
+ "hudBackgroundAsset": {
1992
+ "animations": [],
1993
+ "aspect": "1:1",
1994
+ "atlas": "https://almadar-kflow-assets.web.app/shared/_shared/kenney-ui-adventure-pack/ui/uipack_rpg_sheet.json",
1995
+ "category": "ui",
1996
+ "dimension": "2d",
1997
+ "name": "hud-panel",
1998
+ "role": "ui",
1999
+ "sprite": "panelInset_beigeLight.png",
2000
+ "style": "vector-flat",
2001
+ "thumbnailUrl": "",
2002
+ "url": "https://almadar-kflow-assets.web.app/shared/_shared/kenney-ui-adventure-pack/ui/uipack_rpg_sheet.png",
2003
+ "variant": ""
2004
+ },
2005
+ "overlay": {
2006
+ "options": [
2007
+ {
2008
+ "event": "PLAY_AGAIN",
2009
+ "id": "again",
2010
+ "label": "Skate Again",
2011
+ "variant": "primary"
2012
+ }
2013
+ ],
2014
+ "subtitle": [
2015
+ "str/concat",
2016
+ "Score: ",
2017
+ "@entity.score"
2018
+ ],
2019
+ "title": "WIPEOUT!",
2020
+ "type": "game-menu"
2021
+ },
2022
+ "type": "game-shell"
2023
+ }
2024
+ ]
2025
+ ],
2026
+ "event": "GAME_END",
2027
+ "from": "playing",
2028
+ "guard": [
2029
+ "==",
2030
+ "@entity.result",
2031
+ "lost"
2032
+ ],
2033
+ "to": "lost"
2034
+ },
2035
+ {
2036
+ "effects": [
2037
+ [
2038
+ "set",
2039
+ "@entity.level",
2040
+ [
2041
+ "+",
2042
+ "@entity.level",
2043
+ 1.0
2044
+ ]
2045
+ ],
2046
+ [
2047
+ "set",
2048
+ "@entity.result",
2049
+ "none"
1292
2050
  ],
1293
2051
  [
1294
2052
  "set",
1295
- "@entity.effects",
2053
+ "@entity.fx",
1296
2054
  []
1297
2055
  ],
2056
+ [
2057
+ "set",
2058
+ "@entity.coins",
2059
+ [
2060
+ {
2061
+ "id": "coin-1",
2062
+ "taken": false,
2063
+ "x": 200.0,
2064
+ "y": 250.0
2065
+ },
2066
+ {
2067
+ "id": "coin-2",
2068
+ "taken": false,
2069
+ "x": 350.0,
2070
+ "y": 300.0
2071
+ },
2072
+ {
2073
+ "id": "coin-3",
2074
+ "taken": false,
2075
+ "x": 390.0,
2076
+ "y": 280.0
2077
+ },
2078
+ {
2079
+ "id": "coin-4",
2080
+ "taken": false,
2081
+ "x": 470.0,
2082
+ "y": 190.0
2083
+ }
2084
+ ]
2085
+ ],
1298
2086
  [
1299
2087
  "set",
1300
2088
  "@entity.player",
@@ -1340,9 +2128,39 @@
1340
2128
  ],
1341
2129
  [
1342
2130
  "set",
1343
- "@entity.effects",
2131
+ "@entity.fx",
1344
2132
  []
1345
2133
  ],
2134
+ [
2135
+ "set",
2136
+ "@entity.coins",
2137
+ [
2138
+ {
2139
+ "id": "coin-1",
2140
+ "taken": false,
2141
+ "x": 200.0,
2142
+ "y": 250.0
2143
+ },
2144
+ {
2145
+ "id": "coin-2",
2146
+ "taken": false,
2147
+ "x": 350.0,
2148
+ "y": 300.0
2149
+ },
2150
+ {
2151
+ "id": "coin-3",
2152
+ "taken": false,
2153
+ "x": 390.0,
2154
+ "y": 280.0
2155
+ },
2156
+ {
2157
+ "id": "coin-4",
2158
+ "taken": false,
2159
+ "x": 470.0,
2160
+ "y": 190.0
2161
+ }
2162
+ ]
2163
+ ],
1346
2164
  [
1347
2165
  "set",
1348
2166
  "@entity.player",
@@ -1670,9 +2488,13 @@
1670
2488
  [
1671
2489
  "fell",
1672
2490
  [
1673
- ">",
1674
- "@py3",
1675
- "@entity.worldHeight"
2491
+ "and",
2492
+ "@atGround",
2493
+ [
2494
+ "==",
2495
+ "@landed",
2496
+ false
2497
+ ]
1676
2498
  ]
1677
2499
  ]
1678
2500
  ],
@@ -1693,116 +2515,320 @@
1693
2515
  ]
1694
2516
  ],
1695
2517
  [
1696
- "do",
2518
+ "let",
1697
2519
  [
1698
- "set",
1699
- "@entity.player",
1700
2520
  [
1701
- "object/merge",
1702
- "@entity.player",
1703
- {
1704
- "grounded": "@grounded",
1705
- "vy": "@vy3",
1706
- "x": "@px1",
1707
- "y": "@py3"
1708
- }
1709
- ]
1710
- ],
1711
- [
1712
- "set",
1713
- "@entity.result",
1714
- [
1715
- "if",
2521
+ "coinHits",
1716
2522
  [
1717
- "!=",
1718
- "@goalHit",
1719
- null
1720
- ],
1721
- "won",
2523
+ "array/filter",
2524
+ "@entity.coins",
2525
+ [
2526
+ "fn",
2527
+ "c",
2528
+ [
2529
+ "and",
2530
+ [
2531
+ "==",
2532
+ "@c.taken",
2533
+ false
2534
+ ],
2535
+ [
2536
+ "geo/aabb-overlap",
2537
+ "@playerRect",
2538
+ {
2539
+ "h": 24.0,
2540
+ "w": 24.0,
2541
+ "x": "@c.x",
2542
+ "y": "@c.y"
2543
+ }
2544
+ ]
2545
+ ]
2546
+ ]
2547
+ ]
2548
+ ],
2549
+ [
2550
+ "updatedCoins",
1722
2551
  [
1723
- "if",
2552
+ "array/map",
2553
+ "@entity.coins",
1724
2554
  [
1725
- "and",
1726
- "@damaged",
2555
+ "fn",
2556
+ "c",
1727
2557
  [
1728
- "<=",
1729
- "@livesLeft",
1730
- 0.0
2558
+ "if",
2559
+ [
2560
+ "and",
2561
+ [
2562
+ "==",
2563
+ "@c.taken",
2564
+ false
2565
+ ],
2566
+ [
2567
+ "geo/aabb-overlap",
2568
+ "@playerRect",
2569
+ {
2570
+ "h": 24.0,
2571
+ "w": 24.0,
2572
+ "x": "@c.x",
2573
+ "y": "@c.y"
2574
+ }
2575
+ ]
2576
+ ],
2577
+ [
2578
+ "object/merge",
2579
+ "@c",
2580
+ {
2581
+ "taken": true
2582
+ }
2583
+ ],
2584
+ "@c"
1731
2585
  ]
2586
+ ]
2587
+ ]
2588
+ ],
2589
+ [
2590
+ "newResult",
2591
+ [
2592
+ "if",
2593
+ [
2594
+ "!=",
2595
+ "@goalHit",
2596
+ null
1732
2597
  ],
1733
- "lost",
1734
- "none"
2598
+ "won",
2599
+ [
2600
+ "if",
2601
+ [
2602
+ "and",
2603
+ "@damaged",
2604
+ [
2605
+ "<=",
2606
+ "@livesLeft",
2607
+ 0.0
2608
+ ]
2609
+ ],
2610
+ "lost",
2611
+ "none"
2612
+ ]
1735
2613
  ]
1736
2614
  ]
1737
2615
  ],
1738
2616
  [
1739
- "set",
1740
- "@entity.score",
2617
+ "let",
1741
2618
  [
1742
- "if",
1743
2619
  [
1744
- "!=",
1745
- "@goalHit",
1746
- null
2620
+ "coinGain",
2621
+ [
2622
+ "*",
2623
+ [
2624
+ "array/len",
2625
+ "@coinHits"
2626
+ ],
2627
+ 10.0
2628
+ ]
1747
2629
  ],
1748
2630
  [
1749
- "+",
1750
- "@entity.score",
1751
- 100.0
2631
+ "pickupFx",
2632
+ [
2633
+ "array/map",
2634
+ "@coinHits",
2635
+ [
2636
+ "fn",
2637
+ "c",
2638
+ {
2639
+ "id": [
2640
+ "str/concat",
2641
+ "fx-coin-",
2642
+ "@c.id"
2643
+ ],
2644
+ "message": "+10",
2645
+ "ttl": 20.0,
2646
+ "type": "pickup",
2647
+ "x": "@c.x",
2648
+ "y": "@c.y"
2649
+ }
2650
+ ]
2651
+ ]
1752
2652
  ],
1753
- "@entity.score"
1754
- ]
1755
- ],
1756
- [
1757
- "set",
1758
- "@entity.lives",
1759
- [
1760
- "if",
1761
2653
  [
1762
- "and",
1763
- "@damaged",
1764
- [
1765
- ">",
1766
- "@entity.lives",
1767
- 0.0
1768
- ],
2654
+ "damageFx",
1769
2655
  [
1770
- "==",
1771
- "@entity.result",
1772
- "none"
2656
+ "if",
2657
+ [
2658
+ "and",
2659
+ "@damaged",
2660
+ [
2661
+ "==",
2662
+ "@newResult",
2663
+ "none"
2664
+ ]
2665
+ ],
2666
+ [
2667
+ {
2668
+ "id": [
2669
+ "str/concat",
2670
+ "fx-dmg-",
2671
+ "@entity.lives"
2672
+ ],
2673
+ "message": "-1",
2674
+ "ttl": 20.0,
2675
+ "type": "damage",
2676
+ "x": "@px1",
2677
+ "y": "@py3"
2678
+ }
2679
+ ],
2680
+ []
1773
2681
  ]
1774
2682
  ],
1775
- "@livesLeft",
1776
- "@entity.lives"
1777
- ]
1778
- ],
1779
- [
1780
- "set",
1781
- "@entity.player",
2683
+ [
2684
+ "winFx",
2685
+ [
2686
+ "if",
2687
+ [
2688
+ "==",
2689
+ "@newResult",
2690
+ "won"
2691
+ ],
2692
+ [
2693
+ {
2694
+ "id": "fx-win",
2695
+ "message": "Landed!",
2696
+ "ttl": 40.0,
2697
+ "type": "win",
2698
+ "x": "@px1",
2699
+ "y": "@py3"
2700
+ }
2701
+ ],
2702
+ []
2703
+ ]
2704
+ ]
2705
+ ],
1782
2706
  [
1783
- "if",
2707
+ "let",
1784
2708
  [
1785
- "and",
1786
- "@damaged",
1787
2709
  [
1788
- "==",
1789
- "@entity.result",
1790
- "none"
2710
+ "newFx",
2711
+ [
2712
+ "array/concat",
2713
+ "@entity.fx",
2714
+ [
2715
+ "array/concat",
2716
+ "@pickupFx",
2717
+ [
2718
+ "array/concat",
2719
+ "@damageFx",
2720
+ "@winFx"
2721
+ ]
2722
+ ]
2723
+ ]
1791
2724
  ]
1792
2725
  ],
1793
- {
1794
- "animation": "skate-stand",
1795
- "facingRight": true,
1796
- "frame": 0.0,
1797
- "grounded": false,
1798
- "height": 48.0,
1799
- "vx": 0.0,
1800
- "vy": 0.0,
1801
- "width": 32.0,
1802
- "x": 80.0,
1803
- "y": 320.0
1804
- },
1805
- "@entity.player"
2726
+ [
2727
+ "do",
2728
+ [
2729
+ "set",
2730
+ "@entity.player",
2731
+ [
2732
+ "object/merge",
2733
+ "@entity.player",
2734
+ {
2735
+ "grounded": "@grounded",
2736
+ "vy": "@vy3",
2737
+ "x": "@px1",
2738
+ "y": "@py3"
2739
+ }
2740
+ ]
2741
+ ],
2742
+ [
2743
+ "set",
2744
+ "@entity.result",
2745
+ "@newResult"
2746
+ ],
2747
+ [
2748
+ "set",
2749
+ "@entity.score",
2750
+ [
2751
+ "+",
2752
+ [
2753
+ "+",
2754
+ "@entity.score",
2755
+ "@coinGain"
2756
+ ],
2757
+ [
2758
+ "if",
2759
+ [
2760
+ "!=",
2761
+ "@goalHit",
2762
+ null
2763
+ ],
2764
+ 100.0,
2765
+ 0.0
2766
+ ]
2767
+ ]
2768
+ ],
2769
+ [
2770
+ "set",
2771
+ "@entity.lives",
2772
+ [
2773
+ "if",
2774
+ [
2775
+ "and",
2776
+ "@damaged",
2777
+ [
2778
+ ">",
2779
+ "@entity.lives",
2780
+ 0.0
2781
+ ],
2782
+ [
2783
+ "==",
2784
+ "@newResult",
2785
+ "none"
2786
+ ]
2787
+ ],
2788
+ "@livesLeft",
2789
+ "@entity.lives"
2790
+ ]
2791
+ ],
2792
+ [
2793
+ "set",
2794
+ "@entity.coins",
2795
+ "@updatedCoins"
2796
+ ],
2797
+ [
2798
+ "set",
2799
+ "@entity.fx",
2800
+ "@newFx"
2801
+ ],
2802
+ [
2803
+ "set",
2804
+ "@entity.player",
2805
+ [
2806
+ "if",
2807
+ [
2808
+ "and",
2809
+ "@damaged",
2810
+ [
2811
+ "==",
2812
+ "@newResult",
2813
+ "none"
2814
+ ]
2815
+ ],
2816
+ {
2817
+ "animation": "skate-stand",
2818
+ "facingRight": true,
2819
+ "frame": 0.0,
2820
+ "grounded": false,
2821
+ "height": 48.0,
2822
+ "vx": 0.0,
2823
+ "vy": 0.0,
2824
+ "width": 32.0,
2825
+ "x": 80.0,
2826
+ "y": 320.0
2827
+ },
2828
+ "@entity.player"
2829
+ ]
2830
+ ]
2831
+ ]
1806
2832
  ]
1807
2833
  ]
1808
2834
  ]
@@ -1870,12 +2896,12 @@
1870
2896
  ],
1871
2897
  [
1872
2898
  "set",
1873
- "@entity.effects",
2899
+ "@entity.fx",
1874
2900
  [
1875
2901
  "array/filter",
1876
2902
  [
1877
2903
  "array/map",
1878
- "@entity.effects",
2904
+ "@entity.fx",
1879
2905
  [
1880
2906
  "fn",
1881
2907
  "e",
@@ -1933,6 +2959,34 @@
1933
2959
  {
1934
2960
  "backgroundColor": "@config.bgColor",
1935
2961
  "cameraMode": "follow",
2962
+ "events": "@entity.fx",
2963
+ "features": [
2964
+ "array/map",
2965
+ [
2966
+ "array/filter",
2967
+ "@entity.coins",
2968
+ [
2969
+ "fn",
2970
+ "c",
2971
+ [
2972
+ "==",
2973
+ "@c.taken",
2974
+ false
2975
+ ]
2976
+ ]
2977
+ ],
2978
+ [
2979
+ "fn",
2980
+ "c",
2981
+ {
2982
+ "assetUrl": "@config.coinSprite",
2983
+ "id": "@c.id",
2984
+ "type": "coin",
2985
+ "x": "@c.x",
2986
+ "y": "@c.y"
2987
+ }
2988
+ ]
2989
+ ],
1936
2990
  "interpolateUnits": true,
1937
2991
  "keyMap": {
1938
2992
  "ArrowLeft": "LEFT",
@@ -1940,6 +2994,8 @@
1940
2994
  "ArrowUp": "JUMP",
1941
2995
  "KeyA": "LEFT",
1942
2996
  "KeyD": "RIGHT",
2997
+ "KeyJ": "TRICK",
2998
+ "KeyK": "TRICK",
1943
2999
  "KeyW": "JUMP",
1944
3000
  "Space": "JUMP"
1945
3001
  },
@@ -2036,6 +3092,7 @@
2036
3092
  }
2037
3093
  },
2038
3094
  "directionEvents": {
3095
+ "down": "STOP",
2039
3096
  "left": "LEFT",
2040
3097
  "right": "RIGHT",
2041
3098
  "up": "JUMP"
@@ -2047,6 +3104,12 @@
2047
3104
  "kind": "dpad",
2048
3105
  "type": "control-grid"
2049
3106
  },
3107
+ {
3108
+ "action": "TRICK",
3109
+ "label": "Trick",
3110
+ "type": "button",
3111
+ "variant": "primary"
3112
+ },
2050
3113
  {
2051
3114
  "action": "PLAY_AGAIN",
2052
3115
  "label": "Restart",
@@ -2077,6 +3140,11 @@
2077
3140
  }
2078
3141
  ]
2079
3142
  ],
3143
+ "guard": [
3144
+ "==",
3145
+ "@entity.result",
3146
+ "none"
3147
+ ],
2080
3148
  "interval": 100.0,
2081
3149
  "name": "animTick"
2082
3150
  }