new timers fix (only 1.0 in SA!!)

This commit is contained in:
Silent 2017-03-20 21:10:50 +01:00
parent 72542d521e
commit 9247b2c38d

View File

@ -1852,6 +1852,66 @@ DarkVehiclesFix4_MakeItDark:
}
// 1.0 ONLY ENDS HERE
static int _Timers_ftol_internal( double timer, double& remainder )
{
if ( timer >= 1.0 ) return int(timer);
double integral;
remainder = modf( timer + remainder, &integral );
return int(integral);
}
int __stdcall Timers_ftol_PauseMode( double timer )
{
static double TimersRemainder = 0.0;
return _Timers_ftol_internal( timer, TimersRemainder );
}
int __stdcall Timers_ftol_NonClipped( double timer )
{
static double TimersRemainder = 0.0;
return _Timers_ftol_internal( timer, TimersRemainder );
}
int __stdcall Timers_ftol( double timer )
{
static double TimersRemainder = 0.0;
return _Timers_ftol_internal( timer, TimersRemainder );
}
void __declspec(naked) asmTimers_ftol_PauseMode()
{
_asm
{
sub esp, 8
fstp qword ptr [esp]
call Timers_ftol_PauseMode
retn
}
}
void __declspec(naked) asmTimers_ftol_NonClipped()
{
_asm
{
sub esp, 8
fstp qword ptr [esp]
call Timers_ftol_NonClipped
retn
}
}
void __declspec(naked) asmTimers_ftol()
{
_asm
{
sub esp, 8
fstp qword ptr [esp]
call Timers_ftol
retn
}
}
void __declspec(naked) GetMaxExtraDirectionals()
{
_asm
@ -3041,6 +3101,12 @@ void Patch_SA_10()
InjectHook( 0x73B3AE + 1, WeaponRangeMult_VehicleCheck, PATCH_CALL );
// New timers fix
InjectHook( 0x561C32, asmTimers_ftol_PauseMode );
InjectHook( 0x561902, asmTimers_ftol_NonClipped );
InjectHook( 0x56191A, asmTimers_ftol );
// Don't catch WM_SYSKEYDOWN and WM_SYSKEYUP (fixes Alt+F4)
InjectHook( AddressByRegion_10<int>(0x748220), AddressByRegion_10<int>(0x748446), PATCH_JUMP );
Patch<uint8_t>( AddressByRegion_10<int>(0x7481E3), 0x5C ); // esi -> ebx