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

mthreepwood at users.sourceforge.net mthreepwood at users.sourceforge.net
Sun Jan 3 04:37:50 CET 2010


Revision: 46916
          http://scummvm.svn.sourceforge.net/scummvm/?rev=46916&view=rev
Author:   mthreepwood
Date:     2010-01-03 03:37:50 +0000 (Sun, 03 Jan 2010)

Log Message:
-----------
Add support for wave files in the audio volume. This is used in Pharkas CD and GK1 CD.

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

Modified: scummvm/trunk/engines/sci/resource.cpp
===================================================================
--- scummvm/trunk/engines/sci/resource.cpp	2010-01-03 02:04:43 UTC (rev 46915)
+++ scummvm/trunk/engines/sci/resource.cpp	2010-01-03 03:37:50 UTC (rev 46916)
@@ -231,7 +231,28 @@
 	return loadPatch(res, file);
 }
 
+bool ResourceManager::loadFromWaveFile(Resource *res, Common::File &file) {
+	res->data = new byte[res->size];
+
+	uint32 really_read = file.read(res->data, res->size);
+	if (really_read != res->size)
+		error("Read %d bytes from %s but expected %d", really_read, res->id.toString().c_str(), res->size);
+
+	res->status = kResStatusAllocated;
+	return true;	
+}
+
 bool ResourceManager::loadFromAudioVolumeSCI11(Resource *res, Common::File &file) {
+	// Check for WAVE files here
+	uint32 riffTag = file.readUint32BE();
+	if (riffTag == MKID_BE('RIFF')) {
+		res->headerSize = 0;
+		res->size = file.readUint32LE();
+		file.seek(-8, SEEK_CUR);
+		return loadFromWaveFile(res, file);
+	}
+	file.seek(-4, SEEK_CUR);
+
 	ResourceType type = (ResourceType)(file.readByte() & 0x7f);
 	if (((res->id.type == kResourceTypeAudio || res->id.type == kResourceTypeAudio36) && (type != kResourceTypeAudio))
 		|| ((res->id.type == kResourceTypeSync || res->id.type == kResourceTypeSync36) && (type != kResourceTypeSync))) {
@@ -319,6 +340,9 @@
 		return;
 	}
 	file->seek(res->file_offset, SEEK_SET);
+	
+	if (res->source->source_type == kSourceWave && loadFromWaveFile(res, *file))
+		return;
 
 	if (res->source->source_type == kSourceAudioVolume) {
 		if (getSciVersion() < SCI_VERSION_1_1)
@@ -1009,7 +1033,7 @@
 		if (isdigit(name[0])) {
 			int number = atoi(name.c_str());
 			ResourceSource *psrcPatch = new ResourceSource;
-			psrcPatch->source_type = kSourcePatch;
+			psrcPatch->source_type = kSourceWave;
 			psrcPatch->location_name = name;
 
 			ResourceId resId = ResourceId(kResourceTypeAudio, number);
@@ -1034,7 +1058,6 @@
 			newrsc->source = psrcPatch;
 			newrsc->size = fileSize;
 			newrsc->headerSize = 0;
-			newrsc->file_offset = -2; // Use -2 to signal there's no patch header
 			debugC(1, kDebugLevelResMan, "Patching %s - OK", psrcPatch->location_name.c_str());
 		}
 	}

Modified: scummvm/trunk/engines/sci/resource.h
===================================================================
--- scummvm/trunk/engines/sci/resource.h	2010-01-03 02:04:43 UTC (rev 46915)
+++ scummvm/trunk/engines/sci/resource.h	2010-01-03 03:37:50 UTC (rev 46916)
@@ -80,7 +80,8 @@
 	kSourceExtMap,
 	kSourceIntMap,
 	kSourceAudioVolume,
-	kSourceExtAudioMap
+	kSourceExtAudioMap,
+	kSourceWave
 };
 
 enum {
@@ -357,6 +358,7 @@
 	void loadResource(Resource *res);
 	bool loadPatch(Resource *res, Common::File &file);
 	bool loadFromPatchFile(Resource *res);
+	bool loadFromWaveFile(Resource *res, Common::File &file);
 	bool loadFromAudioVolumeSCI1(Resource *res, Common::File &file);
 	bool loadFromAudioVolumeSCI11(Resource *res, Common::File &file);
 	void freeOldResources();


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