// how it was made
Four short arcade games under one dark neon brand, fronted by Voro, a matte black robot who hovers. Free, no download, no sign up, and it runs in a browser on a phone.
Play it →Everything here is aimed at somebody on a school laptop or a phone with a few minutes. A game you can explain in a single sentence and start playing immediately is worth more than a deeper one nobody gets past the tutorial of. One button also makes the difficulty honest: there is no controller layout to blame, only judgement about when to hold and when to let go.
Voro is one letter from Voronoi, and a Voronoi diagram is what the arcade has looked like since the lobby floor was rebuilt: hard neon edges and black cells. Scatter some points on a plane and every point owns the region closer to it than to any other. The fourth game is that picture as a contest. A new seed only ever steals ground from its neighbours, so where you put it matters far more than how fast you put it there. Drop it next to your own seeds and you mostly take from yourself. Drop it deep in the rival's ground and you carve out a big cell while your own side thins. The good placements are on your own edge, just past your last seed.
The rival is deliberately not as clever as it could be. A rival that always finds the single best spot is unbeatable by anybody playing against a timer, so it weighs a handful of random options and takes the best of those, two at the start of a run and five by the end. That number was not guessed. The game was played thousands of times by scripted players before a person touched it, and the rule was simple: a random tapper has to lose, somebody reading the board has to win by a little, and the two obvious mistakes, crowding your own seeds and lunging deep for the biggest single bite, both have to land below patient play on your own frontier. They do.
It is also the first game here that could be replayed. Every random decision in a run, including the rival's, comes from one seed number, so the same seed produces the same run every time. That is what makes it a daily field: the seed is the date, everybody who plays today plays the same board against the same rival, and the board on the end card is that day's board. It resets at midnight, so a good run on a quiet day is a number somebody can actually reach, and it means the top of the board is a solution to a puzzle you also played rather than a stranger's luck.
The board itself was flat at first, a picture of coloured cells, and it looked generic. Now every cell is a raised tile, yours standing taller than the rival's, lit so the walls shade, sitting on a dark slab above the same shattered lattice the lobby floor uses. A seed lands as a glowing orb and the cells it reshaped flinch. Same game, but it reads as a place.
The character is generated from a program. His proportions are numbers, so changing the size of his head means editing one value and running it again, rather than re-sculpting anything. That is why he could go from a plain box to the current shape in a day.
Six designs failed before this one, and all six failed the same way. The glowing visor was a panel placed on the front of his face, and a panel sitting on a surface always reads as a part bolted on rather than part of the object. The fix was to cut a real recess into the head and sit the visor inside it. The difference is immediate and it is the whole reason he reads as a designer toy rather than a prop.
There are no sound files. Every engine note, tyre squeal, crash and menu blip is synthesised in the browser as it plays. Nothing to download, nothing to license, and the engine pitch can follow the actual speed of the kart rather than approximating it with a loop.
The music works the same way. Five tracks, one per screen, every note an oscillator rather than a recording, so the whole soundtrack costs about a kilobyte instead of several megabytes. Because it is generated rather than played back, it can follow the run: the filter opens as a game gets tense and closes when it calms down.
Adding it turned up something worse than a missing feature. The browser will not let a page make noise until the visitor has clicked something, and the function that lifted that block was only ever called by the mute button. Anyone who never touched that toggle had been playing in silence since launch.
You never have to sign in. Opening the arcade quietly creates an anonymous account with no email, no password and no prompt, which is enough to keep your scores apart from everybody else's. Signing in with Google is optional and buys exactly one thing: your scores following you from your phone to your laptop.
Names on the board are three letters, the way an arcade cabinet does it. That is not nostalgia. A public board on a site teenagers use needs some control over what people put on it, and three letters is the only length where the list of things to block is short enough to actually write down. Free text would have been unmoderatable by one person.
Your real name is never published, even if you sign in with Google.
On launch day the controls in one game were backwards. Pressing left moved right. The input code was correct and reading it again would never have found the problem: the camera sits behind the runner looking forward, and a camera pointed that way is turned a half circle, which mirrors left and right on screen. The positions are now written in the order they appear on screen, which looks wrong on paper and is right in the game.
Then the fix appeared not to work, because the site was still handing out an hour-old copy of the page. That failure looks exactly like a broken fix, which is what makes it expensive.
And the leaderboard, hours after it shipped, would show you a score that had never actually reached the server. The database library keeps a local copy of what you just wrote and shows you that, so reading it back looked perfect while the server had nothing.
Three.js for the 3D, a physics engine for the stacking, Blender driven by scripts for the character and the kart, and Firebase for the anonymous accounts and the board. The whole thing is about 193 KB to load, which is smaller than most single photographs.