mirror of
https://github.com/libretro/scummvm.git
synced 2025-02-02 17:03:13 +00:00
MOHAWK: RIVEN: Fix off-by-one ids in ospit for the 25th localized versions
Fixes Trac#10620.
This commit is contained in:
parent
204060d1f0
commit
e105c2a78a
@ -154,6 +154,25 @@ Common::Array<uint16> Archive::getResourceIDList(uint32 type) const {
|
||||
return idList;
|
||||
}
|
||||
|
||||
void Archive::offsetResourceIDs(uint32 type, uint16 startId, int16 increment) {
|
||||
if (!_types.contains(type)) {
|
||||
return;
|
||||
}
|
||||
|
||||
const ResourceMap &oldResMap = _types[type];
|
||||
ResourceMap newResMap;
|
||||
|
||||
for (ResourceMap::const_iterator it = oldResMap.begin(); it != oldResMap.end(); it++) {
|
||||
if (it->_key >= startId) {
|
||||
newResMap[it->_key + increment] = it->_value;
|
||||
} else {
|
||||
newResMap[it->_key] = it->_value;
|
||||
}
|
||||
}
|
||||
|
||||
_types[type] = newResMap;
|
||||
}
|
||||
|
||||
// Mohawk Archive code
|
||||
|
||||
struct FileTableEntry {
|
||||
|
@ -145,6 +145,8 @@ public:
|
||||
Common::Array<uint32> getResourceTypeList() const;
|
||||
Common::Array<uint16> getResourceIDList(uint32 type) const;
|
||||
|
||||
/** Offset the resource ids for a resource type by the specified amount */
|
||||
void offsetResourceIDs(uint32 type, uint16 startId, int16 increment);
|
||||
protected:
|
||||
Common::SeekableReadStream *_stream;
|
||||
|
||||
|
@ -400,8 +400,19 @@ void MohawkEngine_Riven::changeToStack(uint16 stackId) {
|
||||
Common::String languageDatafile = getLanguageDatafile(prefix);
|
||||
if (!languageDatafile.empty()) {
|
||||
MohawkArchive *mhk = new MohawkArchive();
|
||||
if (mhk->openFile(languageDatafile))
|
||||
if (mhk->openFile(languageDatafile)) {
|
||||
|
||||
if (stackId == kStackOspit && (getLanguage() != Common::EN_ANY || getLanguage() != Common::RU_RUS)) {
|
||||
// WORKAROUND: The international CD versions were repacked for the 25th anniversary release
|
||||
// so they share the same resources as the English DVD version. The resource IDs for the DVD
|
||||
// version resources have a delta of 1 in their numbering when compared the the CD version
|
||||
// resources for Gehn's office. Unfortunately this delta was not compensated when repacking
|
||||
// the archives. We need to do it here at run time...
|
||||
mhk->offsetResourceIDs(ID_TBMP, 196, 1);
|
||||
}
|
||||
|
||||
_mhk.push_back(mhk);
|
||||
}
|
||||
else
|
||||
delete mhk;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user