[FF7PC-98/Steam] Smoother 60FPS Battles (v0.95)

  • Thread starter Thread starter obesebear
  • Start date Start date
Status
Not open for further replies.
Wait time for the next attack moves at 4x speed for everyone.  As is the yellow party indicator
 
Last edited:
Wait time for the next attack moves at 4x speed for everyone.  As is the yellow party indicator
An oscillating value increases both CTimers and VTimers for everyone. Fortunately, it is multiplied by 40 every time it's requested. That's then added to their current wait time. Change this to 10 and things will slow back down. Fortunately, slow and haste are bit shifts and won't need to be adjusted at all.

0x43525A (0x03465A) 28 -> 0A
0x43528C (0x03465C) 28 -> 0A
0x43529B (0x03469B) 28 -> 0A
0x43554C (0x03494C) 28 -> 0A
0x43555D (0x03495D) 28 -> 0A
0x4355FD (0x0349FD) 28 -> 0A


Try that.
 
Last edited:
An oscillating value increases both CTimers and VTimers for everyone. Fortunately, it is multiplied by 40 every time it's requested. That's then added to their current wait time. Change this to 10 and things will slow back down. Fortunately, slow and haste are bit shifts and won't need to be adjusted at all.

Code: [Select]
Code:
0x43525A (0x03465A) 28 -> 0A0x43528C (0x03465C) 28 -> 0A0x43529B (0x03469B) 28 -> 0A0x43554C (0x03494C) 28 -> 0A0x43555D (0x03495D) 28 -> 0A0x4355FD (0x0349FD) 28 -> 0A
Try that.
No luck.  No change from what I can tell.
 
It should at least affect status durations. Maybe that's all it did...

Aww fudge. I misread what that value does. Give me a while.

EDIT:
This is working:
C-Timer
0x433A4B (0x032E4B) 22 -> 08
V-Timer
0x4385FB (0x0379FB) 00 -> 40
0x4385FC (0x0379FC) 01 -> 00
Turn Timer is directly linked with VTimer so it needs no adjusting
0x5CFBC2 (0x1CEFC2) 01 -> 04
0x5CFBE8 (0x1CEFE8) 32 -> 0E


That ought to actually reduce the CTimers, VTimers, and Turn Timers.
 
Last edited:
432254

This and this entire function seem to be the timing for everything really.. the bars and the AI turn timer...

Not sure if that helps you.
 
0x5CFBC0 (0x1CEFC3) 01 -> 03


should be

0x5CFBC2 (0x1CEFC3) 01 -> 03
That's why I put before and after values. :) The value should actually be 04.

432254

This and this entire function seem to be the timing for everything really.. the bars and the AI turn timer...

Not sure if that helps you.
It does do all the setting, but the value manipulation is easier and doesn't require moving other code around.
 
'nother take-back. Undo the turn timer changes

change these back
0x5CFBC2 (0x1CEFC2) 04 -> 01
0x5CFBE8 (0x1CEFE8) 0E -> 32

Keep the rest.
 
Just a thought here...

at moment you are editing every part to make it work at 60fps .  Isn't there some sort of function that calls all these?  So instead of editing a ton of functions for everything, including blinking text speed, we can just edit the one function call?

This way means a load of hex changes are going to be needed.  Is it the only way?
 
The function that calls all of these is the "Draw_Frame" function. If we're increasing the frequency at which that is called then we have to reduce the values it manipulates or create a new timer that handles all these "per frame" functions.
 
Well, my easier way, which isn't what you and obese are doing...mostly...  is to just use code that pause values use...  basically skip major functions 3 of every 4 frames.  I've gotten it working to a large extent already.

More work needed tho.
 
'nother take-back. Undo the turn timer changes

change these back
0x5CFBC2 (0x1CEFC2) 04 -> 01
0x5CFBE8 (0x1CEFE8) 0E -> 32

Keep the rest.
That seems to have done the trick for the party and enemy wait times!

The names still flash very fast along with the yellow indicator, and the menu access is still super fast, but maybe those are things DLPB has already fixed?
 
No, but they should be super easy to fix..  along with the coin scrolling background of course.
 
Well, my easier way, which isn't what you and obese are doing...mostly...  is to just use code that pause values use...  basically skip major functions 3 of every 4 frames.  I've gotten it working to a large extent already.

More work needed tho.
I think a combination of all of our efforts will be needed to fully realize this project. I'm glad to be a part of it.

That seems to have done the trick for the party and enemy wait times!
Heh. The Turn Timer increase was actually undoing the good the VTimer edit did. Since Turn Timer is based on VTimer it would be fixed when VTimer is and not need any alterations.

The C-Timer is an estimation. You can't divide 34 by 4 and get an integer so I just SHR by 2. It's a fair enough approximation, but things might be imperceptibly slower than they should be. I think this only affects timed statuses anyway and I don't know if anyone would complain about longer-laster barriers. :)
 
see the flashing menu stuff isnt too difficult at all...

The active character text is at 6DD415 and you can easily see which timer that's using.

mov eax,[00DC1F44]


edit...

setting 41BDE8 to 1 should sort all flash timings?  No?

edit 2.


That's more global... and affects everything including the slots.  Which we dont want slowing this way.
 
Last edited:
see the flashing menu stuff isnt too difficult at all...

The active character text is at 6DD415 and you can easily see which timer that's using.

mov eax,[00DC1F44]


edit...

setting 41BDE8 to 1 should sort all flash timings?  No?
Does that fix the "Limit" strobing as well?
 
Does that fix the "Limit" strobing as well?
It will fix everything... including the AI timings and char timings..  Problem is...  it also means the slots will then have the same issue they did at 15fps... so that way is a no go :P  Unless you can work something out.
 
You know what, maybe not...

Maybe it's fixed the slots too.

I can't be 100% because I can't get this to record at 60fps... but I'm excited here... because that 1 value might have fixed everything.  It is certainly what the main timing function uses.

edit 2.

No... it's fixed the lot [didn't bother recording... realized all i need to do is advance the game using breakpoints haha].  That one value is the main one.   You can see how it's used in the function that comes after  :-D  The porting team must have set on purpose so the menu/camera etc could work at 15fps.
 
Last edited:
You know what, maybe not...

Maybe it's fixed the slots too.

I can't be 100% because I can't get this to record at 60fps... but I'm excited here... because that 1 value might have fixed everything.  It is certainly what the main timing function uses.

edit 2.

No... it's fixed the lot.  That one value is the main one.   You can see how it's used in the function that comes after  :-D  The porting team must have set on purpose so the menu/camera etc could work at 15fps.
Verified.   The camera is clearly running as it would at 15fps, so it's not as smooth as the interpolated one, but this seems to be the best way to go for now.

Now onto .s files?
 
Status
Not open for further replies.
Back
Top