aboutsummaryrefslogtreecommitdiff
path: root/engines/mohawk/myst_stacks/myst.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/mohawk/myst_stacks/myst.cpp')
-rw-r--r--engines/mohawk/myst_stacks/myst.cpp44
1 files changed, 44 insertions, 0 deletions
diff --git a/engines/mohawk/myst_stacks/myst.cpp b/engines/mohawk/myst_stacks/myst.cpp
index 764fb04eda..c9f09982e1 100644
--- a/engines/mohawk/myst_stacks/myst.cpp
+++ b/engines/mohawk/myst_stacks/myst.cpp
@@ -51,6 +51,8 @@ Myst::Myst(MohawkEngine_Myst *vm) :
_towerRotationOverSpot = false;
_libraryBookcaseChanged = false;
+ _libraryBookPagesTurning = false;
+ _libraryCombinationBookPagesTurning = false;
_dockVaultState = 0;
_cabinDoorOpened = 0;
@@ -184,6 +186,8 @@ void Myst::setupOpcodes() {
REGISTER_OPCODE(175, Myst, o_observatoryYearSliderEndMove);
REGISTER_OPCODE(176, Myst, o_observatoryTimeSliderStartMove);
REGISTER_OPCODE(177, Myst, o_observatoryTimeSliderEndMove);
+ REGISTER_OPCODE(178, Myst, o_libraryBookPageTurnStartLeft);
+ REGISTER_OPCODE(179, Myst, o_libraryBookPageTurnStartRight);
REGISTER_OPCODE(180, Myst, o_libraryCombinationBookStop);
REGISTER_OPCODE(181, Myst, NOP);
REGISTER_OPCODE(182, Myst, o_cabinMatchLight);
@@ -246,6 +250,7 @@ void Myst::setupOpcodes() {
void Myst::disablePersistentScripts() {
_libraryBookcaseMoving = false;
_generatorControlRoomRunning = false;
+ _libraryBookPagesTurning = false;
_libraryCombinationBookPagesTurning = false;
_clockTurningWheel = 0;
_towerRotationMapRunning = false;
@@ -277,6 +282,9 @@ void Myst::runPersistentScripts() {
if (_libraryCombinationBookPagesTurning)
libraryCombinationBook_run();
+ if (_libraryBookPagesTurning)
+ libraryBook_run();
+
if (_libraryBookcaseMoving)
libraryBookcaseTransform_run();
@@ -847,6 +855,10 @@ uint16 Myst::bookCountPages(uint16 var) {
}
void Myst::o_libraryBookPageTurnLeft(uint16 var, const ArgumentsArray &args) {
+ libraryBookPageTurnLeft();
+}
+
+void Myst::libraryBookPageTurnLeft() {
if (_libraryBookPage - 1 >= 0) {
_libraryBookPage--;
@@ -861,6 +873,10 @@ void Myst::o_libraryBookPageTurnLeft(uint16 var, const ArgumentsArray &args) {
}
void Myst::o_libraryBookPageTurnRight(uint16 var, const ArgumentsArray &args) {
+ libraryBookPageTurnRight();
+}
+
+void Myst::libraryBookPageTurnRight() {
if (_libraryBookPage + 1 < _libraryBookNumPages) {
_libraryBookPage++;
@@ -2540,7 +2556,35 @@ void Myst::observatoryUpdateTime() {
}
}
+void Myst::o_libraryBookPageTurnStartLeft(uint16 var, const ArgumentsArray &args) {
+ _tempVar = -1;
+ libraryBookPageTurnLeft();
+ _startTime = _vm->_system->getMillis();
+ _libraryBookPagesTurning = true;
+}
+
+void Myst::o_libraryBookPageTurnStartRight(uint16 var, const ArgumentsArray &args) {
+ _tempVar = 1;
+ libraryBookPageTurnRight();
+ _startTime = _vm->_system->getMillis();
+ _libraryBookPagesTurning = true;
+}
+
+void Myst::libraryBook_run() {
+ uint32 time = _vm->_system->getMillis();
+ if (time >= _startTime + 500) {
+ if (_tempVar > 0) {
+ libraryBookPageTurnRight();
+ _startTime = time;
+ } else if (_tempVar < 0) {
+ libraryBookPageTurnLeft();
+ _startTime = time;
+ }
+ }
+}
+
void Myst::o_libraryCombinationBookStop(uint16 var, const ArgumentsArray &args) {
+ _libraryBookPagesTurning = false;
_libraryCombinationBookPagesTurning = false;
}