Rez

Here is where I will dump patches and other miscellaneous stuff for Rez – the 2001 musical rail shooter.

Patches

These are for and have only been tested on the European Dreamcast release of the game unless specified otherwise.

60 FPS

To effectively use this cheat code, you will need an emulator such as Flycast to overclock the CPU by 100MHz or more, otherwise the game or emulator can lag, slow down, or activate sort of frameskip back down to 30 FPS.

020d06e6 e4012f46
020d06ea 000b2142
010d06ee 000064f6

The game can run at 60 FPS, it is this way in the menus and in the "how to play" demo. It just isn't this way in-game because the original hardware can't handle it stably.

The way this patch works is it patches the function each level module calls to change the "frame stabilizer" interval to make it always set it to 1 – the value for 60 FPS (whereas 2 is 30 FPS) – regardless of what the callee specified.

Old code (smaller, more tested albeit less safe)

During trying to figure out why the original code wouldn't work on Windows (see here), I decided to write a revision of it that stores the register used by the function parameter to the stack to be later restored, instead of just writing directly to it without restoring. Even though from my inspection there doesn't seem to be anything using that register directly after, that should still be the safer & more proper solution. That revision is now the main one, and is also what should've been done from the start.

However, if for some reason that new revision doesn't work for you, or you just want a shorter code, the older revision is also provided.

020d06e4 e401d105
020d06e8 2142000b
Old Flycast fix (Windows)

Before Flycast v2.3, if you were on Windows, then cheat codes wouldn't always save properly (see this pull request). As such, I have provided a properly saved .cht file that contains the correct values.

After downloading it, you should rename it to the file name of the .gdi file of your copy of Rez (with a .cht added to the end, of course), then move it inside of the data folder of your Flycast installation (which should be located relative to where your Flycast .exe file is).

Download it here.

Debug

All other resources I saw only told you how to activate it with DEmul and Cheat Engine, and didn't provide any cheat code.

0028e08d 000000c5

(I forget if using this touches your game save or not, so to be safe make a copy of the one you properly play with before using this.)

To use this, insert a keyboard into port D and a mouse into port B. Alternatively, you can use a controller in port B instead.

Miscellaneous

Gindows in Rez Infinite

Interestingly, Rez Infinite still has support for Gindows — the windowing system used for debugging in the original Dreamcast release — albeit not in a usable state due to input not working and it seemingly not being available in the new menu UIs.

With my copy of the game (SHA1 of REZ.exe: bad86a0271e5015445bcf32bf2c37845e3370a7b. Dated around May 2023), the byte the debug enablement bit flag is in is located at the address 140583EF9. If you change it to a value such as C5 while on the intro where you see Eden or you're in-game, you should be able to see the Gindows cursor in the top left for a short period until it fades out. However, due to lack of functioning input code there's nothing else you can do.

See the cursor in the top left of the window?

If you somehow manage to interact with it, please let me know. I may revisit this in the future.

Alleviate Rez Infinite audio desync issues on Wine

As of writing, Rez Infinite on Wine has issues with its audio, mainly with it being desynced (that being most noticeable during level transitions). Alleviating these issues turns out to be quite a simple job to do.

  1. Download the June 2010 DirectX Redist and then extract it to a folder of your choice. There should then be a whole bunch of different CAB files.
  2. Extract "Feb2010_X3DAudio_x64.cab" and "Jun2010_XAudio_x64.cab".
  3. Copy over the following DLLs from the CABs just extracted to "C:/Windows/system32" inside the Wine prefix (usually located at ~/.wine).
    • X3DAudio1_7.dll
    • XAPOFX1_5.dll
    • XAudio2_7.dll
  4. Run winecfg, go to the Libraries tab and in the "New override for library:" combo box, enter and add each DLL mentioned in the list earlier without the ".dll" suffix. Click "Apply" on the winecfg window once finished.
  5. Launch the game. The game should start and now have no noticeable audio desyncs in-game. If the game doesn't start at all and remains on a black screen, try forcing Microsoft Direct3D 11 instead of DXVK.

If you're using Proton, Wine prefixes for each game are located in the compatdata folder inside your steamapps folder. DLL overrides can be done by putting a WINEDLLOVERRIDES parameter inside the launch parameters within Steam. Instructions for this are not included as reports on ProtonDB as of the time of writing show no issues, implying they fix this automatically anyway.

Dreamcast Mouse Support

The Dreamcast release of the game has incomplete/partial mouse support. It only works if the mouse is inserted into port A. (Saving should still be possible as the game scans all ports for controllers with a VMU.)

Controls
Button Action
Left click A (Shoot)
Right click B (Overdrive)
Middle click Start (Pause, skip intro)
Scroll wheel Up/down (Menu)
(To grab your mouse in Flycast, press Left Ctrl and Left Alt simultaneously.)

Certain parts of the UI such as the refresh rate selector when you start the game and the dialogs that show throughout do not fully work with this as you cannot properly select an option. As such, you may have to keep switching between a controller and a mouse.

Mouse movement in-game unfortunately isn't very good to use. Movement is slow and wonky and it isn't a very enjoyable experience. However, if you're using the 60 FPS patch the mouse is much more usable to play with as movement is generally faster.

Mouse movement weirdness

I suspect the slow mouse movement is mostly related to frame rate and therefore how frequently the mouse's movement inputs are being processed.

Unlike the controller, where its stick positions are absolute inputs and directly reflect how much they have been moved by, the mouse is a relative input device as it doesn't have a base position, which means its movements are only determined by how much movement there has been since the last time it was polled.

The more frequently the mouse is polled, the smaller the difference in movement reported by each poll.

Rez's mouse code seemingly slows down and hinders in-game movements the larger this difference gets, as moving your mouse slowly enough can give you faster and more finer movements. However, if you patch your game to run at 60 FPS, mouse movements are generally faster. This could indicate mouse movement is being processed each frame in a frame rate dependent way.

I'm reluctant to say the mouse is being polled every frame, as repeatedly shooting while having a very low frame rate still gives consistent audio feedback, so I presume with each mouse poll the movement is being stored and modified in the game's own internal variables until they are reset after each time they are read by mouse movement handling code. Further research shall be done on this, as I am not very sure.

Should a patch be made in the future, the enhancements made would be as follows:

  • Faster, more accurate and frame rate independent mouse movement
  • Fully support all menus
  • Use vibration/jump/puru puru pack of all controllers (as currently you can't get vibrations at all)
Internal details

The addresses listed here are according to the European release. These may help and provide a head start if you wish to tinker with this.

Addresses
Address Type Name Description
8C0B031E Function Controller/mouse input thing

Checks current input type and processes inputs accordingly.

For the mouse, it also does some calculations from the mouse X and Y scale.

8C11AD7C Float Mouse X scale
8C11AD80 Float Mouse Y scale
8C20F288 Integer Current input type

1 = Controller
2 = Mouse

Much other input data is stored in around this area.

Debug (PlayStation 2, USA)

This is not yet in the Patches section above as I haven't written a cheat code for it, nor have I tested this in a long time, but the relevant bitflags should be located at address 002c7cec. If I remember correctly, you would OR this by 0xc000 to enable debug.

Unlike the Dreamcast where you can plug in a mouse to use for Gindows, for the PS2 you'll have to use a controller.