diff options
author | Bastien Bouclet | 2010-11-29 20:54:11 +0000 |
---|---|---|
committer | Bastien Bouclet | 2010-11-29 20:54:11 +0000 |
commit | 95e97094fbfde94a719a8885d954e5eb74063da8 (patch) | |
tree | 5752373c05f30df130be7d240bb806188c2523b8 /engines/mohawk | |
parent | 00e13f4c259baab292eb97b80fa50aa9a8385ca9 (diff) | |
download | scummvm-rg350-95e97094fbfde94a719a8885d954e5eb74063da8.tar.gz scummvm-rg350-95e97094fbfde94a719a8885d954e5eb74063da8.tar.bz2 scummvm-rg350-95e97094fbfde94a719a8885d954e5eb74063da8.zip |
MOHAWK: Completed the sound lock puzzle
svn-id: r54611
Diffstat (limited to 'engines/mohawk')
-rw-r--r-- | engines/mohawk/myst_scripts_selenitic.cpp | 64 | ||||
-rw-r--r-- | engines/mohawk/myst_scripts_selenitic.h | 1 |
2 files changed, 37 insertions, 28 deletions
diff --git a/engines/mohawk/myst_scripts_selenitic.cpp b/engines/mohawk/myst_scripts_selenitic.cpp index b7aa9ab868..c365a8aa17 100644 --- a/engines/mohawk/myst_scripts_selenitic.cpp +++ b/engines/mohawk/myst_scripts_selenitic.cpp @@ -547,7 +547,7 @@ uint16 MystScriptParser_Selenitic::soundLockCurrentSound(uint16 position, bool p return 7289; } else if ((pixels && position < 192) || (!pixels && position == 8)) { return 8289; - } else if (pixels || (!pixels && position == 8)) { + } else if (pixels || (!pixels && position == 9)) { return 9289; } else { return 0; @@ -634,41 +634,49 @@ void MystScriptParser_Selenitic::o_114_soundLockEndMove(uint16 op, uint16 var, u _vm->_sound->resumeBackground(); } -void MystScriptParser_Selenitic::o_115_soundLockButton(uint16 op, uint16 var, uint16 argc, uint16 *argv) { - if (argc == 11) { - // Used for Selenitic Card 1147 (Musical Door Lock Button) - uint16 imageIdClose = argv[0]; // TODO: Sound Id? - uint16 imageIdOpen = argv[1]; // TODO: Sound Id? +void MystScriptParser_Selenitic::soundLockCheckSolution(MystResourceType10 *slider, uint16 value, uint16 solution, bool &solved) { + slider->drawConditionalDataToScreen(2); + _vm->_sound->playSound(soundLockCurrentSound(value / 12, false)); + _vm->_system->delayMillis(1500); - uint16 cardIdOpen = argv[2]; + if (value / 12 != solution) { + solved = false; + } - uint16 u0 = argv[3]; - uint16 u1 = argv[4]; + slider->drawConditionalDataToScreen(1); + _vm->_sound->stopSound(); +} - Common::Rect rect = Common::Rect(argv[5], argv[6], argv[7], argv[8]); +void MystScriptParser_Selenitic::o_115_soundLockButton(uint16 op, uint16 var, uint16 argc, uint16 *argv) { + uint16 *selenitic_vars = _vm->_saveLoad->_v->selenitic_vars; + bool solved = true; - uint16 updateDirection = argv[9]; - uint16 u2 = argv[10]; + _vm->_sound->pauseBackground(); + _vm->_sound->playSound(1147); + _sound_lock_button->drawConditionalDataToScreen(1); + _vm->_gfx->hideCursor(); - debugC(kDebugScript, "Music Door Lock Logic..."); - debugC(kDebugScript, "\timageId (Close): %d", imageIdClose); - debugC(kDebugScript, "\timageId (Open): %d", imageIdOpen); - debugC(kDebugScript, "\tcardId (Open): %d", cardIdOpen); - debugC(kDebugScript, "\tu0: %d", u0); - debugC(kDebugScript, "\tu1: %d", u1); + soundLockCheckSolution(_sound_lock_slider_1, selenitic_vars[13], 5, solved); + soundLockCheckSolution(_sound_lock_slider_2, selenitic_vars[14], 9, solved); + soundLockCheckSolution(_sound_lock_slider_3, selenitic_vars[15], 0, solved); + soundLockCheckSolution(_sound_lock_slider_4, selenitic_vars[16], 6, solved); + soundLockCheckSolution(_sound_lock_slider_5, selenitic_vars[17], 7, solved); - 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); + _vm->_sound->playSound(1148); + _vm->_sound->resumeBackground(); + + if (solved) { + _sound_lock_button->drawConditionalDataToScreen(2); - // TODO: Fix Logic... - // HACK: Bypass Door Lock For Now + uint16 cardIdOpen = argv[2]; + + //TODO: Change card with directional update playing sound _vm->changeToCard(cardIdOpen); - } else - unknown(op, var, argc, argv); + } else { + _sound_lock_button->drawConditionalDataToScreen(0); + } + + _vm->_gfx->showCursor(); } void MystScriptParser_Selenitic::o_117_soundReceiverEndMove(uint16 op, uint16 var, uint16 argc, uint16 *argv) { diff --git a/engines/mohawk/myst_scripts_selenitic.h b/engines/mohawk/myst_scripts_selenitic.h index fc07cfa3e9..4e2f06393e 100644 --- a/engines/mohawk/myst_scripts_selenitic.h +++ b/engines/mohawk/myst_scripts_selenitic.h @@ -112,6 +112,7 @@ private: uint16 soundLockCurrentSound(uint16 position, bool pixels); MystResourceType10 *soundLockSliderFromVar(uint16 var); + void soundLockCheckSolution(MystResourceType10 *slider, uint16 value, uint16 solution, bool &solved); void draw_digit(MystResource *_resource); }; |