aboutsummaryrefslogtreecommitdiff
path: root/engines/sci/engine/kscripts.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/sci/engine/kscripts.cpp')
-rw-r--r--engines/sci/engine/kscripts.cpp21
1 files changed, 8 insertions, 13 deletions
diff --git a/engines/sci/engine/kscripts.cpp b/engines/sci/engine/kscripts.cpp
index 9b0e490d7e..2c115be500 100644
--- a/engines/sci/engine/kscripts.cpp
+++ b/engines/sci/engine/kscripts.cpp
@@ -140,7 +140,7 @@ reg_t kClone(EngineState *s, int argc, reg_t *argv) {
debugC(kDebugLevelMemory, "Attempting to clone from %04x:%04x", PRINT_REG(parentAddr));
- uint16 infoSelector = parentObj->getInfoSelector().offset;
+ uint16 infoSelector = parentObj->getInfoSelector().getOffset();
cloneObj = s->_segMan->allocateClone(&cloneAddr);
if (!cloneObj) {
@@ -169,8 +169,8 @@ reg_t kClone(EngineState *s, int argc, reg_t *argv) {
cloneObj->setSpeciesSelector(cloneObj->getPos());
if (parentObj->isClass())
cloneObj->setSuperClassSelector(parentObj->getPos());
- s->_segMan->getScript(parentObj->getPos().segment)->incrementLockers();
- s->_segMan->getScript(cloneObj->getPos().segment)->incrementLockers();
+ s->_segMan->getScript(parentObj->getPos().getSegment())->incrementLockers();
+ s->_segMan->getScript(cloneObj->getPos().getSegment())->incrementLockers();
return cloneAddr;
}
@@ -191,7 +191,7 @@ reg_t kDisposeClone(EngineState *s, int argc, reg_t *argv) {
// At least kq4early relies on this behavior. The scripts clone "Sound", then set bit 1 manually
// and call kDisposeClone later. In that case we may not free it, otherwise we will run into issues
// later, because kIsObject would then return false and Sound object wouldn't get checked.
- uint16 infoSelector = object->getInfoSelector().offset;
+ uint16 infoSelector = object->getInfoSelector().getOffset();
if ((infoSelector & 3) == kInfoFlagClone)
object->markAsFreed();
@@ -203,7 +203,7 @@ reg_t kScriptID(EngineState *s, int argc, reg_t *argv) {
int script = argv[0].toUint16();
uint16 index = (argc > 1) ? argv[1].toUint16() : 0;
- if (argv[0].segment)
+ if (argv[0].getSegment())
return argv[0];
SegmentId scriptSeg = s->_segMan->getScriptSegment(script, SCRIPT_GET_LOAD);
@@ -226,11 +226,6 @@ reg_t kScriptID(EngineState *s, int argc, reg_t *argv) {
return NULL_REG;
}
- if (index > scr->getExportsNr()) {
- error("Dispatch index too big: %d > %d", index, scr->getExportsNr());
- return NULL_REG;
- }
-
uint16 address = scr->validateExportFunc(index, true);
// Point to the heap for SCI1.1 - SCI2.1 games
@@ -251,12 +246,12 @@ reg_t kScriptID(EngineState *s, int argc, reg_t *argv) {
}
reg_t kDisposeScript(EngineState *s, int argc, reg_t *argv) {
- int script = argv[0].offset;
+ int script = argv[0].getOffset();
SegmentId id = s->_segMan->getScriptSegment(script);
Script *scr = s->_segMan->getScriptIfLoaded(id);
if (scr && !scr->isMarkedAsDeleted()) {
- if (s->_executionStack.back().addr.pc.segment != id)
+ if (s->_executionStack.back().addr.pc.getSegment() != id)
scr->setLockers(1);
}
@@ -273,7 +268,7 @@ reg_t kDisposeScript(EngineState *s, int argc, reg_t *argv) {
}
reg_t kIsObject(EngineState *s, int argc, reg_t *argv) {
- if (argv[0].offset == SIGNAL_OFFSET) // Treated specially
+ if (argv[0].getOffset() == SIGNAL_OFFSET) // Treated specially
return NULL_REG;
else
return make_reg(0, s->_segMan->isHeapObject(argv[0]));