aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBastien Bouclet2018-04-10 19:54:02 +0200
committerBastien Bouclet2018-04-10 19:58:56 +0200
commit3a8655bc815e7de3a789373021e74e33810ce701 (patch)
treeeb1eccda41b1bda81101e0b5d34a387e8e088214
parent58d4f11f8f8cf4a8e589978f75c780ea56f1049e (diff)
downloadscummvm-rg350-3a8655bc815e7de3a789373021e74e33810ce701.tar.gz
scummvm-rg350-3a8655bc815e7de3a789373021e74e33810ce701.tar.bz2
scummvm-rg350-3a8655bc815e7de3a789373021e74e33810ce701.zip
MOHAWK: MYST: Fix flyby movies to behave more like the original
* Keep playing the previously running background sound while playing the flyby. * Don't play the flyby after loading a save. * Play the flyby before both linking sounds. Fixes #10482, Fixes #10483.
-rw-r--r--engines/mohawk/myst.cpp85
-rw-r--r--engines/mohawk/myst.h2
2 files changed, 47 insertions, 40 deletions
diff --git a/engines/mohawk/myst.cpp b/engines/mohawk/myst.cpp
index 9103b03a31..11279ec376 100644
--- a/engines/mohawk/myst.cpp
+++ b/engines/mohawk/myst.cpp
@@ -262,8 +262,38 @@ void MohawkEngine_Myst::playMovieBlocking(const Common::String &name, MystStack
waitUntilMovieEnds(video);
}
-void MohawkEngine_Myst::playFlybyMovie(const Common::String &name) {
- Common::String filename = wrapMovieFilename(name, kMasterpieceOnly);
+void MohawkEngine_Myst::playFlybyMovie(uint16 stack, uint16 card) {
+ // Play Flyby Entry Movie on Masterpiece Edition.
+ const char *flyby = nullptr;
+
+ switch (stack) {
+ case kSeleniticStack:
+ flyby = "selenitic flyby";
+ break;
+ case kStoneshipStack:
+ flyby = "stoneship flyby";
+ break;
+ // Myst Flyby Movie not used in Original Masterpiece Edition Engine
+ // We play it when first arriving on Myst, and if the user has chosen so.
+ case kMystStack:
+ if (ConfMan.getBool("playmystflyby"))
+ flyby = "myst flyby";
+ break;
+ case kMechanicalStack:
+ flyby = "mech age flyby";
+ break;
+ case kChannelwoodStack:
+ flyby = "channelwood flyby";
+ break;
+ default:
+ break;
+ }
+
+ if (!flyby) {
+ return;
+ }
+
+ Common::String filename = wrapMovieFilename(flyby, kMasterpieceOnly);
VideoEntryPtr video = _video->playMovie(filename, Audio::Mixer::kSFXSoundType);
if (!video) {
error("Failed to open the '%s' movie", filename.c_str());
@@ -486,20 +516,27 @@ void MohawkEngine_Myst::pauseEngineIntern(bool pause) {
void MohawkEngine_Myst::changeToStack(uint16 stack, uint16 card, uint16 linkSrcSound, uint16 linkDstSound) {
debug(2, "changeToStack(%d)", stack);
- _curStack = stack;
-
// Fill screen with black and empty cursor
_cursor->setCursor(0);
_currentCursor = 0;
+ _sound->stopEffect();
+ _video->stopVideos();
+
+ // In Myst ME, play a fullscreen flyby movie, except when loading saves.
+ // Also play a flyby when first linking to Myst.
+ if (getFeatures() & GF_ME
+ && (_curStack != kIntroStack || (stack == kMystStack && card == 4134))) {
+ playFlybyMovie(stack, card);
+ }
+
+ _sound->stopBackground();
+
if (getFeatures() & GF_ME)
_system->fillScreen(_system->getScreenFormat().RGBToColor(0, 0, 0));
else
_gfx->clearScreenPalette();
- _sound->stopEffect();
- _sound->stopBackground();
- _video->stopVideos();
if (linkSrcSound)
playSoundBlocking(linkSrcSound);
@@ -509,6 +546,8 @@ void MohawkEngine_Myst::changeToStack(uint16 stack, uint16 card, uint16 linkSrcS
delete _prevStack;
_prevStack = _scriptParser;
+ _curStack = stack;
+
switch (_curStack) {
case kChannelwoodStack:
_gameState->_globals.currentAge = 4;
@@ -576,38 +615,6 @@ void MohawkEngine_Myst::changeToStack(uint16 stack, uint16 card, uint16 linkSrcS
_cache.clear();
_gfx->clearCache();
- if (getFeatures() & GF_ME) {
- // Play Flyby Entry Movie on Masterpiece Edition.
- const char *flyby = nullptr;
-
- switch (_curStack) {
- case kSeleniticStack:
- flyby = "selenitic flyby";
- break;
- case kStoneshipStack:
- flyby = "stoneship flyby";
- break;
- // Myst Flyby Movie not used in Original Masterpiece Edition Engine
- // We play it when first arriving on Myst, and if the user has chosen so.
- case kMystStack:
- if (ConfMan.getBool("playmystflyby") && card == 4134)
- flyby = "myst flyby";
- break;
- case kMechanicalStack:
- flyby = "mech age flyby";
- break;
- case kChannelwoodStack:
- flyby = "channelwood flyby";
- break;
- default:
- break;
- }
-
- if (flyby) {
- playFlybyMovie(flyby);
- }
- }
-
changeToCard(card, kTransitionCopy);
if (linkDstSound)
diff --git a/engines/mohawk/myst.h b/engines/mohawk/myst.h
index 379110fbc4..2758b7fdca 100644
--- a/engines/mohawk/myst.h
+++ b/engines/mohawk/myst.h
@@ -229,7 +229,7 @@ public:
VideoEntryPtr playMovie(const Common::String &name, MystStack stack);
VideoEntryPtr findVideo(const Common::String &name, MystStack stack);
void playMovieBlocking(const Common::String &name, MystStack stack, uint16 x, uint16 y);
- void playFlybyMovie(const Common::String &name);
+ void playFlybyMovie(uint16 stack, uint16 card);
void waitUntilMovieEnds(const VideoEntryPtr &video);
void playSoundBlocking(uint16 id);