mirror of
https://github.com/libretro/scummvm.git
synced 2025-02-09 04:16:34 +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;
|
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
|
// Mohawk Archive code
|
||||||
|
|
||||||
struct FileTableEntry {
|
struct FileTableEntry {
|
||||||
|
@ -145,6 +145,8 @@ public:
|
|||||||
Common::Array<uint32> getResourceTypeList() const;
|
Common::Array<uint32> getResourceTypeList() const;
|
||||||
Common::Array<uint16> getResourceIDList(uint32 type) 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:
|
protected:
|
||||||
Common::SeekableReadStream *_stream;
|
Common::SeekableReadStream *_stream;
|
||||||
|
|
||||||
|
@ -400,8 +400,19 @@ void MohawkEngine_Riven::changeToStack(uint16 stackId) {
|
|||||||
Common::String languageDatafile = getLanguageDatafile(prefix);
|
Common::String languageDatafile = getLanguageDatafile(prefix);
|
||||||
if (!languageDatafile.empty()) {
|
if (!languageDatafile.empty()) {
|
||||||
MohawkArchive *mhk = new MohawkArchive();
|
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);
|
_mhk.push_back(mhk);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
delete mhk;
|
delete mhk;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user