aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/mohawk/myst.cpp36
-rw-r--r--engines/mohawk/myst.h1
2 files changed, 35 insertions, 2 deletions
diff --git a/engines/mohawk/myst.cpp b/engines/mohawk/myst.cpp
index b2d04e1dd5..9d1a1e12a2 100644
--- a/engines/mohawk/myst.cpp
+++ b/engines/mohawk/myst.cpp
@@ -284,6 +284,7 @@ void MohawkEngine_Myst::playFlybyMovie(MystStack stack) {
// Play Flyby Entry Movie on Masterpiece Edition.
const char *flyby = nullptr;
+ bool looping = true;
switch (stack) {
case kSeleniticStack:
@@ -295,8 +296,10 @@ void MohawkEngine_Myst::playFlybyMovie(MystStack stack) {
// 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"))
+ if (ConfMan.getBool("playmystflyby")) {
flyby = "myst flyby";
+ looping = false;
+ }
break;
case kMechanicalStack:
flyby = "mech age flyby";
@@ -321,7 +324,36 @@ void MohawkEngine_Myst::playFlybyMovie(MystStack stack) {
}
video->center();
- waitUntilMovieEnds(video);
+ playSkippableMovie(video, looping);
+}
+
+void MohawkEngine_Myst::playSkippableMovie(const VideoEntryPtr &video, bool looping) {
+ _waitingOnBlockingOperation = true;
+
+ video->setLooping(true);
+
+ _cursor->setCursor(_mainCursor);
+
+ while ((looping || !video->endOfVideo()) && !shouldQuit()) {
+ doFrame();
+
+ // Allow skipping
+ if (_escapePressed) {
+ _escapePressed = false;
+ break;
+ }
+
+ if (_mouseClicked) {
+ _mouseClicked = false;
+ break;
+ }
+ }
+
+ _cursor->setCursor(0);
+
+ // Ensure it's removed
+ _video->removeEntry(video);
+ _waitingOnBlockingOperation = false;
}
void MohawkEngine_Myst::waitUntilMovieEnds(const VideoEntryPtr &video) {
diff --git a/engines/mohawk/myst.h b/engines/mohawk/myst.h
index 27fa3005ad..22e6982e1e 100644
--- a/engines/mohawk/myst.h
+++ b/engines/mohawk/myst.h
@@ -172,6 +172,7 @@ public:
VideoEntryPtr findVideo(const Common::String &name, MystStack stack);
void playMovieBlocking(const Common::String &name, MystStack stack, uint16 x, uint16 y);
void playFlybyMovie(MystStack stack);
+ void playSkippableMovie(const VideoEntryPtr &video, bool looping);
void waitUntilMovieEnds(const VideoEntryPtr &video);
Common::String selectLocalizedMovieFilename(const Common::String &movieName);