Spaces:
Running
combat-flanking-attack: per-tier maps reinforce flanker doctrine
Browse filesReplaces the generic rush-hour-arena with three custom-built 128x48
arenas that physically reinforce what this pack measures (refuse the
frontal trade, route around the line via off-axis corridors). The
defender geometry, actor layouts, and win/fail predicates are
unchanged; the new maps add WATER obstacle walls that close near-axis
shortcuts inside the e3 Dragon range envelope and channel the flanker
through the intended FAR-flank lanes.
Map design (mapgen 'arena' generator + obstacle clusters):
* easy - combat-flanking-attack-easy 128x48 cordon 2
ONE flank lane (NORTH y=2..7). Middle band y=10..15
walled across x=10..55 so a flanker MUST climb to y=2..7
via the west connector strip x=2..9. South half y=24..45
walled across x=10..125 so south flank is unavailable.
* medium - combat-flanking-attack-medium 128x48 cordon 2
TWO flank lanes (NORTH y=2..7 + SOUTH y=40..45). Mid-
bands y=10..15 and y=25..30 walled across x=10..55 so
neither lane can be 'shortened' inside the line's range
envelope.
* hard - combat-flanking-attack-hard 128x48 cordon 2
BOTH lanes open, agent stages NORTH (y=14..17) or SOUTH
(y=23..26) per seed (spawn_point round-robin). Walls
y=8..13 and y=27..32 across x=10..55 close shallow
shortcuts; the engagement axis y=14..26 stays open so a
brute marches into the 10-e3 wall (LOSS by line
firepower), while the FAR flanks at y=2..7 or y=40..45
are the only safe bypasses (reached via west connector
strip x=2..9).
Far-east sentinel `fact` moved from (120,20) to (120,4) so it
remains placeable inside the cleared north band on every tier.
Smoke check: every level compiles with map_supported=True; all
actors in-bounds (x in [0..127], y in [0..47]).
|
Binary file (984 Bytes). View file
|
|
|
|
Binary file (983 Bytes). View file
|
|
|
|
Binary file (984 Bytes). View file
|
|
|
|
@@ -52,8 +52,30 @@
|
|
| 52 |
# 1-vs-1 instead of 1-vs-N; all 4 tanks survive, โฅ5 e3 killed.
|
| 53 |
#
|
| 54 |
# Engine guardrails (per CLAUDE.md / SCENARIO_REVIEW_CHECKLIST.md):
|
| 55 |
-
# - Map:
|
| 56 |
-
#
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 57 |
# - Persistent far-east enemy `fact` keeps the episode alive past
|
| 58 |
# the moment the line is wiped, so the win/fail evaluator sees
|
| 59 |
# the terminal frame (no DRAW collapse on enemy-unit wipe).
|
|
@@ -152,6 +174,30 @@ levels:
|
|
| 152 |
rocket soldiers at x=60. Kill three enemies, keep at least three
|
| 153 |
tanks, within about 50 turns.
|
| 154 |
overrides:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 155 |
actors:
|
| 156 |
# STRIKE FORCE โ 4 medium tanks stacked at the west edge,
|
| 157 |
# stance:1 ReturnFire so they only engage when ordered.
|
|
@@ -168,8 +214,9 @@ levels:
|
|
| 168 |
- {type: e3, owner: enemy, position: [60, 20], stance: 2}
|
| 169 |
- {type: e3, owner: enemy, position: [60, 21], stance: 2}
|
| 170 |
# Persistent far-east enemy fact โ prevents engine auto-done
|
| 171 |
-
# on enemy unit wipe collapsing the run to DRAW.
|
| 172 |
-
|
|
|
|
| 173 |
win_condition:
|
| 174 |
all_of:
|
| 175 |
- {units_killed_gte: 3}
|
|
@@ -213,6 +260,24 @@ levels:
|
|
| 213 |
Kill four enemies, keep at least three tanks, within about 50
|
| 214 |
turns.
|
| 215 |
overrides:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 216 |
actors:
|
| 217 |
- {type: 2tnk, owner: agent, position: [6, 18], stance: 1}
|
| 218 |
- {type: 2tnk, owner: agent, position: [6, 19], stance: 1}
|
|
@@ -223,14 +288,15 @@ levels:
|
|
| 223 |
# e3 within Dragon range (~5) of a tank fires on that tank.
|
| 224 |
# Frontal: lead tank at x=55..60, y=20 sits in range of
|
| 225 |
# every e3 simultaneously โ 5 rockets/turn focused on lead.
|
| 226 |
-
# Flank from y=
|
| 227 |
-
# range; only 1-2 e3 fire
|
|
|
|
| 228 |
- {type: e3, owner: enemy, position: [60, 18], stance: 2}
|
| 229 |
- {type: e3, owner: enemy, position: [60, 19], stance: 2}
|
| 230 |
- {type: e3, owner: enemy, position: [60, 20], stance: 2}
|
| 231 |
- {type: e3, owner: enemy, position: [60, 21], stance: 2}
|
| 232 |
- {type: e3, owner: enemy, position: [60, 22], stance: 2}
|
| 233 |
-
- {type: fact, owner: enemy, position: [120,
|
| 234 |
win_condition:
|
| 235 |
all_of:
|
| 236 |
- {units_killed_gte: 4}
|
|
@@ -281,6 +347,34 @@ levels:
|
|
| 281 |
stage in the north or south corridor depending on seed. Kill
|
| 282 |
five enemies, keep at least three tanks, within about 50 turns.
|
| 283 |
overrides:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 284 |
actors:
|
| 285 |
# spawn_point 0 โ NORTH staging corridor (y=14..17). Closer
|
| 286 |
# to the e3 line latitude so a frontal march MUST engage the
|
|
@@ -300,9 +394,9 @@ levels:
|
|
| 300 |
# โ every e3 in Dragon range of a tank fires on that tank.
|
| 301 |
# Frontal from either spawn enters the kill envelope of
|
| 302 |
# the entire 10-e3 wall (Manhattan โค5 to all e3 from a tank
|
| 303 |
-
# on the engagement axis at x=55..62). Flank from y=
|
| 304 |
-
# y=
|
| 305 |
-
# 1-vs-1 engagement preserves the survival bar.
|
| 306 |
- {type: e3, owner: enemy, position: [60, 17], stance: 2}
|
| 307 |
- {type: e3, owner: enemy, position: [60, 18], stance: 2}
|
| 308 |
- {type: e3, owner: enemy, position: [60, 19], stance: 2}
|
|
@@ -313,7 +407,7 @@ levels:
|
|
| 313 |
- {type: e3, owner: enemy, position: [62, 19], stance: 2}
|
| 314 |
- {type: e3, owner: enemy, position: [62, 21], stance: 2}
|
| 315 |
- {type: e3, owner: enemy, position: [62, 22], stance: 2}
|
| 316 |
-
- {type: fact, owner: enemy, position: [120,
|
| 317 |
win_condition:
|
| 318 |
all_of:
|
| 319 |
- {units_killed_gte: 5}
|
|
|
|
| 52 |
# 1-vs-1 instead of 1-vs-N; all 4 tanks survive, โฅ5 e3 killed.
|
| 53 |
#
|
| 54 |
# Engine guardrails (per CLAUDE.md / SCENARIO_REVIEW_CHECKLIST.md):
|
| 55 |
+
# - Map: per-tier custom arena (128 ร 48, cordon 2 โ playable
|
| 56 |
+
# x in [2..125], y in [2..45]) generated via mapgen's `arena`
|
| 57 |
+
# generator with WATER obstacle clusters that physically
|
| 58 |
+
# reinforce the flanker-vs-frontal doctrine:
|
| 59 |
+
# * easy โ `combat-flanking-attack-easy`: ONE flank lane
|
| 60 |
+
# (NORTH y=2..7). Middle band y=10..15 walled
|
| 61 |
+
# across x=10..55 so a flanker MUST climb to y=2..7
|
| 62 |
+
# via the west connector strip x=2..9. South half
|
| 63 |
+
# y=24..45 walled across x=10..125 so south flank
|
| 64 |
+
# is unavailable on easy.
|
| 65 |
+
# * medium โ `combat-flanking-attack-medium`: TWO flank lanes
|
| 66 |
+
# (NORTH y=2..7 + SOUTH y=40..45). Mid-bands
|
| 67 |
+
# y=10..15 and y=25..30 walled across x=10..55 so
|
| 68 |
+
# neither lane can be "shortened" inside the line's
|
| 69 |
+
# Dragon range envelope.
|
| 70 |
+
# * hard โ `combat-flanking-attack-hard`: BOTH lanes open,
|
| 71 |
+
# agent stages NORTH (y=14..17) or SOUTH (y=23..26)
|
| 72 |
+
# per seed. Walls y=8..13 and y=27..32 across
|
| 73 |
+
# x=10..55 close shallow shortcuts; the engagement
|
| 74 |
+
# axis y=14..26 stays open so a brute marches into
|
| 75 |
+
# the 10-e3 wall (LOSS), while the FAR flanks at
|
| 76 |
+
# y=2..7 or y=40..45 are the only safe bypasses
|
| 77 |
+
# (reached via west connector strip x=2..9).
|
| 78 |
+
# Strike force at x=6; enemy line at x=60.
|
| 79 |
# - Persistent far-east enemy `fact` keeps the episode alive past
|
| 80 |
# the moment the line is wiped, so the win/fail evaluator sees
|
| 81 |
# the terminal frame (no DRAW collapse on enemy-unit wipe).
|
|
|
|
| 174 |
rocket soldiers at x=60. Kill three enemies, keep at least three
|
| 175 |
tanks, within about 50 turns.
|
| 176 |
overrides:
|
| 177 |
+
# EASY MAP โ 128x48 arena (cordon 2 -> playable x in [2..125],
|
| 178 |
+
# y in [2..45]). ONE obvious flank corridor (NORTH y=2..7).
|
| 179 |
+
# Middle band y=10..15 walled across x=10..55 so a flanker
|
| 180 |
+
# climbing from the west stage at y=18..21 cannot "shortcut"
|
| 181 |
+
# close to the line; it must reach y=2..7 via the west
|
| 182 |
+
# connector strip x=2..9 (cordon-side, always clear). South
|
| 183 |
+
# half y=24..45 walled across x=10..55 so the south flank is
|
| 184 |
+
# impossible (easy tier teaches single-corridor recognition).
|
| 185 |
+
base_map:
|
| 186 |
+
generator: arena
|
| 187 |
+
name: combat-flanking-attack-easy
|
| 188 |
+
width: 128
|
| 189 |
+
height: 48
|
| 190 |
+
cordon: 2
|
| 191 |
+
title: 'Flanking-Attack โ Easy (North Lane Only)'
|
| 192 |
+
obstacles:
|
| 193 |
+
# North middle wall โ closes y=10..15 across x=10..55.
|
| 194 |
+
- {x: 10, y: 10, w: 46, h: 6}
|
| 195 |
+
# South wall โ closes y=24..45 across x=10..125 so a south
|
| 196 |
+
# flank is unavailable on easy. (West strip x=2..9 stays
|
| 197 |
+
# clear; engagement strip x=56..125 also stays clear so
|
| 198 |
+
# the flanker can drive east on y=2..7 past the line and
|
| 199 |
+
# descend.)
|
| 200 |
+
- {x: 10, y: 24, w: 116, h: 22}
|
| 201 |
actors:
|
| 202 |
# STRIKE FORCE โ 4 medium tanks stacked at the west edge,
|
| 203 |
# stance:1 ReturnFire so they only engage when ordered.
|
|
|
|
| 214 |
- {type: e3, owner: enemy, position: [60, 20], stance: 2}
|
| 215 |
- {type: e3, owner: enemy, position: [60, 21], stance: 2}
|
| 216 |
# Persistent far-east enemy fact โ prevents engine auto-done
|
| 217 |
+
# on enemy unit wipe collapsing the run to DRAW. Placed at
|
| 218 |
+
# y=4 inside the cleared north band so it remains placeable.
|
| 219 |
+
- {type: fact, owner: enemy, position: [120, 4]}
|
| 220 |
win_condition:
|
| 221 |
all_of:
|
| 222 |
- {units_killed_gte: 3}
|
|
|
|
| 260 |
Kill four enemies, keep at least three tanks, within about 50
|
| 261 |
turns.
|
| 262 |
overrides:
|
| 263 |
+
# MEDIUM MAP โ 128x48 arena (cordon 2 -> playable x in [2..125],
|
| 264 |
+
# y in [2..45]). TWO flank corridors (NORTH y=2..7 + SOUTH
|
| 265 |
+
# y=40..45). Mid-bands y=10..15 and y=25..30 walled across
|
| 266 |
+
# x=10..55 so neither lane can be "shortened" by cutting
|
| 267 |
+
# close to the line (cutting at y=12 or y=28 would put the
|
| 268 |
+
# tank inside Dragon range of the e3 wall).
|
| 269 |
+
base_map:
|
| 270 |
+
generator: arena
|
| 271 |
+
name: combat-flanking-attack-medium
|
| 272 |
+
width: 128
|
| 273 |
+
height: 48
|
| 274 |
+
cordon: 2
|
| 275 |
+
title: 'Flanking-Attack โ Medium (Two Flank Lanes)'
|
| 276 |
+
obstacles:
|
| 277 |
+
# North middle wall โ closes y=10..15 across x=10..55.
|
| 278 |
+
- {x: 10, y: 10, w: 46, h: 6}
|
| 279 |
+
# South middle wall โ closes y=25..30 across x=10..55.
|
| 280 |
+
- {x: 10, y: 25, w: 46, h: 6}
|
| 281 |
actors:
|
| 282 |
- {type: 2tnk, owner: agent, position: [6, 18], stance: 1}
|
| 283 |
- {type: 2tnk, owner: agent, position: [6, 19], stance: 1}
|
|
|
|
| 288 |
# e3 within Dragon range (~5) of a tank fires on that tank.
|
| 289 |
# Frontal: lead tank at x=55..60, y=20 sits in range of
|
| 290 |
# every e3 simultaneously โ 5 rockets/turn focused on lead.
|
| 291 |
+
# Flank from y=2..7 (north lane) or y=40..45 (south lane)
|
| 292 |
+
# keeps all but the edge e3 out of range; only 1-2 e3 fire
|
| 293 |
+
# on the leading flanker at a time.
|
| 294 |
- {type: e3, owner: enemy, position: [60, 18], stance: 2}
|
| 295 |
- {type: e3, owner: enemy, position: [60, 19], stance: 2}
|
| 296 |
- {type: e3, owner: enemy, position: [60, 20], stance: 2}
|
| 297 |
- {type: e3, owner: enemy, position: [60, 21], stance: 2}
|
| 298 |
- {type: e3, owner: enemy, position: [60, 22], stance: 2}
|
| 299 |
+
- {type: fact, owner: enemy, position: [120, 4]}
|
| 300 |
win_condition:
|
| 301 |
all_of:
|
| 302 |
- {units_killed_gte: 4}
|
|
|
|
| 347 |
stage in the north or south corridor depending on seed. Kill
|
| 348 |
five enemies, keep at least three tanks, within about 50 turns.
|
| 349 |
overrides:
|
| 350 |
+
# HARD MAP โ 128x48 arena (cordon 2 -> playable y in [2..45]).
|
| 351 |
+
# BOTH flank corridors open (NORTH y=2..7 + SOUTH y=40..45),
|
| 352 |
+
# but the agent stages NORTH (y=14..17) or SOUTH (y=23..26)
|
| 353 |
+
# per seed. Walls y=8..13 and y=27..32 across x=10..55 close
|
| 354 |
+
# the shallow shortcuts that would otherwise let a tank
|
| 355 |
+
# diagonally cut close to the line at lower attrition. The
|
| 356 |
+
# engagement axis y=14..26 stays clear so a brute attack_move
|
| 357 |
+
# east still funnels into the line's kill envelope (LOSS),
|
| 358 |
+
# while the only safe bypass routes are the FAR flanks
|
| 359 |
+
# y=2..7 (north spawn) or y=40..45 (south spawn) reached via
|
| 360 |
+
# the west connector strip x=2..9 (cordon-side, always
|
| 361 |
+
# clear).
|
| 362 |
+
base_map:
|
| 363 |
+
generator: arena
|
| 364 |
+
name: combat-flanking-attack-hard
|
| 365 |
+
width: 128
|
| 366 |
+
height: 48
|
| 367 |
+
cordon: 2
|
| 368 |
+
title: 'Flanking-Attack โ Hard (Spawn-Varied Flank)'
|
| 369 |
+
obstacles:
|
| 370 |
+
# North middle wall โ closes y=8..13 across x=10..55. y=14
|
| 371 |
+
# stays clear so the NORTH staging corridor (y=14..17) is
|
| 372 |
+
# not isolated from the west connector x=2..9.
|
| 373 |
+
- {x: 10, y: 8, w: 46, h: 6}
|
| 374 |
+
# South middle wall โ closes y=27..32 across x=10..55. y=26
|
| 375 |
+
# stays clear so the SOUTH staging corridor (y=23..26) is
|
| 376 |
+
# not isolated from the west connector x=2..9.
|
| 377 |
+
- {x: 10, y: 27, w: 46, h: 6}
|
| 378 |
actors:
|
| 379 |
# spawn_point 0 โ NORTH staging corridor (y=14..17). Closer
|
| 380 |
# to the e3 line latitude so a frontal march MUST engage the
|
|
|
|
| 394 |
# โ every e3 in Dragon range of a tank fires on that tank.
|
| 395 |
# Frontal from either spawn enters the kill envelope of
|
| 396 |
# the entire 10-e3 wall (Manhattan โค5 to all e3 from a tank
|
| 397 |
+
# on the engagement axis at x=55..62). Flank from y=2..7 or
|
| 398 |
+
# y=40..45 keeps all but the edge e3 out of range โ
|
| 399 |
+
# sequenced 1-vs-1 engagement preserves the survival bar.
|
| 400 |
- {type: e3, owner: enemy, position: [60, 17], stance: 2}
|
| 401 |
- {type: e3, owner: enemy, position: [60, 18], stance: 2}
|
| 402 |
- {type: e3, owner: enemy, position: [60, 19], stance: 2}
|
|
|
|
| 407 |
- {type: e3, owner: enemy, position: [62, 19], stance: 2}
|
| 408 |
- {type: e3, owner: enemy, position: [62, 21], stance: 2}
|
| 409 |
- {type: e3, owner: enemy, position: [62, 22], stance: 2}
|
| 410 |
+
- {type: fact, owner: enemy, position: [120, 4]}
|
| 411 |
win_condition:
|
| 412 |
all_of:
|
| 413 |
- {units_killed_gte: 5}
|