aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/sci/engine/script.cpp17
-rw-r--r--engines/sci/engine/segment.cpp6
-rw-r--r--engines/sci/engine/segment.h8
-rw-r--r--engines/sci/engine/vm.h5
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