Matthew Dean

Reviving Shockwave: Making 90s Web Games Playable In Modern Browsers

In the mid-to-late ’90s, the Internet began revolutionizing PC game distribution. Previously, publishing PC games required producing a costly master disc and then cheaply replicating it. Such high upfront costs incentivized developers to make their games as flawless as possible before release as producing patches was rare and expensive. It also encouraged them to pursue deals with publishers to guarantee sufficient distribution to recoup costs. With the Internet however, developers could publish games directly and offer patches at marginal cost.

This frictionless distribution enabled the advent of web games: games built to be played directly in a user’s web browser. Since early web browsers were meant for document viewing and ill-suited for interactive multimedia experiences, users needed to install browser plugins to play web games.

Playing Shockwave games in 2024

In 2024, I decided I wanted to experience some of these early web games. I had to decide between:

  1. Playing natively on Windows in compatibility mode
  2. Emulating Windows 9x in a x86 virtual machine
  3. Emulating Shockwave

For the first two options, there is a risk of viruses.

Challenges

Explored Solutions

v86: Emulating x86 in a web browser

There is an x86 emulator called v86 which compiles to WebAssembly and provides decent performance of entire OSes like Windows 95 or Windows 98. The emulator demo allowed me to load virtual floppy disks into the emulator, so I used an ancient Windows utility to split up game files into 1.44mb pieces on the host and recombine them in guest. In the end I was able to demonstrate that at least the earliest LEGO Shockwave games can be played in browser at the game’s target FPS.

I’ve figured out how to build a 2GB image of Windows 95 given a hard disk image and boot disk and load that into v86. Now I want to load the game files into the guest.

Things I’m trying to figure out:

  1. Efficiently loading game files - the emulator supports asynchronous loading of hard disks so I am trying to create a second hard disk which will contain all the Shockwave games. However when I load the emulator with both hard drives, Windows 95 fails to boot because of memory issues. I am wondering if this a bug in the emulator or Windows 95 can’t handle two large drives.
  2. Determining min specs for Shockwave games - I’d like to use Windows 95 which I assume is less computationally expensive for the simpler games and Windows 98/Windows 2000 only as needed. However I’m not sure how to efficiently check the minimum Shockwave version of a game for 30+ games or check the minimum OS for a version of Shockwave.
  3. I want to pass information from v86 to the emulator right as after it loads so it knows which game to launch.

DirPlayer - Shockwave on Web Again

Difficulties: