Use global instead of function provided delta time in cmaera HFR patches.

This commit is contained in:
Skyth 2024-11-20 10:54:22 +03:00
parent e403f961aa
commit cffefcdbf3
2 changed files with 20 additions and 17 deletions

View file

@ -2,6 +2,7 @@
#include <api/SWA.h>
#include <ui/window.h>
#include <cfg/config.h>
#include <app.h>
float m_lastLoadingFrameDelta = 0.0f;
std::chrono::steady_clock::time_point m_lastLoadingFrameTime;
@ -36,14 +37,16 @@ static double ComputeLerpFactor(double t, double deltaTime)
return 1.0 - pow(1.0 - t, (30.0 + bias) / (fps + bias));
}
void CameraLerpFixMidAsmHook(PPCRegister& t, PPCRegister& deltaTime)
// It's important to use global delta time here instead of function provided
// delta time, as it might be time scaled and not match with 30 FPS behavior.
void CameraLerpFixMidAsmHook(PPCRegister& t)
{
t.f64 = ComputeLerpFactor(t.f64, deltaTime.f64);
t.f64 = ComputeLerpFactor(t.f64, g_deltaTime);
}
void CameraTargetSideOffsetLerpFixMidAsmHook(PPCVRegister& v13, PPCVRegister& v62, PPCRegister& deltaTime)
void CameraTargetSideOffsetLerpFixMidAsmHook(PPCVRegister& v13, PPCVRegister& v62)
{
float factor = float(ComputeLerpFactor(double(v13.f32[0] * v62.f32[0]), deltaTime.f64));
float factor = float(ComputeLerpFactor(double(v13.f32[0] * v62.f32[0]), g_deltaTime));
for (size_t i = 0; i < 4; i++)
{

View file

@ -213,52 +213,52 @@ jump_address = 0x8247DD3C
[[midasm_hook]]
name = "CameraLerpFixMidAsmHook"
address = 0x8247DD48 # Slope
registers = ["f0", "f21"]
registers = ["f0"]
[[midasm_hook]]
name = "CameraLerpFixMidAsmHook"
address = 0x8247DDFC # Dash path binormal
registers = ["f0", "f21"]
registers = ["f0"]
[[midasm_hook]]
name = "CameraLerpFixMidAsmHook"
address = 0x8247E280 # Target front offset
registers = ["f0", "f21"]
registers = ["f0"]
[[midasm_hook]]
name = "CameraLerpFixMidAsmHook"
address = 0x8247E300 # Target
registers = ["f0", "f21"]
registers = ["f0"]
[[midasm_hook]]
name = "CameraLerpFixMidAsmHook"
address = 0x8247E3C8 # Target
registers = ["f0", "f21"]
registers = ["f0"]
[[midasm_hook]]
name = "CameraLerpFixMidAsmHook"
address = 0x8247E4A0 # Target up positive
registers = ["f0", "f21"]
registers = ["f0"]
[[midasm_hook]]
name = "CameraLerpFixMidAsmHook"
address = 0x8247E4E8 # Target up negative
registers = ["f0", "f21"]
registers = ["f0"]
[[midasm_hook]]
name = "CameraLerpFixMidAsmHook"
address = 0x8247E9FC # Position
registers = ["f0", "f21"]
registers = ["f0"]
[[midasm_hook]]
name = "CameraLerpFixMidAsmHook"
address = 0x8247EA84 # Position up negative
registers = ["f0", "f21"]
registers = ["f0"]
[[midasm_hook]]
name = "CameraLerpFixMidAsmHook"
address = 0x8247EA50 # Position up positive
registers = ["f0", "f21"]
registers = ["f0"]
[[midasm_hook]]
name = "CameraDeltaTimeFixMidAsmHook"
@ -269,7 +269,7 @@ jump_address = 0x8247ED34
[[midasm_hook]]
name = "CameraLerpFixMidAsmHook"
address = 0x8247ED40 # Distance offset 1
registers = ["f0", "f21"]
registers = ["f0"]
[[midasm_hook]]
name = "CameraDeltaTimeFixMidAsmHook"
@ -280,12 +280,12 @@ jump_address = 0x8247ED58
[[midasm_hook]]
name = "CameraLerpFixMidAsmHook"
address = 0x8247ED64 # Distance offset 2
registers = ["f13", "f21"]
registers = ["f13"]
[[midasm_hook]]
name = "CameraTargetSideOffsetLerpFixMidAsmHook"
address = 0x8247F12C # Target side offset
registers = ["v13", "v62", "f21"]
registers = ["v13", "v62"]
# 2D camera HFR fixes
[[midasm_hook]]