diff options
Diffstat (limited to 'engines/mortevielle/menu.cpp')
-rw-r--r-- | engines/mortevielle/menu.cpp | 110 |
1 files changed, 56 insertions, 54 deletions
diff --git a/engines/mortevielle/menu.cpp b/engines/mortevielle/menu.cpp index 5885d329b0..641a527c98 100644 --- a/engines/mortevielle/menu.cpp +++ b/engines/mortevielle/menu.cpp @@ -598,67 +598,69 @@ void Menu::initMenu() { Common::File f; bool menuLoaded = false; - // First try to read it from mort.dat - if (!f.open(MORT_DAT)) - warning("File %s not found. Using default menu from game data", MORT_DAT); - else { - // Figure out what language Id is needed - byte desiredLanguageId; - switch(_vm->getLanguage()) { - case Common::EN_ANY: - desiredLanguageId = MORTDAT_LANG_ENGLISH; - break; - case Common::FR_FRA: - desiredLanguageId = MORTDAT_LANG_FRENCH; - break; - case Common::DE_DEU: - desiredLanguageId = MORTDAT_LANG_GERMAN; - break; - default: - warning("Language not supported, switching to English"); - desiredLanguageId = MORTDAT_LANG_ENGLISH; - break; - } + // First try to read it from mort.dat if useOriginalData() is false + if (!_vm->useOriginalData()) { + if (!f.open(MORT_DAT)) + warning("File %s not found. Using default menu from game data", MORT_DAT); + else { + // Figure out what language Id is needed + byte desiredLanguageId; + switch(_vm->getLanguage()) { + case Common::EN_ANY: + desiredLanguageId = MORTDAT_LANG_ENGLISH; + break; + case Common::FR_FRA: + desiredLanguageId = MORTDAT_LANG_FRENCH; + break; + case Common::DE_DEU: + desiredLanguageId = MORTDAT_LANG_GERMAN; + break; + default: + warning("Language not supported, switching to English"); + desiredLanguageId = MORTDAT_LANG_ENGLISH; + break; + } - // Validate the data file header - char fileId[4]; - f.read(fileId, 4); - // Do not display warnings here. They would already have been displayed in MortevielleEngine::loadMortDat(). - if (strncmp(fileId, "MORT", 4) == 0 && f.readByte() >= MORT_DAT_REQUIRED_VERSION) { - f.readByte(); // Minor version - // Loop to load resources from the data file - while (f.pos() < f.size()) { - // Get the Id and size of the next resource - char dataType[4]; - int dataSize; - f.read(dataType, 4); - dataSize = f.readUint16LE(); - if (!strncmp(dataType, "MENU", 4)) { - // Read in the language - byte languageId = f.readByte(); - --dataSize; + // Validate the data file header + char fileId[4]; + f.read(fileId, 4); + // Do not display warnings here. They would already have been displayed in MortevielleEngine::loadMortDat(). + if (strncmp(fileId, "MORT", 4) == 0 && f.readByte() >= MORT_DAT_REQUIRED_VERSION) { + f.readByte(); // Minor version + // Loop to load resources from the data file + while (f.pos() < f.size()) { + // Get the Id and size of the next resource + char dataType[4]; + int dataSize; + f.read(dataType, 4); + dataSize = f.readUint16LE(); + if (!strncmp(dataType, "MENU", 4)) { + // Read in the language + byte languageId = f.readByte(); + --dataSize; - // If the language isn't correct, then skip the entire block - if (languageId != desiredLanguageId) { + // If the language isn't correct, then skip the entire block + if (languageId != desiredLanguageId) { + f.skip(dataSize); + continue; + } + if (dataSize == 6 * 24) { + f.read(_charArr, dataSize); + menuLoaded = true; + } else + warning("Wrong size %d for menu data. Expected %d or less", dataSize, 6 * 24); + break; + } else { + // Other sections f.skip(dataSize); - continue; } - if (dataSize == 6 * 24) { - f.read(_charArr, dataSize); - menuLoaded = true; - } else - warning("Wrong size %d for menu data. Expected %d or less", dataSize, 6 * 24); - break; - } else { - // Other sections - f.skip(dataSize); } } + // Close the file + f.close(); + if (!menuLoaded) + warning("Failed to load menu from mort.dat. Will use default menu from game data instead."); } - // Close the file - f.close(); - if (!menuLoaded) - warning("Failed to load menu from mort.dat. Will use default menu from game data instead."); } if (!menuLoaded) { |