CyberStorm screenshot - https://en.wikipedia.org/wiki/File:Cyberstorm_command_screen.png

Fixing Up Old (Sierra) Computer Games

Finally!  Another post going back to what I originally intended this blog for, sort of: Supporting old tech for no apparent reason… other than to get the musings out of my head or the white papers off my old floppies.

The Short of It

It is “most excellent” to announce the return of some Windows 95 games by Sierra and Dynamix to Windows 7… and Windows 8… and even Windows 10!  (Maybe Windows Vista too, but: Who cares?)

For those of you not interested in any long-windedness or boring backstory, here is the link to the current patches home:

Click here for my complete
Sierra game install instructions and
RBXIT Win7 patches at
github.com/juanitogan/rbxit/wiki


For the nerds who just want the patch files, here are the links (but don’t ping me until you read the instructions on the wiki):

Please do not steal these game patches by hosting them on your own site.  Link here instead.  If I can’t determine how popular they might be by the traffic, then why should I make more?

Should they ever move from their current location, I will try to keep this post updated with the new location.  Hence, why I point my comments on other sites here instead of to the current locale.


Patch Issues

Issues can be reported through comments on this blog, but it would be far easier to keep track of conversations if you report issues on the RBXIT Issue page on GitHub.  Thank you.

Also, please report Windows version and 32 or 64 bit.  Copying in any error text from the DOS install window would also be helpful.


The Long of It

I know I am far from being any sort of guru on fixing up old computer games… but I do enjoy my small victory here with these patches.

This quest (because Sierra likes the word “quest”) to get my copies of 3D Ultra Pinball and 3D Ultra MiniGolf working on Windows 7 started back in 2011.  It didn’t go very far other than getting Creep Night working with the help of the, aptly named, Sierra Help Pages.  Then life took over and that was that.

Recently, however, I started looking for some simple, cooperative and/or social, online games to play with friends and family.  There are surprisingly few (or none) that met my criteria, so my thoughts went back to 3D Ultra MiniGolf and its network and online capabilities (now dead — take notice WON2 and Steam).  Therefore, I took a look around for any new developments and, SURPRISE!, I found this YouTube video (from 2011, that I missed finding in 2011):

That solution to turn off the sound effects was just the clue I needed to hook me into looking into this more.  Therefore, if you like the work I’ve done here, give that video a “like” — it’s the least we can do to thank them.

So, after poking that solution a bit, I started looking deeper into things like DirectX and DirectSound.  I had just gone through fixing a sound problem with Worms Crazy Golf which requires installing DirectX 9 in addition to the current DirectX (on my very old but now Windows 10 laptop).  Thus, on that line of thought, I started collecting every version of DSOUND.DLL I could find and dropping it into the MiniGolf folder to see what happens.  In the end, that was a red herring.  All I really learned was that version 4.x of the file = no sound in MiniGolf, and 5.x+ = the usual sound/breaking.

I then tried some free slowdown utilities but go nowhere with those.  I considered trying the commercial Mo’Slo program but didn’t want to buy it without first knowing it works with MiniGolf.  So I pressed on to other ideas.  A slowdown tool was not the ultimate solution I was looking for anyhow.

My next hints came when it came to tearing apart the RBX archive files in the game.  It wasn’t hard to tell with a hex editor that these were where the sound effects were stored.  An internet search revealed another before me who had pulled these apart to harvest the sound data.  That was someone calling him/herself “The Fifth Horseman” in these posts left on these two boards:

Unfortunately, his/her “derbxer” and other files are no longer available online… so I got to start from scratch.  Those clues on what I might find in the WAX files, however, were a helpful head start.  I still had to double check it, correct it, and nail it all down, but it still helped move things along I’m sure.  So a “thank you” there as well.  The WAX header is actually 30 bytes and not 32, and I spent a ton of time testing the fields in it to make absolutely sure they were indeed abbreviatedly borrowed from WAV headers, and testing what could and could not be changed, and how.  I also discovered through much testing with SoX (Sound eXchange) — a huge “thank you” goes to that tool — that the ADPCM data is not exactly IMA format but has reversed nibbles from IMA.  The sound output is very similar either way but reversing the nibbles from IMA standard produces less fry.  Even with this correction, SoX still complains about 1 or 2 (very rarely 3) ADPCM state errors on some of the sound bites (which is far better than hundreds the other way around).  This is very mildly concerning but it does not mean the interpretation is wrong.  It could be erroneous encoding in the first place.

As much time as all that took, I spent the bulk of my time trying to find a way to manipulate the WAX header data and the ADPCM data in such a way as to make the game work without crashing.  I produced some stable intermediate results but never with the audio sounding right.  All ADPCM tests that sounded right, eventually crashed.  And the stable ones that sounded wrong were just a big tease luring me into testing a hundred combinations before calling it quits on ADPCM data.  I was hoping to find a setting that would trigger the game into just passing the ADPCM stream to DirectSound instead of decoding it itself first.  Testing shows that this is not likely programmed and the presence of the IMA ADPCM decoding tables in the EXE supports this theory.

That was all just the curious side of me indulging itself when I was fairly certain I would end up decoding the ADPCM data into PCM data and rewriting the WAX files to serve it up.  Early testing showed that this was possible, it just meant I would have to write another tool to repack the RBX files instead of just modding them.  And, then, if I wanted the old RBX files to be patchable with as-small-as-possible patch files, I would have to go to extra effort to preserve the order of the files in the original archive.  I don’t want to risk being accused of passing around unnecessary data or too much copyrighted stuff.  Ack!

So, anyway, after shaking down all my options, I had only one way forward.  I worked up the the tools better and starting putting together patches for release.  The Fifth Horseman had mentioned CyberStorm 2 and, the more I looked into the CyberStorm series, the more CyberStorm 1 looked like a game needing to be in this first release.  So, I borrowed a copy of it — and also started buying copies of that and other games to fill out my collection of games to fix.

The CyberStorm Brain Storm

After I thought I had fixed CyberStorm 1 (and even packaged it up and released it) as I was about to announce it on some boards, I then discovered that the issues most people were concerned about were not the ones related to my other work here — not the ones I was testing.  Ugh.  The bigger issue was that CyberStorm was quitting without error when attempting to save or load a game.  Not being a CyberStorm gamer, I had stupidly neglected to test all parts such as these.  Embarrassing.  Thus, I had to backpedal a bit and clarify that my first patch only fixed the in-game issues.

I then immediately launched a quest (there’s that word again) to fix the rest of the issues even though first appearances indicated it would require skills I have yet to develop in decompiling.  Still, I pressed on with whatever evidences presented themselves.  Chasing ideas until I had exhausted them.  Early indication was that the problem might be with CommonDialog and the supporting DLLs.  Basically, presuming, for some reason, the new DLLs were not backwards compatible all the way to Windows 95.  Thus, I started dropping in various DLL versions and hacking the dependencies.  Through this I was able to show that the game was making it as far as calling comdlg32.dll.  Some versions of that DLL even faulted in a loggable way.  As tempting as this was, this was still not proof that the fault was with the CommonDialog DLLs.  So, I pressed on after spending perhaps too much time testing this.  I then even toyed with the RecStudio decompiler for a bit.

What I started doing, however, was just harvesting intel from internet searches.  I started bookmarking things that looked related to old programs and CommonDialog.  I found only a few but one of them, fortunately, broke things open when I went back to examine it deeper:

Windows 10 Forums – 32 bit common dialogs not working on 64 bit os

This gave me the clue that there are other application compatibility flags that can be set in the Windows Registry that are not available through the File Properties interface.  Thus, I dug into the registry to play with the one mentioned, DISABLETHEMES, and found others in use there on other applications.  When I did a search on one of those, DWM8And16BitMitigation, I found this:

Matt’s Classic PC Game Fixes – Daytona USA Deluxe

“Hey, Matt, the classic game fixer, thank you!”  From Matt, another classic game fixer.

Matt’s Classic PC Game Fixes site led me to Microsoft’s Application Compatibility Toolkit (ACT).  (What is a bit embarrassing is that I’ve used this tool once before, 12 years ago, to fix Mobile 1 Rally Championship and I don’t remember a thing about using this tool.)  The ACT is now part of Microsoft’s Windows Assessment and Deployment Kit (ADK) (the Compatibility Administrator is the only needed part when you run the install for the whole kit — you can ignore the SQL Server requirement):

MSDN – Windows ADK for Windows 10

When running the Compatibility Administrator (32-bit) I was lucky enough to try the DisableUserCallbackException flag right away with a few other flags.  When CSTORM.EXE tested fine with popping up a file dialog, it was a little hard to believe at first that I had just stumbled upon the solution.  Anyhow, to try and bring this story to a close, I narrowed down the CSTORM.EXE compatibility settings to:

  • Mode: 256Color
  • Mode: DisableUserCallbackException
  • Mode: RunAsHighest_GW   (added to patch release 3)
  • Fix: GetDiskFreeSpace2GB

I got curious as to why DisableUserCallbackException was working and found this/these:

Stack Overflow – How do i fix Win7 app compatibility shim with DISABLEUSERCALLBACKEXCEPTION

Thursday Night – The case of the disappearing OnLoad exception – user-mode callback exceptions in x64

I didn’t dig into all that but consider it proof enough that the error is probably in CSTORM.EXE and not CommonDialog.  This rundown was also a bit helpful:

Program Compatibility Assistant scenarios for Windows 8

This just in as well (patch release 3):

The App Compat Guy – Understanding the AdditiveRunAsHighest Flag on Windows 7

After fixing save and load, I still had the issue that the network screen wouldn’t load for multiplayer network play.  This issue produced an error message… but not a very helpful one:

The instruction at 00000000 referenced memory at 00000000
The memory could not be read from

Click OK to terminate the application

After fiddling with the Compatibility Administrator a bit more on this one, I went back to DLL hunting.  I found that the old DirectPlay DLLs needed to be added to the appropriate system folder in Windows (the newer dp*x.dll files were not being called) and that was that.  I looked up and 4 or 5 days had gone by.  See the wiki for more on all of this.

Therefore, many thanks are owed to “iomismo” for taking the time to write the post at Windows 10 Forums that broke all this open.  Thanks are also owed to Matt for his classic gaming site, and Microsoft (yeah, well) for making some decent compatibility tools to save their reputation somewhat.

I now wonder if the Compatibility Administrator has a flag that can fix the audio algorithm errors I am circumventing with RBXIT… but that will have to wait for another day to test.  For now, I am happy that RBXIT solves just one more compatibility issue and lessens the need for Compatibility Administrator (assuming it might help, dunno).

Help Wanted

I don’t find as much time to devote to gaming as I would like (the only reason I learned programming as a kid in the first place was to write games) so I don’t know the Sierra library that well and could use help finding the games fixable by this method.  There might even be some non-Sierra/Dynamix games fixable by this method.  Basically, the likely candidates are Windows 95 games with RBX files.  Less basically, look for the following sequence of bytes in the EXE file (it is the IMA ADPCM index table — and, yes, the same sequence of 16 bytes twice in a row):

Wanted!  Have you seen this Cody code:
FF FF FF FF FF FF FF FF 02 00 04 00 06 00 08 00
FF FF FF FF FF FF FF FF 02 00 04 00 06 00 08 00

Valve’s Time-warp Division

Did I mention I am looking for a job too?  Oh, perhaps I should have mentioned that sooner.  It seems no one has use for experienced software engineers with no degree like they used to.  Bugger.  The startups want younger people — the enterprises want a degree.  I can’t fix my age so I should have finished that degree in music composition like I’ve always wanted.  I would consider a career shift into zen garden design (seriously) if I could afford to go into business for myself right now.  My ultimate dream job (today at least), if working for someone else, would be to lead a gaming company’s Time-warp Division (my own invented division).  There I would work to promote sells and fandom by creating a false legacy for their newer games that pushes them back into the 8-bit era.  Half-Life on the Nintendo NES anyone?  (I already have the Atari 2600 Half-Life game design in my head.)  Oh, yeah, Halo 2600 (for the Atari 2600) has already been done by Ed Fries (but not marketed or produced like I would).  Such a division might pay for itself if not divide itself.  Might.

Then, and only then, might I be able to also get all these other game designs out of my head.  I swear I’ve got the best 4-player game ever for the 2600 stuck in there (eat your heart out Warlords — “Them’s fightin’ words!”) right next to a fighting simulator for smart phones.  Argh.

What’s all this got to do with Sierra?  I have no idea.  There’s a connection in there somewhere with my work on fixing up these Sierra games and being useful to some video game company somewhere.  Consider this work, RBXIT, my application.  I’m just ranting now.  Here, read my white paper on mayhem in game design if you want more.


Advertisements

80 thoughts on “Fixing Up Old (Sierra) Computer Games

  1. I went ahead and created an issue on github before I realized people were reporting their problems here. Would you rather I redo it here?
    Like others, I’m so excited to see someone making this work! Thanks, and good luck.

    Like

    1. Nope, you totally did it right creating an issue on github. That was a recent request of mine to move issue conversations there. I’m glad you broke the ice there and I’ll see you over there soon. It is getting crazy trying to follow things here with the long list of random comments. Kudos are great to receive here but hopefully others reporting issues will follow you there.

      Like

  2. Just a quick announcement that I’ve released a 32-bit version of Sierra’s 1.01 patch for CyberStorm 2. Also, some tools for installing EarthSiege 2 have been released (which, by the way, is now a free game for download — see the wiki). And I now have a Windows 7/64 test setup again (at a cost of $12.50 and a few days of troublesome install work, sheesh) to start looking into those CyberStorm 1 issues.

    Like

  3. Thanks so much for your work on this. I’ve been a big Cyberstorm player since forever. For my money, you should be working over at GOG.com, helping them make old games compatible with modern OSes again.

    Like

    1. Thanks!! I’m pretty stuck in Albuquerque for the next few years but an offer from GOG might override that. I suspect, however, I don’t have some of the low-level skills they may be looking for. Have not yet had a chance to develop those. I mostly build databases and database apps. High-level programming. I’ve taken data app design and tuning about as high as anyone can go. Looking for something new.

      Like

  4. Another update. Pretty big. I’ve just finished beating DxWnd and Windows 7 into little bits with CyberStorm. I’ve rewritten much of the CyberStorm install wiki as a result. If CS is working for you, you don’t need to read the new stuff. But if you want a fix to the video on Windows 7, you’ll find it there. Also, a new section with more than you ever wanted to know about DxWnd and CS.

    Like

  5. Hi Matt,

    you did a pretty amazing job with the creation of the „compatibility updates“, to bring back the old sierra jems.
    This should be honored by all the sierra fans out there.

    Unfortunately the update package for 3D Ultra Minigolf Deluxe doesn’t work for me (I’m using the version 2.0.0.7).
    The update setup aborts with the following message:
    jungle.RBX
    target window checksum mismatch: XD3_INVALID_INPUT

    Is there a possible chance to get this fixed in the forseeable future?

    It would also be really great to have a “compatibility update” for 3D Ultra Radio Control Racers Deluxe – Traxxas Edition.
    If you need any information or files regarding this I would love to provide these.

    Kind regards

    Like

    1. Hi maku,

      It appears you are in Germany, thus, it is an easy guess that Sierra must have repackaged MiniGolf slightly differently for Europe and/or Germany (just like they did with CyberStorm). The message you get supports that idea. Anyhow, yes, I’m sure I can create a new release for you. I have some other things to get to first but I expect I can get to it soon. Maybe within a week. I’ll email you at the email you used to register here to work out getting copies of your files.

      Regarding RC Racers, I just looked at the demo of it. The demo, at least, seems to work fine. I see that it uses RBX files and the EXE has the ADPCM codes I’m looking for, but it doesn’t appear to use any ADPCM audio files. What is your experience with that game? What is breaking? Also, I see a 1.1 patch for this on sierrahelp.com.

      Matt

      Like

  6. I spent my entire afternoon spinning up a shaky-as-heck Windows 98 virtual machine only to get the game to barely playable status. Then I found this on a lark. For a hot minute a million years ago, my own homepage was a top search result for how to get Cyberstorm working in Windows XP, so from one Unitech commander to another, thanks a million.

    Like

    1. Cool. Thanks for sharing. The inspiration is obvious from the description and screenshots. I wish you well with it. I have a Windows Phone and don’t have any Android devices yet so I can’t try it out yet. I hope others here do though.

      I’m working on a PICO-8 game that may also appeal to fans of CyberStorm. But that would be by shear accident of taking a barely-known 1989 text adventure game and turning it into 2D RPG-ish strategy game. If I did nothing more than change the characters to hercs, then it would work well as a CS spinoff (but probably not as amusing as the original story). Perhaps I will do something like that after I finish the first.

      I only mention that — not to steal any attention from your game — but because I figure the more noise around these games, the better.

      BTW, your title reminds me of the horror movie Ghosts of Mars (2001), but the story sounds more like Mission to Mars (2000), a much better movie.

      Like

  7. Hi, I found your site while looking for some way to play Cyberstorm and I just wanted to say THANK YOU! I loved this game as a kid and was never able to get it to run later in life. I posted the link to your patch and walk through on r/games on Reddit. Keep up the great work!

    Liked by 1 person

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s