aboutsummaryrefslogtreecommitdiff
path: root/engines/sci/engine/seg_manager.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/sci/engine/seg_manager.cpp')
-rw-r--r--engines/sci/engine/seg_manager.cpp37
1 files changed, 8 insertions, 29 deletions
diff --git a/engines/sci/engine/seg_manager.cpp b/engines/sci/engine/seg_manager.cpp
index 175a3021c4..25c74b9be0 100644
--- a/engines/sci/engine/seg_manager.cpp
+++ b/engines/sci/engine/seg_manager.cpp
@@ -186,16 +186,8 @@ int SegManager::initialiseScript(Script &scr, int script_nr) {
}
// Initialize objects
- scr.locals_offset = 0;
- scr.locals_block = NULL;
-
- scr._codeBlocks.clear();
-
+ scr.init();
scr.nr = script_nr;
- scr._markedAsDeleted = false;
- scr.relocated = 0;
-
- scr.obj_indices = new IntMapper();
if (_resMan->sciVersion() >= SCI_VERSION_1_1)
scr.heap_start = scr.buf + scr.script_size;
@@ -463,22 +455,14 @@ reg_t SegManager::getClassAddress(int classnr, ScriptLoadType lock, reg_t caller
Object *SegManager::scriptObjInit0(reg_t obj_pos) {
Object *obj;
- int id;
SciVersion version = _resMan->sciVersion(); // for the offset defines
- unsigned int base = obj_pos.offset - SCRIPT_OBJECT_MAGIC_OFFSET;
- reg_t temp;
+ uint base = obj_pos.offset - SCRIPT_OBJECT_MAGIC_OFFSET;
Script *scr = getScript(obj_pos.segment);
VERIFY(base < scr->buf_size, "Attempt to initialize object beyond end of script\n");
- temp = make_reg(obj_pos.segment, base);
-
- id = scr->obj_indices->checkKey(base, true);
- if ((uint)id == scr->_objects.size())
- scr->_objects.push_back(Object());
-
- obj = &scr->_objects[id];
+ obj = scr->allocateObject(base);
VERIFY(base + SCRIPT_FUNCTAREAPTR_OFFSET < scr->buf_size, "Function area pointer stored beyond end of script\n");
@@ -491,7 +475,7 @@ Object *SegManager::scriptObjInit0(reg_t obj_pos) {
int i;
obj->flags = 0;
- obj->pos = temp;
+ obj->pos = make_reg(obj_pos.segment, base);
VERIFY(base + funct_area < scr->buf_size, "Function area pointer references beyond end of script");
@@ -520,20 +504,15 @@ Object *SegManager::scriptObjInit0(reg_t obj_pos) {
Object *SegManager::scriptObjInit11(reg_t obj_pos) {
Object *obj;
- int id;
- int base = obj_pos.offset;
+ uint base = obj_pos.offset;
Script *scr = getScript(obj_pos.segment);
- VERIFY(base < (uint16)scr->buf_size, "Attempt to initialize object beyond end of script\n");
-
- id = scr->obj_indices->checkKey(obj_pos.offset, true);
- if ((uint)id == scr->_objects.size())
- scr->_objects.push_back(Object());
+ VERIFY(base < scr->buf_size, "Attempt to initialize object beyond end of script\n");
- obj = &scr->_objects[id];
+ obj = scr->allocateObject(base);
- VERIFY(base + SCRIPT_FUNCTAREAPTR_OFFSET < (uint16)scr->buf_size, "Function area pointer stored beyond end of script\n");
+ VERIFY(base + SCRIPT_FUNCTAREAPTR_OFFSET < scr->buf_size, "Function area pointer stored beyond end of script\n");
{
byte *data = (byte *)(scr->buf + base);