Skip to content

Commit

Permalink
SilentPatchIII: Fixup the MSVC inline assembly statements
Browse files Browse the repository at this point in the history
Some of them use the deference operator incorrectly (also clean them
up in general)
  • Loading branch information
TheComputerGuy96 authored and CookiePLMonster committed Nov 18, 2024
1 parent 7360097 commit 7819f30
Showing 1 changed file with 61 additions and 60 deletions.
121 changes: 61 additions & 60 deletions SilentPatchIII/SilentPatchIII.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -194,37 +194,37 @@ void ResetMousePos()
orgConstructRenderList();
}

void __declspec(naked) M16StatsFix()
__declspec(naked) void M16StatsFix()
{
_asm
{
add eax, 34h
add ebx, 34h
mov ecx, [InstantHitsFiredByPlayer]
inc [ecx]
retn
add eax, 0x34
add ebx, 0x34
mov ecx, InstantHitsFiredByPlayer
inc dword ptr [ecx]
ret
}
}

void __declspec(naked) HeadlightsFix()
static const float fMinusOne = -1.0f;
__declspec(naked) void HeadlightsFix()
{
static const float fMinusOne = -1.0f;
_asm
{
fld [esp+708h-690h]
fld dword ptr [esp+0x708-0x690]
fcomp fMinusOne
fnstsw ax
and ah, 5
cmp ah, 1
jnz HeadlightsFix_DontLimit
fld fMinusOne
fstp [esp+708h-690h]
fstp dword ptr [esp+0x708-0x690]

HeadlightsFix_DontLimit:
fld [esp+708h-690h]
HeadlightsFix_DontLimit:
fld dword ptr [esp+0x708-0x690]
fabs
fld st
jmp [HeadlightsFix_JumpBack]
jmp HeadlightsFix_JumpBack
}
}

Expand Down Expand Up @@ -312,68 +312,68 @@ float FixedRefValue()
return 1.0f;
}

void __declspec(naked) SubtitlesShadowFix()
__declspec(naked) void SubtitlesShadowFix()
{
_asm
{
push eax
call Recalculate
fadd [esp+50h+8]
fadd [fShadowYSize]
fadd dword ptr [esp+0x50+8]
fadd fShadowYSize
jmp SubtitlesShadowFix_JumpBack
}
}

void __declspec(naked) III_SensResetFix()
__declspec(naked) void III_SensResetFix()
{
_asm
{
mov ecx, 3A76h
mov ecx, 0x3A76
mov edi, ebp
fld dword ptr [ebp+194h]
fld dword ptr [ebp+198h]
fld dword ptr [ebp+0x194]
fld dword ptr [ebp+0x198]
rep stosd
fstp dword ptr [ebp+198h]
fstp dword ptr [ebp+194h]
retn
fstp dword ptr [ebp+0x198]
fstp dword ptr [ebp+0x194]
ret
}
}

static void* RadarBoundsCheckCoordBlip_JumpBack = AddressByVersion<void*>(0x4A55B8, 0x4A56A8, 0x4A5638);
static void* RadarBoundsCheckCoordBlip_Count = AddressByVersion<void*>(0x4A55AF, 0x4A569F, 0x4A562F);
void __declspec(naked) RadarBoundsCheckCoordBlip()
__declspec(naked) void RadarBoundsCheckCoordBlip()
{
_asm
{
mov edx, dword ptr [RadarBoundsCheckCoordBlip_Count]
mov edx, RadarBoundsCheckCoordBlip_Count
cmp cl, byte ptr [edx]
jnb OutOfBounds
mov edx, ecx
mov eax, [esp+4]
jmp RadarBoundsCheckCoordBlip_JumpBack

OutOfBounds:
OutOfBounds:
or eax, -1
fcompp
retn
ret
}
}

static void* RadarBoundsCheckEntityBlip_JumpBack = AddressByVersion<void*>(0x4A565E, 0x4A574E, 0x4A56DE);
void __declspec(naked) RadarBoundsCheckEntityBlip()
__declspec(naked) void RadarBoundsCheckEntityBlip()
{
_asm
{
mov edx, dword ptr [RadarBoundsCheckCoordBlip_Count]
mov edx, RadarBoundsCheckCoordBlip_Count
cmp cl, byte ptr [edx]
jnb OutOfBounds
mov edx, ecx
mov eax, [esp+4]
jmp RadarBoundsCheckEntityBlip_JumpBack

OutOfBounds:
OutOfBounds:
or eax, -1
retn
ret
}
}

Expand Down Expand Up @@ -411,11 +411,12 @@ unsigned int __cdecl AutoPilotTimerCalculation_III(unsigned int nTimer, int nSca
return nTimer - static_cast<unsigned int>(nScaleFactor * fScaleCoef);
}

void __declspec(naked) AutoPilotTimerFix_III()
__declspec(naked) void AutoPilotTimerFix_III()
{
_asm {
push dword ptr[esp + 0x4]
push dword ptr[ebx + 0x10]
_asm
{
push dword ptr [esp + 0x4]
push dword ptr [ebx + 0x10]
push eax
call AutoPilotTimerCalculation_III
add esp, 0xC
Expand All @@ -424,7 +425,7 @@ void __declspec(naked) AutoPilotTimerFix_III()
pop ebp
pop esi
pop ebx
retn 4
ret 4
}
}

Expand Down Expand Up @@ -576,22 +577,22 @@ namespace SirenSwitchingFix
// ============= Fixed vehicles exploding twice if the driver leaves the car while it's exploding =============
namespace RemoveDriverStatusFix
{
__declspec(naked) void RemoveDriver_SetStatus()
__declspec(naked) static void RemoveDriver_SetStatus()
{
// if (m_nStatus != STATUS_WRECKED)
// m_nStatus = STATUS_ABANDONED;
_asm
{
mov ah, [ecx+50h]
mov ah, [ecx+0x50]
mov al, ah
and ah, 0F8h
cmp ah, 28h
and ah, 0xF8
cmp ah, 0x28
je DontSetStatus
and al, 7
or al, 20h
or al, 0x20

DontSetStatus:
retn
ret
}
}
}
Expand Down Expand Up @@ -623,17 +624,17 @@ namespace EvasiveDiveFix
return CGeneral::LimitRadianAngle(angle);
}

__declspec(naked) void CalculateAngle_Hook()
__declspec(naked) static void CalculateAngle_Hook()
{
_asm
{
push dword ptr [esi+7Ch]
push dword ptr [esi+78h]
push dword ptr [esi+0x7C]
push dword ptr [esi+0x78]
call CalculateAngle
add esp, 8

mov ecx, ebp
retn
ret
}
}
}
Expand All @@ -651,7 +652,7 @@ namespace NullTerminatedLines
{
mov eax, [esp+4]
mov byte ptr [eax+ecx], 0
jmp [orgSscanf_LoadPath]
jmp orgSscanf_LoadPath
}
}

Expand All @@ -662,20 +663,20 @@ namespace NullTerminatedLines
{
mov eax, [esp+4]
mov byte ptr [eax+ecx], 0
jmp [orgSscanf1]
jmp orgSscanf1
}
}

__declspec(naked) static void ReadTrackFile_Terminate()
{
_asm
{
mov ecx, [gString]
mov ecx, gString
mov byte ptr [ecx+edx], 0
mov ecx, [esi]
inc ebp
add ecx, [esp+0ACh-98h]
retn
add ecx, [esp+0xAC-0x98]
ret
}
}
}
Expand Down Expand Up @@ -705,14 +706,14 @@ namespace DodoKeyboardControls
{
_asm
{
call [orgFindPlayerVehicle]
mov ecx, [bAllDodosCheat]
call orgFindPlayerVehicle
mov ecx, bAllDodosCheat
cmp byte ptr [ecx], 0
je CheatDisabled
mov byte ptr [esp+1Ch-14h], 1
mov byte ptr [esp+0x1C-0x14], 1

CheatDisabled:
retn
ret
}
}
}
Expand Down Expand Up @@ -768,11 +769,11 @@ namespace GenerateNewPickup_ReuseObjectFix
static void* pPickupObject;
static void (*orgGiveUsAPickUpObject)(int);

__declspec(naked) void GiveUsAPickUpObject_CleanUpObject()
__declspec(naked) static void GiveUsAPickUpObject_CleanUpObject()
{
_asm
{
mov eax, [pPickupObject]
mov eax, pPickupObject
add eax, ebp
mov eax, [eax]
test eax, eax
Expand All @@ -781,7 +782,7 @@ namespace GenerateNewPickup_ReuseObjectFix
mov edi, eax

push edi
call [WorldRemove]
call WorldRemove
add esp, 4

// Call dtor
Expand All @@ -793,7 +794,7 @@ namespace GenerateNewPickup_ReuseObjectFix
pop edi

NoPickup:
jmp [orgGiveUsAPickUpObject]
jmp orgGiveUsAPickUpObject
}
}
}
Expand Down Expand Up @@ -2499,4 +2500,4 @@ extern "C" __declspec(dllexport)
uint32_t GetBuildNumber()
{
return (SILENTPATCH_REVISION_ID << 8) | SILENTPATCH_BUILD_ID;
}
}

0 comments on commit 7819f30

Please sign in to comment.