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

fingolfin at users.sourceforge.net fingolfin at users.sourceforge.net
Thu Sep 17 15:22:00 CEST 2009


Revision: 44153
          http://scummvm.svn.sourceforge.net/scummvm/?rev=44153&view=rev
Author:   fingolfin
Date:     2009-09-17 13:22:00 +0000 (Thu, 17 Sep 2009)

Log Message:
-----------
SCI: Get rid of the not_register() hack

Modified Paths:
--------------
    scummvm/trunk/engines/sci/engine/kernel.cpp
    scummvm/trunk/engines/sci/engine/kernel.h
    scummvm/trunk/engines/sci/engine/kgraphics.cpp
    scummvm/trunk/engines/sci/engine/kmovement.cpp
    scummvm/trunk/engines/sci/engine/state.h

Modified: scummvm/trunk/engines/sci/engine/kernel.cpp
===================================================================
--- scummvm/trunk/engines/sci/engine/kernel.cpp	2009-09-17 13:21:42 UTC (rev 44152)
+++ scummvm/trunk/engines/sci/engine/kernel.cpp	2009-09-17 13:22:00 UTC (rev 44153)
@@ -276,7 +276,7 @@
 	// Opcode 51 is defined twice for a reason: In older SCI versions
 	// it is CanBeHere, whereas in newer version it is CantBeHere
 	/*51*/	DEFUN("CanBeHere", kCanBeHere, "ol*"),
-	/*51*/	DEFUN("CantBeHere", kCanBeHere, "ol*"),
+	/*51*/	DEFUN("CantBeHere", kCantBeHere, "ol*"),
 	/*52*/	DEFUN("OnControl", kOnControl, "i*"),
 	/*53*/	DEFUN("InitBresen", kInitBresen, "oi*"),
 	/*54*/	DEFUN("DoBresen", kDoBresen, "o"),

Modified: scummvm/trunk/engines/sci/engine/kernel.h
===================================================================
--- scummvm/trunk/engines/sci/engine/kernel.h	2009-09-17 13:21:42 UTC (rev 44152)
+++ scummvm/trunk/engines/sci/engine/kernel.h	2009-09-17 13:22:00 UTC (rev 44153)
@@ -416,6 +416,7 @@
 reg_t kClone(EngineState *s, int, int argc, reg_t *argv);
 reg_t kDisposeClone(EngineState *s, int, int argc, reg_t *argv);
 reg_t kCanBeHere(EngineState *s, int, int argc, reg_t *argv);
+reg_t kCantBeHere(EngineState *s, int, int argc, reg_t *argv);
 reg_t kSetNowSeen(EngineState *s, int, int argc, reg_t *argv);
 reg_t kInitBresen(EngineState *s, int, int argc, reg_t *argv);
 reg_t kDoBresen(EngineState *s, int, int argc, reg_t *argv);

Modified: scummvm/trunk/engines/sci/engine/kgraphics.cpp
===================================================================
--- scummvm/trunk/engines/sci/engine/kgraphics.cpp	2009-09-17 13:21:42 UTC (rev 44152)
+++ scummvm/trunk/engines/sci/engine/kgraphics.cpp	2009-09-17 13:22:00 UTC (rev 44153)
@@ -791,7 +791,7 @@
 	debugC(2, kDebugLevelBresen, "edgehit = %04x (illegalBits %04x)\n", edgehit, illegal_bits);
 	if (retval == 0) {
 		debugC(2, kDebugLevelBresen, " -> %04x\n", retval);
-		return not_register(s, NULL_REG); // Can't BeHere
+		return NULL_REG; // Can't BeHere
 	}
 
 	retval = 0;
@@ -807,7 +807,7 @@
 			        && ((widget->_ID != obj.segment) || (widget->_subID != obj.offset))
 			        && s->segMan->isObject(make_reg(widget->_ID, widget->_subID)))
 				if (collides_with(s, abs_zone, make_reg(widget->_ID, widget->_subID), 1, GASEOUS_VIEW_MASK_ACTIVE, argc, argv))
-					return not_register(s, NULL_REG);
+					return NULL_REG;
 
 			widget = (GfxDynView *)widget->_next;
 		}
@@ -816,7 +816,7 @@
 	if (signal & GASEOUS_VIEW_MASK_ACTIVE) {
 		retval = signal & GASEOUS_VIEW_MASK_ACTIVE; // CanBeHere- it's either being disposed, or it ignores actors anyway
 		debugC(2, kDebugLevelBresen, " -> %04x\n", retval);
-		return not_register(s, make_reg(0, retval)); // CanBeHere
+		return make_reg(0, retval); // CanBeHere
 	}
 
 	if (cliplist_ref.segment)
@@ -837,7 +837,7 @@
 
 				if (collides_with(s, abs_zone, other_obj, 0, GASEOUS_VIEW_MASK_PASSIVE, argc, argv)) {
 					debugC(2, kDebugLevelBresen, " -> %04x\n", retval);
-					return not_register(s, NULL_REG);
+					return NULL_REG;
 				}
 
 			} // if (other_obj != obj)
@@ -849,9 +849,17 @@
 		retval = 1;
 	debugC(2, kDebugLevelBresen, " -> %04x\n", retval);
 
-	return not_register(s, make_reg(0, retval));
+	return make_reg(0, retval);
 }  // CanBeHere
 
+reg_t kCantBeHere(EngineState *s, int, int argc, reg_t *argv) {
+	// kCantBeHere does the same thing as kCanBeHere, except that
+	// it returns the opposite result.
+	reg_t result = kCanBeHere(s, 0, argc, argv);
+	result.offset = !result.offset;
+	return result;
+}
+
 reg_t kIsItSkip(EngineState *s, int, int argc, reg_t *argv) {
 	int view = argv[0].toSint16();
 	int loop = argv[1].toSint16();

Modified: scummvm/trunk/engines/sci/engine/kmovement.cpp
===================================================================
--- scummvm/trunk/engines/sci/engine/kmovement.cpp	2009-09-17 13:21:42 UTC (rev 44152)
+++ scummvm/trunk/engines/sci/engine/kmovement.cpp	2009-09-17 13:22:00 UTC (rev 44153)
@@ -365,13 +365,13 @@
 
 	debugC(2, kDebugLevelBresen, "New data: (x,y)=(%d,%d), di=%d\n", x, y, bdi);
 
-	if (((SciEngine*)g_engine)->getKernel()->_selectorCache.cantBeHere != -1)
+	if (((SciEngine*)g_engine)->getKernel()->_selectorCache.cantBeHere != -1) {
 		invoke_selector(INV_SEL(client, cantBeHere, kStopOnInvalidSelector), 0);
-	else
+		s->r_acc = make_reg(0, !s->r_acc.offset);
+	} else {
 		invoke_selector(INV_SEL(client, canBeHere, kStopOnInvalidSelector), 0);
+	}
 
-	s->r_acc = not_register(s, s->r_acc);
-
 	if (!s->r_acc.offset) { // Contains the return value
 		signal = GET_SEL32V(client, signal);
 

Modified: scummvm/trunk/engines/sci/engine/state.h
===================================================================
--- scummvm/trunk/engines/sci/engine/state.h	2009-09-17 13:21:42 UTC (rev 44152)
+++ scummvm/trunk/engines/sci/engine/state.h	2009-09-17 13:22:00 UTC (rev 44153)
@@ -322,20 +322,6 @@
  */
 PaletteEntry get_pic_color(EngineState *s, int color);
 
-// FIXME: Document this strange function.
-// It seems to negate the given register but only if the "cantBeHere" exists.
-// My guess: Since some SCI versions have cantBeHere and some have canBeHere,
-// this function allows unifying the code, making it look identical for both
-// kinds of SCI games. That's fine, but the name not_register is rather
-// misleading. A different name (and a different place for declaring this)
-// would be highly welcome.
-static inline reg_t not_register(EngineState *s, reg_t r) {
-	if (((SciEngine*)g_engine)->getKernel()->_selectorCache.cantBeHere != -1)
-		return make_reg(0, !r.offset);
-	else
-		return r;
-}
-
 } // End of namespace Sci
 
 #endif // SCI_INCLUDE_ENGINE_H


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