aboutsummaryrefslogtreecommitdiff
path: root/engines/sci/engine/seg_manager.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/sci/engine/seg_manager.cpp')
-rw-r--r--engines/sci/engine/seg_manager.cpp23
1 files changed, 8 insertions, 15 deletions
diff --git a/engines/sci/engine/seg_manager.cpp b/engines/sci/engine/seg_manager.cpp
index 50a0d094af..5c9eb9141c 100644
--- a/engines/sci/engine/seg_manager.cpp
+++ b/engines/sci/engine/seg_manager.cpp
@@ -242,6 +242,8 @@ Object *SegManager::getObject(reg_t pos) {
CloneTable *ct = (CloneTable *)mobj;
if (ct->isValidEntry(pos.offset))
obj = &(ct->_table[pos.offset]);
+ else
+ warning("getObject(): Trying to get an invalid object");
} else if (mobj->getType() == SEG_TYPE_SCRIPT) {
Script *scr = (Script *)mobj;
if (pos.offset <= scr->_bufSize && pos.offset >= -SCRIPT_OBJECT_MAGIC_OFFSET
@@ -658,9 +660,9 @@ void SegManager::scriptInitialiseObjectsSci11(SegmentId seg) {
#if 0
if (obj->_variables[5].offset != 0xffff) {
obj->_variables[5] = INST_LOOKUP_CLASS(obj->_variables[5].offset);
- base_obj = getObject(obj->_variables[5]);
- obj->variable_names_nr = base_obj->variables_nr;
- obj->base_obj = base_obj->base_obj;
+ _baseObj = getObject(obj->_variables[5]);
+ obj->variable_names_nr = _baseObj->variables_nr;
+ obj->_baseObj = _baseObj->_baseObj;
}
#endif
@@ -769,8 +771,6 @@ void SegManager::reconstructClones() {
CloneTable *ct = (CloneTable *)mobj;
for (uint j = 0; j < ct->_table.size(); j++) {
- Object *base_obj;
-
// Check if the clone entry is used
uint entryNum = (uint)ct->first_free;
bool isUsed = true;
@@ -786,17 +786,10 @@ void SegManager::reconstructClones() {
continue;
CloneTable::Entry &seeker = ct->_table[j];
- base_obj = getObject(seeker.getSpeciesSelector());
- if (!base_obj) {
+ Object *_baseObj = getObject(seeker.getSpeciesSelector());
+ seeker.cloneFromObject(_baseObj);
+ if (!_baseObj)
warning("Clone entry without a base class: %d", j);
- seeker.base_obj = NULL;
- seeker.base_vars = NULL;
- seeker.base_method = NULL;
- } else {
- seeker.base_obj = base_obj->base_obj;
- seeker.base_vars = base_obj->base_vars;
- seeker.base_method = base_obj->base_method;
- }
} // end for
} // end if
} // end if