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

yazoo at users.sourceforge.net yazoo at users.sourceforge.net
Sun Oct 28 15:41:38 CET 2007


Revision: 29291
          http://scummvm.svn.sourceforge.net/scummvm/?rev=29291&view=rev
Author:   yazoo
Date:     2007-10-28 07:41:37 -0700 (Sun, 28 Oct 2007)

Log Message:
-----------
Find object fix
Walk fix

Modified Paths:
--------------
    scummvm/trunk/engines/cruise/actor.cpp
    scummvm/trunk/engines/cruise/cruise_main.cpp
    scummvm/trunk/engines/cruise/cruise_main.h
    scummvm/trunk/engines/cruise/function.cpp
    scummvm/trunk/engines/cruise/object.cpp

Modified: scummvm/trunk/engines/cruise/actor.cpp
===================================================================
--- scummvm/trunk/engines/cruise/actor.cpp	2007-10-28 13:57:43 UTC (rev 29290)
+++ scummvm/trunk/engines/cruise/actor.cpp	2007-10-28 14:41:37 UTC (rev 29291)
@@ -581,8 +581,7 @@
 }
 
 //computePathfinding(returnVar2, params.X, params.Y, aniX, aniY, currentActor->stepX, currentActor->stepY);
-int16 computePathfinding(int16 *pSolution, int16 x, int16 y, int16 destX,
-	    int16 destY, int16 stepX, int16 stepY, int16 oldPathId) {
+int16 computePathfinding(int16 *pSolution, int16 x, int16 y, int16 destX, int16 destY, int16 stepX, int16 stepY, int16 oldPathId) {
 	persoStruct *perso;
 	int num;
 
@@ -762,16 +761,15 @@
 void processAnimation(void) {
 	objectParamsQuery params;
 	int16 returnVar2[5];
-	actorStruct *currentActor = &actorHead;
+	actorStruct *currentActor = actorHead.next;
 	actorStruct *nextActor;
 
 	while (currentActor) {
 		nextActor = currentActor->next;
 
-		if (!currentActor->freeze && ((currentActor->type == 0)
-			|| (currentActor->type == 1))) {
-			getMultipleObjectParam(currentActor->overlayNumber,
-			    currentActor->idx, &params);
+		if (!currentActor->freeze && ((currentActor->type == 0)	|| (currentActor->type == 1)))
+		{
+			getMultipleObjectParam(currentActor->overlayNumber, currentActor->idx, &params);
 
 			if (((animationStart && !currentActor->flag) || (!animationStart && currentActor->x_dest != -1 && currentActor->y_dest != -1)) && (currentActor->type == 0)) {
 				// mouse animation

Modified: scummvm/trunk/engines/cruise/cruise_main.cpp
===================================================================
--- scummvm/trunk/engines/cruise/cruise_main.cpp	2007-10-28 13:57:43 UTC (rev 29290)
+++ scummvm/trunk/engines/cruise/cruise_main.cpp	2007-10-28 14:41:37 UTC (rev 29291)
@@ -607,120 +607,111 @@
 int selectDown = 0;
 int menuDown = 0;
 
-int getCursorFromObject(int mouseX, int mouseY, int *outX, int *outY) {
-	int16 var_2;
-	int16 var_4;
-	int16 var_14;
-	int16 var_16;
-	objectParamsQuery params;
-	int16 var_10;
-	int16 var_E;
-	int16 var_C;
-//  int16 var_42;
-	int16 var_A;
-	int16 var_6;
-
+int findObject(int mouseX, int mouseY, int *outObjOvl, int *outObjIdx)
+{
 	char objectName[80];
 
 	cellStruct *currentObject = cellHead.prev;
 
 	while (currentObject)
 	{
-		if (currentObject->overlay >= 0 && overlayTable[currentObject->overlay].alreadyLoaded && (currentObject->type == 4 || currentObject->type == 1 || currentObject->type == 9 || currentObject->type == 3))
+		if (currentObject->overlay >= 0 && overlayTable[currentObject->overlay].alreadyLoaded && (currentObject->type == OBJ_TYPE_SPRITE || currentObject->type == OBJ_TYPE_MASK || currentObject->type == OBJ_TYPE_EXIT || currentObject->type == OBJ_TYPE_VIRTUEL))
 		{
 			char* pObjectName = getObjectName(currentObject->idx, overlayTable[currentObject->overlay].ovlData->specialString2);
 			if(pObjectName)
 			{
 				strcpy(objectName, pObjectName);
 
-				if (strlen(objectName)) {
-					if (currentObject->freeze == 0) {
-						var_2 = currentObject->idx;
-						var_4 = currentObject->overlay;
-						var_14 = currentObject->followObjectIdx;
-						var_16 = currentObject->followObjectOverlayIdx;
+				if (strlen(objectName) && (currentObject->freeze == 0))
+				{
+					int objIdx = currentObject->idx;
+					int objOvl = currentObject->overlay;
+					int linkedObjIdx = currentObject->followObjectIdx;
+					int linkedObjOvl = currentObject->followObjectOverlayIdx;
 
-						getMultipleObjectParam(currentObject->overlay, currentObject->idx, &params);
+					objectParamsQuery params;
+					getMultipleObjectParam(objOvl, objIdx, &params);
 
-						var_10 = 0;
-						var_E = 0;
-						var_C = 0;
+					int x2 = 0;
+					int y2 = 0;
+					int j2 = 0;
 
-						if ((var_4 != var_16)
-							&& (var_2 != var_14)) {
-							getMultipleObjectParam
-								(var_16, var_14, &params);
+					if ((objOvl != linkedObjOvl) || (objIdx != linkedObjIdx))
+					{
+						getMultipleObjectParam(linkedObjOvl, linkedObjIdx, &params);
 
-							var_C = params.X;
-							var_E = params.Y;
-							var_10 = params.fileIdx;
-						}
+						x2 = params.X;
+						y2 = params.Y;
+						j2 = params.fileIdx;
+					}
 
-						if (params.var5 >= 0 && params.fileIdx >= 0) {
-							if (currentObject->type == 3) {
-								assert(0);
+					if (params.var5 >= 0 && params.fileIdx >= 0)
+					{
+						if (currentObject->type == OBJ_TYPE_SPRITE || currentObject->type == OBJ_TYPE_MASK || currentObject->type == OBJ_TYPE_EXIT)
+						{
+							int x = params.X + x2;
+							int y = params.Y + y2;
+							int j = params.fileIdx;
 
-								var_2 = params.scale;
-								var_A = params.X + var_C;
+							if (j >= 0) {
+								j += j2;
+							}
 
-								// TODO: this var3 is stupid, investigate...
-								if ((var_A <= mouseX) && (var_A + params.fileIdx >= mouseX) && (mouseY >= params.Y + var_E) && (params.Y + var_E + var2 >= mouseY)) {
-									*outX = var_16;
-									*outY = var_14;
+							/*if ((filesDatabase[j].subData.resourceType == OBJ_TYPE_POLY) && (filesDatabase[j].subData.ptr)) {
+								ASSERT(0);
+							}
+							else*/
+							{
+								int numBitPlanes = filesDatabase[j].resType;
 
-									return (currentObject->type);
+								int nWidth;
+								int nHeight;
+
+								if (numBitPlanes == 1)
+								{
+									nWidth = filesDatabase[j].widthInColumn / 2;
+								} else {
+									nWidth = filesDatabase[j].width;
 								}
-							} else if (currentObject->type == 4 ||
-								currentObject->type == 1 ||
-								currentObject->type == 9) {
-								int si;
-								int var_8;
-								int di;
 
-								var_A = params.X + var_C;
-								var_6 = params.Y + var_E;
+								nHeight = filesDatabase[j].height;
 
-								di = params.fileIdx;
+								int offsetX = mouseX - x;
+								int offsetY = mouseY - y;
 
-								if (di < 0) {
-									di += var_10;
-								}
-
-	/*		                  if ((filesDatabase[di].subData.resourceType == 8) && (filesDatabase[di].subData.ptr)) {
-									assert(0);
-								}
-	*/
+								if ((offsetX >= 0) && (offsetX < nWidth * 16) && (offsetY >= 0) && (nWidth <= nHeight) && filesDatabase[j].subData.ptr)
 								{
-									var_4 = filesDatabase[di].resType;
-
-									if (var_4 == 1) {
-										var_C = filesDatabase[di].widthInColumn / 2;
-									} else {
-										var_C = filesDatabase[di].width;
+									if (numBitPlanes == 1)
+									{
 									}
+									else
+									{
+									}
 
-									var_8 = filesDatabase[di].height;
+									printf("should compare to mask in findObject...\n");
 
-									var_2 = mouseX - var_A;
-									si = mouseY - var_6;
+									*outObjOvl = objOvl;
+									*outObjIdx = objIdx;
 
-									if (var_2 > 0 && var_C > var_2 && si > 0 && var_8 >= si) {
-										if (filesDatabase[di].subData.ptr) {
-											if (var_4 == 1) {
-											} else {
-											}
+									printf("Selected: %s\n", objectName);
 
-											printf("should compare to mask in getCursorFromObject...\n");
+									return currentObject->type;
+								}
+							}
+						}
+						else if (currentObject->type == OBJ_TYPE_VIRTUEL)
+						{
+							int x = params.X + x2;
+							int y = params.Y + y2;
+							int width = params.fileIdx;
+							int height = params.scale;
 
-											*outX = var_16;
-											*outY = var_14;
+							if ((mouseX >= x) && (mouseX <= x+width) && (mouseY >= y) && (mouseY <= y+height))
+							{
+								*outObjOvl = objOvl;
+								*outObjIdx = objIdx;
 
-											printf("Selected: %s\n", objectName);
-
-											return currentObject->type;
-										}
-									}
-								}
+								return (currentObject->type);
 							}
 						}
 					}
@@ -731,8 +722,8 @@
 		currentObject = currentObject->prev;
 	}
 
-	*outX = 0;
-	*outY = 0;
+	*outObjOvl = 0;
+	*outObjIdx = 0;
 
 	return -1;
 }
@@ -1120,7 +1111,7 @@
 						int Y;
 						int objIdx;
 
-						objIdx = getCursorFromObject(mouseX, mouseY, &X, &Y);
+						objIdx = findObject(mouseX, mouseY, &X, &Y);
 
 						if (objIdx != -1)
 						{
@@ -1435,21 +1426,21 @@
 					 
 						if (mouseX != oldMouseX && mouseY != oldMouseY)
 						{
-							int cursorType;
+							int objectType;
 							int newCursor1;
 							int newCursor2;
 							
 							oldMouseX = mouseX;
 							oldMouseY = mouseY;
 							
-							cursorType = getCursorFromObject(mouseX, mouseY, &newCursor1, &newCursor2);
+							objectType = findObject(mouseX, mouseY, &newCursor1, &newCursor2);
 							
-							if (cursorType == 9)
+							if (objectType == 9)
 							{
 								changeCursor(CURSOR_EXIT);
 							}
 							else
-							if (cursorType != -1)
+							if (objectType != -1)
 							{
 								changeCursor(CURSOR_MAGNIFYING_GLASS);
 							}

Modified: scummvm/trunk/engines/cruise/cruise_main.h
===================================================================
--- scummvm/trunk/engines/cruise/cruise_main.h	2007-10-28 13:57:43 UTC (rev 29290)
+++ scummvm/trunk/engines/cruise/cruise_main.h	2007-10-28 14:41:37 UTC (rev 29291)
@@ -67,6 +67,17 @@
 #define ASSERT_PTR assert
 #define ASSERT assert
 
+#define	OBJ_TYPE_LINE		  0
+#define	OBJ_TYPE_MASK		  1
+#define	OBJ_TYPE_BGMK		  2
+#define	OBJ_TYPE_VIRTUEL	  3
+#define	OBJ_TYPE_SPRITE		  4
+#define	OBJ_TYPE_MSG		  5
+#define	OBJ_TYPE_SOUND		  6
+#define	OBJ_TYPE_FONT		  7
+#define	OBJ_TYPE_POLY		  8
+#define	OBJ_TYPE_EXIT		  9
+
 bool delphineUnpack(byte *dst, const byte *src, int len);
 
 ovlData3Struct *getOvlData3Entry(int32 scriptNumber, int32 param);

Modified: scummvm/trunk/engines/cruise/function.cpp
===================================================================
--- scummvm/trunk/engines/cruise/function.cpp	2007-10-28 13:57:43 UTC (rev 29290)
+++ scummvm/trunk/engines/cruise/function.cpp	2007-10-28 14:41:37 UTC (rev 29291)
@@ -681,8 +681,9 @@
 		overlayIdx = currentScriptPtr->overlayNumber;
 
 	if (color == -1) {
-		color = 0;
-		ASSERT(0);
+		color = 1;
+		printf("Unimplemented automatic message color\n");
+	//	ASSERT(0);
 		//color = calcTabSomething();
 	} else {
 		if (CVTLoaded) {

Modified: scummvm/trunk/engines/cruise/object.cpp
===================================================================
--- scummvm/trunk/engines/cruise/object.cpp	2007-10-28 13:57:43 UTC (rev 29290)
+++ scummvm/trunk/engines/cruise/object.cpp	2007-10-28 14:41:37 UTC (rev 29291)
@@ -57,8 +57,7 @@
 	return (&var_6[objIdx]);
 }
 
-int16 getMultipleObjectParam(int16 overlayIdx, int16 objectIdx,
-	    objectParamsQuery *returnParam) {
+int16 getMultipleObjectParam(int16 overlayIdx, int16 objectIdx, objectParamsQuery *returnParam) {
 	int16 size;
 	int16 var_A;
 	int16 var_14;


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