For the past few weeks, I have been working on Bluemaxima’s Flashpoint, a program that hosts curated Flash games (and more).
This is a story of how I clearly went in over my head and somehow made it out with a working game.
Working on this kind of project, you inevitably find yourself constantly having nostalgic flashbacks to an earlier time. For me, that was playing online games on websites from the 2000s - Flash, Shockwave, Java applets and so on. And one site that took a while for me to remember is Postopia.com.
This was a site run by Post, the cereal company, and they had flash and shockwave games made for their site. They were almost all sponsored games but were pretty good in their own right (Flintstones were prominent characters, for example).
But after a time, they closed up their servers, moved to PebblesPlay.com (also dead now) and took the games with them.
Lost Media Wiki is currently the only comprehensive place that really talks about the site and its missing games, and slowly Postopia is fading out of collective consciousness save for a few people asking around online for nostalgia’s sake.
And of course (more like thankfully) the Wayback Machine grabbed a copy of that site.
How the site looked back in 2003
So of course, what an interesting dilemma to tackle. How do you extract a game from a site that only exists in archival engines?
A layer of complexity I didn’t expect was the fact that the whole site was basically running as a Flash game. Naturally I expected to encounter flash games, but this is the early 2000s, and Flash was the easiest way to embed videos, have animation and other functionalities (And because of that, it has become almost unusable in modern browsers).
Sadly, although the site runs on Internet Explorer (one of the very few browsers that can play not only Flash but also Java Applets), the Shockwave does not, even with older versions of Shockwave installed on my computer.
So, it was time to delve into Shockwave curation. Shockwave uses a
.dcr format as opposed to Flash’s
.swf to run the game files. Typically, you can just go to the site and use a flash downloader to grab the
.swf but non-flash games require some digging through HTML to hunt for it.
The game on Postopia (unplayable)
In this case, just hunting for the game on the site was frustrating because the archival machine does not always hop to all the asset links on the page, so you may get a screenshot from the same year or you may get one from 2013 and, along with it, a 404 error.
Tip: If hunting for a specific file on Wayback, hit the summary of the site, and then scroll until you see
Explore $sitename URLs(where sitename is the name of the site you’re hunting on). It will give the entire list of resources that they have archived for that site and it can filter by name or file extension.
So I decided I would tackle Pebbles Quarry Adventure.
It was on the front page of the site so it was easier to hunt down. (I used the saved site from June 18, 2004 on IE).
According to the Lost Media Wiki, it was only partially found, with a few files missing. And boy, were they right, I’d later find that out the hard way.
Clicking on the game on the main site gave me a 404.
How did I bypass it? By looking at the URL.
The 404 and the URL mismatching with archive.org’s URL
My uneducated guess was that the site dynamically redirects using Flash and grabs the base URL to build the redirect on it (which is web.archive.org and not Postopia.com).
So I pulled the portion of the URL that said
games/GamePage.aspx?sitegameId=28 and went back to archive and made a new search with that added to the Postopia URL.
There was, luckily, 151 captured for that URL. Went to the one that existed.
Strangely enough, I didn’t have to do crazy extractions to find the .dcr. In Firefox, it automatically downloaded it for me. But if it didn’t, I would inspect the element, hunt for the .dcr where it was embedded (here the embedded was called embed src).
Embedded code and random download request for the DCR
So now I have the file. Flashpoint has a guide for testing games (which I made after my foray into Java applet curation), and it still fits for this use case. However, Shockwave is a bit more complex. Tomysshadow, a moderator and a mechanic at Flashpoint, made this excellent Youtube video on the topic.
Just running the Shockwave .dcr is only part of the solution. Most times there are a few command line arguments that have to be passed to Flashpoint to bypass certain game needs.
Here’s a list with the descriptions.
|–setTheMoviePath||“https://example.com/”||Change the path where the game believes its playing on||Uncommon|
|–setTheMovieName||“example.dcr”||Makes the game believe it has a different filename than it does||Uncommon|
|–setTheEnvironment_shockMachine||0, 1 (1 is yes)||Convinces the game that it is or is not playing in Shockwave.com’s ShockMachine.||Uncommon|
|–setTheEnvironment_shockMachineVersion||””||Sets the version of Shockwave.com’s ShockMachine the game believes it’s playing on||Uncommon|
|–setThePlatform||“Windows, 16”, “Windows, 32”, “Mac, PowerPC”||Convinces the game it is playing on a Mac even if you’re on Windows and vice versa. The numbers refer to the projectr’s architect, not x16/x32 architecture of the OS.||Uncommon|
|–setTheRunMode||“Author”, “Projector”, “Plugin”||Makes the game believe it is playing in the Director Interface, in a Projector or in the broswer, regardless of where it is actually playing.||Common|
|–setTheEnvironment_productBuildVersion||“593” //Any number||Convinces the game it is playing on a different Product Build Version of the software than it actually is||Uncommon|
|–setTheProductVersion||“11.5” //Any version number||Convinces the game it is playing on a different Product Version of the software than it actually is.||Uncommon|
|–setTheEnvironment_osVersion||“Windows Vista” //Any OS||Convinces the game that its playing on a different OS than it is.||Uncommon|
|–setTheMachineType||0-255 (Max), 256(Windows)||Convinces the game that it is playing on a Mac when it is actually on Windows or vice versa in OLDER games.||Uncommon|
|–forceTheExitLock||0, 1 (O is turn off the exit lock)||If a game doesn’t close when you hit X or ESC, use this to force it.||Common|
|–forceTheSafePlayer||0 (default), 1||Forces on or off the safePlayer property, disables unsafe Director actions (like allowing you to edit the file)||Uncommon|
|–setExternalParam||“exmp” “http://example.com” //These are both used in tandem||If you look at the embedded Shockwave game and see param html tags, this is used to set those values and convince the game that it has these parameters set.||Common|
|–disableGoToNetMovie||Prevents the current Shockwave movie from going to other, online movies.||Common|
|–disableGoToNetPage||Disallows the game from opening any webpage in the browser.||Common|
|–bugfixShockwave3DBadDriverList||Fixes a crash that occurs with Shockwave 3D games on Nvidia graphics cards.||Common|
|–do||“alert(‘Hello World’)” //example||Allows you to run Lingo code in the scope of the game being crated after it has been loaded.||Common|
|–go||2 //any number, no quotations||Selects a frame to go to in the movie||Common|
So basically, I used the
--setExternalParam argument over and over again for this portion of the code.
You can see where the embed source is as well as the parameters
Following the video, however, I had the impression that I needed to only put parameters for the URLs/paths. Which worked slightly - the useless 404 redirects turned into useful ones, with the URLs for the necessary files as opposed to the parameter related errors.
Now for the sad part - most of these files were not archived in WayBack.
Out of these 4 files, only one was captures for this particular game, quarry/vr_info.xml, which gives information on Postopia token rewards
So what could I do if these files were not found anywhere?
I made the assumption that these files seemed to be generic ones, ones that were reused for every game (maybe game submission, etc). And after hunting on archive I got lucky, I found similar files but for other games.
The files I found that were for another game
Hoping that it would work, I placed them in. And lo and behold, I managed to get the intro tutorial!
Big sigh of relief
However, a new problem emerged. If I hit play, I would get a black screen.
Here’s where I became grateful to the expert reverse engineers on the team.
In that list of command line arguments, there is one called
--setTheRunMode. What this does is it tricks the Shockwave game into thinking it’s either being tested within the director IDE, standalone or inside the browser. Doing the first two netted me no errors, but the last one finally threw me an alert:
What that meant, I had no idea, so I asked in our Discord - and Tomy answered saying it meant that there were external parameters missing. And I remembered there a few parameters I thought were inconsequential (like a copyright value for example). But I put them all in (the Launch command for the game was huge at this point).
"http://www.Postopia.com/Games/vr_base.dcr" --setExternalParam "src" "/games/vr_loader/vr_base.dcr" --setExternalParam "sw1" "/common/gaming/game_submit.aspx" --setExternalParam "sw2" "Copyright2001Skyworks" --setExternalParam "sw3" "-2" --setExternalParam "sw4" "/common/gaming/game_submit.aspx" --setExternalParam "sw5" "mphost.Postopia.com" --setExternalParam "sw6" "28" --setExternalParam "sw8" "/games/quarry/vr_info.xml" --setExternalParam "sw9" "https://web.archive.org/web/20060424171727/http://www.Postopia.com/common/gaming/game_action.aspx" --setExternalParam "bgcolor" "#000000" --setExternalParam "swstretchstyle" "stage" --setExternalParam "pluginspage" "https://web.archive.org/web/20060424171727/http://www.Postopia.com/common/gaming/game_action.aspx" --setTheRunMode "Plugin" --forceTheExitLock 0 --disableGoToNetPage
The launch code at this point
Then it threw me a new error. It threw my copyright value in an alert box. Hit OK and then got another copyright alert box with slightly altered information. Hit OK, and then get an alert box with Error 22 on it!
At this point it was late, and I was mindlessly working on this. Randomly I though I should get the two copyright notices to match grammatically and exactly.
I hit play and got this:
Now it was crashing for no reason!
I re-started it and replayed it and it kept crashing. Out of frustration, I smashed the
z button on my computer and got this:
After cleaning up the game a little (it would redirect to a website at the end of play and the exit button wasn’t working), it was curated and sent through Discord.
By ingenuity, the kindness of others, and sheer luck, I managed to resurrect a game that should have been lost.
You can play it in the upcoming release of Flashpoint v6.0.
I use this experience as a lesson. We as a species are always confident that the things we make will last forever. But that’s not the case.
More than ever, with the digital age, we are “moving fast and breaking things” as opposed to building things that last. We’re facing a large extinction of a file format that was endemic to the 2000s Internet.
We need a streamlined way for people to easily begin their own archival projects. For the sake of all the people who work on recovering online media.
Big thanks to the Flashpoint Discord Community for all their help! You can download the zip file here.