aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/sci/engine/script.cpp15
-rw-r--r--engines/sci/engine/script.h8
2 files changed, 23 insertions, 0 deletions
diff --git a/engines/sci/engine/script.cpp b/engines/sci/engine/script.cpp
index 292c0e0efc..6034378ef6 100644
--- a/engines/sci/engine/script.cpp
+++ b/engines/sci/engine/script.cpp
@@ -65,7 +65,11 @@ void Script::freeScript() {
_lockers = 1;
_markedAsDeleted = false;
_objects.clear();
+
_offsetLookupArray.clear();
+ _offsetLookupObjectCount = 0;
+ _offsetLookupStringCount = 0;
+ _offsetLookupSaidCount = 0;
}
void Script::load(int script_nr, ResourceManager *resMan, ScriptPatcher *scriptPatcher) {
@@ -227,6 +231,10 @@ void Script::identifyOffsets() {
uint16 blockSize = 0;
_offsetLookupArray.clear();
+ _offsetLookupObjectCount = 0;
+ _offsetLookupStringCount = 0;
+ _offsetLookupSaidCount = 0;
+
if (getSciVersion() < SCI_VERSION_1_1) {
// SCI0 + SCI1
scriptDataPtr = _buf;
@@ -272,6 +280,7 @@ void Script::identifyOffsets() {
arrayEntry.offset = scriptDataPtr - _buf + 8; // Calculate offset inside script data (VM uses +8)
arrayEntry.stringSize = 0;
_offsetLookupArray.push_back(arrayEntry);
+ _offsetLookupObjectCount++;
break;
case SCI_OBJ_STRINGS:
@@ -316,6 +325,7 @@ void Script::identifyOffsets() {
arrayEntry.offset = stringStartPtr - _buf; // Calculate offset inside script data
arrayEntry.stringSize = stringDataPtr - stringStartPtr;
_offsetLookupArray.push_back(arrayEntry);
+ _offsetLookupStringCount++;
} while (1);
break;
@@ -365,6 +375,7 @@ void Script::identifyOffsets() {
arrayEntry.offset = stringStartPtr - _buf; // Calculate offset inside script data
arrayEntry.stringSize = 0;
_offsetLookupArray.push_back(arrayEntry);
+ _offsetLookupSaidCount++;
} while (1);
break;
@@ -415,6 +426,7 @@ void Script::identifyOffsets() {
arrayEntry.offset = scriptDataPtr - _buf - 2; // the VM uses a pointer to the Magic-Number
arrayEntry.stringSize = 0;
_offsetLookupArray.push_back(arrayEntry);
+ _offsetLookupObjectCount++;
if (scriptDataLeft < 2)
error("Script::identifyOffsets(): unexpected end of script in script %d", _nr);
@@ -467,6 +479,7 @@ void Script::identifyOffsets() {
arrayEntry.offset = stringStartPtr - _buf; // Calculate offset inside script data
arrayEntry.stringSize = stringDataPtr - stringStartPtr;
_offsetLookupArray.push_back(arrayEntry);
+ _offsetLookupStringCount++;
} while (1);
} else if (getSciVersion() == SCI_VERSION_3) {
@@ -504,6 +517,7 @@ void Script::identifyOffsets() {
arrayEntry.offset = scriptDataPtr - _buf - 2; // the VM uses a pointer to the Magic-Number
arrayEntry.stringSize = 0;
_offsetLookupArray.push_back(arrayEntry);
+ _offsetLookupObjectCount++;
if (scriptDataLeft < 2)
error("Script::identifyOffsets(): unexpected end of script in script %d", _nr);
@@ -570,6 +584,7 @@ void Script::identifyOffsets() {
arrayEntry.offset = stringStartPtr - _buf; // Calculate offset inside script data
arrayEntry.stringSize = stringDataPtr - stringStartPtr;
_offsetLookupArray.push_back(arrayEntry);
+ _offsetLookupStringCount++;
// SCI3 seems to have aligned all string on DWORD boundaries
sci3BoundaryOffset = stringDataPtr - _buf; // Calculate current offset inside script data
diff --git a/engines/sci/engine/script.h b/engines/sci/engine/script.h
index abe6409b98..755e2f3698 100644
--- a/engines/sci/engine/script.h
+++ b/engines/sci/engine/script.h
@@ -93,6 +93,11 @@ private:
protected:
offsetLookupArrayType _offsetLookupArray; // Table of all elements of currently loaded script, that may get pointed to
+private:
+ uint16 _offsetLookupObjectCount;
+ uint16 _offsetLookupStringCount;
+ uint16 _offsetLookupSaidCount;
+
public:
int getLocalsOffset() const { return _localsOffset; }
uint16 getLocalsCount() const { return _localsCount; }
@@ -270,6 +275,9 @@ public:
* Get the offset array
*/
const offsetLookupArrayType *getOffsetArray() { return &_offsetLookupArray; };
+ uint16 getOffsetObjectCount() { return _offsetLookupObjectCount; };
+ uint16 getOffsetStringCount() { return _offsetLookupStringCount; };
+ uint16 getOffsetSaidCount() { return _offsetLookupSaidCount; };
private:
/**