diff options
author | Bastien Bouclet | 2010-11-29 20:57:27 +0000 |
---|---|---|
committer | Bastien Bouclet | 2010-11-29 20:57:27 +0000 |
commit | 359cece3b745e668316c4b36f4aa851d17a0465d (patch) | |
tree | caa5279488a83f58cc843993e6906d0f22d81b7b /engines | |
parent | d3289529eb329fe3d97ae61bca52e279655121fa (diff) | |
download | scummvm-rg350-359cece3b745e668316c4b36f4aa851d17a0465d.tar.gz scummvm-rg350-359cece3b745e668316c4b36f4aa851d17a0465d.tar.bz2 scummvm-rg350-359cece3b745e668316c4b36f4aa851d17a0465d.zip |
MOHAWK: Implement opcode 3 "take / drop page", and the corresponding getters and setters for selenitic
svn-id: r54623
Diffstat (limited to 'engines')
-rw-r--r-- | engines/mohawk/myst_scripts.cpp | 36 | ||||
-rw-r--r-- | engines/mohawk/myst_scripts.h | 2 | ||||
-rw-r--r-- | engines/mohawk/myst_scripts_myst.cpp | 2 | ||||
-rw-r--r-- | engines/mohawk/myst_scripts_selenitic.cpp | 28 |
4 files changed, 49 insertions, 19 deletions
diff --git a/engines/mohawk/myst_scripts.cpp b/engines/mohawk/myst_scripts.cpp index d20b7e9dd7..e4af5a325f 100644 --- a/engines/mohawk/myst_scripts.cpp +++ b/engines/mohawk/myst_scripts.cpp @@ -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 @@ void MystScriptParser::setupOpcodes() { 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 @@ void MystScriptParser::o_2_changeCardSwitch(uint16 op, uint16 var, uint16 argc, 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) { diff --git a/engines/mohawk/myst_scripts.h b/engines/mohawk/myst_scripts.h index ce93c8fd4e..124c626d34 100644 --- a/engines/mohawk/myst_scripts.h +++ b/engines/mohawk/myst_scripts.h @@ -81,7 +81,7 @@ public: 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); diff --git a/engines/mohawk/myst_scripts_myst.cpp b/engines/mohawk/myst_scripts_myst.cpp index 6ea2e888d8..3ba03718b3 100644 --- a/engines/mohawk/myst_scripts_myst.cpp +++ b/engines/mohawk/myst_scripts_myst.cpp @@ -56,7 +56,7 @@ void MystScriptParser_Myst::setupOpcodes() { 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), diff --git a/engines/mohawk/myst_scripts_selenitic.cpp b/engines/mohawk/myst_scripts_selenitic.cpp index be541f67a5..eaa5eb22dd 100644 --- a/engines/mohawk/myst_scripts_selenitic.cpp +++ b/engines/mohawk/myst_scripts_selenitic.cpp @@ -56,7 +56,7 @@ void MystScriptParser_Selenitic::setupOpcodes() { 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 @@ void MystScriptParser_Selenitic::runPersistentOpcodes() { } 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 @@ uint16 MystScriptParser_Selenitic::getVar(uint16 var) { 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 @@ void MystScriptParser_Selenitic::toggleVar(uint16 var) { 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; |