diff options
Diffstat (limited to 'engines/scumm/script.cpp')
-rw-r--r-- | engines/scumm/script.cpp | 24 |
1 files changed, 13 insertions, 11 deletions
diff --git a/engines/scumm/script.cpp b/engines/scumm/script.cpp index 8587fb8092..c8eabdd61c 100644 --- a/engines/scumm/script.cpp +++ b/engines/scumm/script.cpp @@ -49,6 +49,8 @@ void ScummEngine::runScript(int script, bool freezeResistant, bool recursive, in if (!recursive) stopScript(script); + uint16 number = (_currentScript != 0xFF) ? vm.slot[_currentScript].number : 0; + if (script < _numGlobalScripts) { // Call getResourceAddress to ensure the resource is loaded & its usage count reset /*scriptPtr =*/ getResourceAddress(rtScript, script); @@ -56,7 +58,7 @@ void ScummEngine::runScript(int script, bool freezeResistant, bool recursive, in scriptType = WIO_GLOBAL; debugC(DEBUG_SCRIPTS, "runScript(Global-%d) from %d-%d", script, - vm.slot[_currentScript].number, _roomResource); + number, _roomResource); } else { scriptOffs = _localScriptOffsets[script - _numGlobalScripts]; if (scriptOffs == 0) @@ -64,7 +66,7 @@ void ScummEngine::runScript(int script, bool freezeResistant, bool recursive, in scriptType = WIO_LOCAL; debugC(DEBUG_SCRIPTS, "runScript(%d) from %d-%d", script, - vm.slot[_currentScript].number, _roomResource); + number, _roomResource); } if (cycle == 0) @@ -138,10 +140,10 @@ void ScummEngine::runObjectScript(int object, int entry, bool freezeResistant, b void ScummEngine::initializeLocals(int slot, int *vars) { int i; if (!vars) { - for (i = 0; i < 25; i++) + for (i = 0; i < NUM_SCRIPT_LOCAL; i++) vm.localvar[slot][i] = 0; } else { - for (i = 0; i < 25; i++) + for (i = 0; i < NUM_SCRIPT_LOCAL; i++) vm.localvar[slot][i] = vars[i]; } } @@ -755,13 +757,13 @@ void ScummEngine::stopObjectCode() { } void ScummEngine::runInventoryScript(int i) { - int args[24]; - memset(args, 0, sizeof(args)); - args[0] = i; if (VAR(VAR_INVENTORY_SCRIPT)) { if (_game.id == GID_INDY3 && _game.platform == Common::kPlatformMacintosh) { inventoryScriptIndy3Mac(); } else { + int args[NUM_SCRIPT_LOCAL]; + memset(args, 0, sizeof(args)); + args[0] = i; runScript(VAR(VAR_INVENTORY_SCRIPT), 0, 0, args); } } @@ -1060,7 +1062,7 @@ void ScummEngine::doSentence(int verb, int objectA, int objectB) { void ScummEngine::checkAndRunSentenceScript() { int i; - int localParamList[24]; + int localParamList[NUM_SCRIPT_LOCAL]; const ScriptSlot *ss; int sentenceScript; @@ -1308,7 +1310,7 @@ void ScummEngine_v0::runSentenceScript() { } void ScummEngine_v2::runInputScript(int clickArea, int val, int mode) { - int args[24]; + int args[NUM_SCRIPT_LOCAL]; int verbScript; verbScript = 4; @@ -1332,7 +1334,7 @@ void ScummEngine_v2::runInputScript(int clickArea, int val, int mode) { } void ScummEngine::runInputScript(int clickArea, int val, int mode) { - int args[24]; + int args[NUM_SCRIPT_LOCAL]; int verbScript; verbScript = VAR(VAR_VERB_SCRIPT); @@ -1490,7 +1492,7 @@ void ScummEngine::beginCutscene(int *args) { void ScummEngine::endCutscene() { ScriptSlot *ss = &vm.slot[_currentScript]; - int args[16]; + int args[NUM_SCRIPT_LOCAL]; if (ss->cutsceneOverride > 0) // Only terminate if active ss->cutsceneOverride--; |