@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": "FantasyTownBoard3D — 3D grid-tactics board organism: town-square siege defense with game-shell + game-canvas-3d.",
2
+ "description": "FantasyTownBoard3D — 3D grid-tactics siege defense: soldier and guard repel goblin and troll raiders in the town square.",
3
3
  "name": "ui-fantasy-town-board-3d",
4
4
  "orbitals": [
5
5
  {
@@ -338,6 +338,51 @@
338
338
  "name": "attackTargets",
339
339
  "type": "array"
340
340
  },
341
+ {
342
+ "default": [],
343
+ "items": {
344
+ "properties": {
345
+ "id": {
346
+ "name": "id",
347
+ "required": true,
348
+ "type": "string"
349
+ },
350
+ "message": {
351
+ "name": "message",
352
+ "required": false,
353
+ "type": "string"
354
+ },
355
+ "ttl": {
356
+ "name": "ttl",
357
+ "required": true,
358
+ "type": "number"
359
+ },
360
+ "type": {
361
+ "name": "type",
362
+ "required": true,
363
+ "type": "string"
364
+ },
365
+ "x": {
366
+ "name": "x",
367
+ "required": true,
368
+ "type": "number"
369
+ },
370
+ "y": {
371
+ "name": "y",
372
+ "required": false,
373
+ "type": "number"
374
+ },
375
+ "z": {
376
+ "name": "z",
377
+ "required": false,
378
+ "type": "number"
379
+ }
380
+ },
381
+ "type": "object"
382
+ },
383
+ "name": "fx",
384
+ "type": "array"
385
+ },
341
386
  {
342
387
  "default": "observation",
343
388
  "name": "phase",
@@ -376,12 +421,12 @@
376
421
  ]
377
422
  },
378
423
  {
379
- "default": 5.0,
424
+ "default": 6.0,
380
425
  "name": "gridWidth",
381
426
  "type": "number"
382
427
  },
383
428
  {
384
- "default": 5.0,
429
+ "default": 6.0,
385
430
  "name": "gridHeight",
386
431
  "type": "number"
387
432
  },
@@ -1041,6 +1086,13 @@
1041
1086
  "tier": "presentation",
1042
1087
  "type": "FantasyTownBoard3DAssetManifest"
1043
1088
  },
1089
+ "attackDamage": {
1090
+ "default": 3.0,
1091
+ "description": "Damage dealt per melee attack",
1092
+ "label": "Attack Damage",
1093
+ "tier": "presentation",
1094
+ "type": "number"
1095
+ },
1044
1096
  "className": {
1045
1097
  "default": "",
1046
1098
  "description": "className prop",
@@ -1084,16 +1136,35 @@
1084
1136
  "static"
1085
1137
  ],
1086
1138
  "aspect": "1:1",
1087
- "category": "flagCheckers",
1139
+ "category": "fountain",
1140
+ "dimension": "3d",
1141
+ "name": "fountain-center",
1142
+ "role": "decoration",
1143
+ "style": "lowpoly-flat",
1144
+ "thumbnailUrl": "",
1145
+ "url": "https://almadar-kflow-assets.web.app/shared/ui-fantasy-town-board-3d/kenney-fantasy-town-kit/features/fountain-center.glb"
1146
+ },
1147
+ "id": "fountain",
1148
+ "type": "fountain",
1149
+ "x": 3.0,
1150
+ "y": 3.0
1151
+ },
1152
+ {
1153
+ "assetUrl": {
1154
+ "animations": [
1155
+ "static"
1156
+ ],
1157
+ "aspect": "1:1",
1158
+ "category": "tower",
1088
1159
  "dimension": "3d",
1089
- "name": "flagCheckers",
1160
+ "name": "tower-square",
1090
1161
  "role": "decoration",
1091
1162
  "style": "lowpoly-flat",
1092
1163
  "thumbnailUrl": "",
1093
- "url": "https://almadar-kflow-assets.web.app/shared/ui-racing-board-3d/kenney-racing-kit/features/flagCheckers.glb"
1164
+ "url": "https://almadar-kflow-assets.web.app/shared/ui-fantasy-town-board-3d/kenney-castle-kit/features/tower-square.glb"
1094
1165
  },
1095
- "id": "startArch",
1096
- "type": "start_arch",
1166
+ "id": "tower",
1167
+ "type": "tower",
1097
1168
  "x": 0.0,
1098
1169
  "y": 0.0
1099
1170
  },
@@ -1103,18 +1174,18 @@
1103
1174
  "static"
1104
1175
  ],
1105
1176
  "aspect": "1:1",
1106
- "category": "grandStand",
1177
+ "category": "catapult",
1107
1178
  "dimension": "3d",
1108
- "name": "grandStand",
1179
+ "name": "siege-catapult",
1109
1180
  "role": "decoration",
1110
1181
  "style": "lowpoly-flat",
1111
1182
  "thumbnailUrl": "",
1112
- "url": "https://almadar-kflow-assets.web.app/shared/ui-racing-board-3d/kenney-racing-kit/features/grandStand.glb"
1183
+ "url": "https://almadar-kflow-assets.web.app/shared/ui-fantasy-town-board-3d/kenney-castle-kit/features/siege-catapult.glb"
1113
1184
  },
1114
- "id": "grandstandNorth",
1115
- "type": "grandstand",
1116
- "x": 2.0,
1117
- "y": 1.0
1185
+ "id": "catapult",
1186
+ "type": "catapult",
1187
+ "x": 5.0,
1188
+ "y": 0.0
1118
1189
  },
1119
1190
  {
1120
1191
  "assetUrl": {
@@ -1122,18 +1193,18 @@
1122
1193
  "static"
1123
1194
  ],
1124
1195
  "aspect": "1:1",
1125
- "category": "grandStandCovered",
1196
+ "category": "trebuchet",
1126
1197
  "dimension": "3d",
1127
- "name": "grandStandCovered",
1198
+ "name": "siege-trebuchet",
1128
1199
  "role": "decoration",
1129
1200
  "style": "lowpoly-flat",
1130
1201
  "thumbnailUrl": "",
1131
- "url": "https://almadar-kflow-assets.web.app/shared/ui-racing-board-3d/kenney-racing-kit/features/grandStandCovered.glb"
1202
+ "url": "https://almadar-kflow-assets.web.app/shared/ui-fantasy-town-board-3d/kenney-castle-kit/features/siege-trebuchet.glb"
1132
1203
  },
1133
- "id": "grandstandSouth",
1134
- "type": "grandstand",
1135
- "x": 3.0,
1136
- "y": 4.0
1204
+ "id": "trebuchet",
1205
+ "type": "trebuchet",
1206
+ "x": 0.0,
1207
+ "y": 5.0
1137
1208
  },
1138
1209
  {
1139
1210
  "assetUrl": {
@@ -1141,18 +1212,18 @@
1141
1212
  "static"
1142
1213
  ],
1143
1214
  "aspect": "1:1",
1144
- "category": "pitsGarage",
1215
+ "category": "windmill",
1145
1216
  "dimension": "3d",
1146
- "name": "pitsGarage",
1217
+ "name": "windmill",
1147
1218
  "role": "decoration",
1148
1219
  "style": "lowpoly-flat",
1149
1220
  "thumbnailUrl": "",
1150
- "url": "https://almadar-kflow-assets.web.app/shared/ui-racing-board-3d/kenney-racing-kit/features/pitsGarage.glb"
1221
+ "url": "https://almadar-kflow-assets.web.app/shared/ui-fantasy-town-board-3d/kenney-fantasy-town-kit/features/windmill.glb"
1151
1222
  },
1152
- "id": "pitGarage",
1153
- "type": "pit",
1154
- "x": 1.0,
1155
- "y": 1.0
1223
+ "id": "windmill",
1224
+ "type": "windmill",
1225
+ "x": 5.0,
1226
+ "y": 5.0
1156
1227
  },
1157
1228
  {
1158
1229
  "assetUrl": {
@@ -1160,17 +1231,17 @@
1160
1231
  "static"
1161
1232
  ],
1162
1233
  "aspect": "1:1",
1163
- "category": "pitsOffice",
1234
+ "category": "cart",
1164
1235
  "dimension": "3d",
1165
- "name": "pitsOffice",
1236
+ "name": "cart",
1166
1237
  "role": "decoration",
1167
1238
  "style": "lowpoly-flat",
1168
1239
  "thumbnailUrl": "",
1169
- "url": "https://almadar-kflow-assets.web.app/shared/ui-racing-board-3d/kenney-racing-kit/features/pitsOffice.glb"
1240
+ "url": "https://almadar-kflow-assets.web.app/shared/ui-fantasy-town-board-3d/kenney-fantasy-town-kit/features/cart.glb"
1170
1241
  },
1171
- "id": "pitOffice",
1172
- "type": "pit",
1173
- "x": 4.0,
1242
+ "id": "cart",
1243
+ "type": "cart",
1244
+ "x": 2.0,
1174
1245
  "y": 4.0
1175
1246
  }
1176
1247
  ],
@@ -1382,16 +1453,16 @@
1382
1453
  "static"
1383
1454
  ],
1384
1455
  "aspect": "1:1",
1385
- "category": "roadStart",
1456
+ "category": "wall-block",
1386
1457
  "dimension": "3d",
1387
- "name": "roadStart",
1458
+ "name": "wall-block",
1388
1459
  "role": "tile",
1389
1460
  "style": "lowpoly-flat",
1390
1461
  "thumbnailUrl": "",
1391
- "url": "https://almadar-kflow-assets.web.app/shared/ui-racing-board-3d/kenney-racing-kit/terrain/roadStart.glb"
1462
+ "url": "https://almadar-kflow-assets.web.app/shared/ui-fantasy-town-board-3d/kenney-fantasy-town-kit/terrain/wall-block.glb"
1392
1463
  },
1393
- "passable": true,
1394
- "terrain": "start",
1464
+ "passable": false,
1465
+ "terrain": "wall",
1395
1466
  "x": 0.0,
1396
1467
  "y": 0.0
1397
1468
  },
@@ -1402,16 +1473,16 @@
1402
1473
  "static"
1403
1474
  ],
1404
1475
  "aspect": "1:1",
1405
- "category": "roadStraight",
1476
+ "category": "wall-block",
1406
1477
  "dimension": "3d",
1407
- "name": "roadStraight",
1478
+ "name": "wall-block",
1408
1479
  "role": "tile",
1409
1480
  "style": "lowpoly-flat",
1410
1481
  "thumbnailUrl": "",
1411
- "url": "https://almadar-kflow-assets.web.app/shared/ui-racing-board-3d/kenney-racing-kit/terrain/roadStraight.glb"
1482
+ "url": "https://almadar-kflow-assets.web.app/shared/ui-fantasy-town-board-3d/kenney-fantasy-town-kit/terrain/wall-block.glb"
1412
1483
  },
1413
- "passable": true,
1414
- "terrain": "track",
1484
+ "passable": false,
1485
+ "terrain": "wall",
1415
1486
  "x": 1.0,
1416
1487
  "y": 0.0
1417
1488
  },
@@ -1422,16 +1493,16 @@
1422
1493
  "static"
1423
1494
  ],
1424
1495
  "aspect": "1:1",
1425
- "category": "roadStraight",
1496
+ "category": "wall-block",
1426
1497
  "dimension": "3d",
1427
- "name": "roadStraight",
1498
+ "name": "wall-block",
1428
1499
  "role": "tile",
1429
1500
  "style": "lowpoly-flat",
1430
1501
  "thumbnailUrl": "",
1431
- "url": "https://almadar-kflow-assets.web.app/shared/ui-racing-board-3d/kenney-racing-kit/terrain/roadStraight.glb"
1502
+ "url": "https://almadar-kflow-assets.web.app/shared/ui-fantasy-town-board-3d/kenney-fantasy-town-kit/terrain/wall-block.glb"
1432
1503
  },
1433
- "passable": true,
1434
- "terrain": "track",
1504
+ "passable": false,
1505
+ "terrain": "wall",
1435
1506
  "x": 2.0,
1436
1507
  "y": 0.0
1437
1508
  },
@@ -1442,16 +1513,16 @@
1442
1513
  "static"
1443
1514
  ],
1444
1515
  "aspect": "1:1",
1445
- "category": "roadStraight",
1516
+ "category": "wall-block",
1446
1517
  "dimension": "3d",
1447
- "name": "roadStraight",
1518
+ "name": "wall-block",
1448
1519
  "role": "tile",
1449
1520
  "style": "lowpoly-flat",
1450
1521
  "thumbnailUrl": "",
1451
- "url": "https://almadar-kflow-assets.web.app/shared/ui-racing-board-3d/kenney-racing-kit/terrain/roadStraight.glb"
1522
+ "url": "https://almadar-kflow-assets.web.app/shared/ui-fantasy-town-board-3d/kenney-fantasy-town-kit/terrain/wall-block.glb"
1452
1523
  },
1453
- "passable": true,
1454
- "terrain": "track",
1524
+ "passable": false,
1525
+ "terrain": "wall",
1455
1526
  "x": 3.0,
1456
1527
  "y": 0.0
1457
1528
  },
@@ -1462,16 +1533,16 @@
1462
1533
  "static"
1463
1534
  ],
1464
1535
  "aspect": "1:1",
1465
- "category": "roadStraight",
1536
+ "category": "wall-block",
1466
1537
  "dimension": "3d",
1467
- "name": "roadStraight",
1538
+ "name": "wall-block",
1468
1539
  "role": "tile",
1469
1540
  "style": "lowpoly-flat",
1470
1541
  "thumbnailUrl": "",
1471
- "url": "https://almadar-kflow-assets.web.app/shared/ui-racing-board-3d/kenney-racing-kit/terrain/roadStraight.glb"
1542
+ "url": "https://almadar-kflow-assets.web.app/shared/ui-fantasy-town-board-3d/kenney-fantasy-town-kit/terrain/wall-block.glb"
1472
1543
  },
1473
- "passable": true,
1474
- "terrain": "track",
1544
+ "passable": false,
1545
+ "terrain": "wall",
1475
1546
  "x": 4.0,
1476
1547
  "y": 0.0
1477
1548
  },
@@ -1482,16 +1553,16 @@
1482
1553
  "static"
1483
1554
  ],
1484
1555
  "aspect": "1:1",
1485
- "category": "roadStraight",
1556
+ "category": "wall-block",
1486
1557
  "dimension": "3d",
1487
- "name": "roadStraight",
1558
+ "name": "wall-block",
1488
1559
  "role": "tile",
1489
1560
  "style": "lowpoly-flat",
1490
1561
  "thumbnailUrl": "",
1491
- "url": "https://almadar-kflow-assets.web.app/shared/ui-racing-board-3d/kenney-racing-kit/terrain/roadStraight.glb"
1562
+ "url": "https://almadar-kflow-assets.web.app/shared/ui-fantasy-town-board-3d/kenney-fantasy-town-kit/terrain/wall-block.glb"
1492
1563
  },
1493
- "passable": true,
1494
- "terrain": "track",
1564
+ "passable": false,
1565
+ "terrain": "wall",
1495
1566
  "x": 5.0,
1496
1567
  "y": 0.0
1497
1568
  },
@@ -1502,16 +1573,16 @@
1502
1573
  "static"
1503
1574
  ],
1504
1575
  "aspect": "1:1",
1505
- "category": "roadStraight",
1576
+ "category": "wall-block",
1506
1577
  "dimension": "3d",
1507
- "name": "roadStraight",
1578
+ "name": "wall-block",
1508
1579
  "role": "tile",
1509
1580
  "style": "lowpoly-flat",
1510
1581
  "thumbnailUrl": "",
1511
- "url": "https://almadar-kflow-assets.web.app/shared/ui-racing-board-3d/kenney-racing-kit/terrain/roadStraight.glb"
1582
+ "url": "https://almadar-kflow-assets.web.app/shared/ui-fantasy-town-board-3d/kenney-fantasy-town-kit/terrain/wall-block.glb"
1512
1583
  },
1513
- "passable": true,
1514
- "terrain": "track",
1584
+ "passable": false,
1585
+ "terrain": "wall",
1515
1586
  "x": 0.0,
1516
1587
  "y": 1.0
1517
1588
  },
@@ -1522,16 +1593,16 @@
1522
1593
  "static"
1523
1594
  ],
1524
1595
  "aspect": "1:1",
1525
- "category": "grass",
1596
+ "category": "floor",
1526
1597
  "dimension": "3d",
1527
- "name": "grass",
1528
- "role": "decoration",
1598
+ "name": "floor",
1599
+ "role": "tile",
1529
1600
  "style": "lowpoly-flat",
1530
1601
  "thumbnailUrl": "",
1531
- "url": "https://almadar-kflow-assets.web.app/shared/ui-racing-board-3d/kenney-racing-kit/features/grass.glb"
1602
+ "url": "https://almadar-kflow-assets.web.app/shared/ui-fantasy-town-board-3d/kenney-mini-arena/terrain/floor.glb"
1532
1603
  },
1533
- "passable": false,
1534
- "terrain": "grass",
1604
+ "passable": true,
1605
+ "terrain": "stone",
1535
1606
  "x": 1.0,
1536
1607
  "y": 1.0
1537
1608
  },
@@ -1542,16 +1613,16 @@
1542
1613
  "static"
1543
1614
  ],
1544
1615
  "aspect": "1:1",
1545
- "category": "grass",
1616
+ "category": "road",
1546
1617
  "dimension": "3d",
1547
- "name": "grass",
1548
- "role": "decoration",
1618
+ "name": "road",
1619
+ "role": "tile",
1549
1620
  "style": "lowpoly-flat",
1550
1621
  "thumbnailUrl": "",
1551
- "url": "https://almadar-kflow-assets.web.app/shared/ui-racing-board-3d/kenney-racing-kit/features/grass.glb"
1622
+ "url": "https://almadar-kflow-assets.web.app/shared/ui-fantasy-town-board-3d/kenney-fantasy-town-kit/terrain/road.glb"
1552
1623
  },
1553
- "passable": false,
1554
- "terrain": "grass",
1624
+ "passable": true,
1625
+ "terrain": "cobble",
1555
1626
  "x": 2.0,
1556
1627
  "y": 1.0
1557
1628
  },
@@ -1562,16 +1633,16 @@
1562
1633
  "static"
1563
1634
  ],
1564
1635
  "aspect": "1:1",
1565
- "category": "grass",
1636
+ "category": "floor",
1566
1637
  "dimension": "3d",
1567
- "name": "grass",
1568
- "role": "decoration",
1638
+ "name": "floor",
1639
+ "role": "tile",
1569
1640
  "style": "lowpoly-flat",
1570
1641
  "thumbnailUrl": "",
1571
- "url": "https://almadar-kflow-assets.web.app/shared/ui-racing-board-3d/kenney-racing-kit/features/grass.glb"
1642
+ "url": "https://almadar-kflow-assets.web.app/shared/ui-fantasy-town-board-3d/kenney-mini-arena/terrain/floor.glb"
1572
1643
  },
1573
- "passable": false,
1574
- "terrain": "grass",
1644
+ "passable": true,
1645
+ "terrain": "stone",
1575
1646
  "x": 3.0,
1576
1647
  "y": 1.0
1577
1648
  },
@@ -1582,16 +1653,16 @@
1582
1653
  "static"
1583
1654
  ],
1584
1655
  "aspect": "1:1",
1585
- "category": "grass",
1656
+ "category": "road",
1586
1657
  "dimension": "3d",
1587
- "name": "grass",
1588
- "role": "decoration",
1658
+ "name": "road",
1659
+ "role": "tile",
1589
1660
  "style": "lowpoly-flat",
1590
1661
  "thumbnailUrl": "",
1591
- "url": "https://almadar-kflow-assets.web.app/shared/ui-racing-board-3d/kenney-racing-kit/features/grass.glb"
1662
+ "url": "https://almadar-kflow-assets.web.app/shared/ui-fantasy-town-board-3d/kenney-fantasy-town-kit/terrain/road.glb"
1592
1663
  },
1593
- "passable": false,
1594
- "terrain": "grass",
1664
+ "passable": true,
1665
+ "terrain": "cobble",
1595
1666
  "x": 4.0,
1596
1667
  "y": 1.0
1597
1668
  },
@@ -1602,16 +1673,16 @@
1602
1673
  "static"
1603
1674
  ],
1604
1675
  "aspect": "1:1",
1605
- "category": "roadStraight",
1676
+ "category": "wall-block",
1606
1677
  "dimension": "3d",
1607
- "name": "roadStraight",
1678
+ "name": "wall-block",
1608
1679
  "role": "tile",
1609
1680
  "style": "lowpoly-flat",
1610
1681
  "thumbnailUrl": "",
1611
- "url": "https://almadar-kflow-assets.web.app/shared/ui-racing-board-3d/kenney-racing-kit/terrain/roadStraight.glb"
1682
+ "url": "https://almadar-kflow-assets.web.app/shared/ui-fantasy-town-board-3d/kenney-fantasy-town-kit/terrain/wall-block.glb"
1612
1683
  },
1613
- "passable": true,
1614
- "terrain": "track",
1684
+ "passable": false,
1685
+ "terrain": "wall",
1615
1686
  "x": 5.0,
1616
1687
  "y": 1.0
1617
1688
  },
@@ -1622,16 +1693,16 @@
1622
1693
  "static"
1623
1694
  ],
1624
1695
  "aspect": "1:1",
1625
- "category": "roadStraight",
1696
+ "category": "wall-block",
1626
1697
  "dimension": "3d",
1627
- "name": "roadStraight",
1698
+ "name": "wall-block",
1628
1699
  "role": "tile",
1629
1700
  "style": "lowpoly-flat",
1630
1701
  "thumbnailUrl": "",
1631
- "url": "https://almadar-kflow-assets.web.app/shared/ui-racing-board-3d/kenney-racing-kit/terrain/roadStraight.glb"
1702
+ "url": "https://almadar-kflow-assets.web.app/shared/ui-fantasy-town-board-3d/kenney-fantasy-town-kit/terrain/wall-block.glb"
1632
1703
  },
1633
- "passable": true,
1634
- "terrain": "track",
1704
+ "passable": false,
1705
+ "terrain": "wall",
1635
1706
  "x": 0.0,
1636
1707
  "y": 2.0
1637
1708
  },
@@ -1642,16 +1713,16 @@
1642
1713
  "static"
1643
1714
  ],
1644
1715
  "aspect": "1:1",
1645
- "category": "grass",
1716
+ "category": "road",
1646
1717
  "dimension": "3d",
1647
- "name": "grass",
1648
- "role": "decoration",
1718
+ "name": "road",
1719
+ "role": "tile",
1649
1720
  "style": "lowpoly-flat",
1650
1721
  "thumbnailUrl": "",
1651
- "url": "https://almadar-kflow-assets.web.app/shared/ui-racing-board-3d/kenney-racing-kit/features/grass.glb"
1722
+ "url": "https://almadar-kflow-assets.web.app/shared/ui-fantasy-town-board-3d/kenney-fantasy-town-kit/terrain/road.glb"
1652
1723
  },
1653
- "passable": false,
1654
- "terrain": "grass",
1724
+ "passable": true,
1725
+ "terrain": "cobble",
1655
1726
  "x": 1.0,
1656
1727
  "y": 2.0
1657
1728
  },
@@ -1662,16 +1733,16 @@
1662
1733
  "static"
1663
1734
  ],
1664
1735
  "aspect": "1:1",
1665
- "category": "grass",
1736
+ "category": "floor",
1666
1737
  "dimension": "3d",
1667
- "name": "grass",
1668
- "role": "decoration",
1738
+ "name": "floor",
1739
+ "role": "tile",
1669
1740
  "style": "lowpoly-flat",
1670
1741
  "thumbnailUrl": "",
1671
- "url": "https://almadar-kflow-assets.web.app/shared/ui-racing-board-3d/kenney-racing-kit/features/grass.glb"
1742
+ "url": "https://almadar-kflow-assets.web.app/shared/ui-fantasy-town-board-3d/kenney-mini-arena/terrain/floor.glb"
1672
1743
  },
1673
- "passable": false,
1674
- "terrain": "grass",
1744
+ "passable": true,
1745
+ "terrain": "stone",
1675
1746
  "x": 2.0,
1676
1747
  "y": 2.0
1677
1748
  },
@@ -1682,16 +1753,16 @@
1682
1753
  "static"
1683
1754
  ],
1684
1755
  "aspect": "1:1",
1685
- "category": "grass",
1756
+ "category": "road",
1686
1757
  "dimension": "3d",
1687
- "name": "grass",
1688
- "role": "decoration",
1758
+ "name": "road",
1759
+ "role": "tile",
1689
1760
  "style": "lowpoly-flat",
1690
1761
  "thumbnailUrl": "",
1691
- "url": "https://almadar-kflow-assets.web.app/shared/ui-racing-board-3d/kenney-racing-kit/features/grass.glb"
1762
+ "url": "https://almadar-kflow-assets.web.app/shared/ui-fantasy-town-board-3d/kenney-fantasy-town-kit/terrain/road.glb"
1692
1763
  },
1693
- "passable": false,
1694
- "terrain": "grass",
1764
+ "passable": true,
1765
+ "terrain": "cobble",
1695
1766
  "x": 3.0,
1696
1767
  "y": 2.0
1697
1768
  },
@@ -1702,16 +1773,16 @@
1702
1773
  "static"
1703
1774
  ],
1704
1775
  "aspect": "1:1",
1705
- "category": "grass",
1776
+ "category": "floor",
1706
1777
  "dimension": "3d",
1707
- "name": "grass",
1708
- "role": "decoration",
1778
+ "name": "floor",
1779
+ "role": "tile",
1709
1780
  "style": "lowpoly-flat",
1710
1781
  "thumbnailUrl": "",
1711
- "url": "https://almadar-kflow-assets.web.app/shared/ui-racing-board-3d/kenney-racing-kit/features/grass.glb"
1782
+ "url": "https://almadar-kflow-assets.web.app/shared/ui-fantasy-town-board-3d/kenney-mini-arena/terrain/floor.glb"
1712
1783
  },
1713
- "passable": false,
1714
- "terrain": "grass",
1784
+ "passable": true,
1785
+ "terrain": "stone",
1715
1786
  "x": 4.0,
1716
1787
  "y": 2.0
1717
1788
  },
@@ -1722,16 +1793,16 @@
1722
1793
  "static"
1723
1794
  ],
1724
1795
  "aspect": "1:1",
1725
- "category": "roadStraight",
1796
+ "category": "wall-block",
1726
1797
  "dimension": "3d",
1727
- "name": "roadStraight",
1798
+ "name": "wall-block",
1728
1799
  "role": "tile",
1729
1800
  "style": "lowpoly-flat",
1730
1801
  "thumbnailUrl": "",
1731
- "url": "https://almadar-kflow-assets.web.app/shared/ui-racing-board-3d/kenney-racing-kit/terrain/roadStraight.glb"
1802
+ "url": "https://almadar-kflow-assets.web.app/shared/ui-fantasy-town-board-3d/kenney-fantasy-town-kit/terrain/wall-block.glb"
1732
1803
  },
1733
- "passable": true,
1734
- "terrain": "track",
1804
+ "passable": false,
1805
+ "terrain": "wall",
1735
1806
  "x": 5.0,
1736
1807
  "y": 2.0
1737
1808
  },
@@ -1742,16 +1813,16 @@
1742
1813
  "static"
1743
1814
  ],
1744
1815
  "aspect": "1:1",
1745
- "category": "roadStraight",
1816
+ "category": "wall-block",
1746
1817
  "dimension": "3d",
1747
- "name": "roadStraight",
1818
+ "name": "wall-block",
1748
1819
  "role": "tile",
1749
1820
  "style": "lowpoly-flat",
1750
1821
  "thumbnailUrl": "",
1751
- "url": "https://almadar-kflow-assets.web.app/shared/ui-racing-board-3d/kenney-racing-kit/terrain/roadStraight.glb"
1822
+ "url": "https://almadar-kflow-assets.web.app/shared/ui-fantasy-town-board-3d/kenney-fantasy-town-kit/terrain/wall-block.glb"
1752
1823
  },
1753
- "passable": true,
1754
- "terrain": "track",
1824
+ "passable": false,
1825
+ "terrain": "wall",
1755
1826
  "x": 0.0,
1756
1827
  "y": 3.0
1757
1828
  },
@@ -1762,16 +1833,16 @@
1762
1833
  "static"
1763
1834
  ],
1764
1835
  "aspect": "1:1",
1765
- "category": "grass",
1836
+ "category": "floor",
1766
1837
  "dimension": "3d",
1767
- "name": "grass",
1768
- "role": "decoration",
1838
+ "name": "floor",
1839
+ "role": "tile",
1769
1840
  "style": "lowpoly-flat",
1770
1841
  "thumbnailUrl": "",
1771
- "url": "https://almadar-kflow-assets.web.app/shared/ui-racing-board-3d/kenney-racing-kit/features/grass.glb"
1842
+ "url": "https://almadar-kflow-assets.web.app/shared/ui-fantasy-town-board-3d/kenney-mini-arena/terrain/floor.glb"
1772
1843
  },
1773
- "passable": false,
1774
- "terrain": "grass",
1844
+ "passable": true,
1845
+ "terrain": "stone",
1775
1846
  "x": 1.0,
1776
1847
  "y": 3.0
1777
1848
  },
@@ -1782,16 +1853,16 @@
1782
1853
  "static"
1783
1854
  ],
1784
1855
  "aspect": "1:1",
1785
- "category": "grass",
1856
+ "category": "road",
1786
1857
  "dimension": "3d",
1787
- "name": "grass",
1788
- "role": "decoration",
1858
+ "name": "road",
1859
+ "role": "tile",
1789
1860
  "style": "lowpoly-flat",
1790
1861
  "thumbnailUrl": "",
1791
- "url": "https://almadar-kflow-assets.web.app/shared/ui-racing-board-3d/kenney-racing-kit/features/grass.glb"
1862
+ "url": "https://almadar-kflow-assets.web.app/shared/ui-fantasy-town-board-3d/kenney-fantasy-town-kit/terrain/road.glb"
1792
1863
  },
1793
- "passable": false,
1794
- "terrain": "grass",
1864
+ "passable": true,
1865
+ "terrain": "cobble",
1795
1866
  "x": 2.0,
1796
1867
  "y": 3.0
1797
1868
  },
@@ -1802,16 +1873,16 @@
1802
1873
  "static"
1803
1874
  ],
1804
1875
  "aspect": "1:1",
1805
- "category": "grass",
1876
+ "category": "floor",
1806
1877
  "dimension": "3d",
1807
- "name": "grass",
1808
- "role": "decoration",
1878
+ "name": "floor",
1879
+ "role": "tile",
1809
1880
  "style": "lowpoly-flat",
1810
1881
  "thumbnailUrl": "",
1811
- "url": "https://almadar-kflow-assets.web.app/shared/ui-racing-board-3d/kenney-racing-kit/features/grass.glb"
1882
+ "url": "https://almadar-kflow-assets.web.app/shared/ui-fantasy-town-board-3d/kenney-mini-arena/terrain/floor.glb"
1812
1883
  },
1813
- "passable": false,
1814
- "terrain": "grass",
1884
+ "passable": true,
1885
+ "terrain": "stone",
1815
1886
  "x": 3.0,
1816
1887
  "y": 3.0
1817
1888
  },
@@ -1822,16 +1893,16 @@
1822
1893
  "static"
1823
1894
  ],
1824
1895
  "aspect": "1:1",
1825
- "category": "grass",
1896
+ "category": "road",
1826
1897
  "dimension": "3d",
1827
- "name": "grass",
1828
- "role": "decoration",
1898
+ "name": "road",
1899
+ "role": "tile",
1829
1900
  "style": "lowpoly-flat",
1830
1901
  "thumbnailUrl": "",
1831
- "url": "https://almadar-kflow-assets.web.app/shared/ui-racing-board-3d/kenney-racing-kit/features/grass.glb"
1902
+ "url": "https://almadar-kflow-assets.web.app/shared/ui-fantasy-town-board-3d/kenney-fantasy-town-kit/terrain/road.glb"
1832
1903
  },
1833
- "passable": false,
1834
- "terrain": "grass",
1904
+ "passable": true,
1905
+ "terrain": "cobble",
1835
1906
  "x": 4.0,
1836
1907
  "y": 3.0
1837
1908
  },
@@ -1842,16 +1913,16 @@
1842
1913
  "static"
1843
1914
  ],
1844
1915
  "aspect": "1:1",
1845
- "category": "roadStraight",
1916
+ "category": "wall-block",
1846
1917
  "dimension": "3d",
1847
- "name": "roadStraight",
1918
+ "name": "wall-block",
1848
1919
  "role": "tile",
1849
1920
  "style": "lowpoly-flat",
1850
1921
  "thumbnailUrl": "",
1851
- "url": "https://almadar-kflow-assets.web.app/shared/ui-racing-board-3d/kenney-racing-kit/terrain/roadStraight.glb"
1922
+ "url": "https://almadar-kflow-assets.web.app/shared/ui-fantasy-town-board-3d/kenney-fantasy-town-kit/terrain/wall-block.glb"
1852
1923
  },
1853
- "passable": true,
1854
- "terrain": "track",
1924
+ "passable": false,
1925
+ "terrain": "wall",
1855
1926
  "x": 5.0,
1856
1927
  "y": 3.0
1857
1928
  },
@@ -1862,16 +1933,16 @@
1862
1933
  "static"
1863
1934
  ],
1864
1935
  "aspect": "1:1",
1865
- "category": "roadStraight",
1936
+ "category": "wall-block",
1866
1937
  "dimension": "3d",
1867
- "name": "roadStraight",
1938
+ "name": "wall-block",
1868
1939
  "role": "tile",
1869
1940
  "style": "lowpoly-flat",
1870
1941
  "thumbnailUrl": "",
1871
- "url": "https://almadar-kflow-assets.web.app/shared/ui-racing-board-3d/kenney-racing-kit/terrain/roadStraight.glb"
1942
+ "url": "https://almadar-kflow-assets.web.app/shared/ui-fantasy-town-board-3d/kenney-fantasy-town-kit/terrain/wall-block.glb"
1872
1943
  },
1873
- "passable": true,
1874
- "terrain": "track",
1944
+ "passable": false,
1945
+ "terrain": "wall",
1875
1946
  "x": 0.0,
1876
1947
  "y": 4.0
1877
1948
  },
@@ -1882,16 +1953,16 @@
1882
1953
  "static"
1883
1954
  ],
1884
1955
  "aspect": "1:1",
1885
- "category": "grass",
1956
+ "category": "road",
1886
1957
  "dimension": "3d",
1887
- "name": "grass",
1888
- "role": "decoration",
1958
+ "name": "road",
1959
+ "role": "tile",
1889
1960
  "style": "lowpoly-flat",
1890
1961
  "thumbnailUrl": "",
1891
- "url": "https://almadar-kflow-assets.web.app/shared/ui-racing-board-3d/kenney-racing-kit/features/grass.glb"
1962
+ "url": "https://almadar-kflow-assets.web.app/shared/ui-fantasy-town-board-3d/kenney-fantasy-town-kit/terrain/road.glb"
1892
1963
  },
1893
- "passable": false,
1894
- "terrain": "grass",
1964
+ "passable": true,
1965
+ "terrain": "cobble",
1895
1966
  "x": 1.0,
1896
1967
  "y": 4.0
1897
1968
  },
@@ -1902,16 +1973,16 @@
1902
1973
  "static"
1903
1974
  ],
1904
1975
  "aspect": "1:1",
1905
- "category": "grass",
1976
+ "category": "floor",
1906
1977
  "dimension": "3d",
1907
- "name": "grass",
1908
- "role": "decoration",
1978
+ "name": "floor",
1979
+ "role": "tile",
1909
1980
  "style": "lowpoly-flat",
1910
1981
  "thumbnailUrl": "",
1911
- "url": "https://almadar-kflow-assets.web.app/shared/ui-racing-board-3d/kenney-racing-kit/features/grass.glb"
1982
+ "url": "https://almadar-kflow-assets.web.app/shared/ui-fantasy-town-board-3d/kenney-mini-arena/terrain/floor.glb"
1912
1983
  },
1913
- "passable": false,
1914
- "terrain": "grass",
1984
+ "passable": true,
1985
+ "terrain": "stone",
1915
1986
  "x": 2.0,
1916
1987
  "y": 4.0
1917
1988
  },
@@ -1922,16 +1993,16 @@
1922
1993
  "static"
1923
1994
  ],
1924
1995
  "aspect": "1:1",
1925
- "category": "grass",
1996
+ "category": "road",
1926
1997
  "dimension": "3d",
1927
- "name": "grass",
1928
- "role": "decoration",
1998
+ "name": "road",
1999
+ "role": "tile",
1929
2000
  "style": "lowpoly-flat",
1930
2001
  "thumbnailUrl": "",
1931
- "url": "https://almadar-kflow-assets.web.app/shared/ui-racing-board-3d/kenney-racing-kit/features/grass.glb"
2002
+ "url": "https://almadar-kflow-assets.web.app/shared/ui-fantasy-town-board-3d/kenney-fantasy-town-kit/terrain/road.glb"
1932
2003
  },
1933
- "passable": false,
1934
- "terrain": "grass",
2004
+ "passable": true,
2005
+ "terrain": "cobble",
1935
2006
  "x": 3.0,
1936
2007
  "y": 4.0
1937
2008
  },
@@ -1942,16 +2013,16 @@
1942
2013
  "static"
1943
2014
  ],
1944
2015
  "aspect": "1:1",
1945
- "category": "grass",
2016
+ "category": "floor",
1946
2017
  "dimension": "3d",
1947
- "name": "grass",
1948
- "role": "decoration",
2018
+ "name": "floor",
2019
+ "role": "tile",
1949
2020
  "style": "lowpoly-flat",
1950
2021
  "thumbnailUrl": "",
1951
- "url": "https://almadar-kflow-assets.web.app/shared/ui-racing-board-3d/kenney-racing-kit/features/grass.glb"
2022
+ "url": "https://almadar-kflow-assets.web.app/shared/ui-fantasy-town-board-3d/kenney-mini-arena/terrain/floor.glb"
1952
2023
  },
1953
- "passable": false,
1954
- "terrain": "grass",
2024
+ "passable": true,
2025
+ "terrain": "stone",
1955
2026
  "x": 4.0,
1956
2027
  "y": 4.0
1957
2028
  },
@@ -1962,16 +2033,16 @@
1962
2033
  "static"
1963
2034
  ],
1964
2035
  "aspect": "1:1",
1965
- "category": "roadStraight",
2036
+ "category": "wall-block",
1966
2037
  "dimension": "3d",
1967
- "name": "roadStraight",
2038
+ "name": "wall-block",
1968
2039
  "role": "tile",
1969
2040
  "style": "lowpoly-flat",
1970
2041
  "thumbnailUrl": "",
1971
- "url": "https://almadar-kflow-assets.web.app/shared/ui-racing-board-3d/kenney-racing-kit/terrain/roadStraight.glb"
2042
+ "url": "https://almadar-kflow-assets.web.app/shared/ui-fantasy-town-board-3d/kenney-fantasy-town-kit/terrain/wall-block.glb"
1972
2043
  },
1973
- "passable": true,
1974
- "terrain": "track",
2044
+ "passable": false,
2045
+ "terrain": "wall",
1975
2046
  "x": 5.0,
1976
2047
  "y": 4.0
1977
2048
  },
@@ -1982,16 +2053,16 @@
1982
2053
  "static"
1983
2054
  ],
1984
2055
  "aspect": "1:1",
1985
- "category": "roadStraight",
2056
+ "category": "wall-block",
1986
2057
  "dimension": "3d",
1987
- "name": "roadStraight",
2058
+ "name": "wall-block",
1988
2059
  "role": "tile",
1989
2060
  "style": "lowpoly-flat",
1990
2061
  "thumbnailUrl": "",
1991
- "url": "https://almadar-kflow-assets.web.app/shared/ui-racing-board-3d/kenney-racing-kit/terrain/roadStraight.glb"
2062
+ "url": "https://almadar-kflow-assets.web.app/shared/ui-fantasy-town-board-3d/kenney-fantasy-town-kit/terrain/wall-block.glb"
1992
2063
  },
1993
- "passable": true,
1994
- "terrain": "track",
2064
+ "passable": false,
2065
+ "terrain": "wall",
1995
2066
  "x": 0.0,
1996
2067
  "y": 5.0
1997
2068
  },
@@ -2002,16 +2073,16 @@
2002
2073
  "static"
2003
2074
  ],
2004
2075
  "aspect": "1:1",
2005
- "category": "roadStraight",
2076
+ "category": "wall-block",
2006
2077
  "dimension": "3d",
2007
- "name": "roadStraight",
2078
+ "name": "wall-block",
2008
2079
  "role": "tile",
2009
2080
  "style": "lowpoly-flat",
2010
2081
  "thumbnailUrl": "",
2011
- "url": "https://almadar-kflow-assets.web.app/shared/ui-racing-board-3d/kenney-racing-kit/terrain/roadStraight.glb"
2082
+ "url": "https://almadar-kflow-assets.web.app/shared/ui-fantasy-town-board-3d/kenney-fantasy-town-kit/terrain/wall-block.glb"
2012
2083
  },
2013
- "passable": true,
2014
- "terrain": "track",
2084
+ "passable": false,
2085
+ "terrain": "wall",
2015
2086
  "x": 1.0,
2016
2087
  "y": 5.0
2017
2088
  },
@@ -2022,16 +2093,16 @@
2022
2093
  "static"
2023
2094
  ],
2024
2095
  "aspect": "1:1",
2025
- "category": "roadStraight",
2096
+ "category": "wall-block",
2026
2097
  "dimension": "3d",
2027
- "name": "roadStraight",
2098
+ "name": "wall-block",
2028
2099
  "role": "tile",
2029
2100
  "style": "lowpoly-flat",
2030
2101
  "thumbnailUrl": "",
2031
- "url": "https://almadar-kflow-assets.web.app/shared/ui-racing-board-3d/kenney-racing-kit/terrain/roadStraight.glb"
2102
+ "url": "https://almadar-kflow-assets.web.app/shared/ui-fantasy-town-board-3d/kenney-fantasy-town-kit/terrain/wall-block.glb"
2032
2103
  },
2033
- "passable": true,
2034
- "terrain": "track",
2104
+ "passable": false,
2105
+ "terrain": "wall",
2035
2106
  "x": 2.0,
2036
2107
  "y": 5.0
2037
2108
  },
@@ -2042,16 +2113,16 @@
2042
2113
  "static"
2043
2114
  ],
2044
2115
  "aspect": "1:1",
2045
- "category": "roadStraight",
2116
+ "category": "wall-block",
2046
2117
  "dimension": "3d",
2047
- "name": "roadStraight",
2118
+ "name": "wall-block",
2048
2119
  "role": "tile",
2049
2120
  "style": "lowpoly-flat",
2050
2121
  "thumbnailUrl": "",
2051
- "url": "https://almadar-kflow-assets.web.app/shared/ui-racing-board-3d/kenney-racing-kit/terrain/roadStraight.glb"
2122
+ "url": "https://almadar-kflow-assets.web.app/shared/ui-fantasy-town-board-3d/kenney-fantasy-town-kit/terrain/wall-block.glb"
2052
2123
  },
2053
- "passable": true,
2054
- "terrain": "track",
2124
+ "passable": false,
2125
+ "terrain": "wall",
2055
2126
  "x": 3.0,
2056
2127
  "y": 5.0
2057
2128
  },
@@ -2062,16 +2133,16 @@
2062
2133
  "static"
2063
2134
  ],
2064
2135
  "aspect": "1:1",
2065
- "category": "roadStraight",
2136
+ "category": "wall-block",
2066
2137
  "dimension": "3d",
2067
- "name": "roadStraight",
2138
+ "name": "wall-block",
2068
2139
  "role": "tile",
2069
2140
  "style": "lowpoly-flat",
2070
2141
  "thumbnailUrl": "",
2071
- "url": "https://almadar-kflow-assets.web.app/shared/ui-racing-board-3d/kenney-racing-kit/terrain/roadStraight.glb"
2142
+ "url": "https://almadar-kflow-assets.web.app/shared/ui-fantasy-town-board-3d/kenney-fantasy-town-kit/terrain/wall-block.glb"
2072
2143
  },
2073
- "passable": true,
2074
- "terrain": "track",
2144
+ "passable": false,
2145
+ "terrain": "wall",
2075
2146
  "x": 4.0,
2076
2147
  "y": 5.0
2077
2148
  },
@@ -2082,21 +2153,21 @@
2082
2153
  "static"
2083
2154
  ],
2084
2155
  "aspect": "1:1",
2085
- "category": "roadStraight",
2156
+ "category": "wall-block",
2086
2157
  "dimension": "3d",
2087
- "name": "roadStraight",
2158
+ "name": "wall-block",
2088
2159
  "role": "tile",
2089
2160
  "style": "lowpoly-flat",
2090
2161
  "thumbnailUrl": "",
2091
- "url": "https://almadar-kflow-assets.web.app/shared/ui-racing-board-3d/kenney-racing-kit/terrain/roadStraight.glb"
2162
+ "url": "https://almadar-kflow-assets.web.app/shared/ui-fantasy-town-board-3d/kenney-fantasy-town-kit/terrain/wall-block.glb"
2092
2163
  },
2093
- "passable": true,
2094
- "terrain": "track",
2164
+ "passable": false,
2165
+ "terrain": "wall",
2095
2166
  "x": 5.0,
2096
2167
  "y": 5.0
2097
2168
  }
2098
2169
  ],
2099
- "description": "5x5 town-square grid — stone floor and cobbled road inside a walled perimeter.",
2170
+ "description": "6x6 town-square grid — wall-block border, alternating stone-floor and cobbled-road interior.",
2100
2171
  "items": {
2101
2172
  "properties": {
2102
2173
  "elevation": {
@@ -2306,57 +2377,119 @@
2306
2377
  "units": {
2307
2378
  "default": [
2308
2379
  {
2309
- "health": 100.0,
2310
- "id": "player",
2311
- "maxHealth": 100.0,
2380
+ "health": 12.0,
2381
+ "id": "soldier",
2382
+ "maxHealth": 12.0,
2312
2383
  "modelUrl": {
2313
2384
  "animations": [
2314
- "static"
2385
+ "idle",
2386
+ "walk",
2387
+ "attack-melee-right",
2388
+ "die"
2315
2389
  ],
2316
2390
  "aspect": "1:1",
2317
- "category": "race",
2391
+ "category": "soldier",
2318
2392
  "dimension": "3d",
2319
- "name": "race",
2393
+ "name": "character-soldier",
2320
2394
  "role": "player",
2321
2395
  "style": "lowpoly-flat",
2322
2396
  "thumbnailUrl": "",
2323
- "url": "https://almadar-kflow-assets.web.app/shared/ui-racing-board-3d/kenney-car-kit/units/race.glb"
2397
+ "url": "https://almadar-kflow-assets.web.app/shared/ui-fantasy-town-board-3d/kenney-mini-arena/units/character-soldier.glb"
2324
2398
  },
2325
- "name": "Player Car",
2399
+ "name": "Soldier",
2326
2400
  "position": {
2327
- "x": 0.0,
2328
- "y": 0.0
2401
+ "x": 1.0,
2402
+ "y": 1.0
2329
2403
  },
2330
2404
  "team": "player",
2331
- "unitType": "racecar"
2405
+ "unitType": "soldier"
2332
2406
  },
2333
2407
  {
2334
- "health": 100.0,
2335
- "id": "rival",
2336
- "maxHealth": 100.0,
2408
+ "health": 12.0,
2409
+ "id": "guard",
2410
+ "maxHealth": 12.0,
2337
2411
  "modelUrl": {
2338
2412
  "animations": [
2339
- "static"
2413
+ "idle",
2414
+ "walk",
2415
+ "attack-melee-right",
2416
+ "die"
2340
2417
  ],
2341
2418
  "aspect": "1:1",
2342
- "category": "race-future",
2419
+ "category": "guard",
2343
2420
  "dimension": "3d",
2344
- "name": "race-future",
2345
- "role": "enemy",
2421
+ "name": "character-j",
2422
+ "role": "player",
2346
2423
  "style": "lowpoly-flat",
2347
2424
  "thumbnailUrl": "",
2348
- "url": "https://almadar-kflow-assets.web.app/shared/ui-racing-board-3d/kenney-car-kit/units/race-future.glb"
2425
+ "url": "https://almadar-kflow-assets.web.app/shared/_shared/kenney-blocky-characters/units/character-j.glb"
2349
2426
  },
2350
- "name": "Rival Car",
2427
+ "name": "Guard",
2351
2428
  "position": {
2352
2429
  "x": 1.0,
2353
- "y": 0.0
2430
+ "y": 4.0
2431
+ },
2432
+ "team": "player",
2433
+ "unitType": "guard"
2434
+ },
2435
+ {
2436
+ "health": 10.0,
2437
+ "id": "goblin",
2438
+ "maxHealth": 10.0,
2439
+ "modelUrl": {
2440
+ "animations": [
2441
+ "idle",
2442
+ "walk",
2443
+ "attack-melee-right",
2444
+ "die"
2445
+ ],
2446
+ "aspect": "1:1",
2447
+ "category": "goblin",
2448
+ "dimension": "3d",
2449
+ "name": "character-l",
2450
+ "role": "enemy",
2451
+ "style": "lowpoly-flat",
2452
+ "thumbnailUrl": "",
2453
+ "url": "https://almadar-kflow-assets.web.app/shared/_shared/kenney-blocky-characters/units/character-l.glb"
2454
+ },
2455
+ "name": "Goblin",
2456
+ "position": {
2457
+ "x": 4.0,
2458
+ "y": 4.0
2459
+ },
2460
+ "team": "enemy",
2461
+ "unitType": "goblin"
2462
+ },
2463
+ {
2464
+ "health": 14.0,
2465
+ "id": "troll",
2466
+ "maxHealth": 14.0,
2467
+ "modelUrl": {
2468
+ "animations": [
2469
+ "idle",
2470
+ "walk",
2471
+ "attack-melee-right",
2472
+ "die"
2473
+ ],
2474
+ "aspect": "1:1",
2475
+ "category": "troll",
2476
+ "dimension": "3d",
2477
+ "name": "character-o",
2478
+ "role": "enemy",
2479
+ "style": "lowpoly-flat",
2480
+ "thumbnailUrl": "",
2481
+ "url": "https://almadar-kflow-assets.web.app/shared/_shared/kenney-blocky-characters/units/character-o.glb"
2482
+ },
2483
+ "name": "Troll",
2484
+ "position": {
2485
+ "x": 4.0,
2486
+ "y": 1.0
2354
2487
  },
2355
2488
  "team": "enemy",
2356
- "unitType": "racecar"
2489
+ "unitType": "troll"
2357
2490
  }
2358
2491
  ],
2359
- "description": "Initial unit roster (2 player defenders + 2 raiders) — takes priority over entity-derived units.",
2492
+ "description": "Initial unit roster (Soldier + Guard defenders vs Goblin + Troll raiders) — takes priority over entity-derived units.",
2360
2493
  "items": {
2361
2494
  "properties": {
2362
2495
  "elevation": {
@@ -2646,29 +2779,11 @@
2646
2779
  },
2647
2780
  "emits": [
2648
2781
  {
2649
- "description": "Melee/ranged attack resolution between two units",
2650
- "event": "ATTACK",
2782
+ "description": "Called when the match ends",
2783
+ "event": "GAME_END",
2651
2784
  "payloadSchema": [
2652
2785
  {
2653
- "name": "attacker",
2654
- "type": "object"
2655
- },
2656
- {
2657
- "name": "target",
2658
- "type": "object"
2659
- },
2660
- {
2661
- "name": "damage",
2662
- "type": "number"
2663
- },
2664
- {
2665
- "name": "attackerId",
2666
- "required": true,
2667
- "type": "string"
2668
- },
2669
- {
2670
- "name": "targetId",
2671
- "required": true,
2786
+ "name": "result",
2672
2787
  "type": "string"
2673
2788
  }
2674
2789
  ],
@@ -2676,20 +2791,8 @@
2676
2791
  "tier": "domain"
2677
2792
  },
2678
2793
  {
2679
- "description": "Called when the match ends",
2680
- "event": "GAME_END",
2681
- "payloadSchema": [
2682
- {
2683
- "name": "result",
2684
- "type": "string"
2685
- }
2686
- ],
2687
- "scope": "external",
2688
- "tier": "domain"
2689
- },
2690
- {
2691
- "description": "Called after a unit moves",
2692
- "event": "UNIT_MOVE",
2794
+ "description": "Called after a unit moves",
2795
+ "event": "UNIT_MOVE",
2693
2796
  "payloadSchema": [
2694
2797
  {
2695
2798
  "name": "unit",
@@ -2800,6 +2903,7 @@
2800
2903
  "attackTargets",
2801
2904
  "currentTeam",
2802
2905
  "enemyTurn",
2906
+ "fx",
2803
2907
  "gridHeight",
2804
2908
  "gridWidth",
2805
2909
  "movementRange",
@@ -2818,10 +2922,6 @@
2818
2922
  "scope": "instance",
2819
2923
  "stateMachine": {
2820
2924
  "events": [
2821
- {
2822
- "key": "START",
2823
- "name": "Start"
2824
- },
2825
2925
  {
2826
2926
  "key": "INIT",
2827
2927
  "name": "Initialize"
@@ -2869,36 +2969,6 @@
2869
2969
  ],
2870
2970
  "tier": "domain"
2871
2971
  },
2872
- {
2873
- "description": "Melee/ranged attack resolution between two units",
2874
- "key": "ATTACK",
2875
- "name": "Attack",
2876
- "payloadSchema": [
2877
- {
2878
- "name": "attacker",
2879
- "type": "object"
2880
- },
2881
- {
2882
- "name": "target",
2883
- "type": "object"
2884
- },
2885
- {
2886
- "name": "damage",
2887
- "type": "number"
2888
- },
2889
- {
2890
- "name": "attackerId",
2891
- "required": true,
2892
- "type": "string"
2893
- },
2894
- {
2895
- "name": "targetId",
2896
- "required": true,
2897
- "type": "string"
2898
- }
2899
- ],
2900
- "tier": "domain"
2901
- },
2902
2972
  {
2903
2973
  "description": "Emits UI:{endTurnEvent} with {} on end turn",
2904
2974
  "key": "END_TURN",
@@ -2981,9 +3051,6 @@
2981
3051
  "isInitial": true,
2982
3052
  "name": "playing"
2983
3053
  },
2984
- {
2985
- "name": "menu"
2986
- },
2987
3054
  {
2988
3055
  "name": "gameover"
2989
3056
  }
@@ -3013,93 +3080,7 @@
3013
3080
  ],
3014
3081
  [
3015
3082
  "set",
3016
- "@entity.turn",
3017
- 0.0
3018
- ],
3019
- [
3020
- "set",
3021
- "@entity.result",
3022
- "none"
3023
- ],
3024
- [
3025
- "set",
3026
- "@entity.phase",
3027
- "observation"
3028
- ],
3029
- [
3030
- "set",
3031
- "@entity.currentTeam",
3032
- "player"
3033
- ],
3034
- [
3035
- "set",
3036
- "@entity.enemyTurn",
3037
- false
3038
- ],
3039
- [
3040
- "render-ui",
3041
- "main",
3042
- {
3043
- "children": [
3044
- {
3045
- "attackTargets": "@entity.attackTargets",
3046
- "features": "@config.features",
3047
- "scale": "@config.scale",
3048
- "selectedUnitId": "@entity.selectedUnitId",
3049
- "tileClickEvent": "TILE_CLICK",
3050
- "tiles": "@config.tiles",
3051
- "type": "game-canvas-3d",
3052
- "unitClickEvent": "UNIT_CLICK",
3053
- "unitScale": "@config.unitScale",
3054
- "units": "@entity.units",
3055
- "validMoves": "@entity.validMoves"
3056
- }
3057
- ],
3058
- "hud": {
3059
- "stats": [
3060
- {
3061
- "label": "Turn",
3062
- "value": "@entity.turn"
3063
- },
3064
- {
3065
- "label": "Phase",
3066
- "value": "@entity.phase"
3067
- },
3068
- {
3069
- "label": "Result",
3070
- "value": "@entity.result"
3071
- }
3072
- ],
3073
- "type": "game-hud"
3074
- },
3075
- "type": "game-shell"
3076
- }
3077
- ]
3078
- ],
3079
- "event": "START",
3080
- "from": "menu",
3081
- "to": "playing"
3082
- },
3083
- {
3084
- "effects": [
3085
- [
3086
- "set",
3087
- "@entity.units",
3088
- "@config.units"
3089
- ],
3090
- [
3091
- "set",
3092
- "@entity.selectedUnitId",
3093
- ""
3094
- ],
3095
- [
3096
- "set",
3097
- "@entity.validMoves",
3098
- []
3099
- ],
3100
- [
3101
- "set",
3102
- "@entity.attackTargets",
3083
+ "@entity.fx",
3103
3084
  []
3104
3085
  ],
3105
3086
  [
@@ -3130,12 +3111,12 @@
3130
3111
  [
3131
3112
  "set",
3132
3113
  "@entity.gridWidth",
3133
- 5.0
3114
+ 6.0
3134
3115
  ],
3135
3116
  [
3136
3117
  "set",
3137
3118
  "@entity.gridHeight",
3138
- 5.0
3119
+ 6.0
3139
3120
  ],
3140
3121
  [
3141
3122
  "set",
@@ -3146,9 +3127,35 @@
3146
3127
  "render-ui",
3147
3128
  "main",
3148
3129
  {
3130
+ "addons": {
3131
+ "children": [
3132
+ {
3133
+ "action": "END_TURN",
3134
+ "label": "End Turn",
3135
+ "type": "button",
3136
+ "variant": "primary"
3137
+ },
3138
+ {
3139
+ "action": "CANCEL",
3140
+ "label": "Cancel",
3141
+ "type": "button",
3142
+ "variant": "secondary"
3143
+ },
3144
+ {
3145
+ "action": "PLAY_AGAIN",
3146
+ "label": "Restart",
3147
+ "type": "button",
3148
+ "variant": "secondary"
3149
+ }
3150
+ ],
3151
+ "direction": "vertical",
3152
+ "gap": "sm",
3153
+ "type": "stack"
3154
+ },
3149
3155
  "children": [
3150
3156
  {
3151
3157
  "attackTargets": "@entity.attackTargets",
3158
+ "events": "@entity.fx",
3152
3159
  "features": "@config.features",
3153
3160
  "scale": "@config.scale",
3154
3161
  "selectedUnitId": "@entity.selectedUnitId",
@@ -3178,6 +3185,38 @@
3178
3185
  ],
3179
3186
  "type": "game-hud"
3180
3187
  },
3188
+ "overlay": [
3189
+ "if",
3190
+ [
3191
+ "!=",
3192
+ "@entity.result",
3193
+ "none"
3194
+ ],
3195
+ {
3196
+ "align": "center",
3197
+ "children": [
3198
+ {
3199
+ "stats": [
3200
+ {
3201
+ "label": "Result",
3202
+ "value": "@entity.result"
3203
+ }
3204
+ ],
3205
+ "type": "game-hud"
3206
+ },
3207
+ {
3208
+ "action": "PLAY_AGAIN",
3209
+ "label": "Play Again",
3210
+ "type": "button",
3211
+ "variant": "primary"
3212
+ }
3213
+ ],
3214
+ "direction": "vertical",
3215
+ "gap": "md",
3216
+ "type": "stack"
3217
+ },
3218
+ null
3219
+ ],
3181
3220
  "type": "game-shell"
3182
3221
  }
3183
3222
  ]
@@ -3278,9 +3317,35 @@
3278
3317
  "render-ui",
3279
3318
  "main",
3280
3319
  {
3320
+ "addons": {
3321
+ "children": [
3322
+ {
3323
+ "action": "END_TURN",
3324
+ "label": "End Turn",
3325
+ "type": "button",
3326
+ "variant": "primary"
3327
+ },
3328
+ {
3329
+ "action": "CANCEL",
3330
+ "label": "Cancel",
3331
+ "type": "button",
3332
+ "variant": "secondary"
3333
+ },
3334
+ {
3335
+ "action": "PLAY_AGAIN",
3336
+ "label": "Restart",
3337
+ "type": "button",
3338
+ "variant": "secondary"
3339
+ }
3340
+ ],
3341
+ "direction": "vertical",
3342
+ "gap": "sm",
3343
+ "type": "stack"
3344
+ },
3281
3345
  "children": [
3282
3346
  {
3283
3347
  "attackTargets": "@entity.attackTargets",
3348
+ "events": "@entity.fx",
3284
3349
  "features": "@config.features",
3285
3350
  "scale": "@config.scale",
3286
3351
  "selectedUnitId": "@entity.selectedUnitId",
@@ -3310,6 +3375,38 @@
3310
3375
  ],
3311
3376
  "type": "game-hud"
3312
3377
  },
3378
+ "overlay": [
3379
+ "if",
3380
+ [
3381
+ "!=",
3382
+ "@entity.result",
3383
+ "none"
3384
+ ],
3385
+ {
3386
+ "align": "center",
3387
+ "children": [
3388
+ {
3389
+ "stats": [
3390
+ {
3391
+ "label": "Result",
3392
+ "value": "@entity.result"
3393
+ }
3394
+ ],
3395
+ "type": "game-hud"
3396
+ },
3397
+ {
3398
+ "action": "PLAY_AGAIN",
3399
+ "label": "Play Again",
3400
+ "type": "button",
3401
+ "variant": "primary"
3402
+ }
3403
+ ],
3404
+ "direction": "vertical",
3405
+ "gap": "md",
3406
+ "type": "stack"
3407
+ },
3408
+ null
3409
+ ],
3313
3410
  "type": "game-shell"
3314
3411
  }
3315
3412
  ]
@@ -3499,9 +3596,35 @@
3499
3596
  "render-ui",
3500
3597
  "main",
3501
3598
  {
3599
+ "addons": {
3600
+ "children": [
3601
+ {
3602
+ "action": "END_TURN",
3603
+ "label": "End Turn",
3604
+ "type": "button",
3605
+ "variant": "primary"
3606
+ },
3607
+ {
3608
+ "action": "CANCEL",
3609
+ "label": "Cancel",
3610
+ "type": "button",
3611
+ "variant": "secondary"
3612
+ },
3613
+ {
3614
+ "action": "PLAY_AGAIN",
3615
+ "label": "Restart",
3616
+ "type": "button",
3617
+ "variant": "secondary"
3618
+ }
3619
+ ],
3620
+ "direction": "vertical",
3621
+ "gap": "sm",
3622
+ "type": "stack"
3623
+ },
3502
3624
  "children": [
3503
3625
  {
3504
3626
  "attackTargets": "@entity.attackTargets",
3627
+ "events": "@entity.fx",
3505
3628
  "features": "@config.features",
3506
3629
  "scale": "@config.scale",
3507
3630
  "selectedUnitId": "@entity.selectedUnitId",
@@ -3531,6 +3654,38 @@
3531
3654
  ],
3532
3655
  "type": "game-hud"
3533
3656
  },
3657
+ "overlay": [
3658
+ "if",
3659
+ [
3660
+ "!=",
3661
+ "@entity.result",
3662
+ "none"
3663
+ ],
3664
+ {
3665
+ "align": "center",
3666
+ "children": [
3667
+ {
3668
+ "stats": [
3669
+ {
3670
+ "label": "Result",
3671
+ "value": "@entity.result"
3672
+ }
3673
+ ],
3674
+ "type": "game-hud"
3675
+ },
3676
+ {
3677
+ "action": "PLAY_AGAIN",
3678
+ "label": "Play Again",
3679
+ "type": "button",
3680
+ "variant": "primary"
3681
+ }
3682
+ ],
3683
+ "direction": "vertical",
3684
+ "gap": "md",
3685
+ "type": "stack"
3686
+ },
3687
+ null
3688
+ ],
3534
3689
  "type": "game-shell"
3535
3690
  }
3536
3691
  ]
@@ -3576,16 +3731,21 @@
3576
3731
  [
3577
3732
  "==",
3578
3733
  "@u.id",
3579
- "@entity.selectedUnitId"
3734
+ "@payload.unitId"
3580
3735
  ],
3581
3736
  [
3582
3737
  "object/merge",
3583
3738
  "@u",
3584
3739
  {
3585
- "position": {
3586
- "x": "@payload.x",
3587
- "y": "@payload.z"
3588
- }
3740
+ "health": [
3741
+ "math/max",
3742
+ 0.0,
3743
+ [
3744
+ "-",
3745
+ "@u.health",
3746
+ "@config.attackDamage"
3747
+ ]
3748
+ ]
3589
3749
  }
3590
3750
  ],
3591
3751
  "@u"
@@ -3593,6 +3753,70 @@
3593
3753
  ]
3594
3754
  ]
3595
3755
  ],
3756
+ [
3757
+ "set",
3758
+ "@entity.fx",
3759
+ [
3760
+ "let",
3761
+ [
3762
+ [
3763
+ "target",
3764
+ [
3765
+ "array/find",
3766
+ "@entity.units",
3767
+ [
3768
+ "fn",
3769
+ "u",
3770
+ [
3771
+ "==",
3772
+ "@u.id",
3773
+ "@payload.unitId"
3774
+ ]
3775
+ ]
3776
+ ]
3777
+ ]
3778
+ ],
3779
+ [
3780
+ "array/append",
3781
+ "@entity.fx",
3782
+ {
3783
+ "id": [
3784
+ "str/concat",
3785
+ "fx-",
3786
+ [
3787
+ "array/len",
3788
+ "@entity.fx"
3789
+ ]
3790
+ ],
3791
+ "message": [
3792
+ "str/concat",
3793
+ "-",
3794
+ "@config.attackDamage"
3795
+ ],
3796
+ "ttl": 3.0,
3797
+ "type": "hit",
3798
+ "x": [
3799
+ "object/get",
3800
+ [
3801
+ "object/get",
3802
+ "@target",
3803
+ "position"
3804
+ ],
3805
+ "x"
3806
+ ],
3807
+ "z": [
3808
+ "object/get",
3809
+ [
3810
+ "object/get",
3811
+ "@target",
3812
+ "position"
3813
+ ],
3814
+ "y"
3815
+ ]
3816
+ }
3817
+ ]
3818
+ ]
3819
+ ],
3596
3820
  [
3597
3821
  "set",
3598
3822
  "@entity.selectedUnitId",
@@ -3610,17 +3834,109 @@
3610
3834
  ],
3611
3835
  [
3612
3836
  "set",
3613
- "@entity.phase",
3614
- "observation"
3615
- ],
3616
- [
3617
- "render-ui",
3618
- "main",
3619
- {
3620
- "children": [
3621
- {
3622
- "attackTargets": "@entity.attackTargets",
3623
- "features": "@config.features",
3837
+ "@entity.result",
3838
+ [
3839
+ "if",
3840
+ [
3841
+ "==",
3842
+ [
3843
+ "array/len",
3844
+ [
3845
+ "array/filter",
3846
+ "@entity.units",
3847
+ [
3848
+ "fn",
3849
+ "u",
3850
+ [
3851
+ "and",
3852
+ [
3853
+ "==",
3854
+ "@u.team",
3855
+ "enemy"
3856
+ ],
3857
+ [
3858
+ ">",
3859
+ [
3860
+ "object/get",
3861
+ "@u",
3862
+ "health"
3863
+ ],
3864
+ 0.0
3865
+ ]
3866
+ ]
3867
+ ]
3868
+ ]
3869
+ ],
3870
+ 0.0
3871
+ ],
3872
+ "victory",
3873
+ "@entity.result"
3874
+ ]
3875
+ ],
3876
+ [
3877
+ "if",
3878
+ [
3879
+ "!=",
3880
+ "@entity.result",
3881
+ "none"
3882
+ ],
3883
+ [
3884
+ "emit",
3885
+ "GAME_END",
3886
+ {
3887
+ "result": "@entity.result"
3888
+ }
3889
+ ],
3890
+ null
3891
+ ],
3892
+ [
3893
+ "set",
3894
+ "@entity.phase",
3895
+ [
3896
+ "if",
3897
+ [
3898
+ "!=",
3899
+ "@entity.result",
3900
+ "none"
3901
+ ],
3902
+ "game_over",
3903
+ "observation"
3904
+ ]
3905
+ ],
3906
+ [
3907
+ "render-ui",
3908
+ "main",
3909
+ {
3910
+ "addons": {
3911
+ "children": [
3912
+ {
3913
+ "action": "END_TURN",
3914
+ "label": "End Turn",
3915
+ "type": "button",
3916
+ "variant": "primary"
3917
+ },
3918
+ {
3919
+ "action": "CANCEL",
3920
+ "label": "Cancel",
3921
+ "type": "button",
3922
+ "variant": "secondary"
3923
+ },
3924
+ {
3925
+ "action": "PLAY_AGAIN",
3926
+ "label": "Restart",
3927
+ "type": "button",
3928
+ "variant": "secondary"
3929
+ }
3930
+ ],
3931
+ "direction": "vertical",
3932
+ "gap": "sm",
3933
+ "type": "stack"
3934
+ },
3935
+ "children": [
3936
+ {
3937
+ "attackTargets": "@entity.attackTargets",
3938
+ "events": "@entity.fx",
3939
+ "features": "@config.features",
3624
3940
  "scale": "@config.scale",
3625
3941
  "selectedUnitId": "@entity.selectedUnitId",
3626
3942
  "tileClickEvent": "TILE_CLICK",
@@ -3649,103 +3965,114 @@
3649
3965
  ],
3650
3966
  "type": "game-hud"
3651
3967
  },
3968
+ "overlay": [
3969
+ "if",
3970
+ [
3971
+ "!=",
3972
+ "@entity.result",
3973
+ "none"
3974
+ ],
3975
+ {
3976
+ "align": "center",
3977
+ "children": [
3978
+ {
3979
+ "stats": [
3980
+ {
3981
+ "label": "Result",
3982
+ "value": "@entity.result"
3983
+ }
3984
+ ],
3985
+ "type": "game-hud"
3986
+ },
3987
+ {
3988
+ "action": "PLAY_AGAIN",
3989
+ "label": "Play Again",
3990
+ "type": "button",
3991
+ "variant": "primary"
3992
+ }
3993
+ ],
3994
+ "direction": "vertical",
3995
+ "gap": "md",
3996
+ "type": "stack"
3997
+ },
3998
+ null
3999
+ ],
3652
4000
  "type": "game-shell"
3653
4001
  }
3654
4002
  ]
3655
4003
  ],
3656
- "event": "TILE_CLICK",
4004
+ "event": "UNIT_CLICK",
3657
4005
  "from": "playing",
3658
4006
  "guard": [
3659
4007
  "and",
3660
4008
  [
3661
- "!=",
3662
- "@entity.selectedUnitId",
3663
- ""
4009
+ "==",
4010
+ "@entity.phase",
4011
+ "action"
3664
4012
  ],
3665
4013
  [
3666
- "and",
4014
+ "let",
3667
4015
  [
3668
- "grid/in-bounds",
3669
- {
3670
- "x": "@payload.x",
3671
- "y": "@payload.z"
3672
- },
3673
- "@entity.gridWidth",
3674
- "@entity.gridHeight"
4016
+ [
4017
+ "target",
4018
+ [
4019
+ "array/find",
4020
+ "@entity.units",
4021
+ [
4022
+ "fn",
4023
+ "u",
4024
+ [
4025
+ "==",
4026
+ "@u.id",
4027
+ "@payload.unitId"
4028
+ ]
4029
+ ]
4030
+ ]
4031
+ ],
4032
+ [
4033
+ "attacker",
4034
+ [
4035
+ "array/find",
4036
+ "@entity.units",
4037
+ [
4038
+ "fn",
4039
+ "s",
4040
+ [
4041
+ "==",
4042
+ "@s.id",
4043
+ "@entity.selectedUnitId"
4044
+ ]
4045
+ ]
4046
+ ]
4047
+ ]
3675
4048
  ],
3676
4049
  [
3677
4050
  "and",
4051
+ [
4052
+ "==",
4053
+ [
4054
+ "object/get",
4055
+ "@target",
4056
+ "team"
4057
+ ],
4058
+ "enemy"
4059
+ ],
3678
4060
  [
3679
4061
  "<=",
3680
4062
  [
3681
4063
  "grid/manhattan-distance",
3682
4064
  [
3683
4065
  "object/get",
3684
- [
3685
- "array/find",
3686
- "@entity.units",
3687
- [
3688
- "fn",
3689
- "u",
3690
- [
3691
- "==",
3692
- "@u.id",
3693
- "@entity.selectedUnitId"
3694
- ]
3695
- ]
3696
- ],
4066
+ "@attacker",
3697
4067
  "position"
3698
4068
  ],
3699
- {
3700
- "x": "@payload.x",
3701
- "y": "@payload.z"
3702
- }
3703
- ],
3704
- "@entity.movementRange"
3705
- ],
3706
- [
3707
- "==",
3708
- [
3709
- "array/len",
3710
4069
  [
3711
- "array/filter",
3712
- "@entity.units",
3713
- [
3714
- "fn",
3715
- "u",
3716
- [
3717
- "and",
3718
- [
3719
- "==",
3720
- [
3721
- "object/get",
3722
- [
3723
- "object/get",
3724
- "@u",
3725
- "position"
3726
- ],
3727
- "x"
3728
- ],
3729
- "@payload.x"
3730
- ],
3731
- [
3732
- "==",
3733
- [
3734
- "object/get",
3735
- [
3736
- "object/get",
3737
- "@u",
3738
- "position"
3739
- ],
3740
- "y"
3741
- ],
3742
- "@payload.z"
3743
- ]
3744
- ]
3745
- ]
4070
+ "object/get",
4071
+ "@target",
4072
+ "position"
3746
4073
  ]
3747
4074
  ],
3748
- 0.0
4075
+ 1.0
3749
4076
  ]
3750
4077
  ]
3751
4078
  ]
@@ -3768,25 +4095,16 @@
3768
4095
  [
3769
4096
  "==",
3770
4097
  "@u.id",
3771
- "@payload.targetId"
4098
+ "@entity.selectedUnitId"
3772
4099
  ],
3773
4100
  [
3774
4101
  "object/merge",
3775
4102
  "@u",
3776
4103
  {
3777
- "health": [
3778
- "math/max",
3779
- 0.0,
3780
- [
3781
- "-",
3782
- [
3783
- "object/get",
3784
- "@u",
3785
- "health"
3786
- ],
3787
- "@payload.damage"
3788
- ]
3789
- ]
4104
+ "position": {
4105
+ "x": "@payload.x",
4106
+ "y": "@payload.z"
4107
+ }
3790
4108
  }
3791
4109
  ],
3792
4110
  "@u"
@@ -3818,9 +4136,35 @@
3818
4136
  "render-ui",
3819
4137
  "main",
3820
4138
  {
4139
+ "addons": {
4140
+ "children": [
4141
+ {
4142
+ "action": "END_TURN",
4143
+ "label": "End Turn",
4144
+ "type": "button",
4145
+ "variant": "primary"
4146
+ },
4147
+ {
4148
+ "action": "CANCEL",
4149
+ "label": "Cancel",
4150
+ "type": "button",
4151
+ "variant": "secondary"
4152
+ },
4153
+ {
4154
+ "action": "PLAY_AGAIN",
4155
+ "label": "Restart",
4156
+ "type": "button",
4157
+ "variant": "secondary"
4158
+ }
4159
+ ],
4160
+ "direction": "vertical",
4161
+ "gap": "sm",
4162
+ "type": "stack"
4163
+ },
3821
4164
  "children": [
3822
4165
  {
3823
4166
  "attackTargets": "@entity.attackTargets",
4167
+ "events": "@entity.fx",
3824
4168
  "features": "@config.features",
3825
4169
  "scale": "@config.scale",
3826
4170
  "selectedUnitId": "@entity.selectedUnitId",
@@ -3850,104 +4194,135 @@
3850
4194
  ],
3851
4195
  "type": "game-hud"
3852
4196
  },
4197
+ "overlay": [
4198
+ "if",
4199
+ [
4200
+ "!=",
4201
+ "@entity.result",
4202
+ "none"
4203
+ ],
4204
+ {
4205
+ "align": "center",
4206
+ "children": [
4207
+ {
4208
+ "stats": [
4209
+ {
4210
+ "label": "Result",
4211
+ "value": "@entity.result"
4212
+ }
4213
+ ],
4214
+ "type": "game-hud"
4215
+ },
4216
+ {
4217
+ "action": "PLAY_AGAIN",
4218
+ "label": "Play Again",
4219
+ "type": "button",
4220
+ "variant": "primary"
4221
+ }
4222
+ ],
4223
+ "direction": "vertical",
4224
+ "gap": "md",
4225
+ "type": "stack"
4226
+ },
4227
+ null
4228
+ ],
3853
4229
  "type": "game-shell"
3854
4230
  }
3855
4231
  ]
3856
4232
  ],
3857
- "event": "ATTACK",
4233
+ "event": "TILE_CLICK",
3858
4234
  "from": "playing",
3859
4235
  "guard": [
3860
- "let",
4236
+ "and",
3861
4237
  [
3862
- [
3863
- "ap",
3864
- [
3865
- "object/get",
3866
- [
3867
- "array/find",
3868
- "@entity.units",
3869
- [
3870
- "fn",
3871
- "u",
3872
- [
3873
- "==",
3874
- "@u.id",
3875
- "@payload.attackerId"
3876
- ]
3877
- ]
3878
- ],
3879
- "position"
3880
- ]
3881
- ],
3882
- [
3883
- "tp",
3884
- [
3885
- "object/get",
3886
- [
3887
- "array/find",
3888
- "@entity.units",
3889
- [
3890
- "fn",
3891
- "u",
3892
- [
3893
- "==",
3894
- "@u.id",
3895
- "@payload.targetId"
3896
- ]
3897
- ]
3898
- ],
3899
- "position"
3900
- ]
3901
- ]
4238
+ "!=",
4239
+ "@entity.selectedUnitId",
4240
+ ""
3902
4241
  ],
3903
4242
  [
3904
4243
  "and",
3905
4244
  [
3906
- "<=",
3907
- [
3908
- "math/abs",
3909
- [
3910
- "-",
3911
- [
3912
- "object/get",
3913
- "@ap",
3914
- "x"
3915
- ],
3916
- [
3917
- "object/get",
3918
- "@tp",
3919
- "x"
3920
- ]
3921
- ]
3922
- ],
3923
- 1.0
4245
+ "grid/in-bounds",
4246
+ {
4247
+ "x": "@payload.x",
4248
+ "y": "@payload.z"
4249
+ },
4250
+ "@entity.gridWidth",
4251
+ "@entity.gridHeight"
3924
4252
  ],
3925
4253
  [
3926
4254
  "and",
3927
4255
  [
3928
4256
  "<=",
3929
4257
  [
3930
- "math/abs",
4258
+ "grid/manhattan-distance",
3931
4259
  [
3932
- "-",
4260
+ "object/get",
3933
4261
  [
3934
- "object/get",
3935
- "@ap",
3936
- "y"
4262
+ "array/find",
4263
+ "@entity.units",
4264
+ [
4265
+ "fn",
4266
+ "u",
4267
+ [
4268
+ "==",
4269
+ "@u.id",
4270
+ "@entity.selectedUnitId"
4271
+ ]
4272
+ ]
3937
4273
  ],
4274
+ "position"
4275
+ ],
4276
+ {
4277
+ "x": "@payload.x",
4278
+ "y": "@payload.z"
4279
+ }
4280
+ ],
4281
+ "@entity.movementRange"
4282
+ ],
4283
+ [
4284
+ "==",
4285
+ [
4286
+ "array/len",
4287
+ [
4288
+ "array/filter",
4289
+ "@entity.units",
3938
4290
  [
3939
- "object/get",
3940
- "@tp",
3941
- "y"
4291
+ "fn",
4292
+ "u",
4293
+ [
4294
+ "and",
4295
+ [
4296
+ "==",
4297
+ [
4298
+ "object/get",
4299
+ [
4300
+ "object/get",
4301
+ "@u",
4302
+ "position"
4303
+ ],
4304
+ "x"
4305
+ ],
4306
+ "@payload.x"
4307
+ ],
4308
+ [
4309
+ "==",
4310
+ [
4311
+ "object/get",
4312
+ [
4313
+ "object/get",
4314
+ "@u",
4315
+ "position"
4316
+ ],
4317
+ "y"
4318
+ ],
4319
+ "@payload.z"
4320
+ ]
4321
+ ]
3942
4322
  ]
3943
4323
  ]
3944
4324
  ],
3945
- 1.0
3946
- ],
3947
- [
3948
- "!=",
3949
- "@ap",
3950
- "@tp"
4325
+ 0.0
3951
4326
  ]
3952
4327
  ]
3953
4328
  ]
@@ -3999,9 +4374,35 @@
3999
4374
  "render-ui",
4000
4375
  "main",
4001
4376
  {
4377
+ "addons": {
4378
+ "children": [
4379
+ {
4380
+ "action": "END_TURN",
4381
+ "label": "End Turn",
4382
+ "type": "button",
4383
+ "variant": "primary"
4384
+ },
4385
+ {
4386
+ "action": "CANCEL",
4387
+ "label": "Cancel",
4388
+ "type": "button",
4389
+ "variant": "secondary"
4390
+ },
4391
+ {
4392
+ "action": "PLAY_AGAIN",
4393
+ "label": "Restart",
4394
+ "type": "button",
4395
+ "variant": "secondary"
4396
+ }
4397
+ ],
4398
+ "direction": "vertical",
4399
+ "gap": "sm",
4400
+ "type": "stack"
4401
+ },
4002
4402
  "children": [
4003
4403
  {
4004
4404
  "attackTargets": "@entity.attackTargets",
4405
+ "events": "@entity.fx",
4005
4406
  "features": "@config.features",
4006
4407
  "scale": "@config.scale",
4007
4408
  "selectedUnitId": "@entity.selectedUnitId",
@@ -4031,6 +4432,38 @@
4031
4432
  ],
4032
4433
  "type": "game-hud"
4033
4434
  },
4435
+ "overlay": [
4436
+ "if",
4437
+ [
4438
+ "!=",
4439
+ "@entity.result",
4440
+ "none"
4441
+ ],
4442
+ {
4443
+ "align": "center",
4444
+ "children": [
4445
+ {
4446
+ "stats": [
4447
+ {
4448
+ "label": "Result",
4449
+ "value": "@entity.result"
4450
+ }
4451
+ ],
4452
+ "type": "game-hud"
4453
+ },
4454
+ {
4455
+ "action": "PLAY_AGAIN",
4456
+ "label": "Play Again",
4457
+ "type": "button",
4458
+ "variant": "primary"
4459
+ }
4460
+ ],
4461
+ "direction": "vertical",
4462
+ "gap": "md",
4463
+ "type": "stack"
4464
+ },
4465
+ null
4466
+ ],
4034
4467
  "type": "game-shell"
4035
4468
  }
4036
4469
  ]
@@ -4070,9 +4503,35 @@
4070
4503
  "render-ui",
4071
4504
  "main",
4072
4505
  {
4506
+ "addons": {
4507
+ "children": [
4508
+ {
4509
+ "action": "END_TURN",
4510
+ "label": "End Turn",
4511
+ "type": "button",
4512
+ "variant": "primary"
4513
+ },
4514
+ {
4515
+ "action": "CANCEL",
4516
+ "label": "Cancel",
4517
+ "type": "button",
4518
+ "variant": "secondary"
4519
+ },
4520
+ {
4521
+ "action": "PLAY_AGAIN",
4522
+ "label": "Restart",
4523
+ "type": "button",
4524
+ "variant": "secondary"
4525
+ }
4526
+ ],
4527
+ "direction": "vertical",
4528
+ "gap": "sm",
4529
+ "type": "stack"
4530
+ },
4073
4531
  "children": [
4074
4532
  {
4075
4533
  "attackTargets": "@entity.attackTargets",
4534
+ "events": "@entity.fx",
4076
4535
  "features": "@config.features",
4077
4536
  "scale": "@config.scale",
4078
4537
  "selectedUnitId": "@entity.selectedUnitId",
@@ -4102,6 +4561,38 @@
4102
4561
  ],
4103
4562
  "type": "game-hud"
4104
4563
  },
4564
+ "overlay": [
4565
+ "if",
4566
+ [
4567
+ "!=",
4568
+ "@entity.result",
4569
+ "none"
4570
+ ],
4571
+ {
4572
+ "align": "center",
4573
+ "children": [
4574
+ {
4575
+ "stats": [
4576
+ {
4577
+ "label": "Result",
4578
+ "value": "@entity.result"
4579
+ }
4580
+ ],
4581
+ "type": "game-hud"
4582
+ },
4583
+ {
4584
+ "action": "PLAY_AGAIN",
4585
+ "label": "Play Again",
4586
+ "type": "button",
4587
+ "variant": "primary"
4588
+ }
4589
+ ],
4590
+ "direction": "vertical",
4591
+ "gap": "md",
4592
+ "type": "stack"
4593
+ },
4594
+ null
4595
+ ],
4105
4596
  "type": "game-shell"
4106
4597
  }
4107
4598
  ]
@@ -4198,9 +4689,35 @@
4198
4689
  "render-ui",
4199
4690
  "main",
4200
4691
  {
4692
+ "addons": {
4693
+ "children": [
4694
+ {
4695
+ "action": "END_TURN",
4696
+ "label": "End Turn",
4697
+ "type": "button",
4698
+ "variant": "primary"
4699
+ },
4700
+ {
4701
+ "action": "CANCEL",
4702
+ "label": "Cancel",
4703
+ "type": "button",
4704
+ "variant": "secondary"
4705
+ },
4706
+ {
4707
+ "action": "PLAY_AGAIN",
4708
+ "label": "Restart",
4709
+ "type": "button",
4710
+ "variant": "secondary"
4711
+ }
4712
+ ],
4713
+ "direction": "vertical",
4714
+ "gap": "sm",
4715
+ "type": "stack"
4716
+ },
4201
4717
  "children": [
4202
4718
  {
4203
4719
  "attackTargets": "@entity.attackTargets",
4720
+ "events": "@entity.fx",
4204
4721
  "features": "@config.features",
4205
4722
  "scale": "@config.scale",
4206
4723
  "selectedUnitId": "@entity.selectedUnitId",
@@ -4230,6 +4747,38 @@
4230
4747
  ],
4231
4748
  "type": "game-hud"
4232
4749
  },
4750
+ "overlay": [
4751
+ "if",
4752
+ [
4753
+ "!=",
4754
+ "@entity.result",
4755
+ "none"
4756
+ ],
4757
+ {
4758
+ "align": "center",
4759
+ "children": [
4760
+ {
4761
+ "stats": [
4762
+ {
4763
+ "label": "Result",
4764
+ "value": "@entity.result"
4765
+ }
4766
+ ],
4767
+ "type": "game-hud"
4768
+ },
4769
+ {
4770
+ "action": "PLAY_AGAIN",
4771
+ "label": "Play Again",
4772
+ "type": "button",
4773
+ "variant": "primary"
4774
+ }
4775
+ ],
4776
+ "direction": "vertical",
4777
+ "gap": "md",
4778
+ "type": "stack"
4779
+ },
4780
+ null
4781
+ ],
4233
4782
  "type": "game-shell"
4234
4783
  }
4235
4784
  ]
@@ -4327,6 +4876,11 @@
4327
4876
  "@entity.attackTargets",
4328
4877
  []
4329
4878
  ],
4879
+ [
4880
+ "set",
4881
+ "@entity.fx",
4882
+ []
4883
+ ],
4330
4884
  [
4331
4885
  "set",
4332
4886
  "@entity.turn",
@@ -4352,13 +4906,49 @@
4352
4906
  "@entity.enemyTurn",
4353
4907
  false
4354
4908
  ],
4909
+ [
4910
+ "set",
4911
+ "@entity.gridWidth",
4912
+ 6.0
4913
+ ],
4914
+ [
4915
+ "set",
4916
+ "@entity.gridHeight",
4917
+ 6.0
4918
+ ],
4355
4919
  [
4356
4920
  "render-ui",
4357
4921
  "main",
4358
4922
  {
4923
+ "addons": {
4924
+ "children": [
4925
+ {
4926
+ "action": "END_TURN",
4927
+ "label": "End Turn",
4928
+ "type": "button",
4929
+ "variant": "primary"
4930
+ },
4931
+ {
4932
+ "action": "CANCEL",
4933
+ "label": "Cancel",
4934
+ "type": "button",
4935
+ "variant": "secondary"
4936
+ },
4937
+ {
4938
+ "action": "PLAY_AGAIN",
4939
+ "label": "Restart",
4940
+ "type": "button",
4941
+ "variant": "secondary"
4942
+ }
4943
+ ],
4944
+ "direction": "vertical",
4945
+ "gap": "sm",
4946
+ "type": "stack"
4947
+ },
4359
4948
  "children": [
4360
4949
  {
4361
4950
  "attackTargets": "@entity.attackTargets",
4951
+ "events": "@entity.fx",
4362
4952
  "features": "@config.features",
4363
4953
  "scale": "@config.scale",
4364
4954
  "selectedUnitId": "@entity.selectedUnitId",
@@ -4388,13 +4978,45 @@
4388
4978
  ],
4389
4979
  "type": "game-hud"
4390
4980
  },
4981
+ "overlay": [
4982
+ "if",
4983
+ [
4984
+ "!=",
4985
+ "@entity.result",
4986
+ "none"
4987
+ ],
4988
+ {
4989
+ "align": "center",
4990
+ "children": [
4991
+ {
4992
+ "stats": [
4993
+ {
4994
+ "label": "Result",
4995
+ "value": "@entity.result"
4996
+ }
4997
+ ],
4998
+ "type": "game-hud"
4999
+ },
5000
+ {
5001
+ "action": "PLAY_AGAIN",
5002
+ "label": "Play Again",
5003
+ "type": "button",
5004
+ "variant": "primary"
5005
+ }
5006
+ ],
5007
+ "direction": "vertical",
5008
+ "gap": "md",
5009
+ "type": "stack"
5010
+ },
5011
+ null
5012
+ ],
4391
5013
  "type": "game-shell"
4392
5014
  }
4393
5015
  ]
4394
5016
  ],
4395
5017
  "event": "PLAY_AGAIN",
4396
5018
  "from": "gameover",
4397
- "to": "menu"
5019
+ "to": "playing"
4398
5020
  }
4399
5021
  ]
4400
5022
  },
@@ -4522,19 +5144,18 @@
4522
5144
  ]
4523
5145
  ],
4524
5146
  [
4525
- "if",
5147
+ "let",
4526
5148
  [
4527
- "==",
4528
5149
  [
4529
- "array/len",
5150
+ "target",
4530
5151
  [
4531
- "array/filter",
4532
- "@entity.units",
5152
+ "array/reduce",
4533
5153
  [
4534
- "fn",
4535
- "p",
5154
+ "array/filter",
5155
+ "@entity.units",
4536
5156
  [
4537
- "and",
5157
+ "fn",
5158
+ "p",
4538
5159
  [
4539
5160
  "and",
4540
5161
  [
@@ -4547,161 +5168,292 @@
4547
5168
  "@p.health",
4548
5169
  0.0
4549
5170
  ]
4550
- ],
5171
+ ]
5172
+ ]
5173
+ ],
5174
+ [
5175
+ "fn",
5176
+ [
5177
+ "best",
5178
+ "p"
5179
+ ],
5180
+ [
5181
+ "if",
4551
5182
  [
4552
5183
  "==",
5184
+ "@best",
5185
+ null
5186
+ ],
5187
+ "@p",
5188
+ [
5189
+ "if",
4553
5190
  [
4554
- "grid/manhattan-distance",
5191
+ "<",
4555
5192
  [
4556
- "object/get",
4557
- "@u",
4558
- "position"
5193
+ "grid/manhattan-distance",
5194
+ [
5195
+ "object/get",
5196
+ "@u",
5197
+ "position"
5198
+ ],
5199
+ [
5200
+ "object/get",
5201
+ "@p",
5202
+ "position"
5203
+ ]
4559
5204
  ],
4560
5205
  [
4561
- "object/get",
4562
- "@p",
4563
- "position"
5206
+ "grid/manhattan-distance",
5207
+ [
5208
+ "object/get",
5209
+ "@u",
5210
+ "position"
5211
+ ],
5212
+ [
5213
+ "object/get",
5214
+ "@best",
5215
+ "position"
5216
+ ]
4564
5217
  ]
4565
5218
  ],
4566
- 1.0
5219
+ "@p",
5220
+ "@best"
4567
5221
  ]
4568
5222
  ]
4569
- ]
5223
+ ],
5224
+ null
4570
5225
  ]
4571
- ],
4572
- 0.0
5226
+ ]
4573
5227
  ],
4574
5228
  [
4575
- "let",
5229
+ "if",
4576
5230
  [
5231
+ "==",
5232
+ "@target",
5233
+ null
5234
+ ],
5235
+ "@u",
5236
+ [
5237
+ "if",
4577
5238
  [
4578
- "target",
5239
+ "==",
4579
5240
  [
4580
- "array/first",
5241
+ "grid/manhattan-distance",
4581
5242
  [
4582
- "array/filter",
4583
- "@entity.units",
4584
- [
4585
- "fn",
4586
- "p",
4587
- [
4588
- "and",
4589
- [
4590
- "==",
4591
- "@p.team",
4592
- "player"
4593
- ],
4594
- [
4595
- ">",
4596
- "@p.health",
4597
- 0.0
4598
- ]
4599
- ]
4600
- ]
5243
+ "object/get",
5244
+ "@u",
5245
+ "position"
5246
+ ],
5247
+ [
5248
+ "object/get",
5249
+ "@target",
5250
+ "position"
4601
5251
  ]
4602
- ]
4603
- ]
4604
- ],
4605
- [
4606
- "object/merge",
5252
+ ],
5253
+ 1.0
5254
+ ],
4607
5255
  "@u",
4608
- {
4609
- "position": {
4610
- "x": [
4611
- "math/clamp",
5256
+ [
5257
+ "let",
5258
+ [
5259
+ [
5260
+ "candX",
4612
5261
  [
4613
- "+",
5262
+ "math/clamp",
4614
5263
  [
4615
- "object/get",
5264
+ "+",
4616
5265
  [
4617
5266
  "object/get",
4618
- "@u",
4619
- "position"
5267
+ [
5268
+ "object/get",
5269
+ "@u",
5270
+ "position"
5271
+ ],
5272
+ "x"
4620
5273
  ],
4621
- "x"
4622
- ],
4623
- [
4624
- "math/sign",
4625
5274
  [
4626
- "-",
5275
+ "math/sign",
4627
5276
  [
4628
- "object/get",
5277
+ "-",
4629
5278
  [
4630
5279
  "object/get",
4631
- "@target",
4632
- "position"
5280
+ [
5281
+ "object/get",
5282
+ "@target",
5283
+ "position"
5284
+ ],
5285
+ "x"
4633
5286
  ],
4634
- "x"
4635
- ],
4636
- [
4637
- "object/get",
4638
5287
  [
4639
5288
  "object/get",
4640
- "@u",
4641
- "position"
4642
- ],
4643
- "x"
5289
+ [
5290
+ "object/get",
5291
+ "@u",
5292
+ "position"
5293
+ ],
5294
+ "x"
5295
+ ]
4644
5296
  ]
4645
5297
  ]
5298
+ ],
5299
+ 0.0,
5300
+ [
5301
+ "-",
5302
+ "@entity.gridWidth",
5303
+ 1.0
4646
5304
  ]
4647
- ],
4648
- 0.0,
4649
- [
4650
- "-",
4651
- "@entity.gridWidth",
4652
- 1.0
4653
5305
  ]
4654
5306
  ],
4655
- "y": [
4656
- "math/clamp",
5307
+ [
5308
+ "candY",
4657
5309
  [
4658
- "+",
5310
+ "math/clamp",
4659
5311
  [
4660
- "object/get",
5312
+ "+",
4661
5313
  [
4662
5314
  "object/get",
4663
- "@u",
4664
- "position"
5315
+ [
5316
+ "object/get",
5317
+ "@u",
5318
+ "position"
5319
+ ],
5320
+ "y"
4665
5321
  ],
4666
- "y"
4667
- ],
4668
- [
4669
- "math/sign",
4670
5322
  [
4671
- "-",
5323
+ "math/sign",
4672
5324
  [
4673
- "object/get",
5325
+ "-",
4674
5326
  [
4675
5327
  "object/get",
4676
- "@target",
4677
- "position"
5328
+ [
5329
+ "object/get",
5330
+ "@target",
5331
+ "position"
5332
+ ],
5333
+ "y"
4678
5334
  ],
4679
- "y"
4680
- ],
4681
- [
4682
- "object/get",
4683
5335
  [
4684
5336
  "object/get",
4685
- "@u",
4686
- "position"
4687
- ],
4688
- "y"
5337
+ [
5338
+ "object/get",
5339
+ "@u",
5340
+ "position"
5341
+ ],
5342
+ "y"
5343
+ ]
4689
5344
  ]
4690
5345
  ]
5346
+ ],
5347
+ 0.0,
5348
+ [
5349
+ "-",
5350
+ "@entity.gridHeight",
5351
+ 1.0
4691
5352
  ]
5353
+ ]
5354
+ ]
5355
+ ],
5356
+ [
5357
+ "if",
5358
+ [
5359
+ "and",
5360
+ [
5361
+ "==",
5362
+ [
5363
+ "object/get",
5364
+ [
5365
+ "array/find",
5366
+ "@config.tiles",
5367
+ [
5368
+ "fn",
5369
+ "t",
5370
+ [
5371
+ "and",
5372
+ [
5373
+ "==",
5374
+ [
5375
+ "object/get",
5376
+ "@t",
5377
+ "x"
5378
+ ],
5379
+ "@candX"
5380
+ ],
5381
+ [
5382
+ "==",
5383
+ [
5384
+ "object/get",
5385
+ "@t",
5386
+ "y"
5387
+ ],
5388
+ "@candY"
5389
+ ]
5390
+ ]
5391
+ ]
5392
+ ],
5393
+ "passable"
5394
+ ],
5395
+ true
4692
5396
  ],
4693
- 0.0,
4694
5397
  [
4695
- "-",
4696
- "@entity.gridHeight",
4697
- 1.0
5398
+ "==",
5399
+ [
5400
+ "array/len",
5401
+ [
5402
+ "array/filter",
5403
+ "@entity.units",
5404
+ [
5405
+ "fn",
5406
+ "o",
5407
+ [
5408
+ "and",
5409
+ [
5410
+ "==",
5411
+ [
5412
+ "object/get",
5413
+ [
5414
+ "object/get",
5415
+ "@o",
5416
+ "position"
5417
+ ],
5418
+ "x"
5419
+ ],
5420
+ "@candX"
5421
+ ],
5422
+ [
5423
+ "==",
5424
+ [
5425
+ "object/get",
5426
+ [
5427
+ "object/get",
5428
+ "@o",
5429
+ "position"
5430
+ ],
5431
+ "y"
5432
+ ],
5433
+ "@candY"
5434
+ ]
5435
+ ]
5436
+ ]
5437
+ ]
5438
+ ],
5439
+ 0.0
4698
5440
  ]
4699
- ]
4700
- }
4701
- }
5441
+ ],
5442
+ [
5443
+ "object/merge",
5444
+ "@u",
5445
+ {
5446
+ "position": {
5447
+ "x": "@candX",
5448
+ "y": "@candY"
5449
+ }
5450
+ }
5451
+ ],
5452
+ "@u"
5453
+ ]
5454
+ ]
4702
5455
  ]
4703
- ],
4704
- "@u"
5456
+ ]
4705
5457
  ],
4706
5458
  "@u"
4707
5459
  ]
@@ -4821,9 +5573,35 @@
4821
5573
  "render-ui",
4822
5574
  "main",
4823
5575
  {
5576
+ "addons": {
5577
+ "children": [
5578
+ {
5579
+ "action": "END_TURN",
5580
+ "label": "End Turn",
5581
+ "type": "button",
5582
+ "variant": "primary"
5583
+ },
5584
+ {
5585
+ "action": "CANCEL",
5586
+ "label": "Cancel",
5587
+ "type": "button",
5588
+ "variant": "secondary"
5589
+ },
5590
+ {
5591
+ "action": "PLAY_AGAIN",
5592
+ "label": "Restart",
5593
+ "type": "button",
5594
+ "variant": "secondary"
5595
+ }
5596
+ ],
5597
+ "direction": "vertical",
5598
+ "gap": "sm",
5599
+ "type": "stack"
5600
+ },
4824
5601
  "children": [
4825
5602
  {
4826
5603
  "attackTargets": "@entity.attackTargets",
5604
+ "events": "@entity.fx",
4827
5605
  "features": "@config.features",
4828
5606
  "scale": "@config.scale",
4829
5607
  "selectedUnitId": "@entity.selectedUnitId",
@@ -4853,6 +5631,38 @@
4853
5631
  ],
4854
5632
  "type": "game-hud"
4855
5633
  },
5634
+ "overlay": [
5635
+ "if",
5636
+ [
5637
+ "!=",
5638
+ "@entity.result",
5639
+ "none"
5640
+ ],
5641
+ {
5642
+ "align": "center",
5643
+ "children": [
5644
+ {
5645
+ "stats": [
5646
+ {
5647
+ "label": "Result",
5648
+ "value": "@entity.result"
5649
+ }
5650
+ ],
5651
+ "type": "game-hud"
5652
+ },
5653
+ {
5654
+ "action": "PLAY_AGAIN",
5655
+ "label": "Play Again",
5656
+ "type": "button",
5657
+ "variant": "primary"
5658
+ }
5659
+ ],
5660
+ "direction": "vertical",
5661
+ "gap": "md",
5662
+ "type": "stack"
5663
+ },
5664
+ null
5665
+ ],
4856
5666
  "type": "game-shell"
4857
5667
  }
4858
5668
  ]
@@ -4872,11 +5682,165 @@
4872
5682
  ],
4873
5683
  "interval": 1000.0,
4874
5684
  "name": "enemyAiTick"
5685
+ },
5686
+ {
5687
+ "effects": [
5688
+ [
5689
+ "set",
5690
+ "@entity.fx",
5691
+ [
5692
+ "array/filter",
5693
+ [
5694
+ "array/map",
5695
+ "@entity.fx",
5696
+ [
5697
+ "fn",
5698
+ "e",
5699
+ [
5700
+ "object/merge",
5701
+ "@e",
5702
+ {
5703
+ "ttl": [
5704
+ "-",
5705
+ [
5706
+ "object/get",
5707
+ "@e",
5708
+ "ttl"
5709
+ ],
5710
+ 1.0
5711
+ ]
5712
+ }
5713
+ ]
5714
+ ]
5715
+ ],
5716
+ [
5717
+ "fn",
5718
+ "e",
5719
+ [
5720
+ ">",
5721
+ [
5722
+ "object/get",
5723
+ "@e",
5724
+ "ttl"
5725
+ ],
5726
+ 0.0
5727
+ ]
5728
+ ]
5729
+ ]
5730
+ ],
5731
+ [
5732
+ "render-ui",
5733
+ "main",
5734
+ {
5735
+ "addons": {
5736
+ "children": [
5737
+ {
5738
+ "action": "END_TURN",
5739
+ "label": "End Turn",
5740
+ "type": "button",
5741
+ "variant": "primary"
5742
+ },
5743
+ {
5744
+ "action": "CANCEL",
5745
+ "label": "Cancel",
5746
+ "type": "button",
5747
+ "variant": "secondary"
5748
+ },
5749
+ {
5750
+ "action": "PLAY_AGAIN",
5751
+ "label": "Restart",
5752
+ "type": "button",
5753
+ "variant": "secondary"
5754
+ }
5755
+ ],
5756
+ "direction": "vertical",
5757
+ "gap": "sm",
5758
+ "type": "stack"
5759
+ },
5760
+ "children": [
5761
+ {
5762
+ "attackTargets": "@entity.attackTargets",
5763
+ "events": "@entity.fx",
5764
+ "features": "@config.features",
5765
+ "scale": "@config.scale",
5766
+ "selectedUnitId": "@entity.selectedUnitId",
5767
+ "tileClickEvent": "TILE_CLICK",
5768
+ "tiles": "@config.tiles",
5769
+ "type": "game-canvas-3d",
5770
+ "unitClickEvent": "UNIT_CLICK",
5771
+ "unitScale": "@config.unitScale",
5772
+ "units": "@entity.units",
5773
+ "validMoves": "@entity.validMoves"
5774
+ }
5775
+ ],
5776
+ "hud": {
5777
+ "stats": [
5778
+ {
5779
+ "label": "Turn",
5780
+ "value": "@entity.turn"
5781
+ },
5782
+ {
5783
+ "label": "Phase",
5784
+ "value": "@entity.phase"
5785
+ },
5786
+ {
5787
+ "label": "Result",
5788
+ "value": "@entity.result"
5789
+ }
5790
+ ],
5791
+ "type": "game-hud"
5792
+ },
5793
+ "overlay": [
5794
+ "if",
5795
+ [
5796
+ "!=",
5797
+ "@entity.result",
5798
+ "none"
5799
+ ],
5800
+ {
5801
+ "align": "center",
5802
+ "children": [
5803
+ {
5804
+ "stats": [
5805
+ {
5806
+ "label": "Result",
5807
+ "value": "@entity.result"
5808
+ }
5809
+ ],
5810
+ "type": "game-hud"
5811
+ },
5812
+ {
5813
+ "action": "PLAY_AGAIN",
5814
+ "label": "Play Again",
5815
+ "type": "button",
5816
+ "variant": "primary"
5817
+ }
5818
+ ],
5819
+ "direction": "vertical",
5820
+ "gap": "md",
5821
+ "type": "stack"
5822
+ },
5823
+ null
5824
+ ],
5825
+ "type": "game-shell"
5826
+ }
5827
+ ]
5828
+ ],
5829
+ "guard": [
5830
+ ">",
5831
+ [
5832
+ "array/len",
5833
+ "@entity.fx"
5834
+ ],
5835
+ 0.0
5836
+ ],
5837
+ "interval": 500.0,
5838
+ "name": "fxDecayTick"
4875
5839
  }
4876
5840
  ]
4877
5841
  }
4878
5842
  ]
4879
5843
  }
4880
5844
  ],
4881
- "version": "1.0.0"
5845
+ "version": "1.1.0"
4882
5846
  }