cipherxof / MGSFPSUnlock

Play Metal Gear Solid 3 at framerates above or below 60 fps
30 stars 0 forks source link

Everything still tied to 60FPS (that i could find) #1

Open yumtako opened 7 months ago

yumtako commented 7 months ago

All tests done with TargetFrameRate set to 120. also, thank you so, so much for making this. i've wanted this type of thing for eons.

Stuff that is definitely broken:

Stuff that might be broken:

the stuff below was tested with TargetFrameRate set to 100

Bike segment/shagohod issues:

Stuff found by Strafe:

Certain guards are off-sync, especially Cobra Unit

cipherxof commented 7 months ago

You mentioned on discord that you set your framerate target to 120fps but you capped your game at 90fps and would dip below that. How many of these issues still apply with a proper framerate target set?

yumtako commented 7 months ago

You mentioned on discord that you set your framerate target to 120fps but you capped your game at 90fps and would dip below that. How many of these issues still apply with a proper framerate target set?

That only happened with the bike scene, and i retested afterward with a proper frametarget set (set to 90) all of the issues that i've mentioned still occur, except for the gun animation slowdown, which i've removed from the issue list.

emoose commented 7 months ago

BTW it seems the games still have some remnants of 50Hz/60Hz speed switching from the X360 version built into it, eg things like:

23-10-24_11-52-30-610_ida64a

That GameIs50Hz function (0x140001E40 in MGS3 1.0.0) probably would have been great to look through xrefs for to get an idea of what should be changed based on framerate, sadly in MC that func was gutted and replaced with return false, and seems their compiler folded all the same return false functions together, so now there's 500+ xrefs to that which are mostly not speed related :(

Maybe would be possible to go through each of them and mark down things that do look related, would probably take some effort though. (alternately the function for that in X360 should have far less refs since it was left intact there, could be worth looking at to get an idea of things - iirc to find it in X360 you can look for what calls VdQueryVideoMode)

Maybe you noticed this already though, but felt it was worth bringing up just in case.

cipherxof commented 7 months ago

BTW it seems the games still have some remnants of 50Hz/60Hz speed switching from the X360 version built into it, eg things like:

23-10-24_11-52-30-610_ida64a

That GameIs50Hz function (0x140001E40 in MGS3 1.0.0) probably would have been great to look through xrefs for to get an idea of what should be changed based on framerate, sadly in MC that func was gutted and replaced with return false, and seems their compiler folded all the same return false functions together, so now there's 500+ xrefs to that which are mostly not speed related :(

Maybe would be possible to go through each of them and mark down things that do look related, would probably take some effort though. (alternately the function for that in X360 should have far less refs since it was left intact there, could be worth looking at to get an idea of things - iirc to find it in X360 you can look for what calls VdQueryVideoMode)

Maybe you noticed this already though, but felt it was worth bringing up just in case.

I did notice this, yes. I had actually hooked the function and forced it to return true (while also ignoring the specific calls that crashed), and I didn't see any difference in FPS/gamespeed. I may have been doing the hook too late though.

In the X360 version, when the refresh rate is at 50hz GV_TimeBase is set to 6 (default is 5, so 20% higher). The problem with higher refresh rates is that we can't divide the time base evenly. For example, 120hz would be 2.5, but GV_TimeBase is an integer (which is typecasted to a float in many places...). The X360 version is a good place to look though to find the problematic areas, so thanks for reminding me, but there are over 100 xrefs to go through :(