diff options
author | Sergeanur <s.anureev@yandex.ua> | 2020-05-13 16:24:00 +0300 |
---|---|---|
committer | Sergeanur <s.anureev@yandex.ua> | 2020-05-13 16:24:00 +0300 |
commit | 3f1001b86bffe6c5de8b7c6ce047d0f2bc3472b4 (patch) | |
tree | 7751883d8ad7cdab3854af08005d2bb70b4215f3 | |
parent | 509d57edcb4e60be87548b202b33cef508f11fd1 (diff) |
More save/load alignment fixes
-rw-r--r-- | src/peds/Ped.cpp | 32 | ||||
-rw-r--r-- | src/peds/PlayerPed.cpp | 24 | ||||
-rw-r--r-- | src/weapons/Weapon.cpp | 29 |
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 |