Home

How 503 Flash games were brought back

This site is an arcade from 2009. In December 2020 every game on it stopped working on the same day, because that is the day Flash was switched off worldwide. Here is what it took to make them run again, and what is still broken.

What was here

Five hundred and nine games, their files stamped between December 2009 and March 2014, sitting on a server untouched for a decade. Not one of them would open. The pages were there, the files were there, and browsers had simply stopped having anything that could read them: Flash was removed from Chrome, Firefox and Edge at the end of 2020, and the plugin that once played these games cannot be installed any more.

The games themselves were never the problem. A Flash game is a single .swf file — a self-contained program. The files were intact. What was missing was the thing that used to run them.

What replaced Flash

Ruffle is an open-source Flash emulator written in Rust. It runs in the browser as WebAssembly and reads .swf files directly — no plugin, no download, nothing to install. It is the reason this archive exists in a playable form at all, and it is maintained by people who are not us; we just use it and report what breaks.

Dropping it in does not make an old site work, though. Three things had to be sorted out, and each one was its own week.

The games were the wrong size

Every Flash game has a stage of a fixed size — 640×480, 550×400, 800×600. The old pages had those numbers written into the markup by hand, and the markup was not always right. We read the size out of the header of each .swf file instead: of the games we could check, the markup and the file disagreed on four. Four games that would have been squashed or cropped forever, and nobody would have known why.

Half the games phoned home

Games of that era were wrapped in advertising and high-score code from services that no longer exist — MochiAds above all, shut down in 2014. The wrapper loads, finds nothing at the far end, and some games sit waiting for an answer that will never come. Ruffle blocks those requests outright, which is the right call: it is faster to fail than to hang.

Ten games did not run at all

We played through a sample by hand rather than trusting a script. Ten games would not start. A year later, on a newer build of the emulator, we tried all ten again: five had quietly started working, with no change on our side. The emulator had simply got better.

5 are still gone for good. Their game files depend on servers that were switched off a decade ago, and no emulator can conjure those back.

The one we fixed ourselves

Roads of Rome 3 loaded, played its music, drew its menu — and then stopped dead at a name field that would not accept a name. The emulator has a gap in it: the Flash Text Engine, a text system this game uses to build dialog boxes, is not implemented yet. The call that lays out a line of text returns nothing, the game reads that nothing, and the menu never finishes building.

We took the game apart, found that the engine was reached from exactly two places in the code, and rewrote those two places to draw text the older way. The game plays through now — menu, campaign map, levels. The lettering is not the original typeface, because the original fonts are stored in a format only the missing engine can read. When the emulator gains that engine, our patch comes off and the game goes back to how it was drawn in 2012.

What is being added now

The archive does not grow — those 503 games are all there will ever be. Alongside them we add modern browser games, 207 so far, five on each new day. Those need no emulator: they are built for today's browsers and run as they are. Each one is played before it goes up, and each one is described in our own words rather than pasted from a feed.

If a game is broken, say so

Under every game there are two buttons asking whether it ran for you. That is not decoration: an archive of this size cannot be checked by one person twice, and the emulator changes every week — games break and unbreak without anyone touching the site. Those answers are the only way we learn which ones need looking at, and they are read.