aboutsummaryrefslogtreecommitdiff
path: root/engines/xeen/worldofxeen
diff options
context:
space:
mode:
authorPaul Gilbert2018-03-05 07:21:54 -0500
committerPaul Gilbert2018-03-05 07:21:54 -0500
commitb04f038fb664fa349d0f343e279490de560e05aa (patch)
tree85a556fb13e53c8748dd384f51a7a75413f0f00c /engines/xeen/worldofxeen
parentd48275970aa78866349f20f44bacdc0aff83e57b (diff)
downloadscummvm-rg350-b04f038fb664fa349d0f343e279490de560e05aa.tar.gz
scummvm-rg350-b04f038fb664fa349d0f343e279490de560e05aa.tar.bz2
scummvm-rg350-b04f038fb664fa349d0f343e279490de560e05aa.zip
XEEN: Fixes returning to main menus after viewing intro/end cutscenes
Diffstat (limited to 'engines/xeen/worldofxeen')
-rw-r--r--engines/xeen/worldofxeen/clouds_cutscenes.cpp11
-rw-r--r--engines/xeen/worldofxeen/darkside_cutscenes.cpp35
-rw-r--r--engines/xeen/worldofxeen/worldofxeen_menu.cpp41
-rw-r--r--engines/xeen/worldofxeen/worldofxeen_menu.h16
4 files changed, 72 insertions, 31 deletions
diff --git a/engines/xeen/worldofxeen/clouds_cutscenes.cpp b/engines/xeen/worldofxeen/clouds_cutscenes.cpp
index fb1440e865..7a857729db 100644
--- a/engines/xeen/worldofxeen/clouds_cutscenes.cpp
+++ b/engines/xeen/worldofxeen/clouds_cutscenes.cpp
@@ -360,6 +360,8 @@ bool CloudsCutscenes::showCloudsIntroInner() {
}
void CloudsCutscenes::showCloudsEnding(uint finalScore) {
+ EventsManager &events = *g_vm->_events;
+ Sound &sound = *g_vm->_sound;
_mirror.load("mirror.end");
_mirrBack.load("mirrback.end");
_mergeX = 0;
@@ -369,8 +371,13 @@ void CloudsCutscenes::showCloudsEnding(uint finalScore) {
if (showCloudsEnding2())
if (showCloudsEnding3())
if (showCloudsEnding4(finalScore))
- if (showCloudsEnding5())
- doScroll(true, false);
+ showCloudsEnding5();
+
+ events.clearEvents();
+ sound.stopAllAudio();
+
+ if (!g_vm->shouldExit())
+ doScroll(true, false);
}
bool CloudsCutscenes::showCloudsEnding1() {
diff --git a/engines/xeen/worldofxeen/darkside_cutscenes.cpp b/engines/xeen/worldofxeen/darkside_cutscenes.cpp
index 4a0489c194..171ce06f2a 100644
--- a/engines/xeen/worldofxeen/darkside_cutscenes.cpp
+++ b/engines/xeen/worldofxeen/darkside_cutscenes.cpp
@@ -869,10 +869,13 @@ bool DarkSideCutscenes::showWorldOfXeenLogo() {
}
void DarkSideCutscenes::showDarkSideEnding(uint endingScore) {
- _vm->_files->setGameCc(1);
- _vm->_files->_isDarkCc = true;
- _vm->_sound->_musicSide = 1;
- _vm->_screen->fadeOut();
+ FileManager &files = *g_vm->_files;
+ Screen &screen = *g_vm->_screen;
+ Sound &sound = *g_vm->_sound;
+ files.setGameCc(1);
+ files._isDarkCc = true;
+ sound._musicSide = 1;
+ screen.fadeOut();
if (showDarkSideEnding1())
if (showDarkSideEnding2())
@@ -880,7 +883,10 @@ void DarkSideCutscenes::showDarkSideEnding(uint endingScore) {
showDarkSideEnding4();
showDarkSideScore(endingScore);
- _vm->_screen->fadeOut();
+
+ _claw.clear();
+ _dragon1.clear();
+ screen.fadeOut();
}
bool DarkSideCutscenes::showDarkSideEnding1() {
@@ -1736,24 +1742,27 @@ void DarkSideCutscenes::showDarkSideScore(uint endingScore) {
Sound &sound = *_vm->_sound;
sound.stopAllAudio();
- sound.playSong("outday3.m");
- Common::String str = Common::String::format(Res.DARKSIDE_ENDING1, endingScore);
- showPharaohEndText(str.c_str(), Res.DARKSIDE_ENDING2);
+ if (_vm->shouldExit()) {
+ sound.playSong("outday3.m");
- if (!_vm->shouldExit())
- saves.saveGame();
+ Common::String str = Common::String::format(Res.DARKSIDE_ENDING1, endingScore);
+ showPharaohEndText(str.c_str(), Res.DARKSIDE_ENDING2);
+
+ if (!_vm->shouldExit())
+ saves.saveGame();
+ }
}
bool DarkSideCutscenes::showPharaohEndText(const char *msg1, const char *msg2, const char *msg3) {
Screen &screen = *_vm->_screen;
EventsManager &events = *_vm->_events;
Windows &windows = *_vm->_windows;
- SpriteResource claw("claw.int");
- SpriteResource dragon1("dragon1.int");
int numPages = 0 + (msg1 ? 1 : 0) + (msg2 ? 1 : 0) + (msg3 ? 1 : 0);
const char *const text[3] = { msg1, msg2, msg3 };
+ _claw.load("claw.int");
+ _dragon1.load("dragon1.int");
screen.loadBackground("3room.raw");
screen.saveBackground();
screen.loadPalette("dark.pal");
@@ -1785,6 +1794,8 @@ bool DarkSideCutscenes::showPharaohEndText(const char *msg1, const char *msg2, c
events.clearEvents();
}
+ _claw.clear();
+ _dragon1.clear();
return true;
}
diff --git a/engines/xeen/worldofxeen/worldofxeen_menu.cpp b/engines/xeen/worldofxeen/worldofxeen_menu.cpp
index 36d6b7c95e..3e4e14455e 100644
--- a/engines/xeen/worldofxeen/worldofxeen_menu.cpp
+++ b/engines/xeen/worldofxeen/worldofxeen_menu.cpp
@@ -89,8 +89,8 @@ void MainMenuContainer::execute() {
// Fade/scroll in screen if first frame showing screen
if (!showFlag) {
- loadBackground();
- screen.doScroll(false, false);
+ display();
+ screen.doScroll(false, true);
showFlag = true;
}
@@ -125,14 +125,22 @@ void MainMenuContainer::execute() {
/*------------------------------------------------------------------------*/
CloudsMainMenuContainer::CloudsMainMenuContainer() : MainMenuContainer("intro.vga", 9) {
- g_vm->_sound->playSong("inn.m");
}
-void CloudsMainMenuContainer::loadBackground() {
+void CloudsMainMenuContainer::display() {
+ FileManager &files = *g_vm->_files;
Screen &screen = *g_vm->_screen;
+ Sound &sound = *g_vm->_sound;
+
+ sound._musicSide = 0;
+ files.setGameCc(0);
+
screen.loadPalette("mm4.pal");
screen.loadBackground("intro.raw");
screen.saveBackground();
+
+ if (!sound.isMusicPlaying())
+ sound.playSong("inn.m");
}
void CloudsMainMenuContainer::showMenuDialog() {
@@ -153,13 +161,22 @@ DarkSideMainMenuContainer::DarkSideMainMenuContainer() : MainMenuContainer("titl
_background.load("title2.int");
}
-void DarkSideMainMenuContainer::loadBackground() {
+void DarkSideMainMenuContainer::display() {
+ FileManager &files = *g_vm->_files;
Screen &screen = *g_vm->_screen;
+ Sound &sound = *g_vm->_sound;
+
_background.draw(0, 0, Common::Point(0, 0));
_background.draw(0, 1, Common::Point(160, 0));
+ sound._musicSide = 1;
+ files.setGameCc(1);
+
screen.loadPalette("dark.pal");
screen.saveBackground();
+
+ if (!sound.isMusicPlaying())
+ sound.playSong("newbrigh.m");
}
void DarkSideMainMenuContainer::showMenuDialog() {
@@ -169,16 +186,22 @@ void DarkSideMainMenuContainer::showMenuDialog() {
/*------------------------------------------------------------------------*/
WorldOfXeenMainMenuContainer::WorldOfXeenMainMenuContainer() : MainMenuContainer("world.int", 5) {
- Sound &sound = *g_vm->_sound;
- sound._musicSide = 1;
- sound.playSong("newbrigh.m");
}
-void WorldOfXeenMainMenuContainer::loadBackground() {
+void WorldOfXeenMainMenuContainer::display() {
+ FileManager &files = *g_vm->_files;
Screen &screen = *g_vm->_screen;
+ Sound &sound = *g_vm->_sound;
+
+ sound._musicSide = 1;
+ files.setGameCc(1);
+
screen.loadPalette("dark.pal");
screen.loadBackground("world.raw");
screen.saveBackground();
+
+ if (!sound.isMusicPlaying())
+ sound.playSong("newbrigh.m");
}
void WorldOfXeenMainMenuContainer::showMenuDialog() {
diff --git a/engines/xeen/worldofxeen/worldofxeen_menu.h b/engines/xeen/worldofxeen/worldofxeen_menu.h
index f3cee755f3..e753665f08 100644
--- a/engines/xeen/worldofxeen/worldofxeen_menu.h
+++ b/engines/xeen/worldofxeen/worldofxeen_menu.h
@@ -44,9 +44,9 @@ protected:
void draw();
/**
- * Load the background
+ * Called when the menu screen is first shown
*/
- virtual void loadBackground() = 0;
+ virtual void display() = 0;
/**
* Shows the main menu dialog
@@ -84,9 +84,9 @@ public:
class CloudsMainMenuContainer : public MainMenuContainer {
protected:
/**
- * Load the background
+ * Called when the menu screen is first shown
*/
- virtual void loadBackground();
+ virtual void display();
/**
* Shows the main menu dialog
@@ -101,9 +101,9 @@ private:
SpriteResource _background;
protected:
/**
- * Load the background
+ * Called when the menu screen is first shown
*/
- virtual void loadBackground();
+ virtual void display();
/**
* Shows the main menu dialog
@@ -116,9 +116,9 @@ public:
class WorldOfXeenMainMenuContainer : public MainMenuContainer {
protected:
/**
- * Load the background
+ * Called when the menu screen is first shown
*/
- virtual void loadBackground();
+ virtual void display();
/**
* Shows the main menu dialog