diff options
author | Gregory Montoir | 2007-02-22 12:12:45 +0000 |
---|---|---|
committer | Gregory Montoir | 2007-02-22 12:12:45 +0000 |
commit | eec3543c7d14575595327492ceccf0440253d044 (patch) | |
tree | cad1cc1cb6d6ed5a8b00c1a7c73bc9e35d0ce7ba /engines/queen/resource.cpp | |
parent | 2c1445056df1bdfc065c33a5a103729e46a60e33 (diff) | |
download | scummvm-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.cpp | 43 |
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; |