mirror of
https://github.com/libretro/scummvm.git
synced 2025-03-06 18:27:26 +00:00
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.
This commit is contained in:
parent
58d4f11f8f
commit
3a8655bc81
@ -262,8 +262,38 @@ void MohawkEngine_Myst::playMovieBlocking(const Common::String &name, MystStack
|
|||||||
waitUntilMovieEnds(video);
|
waitUntilMovieEnds(video);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MohawkEngine_Myst::playFlybyMovie(const Common::String &name) {
|
void MohawkEngine_Myst::playFlybyMovie(uint16 stack, uint16 card) {
|
||||||
Common::String filename = wrapMovieFilename(name, kMasterpieceOnly);
|
// 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);
|
VideoEntryPtr video = _video->playMovie(filename, Audio::Mixer::kSFXSoundType);
|
||||||
if (!video) {
|
if (!video) {
|
||||||
error("Failed to open the '%s' movie", filename.c_str());
|
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) {
|
void MohawkEngine_Myst::changeToStack(uint16 stack, uint16 card, uint16 linkSrcSound, uint16 linkDstSound) {
|
||||||
debug(2, "changeToStack(%d)", stack);
|
debug(2, "changeToStack(%d)", stack);
|
||||||
|
|
||||||
_curStack = stack;
|
|
||||||
|
|
||||||
// Fill screen with black and empty cursor
|
// Fill screen with black and empty cursor
|
||||||
_cursor->setCursor(0);
|
_cursor->setCursor(0);
|
||||||
_currentCursor = 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)
|
if (getFeatures() & GF_ME)
|
||||||
_system->fillScreen(_system->getScreenFormat().RGBToColor(0, 0, 0));
|
_system->fillScreen(_system->getScreenFormat().RGBToColor(0, 0, 0));
|
||||||
else
|
else
|
||||||
_gfx->clearScreenPalette();
|
_gfx->clearScreenPalette();
|
||||||
|
|
||||||
_sound->stopEffect();
|
|
||||||
_sound->stopBackground();
|
|
||||||
_video->stopVideos();
|
|
||||||
if (linkSrcSound)
|
if (linkSrcSound)
|
||||||
playSoundBlocking(linkSrcSound);
|
playSoundBlocking(linkSrcSound);
|
||||||
|
|
||||||
@ -509,6 +546,8 @@ void MohawkEngine_Myst::changeToStack(uint16 stack, uint16 card, uint16 linkSrcS
|
|||||||
delete _prevStack;
|
delete _prevStack;
|
||||||
_prevStack = _scriptParser;
|
_prevStack = _scriptParser;
|
||||||
|
|
||||||
|
_curStack = stack;
|
||||||
|
|
||||||
switch (_curStack) {
|
switch (_curStack) {
|
||||||
case kChannelwoodStack:
|
case kChannelwoodStack:
|
||||||
_gameState->_globals.currentAge = 4;
|
_gameState->_globals.currentAge = 4;
|
||||||
@ -576,38 +615,6 @@ void MohawkEngine_Myst::changeToStack(uint16 stack, uint16 card, uint16 linkSrcS
|
|||||||
_cache.clear();
|
_cache.clear();
|
||||||
_gfx->clearCache();
|
_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);
|
changeToCard(card, kTransitionCopy);
|
||||||
|
|
||||||
if (linkDstSound)
|
if (linkDstSound)
|
||||||
|
@ -229,7 +229,7 @@ public:
|
|||||||
VideoEntryPtr playMovie(const Common::String &name, MystStack stack);
|
VideoEntryPtr playMovie(const Common::String &name, MystStack stack);
|
||||||
VideoEntryPtr findVideo(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 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 waitUntilMovieEnds(const VideoEntryPtr &video);
|
||||||
|
|
||||||
void playSoundBlocking(uint16 id);
|
void playSoundBlocking(uint16 id);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user