Inspiration

I entered the previous competition, the Game Design one, with an SCP-themed concept called SITE-0. It didn't win. Reading the entries that did, the difference was that they described something a person could do in thirty seconds, and mine described a world.

So I started from the hand this time. Portrait phone, one thumb, a board you can read while standing on a bus. My first build was a real-time tower defense with vegetables, and it played badly: things kept happening while I was still deciding, and the only way to keep up was to stop reading the board. Making it turn-based fixed that. The candy came later, with the porch and the bowl and the things in the dark that want what is in it.

What it does

Three lanes, five rows, a bowl holding ten sweets at the bottom. Creeps walk down. You place candy to stop them.

There is no money in this game. One card, the Candy, is free. Every other card is paid for by eating a candy already standing on the board, so a placement is two decisions instead of one: which card, and which of your own defenders to feed it. Cards see their own row and a few ahead, so where a card stands is both where it shoots and what it is worth on the day you eat it.

After each cleared round four cards are dealt face up and you keep two. That is the only door into your hand, and the sugar is dealt from the same four, so taking fuel means not taking a gun.

Eleven rounds, each adding one new thing: a splitter, a flier that ignores walls, a tank, a healer, a runner, then all of them together, then the boss. A round ends when the board is clear, so a stronger board is a shorter round.

How I built it

One index.html, 2,861 readable lines, no libraries, nothing to compile, no network request of any kind. Sprites are PNG files sitting next to the page. The zip is 1.39 MB.

Claude Opus 5, driven through Claude Code, wrote effectively all of it. I directed, played, and threw things out. The art is Nano Banana: every sprite painted on a magenta backdrop at 2048, then a Node script keys the backdrop out, trims to content and shrinks to at most 128 pixels. Sound is generated in code, a few tones with envelopes, no audio files.

The decision that paid for itself: the game is a seeded simulation that writes an event log, and the screen replays that log. Nothing you can see computes anything. That let me run the whole game headless, forty seeded runs against three different play policies in about a second, and measure a change instead of arguing about it.

Challenges I ran into

The first playtest went badly and was right. "Very repetitive and boring." "The card choice is automatic, at random or the rarest one." "Between one wave and the next you just wait." Three of those were structural. I rebuilt how cards arrive twice before the choice stopped making itself.

Text was the other one. Every time something was unclear I wanted to write a sentence explaining it, and a sentence on a phone is a sentence nobody reads. I ended up with a rule, no sentence on the screen, and had to solve each case as a picture instead. Cards carry a small map of the board with the squares they cover lit. A card you place paints its shape on the ground. A body you eat flies into the card that ate it.

Difficulty is the one thing the harness cannot tell you. The sweep reported the game as punishing. The people holding the phone said the opposite, and they were the ones who were right. The sweep now has a narrower job: catch collapse. Zero hangs, no deadlocks, and a policy that never pays a price winning 0 runs out of 40.

Accomplishments that I'm proud of

The economy. No gold, no mana, no income per turn. Everything you can spend is a thing standing on the board that was doing a job, and I have not found another tower defense that pays for a tower with a tower.

Teaching it without words. Round one points at four things: the card to play, the square to play it on, the button that ends the turn, and the body that pays for the next card. Four real moves in your own game, and then it never comes back.

Nothing is stored. No localStorage, no cookies, no saved anything. A reload is a first visit, every time, which means the state a stranger sees is the only state that exists.

What I learned

Describe what the player cannot tell, not what to build. "Cards need more variety" got me more cards. "I cannot tell which card is worth playing here" got me the small map on every card face, which actually fixed it.

Some measurements a machine will not give you. Forty automated runs said the flier on round 4 was fine. It was not: nine of sixteen human losses landed there, because it arrives while the board is still three cards and it walks past every wall you own. It sits on round 5 now.

Cutting beat adding, every time. Carrier units, an animated legend panel, four localStorage keys, a whole demo mode. All built, all removed, and the build is better for each one.

What's next for Candy Line

More rounds and a wider card pool on the same three lanes. The board is the interesting part and it is small enough to hold in your head, so I would rather add creeps that punish one specific defence than add a second board.

Built With

  • claude-opus-5
  • game
  • mobile
  • nano-banana
  • offline
  • tower-defense
Share this project:

Updates

Submission history