aboutsummaryrefslogtreecommitdiff
path: root/engines/queen/resource.cpp
diff options
context:
space:
mode:
authorGregory Montoir2007-02-22 12:12:45 +0000
committerGregory Montoir2007-02-22 12:12:45 +0000
commiteec3543c7d14575595327492ceccf0440253d044 (patch)
treecad1cc1cb6d6ed5a8b00c1a7c73bc9e35d0ce7ba /engines/queen/resource.cpp
parent2c1445056df1bdfc065c33a5a103729e46a60e33 (diff)
downloadscummvm-rg350-eec3543c7d14575595327492ceccf0440253d044.tar.gz
scummvm-rg350-eec3543c7d14575595327492ceccf0440253d044.tar.bz2
scummvm-rg350-eec3543c7d14575595327492ceccf0440253d044.zip
some fixes with resource files handling for Amiga versions
svn-id: r25785
Diffstat (limited to 'engines/queen/resource.cpp')
-rw-r--r--engines/queen/resource.cpp43
1 files changed, 21 insertions, 22 deletions
diff --git a/engines/queen/resource.cpp b/engines/queen/resource.cpp
index cece71ae8b..9724963884 100644
--- a/engines/queen/resource.cpp
+++ b/engines/queen/resource.cpp
@@ -62,6 +62,7 @@ Resource::Resource()
: _resourceEntries(0), _resourceTable(NULL) {
memset(&_version, 0, sizeof(_version));
+ _currentResourceFileNum = 1;
if (!_resourceFile.open("queen.1c")) {
if (!_resourceFile.open("queen.1")) {
error("Could not open resource file 'queen.1[c]'");
@@ -110,33 +111,17 @@ ResourceEntry *Resource::resourceEntry(const char *filename) const {
return re;
}
-static uint8 emptyBank[] = { 0, 0 };
-
uint8 *Resource::loadFile(const char *filename, uint32 skipBytes, uint32 *size) {
debug(7, "Resource::loadFile('%s')", filename);
ResourceEntry *re = resourceEntry(filename);
- if (_version.platform == Common::kPlatformAmiga && re == NULL) {
- return emptyBank;
- }
assert(re != NULL);
uint32 sz = re->size - skipBytes;
if (size != NULL) {
*size = sz;
}
byte *dstBuf = new byte[sz];
- if (re->bundle == 1) {
- _resourceFile.seek(re->offset + skipBytes);
- _resourceFile.read(dstBuf, sz);
- } else {
- Common::File resourceFile;
- char name[20];
- sprintf(name, "queen.%d", re->bundle);
- if (!resourceFile.open(name)) {
- error("Could not open resource file '%s'", name);
- }
- resourceFile.seek(re->offset + skipBytes);
- resourceFile.read(dstBuf, sz);
- }
+ seekResourceFile(re->bundle, re->offset + skipBytes);
+ _resourceFile.read(dstBuf, sz);
return dstBuf;
}
@@ -234,7 +219,7 @@ void Resource::checkJASVersion() {
return;
}
ResourceEntry *re = resourceEntry("QUEEN.JAS");
- assert(re != NULL && re->bundle == 1);
+ assert(re != NULL);
uint32 offset = re->offset;
if (isDemo())
offset += JAS_VERSION_OFFSET_DEMO;
@@ -242,7 +227,7 @@ void Resource::checkJASVersion() {
offset += JAS_VERSION_OFFSET_INTV;
else
offset += JAS_VERSION_OFFSET_PC;
- _resourceFile.seek(offset);
+ seekResourceFile(re->bundle, offset);
char versionStr[6];
_resourceFile.read(versionStr, 6);
@@ -250,6 +235,20 @@ void Resource::checkJASVersion() {
error("Verifying game version failed! (expected: '%s', found: '%s')", _version.str, versionStr);
}
+void Resource::seekResourceFile(int num, uint32 offset) {
+ if (_currentResourceFileNum != num) {
+ debug(7, "Opening resource file %d, current %d", num, _currentResourceFileNum);
+ _resourceFile.close();
+ char name[20];
+ sprintf(name, "queen.%d", num);
+ if (!_resourceFile.open(name)) {
+ error("Could not open resource file '%s'", name);
+ }
+ _currentResourceFileNum = num;
+ }
+ _resourceFile.seek(offset);
+}
+
void Resource::readTableFile(uint32 offset) {
Common::File tableFile;
tableFile.open(_tableFilename);
@@ -295,9 +294,9 @@ const RetailGameVersion *Resource::detectGameVersionFromSize(uint32 size) {
Common::File *Resource::findSound(const char *filename, uint32 *size) {
assert(strstr(filename, ".SB") != NULL || strstr(filename, ".AMR") != NULL);
ResourceEntry *re = resourceEntry(filename);
- if (re && re->bundle == 1) {
+ if (re) {
*size = re->size;
- _resourceFile.seek(re->offset);
+ seekResourceFile(re->bundle, re->offset);
return &_resourceFile;
}
return NULL;