diff options
Diffstat (limited to 'src/control/Gangs.cpp')
-rw-r--r-- | src/control/Gangs.cpp | 70 |
1 files changed, 27 insertions, 43 deletions
diff --git a/src/control/Gangs.cpp b/src/control/Gangs.cpp index 9ff40ef3..f6f9261e 100644 --- a/src/control/Gangs.cpp +++ b/src/control/Gangs.cpp @@ -3,7 +3,7 @@ #include "ModelIndices.h" #include "Gangs.h" -CGangInfo(&CGangs::Gang)[NUM_GANGS] = *(CGangInfo(*)[9])*(uintptr*)0x6EDF78; +CGangInfo(&CGangs::Gang)[NUM_GANGS] = *(CGangInfo(*)[NUM_GANGS])*(uintptr*)0x6EDF78; CGangInfo::CGangInfo() : m_nVehicleMI(MI_BUS), @@ -47,53 +47,37 @@ int8 CGangs::GetGangPedModelOverride(int16 gang) return GetGangInfo(gang)->m_nPedModelOverride; } -void CGangs::SaveAllGangData(uint8 *buffer, uint32 *size) +void CGangs::SaveAllGangData(uint8 *buf, 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; - } +INITSAVEBUF + + *size = SAVE_HEADER_SIZE + sizeof(Gang);
+ WriteSaveHeader(buf, 'G','N','G','\0', *size - SAVE_HEADER_SIZE); + for (int i = 0; i < NUM_GANGS; i++)
+ WriteSaveBuf(buf, Gang[i]);
+
+VALIDATESAVEBUF(*size); } -void CGangs::LoadAllGangData(uint8 *buffer, uint32 size) +void CGangs::LoadAllGangData(uint8 *buf, 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; - } + Initialize();
+
+INITSAVEBUF
+
+ WriteSaveHeader(buf, 'G','N','G','\0', size - SAVE_HEADER_SIZE); + for (int i = 0; i < NUM_GANGS; i++) + Gang[i] = ReadSaveBuf<CGangInfo>(buf); + +VALIDATESAVEBUF(size); } 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); + 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 |