A Week of Preparation

Posted on May 20, 2020

School’s out, Summer of Code prep has begun! This past week:

  • I’ve been reading and re-reading the code for ScummVM’s Lingo subsystem to improve my mental map of it, and I’ve been making small fixes when I catch problems.
  • I collected some of the documentation I encountered in my past adventures with Director. A ton of interesting information on Director’s file format in there!
  • I set up a shelf next to my desk and turned it into my obsolete Macromedia products library (mostly Director books, of course). Shelf of Macromedia Director books
  • I’ve been reading up on Lingo’s factories and parent scripts, two different object systems and the eventual basis for Director’s XObjects and Xtras.
  • I did some planning for the implementation of these object systems.

Tomorrow sev and I are going to meet with John Henry Thomspon, the inventor of Lingo, to discuss the implementation of factories! I grew up playing Shockwave (for Director) games, and I’ve spent a good deal of time hacking with their Lingo bytecode, so I’m looking forward to meeting the man himself.

I should probably elaborate on my history with Director. I’m currently 19, so I only caught the tail end of Shockwave gaming, and I mostly played Flash games. I got interested in how web games worked in 2013-2014, and there were some fantastic, user-friendly tools for peering into the inner workings of Flash .swf files, such as JPEXS Free Flash Decompiler (FFDEC). However, every so often I’d encounter a Director .dcr file, and there were no good tools for these. I wasn’t capable enough to do the necessary reverse engineering myself, so for the next few years, I gave up on Director.

In 2017, I came across a YouTube video about a lost Director game that some people were interested in finding, “Jimmy Neutron: Gotta Blast! Rocket Race”. I decided to look for the game, and I found a subdomain of nick.com that mirrored the website as it was sometime in the mid 2000s. Within a couple minutes, I found the landing page for the game on that subdomain. However, the page required you to log in with a Nick ID to get to the game, and the signup page no longer worked. I thought I’d hit a dead end, but then I remembered I’d already signed up for a Nick ID about 10 years before, in my early days on the web. I began guessing combinations of old usernames and passwords until I got to the game, I posted it on the 3D Groove Grove Discord server, and now my crowning achievement is having my Discord alias ‘kaj’ listed as the game’s discoverer on its Lost Media Wiki article.

Soon after I posted the game files, the 3D Groove Grove users discovered that the game was incomplete, missing most of the levels that were advertised in commercials. I wanted to poke around the game to see what was up, but at that point the tools for working with Director files were still extremely limited. With some searching, I found a primitive Lingo disassembler called ProjectorRays that tomysshadow, the admin of the 3D Groove Grove server, had been working on. I asked him about it, and he invited me to the OpenShockwave Discord server, where people were reverse engineering Director with eventual plans to build an open-source replacement for the Shockwave player. I picked up work on ProjectorRays, and I took it from a half-working Lingo disassembler to a mostly-working decompiler. Soon OpenShockwave became the Earthquake Project, and progress on Lingo decompilation continued with Shockky, but everything else stalled.

Three years later, I still wanted to work on an open-source Director reimplementation, so here I am now at ScummVM. :)