Resident Evil 1 PC, a fix to the classic version

If you’re looking for a fix to this ancient port, click on the jump button and get ready for fun times!

So, where to start? There’s a lot to say about this version of Resident Evil.

Released around 1997, this was yet another version of the game that received many prints: Japan, USA,  Asia (an almost carbon copy of USA), and various European countries (UK, Germany, and probably France too). Some of these received reprints, update patches, or even separate releases altogether like the legendary PowerVR edition. With each version you get different quirks and hardware supported. For example, the original USA version only explicitly supports accelerated cards (despite having two hidden software “debug” rendering engines), PowerVR would only work with a card of the same name, and Japan received the most updated patch (1.01, Europe being the second one with 1.00c) that consisted in… well, no idea to be honest what it does, but speedrunners love that one.

Now, this port of the game is ancient, like Win95 stuff, which means there will be little chance for it to run on modern Windows, unless whoever ported this programmed a miracle into it… aaaand unfortunately they didn’t. In most cases you can try and boot them game with Win95/98 compatibility mode, but that raises many issues and still leaves a ton more to be solved. For example, the game runs at insane speeds (despite having 100% CPU0 spikes), sometimes even causing cutscenes bugs leading to the game soft-hanging (i.e. it still works but characters are stuck doing nothing). Other issues are incompatibilities with hardware rendering support, tho in some cases you can fix that with a few DLLs (dgVoodoo seems to be the best at this, from my personal tests). And of course, no support for modern input devices, despite XInput controllers being partially compatible (no shoulder triggers or D-Pad support for XBox 360/One controllers tho).

Given all these issues, I decided to come up with my personal solution to all of this, by trying to program the One DLL to Rule them All. It is a replacement for DDRAW.DLL, which is Microsoft’s driver for DirectDraw, now a mere compatibility workaround that most of the times just doesn’t cut it. So, what does my DLL do exactly?

  • It lets you run the game without resorting to Win95/98 compatibility mode (i.e. it runs fine on Win7 and Win10 — still hasn’t been tested on Win8, but it should work there as well). This accidentally fixes the CPU0 100% usage spikes, too.
  • It fixes the framerate for good, even when cutscene audio is being reproduced. The game is intended to run at either 30 or 60 frames per second, depending on which section of the game is currently active (main game runs at 30, menus and door animations at 60), and this patch finally delivers that.
  • If the application forced the whole Desktop to go into 16 bit mode (i.e. disable Aero on Win7), it doesn’t anymore due to the integration of DXGL as a DirectDraw wrapper. This makes the game effectively run with OpenGL 2.0 used as a wrapper for all DirectDraw calls. Beware tho, if you’re using OBS to record footage of this you might have trouble. It also seems to have issues when you move the application window to a secondary monitor, effectively freezing the video in place.
  • XInput controllers become fully compatible. You can use the D-Pad or Left Stick to move around, and even shoulder triggers work as intended.
  • No more abuse of the Windows Register to store configuration data. It has all been moved to a nice INI file that can be manually edited, effectively making the game portable without having to install it.
  • Video files actually load from your installation drive, rather than from CD. I’m not sure if this was intended to be some sort of anti-copy measure so that you would have the game disk inserted at all times, but it doesn’t really matter since it’s fixed.

Now, with all these features you might be wondering what’s left to do. Well, there are a few things that I need to implement in order for this to be more or less an actual definitive fix to the game. Here’s what I’d like to have in future releases:

  • An entire replacement of the software renderer, which is currently the only one to work out of the box. I’m currently looking into locating an rewriting the necessary code, so this is probably just a matter of time.
  • Support for higher resolutions and a nice configuration dialog that opens up when you first boot the game with the DLL.
  • A real plug & play solution, since you still need to edit CONF.INI that comes with the DLL to reflect the current path where the game is being executed from.
  • Support for more if not most versions of the game. Currently it only support 1.00c European, also known as NEWEUR.EXE (shouldn’t be too hard to find, it’s usually labeled as an “x64 fix”).
  • Release the full source, tho this isn’t an actual feature and only programmers will be interested.

I guess that’s all for this update. You can find the fix download at the following page.