Skip to content
Permalink
Browse files
Fancy StaticPatcher
  • Loading branch information
CookiePLMonster committed Jul 10, 2014
1 parent a36f7b9 commit 55d0ebc8b35ed2720c6218cf694480eb5a40d330
@@ -3,6 +3,7 @@


#include "Timer.h" #include "Timer.h"
#include "Font.h" #include "Font.h"
#include "Vehicle.h"


CAntenna CAntennas::aAntennas[NUM_ANTENNAS]; CAntenna CAntennas::aAntennas[NUM_ANTENNAS];


@@ -159,4 +160,9 @@ void CAntennas::Inject()


// Replaces a nullsub CMovingThings::Render() // Replaces a nullsub CMovingThings::Render()
Memory::InjectHook(0x53E184, Render); Memory::InjectHook(0x53E184, Render);
} }

static StaticPatcher Patcher([](){
CAntennas::Inject();
InjectMethod(0x6AAB8B, CAutomobile::RenderAntennas, PATCH_NOTHING);
});
@@ -4,6 +4,8 @@
#include "General.h" #include "General.h"
#include "CCam.h" #include "CCam.h"


#define CAMERA_FOV_REGULAR 55.0f

enum eCamMode enum eCamMode
{ {
MODE_NONE = 0, MODE_NONE = 0,
@@ -306,4 +306,8 @@ void CCoronas::Inject()
Memory::InjectHook(0x6FC4D0, CCoronas::UpdateCoronaCoors, PATCH_JUMP); Memory::InjectHook(0x6FC4D0, CCoronas::UpdateCoronaCoors, PATCH_JUMP);
Memory::InjectHook(0x6FAAD9, CCoronas::Init, PATCH_JUMP); Memory::InjectHook(0x6FAAD9, CCoronas::Init, PATCH_JUMP);
Memory::InjectHook(0x53C13B, CCoronas::Update); Memory::InjectHook(0x53C13B, CCoronas::Update);
} }

static StaticPatcher Patcher([](){
CCoronas::Inject();
});
@@ -8,6 +8,9 @@ static CPad* const Pads = (CPad*)0xB73458;


static CX360Pad* pXboxPad = nullptr; static CX360Pad* pXboxPad = nullptr;


static StaticPatcher Patcher([](){
CPad::Inject(); });

WRAPPER void CPad::UpdatePads() { EAXJMP(0x541DD0); } WRAPPER void CPad::UpdatePads() { EAXJMP(0x541DD0); }


static void CapturePad(int nPadID) static void CapturePad(int nPadID)
@@ -252,4 +252,19 @@ void CRadar::Render3D(void*, void*, int nVerts)


RwIm3DRenderIndexedPrimitive(rwPRIMTYPETRILIST, indices, nVerts); RwIm3DRenderIndexedPrimitive(rwPRIMTYPETRILIST, indices, nVerts);
RwIm3DEnd(); RwIm3DEnd();
} }

static void __declspec(naked) BlipAlphaHook()
{
_asm
{
movzx edi, [esp+30h-24h]
push edi
push 586F39h
retn
}
}

static StaticPatcher Patcher([](){
//Memory::InjectHook(0x586F34, BlipAlphaHook, PATCH_JUMP);
});
@@ -41,9 +41,6 @@ BOOL RsCameraBeginUpdate(RwCamera* pCamera)


void CameraSize(RwCamera* camera, RwRect* rect, float fViewWindow, float fAspectRatio) void CameraSize(RwCamera* camera, RwRect* rect, float fViewWindow, float fAspectRatio)
{ {
float foo = fViewWindow;
float faa = fAspectRatio;

if ( !camera ) if ( !camera )
return; return;


@@ -0,0 +1,23 @@
#include "StdAfx.h"
#include "StaticPatcher.h"

std::vector<std::function<void()>>* StaticPatcher::m_pFunctions;

StaticPatcher::StaticPatcher(std::function<void()> pInitializer)
{
if ( !m_pFunctions )
m_pFunctions = new std::vector<std::function<void()>>;

m_pFunctions->push_back(pInitializer);
}

void StaticPatcher::Apply()
{
if ( m_pFunctions )
{
for ( auto it = m_pFunctions->cbegin(); it != m_pFunctions->cend(); it++ )
(*it)();

delete m_pFunctions;
}
}
@@ -0,0 +1,15 @@
#ifndef __STATICPATCHER
#define __STATICPATCHER

class StaticPatcher
{
private:
static std::vector<std::function<void()>>* m_pFunctions;

public:
StaticPatcher(std::function<void()> pInitializer);

static void Apply();
};

#endif
@@ -142,6 +142,7 @@ void EnterAmazingScreenshotMode(bool bEnable);


#include "CCRC32.h" #include "CCRC32.h"
#include "MemoryMgr.h" #include "MemoryMgr.h"
#include "StaticPatcher.h"
#include "Maths.h" #include "Maths.h"
#include "Rs.h" #include "Rs.h"
#include "WidescreenSupport.h" #include "WidescreenSupport.h"
@@ -360,7 +360,10 @@ popd</Command>
<ClCompile Include="RW.cpp" /> <ClCompile Include="RW.cpp" />
<ClCompile Include="Script.cpp" /> <ClCompile Include="Script.cpp" />
<ClCompile Include="CShadows.cpp" /> <ClCompile Include="CShadows.cpp" />
<ClCompile Include="SpeechRecognition.cpp" /> <ClCompile Include="SpeechRecognition.cpp">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Dev Build|Win32'">true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="StaticPatcher.cpp" />
<ClCompile Include="Stats.cpp" /> <ClCompile Include="Stats.cpp" />
<ClCompile Include="Messages.cpp" /> <ClCompile Include="Messages.cpp" />
<ClCompile Include="Radar.cpp" /> <ClCompile Include="Radar.cpp" />
@@ -447,6 +450,7 @@ popd</Command>
<ClInclude Include="Script.h" /> <ClInclude Include="Script.h" />
<ClInclude Include="CShadows.h" /> <ClInclude Include="CShadows.h" />
<ClInclude Include="SpeechRecognition.h" /> <ClInclude Include="SpeechRecognition.h" />
<ClInclude Include="StaticPatcher.h" />
<ClInclude Include="Stats.h" /> <ClInclude Include="Stats.h" />
<ClInclude Include="Messages.h" /> <ClInclude Include="Messages.h" />
<ClInclude Include="Streaming.h" /> <ClInclude Include="Streaming.h" />
@@ -231,6 +231,9 @@
<ClCompile Include="SpeechRecognition.cpp"> <ClCompile Include="SpeechRecognition.cpp">
<Filter>Source Files</Filter> <Filter>Source Files</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="StaticPatcher.cpp">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClInclude Include="CCam.h"> <ClInclude Include="CCam.h">
@@ -467,6 +470,9 @@
<ClInclude Include="SpeechRecognition.h"> <ClInclude Include="SpeechRecognition.h">
<Filter>Header Files</Filter> <Filter>Header Files</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="StaticPatcher.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<None Include="LoadVars.inc"> <None Include="LoadVars.inc">
@@ -704,6 +704,10 @@ extern "C" __declspec(dllexport) BOOL OnGameLaunch()
PatchMenus(); PatchMenus();
AnimationStylesPatching(); AnimationStylesPatching();
UserFiles(); UserFiles();

// Automatic patches
StaticPatcher::Apply();

CreateThread(NULL, 0, ProcessEmergencyKey, 0, 0, 0); CreateThread(NULL, 0, ProcessEmergencyKey, 0, 0, 0);


// DLC initialisation // DLC initialisation
@@ -3415,7 +3419,7 @@ __forceinline void Main_Patches()
Patch<void*>(0x495F78, func_069C); Patch<void*>(0x495F78, func_069C);
Patch<void*>(0x495F7C, func_069C); Patch<void*>(0x495F7C, func_069C);


//Patch<const char*>(0x4111AE, "empire_perma"); Patch<const char*>(0x4111AE, "empire_perma");
InjectHook(0x53C215, CEmpireManager::Process); InjectHook(0x53C215, CEmpireManager::Process);


// Menu background // Menu background
@@ -4043,16 +4047,6 @@ __forceinline void Main_Patches()
Patch<float>(0x585E4D, 1.5f); // Peds Patch<float>(0x585E4D, 1.5f); // Peds
Patch<float>(0x585F8E, 1.0f); // Objects Patch<float>(0x585F8E, 1.0f); // Objects


// Coronas stored in a vector
CCoronas::Inject();

// Antennas
CAntennas::Inject();
InjectMethod(0x6AAB8B, CAutomobile::RenderAntennas, PATCH_NOTHING);

// Own pad
CPad::Inject();

// Own BaseColors::BaseColors // Own BaseColors::BaseColors
// TODO: Come up with something nicer? // TODO: Come up with something nicer?
InjectMethod(0x84F1F5, CRGBA::BaseColors__Constructor, PATCH_NOTHING); InjectMethod(0x84F1F5, CRGBA::BaseColors__Constructor, PATCH_NOTHING);
@@ -4441,7 +4435,7 @@ void InjectDelayedPatches()
CUpdateManager::Init(); CUpdateManager::Init();
// CDLCManager::InitialiseWithUpdater(); // CDLCManager::InitialiseWithUpdater();


SpeechInject(); //SpeechInject();


#ifdef MAKE_CONSOLE #ifdef MAKE_CONSOLE
if ( AllocConsole() ) if ( AllocConsole() )

0 comments on commit 55d0ebc

Please sign in to comment.