aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
authorMax Horn2009-10-21 10:00:08 +0000
committerMax Horn2009-10-21 10:00:08 +0000
commit1e8883dcccfd490ba8844bb46cc90d5437c6f3f1 (patch)
treeb60582df1fe9c3305426f13984f14001edb7ab92 /engines
parent745be029b2ecf2c18c5462213aae699b37c0450a (diff)
downloadscummvm-rg350-1e8883dcccfd490ba8844bb46cc90d5437c6f3f1.tar.gz
scummvm-rg350-1e8883dcccfd490ba8844bb46cc90d5437c6f3f1.tar.bz2
scummvm-rg350-1e8883dcccfd490ba8844bb46cc90d5437c6f3f1.zip
SCI: Fix warning, and reformat a multi-line comment
svn-id: r45303
Diffstat (limited to 'engines')
-rw-r--r--engines/sci/engine/vm.cpp33
1 files changed, 18 insertions, 15 deletions
diff --git a/engines/sci/engine/vm.cpp b/engines/sci/engine/vm.cpp
index 5f57c0fe72..eb154b1ad7 100644
--- a/engines/sci/engine/vm.cpp
+++ b/engines/sci/engine/vm.cpp
@@ -145,25 +145,28 @@ static reg_t validate_read_var(reg_t *r, reg_t *stack_base, int type, int max, i
static void validate_write_var(reg_t *r, reg_t *stack_base, int type, int max, int index, int line, reg_t value, SegManager *segMan, Kernel *kernel) {
if (!validate_variable(r, stack_base, type, max, index, line)) {
- // This code is needed to work around a probable script bug, or a limitation of the
- // original SCI engine, which can be observed in LSL5.
- // In some games, ego walks via the "Grooper" object, in particular its "stopGroop" child.
- // In LSL5, during the game, ego is swapped from Larry to Patti. When this happens in the
- // original interpreter, the new actor is loaded in the same memory location as the old
- // one, therefore the client variable in the stopGroop object points to the new actor.
- // This is probably why the reference of the stopGroop object is never updated (which
- // is why I mentioned that this is either a script bug or some kind of limitation).
- // In our implementation, each new object is loaded in a different memory location, and
- // we can't overwrite the old one. This means that in our implementation, whenever ego is
- // changed, we need to update the "client" variable of the stopGroop object, which points
- // to ego, to the new ego object. If this is not done, ego's movement will not be updated
- // properly, so the result is unpredictable (for example in LSL5, Patti spins around instead
- // of walking)
+ // WORKAROUND: This code is needed to work around a probable script bug, or a
+ // limitation of the original SCI engine, which can be observed in LSL5.
+ //
+ // In some games, ego walks via the "Grooper" object, in particular its "stopGroop"
+ // child. In LSL5, during the game, ego is swapped from Larry to Patti. When this
+ // happens in the original interpreter, the new actor is loaded in the same memory
+ // location as the old one, therefore the client variable in the stopGroop object
+ // points to the new actor. This is probably why the reference of the stopGroop
+ // object is never updated (which is why I mentioned that this is either a script
+ // bug or some kind of limitation).
+ //
+ // In our implementation, each new object is loaded in a different memory location,
+ // and we can't overwrite the old one. This means that in our implementation,
+ // whenever ego is changed, we need to update the "client" variable of the
+ // stopGroop object, which points to ego, to the new ego object. If this is not
+ // done, ego's movement will not be updated properly, so the result is
+ // unpredictable (for example in LSL5, Patti spins around instead of walking).
if (index == 0 && type == VAR_GLOBAL) { // global 0 is ego
reg_t stopGroopPos = segMan->findObjectByName("stopGroop");
if (!stopGroopPos.isNull()) { // does the game have a stopGroop object?
// Notify the stopGroop object that Ego changed
- Object *stopGroopObj = segMan->getObject(stopGroopPos);
+ //Object *stopGroopObj = segMan->getObject(stopGroopPos);
// Find the "client" member variable, and update it
ObjVarRef varp;
if (lookup_selector(segMan, stopGroopPos, kernel->_selectorCache.client, &varp, NULL) == kSelectorVariable) {