Spaces:
Running
Running
fix(scenario): action-multiunit-coordination — HoldFire agent units after engine movement fixes
Browse filesThe engine movement fixes made a default-stance unit auto-hunt the
nearest visible enemy, so an idle/observe-only policy self-delivered
the force across the map, destroyed the marker buildings and
triggered an enemy-elimination auto-done DRAW before the timeout fail
could bite on medium/hard. Setting the agent units to stance:0
(HoldFire) restores 'units only move when explicitly ordered': a
stall is now a real reachable timeout LOSS and the split capability
stays load-bearing. Recovers tests/test_units_in_region.py.
openra_bench/scenarios/packs/action-multiunit-coordination.yaml
CHANGED
|
@@ -36,9 +36,19 @@ base:
|
|
| 36 |
termination: {max_ticks: 8000}
|
| 37 |
actors:
|
| 38 |
# Two agent groups in the spawn corner (x < 25) that must be split
|
| 39 |
-
# and driven to separate regions at the same time.
|
| 40 |
-
|
| 41 |
-
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 42 |
# Static enemy buildings mark the destination regions.
|
| 43 |
- {type: fact, owner: enemy, position: [110, 6]}
|
| 44 |
- {type: proc, owner: enemy, position: [110, 33]}
|
|
@@ -78,13 +88,17 @@ levels:
|
|
| 78 |
lanes; the bottom-left route is clear.
|
| 79 |
overrides:
|
| 80 |
actors:
|
| 81 |
-
|
| 82 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 83 |
# Jeeps staged at y=24 (south of centre) so the SE-bound
|
| 84 |
# column does NOT route past the NE picket at y=8 — at y=14
|
| 85 |
# the fragile jeeps were attrited to death before reaching
|
| 86 |
# the SE region, making the 3/3/2 split unsolvable.
|
| 87 |
-
- {type: jeep, owner: agent, position: [5, 24], count: 2}
|
| 88 |
- {type: fact, owner: enemy, position: [115, 6]} # NE corner
|
| 89 |
- {type: proc, owner: enemy, position: [115, 34]} # SE corner
|
| 90 |
- {type: powr, owner: enemy, position: [20, 36]} # bottom-left
|
|
@@ -134,13 +148,17 @@ levels:
|
|
| 134 |
# the coordinate-blind agent the position feedback it needs.
|
| 135 |
enemy_building_spotted: true
|
| 136 |
actors:
|
| 137 |
-
|
| 138 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 139 |
# Jeeps staged at y=24 (south of centre) so the SE-bound
|
| 140 |
# column does NOT route past the NE picket at y=8 — at y=14
|
| 141 |
# the fragile jeeps were attrited to death before reaching
|
| 142 |
# the SE region, making the 3/3/2 split unsolvable.
|
| 143 |
-
- {type: jeep, owner: agent, position: [5, 24], count: 2}
|
| 144 |
- {type: fact, owner: enemy, position: [115, 6]} # NE corner
|
| 145 |
- {type: proc, owner: enemy, position: [115, 34]} # SE corner
|
| 146 |
- {type: powr, owner: enemy, position: [20, 36]} # bottom-left
|
|
|
|
| 36 |
termination: {max_ticks: 8000}
|
| 37 |
actors:
|
| 38 |
# Two agent groups in the spawn corner (x < 25) that must be split
|
| 39 |
+
# and driven to separate regions at the same time. `stance: 0`
|
| 40 |
+
# (HoldFire) is load-bearing: after the engine movement fixes a
|
| 41 |
+
# default-stance unit auto-HUNTS the nearest visible enemy
|
| 42 |
+
# (stance:3 AttackAnything path), so an idle/observe-only policy
|
| 43 |
+
# would self-deliver the force across the map, destroy the
|
| 44 |
+
# marker buildings and trigger an enemy-elimination auto-`done`
|
| 45 |
+
# DRAW before the timeout fail can bite (and risk a
|
| 46 |
+
# laziest-play-wins inversion). HoldFire units only move when
|
| 47 |
+
# the agent explicitly orders `move_units`, so a stall is a real
|
| 48 |
+
# reachable timeout LOSS and the split capability stays
|
| 49 |
+
# load-bearing.
|
| 50 |
+
- {type: 2tnk, owner: agent, position: [5, 6], count: 3, stance: 0}
|
| 51 |
+
- {type: 1tnk, owner: agent, position: [7, 10], count: 3, stance: 0}
|
| 52 |
# Static enemy buildings mark the destination regions.
|
| 53 |
- {type: fact, owner: enemy, position: [110, 6]}
|
| 54 |
- {type: proc, owner: enemy, position: [110, 33]}
|
|
|
|
| 88 |
lanes; the bottom-left route is clear.
|
| 89 |
overrides:
|
| 90 |
actors:
|
| 91 |
+
# `stance: 0` (HoldFire) on every agent unit — see the base
|
| 92 |
+
# `actors` note: a default-stance unit auto-hunts after the
|
| 93 |
+
# engine movement fixes, self-delivering the force and
|
| 94 |
+
# collapsing a stall to an auto-`done` DRAW.
|
| 95 |
+
- {type: 2tnk, owner: agent, position: [5, 6], count: 3, stance: 0}
|
| 96 |
+
- {type: 1tnk, owner: agent, position: [7, 10], count: 3, stance: 0}
|
| 97 |
# Jeeps staged at y=24 (south of centre) so the SE-bound
|
| 98 |
# column does NOT route past the NE picket at y=8 — at y=14
|
| 99 |
# the fragile jeeps were attrited to death before reaching
|
| 100 |
# the SE region, making the 3/3/2 split unsolvable.
|
| 101 |
+
- {type: jeep, owner: agent, position: [5, 24], count: 2, stance: 0}
|
| 102 |
- {type: fact, owner: enemy, position: [115, 6]} # NE corner
|
| 103 |
- {type: proc, owner: enemy, position: [115, 34]} # SE corner
|
| 104 |
- {type: powr, owner: enemy, position: [20, 36]} # bottom-left
|
|
|
|
| 148 |
# the coordinate-blind agent the position feedback it needs.
|
| 149 |
enemy_building_spotted: true
|
| 150 |
actors:
|
| 151 |
+
# `stance: 0` (HoldFire) on every agent unit — see the base
|
| 152 |
+
# `actors` note: a default-stance unit auto-hunts after the
|
| 153 |
+
# engine movement fixes, self-delivering the force and
|
| 154 |
+
# collapsing a stall to an auto-`done` DRAW.
|
| 155 |
+
- {type: 2tnk, owner: agent, position: [5, 6], count: 3, stance: 0}
|
| 156 |
+
- {type: 1tnk, owner: agent, position: [7, 10], count: 3, stance: 0}
|
| 157 |
# Jeeps staged at y=24 (south of centre) so the SE-bound
|
| 158 |
# column does NOT route past the NE picket at y=8 — at y=14
|
| 159 |
# the fragile jeeps were attrited to death before reaching
|
| 160 |
# the SE region, making the 3/3/2 split unsolvable.
|
| 161 |
+
- {type: jeep, owner: agent, position: [5, 24], count: 2, stance: 0}
|
| 162 |
- {type: fact, owner: enemy, position: [115, 6]} # NE corner
|
| 163 |
- {type: proc, owner: enemy, position: [115, 34]} # SE corner
|
| 164 |
- {type: powr, owner: enemy, position: [20, 36]} # bottom-left
|