[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