[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