aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/mohawk/myst.cpp8
-rw-r--r--engines/mohawk/myst.h4
-rw-r--r--engines/mohawk/myst_areas.cpp7
-rw-r--r--engines/mohawk/myst_areas.h2
-rw-r--r--engines/mohawk/myst_stacks/myst.cpp329
-rw-r--r--engines/mohawk/myst_stacks/myst.h21
6 files changed, 213 insertions, 158 deletions
diff --git a/engines/mohawk/myst.cpp b/engines/mohawk/myst.cpp
index 9391063634..0e791aadc6 100644
--- a/engines/mohawk/myst.cpp
+++ b/engines/mohawk/myst.cpp
@@ -988,14 +988,14 @@ void MohawkEngine_Myst::drawResourceImages() {
_resources[i]->drawDataToScreen();
}
-void MohawkEngine_Myst::redrawResource(MystResourceType8 *_resource) {
- _resource->drawConditionalDataToScreen(_scriptParser->getVar(_resource->getType8Var()));
+void MohawkEngine_Myst::redrawResource(MystResourceType8 *_resource, bool update) {
+ _resource->drawConditionalDataToScreen(_scriptParser->getVar(_resource->getType8Var()), update);
}
-void MohawkEngine_Myst::redrawArea(uint16 var) {
+void MohawkEngine_Myst::redrawArea(uint16 var, bool update) {
for (uint16 i = 0; i < _resources.size(); i++)
if (_resources[i]->type == kMystConditionalImage && _resources[i]->getType8Var() == var)
- redrawResource(static_cast<MystResourceType8 *>(_resources[i]));
+ redrawResource(static_cast<MystResourceType8 *>(_resources[i]), update);
}
MystResource *MohawkEngine_Myst::loadResource(Common::SeekableReadStream *rlstStream, MystResource *parent) {
diff --git a/engines/mohawk/myst.h b/engines/mohawk/myst.h
index 3601cc3f03..5d7aa0f038 100644
--- a/engines/mohawk/myst.h
+++ b/engines/mohawk/myst.h
@@ -180,8 +180,8 @@ public:
bool _showResourceRects;
MystResource *loadResource(Common::SeekableReadStream *rlstStream, MystResource *parent);
void setResourceEnabled(uint16 resourceId, bool enable);
- void redrawArea(uint16 var);
- void redrawResource(MystResourceType8 *_resource);
+ void redrawArea(uint16 var, bool update = true);
+ void redrawResource(MystResourceType8 *_resource, bool update = true);
void drawResourceImages();
void drawCardBackground();
uint16 getCardBackgroundId();
diff --git a/engines/mohawk/myst_areas.cpp b/engines/mohawk/myst_areas.cpp
index d38cccf874..afb3bc7b14 100644
--- a/engines/mohawk/myst_areas.cpp
+++ b/engines/mohawk/myst_areas.cpp
@@ -410,7 +410,7 @@ void MystResourceType8::drawDataToScreen() {
}
}
-void MystResourceType8::drawConditionalDataToScreen(uint16 state) {
+void MystResourceType8::drawConditionalDataToScreen(uint16 state, bool update) {
// Need to call overidden Type 7 function to ensure
// switch section is processed correctly.
MystResourceType7::drawDataToScreen();
@@ -453,7 +453,10 @@ void MystResourceType8::drawConditionalDataToScreen(uint16 state) {
imageToDraw = _subImages[subImageId].wdib;
_vm->_gfx->copyImageSectionToScreen(imageToDraw, _subImages[subImageId].rect, _rect);
- _vm->_gfx->updateScreen();
+
+ // Draw to screen
+ if (update)
+ _vm->_gfx->updateScreen();
}
}
diff --git a/engines/mohawk/myst_areas.h b/engines/mohawk/myst_areas.h
index a54e21ea12..81fbb0e216 100644
--- a/engines/mohawk/myst_areas.h
+++ b/engines/mohawk/myst_areas.h
@@ -146,7 +146,7 @@ public:
MystResourceType8(MohawkEngine_Myst *vm, Common::SeekableReadStream *rlstStream, MystResource *parent);
virtual ~MystResourceType8();
virtual void drawDataToScreen();
- void drawConditionalDataToScreen(uint16 state);
+ void drawConditionalDataToScreen(uint16 state, bool update = true);
uint16 getType8Var();
struct SubImage {
diff --git a/engines/mohawk/myst_stacks/myst.cpp b/engines/mohawk/myst_stacks/myst.cpp
index da85df44e2..dddfe76fb5 100644
--- a/engines/mohawk/myst_stacks/myst.cpp
+++ b/engines/mohawk/myst_stacks/myst.cpp
@@ -45,6 +45,7 @@ MystScriptParser_Myst::MystScriptParser_Myst(MohawkEngine_Myst *vm) : MystScript
// when linking back to Myst in the library
_savedCardId = 4329;
_libraryBookcaseChanged = false;
+ _dockVaultState = 0;
}
MystScriptParser_Myst::~MystScriptParser_Myst() {
@@ -60,9 +61,12 @@ void MystScriptParser_Myst::setupOpcodes() {
OPCODE(103, o_fireplaceToggleButton);
OPCODE(104, o_fireplaceRotation);
OPCODE(105, opcode_105);
+ OPCODE(106, o_towerRotationStart);
+ OPCODE(107, NOP);
+ OPCODE(108, o_towerRotationEnd);
OPCODE(109, opcode_109);
- OPCODE(113, opcode_113);
- OPCODE(114, opcode_114);
+ OPCODE(113, o_dockVaultOpen);
+ OPCODE(114, o_dockVaultClose);
OPCODE(115, o_bookGivePage);
OPCODE(116, o_clockWheelsExecute);
OPCODE(117, opcode_117);
@@ -122,13 +126,13 @@ void MystScriptParser_Myst::setupOpcodes() {
OPCODE(195, opcode_195);
OPCODE(196, opcode_196);
OPCODE(197, opcode_197);
- OPCODE(198, opcode_198);
+ OPCODE(198, o_dockVaultForceClose);
OPCODE(199, opcode_199);
// "Init" Opcodes
OPCODE(200, o_libraryBook_init);
OPCODE(201, opcode_201);
- OPCODE(202, opcode_202);
+ OPCODE(202, o_towerRotationMap_init);
OPCODE(203, o_forechamberDoor_init);
OPCODE(204, opcode_204);
OPCODE(205, opcode_205);
@@ -167,20 +171,23 @@ void MystScriptParser_Myst::setupOpcodes() {
void MystScriptParser_Myst::disablePersistentScripts() {
opcode_201_disable();
- opcode_202_disable();
opcode_205_disable();
_libraryBookcaseMoving = false;
_generatorControlRoomRunning = false;
_libraryCombinationBookPagesTurning = false;
_clockTurningWheel = 0;
+ _towerRotationMapRunning = false;
opcode_212_disable();
}
void MystScriptParser_Myst::runPersistentScripts() {
opcode_201_run();
- opcode_202_run();
+
+ if (_towerRotationMapRunning)
+ towerRotationMap_run();
+
opcode_205_run();
if (_generatorControlRoomRunning)
@@ -213,6 +220,22 @@ uint16 MystScriptParser_Myst::getVar(uint16 var) {
} else {
return 3;
}
+ case 2: // Marker Switch Near Cabin
+ return myst.cabinMarkerSwitch;
+ case 3: // Marker Switch Near Clock Tower
+ return myst.clockTowerMarkerSwitch;
+ case 4: // Marker Switch on Dock
+ return myst.dockMarkerSwitch;
+ case 5: // Marker Switch Near Ship Pool
+ return myst.poolMarkerSwitch;
+ case 6: // Marker Switch Near Cogs
+ return myst.gearsMarkerSwitch;
+ case 7: // Marker Switch Near Generator Room
+ return myst.generatorMarkerSwitch;
+ case 8: // Marker Switch Near Stellar Observatory
+ return myst.observatoryMarkerSwitch;
+ case 9: // Marker Switch Near Rocket Ship
+ return myst.rocketshipMarkerSwitch;
case 12: // Clock tower gears bridge
return myst.clockTowerBridgeOpen;
case 23: // Fireplace Pattern Correct
@@ -236,6 +259,8 @@ uint16 MystScriptParser_Myst::getVar(uint16 var) {
}
case 37: // Clock Tower Control Wheels Position
return 3 * ((myst.clockTowerMinutePosition / 5) % 3) + myst.clockTowerHourPosition % 3;
+ case 41: // Dock Marker Switch Vault State
+ return _dockVaultState;
case 43: // Clock Tower Time
return myst.clockTowerHourPosition * 12 + myst.clockTowerMinutePosition / 5;
case 44: // Rocket ship power state
@@ -314,6 +339,8 @@ uint16 MystScriptParser_Myst::getVar(uint16 var) {
return 1;
case 302: // Green Book Opened Before Flag
return myst.greenBookOpenedBefore;
+ case 304: // Tower Rotation Map Initialized
+ return _towerRotationMapInitialized;
default:
return MystScriptParser::getVar(var);
}
@@ -321,9 +348,33 @@ uint16 MystScriptParser_Myst::getVar(uint16 var) {
void MystScriptParser_Myst::toggleVar(uint16 var) {
MystVariables::Globals &globals = _vm->_saveLoad->_v->globals;
- // MystVariables::Myst &myst = _vm->_saveLoad->_v->myst;
+ MystVariables::Myst &myst = _vm->_saveLoad->_v->myst;
switch(var) {
+ case 2: // Marker Switch Near Cabin
+ myst.cabinMarkerSwitch = (myst.cabinMarkerSwitch + 1) % 2;
+ break;
+ case 3: // Marker Switch Near Clock Tower
+ myst.clockTowerMarkerSwitch = (myst.clockTowerMarkerSwitch + 1) % 2;
+ break;
+ case 4: // Marker Switch on Dock
+ myst.dockMarkerSwitch = (myst.dockMarkerSwitch + 1) % 2;
+ break;
+ case 5: // Marker Switch Near Ship Pool
+ myst.poolMarkerSwitch = (myst.poolMarkerSwitch + 1) % 2;
+ break;
+ case 6: // Marker Switch Near Cogs
+ myst.gearsMarkerSwitch = (myst.gearsMarkerSwitch + 1) % 2;
+ break;
+ case 7: // Marker Switch Near Generator Room
+ myst.generatorMarkerSwitch = (myst.generatorMarkerSwitch + 1) % 2;
+ break;
+ case 8: // Marker Switch Near Stellar Observatory
+ myst.observatoryMarkerSwitch = (myst.observatoryMarkerSwitch + 1) % 2;
+ break;
+ case 9: // Marker Switch Near Rocket Ship
+ myst.rocketshipMarkerSwitch = (myst.rocketshipMarkerSwitch + 1) % 2;
+ break;
case 24: // Fireplace Blue Page
if (globals.ending != 4 && !(globals.bluePagesInBook & 32)) {
if (globals.heldPage == 6)
@@ -342,6 +393,17 @@ void MystScriptParser_Myst::toggleVar(uint16 var) {
}
}
break;
+ case 41: // Vault white page
+ if (globals.ending != 4) {
+ if (_dockVaultState == 1) {
+ _dockVaultState = 2;
+ globals.heldPage = 0;
+ } else if (_dockVaultState == 2) {
+ _dockVaultState = 1;
+ globals.heldPage = 13;
+ }
+ }
+ break;
case 102: // Red page
if (globals.ending != 4 && !(globals.redPagesInBook & 1)) {
if (globals.heldPage == 7)
@@ -384,6 +446,9 @@ bool MystScriptParser_Myst::setVarValue(uint16 var, uint16 value) {
case 303: // Library Bookcase status changed
_libraryBookcaseChanged = value;
break;
+ case 304: // Myst Library Image Present on Tower Rotation Map
+ _towerRotationMapInitialized = value;
+ break;
default:
refresh = MystScriptParser::setVarValue(var, value);
break;
@@ -540,6 +605,14 @@ void MystScriptParser_Myst::opcode_105(uint16 op, uint16 var, uint16 argc, uint1
unknown(op, var, argc, argv);
}
+void MystScriptParser_Myst::o_towerRotationStart(uint16 op, uint16 var, uint16 argc, uint16 *argv) {
+ _towerRotationMapClicked = true;
+}
+
+void MystScriptParser_Myst::o_towerRotationEnd(uint16 op, uint16 var, uint16 argc, uint16 *argv) {
+ _towerRotationMapClicked = false;
+}
+
void MystScriptParser_Myst::opcode_109(uint16 op, uint16 var, uint16 argc, uint16 *argv) {
if (argc == 1) {
int16 signedValue = argv[0];
@@ -553,95 +626,63 @@ void MystScriptParser_Myst::opcode_109(uint16 op, uint16 var, uint16 argc, uint1
unknown(op, var, argc, argv);
}
-void MystScriptParser_Myst::opcode_113(uint16 op, uint16 var, uint16 argc, uint16 *argv) {
- varUnusedCheck(op, var);
-
+void MystScriptParser_Myst::o_dockVaultOpen(uint16 op, uint16 var, uint16 argc, uint16 *argv) {
// Used on Myst 4143 (Dock near Marker Switch)
- if (argc == 9) {
- uint16 soundId = argv[0];
-
- uint16 u0 = argv[1];
- uint16 u1 = argv[2];
-
- Common::Rect rect = Common::Rect(argv[3], argv[4], argv[5], argv[6]);
-
- uint16 updateDirection = argv[7];
- uint16 u2 = argv[8];
-
- debugC(kDebugScript, "Opcode %d: Vault Open Logic", op);
- debugC(kDebugScript, "\tsoundId: %d", soundId);
- debugC(kDebugScript, "\tu0: %d", u0);
- debugC(kDebugScript, "\tu1: %d", u1);
-
- debugC(kDebugScript, "\trect.left: %d", rect.left);
- debugC(kDebugScript, "\trect.top: %d", rect.top);
- debugC(kDebugScript, "\trect.right: %d", rect.right);
- debugC(kDebugScript, "\trect.bottom: %d", rect.bottom);
- debugC(kDebugScript, "\trect updateDirection: %d", updateDirection);
- debugC(kDebugScript, "\tu2: %d", u2);
+ MystVariables::Globals &globals = _vm->_saveLoad->_v->globals;
+ MystVariables::Myst &myst = _vm->_saveLoad->_v->myst;
+ uint16 soundId = argv[0];
+ uint16 delay = argv[1];
+ uint16 directionalUpdateDataSize = argv[2];
+
+ debugC(kDebugScript, "Opcode %d: Vault Open Logic", op);
+ debugC(kDebugScript, "\tsoundId: %d", soundId);
+ debugC(kDebugScript, "\tdirectionalUpdateDataSize: %d", directionalUpdateDataSize);
+
+ if ((myst.cabinMarkerSwitch == 1) &&
+ (myst.clockTowerMarkerSwitch == 1) &&
+ (myst.dockMarkerSwitch == 0) &&
+ (myst.gearsMarkerSwitch == 1) &&
+ (myst.generatorMarkerSwitch == 1) &&
+ (myst.observatoryMarkerSwitch == 1) &&
+ (myst.poolMarkerSwitch == 1) &&
+ (myst.rocketshipMarkerSwitch == 1)) {
+ if (globals.heldPage != 13 && globals.ending != 4)
+ _dockVaultState = 2;
+ else
+ _dockVaultState = 1;
- if ((_vm->_varStore->getVar(2) == 1) &&
- (_vm->_varStore->getVar(3) == 1) &&
- (_vm->_varStore->getVar(4) == 0) &&
- (_vm->_varStore->getVar(5) == 1) &&
- (_vm->_varStore->getVar(6) == 1) &&
- (_vm->_varStore->getVar(7) == 1) &&
- (_vm->_varStore->getVar(8) == 1) &&
- (_vm->_varStore->getVar(9) == 1)) {
- // TODO: Implement correct function...
- // Blit Image in Left to Right Vertical stripes i.e. transistion
- // like door opening
- _vm->_sound->playSound(soundId);
- // TODO: Set 41 to 1 if page already present in hand.
- _vm->_varStore->setVar(41, 2);
- }
- } else
- unknown(op, var, argc, argv);
+ _vm->_sound->playSound(soundId);
+ _vm->redrawArea(41, false);
+ animatedUpdate(directionalUpdateDataSize, &argv[3], delay);
+ }
}
-void MystScriptParser_Myst::opcode_114(uint16 op, uint16 var, uint16 argc, uint16 *argv) {
- varUnusedCheck(op, var);
-
+void MystScriptParser_Myst::o_dockVaultClose(uint16 op, uint16 var, uint16 argc, uint16 *argv) {
// Used on Myst 4143 (Dock near Marker Switch)
- if (argc == 9) {
- uint16 soundId = argv[0];
-
- uint16 u0 = argv[1];
- uint16 u1 = argv[2];
-
- Common::Rect rect = Common::Rect(argv[3], argv[4], argv[5], argv[6]);
-
- uint16 updateDirection = argv[7];
- uint16 u2 = argv[8];
-
- debugC(kDebugScript, "Opcode %d: Vault Close Logic", op);
- debugC(kDebugScript, "\tsoundId: %d", soundId);
- debugC(kDebugScript, "\tu0: %d", u0);
- debugC(kDebugScript, "\tu1: %d", u1);
-
- debugC(kDebugScript, "\trect.left: %d", rect.left);
- debugC(kDebugScript, "\trect.top: %d", rect.top);
- debugC(kDebugScript, "\trect.right: %d", rect.right);
- debugC(kDebugScript, "\trect.bottom: %d", rect.bottom);
- debugC(kDebugScript, "\tupdateDirection: %d", updateDirection);
- debugC(kDebugScript, "\tu2: %d", u2);
+ MystVariables::Myst &myst = _vm->_saveLoad->_v->myst;
+ uint16 soundId = argv[0];
+ uint16 delay = argv[1];
+ uint16 directionalUpdateDataSize = argv[2];
+
+ debugC(kDebugScript, "Opcode %d: Vault Close Logic", op);
+ debugC(kDebugScript, "\tsoundId: %d", soundId);
+ debugC(kDebugScript, "\tdirectionalUpdateDataSize: %d", directionalUpdateDataSize);
+
+ if ((myst.cabinMarkerSwitch == 1) &&
+ (myst.clockTowerMarkerSwitch == 1) &&
+ (myst.dockMarkerSwitch == 1) &&
+ (myst.gearsMarkerSwitch == 1) &&
+ (myst.generatorMarkerSwitch == 1) &&
+ (myst.observatoryMarkerSwitch == 1) &&
+ (myst.poolMarkerSwitch == 1) &&
+ (myst.rocketshipMarkerSwitch == 1)) {
+ if (_dockVaultState == 1 || _dockVaultState == 2)
+ _dockVaultState = 0;
- if ((_vm->_varStore->getVar(2) == 1) &&
- (_vm->_varStore->getVar(3) == 1) &&
- (_vm->_varStore->getVar(4) == 1) &&
- (_vm->_varStore->getVar(5) == 1) &&
- (_vm->_varStore->getVar(6) == 1) &&
- (_vm->_varStore->getVar(7) == 1) &&
- (_vm->_varStore->getVar(8) == 1) &&
- (_vm->_varStore->getVar(9) == 1)) {
- // TODO: Implement correct function...
- // Blit Image in Right to Left Vertical stripes i.e. transistion
- // like door closing
- _vm->_sound->playSound(soundId);
- _vm->_varStore->setVar(41, 0);
- }
- } else
- unknown(op, var, argc, argv);
+ _vm->_sound->playSound(soundId);
+ _vm->redrawArea(41, false);
+ animatedUpdate(directionalUpdateDataSize, &argv[3], delay);
+ }
}
void MystScriptParser_Myst::o_bookGivePage(uint16 op, uint16 var, uint16 argc, uint16 *argv) {
@@ -1559,40 +1600,29 @@ void MystScriptParser_Myst::opcode_197(uint16 op, uint16 var, uint16 argc, uint1
// TODO: Year decrease
}
-// TODO: Merge with Opcode 42?
-void MystScriptParser_Myst::opcode_198(uint16 op, uint16 var, uint16 argc, uint16 *argv) {
- varUnusedCheck(op, var);
-
- // Used on Card 4143 (Dock near Marker Switch, facing Cogs)
- if (argc == 9) {
- uint16 soundId = argv[0];
- uint16 u0 = argv[1];
- uint16 u1 = argv[2];
- Common::Rect rect = Common::Rect(argv[3], argv[4], argv[5], argv[6]);
- uint16 updateDirection = argv[7];
- uint16 u2 = argv[8];
-
- debugC(kDebugScript, "Opcode %d: Close Dock Marker Switch Vault", op);
- debugC(kDebugScript, "\tsoundId: %d", soundId);
- debugC(kDebugScript, "\tu0: %d", u0);
- debugC(kDebugScript, "\tu1: %d", u1);
+void MystScriptParser_Myst::o_dockVaultForceClose(uint16 op, uint16 var, uint16 argc, uint16 *argv) {
+ // Used on Myst 4143 (Dock near Marker Switch)
+ MystVariables::Myst &myst = _vm->_saveLoad->_v->myst;
+ uint16 soundId = argv[0];
+ uint16 delay = argv[1];
+ uint16 directionalUpdateDataSize = argv[2];
- debugC(kDebugScript, "\trect.left: %d", rect.left);
- debugC(kDebugScript, "\trect.top: %d", rect.top);
- debugC(kDebugScript, "\trect.right: %d", rect.right);
- debugC(kDebugScript, "\trect.bottom: %d", rect.bottom);
- debugC(kDebugScript, "\tupdateDirection: %d", updateDirection);
- debugC(kDebugScript, "\tu2: %d", u2);
+ debugC(kDebugScript, "Opcode %d: Vault Force Close", op);
+ debugC(kDebugScript, "\tsoundId: %d", soundId);
+ debugC(kDebugScript, "\tdirectionalUpdateDataSize: %d", directionalUpdateDataSize);
- if (_vm->_varStore->getVar(41) != 0) {
- Audio::SoundHandle *handle = _vm->_sound->playSound(soundId);
+ if (_dockVaultState) {
+ // Open switch
+ myst.dockMarkerSwitch = 1;
+ _vm->_sound->playSound(4143);
+ _vm->redrawArea(4);
- while (_vm->_mixer->isSoundHandleActive(*handle))
- _vm->_system->delayMillis(10);
- // TODO: Do Image Blit
- }
- } else
- unknown(op, var, argc, argv);
+ // Close vault
+ _dockVaultState = 0;
+ _vm->_sound->playSound(soundId);
+ _vm->redrawArea(41, false);
+ animatedUpdate(directionalUpdateDataSize, &argv[3], delay);
+ }
}
void MystScriptParser_Myst::opcode_199(uint16 op, uint16 var, uint16 argc, uint16 *argv) {
@@ -1675,32 +1705,45 @@ void MystScriptParser_Myst::opcode_201(uint16 op, uint16 var, uint16 argc, uint1
unknown(op, var, argc, argv);
}
-static struct {
- bool enabled;
- uint16 var;
-} g_opcode202Parameters;
+void MystScriptParser_Myst::towerRotationMap_run() {
+ if (!_towerRotationMapInitialized) {
+ _towerRotationMapInitialized = true;
+ _vm->_sound->playSound(4378);
-void MystScriptParser_Myst::opcode_202_run(void) {
- // Used for Card 4378 (Library Tower Rotation Map)
- // TODO: Fill in.. Code for Tower Rotation Angle etc..
- // Var 0, 3, 4, 5, 6, 7, 8, 9 used for Type 8 Image Display
- // Type 11 Hotspot for control..
- // Var 304 controls presence of Myst Library Image
-}
+ // Draw library
+ _vm->redrawArea(304, false);
-void MystScriptParser_Myst::opcode_202_disable(void) {
- g_opcode202Parameters.enabled = false;
-}
+ // Draw other resources
+ for (uint i = 1; i <= 10; i++) {
+ MystResourceType8 *resource = static_cast<MystResourceType8 *>(_vm->_resources[i]);
+ _vm->redrawResource(resource, false);
+ }
-void MystScriptParser_Myst::opcode_202(uint16 op, uint16 var, uint16 argc, uint16 *argv) {
- varUnusedCheck(op, var);
+ // Draw to screen
+ _vm->_gfx->updateScreen();
+ }
- // Used for Card 4378 (Library Tower Rotation Map)
- if (argc == 1) {
- // TODO: Figure Out argv[0] purpose.. number of image resources?
- g_opcode202Parameters.enabled = true;
- } else
- unknown(op, var, argc, argv);
+ uint32 time = _vm->_system->getMillis();
+ if (time > _startTime) {
+ if (_towerRotationMapClicked) {
+ // TODO: handle tower rotation
+ _startTime = time + 100;
+ } else {
+ // Blink tower
+ _startTime = time + 500;
+ _tempVar = (_tempVar + 1) % 2;
+ _towerRotationMapTower->drawConditionalDataToScreen(_tempVar);
+ }
+ }
+}
+
+void MystScriptParser_Myst::o_towerRotationMap_init(uint16 op, uint16 var, uint16 argc, uint16 *argv) {
+ _towerRotationMapRunning = true;
+ _towerRotationMapTower = static_cast<MystResourceType11 *>(_invokingResource);
+ _towerRotationMapLabel = static_cast<MystResourceType8 *>(_vm->_resources[argv[0]]);
+ _tempVar = 0;
+ _startTime = 0;
+ _towerRotationMapClicked = false;
}
void MystScriptParser_Myst::o_forechamberDoor_init(uint16 op, uint16 var, uint16 argc, uint16 *argv) {
diff --git a/engines/mohawk/myst_stacks/myst.h b/engines/mohawk/myst_stacks/myst.h
index 0fdadc387b..2a6e812b8a 100644
--- a/engines/mohawk/myst_stacks/myst.h
+++ b/engines/mohawk/myst_stacks/myst.h
@@ -53,8 +53,7 @@ private:
void opcode_201_run();
void opcode_201_disable();
- void opcode_202_run();
- void opcode_202_disable();
+ void towerRotationMap_run();
void opcode_205_run();
void opcode_205_disable();
void libraryBookcaseTransform_run();
@@ -70,9 +69,11 @@ private:
DECLARE_OPCODE(o_fireplaceToggleButton);
DECLARE_OPCODE(o_fireplaceRotation);
DECLARE_OPCODE(opcode_105);
+ DECLARE_OPCODE(o_towerRotationStart);
+ DECLARE_OPCODE(o_towerRotationEnd);
DECLARE_OPCODE(opcode_109);
- DECLARE_OPCODE(opcode_113);
- DECLARE_OPCODE(opcode_114);
+ DECLARE_OPCODE(o_dockVaultOpen);
+ DECLARE_OPCODE(o_dockVaultClose);
DECLARE_OPCODE(o_bookGivePage);
DECLARE_OPCODE(o_clockWheelsExecute);
DECLARE_OPCODE(opcode_117);
@@ -131,12 +132,12 @@ private:
DECLARE_OPCODE(opcode_195);
DECLARE_OPCODE(opcode_196);
DECLARE_OPCODE(opcode_197);
- DECLARE_OPCODE(opcode_198);
+ DECLARE_OPCODE(o_dockVaultForceClose);
DECLARE_OPCODE(opcode_199);
DECLARE_OPCODE(o_libraryBook_init);
DECLARE_OPCODE(opcode_201);
- DECLARE_OPCODE(opcode_202);
+ DECLARE_OPCODE(o_towerRotationMap_init);
DECLARE_OPCODE(o_forechamberDoor_init);
DECLARE_OPCODE(opcode_204);
DECLARE_OPCODE(opcode_205);
@@ -196,6 +197,14 @@ private:
uint16 _clockTurningWheel;
+ uint16 _dockVaultState; // 92
+
+ bool _towerRotationMapRunning;
+ uint16 _towerRotationMapInitialized; // 292
+ MystResourceType11 *_towerRotationMapTower; // 108
+ MystResourceType8 *_towerRotationMapLabel; // 112
+ bool _towerRotationMapClicked; // 132
+
void generatorRedrawRocket();
void generatorButtonValue(MystResource *button, uint16 &offset, uint16 &value);