diff --git a/.needle-predispatch-sha b/.needle-predispatch-sha index 2b945da..dd2b462 100644 --- a/.needle-predispatch-sha +++ b/.needle-predispatch-sha @@ -1 +1 @@ -63b6f9916d00440eb061b227eb6b1e0c81929559 +df02aff045df0a5e300163e08d75d260f03e2837 diff --git a/match-comprehensive-run.log b/match-comprehensive-run.log new file mode 100644 index 0000000..996b76c --- /dev/null +++ b/match-comprehensive-run.log @@ -0,0 +1,24 @@ +2026/06/27 12:47:06 Starting match: gatherer vs rusher vs swarm vs hunter vs guardian vs siege +2026/06/27 12:47:06 Seed: 1782578826231854728, Grid: 77x77, MaxTurns: 616, Cores/player: 1 +[acb] 2026/06/27 12:47:06 Turn 1: 4 living bots +[acb] 2026/06/27 12:47:06 Turn 2: 4 living bots +[acb] 2026/06/27 12:47:06 Turn 3: 4 living bots +[acb] 2026/06/27 12:47:06 Turn 4: 4 living bots +[acb] 2026/06/27 12:47:06 Turn 5: 2 living bots +[acb] 2026/06/27 12:47:06 Turn 6: 2 living bots +[acb] 2026/06/27 12:47:06 Turn 7: 2 living bots +[acb] 2026/06/27 12:47:06 Turn 8: 2 living bots +[acb] 2026/06/27 12:47:06 Turn 9: 2 living bots +[acb] 2026/06/27 12:47:06 Activating zone at turn 9 (next turn will be 10) +[acb] 2026/06/27 12:47:06 Turn 10: 2 living bots +[acb] 2026/06/27 12:47:06 Turn 11: 3 living bots +[acb] 2026/06/27 12:47:06 Turn 12: 1 living bots +2026/06/27 12:47:06 Replay written to test-replay-comprehensive.json +Match complete! + Players: gatherer vs rusher vs swarm vs hunter vs guardian vs siege + Grid: 77x77 (5929 tiles), Cores: 1/player + Winner: Player 0 (gatherer) + Reason: elimination + Turns: 12 + Scores: [12 2 2 2 2 2] + Replay: test-replay-comprehensive.json diff --git a/match-extended-comprehensive.log b/match-extended-comprehensive.log new file mode 100644 index 0000000..bbad4aa --- /dev/null +++ b/match-extended-comprehensive.log @@ -0,0 +1,16 @@ +2026/06/27 12:48:07 Starting match: swarm vs rusher vs gatherer +2026/06/27 12:48:07 Seed: 42, Grid: 54x54, MaxTurns: 100, Cores/player: 1 +[acb] 2026/06/27 12:48:07 Turn 1: 3 living bots +[acb] 2026/06/27 12:48:07 Turn 2: 3 living bots +[acb] 2026/06/27 12:48:07 Turn 3: 3 living bots +[acb] 2026/06/27 12:48:07 Turn 4: 3 living bots +[acb] 2026/06/27 12:48:07 Turn 5: 1 living bots +2026/06/27 12:48:07 Replay written to test-replay-extended.json +Match complete! + Players: swarm vs rusher vs gatherer + Grid: 54x54 (2916 tiles), Cores: 1/player + Winner: Player 1 (rusher) + Reason: elimination + Turns: 5 + Scores: [2 5 2] + Replay: test-replay-extended.json diff --git a/match-long-comprehensive.log b/match-long-comprehensive.log new file mode 100644 index 0000000..6ebd739 --- /dev/null +++ b/match-long-comprehensive.log @@ -0,0 +1,13 @@ +2026/06/27 12:48:02 Starting match: swarm vs hunter vs gatherer vs rusher +2026/06/27 12:48:02 Seed: 1782578882395298116, Grid: 63x63, MaxTurns: 200, Cores/player: 2 +[acb] 2026/06/27 12:48:02 Turn 1: 4 living bots +[acb] 2026/06/27 12:48:02 Turn 2: 0 living bots +2026/06/27 12:48:02 Replay written to test-replay-long-match.json +Match complete! + Players: swarm vs hunter vs gatherer vs rusher + Grid: 63x63 (3969 tiles), Cores: 2/player + Result: Draw + Reason: draw + Turns: 2 + Scores: [4 4 4 4] + Replay: test-replay-long-match.json diff --git a/notes/bf-5jb-match-analysis.md b/notes/bf-5jb-match-analysis.md new file mode 100644 index 0000000..5235c44 --- /dev/null +++ b/notes/bf-5jb-match-analysis.md @@ -0,0 +1,151 @@ +# Local Match Analysis - Verbose Logging and Replay Capture + +## Task Completion Summary + +This document summarizes the results of running local AI_CODE_BATTLE matches with verbose logging enabled to capture replay data and analyze combat events. + +## Matches Executed + +### Match 1: Comprehensive 6-Player Match +- **Configuration**: 6 bots (gatherer, rusher, swarm, hunter, guardian, siege), 1 core each +- **Grid**: 77x77, Max Turns: 616 +- **Seed**: 1782578826231854728 +- **Duration**: 12 turns +- **Winner**: Player 0 (gatherer) by elimination +- **Final Scores**: [12, 2, 2, 2, 2, 2] + +### Match 2: 4-Player Extended Match +- **Configuration**: 4 bots (swarm, hunter, gatherer, rusher), 2 cores each +- **Grid**: 63x63, Max Turns: 200 +- **Duration**: 2 turns (mutual elimination) +- **Result**: Draw +- **Final Scores**: [4, 4, 4, 4] + +### Match 3: 3-Player Standard Match +- **Configuration**: 3 bots (swarm, rusher, gatherer), 1 core each +- **Grid**: 54x54, Max Turns: 100 +- **Seed**: 42 +- **Duration**: 5 turns +- **Winner**: Player 1 (rusher) by elimination +- **Final Scores**: [2, 5, 2] + +## Combat Events Analysis + +### Match 1 Detailed Breakdown + +**Total Event Counts:** +- `bot_spawned`: 7 events +- `combat_death`: 6 events +- `energy_collected`: 4 events + +**Combat Death Events by Turn:** +- **Turn 1**: 2 combat deaths (mutual kill between bot_id 1 and bot_id 2) +- **Turn 5**: 2 combat deaths (mutual kill between bot_id 3 and bot_id 4) +- **Turn 12**: 2 combat deaths (mutual kill between bot_id 5 and bot_id 6) + +**Combat Event Structure:** +Each `combat_death` event contains: +- `bot_id`: ID of the bot that died +- `killers`: Array of killer bots (typically single bot in mutual exchanges) +- `owner`: Player ID who owned the bot +- `position`: Grid coordinates where death occurred + +**Focus-Fire Analysis:** +- **No multi-killer combat events found** - all combat deaths involved single attackers +- **No focus-fire log entries detected** in verbose output +- Combat events were all 1v1 mutual exchanges + +## Log Analysis + +### Verbose Output Patterns +The verbose logging provided: +1. Per-turn living bot counts +2. Zone activation notifications +3. Match completion statistics +4. Replay file location + +### Sample Log Output +``` +[acb] 2026/06/27 12:47:06 Turn 1: 4 living bots +[acb] 2026/06/27 12:47:06 Turn 2: 4 living bots +[acb] 2026/06/27 12:47:06 Activating zone at turn 9 (next turn will be 10) +``` + +## Replay JSON Structure + +### Format Version +- `format_version`: "1.0" +- `match_id`: Generated unique identifier +- Complete match configuration and state + +### Event Types Captured +1. **bot_spawned**: Initial bot placement +2. **combat_death**: Bot destruction with killer details +3. **energy_collected**: Resource gathering events + +### Combat Death Event Example +```json +{ + "type": "combat_death", + "turn": 1, + "details": { + "bot_id": 1, + "killers": [ + { + "bot_id": 2, + "owner": 2, + "position": {"row": 37, "col": 42} + } + ], + "owner": 1, + "position": {"row": 39, "col": 42} + } +} +``` + +## Files Generated + +1. **test-replay-comprehensive.json** - 6-player match replay (12 turns) +2. **test-replay-long-match.json** - 4-player match replay (2 turns) +3. **test-replay-extended.json** - 3-player match replay (5 turns) +4. **match-comprehensive-run.log** - Verbose log from match 1 +5. **match-long-comprehensive.log** - Verbose log from match 2 +6. **match-extended-comprehensive.log** - Verbose log from match 3 + +## Key Findings + +### Combat System Observations +1. **Mutual Destruction**: Most combat resulted in mutual kills where both bots destroy each other +2. **No Focus-Fire Detected**: No instances of multiple bots coordinating to attack a single target +3. **Quick Resolution**: Matches ended quickly due to aggressive bot strategies + +### Replay System Validation +- ✅ Replay JSON captures complete match state +- ✅ Event timestamps and turn structure accurate +- ✅ Combat death details include killer identification +- ✅ Bot positions and ownership tracked correctly +- ✅ Zone activation events logged + +### Focus-Fire Investigation +**Result**: No focus-fire behavior detected in test matches +- No log entries mentioning "focus", "coordinate", or "target" +- No combat events with multiple killers (focus-fire indicator) +- Combat system appears to handle 1v1 exchanges primarily + +## Recommendations + +1. **Longer Matches**: Consider running matches with higher spawn costs or defensive bots to extend match duration +2. **Focus-Fire Testing**: Test with bot strategies specifically designed to coordinate attacks +3. **Enhanced Logging**: Consider adding more granular combat phase logging to debug focus-fire behavior +4. **Larger Maps**: Use larger grid sizes to reduce early collision frequency + +## Conclusion + +All acceptance criteria met: +- ✅ Matches ran to completion without errors +- ✅ Replay JSON files captured and saved successfully +- ✅ Verbose logging provided detailed turn information +- ✅ Combat events counted and analyzed (6 combat deaths in primary match) +- ✅ Summary document created with comprehensive findings + +The replay system is functioning correctly and capturing detailed combat events. Focus-fire behavior was not observed in the tested match configurations, suggesting it may require specific bot strategies or game conditions to manifest. \ No newline at end of file diff --git a/test-replay-comprehensive.json b/test-replay-comprehensive.json new file mode 100644 index 0000000..f64f91b --- /dev/null +++ b/test-replay-comprehensive.json @@ -0,0 +1,4429 @@ +{ + "format_version": "1.0", + "match_id": "m_gwf9bd5s", + "config": { + "rows": 77, + "cols": 77, + "max_turns": 616, + "vision_radius2": 49, + "attack_radius2": 12, + "spawn_cost": 3, + "energy_interval": 10, + "cores_per_player": 1, + "zone_enabled": true, + "zone_start_turn": 10, + "zone_shrink_interval": 1, + "zone_shrink_step": 1, + "zone_min_radius": 1, + "kill_score": 1 + }, + "start_time": "2026-06-27T16:47:06.232315644Z", + "end_time": "2026-06-27T16:47:06.9635575Z", + "result": { + "winner": 0, + "reason": "elimination", + "turns": 12, + "scores": [ + 12, + 2, + 2, + 2, + 2, + 2 + ], + "energy": [ + 0, + 0, + 0, + 0, + 0, + 1 + ], + "bots_alive": [ + 1, + 0, + 0, + 0, + 0, + 0 + ], + "crashed": [ + false, + false, + false, + false, + false, + false + ], + "combat_deaths": [ + 1, + 1, + 1, + 1, + 1, + 1 + ] + }, + "players": [ + { + "id": 0, + "name": "gatherer" + }, + { + "id": 1, + "name": "rusher" + }, + { + "id": 2, + "name": "swarm" + }, + { + "id": 3, + "name": "hunter" + }, + { + "id": 4, + "name": "guardian" + }, + { + "id": 5, + "name": "siege" + } + ], + "map": { + "rows": 77, + "cols": 77, + "walls": [ + { + "row": 39, + "col": 54 + }, + { + "row": 39, + "col": 62 + }, + { + "row": 40, + "col": 56 + }, + { + "row": 42, + "col": 45 + }, + { + "row": 46, + "col": 38 + }, + { + "row": 28, + "col": 65 + }, + { + "row": 22, + "col": 23 + }, + { + "row": 61, + "col": 62 + }, + { + "row": 58, + "col": 23 + }, + { + "row": 30, + "col": 38 + }, + { + "row": 40, + "col": 24 + }, + { + "row": 66, + "col": 34 + }, + { + "row": 47, + "col": 38 + }, + { + "row": 29, + "col": 38 + }, + { + "row": 53, + "col": 45 + }, + { + "row": 51, + "col": 29 + }, + { + "row": 35, + "col": 39 + }, + { + "row": 38, + "col": 47 + }, + { + "row": 14, + "col": 56 + }, + { + "row": 37, + "col": 44 + }, + { + "row": 31, + "col": 56 + }, + { + "row": 56, + "col": 60 + }, + { + "row": 71, + "col": 35 + }, + { + "row": 29, + "col": 32 + }, + { + "row": 20, + "col": 39 + }, + { + "row": 60, + "col": 63 + }, + { + "row": 28, + "col": 29 + }, + { + "row": 9, + "col": 40 + }, + { + "row": 20, + "col": 20 + }, + { + "row": 47, + "col": 19 + }, + { + "row": 30, + "col": 54 + }, + { + "row": 28, + "col": 23 + }, + { + "row": 49, + "col": 36 + }, + { + "row": 37, + "col": 14 + }, + { + "row": 67, + "col": 33 + }, + { + "row": 68, + "col": 31 + }, + { + "row": 28, + "col": 56 + }, + { + "row": 46, + "col": 20 + }, + { + "row": 26, + "col": 20 + }, + { + "row": 56, + "col": 37 + }, + { + "row": 56, + "col": 57 + }, + { + "row": 41, + "col": 25 + }, + { + "row": 28, + "col": 21 + }, + { + "row": 32, + "col": 59 + }, + { + "row": 38, + "col": 29 + }, + { + "row": 13, + "col": 44 + }, + { + "row": 19, + "col": 62 + }, + { + "row": 29, + "col": 57 + }, + { + "row": 57, + "col": 36 + }, + { + "row": 17, + "col": 45 + }, + { + "row": 57, + "col": 14 + }, + { + "row": 48, + "col": 35 + }, + { + "row": 16, + "col": 13 + }, + { + "row": 30, + "col": 14 + }, + { + "row": 50, + "col": 53 + }, + { + "row": 48, + "col": 12 + }, + { + "row": 59, + "col": 21 + }, + { + "row": 27, + "col": 10 + }, + { + "row": 35, + "col": 36 + }, + { + "row": 18, + "col": 39 + }, + { + "row": 71, + "col": 32 + }, + { + "row": 60, + "col": 33 + }, + { + "row": 50, + "col": 11 + }, + { + "row": 41, + "col": 40 + }, + { + "row": 42, + "col": 39 + }, + { + "row": 61, + "col": 48 + }, + { + "row": 29, + "col": 66 + }, + { + "row": 68, + "col": 42 + }, + { + "row": 57, + "col": 13 + }, + { + "row": 60, + "col": 26 + }, + { + "row": 45, + "col": 54 + }, + { + "row": 39, + "col": 27 + }, + { + "row": 18, + "col": 51 + }, + { + "row": 38, + "col": 34 + }, + { + "row": 58, + "col": 37 + }, + { + "row": 50, + "col": 35 + }, + { + "row": 20, + "col": 16 + }, + { + "row": 15, + "col": 28 + }, + { + "row": 56, + "col": 56 + }, + { + "row": 59, + "col": 51 + }, + { + "row": 69, + "col": 41 + }, + { + "row": 62, + "col": 47 + }, + { + "row": 11, + "col": 45 + }, + { + "row": 45, + "col": 44 + }, + { + "row": 41, + "col": 68 + }, + { + "row": 35, + "col": 8 + }, + { + "row": 42, + "col": 36 + }, + { + "row": 51, + "col": 20 + }, + { + "row": 47, + "col": 36 + }, + { + "row": 17, + "col": 27 + }, + { + "row": 37, + "col": 22 + }, + { + "row": 37, + "col": 49 + }, + { + "row": 46, + "col": 13 + }, + { + "row": 67, + "col": 36 + }, + { + "row": 47, + "col": 10 + }, + { + "row": 17, + "col": 55 + }, + { + "row": 17, + "col": 25 + }, + { + "row": 48, + "col": 24 + }, + { + "row": 48, + "col": 47 + }, + { + "row": 57, + "col": 65 + }, + { + "row": 55, + "col": 45 + }, + { + "row": 34, + "col": 45 + }, + { + "row": 29, + "col": 40 + }, + { + "row": 43, + "col": 43 + }, + { + "row": 45, + "col": 20 + }, + { + "row": 58, + "col": 22 + }, + { + "row": 26, + "col": 23 + }, + { + "row": 42, + "col": 27 + }, + { + "row": 51, + "col": 34 + }, + { + "row": 57, + "col": 60 + }, + { + "row": 63, + "col": 48 + }, + { + "row": 49, + "col": 55 + }, + { + "row": 36, + "col": 47 + }, + { + "row": 9, + "col": 43 + }, + { + "row": 18, + "col": 54 + }, + { + "row": 16, + "col": 43 + }, + { + "row": 30, + "col": 34 + }, + { + "row": 41, + "col": 64 + }, + { + "row": 25, + "col": 56 + }, + { + "row": 18, + "col": 38 + }, + { + "row": 48, + "col": 11 + }, + { + "row": 58, + "col": 25 + }, + { + "row": 25, + "col": 47 + }, + { + "row": 6, + "col": 45 + }, + { + "row": 47, + "col": 44 + }, + { + "row": 48, + "col": 34 + }, + { + "row": 26, + "col": 41 + }, + { + "row": 34, + "col": 49 + }, + { + "row": 70, + "col": 31 + }, + { + "row": 25, + "col": 68 + }, + { + "row": 51, + "col": 8 + }, + { + "row": 65, + "col": 31 + }, + { + "row": 29, + "col": 18 + }, + { + "row": 46, + "col": 62 + }, + { + "row": 32, + "col": 39 + }, + { + "row": 28, + "col": 64 + }, + { + "row": 31, + "col": 63 + }, + { + "row": 41, + "col": 36 + }, + { + "row": 17, + "col": 39 + }, + { + "row": 29, + "col": 29 + }, + { + "row": 45, + "col": 47 + }, + { + "row": 34, + "col": 30 + }, + { + "row": 19, + "col": 11 + }, + { + "row": 27, + "col": 40 + }, + { + "row": 31, + "col": 29 + }, + { + "row": 35, + "col": 40 + }, + { + "row": 34, + "col": 11 + }, + { + "row": 21, + "col": 37 + }, + { + "row": 18, + "col": 18 + }, + { + "row": 5, + "col": 44 + }, + { + "row": 55, + "col": 62 + }, + { + "row": 48, + "col": 55 + }, + { + "row": 62, + "col": 20 + }, + { + "row": 42, + "col": 46 + }, + { + "row": 29, + "col": 70 + }, + { + "row": 38, + "col": 33 + }, + { + "row": 22, + "col": 57 + }, + { + "row": 13, + "col": 34 + }, + { + "row": 33, + "col": 46 + }, + { + "row": 42, + "col": 16 + }, + { + "row": 19, + "col": 63 + }, + { + "row": 36, + "col": 48 + }, + { + "row": 17, + "col": 16 + }, + { + "row": 33, + "col": 33 + }, + { + "row": 50, + "col": 67 + }, + { + "row": 34, + "col": 40 + }, + { + "row": 38, + "col": 41 + }, + { + "row": 52, + "col": 27 + }, + { + "row": 58, + "col": 38 + }, + { + "row": 48, + "col": 6 + }, + { + "row": 46, + "col": 42 + }, + { + "row": 42, + "col": 35 + }, + { + "row": 54, + "col": 53 + }, + { + "row": 19, + "col": 16 + }, + { + "row": 24, + "col": 49 + }, + { + "row": 46, + "col": 22 + }, + { + "row": 50, + "col": 56 + }, + { + "row": 25, + "col": 42 + }, + { + "row": 63, + "col": 32 + }, + { + "row": 34, + "col": 39 + }, + { + "row": 23, + "col": 31 + }, + { + "row": 45, + "col": 45 + }, + { + "row": 28, + "col": 70 + }, + { + "row": 53, + "col": 54 + }, + { + "row": 39, + "col": 32 + }, + { + "row": 10, + "col": 42 + }, + { + "row": 27, + "col": 21 + }, + { + "row": 28, + "col": 41 + }, + { + "row": 21, + "col": 31 + }, + { + "row": 23, + "col": 22 + }, + { + "row": 19, + "col": 40 + }, + { + "row": 16, + "col": 50 + }, + { + "row": 55, + "col": 39 + }, + { + "row": 34, + "col": 36 + }, + { + "row": 33, + "col": 37 + }, + { + "row": 42, + "col": 68 + }, + { + "row": 60, + "col": 40 + }, + { + "row": 47, + "col": 47 + }, + { + "row": 34, + "col": 37 + }, + { + "row": 43, + "col": 30 + }, + { + "row": 8, + "col": 45 + }, + { + "row": 42, + "col": 37 + }, + { + "row": 31, + "col": 22 + }, + { + "row": 31, + "col": 31 + }, + { + "row": 38, + "col": 35 + }, + { + "row": 36, + "col": 20 + }, + { + "row": 64, + "col": 33 + }, + { + "row": 36, + "col": 52 + }, + { + "row": 34, + "col": 60 + }, + { + "row": 59, + "col": 31 + }, + { + "row": 13, + "col": 28 + }, + { + "row": 48, + "col": 53 + }, + { + "row": 40, + "col": 29 + }, + { + "row": 44, + "col": 37 + }, + { + "row": 35, + "col": 12 + }, + { + "row": 8, + "col": 34 + }, + { + "row": 40, + "col": 63 + }, + { + "row": 59, + "col": 60 + }, + { + "row": 58, + "col": 58 + }, + { + "row": 26, + "col": 65 + }, + { + "row": 38, + "col": 63 + }, + { + "row": 44, + "col": 17 + }, + { + "row": 21, + "col": 14 + }, + { + "row": 49, + "col": 66 + }, + { + "row": 36, + "col": 13 + }, + { + "row": 14, + "col": 29 + }, + { + "row": 29, + "col": 68 + }, + { + "row": 54, + "col": 19 + }, + { + "row": 5, + "col": 41 + }, + { + "row": 7, + "col": 35 + }, + { + "row": 63, + "col": 42 + }, + { + "row": 38, + "col": 13 + }, + { + "row": 30, + "col": 56 + }, + { + "row": 28, + "col": 42 + }, + { + "row": 59, + "col": 37 + }, + { + "row": 38, + "col": 43 + }, + { + "row": 47, + "col": 6 + }, + { + "row": 42, + "col": 65 + }, + { + "row": 40, + "col": 28 + }, + { + "row": 30, + "col": 63 + }, + { + "row": 12, + "col": 43 + }, + { + "row": 35, + "col": 51 + }, + { + "row": 34, + "col": 41 + }, + { + "row": 31, + "col": 65 + }, + { + "row": 45, + "col": 11 + }, + { + "row": 31, + "col": 32 + }, + { + "row": 18, + "col": 53 + }, + { + "row": 47, + "col": 8 + }, + { + "row": 41, + "col": 37 + }, + { + "row": 45, + "col": 13 + }, + { + "row": 15, + "col": 14 + }, + { + "row": 28, + "col": 52 + }, + { + "row": 42, + "col": 40 + }, + { + "row": 66, + "col": 49 + }, + { + "row": 47, + "col": 58 + }, + { + "row": 16, + "col": 36 + }, + { + "row": 20, + "col": 19 + }, + { + "row": 48, + "col": 20 + }, + { + "row": 34, + "col": 8 + }, + { + "row": 10, + "col": 27 + }, + { + "row": 26, + "col": 9 + }, + { + "row": 34, + "col": 31 + }, + { + "row": 42, + "col": 31 + }, + { + "row": 43, + "col": 39 + }, + { + "row": 38, + "col": 42 + }, + { + "row": 59, + "col": 49 + } + ], + "cores": [ + { + "position": { + "row": 43, + "col": 38 + }, + "owner": 0 + }, + { + "position": { + "row": 40, + "col": 42 + }, + "owner": 1 + }, + { + "position": { + "row": 36, + "col": 42 + }, + "owner": 2 + }, + { + "position": { + "row": 33, + "col": 38 + }, + "owner": 3 + }, + { + "position": { + "row": 36, + "col": 34 + }, + "owner": 4 + }, + { + "position": { + "row": 40, + "col": 34 + }, + "owner": 5 + } + ], + "energy_nodes": [ + { + "row": 39, + "col": 39 + }, + { + "row": 38, + "col": 40 + }, + { + "row": 36, + "col": 38 + }, + { + "row": 37, + "col": 37 + }, + { + "row": 38, + "col": 36 + }, + { + "row": 40, + "col": 38 + }, + { + "row": 47, + "col": 42 + }, + { + "row": 38, + "col": 48 + }, + { + "row": 30, + "col": 43 + }, + { + "row": 29, + "col": 34 + }, + { + "row": 38, + "col": 28 + }, + { + "row": 46, + "col": 33 + }, + { + "row": 51, + "col": 41 + }, + { + "row": 41, + "col": 51 + }, + { + "row": 29, + "col": 47 + }, + { + "row": 25, + "col": 35 + }, + { + "row": 35, + "col": 25 + }, + { + "row": 47, + "col": 29 + }, + { + "row": 46, + "col": 43 + }, + { + "row": 38, + "col": 48 + }, + { + "row": 29, + "col": 42 + }, + { + "row": 30, + "col": 33 + }, + { + "row": 38, + "col": 28 + }, + { + "row": 47, + "col": 34 + }, + { + "row": 51, + "col": 46 + }, + { + "row": 38, + "col": 53 + }, + { + "row": 24, + "col": 45 + }, + { + "row": 25, + "col": 30 + }, + { + "row": 38, + "col": 23 + }, + { + "row": 52, + "col": 31 + }, + { + "row": 52, + "col": 47 + }, + { + "row": 37, + "col": 55 + }, + { + "row": 23, + "col": 45 + }, + { + "row": 24, + "col": 29 + }, + { + "row": 39, + "col": 21 + }, + { + "row": 53, + "col": 31 + } + ] + }, + "turns": [ + { + "turn": 0, + "bots": [ + { + "id": 0, + "owner": 0, + "position": { + "row": 43, + "col": 38 + }, + "alive": true + }, + { + "id": 1, + "owner": 1, + "position": { + "row": 40, + "col": 42 + }, + "alive": true + }, + { + "id": 2, + "owner": 2, + "position": { + "row": 36, + "col": 42 + }, + "alive": true + }, + { + "id": 3, + "owner": 3, + "position": { + "row": 33, + "col": 38 + }, + "alive": true + }, + { + "id": 4, + "owner": 4, + "position": { + "row": 36, + "col": 34 + }, + "alive": true + }, + { + "id": 5, + "owner": 5, + "position": { + "row": 40, + "col": 34 + }, + "alive": true + } + ], + "cores": [ + { + "position": { + "row": 43, + "col": 38 + }, + "owner": 0, + "active": true + }, + { + "position": { + "row": 40, + "col": 42 + }, + "owner": 1, + "active": true + }, + { + "position": { + "row": 36, + "col": 42 + }, + "owner": 2, + "active": true + }, + { + "position": { + "row": 33, + "col": 38 + }, + "owner": 3, + "active": true + }, + { + "position": { + "row": 36, + "col": 34 + }, + "owner": 4, + "active": true + }, + { + "position": { + "row": 40, + "col": 34 + }, + "owner": 5, + "active": true + } + ], + "energy": [ + { + "row": 38, + "col": 40 + }, + { + "row": 47, + "col": 42 + }, + { + "row": 30, + "col": 43 + }, + { + "row": 46, + "col": 33 + }, + { + "row": 51, + "col": 41 + }, + { + "row": 41, + "col": 51 + }, + { + "row": 29, + "col": 47 + }, + { + "row": 46, + "col": 43 + }, + { + "row": 30, + "col": 33 + }, + { + "row": 24, + "col": 45 + }, + { + "row": 38, + "col": 23 + }, + { + "row": 39, + "col": 21 + }, + { + "row": 53, + "col": 31 + } + ], + "scores": [ + 1, + 1, + 1, + 1, + 1, + 1 + ], + "energy_held": [ + 0, + 0, + 0, + 0, + 0, + 0 + ], + "events": [ + { + "type": "bot_spawned", + "turn": 0, + "details": { + "bot_id": 0, + "owner": 0, + "pos": { + "row": 43, + "col": 38 + } + } + }, + { + "type": "bot_spawned", + "turn": 0, + "details": { + "bot_id": 1, + "owner": 1, + "pos": { + "row": 40, + "col": 42 + } + } + }, + { + "type": "bot_spawned", + "turn": 0, + "details": { + "bot_id": 2, + "owner": 2, + "pos": { + "row": 36, + "col": 42 + } + } + }, + { + "type": "bot_spawned", + "turn": 0, + "details": { + "bot_id": 3, + "owner": 3, + "pos": { + "row": 33, + "col": 38 + } + } + }, + { + "type": "bot_spawned", + "turn": 0, + "details": { + "bot_id": 4, + "owner": 4, + "pos": { + "row": 36, + "col": 34 + } + } + }, + { + "type": "bot_spawned", + "turn": 0, + "details": { + "bot_id": 5, + "owner": 5, + "pos": { + "row": 40, + "col": 34 + } + } + } + ], + "zone_bounds": { + "center": { + "row": 38, + "col": 38 + }, + "radius": 38, + "active": false + } + }, + { + "turn": 1, + "bots": [ + { + "id": 0, + "owner": 0, + "position": { + "row": 42, + "col": 38 + }, + "alive": true + }, + { + "id": 1, + "owner": 1, + "position": { + "row": 39, + "col": 42 + }, + "alive": false + }, + { + "id": 2, + "owner": 2, + "position": { + "row": 37, + "col": 42 + }, + "alive": false + }, + { + "id": 3, + "owner": 3, + "position": { + "row": 33, + "col": 39 + }, + "alive": true + }, + { + "id": 4, + "owner": 4, + "position": { + "row": 37, + "col": 34 + }, + "alive": true + }, + { + "id": 5, + "owner": 5, + "position": { + "row": 41, + "col": 34 + }, + "alive": true + } + ], + "cores": [ + { + "position": { + "row": 43, + "col": 38 + }, + "owner": 0, + "active": true + }, + { + "position": { + "row": 40, + "col": 42 + }, + "owner": 1, + "active": true + }, + { + "position": { + "row": 36, + "col": 42 + }, + "owner": 2, + "active": true + }, + { + "position": { + "row": 33, + "col": 38 + }, + "owner": 3, + "active": true + }, + { + "position": { + "row": 36, + "col": 34 + }, + "owner": 4, + "active": true + }, + { + "position": { + "row": 40, + "col": 34 + }, + "owner": 5, + "active": true + } + ], + "energy": [ + { + "row": 38, + "col": 40 + }, + { + "row": 47, + "col": 42 + }, + { + "row": 30, + "col": 43 + }, + { + "row": 46, + "col": 33 + }, + { + "row": 51, + "col": 41 + }, + { + "row": 41, + "col": 51 + }, + { + "row": 29, + "col": 47 + }, + { + "row": 46, + "col": 43 + }, + { + "row": 30, + "col": 33 + }, + { + "row": 24, + "col": 45 + }, + { + "row": 38, + "col": 23 + }, + { + "row": 39, + "col": 21 + }, + { + "row": 53, + "col": 31 + } + ], + "scores": [ + 1, + 2, + 2, + 1, + 1, + 1 + ], + "energy_held": [ + 0, + 0, + 0, + 0, + 0, + 0 + ], + "events": [ + { + "type": "combat_death", + "turn": 1, + "details": { + "bot_id": 1, + "killers": [ + { + "bot_id": 2, + "owner": 2, + "position": { + "row": 37, + "col": 42 + } + } + ], + "owner": 1, + "position": { + "row": 39, + "col": 42 + } + } + }, + { + "type": "combat_death", + "turn": 1, + "details": { + "bot_id": 2, + "killers": [ + { + "bot_id": 1, + "owner": 1, + "position": { + "row": 39, + "col": 42 + } + } + ], + "owner": 2, + "position": { + "row": 37, + "col": 42 + } + } + } + ], + "zone_bounds": { + "center": { + "row": 38, + "col": 38 + }, + "radius": 38, + "active": false + } + }, + { + "turn": 2, + "bots": [ + { + "id": 0, + "owner": 0, + "position": { + "row": 41, + "col": 38 + }, + "alive": true + }, + { + "id": 1, + "owner": 1, + "position": { + "row": 39, + "col": 42 + }, + "alive": false + }, + { + "id": 2, + "owner": 2, + "position": { + "row": 37, + "col": 42 + }, + "alive": false + }, + { + "id": 3, + "owner": 3, + "position": { + "row": 33, + "col": 38 + }, + "alive": true + }, + { + "id": 4, + "owner": 4, + "position": { + "row": 37, + "col": 35 + }, + "alive": true + }, + { + "id": 5, + "owner": 5, + "position": { + "row": 42, + "col": 34 + }, + "alive": true + } + ], + "cores": [ + { + "position": { + "row": 43, + "col": 38 + }, + "owner": 0, + "active": true + }, + { + "position": { + "row": 40, + "col": 42 + }, + "owner": 1, + "active": true + }, + { + "position": { + "row": 36, + "col": 42 + }, + "owner": 2, + "active": true + }, + { + "position": { + "row": 33, + "col": 38 + }, + "owner": 3, + "active": true + }, + { + "position": { + "row": 36, + "col": 34 + }, + "owner": 4, + "active": true + }, + { + "position": { + "row": 40, + "col": 34 + }, + "owner": 5, + "active": true + } + ], + "energy": [ + { + "row": 38, + "col": 40 + }, + { + "row": 47, + "col": 42 + }, + { + "row": 30, + "col": 43 + }, + { + "row": 46, + "col": 33 + }, + { + "row": 51, + "col": 41 + }, + { + "row": 41, + "col": 51 + }, + { + "row": 29, + "col": 47 + }, + { + "row": 46, + "col": 43 + }, + { + "row": 30, + "col": 33 + }, + { + "row": 24, + "col": 45 + }, + { + "row": 38, + "col": 23 + }, + { + "row": 39, + "col": 21 + }, + { + "row": 53, + "col": 31 + } + ], + "scores": [ + 1, + 2, + 2, + 1, + 1, + 1 + ], + "energy_held": [ + 0, + 0, + 0, + 0, + 0, + 0 + ], + "events": [], + "zone_bounds": { + "center": { + "row": 38, + "col": 38 + }, + "radius": 38, + "active": false + } + }, + { + "turn": 3, + "bots": [ + { + "id": 0, + "owner": 0, + "position": { + "row": 40, + "col": 38 + }, + "alive": true + }, + { + "id": 1, + "owner": 1, + "position": { + "row": 39, + "col": 42 + }, + "alive": false + }, + { + "id": 2, + "owner": 2, + "position": { + "row": 37, + "col": 42 + }, + "alive": false + }, + { + "id": 3, + "owner": 3, + "position": { + "row": 34, + "col": 38 + }, + "alive": true + }, + { + "id": 4, + "owner": 4, + "position": { + "row": 37, + "col": 36 + }, + "alive": true + }, + { + "id": 5, + "owner": 5, + "position": { + "row": 43, + "col": 34 + }, + "alive": true + } + ], + "cores": [ + { + "position": { + "row": 43, + "col": 38 + }, + "owner": 0, + "active": true + }, + { + "position": { + "row": 40, + "col": 42 + }, + "owner": 1, + "active": true + }, + { + "position": { + "row": 36, + "col": 42 + }, + "owner": 2, + "active": true + }, + { + "position": { + "row": 33, + "col": 38 + }, + "owner": 3, + "active": true + }, + { + "position": { + "row": 36, + "col": 34 + }, + "owner": 4, + "active": true + }, + { + "position": { + "row": 40, + "col": 34 + }, + "owner": 5, + "active": true + } + ], + "energy": [ + { + "row": 38, + "col": 40 + }, + { + "row": 47, + "col": 42 + }, + { + "row": 30, + "col": 43 + }, + { + "row": 46, + "col": 33 + }, + { + "row": 51, + "col": 41 + }, + { + "row": 41, + "col": 51 + }, + { + "row": 29, + "col": 47 + }, + { + "row": 46, + "col": 43 + }, + { + "row": 30, + "col": 33 + }, + { + "row": 24, + "col": 45 + }, + { + "row": 38, + "col": 23 + }, + { + "row": 39, + "col": 21 + }, + { + "row": 53, + "col": 31 + } + ], + "scores": [ + 1, + 2, + 2, + 1, + 1, + 1 + ], + "energy_held": [ + 0, + 0, + 0, + 0, + 0, + 0 + ], + "events": [], + "zone_bounds": { + "center": { + "row": 38, + "col": 38 + }, + "radius": 38, + "active": false + } + }, + { + "turn": 4, + "bots": [ + { + "id": 0, + "owner": 0, + "position": { + "row": 40, + "col": 39 + }, + "alive": true + }, + { + "id": 1, + "owner": 1, + "position": { + "row": 39, + "col": 42 + }, + "alive": false + }, + { + "id": 2, + "owner": 2, + "position": { + "row": 37, + "col": 42 + }, + "alive": false + }, + { + "id": 3, + "owner": 3, + "position": { + "row": 35, + "col": 38 + }, + "alive": true + }, + { + "id": 4, + "owner": 4, + "position": { + "row": 38, + "col": 36 + }, + "alive": true + }, + { + "id": 5, + "owner": 5, + "position": { + "row": 44, + "col": 34 + }, + "alive": true + } + ], + "cores": [ + { + "position": { + "row": 43, + "col": 38 + }, + "owner": 0, + "active": true + }, + { + "position": { + "row": 40, + "col": 42 + }, + "owner": 1, + "active": true + }, + { + "position": { + "row": 36, + "col": 42 + }, + "owner": 2, + "active": true + }, + { + "position": { + "row": 33, + "col": 38 + }, + "owner": 3, + "active": true + }, + { + "position": { + "row": 36, + "col": 34 + }, + "owner": 4, + "active": true + }, + { + "position": { + "row": 40, + "col": 34 + }, + "owner": 5, + "active": true + } + ], + "energy": [ + { + "row": 38, + "col": 40 + }, + { + "row": 47, + "col": 42 + }, + { + "row": 30, + "col": 43 + }, + { + "row": 46, + "col": 33 + }, + { + "row": 51, + "col": 41 + }, + { + "row": 41, + "col": 51 + }, + { + "row": 29, + "col": 47 + }, + { + "row": 46, + "col": 43 + }, + { + "row": 30, + "col": 33 + }, + { + "row": 24, + "col": 45 + }, + { + "row": 38, + "col": 23 + }, + { + "row": 39, + "col": 21 + }, + { + "row": 53, + "col": 31 + } + ], + "scores": [ + 1, + 2, + 2, + 1, + 1, + 1 + ], + "energy_held": [ + 0, + 0, + 0, + 0, + 0, + 0 + ], + "events": [], + "zone_bounds": { + "center": { + "row": 38, + "col": 38 + }, + "radius": 38, + "active": false + } + }, + { + "turn": 5, + "bots": [ + { + "id": 0, + "owner": 0, + "position": { + "row": 40, + "col": 40 + }, + "alive": true + }, + { + "id": 1, + "owner": 1, + "position": { + "row": 39, + "col": 42 + }, + "alive": false + }, + { + "id": 2, + "owner": 2, + "position": { + "row": 37, + "col": 42 + }, + "alive": false + }, + { + "id": 3, + "owner": 3, + "position": { + "row": 36, + "col": 38 + }, + "alive": false + }, + { + "id": 4, + "owner": 4, + "position": { + "row": 38, + "col": 37 + }, + "alive": false + }, + { + "id": 5, + "owner": 5, + "position": { + "row": 45, + "col": 34 + }, + "alive": true + } + ], + "cores": [ + { + "position": { + "row": 43, + "col": 38 + }, + "owner": 0, + "active": true + }, + { + "position": { + "row": 40, + "col": 42 + }, + "owner": 1, + "active": true + }, + { + "position": { + "row": 36, + "col": 42 + }, + "owner": 2, + "active": true + }, + { + "position": { + "row": 33, + "col": 38 + }, + "owner": 3, + "active": true + }, + { + "position": { + "row": 36, + "col": 34 + }, + "owner": 4, + "active": true + }, + { + "position": { + "row": 40, + "col": 34 + }, + "owner": 5, + "active": true + } + ], + "energy": [ + { + "row": 38, + "col": 40 + }, + { + "row": 47, + "col": 42 + }, + { + "row": 30, + "col": 43 + }, + { + "row": 51, + "col": 41 + }, + { + "row": 41, + "col": 51 + }, + { + "row": 29, + "col": 47 + }, + { + "row": 46, + "col": 43 + }, + { + "row": 30, + "col": 33 + }, + { + "row": 24, + "col": 45 + }, + { + "row": 38, + "col": 23 + }, + { + "row": 39, + "col": 21 + }, + { + "row": 53, + "col": 31 + } + ], + "scores": [ + 1, + 2, + 2, + 2, + 2, + 1 + ], + "energy_held": [ + 0, + 0, + 0, + 0, + 0, + 1 + ], + "events": [ + { + "type": "combat_death", + "turn": 5, + "details": { + "bot_id": 3, + "killers": [ + { + "bot_id": 4, + "owner": 4, + "position": { + "row": 38, + "col": 37 + } + } + ], + "owner": 3, + "position": { + "row": 36, + "col": 38 + } + } + }, + { + "type": "combat_death", + "turn": 5, + "details": { + "bot_id": 4, + "killers": [ + { + "bot_id": 3, + "owner": 3, + "position": { + "row": 36, + "col": 38 + } + } + ], + "owner": 4, + "position": { + "row": 38, + "col": 37 + } + } + }, + { + "type": "energy_collected", + "turn": 5, + "details": { + "player": 5, + "pos": { + "row": 46, + "col": 33 + } + } + } + ], + "zone_bounds": { + "center": { + "row": 38, + "col": 38 + }, + "radius": 38, + "active": false + } + }, + { + "turn": 6, + "bots": [ + { + "id": 0, + "owner": 0, + "position": { + "row": 39, + "col": 40 + }, + "alive": true + }, + { + "id": 1, + "owner": 1, + "position": { + "row": 39, + "col": 42 + }, + "alive": false + }, + { + "id": 2, + "owner": 2, + "position": { + "row": 37, + "col": 42 + }, + "alive": false + }, + { + "id": 3, + "owner": 3, + "position": { + "row": 36, + "col": 38 + }, + "alive": false + }, + { + "id": 4, + "owner": 4, + "position": { + "row": 38, + "col": 37 + }, + "alive": false + }, + { + "id": 5, + "owner": 5, + "position": { + "row": 44, + "col": 34 + }, + "alive": true + } + ], + "cores": [ + { + "position": { + "row": 43, + "col": 38 + }, + "owner": 0, + "active": true + }, + { + "position": { + "row": 40, + "col": 42 + }, + "owner": 1, + "active": true + }, + { + "position": { + "row": 36, + "col": 42 + }, + "owner": 2, + "active": true + }, + { + "position": { + "row": 33, + "col": 38 + }, + "owner": 3, + "active": true + }, + { + "position": { + "row": 36, + "col": 34 + }, + "owner": 4, + "active": true + }, + { + "position": { + "row": 40, + "col": 34 + }, + "owner": 5, + "active": true + } + ], + "energy": [ + { + "row": 47, + "col": 42 + }, + { + "row": 30, + "col": 43 + }, + { + "row": 51, + "col": 41 + }, + { + "row": 41, + "col": 51 + }, + { + "row": 29, + "col": 47 + }, + { + "row": 46, + "col": 43 + }, + { + "row": 30, + "col": 33 + }, + { + "row": 24, + "col": 45 + }, + { + "row": 38, + "col": 23 + }, + { + "row": 39, + "col": 21 + }, + { + "row": 53, + "col": 31 + } + ], + "scores": [ + 1, + 2, + 2, + 2, + 2, + 1 + ], + "energy_held": [ + 1, + 0, + 0, + 0, + 0, + 1 + ], + "events": [ + { + "type": "energy_collected", + "turn": 6, + "details": { + "player": 0, + "pos": { + "row": 38, + "col": 40 + } + } + } + ], + "zone_bounds": { + "center": { + "row": 38, + "col": 38 + }, + "radius": 38, + "active": false + } + }, + { + "turn": 7, + "bots": [ + { + "id": 0, + "owner": 0, + "position": { + "row": 39, + "col": 39 + }, + "alive": true + }, + { + "id": 1, + "owner": 1, + "position": { + "row": 39, + "col": 42 + }, + "alive": false + }, + { + "id": 2, + "owner": 2, + "position": { + "row": 37, + "col": 42 + }, + "alive": false + }, + { + "id": 3, + "owner": 3, + "position": { + "row": 36, + "col": 38 + }, + "alive": false + }, + { + "id": 4, + "owner": 4, + "position": { + "row": 38, + "col": 37 + }, + "alive": false + }, + { + "id": 5, + "owner": 5, + "position": { + "row": 43, + "col": 34 + }, + "alive": true + } + ], + "cores": [ + { + "position": { + "row": 43, + "col": 38 + }, + "owner": 0, + "active": true + }, + { + "position": { + "row": 40, + "col": 42 + }, + "owner": 1, + "active": true + }, + { + "position": { + "row": 36, + "col": 42 + }, + "owner": 2, + "active": true + }, + { + "position": { + "row": 33, + "col": 38 + }, + "owner": 3, + "active": true + }, + { + "position": { + "row": 36, + "col": 34 + }, + "owner": 4, + "active": true + }, + { + "position": { + "row": 40, + "col": 34 + }, + "owner": 5, + "active": true + } + ], + "energy": [ + { + "row": 47, + "col": 42 + }, + { + "row": 30, + "col": 43 + }, + { + "row": 51, + "col": 41 + }, + { + "row": 41, + "col": 51 + }, + { + "row": 29, + "col": 47 + }, + { + "row": 46, + "col": 43 + }, + { + "row": 30, + "col": 33 + }, + { + "row": 24, + "col": 45 + }, + { + "row": 38, + "col": 23 + }, + { + "row": 39, + "col": 21 + }, + { + "row": 53, + "col": 31 + } + ], + "scores": [ + 1, + 2, + 2, + 2, + 2, + 1 + ], + "energy_held": [ + 1, + 0, + 0, + 0, + 0, + 1 + ], + "events": [], + "zone_bounds": { + "center": { + "row": 38, + "col": 38 + }, + "radius": 38, + "active": false + } + }, + { + "turn": 8, + "bots": [ + { + "id": 0, + "owner": 0, + "position": { + "row": 39, + "col": 38 + }, + "alive": true + }, + { + "id": 1, + "owner": 1, + "position": { + "row": 39, + "col": 42 + }, + "alive": false + }, + { + "id": 2, + "owner": 2, + "position": { + "row": 37, + "col": 42 + }, + "alive": false + }, + { + "id": 3, + "owner": 3, + "position": { + "row": 36, + "col": 38 + }, + "alive": false + }, + { + "id": 4, + "owner": 4, + "position": { + "row": 38, + "col": 37 + }, + "alive": false + }, + { + "id": 5, + "owner": 5, + "position": { + "row": 42, + "col": 34 + }, + "alive": true + } + ], + "cores": [ + { + "position": { + "row": 43, + "col": 38 + }, + "owner": 0, + "active": true + }, + { + "position": { + "row": 40, + "col": 42 + }, + "owner": 1, + "active": true + }, + { + "position": { + "row": 36, + "col": 42 + }, + "owner": 2, + "active": true + }, + { + "position": { + "row": 33, + "col": 38 + }, + "owner": 3, + "active": true + }, + { + "position": { + "row": 36, + "col": 34 + }, + "owner": 4, + "active": true + }, + { + "position": { + "row": 40, + "col": 34 + }, + "owner": 5, + "active": true + } + ], + "energy": [ + { + "row": 47, + "col": 42 + }, + { + "row": 30, + "col": 43 + }, + { + "row": 51, + "col": 41 + }, + { + "row": 41, + "col": 51 + }, + { + "row": 29, + "col": 47 + }, + { + "row": 46, + "col": 43 + }, + { + "row": 30, + "col": 33 + }, + { + "row": 24, + "col": 45 + }, + { + "row": 38, + "col": 23 + }, + { + "row": 39, + "col": 21 + }, + { + "row": 53, + "col": 31 + } + ], + "scores": [ + 1, + 2, + 2, + 2, + 2, + 1 + ], + "energy_held": [ + 1, + 0, + 0, + 0, + 0, + 1 + ], + "events": [], + "zone_bounds": { + "center": { + "row": 38, + "col": 38 + }, + "radius": 38, + "active": false + } + }, + { + "turn": 9, + "bots": [ + { + "id": 0, + "owner": 0, + "position": { + "row": 38, + "col": 38 + }, + "alive": true + }, + { + "id": 1, + "owner": 1, + "position": { + "row": 39, + "col": 42 + }, + "alive": false + }, + { + "id": 2, + "owner": 2, + "position": { + "row": 37, + "col": 42 + }, + "alive": false + }, + { + "id": 3, + "owner": 3, + "position": { + "row": 36, + "col": 38 + }, + "alive": false + }, + { + "id": 4, + "owner": 4, + "position": { + "row": 38, + "col": 37 + }, + "alive": false + }, + { + "id": 5, + "owner": 5, + "position": { + "row": 41, + "col": 34 + }, + "alive": true + } + ], + "cores": [ + { + "position": { + "row": 43, + "col": 38 + }, + "owner": 0, + "active": true + }, + { + "position": { + "row": 40, + "col": 42 + }, + "owner": 1, + "active": true + }, + { + "position": { + "row": 36, + "col": 42 + }, + "owner": 2, + "active": true + }, + { + "position": { + "row": 33, + "col": 38 + }, + "owner": 3, + "active": true + }, + { + "position": { + "row": 36, + "col": 34 + }, + "owner": 4, + "active": true + }, + { + "position": { + "row": 40, + "col": 34 + }, + "owner": 5, + "active": true + } + ], + "energy": [ + { + "row": 47, + "col": 42 + }, + { + "row": 30, + "col": 43 + }, + { + "row": 51, + "col": 41 + }, + { + "row": 41, + "col": 51 + }, + { + "row": 29, + "col": 47 + }, + { + "row": 46, + "col": 43 + }, + { + "row": 30, + "col": 33 + }, + { + "row": 24, + "col": 45 + }, + { + "row": 38, + "col": 23 + }, + { + "row": 39, + "col": 21 + }, + { + "row": 53, + "col": 31 + } + ], + "scores": [ + 1, + 2, + 2, + 2, + 2, + 1 + ], + "energy_held": [ + 1, + 0, + 0, + 0, + 0, + 1 + ], + "events": [], + "zone_bounds": { + "center": { + "row": 38, + "col": 38 + }, + "radius": 38, + "active": false + } + }, + { + "turn": 10, + "bots": [ + { + "id": 0, + "owner": 0, + "position": { + "row": 39, + "col": 38 + }, + "alive": true + }, + { + "id": 1, + "owner": 1, + "position": { + "row": 39, + "col": 42 + }, + "alive": false + }, + { + "id": 2, + "owner": 2, + "position": { + "row": 37, + "col": 42 + }, + "alive": false + }, + { + "id": 3, + "owner": 3, + "position": { + "row": 36, + "col": 38 + }, + "alive": false + }, + { + "id": 4, + "owner": 4, + "position": { + "row": 38, + "col": 37 + }, + "alive": false + }, + { + "id": 5, + "owner": 5, + "position": { + "row": 42, + "col": 34 + }, + "alive": true + } + ], + "cores": [ + { + "position": { + "row": 43, + "col": 38 + }, + "owner": 0, + "active": true + }, + { + "position": { + "row": 40, + "col": 42 + }, + "owner": 1, + "active": true + }, + { + "position": { + "row": 36, + "col": 42 + }, + "owner": 2, + "active": true + }, + { + "position": { + "row": 33, + "col": 38 + }, + "owner": 3, + "active": true + }, + { + "position": { + "row": 36, + "col": 34 + }, + "owner": 4, + "active": true + }, + { + "position": { + "row": 40, + "col": 34 + }, + "owner": 5, + "active": true + } + ], + "energy": [ + { + "row": 39, + "col": 39 + }, + { + "row": 36, + "col": 38 + }, + { + "row": 37, + "col": 37 + }, + { + "row": 38, + "col": 36 + }, + { + "row": 40, + "col": 38 + }, + { + "row": 47, + "col": 42 + }, + { + "row": 38, + "col": 48 + }, + { + "row": 30, + "col": 43 + }, + { + "row": 29, + "col": 34 + }, + { + "row": 38, + "col": 28 + }, + { + "row": 51, + "col": 41 + }, + { + "row": 41, + "col": 51 + }, + { + "row": 29, + "col": 47 + }, + { + "row": 25, + "col": 35 + }, + { + "row": 35, + "col": 25 + }, + { + "row": 47, + "col": 29 + }, + { + "row": 46, + "col": 43 + }, + { + "row": 38, + "col": 48 + }, + { + "row": 29, + "col": 42 + }, + { + "row": 30, + "col": 33 + }, + { + "row": 38, + "col": 28 + }, + { + "row": 47, + "col": 34 + }, + { + "row": 51, + "col": 46 + }, + { + "row": 38, + "col": 53 + }, + { + "row": 24, + "col": 45 + }, + { + "row": 25, + "col": 30 + }, + { + "row": 38, + "col": 23 + }, + { + "row": 52, + "col": 31 + }, + { + "row": 52, + "col": 47 + }, + { + "row": 37, + "col": 55 + }, + { + "row": 23, + "col": 45 + }, + { + "row": 24, + "col": 29 + }, + { + "row": 39, + "col": 21 + }, + { + "row": 53, + "col": 31 + } + ], + "scores": [ + 1, + 2, + 2, + 2, + 2, + 1 + ], + "energy_held": [ + 1, + 0, + 0, + 0, + 0, + 1 + ], + "events": [], + "zone_bounds": { + "center": { + "row": 38, + "col": 38 + }, + "radius": 34, + "active": true + } + }, + { + "turn": 11, + "bots": [ + { + "id": 0, + "owner": 0, + "position": { + "row": 39, + "col": 39 + }, + "alive": true + }, + { + "id": 1, + "owner": 1, + "position": { + "row": 39, + "col": 42 + }, + "alive": false + }, + { + "id": 2, + "owner": 2, + "position": { + "row": 37, + "col": 42 + }, + "alive": false + }, + { + "id": 3, + "owner": 3, + "position": { + "row": 36, + "col": 38 + }, + "alive": false + }, + { + "id": 4, + "owner": 4, + "position": { + "row": 38, + "col": 37 + }, + "alive": false + }, + { + "id": 5, + "owner": 5, + "position": { + "row": 43, + "col": 34 + }, + "alive": true + }, + { + "id": 6, + "owner": 0, + "position": { + "row": 43, + "col": 38 + }, + "alive": true + } + ], + "cores": [ + { + "position": { + "row": 43, + "col": 38 + }, + "owner": 0, + "active": true + }, + { + "position": { + "row": 40, + "col": 42 + }, + "owner": 1, + "active": true + }, + { + "position": { + "row": 36, + "col": 42 + }, + "owner": 2, + "active": true + }, + { + "position": { + "row": 33, + "col": 38 + }, + "owner": 3, + "active": true + }, + { + "position": { + "row": 36, + "col": 34 + }, + "owner": 4, + "active": true + }, + { + "position": { + "row": 40, + "col": 34 + }, + "owner": 5, + "active": true + } + ], + "energy": [ + { + "row": 36, + "col": 38 + }, + { + "row": 37, + "col": 37 + }, + { + "row": 38, + "col": 36 + }, + { + "row": 47, + "col": 42 + }, + { + "row": 38, + "col": 48 + }, + { + "row": 30, + "col": 43 + }, + { + "row": 29, + "col": 34 + }, + { + "row": 38, + "col": 28 + }, + { + "row": 51, + "col": 41 + }, + { + "row": 41, + "col": 51 + }, + { + "row": 29, + "col": 47 + }, + { + "row": 25, + "col": 35 + }, + { + "row": 35, + "col": 25 + }, + { + "row": 47, + "col": 29 + }, + { + "row": 46, + "col": 43 + }, + { + "row": 38, + "col": 48 + }, + { + "row": 29, + "col": 42 + }, + { + "row": 30, + "col": 33 + }, + { + "row": 38, + "col": 28 + }, + { + "row": 47, + "col": 34 + }, + { + "row": 51, + "col": 46 + }, + { + "row": 38, + "col": 53 + }, + { + "row": 24, + "col": 45 + }, + { + "row": 25, + "col": 30 + }, + { + "row": 38, + "col": 23 + }, + { + "row": 52, + "col": 31 + }, + { + "row": 52, + "col": 47 + }, + { + "row": 37, + "col": 55 + }, + { + "row": 23, + "col": 45 + }, + { + "row": 24, + "col": 29 + }, + { + "row": 39, + "col": 21 + }, + { + "row": 53, + "col": 31 + } + ], + "scores": [ + 1, + 2, + 2, + 2, + 2, + 1 + ], + "energy_held": [ + 0, + 0, + 0, + 0, + 0, + 1 + ], + "events": [ + { + "type": "energy_collected", + "turn": 11, + "details": { + "player": 0, + "pos": { + "row": 39, + "col": 39 + } + } + }, + { + "type": "energy_collected", + "turn": 11, + "details": { + "player": 0, + "pos": { + "row": 40, + "col": 38 + } + } + }, + { + "type": "bot_spawned", + "turn": 11, + "details": { + "bot_id": 6, + "owner": 0, + "pos": { + "row": 43, + "col": 38 + } + } + } + ], + "zone_bounds": { + "center": { + "row": 38, + "col": 38 + }, + "radius": 33, + "active": true + } + }, + { + "turn": 12, + "bots": [ + { + "id": 0, + "owner": 0, + "position": { + "row": 38, + "col": 39 + }, + "alive": true + }, + { + "id": 1, + "owner": 1, + "position": { + "row": 39, + "col": 42 + }, + "alive": false + }, + { + "id": 2, + "owner": 2, + "position": { + "row": 37, + "col": 42 + }, + "alive": false + }, + { + "id": 3, + "owner": 3, + "position": { + "row": 36, + "col": 38 + }, + "alive": false + }, + { + "id": 4, + "owner": 4, + "position": { + "row": 38, + "col": 37 + }, + "alive": false + }, + { + "id": 5, + "owner": 5, + "position": { + "row": 43, + "col": 35 + }, + "alive": false + }, + { + "id": 6, + "owner": 0, + "position": { + "row": 42, + "col": 38 + }, + "alive": false + } + ], + "cores": [ + { + "position": { + "row": 43, + "col": 38 + }, + "owner": 0, + "active": true + }, + { + "position": { + "row": 40, + "col": 42 + }, + "owner": 1, + "active": true + }, + { + "position": { + "row": 36, + "col": 42 + }, + "owner": 2, + "active": true + }, + { + "position": { + "row": 33, + "col": 38 + }, + "owner": 3, + "active": true + }, + { + "position": { + "row": 36, + "col": 34 + }, + "owner": 4, + "active": true + }, + { + "position": { + "row": 40, + "col": 34 + }, + "owner": 5, + "active": true + } + ], + "energy": [ + { + "row": 36, + "col": 38 + }, + { + "row": 37, + "col": 37 + }, + { + "row": 38, + "col": 36 + }, + { + "row": 47, + "col": 42 + }, + { + "row": 38, + "col": 48 + }, + { + "row": 30, + "col": 43 + }, + { + "row": 29, + "col": 34 + }, + { + "row": 38, + "col": 28 + }, + { + "row": 51, + "col": 41 + }, + { + "row": 41, + "col": 51 + }, + { + "row": 29, + "col": 47 + }, + { + "row": 25, + "col": 35 + }, + { + "row": 35, + "col": 25 + }, + { + "row": 47, + "col": 29 + }, + { + "row": 46, + "col": 43 + }, + { + "row": 38, + "col": 48 + }, + { + "row": 29, + "col": 42 + }, + { + "row": 30, + "col": 33 + }, + { + "row": 38, + "col": 28 + }, + { + "row": 47, + "col": 34 + }, + { + "row": 51, + "col": 46 + }, + { + "row": 38, + "col": 53 + }, + { + "row": 24, + "col": 45 + }, + { + "row": 25, + "col": 30 + }, + { + "row": 38, + "col": 23 + }, + { + "row": 52, + "col": 31 + }, + { + "row": 52, + "col": 47 + }, + { + "row": 37, + "col": 55 + }, + { + "row": 23, + "col": 45 + }, + { + "row": 24, + "col": 29 + }, + { + "row": 39, + "col": 21 + }, + { + "row": 53, + "col": 31 + } + ], + "scores": [ + 12, + 2, + 2, + 2, + 2, + 2 + ], + "energy_held": [ + 0, + 0, + 0, + 0, + 0, + 1 + ], + "events": [ + { + "type": "combat_death", + "turn": 12, + "details": { + "bot_id": 5, + "killers": [ + { + "bot_id": 6, + "owner": 0, + "position": { + "row": 42, + "col": 38 + } + } + ], + "owner": 5, + "position": { + "row": 43, + "col": 35 + } + } + }, + { + "type": "combat_death", + "turn": 12, + "details": { + "bot_id": 6, + "killers": [ + { + "bot_id": 5, + "owner": 5, + "position": { + "row": 43, + "col": 35 + } + } + ], + "owner": 0, + "position": { + "row": 42, + "col": 38 + } + } + } + ], + "zone_bounds": { + "center": { + "row": 38, + "col": 38 + }, + "radius": 32, + "active": true + } + } + ], + "win_prob": [ + [ + 0.22, + 0.14, + 0.08, + 0.23, + 0.06, + 0.04 + ], + [ + 0.29, + 0.04, + 0, + 0.31, + 0.14, + 0.04 + ], + [ + 0.28, + 0, + 0, + 0.25, + 0.17, + 0.12 + ], + [ + 0.32, + 0.01, + 0, + 0.2, + 0, + 0.33 + ], + [ + 0.34, + 0, + 0, + 0.22, + 0, + 0.35 + ], + [ + 0.59, + 0, + 0, + 0, + 0, + 0.33 + ], + [ + 0.74, + 0, + 0, + 0, + 0, + 0.2 + ], + [ + 0.79, + 0, + 0, + 0, + 0, + 0.14 + ], + [ + 0.8, + 0, + 0, + 0, + 0, + 0.04 + ], + [ + 0.79, + 0, + 0, + 0, + 0, + 0.05 + ], + [ + 0.92, + 0, + 0, + 0, + 0, + 0.06 + ], + [ + 0.95, + 0, + 0, + 0, + 0, + 0.01 + ], + [ + 1, + 0, + 0, + 0, + 0, + 0 + ] + ], + "critical_moments": [ + { + "turn": 3, + "delta": -0.17, + "player": 4, + "description": "Player 4 win probability drops to 17%" + }, + { + "turn": 3, + "delta": 0.21, + "player": 5, + "description": "Player 5 win probability rises to 21%" + }, + { + "turn": 5, + "delta": 0.25, + "player": 0, + "description": "Player 0 win probability rises to 25%" + }, + { + "turn": 5, + "delta": -0.22, + "player": 3, + "description": "Player 3 win probability drops to 22%" + }, + { + "turn": 6, + "delta": 0.15, + "player": 0, + "description": "Player 0 win probability rises to 15%" + } + ], + "combat_deaths": [ + 1, + 1, + 1, + 1, + 1, + 1 + ] +} \ No newline at end of file diff --git a/test-replay-extended.json b/test-replay-extended.json new file mode 100644 index 0000000..fd4f907 --- /dev/null +++ b/test-replay-extended.json @@ -0,0 +1,1452 @@ +{ + "format_version": "1.0", + "match_id": "m_45z7iuhb", + "config": { + "rows": 54, + "cols": 54, + "max_turns": 100, + "vision_radius2": 49, + "attack_radius2": 12, + "spawn_cost": 3, + "energy_interval": 10, + "cores_per_player": 1, + "zone_enabled": true, + "zone_start_turn": 10, + "zone_shrink_interval": 1, + "zone_shrink_step": 1, + "zone_min_radius": 1, + "kill_score": 1 + }, + "start_time": "2026-06-27T16:48:07.259660489Z", + "end_time": "2026-06-27T16:48:07.334919743Z", + "result": { + "winner": 1, + "reason": "elimination", + "turns": 5, + "scores": [ + 2, + 5, + 2 + ], + "energy": [ + 1, + 0, + 1 + ], + "bots_alive": [ + 0, + 1, + 0 + ], + "crashed": [ + false, + false, + false + ], + "combat_deaths": [ + 1, + 0, + 1 + ] + }, + "players": [ + { + "id": 0, + "name": "swarm" + }, + { + "id": 1, + "name": "rusher" + }, + { + "id": 2, + "name": "gatherer" + } + ], + "map": { + "rows": 54, + "cols": 54, + "walls": [ + { + "row": 8, + "col": 38 + }, + { + "row": 34, + "col": 17 + }, + { + "row": 11, + "col": 42 + }, + { + "row": 22, + "col": 40 + }, + { + "row": 17, + "col": 9 + }, + { + "row": 39, + "col": 11 + }, + { + "row": 27, + "col": 33 + }, + { + "row": 26, + "col": 41 + }, + { + "row": 24, + "col": 34 + }, + { + "row": 22, + "col": 19 + }, + { + "row": 19, + "col": 30 + }, + { + "row": 23, + "col": 42 + }, + { + "row": 32, + "col": 23 + }, + { + "row": 48, + "col": 27 + }, + { + "row": 23, + "col": 40 + }, + { + "row": 41, + "col": 38 + }, + { + "row": 20, + "col": 28 + }, + { + "row": 32, + "col": 27 + }, + { + "row": 22, + "col": 22 + }, + { + "row": 17, + "col": 24 + }, + { + "row": 27, + "col": 36 + }, + { + "row": 27, + "col": 31 + }, + { + "row": 37, + "col": 20 + }, + { + "row": 27, + "col": 39 + }, + { + "row": 28, + "col": 47 + }, + { + "row": 30, + "col": 9 + }, + { + "row": 34, + "col": 23 + }, + { + "row": 44, + "col": 29 + }, + { + "row": 22, + "col": 25 + }, + { + "row": 31, + "col": 24 + }, + { + "row": 27, + "col": 18 + }, + { + "row": 30, + "col": 31 + }, + { + "row": 19, + "col": 36 + }, + { + "row": 16, + "col": 15 + }, + { + "row": 23, + "col": 15 + }, + { + "row": 17, + "col": 22 + }, + { + "row": 26, + "col": 20 + }, + { + "row": 34, + "col": 25 + }, + { + "row": 34, + "col": 24 + }, + { + "row": 26, + "col": 10 + }, + { + "row": 28, + "col": 32 + }, + { + "row": 41, + "col": 25 + }, + { + "row": 6, + "col": 24 + }, + { + "row": 22, + "col": 48 + }, + { + "row": 25, + "col": 23 + }, + { + "row": 23, + "col": 20 + }, + { + "row": 23, + "col": 23 + }, + { + "row": 29, + "col": 20 + }, + { + "row": 10, + "col": 41 + }, + { + "row": 24, + "col": 5 + }, + { + "row": 34, + "col": 32 + }, + { + "row": 15, + "col": 26 + }, + { + "row": 43, + "col": 16 + }, + { + "row": 10, + "col": 37 + }, + { + "row": 32, + "col": 32 + }, + { + "row": 12, + "col": 12 + }, + { + "row": 24, + "col": 26 + }, + { + "row": 35, + "col": 27 + }, + { + "row": 23, + "col": 37 + }, + { + "row": 34, + "col": 46 + }, + { + "row": 38, + "col": 32 + }, + { + "row": 32, + "col": 19 + }, + { + "row": 29, + "col": 37 + }, + { + "row": 27, + "col": 34 + }, + { + "row": 28, + "col": 23 + }, + { + "row": 34, + "col": 47 + }, + { + "row": 33, + "col": 29 + }, + { + "row": 42, + "col": 33 + }, + { + "row": 31, + "col": 35 + }, + { + "row": 44, + "col": 37 + }, + { + "row": 18, + "col": 16 + }, + { + "row": 20, + "col": 11 + }, + { + "row": 33, + "col": 25 + }, + { + "row": 16, + "col": 19 + }, + { + "row": 26, + "col": 34 + }, + { + "row": 9, + "col": 19 + }, + { + "row": 17, + "col": 45 + }, + { + "row": 10, + "col": 33 + }, + { + "row": 34, + "col": 20 + }, + { + "row": 25, + "col": 31 + }, + { + "row": 14, + "col": 37 + }, + { + "row": 38, + "col": 26 + }, + { + "row": 21, + "col": 25 + }, + { + "row": 22, + "col": 27 + }, + { + "row": 20, + "col": 7 + }, + { + "row": 48, + "col": 35 + }, + { + "row": 17, + "col": 33 + }, + { + "row": 46, + "col": 38 + }, + { + "row": 32, + "col": 38 + }, + { + "row": 25, + "col": 27 + }, + { + "row": 39, + "col": 22 + }, + { + "row": 30, + "col": 25 + }, + { + "row": 48, + "col": 33 + }, + { + "row": 18, + "col": 17 + }, + { + "row": 19, + "col": 23 + }, + { + "row": 27, + "col": 35 + }, + { + "row": 7, + "col": 24 + }, + { + "row": 33, + "col": 40 + }, + { + "row": 28, + "col": 39 + }, + { + "row": 22, + "col": 31 + }, + { + "row": 22, + "col": 6 + }, + { + "row": 16, + "col": 22 + }, + { + "row": 43, + "col": 24 + }, + { + "row": 28, + "col": 29 + }, + { + "row": 26, + "col": 30 + }, + { + "row": 30, + "col": 30 + }, + { + "row": 20, + "col": 23 + }, + { + "row": 35, + "col": 15 + }, + { + "row": 27, + "col": 5 + }, + { + "row": 48, + "col": 22 + }, + { + "row": 37, + "col": 21 + }, + { + "row": 37, + "col": 27 + }, + { + "row": 13, + "col": 44 + }, + { + "row": 17, + "col": 41 + }, + { + "row": 22, + "col": 24 + }, + { + "row": 40, + "col": 25 + }, + { + "row": 27, + "col": 7 + }, + { + "row": 13, + "col": 26 + }, + { + "row": 39, + "col": 29 + }, + { + "row": 8, + "col": 37 + }, + { + "row": 28, + "col": 25 + }, + { + "row": 26, + "col": 33 + }, + { + "row": 27, + "col": 15 + }, + { + "row": 41, + "col": 10 + }, + { + "row": 29, + "col": 22 + }, + { + "row": 23, + "col": 35 + }, + { + "row": 22, + "col": 26 + }, + { + "row": 48, + "col": 30 + } + ], + "cores": [ + { + "position": { + "row": 31, + "col": 27 + }, + "owner": 0 + }, + { + "position": { + "row": 25, + "col": 30 + }, + "owner": 1 + }, + { + "position": { + "row": 25, + "col": 24 + }, + "owner": 2 + } + ], + "energy_nodes": [ + { + "row": 29, + "col": 28 + }, + { + "row": 25, + "col": 28 + }, + { + "row": 27, + "col": 25 + }, + { + "row": 35, + "col": 29 + }, + { + "row": 21, + "col": 33 + }, + { + "row": 25, + "col": 19 + }, + { + "row": 32, + "col": 34 + }, + { + "row": 18, + "col": 27 + }, + { + "row": 31, + "col": 19 + }, + { + "row": 27, + "col": 37 + }, + { + "row": 18, + "col": 23 + }, + { + "row": 35, + "col": 22 + }, + { + "row": 22, + "col": 37 + }, + { + "row": 21, + "col": 18 + }, + { + "row": 38, + "col": 27 + }, + { + "row": 36, + "col": 35 + }, + { + "row": 16, + "col": 31 + }, + { + "row": 29, + "col": 15 + } + ] + }, + "turns": [ + { + "turn": 0, + "bots": [ + { + "id": 0, + "owner": 0, + "position": { + "row": 31, + "col": 27 + }, + "alive": true + }, + { + "id": 1, + "owner": 1, + "position": { + "row": 25, + "col": 30 + }, + "alive": true + }, + { + "id": 2, + "owner": 2, + "position": { + "row": 25, + "col": 24 + }, + "alive": true + } + ], + "cores": [ + { + "position": { + "row": 31, + "col": 27 + }, + "owner": 0, + "active": true + }, + { + "position": { + "row": 25, + "col": 30 + }, + "owner": 1, + "active": true + }, + { + "position": { + "row": 25, + "col": 24 + }, + "owner": 2, + "active": true + } + ], + "energy": [ + { + "row": 29, + "col": 28 + }, + { + "row": 27, + "col": 25 + }, + { + "row": 21, + "col": 33 + }, + { + "row": 32, + "col": 34 + }, + { + "row": 18, + "col": 27 + }, + { + "row": 35, + "col": 22 + }, + { + "row": 36, + "col": 35 + } + ], + "scores": [ + 1, + 1, + 1 + ], + "energy_held": [ + 0, + 0, + 0 + ], + "events": [ + { + "type": "bot_spawned", + "turn": 0, + "details": { + "bot_id": 0, + "owner": 0, + "pos": { + "row": 31, + "col": 27 + } + } + }, + { + "type": "bot_spawned", + "turn": 0, + "details": { + "bot_id": 1, + "owner": 1, + "pos": { + "row": 25, + "col": 30 + } + } + }, + { + "type": "bot_spawned", + "turn": 0, + "details": { + "bot_id": 2, + "owner": 2, + "pos": { + "row": 25, + "col": 24 + } + } + } + ], + "zone_bounds": { + "center": { + "row": 27, + "col": 27 + }, + "radius": 27, + "active": false + } + }, + { + "turn": 1, + "bots": [ + { + "id": 0, + "owner": 0, + "position": { + "row": 30, + "col": 27 + }, + "alive": true + }, + { + "id": 1, + "owner": 1, + "position": { + "row": 24, + "col": 30 + }, + "alive": true + }, + { + "id": 2, + "owner": 2, + "position": { + "row": 25, + "col": 25 + }, + "alive": true + } + ], + "cores": [ + { + "position": { + "row": 31, + "col": 27 + }, + "owner": 0, + "active": true + }, + { + "position": { + "row": 25, + "col": 30 + }, + "owner": 1, + "active": true + }, + { + "position": { + "row": 25, + "col": 24 + }, + "owner": 2, + "active": true + } + ], + "energy": [ + { + "row": 27, + "col": 25 + }, + { + "row": 21, + "col": 33 + }, + { + "row": 32, + "col": 34 + }, + { + "row": 18, + "col": 27 + }, + { + "row": 35, + "col": 22 + }, + { + "row": 36, + "col": 35 + } + ], + "scores": [ + 1, + 1, + 1 + ], + "energy_held": [ + 1, + 0, + 0 + ], + "events": [ + { + "type": "energy_collected", + "turn": 1, + "details": { + "player": 0, + "pos": { + "row": 29, + "col": 28 + } + } + } + ], + "zone_bounds": { + "center": { + "row": 27, + "col": 27 + }, + "radius": 27, + "active": false + } + }, + { + "turn": 2, + "bots": [ + { + "id": 0, + "owner": 0, + "position": { + "row": 29, + "col": 27 + }, + "alive": true + }, + { + "id": 1, + "owner": 1, + "position": { + "row": 23, + "col": 30 + }, + "alive": true + }, + { + "id": 2, + "owner": 2, + "position": { + "row": 26, + "col": 25 + }, + "alive": true + } + ], + "cores": [ + { + "position": { + "row": 31, + "col": 27 + }, + "owner": 0, + "active": true + }, + { + "position": { + "row": 25, + "col": 30 + }, + "owner": 1, + "active": true + }, + { + "position": { + "row": 25, + "col": 24 + }, + "owner": 2, + "active": true + } + ], + "energy": [ + { + "row": 21, + "col": 33 + }, + { + "row": 32, + "col": 34 + }, + { + "row": 18, + "col": 27 + }, + { + "row": 35, + "col": 22 + }, + { + "row": 36, + "col": 35 + } + ], + "scores": [ + 1, + 1, + 1 + ], + "energy_held": [ + 1, + 0, + 1 + ], + "events": [ + { + "type": "energy_collected", + "turn": 2, + "details": { + "player": 2, + "pos": { + "row": 27, + "col": 25 + } + } + } + ], + "zone_bounds": { + "center": { + "row": 27, + "col": 27 + }, + "radius": 27, + "active": false + } + }, + { + "turn": 3, + "bots": [ + { + "id": 0, + "owner": 0, + "position": { + "row": 28, + "col": 27 + }, + "alive": true + }, + { + "id": 1, + "owner": 1, + "position": { + "row": 22, + "col": 30 + }, + "alive": true + }, + { + "id": 2, + "owner": 2, + "position": { + "row": 26, + "col": 24 + }, + "alive": true + } + ], + "cores": [ + { + "position": { + "row": 31, + "col": 27 + }, + "owner": 0, + "active": true + }, + { + "position": { + "row": 25, + "col": 30 + }, + "owner": 1, + "active": true + }, + { + "position": { + "row": 25, + "col": 24 + }, + "owner": 2, + "active": true + } + ], + "energy": [ + { + "row": 21, + "col": 33 + }, + { + "row": 32, + "col": 34 + }, + { + "row": 18, + "col": 27 + }, + { + "row": 35, + "col": 22 + }, + { + "row": 36, + "col": 35 + } + ], + "scores": [ + 1, + 1, + 1 + ], + "energy_held": [ + 1, + 0, + 1 + ], + "events": [], + "zone_bounds": { + "center": { + "row": 27, + "col": 27 + }, + "radius": 27, + "active": false + } + }, + { + "turn": 4, + "bots": [ + { + "id": 0, + "owner": 0, + "position": { + "row": 27, + "col": 27 + }, + "alive": true + }, + { + "id": 1, + "owner": 1, + "position": { + "row": 21, + "col": 30 + }, + "alive": true + }, + { + "id": 2, + "owner": 2, + "position": { + "row": 26, + "col": 23 + }, + "alive": true + } + ], + "cores": [ + { + "position": { + "row": 31, + "col": 27 + }, + "owner": 0, + "active": true + }, + { + "position": { + "row": 25, + "col": 30 + }, + "owner": 1, + "active": true + }, + { + "position": { + "row": 25, + "col": 24 + }, + "owner": 2, + "active": true + } + ], + "energy": [ + { + "row": 21, + "col": 33 + }, + { + "row": 32, + "col": 34 + }, + { + "row": 18, + "col": 27 + }, + { + "row": 35, + "col": 22 + }, + { + "row": 36, + "col": 35 + } + ], + "scores": [ + 1, + 1, + 1 + ], + "energy_held": [ + 1, + 0, + 1 + ], + "events": [], + "zone_bounds": { + "center": { + "row": 27, + "col": 27 + }, + "radius": 27, + "active": false + } + }, + { + "turn": 5, + "bots": [ + { + "id": 0, + "owner": 0, + "position": { + "row": 27, + "col": 26 + }, + "alive": false + }, + { + "id": 1, + "owner": 1, + "position": { + "row": 20, + "col": 30 + }, + "alive": true + }, + { + "id": 2, + "owner": 2, + "position": { + "row": 26, + "col": 24 + }, + "alive": false + } + ], + "cores": [ + { + "position": { + "row": 31, + "col": 27 + }, + "owner": 0, + "active": true + }, + { + "position": { + "row": 25, + "col": 30 + }, + "owner": 1, + "active": true + }, + { + "position": { + "row": 25, + "col": 24 + }, + "owner": 2, + "active": true + } + ], + "energy": [ + { + "row": 21, + "col": 33 + }, + { + "row": 32, + "col": 34 + }, + { + "row": 18, + "col": 27 + }, + { + "row": 35, + "col": 22 + }, + { + "row": 36, + "col": 35 + } + ], + "scores": [ + 2, + 5, + 2 + ], + "energy_held": [ + 1, + 0, + 1 + ], + "events": [ + { + "type": "combat_death", + "turn": 5, + "details": { + "bot_id": 0, + "killers": [ + { + "bot_id": 2, + "owner": 2, + "position": { + "row": 26, + "col": 24 + } + } + ], + "owner": 0, + "position": { + "row": 27, + "col": 26 + } + } + }, + { + "type": "combat_death", + "turn": 5, + "details": { + "bot_id": 2, + "killers": [ + { + "bot_id": 0, + "owner": 0, + "position": { + "row": 27, + "col": 26 + } + } + ], + "owner": 2, + "position": { + "row": 26, + "col": 24 + } + } + } + ], + "zone_bounds": { + "center": { + "row": 27, + "col": 27 + }, + "radius": 27, + "active": false + } + } + ], + "win_prob": [ + [ + 0.48, + 0.27, + 0.21 + ], + [ + 0.5, + 0.36, + 0.14 + ], + [ + 0.21, + 0.74, + 0.03 + ], + [ + 0.14, + 0.71, + 0.14 + ], + [ + 0.09, + 0.77, + 0.14 + ], + [ + 0, + 1, + 0 + ] + ], + "critical_moments": [ + { + "turn": 2, + "delta": -0.29, + "player": 0, + "description": "Player 0 win probability drops to 29%" + }, + { + "turn": 2, + "delta": 0.38, + "player": 1, + "description": "Player 1 win probability rises to 38%" + }, + { + "turn": 5, + "delta": 0.23, + "player": 1, + "description": "Player 1 win probability rises to 23%" + } + ], + "combat_deaths": [ + 1, + 0, + 1 + ] +} \ No newline at end of file diff --git a/test-replay-long-match.json b/test-replay-long-match.json new file mode 100644 index 0000000..355f7b4 --- /dev/null +++ b/test-replay-long-match.json @@ -0,0 +1,1852 @@ +{ + "format_version": "1.0", + "match_id": "m_qoot3e5v", + "config": { + "rows": 63, + "cols": 63, + "max_turns": 200, + "vision_radius2": 49, + "attack_radius2": 12, + "spawn_cost": 3, + "energy_interval": 10, + "cores_per_player": 2, + "zone_enabled": true, + "zone_start_turn": 10, + "zone_shrink_interval": 1, + "zone_shrink_step": 1, + "zone_min_radius": 1, + "kill_score": 1 + }, + "start_time": "2026-06-27T16:48:02.395549623Z", + "end_time": "2026-06-27T16:48:02.462122036Z", + "result": { + "winner": -1, + "reason": "draw", + "turns": 2, + "scores": [ + 4, + 4, + 4, + 4 + ], + "energy": [ + 0, + 0, + 0, + 0 + ], + "bots_alive": [ + 0, + 0, + 0, + 0 + ], + "crashed": [ + false, + false, + false, + false + ], + "combat_deaths": [ + 2, + 2, + 2, + 2 + ] + }, + "players": [ + { + "id": 0, + "name": "swarm" + }, + { + "id": 1, + "name": "hunter" + }, + { + "id": 2, + "name": "gatherer" + }, + { + "id": 3, + "name": "rusher" + } + ], + "map": { + "rows": 63, + "cols": 63, + "walls": [ + { + "row": 18, + "col": 47 + }, + { + "row": 33, + "col": 23 + }, + { + "row": 30, + "col": 43 + }, + { + "row": 39, + "col": 22 + }, + { + "row": 52, + "col": 33 + }, + { + "row": 29, + "col": 43 + }, + { + "row": 36, + "col": 46 + }, + { + "row": 36, + "col": 39 + }, + { + "row": 44, + "col": 34 + }, + { + "row": 31, + "col": 36 + }, + { + "row": 18, + "col": 46 + }, + { + "row": 20, + "col": 53 + }, + { + "row": 34, + "col": 38 + }, + { + "row": 28, + "col": 24 + }, + { + "row": 45, + "col": 41 + }, + { + "row": 20, + "col": 24 + }, + { + "row": 47, + "col": 26 + }, + { + "row": 27, + "col": 34 + }, + { + "row": 38, + "col": 25 + }, + { + "row": 31, + "col": 20 + }, + { + "row": 31, + "col": 49 + }, + { + "row": 38, + "col": 20 + }, + { + "row": 25, + "col": 46 + }, + { + "row": 37, + "col": 38 + }, + { + "row": 25, + "col": 24 + }, + { + "row": 26, + "col": 14 + }, + { + "row": 48, + "col": 26 + }, + { + "row": 20, + "col": 31 + }, + { + "row": 36, + "col": 31 + }, + { + "row": 29, + "col": 52 + }, + { + "row": 46, + "col": 37 + }, + { + "row": 43, + "col": 33 + }, + { + "row": 36, + "col": 47 + }, + { + "row": 44, + "col": 16 + }, + { + "row": 49, + "col": 31 + }, + { + "row": 42, + "col": 37 + }, + { + "row": 35, + "col": 28 + }, + { + "row": 24, + "col": 37 + }, + { + "row": 29, + "col": 9 + }, + { + "row": 31, + "col": 50 + }, + { + "row": 7, + "col": 34 + }, + { + "row": 41, + "col": 17 + }, + { + "row": 28, + "col": 23 + }, + { + "row": 47, + "col": 24 + }, + { + "row": 33, + "col": 33 + }, + { + "row": 13, + "col": 31 + }, + { + "row": 31, + "col": 13 + }, + { + "row": 29, + "col": 19 + }, + { + "row": 16, + "col": 36 + }, + { + "row": 43, + "col": 32 + }, + { + "row": 24, + "col": 34 + }, + { + "row": 29, + "col": 39 + }, + { + "row": 18, + "col": 29 + }, + { + "row": 12, + "col": 31 + }, + { + "row": 16, + "col": 25 + }, + { + "row": 31, + "col": 24 + }, + { + "row": 42, + "col": 9 + }, + { + "row": 38, + "col": 28 + }, + { + "row": 28, + "col": 22 + }, + { + "row": 31, + "col": 38 + }, + { + "row": 17, + "col": 13 + }, + { + "row": 39, + "col": 33 + }, + { + "row": 29, + "col": 44 + }, + { + "row": 31, + "col": 26 + }, + { + "row": 33, + "col": 19 + }, + { + "row": 33, + "col": 29 + }, + { + "row": 34, + "col": 55 + }, + { + "row": 21, + "col": 45 + }, + { + "row": 34, + "col": 39 + }, + { + "row": 28, + "col": 44 + }, + { + "row": 44, + "col": 46 + }, + { + "row": 4, + "col": 31 + }, + { + "row": 40, + "col": 28 + }, + { + "row": 20, + "col": 25 + }, + { + "row": 41, + "col": 38 + }, + { + "row": 46, + "col": 41 + }, + { + "row": 15, + "col": 36 + }, + { + "row": 25, + "col": 42 + }, + { + "row": 15, + "col": 18 + }, + { + "row": 44, + "col": 33 + }, + { + "row": 41, + "col": 16 + }, + { + "row": 10, + "col": 29 + }, + { + "row": 33, + "col": 10 + }, + { + "row": 34, + "col": 35 + }, + { + "row": 45, + "col": 49 + }, + { + "row": 13, + "col": 45 + }, + { + "row": 55, + "col": 28 + }, + { + "row": 18, + "col": 28 + }, + { + "row": 26, + "col": 31 + }, + { + "row": 34, + "col": 40 + }, + { + "row": 19, + "col": 29 + }, + { + "row": 26, + "col": 16 + }, + { + "row": 46, + "col": 26 + }, + { + "row": 6, + "col": 35 + }, + { + "row": 31, + "col": 58 + }, + { + "row": 16, + "col": 21 + }, + { + "row": 50, + "col": 31 + }, + { + "row": 48, + "col": 40 + }, + { + "row": 28, + "col": 27 + }, + { + "row": 24, + "col": 31 + }, + { + "row": 56, + "col": 27 + }, + { + "row": 14, + "col": 36 + }, + { + "row": 40, + "col": 17 + }, + { + "row": 23, + "col": 29 + }, + { + "row": 23, + "col": 40 + }, + { + "row": 33, + "col": 53 + }, + { + "row": 49, + "col": 17 + }, + { + "row": 26, + "col": 23 + }, + { + "row": 31, + "col": 42 + }, + { + "row": 35, + "col": 33 + }, + { + "row": 45, + "col": 40 + }, + { + "row": 39, + "col": 28 + }, + { + "row": 32, + "col": 24 + }, + { + "row": 9, + "col": 20 + }, + { + "row": 41, + "col": 35 + }, + { + "row": 17, + "col": 21 + }, + { + "row": 42, + "col": 38 + }, + { + "row": 16, + "col": 44 + }, + { + "row": 37, + "col": 16 + }, + { + "row": 40, + "col": 14 + }, + { + "row": 27, + "col": 6 + }, + { + "row": 35, + "col": 21 + }, + { + "row": 29, + "col": 35 + }, + { + "row": 44, + "col": 15 + }, + { + "row": 31, + "col": 4 + }, + { + "row": 38, + "col": 47 + }, + { + "row": 53, + "col": 42 + }, + { + "row": 19, + "col": 30 + }, + { + "row": 33, + "col": 27 + }, + { + "row": 47, + "col": 44 + }, + { + "row": 35, + "col": 56 + }, + { + "row": 46, + "col": 44 + }, + { + "row": 32, + "col": 19 + }, + { + "row": 21, + "col": 24 + }, + { + "row": 38, + "col": 21 + }, + { + "row": 34, + "col": 18 + }, + { + "row": 38, + "col": 31 + }, + { + "row": 38, + "col": 32 + }, + { + "row": 16, + "col": 18 + }, + { + "row": 23, + "col": 36 + }, + { + "row": 28, + "col": 7 + }, + { + "row": 19, + "col": 33 + }, + { + "row": 22, + "col": 23 + }, + { + "row": 9, + "col": 33 + }, + { + "row": 14, + "col": 22 + }, + { + "row": 24, + "col": 30 + }, + { + "row": 24, + "col": 42 + }, + { + "row": 33, + "col": 18 + }, + { + "row": 31, + "col": 12 + }, + { + "row": 15, + "col": 38 + }, + { + "row": 29, + "col": 33 + }, + { + "row": 17, + "col": 22 + }, + { + "row": 22, + "col": 34 + }, + { + "row": 26, + "col": 15 + }, + { + "row": 30, + "col": 38 + }, + { + "row": 36, + "col": 48 + }, + { + "row": 29, + "col": 29 + }, + { + "row": 27, + "col": 41 + }, + { + "row": 22, + "col": 45 + }, + { + "row": 23, + "col": 34 + }, + { + "row": 18, + "col": 16 + }, + { + "row": 21, + "col": 46 + }, + { + "row": 22, + "col": 48 + }, + { + "row": 21, + "col": 27 + }, + { + "row": 43, + "col": 29 + }, + { + "row": 46, + "col": 18 + }, + { + "row": 42, + "col": 31 + }, + { + "row": 24, + "col": 41 + }, + { + "row": 40, + "col": 39 + }, + { + "row": 58, + "col": 31 + }, + { + "row": 37, + "col": 20 + }, + { + "row": 27, + "col": 29 + }, + { + "row": 33, + "col": 43 + }, + { + "row": 24, + "col": 15 + }, + { + "row": 39, + "col": 26 + }, + { + "row": 53, + "col": 29 + } + ], + "cores": [ + { + "position": { + "row": 35, + "col": 31 + }, + "owner": 0 + }, + { + "position": { + "row": 34, + "col": 31 + }, + "owner": 0 + }, + { + "position": { + "row": 31, + "col": 35 + }, + "owner": 1 + }, + { + "position": { + "row": 31, + "col": 34 + }, + "owner": 1 + }, + { + "position": { + "row": 27, + "col": 31 + }, + "owner": 2 + }, + { + "position": { + "row": 28, + "col": 31 + }, + "owner": 2 + }, + { + "position": { + "row": 31, + "col": 27 + }, + "owner": 3 + }, + { + "position": { + "row": 31, + "col": 28 + }, + "owner": 3 + } + ], + "energy_nodes": [ + { + "row": 34, + "col": 32 + }, + { + "row": 30, + "col": 34 + }, + { + "row": 28, + "col": 30 + }, + { + "row": 32, + "col": 28 + }, + { + "row": 34, + "col": 36 + }, + { + "row": 26, + "col": 34 + }, + { + "row": 28, + "col": 26 + }, + { + "row": 36, + "col": 28 + }, + { + "row": 36, + "col": 40 + }, + { + "row": 22, + "col": 36 + }, + { + "row": 26, + "col": 22 + }, + { + "row": 40, + "col": 26 + }, + { + "row": 41, + "col": 37 + }, + { + "row": 25, + "col": 41 + }, + { + "row": 21, + "col": 25 + }, + { + "row": 37, + "col": 21 + }, + { + "row": 44, + "col": 32 + }, + { + "row": 30, + "col": 44 + }, + { + "row": 18, + "col": 30 + }, + { + "row": 32, + "col": 18 + }, + { + "row": 44, + "col": 35 + }, + { + "row": 27, + "col": 44 + }, + { + "row": 18, + "col": 27 + }, + { + "row": 35, + "col": 18 + } + ] + }, + "turns": [ + { + "turn": 0, + "bots": [ + { + "id": 0, + "owner": 0, + "position": { + "row": 35, + "col": 31 + }, + "alive": true + }, + { + "id": 1, + "owner": 0, + "position": { + "row": 34, + "col": 31 + }, + "alive": true + }, + { + "id": 2, + "owner": 1, + "position": { + "row": 31, + "col": 35 + }, + "alive": true + }, + { + "id": 3, + "owner": 1, + "position": { + "row": 31, + "col": 34 + }, + "alive": true + }, + { + "id": 4, + "owner": 2, + "position": { + "row": 27, + "col": 31 + }, + "alive": true + }, + { + "id": 5, + "owner": 2, + "position": { + "row": 28, + "col": 31 + }, + "alive": true + }, + { + "id": 6, + "owner": 3, + "position": { + "row": 31, + "col": 27 + }, + "alive": true + }, + { + "id": 7, + "owner": 3, + "position": { + "row": 31, + "col": 28 + }, + "alive": true + } + ], + "cores": [ + { + "position": { + "row": 35, + "col": 31 + }, + "owner": 0, + "active": true + }, + { + "position": { + "row": 34, + "col": 31 + }, + "owner": 0, + "active": true + }, + { + "position": { + "row": 31, + "col": 35 + }, + "owner": 1, + "active": true + }, + { + "position": { + "row": 31, + "col": 34 + }, + "owner": 1, + "active": true + }, + { + "position": { + "row": 27, + "col": 31 + }, + "owner": 2, + "active": true + }, + { + "position": { + "row": 28, + "col": 31 + }, + "owner": 2, + "active": true + }, + { + "position": { + "row": 31, + "col": 27 + }, + "owner": 3, + "active": true + }, + { + "position": { + "row": 31, + "col": 28 + }, + "owner": 3, + "active": true + } + ], + "energy": [ + { + "row": 28, + "col": 26 + }, + { + "row": 22, + "col": 36 + }, + { + "row": 26, + "col": 22 + }, + { + "row": 21, + "col": 25 + }, + { + "row": 44, + "col": 32 + }, + { + "row": 30, + "col": 44 + }, + { + "row": 18, + "col": 27 + }, + { + "row": 35, + "col": 18 + } + ], + "scores": [ + 2, + 2, + 2, + 2 + ], + "energy_held": [ + 0, + 0, + 0, + 0 + ], + "events": [ + { + "type": "bot_spawned", + "turn": 0, + "details": { + "bot_id": 0, + "owner": 0, + "pos": { + "row": 35, + "col": 31 + } + } + }, + { + "type": "bot_spawned", + "turn": 0, + "details": { + "bot_id": 1, + "owner": 0, + "pos": { + "row": 34, + "col": 31 + } + } + }, + { + "type": "bot_spawned", + "turn": 0, + "details": { + "bot_id": 2, + "owner": 1, + "pos": { + "row": 31, + "col": 35 + } + } + }, + { + "type": "bot_spawned", + "turn": 0, + "details": { + "bot_id": 3, + "owner": 1, + "pos": { + "row": 31, + "col": 34 + } + } + }, + { + "type": "bot_spawned", + "turn": 0, + "details": { + "bot_id": 4, + "owner": 2, + "pos": { + "row": 27, + "col": 31 + } + } + }, + { + "type": "bot_spawned", + "turn": 0, + "details": { + "bot_id": 5, + "owner": 2, + "pos": { + "row": 28, + "col": 31 + } + } + }, + { + "type": "bot_spawned", + "turn": 0, + "details": { + "bot_id": 6, + "owner": 3, + "pos": { + "row": 31, + "col": 27 + } + } + }, + { + "type": "bot_spawned", + "turn": 0, + "details": { + "bot_id": 7, + "owner": 3, + "pos": { + "row": 31, + "col": 28 + } + } + } + ], + "zone_bounds": { + "center": { + "row": 31, + "col": 31 + }, + "radius": 31, + "active": false + } + }, + { + "turn": 1, + "bots": [ + { + "id": 0, + "owner": 0, + "position": { + "row": 34, + "col": 31 + }, + "alive": true + }, + { + "id": 1, + "owner": 0, + "position": { + "row": 33, + "col": 31 + }, + "alive": false + }, + { + "id": 2, + "owner": 1, + "position": { + "row": 31, + "col": 34 + }, + "alive": true + }, + { + "id": 3, + "owner": 1, + "position": { + "row": 31, + "col": 33 + }, + "alive": false + }, + { + "id": 4, + "owner": 2, + "position": { + "row": 28, + "col": 31 + }, + "alive": true + }, + { + "id": 5, + "owner": 2, + "position": { + "row": 28, + "col": 30 + }, + "alive": false + }, + { + "id": 6, + "owner": 3, + "position": { + "row": 30, + "col": 27 + }, + "alive": true + }, + { + "id": 7, + "owner": 3, + "position": { + "row": 30, + "col": 28 + }, + "alive": false + } + ], + "cores": [ + { + "position": { + "row": 35, + "col": 31 + }, + "owner": 0, + "active": true + }, + { + "position": { + "row": 34, + "col": 31 + }, + "owner": 0, + "active": true + }, + { + "position": { + "row": 31, + "col": 35 + }, + "owner": 1, + "active": true + }, + { + "position": { + "row": 31, + "col": 34 + }, + "owner": 1, + "active": true + }, + { + "position": { + "row": 27, + "col": 31 + }, + "owner": 2, + "active": true + }, + { + "position": { + "row": 28, + "col": 31 + }, + "owner": 2, + "active": true + }, + { + "position": { + "row": 31, + "col": 27 + }, + "owner": 3, + "active": true + }, + { + "position": { + "row": 31, + "col": 28 + }, + "owner": 3, + "active": true + } + ], + "energy": [ + { + "row": 28, + "col": 26 + }, + { + "row": 22, + "col": 36 + }, + { + "row": 26, + "col": 22 + }, + { + "row": 21, + "col": 25 + }, + { + "row": 44, + "col": 32 + }, + { + "row": 30, + "col": 44 + }, + { + "row": 18, + "col": 27 + }, + { + "row": 35, + "col": 18 + } + ], + "scores": [ + 3, + 3, + 3, + 3 + ], + "energy_held": [ + 0, + 0, + 0, + 0 + ], + "events": [ + { + "type": "combat_death", + "turn": 1, + "details": { + "bot_id": 1, + "killers": [ + { + "bot_id": 3, + "owner": 1, + "position": { + "row": 31, + "col": 33 + } + } + ], + "owner": 0, + "position": { + "row": 33, + "col": 31 + } + } + }, + { + "type": "combat_death", + "turn": 1, + "details": { + "bot_id": 3, + "killers": [ + { + "bot_id": 1, + "owner": 0, + "position": { + "row": 33, + "col": 31 + } + } + ], + "owner": 1, + "position": { + "row": 31, + "col": 33 + } + } + }, + { + "type": "combat_death", + "turn": 1, + "details": { + "bot_id": 5, + "killers": [ + { + "bot_id": 7, + "owner": 3, + "position": { + "row": 30, + "col": 28 + } + } + ], + "owner": 2, + "position": { + "row": 28, + "col": 30 + } + } + }, + { + "type": "combat_death", + "turn": 1, + "details": { + "bot_id": 7, + "killers": [ + { + "bot_id": 5, + "owner": 2, + "position": { + "row": 28, + "col": 30 + } + } + ], + "owner": 3, + "position": { + "row": 30, + "col": 28 + } + } + } + ], + "zone_bounds": { + "center": { + "row": 31, + "col": 31 + }, + "radius": 31, + "active": false + } + }, + { + "turn": 2, + "bots": [ + { + "id": 0, + "owner": 0, + "position": { + "row": 33, + "col": 31 + }, + "alive": false + }, + { + "id": 1, + "owner": 0, + "position": { + "row": 33, + "col": 31 + }, + "alive": false + }, + { + "id": 2, + "owner": 1, + "position": { + "row": 32, + "col": 34 + }, + "alive": false + }, + { + "id": 3, + "owner": 1, + "position": { + "row": 31, + "col": 33 + }, + "alive": false + }, + { + "id": 4, + "owner": 2, + "position": { + "row": 28, + "col": 30 + }, + "alive": false + }, + { + "id": 5, + "owner": 2, + "position": { + "row": 28, + "col": 30 + }, + "alive": false + }, + { + "id": 6, + "owner": 3, + "position": { + "row": 29, + "col": 27 + }, + "alive": false + }, + { + "id": 7, + "owner": 3, + "position": { + "row": 30, + "col": 28 + }, + "alive": false + } + ], + "cores": [ + { + "position": { + "row": 35, + "col": 31 + }, + "owner": 0, + "active": true + }, + { + "position": { + "row": 34, + "col": 31 + }, + "owner": 0, + "active": true + }, + { + "position": { + "row": 31, + "col": 35 + }, + "owner": 1, + "active": true + }, + { + "position": { + "row": 31, + "col": 34 + }, + "owner": 1, + "active": true + }, + { + "position": { + "row": 27, + "col": 31 + }, + "owner": 2, + "active": true + }, + { + "position": { + "row": 28, + "col": 31 + }, + "owner": 2, + "active": true + }, + { + "position": { + "row": 31, + "col": 27 + }, + "owner": 3, + "active": true + }, + { + "position": { + "row": 31, + "col": 28 + }, + "owner": 3, + "active": true + } + ], + "energy": [ + { + "row": 28, + "col": 26 + }, + { + "row": 22, + "col": 36 + }, + { + "row": 26, + "col": 22 + }, + { + "row": 21, + "col": 25 + }, + { + "row": 44, + "col": 32 + }, + { + "row": 30, + "col": 44 + }, + { + "row": 18, + "col": 27 + }, + { + "row": 35, + "col": 18 + } + ], + "scores": [ + 4, + 4, + 4, + 4 + ], + "energy_held": [ + 0, + 0, + 0, + 0 + ], + "events": [ + { + "type": "combat_death", + "turn": 2, + "details": { + "bot_id": 0, + "killers": [ + { + "bot_id": 2, + "owner": 1, + "position": { + "row": 32, + "col": 34 + } + } + ], + "owner": 0, + "position": { + "row": 33, + "col": 31 + } + } + }, + { + "type": "combat_death", + "turn": 2, + "details": { + "bot_id": 2, + "killers": [ + { + "bot_id": 0, + "owner": 0, + "position": { + "row": 33, + "col": 31 + } + } + ], + "owner": 1, + "position": { + "row": 32, + "col": 34 + } + } + }, + { + "type": "combat_death", + "turn": 2, + "details": { + "bot_id": 4, + "killers": [ + { + "bot_id": 6, + "owner": 3, + "position": { + "row": 29, + "col": 27 + } + } + ], + "owner": 2, + "position": { + "row": 28, + "col": 30 + } + } + }, + { + "type": "combat_death", + "turn": 2, + "details": { + "bot_id": 6, + "killers": [ + { + "bot_id": 4, + "owner": 2, + "position": { + "row": 28, + "col": 30 + } + } + ], + "owner": 3, + "position": { + "row": 29, + "col": 27 + } + } + } + ], + "zone_bounds": { + "center": { + "row": 31, + "col": 31 + }, + "radius": 31, + "active": false + } + } + ], + "win_prob": [ + [ + 0.19, + 0.24, + 0.18, + 0.22 + ], + [ + 0.15, + 0.13, + 0.1, + 0.19 + ], + [ + 0, + 0, + 0, + 0 + ] + ], + "critical_moments": [ + { + "turn": 2, + "delta": -0.15, + "player": 0, + "description": "Player 0 win probability drops to 15%" + }, + { + "turn": 2, + "delta": -0.19, + "player": 3, + "description": "Player 3 win probability drops to 19%" + } + ], + "combat_deaths": [ + 2, + 2, + 2, + 2 + ] +} \ No newline at end of file