aboutsummaryrefslogtreecommitdiff
path: root/engines/mohawk/myst_scripts.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/mohawk/myst_scripts.cpp')
-rw-r--r--engines/mohawk/myst_scripts.cpp29
1 files changed, 21 insertions, 8 deletions
diff --git a/engines/mohawk/myst_scripts.cpp b/engines/mohawk/myst_scripts.cpp
index ba426505e1..c1a593b430 100644
--- a/engines/mohawk/myst_scripts.cpp
+++ b/engines/mohawk/myst_scripts.cpp
@@ -40,6 +40,7 @@ MystScriptEntry::MystScriptEntry() {
var = 0;
resourceId = 0;
u1 = 0;
+ opcode = 0;
}
const uint8 MystScriptParser::_stackMap[11] = {
@@ -79,8 +80,10 @@ MystScriptParser::MystScriptParser(MohawkEngine_Myst *vm) :
_invokingResource = nullptr;
_savedCardId = 0;
_savedCursorId = 0;
+ _savedMapCardId = 0;
_tempVar = 0;
_scriptNestingLevel = 0;
+ _startTime = 0;
}
MystScriptParser::~MystScriptParser() {
@@ -375,7 +378,7 @@ void MystScriptParser::o_takePage(uint16 var, const ArgumentsArray &args) {
cursorId = kDefaultMystCursor;
}
- uint16 oldPage = _globals.heldPage;
+ HeldPage oldPage = _globals.heldPage;
// Take / drop page
toggleVar(var);
@@ -385,7 +388,7 @@ void MystScriptParser::o_takePage(uint16 var, const ArgumentsArray &args) {
_vm->redrawArea(var);
// Set new cursor
- if (_globals.heldPage)
+ if (_globals.heldPage != kNoPage)
_vm->setMainCursor(cursorId);
else
_vm->setMainCursor(kDefaultMystCursor);
@@ -600,9 +603,11 @@ void MystScriptParser::o_copyImageToBackBuffer(uint16 var, const ArgumentsArray
Common::Rect dstRect = Common::Rect(args[5], args[6], 544, 333);
- if (dstRect.left == -1 || dstRect.top == -1) {
- // Interpreted as full screen
+ if (dstRect.left == -1) {
dstRect.left = 0;
+ }
+
+ if (dstRect.top == -1) {
dstRect.top = 0;
}
@@ -622,6 +627,8 @@ void MystScriptParser::o_copyImageToBackBuffer(uint16 var, const ArgumentsArray
}
void MystScriptParser::o_changeBackgroundSound(uint16 var, const ArgumentsArray &args) {
+ soundWaitStop();
+
// Used on Stoneship Card 2080
// Used on Channelwood Card 3225 with argc = 8 i.e. Conditional Sound List
Common::MemoryWriteStreamDynamic writeStream = Common::MemoryWriteStreamDynamic(DisposeAfterUse::YES);
@@ -749,11 +756,11 @@ void MystScriptParser::o_changeCardPlaySoundDirectional(uint16 var, const Argume
debugC(kDebugScript, "\tdelay between steps: %d", delayBetweenSteps);
debugC(kDebugScript, "\tanimated update data size: %d", dataSize);
+ _vm->changeToCard(cardId, kNoTransition);
+
if (soundId)
_vm->_sound->playEffect(soundId);
- _vm->changeToCard(cardId, kNoTransition);
-
animatedUpdate(ArgumentsArray(args.begin() + 4, dataSize), delayBetweenSteps);
}
@@ -784,12 +791,16 @@ void MystScriptParser::o_soundWaitStop(uint16 var, const ArgumentsArray &args) {
// Used on Selenitic Card 1191 (Maze Runner)
// Used on Mechanical Card 6267 (Code Lock)
// Used when Button is pushed...
- while (_vm->_sound->isEffectPlaying())
+ soundWaitStop();
+}
+
+void MystScriptParser::soundWaitStop() const {
+ while (_vm->_sound->isEffectPlaying() && !Engine::shouldQuit())
_vm->doFrame();
}
void MystScriptParser::o_quit(uint16 var, const ArgumentsArray &args) {
- _vm->quitGame();
+ Engine::quitGame();
}
void MystScriptParser::showMap() {
@@ -800,6 +811,8 @@ void MystScriptParser::showMap() {
}
void MystScriptParser::o_exitMap(uint16 var, const ArgumentsArray &args) {
+ assert(_savedMapCardId);
+
_vm->changeToCard(_savedMapCardId, kTransitionCopy);
}