[Scummvm-cvs-logs] SF.net SVN: scummvm:[35497] scummvm/trunk/engines/saga

thebluegr at users.sourceforge.net thebluegr at users.sourceforge.net
Tue Dec 23 17:29:26 CET 2008


Revision: 35497
          http://scummvm.svn.sourceforge.net/scummvm/?rev=35497&view=rev
Author:   thebluegr
Date:     2008-12-23 16:29:26 +0000 (Tue, 23 Dec 2008)

Log Message:
-----------
Some initial code for HRS resource loading

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

Modified: scummvm/trunk/engines/saga/resource.h
===================================================================
--- scummvm/trunk/engines/saga/resource.h	2008-12-23 15:26:55 UTC (rev 35496)
+++ scummvm/trunk/engines/saga/resource.h	2008-12-23 16:29:26 UTC (rev 35497)
@@ -57,8 +57,12 @@
 };
 
 struct ResourceData {
+	uint32 id;		// SAGA2
 	size_t offset;
 	size_t size;
+
+	bool isExternal() { return ((offset & (1L<<31)) != 0L); }	// SAGA2
+
 	PatchData *patchData;
 	void fillSoundPatch(const GameSoundInfo *&soundInfo) {
 		if (patchData != NULL) {
@@ -75,11 +79,13 @@
 	const char *fileName;
 	uint16 fileType;
 	Common::File *file;
-	int serial;
+	int serial;			// IHNM speech files
 
 	bool isBigEndian;
 	ResourceData *table;
 	size_t count;
+	uint32 firstGroupOffset;	// SAGA2
+	ResourceData *groups;		// SAGA2
 
 	Common::File *getFile(ResourceData *resourceData) const {
 		if (resourceData->patchData != NULL) {
@@ -189,7 +195,7 @@
 private:
 	virtual bool loadMacContext(ResourceContext *context) { return false; }
 	virtual bool loadResContext(ResourceContext *context, uint32 contextOffset, uint32 contextSize) {
-		return loadResContext_v1(context, contextOffset, contextSize);
+		return loadResContext_v1(context, 0, contextSize);
 	}
 	MetaResource _metaResource;
 };
@@ -207,9 +213,9 @@
 private:
 	virtual bool loadMacContext(ResourceContext *context) { return false; }
 	virtual bool loadResContext(ResourceContext *context, uint32 contextOffset, uint32 contextSize) {
-		return loadResContext_v2(context, contextOffset, contextSize);
+		return loadResContext_v2(context, contextSize);
 	}
-	bool loadResContext_v2(ResourceContext *context, uint32 contextOffset, uint32 contextSize);
+	bool loadResContext_v2(ResourceContext *context, uint32 contextSize);
 };
 
 } // End of namespace Saga

Modified: scummvm/trunk/engines/saga/resource_hrs.cpp
===================================================================
--- scummvm/trunk/engines/saga/resource_hrs.cpp	2008-12-23 15:26:55 UTC (rev 35496)
+++ scummvm/trunk/engines/saga/resource_hrs.cpp	2008-12-23 16:29:26 UTC (rev 35497)
@@ -36,11 +36,36 @@
 #include "saga/sndres.h"
 
 #include "common/advancedDetector.h"
+#include "common/endian.h"
 
 namespace Saga {
 
-bool Resource_HRS::loadResContext_v2(ResourceContext *context, uint32 contextOffset, uint32 contextSize) {
-	// STUB
+bool Resource_HRS::loadResContext_v2(ResourceContext *context, uint32 contextSize) {
+	ResourceData *resourceData = new ResourceData();
+	uint32 firstGroupOffset;
+	const int resDataSize = 4 + 4 + 4;
+
+	context->file->seek(0, SEEK_SET);
+	
+	// Read head element (origin)
+	resourceData->id = context->file->readUint32BE();
+	resourceData->offset = context->file->readUint32LE();
+	resourceData->size = context->file->readUint32LE();
+
+	// Check if the file is valid
+	if (resourceData->id != MKID_BE('HRES')) {	// header
+		free(resourceData);
+		return false;
+	}
+
+	// Read first group offset
+	context->file->seek(resourceData->offset - 4, SEEK_SET);
+	firstGroupOffset = context->file->readUint32LE();
+
+	// Allocate buffers for root/base node, groups and data
+	// TODO
+
+	free(resourceData);
 	return true;
 }
 


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