Plans for Resident Evil 3

I thought I’d work first on Dino Crisis 2 because it’s the better game to me and it’s also a lot easier to work with, but let’s keep the fun for dessert. More after the jump.
From my previous tweets about RE3, it’s easy to tell it’s not my favorite in the series, nor the easier to work with (as a matter of fact, it’s a satanic mess). But why is it so hard to tackle compared to the other titles?

For starters, the way RE3 was ported to PC doesn’t have any shortcomings of bad programming practices and improper usage of C++ code with unnecessary “obfuscation” almost everywhere. The PlayStation code is still all there, mostly intact and working pretty much the same way, except for a few changes imposed by the different platform (file loading comes to my mind). The real problem with that is that CAPCOM reimplemented the entirety of the PlayStation SDK, which is entirely composed of C function calls. The issue is that inside C functions there are C++ wrappers jumping a lot around via pointless virtual tables. They could have used virtual methods only when a specific class required so (i.e. polymorphism) and they even did with previous conversions, but in this case it’s there just because it has to be — there was no need to resort to such a solution, which wasn’t optimal even at the time. This thing in particular makes researching the game’s code confusing as it gets.

Still, even if the improper “polymorphism” wasn’t there, the game has other issues, like the base PlayStation loop running in a thread while Windows does its own thing (again, unnecessary), visual glitches of all sorts, missing effects, Windows components in the option dialogs not showing up correctly, not very good controller support, etc. You know the drill with these ports.

So, let’s see what needs to be fixed with this one:

  • Wobbly polygons and warped textures – this is identical to what Dino Crisis suffers the most in the PC port. Just like in DC’s case, the game internally emulates the PlayStation GTE verbatim, meaning that it uses fixed math to generate polygons coordinates that snap in a 320×240 grid.
  • Replace all rendering code so that the game runs in 32 bits instead of 16 bits.
  • Replace the DInput 5.00 implementation of controllers and keyboards via the usual stuff also used on previous projects.
  • Integrate The Mercenaries mode into the main game, instead of as a separate executable. Strangely the whole mode is still all there intact, just unreachable.
  • Disable the broken option Windows dialog and enable instead the in-game Configuration screen.
  • Fix crashes that seldomly happen during door transitions. This is probably caused by the game running in a thread and jumping around via VSync.
  • Do the usual translation stuff, since this project is based on the SourceNext print.

See you all in a couple months, if this works out as intended.