From 69eca566a4c816371cc63ae0d6a9bc0f375ed6f2 Mon Sep 17 00:00:00 2001 From: RecklessGlue540 <143945383+RecklessGlue540@users.noreply.github.com> Date: Wed, 28 Jan 2026 23:21:29 +0200 Subject: [PATCH 01/17] Refactor frame rate fixes --- source/comvars.ixx | 4 + source/fixes.ixx | 9 +- source/frameratevigilante.ixx | 380 +++++++++++++++++++--------------- source/nightshadows.ixx | 2 +- source/vram.ixx | 28 ++- 5 files changed, 241 insertions(+), 182 deletions(-) diff --git a/source/comvars.ixx b/source/comvars.ixx index e5a308d1..3fae048c 100644 --- a/source/comvars.ixx +++ b/source/comvars.ixx @@ -1966,6 +1966,7 @@ export namespace CTimer uint8_t* m_UserPause = nullptr; uint8_t* m_CodePause = nullptr; int32_t* m_snTimeInMilliseconds = nullptr; + int32_t* m_snTimeInMillisecondsPauseMode = nullptr; } export namespace CTimeCycle @@ -2564,6 +2565,9 @@ public: pattern = find_pattern("A1 ? ? ? ? A3 ? ? ? ? EB 3A", "A1 ? ? ? ? 39 05 ? ? ? ? 76 1F"); CTimer::m_snTimeInMilliseconds = *pattern.get_first(1); + pattern = find_pattern("89 0D ? ? ? ? F3 0F 11 05 ? ? ? ? A3 ? ? ? ? E8 ? ? ? ? F3 0F 10 0D ? ? ? ? F3 0F 10 44 24 ? 84 C0 74 ? 0F 2F C1 77 ? EB ? 0F 2F C1 76 ? 0F 28 C8 F3 0F 10 05 ? ? ? ? 0F 2F C1 77 03 0F 28 C8 80 3D", "89 0D ? ? ? ? D9 2C 24 E8 ? ? ? ? 84 C0 F3 0F 10 05 ? ? ? ? F3 0F 10 4C 24 ? 74 ? 0F 2F C8 77 ? EB ? 0F 2F C8 76 ? 0F 28 C1 F3 0F 10 0D ? ? ? ? 0F 2F C8 77 03 0F 28 C1 80 3D"); + CTimer::m_snTimeInMillisecondsPauseMode = *pattern.get_first(2); + pattern = find_pattern("83 3D ? ? ? ? ? 74 17 8B 4D 14", "83 3D ? ? ? ? ? 74 15 8B 44 24 1C", "83 3D ? ? ? ? ? 74 EF"); rage::grcDevice::ms_pD3DDevice = *pattern.get_first(2); diff --git a/source/fixes.ixx b/source/fixes.ixx index f6dbdb44..fc7ec68b 100644 --- a/source/fixes.ixx +++ b/source/fixes.ixx @@ -6,8 +6,8 @@ export module fixes; import common; import comvars; -import settings; import natives; +import settings; import shaders; class Fixes @@ -828,13 +828,6 @@ public: injector::WriteMemory(pattern.get_first(0), 0xEB, true); // jz -> jmp } - // Radar zoom (T hotkey) 30fps cap fix - { - auto pattern = find_pattern("83 F9 ? 0F 86 ? ? ? ? F3 0F 10 15", "83 F8 1E 0F 86 ? ? ? ? F3 0F 10 0D ? ? ? ? 0F 2E C1"); - if (!pattern.empty()) - injector::WriteMemory(pattern.get_first(2), 15, true); - } - // Radar zoom stays for a bit { auto pattern = find_pattern("E8 ? ? ? ? 84 C0 74 ? F3 0F 10 05 ? ? ? ? F3 0F 11 44 24 ? 6A"); diff --git a/source/frameratevigilante.ixx b/source/frameratevigilante.ixx index c2def6d0..f8afe9d3 100644 --- a/source/frameratevigilante.ixx +++ b/source/frameratevigilante.ixx @@ -1,4 +1,4 @@ -module; +module; #include @@ -6,15 +6,18 @@ export module frameratevigilante; import common; import comvars; -import settings; import natives; +import settings; injector::hook_back hbsub_A18510; double __fastcall sub_A18510(void* _this, void* edx, void* a2, void* a3) { float f = 1.0f; + if (!Natives::IsUsingController()) + { f = 3.0f; + } return hbsub_A18510.fun(_this, edx, a2, a3) * (*CTimer::fTimeStep / (1.0f / 30.0f)) * f; } @@ -25,10 +28,10 @@ uint32_t* dword_12088B4 = nullptr; uint32_t* dword_1037720 = nullptr; uint32_t* dword_11F704C = nullptr; SafetyHookInline shCameraShake = {}; -void __fastcall CameraShake(float* CameraData, void* edx, float Multiplier) +void __fastcall OnFootCameraShake(float* CameraData, void* edx, float Multiplier) { - static auto cs = FusionFixSettings.GetRef("PREF_CAMERASHAKE"); - if (!cs->get()) + static auto CameraShake = FusionFixSettings.GetRef("PREF_CAMERASHAKE"); + if (!CameraShake->get()) { float Output[] = { 0.0f, 0.0f, 0.0f }; return Matrix34::fromEulersXYZ(CameraData, 0, Output); @@ -97,69 +100,6 @@ void __fastcall CameraShake(float* CameraData, void* edx, float Multiplier) Matrix34::fromEulersXYZ(CameraData, 0, Output); } -// Original code, for reference. -/* -void __fastcall CameraShake(float* CameraData, float Multiplier) -{ - static auto cs = FusionFixSettings.GetRef("PREF_CAMERASHAKE"); - if (!cs->get()) - { - float Output[] = { 0.0f, 0.0f, 0.0f }; - return Matrix34::fromEulersXYZ(CameraData, 0, Output); - } - - float DeltaTime = *CTimer::fTimeStep; - - float TimeScale = DeltaTime * 30.0f; - if (*dword_11F7060 == 1 || *dword_12088B4 != -1 || *dword_1037720 == 18) - { - TimeScale = (unsigned int)dword_11F704C * 0.001f; - TimeScale *= 30.0f; - } - - float CamX = fabs(CameraData[16] / CameraData[20]) * (CameraData[37] - CameraData[36]) + CameraData[36]; - float CamY = fabs(CameraData[17] / CameraData[21]) * (CameraData[37] - CameraData[36]) + CameraData[36]; - float CamZ = fabs(CameraData[18] / CameraData[22]) * (CameraData[37] - CameraData[36]) + CameraData[36]; - - if (CameraData[16] > 0.0f && CameraData[28] > 0.0f || CameraData[16] < 0.0f && CameraData[28] < 0.0f) - CamX *= CameraData[32]; - if (CameraData[17] > 0.0f && CameraData[29] > 0.0f || CameraData[17] < 0.0f && CameraData[29] < 0.0f) - CamY *= CameraData[33]; - if (CameraData[18] > 0.0f && CameraData[30] > 0.0f || CameraData[18] < 0.0f && CameraData[30] < 0.0f) - CamZ *= CameraData[34]; - - CamX *= rand() / 32767.0f * CameraData[24]; - CamY *= rand() / 32767.0f * CameraData[25]; - CamZ *= rand() / 32767.0f * CameraData[26]; - - if (CameraData[16] > 0.0f) - CamX *= -1.0f; - if (CameraData[17] > 0.0f) - CamY *= -1.0f; - if (CameraData[18] > 0.0f) - CamZ *= -1.0f; - - if ((int)(rand() / 32768.0f * ((int)TimeScale * (int)CameraData[38] - 1)) == 1) - { - CamX += CameraData[39] * (rand() / 32767.0f * 2.0f - 1.0f); - CamY += CameraData[39] * (rand() / 32767.0f * 2.0f - 1.0f); - CamZ += CameraData[39] * (rand() / 32767.0f * 2.0f - 1.0f); - } - - CameraData[28] += CamX; - CameraData[29] += CamY; - CameraData[30] += CamZ; - - CameraData[16] = std::clamp(CameraData[28] * TimeScale + CameraData[16], -CameraData[20], CameraData[20]); - CameraData[17] = std::clamp(CameraData[29] * TimeScale + CameraData[17], -CameraData[21], CameraData[21]); - CameraData[18] = std::clamp(CameraData[30] * TimeScale + CameraData[18], -CameraData[22], CameraData[22]); - - float Output[] = { CameraData[16] * Multiplier, CameraData[17] * Multiplier, CameraData[18] * Multiplier }; - - Matrix34::fromEulersXYZ(CameraData, 0, Output); -} -*/ - std::unordered_map last_fov_values; std::unordered_map fov_cache_initialized; injector::hook_back hbSET_CAM_FOV; @@ -185,7 +125,7 @@ void __cdecl NATIVE_SET_CAM_FOV(int cam, float targetFOV) if (fabsf(desired_increment) <= SMALL_INCREMENT_THRESHOLD) { // Small increment - apply time-based scaling - float time_scaled_increment = desired_increment * (*CTimer::fTimeStep * 30.0f); + float time_scaled_increment = desired_increment * *CTimer::fTimeStep / (1.0f / 30.0f); new_fov = fov + time_scaled_increment; } else @@ -208,15 +148,15 @@ void __cdecl NATIVE_SET_CAM_FOV(int cam, float targetFOV) injector::hook_back hbSLIDE_OBJECT; bool __cdecl NATIVE_SLIDE_OBJECT_1(Object object, float x, float y, float z, float xs, float ys, float zs, bool flag) { - float delta = *CTimer::fTimeStep * 30.0f; - return hbSLIDE_OBJECT.fun(object, x, y, z, xs * delta, ys * delta, zs * delta, flag); + float Delta = *CTimer::fTimeStep / (1.0f / 30.0f); + return hbSLIDE_OBJECT.fun(object, x, y, z, xs * Delta, ys * Delta, zs * Delta, flag); } SafetyHookInline shNATIVE_SLIDE_OBJECT{}; bool __cdecl NATIVE_SLIDE_OBJECT_2(Object object, float x, float y, float z, float xs, float ys, float zs, bool flag) { - float delta = *CTimer::fTimeStep * 30.0f; - return shNATIVE_SLIDE_OBJECT.unsafe_ccall(object, x, y, z, xs * delta, ys * delta, zs * delta, flag); + float Delta = *CTimer::fTimeStep / (1.0f / 30.0f); + return shNATIVE_SLIDE_OBJECT.unsafe_ccall(object, x, y, z, xs * Delta, ys * Delta, zs * Delta, flag); } class FramerateVigilante @@ -226,142 +166,261 @@ public: { FusionFix::onInitEventAsync() += []() { - // Handbrake Cam (test) + // Handbrake Cam force (Gamepad) auto pattern = find_pattern("E8 ? ? ? ? D9 5C 24 7C F3 0F 10 4C 24", "E8 ? ? ? ? D9 5C 24 70 F3 0F 10 44 24 ? F3 0F 58 86"); hbsub_A18510.fun = injector::MakeCALL(pattern.get_first(0), sub_A18510).get(); - // Bikes (By Sergeanur) + // CCamFollowVehicle auto centering force + { + // Skips some clamps set in the vehicle camera code that prevent auto centering from scaling properly with the frame rate + pattern = find_pattern("77 ? 0F 28 C2 F3 0F 5C 8F", "77 ? 0F 28 D3 F3 0F 10 8E"); + if (!pattern.empty()) + { + injector::MakeNOP(pattern.get_first(0), 2, true); + } + + pattern = find_pattern("76 ? 0F 28 C8 EB ? F3 0F 10 4C 24 ? 80 7C 24", "76 ? 0F 28 CE EB ? 0F 28 CF 84 D2"); + if (!pattern.empty()) + { + injector::WriteMemory(pattern.get_first(0), 0xEB, true); + } + } + + // Bike physics (Originally by Sergeanur) + // They will need a full fix in the future, one of the main things to look at are the slippery wheels, this only marginally improves them pattern = hook::pattern("F3 0F 10 45 ? 51 8B CF F3 0F 11 04 24 E8 ? ? ? ? 8A 8F"); if (!pattern.empty()) { - struct FramerateVigilanteHook1 + injector::MakeNOP(pattern.get_first(0), 5, true); + static auto BikePhysics = safetyhook::create_mid(pattern.get_first(0), [](SafetyHookContext& regs) { - void operator()(injector::reg_pack& regs) - { - float f = std::clamp(*(float*)(regs.ebp + 0x08), 1.0f / 150.0f, FLT_MAX); - *(float*)(regs.ebp + 0x08) = f; - regs.xmm0.f32[0] = f; - } - }; injector::MakeInline(pattern.get_first(0)); + float f = *(float*)(regs.ebp + 0x08); + f = std::clamp(f, 1.0f / 30.0f, FLT_MAX); + regs.xmm0.f32[0] = f; + }); } else { - pattern = hook::pattern("8B BE ? ? ? ? 33 C9 85 FF 7E 47 8A 5D 0C 33 D2 8D A4 24 ? ? ? ? 3B CF 7D 0A 8B 86 ? ? ? ? 03 C2 EB 02 33 C0 F6 80 ? ? ? ? ? 74 11 83 B8 ? ? ? ? ? 74 08 84 DB 0F 85 ? ? ? ? 83 C1 01 81 C2 ? ? ? ? 3B 8E ? ? ? ? 7C C5 D9 45 08 51 8B CE D9 1C 24 E8 ? ? ? ? 8A 86"); - struct FramerateVigilanteHook1 + pattern = hook::pattern("D9 45 ? 51 8B CE D9 1C 24 E8 ? ? ? ? 8A 86"); + injector::MakeNOP(pattern.get_first(0), 3, true); + static auto BikePhysics = safetyhook::create_mid(pattern.get_first(0), [](SafetyHookContext& regs) { - void operator()(injector::reg_pack& regs) - { - regs.edi = *(uint32_t*)(regs.esi + 0xFD4); - *(float*)(regs.ebp + 0x08) = std::clamp(*(float*)(regs.ebp + 0x08), 1.0f / 150.0f, FLT_MAX); - } - }; injector::MakeInline(pattern.get_first(0), pattern.get_first(6)); + float f = *(float*)(regs.ebp + 0x08); + f = std::clamp(f, 1.0f / 30.0f, FLT_MAX); + *(float*)(regs.ebp + 0x08) = f; + }); } - // Loading text - pattern = hook::pattern("F3 0F 10 05 ? ? ? ? F3 0F 58 C1 F3 0F 11 05 ? ? ? ? EB 36"); - if (!pattern.empty()) + // Loading text flash speed (IV and TLAD) { - static auto f1032790 = *pattern.get_first(4); - struct LoadingTextSpeed + // Skips an else path which post-processes the flash speed unnecessarily. + // The speed previously worked correctly at variable frame rates on patches 1050 and lower, + // but this check added in patch 1060 along with TBoGT's sparks prevents it from working properly. + pattern = hook::pattern("F3 0F 10 05 ? ? ? ? F3 0F 58 C1 F3 0F 11 05 ? ? ? ? EB"); + if (!pattern.empty()) + { + injector::MakeNOP(pattern.get_first(0), 20, true); + } + else + { + pattern = hook::pattern("F3 0F 10 05 ? ? ? ? F3 0F 58 05 ? ? ? ? F3 0F 11 05 ? ? ? ? EB"); + injector::MakeNOP(pattern.get_first(0), 24, true); + } + + // This just slightly corrects Toronto's old fix from 1040 to be fully accurate to the other patches + pattern = hook::pattern("F3 0F 10 44 24 ? F3 0F 59 05 ? ? ? ? F3 0F 59 05 ? ? ? ? F3 0F 59 05 ? ? ? ? F3 0F 58 05"); + if (!pattern.empty()) { - void operator()(injector::reg_pack& regs) + injector::MakeNOP(pattern.get_first(0), 22, true); + static auto LoadingTextFlashSpeed = safetyhook::create_mid(pattern.get_first(0), [](SafetyHookContext& regs) { - regs.xmm0.f32[0] = *f1032790 * *CTimer::fTimeStep; - regs.xmm0.f32[0] += regs.xmm1.f32[0]; - } - }; injector::MakeInline(pattern.get_first(0), pattern.get_first(12)); - } - else - { - pattern = hook::pattern("F3 0F 10 05 ? ? ? ? F3 0F 58 05 ? ? ? ? F3 0F 11 05 ? ? ? ? EB 30"); - static auto f1738420 = *pattern.get_first(4); - struct LoadingTextSpeed + // Ends up being dword_1175C40 += dword_1032790 * (SomeTimer * (1000 / 30)); + regs.xmm0.f32[0] = *(float*)(regs.esp + 0x34); + regs.xmm0.f32[0] *= (1000 / 30); + }); + } + else { - void operator()(injector::reg_pack& regs) + pattern = hook::pattern("F3 0F 10 44 24 ? F3 0F 59 05 ? ? ? ? F3 0F 59 05 ? ? ? ? F3 0F 58 05"); + injector::MakeNOP(pattern.get_first(0), 14, true); + static auto LoadingTextFlashSpeed = safetyhook::create_mid(pattern.get_first(0), [](SafetyHookContext& regs) { - regs.xmm0.f32[0] = *f1738420 * *CTimer::fTimeStep; - } - }; injector::MakeInline(pattern.get_first(0), pattern.get_first(8)); + // Ends up being dword_11FB434 += dword_F38420 * (SomeTimer * (1000 / 30)); + regs.xmm0.f32[0] = *(float*)(regs.esp + 0x44); + regs.xmm0.f32[0] *= (1000 / 30); + }); + } } - // Loading sparks - pattern = hook::pattern("F3 0F 58 0D ? ? ? ? 0F 5B C0 F3 0F 11 0D"); - if (!pattern.empty()) + // Loading text sparks' speed (TBoGT) { - struct LoadingTextSparks + // So for IV's flashing we had an initial speed and then a secondary speed. + // Here its similar, however the secondary speed might actually drive everything as the initial one is just * 0.001 while the secondary one is * 0.085. + // So we're just taking the timer variable Toronto used for IV in 1040 and scale the secondary value with that. + pattern = hook::pattern("F3 0F 58 0D ? ? ? ? 0F 5B C0 F3 0F 11 0D"); + if (!pattern.empty()) + { + static auto dword_E81598 = *pattern.get_first(4); + injector::MakeNOP(pattern.get_first(0), 8, true); + static auto LoadingTextSparksSpeed = safetyhook::create_mid(pattern.get_first(0), [](SafetyHookContext& regs) + { + // Ends up being dword_1175770 += dword_E81598 * (SomeTimer * (1000 / 30)); + regs.xmm1.f32[0] += *dword_E81598 * *(float*)(regs.esp + 0x34) * (1000 / 30); + }); + } + else { - void operator()(injector::reg_pack& regs) + pattern = hook::pattern("F3 0F 58 05 ? ? ? ? F3 0F 2A 0D"); + static auto flt_DEF584 = *pattern.get_first(4); + injector::MakeNOP(pattern.get_first(0), 8, true); + static auto LoadingTextSparksSpeed = safetyhook::create_mid(pattern.get_first(0), [](SafetyHookContext& regs) { - regs.xmm1.f32[0] += 0.6375f * *CTimer::fTimeStep; - } - }; injector::MakeInline(pattern.get_first(0), pattern.get_first(8)); + // Ends up being dword_11FB41C += flt_DEF584 * (SomeTimer * (1000 / 30)); + regs.xmm0.f32[0] += *flt_DEF584 * *(float*)(regs.esp + 0x44) * (1000 / 30); + }); + } } - else + + // Loading screen animation speed + // Fixes loading screen animations running at double the intended speed in comparison to consoles. + // That is normally pretty noticeable when using the console loading screens with the default console loadingscreens.dat files. + // Note: This does not fix the somewhat fps dependent loadscreen animations on itself, but just slows them down so they match consoles at 30fps. { - pattern = hook::pattern("F3 0F 58 05 ? ? ? ? F3 0F 2A 0D"); - struct LoadingTextSparks + auto pattern = hook::pattern("F3 0F 59 0D ? ? ? ? C7 84 18"); + if (!pattern.empty()) { - void operator()(injector::reg_pack& regs) + injector::MakeNOP(pattern.get_first(0), 8, true); + static auto LoadingScreenAnimationSpeed1 = safetyhook::create_mid(pattern.get_first(0), [](SafetyHookContext& regs) { - regs.xmm0.f32[0] += 0.6375f * *CTimer::fTimeStep; - } - }; injector::MakeInline(pattern.get_first(0), pattern.get_first(8)); + regs.xmm1.f32[0] *= 33.3f; // 66.6f --> 33.3f + }); + + pattern = hook::pattern("F3 0F 59 25 ? ? ? ? C7 84 18"); + injector::MakeNOP(pattern.get_first(0), 8, true); + static auto LoadingScreenAnimationSpeed2 = safetyhook::create_mid(pattern.get_first(0), [](SafetyHookContext& regs) + { + regs.xmm4.f32[0] *= 33.3f; // 66.6f --> 33.3f + }); + } + else + { + pattern = hook::pattern("F3 0F 10 15 ? ? ? ? F3 0F 59 E3 F3 0F 59 E2"); + injector::MakeNOP(pattern.get_first(0), 8, true); + static auto LoadingScreenAnimationSpeed1 = safetyhook::create_mid(pattern.get_first(0), [](SafetyHookContext& regs) + { + regs.xmm2.f32[0] = 33.3f; // 66.6f --> 33.3f + }); + + pattern = hook::pattern("F3 0F 10 15 ? ? ? ? F3 0F 10 A4 37"); + injector::MakeNOP(pattern.get_first(0), 8, true); + static auto LoadingScreenAnimationSpeed2 = safetyhook::create_mid(pattern.get_first(0), [](SafetyHookContext& regs) + { + regs.xmm2.f32[0] = 33.3f; // 66.6f --> 33.3f + }); + } } - // CD/busy spinner - pattern = hook::pattern("F3 0F 58 05 ? ? ? ? 33 C0 A3 ? ? ? ? F3 0F 11 05"); + // CD/Busy spinner speed + // Note: + // This does not work for the spinner that shows up while loading saved games, as CTimer::fTimeStep does not work in menus. + // It is not a big deal, because we skip that spinner so saves load faster. But if we ever want to restore it, that should be looked into. + pattern = hook::pattern("F3 0F 58 05 ? ? ? ? 33 C0 A3"); if (!pattern.empty()) { - struct CDSpinnerHook + static auto dword_E841A8 = *pattern.get_first(4); + injector::MakeNOP(pattern.get_first(0), 8, true); + static auto CDSpinnerSpeed = safetyhook::create_mid(pattern.get_first(0), [](SafetyHookContext& regs) { - void operator()(injector::reg_pack& regs) - { - regs.xmm0.f32[0] += *CTimer::fTimeStep * 5.0f; - } - }; injector::MakeInline(pattern.get_first(0), pattern.get_first(8)); + regs.xmm0.f32[0] += *dword_E841A8 * *CTimer::fTimeStep / (1.0f / 30.0f); + }); } else { - pattern = hook::pattern("F3 0F 58 15 ? ? ? ? 33 C0 F3 0F 11 15 ? ? ? ? A3 ? ? ? ? 8B 0D ? ? ? ? 39 0D ? ? ? ? 74 0B"); - struct CDSpinnerHook + pattern = hook::pattern("F3 0F 58 15 ? ? ? ? 33 C0 F3 0F 11 15"); + static auto dword_DD6B68 = *pattern.get_first(4); + injector::MakeNOP(pattern.get_first(0), 8, true); + static auto CDSpinnerSpeed = safetyhook::create_mid(pattern.get_first(0), [](SafetyHookContext& regs) { - void operator()(injector::reg_pack& regs) - { - regs.xmm2.f32[0] += *CTimer::fTimeStep * 5.0f; - } - }; injector::MakeInline(pattern.get_first(0), pattern.get_first(8)); + regs.xmm2.f32[0] += *dword_DD6B68 * *CTimer::fTimeStep / (1.0f / 30.0f); + }); } - // Cop blips - pattern = find_pattern("F3 0F 10 4C 24 ? 0F 28 C1 F3 0F 59 C2", "D9 44 24 04 8B 0D ? ? ? ? D8 0D ? ? ? ? F3 0F 10 05 ? ? ? ? 83 05 ? ? ? ? ? D9 3C 24"); + // Cop blips' speed + pattern = hook::pattern("A1 ? ? ? ? 6B C0 15"); if (!pattern.empty()) { - static int CustomFrameCounter = 0; - - static auto CounterHook = safetyhook::create_mid(pattern.get_first(), [](SafetyHookContext& regs) + injector::MakeNOP(pattern.get_first(0), 5, true); + static auto CopBlipsSpeed = safetyhook::create_mid(pattern.get_first(0), [](SafetyHookContext& regs) { - static float accumulator = 0.0f; - accumulator += (*CTimer::fTimeStep / (1.0f / 30.0f)); - int increment = static_cast(accumulator); - CustomFrameCounter += increment; - accumulator -= increment; + regs.eax = *CTimer::m_snTimeInMillisecondsPauseMode / (1000 / 30); }); + } + + // Radar zoom speed + { + // This skips a check that determines after how many frames the radar zooming is updated. + // Normally it updates every 30 milliseconds, which visually makes the zooming always update at a "30hz" rate regardless of fps. + pattern = find_pattern("0F 86 ? ? ? ? F3 0F 10 15 ? ? ? ? 0F 2E CA", "0F 86 ? ? ? ? F3 0F 10 0D ? ? ? ? 0F 2E C1"); + if (!pattern.empty()) + { + injector::MakeNOP(pattern.get_first(0), 6, true); + } + + // Zoom in speed + pattern = hook::pattern("F3 0F 58 15 ? ? ? ? 0F 2F CA EB"); + if (!pattern.empty()) + { + static auto dword_FE8B5C = *pattern.get_first(4); + injector::MakeNOP(pattern.get_first(0), 8, true); + static auto RadarZoomInSpeed = safetyhook::create_mid(pattern.get_first(0), [](SafetyHookContext& regs) + { + regs.xmm2.f32[0] += *dword_FE8B5C * *CTimer::fTimeStep / (1.0f / 30.0f); + }); + } + else + { + pattern = hook::pattern("F3 0F 58 0D ? ? ? ? 0F 2F C1 EB"); + static auto dword_E52BF8 = *pattern.get_first(4); + injector::MakeNOP(pattern.get_first(0), 8, true); + static auto RadarZoomInSpeed = safetyhook::create_mid(pattern.get_first(0), [](SafetyHookContext& regs) + { + regs.xmm1.f32[0] += *dword_E52BF8 * *CTimer::fTimeStep / (1.0f / 30.0f); + }); + } - pattern = hook::pattern("A1 ? ? ? ? 6B C0 15"); + // Zoom out speed + pattern = hook::pattern("F3 0F 5C 15 ? ? ? ? 0F 2F D1 76 ? 0F 28 CA"); if (!pattern.empty()) - injector::WriteMemory(pattern.get_first(1), &CustomFrameCounter, true); + { + static auto dword_FE8B5C = *pattern.get_first(4); + injector::MakeNOP(pattern.get_first(0), 8, true); + static auto RadarZoomOutSpeed = safetyhook::create_mid(pattern.get_first(0), [](SafetyHookContext& regs) + { + regs.xmm2.f32[0] -= *dword_FE8B5C * *CTimer::fTimeStep / (1.0f / 30.0f); + }); + } + else + { + pattern = hook::pattern("F3 0F 5C 0D ? ? ? ? 0F 2F C8 76 ? 0F 28 C1"); + static auto dword_E52BF8 = *pattern.get_first(4); + injector::MakeNOP(pattern.get_first(0), 8, true); + static auto RadarZoomOutSpeed = safetyhook::create_mid(pattern.get_first(0), [](SafetyHookContext& regs) + { + regs.xmm1.f32[0] -= *dword_E52BF8 * *CTimer::fTimeStep / (1.0f / 30.0f); + }); + } } - // Camera Shake + // Camera shake game_rand = (decltype(game_rand))injector::GetBranchDestination(find_pattern("E8 ? ? ? ? F3 0F 10 4C 24 ? F3 0F 5C 4C 24 ? F3 0F 10 5C 24", "E8 ? ? ? ? F3 0F 10 4C 24 ? F3 0F 59 4C 24 ? F3 0F 59 4C 24").get_first()).as_int(); dword_11F7060 = *find_pattern("83 3D ? ? ? ? ? F3 0F 10 05 ? ? ? ? F3 0F 59 C1", "83 3D ? ? ? ? ? F3 0F 10 05 ? ? ? ? F3 0F 59 05").get_first(2); dword_12088B4 = *find_pattern("A1 ? ? ? ? 3B 05 ? ? ? ? 75 ? 83 3D ? ? ? ? ? 75 ? A1", "A1 ? ? ? ? 3B 05 ? ? ? ? 75 ? 83 3D ? ? ? ? ? 75 ? 8B 0D ? ? ? ? DB 05").get_first(1); dword_1037720 = *find_pattern("83 3D ? ? ? ? ? 75 ? A1 ? ? ? ? 66 0F 6E C0", "83 3D ? ? ? ? ? 75 ? 8B 0D ? ? ? ? DB 05").get_first(2); dword_11F704C = *find_pattern("A1 ? ? ? ? 66 0F 6E C0 F3 0F E6 C0 C1 E8 ? F2 0F 58 04 C5 ? ? ? ? 66 0F 5A C0 F3 0F 59 05 ? ? ? ? F3 0F 59 C1", "0D ? ? ? ? DB 05 ? ? ? ? 85 C9 7D ? D8 05 ? ? ? ? D8 0D").get_first(1); pattern = find_pattern("55 8B EC 83 E4 ? 83 EC ? 56 57 8B F9 F3 0F 10 05", "55 8B EC 83 E4 ? 0F 57 E4 F3 0F 10 1D"); - shCameraShake = safetyhook::create_inline(pattern.get_first(), CameraShake); + shCameraShake = safetyhook::create_inline(pattern.get_first(), OnFootCameraShake); - // Natives + // Native patches hbSET_CAM_FOV.fun = NativeOverride::Register(Natives::NativeHashes::SET_CAM_FOV, NATIVE_SET_CAM_FOV, "E8 ? ? ? ? 83 C4 08 C3", 30); hbSLIDE_OBJECT.fun = NativeOverride::Register(Natives::NativeHashes::SLIDE_OBJECT, NATIVE_SLIDE_OBJECT_1, "E8 ? ? ? ? 0F B6 C8", 107); if (!hbSLIDE_OBJECT.fun) @@ -369,15 +428,6 @@ public: pattern = hook::pattern("55 8B EC 83 E4 F0 8B 45 08 8B 0D ? ? ? ? 81 EC ? ? ? ? 56 50"); shNATIVE_SLIDE_OBJECT = safetyhook::create_inline(pattern.get_first(0), NATIVE_SLIDE_OBJECT_2); } - - // CCamFollowVehicle - pattern = find_pattern("77 ? 0F 28 C2 F3 0F 5C 8F", "77 ? 0F 28 D3 F3 0F 10 8E"); - if (!pattern.empty()) - injector::MakeNOP(pattern.get_first(0), 2, true); - - pattern = find_pattern("76 ? 0F 28 C8 EB ? F3 0F 10 4C 24", "76 ? 0F 28 CE EB ? 0F 28 CF 84 D2"); - if (!pattern.empty()) - injector::WriteMemory(pattern.get_first(0), 0xEB, true); }; } } FramerateVigilante; \ No newline at end of file diff --git a/source/nightshadows.ixx b/source/nightshadows.ixx index d5c5483d..7677830c 100644 --- a/source/nightshadows.ixx +++ b/source/nightshadows.ixx @@ -134,7 +134,7 @@ public: pattern = find_pattern("51 53 55 8B 2D ? ? ? ? 56 0F B7 5D 1C 33 F6 85 DB 7E 3A 57 EB 09", "53 56 57 8B 3D ? ? ? ? 0F B7 5F 1C 33 F6 85 DB 7E 41 55 EB 0A"); sh_grcSetRenderState = safetyhook::create_inline(pattern.get_first(0), grcSetRenderStateHook); - // Limit rendering to night shadows only, fixes vehicle damage not being reflected on directional light shadows (aka. those from the sun/moon/thunderbolts) + // Limit rendering to night shadows only, fixes vehicle damage not being reflected on cascaded shadows pattern = hook::pattern("E8 ? ? ? ? 8B F0 83 C4 08 85 F6 74 17 8B 0D ? ? ? ? 8B 11 FF 52 28"); if (!pattern.count_hint(2).empty()) { diff --git a/source/vram.ixx b/source/vram.ixx index 8997c41f..4a01f0f4 100644 --- a/source/vram.ixx +++ b/source/vram.ixx @@ -181,10 +181,10 @@ uint64_t GetProcessPreferredGPUMemory() return memory; } -SafetyHookInline shgetAvailableVidMem = {}; -int64_t getAvailableVidMem() +SafetyHookInline shGetAvailableVidMem = {}; +int64_t GetAvailableVidMem() { - auto ret = shgetAvailableVidMem.call(); + auto ret = shGetAvailableVidMem.call(); if (ret < static_cast(_2048mb)) { static auto vram = GetProcessPreferredGPUMemory(); @@ -248,6 +248,7 @@ static unsigned int __fastcall CalculateStreamingMemoryBudget(void* _this, void* } bool bEnableHighDetailReflections = false; +bool bRemoveBBoxCulling = false; injector::hook_back hbsub_B1DEE0; void __cdecl sub_B1DEE0(int a1, int16_t a2, int a3) { @@ -265,16 +266,19 @@ class VRam public: VRam() { - FusionFix::onInitEvent() += []() { + FusionFix::onInitEvent() += []() + { CIniReader iniReader(""); + + // [EXPERIMENTAL] bExtraStreamingMemory = iniReader.ReadInteger("EXPERIMENTAL", "ExtraStreamingMemory", 0) != 0; bEnableHighDetailReflections = iniReader.ReadInteger("EXPERIMENTAL", "EnableHighDetailReflections", 0) != 0; - bool bRemoveBBoxCulling = iniReader.ReadInteger("EXPERIMENTAL", "RemoveBBoxCulling", 0) != 0; + bRemoveBBoxCulling = iniReader.ReadInteger("EXPERIMENTAL", "RemoveBBoxCulling", 0) != 0; auto pattern = find_pattern("8B 0D ? ? ? ? 83 EC ? 33 C0", "A1 ? ? ? ? 8B 08 83 EC ? 56 57"); if (!pattern.empty()) { - shgetAvailableVidMem = safetyhook::create_inline(pattern.get_first(), getAvailableVidMem); + shGetAvailableVidMem = safetyhook::create_inline(pattern.get_first(0), GetAvailableVidMem); } pattern = hook::pattern("83 3D ? ? ? ? ? 0F 85 ? ? ? ? A1 ? ? ? ? 85 C0 74"); @@ -297,7 +301,9 @@ public: // Original code for reference if (*g_cmdarg_nomemrestrict) + { return_to(loc_427FC9); + } } }; injector::MakeInline(pattern.get_first(0), pattern.get_first(13)); } @@ -305,14 +311,18 @@ public: { pattern = find_pattern("75 7E A1 ? ? ? ? 85 C0"); if (!pattern.empty()) - injector::WriteMemory(pattern.get_first(0), 0xEB, true); // jnz -> jmp + { + injector::WriteMemory(pattern.get_first(0), 0xEB, true); // jnz --> jmp + } } if (bExtraStreamingMemory) { - pattern = find_pattern("55 8B EC 83 E4 ? F3 0F 10 55 ? 83 EC"); + pattern = find_pattern("55 8B EC 83 E4 ? F3 0F 10 55 ? 83 EC", "55 8B EC 83 E4 ? D9 45 ? 83 EC ? 53 56 57 51"); if (!pattern.empty()) + { streamingBudgetHook = safetyhook::create_inline(pattern.get_first(0), CalculateStreamingMemoryBudget); + } } if (bEnableHighDetailReflections) @@ -326,7 +336,9 @@ public: { auto pattern = hook::pattern("0F 85 ? ? ? ? E8 ? ? ? ? 80 3D ? ? ? ? ? 8B 75"); if (!pattern.empty()) + { injector::WriteMemory(pattern.get_first(0), 0xE990, true); + } } } } From 1a22a87710935329ff4a0364a9007c364ecdfebb Mon Sep 17 00:00:00 2001 From: ThirteenAG Date: Thu, 29 Jan 2026 15:53:39 +0300 Subject: [PATCH 02/17] car first person camera fix test --- source/comvars.ixx | 12 ++++ source/frameratevigilante.ixx | 118 +++++++++++++++++++++++++++++++++- 2 files changed, 127 insertions(+), 3 deletions(-) diff --git a/source/comvars.ixx b/source/comvars.ixx index 3fae048c..8ed24425 100644 --- a/source/comvars.ixx +++ b/source/comvars.ixx @@ -2506,6 +2506,12 @@ export bool IsKeyboardKeyPressed(int vkeycode, int type = 1, const char* hint = } } +export namespace CPhysical +{ + float* (__fastcall* getAngularVelocity)(void*, void*, float*) = nullptr; + void (__fastcall* TransformOffsetToWorldSpace)(float*, void*, float*, float*, char, int) = nullptr; +} + export enum eControllerButtons { BUTTON_BUMPER_LEFT = 4, @@ -2828,5 +2834,11 @@ public: pattern = find_pattern("B9 ? ? ? ? E8 ? ? ? ? 84 C0 74 ? C6 86", "B9 ? ? ? ? E8 ? ? ? ? 84 C0 74 ? C6 86"); KeyboardBuffer = *pattern.get_first(1); pIsKeyboardKeyPressed = (decltype(pIsKeyboardKeyPressed))injector::GetBranchDestination(pattern.get_first(5)).as_int(); + + pattern = find_pattern("E8 ? ? ? ? F3 0F 10 40 ? F3 0F 10 48 ? 8B 08 F3 0F 11 87 ? ? ? ? F3 0F 10 45", "E8 ? ? ? ? D9 00 F3 0F 10 40 ? F3 0F 10 48 ? D9 9E ? ? ? ? F3 0F 11 86 ? ? ? ? F3 0F 10 5D"); + CPhysical::getAngularVelocity = (decltype(CPhysical::getAngularVelocity))injector::GetBranchDestination(pattern.get_first(0)).as_int(); + + pattern = find_pattern("E8 ? ? ? ? F3 0F 10 B7 ? ? ? ? F3 0F 10 BF ? ? ? ? F3 0F 10 AF ? ? ? ? F3 0F 10 97", "E8 ? ? ? ? F3 0F 10 A6 ? ? ? ? F3 0F 10 6B"); + CPhysical::TransformOffsetToWorldSpace = (decltype(CPhysical::TransformOffsetToWorldSpace))injector::GetBranchDestination(pattern.get_first(0)).as_int(); } } Common; \ No newline at end of file diff --git a/source/frameratevigilante.ixx b/source/frameratevigilante.ixx index f8afe9d3..ecc9c679 100644 --- a/source/frameratevigilante.ixx +++ b/source/frameratevigilante.ixx @@ -22,12 +22,12 @@ double __fastcall sub_A18510(void* _this, void* edx, void* a2, void* a3) return hbsub_A18510.fun(_this, edx, a2, a3) * (*CTimer::fTimeStep / (1.0f / 30.0f)) * f; } -int (__cdecl *game_rand)() = nullptr; +int (__cdecl* game_rand)() = nullptr; uint32_t* dword_11F7060 = nullptr; uint32_t* dword_12088B4 = nullptr; uint32_t* dword_1037720 = nullptr; uint32_t* dword_11F704C = nullptr; -SafetyHookInline shCameraShake = {}; +SafetyHookInline shOnFootCameraShake = {}; void __fastcall OnFootCameraShake(float* CameraData, void* edx, float Multiplier) { static auto CameraShake = FusionFixSettings.GetRef("PREF_CAMERASHAKE"); @@ -100,6 +100,114 @@ void __fastcall OnFootCameraShake(float* CameraData, void* edx, float Multiplier Matrix34::fromEulersXYZ(CameraData, 0, Output); } +SafetyHookInline shFirstPersonVehicleCameraBumping = {}; +void __fastcall FirstPersonVehicleCameraBumping(float* this_ptr, void*, float* vehicle, float* input_vector, float* out_offset, float a5) +{ + float real_dt = *CTimer::fTimeStep; + + constexpr float FIXED_RATE = 30.0f; + constexpr float FIXED_DT = 1.0f / FIXED_RATE; + + static float accumulator = 0.0f; + accumulator += real_dt; + + float* right_vec = *(float**)((char*)vehicle + 0x20); + + while (accumulator >= FIXED_DT) + { + accumulator -= FIXED_DT; + float dt = FIXED_DT; + + float outWorldPos[4]; + CPhysical::TransformOffsetToWorldSpace(vehicle, 0, outWorldPos, input_vector, 0, 0); + + float prev_ref_x = this_ptr[180]; + float prev_ref_y = this_ptr[181]; + float prev_ref_z = this_ptr[182]; + + float tmp1 = prev_ref_y + this_ptr[186] * input_vector[0] - this_ptr[184] * input_vector[2]; + float tmp2 = prev_ref_x + this_ptr[185] * input_vector[2] - this_ptr[186] * input_vector[1]; + float tmp3 = prev_ref_z + this_ptr[184] * input_vector[1] - this_ptr[185] * input_vector[0]; + + float dx = outWorldPos[1] - tmp1; + float dy = outWorldPos[0] - tmp2; + float dz = outWorldPos[2] - tmp3; + + float frame_time_mul = *(&*CTimer::fTimeStep + 1); + dx *= frame_time_mul; + dy *= frame_time_mul; + dz *= frame_time_mul; + + float dot_a = right_vec[1] * dx + right_vec[0] * dy + right_vec[2] * dz; // lateral + float dot_b = right_vec[5] * dx + right_vec[4] * dy + right_vec[6] * dz; // longitudinal + + float clamped_a = std::clamp(dot_a, -5.0f, 5.0f); + float clamped_b = std::clamp(dot_b, -5.0f, 5.0f); + + float accum_x = this_ptr[172]; + float accum_y = this_ptr[173]; + float accum_z = this_ptr[174]; + + float prev_x = this_ptr[176]; + float prev_y = this_ptr[177]; + float prev_z = this_ptr[178]; + + // Impulse — correct original axis mapping + accum_x += 0.025f * dt * clamped_b; // longitudinal + accum_y += 0.025f * dt * clamped_a; // lateral + + // Linear decay + accum_x -= prev_x * 7.0f * dt; + accum_y -= prev_y * 3.0f * dt; + accum_z -= prev_z * 0.0f * dt; + + // Exponential decay + accum_x *= powf(0.017999999f, dt); + accum_y *= powf(0.0099999998f, dt); + accum_z *= powf(0.0f, dt); + + // Write back accumulators & integrated values + this_ptr[172] = accum_x; + this_ptr[173] = accum_y; + this_ptr[174] = accum_z; + + this_ptr[176] = prev_x + accum_x; + this_ptr[177] = prev_y + accum_y; + this_ptr[178] = prev_z + accum_z; + } + + // ──────────────────────────────────────────────────────────────── + // Apply accumulated shake using real time delta + // ──────────────────────────────────────────────────────────────── + float time_scale = real_dt * FIXED_RATE; + out_offset[0] += this_ptr[176] * a5 * time_scale; + out_offset[1] += this_ptr[177] * a5 * time_scale; + out_offset[2] += this_ptr[178] * a5 * time_scale; + + // ──────────────────────────────────────────────────────────────── + // Matrix / reference position (must run every frame) + // ──────────────────────────────────────────────────────────────── + float temp[4]{}; + auto get_matrix_func = (float* (__fastcall*)(void*, void*, float*))(*(uintptr_t*)(*(uintptr_t*)vehicle + 0xEC)); + float* ref = get_matrix_func(vehicle, 0, temp); + + this_ptr[180] = ref[0]; + this_ptr[181] = ref[1]; + this_ptr[182] = ref[2]; + this_ptr[183] = ref[3]; + + // ──────────────────────────────────────────────────────────────── + // Angular velocity (must run every frame) + // ──────────────────────────────────────────────────────────────── + float angvel[4]; + CPhysical::getAngularVelocity(vehicle, 0, angvel); + + this_ptr[184] = angvel[0]; + this_ptr[185] = angvel[1]; + this_ptr[186] = angvel[2]; + this_ptr[187] = angvel[3]; +} + std::unordered_map last_fov_values; std::unordered_map fov_cache_initialized; injector::hook_back hbSET_CAM_FOV; @@ -418,7 +526,11 @@ public: dword_1037720 = *find_pattern("83 3D ? ? ? ? ? 75 ? A1 ? ? ? ? 66 0F 6E C0", "83 3D ? ? ? ? ? 75 ? 8B 0D ? ? ? ? DB 05").get_first(2); dword_11F704C = *find_pattern("A1 ? ? ? ? 66 0F 6E C0 F3 0F E6 C0 C1 E8 ? F2 0F 58 04 C5 ? ? ? ? 66 0F 5A C0 F3 0F 59 05 ? ? ? ? F3 0F 59 C1", "0D ? ? ? ? DB 05 ? ? ? ? 85 C9 7D ? D8 05 ? ? ? ? D8 0D").get_first(1); pattern = find_pattern("55 8B EC 83 E4 ? 83 EC ? 56 57 8B F9 F3 0F 10 05", "55 8B EC 83 E4 ? 0F 57 E4 F3 0F 10 1D"); - shCameraShake = safetyhook::create_inline(pattern.get_first(), OnFootCameraShake); + shOnFootCameraShake = safetyhook::create_inline(pattern.get_first(), OnFootCameraShake); + + pattern = find_pattern("55 8B EC 83 E4 F0 83 EC 28 F3 0F 10 05 ? ? ? ? 56 8B 75 ? 57 6A 00", "55 8B EC 83 E4 F0 83 EC 24 F3 0F 10 05 ? ? ? ? 53 8B 5D ? 56 57 8B 7D"); + shFirstPersonVehicleCameraBumping = safetyhook::create_inline(pattern.get_first(), FirstPersonVehicleCameraBumping); + // Native patches hbSET_CAM_FOV.fun = NativeOverride::Register(Natives::NativeHashes::SET_CAM_FOV, NATIVE_SET_CAM_FOV, "E8 ? ? ? ? 83 C4 08 C3", 30); From 1bcbd7cb1915bdcaa1dd82ef6d3de99d3d29218b Mon Sep 17 00:00:00 2001 From: ThirteenAG Date: Thu, 29 Jan 2026 19:53:24 +0300 Subject: [PATCH 03/17] slippery test --- source/frameratevigilante.ixx | 67 ++++++++++++++++++++++------------- 1 file changed, 43 insertions(+), 24 deletions(-) diff --git a/source/frameratevigilante.ixx b/source/frameratevigilante.ixx index ecc9c679..56540bcb 100644 --- a/source/frameratevigilante.ixx +++ b/source/frameratevigilante.ixx @@ -267,6 +267,13 @@ bool __cdecl NATIVE_SLIDE_OBJECT_2(Object object, float x, float y, float z, flo return shNATIVE_SLIDE_OBJECT.unsafe_ccall(object, x, y, z, xs * Delta, ys * Delta, zs * Delta, flag); } +SafetyHookInline shsub_A4C190 = {}; +void __fastcall sub_A4C190(void* _this, void* edx, float a2) +{ + constexpr float MAX_DT = 1.0f / 30.0f; + return shsub_A4C190.unsafe_fastcall(_this, edx, std::min(a2, MAX_DT)); +} + class FramerateVigilante { public: @@ -274,8 +281,18 @@ public: { FusionFix::onInitEventAsync() += []() { - // Handbrake Cam force (Gamepad) - auto pattern = find_pattern("E8 ? ? ? ? D9 5C 24 7C F3 0F 10 4C 24", "E8 ? ? ? ? D9 5C 24 70 F3 0F 10 44 24 ? F3 0F 58 86"); + //Timestep clamping in CTimer::Initialise + auto pattern = hook::pattern("E8 ? ? ? ? FF 74 24 ? E8 ? ? ? ? E8"); + if (!pattern.empty()) + injector::WriteMemory(injector::GetBranchDestination(pattern.get_first(0)).as_int() + 6, 1.0f / 3000.0f, true); + else + { + pattern = hook::pattern("E8 ? ? ? ? 8B 44 24 ? 50 E8 ? ? ? ? E8"); + injector::WriteMemory(injector::GetBranchDestination(pattern.get_first(0)).as_int() + 4, 1.0f / 3000.0f, true); + } + + // Handbrake Cam force + pattern = find_pattern("E8 ? ? ? ? D9 5C 24 7C F3 0F 10 4C 24", "E8 ? ? ? ? D9 5C 24 70 F3 0F 10 44 24 ? F3 0F 58 86"); hbsub_A18510.fun = injector::MakeCALL(pattern.get_first(0), sub_A18510).get(); // CCamFollowVehicle auto centering force @@ -294,30 +311,32 @@ public: } } - // Bike physics (Originally by Sergeanur) - // They will need a full fix in the future, one of the main things to look at are the slippery wheels, this only marginally improves them - pattern = hook::pattern("F3 0F 10 45 ? 51 8B CF F3 0F 11 04 24 E8 ? ? ? ? 8A 8F"); - if (!pattern.empty()) + // Automobile physics + pattern = find_pattern("56 8B F1 66 83 BE ? ? ? ? ? C6 86", "56 8B F1 66 83 BE ? ? ? ? ? C6 86"); + shsub_A4C190 = safetyhook::create_inline(pattern.get_first(), sub_A4C190); + + // Slippery bikes + injector::MakeNOP(0xCEE7A4, 6, true); + static auto test = safetyhook::create_mid(0xCEE7A4, [](SafetyHookContext& regs) { - injector::MakeNOP(pattern.get_first(0), 5, true); - static auto BikePhysics = safetyhook::create_mid(pattern.get_first(0), [](SafetyHookContext& regs) - { - float f = *(float*)(regs.ebp + 0x08); - f = std::clamp(f, 1.0f / 30.0f, FLT_MAX); - regs.xmm0.f32[0] = f; - }); - } - else + float dtScale = *CTimer::fTimeStep / (1.0f / 30.0f); + *(float*)(regs.esp + 0x3C) = regs.xmm0.f32[0] * dtScale; + }); + + injector::MakeNOP(0xCEDE48, 6, true); + static auto test2 = safetyhook::create_mid(0xCEDE48, [](SafetyHookContext& regs) { - pattern = hook::pattern("D9 45 ? 51 8B CE D9 1C 24 E8 ? ? ? ? 8A 86"); - injector::MakeNOP(pattern.get_first(0), 3, true); - static auto BikePhysics = safetyhook::create_mid(pattern.get_first(0), [](SafetyHookContext& regs) - { - float f = *(float*)(regs.ebp + 0x08); - f = std::clamp(f, 1.0f / 30.0f, FLT_MAX); - *(float*)(regs.ebp + 0x08) = f; - }); - } + float dtScale = *CTimer::fTimeStep / (1.0f / 30.0f); + regs.xmm0.f32[0] *= dtScale; + regs.xmm0.f32[0] += *(float*)(regs.esp + 0x30); + }); + + // Slippery cars + static auto test3 = safetyhook::create_mid(0xC35C98, [](SafetyHookContext& regs) + { + float dtScale = *CTimer::fTimeStep / (1.0f / 30.0f); + regs.xmm0.f32[0] *= dtScale; + }); // Loading text flash speed (IV and TLAD) { From ae527672b27c695e7692f18ae39c205451f62575 Mon Sep 17 00:00:00 2001 From: RecklessGlue540 <143945383+RecklessGlue540@users.noreply.github.com> Date: Thu, 29 Jan 2026 22:22:39 +0200 Subject: [PATCH 04/17] Minor adjustments --- source/frameratevigilante.ixx | 35 ++++++++++++++++------------------- source/rawinput.ixx | 30 ++++++++++++------------------ 2 files changed, 28 insertions(+), 37 deletions(-) diff --git a/source/frameratevigilante.ixx b/source/frameratevigilante.ixx index 56540bcb..3ee2ab09 100644 --- a/source/frameratevigilante.ixx +++ b/source/frameratevigilante.ixx @@ -100,8 +100,8 @@ void __fastcall OnFootCameraShake(float* CameraData, void* edx, float Multiplier Matrix34::fromEulersXYZ(CameraData, 0, Output); } -SafetyHookInline shFirstPersonVehicleCameraBumping = {}; -void __fastcall FirstPersonVehicleCameraBumping(float* this_ptr, void*, float* vehicle, float* input_vector, float* out_offset, float a5) +SafetyHookInline shHoodCameraBumping = {}; +void __fastcall HoodCameraBumping(float* this_ptr, void*, float* vehicle, float* input_vector, float* out_offset, float a5) { float real_dt = *CTimer::fTimeStep; @@ -138,8 +138,8 @@ void __fastcall FirstPersonVehicleCameraBumping(float* this_ptr, void*, float* v dy *= frame_time_mul; dz *= frame_time_mul; - float dot_a = right_vec[1] * dx + right_vec[0] * dy + right_vec[2] * dz; // lateral - float dot_b = right_vec[5] * dx + right_vec[4] * dy + right_vec[6] * dz; // longitudinal + float dot_a = right_vec[1] * dx + right_vec[0] * dy + right_vec[2] * dz; // lateral + float dot_b = right_vec[5] * dx + right_vec[4] * dy + right_vec[6] * dz; // longitudinal float clamped_a = std::clamp(dot_a, -5.0f, 5.0f); float clamped_b = std::clamp(dot_b, -5.0f, 5.0f); @@ -153,8 +153,8 @@ void __fastcall FirstPersonVehicleCameraBumping(float* this_ptr, void*, float* v float prev_z = this_ptr[178]; // Impulse — correct original axis mapping - accum_x += 0.025f * dt * clamped_b; // longitudinal - accum_y += 0.025f * dt * clamped_a; // lateral + accum_x += 0.025f * dt * clamped_b; // longitudinal + accum_y += 0.025f * dt * clamped_a; // lateral // Linear decay accum_x -= prev_x * 7.0f * dt; @@ -176,17 +176,13 @@ void __fastcall FirstPersonVehicleCameraBumping(float* this_ptr, void*, float* v this_ptr[178] = prev_z + accum_z; } - // ──────────────────────────────────────────────────────────────── // Apply accumulated shake using real time delta - // ──────────────────────────────────────────────────────────────── float time_scale = real_dt * FIXED_RATE; out_offset[0] += this_ptr[176] * a5 * time_scale; out_offset[1] += this_ptr[177] * a5 * time_scale; out_offset[2] += this_ptr[178] * a5 * time_scale; - // ──────────────────────────────────────────────────────────────── // Matrix / reference position (must run every frame) - // ──────────────────────────────────────────────────────────────── float temp[4]{}; auto get_matrix_func = (float* (__fastcall*)(void*, void*, float*))(*(uintptr_t*)(*(uintptr_t*)vehicle + 0xEC)); float* ref = get_matrix_func(vehicle, 0, temp); @@ -196,9 +192,7 @@ void __fastcall FirstPersonVehicleCameraBumping(float* this_ptr, void*, float* v this_ptr[182] = ref[2]; this_ptr[183] = ref[3]; - // ──────────────────────────────────────────────────────────────── // Angular velocity (must run every frame) - // ──────────────────────────────────────────────────────────────── float angvel[4]; CPhysical::getAngularVelocity(vehicle, 0, angvel); @@ -281,10 +275,12 @@ public: { FusionFix::onInitEventAsync() += []() { - //Timestep clamping in CTimer::Initialise + // Timestep clamp adjustment in CTimer::Initialise, fixes game speedup past 300fps, but not slowdown below 15fps as its kind of unnecessary auto pattern = hook::pattern("E8 ? ? ? ? FF 74 24 ? E8 ? ? ? ? E8"); if (!pattern.empty()) + { injector::WriteMemory(injector::GetBranchDestination(pattern.get_first(0)).as_int() + 6, 1.0f / 3000.0f, true); + } else { pattern = hook::pattern("E8 ? ? ? ? 8B 44 24 ? 50 E8 ? ? ? ? E8"); @@ -363,7 +359,7 @@ public: { // Ends up being dword_1175C40 += dword_1032790 * (SomeTimer * (1000 / 30)); regs.xmm0.f32[0] = *(float*)(regs.esp + 0x34); - regs.xmm0.f32[0] *= (1000 / 30); + regs.xmm0.f32[0] *= (1000.0f / 30.0f); }); } else @@ -374,7 +370,7 @@ public: { // Ends up being dword_11FB434 += dword_F38420 * (SomeTimer * (1000 / 30)); regs.xmm0.f32[0] = *(float*)(regs.esp + 0x44); - regs.xmm0.f32[0] *= (1000 / 30); + regs.xmm0.f32[0] *= (1000.0f / 30.0f); }); } } @@ -392,7 +388,7 @@ public: static auto LoadingTextSparksSpeed = safetyhook::create_mid(pattern.get_first(0), [](SafetyHookContext& regs) { // Ends up being dword_1175770 += dword_E81598 * (SomeTimer * (1000 / 30)); - regs.xmm1.f32[0] += *dword_E81598 * *(float*)(regs.esp + 0x34) * (1000 / 30); + regs.xmm1.f32[0] += *dword_E81598 * *(float*)(regs.esp + 0x34) * (1000.0f / 30.0f); }); } else @@ -403,7 +399,7 @@ public: static auto LoadingTextSparksSpeed = safetyhook::create_mid(pattern.get_first(0), [](SafetyHookContext& regs) { // Ends up being dword_11FB41C += flt_DEF584 * (SomeTimer * (1000 / 30)); - regs.xmm0.f32[0] += *flt_DEF584 * *(float*)(regs.esp + 0x44) * (1000 / 30); + regs.xmm0.f32[0] += *flt_DEF584 * *(float*)(regs.esp + 0x44) * (1000.0f / 30.0f); }); } } @@ -538,7 +534,7 @@ public: } } - // Camera shake + // On foot camera shake game_rand = (decltype(game_rand))injector::GetBranchDestination(find_pattern("E8 ? ? ? ? F3 0F 10 4C 24 ? F3 0F 5C 4C 24 ? F3 0F 10 5C 24", "E8 ? ? ? ? F3 0F 10 4C 24 ? F3 0F 59 4C 24 ? F3 0F 59 4C 24").get_first()).as_int(); dword_11F7060 = *find_pattern("83 3D ? ? ? ? ? F3 0F 10 05 ? ? ? ? F3 0F 59 C1", "83 3D ? ? ? ? ? F3 0F 10 05 ? ? ? ? F3 0F 59 05").get_first(2); dword_12088B4 = *find_pattern("A1 ? ? ? ? 3B 05 ? ? ? ? 75 ? 83 3D ? ? ? ? ? 75 ? A1", "A1 ? ? ? ? 3B 05 ? ? ? ? 75 ? 83 3D ? ? ? ? ? 75 ? 8B 0D ? ? ? ? DB 05").get_first(1); @@ -547,8 +543,9 @@ public: pattern = find_pattern("55 8B EC 83 E4 ? 83 EC ? 56 57 8B F9 F3 0F 10 05", "55 8B EC 83 E4 ? 0F 57 E4 F3 0F 10 1D"); shOnFootCameraShake = safetyhook::create_inline(pattern.get_first(), OnFootCameraShake); + // Hood camera bumping pattern = find_pattern("55 8B EC 83 E4 F0 83 EC 28 F3 0F 10 05 ? ? ? ? 56 8B 75 ? 57 6A 00", "55 8B EC 83 E4 F0 83 EC 24 F3 0F 10 05 ? ? ? ? 53 8B 5D ? 56 57 8B 7D"); - shFirstPersonVehicleCameraBumping = safetyhook::create_inline(pattern.get_first(), FirstPersonVehicleCameraBumping); + shHoodCameraBumping = safetyhook::create_inline(pattern.get_first(), HoodCameraBumping); // Native patches diff --git a/source/rawinput.ixx b/source/rawinput.ixx index 9cfcc97e..fb258554 100644 --- a/source/rawinput.ixx +++ b/source/rawinput.ixx @@ -369,7 +369,7 @@ public: if (!pattern.empty()) { injector::MakeNOP(pattern.get_first(0), 12, true); - static auto CCamFollowPed_MouseSensXY = safetyhook::create_mid(pattern.get_first(0), [](SafetyHookContext& regs) + static auto CCamFollowPed_MouseSens1 = safetyhook::create_mid(pattern.get_first(0), [](SafetyHookContext& regs) { if (regs.ebx && *(uint8_t*)(regs.ebx + 0x3289)) { @@ -382,43 +382,37 @@ public: *(float*)(regs.esp + 0x28) = regs.xmm3.f32[0]; } }); - } - else - { - pattern = hook::pattern("F3 0F 59 05 ? ? ? ? F3 0F 11 44 24 ? 76 ? 0F 28 C4"); + + pattern = hook::pattern("F3 0F 59 0D ? ? ? ? F3 0F 11 4C 24 ? F3 0F 10 4C 24 ? 0F 54 CC"); injector::MakeNOP(pattern.get_first(0), 8, true); - static auto CCamFollowPed_MouseSensX = safetyhook::create_mid(pattern.get_first(0), [](SafetyHookContext& regs) + static auto CCamFollowPed_MouseSens2 = safetyhook::create_mid(pattern.get_first(0), [](SafetyHookContext& regs) { if (regs.ebx && *(uint8_t*)(regs.ebx + 0x3289)) { - regs.xmm0.f32[0] *= GetMouseLookSensitivity() * 0.022222223f; + regs.xmm1.f32[0] *= 0.022222223f; } else { - regs.xmm0.f32[0] *= 0.0625f; + regs.xmm1.f32[0] *= 0.0625f; } }); } - - // Match with aim cam - pattern = hook::pattern("F3 0F 59 0D ? ? ? ? F3 0F 11 4C 24 ? F3 0F 10 4C 24 ? 0F 54 CC"); - if (!pattern.empty()) + else { + pattern = hook::pattern("F3 0F 59 05 ? ? ? ? F3 0F 11 44 24 ? 76 ? 0F 28 C4"); injector::MakeNOP(pattern.get_first(0), 8, true); - static auto CCamFollowPed_MouseSens2 = safetyhook::create_mid(pattern.get_first(0), [](SafetyHookContext& regs) + static auto CCamFollowPed_MouseSens1 = safetyhook::create_mid(pattern.get_first(0), [](SafetyHookContext& regs) { if (regs.ebx && *(uint8_t*)(regs.ebx + 0x3289)) { - regs.xmm1.f32[0] *= 0.022222223f; + regs.xmm0.f32[0] *= GetMouseLookSensitivity() * 0.022222223f; } else { - regs.xmm1.f32[0] *= 0.0625f; + regs.xmm0.f32[0] *= 0.0625f; } }); - } - else - { + pattern = hook::pattern("F3 0F 59 05 ? ? ? ? F3 0F 59 4C 24 ? 0F 57 ED"); injector::MakeNOP(pattern.get_first(0), 8, true); static auto CCamFollowPed_MouseSens2 = safetyhook::create_mid(pattern.get_first(0), [](SafetyHookContext& regs) From dbea56c39966cba2a7143cebe5492c32c9770a5f Mon Sep 17 00:00:00 2001 From: emoose Date: Fri, 30 Jan 2026 10:16:10 +0000 Subject: [PATCH 05/17] HoodCameraBumping: add interpolation between physics steps --- source/frameratevigilante.ixx | 27 ++++++++++++++++++++++----- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/source/frameratevigilante.ixx b/source/frameratevigilante.ixx index 3ee2ab09..f6a4bbbb 100644 --- a/source/frameratevigilante.ixx +++ b/source/frameratevigilante.ixx @@ -113,6 +113,18 @@ void __fastcall HoodCameraBumping(float* this_ptr, void*, float* vehicle, float* float* right_vec = *(float**)((char*)vehicle + 0x20); + // Save state before physics update to use in interpolation + static float last_x = 0.0f; + static float last_y = 0.0f; + static float last_z = 0.0f; + + if (accumulator >= FIXED_DT) + { + last_x = this_ptr[176]; + last_y = this_ptr[177]; + last_z = this_ptr[178]; + } + while (accumulator >= FIXED_DT) { accumulator -= FIXED_DT; @@ -176,11 +188,16 @@ void __fastcall HoodCameraBumping(float* this_ptr, void*, float* vehicle, float* this_ptr[178] = prev_z + accum_z; } - // Apply accumulated shake using real time delta - float time_scale = real_dt * FIXED_RATE; - out_offset[0] += this_ptr[176] * a5 * time_scale; - out_offset[1] += this_ptr[177] * a5 * time_scale; - out_offset[2] += this_ptr[178] * a5 * time_scale; + // Interpolate between physics steps based on time remainder inside accumulator + float alpha = accumulator / FIXED_DT; + + float interp_x = last_x + (this_ptr[176] - last_x) * alpha; + float interp_y = last_y + (this_ptr[177] - last_y) * alpha; + float interp_z = last_z + (this_ptr[178] - last_z) * alpha; + + out_offset[0] += interp_x * a5; + out_offset[1] += interp_y * a5; + out_offset[2] += interp_z * a5; // Matrix / reference position (must run every frame) float temp[4]{}; From d7951d07fa911e181c23df65c43bf2ae157da4a2 Mon Sep 17 00:00:00 2001 From: ThirteenAG Date: Fri, 30 Jan 2026 17:55:59 +0300 Subject: [PATCH 06/17] expose minigames list to ini --- data/plugins/GTAIV.EFLC.FusionFix.ini | 3 +- source/framelimit.ixx | 43 ++++++++++++++++++--------- 2 files changed, 31 insertions(+), 15 deletions(-) diff --git a/data/plugins/GTAIV.EFLC.FusionFix.ini b/data/plugins/GTAIV.EFLC.FusionFix.ini index 33da5020..41d4d519 100644 --- a/data/plugins/GTAIV.EFLC.FusionFix.ini +++ b/data/plugins/GTAIV.EFLC.FusionFix.ini @@ -20,7 +20,8 @@ FpsLimit = -2 // used when FPS Limit menu toggle CutsceneFpsLimit = 0 // custom FPS Limit value in cutscene LoadingFpsLimit = 30 // used to avoid game freeze on loading (e.g. Off Route mission) UnlockFramerateDuringLoadscreens = 1 // game loads faster when using frame limiter -MinigamesFpsLimit = 30 // used to avoid possible issue for selected minigames: Pool, Air Hockey, Arm Wrestling, Bowling, Darts, Drinking +MinigamesFpsLimit = 30 // used to avoid possible issue for specified minigames in MinigamesList +MinigamesList = pool_game, air_hockey, arm_wrestling, tenpinbowl, darts, drinking [MISC] DefaultCameraAngleInTLaD = 1 // enforces the default IV camera angle on bikes in TLaD diff --git a/source/framelimit.ixx b/source/framelimit.ixx index 5e6eb7eb..b3f9ca58 100644 --- a/source/framelimit.ixx +++ b/source/framelimit.ixx @@ -1,6 +1,7 @@ module; #include +#include #include #pragma comment(lib, "winmm.lib") // needed for timeBeginPeriod()/timeEndPeriod() @@ -18,15 +19,7 @@ float fScriptCutsceneFpsLimit; float fScriptCutsceneFovLimit; float fLoadingFpsLimit; float fMinigamesFpsLimit; - -std::vector minigamesNames = { - "pool_game", - "air_hockey", - "arm_wrestling", - "tenpinbowl", - "darts", - "drinking", -}; +std::vector minigamesNames; class FrameLimiter { @@ -125,7 +118,8 @@ private: bool __cdecl sub_411F50(uint32_t* a1, uint32_t* a2) { bLoadingShown = false; - if (!a1[2] && !a2[2]) { + if (!a1[2] && !a2[2]) + { bLoadingShown = (*a1 == *a2) && *a1; return *a1 == *a2; } @@ -153,7 +147,8 @@ void __cdecl sub_855640() if ((CMenuManager::bLoadscreenShown && !*CMenuManager::bLoadscreenShown && !bLoadingShown) || !bUnlockFramerateDuringLoadscreens) { - if (preset && *preset >= FusionFixSettings.FpsCaps.eCustom) { + if (preset && *preset >= FusionFixSettings.FpsCaps.eCustom) + { if (fFpsLimit != 0.0f || (*preset > FusionFixSettings.FpsCaps.eCustom && *preset < int32_t(FusionFixSettings.FpsCaps.data.size()))) FpsLimiter.Sync(); } @@ -205,6 +200,24 @@ public: fScriptCutsceneFovLimit = static_cast(iniReader.ReadInteger("FRAMELIMIT", "ScriptCutsceneFovLimit", 0)); fLoadingFpsLimit = static_cast(iniReader.ReadInteger("FRAMELIMIT", "LoadingFpsLimit", 30)); fMinigamesFpsLimit = static_cast(iniReader.ReadInteger("FRAMELIMIT", "MinigamesFpsLimit", 30)); + std::string minigamesList = iniReader.ReadString("FRAMELIMIT", "MinigamesList", ""); + try + { + std::regex re("[^a-zA-Z0-9_]+"); + std::sregex_token_iterator iter(minigamesList.begin(), minigamesList.end(), re, -1); + std::sregex_token_iterator end; + for (; iter != end; ++iter) + { + std::string token = iter->str(); + if (!token.empty()) + { + minigamesNames.push_back(token); + } + } + } catch (const std::exception&) + { + minigamesNames = { "pool_game", "air_hockey", "arm_wrestling", "tenpinbowl", "darts", "drinking" }; + } bUnlockFramerateDuringLoadscreens = iniReader.ReadInteger("FRAMELIMIT", "UnlockFramerateDuringLoadscreens", 0) != 0; //if (fFpsLimit || fCutsceneFpsLimit || fScriptCutsceneFpsLimit) @@ -273,7 +286,8 @@ public: injector::WriteMemory(pattern.get_first(0), 0x901CC483, true); //nop + add esp,1C injector::MakeJMP(pattern.get_first(4), sub_855640, true); // + jmp - FusionFixSettings.SetCallback("PREF_FPS_LIMIT_PRESET", [](int32_t value) { + FusionFixSettings.SetCallback("PREF_FPS_LIMIT_PRESET", [](int32_t value) + { auto mode = (nFrameLimitType == 2) ? FrameLimiter::FPSLimitMode::FPS_ACCURATE : FrameLimiter::FPSLimitMode::FPS_REALTIME; if (value > FusionFixSettings.FpsCaps.eCustom && value < int32_t(FusionFixSettings.FpsCaps.data.size())) FpsLimiter.Init(mode, (float)FusionFixSettings.FpsCaps.data[value]); @@ -342,13 +356,14 @@ public: pattern = find_pattern("FF 05 ? ? ? ? C3 E8", "83 05 ? ? ? ? ? C3 E8 ? ? ? ? 8B C8"); if (!pattern.empty()) { - static auto SET_MINIGAME_IN_PROGRESS_HOOK = safetyhook::create_mid(pattern.get_first(), [](SafetyHookContext& regs) { + static auto SET_MINIGAME_IN_PROGRESS_HOOK = safetyhook::create_mid(pattern.get_first(), [](SafetyHookContext& regs) + { auto curThread = (rage::scrThread*)regs.eax; if (curThread) { std::string curScript = curThread->m_szProgramName; std::transform(curScript.begin(), curScript.end(), curScript.begin(), [](unsigned char c) { return std::tolower(c); }); - + if (std::any_of(std::begin(minigamesNames), std::end(minigamesNames), [&curScript](const auto& i) { return i == curScript; })) bNeedsToLimitFpsForThisMinigame = true; else From 67d14441fd9e2e4daf773e1011fcb6e8ea4e48ea Mon Sep 17 00:00:00 2001 From: RecklessGlue540 <143945383+RecklessGlue540@users.noreply.github.com> Date: Sat, 31 Jan 2026 03:40:47 +0200 Subject: [PATCH 07/17] Heli stuff Only rotor speed is fixed, rest will need more attention --- source/frameratevigilante.ixx | 89 ++++++++++++++++++++++++++++++++++- 1 file changed, 88 insertions(+), 1 deletion(-) diff --git a/source/frameratevigilante.ixx b/source/frameratevigilante.ixx index 3ee2ab09..b83cb022 100644 --- a/source/frameratevigilante.ixx +++ b/source/frameratevigilante.ixx @@ -283,8 +283,9 @@ public: } else { + static float dword_EDF6CC = 1.0f / 3000.0f; pattern = hook::pattern("E8 ? ? ? ? 8B 44 24 ? 50 E8 ? ? ? ? E8"); - injector::WriteMemory(injector::GetBranchDestination(pattern.get_first(0)).as_int() + 4, 1.0f / 3000.0f, true); + injector::WriteMemory(injector::GetBranchDestination(pattern.get_first(0)).as_int() + 4, &dword_EDF6CC, true); } // Handbrake Cam force @@ -334,6 +335,92 @@ public: regs.xmm0.f32[0] *= dtScale; }); + // Heli rotor speed + { + pattern = hook::pattern("F3 0F 59 05 ? ? ? ? F3 0F 59 C4 F3 0F 5C C8"); + if (!pattern.empty()) + { + static auto dword_1046AF0 = *pattern.get_first(4); + injector::MakeNOP(pattern.get_first(0), 8, true); + static auto HeliRotorSpeed1 = safetyhook::create_mid(pattern.get_first(0), [](SafetyHookContext& regs) + { + regs.xmm0.f32[0] *= *dword_1046AF0 * *CTimer::fTimeStep / (1.0f / 30.0f); + }); + } + else + { + pattern = hook::pattern("F3 0F 59 15 ? ? ? ? F3 0F 59 D4"); + static auto dword_F46598 = *pattern.get_first(4); + injector::MakeNOP(pattern.get_first(0), 8, true); + static auto HeliRotorSpeed1 = safetyhook::create_mid(pattern.get_first(0), [](SafetyHookContext& regs) + { + regs.xmm2.f32[0] *= *dword_F46598 * *CTimer::fTimeStep / (1.0f / 30.0f); + }); + } + + pattern = hook::pattern("F3 0F 59 1D ? ? ? ? F3 0F 10 87 ? ? ? ? F3 0F 59 DC"); + if (!pattern.empty()) + { + static auto dword_1046AF4 = *pattern.get_first(4); + injector::MakeNOP(pattern.get_first(0), 8, true); + static auto HeliRotorSpeed2 = safetyhook::create_mid(pattern.get_first(0), [](SafetyHookContext& regs) + { + regs.xmm3.f32[0] *= *dword_1046AF4 * *CTimer::fTimeStep / (1.0f / 30.0f); + }); + } + else + { + pattern = hook::pattern("F3 0F 59 0D ? ? ? ? F3 0F 10 86 ? ? ? ? F3 0F 59 CC"); + static auto dword_F46594 = *pattern.get_first(4); + injector::MakeNOP(pattern.get_first(0), 8, true); + static auto HeliRotorSpeed2 = safetyhook::create_mid(pattern.get_first(0), [](SafetyHookContext& regs) + { + regs.xmm1.f32[0] *= *dword_F46594 * *CTimer::fTimeStep / (1.0f / 30.0f); + }); + } + } + + // Heli rotor break time + // To figure out: + // This already seems correct (it uses _fFrameTime * 300.0f) but for some reason it does not want to work. Even doing CTimer::fTimeStep * 30 * 300 won't work. + // The place is 100% correct too + { + // This is preCE + pattern = hook::pattern("F3 0F 10 0D ? ? ? ? F3 0F 59 0D ? ? ? ? F3 0F 10 44 24 ? F3 0F 5C C1 0F 57 C9 0F 2F C8 F3 0F 11 86"); + if (!pattern.empty()) + { + injector::MakeNOP(pattern.get_first(0), 16, true); + static auto RotorBreakTime1 = safetyhook::create_mid(pattern.get_first(0), [](SafetyHookContext& regs) + { + regs.xmm1.f32[0] = 300.0f; + }); + } + + // This is preCE + pattern = hook::pattern("F3 0F 10 0D ? ? ? ? F3 0F 59 0D ? ? ? ? F3 0F 10 86 ? ? ? ? F3 0F 5C C1 0F 57 C9 0F 2F C8 F3 0F 11 86"); + if (!pattern.empty()) + { + injector::MakeNOP(pattern.get_first(0), 16, true); + static auto RotorBreakTime2 = safetyhook::create_mid(pattern.get_first(0), [](SafetyHookContext& regs) + { + regs.xmm1.f32[0] = 300.0f; + }); + } + } + + // Heli downwash effect + // To figure out: + // This uses more exquisite timing checks, so it doesn't fix anything atm, but the approach is probably halfway correct + pattern = find_pattern("03 05 ? ? ? ? 33 D2 F7 F7 85 D2 75 ? 8B 46 ? 52 52 52", "03 05 ? ? ? ? 33 D2 F7 F1 85 D2 75 ? D9 44 24 ? 8B 47 ? 52 52 52"); + if (!pattern.empty()) + { + injector::MakeNOP(pattern.get_first(0), 6, true); + static auto HeliDownwashEffect = safetyhook::create_mid(pattern.get_first(0), [](SafetyHookContext& regs) + { + regs.eax += *CTimer::m_snTimeInMilliseconds / (1000 / 30); + }); + } + // Loading text flash speed (IV and TLAD) { // Skips an else path which post-processes the flash speed unnecessarily. From 8a4847b7b5d674a987aa378a389ada7d08fd7994 Mon Sep 17 00:00:00 2001 From: RecklessGlue540 <143945383+RecklessGlue540@users.noreply.github.com> Date: Sat, 31 Jan 2026 20:50:06 +0200 Subject: [PATCH 08/17] Cache timestep in gun van scripts And more heli stuff + some comments --- .../GTAIV.FusionFix/jacob_gun_car.sco | Bin 61511 -> 61507 bytes .../TBOGT.FusionFix/ability_gun_car.sco | Bin 65098 -> 65094 bytes .../TLAD.FusionFix/ability_gun_car.sco | Bin 51538 -> 51534 bytes source/frameratevigilante.ixx | 70 +++++++++++++++--- 4 files changed, 58 insertions(+), 12 deletions(-) diff --git a/data/update/GTAIV.EFLC.FusionFix/GTAIV.FusionFix/jacob_gun_car.sco b/data/update/GTAIV.EFLC.FusionFix/GTAIV.FusionFix/jacob_gun_car.sco index e6aa7eb11bdcdcbfdb7a3943e8fff86b5c2a8662..1ea5afdf0c5fb3564d5ffda007e4fa7944cf39ab 100644 GIT binary patch delta 20521 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 delta 20536 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

9KA@R=gh0@OtzCic|>o`!kQe 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 diff --git a/data/update/GTAIV.EFLC.FusionFix/TLAD.FusionFix/ability_gun_car.sco b/data/update/GTAIV.EFLC.FusionFix/TLAD.FusionFix/ability_gun_car.sco index e6a5830b4f231fd8b5ca40e494982f78c40a65bb..2706a40a88c1ffc4cb40551ec23ed4cc0781e630 100644 GIT binary patch delta 21695 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 Pqx$uR@5g9+1kQf|HyJ=y delta 21660 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 z Date: Sun, 1 Feb 2026 17:16:10 +0200 Subject: [PATCH 09/17] Cache timestep in computer scripts --- .../GTAIV.FusionFix/computermain.sco | Bin 27154 -> 27167 bytes .../TBOGT.FusionFix/computermain.sco | Bin 24739 -> 24752 bytes .../TLAD.FusionFix/computermain.sco | Bin 24451 -> 24464 bytes 3 files changed, 0 insertions(+), 0 deletions(-) diff --git a/data/update/GTAIV.EFLC.FusionFix/GTAIV.FusionFix/computermain.sco b/data/update/GTAIV.EFLC.FusionFix/GTAIV.FusionFix/computermain.sco index c65be4a921f3d7b6e3516fb95aa58c4ae61bf8ec..dc8a7dce047fca51ebd24ba36659ddb82abec045 100644 GIT binary patch delta 14668 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 r>eHi`Qya>B1Oh^GMGgYO)QDyL_T#?*(qdG2 delta 14598 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 diff --git a/data/update/GTAIV.EFLC.FusionFix/TBOGT.FusionFix/computermain.sco b/data/update/GTAIV.EFLC.FusionFix/TBOGT.FusionFix/computermain.sco index 254a9e37f1b7c752119a0cfad80540a81f868bbc..d122aea51ee27d3a29abedbcdb50e291d04a8f0e 100644 GIT binary patch delta 15017 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 delta 15005 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%0DN&U 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 From 7291b9a2e89d3572cd5f2ddea87b9c1d38485ae7 Mon Sep 17 00:00:00 2001 From: ThirteenAG Date: Tue, 3 Feb 2026 11:19:35 +0300 Subject: [PATCH 10/17] switch automobile scaling --- source/frameratevigilante.ixx | 48 +++++++++++++++++------------------ 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/source/frameratevigilante.ixx b/source/frameratevigilante.ixx index 8bb20a75..ac1626e2 100644 --- a/source/frameratevigilante.ixx +++ b/source/frameratevigilante.ixx @@ -278,11 +278,15 @@ bool __cdecl NATIVE_SLIDE_OBJECT_2(Object object, float x, float y, float z, flo return shNATIVE_SLIDE_OBJECT.unsafe_ccall(object, x, y, z, xs * Delta, ys * Delta, zs * Delta, flag); } -SafetyHookInline shsub_A4C190 = {}; -void __fastcall sub_A4C190(void* _this, void* edx, float a2) +float g_dtScale = 1.0f; +SafetyHookInline shsub_9FE7B0 = {}; +void __cdecl sub_9FE7B0(float a1, int a2) { constexpr float MAX_DT = 1.0f / 30.0f; - return shsub_A4C190.unsafe_fastcall(_this, edx, std::min(a2, MAX_DT)); + g_dtScale = a1 / MAX_DT; + float clampedDt = std::min(a1, MAX_DT * 2.0f); + + return shsub_9FE7B0.unsafe_ccall(clampedDt, a2); } class FramerateVigilante @@ -326,34 +330,30 @@ public: } // Automobile physics - // It's probably a better idea to inline CAutomobile::processPhysics, CBoat::sub_B419D0 and CBike::sub_B46590, - // and clamp their respective a2 parameters as doing it just for CVehicle__sub_9FD940 doesn't seem to do anything... - pattern = find_pattern("56 8B F1 66 83 BE ? ? ? ? ? C6 86", "56 8B F1 66 83 BE ? ? ? ? ? C6 86"); - shsub_A4C190 = safetyhook::create_inline(pattern.get_first(), sub_A4C190); + pattern = find_pattern("81 EC F8 02 00 00 53"); + shsub_9FE7B0 = safetyhook::create_inline(pattern.get_first(), sub_9FE7B0); - // Then all of the below may no longer be needed if we do the above? - // As the following hooks just attempt to scale pieces of code from ::processPhysics anyways // Slippery bikes - injector::MakeNOP(0xCEE7A4, 6, true); - static auto test = safetyhook::create_mid(0xCEE7A4, [](SafetyHookContext& regs) + pattern = find_pattern("F3 0F 58 44 24 ? F3 0F 10 90"); + injector::MakeNOP(pattern.get_first(), 6, true); + static auto LeanAngleBikes = safetyhook::create_mid(pattern.get_first(), [](SafetyHookContext& regs) { - float dtScale = *CTimer::fTimeStep / (1.0f / 30.0f); - *(float*)(regs.esp + 0x3C) = regs.xmm0.f32[0] * dtScale; + regs.xmm0.f32[0] *= g_dtScale; + regs.xmm0.f32[0] += *(float*)(regs.esp + 0x30); }); - injector::MakeNOP(0xCEDE48, 6, true); - static auto test2 = safetyhook::create_mid(0xCEDE48, [](SafetyHookContext& regs) + pattern = find_pattern("F3 0F 11 44 24 ? 7E ? 8B 8F ? ? ? ? EB 02 33 C9 E8"); + injector::MakeNOP(pattern.get_first(), 6, true); + static auto AngleAdjustmentBikes = safetyhook::create_mid(pattern.get_first(), [](SafetyHookContext& regs) { - float dtScale = *CTimer::fTimeStep / (1.0f / 30.0f); - regs.xmm0.f32[0] *= dtScale; - regs.xmm0.f32[0] += *(float*)(regs.esp + 0x30); + *(float*)(regs.esp + 0x3C) = regs.xmm0.f32[0] * g_dtScale; }); // Slippery cars - static auto test3 = safetyhook::create_mid(0xC35C98, [](SafetyHookContext& regs) + pattern = find_pattern("0F 2F C8 77 ? F3 0F 10 0D ? ? ? ? 0F 2F C1 76 ? 0F 28 C1 8B 87 ? ? ? ? F3 0F 58 44 24 ? F3 0F 10 88"); + static auto LeanAngleCars = safetyhook::create_mid(pattern.get_first(), [](SafetyHookContext& regs) { - float dtScale = *CTimer::fTimeStep / (1.0f / 30.0f); - regs.xmm0.f32[0] *= dtScale; + regs.xmm0.f32[0] *= g_dtScale; }); // Heli rotor speed @@ -412,7 +412,7 @@ public: injector::MakeNOP(pattern.get_first(0), 8, true); static auto HeliRotorBreakTime1 = safetyhook::create_mid(pattern.get_first(0), [](SafetyHookContext& regs) { - + }); } else @@ -423,7 +423,7 @@ public: injector::MakeNOP(pattern.get_first(0), 8, true); static auto HeliRotorBreakTime1 = safetyhook::create_mid(pattern.get_first(0), [](SafetyHookContext& regs) { - + }); } } @@ -434,7 +434,7 @@ public: injector::MakeNOP(pattern.get_first(0), 8, true); static auto HeliRotorBreakTime2 = safetyhook::create_mid(pattern.get_first(0), [](SafetyHookContext& regs) { - + }); } else From 90c565dc8acaa76641d0e4f1da4fade7df08fd95 Mon Sep 17 00:00:00 2001 From: ThirteenAG Date: Tue, 3 Feb 2026 13:38:30 +0300 Subject: [PATCH 11/17] patterns fix --- source/frameratevigilante.ixx | 37 ++++++++++++++++++++++------------- 1 file changed, 23 insertions(+), 14 deletions(-) diff --git a/source/frameratevigilante.ixx b/source/frameratevigilante.ixx index ac1626e2..f46758fc 100644 --- a/source/frameratevigilante.ixx +++ b/source/frameratevigilante.ixx @@ -330,31 +330,40 @@ public: } // Automobile physics - pattern = find_pattern("81 EC F8 02 00 00 53"); + pattern = find_pattern("81 EC F8 02 00 00 53", "81 EC F8 02 00 00"); shsub_9FE7B0 = safetyhook::create_inline(pattern.get_first(), sub_9FE7B0); // Slippery bikes pattern = find_pattern("F3 0F 58 44 24 ? F3 0F 10 90"); - injector::MakeNOP(pattern.get_first(), 6, true); - static auto LeanAngleBikes = safetyhook::create_mid(pattern.get_first(), [](SafetyHookContext& regs) + if (!pattern.empty()) { - regs.xmm0.f32[0] *= g_dtScale; - regs.xmm0.f32[0] += *(float*)(regs.esp + 0x30); - }); + injector::MakeNOP(pattern.get_first(), 6, true); + static auto LeanAngleBikes = safetyhook::create_mid(pattern.get_first(), [](SafetyHookContext& regs) + { + regs.xmm0.f32[0] *= g_dtScale; + regs.xmm0.f32[0] += *(float*)(regs.esp + 0x30); + }); + } pattern = find_pattern("F3 0F 11 44 24 ? 7E ? 8B 8F ? ? ? ? EB 02 33 C9 E8"); - injector::MakeNOP(pattern.get_first(), 6, true); - static auto AngleAdjustmentBikes = safetyhook::create_mid(pattern.get_first(), [](SafetyHookContext& regs) + if (!pattern.empty()) { - *(float*)(regs.esp + 0x3C) = regs.xmm0.f32[0] * g_dtScale; - }); + injector::MakeNOP(pattern.get_first(), 6, true); + static auto AngleAdjustmentBikes = safetyhook::create_mid(pattern.get_first(), [](SafetyHookContext& regs) + { + *(float*)(regs.esp + 0x3C) = regs.xmm0.f32[0] * g_dtScale; + }); + } // Slippery cars - pattern = find_pattern("0F 2F C8 77 ? F3 0F 10 0D ? ? ? ? 0F 2F C1 76 ? 0F 28 C1 8B 87 ? ? ? ? F3 0F 58 44 24 ? F3 0F 10 88"); - static auto LeanAngleCars = safetyhook::create_mid(pattern.get_first(), [](SafetyHookContext& regs) + if (!pattern.empty()) { - regs.xmm0.f32[0] *= g_dtScale; - }); + pattern = find_pattern("0F 2F C8 77 ? F3 0F 10 0D ? ? ? ? 0F 2F C1 76 ? 0F 28 C1 8B 87 ? ? ? ? F3 0F 58 44 24 ? F3 0F 10 88"); + static auto LeanAngleCars = safetyhook::create_mid(pattern.get_first(), [](SafetyHookContext& regs) + { + regs.xmm0.f32[0] *= g_dtScale; + }); + } // Heli rotor speed { From 38b9c0ece20f179e9bc8f53288bf59c4883ff1cb Mon Sep 17 00:00:00 2001 From: RecklessGlue540 <143945383+RecklessGlue540@users.noreply.github.com> Date: Fri, 6 Feb 2026 17:25:25 +0200 Subject: [PATCH 12/17] Raise some more pools Unrelated but the new ones added fix a crash during hot coffee scenes which happens if certain objects have over 150 draw distance in .ide files --- source/limits.ixx | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/source/limits.ixx b/source/limits.ixx index e742707f..abaecdc1 100644 --- a/source/limits.ixx +++ b/source/limits.ixx @@ -133,12 +133,18 @@ public: if (bExtendedLimits) { - poolNames.push_back("TxdStore"); - poolNames.push_back("Anim Manager"); - poolNames.push_back("PhysicsStore"); - poolNames.push_back("BoundsStore"); - poolNames.push_back("DrawblDictStore"); - poolNames.push_back("IplStore"); + poolNames.push_back("Anim Manager"); // .wad + poolNames.push_back("BoundsStore"); // .wbn + poolNames.push_back("DrawblDictStore"); // .wdd + poolNames.push_back("IplStore"); // .wpl | .ipl(?) + poolNames.push_back("PhysicsStore"); // .wbd + poolNames.push_back("TxdStore"); // .wtd(?) + + // These need to be raised in order to fix a crash during hot coffee scenes when certain objects have more than 150 draw distance in .ides + poolNames.push_back("Building"); + poolNames.push_back("Dummy Object"); + poolNames.push_back("EntryInfoNodes"); + poolNames.push_back("PtrNode Double"); } if (nVehicleBudget) @@ -146,7 +152,7 @@ public: auto pattern = find_pattern("F7 2D ? ? ? ? 8B CA C1 E9 1F 03 CA B8 ? ? ? ? F7 2D ? ? ? ? 8B C2 C1 E8 1F 03 C2 89 0D ? ? ? ? A3 ? ? ? ? 83 C4 10 C3", "8B 0D ? ? ? ? B8 ? ? ? ? F7 E9 8B 0D"); injector::WriteMemory(*pattern.get_first(2), nVehicleBudget, true); - // Increase VehicleStruct pool size, to avoid certain crash with high budget + // Needed to avoid a predictable crash with high vehicle budgets (It usually happens in very specific places in the game world) poolNames.push_back("VehicleStruct"); } From 9d5276d40d832cd5bbb868c5cfa6650c1ed32399 Mon Sep 17 00:00:00 2001 From: RecklessGlue540 <143945383+RecklessGlue540@users.noreply.github.com> Date: Sat, 7 Feb 2026 19:15:50 +0200 Subject: [PATCH 13/17] Fix register Fixes bad sniper cam sensitivity introduced with the previous pr --- source/rawinput.ixx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/rawinput.ixx b/source/rawinput.ixx index fb258554..62e4f27b 100644 --- a/source/rawinput.ixx +++ b/source/rawinput.ixx @@ -781,7 +781,7 @@ public: static auto CCamFpsWeapon_MouseAimSens = safetyhook::create_mid(pattern.get_first(0), [](SafetyHookContext& regs) { regs.xmm2.f32[0] = GetMouseAimSensitivity(); - regs.xmm0.f32[0] = regs.xmm1.f32[0]; + regs.xmm0.f32[0] = regs.xmm2.f32[0]; }); } } From 452b49dfc2ea1a09cd4be76cb41d42b16755dd4f Mon Sep 17 00:00:00 2001 From: RecklessGlue540 <143945383+RecklessGlue540@users.noreply.github.com> Date: Sat, 21 Feb 2026 02:08:13 +0200 Subject: [PATCH 14/17] Fix drunk camera/explosion shake stencil issues --- source/fixes.ixx | 27 +++------------------------ source/frameratevigilante.ixx | 8 ++++---- 2 files changed, 7 insertions(+), 28 deletions(-) diff --git a/source/fixes.ixx b/source/fixes.ixx index fc7ec68b..c6f23e7e 100644 --- a/source/fixes.ixx +++ b/source/fixes.ixx @@ -55,26 +55,6 @@ public: return r; } - static inline injector::hook_back hbsub_AD1240; - static void sub_AD1240() - { - Cam rootCam = 0; - Natives::GetRootCam(&rootCam); - auto ccam = CCam::GetCamPool()->GetAt(rootCam); - if (ccam) - { - auto ptr = *(uintptr_t*)((uintptr_t)ccam + 0x110); - - if (ptr) - { - if (*(uint8_t*)(ptr + 0x27C) == 1) - return; - } - } - - return hbsub_AD1240.fun(); - } - static inline uint32_t* dword_1670CD0 = nullptr; static inline uint32_t* dwFrameCount = nullptr; static inline void* g_pSearchlightHeli = nullptr; // Pointer to the helicopter that has the light @@ -835,11 +815,10 @@ public: hbsub_5DCA80.fun = injector::MakeCALL(pattern.get_first(0), sub_5DCA80, true).get(); } - // Workaround for drunk cam lights issue + // Fix for random stencil issues when the drunk camera or explosion shakes are playing { - auto pattern = find_pattern("E8 ? ? ? ? 6A ? FF 74 24 ? FF 74 24 ? 6A", "E8 ? ? ? ? 83 FF ? 6A"); - if (!pattern.empty()) - hbsub_AD1240.fun = injector::MakeCALL(pattern.get_first(0), sub_AD1240, true).get(); + auto pattern = find_pattern("C6 05 ? ? ? ? ? 33 F6 8D 84 24", "C6 05 ? ? ? ? ? 8B DF 33 F6"); + injector::MakeNOP(pattern.get_first(0), 7, true); } // Helicopter lights fix diff --git a/source/frameratevigilante.ixx b/source/frameratevigilante.ixx index f46758fc..fefcfcbf 100644 --- a/source/frameratevigilante.ixx +++ b/source/frameratevigilante.ixx @@ -414,7 +414,7 @@ public: // Does not work yet! // This already seems correct (it uses _fFrameTime * 300.0f) but for some reason it does not want to work. Even doing CTimer::fTimeStep * 30 * 300 won't work. // The place is 100% correct too - { + /*{ pattern = hook::pattern("F3 0F 10 05 ? ? ? ? F3 0F 59 05 ? ? ? ? F3 0F 10 4C 24 ? F3 0F 5C C8"); if (!pattern.empty()) { @@ -458,7 +458,7 @@ public: }); } } - } + }*/ // Heli blinkers' speed pattern = hook::pattern("03 0D ? ? ? ? F3 0F 10 0D"); @@ -483,7 +483,7 @@ public: // Heli downwash effect // Does not work yet! // This uses more exquisite timing checks, so it doesn't fix anything atm, but the approach is probably halfway correct - pattern = find_pattern("03 05 ? ? ? ? 33 D2 F7 F7 85 D2 75 ? 8B 46 ? 52 52 52", "03 05 ? ? ? ? 33 D2 F7 F1 85 D2 75 ? D9 44 24 ? 8B 47 ? 52 52 52"); + /*pattern = find_pattern("03 05 ? ? ? ? 33 D2 F7 F7 85 D2 75 ? 8B 46 ? 52 52 52", "03 05 ? ? ? ? 33 D2 F7 F1 85 D2 75 ? D9 44 24 ? 8B 47 ? 52 52 52"); if (!pattern.empty()) { injector::MakeNOP(pattern.get_first(0), 6, true); @@ -491,7 +491,7 @@ public: { regs.eax += *CTimer::m_snTimeInMilliseconds / (1000 / 30); }); - } + }*/ // Loading text flash speed (IV and TLAD) { From b2f6f2c2af7622bd67eb361850e6cd7b1a10650c Mon Sep 17 00:00:00 2001 From: RecklessGlue540 <143945383+RecklessGlue540@users.noreply.github.com> Date: Sat, 21 Feb 2026 13:40:16 +0200 Subject: [PATCH 15/17] Revert some changes for another pr --- source/fixes.ixx | 25 +++++++- source/frameratevigilante.ixx | 110 ---------------------------------- source/limits.ixx | 20 +++---- 3 files changed, 30 insertions(+), 125 deletions(-) diff --git a/source/fixes.ixx b/source/fixes.ixx index c6f23e7e..c1b30dd8 100644 --- a/source/fixes.ixx +++ b/source/fixes.ixx @@ -55,6 +55,26 @@ public: return r; } + static inline injector::hook_back hbsub_AD1240; + static void sub_AD1240() + { + Cam rootCam = 0; + Natives::GetRootCam(&rootCam); + auto ccam = CCam::GetCamPool()->GetAt(rootCam); + if (ccam) + { + auto ptr = *(uintptr_t*)((uintptr_t)ccam + 0x110); + + if (ptr) + { + if (*(uint8_t*)(ptr + 0x27C) == 1) + return; + } + } + + return hbsub_AD1240.fun(); + } + static inline uint32_t* dword_1670CD0 = nullptr; static inline uint32_t* dwFrameCount = nullptr; static inline void* g_pSearchlightHeli = nullptr; // Pointer to the helicopter that has the light @@ -817,8 +837,9 @@ public: // Fix for random stencil issues when the drunk camera or explosion shakes are playing { - auto pattern = find_pattern("C6 05 ? ? ? ? ? 33 F6 8D 84 24", "C6 05 ? ? ? ? ? 8B DF 33 F6"); - injector::MakeNOP(pattern.get_first(0), 7, true); + auto pattern = find_pattern("E8 ? ? ? ? 6A ? FF 74 24 ? FF 74 24 ? 6A", "E8 ? ? ? ? 83 FF ? 6A"); + if (!pattern.empty()) + hbsub_AD1240.fun = injector::MakeCALL(pattern.get_first(0), sub_AD1240, true).get(); } // Helicopter lights fix diff --git a/source/frameratevigilante.ixx b/source/frameratevigilante.ixx index fefcfcbf..b460a970 100644 --- a/source/frameratevigilante.ixx +++ b/source/frameratevigilante.ixx @@ -278,17 +278,6 @@ bool __cdecl NATIVE_SLIDE_OBJECT_2(Object object, float x, float y, float z, flo return shNATIVE_SLIDE_OBJECT.unsafe_ccall(object, x, y, z, xs * Delta, ys * Delta, zs * Delta, flag); } -float g_dtScale = 1.0f; -SafetyHookInline shsub_9FE7B0 = {}; -void __cdecl sub_9FE7B0(float a1, int a2) -{ - constexpr float MAX_DT = 1.0f / 30.0f; - g_dtScale = a1 / MAX_DT; - float clampedDt = std::min(a1, MAX_DT * 2.0f); - - return shsub_9FE7B0.unsafe_ccall(clampedDt, a2); -} - class FramerateVigilante { public: @@ -329,42 +318,6 @@ public: } } - // Automobile physics - pattern = find_pattern("81 EC F8 02 00 00 53", "81 EC F8 02 00 00"); - shsub_9FE7B0 = safetyhook::create_inline(pattern.get_first(), sub_9FE7B0); - - // Slippery bikes - pattern = find_pattern("F3 0F 58 44 24 ? F3 0F 10 90"); - if (!pattern.empty()) - { - injector::MakeNOP(pattern.get_first(), 6, true); - static auto LeanAngleBikes = safetyhook::create_mid(pattern.get_first(), [](SafetyHookContext& regs) - { - regs.xmm0.f32[0] *= g_dtScale; - regs.xmm0.f32[0] += *(float*)(regs.esp + 0x30); - }); - } - - pattern = find_pattern("F3 0F 11 44 24 ? 7E ? 8B 8F ? ? ? ? EB 02 33 C9 E8"); - if (!pattern.empty()) - { - injector::MakeNOP(pattern.get_first(), 6, true); - static auto AngleAdjustmentBikes = safetyhook::create_mid(pattern.get_first(), [](SafetyHookContext& regs) - { - *(float*)(regs.esp + 0x3C) = regs.xmm0.f32[0] * g_dtScale; - }); - } - - // Slippery cars - if (!pattern.empty()) - { - pattern = find_pattern("0F 2F C8 77 ? F3 0F 10 0D ? ? ? ? 0F 2F C1 76 ? 0F 28 C1 8B 87 ? ? ? ? F3 0F 58 44 24 ? F3 0F 10 88"); - static auto LeanAngleCars = safetyhook::create_mid(pattern.get_first(), [](SafetyHookContext& regs) - { - regs.xmm0.f32[0] *= g_dtScale; - }); - } - // Heli rotor speed { pattern = hook::pattern("F3 0F 59 05 ? ? ? ? F3 0F 59 C4 F3 0F 5C C8"); @@ -410,56 +363,6 @@ public: } } - // Heli rotor break time - // Does not work yet! - // This already seems correct (it uses _fFrameTime * 300.0f) but for some reason it does not want to work. Even doing CTimer::fTimeStep * 30 * 300 won't work. - // The place is 100% correct too - /*{ - pattern = hook::pattern("F3 0F 10 05 ? ? ? ? F3 0F 59 05 ? ? ? ? F3 0F 10 4C 24 ? F3 0F 5C C8"); - if (!pattern.empty()) - { - injector::MakeNOP(pattern.get_first(0), 8, true); - static auto HeliRotorBreakTime1 = safetyhook::create_mid(pattern.get_first(0), [](SafetyHookContext& regs) - { - - }); - } - else - { - pattern = hook::pattern("F3 0F 10 0D ? ? ? ? F3 0F 59 0D ? ? ? ? F3 0F 10 44 24 ? F3 0F 5C C1 0F 57 C9"); - if (!pattern.empty()) - { - injector::MakeNOP(pattern.get_first(0), 8, true); - static auto HeliRotorBreakTime1 = safetyhook::create_mid(pattern.get_first(0), [](SafetyHookContext& regs) - { - - }); - } - } - - pattern = hook::pattern("F3 0F 10 05 ? ? ? ? F3 0F 59 05 ? ? ? ? F3 0F 10 8F ? ? ? ? F3 0F 5C C8 0F 57 C0 0F 2F C1 F3 0F 11 8F"); - if (!pattern.empty()) - { - injector::MakeNOP(pattern.get_first(0), 8, true); - static auto HeliRotorBreakTime2 = safetyhook::create_mid(pattern.get_first(0), [](SafetyHookContext& regs) - { - - }); - } - else - { - pattern = hook::pattern("F3 0F 10 0D ? ? ? ? F3 0F 59 0D ? ? ? ? F3 0F 10 86 ? ? ? ? F3 0F 5C C1 0F 57 C9 0F 2F C8 F3 0F 11 86 ? ? ? ? 72"); - if (!pattern.empty()) - { - injector::MakeNOP(pattern.get_first(0), 8, true); - static auto HeliRotorBreakTime2 = safetyhook::create_mid(pattern.get_first(0), [](SafetyHookContext& regs) - { - - }); - } - } - }*/ - // Heli blinkers' speed pattern = hook::pattern("03 0D ? ? ? ? F3 0F 10 0D"); if (!pattern.empty()) @@ -480,19 +383,6 @@ public: }); } - // Heli downwash effect - // Does not work yet! - // This uses more exquisite timing checks, so it doesn't fix anything atm, but the approach is probably halfway correct - /*pattern = find_pattern("03 05 ? ? ? ? 33 D2 F7 F7 85 D2 75 ? 8B 46 ? 52 52 52", "03 05 ? ? ? ? 33 D2 F7 F1 85 D2 75 ? D9 44 24 ? 8B 47 ? 52 52 52"); - if (!pattern.empty()) - { - injector::MakeNOP(pattern.get_first(0), 6, true); - static auto HeliDownwashEffect = safetyhook::create_mid(pattern.get_first(0), [](SafetyHookContext& regs) - { - regs.eax += *CTimer::m_snTimeInMilliseconds / (1000 / 30); - }); - }*/ - // Loading text flash speed (IV and TLAD) { // Skips an else path which post-processes the flash speed unnecessarily. diff --git a/source/limits.ixx b/source/limits.ixx index abaecdc1..e742707f 100644 --- a/source/limits.ixx +++ b/source/limits.ixx @@ -133,18 +133,12 @@ public: if (bExtendedLimits) { - poolNames.push_back("Anim Manager"); // .wad - poolNames.push_back("BoundsStore"); // .wbn - poolNames.push_back("DrawblDictStore"); // .wdd - poolNames.push_back("IplStore"); // .wpl | .ipl(?) - poolNames.push_back("PhysicsStore"); // .wbd - poolNames.push_back("TxdStore"); // .wtd(?) - - // These need to be raised in order to fix a crash during hot coffee scenes when certain objects have more than 150 draw distance in .ides - poolNames.push_back("Building"); - poolNames.push_back("Dummy Object"); - poolNames.push_back("EntryInfoNodes"); - poolNames.push_back("PtrNode Double"); + poolNames.push_back("TxdStore"); + poolNames.push_back("Anim Manager"); + poolNames.push_back("PhysicsStore"); + poolNames.push_back("BoundsStore"); + poolNames.push_back("DrawblDictStore"); + poolNames.push_back("IplStore"); } if (nVehicleBudget) @@ -152,7 +146,7 @@ public: auto pattern = find_pattern("F7 2D ? ? ? ? 8B CA C1 E9 1F 03 CA B8 ? ? ? ? F7 2D ? ? ? ? 8B C2 C1 E8 1F 03 C2 89 0D ? ? ? ? A3 ? ? ? ? 83 C4 10 C3", "8B 0D ? ? ? ? B8 ? ? ? ? F7 E9 8B 0D"); injector::WriteMemory(*pattern.get_first(2), nVehicleBudget, true); - // Needed to avoid a predictable crash with high vehicle budgets (It usually happens in very specific places in the game world) + // Increase VehicleStruct pool size, to avoid certain crash with high budget poolNames.push_back("VehicleStruct"); } From 4098b393ee2f42888496f28839ade5e105f084a6 Mon Sep 17 00:00:00 2001 From: RecklessGlue540 <143945383+RecklessGlue540@users.noreply.github.com> Date: Sat, 21 Feb 2026 13:45:55 +0200 Subject: [PATCH 16/17] Fix --- source/fixes.ixx | 2 +- source/nightshadows.ixx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/source/fixes.ixx b/source/fixes.ixx index c1b30dd8..fc7ec68b 100644 --- a/source/fixes.ixx +++ b/source/fixes.ixx @@ -835,7 +835,7 @@ public: hbsub_5DCA80.fun = injector::MakeCALL(pattern.get_first(0), sub_5DCA80, true).get(); } - // Fix for random stencil issues when the drunk camera or explosion shakes are playing + // Workaround for drunk cam lights issue { auto pattern = find_pattern("E8 ? ? ? ? 6A ? FF 74 24 ? FF 74 24 ? 6A", "E8 ? ? ? ? 83 FF ? 6A"); if (!pattern.empty()) diff --git a/source/nightshadows.ixx b/source/nightshadows.ixx index 7677830c..d5c5483d 100644 --- a/source/nightshadows.ixx +++ b/source/nightshadows.ixx @@ -134,7 +134,7 @@ public: pattern = find_pattern("51 53 55 8B 2D ? ? ? ? 56 0F B7 5D 1C 33 F6 85 DB 7E 3A 57 EB 09", "53 56 57 8B 3D ? ? ? ? 0F B7 5F 1C 33 F6 85 DB 7E 41 55 EB 0A"); sh_grcSetRenderState = safetyhook::create_inline(pattern.get_first(0), grcSetRenderStateHook); - // Limit rendering to night shadows only, fixes vehicle damage not being reflected on cascaded shadows + // Limit rendering to night shadows only, fixes vehicle damage not being reflected on directional light shadows (aka. those from the sun/moon/thunderbolts) pattern = hook::pattern("E8 ? ? ? ? 8B F0 83 C4 08 85 F6 74 17 8B 0D ? ? ? ? 8B 11 FF 52 28"); if (!pattern.count_hint(2).empty()) { From e254dccd10ee08b021b6fd6ba894ddf8b7a6c56f Mon Sep 17 00:00:00 2001 From: RecklessGlue540 <143945383+RecklessGlue540@users.noreply.github.com> Date: Sat, 21 Feb 2026 13:56:15 +0200 Subject: [PATCH 17/17] Fix2 --- source/frameratevigilante.ixx | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/source/frameratevigilante.ixx b/source/frameratevigilante.ixx index b460a970..45619ae9 100644 --- a/source/frameratevigilante.ixx +++ b/source/frameratevigilante.ixx @@ -318,6 +318,33 @@ public: } } + // Bikes (By Sergeanur) + pattern = hook::pattern("F3 0F 10 45 ? 51 8B CF F3 0F 11 04 24 E8 ? ? ? ? 8A 8F"); + if (!pattern.empty()) + { + struct FramerateVigilanteHook1 + { + void operator()(injector::reg_pack& regs) + { + float f = std::clamp(*(float*)(regs.ebp + 0x08), 1.0f / 150.0f, FLT_MAX); + *(float*)(regs.ebp + 0x08) = f; + regs.xmm0.f32[0] = f; + } + }; injector::MakeInline(pattern.get_first(0)); + } + else + { + pattern = hook::pattern("8B BE ? ? ? ? 33 C9 85 FF 7E 47 8A 5D 0C 33 D2 8D A4 24 ? ? ? ? 3B CF 7D 0A 8B 86 ? ? ? ? 03 C2 EB 02 33 C0 F6 80 ? ? ? ? ? 74 11 83 B8 ? ? ? ? ? 74 08 84 DB 0F 85 ? ? ? ? 83 C1 01 81 C2 ? ? ? ? 3B 8E ? ? ? ? 7C C5 D9 45 08 51 8B CE D9 1C 24 E8 ? ? ? ? 8A 86"); + struct FramerateVigilanteHook1 + { + void operator()(injector::reg_pack& regs) + { + regs.edi = *(uint32_t*)(regs.esi + 0xFD4); + *(float*)(regs.ebp + 0x08) = std::clamp(*(float*)(regs.ebp + 0x08), 1.0f / 150.0f, FLT_MAX); + } + }; injector::MakeInline(pattern.get_first(0), pattern.get_first(6)); + } + // Heli rotor speed { pattern = hook::pattern("F3 0F 59 05 ? ? ? ? F3 0F 59 C4 F3 0F 5C C8");