aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
authorWillem Jan Palenstijn2016-11-19 19:13:17 +0100
committerWillem Jan Palenstijn2016-11-19 19:16:12 +0100
commit10151966a6e1ae58f01d37e6fb110c7f740c96ba (patch)
treebcce01d31e8b8e7753cc7417b30397bbbcbea4a2 /engines
parentf2134a0dc264443c62b44a153629c83d60412a14 (diff)
downloadscummvm-rg350-10151966a6e1ae58f01d37e6fb110c7f740c96ba.tar.gz
scummvm-rg350-10151966a6e1ae58f01d37e6fb110c7f740c96ba.tar.bz2
scummvm-rg350-10151966a6e1ae58f01d37e6fb110c7f740c96ba.zip
SCI32: Add missing updateInfoFlagViewVisible call
I missed the one for varselector sends handled by the secondary loop in op_ret. This fixes #9641.
Diffstat (limited to 'engines')
-rw-r--r--engines/sci/engine/vm.cpp11
1 files changed, 9 insertions, 2 deletions
diff --git a/engines/sci/engine/vm.cpp b/engines/sci/engine/vm.cpp
index 700b7d2a21..a6d37d05ef 100644
--- a/engines/sci/engine/vm.cpp
+++ b/engines/sci/engine/vm.cpp
@@ -335,6 +335,9 @@ ExecStack *send_selector(EngineState *s, reg_t send_obj, reg_t work_obj, StackPt
argp += argc + 1;
} // while (framesize > 0)
+ // Perform all varselector actions at the top of the stack immediately.
+ // Note that there may be some behind method selector calls as well;
+ // those will get executed by op_ret later.
_exec_varselectors(s);
return s->_executionStack.empty() ? NULL : &(s->_executionStack.back());
@@ -956,9 +959,13 @@ void run_vm(EngineState *s) {
if (old_xs->type == EXEC_STACK_TYPE_VARSELECTOR) {
// varselector access?
reg_t *var = old_xs->getVarPointer(s->_segMan);
- if (old_xs->argc) // write?
+ if (old_xs->argc) { // write?
*var = old_xs->variables_argp[1];
- else // No, read
+
+#ifdef ENABLE_SCI32
+ updateInfoFlagViewVisible(s->_segMan->getObject(old_xs->addr.varp.obj), old_xs->addr.varp.varindex);
+#endif
+ } else // No, read
s->r_acc = *var;
}