[Scummvm-cvs-logs] SF.net SVN: scummvm:[40587] scummvm/trunk/engines/cruise/dataLoader.cpp

dreammaster at users.sourceforge.net dreammaster at users.sourceforge.net
Fri May 15 06:07:10 CEST 2009


Revision: 40587
          http://scummvm.svn.sourceforge.net/scummvm/?rev=40587&view=rev
Author:   dreammaster
Date:     2009-05-15 04:07:10 +0000 (Fri, 15 May 2009)

Log Message:
-----------
Bugfix for loadSetEntry to ensure graphics get allocated enough space. It's not exactly the way the original did it, but should suffice to ensure grahpics have sufficient space

Modified Paths:
--------------
    scummvm/trunk/engines/cruise/dataLoader.cpp

Modified: scummvm/trunk/engines/cruise/dataLoader.cpp
===================================================================
--- scummvm/trunk/engines/cruise/dataLoader.cpp	2009-05-15 03:52:30 UTC (rev 40586)
+++ scummvm/trunk/engines/cruise/dataLoader.cpp	2009-05-15 04:07:10 UTC (rev 40587)
@@ -135,23 +135,23 @@
 	pCurrentFileEntry->subData.ptr = buffer;
 }
 
-int updateResFileEntry(int height, int width, int entryNumber, int resType) {
+int updateResFileEntry(int height, int width, int size, int entryNumber, int resType) {
 	int div = 0;
 
 	resetFileEntry(entryNumber);
 
 	filesDatabase[entryNumber].subData.compression = 0;
 
-	int maskSize = height * width;	// for sprites: width * height
+	int maskSize = size;
 
 	if (resType == 4) {
 		div = maskSize / 4;
 	} else if (resType == 5) {
 		width = (width * 8) / 5;
-		maskSize = height * width;
+		maskSize = MAX(size, height * width);
 	}
 
-	filesDatabase[entryNumber].subData.ptr = (uint8 *) mallocAndZero(maskSize + div);
+	filesDatabase[entryNumber].subData.ptr = (uint8 *)mallocAndZero(maskSize + div);
 
 	if (!filesDatabase[entryNumber].subData.ptr)
 		return (-2);
@@ -166,11 +166,10 @@
 	return entryNumber;
 }
 
-int createResFileEntry(int width, int height, int resType) {
+int createResFileEntry(int width, int height, int size, int resType) {
 	int i;
 	int entryNumber;
 	int div = 0;
-	int size;
 
 	printf("Executing untested createResFileEntry!\n");
 	exit(1);
@@ -188,8 +187,6 @@
 
 	filesDatabase[entryNumber].subData.compression = 0;
 
-	size = width * height;	// for sprites: width * height
-
 	if (resType == 4) {
 		div = size / 4;
 	} else if (resType == 5) {
@@ -360,9 +357,9 @@
 	flipLong(&loadFileVar1);
 
 	if (destIdx == -1) {
-		fileIndex = createResFileEntry(loadFileVar1, 1, 1);
+		fileIndex = createResFileEntry(loadFileVar1, 1, loadFileVar1, 1);
 	} else {
-		fileIndex = updateResFileEntry(loadFileVar1, 1, destIdx, 1);
+		fileIndex = updateResFileEntry(loadFileVar1, 1, loadFileVar1, destIdx, 1);
 	}
 
 	destPtr = filesDatabase[fileIndex].subData.ptr;
@@ -439,9 +436,9 @@
 			localBuffer.width -= 10;
 
 		if (currentDestEntry == -1) {
-			fileIndex = createResFileEntry(localBuffer.width, localBuffer.height, localBuffer.type);
+			fileIndex = createResFileEntry(localBuffer.width, localBuffer.height, resourceSize, localBuffer.type);
 		} else {
-			fileIndex = updateResFileEntry(localBuffer.height, localBuffer.width, currentDestEntry, localBuffer.type);
+			fileIndex = updateResFileEntry(localBuffer.height, localBuffer.width, resourceSize, currentDestEntry, localBuffer.type);
 		}
 
 		if (fileIndex < 0) {
@@ -458,6 +455,7 @@
 		ptr5 = ptr3 + localBuffer.offset + numIdx * 16;
 
 		memcpy(filesDatabase[fileIndex].subData.ptr, ptr5, resourceSize);
+
 		ptr5 += resourceSize;
 
 		switch (localBuffer.type) {


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