From 59f2a90a6fac7b30441770e498dc2dbd818021d0 Mon Sep 17 00:00:00 2001 From: Filippos Karapetis Date: Sun, 28 Oct 2007 04:12:01 +0000 Subject: Cleanup of the engine detection code. Possibly fixes bug #1804403 - "IHNM/ITE: Error loading Game resources (fs-node regression)" svn-id: r29273 --- engines/saga/detection.cpp | 20 ---------- engines/saga/rscfile.cpp | 99 ++++++++++++++++++++++++++++++++-------------- 2 files changed, 70 insertions(+), 49 deletions(-) (limited to 'engines/saga') diff --git a/engines/saga/detection.cpp b/engines/saga/detection.cpp index 29ca0e8bbe..2ca1ae4482 100644 --- a/engines/saga/detection.cpp +++ b/engines/saga/detection.cpp @@ -155,26 +155,6 @@ bool SagaEngine::initGame() { _displayClip.right = getDisplayInfo().logicalWidth; _displayClip.bottom = getDisplayInfo().logicalHeight; - if (Common::File::exists("graphics/credit3n.dlt")) { - _gf_wyrmkeep = true; - } - - // If a compressed sound file is found in the game's directory, set the compressed flag to true - if (_gameDescription->gameType == GType_ITE) { - if (Common::File::exists("sounds.cmp") || Common::File::exists("soundsd.cmp") || - Common::File::exists("voices.cmp") || Common::File::exists("voicesd.cmp") || - Common::File::exists("inherit the earth voices.cmp")) { - _gf_compressed_sounds = true; - } - } else { - if (Common::File::exists("voicess.cmp") || Common::File::exists("voices1.cmp") || - Common::File::exists("voices2.cmp") || Common::File::exists("voices3.cmp") || - Common::File::exists("voices4.cmp") || Common::File::exists("voices5.cmp") || - Common::File::exists("voices6.cmp") || Common::File::exists("voicesd.cmp")) { - _gf_compressed_sounds = true; - } - } - return _resource->createContexts(); } diff --git a/engines/saga/rscfile.cpp b/engines/saga/rscfile.cpp index e47b8e86c1..87b4c53f18 100644 --- a/engines/saga/rscfile.cpp +++ b/engines/saga/rscfile.cpp @@ -360,6 +360,11 @@ bool Resource::createContexts() { bool censoredVersion = false; uint16 voiceFileType = GAME_VOICEFILE; + // If the Wyrmkeep credits file is found, set the Wyrmkeep version flag to true + if (Common::File::exists("graphics/credit3n.dlt")) { + _vm->_gf_wyrmkeep = true; + } + _contextsCount = 0; for (i = 0; _vm->getFilesDescriptions()[i].fileName; i++) { _contextsCount++; @@ -375,17 +380,21 @@ bool Resource::createContexts() { if (Common::File::exists("sounds.rsc") || Common::File::exists("sounds.cmp")) { _contextsCount++; soundFileIndex = _contextsCount - 1; - if (_vm->getFeatures() & GF_COMPRESSED_SOUNDS) - sprintf(soundFileName, "sounds.cmp"); - else + if (Common::File::exists("sounds.rsc")) { sprintf(soundFileName, "sounds.rsc"); + } else { + sprintf(soundFileName, "sounds.cmp"); + _vm->_gf_compressed_sounds = true; + } } else if (Common::File::exists("soundsd.rsc") || Common::File::exists("soundsd.cmp")) { _contextsCount++; soundFileIndex = _contextsCount - 1; - if (_vm->getFeatures() & GF_COMPRESSED_SOUNDS) - sprintf(soundFileName, "soundsd.cmp"); - else + if (Common::File::exists("soundsd.rsc")) { sprintf(soundFileName, "soundsd.rsc"); + } else { + sprintf(soundFileName, "soundsd.cmp"); + _vm->_gf_compressed_sounds = true; + } } else { // No sound file found, don't add any file to the array soundFileInArray = true; @@ -397,10 +406,12 @@ bool Resource::createContexts() { if (Common::File::exists("sfx.res") || Common::File::exists("sfx.cmp")) { _contextsCount++; soundFileIndex = _contextsCount - 1; - if (_vm->getFeatures() & GF_COMPRESSED_SOUNDS) + if (Common::File::exists("sfx.rsc")) { + sprintf(soundFileName, "sfx.rsc"); + } else { sprintf(soundFileName, "sfx.cmp"); - else - sprintf(soundFileName, "sfx.res"); + _vm->_gf_compressed_sounds = true; + } } else { // No sound file found, don't add any file to the array soundFileInArray = true; @@ -414,30 +425,56 @@ bool Resource::createContexts() { if (Common::File::exists("voices.rsc") || Common::File::exists("voices.cmp")) { _contextsCount++; voicesFileIndex = _contextsCount - 1; - if (_vm->getFeatures() & GF_COMPRESSED_SOUNDS) - sprintf(voicesFileName, "voices.cmp"); - else + if (Common::File::exists("voices.rsc")) { sprintf(voicesFileName, "voices.rsc"); + } else { + sprintf(voicesFileName, "voices.cmp"); + _vm->_gf_compressed_sounds = true; + } } else if (Common::File::exists("voicesd.rsc") || Common::File::exists("voicesd.cmp")) { _contextsCount++; voicesFileIndex = _contextsCount - 1; - if (_vm->getFeatures() & GF_COMPRESSED_SOUNDS) - sprintf(voicesFileName, "voicesd.cmp"); - else + if (Common::File::exists("voicesd.rsc")) { sprintf(voicesFileName, "voicesd.rsc"); + } else { + sprintf(voicesFileName, "voicesd.cmp"); + _vm->_gf_compressed_sounds = true; + } +#ifndef __amigaos4__ } else if (Common::File::exists("inherit the earth voices") || Common::File::exists("inherit the earth voices.cmp")) { + _contextsCount++; voicesFileIndex = _contextsCount - 1; - if (_vm->getFeatures() & GF_COMPRESSED_SOUNDS) - sprintf(voicesFileName, "inherit the earth voices.cmp"); - else + if (Common::File::exists("inherit the earth voices")) { sprintf(voicesFileName, "inherit the earth voices"); - // The resources in the Wyrmkeep combined Windows/Mac/Linux CD version are little endian, but - // the voice file is big endian. If we got such a version with mixed files, mark this voice file - // as big endian - if (!_vm->isBigEndian()) - voiceFileType = GAME_VOICEFILE | GAME_SWAPENDIAN; // This file is big endian + } else { + sprintf(voicesFileName, "inherit the earth voices.cmp"); + _vm->_gf_compressed_sounds = true; + } + // The resources in the Wyrmkeep combined Windows/Mac/Linux CD version are little endian, but + // the voice file is big endian. If we got such a version with mixed files, mark this voice file + // as big endian + if (!_vm->isBigEndian()) + voiceFileType = GAME_VOICEFILE | GAME_SWAPENDIAN; // This file is big endian +#else + } else if (Common::File::exists("\"inherit the earth voices\"") || + Common::File::exists("\"inherit the earth voices.cmp\"")) { + + _contextsCount++; + voicesFileIndex = _contextsCount - 1; + if (Common::File::exists("\"inherit the earth voices\"")) { + sprintf(voicesFileName, "\"inherit the earth voices\""); + } else { + sprintf(voicesFileName, "\"inherit the earth voices.cmp\""); + _vm->_gf_compressed_sounds = true; + } + // The resources in the Wyrmkeep combined Windows/Mac/Linux CD version are little endian, but + // the voice file is big endian. If we got such a version with mixed files, mark this voice file + // as big endian + if (!_vm->isBigEndian()) + voiceFileType = GAME_VOICEFILE | GAME_SWAPENDIAN; // This file is big endian +#endif } else { // No voice file found, don't add any file to the array voicesFileInArray = true; @@ -458,17 +495,21 @@ bool Resource::createContexts() { _contextsCount += 5; // voices1-voices3, voices4-voices5 censoredVersion = true; } - if (_vm->getFeatures() & GF_COMPRESSED_SOUNDS) - sprintf(voicesFileName, "voicess.cmp"); - else + if (Common::File::exists("voicess.res")) { sprintf(voicesFileName, "voicess.res"); + } else { + sprintf(voicesFileName, "voicess.cmp"); + _vm->_gf_compressed_sounds = true; + } } else if (Common::File::exists("voicesd.res") || Common::File::exists("voicesd.cmp")) { _contextsCount++; voicesFileIndex = _contextsCount - 1; - if (_vm->getFeatures() & GF_COMPRESSED_SOUNDS) - sprintf(voicesFileName, "voicesd.cmp"); - else + if (Common::File::exists("voicesd.res")) { sprintf(voicesFileName, "voicesd.res"); + } else { + sprintf(voicesFileName, "voicesd.cmp"); + _vm->_gf_compressed_sounds = true; + } } else { // No voice file found, don't add any file to the array voicesFileInArray = true; -- cgit v1.2.3