← Devlog

I made three overpowered towers. The bot didn't even notice.

Three buff towers that boost their neighbours' fire-rate, damage, and range — dropped into a 100-level campaign tuned to 'just barely finish.' Free power should've wrecked the curve. It didn't, and the reason is a piece of economics worth stealing for your own game.

June 25, 2026 devlogbalancetowers

The ask was simple. “Cooling-tower-style supports — but instead of bleeding off heat, they boost the guys next to them. Fire-rate, damage, range.” Then, in the same breath: “don’t overdo it, it might screw level balancing again.”

That parenthetical is the whole story. Building the towers was an afternoon. Not breaking the game with them took two tries and a piece of economics I should’ve seen coming.

Why free power is a problem

Overserved has a hundred campaign levels, and I don’t tune them by hand — that’s a hundred wave tables and economy curves, no human has the patience. Instead a headless bot drives it: a stripped-down autoplayer that plays each level for real, no graphics, makes actual placement and upgrade decisions. I fit the wave and money numbers until that optimal run lands barely in the green — a couple of lives to spare, not fifty. The whole campaign is balanced on that knife’s edge on purpose; “just barely finishable” is the difficulty.

A knife’s edge is exactly what makes a campaign fragile to free power. When the optimal run clears with two lives left, you don’t need much of a tailwind to turn a hard-fought level into a walkover — and free power is a tailwind on every level at once. A tower that hands its neighbours +22% fire-rate for no trade-off shifts the whole curve down. Add three buildings, re-fit a hundred levels. No thanks.

Try one: tiny and timid

So I built them scared. Radius 1.5 — small. Buffs at a meek +10%, half the reach of the existing cooling aura. I wired them up, taught the bot to place them on the spot that covered the most serve towers, and ran an A/B sim: same levels, buffs on versus buffs off, across three worlds.

The results were identical. 82 lives kept versus 82, 36 versus 36, 94 versus 94, level after level. One was even slightly worse with the towers turned on.

Balance-safe! Except I went and looked at why the numbers didn’t move, and the answer gutted my approach. The bot barely placed any of them. It wins by spreading serve towers along the path for coverage — it almost never parks two close enough for a 1.5 aura to touch both. A buff that small had nothing to buff.

The towers weren’t safe. They were useless. And on an A/B chart those produce the identical flat line — “didn’t change the difficulty” and “isn’t worth building” are the same zero. Safety had never been the thing I was measuring.

The turn

Then it clicked, and like most balance insights it’s obvious in hindsight.

For an optimal player a buff tower isn’t free power — it’s a trade. Both the buff and a serve tower cost 130 gold and compete for the same thing: the next 130 in your wallet, and a tile on the board. So the real question the bot answers every time is “does 130 buy more board impact as one more attacker, or as a +22% multiplier on the attackers I already have?” When it places towers spread out, an aura touches maybe one of them — so the multiplier is wasted and the extra attacker wins. The buff isn’t an upgrade over a serve tower. It’s a sidegrade, and a slightly losing one given how the bot builds.

That’s the lever. If the bot values the buff at roughly “one serve tower I didn’t build,” then no amount of juicing the buff changes its difficulty reading — a stronger multiplier on towers it isn’t clustering is still wasted on the bot’s own layout. The only player a fat aura rewards is a human who clusters on purpose, and the difficulty curve was never fit to that human. The bot’s worst-case build is the floor; human cleverness only ever buys slack above it.

So I stopped being timid. Radius 1.5 became 2.4. The buffs jumped to +22% fire-rate, +22% damage, +24% range. Genuinely strong — the kind of tower you’d build a strategy around.

An Overclock tower buffing a tight cluster of serve towers in-game

Then I re-ran the A/B across all five worlds — China, Africa, Earth, Space, Rogue.

Still identical. Difficulty unchanged. Not one level needed a re-tune.

The three towers

They ship as a trio, all support, all 130 gold:

  • Overclock — orange, a screaming CPU fan. Speeds up nearby shots.
  • Fine-Tune — magenta gauge console. Makes hits land harder.
  • Relay — cyan antenna. Stretches your reach.

Same type doesn’t stack — drop two Overclocks on one cluster and only the fastest aura counts (fire takes the min interval, damage and range take the max bonus). But one of each stacks fine, so a tight knot of serve towers with all three parked in the middle absolutely sings. That min/max rule does double duty: it caps the obvious stack-ten-of-them exploit, and it keeps the per-frame buff math a single cheap pass over the towers instead of summing overlapping auras. Upgrades cost double each level — 130 to 260 to 520 — so you can’t snowball one buff into the whole board.

What stuck

  • “Balance-safe” and “useless” are the same flat line. My first version was safe because it was too weak to build. The metric I actually wanted was “worth building without moving the curve” — and an A/B that only shows “no change” can’t tell those apart. Read why it didn’t move, not just that it didn’t.
  • The bot isn’t a pass/fail gate, it’s a difficulty oracle. Running it with the feature on versus off turns “did I break the game?” into a measured delta. Build the on/off toggle into the autoplayer itself; the comparison is worth more than the verdict.
  • A value-neutral sidegrade is free to make strong. When your new thing trades evenly against whatever it competes with for the same resource, the optimizer that sets your difficulty floor is indifferent to it — so you can crank the numbers for human appeal without re-tuning a thing. Find the things your hardest player won’t bother to optimize, and those are exactly where you get to be generous.

Three overpowered-looking towers, zero re-tuning. The trick wasn’t being careful with the numbers. It was understanding why the bot would never care about them.