Move: arrow keys or A/D · Jump: Up/W ·
Duck: Down/S · Attacks: T and Y. On touch devices, on-screen
controls appear automatically. On mobile, open the app and use your
browser's “Add to Home Screen” for true fullscreen.
Description
The 2008 Flash brawler Achilles, running in the browser through
Ruffle, an
open-source Flash emulator compiled to WebAssembly - no plugin, no
Adobe dependency. The original SWF runs unmodified except for one
patch: a dead analytics call to a shut-down ad-tracking service has
been stripped. On top of that, this page adds an on-screen touch
control layer and a PWA shell so it installs and plays offline on
phones and tablets, matching the rest of the site's web-app projects.
Background
The game was made with the assistance of Claude AI.
Unlike the other browser-revival projects on this site, Achilles isn't
a from-scratch reimplementation. The source assets I had access to -
504 loose SVG shapes, sounds, and text snippets - had no timeline data:
nothing recording which shape sits where, at what frame, for which of
the game's eight animated characters. Rebuilding that choreography by
hand would mean re-animating the entire game from scratch, weeks of
art work for a result that still wouldn't quite match the original.
The original SWF, on the other hand, already has all of that baked in,
and it's clean AS2 (ActionScript 2) using standard patterns - Key.isDown() for
input, gotoAndStop() for animation state, attachMovie() for spawning
effects - all of which Ruffle emulates well. So instead of rebuilding
the game, this project wraps the original file: Ruffle runs the real
SWF byte-for-byte (minus one patched-out analytics call), and a thin
JavaScript layer around it adds what a 2008 Flash game never needed -
touch controls, a tap-to-start gate for iOS's audio-unlock rule, and
an installable, offline-capable app shell.
That one patch is worth explaining. Frame 1 of the original SWF calls
a MochiBot analytics stub - a play-count/anti-piracy tracker that Flash
game portals commonly embedded around 2008. It tries to load a tracking
SWF from mochibot.com on every play. MochiMedia shut down years ago, so
the request would just fail - and on a HTTPS GitHub Pages site it can't
even leave the browser, since the URL is plain HTTP and gets blocked as
mixed content before it's ever sent. Still, the call also grants
mochibot.com scripting access into the game via
System.security.allowDomain(), and an expired domain like that can be
re-registered by anyone. Removing it costs one byte: the call sits as
the very last statement in frame 1's script, so overwriting it with the
AS2 "end of actions" opcode drops it cleanly, with the rest of the
timeline completely untouched.
iOS App Setup Instruction
Quick disclaimer: Android users can always get the vanilla game by
finding the original SWF, so yes you are being left out on this one.
Before we get started, open the webapp version on Safari browser, because apparently only Safari can do this.
The version of the game on this current page is not a webapp version, make sure you only do the next step once you open the webapp version of the game on a new tab.
Step 1: Look anywhere on the interface for this buttonStep 2: Need to expand the option list to see this buttonStep 3: Make sure this option is checked, click Add and done
Features
Original game: the actual 2008 SWF, run through Ruffle rather than reimplemented.
Move (arrow keys / A,D): walk left or right.
Jump (Up / W) and Duck (Down / S).
Attacks (T and Y): swipe and bash.
Touch controls: on-screen d-pad and attack buttons appear automatically on phones and tablets.
Fullscreen (button): expand the game to fill the screen.
Esc (keyboard): exit fullscreen.
Offline playable: once loaded up the first time, the game can be fully played without internet (only applies after adding the game as a native app).
FAQ
Why does the game ask me to tap before it starts?
iOS Safari blocks a page from playing any audio until you make a
deliberate tap. The "Tap to Start" screen is that tap - it also
doubles as the moment the game actually loads, so nothing plays or
makes sound before you've interacted with the page.
Is this the real game, or a remake?
It's the real game. The original SWF file runs inside Ruffle, an
open-source Flash emulator, with one dead analytics call removed.
Nothing about the game itself - its art, animation, or logic - has
been changed.
Future Improvements
On-device testing pass across a range of real iPhones/iPads for touch and audio-unlock edge cases.