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

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

  1. Wow! You helped me and my kids relive a happier time long ago with Ultra 3D Mini Golf Deluxe. Thank you so much for all your hard work as turning the sound effects off just to play the game wasn’t the same time travel for us lol!

    Like

  2. Love that you tackled this been working on it all night. Patch seemed to work ok (ill list what it said in a sec) but my problem all night has been you cant save. I try to save it boots me so have not bothered to load in a mission, can play with money, bioderms and herks all night but if I cant save…. Hoping you can help!
    Not sure this has anything to do with my problem but here is what it said at the bottom of the patch.

    Press any key to continue . . .
    xdelta3: source D:\Cyberstorm\CYBDATA2.RBX source size 14.6 MiB [15306390] blksize 64.0 MiB window 64.0 MiB
    xdelta3: target window checksum mismatch: XD3_INVALID_INPUT
    xdelta3: normally this indicates that the source file is incorrect
    xdelta3: please verify the source file with sha1sum or equivalent

    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    !!! Error during audio file patching !!!
    !!! Maybe already patched, wrong region, or unknown print !!!
    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    Press any key to continue . . .

    Like

      1. Hi Shane,

        Thank you for the report. I’ve downloaded the two copies at the link you provided and will look into them more when I get a chance (I need to move to another machine to work with that CCD image). Meanwhile, you should be able to get up and running with the ISO copy from the abandonware link in the install wiki. Europe and US copies have identical content (all in English) just packed differently.

        Your link also helped me learn more about a mystery. The “RIP” version they have looks like someone’s custom rip and is not entire complete (missing at least the AVI and DOC folders). It also includes a CYBDATA4.RBX file that matches one reported by someone else (Rick) a while back as not compatible with either the US or EU patch. I haven’t supported this version of the file yet because Rick couldn’t find where he got it from and couldn’t reproduce it with the disks he had. If I can find that this is legit version of CYBDATA4.RBX from a retail CD somewhere, I will support it but, until then, I will likely not support it. I believe I checked its content and found it to be the same but in a different pack order, but if it also represents this custom rip version, then it’ll be easiest if I leave it alone — and possibly use to tell the user to go find another copy.

        Like

        1. hoping you look into it and maybe holler at the abandon-ware site, hard to find a full (non demo) version of the game. And I loved and owned it. If it is abandon-ware no need to re buy what we bought in the past. But thanks for taking a peek.

          Like

  3. So I made the “tried to use compatibility settings before the patch” mistake. I’m on Windows 10.

    The game plays, but I crash whenever I try to save or load.

    I have tried deleting the folder, copying the CSTORM folder fresh from the ISO and resetting all the compatibility settings, rebooting, and doing it all again. Different folders, different drives even.

    Nothing…

    Do you have any ideas? This game was an old favorite, and I’d love to get it working again.

    Like

    1. 1. Bugger.
      2. It appears you’ve read the wiki pretty thoroughly and I can’t say I have much else to say that I haven’t already said there. But I’ll try.

      This problem with toying with the compatibility settings beforehand is a weird one and makes no sense logically with what I know about the registry and the compatibility database. And, yet, I’ve had this trouble and so have others. Worse, I haven’t succeeded at reproducing it in order to troubleshoot it (I tried once briefly and failed and can’t say I want to spend 50 hours rebooting the PC a hundred times to try to figure it out — counting rivets in a bridge would be more fun).

      Thus, it remains a fuzzy problem with an even fuzzier solution. I can’t say for sure how I got out of it. Neither can the others who have reported it. It’s like it just magically goes away at some point. My suspicion is that your best hope now (after everything else you tried) is to restart from where you started. That is, reinstall to where you first starting testing the compatibility settings and try to redo most of what you originally did there. Then try to undo it all in the same place. The more you can bear to reboot during all that, the better, perhaps. At least, that’s what I did. (But, around the same period, I had also been in and out of the registry many times cleaning things up manually, which, of course, I cannot recommend anyone try to do.)

      Also, remember that CSTORM-Compatibility-Set.bat and CSTORM-Compatibility-Unset.bat (which my patch copies into your game folder) can be your friends throughout all this. They can be run as many times as needed.

      3. Good luck!

      Like

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