The empty steppe
The land war's bug report was one line: “something is off — maybe too many hills, too high? I can never find enemies.” Both instincts were half right, and the whole truth was worse: the theater's constants were tuned for a battlefield that didn't exist. This is the pass that put a fight back on the steppe.
Measure before you tune
Before touching a constant we did what the fleet got in its balance pass: ran the whole theater headless and let the numbers talk. A probe steps a full AI-only match server-side and logs a terrain census, sightline lengths, bot movement, spotting time, shots, and kills. The before picture was damning. On a twelve-kilometre map, eight AI hulls fired 28 main-gun rounds in ten minutes and scored one kill. The first shell didn't land until 2½ minutes in. One round ended 583–0 — a cap race in which the losing team never contested a single zone. And a simulated player driving flat-out from spawn took nearly two minutes before their own eyes ever crossed an enemy.
The terrain census explained why. The median sightline at tank-eye height was 500 m, and a quarter of them broke inside 200 m — against spotting ranges of 1,500–1,700 m and engagement bands out to 3,200 m. Hill masses, a metre-scale micro-fold field, and 19% forest cover chopped the “long grassy sightlines” the theater was designed around into a maze of blind folds. Contacts flickered into the enemy's snapshot for a heartbeat and vanished before anyone could lay a gun. The war wasn't unbalanced; it physically couldn't happen.
A steppe you can fight across
The fixes go after every link in that chain. The map shrinks from a 6 km radius to 3.6 km — gun duels still live at 1–3 km, but the drive to the fight drops under a minute. The hill masses thin out and come down (~60 m crests instead of ~80), the micro-terrain keeps its hull-down folds but stops masking every mid-range lane, and the forest is cut to ~10% cover — treelines that read as walls and ambush cover, not a labyrinth. Each team also fields six AI hulls instead of four, and fresh spawns start closer to the action.
Spotting gets the change you feel most: a contact now stays lit for five seconds after the sightline breaks. The steppe's folds still cut LOS every few hull-lengths — that's the terrain doing its job — but a tank ducking through a dip no longer strobes in and out of existence on your screen faster than you can traverse.
An AI that brings the fight
Two doctrine bugs kept the AI from making battles even when it could see. First, each team's assault line was hard-assigned to the centre town — forever. If the enemy took the villages, the line camped its crossroads while the score ran away; that's the 583–0. The line now marches on the nearest enemy-held or contested zone and only garrisons the centre when there's nothing to take back — which also means the fights happen at the objectives players are already driving toward. Second, two Paladins that met nose-to-nose would park hull-to-hull and shatter rounds off each other's glacis for three minutes straight, because neither gun beats the other's front plate and the brain only knew how to halt and shoot. Close against armor it can't defeat head-on, the AI now circles for the side plate — the same dance the armor model has been trying to teach everyone.
The probe's after picture: first blood at 71 seconds, ten kills a round, an enemy spotted somewhere on the map 96% of the time, rounds that end 546–432 instead of a shutout — and the shatter spam gone from the hit ledger, replaced by flank penetrations.
The silent zero
One more find from driving the real client in a headless browser: hold W into a treeline and the game told you nothing. The hull sat at 0 km/h, throttle pegged, engine happy, forever — our test tank ground against a forest block for ninety straight seconds. Land hulls now get the naval grounding treatment: a couple of seconds of ordered-forward-but-not-moving and the banner calls it — HULL BLOCKED — BACK UP (S) AND STEER AROUND. (The first version of that banner compared seconds to milliseconds and would have fired after twenty minutes; the headless playtest caught that too, which is exactly why we test the game and not the diff.)
The probe now lives in the tree gated behind
LAND_PROBE=1, next to the fleet's, so the next
“something feels off” starts with numbers instead of
vibes.