illusion's Blog
Contact Patches

Patches for MediEvil (PS4 Remake)

Intro

Another classic gets a complete overhaul in Graphics, Gameplay and the works but of course not all things are perfect and this game is no exception. When I first boot up the game for the first time, went into the options menu and it got me curious.

A 30FPS Cap option in the menu, but is it any good?

No, it is not.. :(

Time for a fix and a good ol’ resolution patch for 60FPS in some cases.

Part 1 - Patching Resolution

Patching resolution in Unreal Engine 4 games has become easier than ever, usually you can guess 100.0(float) as the target and find the correct one in memory.

MyResOverride(); // call
                 // vars renamed for easier reading

void MyResOverride(void)

{
  var.ResScale = 0x42860000; // write to memory 67.00f
  vmovss_avx(var.ResScale);  // read to xmm0, original instruction
  return;
}

Easy as that.

I heard that the PS4 Pro version does not have support for 4K displays, meaning if you run the game on a 4K TV Set, it will still output at 1080p.

Part 2 - Fixing Frame-Pacing

In Unreal Engine, there is two ways at least that I know of to cap the framerate.

There is Sync Interval, which will cap to frametime.

And there is Max FPS, which instead will cap to framerate but very loosely as we saw earlier.

Toggling the option in the menu on and off lands on a float, when on it is set to 30.0(float) and when off it’s set to 60.0(float), pretty simple.

A way to fix this is to completely ignore Max FPS and instead use the sync interval variable instead. it provides much better frametime stability and no stutters.

  FpsFunction(); // call
                 // vars renamed for easier reading

void FpsFunction(void)

{
  vucomiss_avx(var.MaxFPS);   // original memory address
  if (var.MaxFPS) == 30.00) { // 0x41f00000
    var.SyncInterval = 2;     // 30.0hz (33.3ms)
  }
  else {
    var.SyncInterval = 0;     // 60.0hz (16.6ms)
                              // (unlimited with vsync off)
  }
  return;
}

What this code does is it checks if the value in memory is 30.00 or not, if it is, set var.SyncInterval to 2 for 30FPS or else, set it 0 which is the default.

To the developers, can we get this fix in a official patch? and even better, 4K support.

Fun Fact: this meme almost went unused.

Results

See the video below for a comparison between the patched versions.

Patch

Patch Code

Supporters

Thanks to the patrons who supported me on various platforms! You guys are awesome!

Monthly supporters:

  • Patreon:

    • ac2pic
    • Alexa
    • Brett
    • Ciril
    • GarnetSunset
    • Mmmmmhno
    • Paul
    • PlayStation5Mods
    • RazzySxPB
    • Ryan
    • Voredy
    • YveltalGriffin
    • Zackery
    • alessaro92
    • ashenC
    • embee
    • erdosadam24
    • faith
    • maplemiyazaki
    • patrick
    • rudi
  • Github Sponsors:

    • VIPO777
    • WardFail
    • Whitehawkx
    • gorshco
    • jrson83
    • regal.
    • suwagawaki