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

yazoo at users.sourceforge.net yazoo at users.sourceforge.net
Thu Dec 27 13:05:43 CET 2007


Revision: 30012
          http://scummvm.svn.sourceforge.net/scummvm/?rev=30012&view=rev
Author:   yazoo
Date:     2007-12-27 04:05:43 -0800 (Thu, 27 Dec 2007)

Log Message:
-----------
Early pathfinding

Modified Paths:
--------------
    scummvm/trunk/engines/cruise/actor.cpp
    scummvm/trunk/engines/cruise/cruise.cpp
    scummvm/trunk/engines/cruise/cruise_main.cpp
    scummvm/trunk/engines/cruise/cruise_main.h
    scummvm/trunk/engines/cruise/ctp.cpp
    scummvm/trunk/engines/cruise/ctp.h
    scummvm/trunk/engines/cruise/font.cpp
    scummvm/trunk/engines/cruise/function.cpp
    scummvm/trunk/engines/cruise/gfxModule.cpp
    scummvm/trunk/engines/cruise/mainDraw.cpp
    scummvm/trunk/engines/cruise/saveload.cpp
    scummvm/trunk/engines/cruise/vars.cpp
    scummvm/trunk/engines/cruise/vars.h

Modified: scummvm/trunk/engines/cruise/actor.cpp
===================================================================
--- scummvm/trunk/engines/cruise/actor.cpp	2007-12-27 11:40:29 UTC (rev 30011)
+++ scummvm/trunk/engines/cruise/actor.cpp	2007-12-27 12:05:43 UTC (rev 30012)
@@ -68,40 +68,35 @@
 void getPixel(int x, int y) {
 	int x_min, x_max, y_min, y_max;
 
-	ctpVar19Struct *polygone;
-	ctpVar19SubStruct *tableau;
+	int16* polygone = (int16*)polyStruct0;
+	int16* next;
 
-	polygone = ctpVar19;	/* adr structure polygone */
+	while ((next = *(int16**)polygone) != (int16 *) -1) {
+		polygone+=sizeof(uint16*);
 
-	while (polygone->field_0 != (ctpVar19Struct *) - 1) {
-		tableau = &polygone->subStruct;
+		int16* tableau = polygone+2;
 
-		x_min = tableau->minX;
-		x_max = tableau->maxX;
-		y_min = tableau->minY;
-		y_max = tableau->maxY;
+		x_min = *tableau++;
+		x_max = *tableau++;
+		y_min = *tableau++;
+		y_max = *tableau++;
 
-		computedVar14 = tableau->boxIdx;	/* numero polygone      */
+		computedVar14 = *polygone++;
 
-		if (walkboxChange[computedVar14] == 0 && ((x >= x_min
-			    && x <= x_max) && (y >= y_min && y <= y_max))) {
+		if (walkboxState[computedVar14] == 0 && ((x >= x_min && x <= x_max) && (y >= y_min && y <= y_max))) {
 			// click was in given box
-			/*  u = y-y_min;
-			 * 
-			 * //tableau+=u;
-			 * tableau = &polygone[u].subStruct;
-			 * 
-			 * x_min = tableau->minX;
-			 * x_max = tableau->maxX;
-			 * 
-			 * if ( (x>=x_min && x<=x_max) ) */
-			{
-				flag_obstacle = walkboxType[computedVar14];	/* sa couleur */
+			int u = y-y_min;
+			tableau+=u*2;
+			x_min = *tableau++;
+			x_max = *tableau++;
+			
+			if ( (x>=x_min && x<=x_max) ) {
+				flag_obstacle = walkboxColor[computedVar14];
 
 				return;
 			}
 		}
-		polygone = polygone->field_0;
+		polygone = next;
 	}
 
 	flag_obstacle = 0;
@@ -306,7 +301,7 @@
 	int x1, y1, i, x, y, p;
 	int d1 = 1000;
 
-	ctpVar19 = ctpVar11;
+	polyStruct0 = polyStructNorm;
 
 	if (nclick_noeud == 1) {
 		x = x_mouse;
@@ -314,19 +309,19 @@
 		x1 = table_ptselect[0][0];
 		y1 = table_ptselect[0][1];
 
-		ctpVar19 = ctpVar15;
+		polyStruct0 = polyStructExp;
 
 		getPixel(x, y);
 
 		if (!flag_obstacle) {
-			ctpVar19 = ctpVar11;
+			polyStruct0 = polyStructNorm;
 
 			getPixel(x, y);
 
 			if (flag_obstacle) {
 				polydroite(x1, y1, x, y);
 			}
-			ctpVar19 = ctpVar15;
+			polyStruct0 = polyStructExp;
 		}
 		if (!flag_obstacle) {	/* dans flag_obstacle --> couleur du point */
 			x1 = table_ptselect[0][0];
@@ -338,7 +333,7 @@
 			y_mouse = Y;
 		}
 	}
-	ctpVar19 = ctpVar11;
+	polyStruct0 = polyStructNorm;
 
 	p = -1;
 	for (i = 0; i < ctp_routeCoordCount; i++) {
@@ -468,7 +463,7 @@
 	table_ptselect[*nclick][0] = x_mouse;
 	table_ptselect[*nclick][1] = y_mouse;
 	(*nclick)++;
-	ctpVar19 = ctpVar11;
+	polyStruct0 = polyStructNorm;
 
 	if (*nclick == 2) {	// second point
 		x1 = table_ptselect[0][0];
@@ -479,7 +474,7 @@
 			return;
 		}
 		flag_aff_chemin = 1;
-		ctpVar19 = ctpVar15;
+		polyStruct0 = polyStructExp;
 
 		// can we go there directly ?
 		polydroite(x1, y1, x2, y2);
@@ -489,7 +484,7 @@
 		if (!flag_obstacle) {
 			solution0[0][0] = x1;
 			solution0[0][1] = y1;
-			ctpVar19 = ctpVar15;
+			polyStruct0 = polyStructExp;
 
 			poly2(x2, y2, ctp_routeCoords[select_noeud[1]][0],
 			    ctp_routeCoords[select_noeud[1]][1]);
@@ -533,7 +528,7 @@
 					solution0[++i][1] =
 					    ctp_routeCoords[p1][1];
 				}
-				ctpVar19 = ctpVar15;
+				polyStruct0 = polyStructExp;
 				poly2(x2, y2,
 				    ctp_routeCoords[select_noeud[1]][0],
 				    ctp_routeCoords[select_noeud[1]][1]);
@@ -558,7 +553,7 @@
 					while (flag_obstacle && i != d) {
 						x2 = solution0[i][0];
 						y2 = solution0[i][1];
-						ctpVar19 = ctpVar15;
+						polyStruct0 = polyStructExp;
 						polydroite(x1, y1, x2, y2);
 						i--;
 					}
@@ -597,7 +592,7 @@
 		}
 	}
 
-	//if (!flagCt)
+	if (!flagCt)
 	{
 		int i;
 		int16 *ptr;
@@ -637,7 +632,7 @@
 	}
 
 	nclick_noeud = 0;
-	ctpVar19 = ctpVar11;
+	polyStruct0 = polyStructNorm;
 	flag_aff_chemin = 0;
 
 	if (x == destX && y == destY) {
@@ -689,12 +684,9 @@
 	y_mouse = destY;
 
 	if ((point_select = point_proche(ctp_routeCoords)) != -1)
-		valide_noeud(select_noeud, point_select, &nclick_noeud,
-		    perso->solution);
+		valide_noeud(select_noeud, point_select, &nclick_noeud, perso->solution);
 
-	if ((!flag_aff_chemin)
-	    || ((table_ptselect[0][0] == table_ptselect[1][0])
-		&& (table_ptselect[0][1] == table_ptselect[1][1]))) {
+	if ((!flag_aff_chemin) || ((table_ptselect[0][0] == table_ptselect[1][0]) && (table_ptselect[0][1] == table_ptselect[1][1]))) {
 		pSolution[0] = -1;
 		pSolution[1] = -1;
 		freePerso(num);

Modified: scummvm/trunk/engines/cruise/cruise.cpp
===================================================================
--- scummvm/trunk/engines/cruise/cruise.cpp	2007-12-27 11:40:29 UTC (rev 30011)
+++ scummvm/trunk/engines/cruise/cruise.cpp	2007-12-27 12:05:43 UTC (rev 30012)
@@ -98,8 +98,7 @@
 void CruiseEngine::initialize() {
 
 	PCFadeFlag = 0;
-	ptr_something =
-	    (ctpVar19Struct *) mallocAndZero(sizeof(ctpVar19Struct) * 0x200);
+	workBuffer = (uint8 *) mallocAndZero(8192);
 
 	/*volVar1 = 0;
 	 * fileData1 = 0; */

Modified: scummvm/trunk/engines/cruise/cruise_main.cpp
===================================================================
--- scummvm/trunk/engines/cruise/cruise_main.cpp	2007-12-27 11:40:29 UTC (rev 30011)
+++ scummvm/trunk/engines/cruise/cruise_main.cpp	2007-12-27 12:05:43 UTC (rev 30012)
@@ -1924,16 +1924,13 @@
 
 	printf("Initializing engine...\n");
 
-//  initBuffer(scaledScreen,640,400);
-
 	PCFadeFlag = 0;
 
 	//lowLevelInit();
 
 	// arg parser stuff
 
-	ptr_something =
-	    (ctpVar19Struct *) mallocAndZero(sizeof(ctpVar19Struct) * 0x200);
+	workBuffer = (uint8 *) mallocAndZero(8192);
 
 	/*volVar1 = 0;
 	 * fileData1 = 0; */
@@ -1956,7 +1953,7 @@
 
 	//freeStuff();
 
-	//freePtr(ptr_something);
+	//freePtr(workBuffer);
 
 	return (0);
 }

Modified: scummvm/trunk/engines/cruise/cruise_main.h
===================================================================
--- scummvm/trunk/engines/cruise/cruise_main.h	2007-12-27 11:40:29 UTC (rev 30011)
+++ scummvm/trunk/engines/cruise/cruise_main.h	2007-12-27 12:05:43 UTC (rev 30012)
@@ -96,7 +96,7 @@
 uint8 *mainProc14(uint16 overlay, uint16 idx);
 void printInfoBlackBox(const char *string);
 void waitForPlayerInput(void);
-int loadCtp(const char * ctpName);
+int initCt(const char * ctpName);
 void loadPakedFileToMem(int fileIdx, uint8 * buffer);
 int getNumObjectsByClass(int scriptIdx, int param);
 void resetFileEntryRange(int param1, int param2);

Modified: scummvm/trunk/engines/cruise/ctp.cpp
===================================================================
--- scummvm/trunk/engines/cruise/ctp.cpp	2007-12-27 11:40:29 UTC (rev 30011)
+++ scummvm/trunk/engines/cruise/ctp.cpp	2007-12-27 12:05:43 UTC (rev 30012)
@@ -28,14 +28,14 @@
 
 namespace Cruise {
 
-ctpVar19Struct *ptr_something;
-ctpVar19Struct *polyStruct;
-ctpVar19Struct *ctpVar11;
-ctpVar19Struct *ctpVar13;
-ctpVar19Struct *ctpVar15;
+uint8 *workBuffer;
+uint8 *polyStruct;
+uint8 *adrStructPoly;
+uint8 *polyStructNorm;
+uint8 *polyStructExp;
 
 uint8 *ctpVar17;
-ctpVar19Struct *ctpVar19;
+uint8 *polyStruct0;
 
 int currentWalkBoxCenterX;
 int currentWalkBoxCenterY;
@@ -58,7 +58,7 @@
 }
 
 // this function process path finding coordinates
-void loadCtpSub2(short int coordCount, short int *ptr) {
+void computeDistance(short int coordCount, short int *ptr) {
 // coordCount = ctp_routeCoordCount, ptr = ctpVar8
 	int i;
 	int offset = 0;
@@ -89,37 +89,27 @@
 	}
 }
 
-void getWalkBoxCenter(int boxIdx, uint16 *_walkboxTable) {
+void getWalkBoxCenter(int n, int16 table[][40]) {
 	int minX = 1000;
 	int minY = 1000;
 	int maxX = -1;
 	int maxY = -1;
 
-	ASSERT(boxIdx <= 15);	// max number of walkboxes is 16
-	ASSERT(_walkboxTable[boxIdx * 40]);	// we should never have an empty walk box
+	for(int i=0; i< table[n][0]; i++) {
+		int x = table[n][i*2+1];
+		int y = table[n][i*2+2];
 
-	if (_walkboxTable[boxIdx * 40] > 0) {
-		int numPoints = _walkboxTable[boxIdx * 40];
-		uint16 *pCurrentPtr = _walkboxTable + (boxIdx * 40) + 1;
+		if (x < minX)
+			minX = x;
 
-		int i;
+		if (x > maxX)
+			maxX = x;
 
-		for (i = 0; i < numPoints; i++) {
-			int X = *(pCurrentPtr++);
-			int Y = *(pCurrentPtr++);;
+		if (y < minY)
+			minY = y;
 
-			if (X < minX)
-				minX = X;
-
-			if (X > maxX)
-				maxX = X;
-
-			if (Y < minY)
-				minY = Y;
-
-			if (Y > maxY)
-				maxY = Y;
-		}
+		if (y > maxY)
+			maxY = y;
 	}
 
 	currentWalkBoxCenterX = ((maxX - minX) / 2) + minX;
@@ -127,16 +117,15 @@
 }
 
 // ax dx bx
-void renderCTPWalkBox(int X1, int Y1, int X2, int scale, int Y2,
-	    uint16 *walkboxData) {
+void renderCTPWalkBox(int16 *walkboxData, int hotPointX, int hotPointY, int X, int Y, int scale ) {
 	int numPoints;
 	int wbSelf1;
 	int wbSelf2;
 	int i;
 	int16 *destination;
 
-	wbSelf1 = upscaleValue(X1, scale) - X2;
-	wbSelf2 = upscaleValue(Y1, scale) - Y2;
+	wbSelf1 = upscaleValue(hotPointX, scale) - X;
+	wbSelf2 = upscaleValue(hotPointY, scale) - Y;
 
 	numPoints = *(walkboxData++);
 
@@ -149,8 +138,10 @@
 		int scaledX = upscaleValue(pointX, scale) - wbSelf1;
 		int scaledY = upscaleValue(pointY, scale) - wbSelf2;
 
-		*(destination++) = scaledX >> 16;
-		*(destination++) = scaledY >> 16;
+	/*	*(destination++) = scaledX >> 16;
+		*(destination++) = scaledY >> 16; */
+		*(destination++) = pointX;
+		*(destination++) = pointY;
 	}
 
 	m_color = 0;
@@ -164,119 +155,58 @@
 }
 
 // this process the walkboxes
-void loadCtpSub1(int boxIdx, int scale, uint16 *_walkboxTable,
-	    ctpVar19Struct *param4) {
+void makeCtStruct(uint8* str, int16 table[][40], int num, int z) {
 	int minX = 1000;
-	int minY = 1000;
 	int maxX = -1;
-	int maxY = -1;
 
-	ctpVar19Struct *var_1C;
-	ctpVar19Struct *var_12;
-//	int16 *var_18;
-//	int16 *si;
-	//  int16* di;
-	//  uint8* cx;
-	//  int bx;
-	//  int ax;
-	//  int var_2;
-//	int var_E;
-	//int var_C = 1000;
-	//int var_A = 0;
-	ctpVar19SubStruct *subStruct;
+	if(table[num][0] < 1)
+		return;
 
-	ASSERT(boxIdx <= 15);
+	getWalkBoxCenter(num, table);
 
-	if (_walkboxTable[boxIdx * 40] > 0) {	// is walkbox used ?
-		getWalkBoxCenter(boxIdx, _walkboxTable);
+	currentWalkBoxCenterXBis = currentWalkBoxCenterX;
+	currentWalkBoxCenterYBis = currentWalkBoxCenterY;
 
-		currentWalkBoxCenterYBis = currentWalkBoxCenterY;
-		currentWalkBoxCenterXBis = currentWalkBoxCenterX;
-		// + 512
-		renderCTPWalkBox(currentWalkBoxCenterX, currentWalkBoxCenterY,
-		    currentWalkBoxCenterX, scale + 0x200,
-		    currentWalkBoxCenterY, _walkboxTable + boxIdx * 40);
+	renderCTPWalkBox(&table[num][0], currentWalkBoxCenterX, currentWalkBoxCenterY,  currentWalkBoxCenterX, currentWalkBoxCenterY, z + 0x200 );
 
-		var_1C = param4;
-		var_12 = var_1C + 1;	// next
-/*
-		var_18 = XMIN_XMAX;
-		var_E = 0;
+	int16* a1;
+	int16* a2;
 
-		si = &XMIN_XMAX[1];
-		 if (*si>=0)
-		 * {
-		 * di = si;
-		 * cx = var_12;
-		 * 
-		 * do
-		 * {
-		 * di++;
-		 * bx = di[-1];
-		 * ax = di[0];
-		 * di++;
-		 * 
-		 * var_2 = ax;
-		 * if (var_C < bx)
-		 * {
-		 * var_C = bx;
-		 * }
-		 * 
-		 * if (var_2 < var_A)
-		 * {
-		 * var_A = var_2;
-		 * }
-		 * 
-		 * *cx = bx;
-		 * cx++;
-		 * *cx = var_2;
-		 * cx++;
-		 * var_E ++;
-		 * } while (di);
-		 * 
-		 * var_12 = cx;
-		 * } */
+	a1 = a2 = (int16*)str;
+	a2 += 4+sizeof(int16*); // skip header
 
-		/*************/
-		{
-			int i;
-			int numPoints;
-			uint16 *pCurrentPtr = _walkboxTable + boxIdx * 40;
+	int16* XArray = XMIN_XMAX;
+	int minY = *XArray++;
 
-			numPoints = *(pCurrentPtr++);
+	int i=0;
 
-			for (i = 0; i < numPoints; i++) {
-				int X = *(pCurrentPtr++);
-				int Y = *(pCurrentPtr++);
+	while( *XArray >= 0 ) {
+		int x1 = *XArray++;
+		int x2 = *XArray++;
 
-				if (X < minX)
-					minX = X;
+		if(x1<minX)
+			minX = x1;
 
-				if (X > maxX)
-					maxX = X;
+		if(x2>maxX)
+			maxX = x2;
 
-				if (Y < minY)
-					minY = Y;
+		*a2++ = x1;
+		*a2++ = x2;
+		i++;
+	}
+	*(int16**)a1 = a2;
 
-				if (Y > maxY)
-					maxY = Y;
-			}
-		}
-		/************/
+	adrStructPoly = (uint8*)a2;
 
-		var_1C->field_0 = var_12;
-		ctpVar13 = var_12;
-		var_12->field_0 = (ctpVar19Struct *) (-1);
+	*(uint16**)a2 = (uint16*)-1;
 
-		subStruct = &var_1C->subStruct;
-
-		subStruct->boxIdx = boxIdx;
-		subStruct->type = walkboxType[boxIdx];
-		subStruct->minX = minX;
-		subStruct->maxX = maxX;
-		subStruct->minY = minY;
-		subStruct->maxY = maxY;
-	}
+	a1+=sizeof(int16*);
+	*a1++=num;
+	*a1++=walkboxColor[num];
+	*a1++=minX;
+	*a1++=maxX;
+	*a1++=minY;
+	*a1++=minY+i+2;
 }
 
 int getNode(int nodeResult[2], int nodeId){
@@ -289,21 +219,17 @@
 	return 0;
 }
 
-int loadCtp(const char *ctpName) {
-	int walkboxCounter;	// si
-	uint8 *ptr;
+int initCt(const char *ctpName) {
 	uint8 *dataPointer;	// ptr2
 	char fileType[5];	// string2
 	short int segementSizeTable[7];	// tempTable
 
-	if (ctpVar1 == 0) {
-		int i;
-
-		for (i = 0; i < 10; i++) {
+	if ( !loadCtFromSave) {
+		for (int i = 0; i < 10; i++) {
 			persoTable[i] = NULL;
 		}
 	}
-
+	uint8* ptr = NULL;
 	if (!loadFileSub1(&ptr, ctpName, 0)) {
 		free(ptr);
 		return (-18);
@@ -320,96 +246,111 @@
 		return (0);
 	}
 
-	memcpy(&ctp_routeCoordCount, dataPointer, 2);	// get the number of path-finding coordinates
+	ctp_routeCoordCount = readB16(dataPointer); // get the number of nods
 	dataPointer += 2;
-	flipShort(&ctp_routeCoordCount);
 
-	memcpy(segementSizeTable, dataPointer, 0xE);
-	dataPointer += 0xE;	// + 14
-	flipGen(segementSizeTable, 0xE);
+	for(int i=0; i<7; i++) {
+		segementSizeTable[i] = readB16(dataPointer);
+		dataPointer += 2;
+	}
 
-	memcpy(ctp_routeCoords, dataPointer, segementSizeTable[0]);	// get the path-finding coordinates
-	dataPointer += segementSizeTable[0];
-	flipGen(ctp_routeCoords, segementSizeTable[0]);
+	// get the path-finding coordinates
+	ASSERT((segementSizeTable[0]%4) == 0);
+	for(int i=0; i<segementSizeTable[0]/4; i++) {
+		ctp_routeCoords[i][0] = readB16(dataPointer);
+		dataPointer += 2;
+		ctp_routeCoords[i][1] = readB16(dataPointer);
+		dataPointer += 2;
+	}
 
-	memcpy(ctp_routes, dataPointer, segementSizeTable[1]);	// get the path-finding line informations (indexing the routeCoords array)
-	dataPointer += segementSizeTable[1];
-	flipGen(ctp_routes, segementSizeTable[1]);
+	// get the path-finding line informations (indexing the routeCoords array)
+	ASSERT((segementSizeTable[1]%20) == 0);
+	for(int i=0; i<segementSizeTable[1]/20; i++) {
+		for(int j=0; j<10; j++) {
+			ctp_routes[i][j] = readB16(dataPointer);
+			dataPointer += 2;
+		}
+	}
 
-	memcpy(ctp_walkboxTable, dataPointer, segementSizeTable[2]);	// get the walkbox coordinates and lines
-	dataPointer += segementSizeTable[2];
-	flipGen(ctp_walkboxTable, segementSizeTable[2]);
+	// read polygons
+	ASSERT((segementSizeTable[2]%80) == 0);
+	for(int i=0; i<segementSizeTable[2]/80; i++) {
+		for(int j=0; j<40; j++) {
+			ctp_walkboxTable[i][j] = readB16(dataPointer);
+			dataPointer += 2;
+		}
+	}
 
-	if (ctpVar1) {
+	if (loadCtFromSave) {
+		// loading from save, ignore the initial values
 		dataPointer += segementSizeTable[3];
 		dataPointer += segementSizeTable[4];
 	} else {
-		memcpy(walkboxType, dataPointer, segementSizeTable[3]);	// get the walkbox type
-		dataPointer += segementSizeTable[3];
-		flipGen(walkboxType, segementSizeTable[3]);	// Type: 0x00 - non walkable, 0x01 - walkable, 0x02 - exit zone
+		// get the walkbox type
+		// Type: 0x00 - non walkable, 0x01 - walkable, 0x02 - exit zone
+		ASSERT((segementSizeTable[3] % 2) == 0);
+		for(int i=0; i<segementSizeTable[3]/2; i++) {
+			walkboxColor[i] = readB16(dataPointer);
+			dataPointer += 2;
+		}
 
-		memcpy(walkboxChange, dataPointer, segementSizeTable[4]);	// change indicator, walkbox type can change, i.e. blocked by object (values are either 0x00 or 0x01)
-		dataPointer += segementSizeTable[4];
-		flipGen(walkboxChange, segementSizeTable[4]);
+		// change indicator, walkbox type can change, i.e. blocked by object (values are either 0x00 or 0x01)
+		ASSERT((segementSizeTable[4] % 2) == 0);
+		for(int i=0; i<segementSizeTable[4]/2; i++) {
+			walkboxState[i] = readB16(dataPointer);
+			dataPointer += 2;
+		}
 	}
 
-	memcpy(ctpVar6, dataPointer, segementSizeTable[5]);	// unknown? always 2*16 bytes (used by S24.CTP, S33.CTP, S33_2.CTP, S34.CTP, S35.CTP, S36.CTP; values can be 0x00, 0x01, 0x03, 0x05)
-	dataPointer += segementSizeTable[5];
-	flipGen(ctpVar6, segementSizeTable[5]);
+	//
+	ASSERT((segementSizeTable[5] % 2) == 0);
+	for(int i=0; i<segementSizeTable[5]/2; i++) {
+		walkboxColorIndex[i] = readB16(dataPointer);
+		dataPointer += 2;
+	}
 
-	memcpy(ctp_scale, dataPointer, segementSizeTable[6]);	// scale values for the walkbox coordinates (don't know why there is a need for scaling walkboxes)
-	dataPointer += segementSizeTable[6];
-	flipGen(ctp_scale, segementSizeTable[6]);	// ok
-
+	//
+	ASSERT((segementSizeTable[6] % 2) == 0);
+	for(int i=0; i<segementSizeTable[6]/2; i++) {
+		walkboxZoom[i] = readB16(dataPointer);
+		dataPointer += 2;
+	}
 	free(ptr);
 
 	strcpy(currentCtpName, ctpName);
 
 	numberOfWalkboxes = segementSizeTable[6] / 2;	// get the number of walkboxes
 
-	loadCtpSub2(ctp_routeCoordCount, ctpVar8);	// process path-finding stuff
+	computeDistance(ctp_routeCoordCount, ctpVar8);	// process path-finding stuff
 
-	polyStruct = ctpVar11 = ctpVar13 = ptr_something;
+	polyStruct = polyStructNorm = adrStructPoly = workBuffer;
 
 	ptr = (uint8 *) polyStruct;
 
-	walkboxCounter = numberOfWalkboxes;
-
-	while ((--walkboxCounter) >= 0) {
-		loadCtpSub1(walkboxCounter, 0, ctp_walkboxTable, ctpVar13);
+	for(int i= numberOfWalkboxes-1; i >=0; i--) {
+		makeCtStruct(adrStructPoly, ctp_walkboxTable, i, 0 );
 	}
 
-	ctpVar15 = ctpVar13 + 1;	// was after the -1 thing
+	polyStructExp = adrStructPoly += 4;
 
-	walkboxCounter = numberOfWalkboxes;
-
-	while (--walkboxCounter) {
-		loadCtpSub1(walkboxCounter, ctp_scale[walkboxCounter] * 20,
-		    ctp_walkboxTable, ctpVar13);
+	for(int i= numberOfWalkboxes-1; i >=0; i--) {
+		makeCtStruct(adrStructPoly, ctp_walkboxTable, i, walkboxZoom[i] * 20 );
 	}
 
-	//ctpVar17 = ctpVar13 - ptr + 4;
+	int ctSize = (adrStructPoly - ptr) + 4; // for now, the +4 is a safe zone
+	adrStructPoly = polyStructNorm = polyStruct = (uint8 *) malloc(ctSize);
 
-	{
-		int numOfUsedEntries = ctpVar13 - (ctpVar19Struct *) ptr;
-		numOfUsedEntries++;	// there is a -1 entry at the end... Original was only mallocing numOfUsedEntries*sizeof(ctpVar19Struct)+4, but this is a bit ugly...
-		ctpVar13 = ctpVar11 = polyStruct = (ctpVar19Struct *) malloc(numOfUsedEntries * sizeof(ctpVar19Struct));
+	for(int i= numberOfWalkboxes-1; i >=0; i--) {
+		makeCtStruct(adrStructPoly, ctp_walkboxTable, i, 0);
 	}
 
-	walkboxCounter = numberOfWalkboxes;
-	while ((--walkboxCounter) >= 0) {
-		loadCtpSub1(walkboxCounter, 0, ctp_walkboxTable, ctpVar13);
-	}
+	polyStructExp = adrStructPoly += 4;
 
-	ctpVar15 = ctpVar13 + 1;
-
-	walkboxCounter = numberOfWalkboxes;
-	while (--walkboxCounter) {
-		loadCtpSub1(walkboxCounter, ctp_scale[walkboxCounter] * 20,
-		    ctp_walkboxTable, ctpVar13);
+	for(int i= numberOfWalkboxes-1; i >=0; i--) {
+		makeCtStruct(adrStructPoly, ctp_walkboxTable, i, walkboxZoom[i] * 20);
 	}
 
-	ctpVar19 = ctpVar11;
+	polyStruct0 = polyStructNorm;
 
 	return (1);
 }

Modified: scummvm/trunk/engines/cruise/ctp.h
===================================================================
--- scummvm/trunk/engines/cruise/ctp.h	2007-12-27 11:40:29 UTC (rev 30011)
+++ scummvm/trunk/engines/cruise/ctp.h	2007-12-27 12:05:43 UTC (rev 30012)
@@ -42,16 +42,16 @@
 	ctpVar19SubStruct subStruct;
 };
 
-extern ctpVar19Struct *ptr_something;
-extern ctpVar19Struct *polyStruct;
-extern ctpVar19Struct *ctpVar11;
-extern ctpVar19Struct *ctpVar13;
-extern ctpVar19Struct *ctpVar15;
+extern uint8 *workBuffer;
+extern uint8 *polyStruct;
+extern uint8 *adrStructPoly;
+extern uint8 *polyStructNorm;
+extern uint8 *polyStructExp;
 
 extern uint8 *ctpVar17;
-extern ctpVar19Struct *ctpVar19;
+extern uint8 *polyStruct0;
 
-int loadCtp(const char * ctpName);
+int initCt(const char * ctpName);
 int ctpProc2(int varX, int varY, int paramX, int paramY);
 
 int getNode(int nodeResult[2], int nodeId);

Modified: scummvm/trunk/engines/cruise/font.cpp
===================================================================
--- scummvm/trunk/engines/cruise/font.cpp	2007-12-27 11:40:29 UTC (rev 30011)
+++ scummvm/trunk/engines/cruise/font.cpp	2007-12-27 12:05:43 UTC (rev 30012)
@@ -400,7 +400,7 @@
 		}
 		useDynamicBuffer = 1;
 	} else {
-		currentStrRenderBuffer = (uint8 *) ptr_something;
+		currentStrRenderBuffer = (uint8 *) workBuffer;
 		useDynamicBuffer = 0;
 	}
 

Modified: scummvm/trunk/engines/cruise/function.cpp
===================================================================
--- scummvm/trunk/engines/cruise/function.cpp	2007-12-27 11:40:29 UTC (rev 30011)
+++ scummvm/trunk/engines/cruise/function.cpp	2007-12-27 12:05:43 UTC (rev 30012)
@@ -728,7 +728,7 @@
 }
 
 int16 Op_LoadCt(void) {
-	return loadCtp((char*)popPtr());
+	return initCt((char*)popPtr());
 }
 
 int16 Op_LoadSong(void) {
@@ -1095,46 +1095,6 @@
 
 int flag_obstacle;		// computedVar14Bis
 
-void checkCollisionWithWalkBoxesBoundingBoxes(int x, int y) {
-	ctpVar19Struct *di = ctpVar19;
-
-	do {
-		int minX;
-		int maxX;
-		int minY;
-		int maxY;
-
-		ctpVar19SubStruct *subStruct;
-
-		if ((ctpVar19Struct *)-1 == di->field_0) {	// ok, ugly, but it's in the original
-			flag_obstacle = 0;
-			return;
-		}
-
-		subStruct = &di->subStruct;
-
-		minX = subStruct->minX;
-		maxX = subStruct->maxX;
-		minY = subStruct->minY;
-		maxY = subStruct->maxY;
-
-		computedVar14 = subStruct->boxIdx;	// Box index
-
-		if (!(walkboxChange[subStruct->boxIdx]) && (minY >= x)
-		    && (maxY <= x) && (minX >= y) && (maxX <= y)) {
-      /**************/
-
-			flag_obstacle = walkboxType[computedVar14];
-
-      /**************/
-		}
-
-		di = di->field_0;
-	} while (1);
-
-	flag_obstacle = 0;
-}
-
 // add animation
 int16 Op_AddAnimation(void) {
 	int stepY = popVar();
@@ -1176,7 +1136,7 @@
 				zoom = -zoom;
 			}
 
-			checkCollisionWithWalkBoxesBoundingBoxes(params.X, params.Y);
+			getPixel(params.X, params.Y);
 
 			setObjectPosition(overlay, obj, 3, newFrame + start);
 			setObjectPosition(overlay, obj, 4, zoom);

Modified: scummvm/trunk/engines/cruise/gfxModule.cpp
===================================================================
--- scummvm/trunk/engines/cruise/gfxModule.cpp	2007-12-27 11:40:29 UTC (rev 30011)
+++ scummvm/trunk/engines/cruise/gfxModule.cpp	2007-12-27 12:05:43 UTC (rev 30012)
@@ -228,8 +228,6 @@
 void flip() {
 	int i;
 	byte paletteRGBA[256 * 4];
-	//uint8* outPtr = scaledScreen;
-	//uint8* inPtr  = globalScreen;
 
 	if (palDirtyMax != -1) {
 		for (i = palDirtyMin; i <= palDirtyMax; i++) {

Modified: scummvm/trunk/engines/cruise/mainDraw.cpp
===================================================================
--- scummvm/trunk/engines/cruise/mainDraw.cpp	2007-12-27 11:40:29 UTC (rev 30011)
+++ scummvm/trunk/engines/cruise/mainDraw.cpp	2007-12-27 12:05:43 UTC (rev 30012)
@@ -1254,12 +1254,12 @@
 
 #ifdef _DEBUG
 void drawCtp(void) {
-	int i;
+/*	int i;
 
 	if (ctp_walkboxTable) {
 		for (i = 0; i < 15; i++) {
 			uint16 *dataPtr = &ctp_walkboxTable[i * 40];
-			int type = walkboxType[i];	// show different types in different colors
+			int type = walkboxColor[i];	// show different types in different colors
 
 			if (*dataPtr) {
 				int j;
@@ -1277,7 +1277,7 @@
 				    dataPtr[2], 0);
 			}
 		}
-	}
+	}*/
 }
 #endif
 

Modified: scummvm/trunk/engines/cruise/saveload.cpp
===================================================================
--- scummvm/trunk/engines/cruise/saveload.cpp	2007-12-27 11:40:29 UTC (rev 30011)
+++ scummvm/trunk/engines/cruise/saveload.cpp	2007-12-27 12:05:43 UTC (rev 30012)
@@ -441,8 +441,8 @@
 
 		if(numberOfWalkboxes)
 		{
-			currentSaveFile.write(walkboxType, numberOfWalkboxes * 2);
-			currentSaveFile.write(walkboxChange, numberOfWalkboxes * 2);
+			currentSaveFile.write(walkboxColor, numberOfWalkboxes * 2);
+			currentSaveFile.write(walkboxState, numberOfWalkboxes * 2);
 		}
 
 		for (unsigned long int i = 0; i < 10; i++) {
@@ -474,8 +474,8 @@
 		numberOfWalkboxes = currentSaveFile.readUint16LE();
 
 		if (numberOfWalkboxes) {
-			currentSaveFile.read(walkboxType, numberOfWalkboxes * 2);
-			currentSaveFile.read(walkboxChange, numberOfWalkboxes * 2);
+			currentSaveFile.read(walkboxColor, numberOfWalkboxes * 2);
+			currentSaveFile.read(walkboxState, numberOfWalkboxes * 2);
 		}
 
 		for (i = 0; i < 10; i++) {
@@ -907,9 +907,9 @@
 	//TODO: here, restart music
 
 	if (strlen(currentCtpName)) {
-		ctpVar1 = 1;
-		loadCtp(currentCtpName);
-		ctpVar1 = 0;
+		loadCtFromSave = 1;
+		initCt(currentCtpName);
+		loadCtFromSave = 0;
 	}
 	//prepareFadeOut();
 	//gfxModuleData.gfxFunction8();

Modified: scummvm/trunk/engines/cruise/vars.cpp
===================================================================
--- scummvm/trunk/engines/cruise/vars.cpp	2007-12-27 11:40:29 UTC (rev 30011)
+++ scummvm/trunk/engines/cruise/vars.cpp	2007-12-27 12:05:43 UTC (rev 30012)
@@ -155,20 +155,20 @@
 uint8 saveVar2[97];		// recheck size
 
 int16 numberOfWalkboxes;	// saveVar3
-int16 walkboxType[15];		// saveVar4
-int16 walkboxChange[15];	// saveVar5
+int16 walkboxColor[15];		// saveVar4
+int16 walkboxState[15];	// saveVar5
 
 uint8 lastAni[16];
 
 int32 loadFileVar1;
 
-int16 ctpVar1 = 0;
+int16 loadCtFromSave = 0;
 int16 ctp_routeCoordCount;	// ctpVar2
 int16 ctp_routeCoords[20][2];	// ctpVar3
 int16 ctp_routes[20][10];
-uint16 ctp_walkboxTable[15 * 40];	// ctpVar5
-int8 ctpVar6[32];
-int16 ctp_scale[15];		//  ctpVar7
+int16 ctp_walkboxTable[15][40];	// ctpVar5
+int16 walkboxColorIndex[16];
+int16 walkboxZoom[15];		//  ctpVar7
 int16 ctpVar8[200];
 
 int16 ctpVar14;
@@ -178,7 +178,6 @@
 int16 oldSpeedGame;
 
 uint8 globalScreen[320 * 200];
-uint8 scaledScreen[640 * 400];
 
 //OSystem *osystem;
 

Modified: scummvm/trunk/engines/cruise/vars.h
===================================================================
--- scummvm/trunk/engines/cruise/vars.h	2007-12-27 11:40:29 UTC (rev 30011)
+++ scummvm/trunk/engines/cruise/vars.h	2007-12-27 12:05:43 UTC (rev 30012)
@@ -250,14 +250,14 @@
 extern uint8 saveVar2[97];	// recheck size
 
 extern int16 numberOfWalkboxes;	// saveVar3
-extern int16 walkboxType[15];	// saveVar4     // Type: 0x00 - non walkable, 0x01 - walkable, 0x02 - exit zone
-extern int16 walkboxChange[15];	// saveVar5 // walkbox can change its type: 0x00 - not changeable, 0x01 - changeable
-												// Assumption: To change the type: walkboxType[i] -= walkboxChane[i] and vice versa
+extern int16 walkboxColor[15];	// saveVar4     // Type: 0x00 - non walkable, 0x01 - walkable, 0x02 - exit zone
+extern int16 walkboxState[15];	// saveVar5 // walkbox can change its type: 0x00 - not changeable, 0x01 - changeable
+												// Assumption: To change the type: walkboxColor[i] -= walkboxChane[i] and vice versa
 extern uint8 lastAni[16];
 
 extern int32 loadFileVar1;
 
-extern int16 ctpVar1;
+extern int16 loadCtFromSave;
 extern int16 ctp_routeCoordCount;	// ctpVar2  // number of path-finding coordinates
 extern int16 ctp_routeCoords[20][2];	// ctpVar3      // path-finding coordinates array
 
@@ -279,9 +279,9 @@
    for the 20 * i slice the root x,y is routeCoords[i], routeCoords[i+2]
    the unused rest of the slice if filled up with 0xFF
 */
-extern uint16 ctp_walkboxTable[15 * 40];	// ctpVar5      // walkboxes coordinates and lines
-extern int8 ctpVar6[32];
-extern int16 ctp_scale[15];	// ctpVar7  // scaling information for walkboxes
+extern int16 ctp_walkboxTable[15][40];	// ctpVar5      // walkboxes coordinates and lines
+extern int16 walkboxColorIndex[16];
+extern int16 walkboxZoom[15];	// ctpVar7  // scaling information for walkboxes
 extern int16 ctpVar8[200];
 
 extern int16 ctpVar14;
@@ -291,7 +291,6 @@
 extern int16 oldSpeedGame;
 
 extern uint8 globalScreen[320 * 200];
-extern uint8 scaledScreen[640 * 400];
 
 //extern OSystem *osystem;
 


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