SCI: Blacklist certain audio map patch files
Refs Trac#9976.
This commit is contained in:
parent
4d52b018a2
commit
d38704e16d
2 changed files with 33 additions and 6 deletions
|
@ -1423,6 +1423,30 @@ ResVersion ResourceManager::detectVolVersion() {
|
||||||
return kResVersionUnknown;
|
return kResVersionUnknown;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool ResourceManager::isBlacklistedPatch(const ResourceId &resId) const {
|
||||||
|
switch (g_sci->getGameId()) {
|
||||||
|
case GID_SHIVERS:
|
||||||
|
// The SFX resource map patch in the Shivers interactive demo has
|
||||||
|
// broken offsets for some sounds; ignore it so that the correct map
|
||||||
|
// from RESSCI.000 will be used instead.
|
||||||
|
return g_sci->isDemo() &&
|
||||||
|
resId.getType() == kResourceTypeMap &&
|
||||||
|
resId.getNumber() == 65535;
|
||||||
|
case GID_PHANTASMAGORIA:
|
||||||
|
// The GOG release of Phantasmagoria 1 merges all resources into a
|
||||||
|
// single-disc bundle, but they also include the 65535.MAP & 37.MAP
|
||||||
|
// patch files from original game's CD 1, which (of course) do not
|
||||||
|
// contain the entries for audio from later CDs. So, just ignore these
|
||||||
|
// map patches since the correct maps will be found in the RESSCI.000
|
||||||
|
// file. This also helps eliminate user error when copying files from
|
||||||
|
// the original CDs.
|
||||||
|
return resId.getType() == kResourceTypeMap &&
|
||||||
|
(resId.getNumber() == 65535 || resId.getNumber() == 37);
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// version-agnostic patch application
|
// version-agnostic patch application
|
||||||
void ResourceManager::processPatch(ResourceSource *source, ResourceType resourceType, uint16 resourceNr, uint32 tuple) {
|
void ResourceManager::processPatch(ResourceSource *source, ResourceType resourceType, uint16 resourceNr, uint32 tuple) {
|
||||||
Common::SeekableReadStream *fileStream = 0;
|
Common::SeekableReadStream *fileStream = 0;
|
||||||
|
@ -1430,12 +1454,8 @@ void ResourceManager::processPatch(ResourceSource *source, ResourceType resource
|
||||||
ResourceId resId = ResourceId(resourceType, resourceNr, tuple);
|
ResourceId resId = ResourceId(resourceType, resourceNr, tuple);
|
||||||
ResourceType checkForType = resourceType;
|
ResourceType checkForType = resourceType;
|
||||||
|
|
||||||
// HACK: The SFX resource map patch in the Shivers interactive demo has
|
if (isBlacklistedPatch(resId)) {
|
||||||
// broken offsets for some sounds; ignore it so that the correct map from
|
debug("Skipping blacklisted patch file %s", source->getLocationName().c_str());
|
||||||
// RESSCI.000 will be used instead
|
|
||||||
if (g_sci->getGameId() == GID_SHIVERS && g_sci->isDemo() &&
|
|
||||||
resourceType == kResourceTypeMap && resourceNr == 65535) {
|
|
||||||
|
|
||||||
delete source;
|
delete source;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -575,6 +575,13 @@ protected:
|
||||||
*/
|
*/
|
||||||
void readResourcePatches();
|
void readResourcePatches();
|
||||||
void readResourcePatchesBase36();
|
void readResourcePatchesBase36();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Determines whether or not a patch file matching the given resource ID
|
||||||
|
* should be ignored when processing patches.
|
||||||
|
*/
|
||||||
|
bool isBlacklistedPatch(const ResourceId &resId) const;
|
||||||
|
|
||||||
void processPatch(ResourceSource *source, ResourceType resourceType, uint16 resourceNr, uint32 tuple = 0);
|
void processPatch(ResourceSource *source, ResourceType resourceType, uint16 resourceNr, uint32 tuple = 0);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue