60 FPS patches for the split-screen modes of
Ratchet & Clank: Up Your Arsenal (UYA) and
Ratchet: Deadlocked.
Because these games load the relevant code dynamically, these are dynamic patches. As PCSX2 doesn't yet expose a GUI to configure them, you'll need to manually edit the GameIndex.yaml file.
You'll need to overclock a lot. Even at 180% the PS2 will struggle during intense moments. Unfortunately, at 300%, the game models are corrupted... (Maybe there's a value between 180% and 300% that doesn't corrupt the models?)
There are two versions of the patch, which have different effects when the PS2 can't keep up: the first one frameskips (but you'll stay at full speed), and the second one gradually slows down the game (but you'll see all the frames).
The patches
may work on other versions of the games (or they'll do nothing). If they do work on the PAL version, the last line's value will probably need to be modified.
(Note that the codeblocks may hide part of the patch, make sure you copy all of it)
Ratchet: Deadlocked (SCUS-97465)
Frameskip version:
Code:
dynaPatches:
- pattern:
- { offset: 0x58, value: 0xA2B01680 }
- { offset: 0x60, value: 0x00000000 }
- { offset: 0x68, value: 0x00000000 }
- { offset: 0x6C, value: 0xA2A01680 }
- { offset: 0x70, value: 0x3C030022 }
- { offset: 0x74, value: 0x8C63DDA4 }
- { offset: 0x78, value: 0x8C620000 }
replacement:
- { offset: 0x04, value: 0x00000000 } # Remove the first physics step (not the second one: it does things like drawing the aiming reticle)
- { offset: 0x50, value: 0x00000000 } # Always take the "not 3/4 players" branch (I don't know what it's actually for, but without this, 3/4 players is broken)
- { offset: 0x34, value: 0x00000000 } # Remove the first VSync (leaving the one that is never skipped)
# Feel free to tweak the last 4 digits of the value.
# If too low: the game will frameskip when it doesn't need to.
# If too high: the game may not realize that it needs to frameskip, and run at half speed. Avoid!
- { offset: 0x94, value: 0x24032480 } # Reduce the time required to do another framestep (so that the game will frameskip if it can't keep up)
Slowdown version:
Code:
dynaPatches:
- pattern:
- { offset: 0x58, value: 0xA2B01680 }
- { offset: 0x60, value: 0x00000000 }
- { offset: 0x68, value: 0x00000000 }
- { offset: 0x6C, value: 0xA2A01680 }
- { offset: 0x70, value: 0x3C030022 }
- { offset: 0x74, value: 0x8C63DDA4 }
- { offset: 0x78, value: 0x8C620000 }
replacement:
- { offset: 0x04, value: 0x00000000 } # Remove the first physics step (not the second one: it does things like drawing the aiming reticle)
- { offset: 0x50, value: 0x00000000 } # Always take the "not 3/4 players" branch (I don't know what it's actually for, but without this, 3/4 players is broken)
- { offset: 0x160, value: 0x00000000 } # Remove the second VSync (leaving the one that may be skipped)
# Feel free to tweak the last 4 digits of the value.
# If too low: the game will accelerate when almost struggling (unnoticeable if slightly lower).
# If too high: the game may not disable VSync when struggling, and thus run at half speed. Avoid!
- { offset: 0x18, value: 0x24031A00 } # Reduce the time required to skip VSync (so that the game can slow down gradually if it can't keep up, instead of straight to half speed)
Ratchet & Clank: Up Your Arsenal (SCUS-97353)
Frameskip version:
Code:
dynaPatches:
- pattern:
- { offset: 0x50, value: 0x24022D00 }
- { offset: 0x54, value: 0x0044180B }
- { offset: 0x58, value: 0x00A3182A }
- { offset: 0x60, value: 0x00000000 }
- { offset: 0x68, value: 0x0000202D }
replacement:
- { offset: 0x08, value: 0x00000000 } # Remove the first physics step (not the second one: it does things like drawing the aiming reticle)
- { offset: 0x80, value: 0x00000000 } # Always take the "not 3/4 players" branch (I don't know what it's actually for, but without this, 3/4 players is broken)
- { offset: 0x64, value: 0x00000000 } # Remove the first VSync (leaving the one that is never skipped)
# Feel free to tweak the last 4 digits of the value.
# If too low: the game will frameskip when it doesn't need to.
# If too high: the game may not realize that it needs to frameskip, and run at half speed. Avoid!
- { offset: 0xbc, value: 0x24032480 } # Reduce the time required to do another framestep (so that the game will frameskip if it can't keep up)
Slowdown version:
Code:
dynaPatches:
- pattern:
- { offset: 0x50, value: 0x24022D00 }
- { offset: 0x54, value: 0x0044180B }
- { offset: 0x58, value: 0x00A3182A }
- { offset: 0x60, value: 0x00000000 }
- { offset: 0x68, value: 0x0000202D }
replacement:
- { offset: 0x08, value: 0x00000000 } # Remove the first physics step (not the second one: it does things like drawing the aiming reticle)
- { offset: 0x80, value: 0x00000000 } # Always take the "not 3/4 players" branch (I don't know what it's actually for, but without this, 3/4 players is broken)
- { offset: 0x164, value: 0x00000000 } # Remove the second VSync (leaving the one that may be skipped)
# Feel free to tweak the last 4 digits of the value.
# If too low: the game will accelerate when almost struggling (unnoticeable if slightly lower).
# If too high: the game may not disable VSync when struggling, and thus run at half speed. Avoid!
- { offset: 0x48, value: 0x24031A00 } # Reduce the time required to skip VSync (so that the game can slow down gradually if it can't keep up, instead of straight to half speed)
If you tried these codes on another version of the games, they don't work, and you want to port them, there's good news: all the code involved is in the "main loop" of the split screen logic. Simply pause the emulation (while running split-screen) whenever you want, step over to all the `jr`s (using breakpoints), and when you can't reach one because of an upwards branch taken all the time, then you know you are in the main loop.
Through trial and error, find what function is the VSync (there are two of them, the first called conditionally): when noped, the game will run twice a fast and at double the framerate. Then find the physics step (there are three of them, the third one called conditionally): when noped, the game will run at half speed.
Follow the comments of the existing patch to do the rest.