aboutsummaryrefslogtreecommitdiff
path: root/engines/mohawk
diff options
context:
space:
mode:
authorBastien Bouclet2010-11-29 21:01:15 +0000
committerBastien Bouclet2010-11-29 21:01:15 +0000
commit3bd40b0d4b322625e9ecbe4ee586ce2f2f7160a7 (patch)
tree35e26e5e6d637c019da3e23ddae09d7ca1b6da73 /engines/mohawk
parent7ee7b9115752f85a47b23e06203cf905b105add0 (diff)
downloadscummvm-rg350-3bd40b0d4b322625e9ecbe4ee586ce2f2f7160a7.tar.gz
scummvm-rg350-3bd40b0d4b322625e9ecbe4ee586ce2f2f7160a7.tar.bz2
scummvm-rg350-3bd40b0d4b322625e9ecbe4ee586ce2f2f7160a7.zip
MOHAWK: Implement selenitic opcode 110 used for the maze runner exit logic.
svn-id: r54638
Diffstat (limited to 'engines/mohawk')
-rw-r--r--engines/mohawk/myst_scripts_selenitic.cpp54
-rw-r--r--engines/mohawk/myst_scripts_selenitic.h5
2 files changed, 18 insertions, 41 deletions
diff --git a/engines/mohawk/myst_scripts_selenitic.cpp b/engines/mohawk/myst_scripts_selenitic.cpp
index 26b22b2226..c448363a13 100644
--- a/engines/mohawk/myst_scripts_selenitic.cpp
+++ b/engines/mohawk/myst_scripts_selenitic.cpp
@@ -42,6 +42,7 @@ namespace Mohawk {
MystScriptParser_Selenitic::MystScriptParser_Selenitic(MohawkEngine_Myst *vm) : MystScriptParser(vm) {
setupOpcodes();
_invokingResource = NULL;
+ _maze_runner_position = 288;
}
MystScriptParser_Selenitic::~MystScriptParser_Selenitic() {
@@ -113,7 +114,7 @@ void MystScriptParser_Selenitic::setupOpcodes() {
SPECIFIC_OPCODE(107, o_105_109_soundReceiverSource),
SPECIFIC_OPCODE(108, o_105_109_soundReceiverSource),
SPECIFIC_OPCODE(109, o_105_109_soundReceiverSource),
- SPECIFIC_OPCODE(110, opcode_110),
+ SPECIFIC_OPCODE(110, o_110_mazeRunnerDoorButton),
SPECIFIC_OPCODE(111, o_111_soundReceiverUpdateSound),
SPECIFIC_OPCODE(112, o_112_soundLockMove),
SPECIFIC_OPCODE(113, o_113_soundLockStartMove),
@@ -514,45 +515,20 @@ void MystScriptParser_Selenitic::o_105_109_soundReceiverSource(uint16 op, uint16
_vm->_cursor->showCursor();
}
-void MystScriptParser_Selenitic::opcode_110(uint16 op, uint16 var, uint16 argc, uint16 *argv) {
- varUnusedCheck(op, var);
+void MystScriptParser_Selenitic::o_110_mazeRunnerDoorButton(uint16 op, uint16 var, uint16 argc, uint16 *argv) {
+ // Used for Selenitic Maze Runner Exit Logic
+ uint16 cardIdExit = argv[0];
+ uint16 cardIdEntry = argv[1];
- if (argc == 15) {
- // Used for Selenitic Maze Runner Exit Logic
- uint16 CardIdEntry = argv[0];
- uint16 CardIdExit = argv[1];
- uint16 u0 = argv[2];
- Common::Rect rect1 = Common::Rect(argv[3], argv[4], argv[5], argv[6]);
- uint16 rect1UpdateDirection = argv[7];
- uint16 u1 = argv[8];
- Common::Rect rect2 = Common::Rect(argv[9], argv[10], argv[11], argv[12]);
- uint16 rect2UpdateDirection = argv[13];
- uint16 u2 = argv[14];
-
- debugC(kDebugScript, "Opcode %d: Maze Runner Exit Logic and Door Open Animation", op);
- debugC(kDebugScript, "\tExit Card: %d", CardIdEntry);
- debugC(kDebugScript, "\tEntry Card: %d", CardIdExit);
- debugC(kDebugScript, "\tu0 (Exit Var?): %d", u0);
-
- debugC(kDebugScript, "\trect1.left: %d", rect1.left);
- debugC(kDebugScript, "\trect1.top: %d", rect1.top);
- debugC(kDebugScript, "\trect1.right: %d", rect1.right);
- debugC(kDebugScript, "\trect1.bottom: %d", rect1.bottom);
- debugC(kDebugScript, "\trect1 updateDirection: %d", rect1UpdateDirection);
- debugC(kDebugScript, "\tu1: %d", u1);
-
- debugC(kDebugScript, "\trect2.left: %d", rect2.left);
- debugC(kDebugScript, "\trect2.top: %d", rect2.top);
- debugC(kDebugScript, "\trect2.right: %d", rect2.right);
- debugC(kDebugScript, "\trect2.bottom: %d", rect2.bottom);
- debugC(kDebugScript, "\trect2 updateDirection: %d", rect2UpdateDirection);
- debugC(kDebugScript, "\tu2: %d", u2);
-
- // TODO: Finish Implementing Logic...
- // HACK: Bypass Higher Logic for now...
- _vm->changeToCard(argv[1], true);
- } else
- unknown(op, var, argc, argv);
+ if (_maze_runner_position == 288) {
+ _vm->changeToCard(cardIdEntry, false);
+ _vm->_sound->playSound(cardIdEntry);
+ animatedUpdate(argv[2], &argv[3], 10);
+ } else if (_maze_runner_position == 289) {
+ _vm->changeToCard(cardIdExit, false);
+ _vm->_sound->playSound(cardIdExit);
+ animatedUpdate(argv[2], &argv[3], 10);
+ }
}
void MystScriptParser_Selenitic::o_111_soundReceiverUpdateSound(uint16 op, uint16 var, uint16 argc, uint16 *argv) {
diff --git a/engines/mohawk/myst_scripts_selenitic.h b/engines/mohawk/myst_scripts_selenitic.h
index 21ae923638..2a62b1fcf6 100644
--- a/engines/mohawk/myst_scripts_selenitic.h
+++ b/engines/mohawk/myst_scripts_selenitic.h
@@ -58,7 +58,7 @@ private:
DECLARE_OPCODE(o_103_soundReceiverRight);
DECLARE_OPCODE(o_104_soundReceiverLeft);
DECLARE_OPCODE(o_105_109_soundReceiverSource);
- DECLARE_OPCODE(opcode_110);
+ DECLARE_OPCODE(o_110_mazeRunnerDoorButton);
DECLARE_OPCODE(o_111_soundReceiverUpdateSound);
DECLARE_OPCODE(o_112_soundLockMove);
DECLARE_OPCODE(o_113_soundLockStartMove);
@@ -93,7 +93,8 @@ private:
MystResourceType8 *_sound_receiver_angle_4; // 152
MystResourceType8 *_sound_receiver_sigma_button; // 156
- bool _maze_runner_door_opened; //160
+ bool _maze_runner_door_opened; // 160
+ uint16 _maze_runner_position; // 56
uint16 _sound_lock_sound_id;
MystResourceType10 *_sound_lock_slider_1; // 164