Photo by Kelly Sikkema on Unsplash
Friday evening. Home from school. Dad hands over some spending money. The weekend stretches out ahead of you like an invitation.
Saturday morning — early, because you’ve heard a new cabinet is coming in — you’re walking through the door of Mr. B’s. The arcade. Dark, smokey, neon-lit. Every machine is competing for your attention: bleeps and explosions and synthesised fanfares layered on top of whatever 80s pop or synth-house track is blasting from the arcade’s own speakers. The carpet is sticky. The air smells like cigarette smoke and warm electronics. It’s perfect.
You feed the first coin in. Then another. Then another. These machines are hungry, and they don’t give change.
There’s always that one older kid who’s impossibly good. You watch him from a respectful distance, trying to figure out how he gets past the level that always kills you. He makes it look effortless. You know it isn’t.
You play until your wrists ache and your eyes go bleary. The goal — the only goal that matters — is to get your initials on the high score table. Three letters. That brief moment of fame when you finally carve them in, knowing full well it’s temporary. The better players are never far behind. But for now, right now, those are your initials on that screen.
By lunchtime the coins are gone. Just enough left in your pocket for fish and chips on the walk home.
Then you boot up the Atari 800XL, or the Commodore 64, and play more games — even though the home versions were pale shadows of what the arcades offered. It didn’t matter. You played them anyway, because they were fun, and because being 12 years old with a computer and a joystick on a Saturday afternoon was about as good as life got.
Those games were not realistic. Not even close. They had blocky sprites, four-channel sound chips, and colour palettes that would make a graphic designer weep. They were primitive by the standards of what you can play on your phone today — a device that has more computing power than every machine in that arcade combined.
But what they lacked in fidelity, they made up for in gameplay.
Three lives. Game over. No save points, no checkpoints, no difficulty settings. You earned extra lives by being good, and the game got harder whether you were ready or not. Every level pushed you a little further. Every session taught you something. The learning curve wasn’t a curve — it was a cliff with handholds, and you climbed it because reaching the next level meant something.
The designers of those games understood something that gets lost in modern game development: constraint breeds creativity. When you have 8 kilobytes of RAM and a 1.79 MHz processor, you can’t brute-force your way to fun. Every byte matters. Every feature has to earn its place. The result was games that were tight, focused, and endlessly replayable.
Mr. Do! has eight level layouts, cycling dirt colour themes, a bouncing power ball with regeneration delays, and enemies that transform into diggers if you take too long. That’s a remarkable amount of depth from a game that fits in a ROM chip smaller than this blog post.
Centipede has mushroom fields that reshape themselves with every shot, poisoned mushrooms that send the centipede plunging downward, spiders with proximity-based scoring, and a chain-splitting algorithm that turns one problem into several smaller, faster problems. Dona Bailey and Ed Logg designed all of that in 1981.1
Star Raiders gave you a 128-sector galaxy, six damageable ship systems, an energy economy, and genuine tactical decisions — in 8 kilobytes on an Atari 800. Doug Neubauer wrote the whole thing in 6502 assembly.2
These games respected your time by demanding your attention. They didn’t pad themselves out with cut-scenes or tutorials or loot boxes. They said: here are the rules, here is the challenge, good luck.
I’ve built three so far — Star Raiders, Mr. Do!, and Centipede. Each one is a single HTML file. No build tools, no frameworks, no dependencies. Canvas for rendering, Web Audio API for sound synthesis, vanilla JavaScript for everything else. Open the file in a browser and play.
I could tell you it’s a technical exercise. And it is. There’s genuine satisfaction in reverse-engineering game mechanics from memory and observation — and, if you’re really lucky, the original source code — then implementing them with modern tools. Figuring out how Mr. Do!‘s enemy pathfinding works. Getting Centipede’s chain-splitting right. Synthesising Star Raiders’ engine hum with oscillators and LFO modulation instead of a POKEY chip.
I could tell you it’s about preservation. And there’s truth in that too — these games deserve to exist somewhere accessible, playable, not locked behind emulators and ROM dumps.
But honestly? That’s not why I do it.
I do it because loading up Mr. Do! and hearing that first sound effect puts me right back in Mr. B’s on a Saturday morning. Because watching the centipede weave through the mushroom field gives me the same feeling in my chest that it gave me when I was 12 and down to my last 10p. Because building Star Raiders made me understand, at a level I couldn’t have appreciated as a teenager, just how brilliant Doug Neubauer’s design was.
Maybe it’s a mid-life crisis. A 50-something year old man trying desperately to recapture something from his youth. Feeding metaphorical coins into a metaphorical machine, chasing that same brief thrill of getting his initials on the screen.
I don’t know. And I don’t care. I’m having fun. Fun building these games. Fun playing them. Fun watching other people play them and recognise something they thought they’d forgotten.
There need be no other reason than this.
For those who are interested: all three games are built the same way.
A single HTML file contains everything — the game logic, the rendering code, the audio synthesis, the sprite data. No images are loaded; sprites are defined as pixel arrays in code and drawn to a Canvas element. No audio files are loaded; every sound is generated in real time using the Web Audio API — oscillators, filters, envelopes, and noise generators that approximate what those original sound chips produced.
Star Raiders runs at 640x400 with full 3D perspective projection, a galactic chart, and gamepad support. Mr. Do! runs at 624x816 with eight cycling colour palettes and touch controls for mobile. Centipede runs at 600x640 with fourteen palette themes and proximity-scored spider encounters.
High scores persist in localStorage. The games are responsive. They work on phones, tablets, and desktops. They have no accounts, no ads, no tracking. They’re free, open source, and they’ll keep working as long as browsers support Canvas — which is to say, effectively forever.
That last part matters to me. The originals live on ageing hardware and fading ROMs. These tributes will outlast their cabinets.
The high score table in every one of these games lets you enter three initials. It’s the same format as the originals. It’s a small detail, but I kept it deliberately, because that’s what it was always about.
Not the score. Not the level. The initials. Your mark on the machine, however fleeting.
I’m still chasing that.
Bailey was one of very few women working in arcade game development at the time. Centipede was also one of the first arcade games to attract a significant female player base — partly because of its trackball controls and partly because it was genuinely brilliant. ↩
I wrote about building the Star Raiders tribute in more detail, including the 3D maths, the energy system, and the sound synthesis. ↩