disable mission replay for lcs

This commit is contained in:
Nikolay Korolev 2021-08-08 10:51:04 +03:00
parent 2672504e8a
commit 0c4ab5b609
4 changed files with 76 additions and 130 deletions

View file

@ -112,112 +112,71 @@ base::cSList<script_corona> CTheScripts::mCoronas;
#ifdef MISSION_REPLAY
static const char* nonMissionScripts[] = {
"copcar",
"ambulan",
"taxi",
"firetru",
"rampage",
"t4x4_1",
"t4x4_2",
"t4x4_3",
"rc1",
"rc2",
"rc3",
"rc4",
"hj",
"usj",
"mayhem",
"range",
"race",
"pizza",
"rcheli",
"rcplne1",
"rcrace1",
"cokerun",
"buypro1",
"carbuy1",
"buypro2",
"icecut",
"icecre1",
"buypro3",
"buypro4",
"buypro5",
"buypro6",
"buypro7",
"buypro8",
"buypro9",
"buypro10",
"buypro11",
"ovalrng",
"mm",
"kickst",
"heli1sc",
"heli2sc",
"heli3sc",
"heli4sc",
"carpark_1",
"bmx_1",
"bmx_2"
};
static const char* MissionScripts[] = {
"LAWYER1",
"LAWYER2",
"LAWYER3",
"LAWYER4",
"GENERL1",
"COL2",
"GENERL3",
"COL_4",
"COL_5",
"baron1",
"baron2",
"baron3",
"baron4",
"kent1",
"baron5",
"serg1",
"serg2",
"serg3",
"bankjo1",
"bankjo2",
"bankjo3",
"bankjo4",
"phil1",
"phil2",
"porno1",
"porno2",
"porno3",
"porno4",
"protec1",
"protec2",
"protec3",
"count1",
"count2",
"CAP_1",
"FIN_1",
"bike1",
"bike2",
"bike3",
"rockb1",
"rockb2",
"rockb3",
"cuban1",
"cuban2",
"cuban3",
"cuban4",
"hait1",
"hait2",
"hait3",
"assin1",
"assin2",
"assin3",
"assin4",
"assin5",
"taxwar1",
"taxwar2",
"taxwar3"
"VIC2",
"VIC3",
"VIC4",
"VIC5",
"VIC6",
"VIC7",
"SAL1",
"SAL2",
"SAL3",
"SAL4",
"SAL5",
"SAL6",
"SAL7",
"SAL8",
"JDT1",
"JDT2",
"JDT3",
"JDT4",
"JDT5",
"JDT6",
"JDT7",
"JDT8",
"MAC1",
"MAC2",
"MAC3",
"MAC4",
"MAC5",
"SALS1",
"SALS2",
"SALS3",
"SALS4",
"SALS5",
"SALS6",
"RAYS1",
"RAYS2",
"RAYS3",
"RAYS4",
"RAYS5",
"DONS1",
"DONS2",
"DONS3",
"DONS4",
"DONS5",
"DONS6",
"DONS7",
"NEDS1",
"NEDS2",
"NEDS3",
"NEDS4",
"SALH1",
"SALH2",
"SALH3",
"SALH4",
"SALH5",
"DONH1",
"DONH2",
"DONH3",
"DONH4",
"DONH5",
"DONH6",
"TOSH1",
"TOSH2",
"TOSH3",
"TOSH4"
};
int AllowMissionReplay;
@ -234,7 +193,6 @@ int IsInAmmunation;
int MissionSkipLevel;
#ifdef USE_MISSION_REPLAY_OVERRIDE_FOR_NON_MOBILE_SCRIPT
bool UsingMobileScript;
bool AlreadySavedGame;
#endif
@ -1003,7 +961,6 @@ bool CTheScripts::Init(bool loaddata)
LogAfterScriptInitializing();
#endif
#ifdef USE_MISSION_REPLAY_OVERRIDE_FOR_NON_MOBILE_SCRIPT
UsingMobileScript = false;
AlreadySavedGame = false;
#endif
return retval;

View file

@ -668,7 +668,7 @@ public:
#ifdef USE_MISSION_REPLAY_OVERRIDE_FOR_NON_MOBILE_SCRIPT
static bool MissionSupportsMissionReplay(int index)
{
return index >= 3 && index <= 35 || index >= 51 && index <= 65 || index >= 67 && index <= 74 || index >= 83 && index <= 87;
return (index >= 48 && index <= 61) || (index >= 63 && index <= 117);
}
#endif
static bool IsFortStauntonDestroyed() { return FSDestroyedFlag && *(int32*)&ScriptSpace[FSDestroyedFlag] == 1; }
@ -700,7 +700,6 @@ extern int IsInAmmunation;
extern int MissionSkipLevel;
#ifdef USE_MISSION_REPLAY_OVERRIDE_FOR_NON_MOBILE_SCRIPT
extern bool UsingMobileScript;
extern bool AlreadySavedGame;
#endif

View file

@ -381,7 +381,7 @@ int8 CRunningScript::ProcessCommands1000To1099(int32 command)
#ifdef MISSION_REPLAY
missionRetryScriptIndex = GET_INTEGER_PARAM(0);
#ifdef USE_MISSION_REPLAY_OVERRIDE_FOR_NON_MOBILE_SCRIPT
if (!UsingMobileScript && CTheScripts::MissionSupportsMissionReplay(missionRetryScriptIndex)){
if (CTheScripts::MissionSupportsMissionReplay(missionRetryScriptIndex)){
if (!AlreadySavedGame) {
m_nIp = oldIp - 2;
SaveGameForPause(4);

View file

@ -1946,8 +1946,7 @@ void CRunningScript::LogAfterProcessingCommand(int32 command)
CDebug::DebugAddText(commandInfo);
}
}
#endif
}
#ifdef MISSION_SWITCHER
void
@ -1975,30 +1974,21 @@ CTheScripts::SwitchToMission(int32 mission)
#ifdef MISSION_REPLAY
missionRetryScriptIndex = mission;
#ifdef USE_MISSION_REPLAY_OVERRIDE_FOR_NON_MOBILE_SCRIPT
if (CTheScripts::MissionSupportsMissionReplay(missionRetryScriptIndex)) {
SaveGameForPause(4);
}
#endif
#endif
CTimer::Suspend();
int offset = CTheScripts::MultiScriptArray[mission];
#ifdef USE_DEBUG_SCRIPT_LOADER
CFileMgr::ChangeDir("\\data\\");
int handle = CFileMgr::OpenFile(scriptfile, "rb");
CFileMgr::ChangeDir("\\");
#else
CFileMgr::ChangeDir("\\");
int handle = CFileMgr::OpenFile("data\\main.scm", "rb");
#endif
CFileMgr::Seek(handle, offset, 0);
CFileMgr::Read(handle, (const char*)&CTheScripts::ScriptSpace[SIZE_MAIN_SCRIPT], SIZE_MISSION_SCRIPT);
CFileMgr::CloseFile(handle);
CRunningScript* pMissionScript = CTheScripts::StartNewScript(SIZE_MAIN_SCRIPT);
int offset = CTheScripts::MultiScriptArray[mission] + 8;
int size = CTheScripts::MultiScriptArray[mission + 1] - CTheScripts::MultiScriptArray[mission];
if (size <= 0)
size = CTheScripts::LargestMissionScriptSize;
CFileMgr::Seek(gScriptsFile, offset, 0);
CFileMgr::Read(gScriptsFile, (const char*)&CTheScripts::ScriptSpace[CTheScripts::MainScriptSize], size);
CRunningScript* pMissionScript = CTheScripts::StartNewScript(CTheScripts::MainScriptSize);
CTimer::Resume();
pMissionScript->m_bIsMissionScript = true;
pMissionScript->m_bMissionFlag = true;
CTheScripts::bAlreadyRunningAMissionScript = true;
memset(&CTheScripts::ScriptSpace[CTheScripts::NumTrueGlobals * 4 + 8], 0, CTheScripts::MostGlobals * 4);
CGameLogic::ClearShortCut();
pMissionScript->Process();
}
#endif