aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTravis Howell2006-11-20 03:21:09 +0000
committerTravis Howell2006-11-20 03:21:09 +0000
commitd64d6bcb7e56404dc585c62edcf39861f102f05b (patch)
tree3b0e00b8cba3aa5d1aa82420f7b23b546a1634c4
parent315c286bea55877b42d78451cbd7c4e9a4bfec58 (diff)
downloadscummvm-rg350-d64d6bcb7e56404dc585c62edcf39861f102f05b.tar.gz
scummvm-rg350-d64d6bcb7e56404dc585c62edcf39861f102f05b.tar.bz2
scummvm-rg350-d64d6bcb7e56404dc585c62edcf39861f102f05b.zip
Add stopObjectCode() differences in SCUMM 1 - 5 games. The nested script stack wasn't been checked.
svn-id: r24751
-rw-r--r--engines/scumm/script.cpp39
1 files changed, 24 insertions, 15 deletions
diff --git a/engines/scumm/script.cpp b/engines/scumm/script.cpp
index 2b4be50ff6..8418f8a0ee 100644
--- a/engines/scumm/script.cpp
+++ b/engines/scumm/script.cpp
@@ -724,27 +724,36 @@ void ScummEngine::stopObjectCode() {
ScriptSlot *ss;
ss = &vm.slot[_currentScript];
- if (ss->cutsceneOverride == 255) { /* FIXME: What does this? */
- warning("Cutscene for script %d has overflown. Resetting.", ss->number);
- ss->cutsceneOverride = 0;
- }
+ if (_game.version <= 2) {
+ if (ss->where == WIO_GLOBAL || ss->where == WIO_LOCAL) {
+ stopScript(ss->number);
+ } else {
+ ss->number = 0;
+ ss->status = ssDead;
+ }
+ } else if (_game.version <= 5) {
+ if (ss->where != WIO_GLOBAL && ss->where != WIO_LOCAL) {
+ stopObjectScript(ss->number);
+ } else {
+ if (_game.version >= 4 && ss->cutsceneOverride)
+ error("Script %d ending with active cutscene/override (%d)", ss->number, ss->cutsceneOverride);
- if (ss->where != WIO_GLOBAL && ss->where != WIO_LOCAL) {
- if (ss->cutsceneOverride) {
- if (_game.version >= 5)
- warning("Object %d ending with active cutscene/override (%d)", ss->number, ss->cutsceneOverride);
- ss->cutsceneOverride = 0;
+ ss->number = 0;
+ ss->status = ssDead;
}
} else {
- if (ss->cutsceneOverride) {
- if (_game.version >= 5)
- warning("Script %d ending with active cutscene/override (%d)", ss->number, ss->cutsceneOverride);
- ss->cutsceneOverride = 0;
+ if (ss->where != WIO_GLOBAL && ss->where != WIO_LOCAL) {
+ if (ss->cutsceneOverride)
+ error("Object %d ending with active cutscene/override (%d)", ss->number, ss->cutsceneOverride);
+ } else {
+ if (ss->cutsceneOverride)
+ error("Script %d ending with active cutscene/override (%d)", ss->number, ss->cutsceneOverride);
}
+ ss->number = 0;
+ ss->status = ssDead;
}
+
nukeArrays(_currentScript);
- ss->number = 0;
- ss->status = ssDead;
_currentScript = 0xFF;
}