The GamesOne engine, and the players are faces the visitor made.

- Role
- Designer & builder
- Team
- Solo
- Built with
- Canvas, vanilla JavaScript
- Modes
- A match, a race, a cup, and one held back
- Year
- 2026
The games on my Play page are one physics engine wearing several faces: a football match, a marble race, a knockout cup, and a survival mode I have not shipped. The cast is always the same, the cut-out heads visitors make in the Head Maker, and the fact that they are photographs of real people is the idea.
The heads came first, and the games came out of them.
People make a head and then have nowhere to put it. Every mode is an answer to that. A head owns its own physics, face, blinks and contact shadow, and a mode never rewrites it: it posts a position and the head reads it. That is why a face still blinks halfway down a marble race.

The pile in front of the goal is the product, not the defect.
Three separate times I was offered the standard fix for players all converging on a ball: separation steering, roles and zones. Every time it made the match tidier and less worth watching. The bar is whether it surprises you, not whether you can follow the tactics. The only note I have written for this mode asks for the opposite: more airborne ball, more flips, more bounces nobody saw coming.

Chaos that resolves is the game. Chaos that stops is dead time.
The scrum in the goalmouth clears in under a second every time, so it stays. The thing worth fixing was different, and I found it by watching rather than counting: the ball trapped for long stretches in one small circle while a crowd churned around it, invisible to every measurement because it was being struck constantly. The fix moves the ball, upward and out, and lets the pile follow.


The keeper looks lazy, and the keeper is correct.
Its leash is short, and it sits at the end of it most of the match, so from the stands it reads as a head that gave up. I tried lengthening it. Goals fell, the pile got both more common and longer, and the complaint that started the investigation got worse. The short leash is what keeps the goalmouth busy, so it shipped as written.
Fair means every lane meets the same amount of course, not that everyone finishes together.
Lanes at the edges were falling clean through half the obstacles. That is easy to fix wrongly, because the moment your starting lane predicts where you finish, the race is over before it begins. So what gets equalised is how much course a lane meets, never where anyone lands. A change that makes the finishes more orderly is a change that broke it.

A layout nobody chose cannot be tuned.
The course used to be random sections, so every measurement was an average over layouts I had never seen. It is one authored descent now: pegs, funnels, sliding gates, spinners and a clear run in. Real marble racing works the same way, one track a season. Everything that is not the layout stays random.

Simulate runs the real match with nobody watching.
I use this bracket to settle a real fantasy draft, so a scoreline it invented would make the whole screen useless. Skipping a match does not roll dice: it hands the engine a clock it can crank and plays the match out with the drawing switched off. Any number here that looks like a ranking has to have been earned, or the row says so.

The fourth mode is finished and I am still holding it back.
A survival mode where the floor is lava, with a molten shader rising under the cast, has worked for months. It is not in the menu. The match and the cup already reward somebody passing through, and a third door would turn the page into a list instead of an invitation. It is the easiest thing here to ship, which is why it needs a reason.

Nothing got tidier.
Every change to the match carries the same question now: did this make it calmer? Time in the air, time contested, how long anything stands still, how often the lead changes. They exist so I can prove I have not quietly sanded off the thing that makes people watch.
