Regenerated demo-replay-v2.json (2-player) and demo-replay-v2-6p.json (6-player) using acb-local with current engine settings. Both replays now show combat_death events, demonstrating the focus-fire combat system is working. - 2-player demo: 6 turns, 2 combat_deaths (seed 789) - 6-player demo: 6 turns, 6 combat_deaths (seed 456) Previous replays were generated before zone/spawn radius fixes and showed minimal combat. Combat density tests confirm targets met: 86% for 2-player, 100% for 6-player (TestCombatDensityMetrics). Closes: bf-3er8
952 lines
No EOL
15 KiB
JSON
952 lines
No EOL
15 KiB
JSON
{
|
|
"format_version": "1.0",
|
|
"match_id": "m_pstcxfsi",
|
|
"config": {
|
|
"rows": 40,
|
|
"cols": 40,
|
|
"max_turns": 320,
|
|
"vision_radius2": 49,
|
|
"attack_radius2": 25,
|
|
"spawn_cost": 3,
|
|
"energy_interval": 10,
|
|
"cores_per_player": 1,
|
|
"zone_enabled": true,
|
|
"zone_start_turn": 10,
|
|
"zone_shrink_interval": 1,
|
|
"zone_shrink_step": 2,
|
|
"zone_min_radius": 2
|
|
},
|
|
"start_time": "2026-05-26T01:10:05.902799378Z",
|
|
"end_time": "2026-05-26T01:10:05.955522123Z",
|
|
"result": {
|
|
"winner": -1,
|
|
"reason": "draw",
|
|
"turns": 6,
|
|
"scores": [
|
|
1,
|
|
1
|
|
],
|
|
"energy": [
|
|
0,
|
|
0
|
|
],
|
|
"bots_alive": [
|
|
0,
|
|
0
|
|
],
|
|
"crashed": [
|
|
false,
|
|
false
|
|
],
|
|
"combat_deaths": [
|
|
1,
|
|
1
|
|
]
|
|
},
|
|
"players": [
|
|
{
|
|
"id": 0,
|
|
"name": "gatherer"
|
|
},
|
|
{
|
|
"id": 1,
|
|
"name": "rusher"
|
|
}
|
|
],
|
|
"map": {
|
|
"rows": 40,
|
|
"cols": 40,
|
|
"walls": [
|
|
{
|
|
"row": 22,
|
|
"col": 10
|
|
},
|
|
{
|
|
"row": 30,
|
|
"col": 25
|
|
},
|
|
{
|
|
"row": 23,
|
|
"col": 18
|
|
},
|
|
{
|
|
"row": 25,
|
|
"col": 23
|
|
},
|
|
{
|
|
"row": 7,
|
|
"col": 13
|
|
},
|
|
{
|
|
"row": 12,
|
|
"col": 16
|
|
},
|
|
{
|
|
"row": 20,
|
|
"col": 24
|
|
},
|
|
{
|
|
"row": 37,
|
|
"col": 20
|
|
},
|
|
{
|
|
"row": 25,
|
|
"col": 34
|
|
},
|
|
{
|
|
"row": 30,
|
|
"col": 7
|
|
},
|
|
{
|
|
"row": 32,
|
|
"col": 21
|
|
},
|
|
{
|
|
"row": 10,
|
|
"col": 33
|
|
},
|
|
{
|
|
"row": 33,
|
|
"col": 27
|
|
},
|
|
{
|
|
"row": 29,
|
|
"col": 14
|
|
},
|
|
{
|
|
"row": 25,
|
|
"col": 8
|
|
},
|
|
{
|
|
"row": 22,
|
|
"col": 20
|
|
},
|
|
{
|
|
"row": 24,
|
|
"col": 12
|
|
},
|
|
{
|
|
"row": 12,
|
|
"col": 35
|
|
},
|
|
{
|
|
"row": 16,
|
|
"col": 10
|
|
},
|
|
{
|
|
"row": 28,
|
|
"col": 24
|
|
},
|
|
{
|
|
"row": 20,
|
|
"col": 5
|
|
},
|
|
{
|
|
"row": 23,
|
|
"col": 13
|
|
},
|
|
{
|
|
"row": 18,
|
|
"col": 19
|
|
},
|
|
{
|
|
"row": 20,
|
|
"col": 3
|
|
},
|
|
{
|
|
"row": 11,
|
|
"col": 26
|
|
},
|
|
{
|
|
"row": 21,
|
|
"col": 15
|
|
},
|
|
{
|
|
"row": 18,
|
|
"col": 20
|
|
},
|
|
{
|
|
"row": 28,
|
|
"col": 5
|
|
},
|
|
{
|
|
"row": 15,
|
|
"col": 6
|
|
},
|
|
{
|
|
"row": 8,
|
|
"col": 19
|
|
},
|
|
{
|
|
"row": 37,
|
|
"col": 22
|
|
},
|
|
{
|
|
"row": 24,
|
|
"col": 16
|
|
},
|
|
{
|
|
"row": 24,
|
|
"col": 33
|
|
},
|
|
{
|
|
"row": 28,
|
|
"col": 10
|
|
},
|
|
{
|
|
"row": 22,
|
|
"col": 21
|
|
},
|
|
{
|
|
"row": 28,
|
|
"col": 20
|
|
},
|
|
{
|
|
"row": 12,
|
|
"col": 20
|
|
},
|
|
{
|
|
"row": 20,
|
|
"col": 16
|
|
},
|
|
{
|
|
"row": 20,
|
|
"col": 18
|
|
},
|
|
{
|
|
"row": 12,
|
|
"col": 30
|
|
},
|
|
{
|
|
"row": 31,
|
|
"col": 26
|
|
},
|
|
{
|
|
"row": 16,
|
|
"col": 28
|
|
},
|
|
{
|
|
"row": 26,
|
|
"col": 13
|
|
},
|
|
{
|
|
"row": 20,
|
|
"col": 35
|
|
},
|
|
{
|
|
"row": 19,
|
|
"col": 25
|
|
},
|
|
{
|
|
"row": 19,
|
|
"col": 10
|
|
},
|
|
{
|
|
"row": 10,
|
|
"col": 15
|
|
},
|
|
{
|
|
"row": 20,
|
|
"col": 22
|
|
},
|
|
{
|
|
"row": 18,
|
|
"col": 30
|
|
},
|
|
{
|
|
"row": 14,
|
|
"col": 27
|
|
},
|
|
{
|
|
"row": 14,
|
|
"col": 19
|
|
},
|
|
{
|
|
"row": 30,
|
|
"col": 27
|
|
},
|
|
{
|
|
"row": 10,
|
|
"col": 13
|
|
},
|
|
{
|
|
"row": 3,
|
|
"col": 18
|
|
},
|
|
{
|
|
"row": 22,
|
|
"col": 14
|
|
},
|
|
{
|
|
"row": 20,
|
|
"col": 17
|
|
},
|
|
{
|
|
"row": 15,
|
|
"col": 20
|
|
},
|
|
{
|
|
"row": 20,
|
|
"col": 37
|
|
},
|
|
{
|
|
"row": 19,
|
|
"col": 28
|
|
},
|
|
{
|
|
"row": 21,
|
|
"col": 12
|
|
},
|
|
{
|
|
"row": 26,
|
|
"col": 21
|
|
},
|
|
{
|
|
"row": 15,
|
|
"col": 17
|
|
},
|
|
{
|
|
"row": 25,
|
|
"col": 20
|
|
},
|
|
{
|
|
"row": 3,
|
|
"col": 20
|
|
},
|
|
{
|
|
"row": 21,
|
|
"col": 30
|
|
},
|
|
{
|
|
"row": 17,
|
|
"col": 22
|
|
},
|
|
{
|
|
"row": 16,
|
|
"col": 24
|
|
},
|
|
{
|
|
"row": 24,
|
|
"col": 30
|
|
},
|
|
{
|
|
"row": 20,
|
|
"col": 23
|
|
},
|
|
{
|
|
"row": 18,
|
|
"col": 26
|
|
},
|
|
{
|
|
"row": 15,
|
|
"col": 32
|
|
},
|
|
{
|
|
"row": 17,
|
|
"col": 27
|
|
},
|
|
{
|
|
"row": 9,
|
|
"col": 14
|
|
},
|
|
{
|
|
"row": 16,
|
|
"col": 7
|
|
}
|
|
],
|
|
"cores": [
|
|
{
|
|
"position": {
|
|
"row": 24,
|
|
"col": 20
|
|
},
|
|
"owner": 0
|
|
},
|
|
{
|
|
"position": {
|
|
"row": 16,
|
|
"col": 20
|
|
},
|
|
"owner": 1
|
|
}
|
|
],
|
|
"energy_nodes": [
|
|
{
|
|
"row": 21,
|
|
"col": 20
|
|
},
|
|
{
|
|
"row": 19,
|
|
"col": 20
|
|
},
|
|
{
|
|
"row": 18,
|
|
"col": 25
|
|
},
|
|
{
|
|
"row": 22,
|
|
"col": 15
|
|
},
|
|
{
|
|
"row": 20,
|
|
"col": 25
|
|
},
|
|
{
|
|
"row": 20,
|
|
"col": 15
|
|
},
|
|
{
|
|
"row": 30,
|
|
"col": 24
|
|
},
|
|
{
|
|
"row": 10,
|
|
"col": 16
|
|
},
|
|
{
|
|
"row": 24,
|
|
"col": 29
|
|
},
|
|
{
|
|
"row": 16,
|
|
"col": 11
|
|
}
|
|
]
|
|
},
|
|
"turns": [
|
|
{
|
|
"turn": 0,
|
|
"bots": [
|
|
{
|
|
"id": 0,
|
|
"owner": 0,
|
|
"position": {
|
|
"row": 24,
|
|
"col": 20
|
|
},
|
|
"alive": true
|
|
},
|
|
{
|
|
"id": 1,
|
|
"owner": 1,
|
|
"position": {
|
|
"row": 16,
|
|
"col": 20
|
|
},
|
|
"alive": true
|
|
}
|
|
],
|
|
"cores": [
|
|
{
|
|
"position": {
|
|
"row": 24,
|
|
"col": 20
|
|
},
|
|
"owner": 0,
|
|
"active": true
|
|
},
|
|
{
|
|
"position": {
|
|
"row": 16,
|
|
"col": 20
|
|
},
|
|
"owner": 1,
|
|
"active": true
|
|
}
|
|
],
|
|
"energy": [],
|
|
"scores": [
|
|
1,
|
|
1
|
|
],
|
|
"energy_held": [
|
|
0,
|
|
0
|
|
],
|
|
"events": [
|
|
{
|
|
"type": "bot_spawned",
|
|
"turn": 0,
|
|
"details": {
|
|
"bot_id": 0,
|
|
"owner": 0,
|
|
"pos": {
|
|
"row": 24,
|
|
"col": 20
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"type": "bot_spawned",
|
|
"turn": 0,
|
|
"details": {
|
|
"bot_id": 1,
|
|
"owner": 1,
|
|
"pos": {
|
|
"row": 16,
|
|
"col": 20
|
|
}
|
|
}
|
|
}
|
|
],
|
|
"zone_bounds": {
|
|
"center": {
|
|
"row": 20,
|
|
"col": 20
|
|
},
|
|
"radius": 20,
|
|
"active": false
|
|
}
|
|
},
|
|
{
|
|
"turn": 1,
|
|
"bots": [
|
|
{
|
|
"id": 0,
|
|
"owner": 0,
|
|
"position": {
|
|
"row": 23,
|
|
"col": 20
|
|
},
|
|
"alive": true
|
|
},
|
|
{
|
|
"id": 1,
|
|
"owner": 1,
|
|
"position": {
|
|
"row": 16,
|
|
"col": 21
|
|
},
|
|
"alive": true
|
|
}
|
|
],
|
|
"cores": [
|
|
{
|
|
"position": {
|
|
"row": 24,
|
|
"col": 20
|
|
},
|
|
"owner": 0,
|
|
"active": true
|
|
},
|
|
{
|
|
"position": {
|
|
"row": 16,
|
|
"col": 20
|
|
},
|
|
"owner": 1,
|
|
"active": true
|
|
}
|
|
],
|
|
"energy": [],
|
|
"scores": [
|
|
1,
|
|
1
|
|
],
|
|
"energy_held": [
|
|
0,
|
|
0
|
|
],
|
|
"zone_bounds": {
|
|
"center": {
|
|
"row": 20,
|
|
"col": 20
|
|
},
|
|
"radius": 20,
|
|
"active": false
|
|
}
|
|
},
|
|
{
|
|
"turn": 2,
|
|
"bots": [
|
|
{
|
|
"id": 0,
|
|
"owner": 0,
|
|
"position": {
|
|
"row": 23,
|
|
"col": 21
|
|
},
|
|
"alive": true
|
|
},
|
|
{
|
|
"id": 1,
|
|
"owner": 1,
|
|
"position": {
|
|
"row": 17,
|
|
"col": 21
|
|
},
|
|
"alive": true
|
|
}
|
|
],
|
|
"cores": [
|
|
{
|
|
"position": {
|
|
"row": 24,
|
|
"col": 20
|
|
},
|
|
"owner": 0,
|
|
"active": true
|
|
},
|
|
{
|
|
"position": {
|
|
"row": 16,
|
|
"col": 20
|
|
},
|
|
"owner": 1,
|
|
"active": true
|
|
}
|
|
],
|
|
"energy": [],
|
|
"scores": [
|
|
1,
|
|
1
|
|
],
|
|
"energy_held": [
|
|
0,
|
|
0
|
|
],
|
|
"zone_bounds": {
|
|
"center": {
|
|
"row": 20,
|
|
"col": 20
|
|
},
|
|
"radius": 20,
|
|
"active": false
|
|
}
|
|
},
|
|
{
|
|
"turn": 3,
|
|
"bots": [
|
|
{
|
|
"id": 0,
|
|
"owner": 0,
|
|
"position": {
|
|
"row": 23,
|
|
"col": 20
|
|
},
|
|
"alive": true
|
|
},
|
|
{
|
|
"id": 1,
|
|
"owner": 1,
|
|
"position": {
|
|
"row": 18,
|
|
"col": 21
|
|
},
|
|
"alive": true
|
|
}
|
|
],
|
|
"cores": [
|
|
{
|
|
"position": {
|
|
"row": 24,
|
|
"col": 20
|
|
},
|
|
"owner": 0,
|
|
"active": true
|
|
},
|
|
{
|
|
"position": {
|
|
"row": 16,
|
|
"col": 20
|
|
},
|
|
"owner": 1,
|
|
"active": true
|
|
}
|
|
],
|
|
"energy": [],
|
|
"scores": [
|
|
1,
|
|
1
|
|
],
|
|
"energy_held": [
|
|
0,
|
|
0
|
|
],
|
|
"zone_bounds": {
|
|
"center": {
|
|
"row": 20,
|
|
"col": 20
|
|
},
|
|
"radius": 20,
|
|
"active": false
|
|
}
|
|
},
|
|
{
|
|
"turn": 4,
|
|
"bots": [
|
|
{
|
|
"id": 0,
|
|
"owner": 0,
|
|
"position": {
|
|
"row": 24,
|
|
"col": 20
|
|
},
|
|
"alive": true
|
|
},
|
|
{
|
|
"id": 1,
|
|
"owner": 1,
|
|
"position": {
|
|
"row": 19,
|
|
"col": 21
|
|
},
|
|
"alive": true
|
|
}
|
|
],
|
|
"cores": [
|
|
{
|
|
"position": {
|
|
"row": 24,
|
|
"col": 20
|
|
},
|
|
"owner": 0,
|
|
"active": true
|
|
},
|
|
{
|
|
"position": {
|
|
"row": 16,
|
|
"col": 20
|
|
},
|
|
"owner": 1,
|
|
"active": true
|
|
}
|
|
],
|
|
"energy": [],
|
|
"scores": [
|
|
1,
|
|
1
|
|
],
|
|
"energy_held": [
|
|
0,
|
|
0
|
|
],
|
|
"zone_bounds": {
|
|
"center": {
|
|
"row": 20,
|
|
"col": 20
|
|
},
|
|
"radius": 20,
|
|
"active": false
|
|
}
|
|
},
|
|
{
|
|
"turn": 5,
|
|
"bots": [
|
|
{
|
|
"id": 0,
|
|
"owner": 0,
|
|
"position": {
|
|
"row": 24,
|
|
"col": 19
|
|
},
|
|
"alive": true
|
|
},
|
|
{
|
|
"id": 1,
|
|
"owner": 1,
|
|
"position": {
|
|
"row": 18,
|
|
"col": 21
|
|
},
|
|
"alive": true
|
|
}
|
|
],
|
|
"cores": [
|
|
{
|
|
"position": {
|
|
"row": 24,
|
|
"col": 20
|
|
},
|
|
"owner": 0,
|
|
"active": true
|
|
},
|
|
{
|
|
"position": {
|
|
"row": 16,
|
|
"col": 20
|
|
},
|
|
"owner": 1,
|
|
"active": true
|
|
}
|
|
],
|
|
"energy": [],
|
|
"scores": [
|
|
1,
|
|
1
|
|
],
|
|
"energy_held": [
|
|
0,
|
|
0
|
|
],
|
|
"zone_bounds": {
|
|
"center": {
|
|
"row": 20,
|
|
"col": 20
|
|
},
|
|
"radius": 20,
|
|
"active": false
|
|
}
|
|
},
|
|
{
|
|
"turn": 6,
|
|
"bots": [
|
|
{
|
|
"id": 0,
|
|
"owner": 0,
|
|
"position": {
|
|
"row": 23,
|
|
"col": 19
|
|
},
|
|
"alive": false
|
|
},
|
|
{
|
|
"id": 1,
|
|
"owner": 1,
|
|
"position": {
|
|
"row": 19,
|
|
"col": 21
|
|
},
|
|
"alive": false
|
|
}
|
|
],
|
|
"cores": [
|
|
{
|
|
"position": {
|
|
"row": 24,
|
|
"col": 20
|
|
},
|
|
"owner": 0,
|
|
"active": true
|
|
},
|
|
{
|
|
"position": {
|
|
"row": 16,
|
|
"col": 20
|
|
},
|
|
"owner": 1,
|
|
"active": true
|
|
}
|
|
],
|
|
"energy": [],
|
|
"scores": [
|
|
1,
|
|
1
|
|
],
|
|
"energy_held": [
|
|
0,
|
|
0
|
|
],
|
|
"events": [
|
|
{
|
|
"type": "combat_death",
|
|
"turn": 6,
|
|
"details": {
|
|
"bot_id": 0,
|
|
"killers": [
|
|
{
|
|
"bot_id": 1,
|
|
"owner": 1,
|
|
"position": {
|
|
"row": 19,
|
|
"col": 21
|
|
}
|
|
}
|
|
],
|
|
"owner": 0,
|
|
"position": {
|
|
"row": 23,
|
|
"col": 19
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"type": "combat_death",
|
|
"turn": 6,
|
|
"details": {
|
|
"bot_id": 1,
|
|
"killers": [
|
|
{
|
|
"bot_id": 0,
|
|
"owner": 0,
|
|
"position": {
|
|
"row": 23,
|
|
"col": 19
|
|
}
|
|
}
|
|
],
|
|
"owner": 1,
|
|
"position": {
|
|
"row": 19,
|
|
"col": 21
|
|
}
|
|
}
|
|
}
|
|
],
|
|
"zone_bounds": {
|
|
"center": {
|
|
"row": 20,
|
|
"col": 20
|
|
},
|
|
"radius": 20,
|
|
"active": false
|
|
}
|
|
}
|
|
],
|
|
"win_prob": [
|
|
[
|
|
0.24,
|
|
0.24
|
|
],
|
|
[
|
|
0.4,
|
|
0.18
|
|
],
|
|
[
|
|
0.16,
|
|
0.18
|
|
],
|
|
[
|
|
0.08,
|
|
0.09
|
|
],
|
|
[
|
|
0.02,
|
|
0.08
|
|
],
|
|
[
|
|
0.03,
|
|
0.42
|
|
],
|
|
[
|
|
0,
|
|
0
|
|
]
|
|
],
|
|
"critical_moments": [
|
|
{
|
|
"turn": 1,
|
|
"delta": 0.16,
|
|
"player": 0,
|
|
"description": "Player 0 win probability rises to 16%"
|
|
},
|
|
{
|
|
"turn": 2,
|
|
"delta": -0.24,
|
|
"player": 0,
|
|
"description": "Player 0 win probability drops to 24%"
|
|
},
|
|
{
|
|
"turn": 5,
|
|
"delta": 0.34,
|
|
"player": 1,
|
|
"description": "Player 1 win probability rises to 34%"
|
|
},
|
|
{
|
|
"turn": 6,
|
|
"delta": -0.42,
|
|
"player": 1,
|
|
"description": "Player 1 win probability drops to 42%"
|
|
}
|
|
]
|
|
} |