Public and login-free. Every number on this page is read from the game's own config when the page loads, so it cannot drift from what you are actually playing.
TerraTD is a tower defense game about shaping the route. Creeps walk from the spawn points to your base; you buy towers with the coins they drop, and the towers you place are themselves walls. Where you build decides both what gets shot and how far the creeps have to walk to reach you.
There are — towers, each with — tiers and an unlimited overcharge past that, and — creep types. Alongside the towers the shop sells three groundworks — ways to spend coins on the ground rather than on a gun.
Timed runs last — minutes.
Towers block pathing. Creeps walk around them, so a line of towers is a wall and a clever line of towers is a maze. Lengthening the walk is usually worth more than adding damage, because every extra tile is more time under fire from guns you already own.
A wall does not have to be a gun. A Rampart is a wall and nothing else, at a fraction of the cheapest tower's price — so bending the route no longer means buying a tower you did not want for its gun. See Groundworks.
The red shading on the map is every route creeps can take, not one of them, and it is redrawn the moment you place or sell anything. The darker a tile, the more of the horde comes that way; the dashed line runs along the busiest road for direction. Turn the whole overlay off with the route button next to the eye.
The Detour pill in the HUD is the score for all of this: your route's length over the same map's shortest route with everything you built taken away. It reads ×1.00 on an empty board, and it is the one number that says how well you are playing the game's actual verb.
On Maul maps the tiles around each spawn are reserved lane and cannot be built on. The exit is not — you can always build touching the base from every side.
Every tower picks its own target. Select a tower to change it.
Slow Field and melee towers hit everything in range, so they have no target to choose and offer no picker.
Four tiers each. Past the top tier, overcharge is repeatable forever: the cost climbs faster than the power, so it is an unbounded sink for a bank you would otherwise never spend. Overcharge never changes range or fire rate — a tower that grew its footprint each level would redraw your maze under you.
Three things you buy that are ground rather than guns. They come out of the same wallet as towers and sit in the same shop, because the whole point is that they compete: a coin spent on shape is a coin not spent on damage.
A cut can shorten your route as easily as lengthen it — rock is holding your maze up too. While Cut is armed, hovering a rock tile shows what cutting it would do to the walk, in tiles, before you commit.
Waves mix these. Every map opens on Grunts; runners, swarms and tanks arrive as the ladder climbs, and a boss shows up from wave 4.
Coins come from kills. Unspent gold earns interest between waves, so banking is a real strategy rather than a tax on playing.
Maps are generated, not hand-drawn. Two styles, and the difference between them was measured off the ten hand-authored maps the game shipped with rather than invented.
Every generated map is scored before you see it, and rejected if it fails any of these. Several candidates are built and the best one is kept.
The main play button serves the daily map: everyone playing that run length and map style today gets the identical map, generated from the date. That is what makes the scoreboard mean anything — the same ground, the same waves, for everybody.
Only the daily run is scored. "Play a different map" rolls a fresh map that is yours alone; it is practice, and it does not post a score.
The scoreboard is split by mode — run length × map style — because an Endless run scores far higher than a 10-minute one and a single list would just be an Endless list.
Everything planned, in progress, or deliberately parked. Shipped items stay listed so the history of the thing is readable in one place.
mazeGain probe: the opening bank used to buy five walls and 0% more route,
while the map-quality gate certifies a map as mazeable against a player with 60–400 walls.
The Detour HUD pill shipped with them, because the number the game is about was
never on screen. See the
Groundworks proposal.generateEndlessLevel stopped existing and
nothing caught it, because the tool loads its modules with dynamic import() and
check-imports only reads static ones. Now fixed and seeded per run so two
invocations compare the same ground, and it no longer reports "died at wave 1" and "never
lost a base HP" in the same breath. But on generated arenas it still dies in the opening
wave, so long-run balance can only be measured on the builtin corpus.
And the maps being identical is not enough: the endless wave extension composes each
wave with unseeded Math.random(), so two arms of an A/B face different waves and
a single run cannot detect anything smaller than a large swing. Seeding wave composition is
the prerequisite for this tool answering a balance question at all.Work-in-progress design and visual mockups for things that are not in the game yet. Each is a live, standalone page that can render real game data rather than a picture of it. They are public — anyone with the link can read them.
var(--accent) is applied
65 different ways, 37 hard-coded hexes would not follow a change, and the game is set in whatever
font your OS uses for menus. Four directions, each defined as nothing more than a colour set, a
type rule and a shape rule, and all four rendered live on the page through identical
markup so only the spec differs. Survey (contour ochre on wet slate — the only one that
answers to the name), Tactical (amber phosphor, mono throughout), Strata (warm,
solid, no glow — the only one that won't be mistaken for another dark neon TD), and
Committed Neon (what we have, but decided). Every set shows all 11 towers and all 5
creeps in its own board palette. The page's central finding came out of drawing them:
colour cannot carry eleven towers — at one hue each, the closest pair sat at ΔE 4.7–9.2
where ~10 is the floor for telling small marks apart, and even the whole colour wheel only
gives 32.7° per tower. So hue names what a tower does (five behavioural families,
classified from their own stats) and silhouette names which one it is. That lifts the
closest pair to ΔE 21–44. Recommends Survey, and notes the thing that shapes the whole job:
the identity has two halves, the CSS variables and the board colours in
src/config/.mazeGain probe — the same one the generator gates maps on — and the answer is
stark: the opening bank buys five walls and 0% more route, twenty walls buy 3%, and the
80-wall player the quality gate models costs ¢3,600. The generator certifies maps as
mazeable with a budget the wallet never issues. Proposes four features: Rampart (a
cheap pure wall, so shape stops costing a gun), Cut (delete a rock tile, escalating
like an overcharge — a late-game sink that changes the board instead of a number, on maps
that are up to 40% rock nothing can ever touch), Tar (ground slow, the only thing
buyable on a lane) and a detour readout for the number the whole game is about and
currently never shows. Includes a playable board: a real seeded map where you can
place ramparts, cut rock and watch the route and detour recompute, with the same
never-seal refusal the game uses. Names the honest risks — it may kill the Sword, and every
balance number behind the wave ladder was measured against shape at gun prices.
Phases 1–3 shipped; phase 4, the Detour Dividend, was held back because its own
precondition — per-day scoreboard scoping — still does not exist.proposals/_template.html and its
companion _template.js. The template carries the conventions — section order,
status tags, numbers imported rather than typed, and why an inline
<script> silently does nothing on this origin.