[Scummvm-cvs-logs] SF.net SVN: scummvm:[54623] scummvm/trunk/engines/mohawk

bgk at users.sourceforge.net bgk at users.sourceforge.net
Mon Nov 29 21:57:27 CET 2010


Revision: 54623
          http://scummvm.svn.sourceforge.net/scummvm/?rev=54623&view=rev
Author:   bgk
Date:     2010-11-29 20:57:27 +0000 (Mon, 29 Nov 2010)

Log Message:
-----------
MOHAWK: Implement opcode 3 "take / drop page", and the corresponding getters and setters for selenitic

Modified Paths:
--------------
    scummvm/trunk/engines/mohawk/myst_scripts.cpp
    scummvm/trunk/engines/mohawk/myst_scripts.h
    scummvm/trunk/engines/mohawk/myst_scripts_myst.cpp
    scummvm/trunk/engines/mohawk/myst_scripts_selenitic.cpp

Modified: scummvm/trunk/engines/mohawk/myst_scripts.cpp
===================================================================
--- scummvm/trunk/engines/mohawk/myst_scripts.cpp	2010-11-29 20:57:11 UTC (rev 54622)
+++ scummvm/trunk/engines/mohawk/myst_scripts.cpp	2010-11-29 20:57:27 UTC (rev 54623)
@@ -27,6 +27,7 @@
 #include "mohawk/myst.h"
 #include "mohawk/graphics.h"
 #include "mohawk/myst_areas.h"
+#include "mohawk/myst_saveload.h"
 #include "mohawk/myst_scripts.h"
 #include "mohawk/sound.h"
 #include "mohawk/video.h"
@@ -93,7 +94,7 @@
 		OPCODE(0, o_0_toggleVar),
 		OPCODE(1, o_1_setVar),
 		OPCODE(2, o_2_changeCardSwitch),
-		OPCODE(3, takePage),
+		OPCODE(3, o_3_takePage),
 		OPCODE(4, o_4_redrawCard),
 		// Opcode 5 Not Present
 		OPCODE(6, o_6_goToDest),
@@ -284,26 +285,29 @@
 		warning("Missing invokingResource in altDest call");
 }
 
-void MystScriptParser::takePage(uint16 op, uint16 var, uint16 argc, uint16 *argv) {
-	if (argc == 1) {
-		uint16 cursorId = argv[0];
+void MystScriptParser::o_3_takePage(uint16 op, uint16 var, uint16 argc, uint16 *argv) {
+	uint16 *game_globals = _vm->_saveLoad->_v->game_globals;
 
-		debugC(kDebugScript, "Opcode %d: takePage Var %d CursorId %d", op, var, cursorId);
+	uint16 cursorId = argv[0];
+	uint16 oldPage = game_globals[2];
 
-		if (getVar(var)) {
-			_vm->setMainCursor(cursorId);
+	debugC(kDebugScript, "Opcode %d: takePage Var %d CursorId %d", op, var, cursorId);
 
-			setVarValue(var, 0);
+	// Take / drop page
+	toggleVar(var);
 
-			// Return pages that are already held
-			if (var == 102)
-				setVarValue(103, 1);
+	if (oldPage != game_globals[2]) {
+		_vm->_gfx->hideCursor();
+		_vm->redrawArea(var);
 
-			if (var == 103)
-				setVarValue(102, 1);
-		}
-	} else
-		unknown(op, var, argc, argv);
+		// Set new cursor
+		if (game_globals[2])
+			_vm->setMainCursor(cursorId);
+		else
+			_vm->setMainCursor(kDefaultMystCursor);
+
+		_vm->_gfx->showCursor();
+	}
 }
 
 void MystScriptParser::o_4_redrawCard(uint16 op, uint16 var, uint16 argc, uint16 *argv) {

Modified: scummvm/trunk/engines/mohawk/myst_scripts.h
===================================================================
--- scummvm/trunk/engines/mohawk/myst_scripts.h	2010-11-29 20:57:11 UTC (rev 54622)
+++ scummvm/trunk/engines/mohawk/myst_scripts.h	2010-11-29 20:57:27 UTC (rev 54623)
@@ -81,7 +81,7 @@
 	DECLARE_OPCODE(o_0_toggleVar);
 	DECLARE_OPCODE(o_1_setVar);
 	DECLARE_OPCODE(o_2_changeCardSwitch);
-	DECLARE_OPCODE(takePage);
+	DECLARE_OPCODE(o_3_takePage);
 	DECLARE_OPCODE(o_4_redrawCard);
 	DECLARE_OPCODE(o_6_goToDest);
 	DECLARE_OPCODE(o_9_triggerMovie);

Modified: scummvm/trunk/engines/mohawk/myst_scripts_myst.cpp
===================================================================
--- scummvm/trunk/engines/mohawk/myst_scripts_myst.cpp	2010-11-29 20:57:11 UTC (rev 54622)
+++ scummvm/trunk/engines/mohawk/myst_scripts_myst.cpp	2010-11-29 20:57:27 UTC (rev 54623)
@@ -56,7 +56,7 @@
 		OPCODE(0, o_0_toggleVar),
 		OPCODE(1, o_1_setVar),
 		OPCODE(2, o_2_changeCardSwitch),
-		OPCODE(3, takePage),
+		OPCODE(3, o_3_takePage),
 		OPCODE(4, o_4_redrawCard),
 		// TODO: Opcode 5 Not Present
 		OPCODE(6, o_6_goToDest),

Modified: scummvm/trunk/engines/mohawk/myst_scripts_selenitic.cpp
===================================================================
--- scummvm/trunk/engines/mohawk/myst_scripts_selenitic.cpp	2010-11-29 20:57:11 UTC (rev 54622)
+++ scummvm/trunk/engines/mohawk/myst_scripts_selenitic.cpp	2010-11-29 20:57:27 UTC (rev 54623)
@@ -56,7 +56,7 @@
 		OPCODE(0, o_0_toggleVar),
 		OPCODE(1, o_1_setVar),
 		OPCODE(2, o_2_changeCardSwitch),
-		OPCODE(3, takePage),
+		OPCODE(3, o_3_takePage),
 		OPCODE(4, o_4_redrawCard),
 		// TODO: Opcode 5 Not Present
 		OPCODE(6, o_6_goToDest),
@@ -147,6 +147,7 @@
 }
 
 uint16 MystScriptParser_Selenitic::getVar(uint16 var) {
+	uint16 *game_globals = _vm->_saveLoad->_v->game_globals;
 	uint16 *selenitic_vars = _vm->_saveLoad->_v->selenitic_vars;
 
 	switch(var) {
@@ -197,12 +198,17 @@
 		return 0;
 	case 30:
 		return _maze_runner_door_opened;
+	case 102: // Red page
+		return !(game_globals[6] & 2) && (game_globals[2] != 8);
+	case 103: // Blue page
+		return !(game_globals[7] & 2) && (game_globals[2] != 2);
 	default:
 		return MystScriptParser::getVar(var);
 	}
 }
 
 void MystScriptParser_Selenitic::toggleVar(uint16 var) {
+	uint16 *game_globals = _vm->_saveLoad->_v->game_globals;
 	uint16 *selenitic_vars = _vm->_saveLoad->_v->selenitic_vars;
 
 	switch(var) {
@@ -227,6 +233,26 @@
 	case 6: // Tunnel lights
 		selenitic_vars[6] = (selenitic_vars[6] + 1) % 2;
     	break;
+	case 102: // Red page
+        if (!(game_globals[6] & 2)) {
+			if (game_globals[2] == 8)
+				game_globals[2] = 0;
+			else {
+				//TODO: Cursor animation
+				game_globals[2] = 8;
+			}
+		}
+		break;
+	case 103: // Blue page
+        if (!(game_globals[7] & 2)) {
+			if (game_globals[2] == 2)
+				game_globals[2] = 0;
+			else {
+				//TODO: Cursor animation
+				game_globals[2] = 2;
+			}
+		}
+		break;
 	default:
 		MystScriptParser::toggleVar(var);
 		break;


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