[Scummvm-git-logs] scummvm master -> ea6eebca09f9303cd08aa6d767123ba383c548e8
csnover
csnover at users.noreply.github.com
Wed May 10 22:36:40 CEST 2017
This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
ea6eebca09 SCI: Fix reading of Rave data from compressed KQ6 audio volumes
Commit: ea6eebca09f9303cd08aa6d767123ba383c548e8
https://github.com/scummvm/scummvm/commit/ea6eebca09f9303cd08aa6d767123ba383c548e8
Author: Colin Snover (github.com at zetafleet.com)
Date: 2017-05-10T15:29:53-05:00
Commit Message:
SCI: Fix reading of Rave data from compressed KQ6 audio volumes
Refs Trac#9764.
Changed paths:
engines/sci/resource.cpp
engines/sci/resource.h
engines/sci/resource_audio.cpp
diff --git a/engines/sci/resource.cpp b/engines/sci/resource.cpp
index 2f34f8f..6ee77fd 100644
--- a/engines/sci/resource.cpp
+++ b/engines/sci/resource.cpp
@@ -2010,10 +2010,12 @@ bool ResourceManager::validateResource(const ResourceId &resourceId, const Commo
return true;
}
-void ResourceManager::addResource(ResourceId resId, ResourceSource *src, uint32 offset, uint32 size, const Common::String &sourceMapLocation) {
+Resource *ResourceManager::addResource(ResourceId resId, ResourceSource *src, uint32 offset, uint32 size, const Common::String &sourceMapLocation) {
// Adding new resource only if it does not exist
if (_resMap.contains(resId) == false) {
- updateResource(resId, src, offset, size, sourceMapLocation);
+ return updateResource(resId, src, offset, size, sourceMapLocation);
+ } else {
+ return _resMap.getVal(resId);
}
}
diff --git a/engines/sci/resource.h b/engines/sci/resource.h
index d865130..2bbbd42 100644
--- a/engines/sci/resource.h
+++ b/engines/sci/resource.h
@@ -520,7 +520,7 @@ protected:
void loadResource(Resource *res);
void freeOldResources();
bool validateResource(const ResourceId &resourceId, const Common::String &sourceMapLocation, const Common::String &sourceName, const uint32 offset, const uint32 size, const uint32 sourceSize) const;
- void addResource(ResourceId resId, ResourceSource *src, uint32 offset, uint32 size = 0, const Common::String &sourceMapLocation = Common::String("(no map location)"));
+ Resource *addResource(ResourceId resId, ResourceSource *src, uint32 offset, uint32 size = 0, const Common::String &sourceMapLocation = Common::String("(no map location)"));
Resource *updateResource(ResourceId resId, ResourceSource *src, uint32 size, const Common::String &sourceMapLocation = Common::String("(no map location)"));
Resource *updateResource(ResourceId resId, ResourceSource *src, uint32 offset, uint32 size, const Common::String &sourceMapLocation = Common::String("(no map location)"));
void removeAudioResource(ResourceId resId);
diff --git a/engines/sci/resource_audio.cpp b/engines/sci/resource_audio.cpp
index 2cd157a..0b00725 100644
--- a/engines/sci/resource_audio.cpp
+++ b/engines/sci/resource_audio.cpp
@@ -444,7 +444,16 @@ int ResourceManager::readAudioMapSCI11(IntMapResourceSource *map) {
ptr += 2;
if (kq6HiresSyncSize > 0) {
- addResource(ResourceId(kResourceTypeRave, map->_mapNumber, n & 0xffffff3f), src, offset + syncSize, kq6HiresSyncSize, map->getLocationName());
+ // Rave resources do not have separate entries in the audio
+ // map (their data was just appended to sync resources), so
+ // we have to use the sync resource offset first and then
+ // adjust the offset & size later, otherwise offset
+ // validation will fail for compressed volumes (since the
+ // relocation table in a compressed volume only contains
+ // offsets that existed in the original audio map)
+ Resource *res = addResource(ResourceId(kResourceTypeRave, map->_mapNumber, n & 0xffffff3f), src, offset, syncSize + kq6HiresSyncSize, map->getLocationName());
+ res->_fileOffset += syncSize;
+ res->_size -= syncSize;
syncSize += kq6HiresSyncSize;
}
}
More information about the Scummvm-git-logs
mailing list