cleaned up patching of virtual functions; started CAutomobile

This commit is contained in:
aap
2019-07-08 08:46:42 +02:00
parent 6ec421fe7b
commit 12af85ca3d
64 changed files with 771 additions and 278 deletions

View File

@ -101,9 +101,15 @@ CBaseModelInfo::Get2dEffect(int n)
}
class CBaseModelInfo_ : public CBaseModelInfo
{
public:
void Shutdown_(void) { CBaseModelInfo::Shutdown(); }
};
STARTPATCHES
// can't easily replace ctor at 4F6A50
InjectHook(0x4F6A90, &CBaseModelInfo::Shutdown_, PATCH_JUMP);
InjectHook(0x4F6A90, &CBaseModelInfo_::Shutdown_, PATCH_JUMP);
InjectHook(0x4F6AC0, &CBaseModelInfo::DeleteCollisionModel, PATCH_JUMP);
InjectHook(0x4F6B70, &CBaseModelInfo::ClearTexDictionary, PATCH_JUMP);
InjectHook(0x4F6BA0, &CBaseModelInfo::AddRef, PATCH_JUMP);

View File

@ -62,8 +62,6 @@ public:
void Init2dEffects(void);
void Add2dEffect(C2dEffect *fx);
C2dEffect *Get2dEffect(int n);
void Shutdown_(void) { this->CBaseModelInfo::Shutdown(); }
};
static_assert(sizeof(CBaseModelInfo) == 0x30, "CBaseModelInfo: error");

View File

@ -139,12 +139,22 @@ CClumpModelInfo::GetFrameFromId(RpClump *clump, int32 id)
}
class CClumpModelInfo_ : public CClumpModelInfo
{
public:
void DeleteRwObject_(void) { this->CClumpModelInfo::DeleteRwObject(); }
RwObject *CreateInstance_1(void) { return CClumpModelInfo::CreateInstance(); }
RwObject *CreateInstance_2(RwMatrix *m) { return CClumpModelInfo::CreateInstance(m); }
RwObject *GetRwObject_(void) { return CClumpModelInfo::GetRwObject(); }
void SetClump_(RpClump *clump) { CClumpModelInfo::SetClump(clump); }
};
STARTPATCHES
InjectHook(0x4F8800, &CClumpModelInfo::DeleteRwObject_, PATCH_JUMP);
InjectHook(0x4F8920, &CClumpModelInfo::CreateInstance_1, PATCH_JUMP);
InjectHook(0x4F88A0, &CClumpModelInfo::CreateInstance_2, PATCH_JUMP);
InjectHook(0x50C1C0, &CClumpModelInfo::GetRwObject_, PATCH_JUMP);
InjectHook(0x4F8830, &CClumpModelInfo::SetClump_, PATCH_JUMP);
InjectHook(0x4F8800, &CClumpModelInfo_::DeleteRwObject_, PATCH_JUMP);
InjectHook(0x4F8920, &CClumpModelInfo_::CreateInstance_1, PATCH_JUMP);
InjectHook(0x4F88A0, &CClumpModelInfo_::CreateInstance_2, PATCH_JUMP);
InjectHook(0x50C1C0, &CClumpModelInfo_::GetRwObject_, PATCH_JUMP);
InjectHook(0x4F8830, &CClumpModelInfo_::SetClump_, PATCH_JUMP);
InjectHook(0x4F8940, &CClumpModelInfo::SetAtomicRendererCB, PATCH_JUMP);
InjectHook(0x4F8960, &CClumpModelInfo::FindFrameFromNameCB, PATCH_JUMP);
InjectHook(0x4F8A10, &CClumpModelInfo::FindFrameFromNameWithoutIdCB, PATCH_JUMP);

View File

@ -49,12 +49,5 @@ public:
static void FillFrameArray(RpClump *clump, RwFrame **frames);
static RwFrame *FillFrameArrayCB(RwFrame *frame, void *data);
static RwFrame *GetFrameFromId(RpClump *clump, int32 id);
void DeleteRwObject_(void) { this->CClumpModelInfo::DeleteRwObject(); }
RwObject *CreateInstance_1(void) { return this->CClumpModelInfo::CreateInstance(); }
RwObject *CreateInstance_2(RwMatrix *m) { return this->CClumpModelInfo::CreateInstance(m); }
RwObject *GetRwObject_(void) { return this->CClumpModelInfo::GetRwObject(); }
void SetClump_(RpClump *clump) { this->CClumpModelInfo::SetClump(clump); }
};
static_assert(sizeof(CClumpModelInfo) == 0x34, "CClumpModelInfo: error");

View File

@ -1,7 +0,0 @@
#include "common.h"
#include "patcher.h"
#include "MloInstance.h"
STARTPATCHES
InjectHook(0x50BE90, &CMloInstance::dtor, PATCH_JUMP);
ENDPATCHES

View File

@ -1,9 +0,0 @@
#pragma once
#include "Placeable.h"
class CMloInstance : CPlaceable
{
public:
void dtor() { this->CMloInstance::~CMloInstance(); }
};

View File

@ -189,9 +189,17 @@ CPedModelInfo::CreateHitColModel(void)
m_hitColModel = colmodel;
}
class CPedModelInfo_ : public CPedModelInfo
{
public:
void DeleteRwObject_(void) { CPedModelInfo::DeleteRwObject(); }
void SetClump_(RpClump *clump) { CPedModelInfo::SetClump(clump); }
};
STARTPATCHES
InjectHook(0x510210, &CPedModelInfo::SetClump_, PATCH_JUMP);
InjectHook(0x510280, &CPedModelInfo::DeleteRwObject_, PATCH_JUMP);
InjectHook(0x510210, &CPedModelInfo_::SetClump_, PATCH_JUMP);
InjectHook(0x510280, &CPedModelInfo_::DeleteRwObject_, PATCH_JUMP);
InjectHook(0x510390, &CPedModelInfo::SetLowDetailClump, PATCH_JUMP);
InjectHook(0x5104D0, &CPedModelInfo::CreateHitColModel, PATCH_JUMP);
ENDPATCHES

View File

@ -39,9 +39,5 @@ public:
void SetLowDetailClump(RpClump*);
void CreateHitColModel(void);
CColModel *GetHitColModel(void) { return m_hitColModel; }
void DeleteRwObject_(void) { this->CPedModelInfo::DeleteRwObject(); }
void SetClump_(RpClump *clump) { this->CPedModelInfo::SetClump(clump); }
};
static_assert(sizeof(CPedModelInfo) == 0x54, "CPedModelInfo: error");

View File

@ -154,12 +154,20 @@ CSimpleModelInfo::SetupBigBuilding(void)
}
}
class CSimpleModelInfo_ : public CSimpleModelInfo
{
public:
void DeleteRwObject_(void) { CSimpleModelInfo::DeleteRwObject(); }
RwObject *CreateInstance_1(void) { return CSimpleModelInfo::CreateInstance(); }
RwObject *CreateInstance_2(RwMatrix *m) { return CSimpleModelInfo::CreateInstance(m); }
RwObject *GetRwObject_(void) { return CSimpleModelInfo::GetRwObject(); }
};
STARTPATCHES
InjectHook(0x5179B0, &CSimpleModelInfo::DeleteRwObject_, PATCH_JUMP);
InjectHook(0x517B60, &CSimpleModelInfo::CreateInstance_1, PATCH_JUMP);
InjectHook(0x517AC0, &CSimpleModelInfo::CreateInstance_2, PATCH_JUMP);
InjectHook(0x4A9BA0, &CSimpleModelInfo::GetRwObject_, PATCH_JUMP);
InjectHook(0x5179B0, &CSimpleModelInfo_::DeleteRwObject_, PATCH_JUMP);
InjectHook(0x517B60, &CSimpleModelInfo_::CreateInstance_1, PATCH_JUMP);
InjectHook(0x517AC0, &CSimpleModelInfo_::CreateInstance_2, PATCH_JUMP);
InjectHook(0x4A9BA0, &CSimpleModelInfo_::GetRwObject_, PATCH_JUMP);
InjectHook(0x517990, &CSimpleModelInfo::Init, PATCH_JUMP);
InjectHook(0x517C60, &CSimpleModelInfo::IncreaseAlpha, PATCH_JUMP);
InjectHook(0x517950, &CSimpleModelInfo::SetAtomic, PATCH_JUMP);

View File

@ -48,10 +48,5 @@ public:
return (CSimpleModelInfo*)m_atomics[2]; }
void SetRelatedModel(CSimpleModelInfo *m){
m_atomics[2] = (RpAtomic*)m; }
void DeleteRwObject_(void) { this->CSimpleModelInfo::DeleteRwObject(); }
RwObject *CreateInstance_1(void) { return this->CSimpleModelInfo::CreateInstance(); }
RwObject *CreateInstance_2(RwMatrix *m) { return this->CSimpleModelInfo::CreateInstance(m); }
RwObject *GetRwObject_(void) { return this->CSimpleModelInfo::GetRwObject(); }
};
static_assert(sizeof(CSimpleModelInfo) == 0x4C, "CSimpleModelInfo: error");

View File

@ -1098,10 +1098,18 @@ CVehicleModelInfo::GetMaximumNumberOfPassengersFromNumberOfDoors(int id)
return n - 1;
}
class CVehicleModelInfo_ : public CVehicleModelInfo
{
public:
void DeleteRwObject_(void) { CVehicleModelInfo::DeleteRwObject(); }
RwObject *CreateInstance_(void) { return CVehicleModelInfo::CreateInstance(); }
void SetClump_(RpClump *clump) { CVehicleModelInfo::SetClump(clump); }
};
STARTPATCHES
InjectHook(0x51FDC0, &CVehicleModelInfo::DeleteRwObject_, PATCH_JUMP);
InjectHook(0x51FCB0, &CVehicleModelInfo::CreateInstance_, PATCH_JUMP);
InjectHook(0x51FC60, &CVehicleModelInfo::SetClump_, PATCH_JUMP);
InjectHook(0x51FDC0, &CVehicleModelInfo_::DeleteRwObject_, PATCH_JUMP);
InjectHook(0x51FCB0, &CVehicleModelInfo_::CreateInstance_, PATCH_JUMP);
InjectHook(0x51FC60, &CVehicleModelInfo_::SetClump_, PATCH_JUMP);
InjectHook(0x51FE10, &CVehicleModelInfo::CollapseFramesCB, PATCH_JUMP);
InjectHook(0x51FE50, &CVehicleModelInfo::MoveObjectsCB, PATCH_JUMP);

View File

@ -10,6 +10,7 @@ enum {
};
enum {
ATOMIC_FLAG_NONE = 0x0,
ATOMIC_FLAG_OK = 0x1,
ATOMIC_FLAG_DAM = 0x2,
ATOMIC_FLAG_LEFT = 0x4,
@ -131,9 +132,5 @@ public:
static void ShutdownEnvironmentMaps(void);
static int GetMaximumNumberOfPassengersFromNumberOfDoors(int id);
void DeleteRwObject_(void) { this->CVehicleModelInfo::DeleteRwObject(); }
RwObject *CreateInstance_(void) { return this->CVehicleModelInfo::CreateInstance(); }
void SetClump_(RpClump *clump) { this->CVehicleModelInfo::SetClump(clump); }
};
static_assert(sizeof(CVehicleModelInfo) == 0x1F8, "CVehicleModelInfo: error");