Please note that you are required to have a exploited PlayStation 4 console to run the patches mentioned in this article.

Cursitory

I have been experimenting with unlocking framerate with success in Silent Hills: P.T. and I always wondered if the Base PlayStation 4 Hardware could achieve 60FPS on two of my most beloved titles. Life is Strange and it’s prequel Before the Storm.

As of the writing of this post, Xbox Users now gets a ‘patch’ from the Xbox Team allowing for higher framerate on Series X and S Consoles!

Life is Strange (@LifeIsStrange) on Twitter:

We can’t wait for fans to experience #LifeisStrange and #LifeisStrange2 now with FPS boost on Xbox Series X & S!

Tweet

Lifting 30FPS Limit in Unreal Engine 3

In my previous post we have already established that vsync flip rate or interval is most likely responsible for controlling the target. It can be called SceVideoOutFlipRate or SceVideoOutSubmitFlip.

I’ll use the same method of finding function responsible for controlling the target framerate mode here and it may end up being easier than I initally thought!

For the first game and that is Life is Strange, searching for just flip yields some results.

SubmitFlip but no fliprate? Let's search for more.

Vsync in Unicode string came up with more interesting results.

012bb916 48 8d 35        LEA        param_2,[u_togglevsync_02fd8598]
         7b cc d1 01
012bb938 48 8d 05        LEA        RAX,[DAT_03875828]
         e9 9e 5b 02
012bb94c 89 88 60        MOV        dword ptr [RAX + 0x360]=>DAT_03875b88,ECX
         03 00 00

togglevsync catched my interests and it points to a memory location, let’s see what happens when its set to 1.

Unlocked Framerate! But it has no limits and introduce a lot of screen tearing.

018a2dfc 83 b9 60        CMP        dword ptr [RCX + 0x360]=>DAT_03875b88,0x0
018a2e16 0f 84 8c        JZ         LAB_018a2ea8
         00 00 00
         03 00 00 00
018a2e77 b0 01           MOV        AL,0x1
018a2ea4 77 aa           JA         LAB_018a2e50

This looks interesting, it moves 1 into AL and there’s JA which stands for Jump Above in x86 asm. I don’t have much idea as to what’s going on here but I tried setting this AL instruction to 0 and removing this Jump instruction seem to solve the issues I had with screen tearing and it now limits to 60FPS.

Aw yeah. That's more like it. 60FPS and no Screen Tearing.

Lifting 30FPS Limit in Unity

How about Before the Storm?

This title runs on unity. Let’s try to simply search for flip in function name and see what we get.

01e53d99 45 85 f6        TEST       R14D,R14D
01e53d9c 74 15           JZ         LAB_01e53db3
01e53d9e 8b bb a0        MOV        param_1,dword ptr [RBX + 0x2a0]
         02 00 00
01e53da4 31 f6           XOR        param_2,param_2
01e53da6 41 83 fe 01     CMP        R14D,0x1
01e53daa 40 0f 95 c6     SETNZ      param_2
01e53dae e8 dd cf        CALL       sceVideoOutSetFlipRate
         1b 00

Seems like this jump will not set a zero and skip calling this function entirely. But there’s a Set Not Zero here. Which I think will set it to 1? How about Set Zero.

01e53daa 40 0f 94 c6 SETZ param_2

Let’s test this change in game.

It worked!

Result

Patch

Patch Code: Life is Strange

Patch Code: Life is Strange Before the Storm

Patreon Supporters

Thanks to the following folks who supported me on Patreon.

You guys are awesome!

  • smasher248

  • Ethan Snyder

  • cad5150