diff options
author | Bastien Bouclet | 2011-01-22 12:15:42 +0000 |
---|---|---|
committer | Bastien Bouclet | 2011-01-22 12:15:42 +0000 |
commit | 477ae820fbccfe767b8d747d3441c45729f3aa94 (patch) | |
tree | 8930401c2ac31604da43f5d4cecf86b44ab52824 | |
parent | 1d8272044708ba593525239c0ef483f2d875ea48 (diff) | |
download | scummvm-rg350-477ae820fbccfe767b8d747d3441c45729f3aa94.tar.gz scummvm-rg350-477ae820fbccfe767b8d747d3441c45729f3aa94.tar.bz2 scummvm-rg350-477ae820fbccfe767b8d747d3441c45729f3aa94.zip |
MOHAWK: Implement Channelwood opcodes 106 and 109: Stair door switch
svn-id: r55420
-rw-r--r-- | engines/mohawk/myst_stacks/channelwood.cpp | 39 | ||||
-rw-r--r-- | engines/mohawk/myst_stacks/channelwood.h | 4 |
2 files changed, 39 insertions, 4 deletions
diff --git a/engines/mohawk/myst_stacks/channelwood.cpp b/engines/mohawk/myst_stacks/channelwood.cpp index d7c72fe115..2c52f8ca9e 100644 --- a/engines/mohawk/myst_stacks/channelwood.cpp +++ b/engines/mohawk/myst_stacks/channelwood.cpp @@ -53,8 +53,10 @@ void MystScriptParser_Channelwood::setupOpcodes() { OPCODE(102, opcode_102); OPCODE(104, o_waterTankValveOpen); OPCODE(105, o_leverStartMove); + OPCODE(106, o_leverEndMove); OPCODE(107, o_leverMoveFail); OPCODE(108, o_leverMove); + OPCODE(109, o_stairsDoorToggle); OPCODE(110, o_valveHandleMove1); OPCODE(111, o_valveHandleMoveStart1); OPCODE(112, o_valveHandleMoveStop); @@ -69,7 +71,7 @@ void MystScriptParser_Channelwood::setupOpcodes() { OPCODE(123, o_executeMouseUp); OPCODE(124, o_leverEndMoveWithSound); OPCODE(127, o_elevatorMovies); - OPCODE(128, o_leverEndMove); + OPCODE(128, o_leverEndMoveResumeBackground); OPCODE(129, o_soundReplace); // "Init" Opcodes @@ -152,9 +154,8 @@ uint16 MystScriptParser_Channelwood::getVar(uint16 var) { return ((_state.waterValveStates & 0xe2) == 0x82) ? 1 : 0; case 29: // Sound - Left Third Water Valve Flowing To Left (To Pipe In Water) return ((_state.waterValveStates & 0xe2) == 0x80) ? 1 : 0; -// case 30: // Temple Door State -// return 0; -// return 1; + case 30: // Door State + return _doorOpened; case 32: // Sound - Water Flowing in Pipe to Book Room Elevator return ((_state.waterValveStates & 0xf8) == 0xb0 && _state.pipeState) ? 1 : 0; // case 102: // Sirrus's Desk Drawer / Red Page State @@ -177,6 +178,9 @@ void MystScriptParser_Channelwood::toggleVar(uint16 var) { case 6: // Pipe Bridge Extended _state.pipeState ^= 1; break; + case 16: // Channelwood Lower Walkway to Upper Walkway Spiral Stair Upper Door State + _state.stairsUpperDoorState ^= 1; + break; default: MystScriptParser::toggleVar(var); break; @@ -187,6 +191,12 @@ bool MystScriptParser_Channelwood::setVarValue(uint16 var, uint16 value) { bool refresh = false; switch (var) { + case 2: // Lower Walkway to Upper Walkway Elevator Raised + if (_state.elevatorState != value) { + _state.elevatorState = value; + refresh = true; + } + break; case 9: refresh = pipeChangeValve(value, 0x40); break; @@ -207,6 +217,9 @@ bool MystScriptParser_Channelwood::setVarValue(uint16 var, uint16 value) { break; // case 18: // Sirrus's Room Bed Drawer Open // temp ^= 1; + case 30: // Door opened + _doorOpened = value; + break; default: refresh = MystScriptParser::setVarValue(var, value); break; @@ -383,6 +396,11 @@ void MystScriptParser_Channelwood::o_leverEndMove(uint16 op, uint16 var, uint16 _vm->checkCursorHints(); } +void MystScriptParser_Channelwood::o_leverEndMoveResumeBackground(uint16 op, uint16 var, uint16 argc, uint16 *argv) { + _vm->_sound->resumeBackgroundMyst(); + o_leverEndMove(op, var, argc, argv); +} + void MystScriptParser_Channelwood::o_leverEndMoveWithSound(uint16 op, uint16 var, uint16 argc, uint16 *argv) { o_leverEndMove(op, var, argc, argv); @@ -392,6 +410,19 @@ void MystScriptParser_Channelwood::o_leverEndMoveWithSound(uint16 op, uint16 var _vm->_sound->replaceSoundMyst(soundId); } +void MystScriptParser_Channelwood::o_stairsDoorToggle(uint16 op, uint16 var, uint16 argc, uint16 *argv) { + debugC(kDebugScript, "Opcode %d: Play stairs door video", op); + + MystResourceType6 *movie = static_cast<MystResourceType6 *>(_invokingResource); + + if (_state.stairsUpperDoorState) { + // TODO: Play backwards + movie->playMovie(); + } else { + movie->playMovie(); + } +} + void MystScriptParser_Channelwood::o_valveHandleMove1(uint16 op, uint16 var, uint16 argc, uint16 *argv) { debugC(kDebugScript, "Opcode %d: Valve handle move", op); diff --git a/engines/mohawk/myst_stacks/channelwood.h b/engines/mohawk/myst_stacks/channelwood.h index 61c6c36c42..1863fcf4c9 100644 --- a/engines/mohawk/myst_stacks/channelwood.h +++ b/engines/mohawk/myst_stacks/channelwood.h @@ -62,7 +62,9 @@ private: DECLARE_OPCODE(o_leverMove); DECLARE_OPCODE(o_leverMoveFail); DECLARE_OPCODE(o_leverEndMove); + DECLARE_OPCODE(o_leverEndMoveResumeBackground); DECLARE_OPCODE(o_leverEndMoveWithSound); + DECLARE_OPCODE(o_stairsDoorToggle); DECLARE_OPCODE(o_valveHandleMove1); DECLARE_OPCODE(o_valveHandleMoveStart1); DECLARE_OPCODE(o_valveHandleMoveStop); @@ -88,6 +90,8 @@ private: uint16 _valveVar; // 64 + uint16 _doorOpened; // 68 + bool _leverPulled; MystResourceType5 *_leverAction; // 72 |