[Scummvm-cvs-logs] SF.net SVN: scummvm:[48881] scummvm/trunk/engines/sci/resource.cpp

m_kiewitz at users.sourceforge.net m_kiewitz at users.sourceforge.net
Sat May 1 16:51:58 CEST 2010


Revision: 48881
          http://scummvm.svn.sourceforge.net/scummvm/?rev=48881&view=rev
Author:   m_kiewitz
Date:     2010-05-01 14:51:57 +0000 (Sat, 01 May 2010)

Log Message:
-----------
SCI: fix sync resources not loading correctly when compressed (mp3/ogg/flac) audio resource file was used

Modified Paths:
--------------
    scummvm/trunk/engines/sci/resource.cpp

Modified: scummvm/trunk/engines/sci/resource.cpp
===================================================================
--- scummvm/trunk/engines/sci/resource.cpp	2010-05-01 14:04:48 UTC (rev 48880)
+++ scummvm/trunk/engines/sci/resource.cpp	2010-05-01 14:51:57 UTC (rev 48881)
@@ -295,7 +295,7 @@
 
 bool ResourceManager::loadPatch(Resource *res, Common::File &file) {
 	// We assume that the resource type matches res->type
-	file.seek(res->_fileOffset + 2, SEEK_SET);
+	//  We also assume that the current file position is right at the actual data (behind resourceid/headersize byte)
 
 	res->data = new byte[res->size];
 
@@ -329,7 +329,8 @@
 		res->unalloc();
 		return false;
 	}
-
+	// Skip resourceid and header size byte
+	file.seek(2, SEEK_SET);
 	return loadPatch(res, file);
 }
 
@@ -375,6 +376,8 @@
 		// Load sample size
 		file.seek(7, SEEK_CUR);
 		res->size = file.readUint32LE();
+		// Adjust offset to point at the header data again
+		file.seek(-11, SEEK_CUR);
 	}
 
 	return loadPatch(res, file);
@@ -460,8 +463,15 @@
 					mappingTable++;
 					compressedOffset = *mappingTable;
 					// Go to next compressed offset and use that to calculate size of compressed sample
-					mappingTable += 2;
-					res->size = *mappingTable - compressedOffset;
+					switch (res->_id.type) {
+					case kResourceTypeSync:
+					case kResourceTypeSync36:
+						// we should already have a (valid) size
+						break;
+					default:
+						mappingTable += 2;
+						res->size = *mappingTable - compressedOffset;
+					}
 					break;
 				}
 				mappingTable += 2;


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Scummvm-git-logs mailing list