Inspiration

Tower defense games are about killing what comes down the road. LanternKeep started from one question: what if your towers were lights, and what you did to the enemy was rescue it? The mountain is dark, the Hearthflame is the last light, and the Gloom climbing toward it are lost spirits, not monsters.

What it does

You summon four kinds of spirit onto stones beside a winding road. One light burns the Gloom; two overlapping lights hold a Gloom until it is rescued, which pays moonlight and sparks and leaves a lantern glowing on the road. Each light can hold only two Gloom at once, so surges slip through.

Drag matching spirits together to merge them through three painted tiers. At night, tap a Gloom to strike it with a lantern from the Hearth, one target at a rising price, or hold on it to read what it wants.

Three mountains, nine kinds of Gloom that each punish a different mistake, and an Eclipse Beast at the summit. Sparks earned at every dawn buy permanent upgrades and looks in the Lantern Shop.

How we built it

A single readable index.html on HTML5 Canvas: no libraries, no build step, no network. Designed, coded, balanced and reviewed with Claude Code across about four weeks.

Balance came from scripted auto-players that play whole campaigns headlessly in the browser after every tuning change, and from independent AI code reviews of the entire file after each big change. The paintings, the story clips and the living title were made with Midjourney and Midjourney Animate, then cut out with a small Python keyer.

Challenges we ran into

Making a defense game feel dangerous without weapons. Early builds were too easy: two spirits stopped everything. The fix that worked was not bigger health bars but a cast of Gloom where each kind punishes one mistake. Gaps in the dark feed runners. No overlap lets shielders walk. A spirit left on a Gnawer fades. A Lantern Thief shrinks nearby light. A burned Ash Husk bursts into four. One Corrosive through the gate eats your nearest spirit a tier. Three playtests by strangers shaped every one of those.

Accomplishments that we're proud of

A rescue mechanic that reads in the first minute without a tutorial screen. Enemies that can kill your own pieces. A difficulty curve built from questions rather than numbers, after a research pass on Bloons TD 6, Kingdom Rush and Plants vs Zombies. Nine painted Gloom and twelve painted spirit forms that all belong to one world.

What we learned

Simulated players find walls; real players find what is boring. Both were needed, and the build log records every time one of them changed the game.

What's next for LanternKeep

More mountains and a wider cast, a shrine that grows with every rescue, and the full rebuild on Meta's tools.

Built With

Share this project:

Updates

Submission history