diff options
Diffstat (limited to 'src/core/Game.cpp')
-rw-r--r-- | src/core/Game.cpp | 718 |
1 files changed, 302 insertions, 416 deletions
diff --git a/src/core/Game.cpp b/src/core/Game.cpp index b3dd1eda..3a8cdb06 100644 --- a/src/core/Game.cpp +++ b/src/core/Game.cpp @@ -41,6 +41,7 @@ #include "MBlur.h" #include "Messages.h" #include "MemoryCard.h" +#include "MemoryHeap.h" #include "Pad.h" #include "Particle.h" #include "ParticleObject.h" @@ -62,6 +63,7 @@ #include "Script.h" #include "Shadows.h" #include "Skidmarks.h" +#include "SetPieces.h" #include "SpecialFX.h" #include "Stats.h" #include "Streaming.h" @@ -81,17 +83,21 @@ #include "World.h" #include "ZoneCull.h" #include "Zones.h" +#include "Occlusion.h" #include "debugmenu.h" +#include "Ropes.h" +#include "WindModifiers.h" +#include "WaterCreatures.h" #include "postfx.h" #include "custompipes.h" #include "screendroplets.h" -#include "crossplatform.h" -#include "MemoryHeap.h" +#include "VarConsole.h" #ifdef USE_TEXTURE_POOL #include "TexturePools.h" #endif eLevelName CGame::currLevel; +int32 CGame::currArea; bool CGame::bDemoMode = true; bool CGame::nastyGame = true; bool CGame::frenchGame; @@ -103,15 +109,24 @@ char CGame::aDatFile[32]; bool CGame::russianGame = false; bool CGame::japaneseGame = false; #endif +#ifndef MASTER +CVector CGame::PlayerCoords; +bool8 CGame::VarUpdatePlayerCoords; +#endif int gameTxdSlot; +#ifdef SECUROM +uint8 gameProcessPirateCheck = 0; +#endif bool DoRWStuffStartOfFrame(int16 TopRed, int16 TopGreen, int16 TopBlue, int16 BottomRed, int16 BottomGreen, int16 BottomBlue, int16 Alpha); void DoRWStuffEndOfFrame(void); #ifdef PS2_MENU void MessageScreen(char *msg) { + //TODO: stretch_screen + CRect rect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT); CRGBA color(255, 255, 255, 255); @@ -123,32 +138,20 @@ void MessageScreen(char *msg) CSprite2d *splash = LoadSplash(NULL); splash->Draw(rect, color, color, color, color); -#ifdef FIX_BUGS - splash->DrawRect(CRect(SCREEN_SCALE_X(20.0f), SCREEN_SCALE_Y(110.0f), SCREEN_WIDTH-SCREEN_SCALE_X(20.0f), SCREEN_SCALE_Y(300.0f)), CRGBA(50, 50, 50, 192)); -#else - splash->DrawRect(CRect(20.0f, 110.0f, SCREEN_WIDTH-20.0f, 300.0f), CRGBA(50, 50, 50, 192)); -#endif + splash->DrawRect(CRect(SCREEN_SCALE_X(20.0f), SCREEN_SCALE_Y(110.0f), SCREEN_SCALE_X(620.0f), SCREEN_SCALE_Y(300.0f)), CRGBA(50, 50, 50, 192)); + CFont::SetFontStyle(FONT_BANK); CFont::SetBackgroundOff(); - CFont::SetWrapx(SCREEN_SCALE_FROM_RIGHT(190)); -#ifdef FIX_BUGS + CFont::SetWrapx(SCREEN_SCALE_FROM_RIGHT(190.0f)); // 450.0f CFont::SetScale(SCREEN_SCALE_X(1.0f), SCREEN_SCALE_Y(1.0f)); -#else - CFont::SetScale(1.0f, 1.0f); -#endif CFont::SetCentreOn(); - CFont::SetCentreSize(SCREEN_SCALE_X(DEFAULT_SCREEN_WIDTH - 190)); // 450.0f + CFont::SetCentreSize(SCREEN_SCALE_X(450.0f)); CFont::SetJustifyOff(); CFont::SetColor(CRGBA(255, 255, 255, 255)); CFont::SetDropColor(CRGBA(32, 32, 32, 255)); CFont::SetDropShadowPosition(3); - CFont::SetBackGroundOnlyTextOff(); CFont::SetPropOn(); -#ifdef FIX_BUGS - CFont::PrintString(SCREEN_WIDTH/2, SCREEN_SCALE_Y(130.0f), TheText.Get(msg)); -#else - CFont::PrintString(SCREEN_WIDTH/2, 130.0f, TheText.Get(msg)); -#endif + CFont::PrintString(SCREEN_SCALE_X(320.0f), SCREEN_SCALE_Y(130.0f), TheText.Get(msg)); CFont::DrawFonts(); DoRWStuffEndOfFrame(); @@ -160,7 +163,11 @@ CGame::InitialiseOnceBeforeRW(void) { CFileMgr::Initialise(); CdStreamInit(MAX_CDCHANNELS); - ValidateVersion(); + debug("size of matrix %d\n", sizeof(CMatrix)); + debug("size of placeable %d\n", sizeof(CPlaceable)); + debug("size of entity %d\n", sizeof(CEntity)); + debug("size of building %d\n", sizeof(CBuilding)); + debug("size of dummy %d\n", sizeof(CDummy)); #ifdef EXTENDED_COLOURFILTER CPostFX::InitOnce(); #endif @@ -184,16 +191,13 @@ void ReplaceAtomicPipeCallback(); bool CGame::InitialiseRenderWare(void) { + ValidateVersion(); #ifdef USE_TEXTURE_POOL _TexturePoolsInitialise(); #endif -#if GTA_VERSION > GTA3_PS2_160 - CTxdStore::Initialise(); // in GameInit on ps2 - CVisibilityPlugins::Initialise(); // in plugin attach on ps2 -#endif - - //InitialiseScene(Scene); // PS2 only, only clears Scene.camera + CTxdStore::Initialise(); + CVisibilityPlugins::Initialise(); #ifdef GTA_PS2 RpSkySelectTrueTSClipper(TRUE); @@ -213,7 +217,7 @@ CGame::InitialiseRenderWare(void) return (false); } - RwCameraSetFarClipPlane(Scene.camera, 2000.0f); // 250.0f on PS2 but who cares + RwCameraSetFarClipPlane(Scene.camera, 2000.0f); RwCameraSetNearClipPlane(Scene.camera, 0.9f); CameraSize(Scene.camera, nil, DEFAULT_VIEWWINDOW, DEFAULT_ASPECT_RATIO); @@ -237,11 +241,7 @@ CGame::InitialiseRenderWare(void) RpWorldAddCamera(Scene.world, Scene.camera); LightsCreate(Scene.world); -#if GTA_VERSION > GTA3_PS2_160 - CreateDebugFont(); // in GameInit on PS2 -#else - RwImageSetPath("textures"); -#endif + CreateDebugFont(); #ifdef LIBRW #ifdef PS2_MATFX @@ -253,7 +253,7 @@ CGame::InitialiseRenderWare(void) rw::MatFX::envMapUseMatColor = false; rw::MatFX::envMapFlipU = false; #endif - rw::RGBA envcol = { 128, 128, 128, 255 }; + rw::RGBA envcol = { 64, 64, 64, 255 }; rw::MatFX::envMapColor = envcol; #else #ifdef PS2_MATFX @@ -264,17 +264,12 @@ CGame::InitialiseRenderWare(void) #endif // PS2_ALPHA_TEST #endif // LIBRW - -#if GTA_VERSION > GTA3_PS2_160 - // in GameInit on PS2 PUSH_MEMID(MEMID_TEXTURES); CFont::Initialise(); CHud::Initialise(); - POP_MEMID(); - // TODO: define CPlayerSkin::Initialise(); -#endif - + POP_MEMID(); + #ifdef EXTENDED_PIPELINES CustomPipes::CustomPipeInit(); // need Scene.world for this #endif @@ -285,7 +280,6 @@ CGame::InitialiseRenderWare(void) return (true); } -// missing altogether on PS2 void CGame::ShutdownRenderWare(void) { #ifdef SCREEN_DROPLETS @@ -295,7 +289,6 @@ void CGame::ShutdownRenderWare(void) CustomPipes::CustomPipeShutdown(); #endif - CMBlur::MotionBlurClose(); DestroySplashScreen(); CHud::Shutdown(); CFont::Shutdown(); @@ -303,7 +296,6 @@ void CGame::ShutdownRenderWare(void) for ( int32 i = 0; i < NUMPLAYERS; i++ ) CWorld::Players[i].DeletePlayerSkin(); - // TODO: define CPlayerSkin::Shutdown(); DestroyDebugFont(); @@ -326,64 +318,41 @@ void CGame::ShutdownRenderWare(void) #endif } -// missing altogether on PS2 bool CGame::InitialiseOnceAfterRW(void) { -#if GTA_VERSION > GTA3_PS2_160 TheText.Load(); - DMAudio.Initialise(); // before TheGame() on PS2 CTimer::Initialise(); CTempColModels::Initialise(); mod_HandlingManager.Initialise(); CSurfaceTable::Initialise("DATA\\SURFACE.DAT"); CPedStats::Initialise(); CTimeCycle::Initialise(); +#ifdef GTA_PS2 + LoadingScreen("Loading the Game", "Initialising audio", GetRandomSplashScreen()); +#endif + DMAudio.Initialise(); #ifndef GTA_PS2 if ( DMAudio.GetNum3DProvidersAvailable() == 0 ) - FrontEndMenuManager.m_nPrefsAudio3DProviderIndex = -1; - - if ( FrontEndMenuManager.m_nPrefsAudio3DProviderIndex == -99 || FrontEndMenuManager.m_nPrefsAudio3DProviderIndex == -2 ) { - CMenuManager::m_PrefsSpeakers = 0; - int32 i; - for (i = 0; i < DMAudio.GetNum3DProvidersAvailable(); i++) { - wchar buff[64]; - -#ifdef AUDIO_OAL - extern int defaultProvider; - if (defaultProvider >= 0 && defaultProvider < DMAudio.GetNum3DProvidersAvailable()) - break; -#endif - char *name = DMAudio.Get3DProviderName(i); - AsciiToUnicode(name, buff); - char *providername = UnicodeToAscii(buff); - strupr(providername); -#if defined(AUDIO_MSS) - if (strcmp(providername, "MILES FAST 2D POSITIONAL AUDIO") == 0) - break; -#elif defined(AUDIO_OAL) - if (strcmp(providername, "OPENAL SOFT") == 0) - break; -#endif - } + FrontEndMenuManager.m_nPrefsAudio3DProviderIndex = NO_AUDIO_PROVIDER; - FrontEndMenuManager.m_nPrefsAudio3DProviderIndex = i; + if ( FrontEndMenuManager.m_nPrefsAudio3DProviderIndex == AUDIO_PROVIDER_NOT_DETERMINED || FrontEndMenuManager.m_nPrefsAudio3DProviderIndex == -2 ) + { + FrontEndMenuManager.m_PrefsSpeakers = 0; + FrontEndMenuManager.m_nPrefsAudio3DProviderIndex = DMAudio.AutoDetect3DProviders(); } DMAudio.SetCurrent3DProvider(FrontEndMenuManager.m_nPrefsAudio3DProviderIndex); - DMAudio.SetSpeakerConfig(CMenuManager::m_PrefsSpeakers); - DMAudio.SetDynamicAcousticModelingStatus(CMenuManager::m_PrefsDMA); - DMAudio.SetMusicMasterVolume(CMenuManager::m_PrefsMusicVolume); - DMAudio.SetEffectsMasterVolume(CMenuManager::m_PrefsSfxVolume); + DMAudio.SetSpeakerConfig(FrontEndMenuManager.m_PrefsSpeakers); + DMAudio.SetDynamicAcousticModelingStatus(FrontEndMenuManager.m_PrefsDMA); + DMAudio.SetMusicMasterVolume(FrontEndMenuManager.m_PrefsMusicVolume); + DMAudio.SetEffectsMasterVolume(FrontEndMenuManager.m_PrefsSfxVolume); DMAudio.SetEffectsFadeVol(127); DMAudio.SetMusicFadeVol(127); #endif - CWorld::Players[0].SetPlayerSkin(CMenuManager::m_PrefsSkinFile); -#endif return true; } -// missing altogether on PS2 void CGame::FinalShutdown(void) { @@ -392,31 +361,29 @@ CGame::FinalShutdown(void) CdStreamShutdown(); } -#if GTA_VERSION <= GTA3_PS2_160 -bool CGame::Initialise(void) -#else bool CGame::Initialise(const char* datFile) -#endif { + ResetLoadingScreenBar(); + strcpy(aDatFile, datFile); + #ifdef GTA_PS2 // TODO: upload VU0 collision code here #endif -#if GTA_VERSION > GTA3_PS2_160 - ResetLoadingScreenBar(); - strcpy(aDatFile, datFile); - CPools::Initialise(); // done in CWorld on PS2 -#endif + CPools::Initialise(); #ifndef GTA_PS2 #ifdef PED_CAR_DENSITY_SLIDERS - // Load density values from gta3.ini only if our re3.ini have them 1.f - if (CIniFile::PedNumberMultiplier == 1.f && CIniFile::CarNumberMultiplier == 1.f) + // Load density values from gta3.ini only if our reVC.ini have them 0.6f + if (CIniFile::PedNumberMultiplier == 0.6f && CIniFile::CarNumberMultiplier == 0.6f) #endif CIniFile::LoadIniFile(); #endif - - currLevel = LEVEL_INDUSTRIAL; +#ifdef USE_TEXTURE_POOL + _TexturePoolsUnknown(false); +#endif + currLevel = LEVEL_BEACH; + currArea = AREA_MAIN_MAP; PUSH_MEMID(MEMID_TEXTURES); LoadingScreen("Loading the Game", "Loading generic textures", GetRandomSplashScreen()); @@ -448,18 +415,16 @@ bool CGame::Initialise(const char* datFile) CDebug::DebugInitTextBuffer(); ThePaths.Init(); ThePaths.AllocatePathFindInfoMem(4500); + CScriptPaths::Init(); CWeather::Init(); CCullZones::Init(); + COcclusion::Init(); CCollision::Init(); -#ifdef PS2_MENU // TODO: is this the right define? - TheText.Load(); -#endif + CSetPieces::Init(); CTheZones::Init(); CUserDisplay::Init(); CMessages::Init(); -#if GTA_VERSION > GTA3_PS2_160 CMessages::ClearAllMessagesDisplayedByGame(); -#endif CRecordDataForGame::Init(); CRestart::Initialise(); @@ -467,22 +432,10 @@ bool CGame::Initialise(const char* datFile) CWorld::Initialise(); POP_MEMID(); -#if GTA_VERSION <= GTA3_PS2_160 - mod_HandlingManager.Initialise(); - CSurfaceTable::Initialise("DATA\\SURFACE.DAT"); - CTempColModels::Initialise(); -#endif - PUSH_MEMID(MEMID_TEXTURES); CParticle::Initialise(); POP_MEMID(); -#if GTA_VERSION <= GTA3_PS2_160 - gStartX = -180.0f; - gStartY = 180.0f; - gStartZ = 14.0f; -#endif - PUSH_MEMID(MEMID_ANIMATION); CAnimManager::Initialise(); CCutsceneMgr::Initialise(); @@ -493,13 +446,8 @@ bool CGame::Initialise(const char* datFile) POP_MEMID(); PUSH_MEMID(MEMID_DEF_MODELS); -#if GTA_VERSION > GTA3_PS2_160 InitModelIndices(); -#endif CModelInfo::Initialise(); - -#if GTA_VERSION > GTA3_PS2_160 - // probably moved before LoadLevel for multiplayer maps? CPickups::Init(); CTheCarGenerators::Init(); @@ -507,55 +455,42 @@ bool CGame::Initialise(const char* datFile) CFileLoader::LoadLevel("DATA\\DEFAULT.DAT"); CFileLoader::LoadLevel(datFile); -#else - CPedStats::Initialise(); // InitialiseOnceAfterRW - - CFileLoader::LoadLevel("GTA3.DAT"); -#endif + LoadingScreen("Loading the Game", "Add Particles", nil); CWorld::AddParticles(); CVehicleModelInfo::LoadVehicleColours(); CVehicleModelInfo::LoadEnvironmentMaps(); CTheZones::PostZoneCreation(); POP_MEMID(); -#if GTA_VERSION <= GTA3_PS2_160 - TestModelIndices(); -#endif - LoadingScreen("Loading the Game", "Setup paths", GetRandomSplashScreen()); + LoadingScreen("Loading the Game", "Setup paths", nil); ThePaths.PreparePathData(); -#if GTA_VERSION > GTA3_PS2_160 for (int i = 0; i < NUMPLAYERS; i++) CWorld::Players[i].Clear(); CWorld::Players[0].LoadPlayerSkin(); TestModelIndices(); -#endif LoadingScreen("Loading the Game", "Setup water", nil); CWaterLevel::Initialise("DATA\\WATER.DAT"); -#if GTA_VERSION <= GTA3_PS2_160 - CTimeCycle::Initialise(); // InitialiseOnceAfterRW -#else TheConsole.Init(); -#endif CDraw::SetFOV(120.0f); CDraw::ms_fLODDistance = 500.0f; LoadingScreen("Loading the Game", "Setup streaming", nil); - CStreaming::Init(); CStreaming::LoadInitialVehicles(); CStreaming::LoadInitialPeds(); CStreaming::RequestBigBuildings(LEVEL_GENERIC); CStreaming::LoadAllRequestedModels(false); -#if GTA_VERSION > GTA3_PS2_160 + CStreaming::RemoveIslandsNotUsed(currLevel); printf("Streaming uses %zuK of its memory", CStreaming::ms_memoryUsed / 1024); // original modifier was %d -#endif LoadingScreen("Loading the Game", "Load animations", GetRandomSplashScreen()); PUSH_MEMID(MEMID_ANIMATION); CAnimManager::LoadAnimFiles(); POP_MEMID(); + CStreaming::LoadInitialWeapons(); + CStreaming::LoadAllRequestedModels(0); CPed::Initialise(); CRouteNode::Initialise(); CEventList::Initialise(); @@ -576,11 +511,6 @@ bool CGame::Initialise(const char* datFile) LoadingScreen("Loading the Game", "Setup game variables", nil); CPopulation::Initialise(); -#if GTA_VERSION <= GTA3_PS2_160 - for (int i = 0; i < NUMPLAYERS; i++) - CWorld::Players[i].Clear(); -// CWorld::Players[0].LoadPlayerSkin(); // TODO: use a define for this -#endif CWorld::PlayerInFocus = 0; CCoronas::Init(); CShadows::Init(); @@ -600,47 +530,24 @@ bool CGame::Initialise(const char* datFile) POP_MEMID(); LoadingScreen("Loading the Game", "Setup game variables", nil); -#if GTA_VERSION <= GTA3_PS2_160 - CTimer::Initialise(); -#endif CClock::Initialise(1000); -#if GTA_VERSION <= GTA3_PS2_160 - CTheCarGenerators::Init(); -#endif CHeli::InitHelis(); CCranes::InitCranes(); CMovingThings::Init(); CDarkel::Init(); CStats::Init(); -#if GTA_VERSION <= GTA3_PS2_160 - CPickups::Init(); -#endif CPacManPickups::Init(); -#if GTA_VERSION <= GTA3_PS2_160 - CGarages::Init(); -#endif CRubbish::Init(); CClouds::Init(); -#if GTA_VERSION <= GTA3_PS2_160 - CRemote::Init(); -#endif CSpecialFX::Init(); + CRopes::Init(); CWaterCannons::Init(); CBridge::Init(); -#if GTA_VERSION > GTA3_PS2_160 CGarages::Init(); -#endif LoadingScreen("Loading the Game", "Position dynamic objects", nil); - CWorld::RepositionCertainDynamicObjects(); -#if GTA_VERSION <= GTA3_PS2_160 - CCullZones::ResolveVisibilities(); -#endif - LoadingScreen("Loading the Game", "Initialise vehicle paths", nil); -#if GTA_VERSION > GTA3_PS2_160 - CCullZones::ResolveVisibilities(); -#endif + CTrain::InitTrains(); CPlane::InitPlanes(); CCredits::Init(); @@ -658,27 +565,44 @@ bool CGame::Initialise(const char* datFile) } LoadingScreen("Loading the Game", "Load scene", nil); - CModelInfo::RemoveColModelsFromOtherLevels(currLevel); CCollision::ms_collisionInMemory = currLevel; for (int i = 0; i < MAX_PADS; i++) CPad::GetPad(i)->Clear(true); +#ifdef USE_TEXTURE_POOL + _TexturePoolsUnknown(true); +#endif + +#ifndef MASTER + PlayerCoords = FindPlayerCoors(); + VarConsole.Add("X PLAYER COORD", &PlayerCoords.x, 10.0f, -10000.0f, 10000.0f, true); + VarConsole.Add("Y PLAYER COORD", &PlayerCoords.y, 10.0f, -10000.0f, 10000.0f, true); + VarConsole.Add("Z PLAYER COORD", &PlayerCoords.z, 10.0f, -10000.0f, 10000.0f, true); + VarConsole.Add("UPDATE PLAYER COORD", &VarUpdatePlayerCoords, true); +#endif + + + DMAudio.SetStartingTrackPositions(TRUE); + DMAudio.ChangeMusicMode(MUSICMODE_GAME); return true; } bool CGame::ShutDown(void) { +#ifdef USE_TEXTURE_POOL + _TexturePoolsUnknown(false); +#endif CReplay::FinishPlayback(); + CReplay::EmptyReplayBuffer(); CPlane::Shutdown(); CTrain::Shutdown(); + CScriptPaths::Shutdown(); + CWaterCreatures::RemoveAll(); CSpecialFX::Shutdown(); -#if GTA_VERSION > GTA3_PS2_160 CGarages::Shutdown(); -#endif CMovingThings::Shutdown(); gPhoneInfo.Shutdown(); CWeapon::ShutdownWeapons(); CPedType::Shutdown(); - CMBlur::MotionBlurClose(); for (int32 i = 0; i < NUMPLAYERS; i++) { @@ -712,11 +636,14 @@ bool CGame::ShutDown(void) CSkidmarks::Shutdown(); CWeaponEffects::Shutdown(); CParticle::Shutdown(); -#if GTA_VERSION > GTA3_PS2_160 CPools::ShutDown(); -#endif + CHud::ReInitialise(); CTxdStore::RemoveTxdSlot(gameTxdSlot); + CMBlur::MotionBlurClose(); CdStreamRemoveImages(); +#ifdef USE_TEXTURE_POOL + _TexturePoolsFinalShutdown(); +#endif return true; } @@ -738,17 +665,15 @@ void CGame::ReInitGameObjectVariables(void) CWorld::bDoingCarCollisions = false; CHud::ReInitialise(); CRadar::Initialise(); -#if GTA_VERSION <= GTA3_PS2_160 - gStartX = -180.0f; - gStartY = 180.0f; - gStartZ = 14.0f; -#endif CCarCtrl::ReInit(); CTimeCycle::Initialise(); CDraw::SetFOV(120.0f); CDraw::ms_fLODDistance = 500.0f; CStreaming::RequestBigBuildings(LEVEL_GENERIC); + CStreaming::RemoveIslandsNotUsed(LEVEL_BEACH); + CStreaming::RemoveIslandsNotUsed(LEVEL_MAINLAND); CStreaming::LoadAllRequestedModels(false); + currArea = AREA_MAIN_MAP; CPed::Initialise(); CEventList::Initialise(); #ifdef SCREEN_DROPLETS @@ -761,10 +686,6 @@ void CGame::ReInitGameObjectVariables(void) CWorld::Players[i].Clear(); CWorld::PlayerInFocus = 0; -#if GTA_VERSION <= GTA3_PS2_160 - CWeaponEffects::Init(); - CSkidmarks::Init(); -#endif CAntennas::Init(); CGlass::Init(); gPhoneInfo.Initialise(); @@ -784,14 +705,11 @@ void CGame::ReInitGameObjectVariables(void) CPickups::Init(); CPacManPickups::Init(); CGarages::Init(); -#if GTA_VERSION <= GTA3_PS2_160 - CClouds::Init(); - CRemote::Init(); -#endif CSpecialFX::Init(); + CRopes::Init(); CWaterCannons::Init(); + CScriptPaths::Init(); CParticle::ReloadConfig(); - CCullZones::ResolveVisibilities(); #ifdef PS2_MENU if ( !TheMemoryCard.m_bWantToLoad ) @@ -813,31 +731,18 @@ void CGame::ReInitGameObjectVariables(void) void CGame::ReloadIPLs(void) { - CTimer::Stop(); - CWorld::RemoveStaticObjects(); - ThePaths.Init(); - CCullZones::Init(); - CFileLoader::ReloadPaths("GTA3.IDE"); - CFileLoader::LoadScene("INDUST.IPL"); - CFileLoader::LoadScene("COMMER.IPL"); - CFileLoader::LoadScene("SUBURBAN.IPL"); - CFileLoader::LoadScene("CULL.IPL"); - ThePaths.PreparePathData(); - CTrafficLights::ScanForLightsOnMap(); - CRoadBlocks::Init(); - CCranes::InitCranes(); - CGarages::Init(); - CWorld::RepositionCertainDynamicObjects(); - CCullZones::ResolveVisibilities(); - CRenderer::SortBIGBuildings(); - CTimer::Update(); + // Empty and unused } void CGame::ShutDownForRestart(void) { +#ifdef USE_TEXTURE_POOL + _TexturePoolsUnknown(false); +#endif CReplay::FinishPlayback(); CReplay::EmptyReplayBuffer(); DMAudio.DestroyAllGameCreatedEntities(); + CMovingThings::Shutdown(); for (int i = 0; i < NUMPLAYERS; i++) CWorld::Players[i].Clear(); @@ -846,19 +751,16 @@ void CGame::ShutDownForRestart(void) CTheScripts::UndoBuildingSwaps(); CTheScripts::UndoEntityInvisibilitySettings(); CWorld::ClearForRestart(); + CGameLogic::ClearShortCut(); CTimer::Shutdown(); - CStreaming::FlushRequestList(); - CStreaming::DeleteAllRwObjects(); - CStreaming::RemoveAllUnusedModels(); - CStreaming::ms_disableStreaming = false; + CStreaming::ReInit(); CRadar::RemoveRadarSections(); FrontEndMenuManager.UnloadTextures(); - CParticleObject::RemoveAllParticleObjects(); -#if GTA_VERSION >= GTA3_PS2_160 + CParticleObject::RemoveAllExpireableParticleObjects(); + CWaterCreatures::RemoveAll(); + CSetPieces::Init(); CPedType::Shutdown(); CSpecialFX::Shutdown(); -#endif - TidyUpMemory(true, false); } void CGame::InitialiseWhenRestarting(void) @@ -869,116 +771,38 @@ void CGame::InitialiseWhenRestarting(void) CTimer::Initialise(); CSprite2d::SetRecipNearClip(); -#ifdef PS2_MENU - if ( TheMemoryCard.b_FoundRecentSavedGameWantToLoad == true || TheMemoryCard.m_bWantToLoad == false ) + if (b_FoundRecentSavedGameWantToLoad || FrontEndMenuManager.m_bWantToLoad) { - if ( TheMemoryCard.m_bWantToLoad == true ) - MessageScreen("MCLOAD"); // Loading Data. Please do not remove the Memory Card (PS2) in MEMORY CARD slot 1, reset or switch off the console. - else - MessageScreen("RESTART"); // Starting new game - } + LoadSplash("splash1"); +#ifndef XBOX_MESSAGE_SCREEN + if (FrontEndMenuManager.m_bWantToLoad) + FrontEndMenuManager.MessageScreen("FELD_WR", true); #endif - -#ifdef PS2_MENU - TheMemoryCard.b_FoundRecentSavedGameWantToLoad = false; -#else + } + b_FoundRecentSavedGameWantToLoad = false; -#endif TheCamera.Init(); -#ifdef PS2_MENU - if ( TheMemoryCard.m_bWantToLoad == true ) - { - TheMemoryCard.RestoreForStartLoad(); - CStreaming::LoadScene(TheCamera.GetPosition()); - } -#else if ( FrontEndMenuManager.m_bWantToLoad == true ) { +#ifdef XBOX_MESSAGE_SCREEN + FrontEndMenuManager.SetDialogTimer(1000); + DoRWStuffStartOfFrame(0, 0, 0, 0, 0, 0, 0); + CSprite2d::InitPerFrame(); + CFont::InitPerFrame(); + FrontEndMenuManager.DrawOverlays(); + DoRWStuffEndOfFrame(); +#endif RestoreForStartLoad(); - CStreaming::LoadScene(TheCamera.GetPosition()); } -#endif ReInitGameObjectVariables(); -#ifdef PS2_MENU - if ( TheMemoryCard.m_bWantToLoad == true ) - { - if ( TheMemoryCard.LoadSavedGame() == CMemoryCard::RES_SUCCESS ) - { - for ( int32 i = 0; i < 35; i++ ) - { - MessageScreen("FESZ_LS"); // Load Successful. - } - - DMAudio.ResetTimers(CTimer::GetTimeInMilliseconds()); - CTrain::InitTrains(); - CPlane::InitPlanes(); - } - else - { - for ( int32 i = 0; i < 50; i++ ) - { - DoRWStuffStartOfFrame(50, 50, 50, 0, 0, 0, 255); - - CSprite2d::InitPerFrame(); - CFont::InitPerFrame(); - DefinedState(); - - CSprite2d *splash = LoadSplash(NULL); - splash->Draw(rect, color, color, color, color); -#ifdef FIX_BUGS - splash->DrawRect(CRect(SCREEN_SCALE_X(20.0f), SCREEN_SCALE_Y(110.0f), SCREEN_SCALE_FROM_RIGHT(20.0f), SCREEN_SCALE_Y(300.0f)), CRGBA(50, 50, 50, 192)); -#else - splash->DrawRect(CRect(20.0f, 110.0f, SCREEN_WIDTH-20.0f, 300.0f), CRGBA(50, 50, 50, 192)); -#endif - - CFont::SetBackgroundOff(); -#ifdef ASPECT_RATIO_SCALE - CFont::SetWrapx(SCREEN_SCALE_FROM_RIGHT(160.0f)); // because SCREEN_SCALE_FROM_RIGHT(x) != SCREEN_SCALE_X(640-x) -#else - CFont::SetWrapx(SCREEN_SCALE_X(480.0f)); -#endif - CFont::SetScale(SCREEN_SCALE_X(1.0f), SCREEN_SCALE_Y(1.0f)); - CFont::SetCentreOn(); - CFont::SetCentreSize(SCREEN_SCALE_X(480.0f)); - CFont::SetJustifyOff(); - CFont::SetColor(CRGBA(255, 255, 255, 255)); - CFont::SetBackGroundOnlyTextOff(); - CFont::SetDropColor(CRGBA(32, 32, 32, 255)); - CFont::SetDropShadowPosition(3); - CFont::SetPropOn(); -#ifdef FIX_BUGS - CFont::PrintString(SCREEN_WIDTH/2, SCREEN_SCALE_Y(130.0f), TheText.Get("MC_LDFL")); // Load Failed! - CFont::PrintString(SCREEN_WIDTH/2, SCREEN_SCALE_Y(170.0f), TheText.Get("FES_NOC")); // No Memory Card (PS2) in MEMORY CARD slot 1. - CFont::PrintString(SCREEN_WIDTH/2, SCREEN_SCALE_Y(240.0f), TheText.Get("MC_NWRE")); // Now Restarting Game. -#else - CFont::PrintString(SCREEN_WIDTH/2, 130.0f, TheText.Get("MC_LDFL")); // Load Failed! - CFont::PrintString(SCREEN_WIDTH/2, 170.0f, TheText.Get("FES_NOC")); // No Memory Card (PS2) in MEMORY CARD slot 1. - CFont::PrintString(SCREEN_WIDTH/2, 240.0f, TheText.Get("MC_NWRE")); // Now Restarting Game. -#endif - CFont::DrawFonts(); - - DoRWStuffEndOfFrame(); - } - - ShutDownForRestart(); - CTimer::Stop(); - CTimer::Initialise(); - TheMemoryCard.m_bWantToLoad = false; - ReInitGameObjectVariables(); - currLevel = LEVEL_INDUSTRIAL; - CCollision::SortOutCollisionAfterLoad(); - - FrontEndMenuManager.SetSoundLevelsForMusicMenu(); - FrontEndMenuManager.InitialiseMenuContentsAfterLoadingGame(); - } - } -#else if ( FrontEndMenuManager.m_bWantToLoad == true ) { + FrontEndMenuManager.m_bWantToLoad = false; + InitRadioStationPositionList(); if ( GenericLoad() == true ) { DMAudio.ResetTimers(CTimer::GetTimeInMilliseconds()); @@ -990,23 +814,29 @@ void CGame::InitialiseWhenRestarting(void) for ( int32 i = 0; i < 50; i++ ) { HandleExit(); - FrontEndMenuManager.MessageScreen("FED_LFL"); // Loading save game has failed. The game will restart now. + FrontEndMenuManager.MessageScreen("FED_LFL", true); // Loading save game has failed. The game will restart now. } + TheCamera.SetFadeColour(0, 0, 0); ShutDownForRestart(); CTimer::Stop(); CTimer::Initialise(); FrontEndMenuManager.m_bWantToLoad = false; ReInitGameObjectVariables(); - currLevel = LEVEL_INDUSTRIAL; + currLevel = LEVEL_GENERIC; CCollision::SortOutCollisionAfterLoad(); } - } +#ifdef XBOX_MESSAGE_SCREEN + FrontEndMenuManager.ProcessDialogTimer(); #endif + } CTimer::Update(); DMAudio.ChangeMusicMode(MUSICMODE_GAME); +#ifdef USE_TEXTURE_POOL + _TexturePoolsUnknown(true); +#endif } void CGame::Process(void) @@ -1015,23 +845,35 @@ void CGame::Process(void) #ifdef USE_CUSTOM_ALLOCATOR ProcessTidyUpMemory(); #endif - TheCamera.SetMotionBlurAlpha(0); - if (TheCamera.m_BlurType == MOTION_BLUR_NONE || TheCamera.m_BlurType == MOTION_BLUR_SNIPER || TheCamera.m_BlurType == MOTION_BLUR_LIGHT_SCENE) - TheCamera.SetMotionBlur(0, 0, 0, 0, MOTION_BLUR_NONE); #ifdef DEBUGMENU DebugMenuProcess(); #endif CCutsceneMgr::Update(); - PUSH_MEMID(MEMID_FRONTEND); if (!CCutsceneMgr::IsCutsceneProcessing() && !CTimer::GetIsCodePaused()) FrontEndMenuManager.Process(); - POP_MEMID(); + CTheZones::Update(); +#ifdef SECUROM + if (CTimer::GetTimeInMilliseconds() >= (35 * 60 * 1000) && gameProcessPirateCheck == 0){ + // if game not pirated + // gameProcessPirateCheck = 1; + // else + gameProcessPirateCheck = 2; + } +#endif + uint32 startTime = CTimer::GetCurrentTimeInCycles() / CTimer::GetCyclesPerMillisecond(); CStreaming::Update(); + uint32 processTime = CTimer::GetCurrentTimeInCycles() / CTimer::GetCyclesPerMillisecond() - startTime; + CWindModifiers::Number = 0; if (!CTimer::GetIsPaused()) { - CTheZones::Update(); +#ifndef MASTER + if (VarUpdatePlayerCoords) { + FindPlayerPed()->Teleport(PlayerCoords); + VarUpdatePlayerCoords = false; + } +#endif CSprite2d::SetRecipNearClip(); CSprite2d::InitPerFrame(); CFont::InitPerFrame(); @@ -1046,6 +888,7 @@ void CGame::Process(void) POP_MEMID(); CCollision::Update(); + CScriptPaths::Update(); CTrain::UpdateTrains(); CPlane::UpdatePlanes(); CHeli::UpdateHelis(); @@ -1056,10 +899,23 @@ void CGame::Process(void) #ifdef GTA_SCENE_EDIT CSceneEdit::Update(); #endif + CSetPieces::Update(); CEventList::Update(); CParticle::Update(); gFireManager.Update(); - CPopulation::Update(); + + // Otherwise even on 30 fps most probably you won't see any peds around Ocean View Hospital +#if defined FIX_BUGS && !defined SQUEEZE_PERFORMANCE + if (processTime > 2) { +#else + if (processTime >= 2) { +#endif + CPopulation::Update(false); + } else { + uint32 startTime = CTimer::GetCurrentTimeInCycles() / CTimer::GetCyclesPerMillisecond(); + CPopulation::Update(true); + processTime = CTimer::GetCurrentTimeInCycles() / CTimer::GetCyclesPerMillisecond() - startTime; + } CWeapon::UpdateWeapons(); if (!CCutsceneMgr::IsRunning()) CTheCarGenerators::Process(); @@ -1081,6 +937,7 @@ void CGame::Process(void) CGarages::Update(); CRubbish::Update(); CSpecialFX::Update(); + CRopes::Update(); CTimeCycle::Update(); if (CReplay::ShouldStandardCameraBeProcessed()) TheCamera.Process(); @@ -1096,9 +953,11 @@ void CGame::Process(void) if (!CReplay::IsPlayingBack()) { PUSH_MEMID(MEMID_CARS); - CCarCtrl::GenerateRandomCars(); + if (processTime < 2) + CCarCtrl::GenerateRandomCars(); CRoadBlocks::GenerateRoadBlocks(); CCarCtrl::RemoveDistantCars(); + CCarCtrl::RemoveCarsIfThePoolGetsFull(); POP_MEMID(); } } @@ -1109,15 +968,17 @@ void CGame::Process(void) #ifdef USE_CUSTOM_ALLOCATOR +// TODO(MIAMI) + int32 gNumMemMoved; bool -MoveMem(void **ptr) +MoveMem(void** ptr) { - if(*ptr){ + if (*ptr) { gNumMemMoved++; - void *newPtr = gMainHeap.MoveMemory(*ptr); - if(*ptr != newPtr){ + void* newPtr = gMainHeap.MoveMemory(*ptr); + if (*ptr != newPtr) { *ptr = newPtr; return true; } @@ -1147,21 +1008,21 @@ struct DMAGIFUpload }; // This is very scary. it depends on the exact memory layout of the DMA chains and whatnot -RwTexture * -MoveTextureMemoryCB(RwTexture *texture, void *pData) +RwTexture* +MoveTextureMemoryCB(RwTexture* texture, void* pData) { #ifdef GTA_PS2 - bool *pRet = (bool*)pData; - RwRaster *raster = RwTextureGetRaster(texture); - _SkyRasterExt *rasterExt = RASTEREXTFROMRASTER(raster); - if(raster->originalPixels == nil || // the raw data - raster->cpPixels == raster->originalPixels || // old format, can't handle it - rasterExt->dmaRefCount != 0 && rasterExt->dmaClrCount != 0) + bool* pRet = (bool*)pData; + RwRaster* raster = RwTextureGetRaster(texture); + _SkyRasterExt* rasterExt = RASTEREXTFROMRASTER(raster); + if (raster->originalPixels == nil || // the raw data + raster->cpPixels == raster->originalPixels || // old format, can't handle it + rasterExt->dmaRefCount != 0 && rasterExt->dmaClrCount != 0) return texture; // this is the allocated pointer we will move - SkyDataPrefix *prefix = (SkyDataPrefix*)raster->originalPixels; - DMAGIFUpload *uploads = (DMAGIFUpload*)(prefix+1); + SkyDataPrefix* prefix = (SkyDataPrefix*)raster->originalPixels; + DMAGIFUpload* uploads = (DMAGIFUpload*)(prefix + 1); // We have 4qw for each upload, // i.e. for each buffer width of mip levels, @@ -1178,24 +1039,24 @@ MoveTextureMemoryCB(RwTexture *texture, void *pData) uintptr dataDiff, upload1Diff, upload2Diff, pixelDiff, paletteDiff; dataDiff = prefix->data - (uintptr)raster->originalPixels; upload1Diff = uploads[0].tag2_addr - (uintptr)raster->originalPixels; - if(raster->palette) + if (raster->palette) upload2Diff = uploads[1].tag2_addr - (uintptr)raster->originalPixels; pixelDiff = (uintptr)raster->cpPixels - (uintptr)raster->originalPixels; - if(raster->palette) + if (raster->palette) paletteDiff = (uintptr)raster->palette - (uintptr)raster->originalPixels; - uint8 *newptr = (uint8*)gMainHeap.MoveMemory(raster->originalPixels); - if(newptr != raster->originalPixels){ + uint8* newptr = (uint8*)gMainHeap.MoveMemory(raster->originalPixels); + if (newptr != raster->originalPixels) { // adjust everything prefix->data = (uintptr)newptr + dataDiff; uploads[0].tag2_addr = (uintptr)newptr + upload1Diff; - if(raster->palette) + if (raster->palette) uploads[1].tag2_addr = (uintptr)newptr + upload2Diff; raster->originalPixels = newptr; raster->cpPixels = newptr + pixelDiff; - if(raster->palette) + if (raster->palette) raster->palette = newptr + paletteDiff; - if(pRet){ + if (pRet) { *pRet = true; return nil; } @@ -1207,42 +1068,42 @@ MoveTextureMemoryCB(RwTexture *texture, void *pData) } bool -MoveAtomicMemory(RpAtomic *atomic, bool onlyOne) +MoveAtomicMemory(RpAtomic* atomic, bool onlyOne) { - RpGeometry *geo = RpAtomicGetGeometry(atomic); + RpGeometry* geo = RpAtomicGetGeometry(atomic); #if THIS_IS_COMPATIBLE_WITH_GTA3_RW31 - if(MoveMem((void**)&geo->triangles) && onlyOne) + if (MoveMem((void**)&geo->triangles) && onlyOne) return true; - if(MoveMem((void**)&geo->matList.materials) && onlyOne) + if (MoveMem((void**)&geo->matList.materials) && onlyOne) return true; - if(MoveMem((void**)&geo->preLitLum) && onlyOne) + if (MoveMem((void**)&geo->preLitLum) && onlyOne) return true; - if(MoveMem((void**)&geo->texCoords[0]) && onlyOne) + if (MoveMem((void**)&geo->texCoords[0]) && onlyOne) return true; - if(MoveMem((void**)&geo->texCoords[1]) && onlyOne) + if (MoveMem((void**)&geo->texCoords[1]) && onlyOne) return true; // verts and normals of morph target are allocated together int vertDiff; - if(geo->morphTarget->normals) + if (geo->morphTarget->normals) vertDiff = geo->morphTarget->normals - geo->morphTarget->verts; - if(MoveMem((void**)&geo->morphTarget->verts)){ - if(geo->morphTarget->normals) + if (MoveMem((void**)&geo->morphTarget->verts)) { + if (geo->morphTarget->normals) geo->morphTarget->normals = geo->morphTarget->verts + vertDiff; - if(onlyOne) + if (onlyOne) return true; } - RpMeshHeader *oldmesh = geo->mesh; - if(MoveMem((void**)&geo->mesh)){ + RpMeshHeader* oldmesh = geo->mesh; + if (MoveMem((void**)&geo->mesh)) { // index pointers are allocated together with meshes, // have to relocate those too - RpMesh *mesh = (RpMesh*)(geo->mesh+1); + RpMesh* mesh = (RpMesh*)(geo->mesh + 1); uintptr reloc = (uintptr)geo->mesh - (uintptr)oldmesh; - for(int i = 0; i < geo->mesh->numMeshes; i++) + for (int i = 0; i < geo->mesh->numMeshes; i++) mesh[i].indices = (RxVertexIndex*)((uintptr)mesh[i].indices + reloc); - if(onlyOne) + if (onlyOne) return true; } #else @@ -1252,37 +1113,37 @@ MoveAtomicMemory(RpAtomic *atomic, bool onlyOne) } bool -MoveColModelMemory(CColModel &colModel, bool onlyOne) +MoveColModelMemory(CColModel& colModel, bool onlyOne) { #if GTA_VERSION >= GTA3_PS2_160 // hm...should probably only do this if ownsCollisionVolumes // but it doesn't exist on PS2... - if(!colModel.ownsCollisionVolumes) + if (!colModel.ownsCollisionVolumes) return false; #endif - if(MoveMem((void**)&colModel.spheres) && onlyOne) + if (MoveMem((void**)&colModel.spheres) && onlyOne) return true; - if(MoveMem((void**)&colModel.lines) && onlyOne) + if (MoveMem((void**)&colModel.lines) && onlyOne) return true; - if(MoveMem((void**)&colModel.boxes) && onlyOne) + if (MoveMem((void**)&colModel.boxes) && onlyOne) return true; - if(MoveMem((void**)&colModel.vertices) && onlyOne) + if (MoveMem((void**)&colModel.vertices) && onlyOne) return true; - if(MoveMem((void**)&colModel.triangles) && onlyOne) + if (MoveMem((void**)&colModel.triangles) && onlyOne) return true; - if(MoveMem((void**)&colModel.trianglePlanes) && onlyOne) + if (MoveMem((void**)&colModel.trianglePlanes) && onlyOne) return true; return false; } RpAtomic* -MoveAtomicMemoryCB(RpAtomic *atomic, void *pData) +MoveAtomicMemoryCB(RpAtomic* atomic, void* pData) { - bool *pRet = (bool*)pData; - if(pRet == nil) + bool* pRet = (bool*)pData; + if (pRet == nil) MoveAtomicMemory(atomic, false); - else if(MoveAtomicMemory(atomic, true)){ + else if (MoveAtomicMemory(atomic, true)) { *pRet = true; return nil; } @@ -1290,34 +1151,35 @@ MoveAtomicMemoryCB(RpAtomic *atomic, void *pData) } bool -TidyUpModelInfo(CBaseModelInfo *modelInfo, bool onlyone) +TidyUpModelInfo(CBaseModelInfo* modelInfo, bool onlyone) { - if(modelInfo->GetColModel() && modelInfo->DoesOwnColModel()) - if(MoveColModelMemory(*modelInfo->GetColModel(), onlyone)) + if (modelInfo->GetColModel() && modelInfo->DoesOwnColModel()) + if (MoveColModelMemory(*modelInfo->GetColModel(), onlyone)) return true; - RwObject *rwobj = modelInfo->GetRwObject(); - if(RwObjectGetType(rwobj) == rpATOMIC) - if(MoveAtomicMemory((RpAtomic*)rwobj, onlyone)) + RwObject* rwobj = modelInfo->GetRwObject(); + if (RwObjectGetType(rwobj) == rpATOMIC) + if (MoveAtomicMemory((RpAtomic*)rwobj, onlyone)) return true; - if(RwObjectGetType(rwobj) == rpCLUMP){ + if (RwObjectGetType(rwobj) == rpCLUMP) { bool ret = false; - if(onlyone) + if (onlyone) RpClumpForAllAtomics((RpClump*)rwobj, MoveAtomicMemoryCB, &ret); else RpClumpForAllAtomics((RpClump*)rwobj, MoveAtomicMemoryCB, nil); - if(ret) + if (ret) return true; } - if(modelInfo->GetModelType() == MITYPE_PED && ((CPedModelInfo*)modelInfo)->m_hitColModel) - if(MoveColModelMemory(*((CPedModelInfo*)modelInfo)->m_hitColModel, onlyone)) + if (modelInfo->GetModelType() == MITYPE_PED && ((CPedModelInfo*)modelInfo)->m_hitColModel) + if (MoveColModelMemory(*((CPedModelInfo*)modelInfo)->m_hitColModel, onlyone)) return true; return false; } #endif + void CGame::DrasticTidyUpMemory(bool flushDraw) { #ifdef USE_CUSTOM_ALLOCATOR @@ -1325,32 +1187,32 @@ void CGame::DrasticTidyUpMemory(bool flushDraw) TidyUpMemory(true, flushDraw); - if(gMainHeap.GetLargestFreeBlock() < 200000 && !playingIntro){ + if (gMainHeap.GetLargestFreeBlock() < 200000 && !playingIntro) { CStreaming::RemoveIslandsNotUsed(LEVEL_INDUSTRIAL); CStreaming::RemoveIslandsNotUsed(LEVEL_COMMERCIAL); CStreaming::RemoveIslandsNotUsed(LEVEL_SUBURBAN); TidyUpMemory(true, flushDraw); } - if(gMainHeap.GetLargestFreeBlock() < 200000 && !playingIntro){ + if (gMainHeap.GetLargestFreeBlock() < 200000 && !playingIntro) { CModelInfo::RemoveColModelsFromOtherLevels(LEVEL_GENERIC); TidyUpMemory(true, flushDraw); removedCol = true; } - if(gMainHeap.GetLargestFreeBlock() < 200000 && !playingIntro){ + if (gMainHeap.GetLargestFreeBlock() < 200000 && !playingIntro) { CStreaming::RemoveBigBuildings(LEVEL_INDUSTRIAL); CStreaming::RemoveBigBuildings(LEVEL_COMMERCIAL); CStreaming::RemoveBigBuildings(LEVEL_SUBURBAN); TidyUpMemory(true, flushDraw); } - if(removedCol){ + if (removedCol) { // different on PS2 CFileLoader::LoadCollisionFromDatFile(CCollision::ms_collisionInMemory); } - if(!playingIntro) + if (!playingIntro) CStreaming::RequestBigBuildings(currLevel); CStreaming::LoadAllRequestedModels(true); @@ -1362,49 +1224,49 @@ void CGame::TidyUpMemory(bool moveTextures, bool flushDraw) #ifdef USE_CUSTOM_ALLOCATOR printf("Largest free block before tidy %d\n", gMainHeap.GetLargestFreeBlock()); - if(moveTextures){ - if(flushDraw){ + if (moveTextures) { + if (flushDraw) { #ifdef GTA_PS2 - for(int i = 0; i < sweMaxFlips+1; i++){ + for (int i = 0; i < sweMaxFlips + 1; i++) { #else - for(int i = 0; i < 5; i++){ // probably more than needed + for (int i = 0; i < 5; i++) { // probably more than needed #endif RwCameraBeginUpdate(Scene.camera); RwCameraEndUpdate(Scene.camera); RwCameraShowRaster(Scene.camera, nil, 0); } - } + } int fontSlot = CTxdStore::FindTxdSlot("fonts"); - for(int i = 0; i < TXDSTORESIZE; i++){ - if(i == fontSlot || - CTxdStore::GetSlot(i) == nil) + for (int i = 0; i < TXDSTORESIZE; i++) { + if (i == fontSlot || + CTxdStore::GetSlot(i) == nil) continue; - RwTexDictionary *txd = CTxdStore::GetSlot(i)->texDict; - if(txd) + RwTexDictionary* txd = CTxdStore::GetSlot(i)->texDict; + if (txd) RwTexDictionaryForAllTextures(txd, MoveTextureMemoryCB, nil); } - } + } // animations - for(int i = 0; i < NUMANIMATIONS; i++){ - CAnimBlendHierarchy *anim = CAnimManager::GetAnimation(i); - if(anim == nil) + for (int i = 0; i < NUMANIMATIONS; i++) { + CAnimBlendHierarchy* anim = CAnimManager::GetAnimation(i); + if (anim == nil) continue; // cannot happen anim->MoveMemory(); } // model info - for(int i = 0; i < MODELINFOSIZE; i++){ - CBaseModelInfo *mi = CModelInfo::GetModelInfo(i); - if(mi == nil) + for (int i = 0; i < MODELINFOSIZE; i++) { + CBaseModelInfo* mi = CModelInfo::GetModelInfo(i); + if (mi == nil) continue; TidyUpModelInfo(mi, false); } printf("Largest free block after tidy %d\n", gMainHeap.GetLargestFreeBlock()); #endif -} + } void CGame::ProcessTidyUpMemory(void) { @@ -1413,52 +1275,76 @@ void CGame::ProcessTidyUpMemory(void) static int32 animIndex = 0; static int32 txdIndex = 0; bool txdReturn = false; - RwTexDictionary *txd = nil; + RwTexDictionary* txd = nil; gNumMemMoved = 0; // model infos - for(int numCleanedUp = 0; numCleanedUp < 10; numCleanedUp++){ - CBaseModelInfo *mi; - do{ + for (int numCleanedUp = 0; numCleanedUp < 10; numCleanedUp++) { + CBaseModelInfo* mi; + do { mi = CModelInfo::GetModelInfo(modelIndex); modelIndex++; - if(modelIndex >= MODELINFOSIZE) + if (modelIndex >= MODELINFOSIZE) modelIndex = 0; - }while(mi == nil); + } while (mi == nil); - if(TidyUpModelInfo(mi, true)) + if (TidyUpModelInfo(mi, true)) return; } // tex dicts - for(int numCleanedUp = 0; numCleanedUp < 3; numCleanedUp++){ - if(gNumMemMoved > 80) + for (int numCleanedUp = 0; numCleanedUp < 3; numCleanedUp++) { + if (gNumMemMoved > 80) break; - do{ + do { #ifdef FIX_BUGS txd = nil; #endif - if(CTxdStore::GetSlot(txdIndex)) + if (CTxdStore::GetSlot(txdIndex)) txd = CTxdStore::GetSlot(txdIndex)->texDict; txdIndex++; - if(txdIndex >= TXDSTORESIZE) + if (txdIndex >= TXDSTORESIZE) txdIndex = 0; - }while(txd == nil); + } while (txd == nil); RwTexDictionaryForAllTextures(txd, MoveTextureMemoryCB, &txdReturn); - if(txdReturn) + if (txdReturn) return; - } + } // animations - CAnimBlendHierarchy *anim; - do{ + CAnimBlendHierarchy* anim; + do { anim = CAnimManager::GetAnimation(animIndex); animIndex++; - if(animIndex >= NUMANIMATIONS) + if (animIndex >= NUMANIMATIONS) animIndex = 0; - }while(anim == nil); // always != nil + } while (anim == nil); // always != nil anim->MoveMemory(true); #endif } + +void +CGame::InitAfterFocusLoss() +{ + FrontEndMenuManager.m_nPrefsAudio3DProviderIndex = FrontEndMenuManager.m_lastWorking3DAudioProvider; + DMAudio.SetCurrent3DProvider(FrontEndMenuManager.m_lastWorking3DAudioProvider); + + if (!FrontEndMenuManager.m_bGameNotLoaded && !FrontEndMenuManager.m_bMenuActive) + FrontEndMenuManager.m_bStartUpFrontEndRequested = true; +} + +bool +CGame::CanSeeWaterFromCurrArea(void) +{ + return currArea == AREA_MAIN_MAP || currArea == AREA_MANSION + || currArea == AREA_HOTEL; +} + +bool +CGame::CanSeeOutSideFromCurrArea(void) +{ + return currArea == AREA_MAIN_MAP || currArea == AREA_MALL || + currArea == AREA_MANSION || currArea == AREA_HOTEL; +} |