mirror of
https://github.com/libretro/scummvm.git
synced 2024-12-28 12:46:56 +00:00
Removed the scriptRelocateExportsSci11() hack. The open spell in QFG1VGA works now (thanks to waltervn for all his help on this)
svn-id: r49311
This commit is contained in:
parent
3d09af0377
commit
a6156a6805
@ -204,7 +204,13 @@ reg_t kScriptID(EngineState *s, int argc, reg_t *argv) {
|
||||
return NULL_REG;
|
||||
}
|
||||
|
||||
return make_reg(scriptSeg, scr->validateExportFunc(index));
|
||||
uint16 address = scr->validateExportFunc(index);
|
||||
|
||||
// Point to the heap for SCI1.1+ games
|
||||
if (getSciVersion() >= SCI_VERSION_1_1)
|
||||
address += scr->_scriptSize;
|
||||
|
||||
return make_reg(scriptSeg, address);
|
||||
}
|
||||
|
||||
reg_t kDisposeScript(EngineState *s, int argc, reg_t *argv) {
|
||||
|
@ -798,7 +798,6 @@ void SegManager::reconstructScripts(EngineState *s) {
|
||||
scr->_synonyms = 0;
|
||||
if (READ_LE_UINT16(scr->_buf + 6) > 0) {
|
||||
scr->setExportTableOffset(6);
|
||||
s->_segMan->scriptRelocateExportsSci11(i);
|
||||
}
|
||||
} else {
|
||||
scr->_exportTable = (uint16 *) scr->findBlock(SCI_OBJ_EXPORTS);
|
||||
|
@ -200,23 +200,6 @@ void SegManager::scriptInitialiseLocals(reg_t location) {
|
||||
}
|
||||
}
|
||||
|
||||
void SegManager::scriptRelocateExportsSci11(SegmentId seg) {
|
||||
Script *scr = getScript(seg);
|
||||
for (int i = 0; i < scr->_numExports; i++) {
|
||||
/* We are forced to use an ugly heuristic here to distinguish function
|
||||
exports from object/class exports. The former kind points into the
|
||||
script resource, the latter into the heap resource. */
|
||||
uint16 location = READ_SCI11ENDIAN_UINT16(scr->_exportTable + i);
|
||||
|
||||
if ((location < scr->_heapSize - 1) && (READ_SCI11ENDIAN_UINT16(scr->_heapStart + location) == SCRIPT_OBJECT_MAGIC_NUMBER)) {
|
||||
WRITE_SCI11ENDIAN_UINT16(scr->_exportTable + i, location + scr->_heapStart - scr->_buf);
|
||||
} else {
|
||||
// Otherwise it's probably a function export,
|
||||
// and we don't need to do anything.
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void SegManager::scriptInitialiseObjectsSci11(SegmentId seg) {
|
||||
Script *scr = getScript(seg);
|
||||
const byte *seeker = scr->_heapStart + 4 + READ_SCI11ENDIAN_UINT16(scr->_heapStart + 2) * 2;
|
||||
@ -484,7 +467,6 @@ int script_instantiate_sci11(ResourceManager *resMan, SegManager *segMan, int sc
|
||||
|
||||
segMan->scriptInitialiseLocals(make_reg(seg_id, _heapStart + 4));
|
||||
|
||||
segMan->scriptRelocateExportsSci11(seg_id);
|
||||
segMan->scriptInitialiseObjectsSci11(seg_id);
|
||||
|
||||
scr->heapRelocate(make_reg(seg_id, READ_SCI11ENDIAN_UINT16(heap->data)));
|
||||
|
Loading…
Reference in New Issue
Block a user