[Scummvm-cvs-logs] scummvm master -> 154f592f513b860d8305d3c866ab79899e8f3184
wjp
wjp at usecode.org
Sat Feb 27 14:23:32 CET 2016
This automated email contains information about 3 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
d803847ca1 SCI32: Update InfoFlagViewVisible in VM opcodes
77bb83cdfd SCI32: Update InfoFlagViewVisible from send_selector
154f592f51 SCI32: Clear InfoFlagViewVisible after updating ScreenItem
Commit: d803847ca1458d7caeaa2bd4bbffabe134e13ef4
https://github.com/scummvm/scummvm/commit/d803847ca1458d7caeaa2bd4bbffabe134e13ef4
Author: Willem Jan Palenstijn (wjp at usecode.org)
Date: 2016-02-27T14:21:14+01:00
Commit Message:
SCI32: Update InfoFlagViewVisible in VM opcodes
Changed paths:
engines/sci/engine/selector.cpp
engines/sci/engine/selector.h
engines/sci/engine/vm.cpp
diff --git a/engines/sci/engine/selector.cpp b/engines/sci/engine/selector.cpp
index 66f3793..320f2c0 100644
--- a/engines/sci/engine/selector.cpp
+++ b/engines/sci/engine/selector.cpp
@@ -206,6 +206,16 @@ reg_t readSelector(SegManager *segMan, reg_t object, Selector selectorId) {
return *address.getPointer(segMan);
}
+#ifdef ENABLE_SCI32
+void updateInfoFlagViewVisible(Object *obj, int offset) {
+ // TODO: Make this correct for all SCI versions
+ // Selectors 26 through 44 are selectors for View script objects in SQ6
+ if (offset >= 26 && offset <= 44 && getSciVersion() >= SCI_VERSION_2) {
+ obj->setInfoSelectorFlag(kInfoFlagViewVisible);
+ }
+}
+#endif
+
void writeSelector(SegManager *segMan, reg_t object, Selector selectorId, reg_t value) {
ObjVarRef address;
@@ -221,11 +231,7 @@ void writeSelector(SegManager *segMan, reg_t object, Selector selectorId, reg_t
else {
*address.getPointer(segMan) = value;
#ifdef ENABLE_SCI32
- // TODO: Make this correct for all SCI versions
- // Selectors 26 through 44 are selectors for View script objects
- if (getSciVersion() >= SCI_VERSION_2 && selectorId >= 26 && selectorId <= 44) {
- segMan->getObject(object)->setInfoSelectorFlag(kInfoFlagViewVisible);
- }
+ updateInfoFlagViewVisible(segMan->getObject(object), selectorId);
#endif
}
}
diff --git a/engines/sci/engine/selector.h b/engines/sci/engine/selector.h
index 12074ed..1952ca0 100644
--- a/engines/sci/engine/selector.h
+++ b/engines/sci/engine/selector.h
@@ -197,6 +197,16 @@ void writeSelector(SegManager *segMan, reg_t object, Selector selectorId, reg_t
void invokeSelector(EngineState *s, reg_t object, int selectorId,
int k_argc, StackPtr k_argp, int argc = 0, const reg_t *argv = 0);
+#ifdef ENABLE_SCI32
+/**
+ * SCI32 set kInfoFlagViewVisible in the -info- selector if a certain
+ * range of properties was written to.
+ * This function checks if offset is in the right range, and sets the flag
+ * on obj.-info- if it is.
+ */
+void updateInfoFlagViewVisible(Object *obj, int offset);
+#endif
+
} // End of namespace Sci
#endif // SCI_ENGINE_KERNEL_H
diff --git a/engines/sci/engine/vm.cpp b/engines/sci/engine/vm.cpp
index 3729fc5..5db3198 100644
--- a/engines/sci/engine/vm.cpp
+++ b/engines/sci/engine/vm.cpp
@@ -1095,6 +1095,9 @@ void run_vm(EngineState *s) {
case op_aTop: // 0x32 (50)
// Accumulator To Property
validate_property(s, obj, opparams[0]) = s->r_acc;
+#ifdef ENABLE_SCI32
+ updateInfoFlagViewVisible(obj, opparams[0]);
+#endif
break;
case op_pTos: // 0x33 (51)
@@ -1105,6 +1108,9 @@ void run_vm(EngineState *s) {
case op_sTop: // 0x34 (52)
// Stack To Property
validate_property(s, obj, opparams[0]) = POP32();
+#ifdef ENABLE_SCI32
+ updateInfoFlagViewVisible(obj, opparams[0]);
+#endif
break;
case op_ipToa: // 0x35 (53)
@@ -1119,7 +1125,9 @@ void run_vm(EngineState *s) {
opProperty += 1;
else
opProperty -= 1;
-
+#ifdef ENABLE_SCI32
+ updateInfoFlagViewVisible(obj, opparams[0]);
+#endif
if (opcode == op_ipToa || opcode == op_dpToa)
s->r_acc = opProperty;
else
Commit: 77bb83cdfd7bb3836fe55ca1fef6247198437108
https://github.com/scummvm/scummvm/commit/77bb83cdfd7bb3836fe55ca1fef6247198437108
Author: Willem Jan Palenstijn (wjp at usecode.org)
Date: 2016-02-27T14:21:23+01:00
Commit Message:
SCI32: Update InfoFlagViewVisible from send_selector
Changed paths:
engines/sci/engine/vm.cpp
diff --git a/engines/sci/engine/vm.cpp b/engines/sci/engine/vm.cpp
index 5db3198..66d9fee 100644
--- a/engines/sci/engine/vm.cpp
+++ b/engines/sci/engine/vm.cpp
@@ -258,6 +258,10 @@ static void _exec_varselectors(EngineState *s) {
if (xs.argc) { // write?
*var = xs.variables_argp[1];
+#ifdef ENABLE_SCI32
+ updateInfoFlagViewVisible(s->_segMan->getObject(xs.addr.varp.obj), xs.addr.varp.varindex);
+#endif
+
} else // No, read
s->r_acc = *var;
}
Commit: 154f592f513b860d8305d3c866ab79899e8f3184
https://github.com/scummvm/scummvm/commit/154f592f513b860d8305d3c866ab79899e8f3184
Author: Willem Jan Palenstijn (wjp at usecode.org)
Date: 2016-02-27T14:21:23+01:00
Commit Message:
SCI32: Clear InfoFlagViewVisible after updating ScreenItem
Changed paths:
engines/sci/graphics/screen_item32.cpp
diff --git a/engines/sci/graphics/screen_item32.cpp b/engines/sci/graphics/screen_item32.cpp
index 80d0308..0bbb056 100644
--- a/engines/sci/graphics/screen_item32.cpp
+++ b/engines/sci/graphics/screen_item32.cpp
@@ -215,14 +215,7 @@ void ScreenItem::setFromObject(SegManager *segMan, const reg_t object, const boo
_useInsetRect = false;
}
- // TODO: SCI2.1/SQ6 engine clears this flag any time ScreenItem::Update(MemID)
- // or ScreenItem::ScreenItem(MemID) are called, but doing this breaks
- // view cycling because the flag isn't being set again later. There are over
- // 100 places in the engine code where this flag is set, so it is probably
- // a matter of figuring out what all of those calls are that re-set it. For
- // now, since these are the *only* calls that clear this flag, we can just
- // leave it set all the time.
- // segMan->getObject(object)->clearInfoSelectorFlag(kInfoFlagViewVisible);
+ segMan->getObject(object)->clearInfoSelectorFlag(kInfoFlagViewVisible);
}
void ScreenItem::calcRects(const Plane &plane) {
More information about the Scummvm-git-logs
mailing list