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

buddha_ at users.sourceforge.net buddha_ at users.sourceforge.net
Wed Jul 2 06:31:51 CEST 2008


Revision: 32874
          http://scummvm.svn.sourceforge.net/scummvm/?rev=32874&view=rev
Author:   buddha_
Date:     2008-07-01 21:31:50 -0700 (Tue, 01 Jul 2008)

Log Message:
-----------
Fully implemented processSeqListElement
- Added parts that were missing and fixed a couple of errors
-- One test was backwards and a global variable was written to when it shouldn't have been
Added global variable inputVar0 that's used in processSeqListElement
NOTE: inputVar0 isn't updated anywhere yet, so that's a TODO

Modified Paths:
--------------
    scummvm/trunk/engines/cine/various.cpp

Modified: scummvm/trunk/engines/cine/various.cpp
===================================================================
--- scummvm/trunk/engines/cine/various.cpp	2008-07-02 01:41:08 UTC (rev 32873)
+++ scummvm/trunk/engines/cine/various.cpp	2008-07-02 04:31:50 UTC (rev 32874)
@@ -95,6 +95,9 @@
 
 byte isInPause = 0;
 
+// TODO: Implement inputVar0's changes in the program
+// Currently inputVar0 isn't updated anywhere even though it's used at least in processSeqListElement.
+uint16 inputVar0 = 0;
 byte inputVar1 = 0;
 uint16 inputVar2 = 0, inputVar3 = 0;
 
@@ -1683,8 +1686,7 @@
 	return returnVar;
 }
 
-uint16 addAni(uint16 param1, uint16 objIdx, const byte *ptrByte, SeqListElement &element, uint16 param3, int16 *param4) {
-	const int8 *ptr = (const int8 *)ptrByte;
+uint16 addAni(uint16 param1, uint16 objIdx, const int8 *ptr, SeqListElement &element, uint16 param3, int16 *param4) {
 	const int8 *ptrData;
 	const int8 *ptr2;
 	int16 di;
@@ -1790,7 +1792,7 @@
 void processSeqListElement(SeqListElement &element) {
 	int16 x = objectTable[element.objIdx].x;
 	int16 y = objectTable[element.objIdx].y;
-	const byte *ptr1 = animDataTable[element.frame].data();
+	const int8 *ptr1 = (const int8 *) animDataTable[element.frame].data();
 	int16 var_10;
 	int16 var_4;
 	int16 var_2;
@@ -1803,22 +1805,44 @@
 	element.var12 = 0;
 
 	if (ptr1) {
-		uint16 param1 = ptr1[1];
-		uint16 param2 = ptr1[2];
+		int16 param1 = ptr1[1];
+		int16 param2 = ptr1[2];
 
 		if (element.varC != 255) {
-			// FIXME: Why is this here? Fingolfin gets lots of these
-			// in his copy of Operation Stealth (value 0 or 236) under
-			// Mac OS X. Maybe it's a endian issue? At least the graphics
-			// in the copy protection screen are partially messed up.
-			warning("processSeqListElement: varC = %d", element.varC);
-		}
+			int16 x2 = element.var18;
+			int16 y2 = element.var1A;
+			if (element.varC) {
+				x2 += objectTable[element.varC].x;
+				y2 += objectTable[element.varC].y;
+			}
+			computeMove1(element, ptr1[4] + x, ptr1[5] + y, param1, param2, x2, y2);
+		} else {
+			if (inputVar0 && allowPlayerInput) {
+				int16 adder = param1 + 1;
+				if (inputVar0 != 1) {
+					adder = -adder;
+				}
+				// FIXME: In Operation Stealth's disassembly global variable 251 is used here
+				//        but it's named as VAR_MOUSE_Y_MODE in ScummVM. Is it correct or a
+				//        left over from Future Wars's reverse engineering?
+				globalVars[VAR_MOUSE_X_POS] = globalVars[251] = ptr1[4] + x + adder;
+			}
 
-		if (globalVars[VAR_MOUSE_X_POS] || globalVars[VAR_MOUSE_Y_POS]) {
-			computeMove1(element, ptr1[4] + x, ptr1[5] + y, param1, param2, globalVars[VAR_MOUSE_X_POS], globalVars[VAR_MOUSE_Y_POS]);
-		} else {
-			element.var16 = 0;
-			element.var14 = 0;
+			if (inputVar1 && allowPlayerInput) {
+				int16 adder = param2 + 1;
+				if (inputVar1 != 1) {
+					adder = -adder;
+				}
+				// TODO: Name currently unnamed global variable 252
+				globalVars[VAR_MOUSE_Y_POS] = globalVars[252] = ptr1[5] + y + adder;
+			}
+
+			if (globalVars[VAR_MOUSE_X_POS] || globalVars[VAR_MOUSE_Y_POS]) {
+				computeMove1(element, ptr1[4] + x, ptr1[5] + y, param1, param2, globalVars[VAR_MOUSE_X_POS], globalVars[VAR_MOUSE_Y_POS]);
+			} else {
+				element.var16 = 0;
+				element.var14 = 0;
+			}
 		}
 
 		var_10 = computeMove2(element);
@@ -1859,14 +1883,14 @@
 			}
 		}
 
-		if (element.var16 + element.var14) {
+		if (element.var16 + element.var14 == 0) {
 			if (element.var1C) {
 				if (element.var1E) {
 					objectTable[element.objIdx].costume = 0;
 					element.var1E = 0;
 				}
 
-				addAni(element.var1C + 3, element.objIdx, ptr1, element, 1, (int16 *) & var2);
+				addAni(element.var1C + 3, element.objIdx, ptr1, element, 1, &var_2);
 
 			}
 		}


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