Last night I ran a hundred and twenty AI-against-AI matches on the Fallen Frontier: thirty minutes each, mirror factions, both seats, ten seeds. I expected a dull result, and the Consortium gave me one: Brutal beats Hard beats Normal, in order. Then the League’s numbers came in. Its Brutal had lost to its own Normal, two matches to sixteen. I sat and looked at that line for a long time. That is not a balance problem. That is Brutal doing something wrong, and I wrote it.
League militia. Cinematic art.What each level actually does
Before I could find the fault I had to lay the levels side by side, which, I admit, I had never properly done. Each level starts from the one before it and changes a few rules. Easy attacks at three minutes with waves of six, keeps forty units at most, and runs four harvesters. Normal attacks earlier, only when it is stronger, counters the enemy’s armour, retreats, guards its fields and repairs. Hard drops the army limit, runs nine harvesters plus six more while they pay for themselves, gathers its waves before striking, and sends a squad to hunt the enemy’s harvesters. Brutal adds a second front, fortifies when rich, scans before attacking, builds super-units from minute ten, and wants ten harvesters plus eight more.
All levels see through the fog. That is the one rule the levels share, and the one I like least. It is on the list.
Why the League’s Brutal collapsed
It took most of the evening to see, and then it was three causes, each feeding the next. First, its harvesters died. Brutal wanted so many that they spread to the far fields, and the League’s harvester is a slow, unarmed crawler. Normal’s army, which guards its own fields, caught them out there. Brutal built sixteen and a half crawlers a match and lost fifteen. The Consortium’s harvester is a flying drone, so the same rules cost it almost nothing. That is the whole asymmetry in one line, and I had been looking past it for weeks.
Second, its factory never built tanks. Crawlers come from the same building as the tanks, and a lost harvester is always replaced first. Every crawler rebuilt was a tank not built: six against Normal’s seventeen. Its army was infantry, and Normal’s autocannon trucks mowed it down.
Third, it kept pulling its army home. With harvesters under attack all over the map, the guard rule called the army back eleven times a match. Waves broke up, and the timed waves went out anyway, because the strength check only holds back the big ones. By the time I understood that one I was almost fond of it. Brutal was not being stupid. It was doing exactly what I had told it, for a faction I had never told it about.
The fix, measured the same way
Two changes, small enough that I did not trust them. Harvesters that fit the faction: the League’s Brutal keeps Hard’s numbers and only sends extra harvesters to fields inside its defended area. And a factory that keeps building tanks: after the opening rush, at most every other job is a harvester, and the super-units wait until some tanks are standing.
Then the same hundred and twenty matches again, the same night, because I would not have slept otherwise. League Brutal against League Normal went from two to sixteen to nineteen to nothing. The Consortium’s results did not move. The order holds for both factions now.
What it taught me
The uncomfortable part is why it happened. I wrote the rules for an abstract faction, and the Consortium happened to fit them. The League is a different shape, and a difficulty level has to know that. It is also the best argument I have for one AI that thinks in roles rather than names: it can be told that this faction’s harvester is slow, and act on it. I would much rather learn that from a night of matches than from a review.

