mirror of
https://github.com/libretro/scummvm.git
synced 2025-05-13 09:36:21 +00:00
MOHAWK: Split channelwood opcodes into their own class
svn-id: r54691
This commit is contained in:
parent
94801fcea3
commit
261cf23901
@ -23,6 +23,7 @@ MODULE_OBJS = \
|
||||
riven_vars.o \
|
||||
sound.o \
|
||||
video.o \
|
||||
myst_stacks/channelwood.o \
|
||||
myst_stacks/credits.o \
|
||||
myst_stacks/myst.o \
|
||||
myst_stacks/selenitic.o \
|
||||
|
@ -39,6 +39,7 @@
|
||||
#include "mohawk/video.h"
|
||||
|
||||
// The stacks
|
||||
#include "mohawk/myst_stacks/channelwood.h"
|
||||
#include "mohawk/myst_stacks/credits.h"
|
||||
#include "mohawk/myst_stacks/myst.h"
|
||||
#include "mohawk/myst_stacks/selenitic.h"
|
||||
@ -377,6 +378,9 @@ void MohawkEngine_Myst::changeToStack(uint16 stack) {
|
||||
_prevStack = _scriptParser;
|
||||
|
||||
switch (_curStack) {
|
||||
case kChannelwoodStack:
|
||||
_scriptParser = new MystScriptParser_Channelwood(this);
|
||||
break;
|
||||
case kCreditsStack:
|
||||
_scriptParser = new MystScriptParser_Credits(this);
|
||||
break;
|
||||
|
556
engines/mohawk/myst_stacks/channelwood.cpp
Normal file
556
engines/mohawk/myst_stacks/channelwood.cpp
Normal file
@ -0,0 +1,556 @@
|
||||
/* ScummVM - Graphic Adventure Engine
|
||||
*
|
||||
* ScummVM is the legal property of its developers, whose names
|
||||
* are too numerous to list here. Please refer to the COPYRIGHT
|
||||
* file distributed with this source distribution.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version 2
|
||||
* of the License, or (at your option) any later version.
|
||||
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*
|
||||
* $URL$
|
||||
* $Id$
|
||||
*
|
||||
*/
|
||||
|
||||
#include "mohawk/myst.h"
|
||||
#include "mohawk/graphics.h"
|
||||
#include "mohawk/myst_areas.h"
|
||||
#include "mohawk/sound.h"
|
||||
#include "mohawk/video.h"
|
||||
#include "mohawk/myst_stacks/channelwood.h"
|
||||
|
||||
#include "gui/message.h"
|
||||
|
||||
namespace Mohawk {
|
||||
|
||||
// NOTE: Credits Start Card is 10000
|
||||
|
||||
#define OPCODE(op, x) { op, &MystScriptParser::x, #x }
|
||||
#define SPECIFIC_OPCODE(op, x) { op, (OpcodeProcMyst) &MystScriptParser_Channelwood::x, #x }
|
||||
|
||||
MystScriptParser_Channelwood::MystScriptParser_Channelwood(MohawkEngine_Myst *vm) : MystScriptParser(vm) {
|
||||
setupOpcodes();
|
||||
}
|
||||
|
||||
MystScriptParser_Channelwood::~MystScriptParser_Channelwood() {
|
||||
}
|
||||
|
||||
void MystScriptParser_Channelwood::setupOpcodes() {
|
||||
// "invalid" opcodes do not exist or have not been observed
|
||||
// "unknown" opcodes exist, but their meaning is unknown
|
||||
|
||||
static const MystOpcode channelwoodOpcodes[] = {
|
||||
// "Standard" Opcodes
|
||||
OPCODE(0, o_toggleVar),
|
||||
OPCODE(1, o_setVar),
|
||||
OPCODE(2, o_changeCardSwitch),
|
||||
OPCODE(3, o_takePage),
|
||||
OPCODE(4, o_redrawCard),
|
||||
// TODO: Opcode 5 Not Present
|
||||
OPCODE(6, o_goToDest),
|
||||
OPCODE(7, o_goToDest),
|
||||
OPCODE(8, o_goToDest),
|
||||
OPCODE(9, o_triggerMovie),
|
||||
OPCODE(10, o_toggleVarNoRedraw),
|
||||
// TODO: Opcode 10 to 11 Not Present
|
||||
OPCODE(12, o_changeCardSwitch),
|
||||
OPCODE(13, o_changeCardSwitch),
|
||||
OPCODE(14, o_drawAreaState),
|
||||
OPCODE(15, o_redrawAreaForVar),
|
||||
OPCODE(16, o_changeCardDirectional),
|
||||
OPCODE(17, o_changeCardPush),
|
||||
OPCODE(18, o_changeCardPop),
|
||||
OPCODE(19, o_enableAreas),
|
||||
OPCODE(20, o_disableAreas),
|
||||
OPCODE(21, o_directionalUpdate),
|
||||
OPCODE(22, o_goToDest),
|
||||
OPCODE(23, o_toggleAreasActivation),
|
||||
OPCODE(24, o_playSound),
|
||||
// TODO: Opcode 25 Not Present
|
||||
OPCODE(26, o_stopSoundBackground),
|
||||
OPCODE(27, o_playSoundBlocking),
|
||||
OPCODE(28, o_restoreDefaultRect),
|
||||
OPCODE(29, o_blitRect),
|
||||
OPCODE(30, o_changeSound),
|
||||
OPCODE(31, o_soundPlaySwitch),
|
||||
OPCODE(32, o_soundResumeBackground),
|
||||
OPCODE(33, o_blitRect),
|
||||
OPCODE(34, o_changeCard),
|
||||
OPCODE(35, o_drawImageChangeCard),
|
||||
OPCODE(36, o_changeMainCursor),
|
||||
OPCODE(37, o_hideCursor),
|
||||
OPCODE(38, o_showCursor),
|
||||
OPCODE(39, o_delay),
|
||||
OPCODE(40, o_changeStack),
|
||||
OPCODE(41, o_changeCardPlaySoundDirectional),
|
||||
OPCODE(42, o_directionalUpdatePlaySound),
|
||||
OPCODE(43, o_saveMainCursor),
|
||||
OPCODE(44, o_restoreMainCursor),
|
||||
// TODO: Opcode 45 Not Present
|
||||
OPCODE(46, o_soundWaitStop),
|
||||
// TODO: Opcodes 47 to 99 Not Present
|
||||
|
||||
// "Stack-Specific" Opcodes
|
||||
SPECIFIC_OPCODE(101, opcode_101),
|
||||
SPECIFIC_OPCODE(102, opcode_102),
|
||||
SPECIFIC_OPCODE(104, opcode_104),
|
||||
SPECIFIC_OPCODE(117, opcode_117),
|
||||
SPECIFIC_OPCODE(118, opcode_118),
|
||||
SPECIFIC_OPCODE(119, opcode_119),
|
||||
SPECIFIC_OPCODE(122, opcode_122),
|
||||
SPECIFIC_OPCODE(127, opcode_127),
|
||||
SPECIFIC_OPCODE(129, opcode_129),
|
||||
|
||||
// "Init" Opcodes
|
||||
SPECIFIC_OPCODE(201, opcode_201),
|
||||
SPECIFIC_OPCODE(202, opcode_202),
|
||||
SPECIFIC_OPCODE(203, opcode_203),
|
||||
|
||||
// "Exit" Opcodes
|
||||
SPECIFIC_OPCODE(300, opcode_300),
|
||||
|
||||
OPCODE(0xFFFF, NOP)
|
||||
};
|
||||
|
||||
_opcodes = channelwoodOpcodes;
|
||||
_opcodeCount = ARRAYSIZE(channelwoodOpcodes);
|
||||
}
|
||||
|
||||
void MystScriptParser_Channelwood::disablePersistentScripts() {
|
||||
opcode_202_disable();
|
||||
opcode_203_disable();
|
||||
}
|
||||
|
||||
void MystScriptParser_Channelwood::runPersistentScripts() {
|
||||
opcode_202_run();
|
||||
opcode_203_run();
|
||||
}
|
||||
|
||||
void MystScriptParser_Channelwood::opcode_101(uint16 op, uint16 var, uint16 argc, uint16 *argv) {
|
||||
varUnusedCheck(op, var);
|
||||
|
||||
if (argc == 1) {
|
||||
debugC(kDebugScript, "Opcode %d: Play Pipe Movie and Sound", op);
|
||||
|
||||
uint16 soundId = argv[0];
|
||||
debugC(kDebugScript, "\tsoundId: %d", soundId);
|
||||
|
||||
_vm->_sound->playSound(soundId);
|
||||
|
||||
// TODO: Get Movie Location from Invoking Resource Rect, rather than
|
||||
// hardcoded 267, 170 ?
|
||||
|
||||
// TODO: Need version of playMovie blocking which allows selection
|
||||
// of start and finish points.
|
||||
if (!_vm->_varStore->getVar(6)) {
|
||||
// Play Pipe Extending i.e. 0 to 1/2 way through file
|
||||
_vm->_video->playMovie(_vm->wrapMovieFilename("pipebrid", kChannelwoodStack), 267, 170);
|
||||
} else {
|
||||
// Play Pipe Retracting i.e. 1/2 way to end of file
|
||||
_vm->_video->playMovie(_vm->wrapMovieFilename("pipebrid", kChannelwoodStack), 267, 170);
|
||||
}
|
||||
} else
|
||||
unknown(op, var, argc, argv);
|
||||
}
|
||||
|
||||
void MystScriptParser_Channelwood::opcode_102(uint16 op, uint16 var, uint16 argc, uint16 *argv) {
|
||||
varUnusedCheck(op, var);
|
||||
|
||||
if (argc == 2 || argc == 3) {
|
||||
debugC(kDebugScript, "Opcode %d: Draw Full Screen Image, Optional Delay and Change Card", op);
|
||||
|
||||
uint16 imageId = argv[0];
|
||||
uint16 cardId = argv[1];
|
||||
uint16 delay = 0;
|
||||
|
||||
if (argc == 3)
|
||||
delay = argv[2]; // TODO: Not sure about purpose of this parameter...
|
||||
|
||||
debugC(kDebugScript, "\timageId: %d", imageId);
|
||||
debugC(kDebugScript, "\tcardId: %d", cardId);
|
||||
debugC(kDebugScript, "\tdelay: %d", delay);
|
||||
|
||||
_vm->_gfx->copyImageToScreen(imageId, Common::Rect(0, 0, 544, 333));
|
||||
_vm->_system->delayMillis(delay / 100);
|
||||
_vm->changeToCard(cardId, true);
|
||||
} else
|
||||
unknown(op, var, argc, argv);
|
||||
}
|
||||
|
||||
|
||||
void MystScriptParser_Channelwood::opcode_104(uint16 op, uint16 var, uint16 argc, uint16 *argv) {
|
||||
varUnusedCheck(op, var);
|
||||
|
||||
// Used on Channelwood Card 3280
|
||||
if (argc == 0) {
|
||||
debugC(kDebugScript, "Opcode %d: Do Water Tank Valve Open Animation", op);
|
||||
Common::Rect rect = _invokingResource->getRect();
|
||||
|
||||
// TODO: Need to load the image ids from Script Resources structure of VIEW
|
||||
for (uint16 imageId = 3595; imageId <= 3601; imageId++) {
|
||||
_vm->_gfx->copyImageToScreen(imageId, rect);
|
||||
_vm->_system->delayMillis(50);
|
||||
}
|
||||
|
||||
// TODO: Is 8 gotten from var7 of calling hotspot, rather than hardcoded?
|
||||
_vm->_varStore->setVar(8, 1);
|
||||
_vm->_varStore->setVar(19, 1);
|
||||
} else
|
||||
unknown(op, var, argc, argv);
|
||||
}
|
||||
|
||||
void MystScriptParser_Channelwood::opcode_117(uint16 op, uint16 var, uint16 argc, uint16 *argv) {
|
||||
varUnusedCheck(op, var);
|
||||
|
||||
if (argc == 1) {
|
||||
// Used on Card 3012 (Temple Hologram Monitor)
|
||||
uint16 button = argv[0]; // 0 to 3
|
||||
_vm->_varStore->setVar(17, button);
|
||||
|
||||
switch (button) {
|
||||
case 0:
|
||||
_vm->_video->playMovie(_vm->wrapMovieFilename("monalgh", kChannelwoodStack), 227, 71);
|
||||
break;
|
||||
case 1:
|
||||
_vm->_video->playMovie(_vm->wrapMovieFilename("monamth", kChannelwoodStack), 227, 71);
|
||||
break;
|
||||
case 2:
|
||||
_vm->_video->playMovie(_vm->wrapMovieFilename("monasirs", kChannelwoodStack), 227, 71);
|
||||
break;
|
||||
case 3:
|
||||
_vm->_video->playMovie(_vm->wrapMovieFilename("monsmsg", kChannelwoodStack), 227, 71);
|
||||
break;
|
||||
default:
|
||||
warning("Opcode %d Control Variable Out of Range", op);
|
||||
break;
|
||||
}
|
||||
} else
|
||||
unknown(op, var, argc, argv);
|
||||
}
|
||||
|
||||
void MystScriptParser_Channelwood::opcode_118(uint16 op, uint16 var, uint16 argc, uint16 *argv) {
|
||||
varUnusedCheck(op, var);
|
||||
|
||||
if (argc == 0) {
|
||||
// Used on Card 3318 (Sirrus' Room Nightstand Drawer)
|
||||
// Triggered when clicked on drawer
|
||||
// TODO: Implement function...
|
||||
} else
|
||||
unknown(op, var, argc, argv);
|
||||
}
|
||||
|
||||
void MystScriptParser_Channelwood::opcode_119(uint16 op, uint16 var, uint16 argc, uint16 *argv) {
|
||||
varUnusedCheck(op, var);
|
||||
|
||||
if (argc == 0) {
|
||||
// Used on Card 3333 (Temple Hologram)
|
||||
// TODO: Not 100% sure about movie position...
|
||||
switch (_vm->_varStore->getVar(17)) {
|
||||
case 0:
|
||||
_vm->_video->playMovie(_vm->wrapMovieFilename("holoalgh", kChannelwoodStack), 126, 74);
|
||||
break;
|
||||
case 1:
|
||||
_vm->_video->playMovie(_vm->wrapMovieFilename("holoamth", kChannelwoodStack), 126, 74);
|
||||
break;
|
||||
case 2:
|
||||
_vm->_video->playMovie(_vm->wrapMovieFilename("holoasir", kChannelwoodStack), 126, 74);
|
||||
break;
|
||||
case 3:
|
||||
_vm->_video->playMovie(_vm->wrapMovieFilename("holosmsg", kChannelwoodStack), 126, 74);
|
||||
break;
|
||||
default:
|
||||
warning("Opcode %d Control Variable Out of Range", op);
|
||||
break;
|
||||
}
|
||||
} else
|
||||
unknown(op, var, argc, argv);
|
||||
}
|
||||
|
||||
void MystScriptParser_Channelwood::opcode_122(uint16 op, uint16 var, uint16 argc, uint16 *argv) {
|
||||
varUnusedCheck(op, var);
|
||||
|
||||
// Used on Channelwood Card 3280
|
||||
if (argc == 0) {
|
||||
debugC(kDebugScript, "Opcode %d: Do Water Tank Valve Close Animation", op);
|
||||
Common::Rect rect = _invokingResource->getRect();
|
||||
|
||||
// TODO: Need to load the image ids from Script Resources structure of VIEW
|
||||
for (uint16 imageId = 3601; imageId >= 3595; imageId--) {
|
||||
_vm->_gfx->copyImageToScreen(imageId, rect);
|
||||
_vm->_system->delayMillis(50);
|
||||
}
|
||||
|
||||
// TODO: Is 8 gotten from var7 of calling hotspot, rather than hard-coded?
|
||||
_vm->_varStore->setVar(8, 0);
|
||||
_vm->_varStore->setVar(19, 0);
|
||||
} else
|
||||
unknown(op, var, argc, argv);
|
||||
}
|
||||
|
||||
void MystScriptParser_Channelwood::opcode_127(uint16 op, uint16 var, uint16 argc, uint16 *argv) {
|
||||
varUnusedCheck(op, var);
|
||||
|
||||
if (argc == 2) {
|
||||
// Used by Card 3262 (Elevator)
|
||||
debugC(kDebugScript, "Opcode %d: Unknown...", op);
|
||||
|
||||
uint16 u0 = argv[0];
|
||||
uint16 u1 = argv[1];
|
||||
|
||||
debugC(kDebugScript, "\tu0: %d", u0);
|
||||
debugC(kDebugScript, "\tu1: %d", u1);
|
||||
|
||||
// TODO: Fill in Code...
|
||||
} else
|
||||
unknown(op, var, argc, argv);
|
||||
}
|
||||
|
||||
void MystScriptParser_Channelwood::opcode_129(uint16 op, uint16 var, uint16 argc, uint16 *argv) {
|
||||
varUnusedCheck(op, var);
|
||||
|
||||
if (argc == 1) {
|
||||
// Used by Card 3262 (Elevator)
|
||||
debugC(kDebugScript, "Opcode %d: Unknown...", op);
|
||||
|
||||
uint16 cardId = argv[0];
|
||||
|
||||
debugC(kDebugScript, "\tcardId: %d", cardId);
|
||||
|
||||
// TODO: Fill in Code...
|
||||
_vm->changeToCard(cardId, true);
|
||||
} else
|
||||
unknown(op, var, argc, argv);
|
||||
}
|
||||
|
||||
void MystScriptParser_Channelwood::opcode_201(uint16 op, uint16 var, uint16 argc, uint16 *argv) {
|
||||
// Used for Card 3247 (Elevator #1 Movement), 3161 (Bridge Movement), 3259 (Elevator #3 Movement) and 3252 (Elevator #2 Movement)
|
||||
if (argc == 0) {
|
||||
// TODO: Fill in Function. Video Playback? Rect from invoking hotspot resource...
|
||||
if (false) {
|
||||
// Card 3161
|
||||
_vm->_video->playMovie(_vm->wrapMovieFilename("bridge", kChannelwoodStack), 292, 204);
|
||||
|
||||
// Card 3247
|
||||
_vm->_video->playMovie(_vm->wrapMovieFilename("welev1dn", kChannelwoodStack), 214, 107);
|
||||
_vm->_video->playMovie(_vm->wrapMovieFilename("welev1up", kChannelwoodStack), 214, 107);
|
||||
|
||||
// Card 3252
|
||||
_vm->_video->playMovie(_vm->wrapMovieFilename("welev2dn", kChannelwoodStack), 215, 118);
|
||||
_vm->_video->playMovie(_vm->wrapMovieFilename("welev2up", kChannelwoodStack), 215, 118);
|
||||
|
||||
// Card 3259
|
||||
_vm->_video->playMovie(_vm->wrapMovieFilename("welev3dn", kChannelwoodStack), 213, 99);
|
||||
_vm->_video->playMovie(_vm->wrapMovieFilename("welev3up", kChannelwoodStack), 213, 99);
|
||||
}
|
||||
} else
|
||||
unknown(op, var, argc, argv);
|
||||
}
|
||||
|
||||
static struct {
|
||||
bool enabled;
|
||||
uint16 var;
|
||||
} g_opcode202Parameters;
|
||||
|
||||
void MystScriptParser_Channelwood::opcode_202_run(void) {
|
||||
if (g_opcode202Parameters.enabled) {
|
||||
// Used for Cards 3328, 3691, 3731, 3809, 3846 etc. (Water Valves)
|
||||
|
||||
// Code for Water Flow Logic
|
||||
// Var 8 = "Water Tank Valve State"
|
||||
// Controls
|
||||
// Var 19 = "Water Flowing to First Water Valve"
|
||||
// Code for this in Opcode 104 / 122
|
||||
|
||||
// Var 19 = "Water Flowing to First Water Valve"
|
||||
// and
|
||||
// Var 9 = "First Water Valve State"
|
||||
// Controls
|
||||
// Var 20 = "Water Flowing to Second (L) Water Valve"
|
||||
// Var 3 = "Water Flowing (R) to Pump for Upper Walkway to Temple Elevator"
|
||||
uint16 var9 = _vm->_varStore->getVar(9);
|
||||
if (_vm->_varStore->getVar(19)) {
|
||||
_vm->_varStore->setVar(20, !var9);
|
||||
_vm->_varStore->setVar(3, var9);
|
||||
} else {
|
||||
// No water into Valve
|
||||
_vm->_varStore->setVar(20, 0);
|
||||
_vm->_varStore->setVar(3, 0);
|
||||
}
|
||||
|
||||
// Var 20 = "Water Flowing to Second (L) Water Valve"
|
||||
// and
|
||||
// Var 10 = "Second (L) Water Valve State"
|
||||
// Controls
|
||||
// Var 24 = "Water Flowing to Third (L, L) Water Valve"
|
||||
// Var 21 = "Water Flowing to Third (L, R) Water Valve"
|
||||
uint16 var10 = _vm->_varStore->getVar(10);
|
||||
if (_vm->_varStore->getVar(20)) {
|
||||
_vm->_varStore->setVar(24, !var10);
|
||||
_vm->_varStore->setVar(21, var10);
|
||||
} else {
|
||||
// No water into Valve
|
||||
_vm->_varStore->setVar(24, 0);
|
||||
_vm->_varStore->setVar(21, 0);
|
||||
}
|
||||
|
||||
// Var 21 = "Water Flowing to Third (L, R) Water Valve"
|
||||
// and
|
||||
// Var 11 = "Third (L, R) Water Valve State"
|
||||
// Controls
|
||||
// Var 23 = "Water Flowing to Fourth (L, R, L) Water Valve"
|
||||
// Var 22 = "Water Flowing to Fourth (L, R, R) Water Valve"
|
||||
uint16 var11 = _vm->_varStore->getVar(11);
|
||||
if (_vm->_varStore->getVar(21)) {
|
||||
_vm->_varStore->setVar(23, !var11);
|
||||
_vm->_varStore->setVar(22, var11);
|
||||
} else {
|
||||
// No water into Valve
|
||||
_vm->_varStore->setVar(23, 0);
|
||||
_vm->_varStore->setVar(22, 0);
|
||||
}
|
||||
|
||||
// Var 24 = "Water Flowing to Third (L, L) Water Valve"
|
||||
// and
|
||||
// Var 14 = "Third (L, L) Water Valve State"
|
||||
// Controls
|
||||
// Var 29 = "Water Flowing to Pipe In Water (L, L, L)"
|
||||
// Var 28 = "Water Flowing to Join and Pump Bridge (L, L, R)"
|
||||
uint16 var14 = _vm->_varStore->getVar(14);
|
||||
if (_vm->_varStore->getVar(24)) {
|
||||
_vm->_varStore->setVar(29, !var14);
|
||||
_vm->_varStore->setVar(28, var14);
|
||||
} else {
|
||||
// No water into Valve
|
||||
_vm->_varStore->setVar(29, 0);
|
||||
_vm->_varStore->setVar(28, 0);
|
||||
}
|
||||
|
||||
// Var 22 = "Water Flowing to Fourth (L, R, R) Water Valve"
|
||||
// and
|
||||
// Var 12 = "Fourth (L, R, R) Water Valve State"
|
||||
// Controls
|
||||
// Var 25 = "Water Flowing to Pipe Bridge (L, R, R, L)"
|
||||
// Var 15 = "Water Flowing (L, R, R, R) to Pump for Lower Walkway to Upper Walkway Elevator"
|
||||
uint16 var12 = _vm->_varStore->getVar(12);
|
||||
if (_vm->_varStore->getVar(22)) {
|
||||
_vm->_varStore->setVar(25, !var12);
|
||||
_vm->_varStore->setVar(15, var12);
|
||||
} else {
|
||||
// No water into Valve
|
||||
_vm->_varStore->setVar(25, 0);
|
||||
_vm->_varStore->setVar(15, 0);
|
||||
}
|
||||
|
||||
// Var 23 = "Water Flowing to Fourth (L, R, L) Water Valve"
|
||||
// and
|
||||
// Var 13 = "Fourth (L, R, L) Water Valve State"
|
||||
// Controls
|
||||
// Var 27 = "Water Flowing to Join and Pump Bridge (L, R, L, L)"
|
||||
// Var 26 = "Water Flowing to Pipe At Entry Point (L, R, L, R)"
|
||||
uint16 var13 = _vm->_varStore->getVar(13);
|
||||
if (_vm->_varStore->getVar(23)) {
|
||||
_vm->_varStore->setVar(27, !var13);
|
||||
_vm->_varStore->setVar(26, var13);
|
||||
} else {
|
||||
// No water into Valve
|
||||
_vm->_varStore->setVar(27, 0);
|
||||
_vm->_varStore->setVar(26, 0);
|
||||
}
|
||||
|
||||
// TODO: Not sure that original had OR logic for water flow at Join...
|
||||
// Var 27 = "Water Flowing to Join and Pump Bridge (L, R, L, L)"
|
||||
// Or
|
||||
// Var 28 = "Water Flowing to Join and Pump Bridge (L, L, R)"
|
||||
// Controls
|
||||
// Var 31 = "Water Flowing to Join (L, L, R)" // 0 to 2 = Stop Sound, Background, Background with Water Flow
|
||||
// Var 7 = "Bridge Pump Running"
|
||||
// TODO: Not sure about control of Var 31 which is tristate...
|
||||
if (_vm->_varStore->getVar(27) || _vm->_varStore->getVar(28)) {
|
||||
_vm->_varStore->setVar(31, 2); // Background with Water Flow
|
||||
_vm->_varStore->setVar(7, 1);
|
||||
} else {
|
||||
// No water into Valve
|
||||
_vm->_varStore->setVar(31, 1); // Background
|
||||
_vm->_varStore->setVar(7, 0);
|
||||
}
|
||||
|
||||
// TODO: Code for this shouldn't be here...
|
||||
// Move to Opcodes called by Pipe Extension...
|
||||
// Var 25 = "Water Flowing to Pipe Bridge (L, R, R, L)"
|
||||
// and
|
||||
// Var 6 = "Pipe Bridge Extended"
|
||||
// Controls
|
||||
// Var 32 = "Water Flowing (L, R, R, L, Pipe) State" }, // 0 to 2 = Stop Sound, Background, Background with Water Flow
|
||||
// Var 4 = "Water Flowing (L, R, R, L, Pipe Extended) to Pump for Book Room Elevator"
|
||||
// TODO: Not sure about control of Var 32 which is tristate...
|
||||
if (_vm->_varStore->getVar(25) && _vm->_varStore->getVar(6)) {
|
||||
_vm->_varStore->setVar(32, 2); // Background with Water Flow
|
||||
_vm->_varStore->setVar(4, 1);
|
||||
} else {
|
||||
// No water into Valve
|
||||
_vm->_varStore->setVar(32, 1); // Background
|
||||
_vm->_varStore->setVar(4, 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void MystScriptParser_Channelwood::opcode_202_disable(void) {
|
||||
g_opcode202Parameters.enabled = false;
|
||||
}
|
||||
|
||||
void MystScriptParser_Channelwood::opcode_202(uint16 op, uint16 var, uint16 argc, uint16 *argv) {
|
||||
// Used for Cards 3328, 3691, 3731, 3809, 3846 etc. (Water Valves)
|
||||
if (argc == 0) {
|
||||
g_opcode202Parameters.var = var;
|
||||
g_opcode202Parameters.enabled = true;
|
||||
} else
|
||||
unknown(op, var, argc, argv);
|
||||
}
|
||||
|
||||
static struct {
|
||||
bool enabled;
|
||||
} g_opcode203Parameters;
|
||||
|
||||
void MystScriptParser_Channelwood::opcode_203_run(void) {
|
||||
if (g_opcode203Parameters.enabled) {
|
||||
// Used for Card 3310 (Sirrus' Room Right Bed Drawer),
|
||||
// Card 3307 (Sirrus' Room Left Bed Drawer)
|
||||
// and Card 3318 (Sirrus' Room Nightstand Drawer)
|
||||
// TODO: Fill in Logic...
|
||||
}
|
||||
}
|
||||
|
||||
void MystScriptParser_Channelwood::opcode_203_disable(void) {
|
||||
g_opcode203Parameters.enabled = false;
|
||||
}
|
||||
|
||||
void MystScriptParser_Channelwood::opcode_203(uint16 op, uint16 var, uint16 argc, uint16 *argv) {
|
||||
varUnusedCheck(op, var);
|
||||
|
||||
// Used for Card 3310 (Sirrus' Room Right Bed Drawer),
|
||||
// Card 3307 (Sirrus' Room Left Bed Drawer)
|
||||
// and Card 3318 (Sirrus' Room Nightstand Drawer)
|
||||
if (argc == 0)
|
||||
g_opcode203Parameters.enabled = true;
|
||||
else
|
||||
unknown(op, var, argc, argv);
|
||||
}
|
||||
|
||||
void MystScriptParser_Channelwood::opcode_300(uint16 op, uint16 var, uint16 argc, uint16 *argv) {
|
||||
// Used in Card 3012 (Achenar's Holoprojector Control)
|
||||
varUnusedCheck(op, var);
|
||||
// TODO: Fill in Logic. Clearing Variable for View?
|
||||
}
|
||||
|
||||
} // End of namespace Mohawk
|
77
engines/mohawk/myst_stacks/channelwood.h
Normal file
77
engines/mohawk/myst_stacks/channelwood.h
Normal file
@ -0,0 +1,77 @@
|
||||
/* ScummVM - Graphic Adventure Engine
|
||||
*
|
||||
* ScummVM is the legal property of its developers, whose names
|
||||
* are too numerous to list here. Please refer to the COPYRIGHT
|
||||
* file distributed with this source distribution.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version 2
|
||||
* of the License, or (at your option) any later version.
|
||||
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*
|
||||
* $URL$
|
||||
* $Id$
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef MYST_SCRIPTS_CHANNELWOOD_H
|
||||
#define MYST_SCRIPTS_CHANNELWOOD_H
|
||||
|
||||
#include "common/scummsys.h"
|
||||
#include "common/util.h"
|
||||
#include "mohawk/myst_scripts.h"
|
||||
|
||||
namespace Mohawk {
|
||||
|
||||
#define DECLARE_OPCODE(x) void x(uint16 op, uint16 var, uint16 argc, uint16 *argv)
|
||||
|
||||
class MohawkEngine_Myst;
|
||||
struct MystScriptEntry;
|
||||
|
||||
class MystScriptParser_Channelwood : public MystScriptParser {
|
||||
public:
|
||||
MystScriptParser_Channelwood(MohawkEngine_Myst *vm);
|
||||
~MystScriptParser_Channelwood();
|
||||
|
||||
void disablePersistentScripts();
|
||||
void runPersistentScripts();
|
||||
|
||||
private:
|
||||
void setupOpcodes();
|
||||
|
||||
void opcode_202_run();
|
||||
void opcode_202_disable();
|
||||
void opcode_203_run();
|
||||
void opcode_203_disable();
|
||||
|
||||
DECLARE_OPCODE(opcode_101);
|
||||
DECLARE_OPCODE(opcode_102);
|
||||
DECLARE_OPCODE(opcode_104);
|
||||
DECLARE_OPCODE(opcode_117);
|
||||
DECLARE_OPCODE(opcode_118);
|
||||
DECLARE_OPCODE(opcode_119);
|
||||
DECLARE_OPCODE(opcode_122);
|
||||
DECLARE_OPCODE(opcode_127);
|
||||
DECLARE_OPCODE(opcode_129);
|
||||
|
||||
DECLARE_OPCODE(opcode_201);
|
||||
DECLARE_OPCODE(opcode_202);
|
||||
DECLARE_OPCODE(opcode_203);
|
||||
|
||||
DECLARE_OPCODE(opcode_300);
|
||||
};
|
||||
|
||||
} // End of namespace Mohawk
|
||||
|
||||
#undef DECLARE_OPCODE
|
||||
|
||||
#endif
|
@ -338,32 +338,6 @@ void MystScriptParser_Myst::opcode_101(uint16 op, uint16 var, uint16 argc, uint1
|
||||
} else
|
||||
unknown(op, var, argc, argv);
|
||||
break;
|
||||
case kChannelwoodStack:
|
||||
varUnusedCheck(op, var);
|
||||
|
||||
if (argc == 1) {
|
||||
debugC(kDebugScript, "Opcode %d: Play Pipe Movie and Sound", op);
|
||||
|
||||
uint16 soundId = argv[0];
|
||||
debugC(kDebugScript, "\tsoundId: %d", soundId);
|
||||
|
||||
_vm->_sound->playSound(soundId);
|
||||
|
||||
// TODO: Get Movie Location from Invoking Resource Rect, rather than
|
||||
// hardcoded 267, 170 ?
|
||||
|
||||
// TODO: Need version of playMovie blocking which allows selection
|
||||
// of start and finish points.
|
||||
if (!_vm->_varStore->getVar(6)) {
|
||||
// Play Pipe Extending i.e. 0 to 1/2 way through file
|
||||
_vm->_video->playMovie(_vm->wrapMovieFilename("pipebrid", kChannelwoodStack), 267, 170);
|
||||
} else {
|
||||
// Play Pipe Retracting i.e. 1/2 way to end of file
|
||||
_vm->_video->playMovie(_vm->wrapMovieFilename("pipebrid", kChannelwoodStack), 267, 170);
|
||||
}
|
||||
} else
|
||||
unknown(op, var, argc, argv);
|
||||
break;
|
||||
case kDniStack:
|
||||
// Used in Card 5014 (Atrus)
|
||||
// Hotspot Resource Used to hand Page to Atrus...
|
||||
@ -399,29 +373,6 @@ void MystScriptParser_Myst::opcode_102(uint16 op, uint16 var, uint16 argc, uint1
|
||||
} else
|
||||
unknown(op, var, argc, argv);
|
||||
break;
|
||||
case kChannelwoodStack:
|
||||
varUnusedCheck(op, var);
|
||||
|
||||
if (argc == 2 || argc == 3) {
|
||||
debugC(kDebugScript, "Opcode %d: Draw Full Screen Image, Optional Delay and Change Card", op);
|
||||
|
||||
uint16 imageId = argv[0];
|
||||
uint16 cardId = argv[1];
|
||||
uint16 delay = 0;
|
||||
|
||||
if (argc == 3)
|
||||
delay = argv[2]; // TODO: Not sure about purpose of this parameter...
|
||||
|
||||
debugC(kDebugScript, "\timageId: %d", imageId);
|
||||
debugC(kDebugScript, "\tcardId: %d", cardId);
|
||||
debugC(kDebugScript, "\tdelay: %d", delay);
|
||||
|
||||
_vm->_gfx->copyImageToScreen(imageId, Common::Rect(0, 0, 544, 333));
|
||||
_vm->_system->delayMillis(delay / 100);
|
||||
_vm->changeToCard(cardId, true);
|
||||
} else
|
||||
unknown(op, var, argc, argv);
|
||||
break;
|
||||
case kDemoStack:
|
||||
varUnusedCheck(op, var);
|
||||
|
||||
@ -495,26 +446,6 @@ void MystScriptParser_Myst::opcode_104(uint16 op, uint16 var, uint16 argc, uint1
|
||||
} else
|
||||
unknown(op, var, argc, argv);
|
||||
break;
|
||||
case kChannelwoodStack:
|
||||
varUnusedCheck(op, var);
|
||||
|
||||
// Used on Channelwood Card 3280
|
||||
if (argc == 0) {
|
||||
debugC(kDebugScript, "Opcode %d: Do Water Tank Valve Open Animation", op);
|
||||
Common::Rect rect = _invokingResource->getRect();
|
||||
|
||||
// TODO: Need to load the image ids from Script Resources structure of VIEW
|
||||
for (uint16 imageId = 3595; imageId <= 3601; imageId++) {
|
||||
_vm->_gfx->copyImageToScreen(imageId, rect);
|
||||
_vm->_system->delayMillis(50);
|
||||
}
|
||||
|
||||
// TODO: Is 8 gotten from var7 of calling hotspot, rather than hardcoded?
|
||||
_vm->_varStore->setVar(8, 1);
|
||||
_vm->_varStore->setVar(19, 1);
|
||||
} else
|
||||
unknown(op, var, argc, argv);
|
||||
break;
|
||||
default:
|
||||
unknown(op, var, argc, argv);
|
||||
break;
|
||||
@ -809,33 +740,6 @@ void MystScriptParser_Myst::opcode_117(uint16 op, uint16 var, uint16 argc, uint1
|
||||
} else
|
||||
unknown(op, var, argc, argv);
|
||||
break;
|
||||
case kChannelwoodStack:
|
||||
varUnusedCheck(op, var);
|
||||
|
||||
if (argc == 1) {
|
||||
// Used on Card 3012 (Temple Hologram Monitor)
|
||||
uint16 button = argv[0]; // 0 to 3
|
||||
_vm->_varStore->setVar(17, button);
|
||||
switch (button) {
|
||||
case 0:
|
||||
_vm->_video->playMovie(_vm->wrapMovieFilename("monalgh", kChannelwoodStack), 227, 71);
|
||||
break;
|
||||
case 1:
|
||||
_vm->_video->playMovie(_vm->wrapMovieFilename("monamth", kChannelwoodStack), 227, 71);
|
||||
break;
|
||||
case 2:
|
||||
_vm->_video->playMovie(_vm->wrapMovieFilename("monasirs", kChannelwoodStack), 227, 71);
|
||||
break;
|
||||
case 3:
|
||||
_vm->_video->playMovie(_vm->wrapMovieFilename("monsmsg", kChannelwoodStack), 227, 71);
|
||||
break;
|
||||
default:
|
||||
warning("Opcode %d Control Variable Out of Range", op);
|
||||
break;
|
||||
}
|
||||
} else
|
||||
unknown(op, var, argc, argv);
|
||||
break;
|
||||
default:
|
||||
unknown(op, var, argc, argv);
|
||||
break;
|
||||
@ -870,16 +774,6 @@ void MystScriptParser_Myst::opcode_118(uint16 op, uint16 var, uint16 argc, uint1
|
||||
} else
|
||||
unknown(op, var, argc, argv);
|
||||
break;
|
||||
case kChannelwoodStack:
|
||||
varUnusedCheck(op, var);
|
||||
|
||||
if (argc == 0) {
|
||||
// Used on Card 3318 (Sirrus' Room Nightstand Drawer)
|
||||
// Triggered when clicked on drawer
|
||||
// TODO: Implement function...
|
||||
} else
|
||||
unknown(op, var, argc, argv);
|
||||
break;
|
||||
default:
|
||||
unknown(op, var, argc, argv);
|
||||
break;
|
||||
@ -906,30 +800,6 @@ void MystScriptParser_Myst::opcode_119(uint16 op, uint16 var, uint16 argc, uint1
|
||||
} else
|
||||
unknown(op, var, argc, argv);
|
||||
break;
|
||||
case kChannelwoodStack:
|
||||
if (argc == 0) {
|
||||
// Used on Card 3333 (Temple Hologram)
|
||||
// TODO: Not 100% sure about movie position...
|
||||
switch (_vm->_varStore->getVar(17)) {
|
||||
case 0:
|
||||
_vm->_video->playMovie(_vm->wrapMovieFilename("holoalgh", kChannelwoodStack), 126, 74);
|
||||
break;
|
||||
case 1:
|
||||
_vm->_video->playMovie(_vm->wrapMovieFilename("holoamth", kChannelwoodStack), 126, 74);
|
||||
break;
|
||||
case 2:
|
||||
_vm->_video->playMovie(_vm->wrapMovieFilename("holoasir", kChannelwoodStack), 126, 74);
|
||||
break;
|
||||
case 3:
|
||||
_vm->_video->playMovie(_vm->wrapMovieFilename("holosmsg", kChannelwoodStack), 126, 74);
|
||||
break;
|
||||
default:
|
||||
warning("Opcode %d Control Variable Out of Range", op);
|
||||
break;
|
||||
}
|
||||
} else
|
||||
unknown(op, var, argc, argv);
|
||||
break;
|
||||
default:
|
||||
unknown(op, var, argc, argv);
|
||||
break;
|
||||
@ -1007,24 +877,6 @@ void MystScriptParser_Myst::opcode_122(uint16 op, uint16 var, uint16 argc, uint1
|
||||
varUnusedCheck(op, var);
|
||||
|
||||
switch (_vm->getCurStack()) {
|
||||
case kChannelwoodStack:
|
||||
// Used on Channelwood Card 3280
|
||||
if (argc == 0) {
|
||||
debugC(kDebugScript, "Opcode %d: Do Water Tank Valve Close Animation", op);
|
||||
Common::Rect rect = _invokingResource->getRect();
|
||||
|
||||
// TODO: Need to load the image ids from Script Resources structure of VIEW
|
||||
for (uint16 imageId = 3601; imageId >= 3595; imageId--) {
|
||||
_vm->_gfx->copyImageToScreen(imageId, rect);
|
||||
_vm->_system->delayMillis(50);
|
||||
}
|
||||
|
||||
// TODO: Is 8 gotten from var7 of calling hotspot, rather than hard-coded?
|
||||
_vm->_varStore->setVar(8, 0);
|
||||
_vm->_varStore->setVar(19, 0);
|
||||
} else
|
||||
unknown(op, var, argc, argv);
|
||||
break;
|
||||
case kMechanicalStack:
|
||||
if (argc == 0) {
|
||||
// Used on Card 6120 (Elevator)
|
||||
@ -1125,21 +977,6 @@ void MystScriptParser_Myst::opcode_127(uint16 op, uint16 var, uint16 argc, uint1
|
||||
varUnusedCheck(op, var);
|
||||
|
||||
switch (_vm->getCurStack()) {
|
||||
case kChannelwoodStack:
|
||||
if (argc == 2) {
|
||||
// Used by Card 3262 (Elevator)
|
||||
debugC(kDebugScript, "Opcode %d: Unknown...", op);
|
||||
|
||||
uint16 u0 = argv[0];
|
||||
uint16 u1 = argv[1];
|
||||
|
||||
debugC(kDebugScript, "\tu0: %d", u0);
|
||||
debugC(kDebugScript, "\tu1: %d", u1);
|
||||
|
||||
// TODO: Fill in Code...
|
||||
} else
|
||||
unknown(op, var, argc, argv);
|
||||
break;
|
||||
case kMechanicalStack:
|
||||
if (argc == 0) {
|
||||
// Used for Mech Card 6226 (3 Crystals)
|
||||
@ -1174,20 +1011,6 @@ void MystScriptParser_Myst::opcode_129(uint16 op, uint16 var, uint16 argc, uint1
|
||||
varUnusedCheck(op, var);
|
||||
|
||||
switch (_vm->getCurStack()) {
|
||||
case kChannelwoodStack:
|
||||
if (argc == 1) {
|
||||
// Used by Card 3262 (Elevator)
|
||||
debugC(kDebugScript, "Opcode %d: Unknown...", op);
|
||||
|
||||
uint16 cardId = argv[0];
|
||||
|
||||
debugC(kDebugScript, "\tcardId: %d", cardId);
|
||||
|
||||
// TODO: Fill in Code...
|
||||
_vm->changeToCard(cardId, true);
|
||||
} else
|
||||
unknown(op, var, argc, argv);
|
||||
break;
|
||||
case kMechanicalStack:
|
||||
if (argc == 0) {
|
||||
// Used for Mech Card 6226 (3 Crystals)
|
||||
@ -1783,29 +1606,6 @@ void MystScriptParser_Myst::opcode_201(uint16 op, uint16 var, uint16 argc, uint1
|
||||
} else
|
||||
unknown(op, var, argc, argv);
|
||||
break;
|
||||
case kChannelwoodStack:
|
||||
// Used for Card 3247 (Elevator #1 Movement), 3161 (Bridge Movement), 3259 (Elevator #3 Movement) and 3252 (Elevator #2 Movement)
|
||||
if (argc == 0) {
|
||||
// TODO: Fill in Function. Video Playback? Rect from invoking hotspot resource...
|
||||
if (false) {
|
||||
// Card 3161
|
||||
_vm->_video->playMovie(_vm->wrapMovieFilename("bridge", kChannelwoodStack), 292, 204);
|
||||
|
||||
// Card 3247
|
||||
_vm->_video->playMovie(_vm->wrapMovieFilename("welev1dn", kChannelwoodStack), 214, 107);
|
||||
_vm->_video->playMovie(_vm->wrapMovieFilename("welev1up", kChannelwoodStack), 214, 107);
|
||||
|
||||
// Card 3252
|
||||
_vm->_video->playMovie(_vm->wrapMovieFilename("welev2dn", kChannelwoodStack), 215, 118);
|
||||
_vm->_video->playMovie(_vm->wrapMovieFilename("welev2up", kChannelwoodStack), 215, 118);
|
||||
|
||||
// Card 3259
|
||||
_vm->_video->playMovie(_vm->wrapMovieFilename("welev3dn", kChannelwoodStack), 213, 99);
|
||||
_vm->_video->playMovie(_vm->wrapMovieFilename("welev3up", kChannelwoodStack), 213, 99);
|
||||
}
|
||||
} else
|
||||
unknown(op, var, argc, argv);
|
||||
break;
|
||||
case kDemoStack:
|
||||
// Used on Card 2001, 2002 and 2003
|
||||
if (argc == 0) {
|
||||
@ -1839,145 +1639,7 @@ void MystScriptParser_Myst::opcode_202_run(void) {
|
||||
// Used for Card 6220 (Sirrus' Mechanical Bird)
|
||||
// TODO: Fill in Function
|
||||
break;
|
||||
case kChannelwoodStack:
|
||||
// Used for Cards 3328, 3691, 3731, 3809, 3846 etc. (Water Valves)
|
||||
|
||||
// Code for Water Flow Logic
|
||||
// Var 8 = "Water Tank Valve State"
|
||||
// Controls
|
||||
// Var 19 = "Water Flowing to First Water Valve"
|
||||
// Code for this in Opcode 104 / 122
|
||||
|
||||
// Var 19 = "Water Flowing to First Water Valve"
|
||||
// and
|
||||
// Var 9 = "First Water Valve State"
|
||||
// Controls
|
||||
// Var 20 = "Water Flowing to Second (L) Water Valve"
|
||||
// Var 3 = "Water Flowing (R) to Pump for Upper Walkway to Temple Elevator"
|
||||
uint16 var9 = _vm->_varStore->getVar(9);
|
||||
if (_vm->_varStore->getVar(19)) {
|
||||
_vm->_varStore->setVar(20, !var9);
|
||||
_vm->_varStore->setVar(3, var9);
|
||||
} else {
|
||||
// No water into Valve
|
||||
_vm->_varStore->setVar(20, 0);
|
||||
_vm->_varStore->setVar(3, 0);
|
||||
}
|
||||
|
||||
// Var 20 = "Water Flowing to Second (L) Water Valve"
|
||||
// and
|
||||
// Var 10 = "Second (L) Water Valve State"
|
||||
// Controls
|
||||
// Var 24 = "Water Flowing to Third (L, L) Water Valve"
|
||||
// Var 21 = "Water Flowing to Third (L, R) Water Valve"
|
||||
uint16 var10 = _vm->_varStore->getVar(10);
|
||||
if (_vm->_varStore->getVar(20)) {
|
||||
_vm->_varStore->setVar(24, !var10);
|
||||
_vm->_varStore->setVar(21, var10);
|
||||
} else {
|
||||
// No water into Valve
|
||||
_vm->_varStore->setVar(24, 0);
|
||||
_vm->_varStore->setVar(21, 0);
|
||||
}
|
||||
|
||||
// Var 21 = "Water Flowing to Third (L, R) Water Valve"
|
||||
// and
|
||||
// Var 11 = "Third (L, R) Water Valve State"
|
||||
// Controls
|
||||
// Var 23 = "Water Flowing to Fourth (L, R, L) Water Valve"
|
||||
// Var 22 = "Water Flowing to Fourth (L, R, R) Water Valve"
|
||||
uint16 var11 = _vm->_varStore->getVar(11);
|
||||
if (_vm->_varStore->getVar(21)) {
|
||||
_vm->_varStore->setVar(23, !var11);
|
||||
_vm->_varStore->setVar(22, var11);
|
||||
} else {
|
||||
// No water into Valve
|
||||
_vm->_varStore->setVar(23, 0);
|
||||
_vm->_varStore->setVar(22, 0);
|
||||
}
|
||||
|
||||
// Var 24 = "Water Flowing to Third (L, L) Water Valve"
|
||||
// and
|
||||
// Var 14 = "Third (L, L) Water Valve State"
|
||||
// Controls
|
||||
// Var 29 = "Water Flowing to Pipe In Water (L, L, L)"
|
||||
// Var 28 = "Water Flowing to Join and Pump Bridge (L, L, R)"
|
||||
uint16 var14 = _vm->_varStore->getVar(14);
|
||||
if (_vm->_varStore->getVar(24)) {
|
||||
_vm->_varStore->setVar(29, !var14);
|
||||
_vm->_varStore->setVar(28, var14);
|
||||
} else {
|
||||
// No water into Valve
|
||||
_vm->_varStore->setVar(29, 0);
|
||||
_vm->_varStore->setVar(28, 0);
|
||||
}
|
||||
|
||||
// Var 22 = "Water Flowing to Fourth (L, R, R) Water Valve"
|
||||
// and
|
||||
// Var 12 = "Fourth (L, R, R) Water Valve State"
|
||||
// Controls
|
||||
// Var 25 = "Water Flowing to Pipe Bridge (L, R, R, L)"
|
||||
// Var 15 = "Water Flowing (L, R, R, R) to Pump for Lower Walkway to Upper Walkway Elevator"
|
||||
uint16 var12 = _vm->_varStore->getVar(12);
|
||||
if (_vm->_varStore->getVar(22)) {
|
||||
_vm->_varStore->setVar(25, !var12);
|
||||
_vm->_varStore->setVar(15, var12);
|
||||
} else {
|
||||
// No water into Valve
|
||||
_vm->_varStore->setVar(25, 0);
|
||||
_vm->_varStore->setVar(15, 0);
|
||||
}
|
||||
|
||||
// Var 23 = "Water Flowing to Fourth (L, R, L) Water Valve"
|
||||
// and
|
||||
// Var 13 = "Fourth (L, R, L) Water Valve State"
|
||||
// Controls
|
||||
// Var 27 = "Water Flowing to Join and Pump Bridge (L, R, L, L)"
|
||||
// Var 26 = "Water Flowing to Pipe At Entry Point (L, R, L, R)"
|
||||
uint16 var13 = _vm->_varStore->getVar(13);
|
||||
if (_vm->_varStore->getVar(23)) {
|
||||
_vm->_varStore->setVar(27, !var13);
|
||||
_vm->_varStore->setVar(26, var13);
|
||||
} else {
|
||||
// No water into Valve
|
||||
_vm->_varStore->setVar(27, 0);
|
||||
_vm->_varStore->setVar(26, 0);
|
||||
}
|
||||
|
||||
// TODO: Not sure that original had OR logic for water flow at Join...
|
||||
// Var 27 = "Water Flowing to Join and Pump Bridge (L, R, L, L)"
|
||||
// Or
|
||||
// Var 28 = "Water Flowing to Join and Pump Bridge (L, L, R)"
|
||||
// Controls
|
||||
// Var 31 = "Water Flowing to Join (L, L, R)" // 0 to 2 = Stop Sound, Background, Background with Water Flow
|
||||
// Var 7 = "Bridge Pump Running"
|
||||
// TODO: Not sure about control of Var 31 which is tristate...
|
||||
if (_vm->_varStore->getVar(27) || _vm->_varStore->getVar(28)) {
|
||||
_vm->_varStore->setVar(31, 2); // Background with Water Flow
|
||||
_vm->_varStore->setVar(7, 1);
|
||||
} else {
|
||||
// No water into Valve
|
||||
_vm->_varStore->setVar(31, 1); // Background
|
||||
_vm->_varStore->setVar(7, 0);
|
||||
}
|
||||
|
||||
// TODO: Code for this shouldn't be here...
|
||||
// Move to Opcodes called by Pipe Extension...
|
||||
// Var 25 = "Water Flowing to Pipe Bridge (L, R, R, L)"
|
||||
// and
|
||||
// Var 6 = "Pipe Bridge Extended"
|
||||
// Controls
|
||||
// Var 32 = "Water Flowing (L, R, R, L, Pipe) State" }, // 0 to 2 = Stop Sound, Background, Background with Water Flow
|
||||
// Var 4 = "Water Flowing (L, R, R, L, Pipe Extended) to Pump for Book Room Elevator"
|
||||
// TODO: Not sure about control of Var 32 which is tristate...
|
||||
if (_vm->_varStore->getVar(25) && _vm->_varStore->getVar(6)) {
|
||||
_vm->_varStore->setVar(32, 2); // Background with Water Flow
|
||||
_vm->_varStore->setVar(4, 1);
|
||||
} else {
|
||||
// No water into Valve
|
||||
_vm->_varStore->setVar(32, 1); // Background
|
||||
_vm->_varStore->setVar(4, 0);
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -2007,14 +1669,6 @@ void MystScriptParser_Myst::opcode_202(uint16 op, uint16 var, uint16 argc, uint1
|
||||
} else
|
||||
unknown(op, var, argc, argv);
|
||||
break;
|
||||
case kChannelwoodStack:
|
||||
// Used for Cards 3328, 3691, 3731, 3809, 3846 etc. (Water Valves)
|
||||
if (argc == 0) {
|
||||
g_opcode202Parameters.var = var;
|
||||
g_opcode202Parameters.enabled = true;
|
||||
} else
|
||||
unknown(op, var, argc, argv);
|
||||
break;
|
||||
default:
|
||||
varUnusedCheck(op, var);
|
||||
|
||||
@ -2042,12 +1696,6 @@ void MystScriptParser_Myst::opcode_203_run(void) {
|
||||
// Used for Card 6043 (Weapons Rack with Snake Box)
|
||||
// TODO: Fill in Logic for Snake Box...
|
||||
break;
|
||||
case kChannelwoodStack:
|
||||
// Used for Card 3310 (Sirrus' Room Right Bed Drawer),
|
||||
// Card 3307 (Sirrus' Room Left Bed Drawer)
|
||||
// and Card 3318 (Sirrus' Room Nightstand Drawer)
|
||||
// TODO: Fill in Logic...
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -2072,15 +1720,6 @@ void MystScriptParser_Myst::opcode_203(uint16 op, uint16 var, uint16 argc, uint1
|
||||
} else
|
||||
unknown(op, var, argc, argv);
|
||||
break;
|
||||
case kChannelwoodStack:
|
||||
// Used for Card 3310 (Sirrus' Room Right Bed Drawer),
|
||||
// Card 3307 (Sirrus' Room Left Bed Drawer)
|
||||
// and Card 3318 (Sirrus' Room Nightstand Drawer)
|
||||
if (argc == 0) {
|
||||
g_opcode203Parameters.enabled = true;
|
||||
} else
|
||||
unknown(op, var, argc, argv);
|
||||
break;
|
||||
default:
|
||||
unknown(op, var, argc, argv);
|
||||
break;
|
||||
@ -2850,11 +2489,6 @@ void MystScriptParser_Myst::opcode_300(uint16 op, uint16 var, uint16 argc, uint1
|
||||
varUnusedCheck(op, var);
|
||||
// TODO: Fill in Logic. Clearing Variable for View?
|
||||
break;
|
||||
case kChannelwoodStack:
|
||||
// Used in Card 3012 (Achenar's Holoprojector Control)
|
||||
varUnusedCheck(op, var);
|
||||
// TODO: Fill in Logic. Clearing Variable for View?
|
||||
break;
|
||||
case kDniStack:
|
||||
// Used in Card 5014 (Atrus Writing)
|
||||
varUnusedCheck(op, var);
|
||||
|
@ -150,7 +150,7 @@ private:
|
||||
DECLARE_OPCODE(opcode_312);
|
||||
};
|
||||
|
||||
}
|
||||
} // End of namespace Mohawk
|
||||
|
||||
#undef DECLARE_OPCODE
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user