From cffefcdbf3176640fce9857e96bfc6d0c378c19d Mon Sep 17 00:00:00 2001 From: Skyth <19259897+blueskythlikesclouds@users.noreply.github.com> Date: Wed, 20 Nov 2024 10:54:22 +0300 Subject: [PATCH] Use global instead of function provided delta time in cmaera HFR patches. --- UnleashedRecomp/patches/fps_patches.cpp | 11 +++++++---- UnleashedRecompLib/config/SWA.toml | 26 ++++++++++++------------- 2 files changed, 20 insertions(+), 17 deletions(-) diff --git a/UnleashedRecomp/patches/fps_patches.cpp b/UnleashedRecomp/patches/fps_patches.cpp index d55c5e9..1ad63b1 100644 --- a/UnleashedRecomp/patches/fps_patches.cpp +++ b/UnleashedRecomp/patches/fps_patches.cpp @@ -2,6 +2,7 @@ #include #include #include +#include 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++) { diff --git a/UnleashedRecompLib/config/SWA.toml b/UnleashedRecompLib/config/SWA.toml index 8d2fe1a..e154e37 100644 --- a/UnleashedRecompLib/config/SWA.toml +++ b/UnleashedRecompLib/config/SWA.toml @@ -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]]