From 01029b43b7104d06acdce71885a9de85da4283b8 Mon Sep 17 00:00:00 2001 From: Keith Solomon Date: Sat, 25 Jul 2026 23:15:57 -0500 Subject: [PATCH] feat: add three bundled scenario fixtures and manifest --- public/assets/scenarios/hold-the-line.json | 30 +++++++++++++++++++ public/assets/scenarios/last-stand.json | 34 ++++++++++++++++++++++ public/assets/scenarios/manifest.json | 14 +++++++++ public/assets/scenarios/skirmish.json | 24 +++++++++++++++ 4 files changed, 102 insertions(+) create mode 100644 public/assets/scenarios/hold-the-line.json create mode 100644 public/assets/scenarios/last-stand.json create mode 100644 public/assets/scenarios/manifest.json create mode 100644 public/assets/scenarios/skirmish.json diff --git a/public/assets/scenarios/hold-the-line.json b/public/assets/scenarios/hold-the-line.json new file mode 100644 index 0000000..bbb410b --- /dev/null +++ b/public/assets/scenarios/hold-the-line.json @@ -0,0 +1,30 @@ +{ + "id": "hold-the-line", + "name": "Hold the Line", + "battlefield": { + "width": 10, + "height": 8, + "terrain": { + "2:2": "forest", "2:3": "forest", "2:4": "forest", "2:5": "forest", + "3:2": "forest", "3:3": "forest" + } + }, + "units": [ + { "id": "alpha-1", "teamId": "alpha", "position": { "x": 2, "y": 3 }, "maxHealth": 14, "health": 14, "attack": 3, "defense": 5, "speed": 2, "archetype": "defender", "abilities": [] }, + { "id": "alpha-2", "teamId": "alpha", "position": { "x": 2, "y": 4 }, "maxHealth": 14, "health": 14, "attack": 3, "defense": 5, "speed": 2, "archetype": "defender", "abilities": [] }, + { "id": "alpha-3", "teamId": "alpha", "position": { "x": 2, "y": 5 }, "maxHealth": 14, "health": 14, "attack": 3, "defense": 5, "speed": 2, "archetype": "defender", "abilities": [] }, + { "id": "bravo-1", "teamId": "bravo", "position": { "x": 9, "y": 1 }, "maxHealth": 8, "health": 8, "attack": 5, "defense": 2, "speed": 3, "archetype": "striker", "abilities": ["area_damage"] }, + { "id": "bravo-2", "teamId": "bravo", "position": { "x": 9, "y": 3 }, "maxHealth": 8, "health": 8, "attack": 5, "defense": 2, "speed": 3, "archetype": "striker", "abilities": ["area_damage"] }, + { "id": "bravo-3", "teamId": "bravo", "position": { "x": 9, "y": 7 }, "maxHealth": 7, "health": 7, "attack": 2, "defense": 2, "speed": 3, "archetype": "support", "abilities": ["heal"] }, + { "id": "bravo-4", "teamId": "bravo", "position": { "x": 9, "y": 4 }, "maxHealth": 6, "health": 6, "attack": 3, "defense": 1, "speed": 5, "archetype": "scout", "abilities": [] } + ], + "deploymentZones": { + "alpha": { "teamId": "alpha", "positions": [{ "x": 2, "y": 3 }, { "x": 2, "y": 4 }, { "x": 2, "y": 5 }] }, + "bravo": { "teamId": "bravo", "positions": [{ "x": 9, "y": 1 }, { "x": 9, "y": 3 }, { "x": 9, "y": 7 }, { "x": 9, "y": 4 }] } + }, + "objectives": { + "objective-1": { "id": "objective-1", "position": { "x": 4, "y": 4 } } + }, + "victoryCondition": "hold_objective", + "holdRoundsRequired": 3 +} diff --git a/public/assets/scenarios/last-stand.json b/public/assets/scenarios/last-stand.json new file mode 100644 index 0000000..9ad26ac --- /dev/null +++ b/public/assets/scenarios/last-stand.json @@ -0,0 +1,34 @@ +{ + "id": "last-stand", + "name": "Last Stand", + "battlefield": { + "width": 12, + "height": 12, + "terrain": { + "2:2": "forest", "2:3": "forest", "2:8": "forest", "2:9": "forest", + "3:2": "forest", "3:3": "forest", "3:8": "forest", "3:9": "forest", + "5:5": "rough", "5:6": "rough", "6:5": "rough", "6:6": "rough", + "8:2": "water", "8:3": "water", "8:8": "water", "8:9": "water", + "9:2": "water", "9:3": "water", "9:8": "water", "9:9": "water" + } + }, + "units": [ + { "id": "alpha-1", "teamId": "alpha", "position": { "x": 0, "y": 0 }, "maxHealth": 14, "health": 14, "attack": 3, "defense": 5, "speed": 2, "archetype": "defender", "abilities": [] }, + { "id": "alpha-2", "teamId": "alpha", "position": { "x": 0, "y": 3 }, "maxHealth": 14, "health": 14, "attack": 3, "defense": 5, "speed": 2, "archetype": "defender", "abilities": [] }, + { "id": "alpha-3", "teamId": "alpha", "position": { "x": 0, "y": 6 }, "maxHealth": 14, "health": 14, "attack": 3, "defense": 5, "speed": 2, "archetype": "defender", "abilities": [] }, + { "id": "alpha-4", "teamId": "alpha", "position": { "x": 0, "y": 9 }, "maxHealth": 7, "health": 7, "attack": 2, "defense": 2, "speed": 3, "archetype": "support", "abilities": ["heal"] }, + { "id": "alpha-5", "teamId": "alpha", "position": { "x": 1, "y": 5 }, "maxHealth": 6, "health": 6, "attack": 3, "defense": 1, "speed": 5, "archetype": "scout", "abilities": [] }, + { "id": "alpha-6", "teamId": "alpha", "position": { "x": 2, "y": 11 }, "maxHealth": 6, "health": 6, "attack": 3, "defense": 1, "speed": 5, "archetype": "scout", "abilities": [] }, + { "id": "bravo-1", "teamId": "bravo", "position": { "x": 11, "y": 2 }, "maxHealth": 8, "health": 8, "attack": 5, "defense": 2, "speed": 3, "archetype": "striker", "abilities": ["area_damage"] }, + { "id": "bravo-2", "teamId": "bravo", "position": { "x": 11, "y": 5 }, "maxHealth": 8, "health": 8, "attack": 5, "defense": 2, "speed": 3, "archetype": "striker", "abilities": ["area_damage"] }, + { "id": "bravo-3", "teamId": "bravo", "position": { "x": 11, "y": 8 }, "maxHealth": 8, "health": 8, "attack": 5, "defense": 2, "speed": 3, "archetype": "striker", "abilities": ["area_damage"] }, + { "id": "bravo-4", "teamId": "bravo", "position": { "x": 10, "y": 11 }, "maxHealth": 6, "health": 6, "attack": 3, "defense": 1, "speed": 5, "archetype": "scout", "abilities": [] } + ], + "deploymentZones": { + "alpha": { "teamId": "alpha", "positions": [{ "x": 0, "y": 0 }, { "x": 0, "y": 3 }, { "x": 0, "y": 6 }, { "x": 0, "y": 9 }, { "x": 1, "y": 5 }, { "x": 2, "y": 11 }] }, + "bravo": { "teamId": "bravo", "positions": [{ "x": 11, "y": 2 }, { "x": 11, "y": 5 }, { "x": 11, "y": 8 }, { "x": 10, "y": 11 }] } + }, + "objectives": {}, + "victoryCondition": "eliminate_all", + "holdRoundsRequired": 1 +} diff --git a/public/assets/scenarios/manifest.json b/public/assets/scenarios/manifest.json new file mode 100644 index 0000000..3fc72ba --- /dev/null +++ b/public/assets/scenarios/manifest.json @@ -0,0 +1,14 @@ +{ + "skirmish": { + "name": "Skirmish", + "summary": "8x8 open ground. Three units per side. Eliminate the enemy team." + }, + "hold-the-line": { + "name": "Hold the Line", + "summary": "10x8 with a forest corridor. Three defenders hold the center against four attackers. Hold the objective for three rounds." + }, + "last-stand": { + "name": "Last Stand", + "summary": "12x12 with mixed terrain. Six defenders versus four strikers. Eliminate the enemy team." + } +} diff --git a/public/assets/scenarios/skirmish.json b/public/assets/scenarios/skirmish.json new file mode 100644 index 0000000..dedfa8b --- /dev/null +++ b/public/assets/scenarios/skirmish.json @@ -0,0 +1,24 @@ +{ + "id": "skirmish", + "name": "Skirmish", + "battlefield": { + "width": 8, + "height": 8, + "terrain": {} + }, + "units": [ + { "id": "alpha-1", "teamId": "alpha", "position": { "x": 0, "y": 1 }, "maxHealth": 12, "health": 12, "attack": 3, "defense": 4, "speed": 2, "archetype": "defender", "abilities": [] }, + { "id": "alpha-2", "teamId": "alpha", "position": { "x": 0, "y": 3 }, "maxHealth": 8, "health": 8, "attack": 5, "defense": 2, "speed": 3, "archetype": "striker", "abilities": ["area_damage"] }, + { "id": "alpha-3", "teamId": "alpha", "position": { "x": 0, "y": 6 }, "maxHealth": 7, "health": 7, "attack": 2, "defense": 2, "speed": 3, "archetype": "support", "abilities": ["heal"] }, + { "id": "bravo-1", "teamId": "bravo", "position": { "x": 7, "y": 1 }, "maxHealth": 8, "health": 8, "attack": 5, "defense": 2, "speed": 3, "archetype": "striker", "abilities": ["area_damage"] }, + { "id": "bravo-2", "teamId": "bravo", "position": { "x": 7, "y": 3 }, "maxHealth": 6, "health": 6, "attack": 3, "defense": 1, "speed": 5, "archetype": "scout", "abilities": [] }, + { "id": "bravo-3", "teamId": "bravo", "position": { "x": 7, "y": 6 }, "maxHealth": 7, "health": 7, "attack": 2, "defense": 2, "speed": 3, "archetype": "support", "abilities": ["heal"] } + ], + "deploymentZones": { + "alpha": { "teamId": "alpha", "positions": [{ "x": 0, "y": 1 }, { "x": 0, "y": 3 }, { "x": 0, "y": 6 }] }, + "bravo": { "teamId": "bravo", "positions": [{ "x": 7, "y": 1 }, { "x": 7, "y": 3 }, { "x": 7, "y": 6 }] } + }, + "objectives": {}, + "victoryCondition": "eliminate_all", + "holdRoundsRequired": 1 +}