[Scummvm-cvs-logs] scummvm master -> 6b3df0d9669d83eebd94976a9b995620e75445be

dreammaster dreammaster at scummvm.org
Thu Jul 9 02:50:06 CEST 2015


This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
6b3df0d966 SHERLOCK: RT: Implement handling of 2nd object requiredFlag


Commit: 6b3df0d9669d83eebd94976a9b995620e75445be
    https://github.com/scummvm/scummvm/commit/6b3df0d9669d83eebd94976a9b995620e75445be
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2015-07-08T20:49:00-04:00

Commit Message:
SHERLOCK: RT: Implement handling of 2nd object requiredFlag

Changed paths:
    engines/sherlock/inventory.cpp
    engines/sherlock/objects.cpp
    engines/sherlock/objects.h
    engines/sherlock/scene.cpp



diff --git a/engines/sherlock/inventory.cpp b/engines/sherlock/inventory.cpp
index 01d515c..9b08b9d 100644
--- a/engines/sherlock/inventory.cpp
+++ b/engines/sherlock/inventory.cpp
@@ -199,7 +199,7 @@ void Inventory::copyToInventory(Object &obj) {
 	invItem._description = obj._description;
 	invItem._examine = obj._examine;
 	invItem._lookFlag = obj._lookFlag;
-	invItem._requiredFlag = obj._requiredFlag;
+	invItem._requiredFlag = obj._requiredFlag[0];
 
 	insert_at(_holdings, invItem);
 	++_holdings;
diff --git a/engines/sherlock/objects.cpp b/engines/sherlock/objects.cpp
index 6471710..a278076 100644
--- a/engines/sherlock/objects.cpp
+++ b/engines/sherlock/objects.cpp
@@ -64,7 +64,7 @@ BaseObject::BaseObject() {
 	_allow = 0;
 	_frameNumber = 0;
 	_lookFlag = 0;
-	_requiredFlag = 0;
+	_requiredFlag[0] = _requiredFlag[1] = 0;
 	_status = 0;
 	_misc = 0;
 	_maxFrames = 0;
@@ -80,7 +80,6 @@ BaseObject::BaseObject() {
 	_seqSize = 0;
 	_quickDraw = 0;
 	_scaleVal = 0;
-	_requiredFlags1 = 0;
 	_gotoSeq = 0;
 	_talkSeq = 0;
 	_restoreSlot = 0;
@@ -980,7 +979,7 @@ void Object::load(Common::SeekableReadStream &s, bool isRoseTattoo) {
 	_defaultCommand = isRoseTattoo ? 0 : s.readByte();
 	_lookFlag = s.readSint16LE();
 	_pickupFlag = isRoseTattoo ? 0 : s.readSint16LE();
-	_requiredFlag = s.readSint16LE();
+	_requiredFlag[0] = s.readSint16LE();
 	_noShapeSize.x = s.readUint16LE();
 	_noShapeSize.y = s.readUint16LE();
 	_status = s.readUint16LE();
@@ -1019,7 +1018,7 @@ void Object::load(Common::SeekableReadStream &s, bool isRoseTattoo) {
 
 		_quickDraw = s.readByte();
 		_scaleVal = s.readUint16LE();
-		_requiredFlags1 = s.readSint16LE();
+		_requiredFlag[1] = s.readSint16LE();
 		_gotoSeq = s.readByte();
 		_talkSeq = s.readByte();
 		_restoreSlot = s.readByte();
@@ -1074,7 +1073,7 @@ void Object::load3DO(Common::SeekableReadStream &s) {
 	// Unverified
 	_lookFlag = s.readSint16BE();
 	_pickupFlag = s.readSint16BE();
-	_requiredFlag = s.readSint16BE();
+	_requiredFlag[0] = s.readSint16BE();
 	_noShapeSize.x = s.readUint16BE();
 	_noShapeSize.y = s.readUint16BE();
 	_status = s.readUint16BE();
diff --git a/engines/sherlock/objects.h b/engines/sherlock/objects.h
index ef62ff9..8cfb466 100644
--- a/engines/sherlock/objects.h
+++ b/engines/sherlock/objects.h
@@ -218,7 +218,7 @@ public:
 	Point32 _goto;					// Walk destination
 
 	int _lookFlag;					// Which flag LOOK   will set (if any)
-	int _requiredFlag;				// Object will be hidden if not set
+	int _requiredFlag[2];			// Object will be hidden if not set
 	Common::Point _noShapeSize;		// Size of a NO_SHAPE
 	int _status;					// Status (open/closed, moved/not)
 	int8 _misc;						// Misc field -- use varies with type
@@ -237,7 +237,6 @@ public:
 	UseType _use[6];				// Serrated Scalpel uses 4, Rose Tattoo 6
 	int _quickDraw;					// Flag telling whether to use quick draw routine or not
 	int _scaleVal;					// Tells how to scale the sprite
-	int _requiredFlags1;			// This flag must also be set, or the sprite is hidden
 	int _gotoSeq;					// Used by Talk to tell which sequence to goto when able
 	int _talkSeq;					// Tells which talk sequence currently in use (Talk or Listen)
 	int _restoreSlot;				// Used when talk returns to the previous sequence
diff --git a/engines/sherlock/scene.cpp b/engines/sherlock/scene.cpp
index 450370d..4e5cacb 100644
--- a/engines/sherlock/scene.cpp
+++ b/engines/sherlock/scene.cpp
@@ -1099,9 +1099,15 @@ void Scene::checkSceneFlags(bool flag) {
 
 	for (uint idx = 0; idx < _bgShapes.size(); ++idx) {
 		Object &o = _bgShapes[idx];
+		bool flag = true;
 
-		if (o._requiredFlag) {
-			if (!_vm->readFlags(_bgShapes[idx]._requiredFlag)) {
+		if (o._requiredFlag[0] || o._requiredFlag[1]) {
+			if (o._requiredFlag[0] != 0)
+				flag = _vm->readFlags(o._requiredFlag[0]);
+			if (o._requiredFlag[1] != 0)
+				flag &= _vm->readFlags(o._requiredFlag[1]);
+
+			if (!flag) {
 				// Kill object
 				if (o._type != HIDDEN && o._type != INVALID) {
 					if (o._images == nullptr || o._images->size() == 0)
@@ -1111,7 +1117,7 @@ void Scene::checkSceneFlags(bool flag) {
 						// Flag it as needing to be hidden after first erasing it
 						o._type = mode;
 				}
-			} else if (_bgShapes[idx]._requiredFlag > 0) {
+			} else if (IS_ROSE_TATTOO || o._requiredFlag > 0) {
 				// Restore object
 				if (o._images == nullptr || o._images->size() == 0)
 					o._type = NO_SHAPE;






More information about the Scummvm-git-logs mailing list