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

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.

github.com

10 points

igorlira

18 hours ago


0 comments