@almadar/std 16.153.0 → 16.155.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 (93) hide show
  1. package/behaviors/lolo/ui/game/molecules/std-crew-board-2d.lolo +4 -4
  2. package/behaviors/lolo/ui/game/molecules/std-dungeon-board-2d.lolo +6 -6
  3. package/behaviors/lolo/ui/game/molecules/std-tactics-board-2d.lolo +74 -28
  4. package/behaviors/lolo/ui/game/molecules/std-worldmap-board-2d.lolo +2 -2
  5. package/behaviors/lolo/ui/game/molecules/ui-canvas.lolo +5 -0
  6. package/behaviors/lolo/ui/game/organisms/ui-arena-board.lolo +2 -2
  7. package/behaviors/lolo/ui/game/organisms/ui-battle-board.lolo +159 -8
  8. package/behaviors/lolo/ui/game/organisms/ui-builder-board.lolo +5 -20
  9. package/behaviors/lolo/ui/game/organisms/ui-card-battler-board.lolo +2 -0
  10. package/behaviors/lolo/ui/game/organisms/ui-castle-board.lolo +3 -3
  11. package/behaviors/lolo/ui/game/organisms/ui-city-builder-board.lolo +9 -7
  12. package/behaviors/lolo/ui/game/organisms/ui-grid-tactics-demo-board.lolo +2 -2
  13. package/behaviors/lolo/ui/game/organisms/ui-hex-strategy-board.lolo +158 -10
  14. package/behaviors/lolo/ui/game/organisms/ui-holiday-runner-board.lolo +1 -1
  15. package/behaviors/lolo/ui/game/organisms/ui-minigolf-board.lolo +22 -22
  16. package/behaviors/lolo/ui/game/organisms/ui-pinball-board.lolo +7 -7
  17. package/behaviors/lolo/ui/game/organisms/ui-pirate-board.lolo +14 -14
  18. package/behaviors/lolo/ui/game/organisms/ui-platformer-board.lolo +4 -0
  19. package/behaviors/lolo/ui/game/organisms/ui-sports-board.lolo +10 -7
  20. package/behaviors/lolo/ui/game/organisms/ui-tactics-demo-2d.lolo +135 -9
  21. package/behaviors/lolo/ui/game/organisms/ui-tanks-board.lolo +152 -8
  22. package/behaviors/lolo/ui/game/organisms/ui-topdown-rts-board.lolo +293 -17
  23. package/behaviors/lolo/ui/game/organisms/ui-tower-defense-board.lolo +8 -8
  24. package/behaviors/lolo/ui/game/organisms/ui-uncontrolled-battle-board.lolo +5 -5
  25. package/behaviors/lolo/ui/game/organisms/ui-world-map-board.lolo +3 -3
  26. package/behaviors/registry/factory-signatures.json +1893 -2294
  27. package/behaviors/registry/ui/game/molecules/std-crew-board-2d.orb +10 -12
  28. package/behaviors/registry/ui/game/molecules/std-dungeon-board-2d.orb +15 -18
  29. package/behaviors/registry/ui/game/molecules/std-tactics-board-2d.orb +1726 -395
  30. package/behaviors/registry/ui/game/molecules/std-worldmap-board-2d.orb +7 -60
  31. package/behaviors/registry/ui/game/molecules/ui-canvas.orb +7 -0
  32. package/behaviors/registry/ui/game/organisms/ui-arena-board.orb +5 -6
  33. package/behaviors/registry/ui/game/organisms/ui-battle-board.orb +103 -100
  34. package/behaviors/registry/ui/game/organisms/ui-builder-board.orb +21 -226
  35. package/behaviors/registry/ui/game/organisms/ui-card-battler-board.orb +42 -0
  36. package/behaviors/registry/ui/game/organisms/ui-castle-board.orb +30 -9
  37. package/behaviors/registry/ui/game/organisms/ui-city-builder-board.orb +49 -0
  38. package/behaviors/registry/ui/game/organisms/ui-grid-tactics-demo-board.orb +5 -6
  39. package/behaviors/registry/ui/game/organisms/ui-hex-strategy-board.orb +95 -1187
  40. package/behaviors/registry/ui/game/organisms/ui-holiday-runner-board.orb +2 -3
  41. package/behaviors/registry/ui/game/organisms/ui-minigolf-board.orb +55 -11
  42. package/behaviors/registry/ui/game/organisms/ui-pinball-board.orb +8 -8
  43. package/behaviors/registry/ui/game/organisms/ui-pirate-board.orb +14 -0
  44. package/behaviors/registry/ui/game/organisms/ui-platformer-board.orb +72 -0
  45. package/behaviors/registry/ui/game/organisms/ui-sports-board.orb +60 -0
  46. package/behaviors/registry/ui/game/organisms/ui-tactics-demo-2d.orb +222 -332
  47. package/behaviors/registry/ui/game/organisms/ui-tanks-board.orb +127 -95
  48. package/behaviors/registry/ui/game/organisms/ui-topdown-rts-board.orb +1501 -264
  49. package/behaviors/registry/ui/game/organisms/ui-tower-defense-board.orb +8 -0
  50. package/behaviors/registry/ui/game/organisms/ui-uncontrolled-battle-board.orb +5 -0
  51. package/behaviors/registry/ui/game/organisms/ui-world-map-board.orb +8 -12
  52. package/dist/behaviors/behaviors-embeddings.json +244 -236
  53. package/dist/behaviors/behaviors-registry.json +193 -812
  54. package/dist/behaviors/exports-reader.js +1099 -2090
  55. package/dist/behaviors/functions/index.d.ts +33 -26
  56. package/dist/behaviors/functions/index.js +1099 -2091
  57. package/dist/behaviors/index.d.ts +1 -1
  58. package/dist/behaviors/index.js +1100 -2091
  59. package/dist/behaviors/knob-embeddings.json +1 -1
  60. package/dist/behaviors/query.js +1099 -2090
  61. package/dist/behaviors/registry/factory-signatures.json +1893 -2294
  62. package/dist/behaviors/registry/ui/game/molecules/std-crew-board-2d.orb +10 -12
  63. package/dist/behaviors/registry/ui/game/molecules/std-dungeon-board-2d.orb +15 -18
  64. package/dist/behaviors/registry/ui/game/molecules/std-tactics-board-2d.orb +1726 -395
  65. package/dist/behaviors/registry/ui/game/molecules/std-worldmap-board-2d.orb +7 -60
  66. package/dist/behaviors/registry/ui/game/molecules/ui-canvas.orb +7 -0
  67. package/dist/behaviors/registry/ui/game/organisms/ui-arena-board.orb +5 -6
  68. package/dist/behaviors/registry/ui/game/organisms/ui-battle-board.orb +103 -100
  69. package/dist/behaviors/registry/ui/game/organisms/ui-builder-board.orb +21 -226
  70. package/dist/behaviors/registry/ui/game/organisms/ui-card-battler-board.orb +42 -0
  71. package/dist/behaviors/registry/ui/game/organisms/ui-castle-board.orb +30 -9
  72. package/dist/behaviors/registry/ui/game/organisms/ui-city-builder-board.orb +49 -0
  73. package/dist/behaviors/registry/ui/game/organisms/ui-grid-tactics-demo-board.orb +5 -6
  74. package/dist/behaviors/registry/ui/game/organisms/ui-hex-strategy-board.orb +95 -1187
  75. package/dist/behaviors/registry/ui/game/organisms/ui-holiday-runner-board.orb +2 -3
  76. package/dist/behaviors/registry/ui/game/organisms/ui-minigolf-board.orb +55 -11
  77. package/dist/behaviors/registry/ui/game/organisms/ui-pinball-board.orb +8 -8
  78. package/dist/behaviors/registry/ui/game/organisms/ui-pirate-board.orb +14 -0
  79. package/dist/behaviors/registry/ui/game/organisms/ui-platformer-board.orb +72 -0
  80. package/dist/behaviors/registry/ui/game/organisms/ui-sports-board.orb +60 -0
  81. package/dist/behaviors/registry/ui/game/organisms/ui-tactics-demo-2d.orb +222 -332
  82. package/dist/behaviors/registry/ui/game/organisms/ui-tanks-board.orb +127 -95
  83. package/dist/behaviors/registry/ui/game/organisms/ui-topdown-rts-board.orb +1501 -264
  84. package/dist/behaviors/registry/ui/game/organisms/ui-tower-defense-board.orb +8 -0
  85. package/dist/behaviors/registry/ui/game/organisms/ui-uncontrolled-battle-board.orb +5 -0
  86. package/dist/behaviors/registry/ui/game/organisms/ui-world-map-board.orb +8 -12
  87. package/dist/behaviors-embeddings.json +244 -236
  88. package/dist/behaviors-registry.json +193 -812
  89. package/dist/index.d.ts +1 -1
  90. package/dist/index.js +1100 -2091
  91. package/dist/knob-embeddings.json +1 -1
  92. package/dist/registry/factory-signatures.json +1893 -2294
  93. package/package.json +2 -2
@@ -1,5 +1,5 @@
1
1
  {
2
- "description": "Medieval RTS skirmish: thin organism composing the std-tactics-board-2d frame + std-production (barracks recruits via a Produce button) + std-score, with a Kenney medieval-RTS theme supplied via config.",
2
+ "description": "Real-time RTS base skirmish: thin organism composing the std-tactics-board-2d frame + std-score, plus three organism-level traits (RtsClock / RtsEconomy / RtsWaves) that turn the turn-based frame into a real-time RTS a 2s clock auto-advances turns, workers harvest gold at the mine, gold musters tanks at the town hall, and raider waves stream out of a fortified den. Win by destroying the den; lose when your whole base (town hall included) is wiped.",
3
3
  "ledger": {
4
4
  "entries": {
5
5
  "ent_01KXG04ZZ5SX0MBP8BY8JYMC2W": {
@@ -10,6 +10,69 @@
10
10
  "owner": "workspace",
11
11
  "renames": []
12
12
  },
13
+ "evt_01KYSQS3WN2TKMRYCXR84P9SQ8": {
14
+ "bakedName": "INIT",
15
+ "curName": "INIT",
16
+ "id": "evt_01KYSQS3WN2TKMRYCXR84P9SQ8",
17
+ "kind": "event",
18
+ "owner": "workspace",
19
+ "parent": "trt_01KYSQS3WN420MB94Y3JD39FA1",
20
+ "renames": []
21
+ },
22
+ "evt_01KYSQS3WN6P12MFEDW8BNM5BA": {
23
+ "bakedName": "INIT",
24
+ "curName": "INIT",
25
+ "id": "evt_01KYSQS3WN6P12MFEDW8BNM5BA",
26
+ "kind": "event",
27
+ "owner": "workspace",
28
+ "parent": "trt_01KYSQS3WNJMR9GXMKPXP5QMDM",
29
+ "renames": []
30
+ },
31
+ "evt_01KYSQS3WNKB4JJA8FWERX8YZZ": {
32
+ "bakedName": "INIT",
33
+ "curName": "INIT",
34
+ "id": "evt_01KYSQS3WNKB4JJA8FWERX8YZZ",
35
+ "kind": "event",
36
+ "owner": "workspace",
37
+ "parent": "trt_01KYSQS3WN9N534NZJ0SBV9YJN",
38
+ "renames": []
39
+ },
40
+ "evt_01KYSQS3WNN8A5TZ9WNYCSEXV9": {
41
+ "bakedName": "SPAWN",
42
+ "curName": "SPAWN",
43
+ "id": "evt_01KYSQS3WNN8A5TZ9WNYCSEXV9",
44
+ "kind": "event",
45
+ "owner": "workspace",
46
+ "parent": "trt_01KYSQS3WN9N534NZJ0SBV9YJN",
47
+ "renames": []
48
+ },
49
+ "evt_01KYSQS3WNRDSZQG8ZYGC6DC97": {
50
+ "bakedName": "SPAWN",
51
+ "curName": "SPAWN",
52
+ "id": "evt_01KYSQS3WNRDSZQG8ZYGC6DC97",
53
+ "kind": "event",
54
+ "owner": "workspace",
55
+ "parent": "trt_01KYSQS3WNJMR9GXMKPXP5QMDM",
56
+ "renames": []
57
+ },
58
+ "evt_01KYSQS3WNVXPYZRGJE1M2GCSG": {
59
+ "bakedName": "END_TURN",
60
+ "curName": "END_TURN",
61
+ "id": "evt_01KYSQS3WNVXPYZRGJE1M2GCSG",
62
+ "kind": "event",
63
+ "owner": "workspace",
64
+ "parent": "trt_01KYSQS3WN420MB94Y3JD39FA1",
65
+ "renames": []
66
+ },
67
+ "evt_01KYSQS3WNZGH5JKN60J2CSEGD": {
68
+ "bakedName": "BUILD_TANK",
69
+ "curName": "BUILD_TANK",
70
+ "id": "evt_01KYSQS3WNZGH5JKN60J2CSEGD",
71
+ "kind": "event",
72
+ "owner": "workspace",
73
+ "parent": "trt_01KYSQS3WN9N534NZJ0SBV9YJN",
74
+ "renames": []
75
+ },
13
76
  "orb_01KXG04ZZ5251GS1BMDWMFFKGC": {
14
77
  "bakedName": "TopdownRtsBoardOrbital",
15
78
  "curName": "TopdownRtsBoardOrbital",
@@ -58,14 +121,6 @@
58
121
  "owner": "workspace",
59
122
  "renames": []
60
123
  },
61
- "trt_01KXZ450WAPQ67A6HRJC1ZR8JQ": {
62
- "bakedName": "Producer",
63
- "curName": "Producer",
64
- "id": "trt_01KXZ450WAPQ67A6HRJC1ZR8JQ",
65
- "kind": "trait",
66
- "owner": "workspace",
67
- "renames": []
68
- },
69
124
  "trt_01KXZ450WAVMWGRZK763K8P9FP": {
70
125
  "bakedName": "ScoreKeeper",
71
126
  "curName": "ScoreKeeper",
@@ -73,6 +128,38 @@
73
128
  "kind": "trait",
74
129
  "owner": "workspace",
75
130
  "renames": []
131
+ },
132
+ "trt_01KYR91ZFW8BXEF1FT9737TFG9": {
133
+ "bakedName": "AnimClock",
134
+ "curName": "AnimClock",
135
+ "id": "trt_01KYR91ZFW8BXEF1FT9737TFG9",
136
+ "kind": "trait",
137
+ "owner": "workspace",
138
+ "renames": []
139
+ },
140
+ "trt_01KYSQS3WN420MB94Y3JD39FA1": {
141
+ "bakedName": "RtsClock",
142
+ "curName": "RtsClock",
143
+ "id": "trt_01KYSQS3WN420MB94Y3JD39FA1",
144
+ "kind": "trait",
145
+ "owner": "workspace",
146
+ "renames": []
147
+ },
148
+ "trt_01KYSQS3WN9N534NZJ0SBV9YJN": {
149
+ "bakedName": "RtsEconomy",
150
+ "curName": "RtsEconomy",
151
+ "id": "trt_01KYSQS3WN9N534NZJ0SBV9YJN",
152
+ "kind": "trait",
153
+ "owner": "workspace",
154
+ "renames": []
155
+ },
156
+ "trt_01KYSQS3WNJMR9GXMKPXP5QMDM": {
157
+ "bakedName": "RtsWaves",
158
+ "curName": "RtsWaves",
159
+ "id": "trt_01KYSQS3WNJMR9GXMKPXP5QMDM",
160
+ "kind": "trait",
161
+ "owner": "workspace",
162
+ "renames": []
76
163
  }
77
164
  },
78
165
  "schemaVersion": 1
@@ -89,6 +176,70 @@
89
176
  },
90
177
  {
91
178
  "default": [
179
+ {
180
+ "health": 5.0,
181
+ "id": "w1",
182
+ "maxHealth": 5.0,
183
+ "modelUrl": {
184
+ "animations": [
185
+ "idle",
186
+ "walk",
187
+ "attack",
188
+ "hit",
189
+ "death"
190
+ ],
191
+ "aspect": "1:1",
192
+ "category": "worker",
193
+ "dimension": "2d",
194
+ "name": "worker",
195
+ "role": "npc",
196
+ "style": "",
197
+ "thumbnailUrl": "",
198
+ "url": "https://almadar-kflow-assets.web.app/shared/ui-topdown-rts-board/svg/flat/units/worker.svg"
199
+ },
200
+ "name": "Pick",
201
+ "position": {
202
+ "x": 0.0,
203
+ "y": 0.0
204
+ },
205
+ "team": "player",
206
+ "unitType": "worker",
207
+ "x": 0.0,
208
+ "y": 0.0,
209
+ "z": 0.0
210
+ },
211
+ {
212
+ "health": 5.0,
213
+ "id": "w2",
214
+ "maxHealth": 5.0,
215
+ "modelUrl": {
216
+ "animations": [
217
+ "idle",
218
+ "walk",
219
+ "attack",
220
+ "hit",
221
+ "death"
222
+ ],
223
+ "aspect": "1:1",
224
+ "category": "worker",
225
+ "dimension": "2d",
226
+ "name": "worker",
227
+ "role": "npc",
228
+ "style": "",
229
+ "thumbnailUrl": "",
230
+ "url": "https://almadar-kflow-assets.web.app/shared/ui-topdown-rts-board/svg/flat/units/worker.svg"
231
+ },
232
+ "name": "Shovel",
233
+ "position": {
234
+ "x": 1.0,
235
+ "y": 0.0
236
+ },
237
+ "team": "player",
238
+ "unitType": "worker",
239
+ "x": 1.0,
240
+ "y": 0.0,
241
+ "z": 0.0
242
+ },
92
243
  {
93
244
  "health": 10.0,
94
245
  "id": "t1",
@@ -102,31 +253,29 @@
102
253
  "death"
103
254
  ],
104
255
  "aspect": "1:1",
105
- "atlas": "https://almadar-kflow-assets.web.app/shared/ui-topdown-rts-board/kenney-rts-medieval/terrain/medievalRTS_spritesheet.json",
106
- "category": "tankBody_green",
256
+ "category": "tank",
107
257
  "dimension": "2d",
108
- "name": "tankBody_green",
258
+ "name": "tank",
109
259
  "role": "npc",
110
- "sprite": "medievalUnit_01.png",
111
- "style": "vector-flat",
260
+ "style": "",
112
261
  "thumbnailUrl": "",
113
- "url": "https://almadar-kflow-assets.web.app/shared/ui-topdown-rts-board/kenney-rts-medieval/terrain/medievalRTS_spritesheet.png"
262
+ "url": "https://almadar-kflow-assets.web.app/shared/ui-topdown-rts-board/svg/flat/units/tank.svg"
114
263
  },
115
264
  "name": "Alpha",
116
265
  "position": {
117
266
  "x": 1.0,
118
- "y": 1.0
267
+ "y": 3.0
119
268
  },
120
269
  "team": "player",
121
270
  "unitType": "tank",
122
271
  "x": 1.0,
123
- "y": 1.0,
272
+ "y": 3.0,
124
273
  "z": 0.0
125
274
  },
126
275
  {
127
- "health": 10.0,
128
- "id": "t2",
129
- "maxHealth": 10.0,
276
+ "health": 30.0,
277
+ "id": "hall",
278
+ "maxHealth": 30.0,
130
279
  "modelUrl": {
131
280
  "animations": [
132
281
  "idle",
@@ -136,31 +285,29 @@
136
285
  "death"
137
286
  ],
138
287
  "aspect": "1:1",
139
- "atlas": "https://almadar-kflow-assets.web.app/shared/ui-topdown-rts-board/kenney-rts-medieval/terrain/medievalRTS_spritesheet.json",
140
- "category": "tankBody_dark",
288
+ "category": "town_hall",
141
289
  "dimension": "2d",
142
- "name": "tankBody_dark",
290
+ "name": "town_hall",
143
291
  "role": "npc",
144
- "sprite": "medievalUnit_05.png",
145
- "style": "vector-flat",
292
+ "style": "",
146
293
  "thumbnailUrl": "",
147
- "url": "https://almadar-kflow-assets.web.app/shared/ui-topdown-rts-board/kenney-rts-medieval/terrain/medievalRTS_spritesheet.png"
294
+ "url": "https://almadar-kflow-assets.web.app/shared/ui-topdown-rts-board/svg/flat/units/town_hall.svg"
148
295
  },
149
- "name": "Bravo",
296
+ "name": "Bastion",
150
297
  "position": {
151
- "x": 6.0,
152
- "y": 0.0
298
+ "x": 0.0,
299
+ "y": 3.0
153
300
  },
154
- "team": "enemy",
155
- "unitType": "tank",
156
- "x": 6.0,
157
- "y": 0.0,
301
+ "team": "player",
302
+ "unitType": "town_hall",
303
+ "x": 0.0,
304
+ "y": 3.0,
158
305
  "z": 0.0
159
306
  },
160
307
  {
161
- "health": 8.0,
162
- "id": "t3",
163
- "maxHealth": 10.0,
308
+ "health": 30.0,
309
+ "id": "den",
310
+ "maxHealth": 30.0,
164
311
  "modelUrl": {
165
312
  "animations": [
166
313
  "idle",
@@ -170,25 +317,23 @@
170
317
  "death"
171
318
  ],
172
319
  "aspect": "1:1",
173
- "atlas": "https://almadar-kflow-assets.web.app/shared/ui-topdown-rts-board/kenney-rts-medieval/terrain/medievalRTS_spritesheet.json",
174
- "category": "tankBody_dark",
320
+ "category": "raider_den",
175
321
  "dimension": "2d",
176
- "name": "tankBody_dark",
322
+ "name": "raider_den",
177
323
  "role": "npc",
178
- "sprite": "medievalUnit_05.png",
179
- "style": "vector-flat",
324
+ "style": "",
180
325
  "thumbnailUrl": "",
181
- "url": "https://almadar-kflow-assets.web.app/shared/ui-topdown-rts-board/kenney-rts-medieval/terrain/medievalRTS_spritesheet.png"
326
+ "url": "https://almadar-kflow-assets.web.app/shared/ui-topdown-rts-board/svg/flat/units/raider_den.svg"
182
327
  },
183
- "name": "Charlie",
328
+ "name": "Den",
184
329
  "position": {
185
- "x": 6.0,
186
- "y": 4.0
330
+ "x": 7.0,
331
+ "y": 2.0
187
332
  },
188
333
  "team": "enemy",
189
- "unitType": "tank",
190
- "x": 6.0,
191
- "y": 4.0,
334
+ "unitType": "raider_den",
335
+ "x": 7.0,
336
+ "y": 2.0,
192
337
  "z": 0.0
193
338
  }
194
339
  ],
@@ -432,7 +577,7 @@
432
577
  },
433
578
  {
434
579
  "id": "t-0-1",
435
- "passable": true,
580
+ "passable": false,
436
581
  "terrain": "ground",
437
582
  "x": 0.0,
438
583
  "y": 1.0
@@ -474,28 +619,28 @@
474
619
  },
475
620
  {
476
621
  "id": "t-6-1",
477
- "passable": true,
622
+ "passable": false,
478
623
  "terrain": "ground",
479
624
  "x": 6.0,
480
625
  "y": 1.0
481
626
  },
482
627
  {
483
628
  "id": "t-7-1",
484
- "passable": true,
629
+ "passable": false,
485
630
  "terrain": "ground",
486
631
  "x": 7.0,
487
632
  "y": 1.0
488
633
  },
489
634
  {
490
635
  "id": "t-0-2",
491
- "passable": true,
636
+ "passable": false,
492
637
  "terrain": "ground",
493
638
  "x": 0.0,
494
639
  "y": 2.0
495
640
  },
496
641
  {
497
642
  "id": "t-1-2",
498
- "passable": true,
643
+ "passable": false,
499
644
  "terrain": "ground",
500
645
  "x": 1.0,
501
646
  "y": 2.0
@@ -530,7 +675,7 @@
530
675
  },
531
676
  {
532
677
  "id": "t-6-2",
533
- "passable": true,
678
+ "passable": false,
534
679
  "terrain": "ground",
535
680
  "x": 6.0,
536
681
  "y": 2.0
@@ -586,28 +731,28 @@
586
731
  },
587
732
  {
588
733
  "id": "t-6-3",
589
- "passable": true,
734
+ "passable": false,
590
735
  "terrain": "ground",
591
736
  "x": 6.0,
592
737
  "y": 3.0
593
738
  },
594
739
  {
595
740
  "id": "t-7-3",
596
- "passable": true,
741
+ "passable": false,
597
742
  "terrain": "ground",
598
743
  "x": 7.0,
599
744
  "y": 3.0
600
745
  },
601
746
  {
602
747
  "id": "t-0-4",
603
- "passable": true,
748
+ "passable": false,
604
749
  "terrain": "ground",
605
750
  "x": 0.0,
606
751
  "y": 4.0
607
752
  },
608
753
  {
609
754
  "id": "t-1-4",
610
- "passable": true,
755
+ "passable": false,
611
756
  "terrain": "ground",
612
757
  "x": 1.0,
613
758
  "y": 4.0
@@ -636,14 +781,14 @@
636
781
  {
637
782
  "id": "t-5-4",
638
783
  "passable": true,
639
- "terrain": "ground",
784
+ "terrain": "sand",
640
785
  "x": 5.0,
641
786
  "y": 4.0
642
787
  },
643
788
  {
644
789
  "id": "t-6-4",
645
790
  "passable": true,
646
- "terrain": "ground",
791
+ "terrain": "sand",
647
792
  "x": 6.0,
648
793
  "y": 4.0
649
794
  },
@@ -656,7 +801,7 @@
656
801
  },
657
802
  {
658
803
  "id": "t-0-5",
659
- "passable": true,
804
+ "passable": false,
660
805
  "terrain": "ground",
661
806
  "x": 0.0,
662
807
  "y": 5.0
@@ -692,14 +837,14 @@
692
837
  {
693
838
  "id": "t-5-5",
694
839
  "passable": true,
695
- "terrain": "ground",
840
+ "terrain": "sand",
696
841
  "x": 5.0,
697
842
  "y": 5.0
698
843
  },
699
844
  {
700
845
  "id": "t-6-5",
701
846
  "passable": true,
702
- "terrain": "ground",
847
+ "terrain": "sand",
703
848
  "x": 6.0,
704
849
  "y": 5.0
705
850
  },
@@ -864,6 +1009,22 @@
864
1009
  "name": "attackTargets",
865
1010
  "type": "array"
866
1011
  },
1012
+ {
1013
+ "default": [],
1014
+ "items": {
1015
+ "type": "string"
1016
+ },
1017
+ "name": "movedIds",
1018
+ "type": "array"
1019
+ },
1020
+ {
1021
+ "default": [],
1022
+ "items": {
1023
+ "type": "string"
1024
+ },
1025
+ "name": "actedIds",
1026
+ "type": "array"
1027
+ },
867
1028
  {
868
1029
  "default": "observation",
869
1030
  "name": "uiPhase",
@@ -886,12 +1047,22 @@
886
1047
  },
887
1048
  {
888
1049
  "default": 0.0,
889
- "name": "productionPoints",
1050
+ "name": "gold",
1051
+ "type": "number"
1052
+ },
1053
+ {
1054
+ "default": 0.0,
1055
+ "name": "ecoSpawnCount",
1056
+ "type": "number"
1057
+ },
1058
+ {
1059
+ "default": 0.0,
1060
+ "name": "waveCount",
890
1061
  "type": "number"
891
1062
  },
892
1063
  {
893
1064
  "default": 0.0,
894
- "name": "spawnCount",
1065
+ "name": "clockTicks",
895
1066
  "type": "number"
896
1067
  }
897
1068
  ],
@@ -924,13 +1095,25 @@
924
1095
  "ref": "ScoreKeeper",
925
1096
  "refId": "trt_01KXZ450WAVMWGRZK763K8P9FP"
926
1097
  },
927
- {
928
- "ref": "Producer",
929
- "refId": "trt_01KXZ450WAPQ67A6HRJC1ZR8JQ"
930
- },
931
1098
  {
932
1099
  "ref": "Player",
933
1100
  "refId": "trt_01KXZ450WABW0CD4FQE2X311T6"
1101
+ },
1102
+ {
1103
+ "ref": "AnimClock",
1104
+ "refId": "trt_01KYR91ZFW8BXEF1FT9737TFG9"
1105
+ },
1106
+ {
1107
+ "ref": "RtsClock",
1108
+ "refId": "trt_01KYSQS3WN420MB94Y3JD39FA1"
1109
+ },
1110
+ {
1111
+ "ref": "RtsEconomy",
1112
+ "refId": "trt_01KYSQS3WN9N534NZJ0SBV9YJN"
1113
+ },
1114
+ {
1115
+ "ref": "RtsWaves",
1116
+ "refId": "trt_01KYSQS3WNJMR9GXMKPXP5QMDM"
934
1117
  }
935
1118
  ]
936
1119
  }
@@ -1014,7 +1197,7 @@
1014
1197
  },
1015
1198
  {
1016
1199
  "id": "t-0-1",
1017
- "passable": true,
1200
+ "passable": false,
1018
1201
  "terrain": "ground",
1019
1202
  "x": 0.0,
1020
1203
  "y": 1.0
@@ -1056,28 +1239,28 @@
1056
1239
  },
1057
1240
  {
1058
1241
  "id": "t-6-1",
1059
- "passable": true,
1242
+ "passable": false,
1060
1243
  "terrain": "ground",
1061
1244
  "x": 6.0,
1062
1245
  "y": 1.0
1063
1246
  },
1064
1247
  {
1065
1248
  "id": "t-7-1",
1066
- "passable": true,
1249
+ "passable": false,
1067
1250
  "terrain": "ground",
1068
1251
  "x": 7.0,
1069
1252
  "y": 1.0
1070
1253
  },
1071
1254
  {
1072
1255
  "id": "t-0-2",
1073
- "passable": true,
1256
+ "passable": false,
1074
1257
  "terrain": "ground",
1075
1258
  "x": 0.0,
1076
1259
  "y": 2.0
1077
1260
  },
1078
1261
  {
1079
1262
  "id": "t-1-2",
1080
- "passable": true,
1263
+ "passable": false,
1081
1264
  "terrain": "ground",
1082
1265
  "x": 1.0,
1083
1266
  "y": 2.0
@@ -1112,7 +1295,7 @@
1112
1295
  },
1113
1296
  {
1114
1297
  "id": "t-6-2",
1115
- "passable": true,
1298
+ "passable": false,
1116
1299
  "terrain": "ground",
1117
1300
  "x": 6.0,
1118
1301
  "y": 2.0
@@ -1168,28 +1351,28 @@
1168
1351
  },
1169
1352
  {
1170
1353
  "id": "t-6-3",
1171
- "passable": true,
1354
+ "passable": false,
1172
1355
  "terrain": "ground",
1173
1356
  "x": 6.0,
1174
1357
  "y": 3.0
1175
1358
  },
1176
1359
  {
1177
1360
  "id": "t-7-3",
1178
- "passable": true,
1361
+ "passable": false,
1179
1362
  "terrain": "ground",
1180
1363
  "x": 7.0,
1181
1364
  "y": 3.0
1182
1365
  },
1183
1366
  {
1184
1367
  "id": "t-0-4",
1185
- "passable": true,
1368
+ "passable": false,
1186
1369
  "terrain": "ground",
1187
1370
  "x": 0.0,
1188
1371
  "y": 4.0
1189
1372
  },
1190
1373
  {
1191
1374
  "id": "t-1-4",
1192
- "passable": true,
1375
+ "passable": false,
1193
1376
  "terrain": "ground",
1194
1377
  "x": 1.0,
1195
1378
  "y": 4.0
@@ -1218,14 +1401,14 @@
1218
1401
  {
1219
1402
  "id": "t-5-4",
1220
1403
  "passable": true,
1221
- "terrain": "ground",
1404
+ "terrain": "sand",
1222
1405
  "x": 5.0,
1223
1406
  "y": 4.0
1224
1407
  },
1225
1408
  {
1226
1409
  "id": "t-6-4",
1227
1410
  "passable": true,
1228
- "terrain": "ground",
1411
+ "terrain": "sand",
1229
1412
  "x": 6.0,
1230
1413
  "y": 4.0
1231
1414
  },
@@ -1238,7 +1421,7 @@
1238
1421
  },
1239
1422
  {
1240
1423
  "id": "t-0-5",
1241
- "passable": true,
1424
+ "passable": false,
1242
1425
  "terrain": "ground",
1243
1426
  "x": 0.0,
1244
1427
  "y": 5.0
@@ -1274,14 +1457,14 @@
1274
1457
  {
1275
1458
  "id": "t-5-5",
1276
1459
  "passable": true,
1277
- "terrain": "ground",
1460
+ "terrain": "sand",
1278
1461
  "x": 5.0,
1279
1462
  "y": 5.0
1280
1463
  },
1281
1464
  {
1282
1465
  "id": "t-6-5",
1283
1466
  "passable": true,
1284
- "terrain": "ground",
1467
+ "terrain": "sand",
1285
1468
  "x": 6.0,
1286
1469
  "y": 5.0
1287
1470
  },
@@ -1297,6 +1480,70 @@
1297
1480
  },
1298
1481
  "units": {
1299
1482
  "default": [
1483
+ {
1484
+ "health": 5.0,
1485
+ "id": "w1",
1486
+ "maxHealth": 5.0,
1487
+ "modelUrl": {
1488
+ "animations": [
1489
+ "idle",
1490
+ "walk",
1491
+ "attack",
1492
+ "hit",
1493
+ "death"
1494
+ ],
1495
+ "aspect": "1:1",
1496
+ "category": "worker",
1497
+ "dimension": "2d",
1498
+ "name": "worker",
1499
+ "role": "npc",
1500
+ "style": "",
1501
+ "thumbnailUrl": "",
1502
+ "url": "https://almadar-kflow-assets.web.app/shared/ui-topdown-rts-board/svg/flat/units/worker.svg"
1503
+ },
1504
+ "name": "Pick",
1505
+ "position": {
1506
+ "x": 0.0,
1507
+ "y": 0.0
1508
+ },
1509
+ "team": "player",
1510
+ "unitType": "worker",
1511
+ "x": 0.0,
1512
+ "y": 0.0,
1513
+ "z": 0.0
1514
+ },
1515
+ {
1516
+ "health": 5.0,
1517
+ "id": "w2",
1518
+ "maxHealth": 5.0,
1519
+ "modelUrl": {
1520
+ "animations": [
1521
+ "idle",
1522
+ "walk",
1523
+ "attack",
1524
+ "hit",
1525
+ "death"
1526
+ ],
1527
+ "aspect": "1:1",
1528
+ "category": "worker",
1529
+ "dimension": "2d",
1530
+ "name": "worker",
1531
+ "role": "npc",
1532
+ "style": "",
1533
+ "thumbnailUrl": "",
1534
+ "url": "https://almadar-kflow-assets.web.app/shared/ui-topdown-rts-board/svg/flat/units/worker.svg"
1535
+ },
1536
+ "name": "Shovel",
1537
+ "position": {
1538
+ "x": 1.0,
1539
+ "y": 0.0
1540
+ },
1541
+ "team": "player",
1542
+ "unitType": "worker",
1543
+ "x": 1.0,
1544
+ "y": 0.0,
1545
+ "z": 0.0
1546
+ },
1300
1547
  {
1301
1548
  "health": 10.0,
1302
1549
  "id": "t1",
@@ -1310,31 +1557,29 @@
1310
1557
  "death"
1311
1558
  ],
1312
1559
  "aspect": "1:1",
1313
- "atlas": "https://almadar-kflow-assets.web.app/shared/ui-topdown-rts-board/kenney-rts-medieval/terrain/medievalRTS_spritesheet.json",
1314
- "category": "tankBody_green",
1560
+ "category": "tank",
1315
1561
  "dimension": "2d",
1316
- "name": "tankBody_green",
1562
+ "name": "tank",
1317
1563
  "role": "npc",
1318
- "sprite": "medievalUnit_01.png",
1319
- "style": "vector-flat",
1564
+ "style": "",
1320
1565
  "thumbnailUrl": "",
1321
- "url": "https://almadar-kflow-assets.web.app/shared/ui-topdown-rts-board/kenney-rts-medieval/terrain/medievalRTS_spritesheet.png"
1566
+ "url": "https://almadar-kflow-assets.web.app/shared/ui-topdown-rts-board/svg/flat/units/tank.svg"
1322
1567
  },
1323
1568
  "name": "Alpha",
1324
1569
  "position": {
1325
1570
  "x": 1.0,
1326
- "y": 1.0
1571
+ "y": 3.0
1327
1572
  },
1328
1573
  "team": "player",
1329
1574
  "unitType": "tank",
1330
1575
  "x": 1.0,
1331
- "y": 1.0,
1576
+ "y": 3.0,
1332
1577
  "z": 0.0
1333
1578
  },
1334
1579
  {
1335
- "health": 10.0,
1336
- "id": "t2",
1337
- "maxHealth": 10.0,
1580
+ "health": 30.0,
1581
+ "id": "hall",
1582
+ "maxHealth": 30.0,
1338
1583
  "modelUrl": {
1339
1584
  "animations": [
1340
1585
  "idle",
@@ -1344,31 +1589,29 @@
1344
1589
  "death"
1345
1590
  ],
1346
1591
  "aspect": "1:1",
1347
- "atlas": "https://almadar-kflow-assets.web.app/shared/ui-topdown-rts-board/kenney-rts-medieval/terrain/medievalRTS_spritesheet.json",
1348
- "category": "tankBody_dark",
1592
+ "category": "town_hall",
1349
1593
  "dimension": "2d",
1350
- "name": "tankBody_dark",
1594
+ "name": "town_hall",
1351
1595
  "role": "npc",
1352
- "sprite": "medievalUnit_05.png",
1353
- "style": "vector-flat",
1596
+ "style": "",
1354
1597
  "thumbnailUrl": "",
1355
- "url": "https://almadar-kflow-assets.web.app/shared/ui-topdown-rts-board/kenney-rts-medieval/terrain/medievalRTS_spritesheet.png"
1598
+ "url": "https://almadar-kflow-assets.web.app/shared/ui-topdown-rts-board/svg/flat/units/town_hall.svg"
1356
1599
  },
1357
- "name": "Bravo",
1600
+ "name": "Bastion",
1358
1601
  "position": {
1359
- "x": 6.0,
1360
- "y": 0.0
1602
+ "x": 0.0,
1603
+ "y": 3.0
1361
1604
  },
1362
- "team": "enemy",
1363
- "unitType": "tank",
1364
- "x": 6.0,
1365
- "y": 0.0,
1605
+ "team": "player",
1606
+ "unitType": "town_hall",
1607
+ "x": 0.0,
1608
+ "y": 3.0,
1366
1609
  "z": 0.0
1367
1610
  },
1368
1611
  {
1369
- "health": 8.0,
1370
- "id": "t3",
1371
- "maxHealth": 10.0,
1612
+ "health": 30.0,
1613
+ "id": "den",
1614
+ "maxHealth": 30.0,
1372
1615
  "modelUrl": {
1373
1616
  "animations": [
1374
1617
  "idle",
@@ -1378,25 +1621,23 @@
1378
1621
  "death"
1379
1622
  ],
1380
1623
  "aspect": "1:1",
1381
- "atlas": "https://almadar-kflow-assets.web.app/shared/ui-topdown-rts-board/kenney-rts-medieval/terrain/medievalRTS_spritesheet.json",
1382
- "category": "tankBody_dark",
1624
+ "category": "raider_den",
1383
1625
  "dimension": "2d",
1384
- "name": "tankBody_dark",
1626
+ "name": "raider_den",
1385
1627
  "role": "npc",
1386
- "sprite": "medievalUnit_05.png",
1387
- "style": "vector-flat",
1628
+ "style": "",
1388
1629
  "thumbnailUrl": "",
1389
- "url": "https://almadar-kflow-assets.web.app/shared/ui-topdown-rts-board/kenney-rts-medieval/terrain/medievalRTS_spritesheet.png"
1630
+ "url": "https://almadar-kflow-assets.web.app/shared/ui-topdown-rts-board/svg/flat/units/raider_den.svg"
1390
1631
  },
1391
- "name": "Charlie",
1632
+ "name": "Den",
1392
1633
  "position": {
1393
- "x": 6.0,
1394
- "y": 4.0
1634
+ "x": 7.0,
1635
+ "y": 2.0
1395
1636
  },
1396
1637
  "team": "enemy",
1397
- "unitType": "tank",
1398
- "x": 6.0,
1399
- "y": 4.0,
1638
+ "unitType": "raider_den",
1639
+ "x": 7.0,
1640
+ "y": 2.0,
1400
1641
  "z": 0.0
1401
1642
  }
1402
1643
  ],
@@ -1407,8 +1648,7 @@
1407
1648
  "linkedEntity": "GameState",
1408
1649
  "linkedEntityId": "ent_01KXG04ZZ5SX0MBP8BY8JYMC2W",
1409
1650
  "name": "Authority",
1410
- "ref": "Frame.traits.TacticsAuthority",
1411
- "refId": "trt_01KXZ44ZP0KNSR8SQTTEY7T0Q9"
1651
+ "ref": "Frame.traits.TacticsAuthority"
1412
1652
  },
1413
1653
  {
1414
1654
  "config": {
@@ -1421,8 +1661,7 @@
1421
1661
  "linkedEntity": "GameState",
1422
1662
  "linkedEntityId": "ent_01KXG04ZZ5SX0MBP8BY8JYMC2W",
1423
1663
  "name": "FxDecay",
1424
- "ref": "Frame.traits.FxDecay",
1425
- "refId": "trt_01KXZ44ZP0CG60KCBCDDVTRS9Y"
1664
+ "ref": "Frame.traits.FxDecay"
1426
1665
  },
1427
1666
  {
1428
1667
  "config": {
@@ -1435,13 +1674,12 @@
1435
1674
  "linkedEntity": "GameState",
1436
1675
  "linkedEntityId": "ent_01KXG04ZZ5SX0MBP8BY8JYMC2W",
1437
1676
  "name": "RoundLogic",
1438
- "ref": "Frame.traits.RoundLogic",
1439
- "refId": "trt_01KXZ44ZP0YXMQ6CPPZ21VRCS9"
1677
+ "ref": "Frame.traits.RoundLogic"
1440
1678
  },
1441
1679
  {
1442
1680
  "config": {
1443
1681
  "initialEnemies": {
1444
- "default": 2.0,
1682
+ "default": 1.0,
1445
1683
  "type": "unknown"
1446
1684
  },
1447
1685
  "pointsPerKill": {
@@ -1461,106 +1699,881 @@
1461
1699
  "linkedEntity": "GameState",
1462
1700
  "linkedEntityId": "ent_01KXG04ZZ5SX0MBP8BY8JYMC2W",
1463
1701
  "name": "ScoreKeeper",
1464
- "ref": "Score.traits.ScoreKeeper",
1465
- "refId": "trt_01KXG04TNS3RZ75H9PBTJ6F5HQ"
1702
+ "ref": "Score.traits.ScoreKeeper"
1466
1703
  },
1467
1704
  {
1468
1705
  "config": {
1469
- "pointsPerTurn": {
1470
- "default": 2.0,
1471
- "type": "unknown"
1472
- },
1473
- "running": {
1474
- "default": true,
1475
- "type": "unknown"
1476
- },
1477
- "spawnCost": {
1478
- "default": 3.0,
1479
- "type": "unknown"
1480
- },
1481
- "spawnHealth": {
1482
- "default": 10.0,
1483
- "type": "unknown"
1484
- },
1485
- "spawnTeam": {
1486
- "default": "player",
1487
- "type": "unknown"
1488
- },
1489
- "spawnUnitType": {
1490
- "default": "tank",
1491
- "type": "unknown"
1492
- },
1493
- "spawnX": {
1494
- "default": 0.0,
1495
- "type": "unknown"
1496
- },
1497
- "spawnY": {
1498
- "default": 0.0,
1499
- "type": "unknown"
1500
- },
1501
- "startPoints": {
1502
- "default": 3.0,
1706
+ "frames": {
1707
+ "default": [],
1503
1708
  "type": "unknown"
1504
1709
  }
1505
1710
  },
1506
- "id": "trt_01KXZ450WAPQ67A6HRJC1ZR8JQ",
1711
+ "id": "trt_01KYR91ZFW8BXEF1FT9737TFG9",
1507
1712
  "linkedEntity": "GameState",
1508
1713
  "linkedEntityId": "ent_01KXG04ZZ5SX0MBP8BY8JYMC2W",
1509
- "name": "Producer",
1510
- "ref": "Production.traits.Producer",
1511
- "refId": "trt_01KXG04TMXS8KCA3A7G1YKMC10"
1714
+ "name": "AnimClock",
1715
+ "ref": "Frame.traits.AnimClock"
1512
1716
  },
1513
1717
  {
1514
- "config": {
1515
- "assetManifest": {
1718
+ "category": "lifecycle",
1719
+ "emits": [
1720
+ {
1721
+ "description": "Real-time round advance; the frame's PlayerIntent treats it exactly like the End Turn button (turn bump, activation reset, AI_TURN)",
1722
+ "event": "END_TURN",
1723
+ "eventId": "evt_01KYSQS3WNVXPYZRGJE1M2GCSG",
1724
+ "payloadSchema": [
1725
+ {
1726
+ "name": "id",
1727
+ "type": "string"
1728
+ }
1729
+ ],
1730
+ "scope": "external",
1731
+ "tier": "domain"
1732
+ }
1733
+ ],
1734
+ "entityContract": {
1735
+ "provides": [
1736
+ "clockTicks"
1737
+ ],
1738
+ "requires": [
1739
+ "result"
1740
+ ]
1741
+ },
1742
+ "entityRebindable": true,
1743
+ "entityRefIds": {
1744
+ "GameState": "ent_01KXG04ZZ5SX0MBP8BY8JYMC2W"
1745
+ },
1746
+ "id": "trt_01KYSQS3WN420MB94Y3JD39FA1",
1747
+ "linkedEntity": "GameState",
1748
+ "linkedEntityId": "ent_01KXG04ZZ5SX0MBP8BY8JYMC2W",
1749
+ "name": "RtsClock",
1750
+ "scope": "instance",
1751
+ "stateMachine": {
1752
+ "events": [
1753
+ {
1754
+ "id": "evt_01KYSQS3WN2TKMRYCXR84P9SQ8",
1755
+ "key": "INIT",
1756
+ "name": "Initialize"
1757
+ },
1758
+ {
1759
+ "description": "Real-time round advance; the frame's PlayerIntent treats it exactly like the End Turn button (turn bump, activation reset, AI_TURN)",
1760
+ "id": "evt_01KYSQS3WNVXPYZRGJE1M2GCSG",
1761
+ "key": "END_TURN",
1762
+ "name": "End Turn",
1763
+ "payloadSchema": [
1764
+ {
1765
+ "name": "id",
1766
+ "type": "string"
1767
+ }
1768
+ ],
1769
+ "tier": "domain"
1770
+ }
1771
+ ],
1772
+ "states": [
1773
+ {
1774
+ "isInitial": true,
1775
+ "name": "running"
1776
+ }
1777
+ ],
1778
+ "transitions": [
1779
+ {
1780
+ "effects": [
1781
+ [
1782
+ "set",
1783
+ "@entity.clockTicks",
1784
+ 0.0
1785
+ ]
1786
+ ],
1787
+ "event": "INIT",
1788
+ "eventId": "evt_01KYSQS3WN2TKMRYCXR84P9SQ8",
1789
+ "from": "running",
1790
+ "to": "running"
1791
+ }
1792
+ ]
1793
+ },
1794
+ "ticks": [
1795
+ {
1796
+ "effects": [
1797
+ [
1798
+ "set",
1799
+ "@entity.clockTicks",
1800
+ [
1801
+ "+",
1802
+ "@entity.clockTicks",
1803
+ 1.0
1804
+ ]
1805
+ ],
1806
+ [
1807
+ "emit",
1808
+ "END_TURN",
1809
+ {
1810
+ "id": "clock"
1811
+ }
1812
+ ]
1813
+ ],
1814
+ "guard": [
1815
+ "==",
1816
+ "@entity.result",
1817
+ "none"
1818
+ ],
1819
+ "interval": 2000.0,
1820
+ "name": "turnTick"
1821
+ }
1822
+ ]
1823
+ },
1824
+ {
1825
+ "category": "lifecycle",
1826
+ "config": {
1827
+ "goldPerWorkerTick": {
1828
+ "default": 1.0,
1829
+ "description": "Gold each living worker at the mine harvests every 2s cycle.",
1830
+ "label": "Gold Per Worker Tick",
1831
+ "tier": "domain",
1832
+ "type": "number"
1833
+ },
1834
+ "mineX": {
1835
+ "default": 0.0,
1836
+ "description": "Grid column of the gold-mine harvest anchor.",
1837
+ "label": "Mine X",
1838
+ "tier": "domain",
1839
+ "type": "number"
1840
+ },
1841
+ "mineY": {
1842
+ "default": 0.0,
1843
+ "description": "Grid row of the gold-mine harvest anchor.",
1844
+ "label": "Mine Y",
1845
+ "tier": "domain",
1846
+ "type": "number"
1847
+ },
1848
+ "running": {
1849
+ "default": true,
1850
+ "description": "When true, workers harvest and BUILD_TANK musters; toggle to freeze the economy.",
1851
+ "label": "Running",
1852
+ "tier": "domain",
1853
+ "type": "boolean"
1854
+ },
1855
+ "startGold": {
1856
+ "default": 3.0,
1857
+ "description": "Gold stockpile set on INIT.",
1858
+ "label": "Start Gold",
1859
+ "tier": "domain",
1860
+ "type": "number"
1861
+ },
1862
+ "tankCost": {
1863
+ "default": 5.0,
1864
+ "description": "Gold spent per mustered tank; BUILD_TANK only fires when affordable and the yard is clear.",
1865
+ "label": "Tank Cost",
1866
+ "tier": "domain",
1867
+ "type": "number"
1868
+ },
1869
+ "tankHealth": {
1870
+ "default": 10.0,
1871
+ "description": "Health/maxHealth of mustered tanks.",
1872
+ "label": "Tank Health",
1873
+ "tier": "domain",
1874
+ "type": "number"
1875
+ },
1876
+ "tankSpawnX": {
1877
+ "default": 1.0,
1878
+ "description": "Grid column of the muster yard where new tanks roll out.",
1879
+ "label": "Tank Spawn X",
1880
+ "tier": "domain",
1881
+ "type": "number"
1882
+ },
1883
+ "tankSpawnY": {
1884
+ "default": 3.0,
1885
+ "description": "Grid row of the muster yard where new tanks roll out.",
1886
+ "label": "Tank Spawn Y",
1887
+ "tier": "domain",
1888
+ "type": "number"
1889
+ }
1890
+ },
1891
+ "emits": [
1892
+ {
1893
+ "description": "Mustered-tank intent applied by the grid-tactics authority (the sole units writer)",
1894
+ "event": "SPAWN",
1895
+ "eventId": "evt_01KYSQS3WNN8A5TZ9WNYCSEXV9",
1896
+ "payloadSchema": [
1897
+ {
1898
+ "name": "id",
1899
+ "required": true,
1900
+ "type": "string"
1901
+ },
1902
+ {
1903
+ "name": "x",
1904
+ "required": true,
1905
+ "type": "number"
1906
+ },
1907
+ {
1908
+ "name": "y",
1909
+ "required": true,
1910
+ "type": "number"
1911
+ },
1912
+ {
1913
+ "name": "team",
1914
+ "required": true,
1915
+ "type": "string"
1916
+ },
1917
+ {
1918
+ "name": "health",
1919
+ "required": true,
1920
+ "type": "number"
1921
+ },
1922
+ {
1923
+ "name": "maxHealth",
1924
+ "required": true,
1925
+ "type": "number"
1926
+ },
1927
+ {
1928
+ "name": "unitType",
1929
+ "required": true,
1930
+ "type": "string"
1931
+ }
1932
+ ],
1933
+ "scope": "external",
1934
+ "tier": "domain"
1935
+ }
1936
+ ],
1937
+ "entityContract": {
1938
+ "provides": [
1939
+ "ecoSpawnCount",
1940
+ "gold"
1941
+ ],
1942
+ "requires": [
1943
+ "result",
1944
+ "units"
1945
+ ]
1946
+ },
1947
+ "entityRebindable": true,
1948
+ "entityRefIds": {
1949
+ "GameState": "ent_01KXG04ZZ5SX0MBP8BY8JYMC2W"
1950
+ },
1951
+ "id": "trt_01KYSQS3WN9N534NZJ0SBV9YJN",
1952
+ "linkedEntity": "GameState",
1953
+ "linkedEntityId": "ent_01KXG04ZZ5SX0MBP8BY8JYMC2W",
1954
+ "name": "RtsEconomy",
1955
+ "scope": "instance",
1956
+ "stateMachine": {
1957
+ "events": [
1958
+ {
1959
+ "id": "evt_01KYSQS3WNKB4JJA8FWERX8YZZ",
1960
+ "key": "INIT",
1961
+ "name": "Initialize"
1962
+ },
1963
+ {
1964
+ "id": "evt_01KYSQS3WNZGH5JKN60J2CSEGD",
1965
+ "key": "BUILD_TANK",
1966
+ "name": "Build Tank",
1967
+ "payloadSchema": [
1968
+ {
1969
+ "name": "id",
1970
+ "type": "string"
1971
+ }
1972
+ ]
1973
+ },
1974
+ {
1975
+ "description": "Mustered-tank intent applied by the grid-tactics authority (the sole units writer)",
1976
+ "id": "evt_01KYSQS3WNN8A5TZ9WNYCSEXV9",
1977
+ "key": "SPAWN",
1978
+ "name": "Spawn",
1979
+ "payloadSchema": [
1980
+ {
1981
+ "name": "id",
1982
+ "required": true,
1983
+ "type": "string"
1984
+ },
1985
+ {
1986
+ "name": "x",
1987
+ "required": true,
1988
+ "type": "number"
1989
+ },
1990
+ {
1991
+ "name": "y",
1992
+ "required": true,
1993
+ "type": "number"
1994
+ },
1995
+ {
1996
+ "name": "team",
1997
+ "required": true,
1998
+ "type": "string"
1999
+ },
2000
+ {
2001
+ "name": "health",
2002
+ "required": true,
2003
+ "type": "number"
2004
+ },
2005
+ {
2006
+ "name": "maxHealth",
2007
+ "required": true,
2008
+ "type": "number"
2009
+ },
2010
+ {
2011
+ "name": "unitType",
2012
+ "required": true,
2013
+ "type": "string"
2014
+ }
2015
+ ],
2016
+ "tier": "domain"
2017
+ }
2018
+ ],
2019
+ "states": [
2020
+ {
2021
+ "isInitial": true,
2022
+ "name": "active"
2023
+ }
2024
+ ],
2025
+ "transitions": [
2026
+ {
2027
+ "effects": [
2028
+ [
2029
+ "set",
2030
+ "@entity.gold",
2031
+ "@config.startGold"
2032
+ ],
2033
+ [
2034
+ "set",
2035
+ "@entity.ecoSpawnCount",
2036
+ 0.0
2037
+ ]
2038
+ ],
2039
+ "event": "INIT",
2040
+ "eventId": "evt_01KYSQS3WNKB4JJA8FWERX8YZZ",
2041
+ "from": "active",
2042
+ "to": "active"
2043
+ },
2044
+ {
2045
+ "effects": [
2046
+ [
2047
+ "set",
2048
+ "@entity.gold",
2049
+ [
2050
+ "-",
2051
+ "@entity.gold",
2052
+ "@config.tankCost"
2053
+ ]
2054
+ ],
2055
+ [
2056
+ "emit",
2057
+ "SPAWN",
2058
+ {
2059
+ "health": "@config.tankHealth",
2060
+ "id": [
2061
+ "str/concat",
2062
+ "rts-t-",
2063
+ "@entity.ecoSpawnCount"
2064
+ ],
2065
+ "maxHealth": "@config.tankHealth",
2066
+ "team": "player",
2067
+ "unitType": "tank",
2068
+ "x": "@config.tankSpawnX",
2069
+ "y": "@config.tankSpawnY"
2070
+ }
2071
+ ],
2072
+ [
2073
+ "set",
2074
+ "@entity.ecoSpawnCount",
2075
+ [
2076
+ "+",
2077
+ "@entity.ecoSpawnCount",
2078
+ 1.0
2079
+ ]
2080
+ ]
2081
+ ],
2082
+ "event": "BUILD_TANK",
2083
+ "eventId": "evt_01KYSQS3WNZGH5JKN60J2CSEGD",
2084
+ "from": "active",
2085
+ "guard": [
2086
+ "and",
2087
+ "@config.running",
2088
+ [
2089
+ "and",
2090
+ [
2091
+ "==",
2092
+ "@entity.result",
2093
+ "none"
2094
+ ],
2095
+ [
2096
+ "and",
2097
+ [
2098
+ ">=",
2099
+ "@entity.gold",
2100
+ "@config.tankCost"
2101
+ ],
2102
+ [
2103
+ "==",
2104
+ [
2105
+ "array/len",
2106
+ [
2107
+ "array/filter",
2108
+ "@entity.units",
2109
+ [
2110
+ "fn",
2111
+ "u",
2112
+ [
2113
+ "and",
2114
+ [
2115
+ ">",
2116
+ "@u.health",
2117
+ 0.0
2118
+ ],
2119
+ [
2120
+ "and",
2121
+ [
2122
+ "==",
2123
+ [
2124
+ "object/get",
2125
+ [
2126
+ "object/get",
2127
+ "@u",
2128
+ "position"
2129
+ ],
2130
+ "x"
2131
+ ],
2132
+ "@config.tankSpawnX"
2133
+ ],
2134
+ [
2135
+ "==",
2136
+ [
2137
+ "object/get",
2138
+ [
2139
+ "object/get",
2140
+ "@u",
2141
+ "position"
2142
+ ],
2143
+ "y"
2144
+ ],
2145
+ "@config.tankSpawnY"
2146
+ ]
2147
+ ]
2148
+ ]
2149
+ ]
2150
+ ]
2151
+ ],
2152
+ 0.0
2153
+ ]
2154
+ ]
2155
+ ]
2156
+ ],
2157
+ "to": "active"
2158
+ }
2159
+ ]
2160
+ },
2161
+ "ticks": [
2162
+ {
2163
+ "effects": [
2164
+ [
2165
+ "set",
2166
+ "@entity.gold",
2167
+ [
2168
+ "+",
2169
+ "@entity.gold",
2170
+ [
2171
+ "*",
2172
+ [
2173
+ "array/len",
2174
+ [
2175
+ "array/filter",
2176
+ "@entity.units",
2177
+ [
2178
+ "fn",
2179
+ "u",
2180
+ [
2181
+ "and",
2182
+ [
2183
+ "==",
2184
+ "@u.team",
2185
+ "player"
2186
+ ],
2187
+ [
2188
+ "and",
2189
+ [
2190
+ ">",
2191
+ "@u.health",
2192
+ 0.0
2193
+ ],
2194
+ [
2195
+ "and",
2196
+ [
2197
+ "==",
2198
+ "@u.unitType",
2199
+ "worker"
2200
+ ],
2201
+ [
2202
+ "<=",
2203
+ [
2204
+ "grid/manhattan-distance",
2205
+ [
2206
+ "object/get",
2207
+ "@u",
2208
+ "position"
2209
+ ],
2210
+ {
2211
+ "x": "@config.mineX",
2212
+ "y": "@config.mineY"
2213
+ }
2214
+ ],
2215
+ 1.0
2216
+ ]
2217
+ ]
2218
+ ]
2219
+ ]
2220
+ ]
2221
+ ]
2222
+ ],
2223
+ "@config.goldPerWorkerTick"
2224
+ ]
2225
+ ]
2226
+ ]
2227
+ ],
2228
+ "guard": [
2229
+ "and",
2230
+ "@config.running",
2231
+ [
2232
+ "==",
2233
+ "@entity.result",
2234
+ "none"
2235
+ ]
2236
+ ],
2237
+ "interval": 2000.0,
2238
+ "name": "harvestTick"
2239
+ }
2240
+ ]
2241
+ },
2242
+ {
2243
+ "category": "lifecycle",
2244
+ "config": {
2245
+ "running": {
2246
+ "default": true,
2247
+ "description": "When true, raider waves spawn every 16s; toggle to freeze the waves.",
2248
+ "label": "Running",
2249
+ "tier": "domain",
2250
+ "type": "boolean"
2251
+ },
2252
+ "waveBaseHealth": {
2253
+ "default": 6.0,
2254
+ "description": "Health of the first raider wave; each later wave adds +1.",
2255
+ "label": "Wave Base Health",
2256
+ "tier": "domain",
2257
+ "type": "number"
2258
+ },
2259
+ "waveSpawnX": {
2260
+ "default": 7.0,
2261
+ "description": "Grid column of the den muster point where raiders stream in.",
2262
+ "label": "Wave Spawn X",
2263
+ "tier": "domain",
2264
+ "type": "number"
2265
+ },
2266
+ "waveSpawnY": {
2267
+ "default": 5.0,
2268
+ "description": "Grid row of the den muster point where raiders stream in.",
2269
+ "label": "Wave Spawn Y",
2270
+ "tier": "domain",
2271
+ "type": "number"
2272
+ }
2273
+ },
2274
+ "emits": [
2275
+ {
2276
+ "description": "Raider-wave intent applied by the grid-tactics authority (the sole units writer)",
2277
+ "event": "SPAWN",
2278
+ "eventId": "evt_01KYSQS3WNRDSZQG8ZYGC6DC97",
2279
+ "payloadSchema": [
2280
+ {
2281
+ "name": "id",
2282
+ "required": true,
2283
+ "type": "string"
2284
+ },
2285
+ {
2286
+ "name": "x",
2287
+ "required": true,
2288
+ "type": "number"
2289
+ },
2290
+ {
2291
+ "name": "y",
2292
+ "required": true,
2293
+ "type": "number"
2294
+ },
2295
+ {
2296
+ "name": "team",
2297
+ "required": true,
2298
+ "type": "string"
2299
+ },
2300
+ {
2301
+ "name": "health",
2302
+ "required": true,
2303
+ "type": "number"
2304
+ },
2305
+ {
2306
+ "name": "maxHealth",
2307
+ "required": true,
2308
+ "type": "number"
2309
+ },
2310
+ {
2311
+ "name": "unitType",
2312
+ "required": true,
2313
+ "type": "string"
2314
+ }
2315
+ ],
2316
+ "scope": "external",
2317
+ "tier": "domain"
2318
+ }
2319
+ ],
2320
+ "entityContract": {
2321
+ "provides": [
2322
+ "waveCount"
2323
+ ],
2324
+ "requires": [
2325
+ "result",
2326
+ "units"
2327
+ ]
2328
+ },
2329
+ "entityRebindable": true,
2330
+ "entityRefIds": {
2331
+ "GameState": "ent_01KXG04ZZ5SX0MBP8BY8JYMC2W"
2332
+ },
2333
+ "id": "trt_01KYSQS3WNJMR9GXMKPXP5QMDM",
2334
+ "linkedEntity": "GameState",
2335
+ "linkedEntityId": "ent_01KXG04ZZ5SX0MBP8BY8JYMC2W",
2336
+ "name": "RtsWaves",
2337
+ "scope": "instance",
2338
+ "stateMachine": {
2339
+ "events": [
2340
+ {
2341
+ "id": "evt_01KYSQS3WN6P12MFEDW8BNM5BA",
2342
+ "key": "INIT",
2343
+ "name": "Initialize"
2344
+ },
2345
+ {
2346
+ "description": "Raider-wave intent applied by the grid-tactics authority (the sole units writer)",
2347
+ "id": "evt_01KYSQS3WNRDSZQG8ZYGC6DC97",
2348
+ "key": "SPAWN",
2349
+ "name": "Spawn",
2350
+ "payloadSchema": [
2351
+ {
2352
+ "name": "id",
2353
+ "required": true,
2354
+ "type": "string"
2355
+ },
2356
+ {
2357
+ "name": "x",
2358
+ "required": true,
2359
+ "type": "number"
2360
+ },
2361
+ {
2362
+ "name": "y",
2363
+ "required": true,
2364
+ "type": "number"
2365
+ },
2366
+ {
2367
+ "name": "team",
2368
+ "required": true,
2369
+ "type": "string"
2370
+ },
2371
+ {
2372
+ "name": "health",
2373
+ "required": true,
2374
+ "type": "number"
2375
+ },
2376
+ {
2377
+ "name": "maxHealth",
2378
+ "required": true,
2379
+ "type": "number"
2380
+ },
2381
+ {
2382
+ "name": "unitType",
2383
+ "required": true,
2384
+ "type": "string"
2385
+ }
2386
+ ],
2387
+ "tier": "domain"
2388
+ }
2389
+ ],
2390
+ "states": [
2391
+ {
2392
+ "isInitial": true,
2393
+ "name": "active"
2394
+ }
2395
+ ],
2396
+ "transitions": [
2397
+ {
2398
+ "effects": [
2399
+ [
2400
+ "set",
2401
+ "@entity.waveCount",
2402
+ 0.0
2403
+ ]
2404
+ ],
2405
+ "event": "INIT",
2406
+ "eventId": "evt_01KYSQS3WN6P12MFEDW8BNM5BA",
2407
+ "from": "active",
2408
+ "to": "active"
2409
+ }
2410
+ ]
2411
+ },
2412
+ "ticks": [
2413
+ {
2414
+ "effects": [
2415
+ [
2416
+ "emit",
2417
+ "SPAWN",
2418
+ {
2419
+ "health": [
2420
+ "+",
2421
+ "@config.waveBaseHealth",
2422
+ "@entity.waveCount"
2423
+ ],
2424
+ "id": [
2425
+ "str/concat",
2426
+ "rts-w-",
2427
+ "@entity.waveCount"
2428
+ ],
2429
+ "maxHealth": [
2430
+ "+",
2431
+ "@config.waveBaseHealth",
2432
+ "@entity.waveCount"
2433
+ ],
2434
+ "team": "enemy",
2435
+ "unitType": "raider",
2436
+ "x": "@config.waveSpawnX",
2437
+ "y": "@config.waveSpawnY"
2438
+ }
2439
+ ],
2440
+ [
2441
+ "set",
2442
+ "@entity.waveCount",
2443
+ [
2444
+ "+",
2445
+ "@entity.waveCount",
2446
+ 1.0
2447
+ ]
2448
+ ]
2449
+ ],
2450
+ "guard": [
2451
+ "and",
2452
+ "@config.running",
2453
+ [
2454
+ "and",
2455
+ [
2456
+ "==",
2457
+ "@entity.result",
2458
+ "none"
2459
+ ],
2460
+ [
2461
+ "==",
2462
+ [
2463
+ "array/len",
2464
+ [
2465
+ "array/filter",
2466
+ "@entity.units",
2467
+ [
2468
+ "fn",
2469
+ "u",
2470
+ [
2471
+ "and",
2472
+ [
2473
+ ">",
2474
+ "@u.health",
2475
+ 0.0
2476
+ ],
2477
+ [
2478
+ "and",
2479
+ [
2480
+ "==",
2481
+ [
2482
+ "object/get",
2483
+ [
2484
+ "object/get",
2485
+ "@u",
2486
+ "position"
2487
+ ],
2488
+ "x"
2489
+ ],
2490
+ "@config.waveSpawnX"
2491
+ ],
2492
+ [
2493
+ "==",
2494
+ [
2495
+ "object/get",
2496
+ [
2497
+ "object/get",
2498
+ "@u",
2499
+ "position"
2500
+ ],
2501
+ "y"
2502
+ ],
2503
+ "@config.waveSpawnY"
2504
+ ]
2505
+ ]
2506
+ ]
2507
+ ]
2508
+ ]
2509
+ ],
2510
+ 0.0
2511
+ ]
2512
+ ]
2513
+ ],
2514
+ "interval": 16000.0,
2515
+ "name": "waveTick"
2516
+ }
2517
+ ]
2518
+ },
2519
+ {
2520
+ "config": {
2521
+ "assetManifest": {
1516
2522
  "default": {
1517
2523
  "effects": {
1518
2524
  "explosion": {
1519
2525
  "animations": [
1520
2526
  "static"
1521
2527
  ],
1522
- "aspect": "8:1",
1523
- "atlas": "https://almadar-kflow-assets.web.app/shared/_shared/kenney-explosion-pack/effects/spritesheet_regularExplosion.json",
2528
+ "aspect": "1:1",
1524
2529
  "category": "explosion",
1525
2530
  "dimension": "2d",
1526
2531
  "name": "explosion",
1527
2532
  "role": "effect",
1528
- "sprite": "regularExplosion04.png",
1529
- "style": "vector-flat",
2533
+ "style": "",
2534
+ "thumbnailUrl": "",
2535
+ "url": "https://almadar-kflow-assets.web.app/shared/ui-topdown-rts-board/svg/flat/effects/explosion.svg"
2536
+ },
2537
+ "hit": {
2538
+ "animations": [
2539
+ "static"
2540
+ ],
2541
+ "aspect": "1:1",
2542
+ "category": "hit",
2543
+ "dimension": "2d",
2544
+ "name": "hit",
2545
+ "role": "effect",
2546
+ "style": "",
1530
2547
  "thumbnailUrl": "",
1531
- "url": "https://almadar-kflow-assets.web.app/shared/_shared/kenney-explosion-pack/effects/spritesheet_regularExplosion.png"
2548
+ "url": "https://almadar-kflow-assets.web.app/shared/ui-topdown-rts-board/svg/flat/effects/hit.svg"
1532
2549
  }
1533
2550
  },
1534
2551
  "features": {
1535
- "barracks": {
2552
+ "gold_mine": {
1536
2553
  "animations": [
1537
2554
  "static"
1538
2555
  ],
1539
2556
  "aspect": "1:1",
1540
- "atlas": "https://almadar-kflow-assets.web.app/shared/ui-topdown-rts-board/kenney-rts-medieval/terrain/medievalRTS_spritesheet.json",
1541
- "category": "barracks",
2557
+ "category": "gold_mine",
1542
2558
  "dimension": "2d",
1543
- "name": "barracks",
2559
+ "name": "gold_mine",
1544
2560
  "role": "decoration",
1545
- "sprite": "medievalStructure_01.png",
1546
- "style": "vector-flat",
2561
+ "style": "",
1547
2562
  "thumbnailUrl": "",
1548
- "url": "https://almadar-kflow-assets.web.app/shared/ui-topdown-rts-board/kenney-rts-medieval/terrain/medievalRTS_spritesheet.png"
2563
+ "url": "https://almadar-kflow-assets.web.app/shared/ui-topdown-rts-board/svg/flat/features/gold_mine.svg"
1549
2564
  },
1550
- "obstacle": {
2565
+ "wall": {
1551
2566
  "animations": [
1552
2567
  "static"
1553
2568
  ],
1554
2569
  "aspect": "1:1",
1555
- "atlas": "https://almadar-kflow-assets.web.app/shared/ui-topdown-rts-board/kenney-rts-medieval/terrain/medievalRTS_spritesheet.json",
1556
- "category": "obstacle",
2570
+ "category": "wall",
1557
2571
  "dimension": "2d",
1558
- "name": "obstacle",
2572
+ "name": "wall",
1559
2573
  "role": "decoration",
1560
- "sprite": "medievalEnvironment_01.png",
1561
- "style": "vector-flat",
2574
+ "style": "",
1562
2575
  "thumbnailUrl": "",
1563
- "url": "https://almadar-kflow-assets.web.app/shared/ui-topdown-rts-board/kenney-rts-medieval/terrain/medievalRTS_spritesheet.png"
2576
+ "url": "https://almadar-kflow-assets.web.app/shared/ui-topdown-rts-board/svg/flat/features/wall.svg"
1564
2577
  }
1565
2578
  },
1566
2579
  "terrains": {
@@ -1569,33 +2582,63 @@
1569
2582
  "static"
1570
2583
  ],
1571
2584
  "aspect": "1:1",
1572
- "atlas": "https://almadar-kflow-assets.web.app/shared/ui-topdown-rts-board/kenney-rts-medieval/terrain/medievalRTS_spritesheet.json",
1573
2585
  "category": "ground",
1574
2586
  "dimension": "2d",
1575
2587
  "name": "ground",
1576
2588
  "role": "tile",
1577
- "sprite": "medievalTile_41.png",
1578
- "style": "vector-flat",
2589
+ "style": "",
1579
2590
  "thumbnailUrl": "",
1580
- "url": "https://almadar-kflow-assets.web.app/shared/ui-topdown-rts-board/kenney-rts-medieval/terrain/medievalRTS_spritesheet.png"
2591
+ "url": "https://almadar-kflow-assets.web.app/shared/ui-topdown-rts-board/svg/flat/terrain/ground.svg"
1581
2592
  },
1582
2593
  "sand": {
1583
2594
  "animations": [
1584
2595
  "static"
1585
2596
  ],
1586
2597
  "aspect": "1:1",
1587
- "atlas": "https://almadar-kflow-assets.web.app/shared/ui-topdown-rts-board/kenney-rts-medieval/terrain/medievalRTS_spritesheet.json",
1588
2598
  "category": "sand",
1589
2599
  "dimension": "2d",
1590
2600
  "name": "sand",
1591
2601
  "role": "tile",
1592
- "sprite": "medievalTile_13.png",
1593
- "style": "vector-flat",
2602
+ "style": "",
1594
2603
  "thumbnailUrl": "",
1595
- "url": "https://almadar-kflow-assets.web.app/shared/ui-topdown-rts-board/kenney-rts-medieval/terrain/medievalRTS_spritesheet.png"
2604
+ "url": "https://almadar-kflow-assets.web.app/shared/ui-topdown-rts-board/svg/flat/terrain/sand.svg"
1596
2605
  }
1597
2606
  },
1598
2607
  "units": {
2608
+ "raider": {
2609
+ "animations": [
2610
+ "idle",
2611
+ "walk",
2612
+ "attack",
2613
+ "hit",
2614
+ "death"
2615
+ ],
2616
+ "aspect": "1:1",
2617
+ "category": "raider",
2618
+ "dimension": "2d",
2619
+ "name": "raider",
2620
+ "role": "npc",
2621
+ "style": "",
2622
+ "thumbnailUrl": "",
2623
+ "url": "https://almadar-kflow-assets.web.app/shared/ui-topdown-rts-board/svg/flat/units/raider.svg"
2624
+ },
2625
+ "raider_den": {
2626
+ "animations": [
2627
+ "idle",
2628
+ "walk",
2629
+ "attack",
2630
+ "hit",
2631
+ "death"
2632
+ ],
2633
+ "aspect": "1:1",
2634
+ "category": "raider_den",
2635
+ "dimension": "2d",
2636
+ "name": "raider_den",
2637
+ "role": "npc",
2638
+ "style": "",
2639
+ "thumbnailUrl": "",
2640
+ "url": "https://almadar-kflow-assets.web.app/shared/ui-topdown-rts-board/svg/flat/units/raider_den.svg"
2641
+ },
1599
2642
  "tank": {
1600
2643
  "animations": [
1601
2644
  "idle",
@@ -1605,42 +2648,79 @@
1605
2648
  "death"
1606
2649
  ],
1607
2650
  "aspect": "1:1",
1608
- "atlas": "https://almadar-kflow-assets.web.app/shared/ui-topdown-rts-board/kenney-rts-medieval/terrain/medievalRTS_spritesheet.json",
1609
2651
  "category": "tank",
1610
2652
  "dimension": "2d",
1611
2653
  "name": "tank",
1612
2654
  "role": "npc",
1613
- "sprite": "medievalUnit_01.png",
1614
- "style": "vector-flat",
2655
+ "style": "",
1615
2656
  "thumbnailUrl": "",
1616
- "url": "https://almadar-kflow-assets.web.app/shared/ui-topdown-rts-board/kenney-rts-medieval/terrain/medievalRTS_spritesheet.png"
2657
+ "url": "https://almadar-kflow-assets.web.app/shared/ui-topdown-rts-board/svg/flat/units/tank.svg"
2658
+ },
2659
+ "town_hall": {
2660
+ "animations": [
2661
+ "idle",
2662
+ "walk",
2663
+ "attack",
2664
+ "hit",
2665
+ "death"
2666
+ ],
2667
+ "aspect": "1:1",
2668
+ "category": "town_hall",
2669
+ "dimension": "2d",
2670
+ "name": "town_hall",
2671
+ "role": "npc",
2672
+ "style": "",
2673
+ "thumbnailUrl": "",
2674
+ "url": "https://almadar-kflow-assets.web.app/shared/ui-topdown-rts-board/svg/flat/units/town_hall.svg"
2675
+ },
2676
+ "worker": {
2677
+ "animations": [
2678
+ "idle",
2679
+ "walk",
2680
+ "attack",
2681
+ "hit",
2682
+ "death"
2683
+ ],
2684
+ "aspect": "1:1",
2685
+ "category": "worker",
2686
+ "dimension": "2d",
2687
+ "name": "worker",
2688
+ "role": "npc",
2689
+ "style": "",
2690
+ "thumbnailUrl": "",
2691
+ "url": "https://almadar-kflow-assets.web.app/shared/ui-topdown-rts-board/svg/flat/units/worker.svg"
1617
2692
  }
1618
2693
  }
1619
2694
  },
1620
2695
  "type": "unknown"
1621
2696
  },
2697
+ "attackRange": {
2698
+ "default": 2.0,
2699
+ "type": "unknown"
2700
+ },
2701
+ "backgroundAsset": {
2702
+ "default": {
2703
+ "animations": [],
2704
+ "aspect": "1:1",
2705
+ "category": "ui",
2706
+ "dimension": "2d",
2707
+ "name": "panel-frame",
2708
+ "role": "ui",
2709
+ "style": "",
2710
+ "thumbnailUrl": "",
2711
+ "url": "https://almadar-kflow-assets.web.app/shared/ui-topdown-rts-board/svg/flat/ui/panel-frame.svg"
2712
+ },
2713
+ "type": "unknown"
2714
+ },
1622
2715
  "extraAddonEvent": {
1623
- "default": "PRODUCE",
2716
+ "default": "BUILD_TANK",
1624
2717
  "type": "unknown"
1625
2718
  },
1626
2719
  "extraAddons": {
1627
2720
  "default": [
1628
2721
  {
1629
- "action": "PRODUCE",
1630
- "iconAsset": {
1631
- "animations": [],
1632
- "aspect": "1:1",
1633
- "atlas": "https://almadar-kflow-assets.web.app/shared/ui-topdown-rts-board/kenney-rts-medieval/terrain/medievalRTS_spritesheet.json",
1634
- "category": "ui",
1635
- "dimension": "2d",
1636
- "name": "icon-produce",
1637
- "role": "ui",
1638
- "sprite": "medievalStructure_01.png",
1639
- "style": "vector-flat",
1640
- "thumbnailUrl": "",
1641
- "url": "https://almadar-kflow-assets.web.app/shared/ui-topdown-rts-board/kenney-rts-medieval/terrain/medievalRTS_spritesheet.png"
1642
- },
1643
- "label": "Produce (3)",
2722
+ "action": "BUILD_TANK",
2723
+ "label": "Tank (5g)",
1644
2724
  "type": "button",
1645
2725
  "variant": "secondary"
1646
2726
  }
@@ -1650,8 +2730,12 @@
1650
2730
  "extraStats": {
1651
2731
  "default": [
1652
2732
  {
1653
- "label": "Prod",
1654
- "value": "@entity.productionPoints"
2733
+ "label": "Gold",
2734
+ "value": "@entity.gold"
2735
+ },
2736
+ {
2737
+ "label": "Wave",
2738
+ "value": "@entity.waveCount"
1655
2739
  }
1656
2740
  ],
1657
2741
  "type": "unknown"
@@ -1664,19 +2748,36 @@
1664
2748
  "static"
1665
2749
  ],
1666
2750
  "aspect": "1:1",
1667
- "atlas": "https://almadar-kflow-assets.web.app/shared/ui-topdown-rts-board/kenney-rts-medieval/terrain/medievalRTS_spritesheet.json",
1668
- "category": "obstacle",
2751
+ "category": "gold_mine",
1669
2752
  "dimension": "2d",
1670
- "name": "obstacle",
2753
+ "name": "gold_mine",
1671
2754
  "role": "decoration",
1672
- "sprite": "medievalEnvironment_01.png",
1673
- "style": "vector-flat",
2755
+ "style": "",
1674
2756
  "thumbnailUrl": "",
1675
- "url": "https://almadar-kflow-assets.web.app/shared/ui-topdown-rts-board/kenney-rts-medieval/terrain/medievalRTS_spritesheet.png"
2757
+ "url": "https://almadar-kflow-assets.web.app/shared/ui-topdown-rts-board/svg/flat/features/gold_mine.svg"
1676
2758
  },
1677
- "id": "f1",
1678
- "type": "obstacle",
1679
- "x": 2.0,
2759
+ "id": "mine1",
2760
+ "type": "gold_mine",
2761
+ "x": 0.0,
2762
+ "y": 0.0
2763
+ },
2764
+ {
2765
+ "assetUrl": {
2766
+ "animations": [
2767
+ "static"
2768
+ ],
2769
+ "aspect": "1:1",
2770
+ "category": "wall",
2771
+ "dimension": "2d",
2772
+ "name": "wall",
2773
+ "role": "decoration",
2774
+ "style": "",
2775
+ "thumbnailUrl": "",
2776
+ "url": "https://almadar-kflow-assets.web.app/shared/ui-topdown-rts-board/svg/flat/features/wall.svg"
2777
+ },
2778
+ "id": "wall1",
2779
+ "type": "wall",
2780
+ "x": 0.0,
1680
2781
  "y": 1.0
1681
2782
  },
1682
2783
  {
@@ -1685,19 +2786,17 @@
1685
2786
  "static"
1686
2787
  ],
1687
2788
  "aspect": "1:1",
1688
- "atlas": "https://almadar-kflow-assets.web.app/shared/ui-topdown-rts-board/kenney-rts-medieval/terrain/medievalRTS_spritesheet.json",
1689
- "category": "obstacle",
2789
+ "category": "wall",
1690
2790
  "dimension": "2d",
1691
- "name": "obstacle",
2791
+ "name": "wall",
1692
2792
  "role": "decoration",
1693
- "sprite": "medievalEnvironment_01.png",
1694
- "style": "vector-flat",
2793
+ "style": "",
1695
2794
  "thumbnailUrl": "",
1696
- "url": "https://almadar-kflow-assets.web.app/shared/ui-topdown-rts-board/kenney-rts-medieval/terrain/medievalRTS_spritesheet.png"
2795
+ "url": "https://almadar-kflow-assets.web.app/shared/ui-topdown-rts-board/svg/flat/features/wall.svg"
1697
2796
  },
1698
- "id": "f2",
1699
- "type": "obstacle",
1700
- "x": 3.0,
2797
+ "id": "wall2",
2798
+ "type": "wall",
2799
+ "x": 0.0,
1701
2800
  "y": 2.0
1702
2801
  },
1703
2802
  {
@@ -1706,20 +2805,18 @@
1706
2805
  "static"
1707
2806
  ],
1708
2807
  "aspect": "1:1",
1709
- "atlas": "https://almadar-kflow-assets.web.app/shared/ui-topdown-rts-board/kenney-rts-medieval/terrain/medievalRTS_spritesheet.json",
1710
- "category": "obstacle",
2808
+ "category": "wall",
1711
2809
  "dimension": "2d",
1712
- "name": "obstacle",
2810
+ "name": "wall",
1713
2811
  "role": "decoration",
1714
- "sprite": "medievalEnvironment_01.png",
1715
- "style": "vector-flat",
2812
+ "style": "",
1716
2813
  "thumbnailUrl": "",
1717
- "url": "https://almadar-kflow-assets.web.app/shared/ui-topdown-rts-board/kenney-rts-medieval/terrain/medievalRTS_spritesheet.png"
2814
+ "url": "https://almadar-kflow-assets.web.app/shared/ui-topdown-rts-board/svg/flat/features/wall.svg"
1718
2815
  },
1719
- "id": "f3",
1720
- "type": "obstacle",
1721
- "x": 4.0,
1722
- "y": 3.0
2816
+ "id": "wall3",
2817
+ "type": "wall",
2818
+ "x": 0.0,
2819
+ "y": 4.0
1723
2820
  },
1724
2821
  {
1725
2822
  "assetUrl": {
@@ -1727,20 +2824,151 @@
1727
2824
  "static"
1728
2825
  ],
1729
2826
  "aspect": "1:1",
1730
- "atlas": "https://almadar-kflow-assets.web.app/shared/ui-topdown-rts-board/kenney-rts-medieval/terrain/medievalRTS_spritesheet.json",
1731
- "category": "barracks",
2827
+ "category": "wall",
1732
2828
  "dimension": "2d",
1733
- "name": "barracks",
2829
+ "name": "wall",
1734
2830
  "role": "decoration",
1735
- "sprite": "medievalStructure_01.png",
1736
- "style": "vector-flat",
2831
+ "style": "",
1737
2832
  "thumbnailUrl": "",
1738
- "url": "https://almadar-kflow-assets.web.app/shared/ui-topdown-rts-board/kenney-rts-medieval/terrain/medievalRTS_spritesheet.png"
2833
+ "url": "https://almadar-kflow-assets.web.app/shared/ui-topdown-rts-board/svg/flat/features/wall.svg"
1739
2834
  },
1740
- "id": "barracks1",
1741
- "type": "barracks",
2835
+ "id": "wall4",
2836
+ "type": "wall",
1742
2837
  "x": 0.0,
1743
- "y": 0.0
2838
+ "y": 5.0
2839
+ },
2840
+ {
2841
+ "assetUrl": {
2842
+ "animations": [
2843
+ "static"
2844
+ ],
2845
+ "aspect": "1:1",
2846
+ "category": "wall",
2847
+ "dimension": "2d",
2848
+ "name": "wall",
2849
+ "role": "decoration",
2850
+ "style": "",
2851
+ "thumbnailUrl": "",
2852
+ "url": "https://almadar-kflow-assets.web.app/shared/ui-topdown-rts-board/svg/flat/features/wall.svg"
2853
+ },
2854
+ "id": "wall5",
2855
+ "type": "wall",
2856
+ "x": 1.0,
2857
+ "y": 2.0
2858
+ },
2859
+ {
2860
+ "assetUrl": {
2861
+ "animations": [
2862
+ "static"
2863
+ ],
2864
+ "aspect": "1:1",
2865
+ "category": "wall",
2866
+ "dimension": "2d",
2867
+ "name": "wall",
2868
+ "role": "decoration",
2869
+ "style": "",
2870
+ "thumbnailUrl": "",
2871
+ "url": "https://almadar-kflow-assets.web.app/shared/ui-topdown-rts-board/svg/flat/features/wall.svg"
2872
+ },
2873
+ "id": "wall6",
2874
+ "type": "wall",
2875
+ "x": 1.0,
2876
+ "y": 4.0
2877
+ },
2878
+ {
2879
+ "assetUrl": {
2880
+ "animations": [
2881
+ "static"
2882
+ ],
2883
+ "aspect": "1:1",
2884
+ "category": "wall",
2885
+ "dimension": "2d",
2886
+ "name": "wall",
2887
+ "role": "decoration",
2888
+ "style": "",
2889
+ "thumbnailUrl": "",
2890
+ "url": "https://almadar-kflow-assets.web.app/shared/ui-topdown-rts-board/svg/flat/features/wall.svg"
2891
+ },
2892
+ "id": "wall7",
2893
+ "type": "wall",
2894
+ "x": 6.0,
2895
+ "y": 1.0
2896
+ },
2897
+ {
2898
+ "assetUrl": {
2899
+ "animations": [
2900
+ "static"
2901
+ ],
2902
+ "aspect": "1:1",
2903
+ "category": "wall",
2904
+ "dimension": "2d",
2905
+ "name": "wall",
2906
+ "role": "decoration",
2907
+ "style": "",
2908
+ "thumbnailUrl": "",
2909
+ "url": "https://almadar-kflow-assets.web.app/shared/ui-topdown-rts-board/svg/flat/features/wall.svg"
2910
+ },
2911
+ "id": "wall8",
2912
+ "type": "wall",
2913
+ "x": 6.0,
2914
+ "y": 2.0
2915
+ },
2916
+ {
2917
+ "assetUrl": {
2918
+ "animations": [
2919
+ "static"
2920
+ ],
2921
+ "aspect": "1:1",
2922
+ "category": "wall",
2923
+ "dimension": "2d",
2924
+ "name": "wall",
2925
+ "role": "decoration",
2926
+ "style": "",
2927
+ "thumbnailUrl": "",
2928
+ "url": "https://almadar-kflow-assets.web.app/shared/ui-topdown-rts-board/svg/flat/features/wall.svg"
2929
+ },
2930
+ "id": "wall9",
2931
+ "type": "wall",
2932
+ "x": 6.0,
2933
+ "y": 3.0
2934
+ },
2935
+ {
2936
+ "assetUrl": {
2937
+ "animations": [
2938
+ "static"
2939
+ ],
2940
+ "aspect": "1:1",
2941
+ "category": "wall",
2942
+ "dimension": "2d",
2943
+ "name": "wall",
2944
+ "role": "decoration",
2945
+ "style": "",
2946
+ "thumbnailUrl": "",
2947
+ "url": "https://almadar-kflow-assets.web.app/shared/ui-topdown-rts-board/svg/flat/features/wall.svg"
2948
+ },
2949
+ "id": "wall10",
2950
+ "type": "wall",
2951
+ "x": 7.0,
2952
+ "y": 1.0
2953
+ },
2954
+ {
2955
+ "assetUrl": {
2956
+ "animations": [
2957
+ "static"
2958
+ ],
2959
+ "aspect": "1:1",
2960
+ "category": "wall",
2961
+ "dimension": "2d",
2962
+ "name": "wall",
2963
+ "role": "decoration",
2964
+ "style": "",
2965
+ "thumbnailUrl": "",
2966
+ "url": "https://almadar-kflow-assets.web.app/shared/ui-topdown-rts-board/svg/flat/features/wall.svg"
2967
+ },
2968
+ "id": "wall11",
2969
+ "type": "wall",
2970
+ "x": 7.0,
2971
+ "y": 3.0
1744
2972
  }
1745
2973
  ],
1746
2974
  "type": "unknown"
@@ -1753,6 +2981,20 @@
1753
2981
  "default": 8.0,
1754
2982
  "type": "unknown"
1755
2983
  },
2984
+ "hudBackgroundAsset": {
2985
+ "default": {
2986
+ "animations": [],
2987
+ "aspect": "1:1",
2988
+ "category": "ui",
2989
+ "dimension": "2d",
2990
+ "name": "panel-frame",
2991
+ "role": "ui",
2992
+ "style": "",
2993
+ "thumbnailUrl": "",
2994
+ "url": "https://almadar-kflow-assets.web.app/shared/ui-topdown-rts-board/svg/flat/ui/panel-frame.svg"
2995
+ },
2996
+ "type": "unknown"
2997
+ },
1756
2998
  "movementRange": {
1757
2999
  "default": 2.0,
1758
3000
  "type": "unknown"
@@ -1774,8 +3016,7 @@
1774
3016
  "linkedEntity": "GameState",
1775
3017
  "linkedEntityId": "ent_01KXG04ZZ5SX0MBP8BY8JYMC2W",
1776
3018
  "name": "Player",
1777
- "ref": "Frame.traits.PlayerIntent",
1778
- "refId": "trt_01KXG04VM7WQJEH8FBPFFPNHJV"
3019
+ "ref": "Frame.traits.PlayerIntent"
1779
3020
  }
1780
3021
  ],
1781
3022
  "uses": [
@@ -1786,10 +3027,6 @@
1786
3027
  {
1787
3028
  "as": "Score",
1788
3029
  "from": "std/behaviors/std-score"
1789
- },
1790
- {
1791
- "as": "Production",
1792
- "from": "std/behaviors/std-production"
1793
3030
  }
1794
3031
  ]
1795
3032
  }