[Scummvm-cvs-logs] SF.net SVN: scummvm:[50919] scummvm/trunk/engines/sci

m_kiewitz at users.sourceforge.net m_kiewitz at users.sourceforge.net
Thu Jul 15 21:23:19 CEST 2010


Revision: 50919
          http://scummvm.svn.sourceforge.net/scummvm/?rev=50919&view=rev
Author:   m_kiewitz
Date:     2010-07-15 19:23:18 +0000 (Thu, 15 Jul 2010)

Log Message:
-----------
SCI: some big changes to kCantBeHere - kCantBeHere returns the actual "problem" instead of being a plain boolean - part of solving lsl1 casino door / qfg1vga gate

Modified Paths:
--------------
    scummvm/trunk/engines/sci/engine/kgraphics.cpp
    scummvm/trunk/engines/sci/graphics/compare.cpp
    scummvm/trunk/engines/sci/graphics/compare.h

Modified: scummvm/trunk/engines/sci/engine/kgraphics.cpp
===================================================================
--- scummvm/trunk/engines/sci/engine/kgraphics.cpp	2010-07-15 18:51:56 UTC (rev 50918)
+++ scummvm/trunk/engines/sci/engine/kgraphics.cpp	2010-07-15 19:23:18 UTC (rev 50919)
@@ -382,17 +382,16 @@
 	reg_t curObject = argv[0];
 	reg_t listReference = (argc > 1) ? argv[1] : NULL_REG;
 
-	bool canBeHere = g_sci->_gfxCompare->kernelCanBeHere(curObject, listReference);
-	return make_reg(0, canBeHere);
+	reg_t canBeHere = g_sci->_gfxCompare->kernelCanBeHere(curObject, listReference);
+	return make_reg(0, canBeHere.isNull() ? 1 : 0);
 }
 
-// kCantBeHere does the same thing as kCanBeHere, except that it returns the opposite result.
 reg_t kCantBeHere(EngineState *s, int argc, reg_t *argv) {
 	reg_t curObject = argv[0];
 	reg_t listReference = (argc > 1) ? argv[1] : NULL_REG;
 	
-	bool canBeHere = g_sci->_gfxCompare->kernelCanBeHere(curObject, listReference);
-	return make_reg(0, !canBeHere);
+	reg_t canBeHere = g_sci->_gfxCompare->kernelCanBeHere(curObject, listReference);
+	return make_reg(0, canBeHere.isNull() ? 0 : 1);
 }
 
 reg_t kIsItSkip(EngineState *s, int argc, reg_t *argv) {

Modified: scummvm/trunk/engines/sci/graphics/compare.cpp
===================================================================
--- scummvm/trunk/engines/sci/graphics/compare.cpp	2010-07-15 18:51:56 UTC (rev 50918)
+++ scummvm/trunk/engines/sci/graphics/compare.cpp	2010-07-15 19:23:18 UTC (rev 50919)
@@ -70,7 +70,7 @@
 	return result;
 }
 
-bool GfxCompare::canBeHereCheckRectList(reg_t checkObject, const Common::Rect &checkRect, List *list) {
+reg_t GfxCompare::canBeHereCheckRectList(reg_t checkObject, const Common::Rect &checkRect, List *list) {
 	reg_t curAddress = list->first;
 	Node *curNode = _segMan->lookupNode(curAddress);
 	reg_t curObject;
@@ -96,14 +96,14 @@
 				    curRect.left < checkRect.right &&
 				    curRect.bottom > checkRect.top &&
 				    curRect.top < checkRect.bottom) {
-					return false;
+					return curObject;
 				}
 			}
 		}
 		curAddress = curNode->succ;
 		curNode = _segMan->lookupNode(curAddress);
 	}
-	return true;
+	return NULL_REG;
 }
 
 uint16 GfxCompare::kernelOnControl(byte screenMask, const Common::Rect &rect) {
@@ -150,11 +150,11 @@
 	}
 }
 
-bool GfxCompare::kernelCanBeHere(reg_t curObject, reg_t listReference) {
+reg_t GfxCompare::kernelCanBeHere(reg_t curObject, reg_t listReference) {
 	Common::Rect checkRect;
 	Common::Rect adjustedRect;
 	uint16 signal, controlMask;
-	bool result;
+	uint16 result;
 
 	checkRect.left = readSelectorValue(_segMan, curObject, SELECTOR(brLeft));
 	checkRect.top = readSelectorValue(_segMan, curObject, SELECTOR(brTop));
@@ -163,22 +163,22 @@
 
 	if (!checkRect.isValidRect()) {	// can occur in Iceman - HACK? TODO: is this really occuring in sierra sci? check this
 		warning("kCan(t)BeHere - invalid rect %d, %d -> %d, %d", checkRect.left, checkRect.top, checkRect.right, checkRect.bottom);
-		return false;
+		return NULL_REG;
 	}
 
 	adjustedRect = _coordAdjuster->onControl(checkRect);
 
 	signal = readSelectorValue(_segMan, curObject, SELECTOR(signal));
 	controlMask = readSelectorValue(_segMan, curObject, SELECTOR(illegalBits));
-	result = (isOnControl(GFX_SCREEN_MASK_CONTROL, adjustedRect) & controlMask) ? false : true;
-	if ((result) && (signal & (kSignalIgnoreActor | kSignalRemoveView)) == 0) {
+	result = isOnControl(GFX_SCREEN_MASK_CONTROL, adjustedRect) & controlMask;
+	if ((!result) && (signal & (kSignalIgnoreActor | kSignalRemoveView)) == 0) {
 		List *list = _segMan->lookupList(listReference);
 		if (!list)
 			error("kCanBeHere called with non-list as parameter");
 
-		result = canBeHereCheckRectList(curObject, checkRect, list);
+		return canBeHereCheckRectList(curObject, checkRect, list);
 	}
-	return result;
+	return make_reg(0, result);
 }
 
 bool GfxCompare::kernelIsItSkip(GuiResourceId viewId, int16 loopNo, int16 celNo, Common::Point position) {

Modified: scummvm/trunk/engines/sci/graphics/compare.h
===================================================================
--- scummvm/trunk/engines/sci/graphics/compare.h	2010-07-15 18:51:56 UTC (rev 50918)
+++ scummvm/trunk/engines/sci/graphics/compare.h	2010-07-15 19:23:18 UTC (rev 50919)
@@ -42,7 +42,7 @@
 
 	uint16 kernelOnControl(byte screenMask, const Common::Rect &rect);
 	void kernelSetNowSeen(reg_t objectReference);
-	bool kernelCanBeHere(reg_t curObject, reg_t listReference);
+	reg_t kernelCanBeHere(reg_t curObject, reg_t listReference);
 	bool kernelIsItSkip(GuiResourceId viewId, int16 loopNo, int16 celNo, Common::Point position);
 	void kernelBaseSetter(reg_t object);
 
@@ -60,7 +60,7 @@
 	 * *different* from checkObject, has a brRect which is contained inside
 	 * checkRect.
 	 */
-	bool canBeHereCheckRectList(reg_t checkObject, const Common::Rect &checkRect, List *list);
+	reg_t canBeHereCheckRectList(reg_t checkObject, const Common::Rect &checkRect, List *list);
 };
 
 } // End of namespace Sci


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Scummvm-git-logs mailing list