aboutsummaryrefslogtreecommitdiff
path: root/engines/sci/engine
diff options
context:
space:
mode:
authorFilippos Karapetis2010-06-17 20:52:53 +0000
committerFilippos Karapetis2010-06-17 20:52:53 +0000
commit701d69d6e2c1cd6007107720e41c2de2670951a1 (patch)
tree7a7a5f5280666f82a4f88f14ce44ccde4e2adff1 /engines/sci/engine
parentc8dfa255a3c812dbd4a852c839407a31c0122a70 (diff)
downloadscummvm-rg350-701d69d6e2c1cd6007107720e41c2de2670951a1.tar.gz
scummvm-rg350-701d69d6e2c1cd6007107720e41c2de2670951a1.tar.bz2
scummvm-rg350-701d69d6e2c1cd6007107720e41c2de2670951a1.zip
Don't show warnings for a known script bug in SQ4CD with the Sq4GlobalNarrator object
svn-id: r49950
Diffstat (limited to 'engines/sci/engine')
-rw-r--r--engines/sci/engine/vm.cpp31
1 files changed, 18 insertions, 13 deletions
diff --git a/engines/sci/engine/vm.cpp b/engines/sci/engine/vm.cpp
index 95ed13a3d3..f38ce5e3ab 100644
--- a/engines/sci/engine/vm.cpp
+++ b/engines/sci/engine/vm.cpp
@@ -406,19 +406,24 @@ ExecStack *send_selector(EngineState *s, reg_t send_obj, reg_t work_obj, StackPt
}
if (argc > 1) {
- // argc can indeed be bigger than 1 in some cases, and it seems correct
- // (i.e. we should skip that many bytes later on)... question is, why
- // does this occur? Could such calls be used to point to data after X
- // bytes in the heap? What are the skipped bytes in this case?
- // In SQ4CD, this occurs with the returnVal selector of object
- // Sq4GlobalNarrator when the game starts, and right after the narrator
- // is heard (e.g. after he talks when examining something)
- reg_t oldReg = *varp.getPointer(s->_segMan);
- reg_t newReg = argp[1];
- warning("send_selector(): argc = %d while modifying variable selector "
- "%x (%s) of object %04x:%04x (%s) from %04x:%04x to %04x:%04x",
- argc, selector, g_sci->getKernel()->getSelectorName(selector).c_str(), PRINT_REG(send_obj),
- s->_segMan->getObjectName(send_obj), PRINT_REG(oldReg), PRINT_REG(newReg));
+ // argc can indeed be bigger than 1 in some cases, and it's usually the
+ // result of a script bug
+
+ const char *objectName = s->_segMan->getObjectName(send_obj);
+
+ if (!strcmp(objectName, "Sq4GlobalNarrator") && selector == 606) {
+ // SQ4 has a script bug in the Sq4GlobalNarrator object when invoking the
+ // returnVal selector, which doesn't affect gameplay, thus don't diplay it
+ } else {
+ // Unknown script bug, show it
+ reg_t oldReg = *varp.getPointer(s->_segMan);
+ reg_t newReg = argp[1];
+ const char *selectorName = g_sci->getKernel()->getSelectorName(selector).c_str();
+ warning("send_selector(): argc = %d while modifying variable selector "
+ "%x (%s) of object %04x:%04x (%s) from %04x:%04x to %04x:%04x",
+ argc, selector, selectorName, PRINT_REG(send_obj),
+ objectName, PRINT_REG(oldReg), PRINT_REG(newReg));
+ }
}
{