Some retro games need a little help running on modern systems, and it’s not always straightforward. SimCity 2000 Special Edition is one such game and [araxestroy]’s sc2kfix bugfix DLL shows that the process can require a nontrivial amount of skill and finesse. The result? A SimCity 2000 Special Edition that can run without crash or compromise on modern Windows machines, surpassing previous fixes.
SimCity 2000 Special Edition was a release for Windows 95 that allowed the game to work in windowed glory. The executable is capable of running under modern Windows systems (and at high resolutions!) but it’s got a few problems lurking under the hood.
There are crash issues during save/load dialog boxes, and a big visual problem. Animations rely on palette swapping for the game’s animations, and the technique originally used simply does not work right on modern displays. A fellow named [Guspaz] created SC2KRepainter to partially deal with this by forcing window redraws, but it’s an imperfect fix with a few side effects of it’s own.
[araxestroy]’s new solution eliminates dialog crashes and restores the animations, letting them look exactly as they should even on modern systems. It does this elegantly not by patching the executable or running a separate process, but by making the changes in memory at runtime with the help of a specially-crafted .dll
file. Just grab winmm.dll
from the latest release and put it into the same folder as simcity.exe
, then launch the game to enjoy it as the designers intended!
Patching old games is a scene that helps ensure not only that classics never die, but also helps them be appreciated in new ways. Heck, even E.T. for the Atari 2600 has gotten tweaked, highlighting the misunderstood nature of the game in the process.
I have very fond memories of SimCity 2000. Is it available for (lawful) download somewhere or do you have to own a legit copy to do this?
You can own a legit version free of DRM forever on GoG for a few bucks
Oddly GOG claims that this game is part of it’s Preservation Program with stabilitity checked on Windows 10/11.
So why was this patch needed?
Because microsoft are morans and them break they working code all the time lol 😂
That’s why I run Linux on all my machines, no reason to stick with M$ lamers.
Microsoft are the “morans”? 🤣
The irony of your is not lost on me.
Hi! Author of the patch here. Pleasantly surprised to see it on Hackaday. The reason this patch is needed is because the GOG version is the DOS version packaged up in DOSBox. The Windows 95 version is a native 32-bit Windows executable with support for arbitrary resolutions. The DOS version is, as far as I can tell, limited to 640×480 (though with some UniVBE hackery you might be able to get it to do 800×600, I haven’t tried).
I mostly wrote this patch because I wanted to play SimCity 2000 on my main gaming machine without needing to run a Windows XP VM and convince it somehow to do both 1440p and 8-bit colour.
Amazing! Wonder if your patch could mean GoG selling the Windows version (and send some proceeds your way).
I’d believe the were really into preservation of they did that! I’m sure it’s far from simple in business terms.
I’m supposing I’m just a wee bit confused. The GOG version is SimCity 2000 Special Edition. So, did they make a special edition for both DOS and Windows 95? I was under the impression that Special Edition was only for Windows 95.
If Special Edition was made for DOS as well, and that’s the version that GOG is selling, how would running what you wrote (thank you) make it synonomous with the Windows 95 Special Edition one? Wouldn’t the DOS version and the Windows 95 version still have inheritly different aspects?
Have a look at Gog.com
You can buy the DOS version prepackaged with DosBox on e.g. GOG. How does diffing that to Windows version go, I’m not quite sure, though apparently there’s something.
https://www.pcgamingwiki.com/wiki/SimCity_2000
The DOS version is the worst of them. The Mac version is IMO the best version of the game but there doesn’t seem to be any way to run that anymore, at least not without a LOT of fiddling with classic Mac emulators (which are generally not great to deal with).
It ran on quite a few platforms which have viable emulators.
https://en.wikipedia.org/wiki/SimCity_2000
I remember it running like an absolute dog on my accelerated Amiga 1200, but it was about the most modern/big name game that got ported to Amiga before it died.
I have an old Quadra 650 with System 7.1 that still works. However the built in video doesn’t support high res display while still offering 256 colors, most Quadra maxes out at 1MB VRAM (speedy Quadra 840av or the mighty 900/950 if you can find one all supported 2MB VRAM)
I did love playing SImCity 2k back in the day and still fire it up occasionally.
Random knowledge dump ….
The winmm.dll is a doorstop file. Windows is actually looking actively for those doorstops in the same folder as the exe you wanted to start. The doorstop gets loaded first, which in turn loads the the actual executable.
Makes the injection of code (eg. game modding, point in case) a bit more comfortable.
Could also be named “version.dll” or “winhttp.dll”. That depends a bit on the version of Windows.
Or really any DLL that the target executable loads/uses.
Unless specified(?) any windows executable looks for all it’s required DLLs in it’s own directory first.
SpecialK for example uses any one of these to inject itself into the target game’s execution/memory:
opengl32.dll dxgi.dll d3d11.dll d3d9.dll d3d8.dll ddraw.dll dinput8.dll
-> https://wiki.special-k.info/en/SpecialK/Local
But thats it. The target software doesn’t need to use a dll with that name. Windows is the culprit in first checking if there is a dll with those names to load them.
Looking at your link … its the same.
Just a list with different working doorstop names. And different kinds it seems. Neat, there is potential for a bit of fun playing around with those. Quick test with renaming one of my version.dll game mods to opengl32.dll is still trying to do “something” but freaks out :D. Makes sense, what I got here is not graphics related (MelonLoader for Unity games)
Yes, it does need to use it. The library needs to be something it dynamic links against.
It searches the same directory first, which is why it overrides the system library.
You seem surprised that having the application dynamic link the wrong library for symbols it’s expecting causes it to break, and are misatttibuting why it breaks.
That is not how DLL loading works.
Reticulating splines.
I was hoping someone would mention that ;)
The voice of Roxy Wolosenko (sp?), one of the producers of that particular Software Toy. (It’s not a game, dammit! You don’t win or lose, you just play with it.) Source: Me, the lead tech support guy for it many, MANY years ago.
In the specific case of SC2000 you can win, but the win condition is more of an Easter egg than anything else.
The mass launch of the Arcos? I’ve only had that via cheat, never actually built a successful city and ran it long enough to build bunch of Arcologies and trigger the Easter Egg
Ah, fond memories of me reverse engineering the save game format in 9th grade (hint: RLE compression) and trying to impress a girl with an editor. If only I could find the SC2K installation CD…
You forgot the best part. Did it work? Was she impressed?
She said she put the floppy in the drive “but nothing happened”.
When I heard that I didn’t even attempt to explain to her how to start my command line tool.
I had SC2k but the hole in the disc got hollowed out somehow which became an issue with the fast spinning drives. In a 32x optical drive, it would start to vibrate really bad. I decided to throw the disc out before it destroyed my optical drive. I held on to my saved game file for a while but it’s since been lost.
There are fixes for this. Ahead Nero Burning ROM had “Nero DriveSpeed” utility.
On DOS, there’s CDSPEED utility. https://www.vogons.org/viewtopic.php?t=19162
If that still doesn’t work, it’s possible to create an image and use a virtual CD-ROM drive or a VM.
On Windows, MagicISO (XP+) and DaemonTools 4.37 (98SE) are quite well known.
I think I still have the install disk. I wonder if I could run it under my Bottle for GoG and then make the swap.
Can you fix the Amiga version please? The Amiga actually plays the Mac version better under emulation than the actual Amiga version.