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 <api/SWA.h>
#include <ui/window.h> #include <ui/window.h>
#include <cfg/config.h> #include <cfg/config.h>
#include <app.h>
float m_lastLoadingFrameDelta = 0.0f; float m_lastLoadingFrameDelta = 0.0f;
std::chrono::steady_clock::time_point m_lastLoadingFrameTime; 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)); 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++) for (size_t i = 0; i < 4; i++)
{ {

View file

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