From bf4b39781ba64076c06e00825277a6c7f67c0949 Mon Sep 17 00:00:00 2001 From: Nikolay Korolev Date: Sun, 25 Jul 2021 21:44:21 +0300 Subject: low effort save support --- src/control/Garages.cpp | 48 +++- src/control/Script.cpp | 4 +- src/control/Script4.cpp | 6 +- src/control/Script5.cpp | 10 +- src/core/Game.cpp | 34 ++- src/core/Game.h | 2 +- src/core/config.h | 2 +- src/renderer/Particle.cpp | 618 ++++++++++++++++++++-------------------- src/renderer/Particle.h | 2 + src/save/GenericGameStorage.cpp | 122 ++++---- src/skel/win/win.cpp | 2 +- 11 files changed, 449 insertions(+), 401 deletions(-) diff --git a/src/control/Garages.cpp b/src/control/Garages.cpp index 2c0bf8f2..8978fac4 100644 --- a/src/control/Garages.cpp +++ b/src/control/Garages.cpp @@ -2613,14 +2613,12 @@ void CGarages::SetAllDoorsBackToOriginalHeight() } } +#define GARAGE_SIZE 208 + void CGarages::Save(uint8 * buf, uint32 * size) { -//INITSAVEBUF - *size = 10692; // for some reason it's not actual size again - //*size = (6 * sizeof(uint32) + TOTAL_COLLECTCARS_GARAGES * sizeof(*CarTypesCollected) + sizeof(uint32) + TOTAL_HIDEOUT_GARAGES * NUM_GARAGE_STORED_CARS * sizeof(CStoredCar) + NUM_GARAGES * sizeof(CGarage)); -#if !defined THIS_IS_STUPID && defined COMPATIBLE_SAVES - memset(buf + 7340, 0, *size - 7340); // garbage data is written otherwise -#endif +INITSAVEBUF + *size = (6 * sizeof(uint32) + TOTAL_COLLECTCARS_GARAGES * sizeof(*CarTypesCollected) + sizeof(uint32) + TOTAL_HIDEOUT_GARAGES * NUM_GARAGE_STORED_CARS * sizeof(CStoredCar) + NUM_GARAGES * GARAGE_SIZE); CloseHideOutGaragesBeforeSave(); WriteSaveBuf(buf, NumGarages); WriteSaveBuf(buf, (uint32)BombsAreFree); @@ -2661,12 +2659,16 @@ void CGarages::Save(uint8 * buf, uint32 * size) WriteSaveBuf(buf, aGarages[i].m_vDir1); WriteSaveBuf(buf, aGarages[i].m_vDir2); WriteSaveBuf(buf, aGarages[i].m_fSupZ); + WriteSaveBuf(buf, aGarages[i].m_vecSSGaragePos); + WriteSaveBuf(buf, aGarages[i].m_fSSGarageAngle); WriteSaveBuf(buf, aGarages[i].m_fDir1Len); WriteSaveBuf(buf, aGarages[i].m_fDir2Len); WriteSaveBuf(buf, aGarages[i].m_fInfX); WriteSaveBuf(buf, aGarages[i].m_fSupX); WriteSaveBuf(buf, aGarages[i].m_fInfY); WriteSaveBuf(buf, aGarages[i].m_fSupY); + WriteSaveBuf(buf, aGarages[i].m_nTimeCrusherCraneActivated); + ZeroSaveBuf(buf, 4); WriteSaveBuf(buf, aGarages[i].m_fDoorPos); WriteSaveBuf(buf, aGarages[i].m_fDoorHeight); WriteSaveBuf(buf, aGarages[i].m_fDoor1X); @@ -2679,18 +2681,26 @@ void CGarages::Save(uint8 * buf, uint32 * size) WriteSaveBuf(buf, aGarages[i].m_bCollectedCarsState); ZeroSaveBuf(buf, 3 + 4); ZeroSaveBuf(buf, sizeof(aGarages[i].m_sStoredCar)); + WriteSaveBuf(buf, aGarages[i].m_bInitialized); + ZeroSaveBuf(buf, 3); +#ifdef GTA_NETWORK + ZeroSaveBuf(buf, 4); +#endif + WriteSaveBuf(buf, aGarages[i].m_bSSGarageAcceptedVehicle); + WriteSaveBuf(buf, aGarages[i].m_bLocked); + WriteSaveBuf(buf, aGarages[i].m_nSSGarageState); + WriteSaveBuf(buf, aGarages[i].m_bSSGarageStateChanging); #else WriteSaveBuf(buf, aGarages[i]); #endif } -//VALIDATESAVEBUF(*size); +VALIDATESAVEBUF(*size); } void CGarages::Load(uint8* buf, uint32 size) { -//INITSAVEBUF - assert(size == 10692); - //assert(size == (6 * sizeof(uint32) + TOTAL_COLLECTCARS_GARAGES * sizeof(*CarTypesCollected) + sizeof(uint32) + TOTAL_HIDEOUT_GARAGES * NUM_GARAGE_STORED_CARS * sizeof(CStoredCar) + NUM_GARAGES * sizeof(CGarage))); +INITSAVEBUF + assert(size == (6 * sizeof(uint32) + TOTAL_COLLECTCARS_GARAGES * sizeof(*CarTypesCollected) + sizeof(uint32) + TOTAL_HIDEOUT_GARAGES * NUM_GARAGE_STORED_CARS * sizeof(CStoredCar) + NUM_GARAGES * GARAGE_SIZE)); CloseHideOutGaragesBeforeSave(); ReadSaveBuf(&NumGarages, buf); int32 tempInt; @@ -2734,12 +2744,16 @@ void CGarages::Load(uint8* buf, uint32 size) ReadSaveBuf(&aGarages[i].m_vDir1, buf); ReadSaveBuf(&aGarages[i].m_vDir2, buf); ReadSaveBuf(&aGarages[i].m_fSupZ, buf); + ReadSaveBuf(&aGarages[i].m_vecSSGaragePos, buf); + ReadSaveBuf(&aGarages[i].m_fSSGarageAngle, buf); ReadSaveBuf(&aGarages[i].m_fDir1Len, buf); ReadSaveBuf(&aGarages[i].m_fDir2Len, buf); ReadSaveBuf(&aGarages[i].m_fInfX, buf); ReadSaveBuf(&aGarages[i].m_fSupX, buf); ReadSaveBuf(&aGarages[i].m_fInfY, buf); ReadSaveBuf(&aGarages[i].m_fSupY, buf); + ReadSaveBuf(&aGarages[i].m_nTimeCrusherCraneActivated, buf); + SkipSaveBuf(buf, 4); ReadSaveBuf(&aGarages[i].m_fDoorPos, buf); ReadSaveBuf(&aGarages[i].m_fDoorHeight, buf); ReadSaveBuf(&aGarages[i].m_fDoor1X, buf); @@ -2752,6 +2766,15 @@ void CGarages::Load(uint8* buf, uint32 size) ReadSaveBuf(&aGarages[i].m_bCollectedCarsState, buf); SkipSaveBuf(buf, 3 + 4); SkipSaveBuf(buf, sizeof(aGarages[i].m_sStoredCar)); + ReadSaveBuf(&aGarages[i].m_bInitialized, buf); + SkipSaveBuf(buf, 3); +#ifdef GTA_NETWORK + SkipSaveBuf(buf, 4); +#endif + ReadSaveBuf(&aGarages[i].m_bSSGarageAcceptedVehicle, buf); + ReadSaveBuf(&aGarages[i].m_bLocked, buf); + ReadSaveBuf(&aGarages[i].m_nSSGarageState, buf); + ReadSaveBuf(&aGarages[i].m_bSSGarageStateChanging, buf); #else ReadSaveBuf(&aGarages[i], buf); #endif @@ -2765,11 +2788,14 @@ void CGarages::Load(uint8* buf, uint32 size) else aGarages[i].UpdateDoorsHeight(); } -//VALIDATESAVEBUF(size); +VALIDATESAVEBUF(size); MessageEndTime = 0; bCamShouldBeOutisde = false; MessageStartTime = 0; + hGarages = DMAudio.CreateEntity(AUDIOTYPE_GARAGE, (void*)1); + if (hGarages >= 0) + DMAudio.SetEntityStatus(hGarages, TRUE); } bool diff --git a/src/control/Script.cpp b/src/control/Script.cpp index fbb7024c..233f5d5d 100644 --- a/src/control/Script.cpp +++ b/src/control/Script.cpp @@ -1853,7 +1853,7 @@ void FlushLog() const uint32 CRunningScript::nSaveStructSize = #ifdef COMPATIBLE_SAVES - 136; + 536; #else sizeof(CRunningScript); #endif @@ -2691,7 +2691,7 @@ bool CTheScripts::Init(bool loaddata) InvisibilitySettingArray[i] = nil; if (loaddata) { printf("loaddata = true\n"); - //retval = GenericLoad(); // TODO + retval = GenericLoad(); } for (int i = 0; i < MAX_ALLOWED_COLLISIONS; i++) AllowedCollision[i] = 0; diff --git a/src/control/Script4.cpp b/src/control/Script4.cpp index d5edc5cf..7ff785d5 100644 --- a/src/control/Script4.cpp +++ b/src/control/Script4.cpp @@ -2262,8 +2262,10 @@ void CTheScripts::SwapNearestBuildingModel(float x, float y, float z, float radi } } CBuilding* pReplacedBuilding = ((CBuilding*)pClosestEntity); - pReplacedBuilding->ReplaceWithNewModel(mi2); - AddToBuildingSwapArray(pReplacedBuilding, mi1, mi2); + if (pReplacedBuilding) { + pReplacedBuilding->ReplaceWithNewModel(mi2); + AddToBuildingSwapArray(pReplacedBuilding, mi1, mi2); + } } void CTheScripts::AddToBuildingSwapArray(CBuilding* pBuilding, int32 old_model, int32 new_model) diff --git a/src/control/Script5.cpp b/src/control/Script5.cpp index f6036b50..c5d316a3 100644 --- a/src/control/Script5.cpp +++ b/src/control/Script5.cpp @@ -2114,8 +2114,8 @@ void CTheScripts::RenderTheScriptDebugLines() } */ -#define SCRIPT_DATA_SIZE sizeof(CTheScripts::OnAMissionFlag) +\ - 4 * sizeof(uint32) * MAX_NUM_BUILDING_SWAPS + 2 * sizeof(uint32) * MAX_NUM_INVISIBILITY_SETTINGS + 5 * sizeof(uint32) +#define SCRIPT_DATA_SIZE sizeof(CTheScripts::OnAMissionFlag) + sizeof(tCollectiveData) * MAX_NUM_COLLECTIVES +\ + 4 * sizeof(uint32) * MAX_NUM_BUILDING_SWAPS + 2 * sizeof(uint32) * MAX_NUM_INVISIBILITY_SETTINGS + 4 * sizeof(uint32) void CTheScripts::SaveAllScripts(uint8* buf, uint32* size) { @@ -2124,7 +2124,7 @@ INITSAVEBUF uint32 runningScripts = 0; for (CRunningScript* pScript = pActiveScripts; pScript; pScript = pScript->GetNext()) runningScripts++; - *size = CRunningScript::nSaveStructSize * runningScripts + varSpace + SCRIPT_DATA_SIZE + SAVE_HEADER_SIZE + 3 * sizeof(uint32); + *size = CRunningScript::nSaveStructSize * runningScripts + varSpace + SCRIPT_DATA_SIZE + SAVE_HEADER_SIZE + 5 * sizeof(uint32); WriteSaveHeader(buf, 'S', 'C', 'R', '\0', *size - SAVE_HEADER_SIZE); WriteSaveBuf(buf, varSpace); for (uint32 i = 0; i < varSpace; i++) @@ -2200,10 +2200,8 @@ INITSAVEBUF VALIDATESAVEBUF(*size) } -// TODO: I don't really understand how script loading works, so I leave it the VC way for now. bool CTheScripts::LoadAllScripts(uint8* buf, uint32 size) { - Init(); // TODO: in LCS CTheScripts::Init call GenericLoad, which then calls LoadAllScripts INITSAVEBUF CheckSaveHeader(buf, 'S', 'C', 'R', '\0', size - SAVE_HEADER_SIZE); uint32 varSpace, type, handle; @@ -2222,7 +2220,6 @@ INITSAVEBUF else SkipSaveBuf(buf, 1); } - // everything else is... gone? TODO ReadSaveBuf(&tmp, buf); script_assert(tmp == SCRIPT_DATA_SIZE); ReadSaveBuf(&OnAMissionFlag, buf); @@ -2304,7 +2301,6 @@ INITSAVEBUF ReadSaveBuf(&runningScripts, buf); for (uint32 i = 0; i < runningScripts; i++) CRunningScript().Load(buf); - StartTestScript(); // <- tmp hack return true; VALIDATESAVEBUF(size) } diff --git a/src/core/Game.cpp b/src/core/Game.cpp index a370c9d4..d2646512 100644 --- a/src/core/Game.cpp +++ b/src/core/Game.cpp @@ -648,7 +648,7 @@ bool CGame::ShutDown(void) return true; } -void CGame::ReInitGameObjectVariables(void) +bool CGame::ReInitGameObjectVariables(bool load) { CGameLogic::InitAtStartOfGame(); #ifdef PS2_MENU @@ -693,7 +693,7 @@ void CGame::ReInitGameObjectVariables(void) gPhoneInfo.Initialise(); PUSH_MEMID(MEMID_SCRIPT); - CTheScripts::Init(); + bool res = CTheScripts::Init(load); CGangs::Initialise(); POP_MEMID(); @@ -706,12 +706,14 @@ void CGame::ReInitGameObjectVariables(void) CStats::Init(); CPickups::Init(); CPacManPickups::Init(); - CGarages::Init(); + if (!load) + CGarages::Init(); CSpecialFX::Init(); CRopes::Init(); CWaterCannons::Init(); CScriptPaths::Init(); CParticle::ReloadConfig(); + CParticle::SetPixelData(); #ifdef PS2_MENU if ( !TheMemoryCard.m_bWantToLoad ) @@ -730,6 +732,8 @@ void CGame::ReInitGameObjectVariables(void) for (int32 i = 0; i < MAX_PADS; i++) CPad::GetPad(i)->Clear(true); + + return res; } void CGame::ReloadIPLs(void) @@ -800,13 +804,12 @@ void CGame::InitialiseWhenRestarting(void) RestoreForStartLoad(); } - ReInitGameObjectVariables(); + bool bLoadSuccessful = ReInitGameObjectVariables(FrontEndMenuManager.m_bWantToLoad); if ( FrontEndMenuManager.m_bWantToLoad == true ) { - FrontEndMenuManager.m_bWantToLoad = false; InitRadioStationPositionList(); - if ( GenericLoad() == true ) + if ( bLoadSuccessful == true ) { DMAudio.ResetTimers(CTimer::GetTimeInMilliseconds()); CFerry::InitFerrys(); @@ -825,8 +828,8 @@ void CGame::InitialiseWhenRestarting(void) ShutDownForRestart(); CTimer::Stop(); CTimer::Initialise(); - FrontEndMenuManager.m_bWantToLoad = false; - ReInitGameObjectVariables(); + //FrontEndMenuManager.m_bWantToLoad = false; + ReInitGameObjectVariables(false); currLevel = LEVEL_GENERIC; CCollision::SortOutCollisionAfterLoad(); } @@ -835,6 +838,7 @@ void CGame::InitialiseWhenRestarting(void) #endif } + FrontEndMenuManager.m_bWantToLoad = true; CTimer::Update(); DMAudio.ChangeMusicMode(MUSICMODE_GAME); @@ -845,6 +849,20 @@ void CGame::InitialiseWhenRestarting(void) void CGame::Process(void) { + if (FrontEndMenuManager.m_bWantToLoad) { + CTheScripts::StartTestScript(); + CTheScripts::Process(); + TheCamera.Process(); + CStreaming::LoadScene(TheCamera.GetPosition()); + //CGame::GenerateTempPedAtStartOfNetworkGame(); + if (/* ?*/true){ + CStreaming::RequestSpecialModel(MI_PLAYER, "player", STREAMFLAGS_DEPENDENCY | STREAMFLAGS_DONT_REMOVE); + CStreaming::LoadAllRequestedModels(false); + } + TheCamera.Process(); + CStreaming::LoadScene(TheCamera.GetPosition()); + FrontEndMenuManager.m_bWantToLoad = false; + } CPad::UpdatePads(); #ifdef USE_CUSTOM_ALLOCATOR ProcessTidyUpMemory(); diff --git a/src/core/Game.h b/src/core/Game.h index dd14278a..e6016888 100644 --- a/src/core/Game.h +++ b/src/core/Game.h @@ -62,7 +62,7 @@ public: static void FinalShutdown(void); static bool Initialise(const char *datFile); static bool ShutDown(void); - static void ReInitGameObjectVariables(void); + static bool ReInitGameObjectVariables(bool); static void ReloadIPLs(void); static void ShutDownForRestart(void); static void InitialiseWhenRestarting(void); diff --git a/src/core/config.h b/src/core/config.h index d8d62782..bee60489 100644 --- a/src/core/config.h +++ b/src/core/config.h @@ -274,7 +274,7 @@ enum Config { #define FIX_BUGS // fixes bugs that we've came across during reversing. You can undefine this only on release builds. //#define MORE_LANGUAGES // Add more translations to the game #define COMPATIBLE_SAVES // this allows changing structs while keeping saves compatible, and keeps saves compatible between platforms -#define FIX_INCOMPATIBLE_SAVES // try to fix incompatible saves, requires COMPATIBLE_SAVES +//#define FIX_INCOMPATIBLE_SAVES // try to fix incompatible saves, requires COMPATIBLE_SAVES #define LOAD_INI_SETTINGS // as the name suggests. fundamental for CUSTOM_FRONTEND_OPTIONS #define NO_MOVIES // add option to disable intro videos diff --git a/src/renderer/Particle.cpp b/src/renderer/Particle.cpp index 54b6ca92..18e9e415 100644 --- a/src/renderer/Particle.cpp +++ b/src/renderer/Particle.cpp @@ -512,317 +512,321 @@ void CParticle::Initialise() gpFireHoseRaster = RwTextureGetRaster(gpFireHoseTex); CTxdStore::PopCurrentTxd(); - - for ( int32 i = 0; i < MAX_PARTICLES; i++ ) + SetPixelData(); + + debug("CParticle ready"); +} + +void CParticle::SetPixelData() +{ + for (int32 i = 0; i < MAX_PARTICLES; i++) { - tParticleSystemData *entry = &mod_ParticleSystemManager.m_aParticles[i]; - - switch( i ) + tParticleSystemData* entry = &mod_ParticleSystemManager.m_aParticles[i]; + + switch (i) { - case PARTICLE_SPARK: - entry->m_ppRaster = &gpRainDropSmallRaster; - break; - - case PARTICLE_SPARK_SMALL: - entry->m_ppRaster = &gpRainDropSmallRaster; - break; - - case PARTICLE_WATER_SPARK: - entry->m_ppRaster = &gpSparkRaster; - break; - - case PARTICLE_WHEEL_DIRT: - entry->m_ppRaster = &gpSmoke2Raster; - break; - - case PARTICLE_SAND: - entry->m_ppRaster = &gpSmoke2Raster; - break; - - case PARTICLE_WHEEL_WATER: - entry->m_ppRaster = gpSmokeRaster; - break; - - case PARTICLE_BLOOD: - entry->m_ppRaster = &gpBloodRaster; - break; - - case PARTICLE_BLOOD_SMALL: - entry->m_ppRaster = &gpBloodSmallRaster; - break; - - case PARTICLE_BLOOD_SPURT: - entry->m_ppRaster = &gpBloodSmallRaster; - break; - - case PARTICLE_DEBRIS: - entry->m_ppRaster = gpLeafRaster; - break; - - case PARTICLE_DEBRIS2: - entry->m_ppRaster = &gpGungeRaster; - break; - - case PARTICLE_FLYERS: - entry->m_ppRaster = &gpNewspaperRaster; - break; - - case PARTICLE_WATER: - entry->m_ppRaster = gpSmokeRaster; - break; - - case PARTICLE_FLAME: - entry->m_ppRaster = &gpFlame1Raster; - break; - - case PARTICLE_FIREBALL: - entry->m_ppRaster = &gpFlame5Raster; - break; - - case PARTICLE_GUNFLASH: - entry->m_ppRaster = gpGunFlashRaster; - break; - - case PARTICLE_GUNFLASH_NOANIM: - entry->m_ppRaster = gpGunFlashRaster; - break; - - case PARTICLE_GUNSMOKE: - entry->m_ppRaster = nil; - break; - - case PARTICLE_GUNSMOKE2: - entry->m_ppRaster = gpRubberRaster; - break; - - case PARTICLE_CIGARETTE_SMOKE: - entry->m_ppRaster = &gpGunSmokeRaster; - break; - - case PARTICLE_TEARGAS: - entry->m_ppRaster = &gpHeatHazeRaster; - break; - - case PARTICLE_SMOKE: - case PARTICLE_SMOKE_SLOWMOTION: - case PARTICLE_DRY_ICE: - entry->m_ppRaster = gpSmokeRaster; - break; - - case PARTICLE_GARAGEPAINT_SPRAY: - entry->m_ppRaster = gpSmokeRaster; - break; - - case PARTICLE_SHARD: - entry->m_ppRaster = &gpRainDropRaster; - break; - - case PARTICLE_SPLASH: - entry->m_ppRaster = gpCarSplashRaster; - break; - - case PARTICLE_CARFLAME: - entry->m_ppRaster = &gpFlame1Raster; - break; - - case PARTICLE_STEAM: - entry->m_ppRaster = gpSmokeRaster; - break; - - case PARTICLE_STEAM2: - entry->m_ppRaster = &gpSmoke2Raster; - break; - - case PARTICLE_STEAM_NY: - case PARTICLE_STEAM_NY_SLOWMOTION: - case PARTICLE_GROUND_STEAM: - case PARTICLE_HYDRANT_STEAM: - entry->m_ppRaster = &gpSmoke2Raster; - break; - - case PARTICLE_ENGINE_STEAM: - entry->m_ppRaster = &gpSmoke2Raster; - break; - - case PARTICLE_RAINDROP: - entry->m_ppRaster = &gpRainDropRaster; - break; - - case PARTICLE_RAINDROP_SMALL: - entry->m_ppRaster = &gpRainDropSmallRaster; - break; - - case PARTICLE_RAIN_SPLASH: - case PARTICLE_RAIN_SPLASH_BIGGROW: - entry->m_ppRaster = gpRainSplashRaster; - break; - - case PARTICLE_RAIN_SPLASHUP: - entry->m_ppRaster = gpRainSplashupRaster; - break; - - case PARTICLE_WATERSPRAY: - entry->m_ppRaster = gpWatersprayRaster; - break; - - case PARTICLE_RAINDROP_2D: - entry->m_ppRaster = &gpRainDropRaster; - break; - - case PARTICLE_EXPLOSION_MEDIUM: - entry->m_ppRaster = gpExplosionMediumRaster; - break; - - case PARTICLE_EXPLOSION_LARGE: - entry->m_ppRaster = gpExplosionMediumRaster; - break; - - case PARTICLE_EXPLOSION_MFAST: - entry->m_ppRaster = gpExplosionMediumRaster; - break; - - case PARTICLE_EXPLOSION_LFAST: - entry->m_ppRaster = gpExplosionMediumRaster; - break; - - case PARTICLE_CAR_SPLASH: - entry->m_ppRaster = gpCarSplashRaster; - break; - - case PARTICLE_BOAT_SPLASH: - entry->m_ppRaster = &gpBoatWakeRaster; - break; - - case PARTICLE_BOAT_THRUSTJET: - entry->m_ppRaster = gpRubberRaster; - break; - - case PARTICLE_WATER_HYDRANT: - entry->m_ppRaster = gpCarSplashRaster; - break; - - case PARTICLE_WATER_CANNON: - entry->m_ppRaster = gpSmokeRaster; - break; - - case PARTICLE_EXTINGUISH_STEAM: - entry->m_ppRaster = gpSmokeRaster; - break; - - case PARTICLE_PED_SPLASH: - entry->m_ppRaster = gpCarSplashRaster; - break; - - case PARTICLE_PEDFOOT_DUST: - entry->m_ppRaster = &gpSmoke2Raster; - break; - - case PARTICLE_CAR_DUST: - entry->m_ppRaster = &gpSmoke2Raster; - break; - - case PARTICLE_HELI_DUST: - entry->m_ppRaster = gpSmokeRaster; - break; - - case PARTICLE_HELI_ATTACK: - entry->m_ppRaster = &gpRainDropSmallRaster; - break; - - case PARTICLE_ENGINE_SMOKE: - entry->m_ppRaster = &gpCloudRaster4; - break; - - case PARTICLE_ENGINE_SMOKE2: - case PARTICLE_ROCKET_SMOKE: - entry->m_ppRaster = &gpCloudRaster4; - break; - - case PARTICLE_CARFLAME_SMOKE: - entry->m_ppRaster = &gpCloudRaster4; - break; - - case PARTICLE_FIREBALL_SMOKE: - entry->m_ppRaster = &gpCloudRaster4; - break; - - case PARTICLE_PAINT_SMOKE: - entry->m_ppRaster = gpSmokeRaster; - break; - - case PARTICLE_TREE_LEAVES: - entry->m_ppRaster = gpLeafRaster; - break; - - case PARTICLE_CARCOLLISION_DUST: - entry->m_ppRaster = &gpCollisionSmokeRaster; - break; - - case PARTICLE_CAR_DEBRIS: - case PARTICLE_BIRD_DEBRIS: - case PARTICLE_HELI_DEBRIS: - entry->m_ppRaster = gpCarDebrisRaster; - break; - - case PARTICLE_EXHAUST_FUMES: - entry->m_ppRaster = &gpSmoke2Raster; - break; - - case PARTICLE_RUBBER_SMOKE: - entry->m_ppRaster = gpRubberRaster; - break; - - case PARTICLE_BURNINGRUBBER_SMOKE: - entry->m_ppRaster = &gpCollisionSmokeRaster; - break; - - case PARTICLE_BULLETHIT_SMOKE: - entry->m_ppRaster = gpSmokeRaster; - break; - - case PARTICLE_GUNSHELL_FIRST: - entry->m_ppRaster = &gpGunShellRaster; - break; - - case PARTICLE_GUNSHELL: - entry->m_ppRaster = &gpGunShellRaster; - break; - - case PARTICLE_GUNSHELL_BUMP1: - entry->m_ppRaster = &gpGunShellRaster; - break; - - case PARTICLE_GUNSHELL_BUMP2: - entry->m_ppRaster = &gpGunShellRaster; - break; - - case PARTICLE_TEST: - entry->m_ppRaster = &gpCloudRaster4; - break; - - case PARTICLE_BIRD_FRONT: - entry->m_ppRaster = gpBirdfrontRaster; - break; - - case PARTICLE_SHIP_SIDE: - entry->m_ppRaster = gpBoatRaster; - break; - - case PARTICLE_BEASTIE: - entry->m_ppRaster = &gpBeastieRaster; - break; - - case PARTICLE_FERRY_CHIM_SMOKE: - entry->m_ppRaster = gpSmokeRaster; - break; - - case PARTICLE_MULTIPLAYER_HIT: - entry->m_ppRaster = &gpMultiPlayerHitRaster; - break; + case PARTICLE_SPARK: + entry->m_ppRaster = &gpRainDropSmallRaster; + break; + + case PARTICLE_SPARK_SMALL: + entry->m_ppRaster = &gpRainDropSmallRaster; + break; + + case PARTICLE_WATER_SPARK: + entry->m_ppRaster = &gpSparkRaster; + break; + + case PARTICLE_WHEEL_DIRT: + entry->m_ppRaster = &gpSmoke2Raster; + break; + + case PARTICLE_SAND: + entry->m_ppRaster = &gpSmoke2Raster; + break; + + case PARTICLE_WHEEL_WATER: + entry->m_ppRaster = gpSmokeRaster; + break; + + case PARTICLE_BLOOD: + entry->m_ppRaster = &gpBloodRaster; + break; + + case PARTICLE_BLOOD_SMALL: + entry->m_ppRaster = &gpBloodSmallRaster; + break; + + case PARTICLE_BLOOD_SPURT: + entry->m_ppRaster = &gpBloodSmallRaster; + break; + + case PARTICLE_DEBRIS: + entry->m_ppRaster = gpLeafRaster; + break; + + case PARTICLE_DEBRIS2: + entry->m_ppRaster = &gpGungeRaster; + break; + + case PARTICLE_FLYERS: + entry->m_ppRaster = &gpNewspaperRaster; + break; + + case PARTICLE_WATER: + entry->m_ppRaster = gpSmokeRaster; + break; + + case PARTICLE_FLAME: + entry->m_ppRaster = &gpFlame1Raster; + break; + + case PARTICLE_FIREBALL: + entry->m_ppRaster = &gpFlame5Raster; + break; + + case PARTICLE_GUNFLASH: + entry->m_ppRaster = gpGunFlashRaster; + break; + + case PARTICLE_GUNFLASH_NOANIM: + entry->m_ppRaster = gpGunFlashRaster; + break; + + case PARTICLE_GUNSMOKE: + entry->m_ppRaster = nil; + break; + + case PARTICLE_GUNSMOKE2: + entry->m_ppRaster = gpRubberRaster; + break; + + case PARTICLE_CIGARETTE_SMOKE: + entry->m_ppRaster = &gpGunSmokeRaster; + break; + + case PARTICLE_TEARGAS: + entry->m_ppRaster = &gpHeatHazeRaster; + break; + + case PARTICLE_SMOKE: + case PARTICLE_SMOKE_SLOWMOTION: + case PARTICLE_DRY_ICE: + entry->m_ppRaster = gpSmokeRaster; + break; + + case PARTICLE_GARAGEPAINT_SPRAY: + entry->m_ppRaster = gpSmokeRaster; + break; + + case PARTICLE_SHARD: + entry->m_ppRaster = &gpRainDropRaster; + break; + + case PARTICLE_SPLASH: + entry->m_ppRaster = gpCarSplashRaster; + break; + + case PARTICLE_CARFLAME: + entry->m_ppRaster = &gpFlame1Raster; + break; + + case PARTICLE_STEAM: + entry->m_ppRaster = gpSmokeRaster; + break; + + case PARTICLE_STEAM2: + entry->m_ppRaster = &gpSmoke2Raster; + break; + + case PARTICLE_STEAM_NY: + case PARTICLE_STEAM_NY_SLOWMOTION: + case PARTICLE_GROUND_STEAM: + case PARTICLE_HYDRANT_STEAM: + entry->m_ppRaster = &gpSmoke2Raster; + break; + + case PARTICLE_ENGINE_STEAM: + entry->m_ppRaster = &gpSmoke2Raster; + break; + + case PARTICLE_RAINDROP: + entry->m_ppRaster = &gpRainDropRaster; + break; + + case PARTICLE_RAINDROP_SMALL: + entry->m_ppRaster = &gpRainDropSmallRaster; + break; + + case PARTICLE_RAIN_SPLASH: + case PARTICLE_RAIN_SPLASH_BIGGROW: + entry->m_ppRaster = gpRainSplashRaster; + break; + + case PARTICLE_RAIN_SPLASHUP: + entry->m_ppRaster = gpRainSplashupRaster; + break; + + case PARTICLE_WATERSPRAY: + entry->m_ppRaster = gpWatersprayRaster; + break; + + case PARTICLE_RAINDROP_2D: + entry->m_ppRaster = &gpRainDropRaster; + break; + + case PARTICLE_EXPLOSION_MEDIUM: + entry->m_ppRaster = gpExplosionMediumRaster; + break; + + case PARTICLE_EXPLOSION_LARGE: + entry->m_ppRaster = gpExplosionMediumRaster; + break; + + case PARTICLE_EXPLOSION_MFAST: + entry->m_ppRaster = gpExplosionMediumRaster; + break; + + case PARTICLE_EXPLOSION_LFAST: + entry->m_ppRaster = gpExplosionMediumRaster; + break; + + case PARTICLE_CAR_SPLASH: + entry->m_ppRaster = gpCarSplashRaster; + break; + + case PARTICLE_BOAT_SPLASH: + entry->m_ppRaster = &gpBoatWakeRaster; + break; + + case PARTICLE_BOAT_THRUSTJET: + entry->m_ppRaster = gpRubberRaster; + break; + + case PARTICLE_WATER_HYDRANT: + entry->m_ppRaster = gpCarSplashRaster; + break; + + case PARTICLE_WATER_CANNON: + entry->m_ppRaster = gpSmokeRaster; + break; + + case PARTICLE_EXTINGUISH_STEAM: + entry->m_ppRaster = gpSmokeRaster; + break; + + case PARTICLE_PED_SPLASH: + entry->m_ppRaster = gpCarSplashRaster; + break; + + case PARTICLE_PEDFOOT_DUST: + entry->m_ppRaster = &gpSmoke2Raster; + break; + + case PARTICLE_CAR_DUST: + entry->m_ppRaster = &gpSmoke2Raster; + break; + + case PARTICLE_HELI_DUST: + entry->m_ppRaster = gpSmokeRaster; + break; + + case PARTICLE_HELI_ATTACK: + entry->m_ppRaster = &gpRainDropSmallRaster; + break; + + case PARTICLE_ENGINE_SMOKE: + entry->m_ppRaster = &gpCloudRaster4; + break; + + case PARTICLE_ENGINE_SMOKE2: + case PARTICLE_ROCKET_SMOKE: + entry->m_ppRaster = &gpCloudRaster4; + break; + + case PARTICLE_CARFLAME_SMOKE: + entry->m_ppRaster = &gpCloudRaster4; + break; + + case PARTICLE_FIREBALL_SMOKE: + entry->m_ppRaster = &gpCloudRaster4; + break; + + case PARTICLE_PAINT_SMOKE: + entry->m_ppRaster = gpSmokeRaster; + break; + + case PARTICLE_TREE_LEAVES: + entry->m_ppRaster = gpLeafRaster; + break; + + case PARTICLE_CARCOLLISION_DUST: + entry->m_ppRaster = &gpCollisionSmokeRaster; + break; + + case PARTICLE_CAR_DEBRIS: + case PARTICLE_BIRD_DEBRIS: + case PARTICLE_HELI_DEBRIS: + entry->m_ppRaster = gpCarDebrisRaster; + break; + + case PARTICLE_EXHAUST_FUMES: + entry->m_ppRaster = &gpSmoke2Raster; + break; + + case PARTICLE_RUBBER_SMOKE: + entry->m_ppRaster = gpRubberRaster; + break; + + case PARTICLE_BURNINGRUBBER_SMOKE: + entry->m_ppRaster = &gpCollisionSmokeRaster; + break; + + case PARTICLE_BULLETHIT_SMOKE: + entry->m_ppRaster = gpSmokeRaster; + break; + + case PARTICLE_GUNSHELL_FIRST: + entry->m_ppRaster = &gpGunShellRaster; + break; + + case PARTICLE_GUNSHELL: + entry->m_ppRaster = &gpGunShellRaster; + break; + + case PARTICLE_GUNSHELL_BUMP1: + entry->m_ppRaster = &gpGunShellRaster; + break; + + case PARTICLE_GUNSHELL_BUMP2: + entry->m_ppRaster = &gpGunShellRaster; + break; + + case PARTICLE_TEST: + entry->m_ppRaster = &gpCloudRaster4; + break; + + case PARTICLE_BIRD_FRONT: + entry->m_ppRaster = gpBirdfrontRaster; + break; + + case PARTICLE_SHIP_SIDE: + entry->m_ppRaster = gpBoatRaster; + break; + + case PARTICLE_BEASTIE: + entry->m_ppRaster = &gpBeastieRaster; + break; + + case PARTICLE_FERRY_CHIM_SMOKE: + entry->m_ppRaster = gpSmokeRaster; + break; + + case PARTICLE_MULTIPLAYER_HIT: + entry->m_ppRaster = &gpMultiPlayerHitRaster; + break; } } - - debug("CParticle ready"); } void CParticle::Shutdown() diff --git a/src/renderer/Particle.h b/src/renderer/Particle.h index a306f0c4..57e36f82 100644 --- a/src/renderer/Particle.h +++ b/src/renderer/Particle.h @@ -91,6 +91,8 @@ public: static void HandleShipsAtHorizonStuff(); static void HandleShootableBirdsStuff(CEntity *entity, CVector const&camPos); + + static void SetPixelData(); }; extern RwRaster *gpCarSplashRaster[]; diff --git a/src/save/GenericGameStorage.cpp b/src/save/GenericGameStorage.cpp index 412a0c94..8095794b 100644 --- a/src/save/GenericGameStorage.cpp +++ b/src/save/GenericGameStorage.cpp @@ -181,7 +181,7 @@ GenericSave(int file) WriteDataToBufferPointer(buf, CClock::ms_nGameClockMinutes); currPad = CPad::GetPad(0); WriteDataToBufferPointer(buf, currPad->Mode); - WriteDataToBufferPointer(buf, CTimer::m_snTimeInMilliseconds); + //WriteDataToBufferPointer(buf, CTimer::m_snTimeInMilliseconds); WriteDataToBufferPointer(buf, CTimer::ms_fTimeScale); WriteDataToBufferPointer(buf, CTimer::ms_fTimeStep); WriteDataToBufferPointer(buf, CTimer::ms_fTimeStepNonClipped); @@ -213,7 +213,7 @@ GenericSave(int file) WriteDataToBufferPointer(buf, CTimeCycle::m_ExtraColourInter); PopulateRadioStationPositionList(); WriteDataToBufferPointer(buf, RadioStationPosition); - assert(buf - work_buff == SIZE_OF_SIMPLEVARS); + //assert(buf - work_buff == SIZE_OF_SIMPLEVARS); // Save scripts, block is nested within the same block as simple vars for some reason presize = buf; @@ -230,26 +230,26 @@ GenericSave(int file) // Save the rest //WriteSaveDataBlock(CPools::SavePedPool, "PedPoolSize"); WriteSaveDataBlock(CGarages::Save, "GaragesSize"); - WriteSaveDataBlock(CGameLogic::Save, "GameLogicSize"); - WriteSaveDataBlock(CPools::SaveVehiclePool, "VehPoolSize"); - WriteSaveDataBlock(CPools::SaveObjectPool, "ObjectPoolSize"); - WriteSaveDataBlock(ThePaths.Save, "ThePathsSize"); - WriteSaveDataBlock(CCranes::Save, "CranesSize"); - WriteSaveDataBlock(CPickups::Save, "PickUpsSize"); - WriteSaveDataBlock(gPhoneInfo.Save, "PhoneInfoSize"); - WriteSaveDataBlock(CRestart::SaveAllRestartPoints, "RestartPointsBufferSize"); - WriteSaveDataBlock(CRadar::SaveAllRadarBlips, "RadarBlipsBufferSize"); - WriteSaveDataBlock(CTheZones::SaveAllZones, "AllZonesBufferSize"); - WriteSaveDataBlock(CGangs::SaveAllGangData, "AllGangDataSize"); - WriteSaveDataBlock(CTheCarGenerators::SaveAllCarGenerators, "AllCarGeneratorsSize"); - WriteSaveDataBlock(CParticleObject::SaveParticle, "ParticlesSize"); - WriteSaveDataBlock(cAudioScriptObject::SaveAllAudioScriptObjects, "AllAudioScriptObjectsSize"); - WriteSaveDataBlock(CScriptPaths::Save, "ScriptPathsSize"); + //WriteSaveDataBlock(CGameLogic::Save, "GameLogicSize"); + //WriteSaveDataBlock(CPools::SaveVehiclePool, "VehPoolSize"); + //WriteSaveDataBlock(CPools::SaveObjectPool, "ObjectPoolSize"); + //WriteSaveDataBlock(ThePaths.Save, "ThePathsSize"); + //WriteSaveDataBlock(CCranes::Save, "CranesSize"); + //WriteSaveDataBlock(CPickups::Save, "PickUpsSize"); + //WriteSaveDataBlock(gPhoneInfo.Save, "PhoneInfoSize"); + //WriteSaveDataBlock(CRestart::SaveAllRestartPoints, "RestartPointsBufferSize"); + //WriteSaveDataBlock(CRadar::SaveAllRadarBlips, "RadarBlipsBufferSize"); + //WriteSaveDataBlock(CTheZones::SaveAllZones, "AllZonesBufferSize"); + //WriteSaveDataBlock(CGangs::SaveAllGangData, "AllGangDataSize"); + //WriteSaveDataBlock(CTheCarGenerators::SaveAllCarGenerators, "AllCarGeneratorsSize"); + //WriteSaveDataBlock(CParticleObject::SaveParticle, "ParticlesSize"); + //WriteSaveDataBlock(cAudioScriptObject::SaveAllAudioScriptObjects, "AllAudioScriptObjectsSize"); + //WriteSaveDataBlock(CScriptPaths::Save, "ScriptPathsSize"); WriteSaveDataBlock(CWorld::Players[CWorld::PlayerInFocus].SavePlayerInfo, "PlayerInfoSize"); WriteSaveDataBlock(CStats::SaveStats, "StatsSize"); - WriteSaveDataBlock(CSetPieces::Save, "SetPiecesSize"); - WriteSaveDataBlock(CStreaming::MemoryCardSave, "StreamingSize"); - WriteSaveDataBlock(CPedType::Save, "PedTypeSize"); + //WriteSaveDataBlock(CSetPieces::Save, "SetPiecesSize"); + //WriteSaveDataBlock(CStreaming::MemoryCardSave, "StreamingSize"); + //WriteSaveDataBlock(CPedType::Save, "PedTypeSize"); // sure just write garbage data repeatedly ... #ifndef THIS_IS_STUPID @@ -318,7 +318,7 @@ GenericLoad() ReadDataFromBufferPointer(buf, CClock::ms_nGameClockMinutes); currPad = CPad::GetPad(0); ReadDataFromBufferPointer(buf, currPad->Mode); - ReadDataFromBufferPointer(buf, CTimer::m_snTimeInMilliseconds); + //ReadDataFromBufferPointer(buf, CTimer::m_snTimeInMilliseconds); ReadDataFromBufferPointer(buf, CTimer::ms_fTimeScale); ReadDataFromBufferPointer(buf, CTimer::ms_fTimeStep); ReadDataFromBufferPointer(buf, CTimer::ms_fTimeStepNonClipped); @@ -359,7 +359,7 @@ GenericLoad() ReadDataFromBufferPointer(buf, CTimeCycle::m_bExtraColourOn); ReadDataFromBufferPointer(buf, CTimeCycle::m_ExtraColourInter); ReadDataFromBufferPointer(buf, RadioStationPosition); - assert(buf - work_buff == SIZE_OF_SIMPLEVARS); + //assert(buf - work_buff == SIZE_OF_SIMPLEVARS); #ifdef MISSION_REPLAY WaitForSave = 0; if (FrontEndMenuManager.m_nCurrSaveSlot == PAUSE_SAVE_SLOT && qs == 3) @@ -372,50 +372,50 @@ GenericLoad() //ReadDataFromBlock("Loading PedPool \n", CPools::LoadPedPool); LoadSaveDataBlock(); ReadDataFromBlock("Loading Garages \n", CGarages::Load); - LoadSaveDataBlock(); - ReadDataFromBlock("Loading GameLogic \n", CGameLogic::Load); - LoadSaveDataBlock(); - ReadDataFromBlock("Loading Vehicles \n", CPools::LoadVehiclePool); - LoadSaveDataBlock(); + //LoadSaveDataBlock(); + //ReadDataFromBlock("Loading GameLogic \n", CGameLogic::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", CCranes::Load); - 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(); - ReadDataFromBlock("Loading Particles \n", CParticleObject::LoadParticle); - LoadSaveDataBlock(); - ReadDataFromBlock("Loading AudioScript Objects \n", cAudioScriptObject::LoadAllAudioScriptObjects); - LoadSaveDataBlock(); - ReadDataFromBlock("Loading ScriptPaths \n", CScriptPaths::Load); + //ReadDataFromBlock("Loading Objects \n", CPools::LoadObjectPool); + //LoadSaveDataBlock(); + //ReadDataFromBlock("Loading Paths \n", ThePaths.Load); + //LoadSaveDataBlock(); + //ReadDataFromBlock("Loading Cranes \n", CCranes::Load); + //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(); + //ReadDataFromBlock("Loading Particles \n", CParticleObject::LoadParticle); + //LoadSaveDataBlock(); + //ReadDataFromBlock("Loading AudioScript Objects \n", cAudioScriptObject::LoadAllAudioScriptObjects); + //LoadSaveDataBlock(); + //ReadDataFromBlock("Loading ScriptPaths \n", CScriptPaths::Load); LoadSaveDataBlock(); ReadDataFromBlock("Loading Player Info \n", CWorld::Players[CWorld::PlayerInFocus].LoadPlayerInfo); LoadSaveDataBlock(); ReadDataFromBlock("Loading Stats \n", CStats::LoadStats); - LoadSaveDataBlock(); - ReadDataFromBlock("Loading Set Pieces \n", CSetPieces::Load); - LoadSaveDataBlock(); - ReadDataFromBlock("Loading Streaming Stuff \n", CStreaming::MemoryCardLoad); - LoadSaveDataBlock(); - ReadDataFromBlock("Loading PedType Stuff \n", CPedType::Load); - + //LoadSaveDataBlock(); + //ReadDataFromBlock("Loading Set Pieces \n", CSetPieces::Load); + //LoadSaveDataBlock(); + //ReadDataFromBlock("Loading Streaming Stuff \n", CStreaming::MemoryCardLoad); + //LoadSaveDataBlock(); + //ReadDataFromBlock("Loading PedType Stuff \n", CPedType::Load); + CStreaming::ReInit(); DMAudio.SetMusicMasterVolume(FrontEndMenuManager.m_PrefsMusicVolume); DMAudio.SetEffectsMasterVolume(FrontEndMenuManager.m_PrefsSfxVolume); if (!CloseFile(file)) { @@ -423,7 +423,7 @@ GenericLoad() return false; } - DoGameSpecificStuffAfterSucessLoad(); + //DoGameSpecificStuffAfterSucessLoad(); debug("Game successfully loaded \n"); return true; } diff --git a/src/skel/win/win.cpp b/src/skel/win/win.cpp index 268d6771..a6d8bea8 100644 --- a/src/skel/win/win.cpp +++ b/src/skel/win/win.cpp @@ -2558,7 +2558,7 @@ WinMain(HINSTANCE instance, CGame::InitialiseWhenRestarting(); DMAudio.ChangeMusicMode(MUSICMODE_GAME); LoadSplash(GetLevelSplashScreen(CGame::currLevel)); - FrontEndMenuManager.m_bWantToLoad = false; + //FrontEndMenuManager.m_bWantToLoad = false; } else { -- cgit v1.2.3