diff options
-rw-r--r-- | engines/sci/engine/seg_manager.cpp | 10 | ||||
-rw-r--r-- | engines/sci/engine/vm.h | 1 |
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 |