From 7333bfc3411fe0651e84780657d74a8ab72e943d Mon Sep 17 00:00:00 2001 From: FileEX Date: Tue, 8 Apr 2025 21:44:22 +0200 Subject: [PATCH 1/3] Fix bug --- .../CMultiplayerSA_FrameRateFixes.cpp | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/Client/multiplayer_sa/CMultiplayerSA_FrameRateFixes.cpp b/Client/multiplayer_sa/CMultiplayerSA_FrameRateFixes.cpp index 5f2340d39e8..10785028830 100644 --- a/Client/multiplayer_sa/CMultiplayerSA_FrameRateFixes.cpp +++ b/Client/multiplayer_sa/CMultiplayerSA_FrameRateFixes.cpp @@ -578,6 +578,43 @@ static void _declspec(naked) HOOK_CTaskSimpleSwim__ProcessEffectsBubbleFix() } } +// Fixes invisible weapon particles (extinguisher, spraycan, flamethrower) at high FPS +#define HOOKPOS_CWeapon_Update 0x73DC3D +#define HOOKSIZE_CWeapon_Update 5 +static constexpr std::uintptr_t RETURN_CWeapon_Update = 0x073DC42; +static void __declspec(naked) HOOK_CWeapon_Update() +{ + _asm + { + push esi + push ebp + + // timeStep / kOriginalTimeStep + fld ds:[0xB7CB5C] // CTimer::ms_fTimeStep + fdiv kOriginalTimeStep + + mov eax, [esi+10h] // m_timeToNextShootInMS + mov ebx, ds:[0xB7CB84] // CTimer::m_snTimeInMilliseconds + + sub eax, ebx // m_timeToNextShootInMS - CTimer::m_snTimeInMilliseconds + + push eax + fild dword ptr [esp] + add esp, 4 + + fmul st(0), st(1) // (m_timeToNextShootInMS - CTimer::m_snTimeInMilliseconds) * (timeStep / kOriginalTimeStep) + fadd st(0), ebx // + m_snTimeInMilliseconds + fistp [esi+10h] + + mov eax, ebx + + xor ebx, ebx + pop ebp + pop esi + jmp RETURN_CWeapon_Update + } +} + void CMultiplayerSA::InitHooks_FrameRateFixes() { EZHookInstall(CTaskSimpleUseGun__SetMoveAnim); @@ -619,4 +656,6 @@ void CMultiplayerSA::InitHooks_FrameRateFixes() EZHookInstall(CVehicle__AddExhaustParticles); EZHookInstall(CTaskSimpleSwim__ProcessEffects); EZHookInstall(CTaskSimpleSwim__ProcessEffectsBubbleFix); + + EZHookInstall(CWeapon_Update); } From fe0c732c05c2687c156c35a422bdea7caac3d8d3 Mon Sep 17 00:00:00 2001 From: FileEX Date: Tue, 8 Apr 2025 21:52:22 +0200 Subject: [PATCH 2/3] Update CMultiplayerSA_FrameRateFixes.cpp --- Client/multiplayer_sa/CMultiplayerSA_FrameRateFixes.cpp | 5 ----- 1 file changed, 5 deletions(-) diff --git a/Client/multiplayer_sa/CMultiplayerSA_FrameRateFixes.cpp b/Client/multiplayer_sa/CMultiplayerSA_FrameRateFixes.cpp index 10785028830..91eebbf12e5 100644 --- a/Client/multiplayer_sa/CMultiplayerSA_FrameRateFixes.cpp +++ b/Client/multiplayer_sa/CMultiplayerSA_FrameRateFixes.cpp @@ -586,9 +586,6 @@ static void __declspec(naked) HOOK_CWeapon_Update() { _asm { - push esi - push ebp - // timeStep / kOriginalTimeStep fld ds:[0xB7CB5C] // CTimer::ms_fTimeStep fdiv kOriginalTimeStep @@ -609,8 +606,6 @@ static void __declspec(naked) HOOK_CWeapon_Update() mov eax, ebx xor ebx, ebx - pop ebp - pop esi jmp RETURN_CWeapon_Update } } From 012c25f36d3a15b9805e4ce73a313103cddf3e0a Mon Sep 17 00:00:00 2001 From: FileEX Date: Sat, 17 May 2025 01:23:56 +0200 Subject: [PATCH 3/3] Update CMultiplayerSA_FrameRateFixes.cpp --- Client/multiplayer_sa/CMultiplayerSA_FrameRateFixes.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Client/multiplayer_sa/CMultiplayerSA_FrameRateFixes.cpp b/Client/multiplayer_sa/CMultiplayerSA_FrameRateFixes.cpp index 91eebbf12e5..23c766e0b4c 100644 --- a/Client/multiplayer_sa/CMultiplayerSA_FrameRateFixes.cpp +++ b/Client/multiplayer_sa/CMultiplayerSA_FrameRateFixes.cpp @@ -586,6 +586,10 @@ static void __declspec(naked) HOOK_CWeapon_Update() { _asm { + // Temp fix for camera + cmp [esi], 0x2B // CWeapon::m_eWeaponType + je skip + // timeStep / kOriginalTimeStep fld ds:[0xB7CB5C] // CTimer::ms_fTimeStep fdiv kOriginalTimeStep @@ -607,6 +611,10 @@ static void __declspec(naked) HOOK_CWeapon_Update() xor ebx, ebx jmp RETURN_CWeapon_Update + + skip: + mov eax, ds:[0xB7CB84] + jmp RETURN_CWeapon_Update } }