The game's ads, and billboards that tear and glitch

Where the ads came from
On October 2, we decided to put billboards in the cities, both printed boards and rotating LED boards, as cheap targets that break well. Claude Design would draw the ads, placed at random. A brief set out the formats, the sizes and fourteen starter brands. Claude Design delivered 44 ads the same day, each as a self-contained HTML file in five formats: a highway bulletin, a street poster, a bus shelter, an LED board and a facade screen.
The brief has one hard rule. Every brand is invented, and none names, imitates or parodies a real company, product or logo. The jokes come from what a city that gets blown up every few minutes would advertise: a crane company that puts things up and lets you guess the rest, a gym that is load-tested, a sandwich shop that stresses structural soundness.
We added two more batches before the 0.15 release on October 7, 66 ads from invented agencies, for 110 in all. Each board picks its ad by seed from all 110.
The printed ads
The game renders each ad’s HTML once at build time in an offscreen web view and keeps the pictures. The printed formats become one image each at their exact size. These are the bulletins, 14 by 48 feet in the game.










The animated ads
One billboard in three is an LED board. Each ad’s LED version is a six-second loop, which the game renders as 45 frames at 480 by 140 and steps through on the board, drawing each pixel as a lit dot on a dark grid. The loops below are the same ad files playing in a browser, before the game turns them into dots.
LOOP 0:08
LOOP 0:08
LOOP 0:08
LOOP 0:08LED boards had never played past their first frame. They read a time value from the renderer that was never set, and water ripples read the same value, so the water had stood still since the dam scene was built. The renderer now keeps a running animation clock, which also slows down with the game’s slow motion.
How a billboard breaks
A billboard is a monopole on a concrete footing with a 14 by 48 foot face hung on steel arms, built from photos and published dimensions. Its steel is thin enough to fracture into a few large torn pieces, so a board can be shot apart as well as toppled at its footing.
We wanted a printed board to come apart in smaller panels than the four steel plates it first had, with the ad tearing like paper along the seams when a panel comes away. An LED board should be made of square cabinets. A cabinet that falls off should stop playing, and the cabinets still attached should start to glitch, the way failing lights do.
That is how they work now.
- Printed boards. The face is twelve upright panels of about 1.2 m. When a panel comes away while its neighbor still stands, the print tears along both seams, and a ragged band of painted steel shows with the paper’s pale torn edge beside it. A board that falls whole takes its print with it, untorn.
- LED boards. The face is 4 rows of 14 square cabinets, each about 1.05 m, on rails. A cabinet that comes away goes dark, and so does a whole board that falls, since its power is cut. The cabinets still up glitch more as more of the board is gone, and most of all next to a dark one. They flicker out, hang on stale frames, slide blocks of the picture sideways, and crush their colors into bands.
Under load, the worst contact on a printed board is 0.21 of its strength and 0.28 on an LED board, over six seeds. An LED board is 81 members, or 151 when it is built back to back.
Credits
The Big Lou’s ad uses “Fireworks at Australia Day 2011” by magdalena_b, and the Blinkr Optics ad uses a close-up photo of an eye by Kookaaa. Both photos are CC0 1.0.
How this post was made
- Drafted by
- A Claude Code session in the trilithon.games repository, October 10, 2026, working from the game's changelog, docs and ad files.
- What it did
- Rendered the stills and loops below from the game's ad files in a browser, and drafted this post from the changelog and the ads brief.
- Reviewed by
- Alex van Rossum,
On the roadmap: A sandbox on a bigger city
Linear MIP2-378, MIP2-385, MIP2-386, MIP2-543