These days, we seldom purchase games on physical media. Even when buying titles from yesteryear, we usually download them from an online service. Some of these older games haven’t been properly ported to their new delivery platform, as [Slortibort] found out. Thus, it was time to dive into the game files and sort the problem out.
The game in question was the Hammers of Fate expansion pack for the base game Heroes of Might and Magic V. [Slortibort’s] partner bought it from Ubisoft, and ran the installer. However, the installer would report that it couldn’t find the original files from the base game, and fail to start.
Fixing the issue was no mean feat, requiring use of the Sexy Installshield Decompiler to dive into the guts of the installer to see what was going wrong. In the end, it came down to some registry key shenanigans, but the route of how [Slortibort] got there is well worth the read.
It’s a fine example of some of the issues around moving games to digital distribution; proper attention must be paid to do it right. Even then, there’s always the risk you’ll lose your games down the track. There are benefits, of course, but there’s always a tradeoff to be made.
Sounds like cracking not hacking.
I wouldn’t say so, unless the actual exploit is working around copy protection measures. This does not appear to be the case, the installer is looking for the game by attempting to read obsolete registry keys pointing to the wrong install path of the original game. The reason for this is a bit complicated, but it’s as usual Microsoft’s fault helped along by Ubisoft making stuipid assumptions. There’s no cracking involved here, but a good deal of reasoned troubleshooting of a closed source program. Nice read.
Hi, author here. I’d say that what I’ve done here isn’t cracking the game as I’m not trying to break any DRM or pirate the game. We have a legitimate licence for both the base game and expansion, it’s just not installing.
In the end, my instructions for getting this working involve installing it from a legitimate source (Ubisoft Connect), just tweak a few values along the way.
Hahahhahahaha
“Sounds like cracking not hacking.”
Yeah, no. If anything it sounds like false advertising by Ubisoft at best, assuming they would give a refund if you tell them “it’s not working,” otherwise it’s absolutely blatant fraud – Ubisoft’s been informed *for years* that this game doesn’t work, and it’s still being listed on their store with no notice there’s an issue.
Unfortunately the problem is that if anyone actually pushed them on this they’d certainly just take the game down.
The frustrating thing is that they could probably get free customer help on this if they just had some sort of community interaction on it. Like, “hey, we don’t have resources to fix this, we want to, but we’ll give you This Thing That’s Free But Gamers Value It if you can help us fix it, here’s the info you might need to do it.”
This wouldn’t be the first time a non-functional game has been left up for sale. The name of the title escapes me, but a year or two back I remember reading about an online-only multiplayer game that was still being sold new in stores and on Steam even though the game servers had been shut down.
That perseverance is contagious. Great work!
“Fixing the issue was no mean feat, ”
I know it is probably an idiom, but it seems like it WAS a “mean feat”.
B^)
He used it correctly. It was past the mean.
Ahhh!
Thanks!
Professionally this type of work falls under the heading “Application Compatibility”, and it’s part of what I do for work. It’s super fun!
Oh wow! It makes sense that it’s someone’s job but I didn’t know what it might come under. Do you often have to resort to tweaking hex-values as I did here or are the modern services mostly working from the original sources?
Also do this, as I work as the guy who makes old games run on modern operating systems for a site that is a competitor to gog (zoom-platform.com).
That’s super cool! Most of my work is with ancient proprietary enterprise software, so I’m less familiar with games. It would be really satisfying if I could spend an afternoon playing something and call it testing. :)
Awesome. I’d never heard of you before but I’ve just checked out your site and front-and-centre is Duke Nukem. I think I’ll be checking you out more!
Do you often have to dig through the hex- editor weeds or is it more a matter of trying to make emulation layers work? (Or dosbox, things of that nature)
The troubleshooting part looks very much the same as what you did. It’s digging into blind alleys and pulling at threads until you find the lucky one. Most of my work is with ancient abandoned enterprise software, and in some cases I don’t even have an installer to work with. It’s “Here is a clone of the XP machine where this software works and we need it to work on Windows 10.” Those are always fun. :)
For “patching” the app, I have a different tool in the Toolbox. As part of the Windows ADK Microsoft* has the application compatibility toolkit. The tools in it allow you to do a bunch of different hacks to get apps to work. As an example, the most common Appcompat shim is a “Version Lie”. If you’ve got an app that thinks it only wants to run on Windows 95, you use this to lie to it about the OS version that it’s running on. In your case the shim would be to virtualize the registry so that when the app thinks it’s looking in one place you’re silently redirecting them to somewhere else.
There are literally thousand of shims that ship with Windows; they “just work” so most people never hear about them. :)
I wrote a quick personal blog post about shimming Solidworks to work on Win10 a long time ago. http://www.clutteredlab.com/2015/08/fixed-solidworks-2015-on-windows-10.html
(My most popular blog post by _four_ orders of magnitude.)
* I work for Microsoft, please don’t hold that against me.
That sounds like a wonderful job. “Here’s a problem. Best of luck!” I occasionally get such tasks in my own SW job and despite being one of the most fun bits, they’re typically only a small part of a much larger job.
I work with a lot of very old software. We occasionally don’t have the source, or the shipped executable has been manually patched in the early 90s and it needs unpicking to add functionality. It’s great to hear that this work is elsewhere too.
Thanks for the link. Followed, and it’ll be my reading for tomorrow.
The appcompat shimming would make for an interesting Hackaday article.
Btw, your link is no longer working. Looks like Godaddy wants money.
Thanks. Time to change domains again.
I bought a physical version (not a copy) of The Sims. Nothin’ more basic than that, right? Would not run on Win11. Going to try Virtualbox and WinXP/
Does it give you any error messages when you try to run it? Something of that vintage probably needs the DirectX End-User Runtime Web Installer (https://www.microsoft.com/en-us/download/details.aspx?id=35)
If you don’t figure it out, reply to this comment and I’ll try to help. Appcompat is one of my core skills.
Thanks!
How about hardware software wrapper incompatibility? I’ve got some old games that last ran properly on Windows XP, written in C++, and enveloped to a HASP key. On Windows 10, they write garbled data to save files and randomly crash. Is this something you might be able to provide guidance on, or perhaps contract a solution for?
Maybe? I’d have to play with it to be sure. Random crashes are usually easier to fix. You can catch the exception in a debugger or procmon, see what caused it, and fix that. Garbled data to save files is harder. I’d guess that it’s probably related to file flushing or file path behaviors, but I’d have to play with it.
Copy protected software makes things harder, depending on the veracity of the copy protection. There are special shims (e.g. ShimViaEAT and PreinstallSmartSECURE) whose job is just to fix it so other shims can work through the copy protection.
Short answer… Maybe?
Before going down that bunny trail, have you tried running the app in XP compatibility mode? Right-click the executable > Properties > compatibility tab?
Oh yes, we tried all of the basic OS fixes we could find. Could I contact you through your website? Perhaps you could take a look and see if that’s something you might be willing to contract for us. This is proprietary software so I can’t share much more publicly but I could send more details via email.
Absolutely. I’m Elizabeth.a.Greene@gmail.com.
Thanks!