Back to browse
GitHub Repository

A web-compatible Shockwave Player emulator written in Rust

376 starsRust

Reverse-engineering Shockwave to save early 2000s web games (Rust/WASM)

by igorlira·Mar 8, 2026·16 points·1 comment

AI Analysis

●●●●GemWizardryZero to OneRabbit Hole

Two-year reverse-engineering effort resurrects unplayable 2000s web games like Habbo Hotel.

Strengths
  • Two-year sustained effort reverse-engineering an undocumented closed-source format with zero public reference.
  • Hardware-accelerated WebAssembly renderer with live demos (Habbo, LEGO games) proving actual playability.
  • Ships as Chrome extension, standalone app, and embeddable polyfill—multiple distribution paths.
Weaknesses
  • Narrow audience—appeals primarily to nostalgia/preservation communities, not production use.
  • Shockwave catalog finite; long-term maintenance burden for edge-case game compatibility.
Category
Target Audience

Retro gaming enthusiasts, web archivists, emulation developers

Similar To

DOSBox · Flashpoint archive

Post Description

Hi HN,

When browsers killed NPAPI plugin support, thousands of early 2000s web games were effectively lost to time. Macromedia Shockwave, in particular, was a closed-source, highly complex, and largely undocumented beast.

So a few friends and I spent the last two years doing something arguably unhinged: rebuilding the entire Director engine from scratch. Today, we're finally sharing dirplayer-rs.

Repo: https://github.com/igorlira/dirplayer-rs

We intentionally stayed quiet on this until we had undeniable proof that it was actually possible. With our latest v0.4.1 release, we have full hardware-accelerated graphics. Complex games are booting natively in the browser and are fully playable.

A few childhood favorites, actually playable right now:

Habbo Hotel: https://dirplayer.com/habbo

LEGO Junkbot: https://dirplayer.com/junkbot

LEGO Worldbuilder: https://dirplayer.com/worldbuilder

We chose Rust and WebAssembly because we wanted a native, plugin-free way to play these games without relying on ancient executables. Parsing decades-old, untrusted binary blobs and undocumented bytecode is a memory safety nightmare, making Rust an easy choice. It also gives us predictable performance with zero GC pauses, keeping frame rates smooth.

The biggest headache by far has been Lingo, Director's scripting language. It's massive. It heavily supports 3D graphics, embedded Flash content, and the worst part: Xtras. Xtras were external distributable plugins compiled from native C code. Figuring out how to make those play nice in a modern WASM environment has been a serious challenge.

We did, however, successfully implement the Multiuser Xtra so games can create socket connections (which is how Habbo is working!). We still have a long way to go to support full 3D and the massive ecosystem of third-party Xtras, but the foundation is solid.

None of this happened in isolation. We built on years of prior work from the Shockwave reverse-engineering community: folks who have been poking at Director's internals for years, and their prior projects, tools, and research made this possible.

Happy to get into the weeds in the comments: the RE process, decompiling ancient binaries, the weird quirks of Director's VM, the Rust architecture, whatever you're curious about.

And genuinely: what old Shockwave game do you wish still worked? Drop it below and we'll see if we can get it booting.

Similar Projects