From b04f038fb664fa349d0f343e279490de560e05aa Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Mon, 5 Mar 2018 07:21:54 -0500 Subject: XEEN: Fixes returning to main menus after viewing intro/end cutscenes --- engines/xeen/party.cpp | 1 - engines/xeen/worldofxeen/clouds_cutscenes.cpp | 11 +++++-- engines/xeen/worldofxeen/darkside_cutscenes.cpp | 35 +++++++++++++-------- engines/xeen/worldofxeen/worldofxeen_menu.cpp | 41 +++++++++++++++++++------ engines/xeen/worldofxeen/worldofxeen_menu.h | 16 +++++----- 5 files changed, 72 insertions(+), 32 deletions(-) (limited to 'engines/xeen') diff --git a/engines/xeen/party.cpp b/engines/xeen/party.cpp index 62e74ae8c2..f6c1fe53f9 100644 --- a/engines/xeen/party.cpp +++ b/engines/xeen/party.cpp @@ -538,7 +538,6 @@ int Party::subtract(ConsumableType consumableId, uint amount, PartyBank whereId, } void Party::notEnough(ConsumableType consumableId, PartyBank whereId, bool mode, MessageWaitType wait) { - assert(consumableId < 4 && whereId < 2); Common::String msg = Common::String::format( mode ? Res.NO_X_IN_THE_Y : Res.NOT_ENOUGH_X_IN_THE_Y, Res.CONSUMABLE_NAMES[consumableId], Res.WHERE_NAMES[whereId]); 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 -- cgit v1.2.3