[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