Permalink
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Browse files
Fix debug script loader crashing missions
* open_script is now exposed in Script.h, perhaps it should be namespaced
as a static method on CTheScripts? I'm unsure what is preferred.
* I've moved the joypad code out of open_script to prevent buttons held
down at mission load time from changing the scriptToLoad.
Loading branch information
Showing
3 changed files
with
16 additions
and
13 deletions .
+11
−13
src/control/Script.cpp
+1
−0
src/control/Script.h
+4
−0
src/control/Script6.cpp
There are no files selected for viewing
@@ -1771,20 +1771,12 @@ int scriptToLoad = 0;
int open_script ()
int open_script ()
{
{
// 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 ;
switch (scriptToLoad) {
switch (scriptToLoad) {
case 0 : return CFileMgr::OpenFile (" main.scm" , " rb" );
case 0 : return CFileMgr::OpenFile (" data \\ main.scm" , " rb" );
case 1 : return CFileMgr::OpenFile (" main_freeroam.scm" , " rb" );
case 1 : return CFileMgr::OpenFile (" data \\ main_freeroam.scm" , " rb" );
case 2 : return CFileMgr::OpenFile (" main_d.scm" , " rb" );
case 2 : return CFileMgr::OpenFile (" data \\ main_d.scm" , " rb" );
}
}
return CFileMgr::OpenFile (" main.scm" , " rb" );
return CFileMgr::OpenFile (" data \\ main.scm" , " rb" );
}
}
#endif
#endif
@@ -1800,10 +1792,16 @@ void CTheScripts::Init()
MissionCleanUp.Init ();
MissionCleanUp.Init ();
UpsideDownCars.Init ();
UpsideDownCars.Init ();
StuckCars.Init ();
StuckCars.Init ();
CFileMgr::SetDir (" data" );
#ifdef USE_DEBUG_SCRIPT_LOADER
#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 ;
int mainf = open_script ();
int mainf = open_script ();
#else
#else
CFileMgr::SetDir (" data" );
int mainf = CFileMgr::OpenFile (" main.scm" , " rb" );
int mainf = CFileMgr::OpenFile (" main.scm" , " rb" );
#endif
#endif
CFileMgr::Read (mainf, (char *)ScriptSpace, SIZE_MAIN_SCRIPT);
CFileMgr::Read (mainf, (char *)ScriptSpace, SIZE_MAIN_SCRIPT);
@@ -591,5 +591,6 @@ void RetryMission(int, int);
#endif
#endif
#ifdef USE_DEBUG_SCRIPT_LOADER
#ifdef USE_DEBUG_SCRIPT_LOADER
int open_script ();
extern int scriptToLoad;
extern int scriptToLoad;
#endif
#endif
@@ -305,7 +305,11 @@ int8 CRunningScript::ProcessCommands1000To1099(int32 command)
CTimer::Suspend ();
CTimer::Suspend ();
int offset = CTheScripts::MultiScriptArray[ScriptParams[0 ]];
int offset = CTheScripts::MultiScriptArray[ScriptParams[0 ]];
CFileMgr::ChangeDir (" \\ " );
CFileMgr::ChangeDir (" \\ " );
#ifdef USE_DEBUG_SCRIPT_LOADER
int handle = open_script ();
#else
int handle = CFileMgr::OpenFile (" data\\ main.scm" , " rb" );
int handle = CFileMgr::OpenFile (" data\\ main.scm" , " rb" );
#endif
CFileMgr::Seek (handle, offset, 0 );
CFileMgr::Seek (handle, offset, 0 );
CFileMgr::Read (handle, (const char *)&CTheScripts::ScriptSpace[SIZE_MAIN_SCRIPT], SIZE_MISSION_SCRIPT);
CFileMgr::Read (handle, (const char *)&CTheScripts::ScriptSpace[SIZE_MAIN_SCRIPT], SIZE_MISSION_SCRIPT);
CFileMgr::CloseFile (handle);
CFileMgr::CloseFile (handle);
Toggle all file notes
Toggle all file annotations