From a19d5dbee146bef01ed44058d0498bce63b48279 Mon Sep 17 00:00:00 2001 From: Wes Hampson Date: Mon, 13 Apr 2020 11:20:57 -0700 Subject: [PATCH] Fixes --- src/core/Timer.h | 3 + src/save/GenericGameStorage.cpp | 104 ++++++++++++++++++-------------- 2 files changed, 63 insertions(+), 44 deletions(-) diff --git a/src/core/Timer.h b/src/core/Timer.h index b119bfb2..a4d674da 100644 --- a/src/core/Timer.h +++ b/src/core/Timer.h @@ -53,6 +53,9 @@ public: static void Stop(void); static void StartUserPause(void); static void EndUserPause(void); + + friend bool GenericLoad(void); + friend bool GenericSave(int file); }; #ifdef FIX_BUGS diff --git a/src/save/GenericGameStorage.cpp b/src/save/GenericGameStorage.cpp index eb9092c3..4cfa75b3 100644 --- a/src/save/GenericGameStorage.cpp +++ b/src/save/GenericGameStorage.cpp @@ -22,6 +22,7 @@ #include "Phones.h" #include "Pickups.h" #include "PlayerPed.h" +#include "ProjectileInfo.h" #include "Pools.h" #include "Radar.h" #include "Restart.h" @@ -59,7 +60,7 @@ uint32 &TimeToStayFadedBeforeFadeOut = *(uint32*)0x611564; #define ReadDataFromBufferPointer(buf, to) memcpy(&to, buf, sizeof(to)); buf += align4bytes(sizeof(to)); #define WriteDataToBufferPointer(buf, from) memcpy(buf, &from, sizeof(from)); buf += align4bytes(sizeof(from)); -#define LoadSaveDataBlock(msg,load_func)\ +#define LoadSaveDataBlock()\ do {\ if (!ReadDataFromFile(file, (uint8 *) &size, 4))\ return false;\ @@ -67,7 +68,11 @@ do {\ if (!ReadDataFromFile(file, work_buff, size))\ return false;\ buf = work_buff;\ - printf(msg);\ +} while (0) + +#define ReadDataFromBlock(msg,load_func)\ +do {\ + debug(msg);\ ReadDataFromBufferPointer(buf, size);\ load_func(buf, size);\ size = align4bytes(size);\ @@ -130,11 +135,11 @@ GenericSave(int file) WriteDataToBufferPointer(buf, CClock::ms_nGameClockMinutes); currPad = CPad::GetPad(0); WriteDataToBufferPointer(buf, currPad->Mode); - WriteDataToBufferPointer(buf, CTimer::GetTimeInMilliseconds()); - WriteDataToBufferPointer(buf, CTimer::GetTimeScale()); - WriteDataToBufferPointer(buf, CTimer::GetTimeStep()); - WriteDataToBufferPointer(buf, CTimer::GetTimeStepNonClipped()); - WriteDataToBufferPointer(buf, CTimer::GetFrameCounter()); + WriteDataToBufferPointer(buf, CTimer::m_snTimeInMilliseconds); + WriteDataToBufferPointer(buf, CTimer::ms_fTimeScale); + WriteDataToBufferPointer(buf, CTimer::ms_fTimeStep); + WriteDataToBufferPointer(buf, CTimer::ms_fTimeStepNonClipped); + WriteDataToBufferPointer(buf, CTimer::m_FrameCounter); WriteDataToBufferPointer(buf, CTimeStep::ms_fTimeStep); WriteDataToBufferPointer(buf, CTimeStep::ms_fFramesPerUpdate); WriteDataToBufferPointer(buf, CTimeStep::ms_fTimeScale); @@ -220,12 +225,6 @@ GenericLoad() int32 saveSize; CPad *currPad; - uint32 timeInMilliseconds; - float timeScale; - float timeStep; - float timeStepNonClipped; - uint32 frameCounter; - // Load SimpleVars and Scripts CheckSum = 0; CDate(CompileDateAndTime); @@ -246,11 +245,11 @@ GenericLoad() ReadDataFromBufferPointer(buf, CClock::ms_nGameClockMinutes); currPad = CPad::GetPad(0); ReadDataFromBufferPointer(buf, currPad->Mode); - ReadDataFromBufferPointer(buf, timeInMilliseconds); CTimer::SetTimeInMilliseconds(timeInMilliseconds); - ReadDataFromBufferPointer(buf, timeScale); CTimer::SetTimeScale(timeScale); - ReadDataFromBufferPointer(buf, timeStep); CTimer::SetTimeStep(timeStep); - ReadDataFromBufferPointer(buf, timeStepNonClipped); CTimer::SetTimeInMillisecondsNonClipped(timeStepNonClipped); - ReadDataFromBufferPointer(buf, frameCounter); CTimer::SetFrameCounter(frameCounter); + ReadDataFromBufferPointer(buf, CTimer::m_snTimeInMilliseconds); + ReadDataFromBufferPointer(buf, CTimer::ms_fTimeScale); + ReadDataFromBufferPointer(buf, CTimer::ms_fTimeStep); + ReadDataFromBufferPointer(buf, CTimer::ms_fTimeStepNonClipped); + ReadDataFromBufferPointer(buf, CTimer::m_FrameCounter); ReadDataFromBufferPointer(buf, CTimeStep::ms_fTimeStep); ReadDataFromBufferPointer(buf, CTimeStep::ms_fFramesPerUpdate); ReadDataFromBufferPointer(buf, CTimeStep::ms_fTimeScale); @@ -268,33 +267,50 @@ GenericLoad() ReadDataFromBufferPointer(buf, TheCamera.CarZoomIndicator); ReadDataFromBufferPointer(buf, TheCamera.PedZoomIndicator); assert(buf - work_buff == SIZE_OF_SIMPLEVARS); - printf("Loading Scripts \n"); - ReadDataFromBufferPointer(buf, size); - CTheScripts::LoadAllScripts(buf, size); - size = align4bytes(size); - buf += size; + ReadDataFromBlock("Loading Scripts \n", CTheScripts::LoadAllScripts); // Load the rest - LoadSaveDataBlock("Loading PedPool \n", CPools::LoadPedPool); - LoadSaveDataBlock("Loading Garages \n", CGarages::Load); - LoadSaveDataBlock("Loading Vehicles \n", CPools::LoadVehiclePool); - LoadSaveDataBlock("Loading Objects \n", CPools::LoadObjectPool); - LoadSaveDataBlock("Loading Paths \n", ThePaths.Load); - LoadSaveDataBlock("Loading Cranes \n", CranesLoad); - LoadSaveDataBlock("Loading Pickups \n", CPickups::Load); - LoadSaveDataBlock("Loading Phoneinfo \n", gPhoneInfo.Load); - LoadSaveDataBlock("Loading Restart \n", CRestart::LoadAllRestartPoints); - LoadSaveDataBlock("Loading Radar Blips \n", CRadar::LoadAllRadarBlips); - LoadSaveDataBlock("Loading Zones \n", CTheZones::LoadAllZones); - LoadSaveDataBlock("Loading Gang Data \n", CGangs::LoadAllGangData); - LoadSaveDataBlock("Loading Car Generators \n", CTheCarGenerators::LoadAllCarGenerators); + LoadSaveDataBlock(); + ReadDataFromBlock("Loading PedPool \n", CPools::LoadPedPool); + LoadSaveDataBlock(); + ReadDataFromBlock("Loading Garages \n", CGarages::Load); + LoadSaveDataBlock(); + ReadDataFromBlock("Loading Vehicles \n", CPools::LoadVehiclePool); + LoadSaveDataBlock(); + CProjectileInfo::RemoveAllProjectiles(); + CObject::DeleteAllTempObjects(); + ReadDataFromBlock("Loading Objects \n", CPools::LoadObjectPool); + LoadSaveDataBlock(); + ReadDataFromBlock("Loading Paths \n", ThePaths.Load); + LoadSaveDataBlock(); + ReadDataFromBlock("Loading Cranes \n", CranesLoad); + LoadSaveDataBlock(); + ReadDataFromBlock("Loading Pickups \n", CPickups::Load); + LoadSaveDataBlock(); + ReadDataFromBlock("Loading Phoneinfo \n", gPhoneInfo.Load); + LoadSaveDataBlock(); + ReadDataFromBlock("Loading Restart \n", CRestart::LoadAllRestartPoints); + LoadSaveDataBlock(); + ReadDataFromBlock("Loading Radar Blips \n", CRadar::LoadAllRadarBlips); + LoadSaveDataBlock(); + ReadDataFromBlock("Loading Zones \n", CTheZones::LoadAllZones); + LoadSaveDataBlock(); + ReadDataFromBlock("Loading Gang Data \n", CGangs::LoadAllGangData); + LoadSaveDataBlock(); + ReadDataFromBlock("Loading Car Generators \n", CTheCarGenerators::LoadAllCarGenerators); CParticle::ReloadConfig(); - LoadSaveDataBlock("Loading Particles \n", CParticleObject::LoadParticle); - LoadSaveDataBlock("Loading AudioScript Objects \n", cAudioScriptObject::LoadAllAudioScriptObjects); - LoadSaveDataBlock("Loading Player Info \n", CWorld::Players[CWorld::PlayerInFocus].LoadPlayerInfo); - LoadSaveDataBlock("Loading Stats \n", CStats::LoadStats); - LoadSaveDataBlock("Loading Streaming Stuff \n", CStreaming::MemoryCardLoad); - LoadSaveDataBlock("Loading PedType Stuff \n", CPedType::Load); + LoadSaveDataBlock(); + ReadDataFromBlock("Loading Particles \n", CParticleObject::LoadParticle); + LoadSaveDataBlock(); + ReadDataFromBlock("Loading AudioScript Objects \n", cAudioScriptObject::LoadAllAudioScriptObjects); + LoadSaveDataBlock(); + ReadDataFromBlock("Loading Player Info \n", CWorld::Players[CWorld::PlayerInFocus].LoadPlayerInfo); + LoadSaveDataBlock(); + ReadDataFromBlock("Loading Stats \n", CStats::LoadStats); + LoadSaveDataBlock(); + ReadDataFromBlock("Loading Streaming Stuff \n", CStreaming::MemoryCardLoad); + LoadSaveDataBlock(); + ReadDataFromBlock("Loading PedType Stuff \n", CPedType::Load); DMAudio.SetMusicMasterVolume(CMenuManager::m_PrefsMusicVolume); DMAudio.SetEffectsMasterVolume(CMenuManager::m_PrefsSfxVolume); @@ -302,9 +318,9 @@ GenericLoad() PcSaveHelper.nErrorCode = SAVESTATUS_ERR_LOAD_CLOSE; return false; } - DoGameSpecificStuffAfterSucessLoad(); - printf("Game successfully loaded \n"); + DoGameSpecificStuffAfterSucessLoad(); + debug("Game successfully loaded \n"); return true; }