yxc20098 commited on
Commit
1cc2d87
·
1 Parent(s): 7f3e1be

fix(scenario): action-multiunit-coordination — HoldFire agent units after engine movement fixes

Browse files

The 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
- - {type: 2tnk, owner: agent, position: [5, 6], count: 3}
41
- - {type: 1tnk, owner: agent, position: [7, 10], count: 3}
 
 
 
 
 
 
 
 
 
 
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
- - {type: 2tnk, owner: agent, position: [5, 6], count: 3}
82
- - {type: 1tnk, owner: agent, position: [7, 10], count: 3}
 
 
 
 
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
- - {type: 2tnk, owner: agent, position: [5, 6], count: 3}
138
- - {type: 1tnk, owner: agent, position: [7, 10], count: 3}
 
 
 
 
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