mirror of
https://github.com/halpz/re3.git
synced 2025-07-26 00:52:51 +00:00
finish COMPATIBLE_SAVES and FIX_INCOMPATIBLE_SAVES
This commit is contained in:
@ -4717,8 +4717,8 @@ void
|
||||
CAutomobile::Save(uint8*& buf)
|
||||
{
|
||||
CVehicle::Save(buf);
|
||||
WriteSaveBuf<CDamageManager>(buf, Damage);
|
||||
SkipSaveBuf(buf, 800 - sizeof(CDamageManager));
|
||||
WriteSaveBuf(buf, Damage);
|
||||
ZeroSaveBuf(buf, 800 - sizeof(CDamageManager));
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -940,7 +940,7 @@ void
|
||||
CBoat::Save(uint8*& buf)
|
||||
{
|
||||
CVehicle::Save(buf);
|
||||
SkipSaveBuf(buf, 1156 - 648);
|
||||
ZeroSaveBuf(buf, 1156 - 648);
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -37,6 +37,12 @@
|
||||
#define MIN_VALID_POSITION (-10000.0f)
|
||||
#define DEFAULT_OFFSET (20.0f)
|
||||
|
||||
#ifdef COMPATIBLE_SAVES
|
||||
#define CRANES_SAVE_SIZE 0x400
|
||||
#else
|
||||
#define CRANES_SAVE_SIZE sizeof(aCranes)
|
||||
#endif
|
||||
|
||||
uint32 TimerForCamInterpolation;
|
||||
|
||||
uint32 CCranes::CarsCollectedMilitaryCrane;
|
||||
@ -634,10 +640,46 @@ void CCranes::Save(uint8* buf, uint32* size)
|
||||
{
|
||||
INITSAVEBUF
|
||||
|
||||
*size = 2 * sizeof(uint32) + sizeof(aCranes);
|
||||
*size = 2 * sizeof(uint32) + CRANES_SAVE_SIZE;
|
||||
WriteSaveBuf(buf, NumCranes);
|
||||
WriteSaveBuf(buf, CarsCollectedMilitaryCrane);
|
||||
for (int i = 0; i < NUM_CRANES; i++) {
|
||||
#ifdef COMPATIBLE_SAVES
|
||||
int32 tmp = aCranes[i].m_pCraneEntity != nil ? CPools::GetBuildingPool()->GetJustIndex_NoFreeAssert(aCranes[i].m_pCraneEntity) + 1 : 0;
|
||||
WriteSaveBuf(buf, tmp);
|
||||
tmp = aCranes[i].m_pHook != nil ? CPools::GetObjectPool()->GetJustIndex_NoFreeAssert(aCranes[i].m_pHook) + 1 : 0;
|
||||
WriteSaveBuf(buf, tmp);
|
||||
WriteSaveBuf(buf, aCranes[i].m_nAudioEntity);
|
||||
WriteSaveBuf(buf, aCranes[i].m_fPickupX1);
|
||||
WriteSaveBuf(buf, aCranes[i].m_fPickupX2);
|
||||
WriteSaveBuf(buf, aCranes[i].m_fPickupY1);
|
||||
WriteSaveBuf(buf, aCranes[i].m_fPickupY2);
|
||||
WriteSaveBuf(buf, aCranes[i].m_vecDropoffTarget);
|
||||
WriteSaveBuf(buf, aCranes[i].m_fDropoffHeading);
|
||||
WriteSaveBuf(buf, aCranes[i].m_fPickupAngle);
|
||||
WriteSaveBuf(buf, aCranes[i].m_fDropoffAngle);
|
||||
WriteSaveBuf(buf, aCranes[i].m_fPickupDistance);
|
||||
WriteSaveBuf(buf, aCranes[i].m_fDropoffDistance);
|
||||
WriteSaveBuf(buf, aCranes[i].m_fPickupHeight);
|
||||
WriteSaveBuf(buf, aCranes[i].m_fDropoffHeight);
|
||||
WriteSaveBuf(buf, aCranes[i].m_fHookAngle);
|
||||
WriteSaveBuf(buf, aCranes[i].m_fHookOffset);
|
||||
WriteSaveBuf(buf, aCranes[i].m_fHookHeight);
|
||||
WriteSaveBuf(buf, aCranes[i].m_vecHookInitPos);
|
||||
WriteSaveBuf(buf, aCranes[i].m_vecHookCurPos);
|
||||
WriteSaveBuf(buf, aCranes[i].m_vecHookVelocity);
|
||||
tmp = aCranes[i].m_pVehiclePickedUp != nil ? CPools::GetVehiclePool()->GetJustIndex_NoFreeAssert(aCranes[i].m_pVehiclePickedUp) + 1 : 0;
|
||||
WriteSaveBuf(buf, tmp);
|
||||
WriteSaveBuf(buf, aCranes[i].m_nTimeForNextCheck);
|
||||
WriteSaveBuf(buf, aCranes[i].m_nCraneStatus);
|
||||
WriteSaveBuf(buf, aCranes[i].m_nCraneState);
|
||||
WriteSaveBuf(buf, aCranes[i].m_nVehiclesCollected);
|
||||
WriteSaveBuf(buf, aCranes[i].m_bIsCrusher);
|
||||
WriteSaveBuf(buf, aCranes[i].m_bIsMilitaryCrane);
|
||||
WriteSaveBuf(buf, aCranes[i].m_bWasMilitaryCrane);
|
||||
WriteSaveBuf(buf, aCranes[i].m_bIsTop);
|
||||
ZeroSaveBuf(buf, 1);
|
||||
#else
|
||||
CCrane *pCrane = WriteSaveBuf(buf, aCranes[i]);
|
||||
if (pCrane->m_pCraneEntity != nil)
|
||||
pCrane->m_pCraneEntity = (CBuilding*)(CPools::GetBuildingPool()->GetJustIndex_NoFreeAssert(pCrane->m_pCraneEntity) + 1);
|
||||
@ -645,6 +687,7 @@ void CCranes::Save(uint8* buf, uint32* size)
|
||||
pCrane->m_pHook = (CObject*)(CPools::GetObjectPool()->GetJustIndex_NoFreeAssert(pCrane->m_pHook) + 1);
|
||||
if (pCrane->m_pVehiclePickedUp != nil)
|
||||
pCrane->m_pVehiclePickedUp = (CVehicle*)(CPools::GetVehiclePool()->GetJustIndex_NoFreeAssert(pCrane->m_pVehiclePickedUp) + 1);
|
||||
#endif
|
||||
}
|
||||
|
||||
VALIDATESAVEBUF(*size);
|
||||
@ -656,8 +699,46 @@ void CCranes::Load(uint8* buf, uint32 size)
|
||||
|
||||
ReadSaveBuf(&NumCranes, buf);
|
||||
ReadSaveBuf(&CarsCollectedMilitaryCrane, buf);
|
||||
for (int i = 0; i < NUM_CRANES; i++)
|
||||
for (int i = 0; i < NUM_CRANES; i++) {
|
||||
#ifdef COMPATIBLE_SAVES
|
||||
int32 tmp;
|
||||
ReadSaveBuf(&tmp, buf);
|
||||
aCranes[i].m_pCraneEntity = tmp != 0 ? CPools::GetBuildingPool()->GetSlot(tmp - 1) : nil;
|
||||
ReadSaveBuf(&tmp, buf);
|
||||
aCranes[i].m_pHook = tmp != 0 ? CPools::GetObjectPool()->GetSlot(tmp - 1) : nil;
|
||||
ReadSaveBuf(&aCranes[i].m_nAudioEntity, buf);
|
||||
ReadSaveBuf(&aCranes[i].m_fPickupX1, buf);
|
||||
ReadSaveBuf(&aCranes[i].m_fPickupX2, buf);
|
||||
ReadSaveBuf(&aCranes[i].m_fPickupY1, buf);
|
||||
ReadSaveBuf(&aCranes[i].m_fPickupY2, buf);
|
||||
ReadSaveBuf(&aCranes[i].m_vecDropoffTarget, buf);
|
||||
ReadSaveBuf(&aCranes[i].m_fDropoffHeading, buf);
|
||||
ReadSaveBuf(&aCranes[i].m_fPickupAngle, buf);
|
||||
ReadSaveBuf(&aCranes[i].m_fDropoffAngle, buf);
|
||||
ReadSaveBuf(&aCranes[i].m_fPickupDistance, buf);
|
||||
ReadSaveBuf(&aCranes[i].m_fDropoffDistance, buf);
|
||||
ReadSaveBuf(&aCranes[i].m_fPickupHeight, buf);
|
||||
ReadSaveBuf(&aCranes[i].m_fDropoffHeight, buf);
|
||||
ReadSaveBuf(&aCranes[i].m_fHookAngle, buf);
|
||||
ReadSaveBuf(&aCranes[i].m_fHookOffset, buf);
|
||||
ReadSaveBuf(&aCranes[i].m_fHookHeight, buf);
|
||||
ReadSaveBuf(&aCranes[i].m_vecHookInitPos, buf);
|
||||
ReadSaveBuf(&aCranes[i].m_vecHookCurPos, buf);
|
||||
ReadSaveBuf(&aCranes[i].m_vecHookVelocity, buf);
|
||||
ReadSaveBuf(&tmp, buf);
|
||||
aCranes[i].m_pVehiclePickedUp = tmp != 0 ? CPools::GetVehiclePool()->GetSlot(tmp - 1) : nil;
|
||||
ReadSaveBuf(&aCranes[i].m_nTimeForNextCheck, buf);
|
||||
ReadSaveBuf(&aCranes[i].m_nCraneStatus, buf);
|
||||
ReadSaveBuf(&aCranes[i].m_nCraneState, buf);
|
||||
ReadSaveBuf(&aCranes[i].m_nVehiclesCollected, buf);
|
||||
ReadSaveBuf(&aCranes[i].m_bIsCrusher, buf);
|
||||
ReadSaveBuf(&aCranes[i].m_bIsMilitaryCrane, buf);
|
||||
ReadSaveBuf(&aCranes[i].m_bWasMilitaryCrane, buf);
|
||||
ReadSaveBuf(&aCranes[i].m_bIsTop, buf);
|
||||
SkipSaveBuf(buf, 1);
|
||||
#else
|
||||
ReadSaveBuf(&aCranes[i], buf);
|
||||
}
|
||||
for (int i = 0; i < NUM_CRANES; i++) {
|
||||
CCrane *pCrane = &aCranes[i];
|
||||
if (pCrane->m_pCraneEntity != nil)
|
||||
@ -666,6 +747,7 @@ void CCranes::Load(uint8* buf, uint32 size)
|
||||
pCrane->m_pHook = CPools::GetObjectPool()->GetSlot((uintptr)pCrane->m_pHook - 1);
|
||||
if (pCrane->m_pVehiclePickedUp != nil)
|
||||
pCrane->m_pVehiclePickedUp = CPools::GetVehiclePool()->GetSlot((uintptr)pCrane->m_pVehiclePickedUp - 1);
|
||||
#endif
|
||||
}
|
||||
for (int i = 0; i < NUM_CRANES; i++) {
|
||||
aCranes[i].m_nAudioEntity = DMAudio.CreateEntity(AUDIOTYPE_CRANE, &aCranes[i]);
|
||||
|
@ -1262,42 +1262,42 @@ DestroyVehicleAndDriverAndPassengers(CVehicle* pVehicle)
|
||||
void
|
||||
CVehicle::Save(uint8*& buf)
|
||||
{
|
||||
SkipSaveBuf(buf, 4);
|
||||
WriteSaveBuf<float>(buf, GetRight().x);
|
||||
WriteSaveBuf<float>(buf, GetRight().y);
|
||||
WriteSaveBuf<float>(buf, GetRight().z);
|
||||
SkipSaveBuf(buf, 4);
|
||||
WriteSaveBuf<float>(buf, GetForward().x);
|
||||
WriteSaveBuf<float>(buf, GetForward().y);
|
||||
WriteSaveBuf<float>(buf, GetForward().z);
|
||||
SkipSaveBuf(buf, 4);
|
||||
WriteSaveBuf<float>(buf, GetUp().x);
|
||||
WriteSaveBuf<float>(buf, GetUp().y);
|
||||
WriteSaveBuf<float>(buf, GetUp().z);
|
||||
SkipSaveBuf(buf, 4);
|
||||
WriteSaveBuf<float>(buf, GetPosition().x);
|
||||
WriteSaveBuf<float>(buf, GetPosition().y);
|
||||
WriteSaveBuf<float>(buf, GetPosition().z);
|
||||
SkipSaveBuf(buf, 16);
|
||||
ZeroSaveBuf(buf, 4);
|
||||
WriteSaveBuf(buf, GetRight().x);
|
||||
WriteSaveBuf(buf, GetRight().y);
|
||||
WriteSaveBuf(buf, GetRight().z);
|
||||
ZeroSaveBuf(buf, 4);
|
||||
WriteSaveBuf(buf, GetForward().x);
|
||||
WriteSaveBuf(buf, GetForward().y);
|
||||
WriteSaveBuf(buf, GetForward().z);
|
||||
ZeroSaveBuf(buf, 4);
|
||||
WriteSaveBuf(buf, GetUp().x);
|
||||
WriteSaveBuf(buf, GetUp().y);
|
||||
WriteSaveBuf(buf, GetUp().z);
|
||||
ZeroSaveBuf(buf, 4);
|
||||
WriteSaveBuf(buf, GetPosition().x);
|
||||
WriteSaveBuf(buf, GetPosition().y);
|
||||
WriteSaveBuf(buf, GetPosition().z);
|
||||
ZeroSaveBuf(buf, 16);
|
||||
SaveEntityFlags(buf);
|
||||
SkipSaveBuf(buf, 212);
|
||||
ZeroSaveBuf(buf, 212);
|
||||
AutoPilot.Save(buf);
|
||||
WriteSaveBuf<int8>(buf, m_currentColour1);
|
||||
WriteSaveBuf<int8>(buf, m_currentColour2);
|
||||
SkipSaveBuf(buf, 2);
|
||||
WriteSaveBuf<int16>(buf, m_nAlarmState);
|
||||
SkipSaveBuf(buf, 43);
|
||||
WriteSaveBuf<uint8>(buf, m_nNumMaxPassengers);
|
||||
SkipSaveBuf(buf, 2);
|
||||
WriteSaveBuf<float>(buf, field_1D0[0]);
|
||||
WriteSaveBuf<float>(buf, field_1D0[1]);
|
||||
WriteSaveBuf<float>(buf, field_1D0[2]);
|
||||
WriteSaveBuf<float>(buf, field_1D0[3]);
|
||||
SkipSaveBuf(buf, 8);
|
||||
WriteSaveBuf<float>(buf, m_fSteerAngle);
|
||||
WriteSaveBuf<float>(buf, m_fGasPedal);
|
||||
WriteSaveBuf<float>(buf, m_fBrakePedal);
|
||||
WriteSaveBuf<uint8>(buf, VehicleCreatedBy);
|
||||
WriteSaveBuf(buf, m_currentColour1);
|
||||
WriteSaveBuf(buf, m_currentColour2);
|
||||
ZeroSaveBuf(buf, 2);
|
||||
WriteSaveBuf(buf, m_nAlarmState);
|
||||
ZeroSaveBuf(buf, 43);
|
||||
WriteSaveBuf(buf, m_nNumMaxPassengers);
|
||||
ZeroSaveBuf(buf, 2);
|
||||
WriteSaveBuf(buf, field_1D0[0]);
|
||||
WriteSaveBuf(buf, field_1D0[1]);
|
||||
WriteSaveBuf(buf, field_1D0[2]);
|
||||
WriteSaveBuf(buf, field_1D0[3]);
|
||||
ZeroSaveBuf(buf, 8);
|
||||
WriteSaveBuf(buf, m_fSteerAngle);
|
||||
WriteSaveBuf(buf, m_fGasPedal);
|
||||
WriteSaveBuf(buf, m_fBrakePedal);
|
||||
WriteSaveBuf(buf, VehicleCreatedBy);
|
||||
uint8 flags = 0;
|
||||
if (bIsLawEnforcer) flags |= BIT(0);
|
||||
if (bIsLocked) flags |= BIT(3);
|
||||
@ -1305,19 +1305,19 @@ CVehicle::Save(uint8*& buf)
|
||||
if (bIsHandbrakeOn) flags |= BIT(5);
|
||||
if (bLightsOn) flags |= BIT(6);
|
||||
if (bFreebies) flags |= BIT(7);
|
||||
WriteSaveBuf<uint8>(buf, flags);
|
||||
SkipSaveBuf(buf, 10);
|
||||
WriteSaveBuf<float>(buf, m_fHealth);
|
||||
WriteSaveBuf<uint8>(buf, m_nCurrentGear);
|
||||
SkipSaveBuf(buf, 3);
|
||||
WriteSaveBuf<float>(buf, m_fChangeGearTime);
|
||||
SkipSaveBuf(buf, 4);
|
||||
WriteSaveBuf<uint32>(buf, m_nTimeOfDeath);
|
||||
SkipSaveBuf(buf, 2);
|
||||
WriteSaveBuf<int16>(buf, m_nBombTimer);
|
||||
SkipSaveBuf(buf, 12);
|
||||
WriteSaveBuf<int8>(buf, m_nDoorLock);
|
||||
SkipSaveBuf(buf, 99);
|
||||
WriteSaveBuf(buf, flags);
|
||||
ZeroSaveBuf(buf, 10);
|
||||
WriteSaveBuf(buf, m_fHealth);
|
||||
WriteSaveBuf(buf, m_nCurrentGear);
|
||||
ZeroSaveBuf(buf, 3);
|
||||
WriteSaveBuf(buf, m_fChangeGearTime);
|
||||
ZeroSaveBuf(buf, 4);
|
||||
WriteSaveBuf(buf, m_nTimeOfDeath);
|
||||
ZeroSaveBuf(buf, 2);
|
||||
WriteSaveBuf(buf, m_nBombTimer);
|
||||
ZeroSaveBuf(buf, 12);
|
||||
WriteSaveBuf(buf, m_nDoorLock);
|
||||
ZeroSaveBuf(buf, 96);
|
||||
}
|
||||
|
||||
void
|
||||
@ -1379,8 +1379,7 @@ CVehicle::Load(uint8*& buf)
|
||||
SkipSaveBuf(buf, 2);
|
||||
ReadSaveBuf(&m_nBombTimer, buf);
|
||||
SkipSaveBuf(buf, 12);
|
||||
ReadSaveBuf(&flags, buf);
|
||||
m_nDoorLock = (eCarLock)flags;
|
||||
SkipSaveBuf(buf, 99);
|
||||
ReadSaveBuf(&m_nDoorLock, buf);
|
||||
SkipSaveBuf(buf, 96);
|
||||
}
|
||||
#endif
|
||||
|
Reference in New Issue
Block a user