aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
authorWalter van Niftrik2009-05-14 22:33:31 +0000
committerWalter van Niftrik2009-05-14 22:33:31 +0000
commit67ce8fee8545deae84bc7bc46a2c725e41c2e153 (patch)
tree8b5a34db9d4276e8447f62fc52a42ed3c1d90610 /engines
parent61d9a42c56523388dc22c581c63c5ad0615ff750 (diff)
downloadscummvm-rg350-67ce8fee8545deae84bc7bc46a2c725e41c2e153.tar.gz
scummvm-rg350-67ce8fee8545deae84bc7bc46a2c725e41c2e153.tar.bz2
scummvm-rg350-67ce8fee8545deae84bc7bc46a2c725e41c2e153.zip
SCI: A provisional fix for the "invalid selector" problem in KQ6 and other
SCI1.1 games. svn-id: r40575
Diffstat (limited to 'engines')
-rw-r--r--engines/sci/engine/seg_manager.cpp10
-rw-r--r--engines/sci/engine/vm.h1
2 files changed, 10 insertions, 1 deletions
diff --git a/engines/sci/engine/seg_manager.cpp b/engines/sci/engine/seg_manager.cpp
index df0561a5e1..c88023166c 100644
--- a/engines/sci/engine/seg_manager.cpp
+++ b/engines/sci/engine/seg_manager.cpp
@@ -863,7 +863,15 @@ void SegManager::scriptInitialiseObjectsSci11(EngineState *s, int seg) {
#endif
// Copy base from species class, as we need its selector IDs
- obj->_variables[6] = INST_LOOKUP_CLASS(obj->_variables[6].offset);
+ obj->_variables[SCRIPT_SUPERCLASS_SELECTOR] = INST_LOOKUP_CLASS(obj->_variables[SCRIPT_SUPERCLASS_SELECTOR].offset);
+
+ // Set the -classScript- selector to the script number.
+ // FIXME: As this selector is filled in at run-time, it is likely
+ // that it is supposed to hold a pointer. The Obj::isKindOf method
+ // uses this selector together with -propDict- to compare classes.
+ // For the purpose of Obj::isKindOf, using the script number appears
+ // to be sufficient.
+ obj->_variables[SCRIPT_CLASSSCRIPT_SELECTOR] = make_reg(0, scr->nr);
seeker += READ_LE_UINT16(seeker + 2) * 2;
}
diff --git a/engines/sci/engine/vm.h b/engines/sci/engine/vm.h
index 67b005ad3e..61e34690a6 100644
--- a/engines/sci/engine/vm.h
+++ b/engines/sci/engine/vm.h
@@ -203,6 +203,7 @@ public:
/*---------------------------------*/
#define SCRIPT_SPECIES_SELECTOR (s->version < SCI_VERSION(1,001,000) ? 0 : 5)
#define SCRIPT_SUPERCLASS_SELECTOR (s->version < SCI_VERSION(1,001,000) ? 1 : 6)
+#define SCRIPT_CLASSSCRIPT_SELECTOR 4
/** Magic adjustment value for lofsa and lofss */
#define SCRIPT_LOFS_MAGIC 3