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.

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.

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.

step1
Step 1: Look anywhere on the interface for this button
step2
Step 2: Need to expand the option list to see this button
step3
Step 3: Make sure this option is checked, click Add and done
  • 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).

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.

  • On-device testing pass across a range of real iPhones/iPads for touch and audio-unlock edge cases.