From ff574579bb625f1766669531f5b9633c12ea53b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Einar=20Johan=20Tr=C3=B8an=20S=C3=B8ma=CC=8Aen?= Date: Mon, 18 Nov 2013 12:00:34 +0100 Subject: [PATCH] WINTERMUTE: Add quite a bit of hackery to allow Reversion 1.3 to select languages properly. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Reversion 1.3 seems to have one language file in it’s main-folder, and a full set in languages/ (not language/ like a few other games), the names of the language-files are also different from what we’ve seen earlier. --- engines/wintermute/base/base_file_manager.cpp | 43 ++++++++++++++++--- engines/wintermute/detection.cpp | 1 + 2 files changed, 38 insertions(+), 6 deletions(-) diff --git a/engines/wintermute/base/base_file_manager.cpp b/engines/wintermute/base/base_file_manager.cpp index bea7e5344582..ae4c891c0382 100644 --- a/engines/wintermute/base/base_file_manager.cpp +++ b/engines/wintermute/base/base_file_manager.cpp @@ -168,6 +168,11 @@ bool BaseFileManager::initPaths() { if (languageSubFolder.exists()) { addPath(PATH_PACKAGE, languageSubFolder); } + // Also add languages/ for Reversion1. + languageSubFolder = gameData.getChild("languages"); + if (languageSubFolder.exists()) { + addPath(PATH_PACKAGE, languageSubFolder); + } return STATUS_OK; } @@ -187,6 +192,9 @@ bool BaseFileManager::registerPackages(const Common::FSList &fslist) { bool BaseFileManager::registerPackages() { debugC(kWintermuteDebugFileAccess | kWintermuteDebugLog, "Scanning packages"); + // We need the target name as a Common::String to perform some game-specific hacks. + Common::String targetName = BaseEngine::instance().getGameTargetName(); + // Register without using SearchMan, as otherwise the FSNode-based lookup in openPackage will fail // and that has to be like that to support the detection-scheme. Common::FSList files; @@ -199,20 +207,43 @@ bool BaseFileManager::registerPackages() { if (!fileIt->getName().hasSuffix(".dcp")) { continue; } + // HACK: for Reversion1, avoid loading xlanguage_pt.dcp from the main folder: + if (_language != Common::PT_BRA && targetName.hasPrefix("reversion1")) { + if (fileIt->getName() == "xlanguage_pt.dcp") { + continue; + } + } // Avoid registering all the language files // TODO: Select based on the gameDesc. - if (_language != Common::UNK_LANG && fileIt->getParent().getName() == "language") { + if (_language != Common::UNK_LANG && (fileIt->getParent().getName() == "language" || fileIt->getParent().getName() == "languages")) { Common::String parentName = fileIt->getParent().getName(); Common::String dcpName = fileIt->getName(); - if (_language == Common::EN_ANY && fileIt->getName() != "english.dcp") { + // English + if (_language == Common::EN_ANY && (fileIt->getName() != "english.dcp" && fileIt->getName() != "xlanguage_en.dcp")) { + continue; + // Chinese + } else if (_language == Common::ZH_CNA && (fileIt->getName() != "chinese.dcp" && fileIt->getName() != "xlanguage_nz.dcp")) { + continue; + // Czech + } else if (_language == Common::CZ_CZE && (fileIt->getName() != "czech.dcp" && fileIt->getName() != "xlanguage_cz.dcp")) { + continue; + // French + } else if (_language == Common::FR_FRA && (fileIt->getName() != "french.dcp" && fileIt->getName() != "xlanguage_fr.dcp")) { + continue; + // German + } else if (_language == Common::DE_DEU && (fileIt->getName() != "german.dcp" && fileIt->getName() != "xlanguage_de.dcp")) { continue; - } else if (_language == Common::CZ_CZE && fileIt->getName() != "czech.dcp") { + // Italian + } else if (_language == Common::IT_ITA && (fileIt->getName() != "italian.dcp" && fileIt->getName() != "xlanguage_it.dcp")) { continue; - } else if (_language == Common::IT_ITA && fileIt->getName() != "italian.dcp") { + // Polish + } else if (_language == Common::PL_POL && (fileIt->getName() != "polish.dcp" && fileIt->getName() != "xlanguage_po.dcp")) { continue; - } else if (_language == Common::PL_POL && fileIt->getName() != "polish.dcp") { + // Portuguese + } else if (_language == Common::PT_BRA && (fileIt->getName() != "portuguese.dcp" && fileIt->getName() != "xlanguage_pt.dcp")) { continue; - } else if (_language == Common::RU_RUS && fileIt->getName() != "russian.dcp") { + // Russian + } else if (_language == Common::RU_RUS && (fileIt->getName() != "russian.dcp" && fileIt->getName() != "xlanguage_ru.dcp")) { continue; } } diff --git a/engines/wintermute/detection.cpp b/engines/wintermute/detection.cpp index ac21d78ef58d..f4bd4378033b 100644 --- a/engines/wintermute/detection.cpp +++ b/engines/wintermute/detection.cpp @@ -68,6 +68,7 @@ static char s_fallbackGameIdBuf[256]; static const char *directoryGlobs[] = { "language", // To detect the various languages + "languages", // To detect the various languages 0 };