[Scummvm-cvs-logs] SF.net SVN: scummvm:[33529] scummvm/trunk/engines/cine

buddha_ at users.sourceforge.net buddha_ at users.sourceforge.net
Sat Aug 2 17:47:26 CEST 2008


Revision: 33529
          http://scummvm.svn.sourceforge.net/scummvm/?rev=33529&view=rev
Author:   buddha_
Date:     2008-08-02 15:47:25 +0000 (Sat, 02 Aug 2008)

Log Message:
-----------
- Combined loadAbs and loadResource into one function.
- Made resource loading functions (loadSpl, loadMsk etc)
  return the number of the animDataTable entry right after
  the loaded data.
- Made resource loading functions always load multiframe
  data into directly sequential animDataTable entries
  (Hopefully this won't break anything).

Modified Paths:
--------------
    scummvm/trunk/engines/cine/anim.cpp
    scummvm/trunk/engines/cine/anim.h
    scummvm/trunk/engines/cine/script_os.cpp

Modified: scummvm/trunk/engines/cine/anim.cpp
===================================================================
--- scummvm/trunk/engines/cine/anim.cpp	2008-08-02 15:15:32 UTC (rev 33528)
+++ scummvm/trunk/engines/cine/anim.cpp	2008-08-02 15:47:25 UTC (rev 33529)
@@ -511,14 +511,15 @@
 
 /*! \brief Load SPL data into animDataTable
  * \param resourceName SPL filename
- * \param idx Target index in animDataTable
+ * \param idx Target index in animDataTable (-1 if any empty space will do)
+ * \return The number of the animDataTable entry after the loaded SPL data (-1 if error)
  */
-void loadSpl(const char *resourceName, int16 idx) {
+int loadSpl(const char *resourceName, int16 idx) {
 	int16 foundFileIdx = findFileInBundle(resourceName);
 	int entry;
 
 	if (foundFileIdx < 0) {
-		return;
+		return -1;
 	}
 
 	byte *dataPtr = readBundleFile(foundFileIdx);
@@ -528,12 +529,15 @@
 	animDataTable[entry].load(dataPtr, ANIM_RAW, partBuffer[foundFileIdx].unpackedSize, 1, foundFileIdx, 0, currentPartName);
 
 	free(dataPtr);
+	return entry + 1;
 }
 
 /*! \brief Load 1bpp mask
  * \param resourceName Mask filename
+ * \param idx Target index in animDataTable (-1 if any empty space will do)
+ * \return The number of the animDataTable entry after the loaded mask
  */
-void loadMsk(const char *resourceName) {
+int loadMsk(const char *resourceName, int16 idx) {
 	int16 foundFileIdx = findFileInBundle(resourceName);
 	int entry = 0;
 	byte *dataPtr = readBundleFile(foundFileIdx);
@@ -544,20 +548,23 @@
 	loadAnimHeader(animHeader, readS);
 	ptr = dataPtr + 0x16;
 
+	entry = idx < 0 ? emptyAnimSpace() : idx;
+	assert(entry >= 0);
 	for (int16 i = 0; i < animHeader.numFrames; i++, entry++) {
-		entry = emptyAnimSpace(entry);
-		assert(entry >= 0);
 		animDataTable[entry].load(ptr, ANIM_MASK, animHeader.frameWidth, animHeader.frameHeight, foundFileIdx, i, currentPartName);
 		ptr += animHeader.frameWidth * animHeader.frameHeight;
 	}
 
 	free(dataPtr);
+	return entry;
 }
 
 /*! \brief Load animation
  * \param resourceName Animation filename
+ * \param idx Target index in animDataTable (-1 if any empty space will do)
+ * \return The number of the animDataTable entry after the loaded animation
  */
-void loadAni(const char *resourceName) {
+int loadAni(const char *resourceName, int16 idx) {
 	int16 foundFileIdx = findFileInBundle(resourceName);
 	int entry = 0;
 	byte *dataPtr = readBundleFile(foundFileIdx);
@@ -571,10 +578,10 @@
 
 	transparentColor = getAnimTransparentColor(resourceName);
 
-	for (int16 i = 0; i < animHeader.numFrames; i++, entry++) {
-		entry = emptyAnimSpace(entry);
-		assert(entry >= 0);
+	entry = idx < 0 ? emptyAnimSpace() : idx;
+	assert(entry >= 0);
 
+	for (int16 i = 0; i < animHeader.numFrames; i++, entry++) {
 		// special case transparency handling
 		if (!strcmp(resourceName, "L2202.ANI")) {
 			transparentColor = i < 2 ? 0 : 7;
@@ -587,6 +594,7 @@
 	}
 
 	free(dataPtr);
+	return entry;
 }
 
 /*! \brief Decode 16 color image with palette
@@ -642,13 +650,14 @@
 
 /*! \brief Load image set
  * \param resourceName Image set filename
- * \param idx Target index in animDataTable
+ * \param idx Target index in animDataTable (-1 if any empty space will do)
+ * \return The number of the animDataTable entry after the loaded image set
  */
-void loadSet(const char *resourceName, int16 idx) {
+int loadSet(const char *resourceName, int16 idx) {
 	AnimHeader2Struct header2;
 	uint16 numSpriteInAnim;
 	int16 foundFileIdx = findFileInBundle(resourceName);
-	int16 entry = idx >= 0 ? idx : 0;
+	int16 entry;
 	byte *ptr, *startOfDataPtr, *dataPtr, *origDataPtr;
 	int type;
 
@@ -661,6 +670,9 @@
 
 	startOfDataPtr = ptr + numSpriteInAnim * 0x10;
 
+	entry = idx < 0 ? emptyAnimSpace() : idx;
+	assert(entry >= 0);
+
 	for (int16 i = 0; i < numSpriteInAnim; i++, entry++) {
 		Common::MemoryReadStream readS(ptr, 0x10);
 
@@ -674,9 +686,6 @@
 
 		ptr += 0x10;
 
-		entry = idx < 0 ? emptyAnimSpace(entry) : idx + i;
-		assert(entry >= 0);
-
 		dataPtr = startOfDataPtr + header2.field_0;
 
 		if (header2.type == 1) {
@@ -693,80 +702,57 @@
 	}
 
 	free(origDataPtr);
+	return entry;
 }
 
 /*! \brief Load SEQ data into animDataTable
  * \param resourceName SEQ data filename
- * \param idx Target index in animDataTable
+ * \param idx Target index in animDataTable (-1 if any empty space will do)
+ * \return The number of the animDataTable entry after the loaded SEQ data
  */
-void loadSeq(const char *resourceName, int16 idx) {
+int loadSeq(const char *resourceName, int16 idx) {
 	int16 foundFileIdx = findFileInBundle(resourceName);
 	byte *dataPtr = readBundleFile(foundFileIdx);
 	int entry = idx < 0 ? emptyAnimSpace() : idx;
 
 	animDataTable[entry].load(dataPtr+0x16, ANIM_RAW, partBuffer[foundFileIdx].unpackedSize-0x16, 1, foundFileIdx, 0, currentPartName);
 	free(dataPtr);
+	return entry + 1;
 }
 
-void loadResource(const char *resourceName) {
-	/* byte isMask = 0; */
-	/* byte isSpl = 0; */
-
+/*! \brief Load a resource into animDataTable
+ * \param resourceName Resource's filename
+ * \param idx Target index in animDataTable (-1 if any empty space will do)
+ * \return The number of the animDataTable entry after the loaded resource (-1 if error)
+ * \todo Implement loading of all resource types
+ */
+int loadResource(const char *resourceName, int16 idx) {
+	int result = -1; // Return an error by default
 	if (strstr(resourceName, ".SPL")) {
-		loadSpl(resourceName, -1);
-		return;
+		result = loadSpl(resourceName, idx);
 	} else if (strstr(resourceName, ".MSK")) {
-		loadMsk(resourceName);
-		return;
+		result = loadMsk(resourceName, idx);
 	} else if (strstr(resourceName, ".ANI")) {
-		loadAni(resourceName);
-		return;
+		result = loadAni(resourceName, idx);
 	} else if (strstr(resourceName, ".ANM")) {
-		loadAni(resourceName);
-		return;
+		result = loadAni(resourceName, idx);
 	} else if (strstr(resourceName, ".SET")) {
-		loadSet(resourceName, -1);
-		return;
+		result = loadSet(resourceName, idx);
 	} else if (strstr(resourceName, ".SEQ")) {
-		loadSeq(resourceName, -1);
-		return;
+		result = loadSeq(resourceName, idx);
+	} else if (strstr(resourceName, ".H32")) {
+		warning("loadResource: Ignoring file '%s' (Load at %d)", resourceName, idx);
+	} else if (strstr(resourceName, ".AMI")) {
+		warning("loadResource: Ignoring file '%s' (Load at %d)", resourceName, idx);
 	} else if (strstr(resourceName, "ECHEC")) { // Echec (French) means failure
 		exitEngine = 1;
-		return;
+	} else {
+		error("loadResource: Cannot determine type for '%s'", resourceName);
 	}
 
-	error("loadResource: Cannot determine type for '%s'", resourceName);
+	return result;
 }
 
-/*! \todo There seems to be some additional resource file that is not loaded
- */
-void loadAbs(const char *resourceName, uint16 idx) {
-	/* byte isMask = 0; */
-	/* byte isSpl = 0; */
-
-	if (strstr(resourceName, ".SET")) {
-		loadSet(resourceName, idx);
-		return;
-	} else if (strstr(resourceName, ".H32")) {
-		warning("Ignoring file %s (load at %d)", resourceName, idx);
-		return;
-	} else if (strstr(resourceName, ".SEQ")) {
-		loadSeq(resourceName, idx);
-		return;
-	} else if (strstr(resourceName, ".SPL")) {
-		loadSpl(resourceName, idx);
-		return;
-	} else if (strstr(resourceName, ".AMI")) {
-		warning("Ignoring file %s (load at %d)", resourceName, idx);
-		return;
-	} else if (strstr(resourceName, ".ANI")) {
-		warning("Ignoring file %s (load at %d)", resourceName, idx);
-		return;
-	}
-
-	error("loadAbs: Cannot determine type for '%s'", resourceName);
-}
-
 /*! \brief Load animDataTable from save
  * \param fHandle Savefile open for reading
  * \param saveGameFormat The used savegame format

Modified: scummvm/trunk/engines/cine/anim.h
===================================================================
--- scummvm/trunk/engines/cine/anim.h	2008-08-02 15:15:32 UTC (rev 33528)
+++ scummvm/trunk/engines/cine/anim.h	2008-08-02 15:47:25 UTC (rev 33529)
@@ -154,8 +154,7 @@
 
 void freeAnimDataTable(void);
 void freeAnimDataRange(byte startIdx, byte numIdx);
-void loadResource(const char *resourceName);
-void loadAbs(const char *resourceName, uint16 idx);
+int loadResource(const char *resourceName, int16 idx = -1);
 void loadResourcesFromSave(Common::SeekableReadStream &fHandle, enum CineSaveGameFormat saveGameFormat);
 void generateMask(const byte *sprite, byte *mask, uint16 size, byte transparency);
 

Modified: scummvm/trunk/engines/cine/script_os.cpp
===================================================================
--- scummvm/trunk/engines/cine/script_os.cpp	2008-08-02 15:15:32 UTC (rev 33528)
+++ scummvm/trunk/engines/cine/script_os.cpp	2008-08-02 15:47:25 UTC (rev 33529)
@@ -636,7 +636,7 @@
 	const char *param2 = getNextString();
 
 	debugC(5, kCineDebugScript, "Line: %d: loadABS(%d,%s)", _line, param1, param2);
-	loadAbs(param2, param1);
+	loadResource(param2, param1);
 	return 0;
 }
 


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