Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 34 additions & 0 deletions Client/multiplayer_sa/CMultiplayerSA_FrameRateFixes.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -578,6 +578,38 @@ 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
{
// 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
jmp RETURN_CWeapon_Update
}
}

void CMultiplayerSA::InitHooks_FrameRateFixes()
{
EZHookInstall(CTaskSimpleUseGun__SetMoveAnim);
Expand Down Expand Up @@ -619,4 +651,6 @@ void CMultiplayerSA::InitHooks_FrameRateFixes()
EZHookInstall(CVehicle__AddExhaustParticles);
EZHookInstall(CTaskSimpleSwim__ProcessEffects);
EZHookInstall(CTaskSimpleSwim__ProcessEffectsBubbleFix);

EZHookInstall(CWeapon_Update);
}
Loading