aboutsummaryrefslogtreecommitdiff
path: root/engines/saga/resource_res.cpp
diff options
context:
space:
mode:
authorAndrew Kurushin2010-10-24 22:17:44 +0000
committerAndrew Kurushin2010-10-24 22:17:44 +0000
commit67cc1b8a84e8cbc344e87fe0f4715cae96199b69 (patch)
treefddf53a8a74288676993025c5c1ad073982db740 /engines/saga/resource_res.cpp
parent859c1c2c08c39262de6b6ba6e1169bb03d14353a (diff)
downloadscummvm-rg350-67cc1b8a84e8cbc344e87fe0f4715cae96199b69.tar.gz
scummvm-rg350-67cc1b8a84e8cbc344e87fe0f4715cae96199b69.tar.bz2
scummvm-rg350-67cc1b8a84e8cbc344e87fe0f4715cae96199b69.zip
SAGA: replace Resource:loadResource malloc with ByteArray class
svn-id: r53779
Diffstat (limited to 'engines/saga/resource_res.cpp')
-rw-r--r--engines/saga/resource_res.cpp109
1 files changed, 52 insertions, 57 deletions
diff --git a/engines/saga/resource_res.cpp b/engines/saga/resource_res.cpp
index 343f3b2ae2..646de8667b 100644
--- a/engines/saga/resource_res.cpp
+++ b/engines/saga/resource_res.cpp
@@ -66,41 +66,38 @@ void Resource_RES::loadGlobalResources(int chapter, int actorsEntrance) {
error("Resource::loadGlobalResources() sound context not found");
}
- byte *resourcePointer;
- size_t resourceLength;
+ ByteArray resourceData;
if (!_vm->isIHNMDemo()) {
- _vm->_resource->loadResource(resourceContext, metaResourceTable[chapter],
- resourcePointer, resourceLength);
+ _vm->_resource->loadResource(resourceContext, metaResourceTable[chapter], resourceData);
} else {
- _vm->_resource->loadResource(resourceContext, metaResourceTableDemo[chapter],
- resourcePointer, resourceLength);
+ _vm->_resource->loadResource(resourceContext, metaResourceTableDemo[chapter], resourceData);
}
- if (resourceLength == 0) {
+ if (resourceData.empty()) {
error("Resource::loadGlobalResources wrong metaResource");
}
- MemoryReadStream metaS(resourcePointer, resourceLength);
-
- _metaResource.sceneIndex = metaS.readSint16LE();
- _metaResource.objectCount = metaS.readSint16LE();
- _metaResource.objectsStringsResourceID = metaS.readSint32LE();
- _metaResource.inventorySpritesID = metaS.readSint32LE();
- _metaResource.mainSpritesID = metaS.readSint32LE();
- _metaResource.objectsResourceID = metaS.readSint32LE();
- _metaResource.actorCount = metaS.readSint16LE();
- _metaResource.actorsStringsResourceID = metaS.readSint32LE();
- _metaResource.actorsResourceID = metaS.readSint32LE();
- _metaResource.protagFaceSpritesID = metaS.readSint32LE();
- _metaResource.field_22 = metaS.readSint32LE();
- _metaResource.field_26 = metaS.readSint16LE();
- _metaResource.protagStatesCount = metaS.readSint16LE();
- _metaResource.protagStatesResourceID = metaS.readSint32LE();
- _metaResource.cutawayListResourceID = metaS.readSint32LE();
- _metaResource.songTableID = metaS.readSint32LE();
-
- free(resourcePointer);
+ {
+ ByteArrayReadStreamEndian metaS(resourceData);
+
+ _metaResource.sceneIndex = metaS.readSint16LE();
+ _metaResource.objectCount = metaS.readSint16LE();
+ _metaResource.objectsStringsResourceID = metaS.readSint32LE();
+ _metaResource.inventorySpritesID = metaS.readSint32LE();
+ _metaResource.mainSpritesID = metaS.readSint32LE();
+ _metaResource.objectsResourceID = metaS.readSint32LE();
+ _metaResource.actorCount = metaS.readSint16LE();
+ _metaResource.actorsStringsResourceID = metaS.readSint32LE();
+ _metaResource.actorsResourceID = metaS.readSint32LE();
+ _metaResource.protagFaceSpritesID = metaS.readSint32LE();
+ _metaResource.field_22 = metaS.readSint32LE();
+ _metaResource.field_26 = metaS.readSint16LE();
+ _metaResource.protagStatesCount = metaS.readSint16LE();
+ _metaResource.protagStatesResourceID = metaS.readSint32LE();
+ _metaResource.cutawayListResourceID = metaS.readSint32LE();
+ _metaResource.songTableID = metaS.readSint32LE();
+ }
_vm->_actor->loadActorList(actorsEntrance, _metaResource.actorCount,
_metaResource.actorsResourceID, _metaResource.protagStatesCount,
@@ -110,9 +107,8 @@ void Resource_RES::loadGlobalResources(int chapter, int actorsEntrance) {
_vm->_actor->_objectsStrings.clear();
- _vm->_resource->loadResource(resourceContext, _metaResource.objectsStringsResourceID, resourcePointer, resourceLength);
- _vm->loadStrings(_vm->_actor->_objectsStrings, resourcePointer, resourceLength);
- free(resourcePointer);
+ _vm->_resource->loadResource(resourceContext, _metaResource.objectsStringsResourceID, resourceData);
+ _vm->loadStrings(_vm->_actor->_objectsStrings, resourceData);
if (uint(chapter) >= _vm->_sndRes->_fxTableIDs.size()) {
error("Chapter ID exceeds fxTableIDs length");
@@ -120,30 +116,30 @@ void Resource_RES::loadGlobalResources(int chapter, int actorsEntrance) {
debug(0, "Going to read %d of %d", chapter, _vm->_sndRes->_fxTableIDs[chapter]);
_vm->_resource->loadResource(soundContext, _vm->_sndRes->_fxTableIDs[chapter],
- resourcePointer, resourceLength);
+ resourceData);
- if (resourceLength == 0) {
+ if (resourceData.empty()) {
error("Resource::loadGlobalResources Can't load sound effects for current track");
}
- _vm->_sndRes->_fxTable.resize(resourceLength / 4);
-
- MemoryReadStream fxS(resourcePointer, resourceLength);
+ _vm->_sndRes->_fxTable.resize(resourceData.size() / 4);
+
+ {
+ ByteArrayReadStreamEndian fxS(resourceData);
- for (i = 0; i < _vm->_sndRes->_fxTable.size(); i++) {
- _vm->_sndRes->_fxTable[i].res = fxS.readSint16LE();
- _vm->_sndRes->_fxTable[i].vol = fxS.readSint16LE();
+ for (i = 0; i < _vm->_sndRes->_fxTable.size(); i++) {
+ _vm->_sndRes->_fxTable[i].res = fxS.readSint16LE();
+ _vm->_sndRes->_fxTable[i].vol = fxS.readSint16LE();
+ }
}
- free(resourcePointer);
_vm->_interface->_defPortraits.clear();
_vm->_sprite->loadList(_metaResource.protagFaceSpritesID, _vm->_interface->_defPortraits);
_vm->_actor->_actorsStrings.clear();
- _vm->_resource->loadResource(resourceContext, _metaResource.actorsStringsResourceID, resourcePointer, resourceLength);
- _vm->loadStrings(_vm->_actor->_actorsStrings, resourcePointer, resourceLength);
- free(resourcePointer);
+ _vm->_resource->loadResource(resourceContext, _metaResource.actorsStringsResourceID, resourceData);
+ _vm->loadStrings(_vm->_actor->_actorsStrings, resourceData);
_vm->_sprite->_inventorySprites.clear();
_vm->_sprite->loadList(_metaResource.inventorySpritesID, _vm->_sprite->_inventorySprites);
@@ -153,39 +149,39 @@ void Resource_RES::loadGlobalResources(int chapter, int actorsEntrance) {
_vm->_actor->loadObjList(_metaResource.objectCount, _metaResource.objectsResourceID);
- _vm->_resource->loadResource(resourceContext, _metaResource.cutawayListResourceID, resourcePointer, resourceLength);
+ _vm->_resource->loadResource(resourceContext, _metaResource.cutawayListResourceID, resourceData);
- if (resourceLength == 0) {
+ if (resourceData.empty()) {
error("Resource::loadGlobalResources Can't load cutaway list");
}
- _vm->_anim->loadCutawayList(resourcePointer, resourceLength);
+ _vm->_anim->loadCutawayList(resourceData);
if (_metaResource.songTableID > 0) {
- _vm->_resource->loadResource(resourceContext, _metaResource.songTableID, resourcePointer, resourceLength);
+ _vm->_resource->loadResource(resourceContext, _metaResource.songTableID, resourceData);
if (chapter == 6) {
- int32 id = READ_LE_UINT32(&resourcePointer[actorsEntrance * 4]);
- free(resourcePointer);
- _vm->_resource->loadResource(resourceContext, id, resourcePointer, resourceLength);
+ if (resourceData.size() < (uint(actorsEntrance) * 4 + 4)) {
+ error("Resource::loadGlobalResources chapter 6 has wrong resource");
+ }
+ int32 id = READ_LE_UINT32(&resourceData[actorsEntrance * 4]);
+ _vm->_resource->loadResource(resourceContext, id, resourceData);
}
- if (resourceLength == 0) {
+ if (resourceData.empty()) {
error("Resource::loadGlobalResources Can't load songs list for current track");
}
- _vm->_music->_songTable.resize(resourceLength / 4);
+ _vm->_music->_songTable.resize(resourceData.size() / 4);
- MemoryReadStream songS(resourcePointer, resourceLength);
+ ByteArrayReadStreamEndian songS(resourceData);
for (i = 0; i < _vm->_music->_songTable.size(); i++)
_vm->_music->_songTable[i] = songS.readSint32LE();
- free(resourcePointer);
} else {
// The IHNM demo has a fixed music track and doesn't load a song table
_vm->_music->setVolume(_vm->_musicVolume, 1);
_vm->_music->play(3, MUSIC_LOOP);
- free(resourcePointer);
}
int voiceLUTResourceID = 0;
@@ -201,9 +197,8 @@ void Resource_RES::loadGlobalResources(int chapter, int actorsEntrance) {
}
if (voiceLUTResourceID) {
- _vm->_resource->loadResource(resourceContext, voiceLUTResourceID, resourcePointer, resourceLength);
- _vm->_script->loadVoiceLUT(_vm->_script->_globalVoiceLUT, resourcePointer, resourceLength);
- free(resourcePointer);
+ _vm->_resource->loadResource(resourceContext, voiceLUTResourceID, resourceData);
+ _vm->_script->loadVoiceLUT(_vm->_script->_globalVoiceLUT, resourceData);
}
_vm->_spiritualBarometer = 0;