aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFilippos Karapetis2012-06-15 11:53:19 +0300
committerFilippos Karapetis2012-06-15 12:24:18 +0300
commit9aaefbd53665cd03359ad692d64e3fc437f97202 (patch)
tree7eafb44db6261354dd13ab81fdfe06e77e03d77c
parente1ae1108601cce0ad7aeab5f3e017f630f02e7ea (diff)
downloadscummvm-rg350-9aaefbd53665cd03359ad692d64e3fc437f97202.tar.gz
scummvm-rg350-9aaefbd53665cd03359ad692d64e3fc437f97202.tar.bz2
scummvm-rg350-9aaefbd53665cd03359ad692d64e3fc437f97202.zip
SCI: _propertyOffsetsSci3 and classpos should be 32-bit integers
These are needed for future handling of large SCI3 script files
-rw-r--r--engines/sci/engine/object.cpp7
-rw-r--r--engines/sci/engine/object.h4
-rw-r--r--engines/sci/engine/script.cpp2
3 files changed, 7 insertions, 6 deletions
diff --git a/engines/sci/engine/object.cpp b/engines/sci/engine/object.cpp
index 78e216cdb5..2a0ed38e61 100644
--- a/engines/sci/engine/object.cpp
+++ b/engines/sci/engine/object.cpp
@@ -112,7 +112,7 @@ bool Object::relocateSci0Sci21(SegmentId segment, int location, size_t scriptSiz
return relocateBlock(_variables, getPos().offset, segment, location, scriptSize);
}
-bool Object::relocateSci3(SegmentId segment, int location, int offset, size_t scriptSize) {
+bool Object::relocateSci3(SegmentId segment, uint32 location, int offset, size_t scriptSize) {
assert(_propertyOffsetsSci3);
for (uint i = 0; i < _variables.size(); ++i) {
@@ -286,7 +286,7 @@ void Object::initSelectorsSci3(const byte *buf) {
_variables.resize(properties);
uint16 *propertyIds = (uint16 *)malloc(sizeof(uint16) * properties);
// uint16 *methodOffsets = (uint16 *)malloc(sizeof(uint16) * 2 * methods);
- uint16 *propertyOffsets = (uint16 *)malloc(sizeof(uint16) * properties);
+ uint32 *propertyOffsets = (uint32 *)malloc(sizeof(uint32) * properties);
int propertyCounter = 0;
int methodCounter = 0;
@@ -314,7 +314,8 @@ void Object::initSelectorsSci3(const byte *buf) {
WRITE_SCI11ENDIAN_UINT16(&propertyIds[propertyCounter],
groupBaseId + bit);
_variables[propertyCounter] = make_reg(0, value);
- propertyOffsets[propertyCounter] = (seeker + bit * 2) - buf;
+ uint32 propertyOffset = (seeker + bit * 2) - buf;
+ propertyOffsets[propertyCounter] = propertyOffset;
++propertyCounter;
} else if (value != 0xffff) { // Method
_baseMethod.push_back(groupBaseId + bit);
diff --git a/engines/sci/engine/object.h b/engines/sci/engine/object.h
index 0ca16b48a2..e8deafa8bd 100644
--- a/engines/sci/engine/object.h
+++ b/engines/sci/engine/object.h
@@ -223,7 +223,7 @@ public:
}
bool relocateSci0Sci21(SegmentId segment, int location, size_t scriptSize);
- bool relocateSci3(SegmentId segment, int location, int offset, size_t scriptSize);
+ bool relocateSci3(SegmentId segment, uint32 location, int offset, size_t scriptSize);
int propertyOffsetToId(SegManager *segMan, int propertyOffset) const;
@@ -238,7 +238,7 @@ private:
const byte *_baseObj; /**< base + object offset within base */
const uint16 *_baseVars; /**< Pointer to the varselector area for this object */
Common::Array<uint16> _baseMethod; /**< Pointer to the method selector area for this object */
- uint16 *_propertyOffsetsSci3; /**< This is used to enable relocation of property valuesa in SCI3 */
+ uint32 *_propertyOffsetsSci3; /**< This is used to enable relocation of property valuesa in SCI3 */
Common::Array<reg_t> _variables;
uint16 _methodCount;
diff --git a/engines/sci/engine/script.cpp b/engines/sci/engine/script.cpp
index f8c5539325..18e23f36b5 100644
--- a/engines/sci/engine/script.cpp
+++ b/engines/sci/engine/script.cpp
@@ -546,7 +546,7 @@ void Script::initializeClasses(SegManager *segMan) {
uint16 marker;
bool isClass = false;
- uint16 classpos;
+ uint32 classpos;
int16 species = 0;
while (true) {