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

buddha_ at users.sourceforge.net buddha_ at users.sourceforge.net
Fri Aug 8 15:30:02 CEST 2008


Revision: 33698
          http://scummvm.svn.sourceforge.net/scummvm/?rev=33698&view=rev
Author:   buddha_
Date:     2008-08-08 13:30:01 +0000 (Fri, 08 Aug 2008)

Log Message:
-----------
Added basic moving using keyboard (Only works in Operation Stealth at the moment):
- Should make it possible to complete the first arcade sequence legitimately
Renamed input variables (Their names were mixed up between Future Wars and Operation Stealth):
- Future Wars's inputVar1 -> egoMovedWithKeyboard
- Future Wars's inputVar2 -> xMoveKeyb
- Future Wars's inputVar3 -> yMoveKeyb
- Operation Stealth's inputVar0 -> xMoveKeyb
- Operation Stealth's inputVar1 -> yMoveKeyb

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

Modified: scummvm/trunk/engines/cine/main_loop.cpp
===================================================================
--- scummvm/trunk/engines/cine/main_loop.cpp	2008-08-08 10:37:58 UTC (rev 33697)
+++ scummvm/trunk/engines/cine/main_loop.cpp	2008-08-08 13:30:01 UTC (rev 33698)
@@ -68,6 +68,7 @@
 		switch (event.kbd.keycode) {
 		case Common::KEYCODE_RETURN:
 		case Common::KEYCODE_KP_ENTER:
+		case Common::KEYCODE_s:
 		case Common::KEYCODE_KP5:
 			if (allowPlayerInput) {
 				mouseLeft = 1;
@@ -133,11 +134,77 @@
 		case Common::KEYCODE_KP_PLUS:
 			g_cine->modifyGameSpeed(+1); // Faster
 			break;
+		case Common::KEYCODE_LEFT:
+		case Common::KEYCODE_KP4:
+		case Common::KEYCODE_a:			
+			moveUsingKeyboard(-1, 0); // Left
+			break;
+		case Common::KEYCODE_RIGHT:
+		case Common::KEYCODE_KP6:
+		case Common::KEYCODE_d:			
+			moveUsingKeyboard(+1, 0); // Right
+			break;
+		case Common::KEYCODE_UP:
+		case Common::KEYCODE_KP8:
+		case Common::KEYCODE_w:
+			moveUsingKeyboard(0, +1); // Up
+			break;
+		case Common::KEYCODE_DOWN:
+		case Common::KEYCODE_KP2:
+		case Common::KEYCODE_x:
+			moveUsingKeyboard(0, -1); // Down
+			break;
+		case Common::KEYCODE_KP9:
+		case Common::KEYCODE_e:
+			moveUsingKeyboard(+1, +1); // Up & Right
+			break;
+		case Common::KEYCODE_KP7:
+		case Common::KEYCODE_q:
+			moveUsingKeyboard(-1, +1); // Up & Left
+			break;
+		case Common::KEYCODE_KP1:
+		case Common::KEYCODE_z:
+			moveUsingKeyboard(-1, -1); // Down & Left
+			break;
+		case Common::KEYCODE_KP3:
+		case Common::KEYCODE_c:			
+			moveUsingKeyboard(+1, -1); // Down & Right
+			break;
 		default:
 			lastKeyStroke = event.kbd.keycode;
 			break;
 		}
 		break;
+	case Common::EVENT_KEYUP:
+		switch (event.kbd.keycode) {
+		case Common::KEYCODE_s:		// Emulated left mouse button click
+		case Common::KEYCODE_KP5:	// Emulated left mouse button click
+		case Common::KEYCODE_LEFT:	// Left
+		case Common::KEYCODE_KP4:	// Left
+		case Common::KEYCODE_a:		// Left
+		case Common::KEYCODE_RIGHT: // Right
+		case Common::KEYCODE_KP6:	// Right
+		case Common::KEYCODE_d:		// Right
+		case Common::KEYCODE_UP:	// Up
+		case Common::KEYCODE_KP8:	// Up
+		case Common::KEYCODE_w:		// Up
+		case Common::KEYCODE_DOWN:	// Down
+		case Common::KEYCODE_KP2:	// Down
+		case Common::KEYCODE_x:		// Down
+		case Common::KEYCODE_KP9:	// Up & Right
+		case Common::KEYCODE_e:		// Up & Right
+		case Common::KEYCODE_KP7:	// Up & Left
+		case Common::KEYCODE_q:		// Up & Left
+		case Common::KEYCODE_KP1:	// Down & Left
+		case Common::KEYCODE_z:		// Down & Left
+		case Common::KEYCODE_KP3:	// Down & Right
+		case Common::KEYCODE_c:		// Down & Right
+			// Stop ego movement made with keyboard when releasing a known key
+			moveUsingKeyboard(0, 0);
+			break;
+		default:
+			break;
+		}
 	default:
 		break;
 	}

Modified: scummvm/trunk/engines/cine/various.cpp
===================================================================
--- scummvm/trunk/engines/cine/various.cpp	2008-08-08 10:37:58 UTC (rev 33697)
+++ scummvm/trunk/engines/cine/various.cpp	2008-08-08 13:30:01 UTC (rev 33698)
@@ -95,12 +95,24 @@
 
 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;
+/*! \brief Values used by the xMoveKeyb variable */
+enum xMoveKeybEnums {
+	kKeybMoveCenterX = 0,
+	kKeybMoveRight = 1,
+	kKeybMoveLeft = 2
+};
 
+/*! \brief Values used by the yMoveKeyb variable */
+enum yMoveKeybEnums {
+	kKeybMoveCenterY = 0,
+	kKeybMoveDown = 1,
+	kKeybMoveUp = 2
+};
+
+uint16 xMoveKeyb = kKeybMoveCenterX;
+bool egoMovedWithKeyboard = false;
+uint16 yMoveKeyb = kKeybMoveCenterY;
+
 SelectedObjStruct currentSelectedObject;
 
 static CommandeType currentSaveName[10];
@@ -117,7 +129,32 @@
 uint16 zoneData[NUM_MAX_ZONE];
 uint16 zoneQuery[NUM_MAX_ZONE]; //!< Only exists in Operation Stealth
 
+/*! \brief Move the player character using the keyboard
+ * \param x Negative values move left, positive right, zero not at all
+ * \param y Negative values move down, positive up, zero not at all
+ * NOTE: If both x and y are zero then the character stops
+ * FIXME: This seems to only work in Operation Stealth. May need code changes somewhere else...
+ */
+void moveUsingKeyboard(int x, int y) {
+	if (x > 0) {
+		xMoveKeyb = kKeybMoveRight;
+	} else if (x < 0) {
+		xMoveKeyb = kKeybMoveLeft;
+	} else {
+		xMoveKeyb = kKeybMoveCenterX;
+	}
 
+	if (y > 0) {
+		yMoveKeyb = kKeybMoveUp;
+	} else if (y < 0) {
+		yMoveKeyb = kKeybMoveDown;
+	} else {
+		yMoveKeyb = kKeybMoveCenterY;
+	}
+
+	egoMovedWithKeyboard = x || y;
+}
+
 void stopMusicAfterFadeOut(void) {
 //	if (g_sfxPlayer->_fadeOutCounter != 0 && g_sfxPlayer->_fadeOutCounter < 100) {
 //		g_sfxPlayer->stop();
@@ -1875,8 +1912,8 @@
 		var_2 = 0;
 	}
 
-	if (inputVar1 && allowPlayerInput) {	// use keyboard
-		inputVar1 = 0;
+	if (egoMovedWithKeyboard && allowPlayerInput) {	// use keyboard
+		egoMovedWithKeyboard = false;
 
 		switch (globalVars[VAR_MOUSE_X_MODE]) {
 		case 1:
@@ -1908,8 +1945,8 @@
 			globalVars[VAR_MOUSE_X_POS] = mouseX;
 			globalVars[VAR_MOUSE_Y_POS] = mouseY;
 		} else {
-			if (inputVar2) {
-				if (inputVar2 == 2) {
+			if (xMoveKeyb) {
+				if (xMoveKeyb == kKeybMoveLeft) {
 					globalVars[VAR_MOUSE_X_POS] = 1;
 				} else {
 					globalVars[VAR_MOUSE_X_POS] = 320;
@@ -1918,8 +1955,8 @@
 				globalVars[VAR_MOUSE_X_POS] = mouseX;
 			}
 
-			if (inputVar3) {
-				if (inputVar3 == 2) {
+			if (yMoveKeyb) {
+				if (yMoveKeyb == kKeybMoveUp) {
 					globalVars[VAR_MOUSE_Y_POS] = 1;
 				} else {
 					globalVars[VAR_MOUSE_Y_POS] = 200;
@@ -2357,9 +2394,9 @@
 			}
 			computeMove1(element, ptr1[4] + x, ptr1[5] + y, param1, param2, x2, y2);
 		} else {
-			if (inputVar0 && allowPlayerInput) {
+			if (xMoveKeyb && allowPlayerInput) {
 				int16 adder = param1 + 1;
-				if (inputVar0 != 1) {
+				if (xMoveKeyb != kKeybMoveRight) {
 					adder = -adder;
 				}
 				// FIXME: In Operation Stealth's disassembly global variable 251 is used here
@@ -2368,9 +2405,9 @@
 				globalVars[VAR_MOUSE_X_POS] = globalVars[251] = ptr1[4] + x + adder;
 			}
 
-			if (inputVar1 && allowPlayerInput) {
+			if (yMoveKeyb && allowPlayerInput) {
 				int16 adder = param2 + 1;
-				if (inputVar1 != 1) {
+				if (yMoveKeyb != kKeybMoveDown) {
 					adder = -adder;
 				}
 				// TODO: Name currently unnamed global variable 252

Modified: scummvm/trunk/engines/cine/various.h
===================================================================
--- scummvm/trunk/engines/cine/various.h	2008-08-08 10:37:58 UTC (rev 33697)
+++ scummvm/trunk/engines/cine/various.h	2008-08-08 13:30:01 UTC (rev 33698)
@@ -145,6 +145,7 @@
 void resetGfxEntityEntry(uint16 objIdx);
 
 bool makeTextEntryMenu(const char *caption, char *string, int strLen, int y);
+void moveUsingKeyboard(int x, int y);
 
 } // End of namespace Cine
 


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