From 63046894b099598c41096651a9816ee3adc032a4 Mon Sep 17 00:00:00 2001 From: Nikolay Korolev Date: Sun, 8 Aug 2021 16:57:37 +0300 Subject: small refactoring --- src/control/Script.cpp | 54 ++++++++++++++++++++++------------------- src/control/Script.h | 27 +++++++++++++++++---- src/control/Script5.cpp | 4 +-- src/control/Script6.cpp | 8 +++--- src/control/ScriptDebug.cpp | 4 +-- src/core/Frontend.cpp | 6 ++--- src/save/GenericGameStorage.cpp | 4 ++- src/save/GenericGameStorage.h | 8 ++++++ 8 files changed, 73 insertions(+), 42 deletions(-) (limited to 'src') diff --git a/src/control/Script.cpp b/src/control/Script.cpp index 285b4cb7..bcfc6078 100644 --- a/src/control/Script.cpp +++ b/src/control/Script.cpp @@ -17,6 +17,9 @@ #include "FileMgr.h" #include "Frontend.h" #include "General.h" +#ifdef MISSION_REPLAY +#include "GenericGameStorage.h" +#endif #include "HandlingMgr.h" #include "Heli.h" #include "Hud.h" @@ -495,11 +498,12 @@ void CRunningScript::Init() } #ifdef USE_DEBUG_SCRIPT_LOADER -int scriptToLoad = 0; +int CTheScripts::ScriptToLoad = 0; -int open_script() +int CTheScripts::OpenScript() { - switch (scriptToLoad) { + CFileMgr::ChangeDir("\\"); + switch (ScriptToLoad) { case 0: return CFileMgr::OpenFile("data\\main.scm", "rb"); case 1: return CFileMgr::OpenFile("data\\main_freeroam.scm", "rb"); case 2: return CFileMgr::OpenFile("data\\main_d.scm", "rb"); @@ -523,11 +527,11 @@ void CTheScripts::Init() #ifdef USE_DEBUG_SCRIPT_LOADER // glfwGetKey doesn't work because of CGame::Initialise is blocking CPad::UpdatePads(); - if(CPad::GetPad(0)->GetChar('G')) scriptToLoad = 0; - if(CPad::GetPad(0)->GetChar('R')) scriptToLoad = 1; - if(CPad::GetPad(0)->GetChar('D')) scriptToLoad = 2; + if(CPad::GetPad(0)->GetChar('G')) ScriptToLoad = 0; + if(CPad::GetPad(0)->GetChar('R')) ScriptToLoad = 1; + if(CPad::GetPad(0)->GetChar('D')) ScriptToLoad = 2; - int mainf = open_script(); + int mainf = OpenScript(); #else CFileMgr::SetDir("data"); int mainf = CFileMgr::OpenFile("main.scm", "rb"); @@ -663,25 +667,25 @@ void CTheScripts::Process() #ifdef MISSION_REPLAY static uint32 TimeToWaitTill; switch (AllowMissionReplay) { - case 2: - AllowMissionReplay = 3; + case MISSION_RETRY_STAGE_START_PROCESSING: + AllowMissionReplay = MISSION_RETRY_STAGE_WAIT_FOR_DELAY; TimeToWaitTill = CTimer::GetTimeInMilliseconds() + (AddExtraDeathDelay() > 1000 ? 4000 : 2500); break; - case 3: + case MISSION_RETRY_STAGE_WAIT_FOR_DELAY: if (TimeToWaitTill < CTimer::GetTimeInMilliseconds()) - AllowMissionReplay = 4; + AllowMissionReplay = MISSION_RETRY_STAGE_WAIT_FOR_MENU; break; - case 4: - AllowMissionReplay = 5; + case MISSION_RETRY_STAGE_WAIT_FOR_MENU: + AllowMissionReplay = MISSION_RETRY_STAGE_WAIT_FOR_USER; RetryMission(0, 0); break; - case 6: - AllowMissionReplay = 7; + case MISSION_RETRY_STAGE_START_RESTARTING: + AllowMissionReplay = MISSION_RETRY_STAGE_WAIT_FOR_TIMER_AFTER_RESTART; TimeToWaitTill = CTimer::GetTimeInMilliseconds() + 500; break; - case 7: + case MISSION_RETRY_STAGE_WAIT_FOR_TIMER_AFTER_RESTART: if (TimeToWaitTill < CTimer::GetTimeInMilliseconds()) { - AllowMissionReplay = 0; + AllowMissionReplay = MISSION_RETRY_STAGE_NORMAL; return; } break; @@ -1298,11 +1302,11 @@ int8 CRunningScript::ProcessCommands0To99(int32 command) CPlayerInfo* pPlayerInfo = &CWorld::Players[CWorld::PlayerInFocus]; #if 0 // makeing autosave is pointless and is a bit buggy if (pPlayerInfo->m_pPed->GetPedState() != PED_DEAD && pPlayerInfo->m_WBState == WBSTATE_PLAYING && !m_bDeatharrestExecuted) - SaveGameForPause(1); + SaveGameForPause(SAVE_TYPE_QUICKSAVE); #endif oldTargetX = oldTargetY = 0.0f; - if (AllowMissionReplay == 1) - AllowMissionReplay = 2; + if (AllowMissionReplay == MISSION_RETRY_STAGE_WAIT_FOR_SCRIPT_TO_TERMINATE) + AllowMissionReplay = MISSION_RETRY_STAGE_START_PROCESSING; // I am fairly sure they forgot to set return value here } #endif @@ -2310,7 +2314,7 @@ int8 CRunningScript::ProcessCommands100To199(int32 command) wchar* key = TheText.Get((char*)&CTheScripts::ScriptSpace[m_nIp]); #ifdef MISSION_REPLAY if (strcmp((char*)&CTheScripts::ScriptSpace[m_nIp], "M_FAIL") == 0 && CanAllowMissionReplay()) - AllowMissionReplay = 1; + AllowMissionReplay = MISSION_RETRY_STAGE_WAIT_FOR_SCRIPT_TO_TERMINATE; #endif m_nIp += KEY_LENGTH_IN_SCRIPT; CollectParameters(&m_nIp, 2); @@ -2973,7 +2977,7 @@ int8 CRunningScript::ProcessCommands200To299(int32 command) bool CRunningScript::CanAllowMissionReplay() { - if (AllowMissionReplay) + if (AllowMissionReplay != MISSION_RETRY_STAGE_NORMAL) return false; if (CStats::LastMissionPassedName[0] == '\0') return false; @@ -2995,14 +2999,14 @@ uint32 AddExtraDeathDelay() void RetryMission(int type, int unk) { - if (type == 0) { + if (type == MISSION_RETRY_TYPE_SUGGEST_TO_PLAYER) { doingMissionRetry = true; FrontEndMenuManager.m_nCurrScreen = MENUPAGE_MISSION_RETRY; FrontEndMenuManager.RequestFrontEndStartUp(); } - else if (type == 2) { + else if (type == MISSION_RETRY_TYPE_BEGIN_RESTARTING) { doingMissionRetry = false; - AllowMissionReplay = 6; + AllowMissionReplay = MISSION_RETRY_STAGE_START_RESTARTING; CTheScripts::MissionCleanUp.Process(); } } diff --git a/src/control/Script.h b/src/control/Script.h index 470de444..7b0f9a2e 100644 --- a/src/control/Script.h +++ b/src/control/Script.h @@ -584,6 +584,11 @@ public: static void SwitchToMission(int32 mission); #endif +#ifdef USE_DEBUG_SCRIPT_LOADER + static int ScriptToLoad; + static int OpenScript(); +#endif + #ifdef USE_ADVANCED_SCRIPT_DEBUG_OUTPUT static void LogAfterScriptInitializing(); static void LogBeforeScriptProcessing(); @@ -601,9 +606,21 @@ extern bool doingMissionRetry; uint32 AddExtraDeathDelay(); void RetryMission(int, int); -#endif -#ifdef USE_DEBUG_SCRIPT_LOADER -int open_script(); -extern int scriptToLoad; -#endif \ No newline at end of file +enum { + MISSION_RETRY_TYPE_SUGGEST_TO_PLAYER = 0, + MISSION_RETRY_TYPE_1, + MISSION_RETRY_TYPE_BEGIN_RESTARTING +}; + +enum { + MISSION_RETRY_STAGE_NORMAL = 0, + MISSION_RETRY_STAGE_WAIT_FOR_SCRIPT_TO_TERMINATE, + MISSION_RETRY_STAGE_START_PROCESSING, + MISSION_RETRY_STAGE_WAIT_FOR_DELAY, + MISSION_RETRY_STAGE_WAIT_FOR_MENU, + MISSION_RETRY_STAGE_WAIT_FOR_USER, + MISSION_RETRY_STAGE_START_RESTARTING, + MISSION_RETRY_STAGE_WAIT_FOR_TIMER_AFTER_RESTART, +}; +#endif diff --git a/src/control/Script5.cpp b/src/control/Script5.cpp index 953a1f50..76aa2442 100644 --- a/src/control/Script5.cpp +++ b/src/control/Script5.cpp @@ -1239,10 +1239,10 @@ void CRunningScript::DoDeatharrestCheck() if (!pPlayer->IsRestartingAfterDeath() && !pPlayer->IsRestartingAfterArrest() && !CTheScripts::UpsideDownCars.AreAnyCarsUpsideDown()) return; #ifdef MISSION_REPLAY - if (AllowMissionReplay != 0) + if (AllowMissionReplay != MISSION_RETRY_STAGE_NORMAL) return; if (CanAllowMissionReplay()) - AllowMissionReplay = 1; + AllowMissionReplay = MISSION_RETRY_STAGE_WAIT_FOR_SCRIPT_TO_TERMINATE; #endif script_assert(m_nStackPointer > 0); while (m_nStackPointer > 1) diff --git a/src/control/Script6.cpp b/src/control/Script6.cpp index c9b2b070..0a2248f8 100644 --- a/src/control/Script6.cpp +++ b/src/control/Script6.cpp @@ -82,8 +82,8 @@ int8 CRunningScript::ProcessCommands1000To1099(int32 command) { CollectParameters(&m_nIp, 1); #ifdef MISSION_REPLAY - AllowMissionReplay = 0; - SaveGameForPause(3); + AllowMissionReplay = MISSION_RETRY_STAGE_NORMAL; + SaveGameForPause(SAVE_TYPE_QUICKSAVE_FOR_MISSION_REPLAY); #endif CPlayerInfo* pPlayerInfo = &CWorld::Players[ScriptParams[0]]; CPad::GetPad(ScriptParams[0])->SetDisablePlayerControls(PLAYERCONTROL_CUTSCENE); @@ -304,10 +304,10 @@ int8 CRunningScript::ProcessCommands1000To1099(int32 command) #endif CTimer::Suspend(); int offset = CTheScripts::MultiScriptArray[ScriptParams[0]]; - CFileMgr::ChangeDir("\\"); #ifdef USE_DEBUG_SCRIPT_LOADER - int handle = open_script(); + int handle = CTheScripts::OpenScript(); #else + CFileMgr::ChangeDir("\\"); int handle = CFileMgr::OpenFile("data\\main.scm", "rb"); #endif CFileMgr::Seek(handle, offset, 0); diff --git a/src/control/ScriptDebug.cpp b/src/control/ScriptDebug.cpp index e9014088..63508217 100644 --- a/src/control/ScriptDebug.cpp +++ b/src/control/ScriptDebug.cpp @@ -1423,10 +1423,10 @@ CTheScripts::SwitchToMission(int32 mission) #endif CTimer::Suspend(); int offset = CTheScripts::MultiScriptArray[mission]; - CFileMgr::ChangeDir("\\"); #ifdef USE_DEBUG_SCRIPT_LOADER - int handle = open_script(); + int handle = OpenScript(); #else + CFileMgr::ChangeDir("\\"); int handle = CFileMgr::OpenFile("data\\main.scm", "rb"); #endif CFileMgr::Seek(handle, offset, 0); diff --git a/src/core/Frontend.cpp b/src/core/Frontend.cpp index ecb893b4..e7a15f66 100644 --- a/src/core/Frontend.cpp +++ b/src/core/Frontend.cpp @@ -4182,7 +4182,7 @@ CMenuManager::Process(void) #endif if (CheckSlotDataValid(m_nCurrSaveSlot)) { #ifdef USE_DEBUG_SCRIPT_LOADER - scriptToLoad = 0; + CTheScripts::ScriptToLoad = 0; #endif #ifdef PC_PLAYER_CONTROLS TheCamera.m_bUseMouse3rdPerson = m_ControlMethod == CONTROL_STANDARD; @@ -4312,12 +4312,12 @@ CMenuManager::ProcessButtonPresses(void) #ifdef USE_DEBUG_SCRIPT_LOADER if (m_nCurrScreen == MENUPAGE_START_MENU || m_nCurrScreen == MENUPAGE_NEW_GAME || m_nCurrScreen == MENUPAGE_NEW_GAME_RELOAD) { if (CPad::GetPad(0)->GetChar('R')) { - scriptToLoad = 1; + CTheScripts::ScriptToLoad = 1; DoSettingsBeforeStartingAGame(); return; } if (CPad::GetPad(0)->GetChar('D')) { - scriptToLoad = 2; + CTheScripts::ScriptToLoad = 2; DoSettingsBeforeStartingAGame(); return; } diff --git a/src/save/GenericGameStorage.cpp b/src/save/GenericGameStorage.cpp index f51f8233..798aeb7e 100644 --- a/src/save/GenericGameStorage.cpp +++ b/src/save/GenericGameStorage.cpp @@ -1153,7 +1153,9 @@ void DisplaySaveResult(int unk, char* name) bool SaveGameForPause(int type) { - if (AllowMissionReplay != 0 || type != 3 && WaitForSave > CTimer::GetTimeInMilliseconds()) + if (AllowMissionReplay != MISSION_RETRY_STAGE_NORMAL) + return false; + if (type != SAVE_TYPE_QUICKSAVE_FOR_MISSION_REPLAY && WaitForSave > CTimer::GetTimeInMilliseconds()) return false; WaitForSave = 0; if (gGameState != GS_PLAYING_GAME || CTheScripts::IsPlayerOnAMission() || CStats::LastMissionPassedName[0] == '\0') { diff --git a/src/save/GenericGameStorage.h b/src/save/GenericGameStorage.h index b291ddf9..6a5b04fa 100644 --- a/src/save/GenericGameStorage.h +++ b/src/save/GenericGameStorage.h @@ -52,4 +52,12 @@ const char TopLineEmptyFile[] = "THIS FILE IS NOT VALID YET"; extern int8 IsQuickSave; // originally int bool SaveGameForPause(int); + +enum { + SAVE_TYPE_NORMAL, + SAVE_TYPE_QUICKSAVE, + SAVE_TYPE_2, + SAVE_TYPE_QUICKSAVE_FOR_MISSION_REPLAY +}; + #endif -- cgit v1.2.3