diff options
-rw-r--r-- | engines/sci/engine/script.cpp | 17 | ||||
-rw-r--r-- | engines/sci/engine/segment.cpp | 6 | ||||
-rw-r--r-- | engines/sci/engine/segment.h | 8 | ||||
-rw-r--r-- | engines/sci/engine/vm.h | 5 |
4 files changed, 7 insertions, 29 deletions
diff --git a/engines/sci/engine/script.cpp b/engines/sci/engine/script.cpp index 5916428432..c548ce5cdc 100644 --- a/engines/sci/engine/script.cpp +++ b/engines/sci/engine/script.cpp @@ -191,11 +191,11 @@ void SegManager::scriptInitialiseObjectsSci0(SegmentId seg) { uint16 curOffset = oldScriptHeader ? 2 : 0; do { - objType = scr->getHeap(curOffset); + objType = READ_SCI11ENDIAN_UINT16(scr->_buf + curOffset); if (!objType) break; - objLength = scr->getHeap(curOffset + 2); + objLength = READ_SCI11ENDIAN_UINT16(scr->_buf + curOffset + 2); curOffset += 4; // skip header addr = make_reg(seg, curOffset);; @@ -204,7 +204,7 @@ void SegManager::scriptInitialiseObjectsSci0(SegmentId seg) { case SCI_OBJ_CLASS: if (pass == 0 && objType == SCI_OBJ_CLASS) { int classpos = curOffset + 8; // SCRIPT_OBJECT_MAGIC_OFFSET - int species = scr->getHeap(classpos); + int species = READ_SCI11ENDIAN_UINT16(scr->_buf + classpos); if (species == (int)classTableSize()) { // Happens in the LSL2 demo @@ -335,19 +335,16 @@ void script_uninstantiate_sci0(SegManager *segMan, int script_nr, SegmentId seg) do { reg.offset += objLength; // Step over the last checked object - objType = scr->getHeap(reg.offset); + objType = READ_SCI11ENDIAN_UINT16(scr->_buf + reg.offset); if (!objType) break; - objLength = scr->getHeap(reg.offset + 2); // use SEG_UGET_HEAP ?? + objLength = READ_SCI11ENDIAN_UINT16(scr->_buf + reg.offset + 2); reg.offset += 4; // Step over header if ((objType == SCI_OBJ_OBJECT) || (objType == SCI_OBJ_CLASS)) { // object or class? - int superclass; - - reg.offset -= SCRIPT_OBJECT_MAGIC_OFFSET; - - superclass = scr->getHeap(reg.offset + SCRIPT_SUPERCLASS_OFFSET); // Get superclass... + reg.offset += 8; // magic offset (SCRIPT_OBJECT_MAGIC_OFFSET) + int superclass = READ_SCI11ENDIAN_UINT16(scr->_buf + reg.offset + 2); if (superclass >= 0) { int superclass_script = segMan->getClass(superclass).script; diff --git a/engines/sci/engine/segment.cpp b/engines/sci/engine/segment.cpp index 0a39d950b0..4524241110 100644 --- a/engines/sci/engine/segment.cpp +++ b/engines/sci/engine/segment.cpp @@ -417,12 +417,6 @@ void Script::mcpyInOut(int dst, const void *src, size_t n) { } } -int16 Script::getHeap(uint16 offset) const { - assert(offset + 1 < (int)_bufSize); - return READ_SCI11ENDIAN_UINT16(_buf + offset); -// return (_buf[offset] | (_buf[offset+1]) << 8); -} - SegmentRef SegmentObj::dereference(reg_t pointer) { error("Error: Trying to dereference pointer %04x:%04x to inappropriate segment", PRINT_REG(pointer)); diff --git a/engines/sci/engine/segment.h b/engines/sci/engine/segment.h index 58f016a654..24d27e367f 100644 --- a/engines/sci/engine/segment.h +++ b/engines/sci/engine/segment.h @@ -501,14 +501,6 @@ public: */ void mcpyInOut(int dst, const void *src, size_t n); - - /** - * Retrieves a 16 bit value from within a script's heap representation. - * @param offset offset to read from - * @return the value read from the specified location - */ - int16 getHeap(uint16 offset) const; - /** * Finds the pointer where a block of a specific type starts from */ diff --git a/engines/sci/engine/vm.h b/engines/sci/engine/vm.h index d747ddd113..0938520525 100644 --- a/engines/sci/engine/vm.h +++ b/engines/sci/engine/vm.h @@ -49,11 +49,6 @@ class ResourceManager; /** Offset of this identifier */ #define SCRIPT_OBJECT_MAGIC_OFFSET (getSciVersion() < SCI_VERSION_1_1 ? -8 : 0) -/** Script-relative offset of the species ID */ -#define SCRIPT_SPECIES_OFFSET 8 -8 - -#define SCRIPT_SUPERCLASS_OFFSET (getSciVersion() < SCI_VERSION_1_1 ? 10 -8 : 12) - /** Stack pointer value: Use predecessor's value */ #define CALL_SP_CARRY NULL |