diff options
author | eray orçunus <erayorcunus@gmail.com> | 2019-06-28 18:19:37 +0200 |
---|---|---|
committer | eray orçunus <erayorcunus@gmail.com> | 2019-06-28 18:19:37 +0200 |
commit | b5cb82f478405cef727e5400c11287c25069b3ce (patch) | |
tree | 71933b3094716a174bdaf5ed3036ad92ac1c3ee7 /src/control | |
parent | Footsteps (diff) | |
parent | CHud cleanup: fixes and cosmetic treatment (diff) | |
download | re3-b5cb82f478405cef727e5400c11287c25069b3ce.tar re3-b5cb82f478405cef727e5400c11287c25069b3ce.tar.gz re3-b5cb82f478405cef727e5400c11287c25069b3ce.tar.bz2 re3-b5cb82f478405cef727e5400c11287c25069b3ce.tar.lz re3-b5cb82f478405cef727e5400c11287c25069b3ce.tar.xz re3-b5cb82f478405cef727e5400c11287c25069b3ce.tar.zst re3-b5cb82f478405cef727e5400c11287c25069b3ce.zip |
Diffstat (limited to 'src/control')
-rw-r--r-- | src/control/CarCtrl.cpp | 5 | ||||
-rw-r--r-- | src/control/CarCtrl.h | 3 | ||||
-rw-r--r-- | src/control/Gangs.cpp | 99 | ||||
-rw-r--r-- | src/control/Gangs.h | 47 | ||||
-rw-r--r-- | src/control/Population.cpp | 3 | ||||
-rw-r--r-- | src/control/Population.h | 8 | ||||
-rw-r--r-- | src/control/Record.h | 6 |
7 files changed, 166 insertions, 5 deletions
diff --git a/src/control/CarCtrl.cpp b/src/control/CarCtrl.cpp index 4ce856f7..fe5b6dab 100644 --- a/src/control/CarCtrl.cpp +++ b/src/control/CarCtrl.cpp @@ -5,5 +5,6 @@ int &CCarCtrl::NumLawEnforcerCars = *(int*)0x8F1B38; WRAPPER void CCarCtrl::SwitchVehicleToRealPhysics(CVehicle*) { EAXJMP(0x41F7F0); } -WRAPPER void CCarCtrl::AddToCarArray(int id, int vehclass) { EAXJMP(0x4182F0); } -WRAPPER void CCarCtrl::UpdateCarCount(CVehicle*, bool) { EAXJMP(0x4202E0); }
\ No newline at end of file +WRAPPER void CCarCtrl::AddToCarArray(int32 id, int32 vehclass) { EAXJMP(0x4182F0); } +WRAPPER void CCarCtrl::UpdateCarCount(CVehicle*, bool) { EAXJMP(0x4202E0); } +WRAPPER int32 CCarCtrl::ChooseCarModel(int32 vehclass) { EAXJMP(0x418110); } diff --git a/src/control/CarCtrl.h b/src/control/CarCtrl.h index cc9327ee..27ea6293 100644 --- a/src/control/CarCtrl.h +++ b/src/control/CarCtrl.h @@ -6,8 +6,9 @@ class CCarCtrl { public: static void SwitchVehicleToRealPhysics(CVehicle*); - static void AddToCarArray(int id, int vehclass); + static void AddToCarArray(int32 id, int32 vehclass); static void UpdateCarCount(CVehicle*, bool); + static int32 ChooseCarModel(int32 vehclass); static int32 &NumLawEnforcerCars; }; diff --git a/src/control/Gangs.cpp b/src/control/Gangs.cpp new file mode 100644 index 00000000..fc77ad72 --- /dev/null +++ b/src/control/Gangs.cpp @@ -0,0 +1,99 @@ +#include "common.h" +#include "patcher.h" +#include "ModelIndices.h" +#include "Gangs.h" + +CGangInfo(&CGangs::Gang)[NUM_GANGS] = *(CGangInfo(*)[9])*(uintptr*)0x6EDF78; + +CGangInfo::CGangInfo() : + m_nVehicleMI(MI_BUS), + m_nPedModelOverride(-1), + m_Weapon1(WEAPONTYPE_UNARMED), + m_Weapon2(WEAPONTYPE_UNARMED) +{} + +void CGangs::Initialize(void) +{ + Gang[GANG_MAFIA].m_nVehicleMI = MI_MAFIA; + Gang[GANG_TRIAD].m_nVehicleMI = MI_BELLYUP; + Gang[GANG_DIABLOS].m_nVehicleMI = MI_DIABLOS; + Gang[GANG_YAKUZA].m_nVehicleMI = MI_YAKUZA; + Gang[GANG_YARDIE].m_nVehicleMI = MI_YARDIE; + Gang[GANG_COLUMB].m_nVehicleMI = MI_COLUMB; + Gang[GANG_HOODS].m_nVehicleMI = MI_HOODS; + Gang[GANG_7].m_nVehicleMI = -1; + Gang[GANG_8].m_nVehicleMI = -1; +} + +void CGangs::SetGangVehicleModel(int16 gang, int model) +{ + GetGangInfo(gang)->m_nVehicleMI = model; +} + +void CGangs::SetGangWeapons(int16 gang, eWeaponType weapon1, eWeaponType weapon2) +{ + CGangInfo *gi = GetGangInfo(gang); + gi->m_Weapon1 = weapon1; + gi->m_Weapon2 = weapon2; +} + +void CGangs::SetGangPedModelOverride(int16 gang, int8 ovrd) +{ + GetGangInfo(gang)->m_nPedModelOverride = ovrd; +} + +int8 CGangs::GetGangPedModelOverride(int16 gang) +{ + return GetGangInfo(gang)->m_nPedModelOverride; +} + +void CGangs::SaveAllGangData(uint8 *buffer, uint32 *size) +{ + buffer[0] = 'G'; + buffer[1] = 'N'; + buffer[2] = 'G'; + buffer[3] = '\0'; + *size = 8 + NUM_GANGS * 16; + *(uint32*)(buffer + 4) = *size - 8; + buffer += 8; + for (int i = 0; i < NUM_GANGS; i++) { + *(uint32*)(buffer) = GetGangInfo(i)->m_nVehicleMI; + *(int8*)(buffer + 4) = GetGangInfo(i)->m_nPedModelOverride; + *(int8*)(buffer + 5) = GetGangInfo(i)->field_5; + *(int16*)(buffer + 6) = GetGangInfo(i)->field_6; + *(eWeaponType*)(buffer + 8) = GetGangInfo(i)->m_Weapon1; + *(eWeaponType*)(buffer + 12) = GetGangInfo(i)->m_Weapon2; + buffer += 16; + } +} + +void CGangs::LoadAllGangData(uint8 *buffer, uint32 size) +{ + Initialize(); + assert(size == 8 + NUM_GANGS * 16); + assert(buffer[0] == 'G'); + assert(buffer[1] == 'N'); + assert(buffer[2] == 'G'); + assert(buffer[3] == '\0'); + assert(*(uint32*)(buffer + 4) == size - 8); + buffer += 8; + for (int i = 0; i < NUM_GANGS; i++){ + GetGangInfo(i)->m_nVehicleMI = *(uint32*)(buffer); + GetGangInfo(i)->m_nPedModelOverride = *(int8*)(buffer + 4); + GetGangInfo(i)->field_5 = *(int8*)(buffer + 5); + GetGangInfo(i)->field_6 = *(int16*)(buffer + 6); + GetGangInfo(i)->m_Weapon1 = *(eWeaponType*)(buffer + 8); + GetGangInfo(i)->m_Weapon2 = *(eWeaponType*)(buffer + 12); + buffer += 16; + } +} + +STARTPATCHES +InjectHook(0x4C3FB0, CGangs::Initialize, PATCH_JUMP); +InjectHook(0x4C4010, CGangs::SetGangVehicleModel, PATCH_JUMP); +InjectHook(0x4C4030, CGangs::SetGangWeapons, PATCH_JUMP); +InjectHook(0x4C4050, CGangs::SetGangPedModelOverride, PATCH_JUMP); +InjectHook(0x4C4070, CGangs::GetGangPedModelOverride, PATCH_JUMP); +InjectHook(0x4C4080, CGangs::SaveAllGangData, PATCH_JUMP); +InjectHook(0x4C4100, CGangs::LoadAllGangData, PATCH_JUMP); +ENDPATCHES diff --git a/src/control/Gangs.h b/src/control/Gangs.h new file mode 100644 index 00000000..2366614b --- /dev/null +++ b/src/control/Gangs.h @@ -0,0 +1,47 @@ +#pragma once + +#include "Weapon.h" + +struct CGangInfo +{ + int32 m_nVehicleMI; + int8 m_nPedModelOverride; + int8 field_5; + int16 field_6; + eWeaponType m_Weapon1; + eWeaponType m_Weapon2; + + CGangInfo(); +}; + +static_assert(sizeof(CGangInfo) == 0x10, "CGangInfo: error"); + +enum { + GANG_MAFIA = 0, + GANG_TRIAD, + GANG_DIABLOS, + GANG_YAKUZA, + GANG_YARDIE, + GANG_COLUMB, + GANG_HOODS, + GANG_7, + GANG_8, + NUM_GANGS +}; + +class CGangs +{ +public: + static void Initialize(void); + static void SetGangVehicleModel(int16, int); + static void SetGangWeapons(int16, eWeaponType, eWeaponType); + static void SetGangPedModelOverride(int16, int8); + static int8 GetGangPedModelOverride(int16); + static void SaveAllGangData(uint8 *, uint32 *); + static void LoadAllGangData(uint8 *, uint32); + static CGangInfo* GetGangInfo(int16 gang) { return &Gang[gang]; } + +private: + + static CGangInfo(&Gang)[NUM_GANGS]; +}; diff --git a/src/control/Population.cpp b/src/control/Population.cpp index ebb48a93..fd1a89f5 100644 --- a/src/control/Population.cpp +++ b/src/control/Population.cpp @@ -2,6 +2,7 @@ #include "patcher.h" #include "Population.h" +PedGroup *CPopulation::ms_pPedGroups = (PedGroup*)0x6E9248; bool &CPopulation::ms_bGivePedsWeapons = *(bool*)0x95CCF6; -WRAPPER void CPopulation::UpdatePedCount(uint32, bool) { EAXJMP(0x4F5A60); }
\ No newline at end of file +WRAPPER void CPopulation::UpdatePedCount(uint32, bool) { EAXJMP(0x4F5A60); } diff --git a/src/control/Population.h b/src/control/Population.h index a5572cdb..76442442 100644 --- a/src/control/Population.h +++ b/src/control/Population.h @@ -2,10 +2,16 @@ #include "PedType.h" +struct PedGroup +{ + int32 models[8]; +}; + class CPopulation { public: + static PedGroup *ms_pPedGroups; //[31] static bool &ms_bGivePedsWeapons; static void UpdatePedCount(uint32, bool); -};
\ No newline at end of file +}; diff --git a/src/control/Record.h b/src/control/Record.h index 2b904d1d..2705a955 100644 --- a/src/control/Record.h +++ b/src/control/Record.h @@ -1,5 +1,11 @@ #pragma once +enum { + RECORDSTATE_0, + RECORDSTATE_1, + RECORDSTATE_2, +}; + class CRecordDataForGame { public: |