TOP OFF

A gas nozzle you cannot hold, at a price you cannot afford, and it is still pumping. The price per gallon is the hose pressure — and the sign keeps ratcheting while you pour.

Desktop:
Drag the nozzle with the mouse. Hold the button down to squeeze the trigger. Let go to stop pouring — but the price climbs while you dither.
Mobile:
One thumb. Drag the nozzle to the filler neck, hold to pour, let go to stop. When it rips loose, drag it back.
Rate this game

No account needed.

Devlog

TOP OFF

Crude went back over $100 this week and diesel set an all-time record, $5.94 national and $7.87 in California, because the United States and Iran were negotiating an end to a war and the talks collapsed over who gets to charge a fee for sailing through the Strait of Hormuz. A war over a toll.

Here is the part I kept turning over. Nothing physical changed. The hose is the same hose. The liquid is the same dead plankton it was in February. The pump is the same greasy machine. The only thing that changed is a number, set by people arguing about a waterway seven thousand miles away, and that number is now the most violent object at the gas station. It is heavier than the fuel.

So the number does the hitting.

The price per gallon is the hose pressure.

At $3.09 the nozzle is a docile thing that sits in the filler neck and behaves. At $5.94 it kicks. At $7.87 it is a fire hose. The sign ratchets while you are pouring, because that is what actually happened, so it gets stronger in your hands until it tears loose. And then the joke that is also the tension: it is still pumping, and you are still paying. A live nozzle whipping around a parking lot is spending your money on the asphalt by the second.

Every drop that hits the ground is on your bill. You pumped it. You bought it.

Five bugs that all looked like art problems

I spent most of the night thinking I had taste problems and finding numbers instead.

The most expensive moment in the game was happening with nothing to look at. The nozzle would tear loose, the counter would spin, a banner would announce IT IS STILL PUMPING, the bill would climb past twenty dollars of fuel on the concrete, and the screen would be empty. The hose lay down on the slab with its spout at ground level pointing into it, so every drop collided within a few centimetres of the muzzle and died.

Two things were cancelling the jet, and neither is visible by looking. The reaction force pointed back along the spout's own axis, and the spout's direction was slaved to the rope tangent, so the thrust pushed straight back up the hose where the length constraint ate all of it. Then the nozzle had the same inverse mass as every other node on the rope, so whatever survived got shared across twenty-one nodes of dead rubber. Forty-six metres per second squared became two point two, which is less than gravity.

Making the nozzle thirteen times heavier than the rope it hangs on, and aiming the loose reaction up and across instead of back down the line, took the spout from a mean height of five centimetres to two point four metres. Airborne above a metre went from none of the time to all of it. It also made the price ladder legible in the object instead of only on the sign: the tip averages 0.40 m at $3.09, 1.45 m at $5.94, 2.38 m at $7.87. The design finally exists in the physics rather than in a comment.

The picture had no blacks and I read it as the opposite. For two rounds I kept describing frames as blown out and hunting for what was overexposed. Nothing was. Clipped highlights measured 0.0% on every single frame. The fault was entirely at the bottom of the histogram: two to five percent of pixels sat below luma 16 where the reference photograph has nineteen, the flannel medianed 90 where the photograph medians 38, and the canopy ceiling sat brighter than the sky, which is backwards and flattens everything on its own.

Two causes. The canopy fluorescents were running at eleven times the ambient, a cold floodlight pointed straight down at the car roof, which is why the car had no shadow side. And there was an additive lift in the grade meant to keep the deepest shadows from crushing, which at 0.006 linear lands at display luma 14, so no pixel in the game could ever be darker than that whatever the lighting did. The histogram showed it as a cliff with fifty-five thousand pixels piled on the two codes just above the floor.

I stopped arguing about it and swept exposure, black point and contrast against the photograph's own histogram. It landed at 20.8% of pixels below luma 16 against the photograph's 19.0%. A picture with no blacks cannot read as golden hour whatever colour you grade it.

The man looked like a crash-test dummy because the taper was inverted on every bone. The helper that builds a limb puts its wide end at the second joint, so the upper arm was fat at the elbow, the thigh fat at the knee, the shin fat at the ankle. Every joint was wider than the piece feeding into it, which is exactly what renders as exposed ball joints. The fix is one sign, and it turns a skeleton into a person.

While I was in there I found the rim light was additive, which means it laid the same absolute amount of light on a navy check as on a tan one. The plaid averaged to mud at any distance.

The camera parked itself wide and stayed there. A third of the phone screen was empty concrete and I assumed I had framed it badly. The camera keeps a point a couple of metres down the nozzle's direction in shot so the fuel arc never leaves frame. A seated nozzle points into the filler neck. So during every ordinary pour that point landed past the pump island and off the left edge, the camera read it as an arc about to escape, and it backed off. It only watches that point now when the nozzle is out of the neck.

The three untextured triangles were a feature. I had asked for chevrons at the filler neck so a player on a phone can find where the nozzle goes in two seconds. They were built as flat pale cream on opaque quads with tone mapping off, which on grey concrete is indistinguishable from missing geometry, and they were drawn during the breakaway too, which is precisely when nobody needs to be told where the filler neck is.

The thing that looks like a bug is often a feature rendered wrong. The thing that looks like an art problem is usually a number.

What it is made of

No downloads and no asset bundle. Every mesh is built from primitives at runtime and every texture is painted on a canvas when the game boots: the buffalo check on the flannel, the digit strips on the pump's number drums, the concrete. Nothing to wait for.

The hose is a twenty-two node verlet rope with bending constraints, solved at a fixed 120 Hz, with the nozzle as a heavy rigid body on the end that integrates its own spin and roll. The man is twelve particles and about thirty constraints with a procedural standing pose blended in, so he can brace against the hose and then become a genuine ragdoll in a tenth of a second.

The fuel paints. Every surface that can get wet owns a render target, and impacts stamp soft splats into it which then advect downward on vertical faces, so fuel visibly runs down the car's flank rather than sticking to it as a decal. The wet shader darkens the albedo a little and drops the roughness a lot, because a puddle that reflects the sky is worth ten of a puddle that is merely tinted.

The whole thing is one thumb. Drag the nozzle to the filler neck, hold to pour. The trigger latches at the neck and stays latched if you drag it out, which is how a real one behaves and is the only way to hose the station on purpose.

The receipt at the end is itemised from what actually happened. Into the tank, onto the lot, onto a stranger. The number is the score and the punchline at the same time.

Leaderboard

Loading…