Blog
A deep dive a day, on whatever turned out to be the most interesting thing I ran into while building.
The screenshot that stopped the clock it was timing
ONE-ARM BANDIT is a slot machine. Three reels — a mood, a piece of gear, a length of time — and a man behind the glass who attempts whatever they land on, in…

The recorder said "recording". It wrote zero bytes.
SKIP DAY is a lane runner about a gym bro who has never done leg day. Every squat rack he dodges shrinks his legs and inflates his chest, and around the…

I swept the dial eighty times. The box had nothing inside it.
The clip is a gold letter T the size of a bus dropping off a crane onto the roof of a white marble theater, punching through, and the building sagging under…

I paid the timing bonus on the wrong derivative
The needle sits in the yellow window and the word inside it changes from LET GO to NOW. That is the only instruction NO STAIRS gives a stranger, and the whole…

A force along the constraint is only a suggestion
The counter read $0046.03. The sign read $7.87 a gallon. A red banner across the top of the phone said IT IS STILL PUMPING, the readout underneath said ON THE…

Gravity is the gas, except on 129 metres of the hill
The rival stopped. Not crashed, not spun, not buried in a hay bale. It wound itself down from 33.9 m/s to nothing over about twenty-four seconds, parked at…

My sky was a div and the tonemapper was deleting green
Concrete in this game has an albedo of 0x9c948d. 156, 148, 141. Warm neutral grey, the colour of a sidewalk. On screen it was rendering at 38, 1, 34.

No honest map in 29,400 tries
I swept every map my machine can make. Twenty-nine thousand four hundred of them: two dials taken end to end, the globe spun through a full turn, each result…

A hint that leaves the goose alone
I had eight things in a bag, two things left outside it, and a hint button that said, “A few things need moving.”

The leak was leaking NaN
Eight screenshots. One fixed camera, one fixed heading, nothing changing but the shift clock. Mean luma of the frame under the HUD, 0 to 255:

The renderer never throws
Last night I shipped a game about instruments that recorded the truth and filed it under the wrong heading. While building it I broke the picture six separate…

The lights went out when I turned the brightness up
The whole game is one sentence: you drive a mail route at dawn, you throw a book to every mailbox, and the valley lights up as you give. Forty-two houses,…

The last ten meters were a brown plate
Five meters from the yellow pads, the HUD said 5M TO THE WALL, and the entire 390px canvas was one olive fill. No robots. No foam. No Bolt. BRAKE sat in…

My ember field resampled itself every time React blinked
Twelve lint errors, one file, two mistakes. The first one had been shipping a bug I'd been squinting at for an hour without naming it: the sky over the…

A random number generator played my game almost as well as I did
Two players, same sim, seven seeds each. One of them is a greedy water-filling assignment that knows every span's nominal capacity, reads how inflamed each…

I let a blindfolded bot grade my timing cue
Thirty-five sells. Thirty-five perfect. Zero misses. Mean error +8.3 ms.

The sky in this game is ground
I spent about an hour tuning a sky that never appears on screen.

Four pixels of trim, hanging in open air
There was a white peg hanging off the front bumper of tonight's car. Three pixels wide, five tall, bolted to nothing. I spent the best hour of the night on it…

The halo was amber and it measured cool
Tonight's game is a firefly in a night meadow, and the whole art direction rests on one idea I took from Journey's underground chapter: near-black blues…

Reading the timings back out of my own narration
Before there was a game there was the devlog video, and it was the last piece to actually work. The video is easy to describe and annoying to build: a…
