@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,6 +1,143 @@
1
1
  app ui-tanks-board "1.0.0"
2
- "Sci-fi tank grid-tactics game: thin organism composing the std-tactics-board-2d frame with a tank theme (Kenney topdown-tanks assets, sci-fi UI panels) supplied entirely via config."
2
+ "Sci-fi tank grid-tactics skirmish: thin organism composing the std-tactics-board-2d frame + std-score. Flat-projection hand-authored svg theme (desert ground, sand strip, sandbag cover, tank sprites) supplied entirely via config."
3
3
  ;; @capabilities "tank grid-tactics combat, top-down tank movement, sci-fi themed battle, turn-based tank strategy"
4
+
5
+ ;; ============================================================================
6
+ ;; PERSONA + USER STORIES
7
+ ;;
8
+ ;; Read these before changing anything here, and walk them end to end after.
9
+ ;; One persona: the PLAYER, commanding the lone tank Alpha on an 8x6 flat
10
+ ;; desert grid against two enemy tanks (Bravo, Charlie). Status re-verified
11
+ ;; 2026-07-30 by scripted playthroughs driving the real game on the
12
+ ;; runtime-verify catalog through window.__orbitalVerification — events in,
13
+ ;; canvas drawables + HUD DOM + bus event log out: victory run 33/35 (the 2
14
+ ;; anim-frame misses were 400ms-sampling artifacts, both proven by the
15
+ ;; focused probe), focused probe 7/7, defeat run 4/4.
16
+ ;;
17
+ ;; THE GENRE (what a tank-tactics player expects): armored warfare in
18
+ ;; miniature — one precious hull, not a swarm. You maneuver for firing
19
+ ;; position: your cannon reaches TWO cells (attackRange 2), so you can shell
20
+ ;; an enemy before it can answer, because the enemy AI only fires at
21
+ ;; point-blank (1 cell) and otherwise rolls 1 cell toward you each turn.
22
+ ;; Every shot and every move is a commitment: each tank moves ONCE and fires
23
+ ;; ONCE per turn (movedIds/actedIds), then sits spent until End Turn.
24
+ ;; Kills are the economy: each enemy destroyed scores 10. You win by
25
+ ;; destroying both enemy tanks; you lose the moment Alpha is destroyed.
26
+ ;; A round looks like: select Alpha -> green reach cells -> move -> Alpha
27
+ ;; STAYS selected and auto-arms (red cells = enemies in cannon reach) ->
28
+ ;; fire for 3 -> Alpha is SPENT (dims, cannot act again this turn) ->
29
+ ;; End Turn -> each living enemy strikes Alpha for 1 if adjacent, else
30
+ ;; steps 1 cell toward Alpha -> repeat.
31
+ ;; ============================================================================
32
+ ;;
33
+ ;; PLAYER — "I outmaneuver the enemy armor and destroy it before it closes
34
+ ;; to point-blank."
35
+ ;;
36
+ ;; 1. I open the board and see the whole battlefield framed on screen —
37
+ ;; terrain under every cell (desert ground with a sand strip), my tank
38
+ ;; at the west, the enemy tanks at the east, sandbag cover in the
39
+ ;; middle, and the HUD showing Result/Phase/Turn/Score.
40
+ ;; WORKS. Boot paints 48 full-cell flat terrain sprites (ground with
41
+ ;; a sand strip), 3 tanks (Alpha (1,1) west; Bravo (6,0), Charlie
42
+ ;; (6,4) east), 6 sandbag features ground-anchored 1x1 at
43
+ ;; (2,1)(3,2)(4,3)(5,3)(5,4)(2,4); HUD reads
44
+ ;; "none / observation / 0 / 0". Drawable descriptors point at the
45
+ ;; svg/flat CDN URLs (browser 404s expected this wave — the CDN push
46
+ ;; is coordinator-handled; verified at descriptor level).
47
+ ;; 2. Every tank on the board is a visible sprite with a name label and a
48
+ ;; health bar I can read at a glance.
49
+ ;; WORKS. Each tank paints its svg idle frame (4-frame breathing
50
+ ;; squash/stretch anchored at the feet, cycled by the AnimClock) with
51
+ ;; the black backing + green health fraction above and the name
52
+ ;; label. All 3 bars read 1.00 at boot, all 3 labels paint. Dead
53
+ ;; tanks drop the bar and label and switch to the death frame
54
+ ;; (verified on both kills and on Alpha's own defeat).
55
+ ;; 3. I click Alpha and the cells it can reach light up green.
56
+ ;; WORKS. Clicking t1 sets phase "selection" and lights exactly 10
57
+ ;; green cells — the range-2 manhattan diamond from (1,1) minus
58
+ ;; out-of-bounds cells (none occupied at boot).
59
+ ;; 4. I click a lit cell and Alpha moves there — and stays selected,
60
+ ;; auto-armed, so I can fire immediately; it cannot move again this
61
+ ;; turn.
62
+ ;; WORKS. t1 walked (1,1)->(3,1): the walk animation plays (2-frame
63
+ ;; cycle), the authority writes the position, phase lands on
64
+ ;; "action", and the move is SPENT — a second TILE_CLICK is ignored
65
+ ;; (tank stays at (3,1)) and a re-select lights zero green cells
66
+ ;; (movedIds guard). One move per turn, no chaining.
67
+ ;; 5. Enemies inside my cannon reach (2 cells) light up red — right after
68
+ ;; my move, or when I click Alpha again.
69
+ ;; WORKS. With Alpha at (2,2) and Charlie at (4,2), the post-move
70
+ ;; auto-arm lit exactly {(4,2)} red — every living enemy within
71
+ ;; attackRange 2 of the NEW cell — and the manual re-click arm
72
+ ;; recomputed the same red set (phase "action").
73
+ ;; 6. I click a red-lit enemy — or any enemy in reach, even without arming
74
+ ;; first — and it takes a shell; Alpha is then spent for the turn. An
75
+ ;; enemy OUT of reach does nothing when clicked.
76
+ ;; WORKS. Direct enemy-click attack: t2 frac 1.00 -> 0.70 (10hp, -3),
77
+ ;; BURST "-3" + hit.svg fx sprite at the target, attack frame on
78
+ ;; Alpha, hit frame on the target (both caught by 100ms polling), and
79
+ ;; Alpha joins actedIds: dims to 0.45 opacity, unselectable until End
80
+ ;; Turn. Negative probe: clicking far-away t3 (distance 5) changed
81
+ ;; nothing — phase and score untouched.
82
+ ;; 7. I change my mind mid-selection and back out cleanly.
83
+ ;; WORKS. CANCEL clears selection, highlights, and phase — verified
84
+ ;; green cells 10 -> 0 and phase back to "observation".
85
+ ;; 8. I end my turn and the enemy takes theirs — they close in and fight
86
+ ;; back, and Alpha is fresh again.
87
+ ;; WORKS. END_TURN bumps Turn, clears selection + both activation
88
+ ;; lists (Alpha selectable again next turn), and emits AI_TURN; the
89
+ ;; authority steps each living enemy 1 cell (diagonally — both axes)
90
+ ;; toward Alpha and strikes for 1 when adjacent (verified: enemy
91
+ ;; positions changed every turn; the defeat run ground Alpha 10->0).
92
+ ;; LIMITATION: enemies POP to their new cell — the authority applies
93
+ ;; the step silently and the single walk-anim slot is player-facing;
94
+ ;; per-enemy MOVE fan-out is atom surgery, deferred.
95
+ ;; 9. When I destroy an enemy I am rewarded — score ticks up, and the
96
+ ;; wreck stays on the field without blocking movement.
97
+ ;; WORKS x2. Each kill: Score +10 (verified 10 then 20 on the HUD)
98
+ ;; and the wreck renders its death frame. Corpses are excluded from
99
+ ;; the occupancy filters (health > 0) so their cells stay walkable —
100
+ ;; inherited from the frame molecule's guards.
101
+ ;; 10. When the last enemy tank falls, I win and the game tells me — then
102
+ ;; the board freezes.
103
+ ;; WORKS. Both enemies destroyed: Result flips to "victory"
104
+ ;; (RoundLogic on UNITS_CHANGED), GAME_END fires, and the board is
105
+ ;; FROZEN — post-game UNIT_CLICK selects nothing (phase stays
106
+ ;; "observation", zero highlights). Reload to play again.
107
+ ;; 11. If Alpha is destroyed, I lose and the game tells me — then the
108
+ ;; board freezes.
109
+ ;; WORKS. Defeat run (Alpha marches to point-blank and never fires):
110
+ ;; adjacent enemy fire ground Alpha to 0, Result flipped to "defeat",
111
+ ;; GAME_END fired, and the board froze (post-game clicks do nothing).
112
+ ;;
113
+ ;; MULTIPLAYER NOTE: GameState is [runtime, shared], so every connected
114
+ ;; client watches the same skirmish on the same frame; intents serialize
115
+ ;; through the server authority. There is no per-seat turn ownership yet —
116
+ ;; any client can drive Alpha.
117
+ ;;
118
+ ;; ASSET INVENTORY (hand-authored svg, almadar-kflow-assets.web.app
119
+ ;; /shared/ui-tanks-board/svg/flat/, generated by tools/asset-workflow
120
+ ;; svg-generator from the sibling .md descriptions)
121
+ ;;
122
+ ;; Terrain terrain/ground.svg, terrain/sand.svg — full-cell flat tiles
123
+ ;; (rounded-rect desert ground; sandy strip) drawn at
124
+ ;; width/height 1.
125
+ ;; Units units/{tank,tank_enemy}.svg + animation frames
126
+ ;; .{idle-0..3, walk-0..1, attack-0, hit-0, death-0}.svg; the
127
+ ;; frame swaps url-rewrite name.svg -> name.<anim>-<i>.svg and a
128
+ ;; hidden warm-up layer preloads every frame so swaps never pop.
129
+ ;; player: t1 Alpha 10hp (1,1) -> tank.svg
130
+ ;; enemy: t2 Bravo 10hp (6,0) -> tank_enemy.svg
131
+ ;; t3 Charlie 8hp (6,4) -> tank_enemy.svg
132
+ ;; Features features/obstacle.svg — six sandbag-cover cells at
133
+ ;; (2,1) (3,2) (4,3) (5,3) (5,4) (2,4), drawn from
134
+ ;; config.features anchored "ground" at 1x1 so they sit ON their
135
+ ;; cell. Decorative: they do not block movement (all tiles
136
+ ;; passable).
137
+ ;; Effects effects/hit.svg (BURST "hit" fx on every landed shell),
138
+ ;; effects/explosion.svg (manifest-only).
139
+ ;; UI chrome ui/panel-frame.svg = game-shell background + HUD panel.
140
+ ;; ============================================================================
4
141
  orbital TanksBoardOrbital {
5
142
  uses Frame from "std/behaviors/std-tactics-board-2d"
6
143
  uses Score from "std/behaviors/std-score"
@@ -69,13 +206,15 @@ orbital TanksBoardOrbital {
69
206
 
70
207
  entity GameState [runtime, shared] {
71
208
  id : string!
72
- units : [Unit] = [ { id: "t1", position: { x: 1, y: 1 }, x: 1, y: 1, z: 0, team: "player", health: 10, maxHealth: 10, unitType: "tank", name: "Alpha", modelUrl: { url: "https://almadar-kflow-assets.web.app/shared/ui-tanks-board/kenney-topdown-tanks-redux/features/allSprites_default.png", atlas: "https://almadar-kflow-assets.web.app/shared/ui-tanks-board/kenney-topdown-tanks-redux/features/allSprites_default.json", sprite: "tankBody_green.png", role: "npc", category: "tankBody_green", animations: ["idle","walk","attack","hit","death"], style: "sci-fi", dimension: "2d", aspect: "1:1", name: "tankBody_green", thumbnailUrl: "" } }, { id: "t2", position: { x: 6, y: 0 }, x: 6, y: 0, z: 0, team: "enemy", health: 10, maxHealth: 10, unitType: "tank", name: "Bravo", modelUrl: { url: "https://almadar-kflow-assets.web.app/shared/ui-tanks-board/kenney-topdown-tanks-redux/features/allSprites_default.png", atlas: "https://almadar-kflow-assets.web.app/shared/ui-tanks-board/kenney-topdown-tanks-redux/features/allSprites_default.json", sprite: "tankBody_dark.png", role: "npc", category: "tankBody_dark", animations: ["idle","walk","attack","hit","death"], style: "sci-fi", dimension: "2d", aspect: "1:1", name: "tankBody_dark", thumbnailUrl: "" } }, { id: "t3", position: { x: 6, y: 4 }, x: 6, y: 4, z: 0, team: "enemy", health: 8, maxHealth: 10, unitType: "tank", name: "Charlie", modelUrl: { url: "https://almadar-kflow-assets.web.app/shared/ui-tanks-board/kenney-topdown-tanks-redux/features/allSprites_default.png", atlas: "https://almadar-kflow-assets.web.app/shared/ui-tanks-board/kenney-topdown-tanks-redux/features/allSprites_default.json", sprite: "tankBody_dark.png", role: "npc", category: "tankBody_dark", animations: ["idle","walk","attack","hit","death"], style: "sci-fi", dimension: "2d", aspect: "1:1", name: "tankBody_dark", thumbnailUrl: "" } } ]
209
+ units : [Unit] = [ { id: "t1", position: { x: 1, y: 1 }, x: 1, y: 1, z: 0, team: "player", health: 10, maxHealth: 10, unitType: "tank", name: "Alpha", modelUrl: { url: "https://almadar-kflow-assets.web.app/shared/ui-tanks-board/svg/flat/units/tank.svg", role: "npc", category: "tank", animations: ["idle","walk","attack","hit","death"], style: "sci-fi", dimension: "2d", aspect: "1:1", name: "tank", thumbnailUrl: "" } }, { id: "t2", position: { x: 6, y: 0 }, x: 6, y: 0, z: 0, team: "enemy", health: 10, maxHealth: 10, unitType: "tank", name: "Bravo", modelUrl: { url: "https://almadar-kflow-assets.web.app/shared/ui-tanks-board/svg/flat/units/tank_enemy.svg", role: "npc", category: "tank_enemy", animations: ["idle","walk","attack","hit","death"], style: "sci-fi", dimension: "2d", aspect: "1:1", name: "tank_enemy", thumbnailUrl: "" } }, { id: "t3", position: { x: 6, y: 4 }, x: 6, y: 4, z: 0, team: "enemy", health: 8, maxHealth: 8, unitType: "tank", name: "Charlie", modelUrl: { url: "https://almadar-kflow-assets.web.app/shared/ui-tanks-board/svg/flat/units/tank_enemy.svg", role: "npc", category: "tank_enemy", animations: ["idle","walk","attack","hit","death"], style: "sci-fi", dimension: "2d", aspect: "1:1", name: "tank_enemy", thumbnailUrl: "" } } ]
73
210
  fx : [Fx] = []
74
211
  tiles : [Tile] = [ { id: "t-0-0", x: 0, y: 0, terrain: "ground", passable: true }, { id: "t-1-0", x: 1, y: 0, terrain: "ground", passable: true }, { id: "t-2-0", x: 2, y: 0, terrain: "ground", passable: true }, { id: "t-3-0", x: 3, y: 0, terrain: "ground", passable: true }, { id: "t-4-0", x: 4, y: 0, terrain: "ground", passable: true }, { id: "t-5-0", x: 5, y: 0, terrain: "ground", passable: true }, { id: "t-6-0", x: 6, y: 0, terrain: "ground", passable: true }, { id: "t-7-0", x: 7, y: 0, terrain: "ground", passable: true }, { id: "t-0-1", x: 0, y: 1, terrain: "ground", passable: true }, { id: "t-1-1", x: 1, y: 1, terrain: "ground", passable: true }, { id: "t-2-1", x: 2, y: 1, terrain: "ground", passable: true }, { id: "t-3-1", x: 3, y: 1, terrain: "ground", passable: true }, { id: "t-4-1", x: 4, y: 1, terrain: "ground", passable: true }, { id: "t-5-1", x: 5, y: 1, terrain: "ground", passable: true }, { id: "t-6-1", x: 6, y: 1, terrain: "ground", passable: true }, { id: "t-7-1", x: 7, y: 1, terrain: "ground", passable: true }, { id: "t-0-2", x: 0, y: 2, terrain: "ground", passable: true }, { id: "t-1-2", x: 1, y: 2, terrain: "ground", passable: true }, { id: "t-2-2", x: 2, y: 2, terrain: "ground", passable: true }, { id: "t-3-2", x: 3, y: 2, terrain: "sand", passable: true }, { id: "t-4-2", x: 4, y: 2, terrain: "sand", passable: true }, { id: "t-5-2", x: 5, y: 2, terrain: "sand", passable: true }, { id: "t-6-2", x: 6, y: 2, terrain: "ground", passable: true }, { id: "t-7-2", x: 7, y: 2, terrain: "ground", passable: true }, { id: "t-0-3", x: 0, y: 3, terrain: "ground", passable: true }, { id: "t-1-3", x: 1, y: 3, terrain: "ground", passable: true }, { id: "t-2-3", x: 2, y: 3, terrain: "sand", passable: true }, { id: "t-3-3", x: 3, y: 3, terrain: "sand", passable: true }, { id: "t-4-3", x: 4, y: 3, terrain: "sand", passable: true }, { id: "t-5-3", x: 5, y: 3, terrain: "sand", passable: true }, { id: "t-6-3", x: 6, y: 3, terrain: "ground", passable: true }, { id: "t-7-3", x: 7, y: 3, terrain: "ground", passable: true }, { id: "t-0-4", x: 0, y: 4, terrain: "ground", passable: true }, { id: "t-1-4", x: 1, y: 4, terrain: "ground", passable: true }, { id: "t-2-4", x: 2, y: 4, terrain: "ground", passable: true }, { id: "t-3-4", x: 3, y: 4, terrain: "sand", passable: true }, { id: "t-4-4", x: 4, y: 4, terrain: "sand", passable: true }, { id: "t-5-4", x: 5, y: 4, terrain: "ground", passable: true }, { id: "t-6-4", x: 6, y: 4, terrain: "ground", passable: true }, { id: "t-7-4", x: 7, y: 4, terrain: "ground", passable: true }, { id: "t-0-5", x: 0, y: 5, terrain: "ground", passable: true }, { id: "t-1-5", x: 1, y: 5, terrain: "ground", passable: true }, { id: "t-2-5", x: 2, y: 5, terrain: "ground", passable: true }, { id: "t-3-5", x: 3, y: 5, terrain: "ground", passable: true }, { id: "t-4-5", x: 4, y: 5, terrain: "ground", passable: true }, { id: "t-5-5", x: 5, y: 5, terrain: "ground", passable: true }, { id: "t-6-5", x: 6, y: 5, terrain: "ground", passable: true }, { id: "t-7-5", x: 7, y: 5, terrain: "ground", passable: true } ]
75
212
  result : string = "none"
76
213
  selectedUnitId : string = ""
77
214
  validMoves : [ValidMove] = []
78
215
  attackTargets : [ValidMove] = []
216
+ movedIds : [string] = []
217
+ actedIds : [string] = []
79
218
  uiPhase : string = "observation"
80
219
  turn : number = 0
81
220
  score : number = 0
@@ -88,7 +227,7 @@ orbital TanksBoardOrbital {
88
227
  gridWidth: 8
89
228
  gridHeight: 6
90
229
  attackDamage: 3
91
- units: [ { id: "t1", position: { x: 1, y: 1 }, x: 1, y: 1, z: 0, team: "player", health: 10, maxHealth: 10, unitType: "tank", name: "Alpha", modelUrl: { url: "https://almadar-kflow-assets.web.app/shared/ui-tanks-board/kenney-topdown-tanks-redux/features/allSprites_default.png", atlas: "https://almadar-kflow-assets.web.app/shared/ui-tanks-board/kenney-topdown-tanks-redux/features/allSprites_default.json", sprite: "tankBody_green.png", role: "npc", category: "tankBody_green", animations: ["idle","walk","attack","hit","death"], style: "sci-fi", dimension: "2d", aspect: "1:1", name: "tankBody_green", thumbnailUrl: "" } }, { id: "t2", position: { x: 6, y: 0 }, x: 6, y: 0, z: 0, team: "enemy", health: 10, maxHealth: 10, unitType: "tank", name: "Bravo", modelUrl: { url: "https://almadar-kflow-assets.web.app/shared/ui-tanks-board/kenney-topdown-tanks-redux/features/allSprites_default.png", atlas: "https://almadar-kflow-assets.web.app/shared/ui-tanks-board/kenney-topdown-tanks-redux/features/allSprites_default.json", sprite: "tankBody_dark.png", role: "npc", category: "tankBody_dark", animations: ["idle","walk","attack","hit","death"], style: "sci-fi", dimension: "2d", aspect: "1:1", name: "tankBody_dark", thumbnailUrl: "" } }, { id: "t3", position: { x: 6, y: 4 }, x: 6, y: 4, z: 0, team: "enemy", health: 8, maxHealth: 10, unitType: "tank", name: "Charlie", modelUrl: { url: "https://almadar-kflow-assets.web.app/shared/ui-tanks-board/kenney-topdown-tanks-redux/features/allSprites_default.png", atlas: "https://almadar-kflow-assets.web.app/shared/ui-tanks-board/kenney-topdown-tanks-redux/features/allSprites_default.json", sprite: "tankBody_dark.png", role: "npc", category: "tankBody_dark", animations: ["idle","walk","attack","hit","death"], style: "sci-fi", dimension: "2d", aspect: "1:1", name: "tankBody_dark", thumbnailUrl: "" } } ]
230
+ units: [ { id: "t1", position: { x: 1, y: 1 }, x: 1, y: 1, z: 0, team: "player", health: 10, maxHealth: 10, unitType: "tank", name: "Alpha", modelUrl: { url: "https://almadar-kflow-assets.web.app/shared/ui-tanks-board/svg/flat/units/tank.svg", role: "npc", category: "tank", animations: ["idle","walk","attack","hit","death"], style: "sci-fi", dimension: "2d", aspect: "1:1", name: "tank", thumbnailUrl: "" } }, { id: "t2", position: { x: 6, y: 0 }, x: 6, y: 0, z: 0, team: "enemy", health: 10, maxHealth: 10, unitType: "tank", name: "Bravo", modelUrl: { url: "https://almadar-kflow-assets.web.app/shared/ui-tanks-board/svg/flat/units/tank_enemy.svg", role: "npc", category: "tank_enemy", animations: ["idle","walk","attack","hit","death"], style: "sci-fi", dimension: "2d", aspect: "1:1", name: "tank_enemy", thumbnailUrl: "" } }, { id: "t3", position: { x: 6, y: 4 }, x: 6, y: 4, z: 0, team: "enemy", health: 8, maxHealth: 8, unitType: "tank", name: "Charlie", modelUrl: { url: "https://almadar-kflow-assets.web.app/shared/ui-tanks-board/svg/flat/units/tank_enemy.svg", role: "npc", category: "tank_enemy", animations: ["idle","walk","attack","hit","death"], style: "sci-fi", dimension: "2d", aspect: "1:1", name: "tank_enemy", thumbnailUrl: "" } } ]
92
231
  tiles: [ { id: "t-0-0", x: 0, y: 0, terrain: "ground", passable: true }, { id: "t-1-0", x: 1, y: 0, terrain: "ground", passable: true }, { id: "t-2-0", x: 2, y: 0, terrain: "ground", passable: true }, { id: "t-3-0", x: 3, y: 0, terrain: "ground", passable: true }, { id: "t-4-0", x: 4, y: 0, terrain: "ground", passable: true }, { id: "t-5-0", x: 5, y: 0, terrain: "ground", passable: true }, { id: "t-6-0", x: 6, y: 0, terrain: "ground", passable: true }, { id: "t-7-0", x: 7, y: 0, terrain: "ground", passable: true }, { id: "t-0-1", x: 0, y: 1, terrain: "ground", passable: true }, { id: "t-1-1", x: 1, y: 1, terrain: "ground", passable: true }, { id: "t-2-1", x: 2, y: 1, terrain: "ground", passable: true }, { id: "t-3-1", x: 3, y: 1, terrain: "ground", passable: true }, { id: "t-4-1", x: 4, y: 1, terrain: "ground", passable: true }, { id: "t-5-1", x: 5, y: 1, terrain: "ground", passable: true }, { id: "t-6-1", x: 6, y: 1, terrain: "ground", passable: true }, { id: "t-7-1", x: 7, y: 1, terrain: "ground", passable: true }, { id: "t-0-2", x: 0, y: 2, terrain: "ground", passable: true }, { id: "t-1-2", x: 1, y: 2, terrain: "ground", passable: true }, { id: "t-2-2", x: 2, y: 2, terrain: "ground", passable: true }, { id: "t-3-2", x: 3, y: 2, terrain: "sand", passable: true }, { id: "t-4-2", x: 4, y: 2, terrain: "sand", passable: true }, { id: "t-5-2", x: 5, y: 2, terrain: "sand", passable: true }, { id: "t-6-2", x: 6, y: 2, terrain: "ground", passable: true }, { id: "t-7-2", x: 7, y: 2, terrain: "ground", passable: true }, { id: "t-0-3", x: 0, y: 3, terrain: "ground", passable: true }, { id: "t-1-3", x: 1, y: 3, terrain: "ground", passable: true }, { id: "t-2-3", x: 2, y: 3, terrain: "sand", passable: true }, { id: "t-3-3", x: 3, y: 3, terrain: "sand", passable: true }, { id: "t-4-3", x: 4, y: 3, terrain: "sand", passable: true }, { id: "t-5-3", x: 5, y: 3, terrain: "sand", passable: true }, { id: "t-6-3", x: 6, y: 3, terrain: "ground", passable: true }, { id: "t-7-3", x: 7, y: 3, terrain: "ground", passable: true }, { id: "t-0-4", x: 0, y: 4, terrain: "ground", passable: true }, { id: "t-1-4", x: 1, y: 4, terrain: "ground", passable: true }, { id: "t-2-4", x: 2, y: 4, terrain: "ground", passable: true }, { id: "t-3-4", x: 3, y: 4, terrain: "sand", passable: true }, { id: "t-4-4", x: 4, y: 4, terrain: "sand", passable: true }, { id: "t-5-4", x: 5, y: 4, terrain: "ground", passable: true }, { id: "t-6-4", x: 6, y: 4, terrain: "ground", passable: true }, { id: "t-7-4", x: 7, y: 4, terrain: "ground", passable: true }, { id: "t-0-5", x: 0, y: 5, terrain: "ground", passable: true }, { id: "t-1-5", x: 1, y: 5, terrain: "ground", passable: true }, { id: "t-2-5", x: 2, y: 5, terrain: "ground", passable: true }, { id: "t-3-5", x: 3, y: 5, terrain: "ground", passable: true }, { id: "t-4-5", x: 4, y: 5, terrain: "ground", passable: true }, { id: "t-5-5", x: 5, y: 5, terrain: "ground", passable: true }, { id: "t-6-5", x: 6, y: 5, terrain: "ground", passable: true }, { id: "t-7-5", x: 7, y: 5, terrain: "ground", passable: true } ]
93
232
  }
94
233
  }
@@ -114,13 +253,14 @@ orbital TanksBoardOrbital {
114
253
  gridWidth: 8
115
254
  gridHeight: 6
116
255
  movementRange: 2
256
+ attackRange: 2
117
257
  projection: "flat"
118
258
  showMinimap: false
119
259
  scale: 0.45
120
- backgroundAsset: { url: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-ui-pack-sci-fi/ui/uipackSpace_sheet.png", atlas: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-ui-pack-sci-fi/ui/uipackSpace_sheet.json", sprite: "metalPanel_blue.png", role: "ui", category: "ui", animations: [], style: "sci-fi", dimension: "2d", aspect: "1:1", name: "panel-frame", thumbnailUrl: "" }
121
- hudBackgroundAsset: { url: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-ui-pack-sci-fi/ui/uipackSpace_sheet.png", atlas: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-ui-pack-sci-fi/ui/uipackSpace_sheet.json", sprite: "metalPanel_blue.png", role: "ui", category: "ui", animations: [], style: "sci-fi", dimension: "2d", aspect: "1:1", name: "panel-frame", thumbnailUrl: "" }
122
- features: [ { id: "f1", x: 2, y: 1, type: "obstacle", assetUrl: { url: "https://almadar-kflow-assets.web.app/shared/ui-tanks-board/kenney-topdown-tanks-redux/features/allSprites_default.png", atlas: "https://almadar-kflow-assets.web.app/shared/ui-tanks-board/kenney-topdown-tanks-redux/features/allSprites_default.json", sprite: "sandbagBeige.png", role: "decoration", category: "sandbagBeige", animations: ["static"], style: "sci-fi", dimension: "2d", aspect: "1:1", name: "sandbagBeige", thumbnailUrl: "" } }, { id: "f2", x: 3, y: 2, type: "obstacle", assetUrl: { url: "https://almadar-kflow-assets.web.app/shared/ui-tanks-board/kenney-topdown-tanks-redux/features/allSprites_default.png", atlas: "https://almadar-kflow-assets.web.app/shared/ui-tanks-board/kenney-topdown-tanks-redux/features/allSprites_default.json", sprite: "sandbagBeige.png", role: "decoration", category: "sandbagBeige", animations: ["static"], style: "sci-fi", dimension: "2d", aspect: "1:1", name: "sandbagBeige", thumbnailUrl: "" } }, { id: "f3", x: 4, y: 3, type: "obstacle", assetUrl: { url: "https://almadar-kflow-assets.web.app/shared/ui-tanks-board/kenney-topdown-tanks-redux/features/allSprites_default.png", atlas: "https://almadar-kflow-assets.web.app/shared/ui-tanks-board/kenney-topdown-tanks-redux/features/allSprites_default.json", sprite: "sandbagBeige.png", role: "decoration", category: "sandbagBeige", animations: ["static"], style: "sci-fi", dimension: "2d", aspect: "1:1", name: "sandbagBeige", thumbnailUrl: "" } }, { id: "f4", x: 5, y: 3, type: "obstacle", assetUrl: { url: "https://almadar-kflow-assets.web.app/shared/ui-tanks-board/kenney-topdown-tanks-redux/features/allSprites_default.png", atlas: "https://almadar-kflow-assets.web.app/shared/ui-tanks-board/kenney-topdown-tanks-redux/features/allSprites_default.json", sprite: "sandbagBeige.png", role: "decoration", category: "sandbagBeige", animations: ["static"], style: "sci-fi", dimension: "2d", aspect: "1:1", name: "sandbagBeige", thumbnailUrl: "" } }, { id: "f5", x: 5, y: 4, type: "obstacle", assetUrl: { url: "https://almadar-kflow-assets.web.app/shared/ui-tanks-board/kenney-topdown-tanks-redux/features/allSprites_default.png", atlas: "https://almadar-kflow-assets.web.app/shared/ui-tanks-board/kenney-topdown-tanks-redux/features/allSprites_default.json", sprite: "sandbagBeige.png", role: "decoration", category: "sandbagBeige", animations: ["static"], style: "sci-fi", dimension: "2d", aspect: "1:1", name: "sandbagBeige", thumbnailUrl: "" } }, { id: "f6", x: 2, y: 4, type: "obstacle", assetUrl: { url: "https://almadar-kflow-assets.web.app/shared/ui-tanks-board/kenney-topdown-tanks-redux/features/allSprites_default.png", atlas: "https://almadar-kflow-assets.web.app/shared/ui-tanks-board/kenney-topdown-tanks-redux/features/allSprites_default.json", sprite: "sandbagBeige.png", role: "decoration", category: "sandbagBeige", animations: ["static"], style: "sci-fi", dimension: "2d", aspect: "1:1", name: "sandbagBeige", thumbnailUrl: "" } } ]
123
- assetManifest: { terrains: { ground: { url: "https://almadar-kflow-assets.web.app/shared/ui-tanks-board/kenney-topdown-tanks-redux/terrain/terrainTiles_default.png", atlas: "https://almadar-kflow-assets.web.app/shared/ui-tanks-board/kenney-topdown-tanks-redux/terrain/Tilesheet_terrainTiles_default.tiles.json", sprite: "0,0", role: "tile", category: "ground", animations: ["static"], style: "sci-fi", dimension: "2d", aspect: "1:1", name: "ground", thumbnailUrl: "" }, sand: { url: "https://almadar-kflow-assets.web.app/shared/ui-tanks-board/kenney-topdown-tanks-redux/terrain/terrainTiles_default.png", atlas: "https://almadar-kflow-assets.web.app/shared/ui-tanks-board/kenney-topdown-tanks-redux/terrain/Tilesheet_terrainTiles_default.tiles.json", sprite: "0,2", role: "tile", category: "sand", animations: ["static"], style: "sci-fi", dimension: "2d", aspect: "1:1", name: "sand", thumbnailUrl: "" } }, units: { tank: { url: "https://almadar-kflow-assets.web.app/shared/ui-tanks-board/kenney-topdown-tanks-redux/features/allSprites_default.png", atlas: "https://almadar-kflow-assets.web.app/shared/ui-tanks-board/kenney-topdown-tanks-redux/features/allSprites_default.json", sprite: "tankBody_green.png", role: "npc", category: "tank", animations: ["idle","walk","attack","hit","death"], style: "sci-fi", dimension: "2d", aspect: "1:1", name: "tank", thumbnailUrl: "" } }, features: { obstacle: { url: "https://almadar-kflow-assets.web.app/shared/ui-tanks-board/kenney-topdown-tanks-redux/features/allSprites_default.png", atlas: "https://almadar-kflow-assets.web.app/shared/ui-tanks-board/kenney-topdown-tanks-redux/features/allSprites_default.json", sprite: "sandbagBeige.png", role: "decoration", category: "obstacle", animations: ["static"], style: "sci-fi", dimension: "2d", aspect: "1:1", name: "obstacle", thumbnailUrl: "" } }, effects: { explosion: { url: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-explosion-pack/effects/spritesheet_regularExplosion.png", atlas: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-explosion-pack/effects/spritesheet_regularExplosion.json", sprite: "regularExplosion04.png", role: "effect", category: "explosion", animations: ["static"], style: "sci-fi", dimension: "2d", aspect: "8:1", name: "explosion", thumbnailUrl: "" } } }
260
+ backgroundAsset: { url: "https://almadar-kflow-assets.web.app/shared/ui-tanks-board/svg/flat/ui/panel-frame.svg", role: "ui", category: "ui", animations: [], style: "sci-fi", dimension: "2d", aspect: "1:1", name: "panel-frame", thumbnailUrl: "" }
261
+ hudBackgroundAsset: { url: "https://almadar-kflow-assets.web.app/shared/ui-tanks-board/svg/flat/ui/panel-frame.svg", role: "ui", category: "ui", animations: [], style: "sci-fi", dimension: "2d", aspect: "1:1", name: "panel-frame", thumbnailUrl: "" }
262
+ features: [ { id: "f1", x: 2, y: 1, type: "obstacle", assetUrl: { url: "https://almadar-kflow-assets.web.app/shared/ui-tanks-board/svg/flat/features/obstacle.svg", role: "decoration", category: "obstacle", animations: ["static"], style: "sci-fi", dimension: "2d", aspect: "1:1", name: "obstacle", thumbnailUrl: "" } }, { id: "f2", x: 3, y: 2, type: "obstacle", assetUrl: { url: "https://almadar-kflow-assets.web.app/shared/ui-tanks-board/svg/flat/features/obstacle.svg", role: "decoration", category: "obstacle", animations: ["static"], style: "sci-fi", dimension: "2d", aspect: "1:1", name: "obstacle", thumbnailUrl: "" } }, { id: "f3", x: 4, y: 3, type: "obstacle", assetUrl: { url: "https://almadar-kflow-assets.web.app/shared/ui-tanks-board/svg/flat/features/obstacle.svg", role: "decoration", category: "obstacle", animations: ["static"], style: "sci-fi", dimension: "2d", aspect: "1:1", name: "obstacle", thumbnailUrl: "" } }, { id: "f4", x: 5, y: 3, type: "obstacle", assetUrl: { url: "https://almadar-kflow-assets.web.app/shared/ui-tanks-board/svg/flat/features/obstacle.svg", role: "decoration", category: "obstacle", animations: ["static"], style: "sci-fi", dimension: "2d", aspect: "1:1", name: "obstacle", thumbnailUrl: "" } }, { id: "f5", x: 5, y: 4, type: "obstacle", assetUrl: { url: "https://almadar-kflow-assets.web.app/shared/ui-tanks-board/svg/flat/features/obstacle.svg", role: "decoration", category: "obstacle", animations: ["static"], style: "sci-fi", dimension: "2d", aspect: "1:1", name: "obstacle", thumbnailUrl: "" } }, { id: "f6", x: 2, y: 4, type: "obstacle", assetUrl: { url: "https://almadar-kflow-assets.web.app/shared/ui-tanks-board/svg/flat/features/obstacle.svg", role: "decoration", category: "obstacle", animations: ["static"], style: "sci-fi", dimension: "2d", aspect: "1:1", name: "obstacle", thumbnailUrl: "" } } ]
263
+ assetManifest: { terrains: { ground: { url: "https://almadar-kflow-assets.web.app/shared/ui-tanks-board/svg/flat/terrain/ground.svg", role: "tile", category: "ground", animations: ["static"], style: "sci-fi", dimension: "2d", aspect: "1:1", name: "ground", thumbnailUrl: "" }, sand: { url: "https://almadar-kflow-assets.web.app/shared/ui-tanks-board/svg/flat/terrain/sand.svg", role: "tile", category: "sand", animations: ["static"], style: "sci-fi", dimension: "2d", aspect: "1:1", name: "sand", thumbnailUrl: "" } }, units: { tank: { url: "https://almadar-kflow-assets.web.app/shared/ui-tanks-board/svg/flat/units/tank.svg", role: "npc", category: "tank", animations: ["idle","walk","attack","hit","death"], style: "sci-fi", dimension: "2d", aspect: "1:1", name: "tank", thumbnailUrl: "" }, tank_enemy: { url: "https://almadar-kflow-assets.web.app/shared/ui-tanks-board/svg/flat/units/tank_enemy.svg", role: "npc", category: "tank_enemy", animations: ["idle","walk","attack","hit","death"], style: "sci-fi", dimension: "2d", aspect: "1:1", name: "tank_enemy", thumbnailUrl: "" } }, features: { obstacle: { url: "https://almadar-kflow-assets.web.app/shared/ui-tanks-board/svg/flat/features/obstacle.svg", role: "decoration", category: "obstacle", animations: ["static"], style: "sci-fi", dimension: "2d", aspect: "1:1", name: "obstacle", thumbnailUrl: "" } }, effects: { hit: { url: "https://almadar-kflow-assets.web.app/shared/ui-tanks-board/svg/flat/effects/hit.svg", role: "effect", category: "hit", animations: ["static"], style: "sci-fi", dimension: "2d", aspect: "1:1", name: "hit", thumbnailUrl: "" }, explosion: { url: "https://almadar-kflow-assets.web.app/shared/ui-tanks-board/svg/flat/effects/explosion.svg", role: "effect", category: "explosion", animations: ["static"], style: "sci-fi", dimension: "2d", aspect: "1:1", name: "explosion", thumbnailUrl: "" } } }
124
264
  }
125
265
  }
126
266