diff --git a/engines/ags/engine/ac/event.cpp b/engines/ags/engine/ac/event.cpp index 67679458476..3972398deae 100644 --- a/engines/ags/engine/ac/event.cpp +++ b/engines/ags/engine/ac/event.cpp @@ -60,6 +60,8 @@ int run_claimable_event(const char *tsname, bool includeRoom, int numParams, con if (includeRoom && _G(roominst)) { toret = RunScriptFunctionIfExists(_G(roominst), tsname, numParams, params); + if (_G(abort_engine)) + return -1; if (_G(eventClaimed) == EVENT_CLAIMED) { _G(eventClaimed) = eventClaimedOldValue; diff --git a/engines/ags/engine/main/game_run.cpp b/engines/ags/engine/main/game_run.cpp index 01977896964..2ff0545005d 100644 --- a/engines/ags/engine/main/game_run.cpp +++ b/engines/ags/engine/main/game_run.cpp @@ -553,6 +553,10 @@ static void game_loop_check_controls(bool checkControls) { int numevents_was = _G(numevents); check_controls(); check_room_edges(numevents_was); + + if (_G(abort_engine)) + return; + // If an inventory interaction changed the room if (inRoom != _G(displayed_room)) check_new_room(); diff --git a/engines/ags/engine/script/script.cpp b/engines/ags/engine/script/script.cpp index 2977fdd0e67..0dd9866990d 100644 --- a/engines/ags/engine/script/script.cpp +++ b/engines/ags/engine/script/script.cpp @@ -310,6 +310,8 @@ int PrepareTextScript(ccInstance *sci, const char **tsname) { _G(ccErrorString) = "script is already in execution"; return -3; } + + assert(_G(num_scripts) < MAX_SCRIPT_AT_ONCE); _G(scripts)[_G(num_scripts)].init(); _G(scripts)[_G(num_scripts)].inst = sci; // CHECKME: this conditional block will never run, because @@ -433,7 +435,7 @@ int RunTextScript2IParam(ccInstance *sci, const char *tsname, const RuntimeScrip bool eventWasClaimed; int toret = run_claimable_event(tsname, true, 2, params, &eventWasClaimed); - if (eventWasClaimed) + if (eventWasClaimed || _G(abort_engine)) return toret; }