[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