@almadar/std 16.154.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 (39) hide show
  1. package/behaviors/lolo/ui/game/molecules/std-tactics-board-2d.lolo +35 -21
  2. package/behaviors/lolo/ui/game/molecules/ui-canvas.lolo +5 -0
  3. package/behaviors/lolo/ui/game/organisms/ui-battle-board.lolo +122 -74
  4. package/behaviors/lolo/ui/game/organisms/ui-hex-strategy-board.lolo +153 -9
  5. package/behaviors/lolo/ui/game/organisms/ui-tactics-demo-2d.lolo +130 -8
  6. package/behaviors/lolo/ui/game/organisms/ui-tanks-board.lolo +147 -7
  7. package/behaviors/lolo/ui/game/organisms/ui-topdown-rts-board.lolo +291 -19
  8. package/behaviors/registry/factory-signatures.json +1893 -2294
  9. package/behaviors/registry/ui/game/molecules/std-tactics-board-2d.orb +798 -189
  10. package/behaviors/registry/ui/game/molecules/ui-canvas.orb +7 -0
  11. package/behaviors/registry/ui/game/organisms/ui-battle-board.orb +17 -1
  12. package/behaviors/registry/ui/game/organisms/ui-hex-strategy-board.orb +68 -1180
  13. package/behaviors/registry/ui/game/organisms/ui-tactics-demo-2d.orb +192 -322
  14. package/behaviors/registry/ui/game/organisms/ui-tanks-board.orb +97 -85
  15. package/behaviors/registry/ui/game/organisms/ui-topdown-rts-board.orb +1477 -259
  16. package/dist/behaviors/behaviors-embeddings.json +244 -236
  17. package/dist/behaviors/behaviors-registry.json +143 -772
  18. package/dist/behaviors/exports-reader.js +1099 -2090
  19. package/dist/behaviors/functions/index.d.ts +33 -26
  20. package/dist/behaviors/functions/index.js +1099 -2091
  21. package/dist/behaviors/index.d.ts +1 -1
  22. package/dist/behaviors/index.js +1100 -2091
  23. package/dist/behaviors/knob-embeddings.json +1 -1
  24. package/dist/behaviors/query.js +1099 -2090
  25. package/dist/behaviors/registry/factory-signatures.json +1893 -2294
  26. package/dist/behaviors/registry/ui/game/molecules/std-tactics-board-2d.orb +798 -189
  27. package/dist/behaviors/registry/ui/game/molecules/ui-canvas.orb +7 -0
  28. package/dist/behaviors/registry/ui/game/organisms/ui-battle-board.orb +17 -1
  29. package/dist/behaviors/registry/ui/game/organisms/ui-hex-strategy-board.orb +68 -1180
  30. package/dist/behaviors/registry/ui/game/organisms/ui-tactics-demo-2d.orb +192 -322
  31. package/dist/behaviors/registry/ui/game/organisms/ui-tanks-board.orb +97 -85
  32. package/dist/behaviors/registry/ui/game/organisms/ui-topdown-rts-board.orb +1477 -259
  33. package/dist/behaviors-embeddings.json +244 -236
  34. package/dist/behaviors-registry.json +143 -772
  35. package/dist/index.d.ts +1 -1
  36. package/dist/index.js +1100 -2091
  37. package/dist/knob-embeddings.json +1 -1
  38. package/dist/registry/factory-signatures.json +1893 -2294
  39. 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",
@@ -81,6 +136,30 @@
81
136
  "kind": "trait",
82
137
  "owner": "workspace",
83
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": []
84
163
  }
85
164
  },
86
165
  "schemaVersion": 1
@@ -97,6 +176,70 @@
97
176
  },
98
177
  {
99
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
+ },
100
243
  {
101
244
  "health": 10.0,
102
245
  "id": "t1",
@@ -110,31 +253,29 @@
110
253
  "death"
111
254
  ],
112
255
  "aspect": "1:1",
113
- "atlas": "https://almadar-kflow-assets.web.app/shared/ui-topdown-rts-board/kenney-rts-medieval/terrain/medievalRTS_spritesheet.json",
114
- "category": "tankBody_green",
256
+ "category": "tank",
115
257
  "dimension": "2d",
116
- "name": "tankBody_green",
258
+ "name": "tank",
117
259
  "role": "npc",
118
- "sprite": "medievalUnit_01.png",
119
- "style": "vector-flat",
260
+ "style": "",
120
261
  "thumbnailUrl": "",
121
- "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"
122
263
  },
123
264
  "name": "Alpha",
124
265
  "position": {
125
266
  "x": 1.0,
126
- "y": 1.0
267
+ "y": 3.0
127
268
  },
128
269
  "team": "player",
129
270
  "unitType": "tank",
130
271
  "x": 1.0,
131
- "y": 1.0,
272
+ "y": 3.0,
132
273
  "z": 0.0
133
274
  },
134
275
  {
135
- "health": 10.0,
136
- "id": "t2",
137
- "maxHealth": 10.0,
276
+ "health": 30.0,
277
+ "id": "hall",
278
+ "maxHealth": 30.0,
138
279
  "modelUrl": {
139
280
  "animations": [
140
281
  "idle",
@@ -144,31 +285,29 @@
144
285
  "death"
145
286
  ],
146
287
  "aspect": "1:1",
147
- "atlas": "https://almadar-kflow-assets.web.app/shared/ui-topdown-rts-board/kenney-rts-medieval/terrain/medievalRTS_spritesheet.json",
148
- "category": "tankBody_dark",
288
+ "category": "town_hall",
149
289
  "dimension": "2d",
150
- "name": "tankBody_dark",
290
+ "name": "town_hall",
151
291
  "role": "npc",
152
- "sprite": "medievalUnit_05.png",
153
- "style": "vector-flat",
292
+ "style": "",
154
293
  "thumbnailUrl": "",
155
- "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"
156
295
  },
157
- "name": "Bravo",
296
+ "name": "Bastion",
158
297
  "position": {
159
- "x": 6.0,
160
- "y": 0.0
298
+ "x": 0.0,
299
+ "y": 3.0
161
300
  },
162
- "team": "enemy",
163
- "unitType": "tank",
164
- "x": 6.0,
165
- "y": 0.0,
301
+ "team": "player",
302
+ "unitType": "town_hall",
303
+ "x": 0.0,
304
+ "y": 3.0,
166
305
  "z": 0.0
167
306
  },
168
307
  {
169
- "health": 8.0,
170
- "id": "t3",
171
- "maxHealth": 10.0,
308
+ "health": 30.0,
309
+ "id": "den",
310
+ "maxHealth": 30.0,
172
311
  "modelUrl": {
173
312
  "animations": [
174
313
  "idle",
@@ -178,25 +317,23 @@
178
317
  "death"
179
318
  ],
180
319
  "aspect": "1:1",
181
- "atlas": "https://almadar-kflow-assets.web.app/shared/ui-topdown-rts-board/kenney-rts-medieval/terrain/medievalRTS_spritesheet.json",
182
- "category": "tankBody_dark",
320
+ "category": "raider_den",
183
321
  "dimension": "2d",
184
- "name": "tankBody_dark",
322
+ "name": "raider_den",
185
323
  "role": "npc",
186
- "sprite": "medievalUnit_05.png",
187
- "style": "vector-flat",
324
+ "style": "",
188
325
  "thumbnailUrl": "",
189
- "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"
190
327
  },
191
- "name": "Charlie",
328
+ "name": "Den",
192
329
  "position": {
193
- "x": 6.0,
194
- "y": 4.0
330
+ "x": 7.0,
331
+ "y": 2.0
195
332
  },
196
333
  "team": "enemy",
197
- "unitType": "tank",
198
- "x": 6.0,
199
- "y": 4.0,
334
+ "unitType": "raider_den",
335
+ "x": 7.0,
336
+ "y": 2.0,
200
337
  "z": 0.0
201
338
  }
202
339
  ],
@@ -440,7 +577,7 @@
440
577
  },
441
578
  {
442
579
  "id": "t-0-1",
443
- "passable": true,
580
+ "passable": false,
444
581
  "terrain": "ground",
445
582
  "x": 0.0,
446
583
  "y": 1.0
@@ -482,28 +619,28 @@
482
619
  },
483
620
  {
484
621
  "id": "t-6-1",
485
- "passable": true,
622
+ "passable": false,
486
623
  "terrain": "ground",
487
624
  "x": 6.0,
488
625
  "y": 1.0
489
626
  },
490
627
  {
491
628
  "id": "t-7-1",
492
- "passable": true,
629
+ "passable": false,
493
630
  "terrain": "ground",
494
631
  "x": 7.0,
495
632
  "y": 1.0
496
633
  },
497
634
  {
498
635
  "id": "t-0-2",
499
- "passable": true,
636
+ "passable": false,
500
637
  "terrain": "ground",
501
638
  "x": 0.0,
502
639
  "y": 2.0
503
640
  },
504
641
  {
505
642
  "id": "t-1-2",
506
- "passable": true,
643
+ "passable": false,
507
644
  "terrain": "ground",
508
645
  "x": 1.0,
509
646
  "y": 2.0
@@ -538,7 +675,7 @@
538
675
  },
539
676
  {
540
677
  "id": "t-6-2",
541
- "passable": true,
678
+ "passable": false,
542
679
  "terrain": "ground",
543
680
  "x": 6.0,
544
681
  "y": 2.0
@@ -594,28 +731,28 @@
594
731
  },
595
732
  {
596
733
  "id": "t-6-3",
597
- "passable": true,
734
+ "passable": false,
598
735
  "terrain": "ground",
599
736
  "x": 6.0,
600
737
  "y": 3.0
601
738
  },
602
739
  {
603
740
  "id": "t-7-3",
604
- "passable": true,
741
+ "passable": false,
605
742
  "terrain": "ground",
606
743
  "x": 7.0,
607
744
  "y": 3.0
608
745
  },
609
746
  {
610
747
  "id": "t-0-4",
611
- "passable": true,
748
+ "passable": false,
612
749
  "terrain": "ground",
613
750
  "x": 0.0,
614
751
  "y": 4.0
615
752
  },
616
753
  {
617
754
  "id": "t-1-4",
618
- "passable": true,
755
+ "passable": false,
619
756
  "terrain": "ground",
620
757
  "x": 1.0,
621
758
  "y": 4.0
@@ -644,14 +781,14 @@
644
781
  {
645
782
  "id": "t-5-4",
646
783
  "passable": true,
647
- "terrain": "ground",
784
+ "terrain": "sand",
648
785
  "x": 5.0,
649
786
  "y": 4.0
650
787
  },
651
788
  {
652
789
  "id": "t-6-4",
653
790
  "passable": true,
654
- "terrain": "ground",
791
+ "terrain": "sand",
655
792
  "x": 6.0,
656
793
  "y": 4.0
657
794
  },
@@ -664,7 +801,7 @@
664
801
  },
665
802
  {
666
803
  "id": "t-0-5",
667
- "passable": true,
804
+ "passable": false,
668
805
  "terrain": "ground",
669
806
  "x": 0.0,
670
807
  "y": 5.0
@@ -700,14 +837,14 @@
700
837
  {
701
838
  "id": "t-5-5",
702
839
  "passable": true,
703
- "terrain": "ground",
840
+ "terrain": "sand",
704
841
  "x": 5.0,
705
842
  "y": 5.0
706
843
  },
707
844
  {
708
845
  "id": "t-6-5",
709
846
  "passable": true,
710
- "terrain": "ground",
847
+ "terrain": "sand",
711
848
  "x": 6.0,
712
849
  "y": 5.0
713
850
  },
@@ -872,6 +1009,22 @@
872
1009
  "name": "attackTargets",
873
1010
  "type": "array"
874
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
+ },
875
1028
  {
876
1029
  "default": "observation",
877
1030
  "name": "uiPhase",
@@ -894,12 +1047,22 @@
894
1047
  },
895
1048
  {
896
1049
  "default": 0.0,
897
- "name": "productionPoints",
1050
+ "name": "gold",
1051
+ "type": "number"
1052
+ },
1053
+ {
1054
+ "default": 0.0,
1055
+ "name": "ecoSpawnCount",
898
1056
  "type": "number"
899
1057
  },
900
1058
  {
901
1059
  "default": 0.0,
902
- "name": "spawnCount",
1060
+ "name": "waveCount",
1061
+ "type": "number"
1062
+ },
1063
+ {
1064
+ "default": 0.0,
1065
+ "name": "clockTicks",
903
1066
  "type": "number"
904
1067
  }
905
1068
  ],
@@ -932,10 +1095,6 @@
932
1095
  "ref": "ScoreKeeper",
933
1096
  "refId": "trt_01KXZ450WAVMWGRZK763K8P9FP"
934
1097
  },
935
- {
936
- "ref": "Producer",
937
- "refId": "trt_01KXZ450WAPQ67A6HRJC1ZR8JQ"
938
- },
939
1098
  {
940
1099
  "ref": "Player",
941
1100
  "refId": "trt_01KXZ450WABW0CD4FQE2X311T6"
@@ -943,6 +1102,18 @@
943
1102
  {
944
1103
  "ref": "AnimClock",
945
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"
946
1117
  }
947
1118
  ]
948
1119
  }
@@ -1026,7 +1197,7 @@
1026
1197
  },
1027
1198
  {
1028
1199
  "id": "t-0-1",
1029
- "passable": true,
1200
+ "passable": false,
1030
1201
  "terrain": "ground",
1031
1202
  "x": 0.0,
1032
1203
  "y": 1.0
@@ -1068,28 +1239,28 @@
1068
1239
  },
1069
1240
  {
1070
1241
  "id": "t-6-1",
1071
- "passable": true,
1242
+ "passable": false,
1072
1243
  "terrain": "ground",
1073
1244
  "x": 6.0,
1074
1245
  "y": 1.0
1075
1246
  },
1076
1247
  {
1077
1248
  "id": "t-7-1",
1078
- "passable": true,
1249
+ "passable": false,
1079
1250
  "terrain": "ground",
1080
1251
  "x": 7.0,
1081
1252
  "y": 1.0
1082
1253
  },
1083
1254
  {
1084
1255
  "id": "t-0-2",
1085
- "passable": true,
1256
+ "passable": false,
1086
1257
  "terrain": "ground",
1087
1258
  "x": 0.0,
1088
1259
  "y": 2.0
1089
1260
  },
1090
1261
  {
1091
1262
  "id": "t-1-2",
1092
- "passable": true,
1263
+ "passable": false,
1093
1264
  "terrain": "ground",
1094
1265
  "x": 1.0,
1095
1266
  "y": 2.0
@@ -1124,7 +1295,7 @@
1124
1295
  },
1125
1296
  {
1126
1297
  "id": "t-6-2",
1127
- "passable": true,
1298
+ "passable": false,
1128
1299
  "terrain": "ground",
1129
1300
  "x": 6.0,
1130
1301
  "y": 2.0
@@ -1180,28 +1351,28 @@
1180
1351
  },
1181
1352
  {
1182
1353
  "id": "t-6-3",
1183
- "passable": true,
1354
+ "passable": false,
1184
1355
  "terrain": "ground",
1185
1356
  "x": 6.0,
1186
1357
  "y": 3.0
1187
1358
  },
1188
1359
  {
1189
1360
  "id": "t-7-3",
1190
- "passable": true,
1361
+ "passable": false,
1191
1362
  "terrain": "ground",
1192
1363
  "x": 7.0,
1193
1364
  "y": 3.0
1194
1365
  },
1195
1366
  {
1196
1367
  "id": "t-0-4",
1197
- "passable": true,
1368
+ "passable": false,
1198
1369
  "terrain": "ground",
1199
1370
  "x": 0.0,
1200
1371
  "y": 4.0
1201
1372
  },
1202
1373
  {
1203
1374
  "id": "t-1-4",
1204
- "passable": true,
1375
+ "passable": false,
1205
1376
  "terrain": "ground",
1206
1377
  "x": 1.0,
1207
1378
  "y": 4.0
@@ -1230,14 +1401,14 @@
1230
1401
  {
1231
1402
  "id": "t-5-4",
1232
1403
  "passable": true,
1233
- "terrain": "ground",
1404
+ "terrain": "sand",
1234
1405
  "x": 5.0,
1235
1406
  "y": 4.0
1236
1407
  },
1237
1408
  {
1238
1409
  "id": "t-6-4",
1239
1410
  "passable": true,
1240
- "terrain": "ground",
1411
+ "terrain": "sand",
1241
1412
  "x": 6.0,
1242
1413
  "y": 4.0
1243
1414
  },
@@ -1250,7 +1421,7 @@
1250
1421
  },
1251
1422
  {
1252
1423
  "id": "t-0-5",
1253
- "passable": true,
1424
+ "passable": false,
1254
1425
  "terrain": "ground",
1255
1426
  "x": 0.0,
1256
1427
  "y": 5.0
@@ -1286,14 +1457,14 @@
1286
1457
  {
1287
1458
  "id": "t-5-5",
1288
1459
  "passable": true,
1289
- "terrain": "ground",
1460
+ "terrain": "sand",
1290
1461
  "x": 5.0,
1291
1462
  "y": 5.0
1292
1463
  },
1293
1464
  {
1294
1465
  "id": "t-6-5",
1295
1466
  "passable": true,
1296
- "terrain": "ground",
1467
+ "terrain": "sand",
1297
1468
  "x": 6.0,
1298
1469
  "y": 5.0
1299
1470
  },
@@ -1309,6 +1480,70 @@
1309
1480
  },
1310
1481
  "units": {
1311
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
+ },
1312
1547
  {
1313
1548
  "health": 10.0,
1314
1549
  "id": "t1",
@@ -1322,31 +1557,29 @@
1322
1557
  "death"
1323
1558
  ],
1324
1559
  "aspect": "1:1",
1325
- "atlas": "https://almadar-kflow-assets.web.app/shared/ui-topdown-rts-board/kenney-rts-medieval/terrain/medievalRTS_spritesheet.json",
1326
- "category": "tankBody_green",
1560
+ "category": "tank",
1327
1561
  "dimension": "2d",
1328
- "name": "tankBody_green",
1562
+ "name": "tank",
1329
1563
  "role": "npc",
1330
- "sprite": "medievalUnit_01.png",
1331
- "style": "vector-flat",
1564
+ "style": "",
1332
1565
  "thumbnailUrl": "",
1333
- "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"
1334
1567
  },
1335
1568
  "name": "Alpha",
1336
1569
  "position": {
1337
1570
  "x": 1.0,
1338
- "y": 1.0
1571
+ "y": 3.0
1339
1572
  },
1340
1573
  "team": "player",
1341
1574
  "unitType": "tank",
1342
1575
  "x": 1.0,
1343
- "y": 1.0,
1576
+ "y": 3.0,
1344
1577
  "z": 0.0
1345
1578
  },
1346
1579
  {
1347
- "health": 10.0,
1348
- "id": "t2",
1349
- "maxHealth": 10.0,
1580
+ "health": 30.0,
1581
+ "id": "hall",
1582
+ "maxHealth": 30.0,
1350
1583
  "modelUrl": {
1351
1584
  "animations": [
1352
1585
  "idle",
@@ -1356,31 +1589,29 @@
1356
1589
  "death"
1357
1590
  ],
1358
1591
  "aspect": "1:1",
1359
- "atlas": "https://almadar-kflow-assets.web.app/shared/ui-topdown-rts-board/kenney-rts-medieval/terrain/medievalRTS_spritesheet.json",
1360
- "category": "tankBody_dark",
1592
+ "category": "town_hall",
1361
1593
  "dimension": "2d",
1362
- "name": "tankBody_dark",
1594
+ "name": "town_hall",
1363
1595
  "role": "npc",
1364
- "sprite": "medievalUnit_05.png",
1365
- "style": "vector-flat",
1596
+ "style": "",
1366
1597
  "thumbnailUrl": "",
1367
- "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"
1368
1599
  },
1369
- "name": "Bravo",
1600
+ "name": "Bastion",
1370
1601
  "position": {
1371
- "x": 6.0,
1372
- "y": 0.0
1602
+ "x": 0.0,
1603
+ "y": 3.0
1373
1604
  },
1374
- "team": "enemy",
1375
- "unitType": "tank",
1376
- "x": 6.0,
1377
- "y": 0.0,
1605
+ "team": "player",
1606
+ "unitType": "town_hall",
1607
+ "x": 0.0,
1608
+ "y": 3.0,
1378
1609
  "z": 0.0
1379
1610
  },
1380
1611
  {
1381
- "health": 8.0,
1382
- "id": "t3",
1383
- "maxHealth": 10.0,
1612
+ "health": 30.0,
1613
+ "id": "den",
1614
+ "maxHealth": 30.0,
1384
1615
  "modelUrl": {
1385
1616
  "animations": [
1386
1617
  "idle",
@@ -1390,25 +1621,23 @@
1390
1621
  "death"
1391
1622
  ],
1392
1623
  "aspect": "1:1",
1393
- "atlas": "https://almadar-kflow-assets.web.app/shared/ui-topdown-rts-board/kenney-rts-medieval/terrain/medievalRTS_spritesheet.json",
1394
- "category": "tankBody_dark",
1624
+ "category": "raider_den",
1395
1625
  "dimension": "2d",
1396
- "name": "tankBody_dark",
1626
+ "name": "raider_den",
1397
1627
  "role": "npc",
1398
- "sprite": "medievalUnit_05.png",
1399
- "style": "vector-flat",
1628
+ "style": "",
1400
1629
  "thumbnailUrl": "",
1401
- "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"
1402
1631
  },
1403
- "name": "Charlie",
1632
+ "name": "Den",
1404
1633
  "position": {
1405
- "x": 6.0,
1406
- "y": 4.0
1634
+ "x": 7.0,
1635
+ "y": 2.0
1407
1636
  },
1408
1637
  "team": "enemy",
1409
- "unitType": "tank",
1410
- "x": 6.0,
1411
- "y": 4.0,
1638
+ "unitType": "raider_den",
1639
+ "x": 7.0,
1640
+ "y": 2.0,
1412
1641
  "z": 0.0
1413
1642
  }
1414
1643
  ],
@@ -1450,7 +1679,7 @@
1450
1679
  {
1451
1680
  "config": {
1452
1681
  "initialEnemies": {
1453
- "default": 2.0,
1682
+ "default": 1.0,
1454
1683
  "type": "unknown"
1455
1684
  },
1456
1685
  "pointsPerKill": {
@@ -1472,51 +1701,6 @@
1472
1701
  "name": "ScoreKeeper",
1473
1702
  "ref": "Score.traits.ScoreKeeper"
1474
1703
  },
1475
- {
1476
- "config": {
1477
- "pointsPerTurn": {
1478
- "default": 2.0,
1479
- "type": "unknown"
1480
- },
1481
- "running": {
1482
- "default": true,
1483
- "type": "unknown"
1484
- },
1485
- "spawnCost": {
1486
- "default": 3.0,
1487
- "type": "unknown"
1488
- },
1489
- "spawnHealth": {
1490
- "default": 10.0,
1491
- "type": "unknown"
1492
- },
1493
- "spawnTeam": {
1494
- "default": "player",
1495
- "type": "unknown"
1496
- },
1497
- "spawnUnitType": {
1498
- "default": "tank",
1499
- "type": "unknown"
1500
- },
1501
- "spawnX": {
1502
- "default": 0.0,
1503
- "type": "unknown"
1504
- },
1505
- "spawnY": {
1506
- "default": 0.0,
1507
- "type": "unknown"
1508
- },
1509
- "startPoints": {
1510
- "default": 3.0,
1511
- "type": "unknown"
1512
- }
1513
- },
1514
- "id": "trt_01KXZ450WAPQ67A6HRJC1ZR8JQ",
1515
- "linkedEntity": "GameState",
1516
- "linkedEntityId": "ent_01KXG04ZZ5SX0MBP8BY8JYMC2W",
1517
- "name": "Producer",
1518
- "ref": "Production.traits.Producer"
1519
- },
1520
1704
  {
1521
1705
  "config": {
1522
1706
  "frames": {
@@ -1530,6 +1714,808 @@
1530
1714
  "name": "AnimClock",
1531
1715
  "ref": "Frame.traits.AnimClock"
1532
1716
  },
1717
+ {
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
+ },
1533
2519
  {
1534
2520
  "config": {
1535
2521
  "assetManifest": {
@@ -1539,48 +2525,55 @@
1539
2525
  "animations": [
1540
2526
  "static"
1541
2527
  ],
1542
- "aspect": "8:1",
1543
- "atlas": "https://almadar-kflow-assets.web.app/shared/_shared/kenney-explosion-pack/effects/spritesheet_regularExplosion.json",
2528
+ "aspect": "1:1",
1544
2529
  "category": "explosion",
1545
2530
  "dimension": "2d",
1546
2531
  "name": "explosion",
1547
2532
  "role": "effect",
1548
- "sprite": "regularExplosion04.png",
1549
- "style": "vector-flat",
2533
+ "style": "",
1550
2534
  "thumbnailUrl": "",
1551
- "url": "https://almadar-kflow-assets.web.app/shared/_shared/kenney-explosion-pack/effects/spritesheet_regularExplosion.png"
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": "",
2547
+ "thumbnailUrl": "",
2548
+ "url": "https://almadar-kflow-assets.web.app/shared/ui-topdown-rts-board/svg/flat/effects/hit.svg"
1552
2549
  }
1553
2550
  },
1554
2551
  "features": {
1555
- "barracks": {
2552
+ "gold_mine": {
1556
2553
  "animations": [
1557
2554
  "static"
1558
2555
  ],
1559
2556
  "aspect": "1:1",
1560
- "atlas": "https://almadar-kflow-assets.web.app/shared/ui-topdown-rts-board/kenney-rts-medieval/terrain/medievalRTS_spritesheet.json",
1561
- "category": "barracks",
2557
+ "category": "gold_mine",
1562
2558
  "dimension": "2d",
1563
- "name": "barracks",
2559
+ "name": "gold_mine",
1564
2560
  "role": "decoration",
1565
- "sprite": "medievalStructure_01.png",
1566
- "style": "vector-flat",
2561
+ "style": "",
1567
2562
  "thumbnailUrl": "",
1568
- "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"
1569
2564
  },
1570
- "obstacle": {
2565
+ "wall": {
1571
2566
  "animations": [
1572
2567
  "static"
1573
2568
  ],
1574
2569
  "aspect": "1:1",
1575
- "atlas": "https://almadar-kflow-assets.web.app/shared/ui-topdown-rts-board/kenney-rts-medieval/terrain/medievalRTS_spritesheet.json",
1576
- "category": "obstacle",
2570
+ "category": "wall",
1577
2571
  "dimension": "2d",
1578
- "name": "obstacle",
2572
+ "name": "wall",
1579
2573
  "role": "decoration",
1580
- "sprite": "medievalEnvironment_01.png",
1581
- "style": "vector-flat",
2574
+ "style": "",
1582
2575
  "thumbnailUrl": "",
1583
- "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"
1584
2577
  }
1585
2578
  },
1586
2579
  "terrains": {
@@ -1589,33 +2582,63 @@
1589
2582
  "static"
1590
2583
  ],
1591
2584
  "aspect": "1:1",
1592
- "atlas": "https://almadar-kflow-assets.web.app/shared/ui-topdown-rts-board/kenney-rts-medieval/terrain/medievalRTS_spritesheet.json",
1593
2585
  "category": "ground",
1594
2586
  "dimension": "2d",
1595
2587
  "name": "ground",
1596
2588
  "role": "tile",
1597
- "sprite": "medievalTile_41.png",
1598
- "style": "vector-flat",
2589
+ "style": "",
1599
2590
  "thumbnailUrl": "",
1600
- "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"
1601
2592
  },
1602
2593
  "sand": {
1603
2594
  "animations": [
1604
2595
  "static"
1605
2596
  ],
1606
2597
  "aspect": "1:1",
1607
- "atlas": "https://almadar-kflow-assets.web.app/shared/ui-topdown-rts-board/kenney-rts-medieval/terrain/medievalRTS_spritesheet.json",
1608
2598
  "category": "sand",
1609
2599
  "dimension": "2d",
1610
2600
  "name": "sand",
1611
2601
  "role": "tile",
1612
- "sprite": "medievalTile_13.png",
1613
- "style": "vector-flat",
2602
+ "style": "",
1614
2603
  "thumbnailUrl": "",
1615
- "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"
1616
2605
  }
1617
2606
  },
1618
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
+ },
1619
2642
  "tank": {
1620
2643
  "animations": [
1621
2644
  "idle",
@@ -1625,42 +2648,79 @@
1625
2648
  "death"
1626
2649
  ],
1627
2650
  "aspect": "1:1",
1628
- "atlas": "https://almadar-kflow-assets.web.app/shared/ui-topdown-rts-board/kenney-rts-medieval/terrain/medievalRTS_spritesheet.json",
1629
2651
  "category": "tank",
1630
2652
  "dimension": "2d",
1631
2653
  "name": "tank",
1632
2654
  "role": "npc",
1633
- "sprite": "medievalUnit_01.png",
1634
- "style": "vector-flat",
2655
+ "style": "",
2656
+ "thumbnailUrl": "",
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": "",
1635
2673
  "thumbnailUrl": "",
1636
- "url": "https://almadar-kflow-assets.web.app/shared/ui-topdown-rts-board/kenney-rts-medieval/terrain/medievalRTS_spritesheet.png"
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"
1637
2692
  }
1638
2693
  }
1639
2694
  },
1640
2695
  "type": "unknown"
1641
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
+ },
1642
2715
  "extraAddonEvent": {
1643
- "default": "PRODUCE",
2716
+ "default": "BUILD_TANK",
1644
2717
  "type": "unknown"
1645
2718
  },
1646
2719
  "extraAddons": {
1647
2720
  "default": [
1648
2721
  {
1649
- "action": "PRODUCE",
1650
- "iconAsset": {
1651
- "animations": [],
1652
- "aspect": "1:1",
1653
- "atlas": "https://almadar-kflow-assets.web.app/shared/ui-topdown-rts-board/kenney-rts-medieval/terrain/medievalRTS_spritesheet.json",
1654
- "category": "ui",
1655
- "dimension": "2d",
1656
- "name": "icon-produce",
1657
- "role": "ui",
1658
- "sprite": "medievalStructure_01.png",
1659
- "style": "vector-flat",
1660
- "thumbnailUrl": "",
1661
- "url": "https://almadar-kflow-assets.web.app/shared/ui-topdown-rts-board/kenney-rts-medieval/terrain/medievalRTS_spritesheet.png"
1662
- },
1663
- "label": "Produce (3)",
2722
+ "action": "BUILD_TANK",
2723
+ "label": "Tank (5g)",
1664
2724
  "type": "button",
1665
2725
  "variant": "secondary"
1666
2726
  }
@@ -1670,8 +2730,12 @@
1670
2730
  "extraStats": {
1671
2731
  "default": [
1672
2732
  {
1673
- "label": "Prod",
1674
- "value": "@entity.productionPoints"
2733
+ "label": "Gold",
2734
+ "value": "@entity.gold"
2735
+ },
2736
+ {
2737
+ "label": "Wave",
2738
+ "value": "@entity.waveCount"
1675
2739
  }
1676
2740
  ],
1677
2741
  "type": "unknown"
@@ -1684,19 +2748,36 @@
1684
2748
  "static"
1685
2749
  ],
1686
2750
  "aspect": "1:1",
1687
- "atlas": "https://almadar-kflow-assets.web.app/shared/ui-topdown-rts-board/kenney-rts-medieval/terrain/medievalRTS_spritesheet.json",
1688
- "category": "obstacle",
2751
+ "category": "gold_mine",
1689
2752
  "dimension": "2d",
1690
- "name": "obstacle",
2753
+ "name": "gold_mine",
1691
2754
  "role": "decoration",
1692
- "sprite": "medievalEnvironment_01.png",
1693
- "style": "vector-flat",
2755
+ "style": "",
1694
2756
  "thumbnailUrl": "",
1695
- "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"
1696
2758
  },
1697
- "id": "f1",
1698
- "type": "obstacle",
1699
- "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,
1700
2781
  "y": 1.0
1701
2782
  },
1702
2783
  {
@@ -1705,19 +2786,17 @@
1705
2786
  "static"
1706
2787
  ],
1707
2788
  "aspect": "1:1",
1708
- "atlas": "https://almadar-kflow-assets.web.app/shared/ui-topdown-rts-board/kenney-rts-medieval/terrain/medievalRTS_spritesheet.json",
1709
- "category": "obstacle",
2789
+ "category": "wall",
1710
2790
  "dimension": "2d",
1711
- "name": "obstacle",
2791
+ "name": "wall",
1712
2792
  "role": "decoration",
1713
- "sprite": "medievalEnvironment_01.png",
1714
- "style": "vector-flat",
2793
+ "style": "",
1715
2794
  "thumbnailUrl": "",
1716
- "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"
1717
2796
  },
1718
- "id": "f2",
1719
- "type": "obstacle",
1720
- "x": 3.0,
2797
+ "id": "wall2",
2798
+ "type": "wall",
2799
+ "x": 0.0,
1721
2800
  "y": 2.0
1722
2801
  },
1723
2802
  {
@@ -1726,20 +2805,18 @@
1726
2805
  "static"
1727
2806
  ],
1728
2807
  "aspect": "1:1",
1729
- "atlas": "https://almadar-kflow-assets.web.app/shared/ui-topdown-rts-board/kenney-rts-medieval/terrain/medievalRTS_spritesheet.json",
1730
- "category": "obstacle",
2808
+ "category": "wall",
1731
2809
  "dimension": "2d",
1732
- "name": "obstacle",
2810
+ "name": "wall",
1733
2811
  "role": "decoration",
1734
- "sprite": "medievalEnvironment_01.png",
1735
- "style": "vector-flat",
2812
+ "style": "",
1736
2813
  "thumbnailUrl": "",
1737
- "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"
1738
2815
  },
1739
- "id": "f3",
1740
- "type": "obstacle",
1741
- "x": 4.0,
1742
- "y": 3.0
2816
+ "id": "wall3",
2817
+ "type": "wall",
2818
+ "x": 0.0,
2819
+ "y": 4.0
1743
2820
  },
1744
2821
  {
1745
2822
  "assetUrl": {
@@ -1747,20 +2824,151 @@
1747
2824
  "static"
1748
2825
  ],
1749
2826
  "aspect": "1:1",
1750
- "atlas": "https://almadar-kflow-assets.web.app/shared/ui-topdown-rts-board/kenney-rts-medieval/terrain/medievalRTS_spritesheet.json",
1751
- "category": "barracks",
2827
+ "category": "wall",
1752
2828
  "dimension": "2d",
1753
- "name": "barracks",
2829
+ "name": "wall",
1754
2830
  "role": "decoration",
1755
- "sprite": "medievalStructure_01.png",
1756
- "style": "vector-flat",
2831
+ "style": "",
1757
2832
  "thumbnailUrl": "",
1758
- "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"
1759
2834
  },
1760
- "id": "barracks1",
1761
- "type": "barracks",
2835
+ "id": "wall4",
2836
+ "type": "wall",
1762
2837
  "x": 0.0,
1763
- "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
1764
2972
  }
1765
2973
  ],
1766
2974
  "type": "unknown"
@@ -1773,6 +2981,20 @@
1773
2981
  "default": 8.0,
1774
2982
  "type": "unknown"
1775
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
+ },
1776
2998
  "movementRange": {
1777
2999
  "default": 2.0,
1778
3000
  "type": "unknown"
@@ -1805,10 +3027,6 @@
1805
3027
  {
1806
3028
  "as": "Score",
1807
3029
  "from": "std/behaviors/std-score"
1808
- },
1809
- {
1810
- "as": "Production",
1811
- "from": "std/behaviors/std-production"
1812
3030
  }
1813
3031
  ]
1814
3032
  }