aboutsummaryrefslogtreecommitdiff
path: root/engines/sci/engine/segment.h
diff options
context:
space:
mode:
Diffstat (limited to 'engines/sci/engine/segment.h')
-rw-r--r--engines/sci/engine/segment.h49
1 files changed, 24 insertions, 25 deletions
diff --git a/engines/sci/engine/segment.h b/engines/sci/engine/segment.h
index 38f1895fdd..7266dc3b38 100644
--- a/engines/sci/engine/segment.h
+++ b/engines/sci/engine/segment.h
@@ -217,16 +217,16 @@ public:
reg_t getClassScriptSelector() { return _variables[4]; }
void setClassScriptSelector(reg_t value) { _variables[4] = value; }
- Selector getVarSelector(uint16 i) {
- if (getSciVersion() < SCI_VERSION_1_1)
- return READ_LE_UINT16(base_obj + _variables.size() * 2 + i * 2);
- else
- return *(base_vars + i);
+ Selector getVarSelector(uint16 i) { return *(_baseVars + i); }
+
+ reg_t getFunction(uint16 i) {
+ uint16 offset = (getSciVersion() < SCI_VERSION_1_1) ? _methodCount + 1 + i : i * 2 + 2;
+ return make_reg(_pos.segment, READ_LE_UINT16((byte *) (_baseMethod + offset)));
}
Selector getFuncSelector(uint16 i) {
uint16 offset = (getSciVersion() < SCI_VERSION_1_1) ? i : i * 2 + 1;
- return READ_LE_UINT16((byte *) (base_method + offset));
+ return READ_LE_UINT16((byte *) (_baseMethod + offset));
}
/**
@@ -243,11 +243,6 @@ public:
return -1;
}
- reg_t getFunction(uint16 i) {
- uint16 offset = (getSciVersion() < SCI_VERSION_1_1) ? _methodCount + 1 + i : i * 2 + 2;
- return make_reg(_pos.segment, READ_LE_UINT16((byte *) (base_method + offset)));
- }
-
bool isClass() { return (getInfoSelector().offset & SCRIPT_INFO_CLASS); }
void markAsFreed() { _flags |= OBJECT_FLAG_FREED; }
@@ -258,19 +253,19 @@ public:
void init(byte *buf, reg_t obj_pos) {
byte *data = (byte *)(buf + obj_pos.offset);
- base_obj = data;
+ _baseObj = data;
_pos = obj_pos;
if (getSciVersion() < SCI_VERSION_1_1) {
- setVarCount(READ_LE_UINT16(data + SCRIPT_SELECTORCTR_OFFSET));
- base_vars = 0;
- base_method = (uint16 *)(data + READ_LE_UINT16(data + SCRIPT_FUNCTAREAPTR_OFFSET));
- _methodCount = READ_LE_UINT16(base_method - 1);
+ _variables.resize(READ_LE_UINT16(data + SCRIPT_SELECTORCTR_OFFSET));
+ _baseVars = (uint16 *)(_baseObj + _variables.size() * 2);
+ _baseMethod = (uint16 *)(data + READ_LE_UINT16(data + SCRIPT_FUNCTAREAPTR_OFFSET));
+ _methodCount = READ_LE_UINT16(_baseMethod - 1);
} else {
- setVarCount(READ_LE_UINT16(data + 2));
- base_vars = (uint16 *)(buf + READ_LE_UINT16(data + 4));
- base_method = (uint16 *)(buf + READ_LE_UINT16(data + 6));
- _methodCount = READ_LE_UINT16(base_method);
+ _variables.resize(READ_LE_UINT16(data + 2));
+ _baseVars = (uint16 *)(buf + READ_LE_UINT16(data + 4));
+ _baseMethod = (uint16 *)(buf + READ_LE_UINT16(data + 6));
+ _methodCount = READ_LE_UINT16(_baseMethod);
}
for (uint i = 0; i < _variables.size(); i++)
@@ -284,13 +279,17 @@ public:
void saveLoadWithSerializer(Common::Serializer &ser);
- // TODO: make private. Used by validate_property(), ObjVarRef::getPointer and Script::relocateObject
- Common::Array<reg_t> _variables;
+ void cloneFromObject(Object *obj) {
+ _baseObj = obj ? obj->_baseObj : NULL;
+ _baseMethod = obj ? obj->_baseMethod : NULL;
+ _baseVars = obj ? obj->_baseVars : NULL;
+ }
// TODO: make private
- byte *base_obj; /**< base + object offset within base */
- uint16 *base_method; /**< Pointer to the method selector area for this object */
- uint16 *base_vars; /**< Pointer to the varselector area for this object */
+ Common::Array<reg_t> _variables;
+ byte *_baseObj; /**< base + object offset within base */
+ uint16 *_baseVars; /**< Pointer to the varselector area for this object */
+ uint16 *_baseMethod; /**< Pointer to the method selector area for this object */
private:
uint16 _methodCount;