From 69b1485a22dc2b8a2cfe0bd10edcbaad0da0cf6e Mon Sep 17 00:00:00 2001 From: strangerke Date: Thu, 12 May 2011 01:13:57 +0200 Subject: GIT: Clean up: Suppress SVN tags, now useless --- engines/scumm/script.cpp | 3 --- 1 file changed, 3 deletions(-) (limited to 'engines/scumm/script.cpp') diff --git a/engines/scumm/script.cpp b/engines/scumm/script.cpp index 9e02f126cd..ae481393a9 100644 --- a/engines/scumm/script.cpp +++ b/engines/scumm/script.cpp @@ -18,9 +18,6 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * - * $URL$ - * $Id$ - * */ #include "common/config-manager.h" -- cgit v1.2.3 From 45e65d7ea04b10cf7bb5282bd66b8df609700a63 Mon Sep 17 00:00:00 2001 From: Max Horn Date: Wed, 11 May 2011 16:23:26 +0200 Subject: SCUMM: Refactor how resource (types) are srepresented Previously, we had a couple of arrays of size N (where N = number of resource types), one for each attribute of a resource type (such as as the number of resources of that type. Now, we have one array of size N, whose elements are a record aggregating all the attributes of each resource type. --- engines/scumm/script.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) (limited to 'engines/scumm/script.cpp') diff --git a/engines/scumm/script.cpp b/engines/scumm/script.cpp index ae481393a9..4630ec1a5c 100644 --- a/engines/scumm/script.cpp +++ b/engines/scumm/script.cpp @@ -390,26 +390,26 @@ void ScummEngine::getScriptBaseAddress() { break; _scriptOrgPointer = getResourceAddress(rtInventory, idx); assert(idx < _numInventory); - _lastCodePtr = &_res->address[rtInventory][idx]; + _lastCodePtr = &_res->_types[rtInventory].address[idx]; break; case WIO_LOCAL: case WIO_ROOM: /* room script */ if (_game.version == 8) { _scriptOrgPointer = getResourceAddress(rtRoomScripts, _roomResource); - assert(_roomResource < _res->num[rtRoomScripts]); - _lastCodePtr = &_res->address[rtRoomScripts][_roomResource]; + assert(_roomResource < _res->_types[rtRoomScripts].num); + _lastCodePtr = &_res->_types[rtRoomScripts].address[_roomResource]; } else { _scriptOrgPointer = getResourceAddress(rtRoom, _roomResource); assert(_roomResource < _numRooms); - _lastCodePtr = &_res->address[rtRoom][_roomResource]; + _lastCodePtr = &_res->_types[rtRoom].address[_roomResource]; } break; case WIO_GLOBAL: /* global script */ _scriptOrgPointer = getResourceAddress(rtScript, ss->number); assert(ss->number < _numScripts); - _lastCodePtr = &_res->address[rtScript][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->address[rtFlObject][idx]; + _lastCodePtr = &_res->_types[rtFlObject].address[idx]; break; default: error("Bad type while getting base address"); @@ -1099,7 +1099,7 @@ void ScummEngine::checkAndRunSentenceScript() { // For now we assume that if there are more than 460 scripts, then // the pair 29/104 is used, else the pair 28/103. - if (_res->num[rtScript] > 460) { + if (_res->_types[rtScript].num > 460) { if (sentenceScript == 104) sentenceScript = 29; } else { -- cgit v1.2.3 From 75b9deb1856bae8355403faa5f55857f3929adb6 Mon Sep 17 00:00:00 2001 From: Max Horn Date: Wed, 11 May 2011 18:06:30 +0200 Subject: 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. --- engines/scumm/script.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'engines/scumm/script.cpp') diff --git a/engines/scumm/script.cpp b/engines/scumm/script.cpp index 4630ec1a5c..7f279a3f0c 100644 --- a/engines/scumm/script.cpp +++ b/engines/scumm/script.cpp @@ -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; -- cgit v1.2.3 From 0342ab3f1b2d67de6fa0112311b973b55d509f1c Mon Sep 17 00:00:00 2001 From: Max Horn Date: Wed, 11 May 2011 18:11:37 +0200 Subject: SCUMM: Rename ResTypeData::num to _num --- engines/scumm/script.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'engines/scumm/script.cpp') diff --git a/engines/scumm/script.cpp b/engines/scumm/script.cpp index 7f279a3f0c..e418fcd290 100644 --- a/engines/scumm/script.cpp +++ b/engines/scumm/script.cpp @@ -397,7 +397,7 @@ void ScummEngine::getScriptBaseAddress() { case WIO_ROOM: /* room script */ if (_game.version == 8) { _scriptOrgPointer = getResourceAddress(rtRoomScripts, _roomResource); - assert(_roomResource < _res->_types[rtRoomScripts].num); + assert(_roomResource < _res->_types[rtRoomScripts]._num); _lastCodePtr = &_res->_types[rtRoomScripts]._address[_roomResource]; } else { _scriptOrgPointer = getResourceAddress(rtRoom, _roomResource); @@ -1099,7 +1099,7 @@ void ScummEngine::checkAndRunSentenceScript() { // For now we assume that if there are more than 460 scripts, then // the pair 29/104 is used, else the pair 28/103. - if (_res->_types[rtScript].num > 460) { + if (_res->_types[rtScript]._num > 460) { if (sentenceScript == 104) sentenceScript = 29; } else { -- cgit v1.2.3 From c02420df43bec4ec523c18d8e6fdb381af29c1b5 Mon Sep 17 00:00:00 2001 From: Max Horn Date: Fri, 13 May 2011 11:45:42 +0200 Subject: SCUMM: Add a Resource class, refactor res code around it --- engines/scumm/script.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'engines/scumm/script.cpp') diff --git a/engines/scumm/script.cpp b/engines/scumm/script.cpp index e418fcd290..47cf8e024e 100644 --- a/engines/scumm/script.cpp +++ b/engines/scumm/script.cpp @@ -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]._resources[idx]._address; 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]._resources[_roomResource]._address; } else { _scriptOrgPointer = getResourceAddress(rtRoom, _roomResource); assert(_roomResource < _numRooms); - _lastCodePtr = &_res->_types[rtRoom]._address[_roomResource]; + _lastCodePtr = &_res->_types[rtRoom]._resources[_roomResource]._address; } 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]._resources[ss->number]._address; 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]._resources[idx]._address; break; default: error("Bad type while getting base address"); -- cgit v1.2.3 From 45207a52d480cdd70f6bf08bbad76ec3d23a5688 Mon Sep 17 00:00:00 2001 From: Max Horn Date: Fri, 13 May 2011 14:12:00 +0200 Subject: SCUMM: Remove ResTypeData::_num --- engines/scumm/script.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'engines/scumm/script.cpp') diff --git a/engines/scumm/script.cpp b/engines/scumm/script.cpp index 47cf8e024e..6fe80de364 100644 --- a/engines/scumm/script.cpp +++ b/engines/scumm/script.cpp @@ -397,7 +397,7 @@ void ScummEngine::getScriptBaseAddress() { case WIO_ROOM: /* room script */ if (_game.version == 8) { _scriptOrgPointer = getResourceAddress(rtRoomScripts, _roomResource); - assert(_roomResource < _res->_types[rtRoomScripts]._num); + assert(_roomResource < (int)_res->_types[rtRoomScripts]._resources.size()); _lastCodePtr = &_res->_types[rtRoomScripts]._resources[_roomResource]._address; } else { _scriptOrgPointer = getResourceAddress(rtRoom, _roomResource); @@ -1099,7 +1099,7 @@ void ScummEngine::checkAndRunSentenceScript() { // For now we assume that if there are more than 460 scripts, then // the pair 29/104 is used, else the pair 28/103. - if (_res->_types[rtScript]._num > 460) { + if (_res->_types[rtScript]._resources.size() > 460) { if (sentenceScript == 104) sentenceScript = 29; } else { -- cgit v1.2.3 From 9ec64a66fe2f20eb1be0811b5f733332efff1b93 Mon Sep 17 00:00:00 2001 From: Max Horn Date: Fri, 13 May 2011 14:48:01 +0200 Subject: SCUMM: Turned ResTypeData into a Common::Array, subsuming its _resource member --- engines/scumm/script.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) (limited to 'engines/scumm/script.cpp') diff --git a/engines/scumm/script.cpp b/engines/scumm/script.cpp index 6fe80de364..4402445b1d 100644 --- a/engines/scumm/script.cpp +++ b/engines/scumm/script.cpp @@ -390,26 +390,26 @@ void ScummEngine::getScriptBaseAddress() { break; _scriptOrgPointer = getResourceAddress(rtInventory, idx); assert(idx < _numInventory); - _lastCodePtr = &_res->_types[rtInventory]._resources[idx]._address; + _lastCodePtr = &_res->_types[rtInventory][idx]._address; break; case WIO_LOCAL: case WIO_ROOM: /* room script */ if (_game.version == 8) { _scriptOrgPointer = getResourceAddress(rtRoomScripts, _roomResource); - assert(_roomResource < (int)_res->_types[rtRoomScripts]._resources.size()); - _lastCodePtr = &_res->_types[rtRoomScripts]._resources[_roomResource]._address; + assert(_roomResource < (int)_res->_types[rtRoomScripts].size()); + _lastCodePtr = &_res->_types[rtRoomScripts][_roomResource]._address; } else { _scriptOrgPointer = getResourceAddress(rtRoom, _roomResource); assert(_roomResource < _numRooms); - _lastCodePtr = &_res->_types[rtRoom]._resources[_roomResource]._address; + _lastCodePtr = &_res->_types[rtRoom][_roomResource]._address; } break; case WIO_GLOBAL: /* global script */ _scriptOrgPointer = getResourceAddress(rtScript, ss->number); assert(ss->number < _numScripts); - _lastCodePtr = &_res->_types[rtScript]._resources[ss->number]._address; + _lastCodePtr = &_res->_types[rtScript][ss->number]._address; 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]._resources[idx]._address; + _lastCodePtr = &_res->_types[rtFlObject][idx]._address; break; default: error("Bad type while getting base address"); @@ -1099,7 +1099,7 @@ void ScummEngine::checkAndRunSentenceScript() { // For now we assume that if there are more than 460 scripts, then // the pair 29/104 is used, else the pair 28/103. - if (_res->_types[rtScript]._resources.size() > 460) { + if (_res->_types[rtScript].size() > 460) { if (sentenceScript == 104) sentenceScript = 29; } else { -- cgit v1.2.3 From 82343f6649fed0a8b315e31c8b5177e4840b76e4 Mon Sep 17 00:00:00 2001 From: Max Horn Date: Sat, 14 May 2011 23:50:18 +0200 Subject: SCUMM: Remove some unused var warnings (see bug #3293800) --- engines/scumm/script.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'engines/scumm/script.cpp') diff --git a/engines/scumm/script.cpp b/engines/scumm/script.cpp index 4402445b1d..cd9a0ed1c8 100644 --- a/engines/scumm/script.cpp +++ b/engines/scumm/script.cpp @@ -36,7 +36,7 @@ namespace Scumm { /* Start executing script 'script' with the given parameters */ void ScummEngine::runScript(int script, bool freezeResistant, bool recursive, int *lvarptr, int cycle) { ScriptSlot *s; - byte *scriptPtr; + //byte *scriptPtr; uint32 scriptOffs; byte scriptType; int slot; @@ -48,7 +48,8 @@ void ScummEngine::runScript(int script, bool freezeResistant, bool recursive, in stopScript(script); if (script < _numGlobalScripts) { - scriptPtr = getResourceAddress(rtScript, script); + // Call getResourceAddress to ensure the resource is loaded & its usage count reset + /*scriptPtr =*/ getResourceAddress(rtScript, script); scriptOffs = _resourceHeaderSize; scriptType = WIO_GLOBAL; -- cgit v1.2.3 From d0209228467f548e748146e1c72e72ac9cccc89f Mon Sep 17 00:00:00 2001 From: Max Horn Date: Tue, 17 May 2011 15:50:11 +0200 Subject: SCUMM: Make REDUCE_MEMORY_USAGE slightly more effecive (saving ~1kb ram) --- engines/scumm/script.cpp | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'engines/scumm/script.cpp') diff --git a/engines/scumm/script.cpp b/engines/scumm/script.cpp index cd9a0ed1c8..cfc4b3c419 100644 --- a/engines/scumm/script.cpp +++ b/engines/scumm/script.cpp @@ -494,7 +494,11 @@ void ScummEngine::executeOpcode(byte i) { } const char *ScummEngine::getOpcodeDesc(byte i) { +#ifndef REDUCE_MEMORY_USAGE return _opcodes[i].desc; +#else + return ""; +#endif } byte ScummEngine::fetchScriptByte() { -- cgit v1.2.3