Purple Nines Glitch fix revised

This commit is contained in:
Silent 2017-09-12 23:26:08 +02:00
parent e3fe830843
commit 54264b5cc4

View File

@ -44,7 +44,6 @@ struct RwV2d
static void (*DrawRect)(const CRect&,const CRGBA&); static void (*DrawRect)(const CRect&,const CRGBA&);
static void (*SetScale)(float,float); static void (*SetScale)(float,float);
static int* InstantHitsFiredByPlayer; static int* InstantHitsFiredByPlayer;
static signed char* pGangModelOverrides;
static const void* HeadlightsFix_JumpBack; static const void* HeadlightsFix_JumpBack;
@ -94,10 +93,21 @@ void SetScaleProperly(float fX, float fY)
SetScale(fX * GetWidthMult() * RsGlobal->MaximumWidth, fY * GetHeightMult() * RsGlobal->MaximumHeight); SetScale(fX * GetWidthMult() * RsGlobal->MaximumWidth, fY * GetHeightMult() * RsGlobal->MaximumHeight);
} }
class CGang
{
public:
int32_t m_vehicleModel;
int8_t m_gangModelOverride;
int32_t m_gangWeapons[2];
};
static_assert(sizeof(CGang) == 0x10, "Wrong size: CGang");
static CGang* const Gangs = *hook::get_pattern<CGang*>( "0F BF 4C 24 04 8B 44 24 08 C1 E1 04 89 81", -0x60 + 2 );
void PurpleNinesGlitchFix() void PurpleNinesGlitchFix()
{ {
for ( int i = 0; i < 9; ++i ) for ( size_t i = 0; i < 9; ++i )
pGangModelOverrides[i * 16] = -1; Gangs[i].m_gangModelOverride = -1;
} }
static bool bGameInFocus = true; static bool bGameInFocus = true;
@ -347,7 +357,6 @@ void Patch_III_10(const RECT& desktop)
PrintString = (void(*)(float,float,const wchar_t*))0x500F50; PrintString = (void(*)(float,float,const wchar_t*))0x500F50;
InstantHitsFiredByPlayer = *(int**)0x482C8F; InstantHitsFiredByPlayer = *(int**)0x482C8F;
pGangModelOverrides = *(signed char**)0x4C405E;
bWantsToDrawHud = *(bool**)0x4A5877; bWantsToDrawHud = *(bool**)0x4A5877;
bCamCheck = *(bool**)0x4A588C; bCamCheck = *(bool**)0x4A588C;
RsGlobal = *(RsGlobalType**)0x584C42; RsGlobal = *(RsGlobalType**)0x584C42;
@ -368,8 +377,6 @@ void Patch_III_10(const RECT& desktop)
Patch<WORD>(0x5382BF, 0x0EEB); Patch<WORD>(0x5382BF, 0x0EEB);
InjectHook(0x5382EC, HeadlightsFix, PATCH_JUMP); InjectHook(0x5382EC, HeadlightsFix, PATCH_JUMP);
InjectHook(0x4C4004, PurpleNinesGlitchFix, PATCH_JUMP);
InjectHook(0x4A5870, ShowRadarTrace, PATCH_JUMP); InjectHook(0x4A5870, ShowRadarTrace, PATCH_JUMP);
InjectHook(0x4209A7, SetScaleProperly); InjectHook(0x4209A7, SetScaleProperly);
InjectHook(0x420A1F, SetScaleProperly); InjectHook(0x420A1F, SetScaleProperly);
@ -511,7 +518,6 @@ void Patch_III_11(const RECT& desktop)
PrintString = (void(*)(float,float,const wchar_t*))0x501030; PrintString = (void(*)(float,float,const wchar_t*))0x501030;
InstantHitsFiredByPlayer = *(int**)0x482D5F; InstantHitsFiredByPlayer = *(int**)0x482D5F;
pGangModelOverrides = *(signed char**)0x4C40FE;
bWantsToDrawHud = *(bool**)0x4A5967; bWantsToDrawHud = *(bool**)0x4A5967;
bCamCheck = *(bool**)0x4A597C; bCamCheck = *(bool**)0x4A597C;
RsGlobal = *(RsGlobalType**)0x584F82; RsGlobal = *(RsGlobalType**)0x584F82;
@ -532,8 +538,6 @@ void Patch_III_11(const RECT& desktop)
Patch<WORD>(0x5384FF, 0x0EEB); Patch<WORD>(0x5384FF, 0x0EEB);
InjectHook(0x53852C, HeadlightsFix, PATCH_JUMP); InjectHook(0x53852C, HeadlightsFix, PATCH_JUMP);
InjectHook(0x4C40A4, PurpleNinesGlitchFix, PATCH_JUMP);
InjectHook(0x4A5960, ShowRadarTrace, PATCH_JUMP); InjectHook(0x4A5960, ShowRadarTrace, PATCH_JUMP);
InjectHook(0x4209A7, SetScaleProperly); InjectHook(0x4209A7, SetScaleProperly);
InjectHook(0x420A1F, SetScaleProperly); InjectHook(0x420A1F, SetScaleProperly);
@ -654,7 +658,6 @@ void Patch_III_Steam(const RECT& desktop)
PrintString = (void(*)(float,float,const wchar_t*))0x500FC0; PrintString = (void(*)(float,float,const wchar_t*))0x500FC0;
InstantHitsFiredByPlayer = *(int**)0x482D5F; InstantHitsFiredByPlayer = *(int**)0x482D5F;
pGangModelOverrides = *(signed char**)0x4C408E;
bWantsToDrawHud = *(bool**)0x4A58F7; bWantsToDrawHud = *(bool**)0x4A58F7;
bCamCheck = *(bool**)0x4A590C; bCamCheck = *(bool**)0x4A590C;
RsGlobal = *(RsGlobalType**)0x584E72; RsGlobal = *(RsGlobalType**)0x584E72;
@ -671,8 +674,6 @@ void Patch_III_Steam(const RECT& desktop)
Patch<BYTE>(0x544C94, 127); Patch<BYTE>(0x544C94, 127);
InjectHook(0x4C4034, PurpleNinesGlitchFix, PATCH_JUMP);
InjectHook(0x4A58F0, ShowRadarTrace, PATCH_JUMP); InjectHook(0x4A58F0, ShowRadarTrace, PATCH_JUMP);
InjectHook(0x4209A7, SetScaleProperly); InjectHook(0x4209A7, SetScaleProperly);
InjectHook(0x420A1F, SetScaleProperly); InjectHook(0x420A1F, SetScaleProperly);
@ -780,6 +781,12 @@ void Patch_III_Common()
using namespace Memory; using namespace Memory;
using namespace hook; using namespace hook;
// Purple Nines Glitch fix
{
auto addr = get_pattern( "0F BF 4C 24 04 8B 44 24 08 C1 E1 04 89 81", -0xC );
InjectHook( addr, PurpleNinesGlitchFix, PATCH_JUMP );
}
// New timers fix // New timers fix
{ {
auto hookPoint = pattern( "83 E4 F8 89 44 24 08 C7 44 24 0C 00 00 00 00 DF 6C 24 08" ).get_one(); auto hookPoint = pattern( "83 E4 F8 89 44 24 08 C7 44 24 0C 00 00 00 00 DF 6C 24 08" ).get_one();