[Scummvm-cvs-logs] SF.net SVN: scummvm:[48579] scummvm/trunk/engines/mohawk

mthreepwood at users.sourceforge.net mthreepwood at users.sourceforge.net
Wed Apr 7 01:38:43 CEST 2010


Revision: 48579
          http://scummvm.svn.sourceforge.net/scummvm/?rev=48579&view=rev
Author:   mthreepwood
Date:     2010-04-06 23:38:43 +0000 (Tue, 06 Apr 2010)

Log Message:
-----------
Cleanup the Myst resource caching code a bit and add support for caching Myst ME MJMP sound 'jumps'

Modified Paths:
--------------
    scummvm/trunk/engines/mohawk/myst.cpp
    scummvm/trunk/engines/mohawk/resource_cache.cpp
    scummvm/trunk/engines/mohawk/resource_cache.h

Modified: scummvm/trunk/engines/mohawk/myst.cpp
===================================================================
--- scummvm/trunk/engines/mohawk/myst.cpp	2010-04-06 23:01:15 UTC (rev 48578)
+++ scummvm/trunk/engines/mohawk/myst.cpp	2010-04-06 23:38:43 UTC (rev 48579)
@@ -94,10 +94,10 @@
 
 // Uses cached data objects in preference to disk access
 Common::SeekableReadStream *MohawkEngine_Myst::getRawData(uint32 tag, uint16 id) {
-	Common::SeekableReadStream *ret;
+	Common::SeekableReadStream *ret = _cache.search(tag, id);
 
-	ret = _cache.search(tag, id);
-	if(ret != NULL) return ret;
+	if (ret)
+		return ret;
 
 	for (uint32 i = 0; i < _mhk.size(); i++)
 		if (_mhk[i]->hasResource(tag, id)) {
@@ -106,24 +106,37 @@
 			return ret;
 		}
 
-	error ("Could not find a \'%s\' resource with ID %04x", tag2str(tag), id);
+	error("Could not find a \'%s\' resource with ID %04x", tag2str(tag), id);
 	return NULL;
 }
 
 void MohawkEngine_Myst::cachePreload(uint32 tag, uint16 id) {
-	Common::SeekableReadStream *tempData;
+	if (!_cache.enabled)
+		return;
 
-	if (!_cache.enabled) return;
+	for (uint32 i = 0; i < _mhk.size(); i++) {
+		// Check for MJMP in Myst ME
+		if ((getFeatures() & GF_ME) && tag == ID_MSND && _mhk[i]->hasResource(ID_MJMP, id)) {
+			Common::SeekableReadStream *tempData = _mhk[i]->getRawData(ID_MJMP, id);
+			uint16 msndId = tempData->readUint16LE();
+			delete tempData;
 
-	for (uint32 i = 0; i < _mhk.size(); i++)
+			// We've found where the real MSND data is, so go get that
+			tempData = _mhk[i]->getRawData(tag, msndId);
+			_cache.add(tag, id, tempData);
+			delete tempData;
+			return;
+		}
+
 		if (_mhk[i]->hasResource(tag, id)) {
-			tempData = _mhk[i]->getRawData(tag, id);
+			Common::SeekableReadStream *tempData = _mhk[i]->getRawData(tag, id);
 			_cache.add(tag, id, tempData);
 			delete tempData;
 			return;
 		}
+	}
 
-	warning ("cachePreload : Could not find a \'%s\' resource with ID %04x", tag2str(tag), id);
+	warning("cachePreload: Could not find a \'%s\' resource with ID %04x", tag2str(tag), id);
 }
 
 static const char *mystFiles[] = {

Modified: scummvm/trunk/engines/mohawk/resource_cache.cpp
===================================================================
--- scummvm/trunk/engines/mohawk/resource_cache.cpp	2010-04-06 23:01:15 UTC (rev 48578)
+++ scummvm/trunk/engines/mohawk/resource_cache.cpp	2010-04-06 23:38:43 UTC (rev 48579)
@@ -38,46 +38,49 @@
 }
 
 void ResourceCache::clear() {
-	if (!enabled) return;
+	if (!enabled)
+		return;
 
 	debugC(kDebugCache, "Clearing Cache...");
 
-	// TODO : Not sure if need to explicitly delete dataObject.data element ie.
-	//        returned by readStream method here.
+	// TODO: Not sure if need to explicitly delete DataObject.data element ie.
+	//       returned by readStream method here.
 	store.clear();
 }
 
 void ResourceCache::add(uint32 tag, uint16 id, Common::SeekableReadStream *data) {
-	if (!enabled) return;
+	if (!enabled)
+		return;
 
-	debugC(kDebugCache, "Adding item %u - tag 0x%04X id %u", store.size(), tag, id);
+	debugC(kDebugCache, "Adding item %d - tag 0x%04X id %d", store.size(), tag, id);
 
-	dataObject current;
+	DataObject current;
 	current.tag = tag;
 	current.id = id;
-	uint32 dataCurPos  = data->pos();
+	uint32 dataCurPos = data->pos();
 	current.data = data->readStream(data->size());
-	data->seek(dataCurPos, SEEK_SET);
+	data->seek(dataCurPos);
 	store.push_back(current);
 }
 
 // Returns NULL if not found
 Common::SeekableReadStream *ResourceCache::search(uint32 tag, uint16 id) {
-	if (!enabled) return NULL;
+	if (!enabled)
+		return NULL;
 
-	debugC(kDebugCache, "Searching for tag 0x%04X id %u", tag, id);
+	debugC(kDebugCache, "Searching for tag 0x%04X id %d", tag, id);
 
 	for (uint32 i = 0; i < store.size(); i++) {
 		if (tag == store[i].tag && id == store[i].id) {
 			debugC(kDebugCache, "Found cached tag 0x%04X id %u", tag, id);
 			uint32 dataCurPos  = store[i].data->pos();
 			Common::SeekableReadStream *ret = store[i].data->readStream(store[i].data->size());
-			store[i].data->seek(dataCurPos, SEEK_SET);
+			store[i].data->seek(dataCurPos);
 			return ret;
 		}
 	}
 
-	debugC(kDebugCache, "tag 0x%04X id %u not found", tag, id);
+	debugC(kDebugCache, "tag 0x%04X id %d not found", tag, id);
 	return NULL;
 }
 

Modified: scummvm/trunk/engines/mohawk/resource_cache.h
===================================================================
--- scummvm/trunk/engines/mohawk/resource_cache.h	2010-04-06 23:01:15 UTC (rev 48578)
+++ scummvm/trunk/engines/mohawk/resource_cache.h	2010-04-06 23:38:43 UTC (rev 48579)
@@ -45,13 +45,13 @@
 	Common::SeekableReadStream *search(uint32 tag, uint16 id);
 
 private:
-	typedef struct {
+	struct DataObject {
 		uint32 tag;
 		uint16 id;
 		Common::SeekableReadStream *data;
-	} dataObject;
+	};
 
-	Common::Array<dataObject> store;
+	Common::Array<DataObject> store;
 };
 
 } // End of namespace Mohawk


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