Maze TD

Maze TD comes alive: live portraits, single-cell checkpoints, and geese that peck

The last post ended with the game finally looking like something. This one is about the layer underneath that: the hundred small things you touch every second of play — the camera, the markers on the board, the HUD, how the predators walk, how the towers behave when they shoot. None of it is a feature you’d put on a store page. All of it is the difference between a tech demo and a game you want to keep playing.

A goose spiral wound tight around the single-cell checkpoint, with the splash, aura and sniper core in the middle and a bear and two wolves on the way in

The objectives got real. The spawn, checkpoints and exit used to be three colored squares painted on the grid. Now the predators come out of a cave — a big rocky den with red eyes glowing inside — that sits on a dirt pad just outside the spawn gate, and the geese’s nest sits outside the exit gate; the short roads end right at them, so the board reads start → gate → maze → gate → end at a glance. The checkpoints took three tries. The first marker was a big gold plaque with the number on it, tilted 45° toward the camera (a vertical banner is unreadable from the game’s steep angle; I learned that the hard way). It was legible and also enormous and intrusive. I rendered the alternatives side by side from the actual game camera — pennants, a mini plaque, a feather totem, a numbered flag, a gonfalon banner, a flagpole on a numbered base — and the winner was the simplest: a plank pole flying a gold pennant, with a small numbered plaque leaning against its foot like a sign someone propped there.

Checkpoint marker candidates from a low camera: the big plaque, a numbered tilted pennant, a numbered gonfalon banner, and the pennant pole on a numbered base that won

A HUD with faces. Selecting a unit now shows its portrait — rendered from the voxel model in Blender, facing into the screen from the panel’s left edge — and the build buttons carry the same portraits as icons. Box-select a dozen geese and you get the Warcraft III grid: one tile per unit with its own health bar, a “+N” tile when it overflows. Then the obvious next step, because WC3 did it in 2002: the portrait is alive. A second camera renders the selected unit’s own model into the frame. Enemies breathe, and every few seconds the fox snaps and the bear rears; the gunner’s turret scans slowly while the camera sways around it. Doing this exposed a bug I’d been squinting at for a week — every glowing voxel (predator eyes, the aura ring) had been exporting with white vertex colors and blooming to white in-game. The eyes are red now. They were always supposed to be red.

The predator cave beyond the spawn gate with foxes emerging, and the six-tower selection grid in the HUD

Live HUD portraits at 3×: the fox and the bear at rest on the left, mid attack flourish on the right

The checkpoint argument. Checkpoints had always been 2×2 blocks, same as a tower footprint: step on any of the four cells and it counts. Looking at the new flagpole standing in the middle of its block, I wondered whether a checkpoint should just be one cell. I talked myself out of it first, and the case was decent: every board is an even number of cells wide, so a 2×2 block sits exactly on the center line and a single cell never can; the spiral map’s checkpoint is dead center, which is the whole point of the spiral; and since the predators walk cell to cell, they pass half a cell beside the pole today, whereas with one cell the lane would run straight through it. All true. Then I tried it anyway, and within one wave the geometry argument lost: the mazing feels a lot cleaner and tighter when the thing you’re routing around is one tile instead of four. Checkpoints are single cells now. The predators walk through the flagpole. Nobody minds.

Predators cut corners. The other long-standing simplification was that enemies only moved in the four cardinal directions. They can move diagonally now, with one rule that keeps mazing honest: a diagonal step is only allowed when both cells beside it are free, so two geese touching at a corner still seal a gap and nobody clips through a tower. The effect on the game is bigger than it sounds. On the open relay map the unmazed route dropped from 81 steps to 55, so early waves arrive sooner and empty ground is worth less; inside a maze the difference is mostly at the turns, where the foxes now cut the corner instead of marching to the end of the row and pivoting. The headless balance simulator plays the same campaigns either way, which was the result I wanted — it changes how the game feels, not whether it works.

The simulator's goose maze on the spiral map at the same moment, 4× crop: with diagonal routing (top) the foxes cut the corner at the end of the row; without it (bottom) they turn square

The camera, twice. Earlier in the week the fixed WC3 angle became a proper orbit camera: PageUp/PageDown or a right-drag tilts it between top-down and 30° above the horizon, the same drag rotates it, Home snaps it back. Today’s part was smaller and mattered more: the closest zoom came down from 8 m above the board to 5 m, because the units deserve to be looked at. That immediately exposed a bug the old limit had been hiding — a leftover “never below 4 m” floor meant tilting toward the horizon while zoomed in pushed the camera out instead of just tipping it. Tilting is a pure orbit now. Fully zoomed in and tilted flat, you’re 2.7 m off the ground looking across the meadow at a flagpole, and the game holds up at that distance better than I expected.

Fully zoomed in and tilted to 30°: the first flag from ground level, with the wall, the predator cave and the hills behind

Towers that fight back. The towers were static kits with one exception: the gunner’s turret snapped to face whatever it shot. Everything else just stood there while projectiles materialized above it. Now every tower has named pivots exported from the voxel build, and a small animator drives them from code. All six turn smoothly to face their target — the sniper slowest, like it’s taking its time — and each one has a tell when it fires: the gunner’s barrels recoil behind a muzzle flash, the sniper’s rifle kicks harder behind a bigger one, the mortar tube bucks and puffs smoke, the frost shaman thrusts its staff while the big crystal swells and bursts, and the aura spire’s ring spins up and its orb bobs and brightens whenever something is inside it, then settles when the lane goes quiet. Shots leave from the actual muzzles now instead of from the tower’s roof.

Every tower turned toward the lane: the gunner recoiling mid-flash, the mortar and sniper tracking the predators, the slow shaman and aura goose facing the fight, the wall goose squaring up to a bear

And the goose finally got the treatment it deserved: it’s a melee unit. It turns toward whoever is passing and pecks — neck snapping forward, body lunging — and the hit lands a tenth of a second later if the predator is still in reach. Two meters of reach, so a goose only bites what brushes past its block. That cut goose damage so sharply that each peck now does 2 instead of 1, and the goose-only strategy in the balance simulator folds around wave 3 to 5 instead of 5 to 11 — which is where it belongs. Geese are walls that bite, not turrets.

The wall goose's peck at a passing snapping turtle: three frames a tenth of a second apart, at 3×

Still a prototype, still debug hotkeys in every screenshot. But it now has markers you can read, a HUD that looks back at you, routing that feels like the WC3 maps it came from, and towers with some fight in them. Next on the roadmap: making armor types and tower tags actually mean something, then the menus and game flow that turn a sandbox into a game you can lose.