summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergeanur <s.anureev@yandex.ua>2020-05-13 16:24:00 +0300
committerSergeanur <s.anureev@yandex.ua>2020-05-13 16:24:00 +0300
commit3f1001b86bffe6c5de8b7c6ce047d0f2bc3472b4 (patch)
tree7751883d8ad7cdab3854af08005d2bb70b4215f3
parent509d57edcb4e60be87548b202b33cef508f11fd1 (diff)
More save/load alignment fixes
-rw-r--r--src/peds/Ped.cpp32
-rw-r--r--src/peds/PlayerPed.cpp24
-rw-r--r--src/weapons/Weapon.cpp29
3 files changed, 49 insertions, 36 deletions
diff --git a/src/peds/Ped.cpp b/src/peds/Ped.cpp
index f4e99d4d..d261385a 100644
--- a/src/peds/Ped.cpp
+++ b/src/peds/Ped.cpp
@@ -17738,23 +17738,25 @@ CPed::SetExitBoat(CVehicle *boat)
}
#ifdef COMPATIBLE_SAVES
+#define CopyFromBuf(buf, data) memcpy(&data, buf, sizeof(data)); SkipSaveBuf(buf, sizeof(data));
+#define CopyToBuf(buf, data) memcpy(buf, &data, sizeof(data)); SkipSaveBuf(buf, sizeof(data));
void
CPed::Save(uint8*& buf)
{
SkipSaveBuf(buf, 52);
- WriteSaveBuf<float>(buf, GetPosition().x);
- WriteSaveBuf<float>(buf, GetPosition().y);
- WriteSaveBuf<float>(buf, GetPosition().z);
+ CopyToBuf(buf, GetPosition().x);
+ CopyToBuf(buf, GetPosition().y);
+ CopyToBuf(buf, GetPosition().z);
SkipSaveBuf(buf, 288);
- WriteSaveBuf<uint8>(buf, CharCreatedBy);
+ CopyToBuf(buf, CharCreatedBy);
SkipSaveBuf(buf, 351);
- WriteSaveBuf<float>(buf, m_fHealth);
- WriteSaveBuf<float>(buf, m_fArmour);
+ CopyToBuf(buf, m_fHealth);
+ CopyToBuf(buf, m_fArmour);
SkipSaveBuf(buf, 148);
for (int i = 0; i < 13; i++) // has to be hardcoded
m_weapons[i].Save(buf);
SkipSaveBuf(buf, 5);
- WriteSaveBuf<uint8>(buf, m_maxWeaponTypeAllowed);
+ CopyToBuf(buf, m_maxWeaponTypeAllowed);
SkipSaveBuf(buf, 162);
}
@@ -17762,19 +17764,21 @@ void
CPed::Load(uint8*& buf)
{
SkipSaveBuf(buf, 52);
- GetMatrix().GetPosition().x = ReadSaveBuf<float>(buf);
- GetMatrix().GetPosition().y = ReadSaveBuf<float>(buf);
- GetMatrix().GetPosition().z = ReadSaveBuf<float>(buf);
+ CopyFromBuf(buf, GetMatrix().GetPosition().x);
+ CopyFromBuf(buf, GetMatrix().GetPosition().y);
+ CopyFromBuf(buf, GetMatrix().GetPosition().z);
SkipSaveBuf(buf, 288);
- CharCreatedBy = ReadSaveBuf<uint8>(buf);
+ CopyFromBuf(buf, CharCreatedBy);
SkipSaveBuf(buf, 351);
- m_fHealth = ReadSaveBuf<float>(buf);
- m_fArmour = ReadSaveBuf<float>(buf);
+ CopyFromBuf(buf, m_fHealth);
+ CopyFromBuf(buf, m_fArmour);
SkipSaveBuf(buf, 148);
for (int i = 0; i < 13; i++) // has to be hardcoded
m_weapons[i].Load(buf);
SkipSaveBuf(buf, 5);
- m_maxWeaponTypeAllowed = ReadSaveBuf<uint8>(buf);
+ CopyFromBuf(buf, m_maxWeaponTypeAllowed);
SkipSaveBuf(buf, 162);
}
+#undef CopyFromBuf
+#undef CopyToBuf
#endif
diff --git a/src/peds/PlayerPed.cpp b/src/peds/PlayerPed.cpp
index 92e3d358..3c6fad57 100644
--- a/src/peds/PlayerPed.cpp
+++ b/src/peds/PlayerPed.cpp
@@ -1513,17 +1513,19 @@ CPlayerPed::ProcessControl(void)
}
#ifdef COMPATIBLE_SAVES
+#define CopyFromBuf(buf, data) memcpy(&data, buf, sizeof(data)); SkipSaveBuf(buf, sizeof(data));
+#define CopyToBuf(buf, data) memcpy(buf, &data, sizeof(data)); SkipSaveBuf(buf, sizeof(data));
void
CPlayerPed::Save(uint8*& buf)
{
CPed::Save(buf);
SkipSaveBuf(buf, 16);
- WriteSaveBuf<float>(buf, m_fMaxStamina);
+ CopyToBuf(buf, m_fMaxStamina);
SkipSaveBuf(buf, 28);
- WriteSaveBuf<int32>(buf, m_nTargettableObjects[0]);
- WriteSaveBuf<int32>(buf, m_nTargettableObjects[1]);
- WriteSaveBuf<int32>(buf, m_nTargettableObjects[2]);
- WriteSaveBuf<int32>(buf, m_nTargettableObjects[3]);
+ CopyToBuf(buf, m_nTargettableObjects[0]);
+ CopyToBuf(buf, m_nTargettableObjects[1]);
+ CopyToBuf(buf, m_nTargettableObjects[2]);
+ CopyToBuf(buf, m_nTargettableObjects[3]);
SkipSaveBuf(buf, 116);
}
@@ -1532,12 +1534,14 @@ CPlayerPed::Load(uint8*& buf)
{
CPed::Load(buf);
SkipSaveBuf(buf, 16);
- m_fMaxStamina = ReadSaveBuf<float>(buf);
+ CopyFromBuf(buf, m_fMaxStamina);
SkipSaveBuf(buf, 28);
- m_nTargettableObjects[0] = ReadSaveBuf<int32>(buf);
- m_nTargettableObjects[1] = ReadSaveBuf<int32>(buf);
- m_nTargettableObjects[2] = ReadSaveBuf<int32>(buf);
- m_nTargettableObjects[3] = ReadSaveBuf<int32>(buf);
+ CopyFromBuf(buf, m_nTargettableObjects[0]);
+ CopyFromBuf(buf, m_nTargettableObjects[1]);
+ CopyFromBuf(buf, m_nTargettableObjects[2]);
+ CopyFromBuf(buf, m_nTargettableObjects[3]);
SkipSaveBuf(buf, 116);
}
+#undef CopyFromBuf
+#undef CopyToBuf
#endif
diff --git a/src/weapons/Weapon.cpp b/src/weapons/Weapon.cpp
index 67e01a2e..88c4788c 100644
--- a/src/weapons/Weapon.cpp
+++ b/src/weapons/Weapon.cpp
@@ -2284,27 +2284,32 @@ CWeapon::ProcessLineOfSight(CVector const &point1, CVector const &point2, CColPo
}
#ifdef COMPATIBLE_SAVES
+#define CopyFromBuf(buf, data) memcpy(&data, buf, sizeof(data)); SkipSaveBuf(buf, sizeof(data));
+#define CopyToBuf(buf, data) memcpy(buf, &data, sizeof(data)); SkipSaveBuf(buf, sizeof(data));
void
CWeapon::Save(uint8*& buf)
{
- WriteSaveBuf<uint32>(buf, m_eWeaponType);
- WriteSaveBuf<uint32>(buf, m_eWeaponState);
- WriteSaveBuf<uint32>(buf, m_nAmmoInClip);
- WriteSaveBuf<uint32>(buf, m_nAmmoTotal);
- WriteSaveBuf<uint32>(buf, m_nTimer);
- WriteSaveBuf<bool>(buf, m_bAddRotOffset);
+ CopyToBuf(buf, m_eWeaponType);
+ CopyToBuf(buf, m_eWeaponState);
+ CopyToBuf(buf, m_nAmmoInClip);
+ CopyToBuf(buf, m_nAmmoTotal);
+ CopyToBuf(buf, m_nTimer);
+ CopyToBuf(buf, m_bAddRotOffset);
SkipSaveBuf(buf, 3);
}
void
CWeapon::Load(uint8*& buf)
{
- m_eWeaponType = (eWeaponType)ReadSaveBuf<uint32>(buf);
- m_eWeaponState = (eWeaponState)ReadSaveBuf<uint32>(buf);
- m_nAmmoInClip = ReadSaveBuf<uint32>(buf);
- m_nAmmoTotal = ReadSaveBuf<uint32>(buf);
- m_nTimer = ReadSaveBuf<uint32>(buf);
- m_bAddRotOffset = ReadSaveBuf<bool>(buf);
+ CopyFromBuf(buf, m_eWeaponType);
+ CopyFromBuf(buf, m_eWeaponState);
+ CopyFromBuf(buf, m_nAmmoInClip);
+ CopyFromBuf(buf, m_nAmmoTotal);
+ CopyFromBuf(buf, m_nTimer);
+ CopyFromBuf(buf, m_bAddRotOffset);
SkipSaveBuf(buf, 3);
}
+
+#undef CopyFromBuf
+#undef CopyToBuf
#endif