[Scummvm-git-logs] scummvm master -> eb6e1791690c2498891071ecc944bb381b413732

csnover csnover at users.noreply.github.com
Tue May 9 07:05:57 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:
eb6e179169 SCI: Fix SCI1.1 patch resources


Commit: eb6e1791690c2498891071ecc944bb381b413732
    https://github.com/scummvm/scummvm/commit/eb6e1791690c2498891071ecc944bb381b413732
Author: Colin Snover (github.com at zetafleet.com)
Date: 2017-05-08T23:59:28-05:00

Commit Message:
SCI: Fix SCI1.1 patch resources

While earlier commits had fixed handling of audio resources in
audio bundles to match SSCI, audio *patches* in SCI16 were still
being treated like standard resource patches. They are now
special-cased in the resource manager, just like SCI32.

Incidentally, while fixing the problem with audio patches, I also
noticed that the patch resource fixes for SQ5/German were very
similar to the special-case operations for resources in SCI32,
though using an odd heuristic. After investigating, it appears
that Sierra SCI1.1 works mostly like SCI32, and not like what
was there from SCI View. So, the old special-case code is deleted
and the special-case code for SCI32 has been expanded to cover
SCI1.1. (SSCI prior to 1.1 do not appear to do this
special-casing.)

Fixes Trac#9773.

Changed paths:
    engines/sci/resource.cpp


diff --git a/engines/sci/resource.cpp b/engines/sci/resource.cpp
index 089b466..ccf576d 100644
--- a/engines/sci/resource.cpp
+++ b/engines/sci/resource.cpp
@@ -1465,18 +1465,21 @@ void ResourceManager::processPatch(ResourceSource *source, ResourceType resource
 	};
 
 	int32 patchDataOffset = kResourceHeaderSize;
-	if (_volVersion < kResVersionSci2) {
+	if (_volVersion < kResVersionSci11) {
 		patchDataOffset += fileStream->readByte();
-	}
-#ifdef ENABLE_SCI32
-	else {
+	} else {
 		switch (patchType) {
 		case kResourceTypeView:
 			fileStream->seek(3, SEEK_SET);
 			patchDataOffset += fileStream->readByte() + kViewHeaderSize + kExtraHeaderSize;
 			break;
 		case kResourceTypePic:
-			patchDataOffset += kExtraHeaderSize;
+			if (_volVersion < kResVersionSci2) {
+				fileStream->seek(3, SEEK_SET);
+				patchDataOffset += fileStream->readByte() + kViewHeaderSize + kExtraHeaderSize;
+			} else {
+				patchDataOffset += kExtraHeaderSize;
+			}
 			break;
 		case kResourceTypePalette:
 			fileStream->seek(3, SEEK_SET);
@@ -1499,7 +1502,6 @@ void ResourceManager::processPatch(ResourceSource *source, ResourceType resource
 			break;
 		}
 	}
-#endif
 
 	delete fileStream;
 
@@ -1509,24 +1511,6 @@ void ResourceManager::processPatch(ResourceSource *source, ResourceType resource
 		return;
 	}
 
-	// Fixes SQ5/German, patch file special case logic taken from SCI View disassembly
-	if (patchDataOffset & 0x80) {
-		switch ((patchDataOffset - kResourceHeaderSize) & 0x7F) {
-			case 0:
-				patchDataOffset = kResourceHeaderSize + 24;
-				break;
-			case 1:
-				patchDataOffset = kResourceHeaderSize + 2;
-				break;
-			case 4:
-				patchDataOffset = kResourceHeaderSize + 8;
-				break;
-			default:
-				error("Resource patch unsupported special case %X", patchDataOffset & 0x7F);
-				return;
-		}
-	}
-
 	if (patchDataOffset >= fsize) {
 		debug("Patching %s failed - patch starting at offset %d can't be in file of size %d",
 		      source->getLocationName().c_str(), patchDataOffset, fsize);





More information about the Scummvm-git-logs mailing list