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 5f2340d39e..1078502883 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 1078502883..91eebbf12e 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 77c2de3b4ded8a1aa100b5464fa46260ae61f04b Mon Sep 17 00:00:00 2001 From: FileEX Date: Wed, 23 Apr 2025 06:40:13 +0200 Subject: [PATCH 3/3] Update CMultiplayerSA_FrameRateFixes.cpp --- Client/multiplayer_sa/CMultiplayerSA_FrameRateFixes.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/Client/multiplayer_sa/CMultiplayerSA_FrameRateFixes.cpp b/Client/multiplayer_sa/CMultiplayerSA_FrameRateFixes.cpp index 91eebbf12e..b50c799faf 100644 --- a/Client/multiplayer_sa/CMultiplayerSA_FrameRateFixes.cpp +++ b/Client/multiplayer_sa/CMultiplayerSA_FrameRateFixes.cpp @@ -602,6 +602,7 @@ static void __declspec(naked) HOOK_CWeapon_Update() fmul st(0), st(1) // (m_timeToNextShootInMS - CTimer::m_snTimeInMilliseconds) * (timeStep / kOriginalTimeStep) fadd st(0), ebx // + m_snTimeInMilliseconds fistp [esi+10h] + fstp st(0) mov eax, ebx