[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