mirror of
https://github.com/scummvm/scummvm.git
synced 2026-06-20 05:45:29 +00:00
ZVISION: Handle sound patches (.src files) dynamically
This commit is contained in:
@@ -62,19 +62,6 @@ SearchManager::~SearchManager() {
|
||||
_archList.clear();
|
||||
}
|
||||
|
||||
void SearchManager::addPatch(const Common::String &src, const Common::String &dst) {
|
||||
Common::String lowerCaseName = dst;
|
||||
lowerCaseName.toLowercase();
|
||||
|
||||
SearchManager::MatchList::iterator it = _files.find(lowerCaseName);
|
||||
|
||||
if (it != _files.end()) {
|
||||
lowerCaseName = src;
|
||||
lowerCaseName.toLowercase();
|
||||
_files[lowerCaseName] = it->_value;
|
||||
}
|
||||
}
|
||||
|
||||
void SearchManager::addFile(const Common::String &name, Common::Archive *arch) {
|
||||
bool addArch = true;
|
||||
Common::List<Common::Archive *>::iterator it = _archList.begin();
|
||||
|
||||
@@ -39,7 +39,6 @@ public:
|
||||
|
||||
void addFile(const Common::String &name, Common::Archive *arch);
|
||||
void addDir(const Common::String &name);
|
||||
void addPatch(const Common::String &src, const Common::String &dst);
|
||||
|
||||
Common::File *openFile(const Common::String &name);
|
||||
bool openFile(Common::File &file, const Common::String &name);
|
||||
|
||||
@@ -242,11 +242,27 @@ Audio::RewindableAudioStream *makeRawZorkStream(Common::SeekableReadStream *stre
|
||||
|
||||
Audio::RewindableAudioStream *makeRawZorkStream(const Common::String &filePath, ZVision *engine) {
|
||||
Common::File *file = new Common::File();
|
||||
if (!engine->getSearchManager()->openFile(*file, filePath))
|
||||
error("File not found: %s", filePath.c_str());
|
||||
Common::String actualName = filePath;
|
||||
bool found = engine->getSearchManager()->openFile(*file, actualName);
|
||||
bool isRaw = actualName.hasSuffix(".raw");
|
||||
|
||||
if ((!found && isRaw) || (found && isRaw && file->size() < 10)) {
|
||||
if (found)
|
||||
file->close();
|
||||
|
||||
// Check for an audio patch (.src)
|
||||
actualName.setChar('s', actualName.size() - 3);
|
||||
actualName.setChar('r', actualName.size() - 2);
|
||||
actualName.setChar('c', actualName.size() - 1);
|
||||
|
||||
if (!engine->getSearchManager()->openFile(*file, actualName))
|
||||
error("File not found: %s", actualName.c_str());
|
||||
} else if (!found && !isRaw) {
|
||||
error("File not found: %s", actualName.c_str());
|
||||
}
|
||||
|
||||
// Get the file name
|
||||
Common::StringTokenizer tokenizer(filePath, "/\\");
|
||||
Common::StringTokenizer tokenizer(actualName, "/\\");
|
||||
Common::String fileName;
|
||||
while (!tokenizer.empty()) {
|
||||
fileName = tokenizer.nextToken();
|
||||
|
||||
@@ -186,20 +186,6 @@ void ZVision::initialize() {
|
||||
|
||||
if (_gameDescription->gameId == GID_GRANDINQUISITOR) {
|
||||
_searchManager->loadZix("INQUIS.ZIX");
|
||||
_searchManager->addPatch("C000H01Q.RAW", "C000H01Q.SRC");
|
||||
_searchManager->addPatch("CM00H01Q.RAW", "CM00H01Q.SRC");
|
||||
_searchManager->addPatch("DM00H01Q.RAW", "DM00H01Q.SRC");
|
||||
_searchManager->addPatch("E000H01Q.RAW", "E000H01Q.SRC");
|
||||
_searchManager->addPatch("EM00H50Q.RAW", "EM00H50Q.SRC");
|
||||
_searchManager->addPatch("GJNPH65P.RAW", "GJNPH65P.SRC");
|
||||
_searchManager->addPatch("GJNPH72P.RAW", "GJNPH72P.SRC");
|
||||
_searchManager->addPatch("H000H01Q.RAW", "H000H01Q.SRC");
|
||||
_searchManager->addPatch("M000H01Q.RAW", "M000H01Q.SRC");
|
||||
_searchManager->addPatch("P000H01Q.RAW", "P000H01Q.SRC");
|
||||
_searchManager->addPatch("Q000H01Q.RAW", "Q000H01Q.SRC");
|
||||
_searchManager->addPatch("SW00H01Q.RAW", "SW00H01Q.SRC");
|
||||
_searchManager->addPatch("T000H01Q.RAW", "T000H01Q.SRC");
|
||||
_searchManager->addPatch("U000H01Q.RAW", "U000H01Q.SRC");
|
||||
} else if (_gameDescription->gameId == GID_NEMESIS)
|
||||
_searchManager->loadZix("NEMESIS.ZIX");
|
||||
|
||||
|
||||
Reference in New Issue
Block a user