Hyperdimension Neptunia Re;Birth1

Hyperdimension Neptunia Re;Birth1

28 ratings
How to change the FPS Cap (With Spooky Assembly) ReBirth;1 ReBirth;2
By 0x8081
A guide for people who want to take advantage of their high refresh rate monitors or just completely break PhyreEngine
2
   
Award
Favorite
Favorited
Unfavorite
Introduction
Most people who have high refresh rate monitors are keenly aware that this game is capped at 60FPS by default with not options or configs to change that, and for those wondering no this game is not capped via Vsync, PyhreEngine caps the frametime to 16,666 μSeconds at all times.

If you're super lazy and don't care about how this was done,
Download will be at the end

As you can see here in the mainmenu...


and ingame.


So we're gonna poke at it with a stick and see how we can get around that.
Finding the Frametime Cap Value address in CheatEngine
Just a quick heads up, no you will not get banned for using CheatEngine with this game, but what you do with it is you're own responsibility.

You can get CheatEngine from it's Github here[github.com]

So after you have that setup all you have to do is attach it to the game and search for 16666
as 4 Bytes, then just try setting each one to zero individually until it you see your FPS is no longer locked at 60



I already found the pointer to the address to make things a bit easier.
(["NeptuniaReBirth1.exe"+004C917C]+1C)


Now just Right Click on the address and Click "Find out what accesses this address", there should only be one result (at least from what I've seen from monitoring it for around 2 hours of gameplay, more on why later)


Now copy the 3 Bytes that make up the instruction that is accessing the address we found, as of now those bytes should be 8B 7E 1C
And now onto IDA Pro were we're gonna patch it so that we don't have to use CheatEngine just to get a buttery smooth 144FPS+ experience
Poking at it in IDA
Take that array of bytes we copied and have IDA search for them, in this case the last result is what we want


Pay attention to the surrounding instructions around mov edi, [esi+1Ch], it should look like this:


Now that we found the right instruction, have it selected and click:
"Edit > Patch Program > Assemble"
and have it assemble this code:
mov edi, 1B20h

Note: This sets the FPS Cap to 144, you can set you're own number by finding the frametime you want in μseconds
Ex:
  • 120 FPS = (1,000,000 / 120) = 8333 (0x208D)
  • 144 FPS = (1,000,000 / 144) = 6944 (0x1B20)
  • 200 FPS = (1,000,000 / 200) = 5000 (0x1388)
Setting it to 0 will set it to have no cap but this F***s a litte bit with PhyreEngine, you'll see why when I cover the bugs

Also one VERY IMPORTANT THING
Patch the jz loc_6378FF to jnz loc_6378FF, this is important because without this PhyreEngine will just ignore the cap we set.

Now just click "Edit > Patch Program > Apply patches to input file"
CHECK "CREATE BACKUP" BEFORE CLICKING OK

And we're done!

Potential Bugs
The only major bug I've encountered is when right after finishing a battle you'll sometimes be displaced quite a ways from where you encountered a monster, sometimes far enough to put you inside walls or under the map.


Note I've mostly only encountered this when the cap is set to 0, also if you just walk back up when you'd normally be able to walk it'll correct your position.
Setting a cap around 120 to 144 seems to mitigate this.

EDIT: After some further testing (with some slightly less hacky patches) this bug only starts occurring when the the frametime cap is set to ~5000 μseconds (200FPS)

Another bugs is some screen tearing when in the overworld but that seems to be mitigated just fine with Freesync
The slightly less hacky way
After failing at trying to patch in and jump to another segment, I looked at the end of the .text segment at there's just a perfectly good 200 bytes to work with, so you can patch in a function so that way the game correctly initializes the way it's supposed to (normally [edi+0x1C] is set to 0 at first then later on something else sets it to 16666, however I couldn't trace which opcode does that since the game only write to the address once and refuses to start with a debugger attached)



Download
ReBirth;1
Here[drive.google.com] is the build I personally use that is capped at 144
CRC64: 07B421114A044362
SHA256: 4FAA6B55BB6164B6C5CA9079F3F806E0E07198B6ABE586ABFD6BA77D86545A22

Updated: 32-5-2019

ReBirth;2
Here[drive.google.com]
CRC64: 41B3F00B10B3F5F2
SHA256: 5E8432838B06893D8ECDD4923A9B490F2023040A3B8793F435A9F4A98C9137D7

Updated: 32-5-2019
7 Comments
OmegaKnuckles 9 Jan, 2023 @ 9:13am 
Do you have anything to set the FPS cap to 60FPS for Re;Birth3?

I know V Generation is uncapped by default but it has the same problems as uncapping Re;Birth 1/2 at 144Hz with the game physics glitching (jumping not working consistently) and animations for items/effects running far faster than they should and causing stuttering with the area for marking an attack in front of your character.
倒れた狐 10 Sep, 2022 @ 2:41pm 
>60 fps is cap by default
my nepnep runs at 1087 and i cant set cap to 60. GPU goes BRRRRRRRRR
smRiji 10 Jan, 2021 @ 1:42am 
Thank you, I patched using Ghidra. Works fine!
Lonce 26 Jul, 2020 @ 10:35pm 
dude thx you sooo much <3
BuIlDaLiBlE 30 Jan, 2020 @ 11:36am 
Patched the latest executables myself, really easy to do!
Nep Nep Neptune 7 Dec, 2019 @ 7:29am 
This is truly Nepsome! :nepnep: .
Uber 26 Oct, 2019 @ 10:29pm 
You are too good for this world :zneptune: