yxc20098 commited on
Commit
b3ebc0e
·
1 Parent(s): 466f040

Hard-tier curation: Art-of-War quartet

Browse files

Each hard tier gets a seed-chosen second spawn_point group, designed
to PRESERVE the spatial puzzle from both anchors:
- decoy-sacrifice / lure-the-tiger / sequenced-citadel: same
main(+bait) formation y-shifted; enemy/objective fixed so the
bait/lure/ordering puzzle holds from either start
- indirect-approach: gun line split across BOTH spawn corridors so
the short route stays lethal regardless of seed (detour-only,
zero-loss property preserved)
fail_conditions already present. UPGRADED += 4 artofwar; live
seed→distinct-start passes; existing ordering-property tests intact.

openra_bench/scenarios/packs/artofwar-decoy-sacrifice.yaml CHANGED
@@ -95,9 +95,13 @@ levels:
95
  hard:
96
  description: >
97
  The main body must arrive nearly intact (loss cap) — only the
98
- bait may be spent, not the army.
 
 
 
99
  overrides:
100
  actors:
 
101
  - type: 2tnk
102
  owner: agent
103
  position: [6, 22]
@@ -105,6 +109,9 @@ levels:
105
  health: 100
106
  facing: -1
107
  count: 3
 
 
 
108
  - type: jeep
109
  owner: agent
110
  position: [6, 30]
@@ -112,6 +119,26 @@ levels:
112
  health: 100
113
  facing: -1
114
  count: 2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
115
  - type: e1
116
  owner: enemy
117
  position: [40, 24]
 
95
  hard:
96
  description: >
97
  The main body must arrive nearly intact (loss cap) — only the
98
+ bait may be spent. The force stages from a seed-chosen latitude
99
+ (two spawn_point groups, same main+bait formation) so the decoy
100
+ line that works can't be memorised; guards sit on the objective
101
+ beyond initial sight.
102
  overrides:
103
  actors:
104
+ # spawn_point 0 — northern staging
105
  - type: 2tnk
106
  owner: agent
107
  position: [6, 22]
 
109
  health: 100
110
  facing: -1
111
  count: 3
112
+ spawn_point: 0
113
+ randomize:
114
+ position: {base: [6, 22], offset: 3}
115
  - type: jeep
116
  owner: agent
117
  position: [6, 30]
 
119
  health: 100
120
  facing: -1
121
  count: 2
122
+ spawn_point: 0
123
+ # spawn_point 1 — southern staging (same formation, shifted)
124
+ - type: 2tnk
125
+ owner: agent
126
+ position: [6, 40]
127
+ stance: 3
128
+ health: 100
129
+ facing: -1
130
+ count: 3
131
+ spawn_point: 1
132
+ randomize:
133
+ position: {base: [6, 40], offset: 3}
134
+ - type: jeep
135
+ owner: agent
136
+ position: [6, 48]
137
+ stance: 3
138
+ health: 100
139
+ facing: -1
140
+ count: 2
141
+ spawn_point: 1
142
  - type: e1
143
  owner: enemy
144
  position: [40, 24]
openra_bench/scenarios/packs/artofwar-indirect-approach.yaml CHANGED
@@ -79,9 +79,14 @@ levels:
79
  own_units_gte: 1
80
  max_turns: 90
81
  hard:
82
- description: 'Zero-loss traversal: the indirect route must be exact.'
 
 
 
 
83
  overrides:
84
  actors:
 
85
  - type: 1tnk
86
  owner: agent
87
  position: [6, 26]
@@ -89,13 +94,36 @@ levels:
89
  health: 100
90
  facing: -1
91
  count: 3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
92
  - type: e1
93
  owner: enemy
94
  position: [22, 26]
95
  stance: 3
96
  health: 100
97
  facing: -1
98
- count: 10
 
 
 
 
 
 
 
99
  win_condition:
100
  all_of:
101
  - all_units_in_region: {x: 46, y: 26, radius: 4}
 
79
  own_units_gte: 1
80
  max_turns: 90
81
  hard:
82
+ description: >
83
+ Zero-loss traversal, seed-chosen start latitude. Two spawn_point
84
+ groups (y26 / y34); the gun line is split to span BOTH corridors
85
+ so the short route is lethal from either start — the safe detour
86
+ differs by seed and can't be memorised.
87
  overrides:
88
  actors:
89
+ # spawn_point 0 — northern start
90
  - type: 1tnk
91
  owner: agent
92
  position: [6, 26]
 
94
  health: 100
95
  facing: -1
96
  count: 3
97
+ spawn_point: 0
98
+ randomize:
99
+ position: {base: [6, 26], offset: 2}
100
+ # spawn_point 1 — southern start
101
+ - type: 1tnk
102
+ owner: agent
103
+ position: [6, 34]
104
+ stance: 3
105
+ health: 100
106
+ facing: -1
107
+ count: 3
108
+ spawn_point: 1
109
+ randomize:
110
+ position: {base: [6, 34], offset: 2}
111
+ # gun line split across BOTH spawn corridors (short route
112
+ # lethal regardless of seed → detour is the only zero-loss path)
113
  - type: e1
114
  owner: enemy
115
  position: [22, 26]
116
  stance: 3
117
  health: 100
118
  facing: -1
119
+ count: 5
120
+ - type: e1
121
+ owner: enemy
122
+ position: [22, 34]
123
+ stance: 3
124
+ health: 100
125
+ facing: -1
126
+ count: 5
127
  win_condition:
128
  all_of:
129
  - all_units_in_region: {x: 46, y: 26, radius: 4}
openra_bench/scenarios/packs/artofwar-lure-the-tiger.yaml CHANGED
@@ -91,9 +91,14 @@ levels:
91
  own_units_gte: 1
92
  max_turns: 85
93
  hard:
94
- description: 'Loss-capped: the bait may die, the main force may not.'
 
 
 
 
95
  overrides:
96
  actors:
 
97
  - type: 2tnk
98
  owner: agent
99
  position: [6, 24]
@@ -101,6 +106,9 @@ levels:
101
  health: 100
102
  facing: -1
103
  count: 3
 
 
 
104
  - type: jeep
105
  owner: agent
106
  position: [6, 16]
@@ -108,6 +116,26 @@ levels:
108
  health: 100
109
  facing: -1
110
  count: 1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
111
  - type: 3tnk
112
  owner: enemy
113
  position: [26, 24]
 
91
  own_units_gte: 1
92
  max_turns: 85
93
  hard:
94
+ description: >
95
+ Loss-capped: the bait may die, the main force may not. Force
96
+ stages from a seed-chosen latitude (two spawn_point groups, same
97
+ main+lure formation) — the lure path that works can't be
98
+ memorised. The tiger blocks the lane beyond initial sight.
99
  overrides:
100
  actors:
101
+ # spawn_point 0 — northern staging
102
  - type: 2tnk
103
  owner: agent
104
  position: [6, 24]
 
106
  health: 100
107
  facing: -1
108
  count: 3
109
+ spawn_point: 0
110
+ randomize:
111
+ position: {base: [6, 24], offset: 3}
112
  - type: jeep
113
  owner: agent
114
  position: [6, 16]
 
116
  health: 100
117
  facing: -1
118
  count: 1
119
+ spawn_point: 0
120
+ # spawn_point 1 — southern staging
121
+ - type: 2tnk
122
+ owner: agent
123
+ position: [6, 40]
124
+ stance: 3
125
+ health: 100
126
+ facing: -1
127
+ count: 3
128
+ spawn_point: 1
129
+ randomize:
130
+ position: {base: [6, 40], offset: 3}
131
+ - type: jeep
132
+ owner: agent
133
+ position: [6, 32]
134
+ stance: 3
135
+ health: 100
136
+ facing: -1
137
+ count: 1
138
+ spawn_point: 1
139
  - type: 3tnk
140
  owner: enemy
141
  position: [26, 24]
openra_bench/scenarios/packs/artofwar-sequenced-citadel.yaml CHANGED
@@ -69,6 +69,7 @@ levels:
69
  tick band, with the force near-intact.
70
  overrides:
71
  actors:
 
72
  - type: 2tnk
73
  owner: agent
74
  position: [6, 20]
@@ -76,6 +77,21 @@ levels:
76
  health: 100
77
  facing: -1
78
  count: 3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
79
  - type: e1
80
  owner: enemy
81
  position: [44, 20]
 
69
  tick band, with the force near-intact.
70
  overrides:
71
  actors:
72
+ # spawn_point 0 — northern staging
73
  - type: 2tnk
74
  owner: agent
75
  position: [6, 20]
 
77
  health: 100
78
  facing: -1
79
  count: 3
80
+ spawn_point: 0
81
+ randomize:
82
+ position: {base: [6, 20], offset: 3}
83
+ # spawn_point 1 — southern staging (same ordered task,
84
+ # different approach latitude — seed-chosen)
85
+ - type: 2tnk
86
+ owner: agent
87
+ position: [6, 36]
88
+ stance: 3
89
+ health: 100
90
+ facing: -1
91
+ count: 3
92
+ spawn_point: 1
93
+ randomize:
94
+ position: {base: [6, 36], offset: 3}
95
  - type: e1
96
  owner: enemy
97
  position: [44, 20]
tests/test_hard_tier.py CHANGED
@@ -27,6 +27,10 @@ UPGRADED = [
27
  "adversarial-duel",
28
  "adversarial-skirmish",
29
  "adversarial-siege",
 
 
 
 
30
  ]
31
 
32
 
 
27
  "adversarial-duel",
28
  "adversarial-skirmish",
29
  "adversarial-siege",
30
+ "artofwar-decoy-sacrifice",
31
+ "artofwar-indirect-approach",
32
+ "artofwar-lure-the-tiger",
33
+ "artofwar-sequenced-citadel",
34
  ]
35
 
36