[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