mirror of
https://github.com/CookiePLMonster/SilentPatch.git
synced 2025-01-31 15:07:28 +05:00
DOUBLE_RWHEELS fix for trailers (front wheels now get their duplicates too)
This commit is contained in:
parent
3b817a2fe7
commit
68043fc608
5 changed files with 121 additions and 49 deletions
|
@ -7,8 +7,8 @@ struct RsGlobalType
|
||||||
{
|
{
|
||||||
const char* AppName;
|
const char* AppName;
|
||||||
unsigned int unkWidth, unkHeight;
|
unsigned int unkWidth, unkHeight;
|
||||||
unsigned int MaximumWidth;
|
signed int MaximumWidth;
|
||||||
unsigned int MaximumHeight;
|
signed int MaximumHeight;
|
||||||
unsigned int frameLimit;
|
unsigned int frameLimit;
|
||||||
BOOL quit;
|
BOOL quit;
|
||||||
void* ps;
|
void* ps;
|
||||||
|
@ -154,7 +154,7 @@ void __declspec(naked) SubtitlesShadowFix()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
__forceinline void Patch_III_10()
|
void Patch_III_10()
|
||||||
{
|
{
|
||||||
using namespace MemoryVP;
|
using namespace MemoryVP;
|
||||||
|
|
||||||
|
@ -259,9 +259,12 @@ __forceinline void Patch_III_10()
|
||||||
|
|
||||||
// Armour cheat as TORTOISE - like in 1.1 and Steam
|
// Armour cheat as TORTOISE - like in 1.1 and Steam
|
||||||
Patch<const char*>(0x4925FB, "ESIOTROT");
|
Patch<const char*>(0x4925FB, "ESIOTROT");
|
||||||
|
|
||||||
|
// BOOOOORING fixed
|
||||||
|
Patch<BYTE>(0x4925D7, 10);
|
||||||
}
|
}
|
||||||
|
|
||||||
__forceinline void Patch_III_11()
|
void Patch_III_11()
|
||||||
{
|
{
|
||||||
using namespace MemoryVP;
|
using namespace MemoryVP;
|
||||||
|
|
||||||
|
@ -365,7 +368,7 @@ __forceinline void Patch_III_11()
|
||||||
InjectHook(0x57ED45, AlteredPrintString<0x57ED3E,0x57ED1D>);
|
InjectHook(0x57ED45, AlteredPrintString<0x57ED3E,0x57ED1D>);
|
||||||
}
|
}
|
||||||
|
|
||||||
__forceinline void Patch_III_Steam()
|
void Patch_III_Steam()
|
||||||
{
|
{
|
||||||
using namespace MemoryVP;
|
using namespace MemoryVP;
|
||||||
|
|
||||||
|
|
|
@ -1116,6 +1116,68 @@ void __declspec(naked) CacheCRC32()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void* const TrailerDoubleRWheelsFix_ReturnFalse = AddressByVersion<void*>(0x4C9333, 0x4C9533, 0x4D3C59);
|
||||||
|
static void* const TrailerDoubleRWheelsFix_ReturnTrue = AddressByVersion<void*>(0x4C9235, 0x4C9435, 0x4D3B59);
|
||||||
|
void __declspec(naked) TrailerDoubleRWheelsFix()
|
||||||
|
{
|
||||||
|
_asm
|
||||||
|
{
|
||||||
|
cmp [edi]CVehicleModelInfo.m_dwType, VEHICLE_TRAILER
|
||||||
|
je TrailerDoubleRWheelsFix_DoWheels
|
||||||
|
cmp eax, 2
|
||||||
|
je TrailerDoubleRWheelsFix_False
|
||||||
|
cmp eax, 5
|
||||||
|
je TrailerDoubleRWheelsFix_False
|
||||||
|
|
||||||
|
TrailerDoubleRWheelsFix_DoWheels:
|
||||||
|
jmp TrailerDoubleRWheelsFix_ReturnTrue
|
||||||
|
|
||||||
|
TrailerDoubleRWheelsFix_False:
|
||||||
|
jmp TrailerDoubleRWheelsFix_ReturnFalse
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void __declspec(naked) TrailerDoubleRWheelsFix2()
|
||||||
|
{
|
||||||
|
_asm
|
||||||
|
{
|
||||||
|
add esp, 18h
|
||||||
|
mov eax, [ebx]
|
||||||
|
mov eax, [esi+eax+4]
|
||||||
|
jmp TrailerDoubleRWheelsFix
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void __declspec(naked) TrailerDoubleRWheelsFix_Steam()
|
||||||
|
{
|
||||||
|
_asm
|
||||||
|
{
|
||||||
|
cmp [esi]CVehicleModelInfo.m_dwType, VEHICLE_TRAILER
|
||||||
|
je TrailerDoubleRWheelsFix_DoWheels
|
||||||
|
cmp eax, 2
|
||||||
|
je TrailerDoubleRWheelsFix_False
|
||||||
|
cmp eax, 5
|
||||||
|
je TrailerDoubleRWheelsFix_False
|
||||||
|
|
||||||
|
TrailerDoubleRWheelsFix_DoWheels:
|
||||||
|
jmp TrailerDoubleRWheelsFix_ReturnTrue
|
||||||
|
|
||||||
|
TrailerDoubleRWheelsFix_False:
|
||||||
|
jmp TrailerDoubleRWheelsFix_ReturnFalse
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void __declspec(naked) TrailerDoubleRWheelsFix2_Steam()
|
||||||
|
{
|
||||||
|
_asm
|
||||||
|
{
|
||||||
|
add esp, 18h
|
||||||
|
mov eax, [ebp]
|
||||||
|
mov eax, [ebx+eax+4]
|
||||||
|
jmp TrailerDoubleRWheelsFix_Steam
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void* LoadFLAC_JumpBack = AddressByVersion<void*>(0x4F3743, *(BYTE*)0x4F3A50 == 0x6A ? 0x4F3BA3 : 0x5B6B81, 0x4FFC3F);
|
static void* LoadFLAC_JumpBack = AddressByVersion<void*>(0x4F3743, *(BYTE*)0x4F3A50 == 0x6A ? 0x4F3BA3 : 0x5B6B81, 0x4FFC3F);
|
||||||
void __declspec(naked) LoadFLAC()
|
void __declspec(naked) LoadFLAC()
|
||||||
{
|
{
|
||||||
|
@ -1409,17 +1471,11 @@ BOOL InjectDelayedPatches_10()
|
||||||
|
|
||||||
GetModuleFileNameW(hDLLModule, wcModulePath, MAX_PATH);
|
GetModuleFileNameW(hDLLModule, wcModulePath, MAX_PATH);
|
||||||
|
|
||||||
wchar_t* pSlash = wcsrchr(wcModulePath, '\\');
|
// ASI -> INI
|
||||||
if ( pSlash )
|
size_t nLen = wcslen(wcModulePath);
|
||||||
{
|
wcModulePath[nLen-1] = L'i';
|
||||||
*pSlash = '\0';
|
wcModulePath[nLen-2] = L'n';
|
||||||
PathAppendW(wcModulePath, L"SilentPatchSA.ini");
|
wcModulePath[nLen-3] = L'i';
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// Should never happen - if it does, something's fucking up
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool bHasImVehFt = GetModuleHandle("ImVehFt.asi") != nullptr;
|
bool bHasImVehFt = GetModuleHandle("ImVehFt.asi") != nullptr;
|
||||||
bool bSAMP = GetModuleHandle("samp") != nullptr;
|
bool bSAMP = GetModuleHandle("samp") != nullptr;
|
||||||
|
@ -1587,17 +1643,11 @@ BOOL InjectDelayedPatches_11()
|
||||||
|
|
||||||
GetModuleFileNameW(hDLLModule, wcModulePath, MAX_PATH);
|
GetModuleFileNameW(hDLLModule, wcModulePath, MAX_PATH);
|
||||||
|
|
||||||
wchar_t* pSlash = wcsrchr(wcModulePath, '\\');
|
// ASI -> INI
|
||||||
if ( pSlash )
|
size_t nLen = wcslen(wcModulePath);
|
||||||
{
|
wcModulePath[nLen-1] = L'i';
|
||||||
*pSlash = '\0';
|
wcModulePath[nLen-2] = L'n';
|
||||||
PathAppendW(wcModulePath, L"SilentPatchSA.ini");
|
wcModulePath[nLen-3] = L'i';
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// Should never happen - if it does, something's fucking up
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool bHasImVehFt = GetModuleHandle("ImVehFt.asi") != nullptr;
|
bool bHasImVehFt = GetModuleHandle("ImVehFt.asi") != nullptr;
|
||||||
bool bSAMP = GetModuleHandle("samp") != nullptr;
|
bool bSAMP = GetModuleHandle("samp") != nullptr;
|
||||||
|
@ -1773,17 +1823,11 @@ BOOL InjectDelayedPatches_Steam()
|
||||||
|
|
||||||
GetModuleFileNameW(hDLLModule, wcModulePath, MAX_PATH);
|
GetModuleFileNameW(hDLLModule, wcModulePath, MAX_PATH);
|
||||||
|
|
||||||
wchar_t* pSlash = wcsrchr(wcModulePath, '\\');
|
// ASI -> INI
|
||||||
if ( pSlash )
|
size_t nLen = wcslen(wcModulePath);
|
||||||
{
|
wcModulePath[nLen-1] = L'i';
|
||||||
*pSlash = '\0';
|
wcModulePath[nLen-2] = L'n';
|
||||||
PathAppendW(wcModulePath, L"SilentPatchSA.ini");
|
wcModulePath[nLen-3] = L'i';
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// Should never happen - if it does, something's fucking up
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool bHasImVehFt = GetModuleHandle("ImVehFt.asi") != nullptr;
|
bool bHasImVehFt = GetModuleHandle("ImVehFt.asi") != nullptr;
|
||||||
bool bSAMP = GetModuleHandle("samp") != nullptr;
|
bool bSAMP = GetModuleHandle("samp") != nullptr;
|
||||||
|
@ -1935,7 +1979,7 @@ BOOL InjectDelayedPatches_Steam()
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
__forceinline void Patch_SA_10()
|
void Patch_SA_10()
|
||||||
{
|
{
|
||||||
using namespace MemoryVP;
|
using namespace MemoryVP;
|
||||||
|
|
||||||
|
@ -1983,6 +2027,10 @@ __forceinline void Patch_SA_10()
|
||||||
Patch<WORD>(0x4C9290, 0xE281);
|
Patch<WORD>(0x4C9290, 0xE281);
|
||||||
Patch<int>(0x4C9292, ~(rwMATRIXTYPEMASK|rwMATRIXINTERNALIDENTITY));
|
Patch<int>(0x4C9292, ~(rwMATRIXTYPEMASK|rwMATRIXINTERNALIDENTITY));
|
||||||
|
|
||||||
|
// A fix for DOUBLE_RWHEELS trailers
|
||||||
|
InjectHook(0x4C9223, TrailerDoubleRWheelsFix, PATCH_JUMP);
|
||||||
|
InjectHook(0x4C92F4, TrailerDoubleRWheelsFix2, PATCH_JUMP);
|
||||||
|
|
||||||
// No framedelay
|
// No framedelay
|
||||||
Patch<WORD>(0x53E923, 0x43EB);
|
Patch<WORD>(0x53E923, 0x43EB);
|
||||||
Patch<BYTE>(0x53E99F, 0x10);
|
Patch<BYTE>(0x53E99F, 0x10);
|
||||||
|
@ -2157,7 +2205,7 @@ __forceinline void Patch_SA_10()
|
||||||
strncpy(pScannerNames + (8*134), "????", 8);
|
strncpy(pScannerNames + (8*134), "????", 8);
|
||||||
}
|
}
|
||||||
|
|
||||||
__forceinline void Patch_SA_11()
|
void Patch_SA_11()
|
||||||
{
|
{
|
||||||
using namespace MemoryVP;
|
using namespace MemoryVP;
|
||||||
|
|
||||||
|
@ -2190,6 +2238,10 @@ __forceinline void Patch_SA_11()
|
||||||
Patch<WORD>(0x4C9490, 0xE281);
|
Patch<WORD>(0x4C9490, 0xE281);
|
||||||
Patch<int>(0x4C9492, ~(rwMATRIXTYPEMASK|rwMATRIXINTERNALIDENTITY));
|
Patch<int>(0x4C9492, ~(rwMATRIXTYPEMASK|rwMATRIXINTERNALIDENTITY));
|
||||||
|
|
||||||
|
// A fix for DOUBLE_RWHEELS trailers
|
||||||
|
InjectHook(0x4C9423, TrailerDoubleRWheelsFix, PATCH_JUMP);
|
||||||
|
InjectHook(0x4C94F4, TrailerDoubleRWheelsFix2, PATCH_JUMP);
|
||||||
|
|
||||||
// No framedelay
|
// No framedelay
|
||||||
Patch<WORD>(0x53EDC3, 0x43EB);
|
Patch<WORD>(0x53EDC3, 0x43EB);
|
||||||
Patch<BYTE>(0x53EE3F, 0x10);
|
Patch<BYTE>(0x53EE3F, 0x10);
|
||||||
|
@ -2356,7 +2408,7 @@ __forceinline void Patch_SA_11()
|
||||||
Patch<DWORD>(0x4E124C, 0x4DEBC78B);
|
Patch<DWORD>(0x4E124C, 0x4DEBC78B);
|
||||||
}
|
}
|
||||||
|
|
||||||
__forceinline void Patch_SA_Steam()
|
void Patch_SA_Steam()
|
||||||
{
|
{
|
||||||
using namespace MemoryVP;
|
using namespace MemoryVP;
|
||||||
|
|
||||||
|
@ -2388,6 +2440,10 @@ __forceinline void Patch_SA_Steam()
|
||||||
Patch<WORD>(0x4D3B9D, 0x6781);
|
Patch<WORD>(0x4D3B9D, 0x6781);
|
||||||
Patch<int>(0x4D3BA0, ~(rwMATRIXTYPEMASK|rwMATRIXINTERNALIDENTITY));
|
Patch<int>(0x4D3BA0, ~(rwMATRIXTYPEMASK|rwMATRIXINTERNALIDENTITY));
|
||||||
|
|
||||||
|
// A fix for DOUBLE_RWHEELS trailers
|
||||||
|
InjectHook(0x4D3B47, TrailerDoubleRWheelsFix_Steam, PATCH_JUMP);
|
||||||
|
InjectHook(0x4D3C1A, TrailerDoubleRWheelsFix2_Steam, PATCH_JUMP);
|
||||||
|
|
||||||
// No framedelay
|
// No framedelay
|
||||||
Patch<WORD>(0x551113, 0x46EB);
|
Patch<WORD>(0x551113, 0x46EB);
|
||||||
Patch<BYTE>(0x551195, 0xC);
|
Patch<BYTE>(0x551195, 0xC);
|
||||||
|
|
|
@ -15,7 +15,6 @@
|
||||||
#include <utility>
|
#include <utility>
|
||||||
#include <cassert>
|
#include <cassert>
|
||||||
#include <tuple>
|
#include <tuple>
|
||||||
#include <shlwapi.h>
|
|
||||||
|
|
||||||
/*#include <windows.h>
|
/*#include <windows.h>
|
||||||
#include <limits>
|
#include <limits>
|
||||||
|
|
|
@ -4,6 +4,22 @@
|
||||||
#include "GeneralSA.h"
|
#include "GeneralSA.h"
|
||||||
#include "ModelInfoSA.h"
|
#include "ModelInfoSA.h"
|
||||||
|
|
||||||
|
enum eVehicleType
|
||||||
|
{
|
||||||
|
VEHICLE_AUTOMOBILE,
|
||||||
|
VEHICLE_MTRUCK,
|
||||||
|
VEHICLE_QUAD,
|
||||||
|
VEHICLE_HELI,
|
||||||
|
VEHICLE_PLANE,
|
||||||
|
VEHICLE_BOAT,
|
||||||
|
VEHICLE_TRAIN,
|
||||||
|
VEHICLE_FHELI,
|
||||||
|
VEHICLE_FPLANE,
|
||||||
|
VEHICLE_BIKE,
|
||||||
|
VEHICLE_BMX,
|
||||||
|
VEHICLE_TRAILER
|
||||||
|
};
|
||||||
|
|
||||||
struct CVehicleFlags
|
struct CVehicleFlags
|
||||||
{
|
{
|
||||||
//0x428
|
//0x428
|
||||||
|
|
|
@ -6,8 +6,8 @@ struct RsGlobalType
|
||||||
{
|
{
|
||||||
const char* AppName;
|
const char* AppName;
|
||||||
unsigned int unkWidth, unkHeight;
|
unsigned int unkWidth, unkHeight;
|
||||||
unsigned int MaximumWidth;
|
signed int MaximumWidth;
|
||||||
unsigned int MaximumHeight;
|
signed int MaximumHeight;
|
||||||
unsigned int frameLimit;
|
unsigned int frameLimit;
|
||||||
BOOL quit;
|
BOOL quit;
|
||||||
void* ps;
|
void* ps;
|
||||||
|
@ -23,8 +23,6 @@ static const void* RosieAudioFix_JumpBack;
|
||||||
void (__stdcall *AudioResetTimers)(unsigned int);
|
void (__stdcall *AudioResetTimers)(unsigned int);
|
||||||
static void (*PrintString)(float,float,const wchar_t*);
|
static void (*PrintString)(float,float,const wchar_t*);
|
||||||
|
|
||||||
static bool* bWantsToDrawHud;
|
|
||||||
static bool* bCamCheck;
|
|
||||||
static RsGlobalType* RsGlobal;
|
static RsGlobalType* RsGlobal;
|
||||||
static const float* ResolutionWidthMult;
|
static const float* ResolutionWidthMult;
|
||||||
static const float* ResolutionHeightMult;
|
static const float* ResolutionHeightMult;
|
||||||
|
@ -99,7 +97,7 @@ void __declspec(naked) SubtitlesShadowFix()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
__forceinline void Patch_VC_10()
|
void Patch_VC_10()
|
||||||
{
|
{
|
||||||
using namespace MemoryVP;
|
using namespace MemoryVP;
|
||||||
|
|
||||||
|
@ -159,7 +157,7 @@ __forceinline void Patch_VC_10()
|
||||||
InjectHook(0x54474D, AlteredPrintStringMinus<0x544727,0x544727>);
|
InjectHook(0x54474D, AlteredPrintStringMinus<0x544727,0x544727>);
|
||||||
}
|
}
|
||||||
|
|
||||||
__forceinline void Patch_VC_11()
|
void Patch_VC_11()
|
||||||
{
|
{
|
||||||
using namespace MemoryVP;
|
using namespace MemoryVP;
|
||||||
|
|
||||||
|
@ -219,7 +217,7 @@ __forceinline void Patch_VC_11()
|
||||||
InjectHook(0x54476D, AlteredPrintStringMinus<0x544747,0x544747>);
|
InjectHook(0x54476D, AlteredPrintStringMinus<0x544747,0x544747>);
|
||||||
}
|
}
|
||||||
|
|
||||||
__forceinline void Patch_VC_Steam()
|
void Patch_VC_Steam()
|
||||||
{
|
{
|
||||||
using namespace MemoryVP;
|
using namespace MemoryVP;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue