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

sev at users.sourceforge.net sev at users.sourceforge.net
Sun Sep 21 12:23:23 CEST 2008


Revision: 34622
          http://scummvm.svn.sourceforge.net/scummvm/?rev=34622&view=rev
Author:   sev
Date:     2008-09-21 10:23:22 +0000 (Sun, 21 Sep 2008)

Log Message:
-----------
Patch #2054467: CRUISE: 64bits fixes

Modified Paths:
--------------
    scummvm/trunk/engines/cruise/cruise_main.cpp
    scummvm/trunk/engines/cruise/ctp.cpp
    scummvm/trunk/engines/cruise/dataLoader.cpp
    scummvm/trunk/engines/cruise/overlay.cpp
    scummvm/trunk/engines/cruise/overlay.h
    scummvm/trunk/engines/cruise/saveload.cpp
    scummvm/trunk/engines/cruise/vars.h

Modified: scummvm/trunk/engines/cruise/cruise_main.cpp
===================================================================
--- scummvm/trunk/engines/cruise/cruise_main.cpp	2008-09-20 16:47:31 UTC (rev 34621)
+++ scummvm/trunk/engines/cruise/cruise_main.cpp	2008-09-21 10:23:22 UTC (rev 34622)
@@ -243,7 +243,7 @@
 		return NULL;
 	}
 
-	return ((ovlData3Struct *) (ovlData->ptr1 + param * 0x1C));
+	return &ovlData->ptr1[param];
 }
 
 void scriptFunc2(int scriptNumber, scriptInstanceStruct * scriptHandle,

Modified: scummvm/trunk/engines/cruise/ctp.cpp
===================================================================
--- scummvm/trunk/engines/cruise/ctp.cpp	2008-09-20 16:47:31 UTC (rev 34621)
+++ scummvm/trunk/engines/cruise/ctp.cpp	2008-09-21 10:23:22 UTC (rev 34622)
@@ -153,8 +153,8 @@
 	int16* a2;
 
 	a1 = a2 = (int16*)str;
-	a2 += 4+sizeof(int16*); // skip header
-
+	a2 += sizeof(int16*) / sizeof(int16) + 6; // skip header
+	
 	int16* XArray = XMIN_XMAX;
 	int minY = *XArray++;
 
@@ -178,8 +178,8 @@
 
 	adrStructPoly = (uint8*)a2;
 
-	*(uint16**)a2 = (uint16*)-1;
-
+	*(uint16**)a2 = (uint16*)-1; //chained list terminator
+	
 	a1+=sizeof(int16*);
 	*a1++=num;
 	*a1++=walkboxColor[num];
@@ -339,20 +339,20 @@
 		makeCtStruct(adrStructPoly, ctp_walkboxTable, i, 0 );
 	}
 
-	polyStructExp = adrStructPoly += 4;
+	polyStructExp = adrStructPoly += sizeof(int16 *);
 
 	for(int i= numberOfWalkboxes-1; i >=0; i--) {
 		makeCtStruct(adrStructPoly, ctp_walkboxTable, i, walkboxZoom[i] * 20 );
 	}
 
-	int ctSize = (adrStructPoly - ptr) + 4; // for now, the +4 is a safe zone
+	int ctSize = (adrStructPoly - ptr) + sizeof(int16 *); // for now, the +sizeof(int16 *) is a safe zone
 	adrStructPoly = polyStructNorm = polyStruct = (uint8 *) malloc(ctSize);
 
 	for(int i= numberOfWalkboxes-1; i >=0; i--) {
 		makeCtStruct(adrStructPoly, ctp_walkboxTable, i, 0);
 	}
 
-	polyStructExp = adrStructPoly += 4;
+	polyStructExp = adrStructPoly += sizeof(int16 *);
 
 	for(int i= numberOfWalkboxes-1; i >=0; i--) {
 		makeCtStruct(adrStructPoly, ctp_walkboxTable, i, walkboxZoom[i] * 20);

Modified: scummvm/trunk/engines/cruise/dataLoader.cpp
===================================================================
--- scummvm/trunk/engines/cruise/dataLoader.cpp	2008-09-20 16:47:31 UTC (rev 34621)
+++ scummvm/trunk/engines/cruise/dataLoader.cpp	2008-09-21 10:23:22 UTC (rev 34622)
@@ -24,6 +24,7 @@
  */
 
 #include "cruise/cruise_main.h"
+#include "common/endian.h"
 
 namespace Cruise {
 
@@ -412,7 +413,6 @@
 }
 
 int loadSetEntry(const char *name, uint8 *ptr, int currentEntryIdx, int currentDestEntry) {
-	uint8 *ptr2;
 	uint8 *ptr3;
 	int offset;
 	int sec = 0;
@@ -422,29 +422,28 @@
 		sec = 1;
 	}
 
-	ptr2 = ptr + 4;
+	numIdx = READ_BE_UINT16(ptr + 4);
 
-	memcpy(&numIdx, ptr2, 2);
-	flipShort(&numIdx);
-
 	ptr3 = ptr + 6;
 
 	offset = currentEntryIdx * 16;
 
 	{
-		uint8 *ptr4;
 		int resourceSize;
 		int fileIndex;
 		setHeaderEntry localBuffer;
 		uint8 *ptr5;
 
-		ptr4 = ptr + offset + 6;
+		Common::MemoryReadStream s4(ptr + offset + 6, 16);
 
-		memcpy(&localBuffer, ptr4, sizeof(setHeaderEntry));
+		localBuffer.field_0 = s4.readUint32BE();
+		localBuffer.width = s4.readUint16BE();
+		localBuffer.height = s4.readUint16BE();
+		localBuffer.type = s4.readUint16BE();
+		localBuffer.transparency = s4.readUint16BE();
+		localBuffer.field_C = s4.readUint16BE();
+		localBuffer.field_E = s4.readUint16BE();
 
-		flipLong((int32 *) & localBuffer.field_0);
-		flipGen(&localBuffer.width, 12);
-
 		if (sec == 1) {
 			localBuffer.width = localBuffer.width - (localBuffer.type * 2);	// Type 1: Width - (1*2) , Type 5: Width - (5*2)
 		}

Modified: scummvm/trunk/engines/cruise/overlay.cpp
===================================================================
--- scummvm/trunk/engines/cruise/overlay.cpp	2008-09-20 16:47:31 UTC (rev 34621)
+++ scummvm/trunk/engines/cruise/overlay.cpp	2008-09-21 10:23:22 UTC (rev 34622)
@@ -23,6 +23,8 @@
  *
  */
 
+#include "common/stream.h"
+
 #include "cruise/cruise_main.h"
 
 namespace Cruise {
@@ -50,8 +52,7 @@
 	char fileName[50];
 	int fileIdx;
 	int unpackedSize;
-	char *unpackedBuffer;
-	char *scriptPtr;
+	byte *unpackedBuffer;
 	ovlDataStruct *ovlData;
 
 	printf("Load overlay: %s\n", scriptName);
@@ -105,7 +106,7 @@
 	unpackedSize = volumePtrToFileDescriptor[fileIdx].extSize + 2;
 
 	// TODO: here, can unpack in gfx module buffer
-	unpackedBuffer = (char *)mallocAndZero(unpackedSize);
+	unpackedBuffer = (byte *)mallocAndZero(unpackedSize);
 
 	if (!unpackedBuffer) {
 		return (-2);
@@ -127,12 +128,13 @@
 
 	printf("OVL loading done...\n");
 
-	scriptPtr = unpackedBuffer;
+	Common::MemoryReadStream s(unpackedBuffer, unpackedSize);
 
 	ovlData = overlayTable[scriptIdx].ovlData;
 
-	memcpy(ovlData, scriptPtr, sizeof(ovlDataStruct));
-
+	// Skip pointers
+	s.skip(60);
+	
 	ovlData->arrayProc = NULL;
 	ovlData->ptr1 = NULL;
 	ovlData->arrayObject = NULL;
@@ -148,25 +150,23 @@
 	ovlData->arrayNameSymbGlob = NULL;
 	ovlData->data4Ptr = NULL;
 	ovlData->ptr8 = NULL;
-	ovlData->numProc = readB16(scriptPtr + 60);
-	ovlData->numRel = readB16(scriptPtr + 62);
-	ovlData->numSymbGlob = readB16(scriptPtr + 64);
-	ovlData->numRelocGlob = readB16(scriptPtr + 66);
-	ovlData->numMsgRelHeader = readB16(scriptPtr + 68);
-	ovlData->numObj = readB16(scriptPtr + 70);
-	ovlData->numStrings = readB16(scriptPtr + 72);
-	ovlData->size8 = readB16(scriptPtr + 74);
-	ovlData->size9 = readB16(scriptPtr + 76);
-	ovlData->nameExportSize = readB16(scriptPtr + 78);
-	ovlData->exportNamesSize = readB16(scriptPtr + 80);
-	ovlData->specialString2Length = readB16(scriptPtr + 82);
-	ovlData->sizeOfData4 = readB16(scriptPtr + 84);
-	ovlData->size12 = readB16(scriptPtr + 86);
-	ovlData->specialString1Length = readB16(scriptPtr + 88);
-	ovlData->scriptNumber = readB16(scriptPtr + 90);
+	ovlData->numProc = s.readUint16BE();
+	ovlData->numRel = s.readUint16BE();
+	ovlData->numSymbGlob = s.readUint16BE();
+	ovlData->numRelocGlob = s.readUint16BE();
+	ovlData->numMsgRelHeader = s.readUint16BE();
+	ovlData->numObj = s.readUint16BE();
+	ovlData->numStrings = s.readUint16BE();
+	ovlData->size8 = s.readUint16BE();
+	ovlData->size9 = s.readUint16BE();
+	ovlData->nameExportSize = s.readUint16BE();
+	ovlData->exportNamesSize = s.readUint16BE();
+	ovlData->specialString2Length = s.readUint16BE();
+	ovlData->sizeOfData4 = s.readUint16BE();
+	ovlData->size12 = s.readUint16BE();
+	ovlData->specialString1Length = s.readUint16BE();
+	ovlData->scriptNumber = s.readUint16BE();
 
-	scriptPtr += 92;
-
 	if (ovlData->numSymbGlob)	{ // export data
 		int i;
 		ovlData->arraySymbGlob =
@@ -177,13 +177,11 @@
 		}
 
 		for (i = 0; i < ovlData->numSymbGlob; i++) {
-			ovlData->arraySymbGlob[i].var0 = readB16(scriptPtr);
-			ovlData->arraySymbGlob[i].var2 = readB16(scriptPtr + 2);
-			ovlData->arraySymbGlob[i].var4 = readB16(scriptPtr + 4);
-			ovlData->arraySymbGlob[i].idx = readB16(scriptPtr + 6);
-			ovlData->arraySymbGlob[i].offsetToName = readB16(scriptPtr + 8);
-
-			scriptPtr += 10;
+			ovlData->arraySymbGlob[i].var0 = s.readUint16BE();
+			ovlData->arraySymbGlob[i].var2 = s.readUint16BE();
+			ovlData->arraySymbGlob[i].var4 = s.readUint16BE();
+			ovlData->arraySymbGlob[i].idx = s.readUint16BE();
+			ovlData->arraySymbGlob[i].offsetToName = s.readUint16BE();
 		}
 	}
 
@@ -194,8 +192,7 @@
 			return (-2);
 		}
 
-		memcpy(ovlData->arrayNameSymbGlob, scriptPtr, ovlData->exportNamesSize);
-		scriptPtr += ovlData->exportNamesSize;
+		s.read(ovlData->arrayNameSymbGlob, ovlData->exportNamesSize);
 	}
 
 	if (ovlData->numRelocGlob) {	// import data
@@ -210,13 +207,11 @@
 		}
 
 		for (i = 0; i < ovlData->numRelocGlob; i++) {
-			ovlData->arrayRelocGlob[i].var0 = readB16(scriptPtr);
-			ovlData->arrayRelocGlob[i].var1 = readB16(scriptPtr + 2);
-			ovlData->arrayRelocGlob[i].linkType = readB16(scriptPtr + 4);
-			ovlData->arrayRelocGlob[i].linkIdx = readB16(scriptPtr + 6);
-			ovlData->arrayRelocGlob[i].nameOffset = readB16(scriptPtr + 8);
-
-			scriptPtr += 10;
+			ovlData->arrayRelocGlob[i].var0 = s.readUint16BE();
+			ovlData->arrayRelocGlob[i].var1 = s.readUint16BE();
+			ovlData->arrayRelocGlob[i].linkType = s.readUint16BE();
+			ovlData->arrayRelocGlob[i].linkIdx = s.readUint16BE();
+			ovlData->arrayRelocGlob[i].nameOffset = s.readUint16BE();
 		}
 	}
 
@@ -226,13 +221,12 @@
 		if (!ovlData->arrayNameRelocGlob) {
 			return (-2);
 		}
-
-		memcpy(ovlData->arrayNameRelocGlob, scriptPtr,
-		    ovlData->nameExportSize);
-		scriptPtr += ovlData->nameExportSize;
+		
+		s.read(ovlData->arrayNameRelocGlob, ovlData->nameExportSize);
 	}
 
 	if (ovlData->numMsgRelHeader) {	// link data
+		int i;
 		ASSERT(sizeof(linkDataStruct) == 0x22);
 
 		ovlData->arrayMsgRelHeader = (linkDataStruct *) mallocAndZero(ovlData->numMsgRelHeader * sizeof(linkDataStruct));
@@ -241,9 +235,30 @@
 			return (-2);
 		}
 
-		memcpy(ovlData->arrayMsgRelHeader, scriptPtr, ovlData->numMsgRelHeader * sizeof(linkDataStruct));
-		scriptPtr += ovlData->numMsgRelHeader * sizeof(linkDataStruct);
-		flipGen(ovlData->arrayMsgRelHeader, ovlData->numMsgRelHeader * sizeof(linkDataStruct));
+		for (i = 0; i < ovlData->numMsgRelHeader; i++) {
+			ovlData->arrayMsgRelHeader[i].type = s.readUint16BE();
+			ovlData->arrayMsgRelHeader[i].id = s.readUint16BE();
+			ovlData->arrayMsgRelHeader[i].offsetVerbeName = s.readUint16BE();
+			ovlData->arrayMsgRelHeader[i].verbOverlay = s.readUint16BE();
+			ovlData->arrayMsgRelHeader[i].verbNumber = s.readUint16BE();
+
+			ovlData->arrayMsgRelHeader[i].obj1Overlay = s.readUint16BE();
+			ovlData->arrayMsgRelHeader[i].obj1Number = s.readUint16BE();
+			ovlData->arrayMsgRelHeader[i].obj2Overlay = s.readUint16BE();
+			ovlData->arrayMsgRelHeader[i].obj2Number = s.readUint16BE();
+
+			ovlData->arrayMsgRelHeader[i].trackX = s.readUint16BE();
+			ovlData->arrayMsgRelHeader[i].trackY = s.readUint16BE();
+
+			ovlData->arrayMsgRelHeader[i].obj1NewState = s.readUint16BE();
+			ovlData->arrayMsgRelHeader[i].obj2NewState = s.readUint16BE();
+
+			ovlData->arrayMsgRelHeader[i].obj1OldState = s.readUint16BE();
+			ovlData->arrayMsgRelHeader[i].obj2OldState = s.readUint16BE();
+
+			ovlData->arrayMsgRelHeader[i].trackDirection = s.readUint16BE();
+			ovlData->arrayMsgRelHeader[i].dialog = s.readUint16BE();
+		}
 	}
 
 	if (ovlData->numProc) {	// script
@@ -251,53 +266,47 @@
 		int i;
 
 		ovlData->arrayProc =
-		    (ovlData3Struct *) mallocAndZero(ovlData->numProc *
-		    sizeof(ovlData3Struct));
+		    (ovlData3Struct *) mallocAndZero(ovlData->numProc * sizeof(ovlData3Struct));
 
 		if (!ovlData->arrayProc) {
-/*      releaseScript(scriptIdx,scriptName);
-
-      if (freeIsNeeded) {
-        freePtr(unpackedBuffer);
-      } */
-
 			return (-2);
 		}
 
-		memcpy(ovlData->arrayProc, scriptPtr,
-		    ovlData->numProc * sizeof(ovlData3Struct));
-		scriptPtr += ovlData->numProc * 0x1C;
+		for (i = 0; i < ovlData->numProc; i++) {
+			s.skip(4);
+			ovlData->arrayProc[i].dataPtr = NULL;
+			ovlData->arrayProc[i].sizeOfData = s.readUint16BE();
+			ovlData->arrayProc[i].offsetToSubData3 = s.readUint16BE();
+			ovlData->arrayProc[i].offsetToImportData = s.readUint16BE();
+			ovlData->arrayProc[i].offsetToSubData2 = s.readUint16BE();
+			ovlData->arrayProc[i].offsetToImportName = s.readUint16BE();
+			ovlData->arrayProc[i].offsetToSubData5 = s.readUint16BE();
+			ovlData->arrayProc[i].sysKey = s.readUint16BE();
+			ovlData->arrayProc[i].var12 = s.readUint16BE();
+			ovlData->arrayProc[i].numRelocGlob = s.readUint16BE();
+			ovlData->arrayProc[i].subData2Size = s.readUint16BE();
+			ovlData->arrayProc[i].var18 = s.readUint16BE();
+			ovlData->arrayProc[i].var1A = s.readUint16BE();
+		}
 
-		flipGen(ovlData->arrayProc,
-		    ovlData->numProc * sizeof(ovlData3Struct));
-
 		tempPtr = ovlData->arrayProc;
 
 		for (i = 0; i < ovlData->numProc; i++) {
-			uint8 *ptr = tempPtr->dataPtr =
-			    (uint8 *) mallocAndZero(tempPtr->sizeOfData);
+			tempPtr->dataPtr = (uint8 *) mallocAndZero(tempPtr->sizeOfData);
 
-			if (!ptr) {
-				/*      releaseScript(scriptIdx,scriptName);
-				 *
-				 * if (freeIsNeeded)
-				 * {
-				 * freePtr(unpackedBuffer);
-				 * } */
-
+			if (!tempPtr->dataPtr) {
 				return (-2);
 			}
 
-			memcpy(ptr, scriptPtr, tempPtr->sizeOfData);
-			scriptPtr += tempPtr->sizeOfData;
+			s.read(tempPtr->dataPtr, tempPtr->sizeOfData);
 
 			if (tempPtr->offsetToImportData) {
-				flipGen(ptr + tempPtr->offsetToImportData,
+				flipGen(tempPtr->dataPtr + tempPtr->offsetToImportData,
 				    tempPtr->numRelocGlob * 10);
 			}
 
 			if (tempPtr->offsetToSubData2) {
-				flipGen(ptr + tempPtr->offsetToImportData,
+				flipGen(tempPtr->dataPtr + tempPtr->offsetToSubData2,
 				    tempPtr->subData2Size * 10);
 			}
 
@@ -310,43 +319,47 @@
 		int i;
 
 		ovlData->ptr1 =
-		    (uint8 *) mallocAndZero(ovlData->numRel * 0x1C);
+		    (ovlData3Struct *) mallocAndZero(ovlData->numRel * sizeof(ovlData3Struct));
 
 		if (!ovlData->ptr1) {
 			return (-2);
 		}
 
-		memcpy(ovlData->ptr1, scriptPtr, ovlData->numRel * 0x1C);
-		scriptPtr += ovlData->numRel * 0x1C;
-		flipGen(ovlData->ptr1, ovlData->numRel * 0x1C);
-
+		for (i = 0; i < ovlData->numRel; i++) {
+			s.skip(4);
+			ovlData->ptr1[i].dataPtr = NULL;
+			ovlData->ptr1[i].sizeOfData = s.readUint16BE();
+			ovlData->ptr1[i].offsetToSubData3 = s.readUint16BE();
+			ovlData->ptr1[i].offsetToImportData = s.readUint16BE();
+			ovlData->ptr1[i].offsetToSubData2 = s.readUint16BE();
+			ovlData->ptr1[i].offsetToImportName = s.readUint16BE();
+			ovlData->ptr1[i].offsetToSubData5 = s.readUint16BE();
+			ovlData->ptr1[i].sysKey = s.readUint16BE();
+			ovlData->ptr1[i].var12 = s.readUint16BE();
+			ovlData->ptr1[i].numRelocGlob = s.readUint16BE();
+			ovlData->ptr1[i].subData2Size = s.readUint16BE();
+			ovlData->ptr1[i].var18 = s.readUint16BE();
+			ovlData->ptr1[i].var1A = s.readUint16BE();
+		}
+		
 		tempPtr = (ovlData3Struct *) ovlData->ptr1;
 
 		for (i = 0; i < ovlData->numRel; i++) {
-			uint8 *ptr = tempPtr->dataPtr =
-			    (uint8 *) mallocAndZero(tempPtr->sizeOfData);
+			tempPtr->dataPtr = (uint8 *) mallocAndZero(tempPtr->sizeOfData);
 
-			if (!ptr) {
-				/*      releaseScript(scriptIdx,scriptName);
-				 *
-				 * if (freeIsNeeded)
-				 * {
-				 * freePtr(unpackedBuffer);
-				 * } */
-
+			if (!tempPtr->dataPtr) {
 				return (-2);
 			}
 
-			memcpy(ptr, scriptPtr, tempPtr->sizeOfData);
-			scriptPtr += tempPtr->sizeOfData;
+			s.read(tempPtr->dataPtr, tempPtr->sizeOfData);
 
 			if (tempPtr->offsetToImportData) {
-				flipGen(ptr + tempPtr->offsetToImportData,
+				flipGen(tempPtr->dataPtr + tempPtr->offsetToImportData,
 				    tempPtr->numRelocGlob * 10);
 			}
 
 			if (tempPtr->offsetToSubData2) {
-				flipGen(ptr + tempPtr->offsetToImportData,
+				flipGen(tempPtr->dataPtr + tempPtr->offsetToSubData2,
 				    tempPtr->subData2Size * 10);
 			}
 
@@ -367,8 +380,7 @@
 			return (-2);
 		}
 
-		memcpy(ovlData->ptr8, scriptPtr, ovlData->size12);
-		scriptPtr += ovlData->size12;
+		s.read(ovlData->ptr8, ovlData->size12);
 	}
 
 	if (ovlData->numObj) {
@@ -378,47 +390,20 @@
 		    sizeof(objDataStruct));
 
 		if (!ovlData->arrayObject) {
-/*      releaseScript(scriptIdx,scriptName);
-
-      if (freeIsNeeded) {
-        freePtr(unpackedBuffer);
-      } */
-
 			return (-2);
 		}
 
 		for (i = 0; i < ovlData->numObj; i++) {
-			ovlData->arrayObject[i]._type = *(int16 *) scriptPtr;
-			scriptPtr += 2;
-			flipShort(&ovlData->arrayObject[i]._type);
-
-			int16 tempClass = *(int16 *) scriptPtr;
-			flipShort(&tempClass);
-			ovlData->arrayObject[i]._class = (eClass)tempClass;
-			scriptPtr += 2;
-
-			ovlData->arrayObject[i]._nameOffset = *(int16 *) scriptPtr;
-			scriptPtr += 2;
-			flipShort(&ovlData->arrayObject[i]._nameOffset);
-
-			ovlData->arrayObject[i]._numStates = *(int16 *) scriptPtr;
-			scriptPtr += 2;
-			flipShort(&ovlData->arrayObject[i]._numStates);
-
-			ovlData->arrayObject[i]._varTableIdx = *(int16 *) scriptPtr;
-			scriptPtr += 2;
-			flipShort(&ovlData->arrayObject[i]._varTableIdx);
-
-			ovlData->arrayObject[i]._firstStateIdx = *(int16 *) scriptPtr;
-			scriptPtr += 2;
-			flipShort(&ovlData->arrayObject[i]._firstStateIdx);
-
-			ovlData->arrayObject[i]._stateTableIdx = *(int16 *) scriptPtr;
-			scriptPtr += 2;
-			flipShort(&ovlData->arrayObject[i]._stateTableIdx);
+			ovlData->arrayObject[i]._type = s.readUint16BE();
+			ovlData->arrayObject[i]._class = (eClass) s.readUint16BE();
+			ovlData->arrayObject[i]._nameOffset = s.readUint16BE();
+			ovlData->arrayObject[i]._numStates = s.readUint16BE();
+			ovlData->arrayObject[i]._varTableIdx = s.readUint16BE();
+			ovlData->arrayObject[i]._firstStateIdx = s.readUint16BE();
+			ovlData->arrayObject[i]._stateTableIdx = s.readUint16BE();	
 		}
 
-		// allocte states for object with multiple states
+		// allocate states for object with multiple states
 
 		if (scriptNotLoadedBefore) {
 			overlayTable[scriptIdx].state = stateID;
@@ -430,38 +415,30 @@
 		ovlData->arrayObjVar =
 		    (objectParams *) mallocAndZero(ovlData->size9 *
 		    sizeof(objectParams));
-		memset(ovlData->arrayObjVar, 0,
-		    ovlData->size9 * sizeof(objectParams));
 
 		if (!ovlData->arrayObjVar) {
-/*      releaseScript(scriptIdx,scriptName);
-
-      if (freeIsNeeded) {
-        freePtr(unpackedBuffer);
-      } */
-
 			return (-2);
 		}
 	}
 
 	if (ovlData->size8) {
+		int i;
 		ovlData->arrayStates =
 		    (objectParams *) mallocAndZero(ovlData->size8 *
 		    sizeof(objectParams));
 
 		if (!ovlData->arrayStates) {
-/*      releaseScript(scriptIdx,scriptName);
-
-      if (freeIsNeeded) {
-        freePtr(unpackedBuffer);
-      } */
-
 			return (-2);
 		}
 
-		memcpy(ovlData->arrayStates, scriptPtr, ovlData->size8 * 12);	// TODO: made read item by item
-		scriptPtr += ovlData->size8 * 12;
-		flipGen(ovlData->arrayStates, ovlData->size8 * 12);
+		for (i = 0; i < ovlData->size8; i++) {
+			ovlData->arrayStates[i].X = s.readUint16BE();
+			ovlData->arrayStates[i].Y = s.readUint16BE();
+			ovlData->arrayStates[i].Z = s.readUint16BE();
+			ovlData->arrayStates[i].frame = s.readUint16BE();
+			ovlData->arrayStates[i].scale = s.readUint16BE();
+			ovlData->arrayStates[i].state = s.readUint16BE();
+		}
 	}
 
 	if (ovlData->numStrings) {
@@ -472,23 +449,15 @@
 		    sizeof(stringEntryStruct));
 
 		for (i = 0; i < ovlData->numStrings; i++) {
-			ovlData->stringTable[i].idx = *(int16 *) scriptPtr;
-			flipShort(&ovlData->stringTable[i].idx);
-			scriptPtr += 2;
+			ovlData->stringTable[i].idx = s.readUint16BE();
 		}
 	}
 
-/*  if (freeIsNeeded) {
-    freePtr(unpackedBuffer);
-  } */
-
 	if (ovlData->sizeOfData4) {
 		ovlData->data4Ptr =
 		    (uint8 *) mallocAndZero(ovlData->sizeOfData4);
-		memset(ovlData->data4Ptr, 0, ovlData->sizeOfData4);
 
 		if (!ovlData->data4Ptr) {
-			//releaseScript(scriptIdx,scriptName);
 			return (-2);
 		}
 	}
@@ -516,7 +485,7 @@
 		unpackedSize = volumePtrToFileDescriptor[fileIdx].extSize + 2;
 
 		// TODO: here, can unpack in gfx module buffer
-		unpackedBuffer = (char *)mallocAndZero(unpackedSize);
+		unpackedBuffer = (byte *)mallocAndZero(unpackedSize);
 
 		if (!unpackedBuffer) {
 			return (-2);
@@ -538,12 +507,9 @@
 			loadPakedFileToMem(fileIdx, (uint8 *) unpackedBuffer);
 		}
 
-		scriptPtr = unpackedBuffer;
+		Common::MemoryReadStream s2(unpackedBuffer, unpackedSize);
 
-		memcpy(&ovlData->specialString1Length, scriptPtr, 2);
-		scriptPtr += 2;
-		flipShort(&ovlData->specialString1Length);	// recheck if needed
-
+		ovlData->specialString1Length = s2.readUint16BE();
 		if (ovlData->specialString1Length) {
 			ovlData->nameVerbGlob = (char *) mallocAndZero(ovlData->specialString1Length);
 
@@ -558,15 +524,10 @@
 				return (-2);
 			}
 
-			memcpy(ovlData->nameVerbGlob, scriptPtr,
-			    ovlData->specialString1Length);
-			scriptPtr += ovlData->specialString1Length;
+			s2.read(ovlData->nameVerbGlob, ovlData->specialString1Length);
 		}
 
-		memcpy(&ovlData->specialString2Length, scriptPtr, 2);
-		scriptPtr += 2;
-		flipShort(&ovlData->specialString2Length);	// recheck if needed
-
+		ovlData->specialString2Length = s2.readUint16BE();
 		if (ovlData->specialString2Length) {
 			ovlData->arrayNameObj = (char *) mallocAndZero(ovlData->specialString2Length);
 
@@ -581,15 +542,11 @@
 				return (-2);
 			}
 
-			memcpy(ovlData->arrayNameObj, scriptPtr,
-			    ovlData->specialString2Length);
-			scriptPtr += ovlData->specialString2Length;
+			s2.read(ovlData->arrayNameObj, ovlData->specialString2Length);
 		}
 
 		for (i = 0; i < ovlData->numStrings; i++) {
-			ovlData->stringTable[i].length = *(int16 *) scriptPtr;
-			scriptPtr += 2;
-			flipShort(&ovlData->stringTable[i].length);
+			ovlData->stringTable[i].length = s2.readUint16BE();
 
 			if (ovlData->stringTable[i].length) {
 				ovlData->stringTable[i].string =
@@ -607,8 +564,7 @@
 					return (-2);
 				}
 
-				memcpy(ovlData->stringTable[i].string, scriptPtr, ovlData->stringTable[i].length);
-				scriptPtr += ovlData->stringTable[i].length;
+				s2.read(ovlData->stringTable[i].string, ovlData->stringTable[i].length);
 			}
 		}
 	}

Modified: scummvm/trunk/engines/cruise/overlay.h
===================================================================
--- scummvm/trunk/engines/cruise/overlay.h	2008-09-20 16:47:31 UTC (rev 34621)
+++ scummvm/trunk/engines/cruise/overlay.h	2008-09-21 10:23:22 UTC (rev 34622)
@@ -129,7 +129,7 @@
 struct ovlDataStruct {
 
 	ovlData3Struct *arrayProc;
-	uint8 *ptr1;
+	ovlData3Struct *ptr1;
 	objDataStruct *arrayObject;
 	objectParams *arrayStates;
 	objectParams *arrayObjVar;

Modified: scummvm/trunk/engines/cruise/saveload.cpp
===================================================================
--- scummvm/trunk/engines/cruise/saveload.cpp	2008-09-20 16:47:31 UTC (rev 34621)
+++ scummvm/trunk/engines/cruise/saveload.cpp	2008-09-21 10:23:22 UTC (rev 34622)
@@ -465,8 +465,7 @@
 void loadSavegameDataSub6(Common::InSaveFile& currentSaveFile) {
 	int32 var;
 
-	var = currentSaveFile.readUint32LE();
-	flipLong(&var);
+	var = currentSaveFile.readUint32BE();
 
 	if (var) {
 		int i;

Modified: scummvm/trunk/engines/cruise/vars.h
===================================================================
--- scummvm/trunk/engines/cruise/vars.h	2008-09-20 16:47:31 UTC (rev 34621)
+++ scummvm/trunk/engines/cruise/vars.h	2008-09-21 10:23:22 UTC (rev 34622)
@@ -91,8 +91,7 @@
 };
 
 struct setHeaderEntry {
-	int16 field_0;		// offset ptr part 1
-	int16 field_2;		// offset ptr part 2
+	int32 field_0;		// offset ptr
 	int16 width;
 	int16 height;
 	int16 type;		// resource type, ie. sprites 0,1,4,5 and 8


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