summaryrefslogtreecommitdiffstats
path: root/src/control/Gangs.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/control/Gangs.cpp')
-rw-r--r--src/control/Gangs.cpp70
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