SCUMM: Get rid of the MemBlkHeader hack

This uncovered at least one potentially serious bug in the inventory
code, which still needs to be investigated and fixed.
This commit is contained in:
Max Horn 2011-05-11 18:06:30 +02:00
parent 0af2f71c71
commit 75b9deb185
10 changed files with 109 additions and 83 deletions

View file

@ -390,7 +390,7 @@ void ScummEngine::getScriptBaseAddress() {
break;
_scriptOrgPointer = getResourceAddress(rtInventory, idx);
assert(idx < _numInventory);
_lastCodePtr = &_res->_types[rtInventory].address[idx];
_lastCodePtr = &_res->_types[rtInventory]._address[idx];
break;
case WIO_LOCAL:
@ -398,18 +398,18 @@ void ScummEngine::getScriptBaseAddress() {
if (_game.version == 8) {
_scriptOrgPointer = getResourceAddress(rtRoomScripts, _roomResource);
assert(_roomResource < _res->_types[rtRoomScripts].num);
_lastCodePtr = &_res->_types[rtRoomScripts].address[_roomResource];
_lastCodePtr = &_res->_types[rtRoomScripts]._address[_roomResource];
} else {
_scriptOrgPointer = getResourceAddress(rtRoom, _roomResource);
assert(_roomResource < _numRooms);
_lastCodePtr = &_res->_types[rtRoom].address[_roomResource];
_lastCodePtr = &_res->_types[rtRoom]._address[_roomResource];
}
break;
case WIO_GLOBAL: /* global script */
_scriptOrgPointer = getResourceAddress(rtScript, ss->number);
assert(ss->number < _numScripts);
_lastCodePtr = &_res->_types[rtScript].address[ss->number];
_lastCodePtr = &_res->_types[rtScript]._address[ss->number];
break;
case WIO_FLOBJECT: /* flobject script */
@ -418,7 +418,7 @@ void ScummEngine::getScriptBaseAddress() {
idx = _objs[idx].fl_object_index;
_scriptOrgPointer = getResourceAddress(rtFlObject, idx);
assert(idx < _numFlObject);
_lastCodePtr = &_res->_types[rtFlObject].address[idx];
_lastCodePtr = &_res->_types[rtFlObject]._address[idx];
break;
default:
error("Bad type while getting base address");
@ -445,7 +445,7 @@ void ScummEngine::resetScriptPointer() {
* collected by ResourceManager::expireResources.
*/
void ScummEngine::refreshScriptPointer() {
if (*_lastCodePtr + sizeof(MemBlkHeader) != _scriptOrgPointer) {
if (*_lastCodePtr != _scriptOrgPointer) {
long oldoffs = _scriptPointer - _scriptOrgPointer;
getScriptBaseAddress();
_scriptPointer = _scriptOrgPointer + oldoffs;