aboutsummaryrefslogtreecommitdiff
path: root/engines/xeen/worldofxeen
diff options
context:
space:
mode:
Diffstat (limited to 'engines/xeen/worldofxeen')
-rw-r--r--engines/xeen/worldofxeen/worldofxeen.cpp91
-rw-r--r--engines/xeen/worldofxeen/worldofxeen.h21
-rw-r--r--engines/xeen/worldofxeen/worldofxeen_menu.cpp3
3 files changed, 41 insertions, 74 deletions
diff --git a/engines/xeen/worldofxeen/worldofxeen.cpp b/engines/xeen/worldofxeen/worldofxeen.cpp
index 54d3b482fc..9403b94bc2 100644
--- a/engines/xeen/worldofxeen/worldofxeen.cpp
+++ b/engines/xeen/worldofxeen/worldofxeen.cpp
@@ -32,63 +32,7 @@ namespace WorldOfXeen {
WorldOfXeenEngine::WorldOfXeenEngine(OSystem *syst, const XeenGameDescription *gameDesc)
: XeenEngine(syst, gameDesc), WorldOfXeenCutscenes(this) {
_seenDarkSideIntro = false;
- _pendingAction = WOX_PLAY_GAME;
-}
-
-void WorldOfXeenEngine::outerGameLoop() {
- //_pendingAction = getGameID() == GType_DarkSide ? WOX_DARKSIDE_INTRO : WOX_CLOUDS_INTRO;
- _pendingAction = WOX_MENU;
-
- if (_loadSaveSlot != -1)
- // Loading savegame from launcher, so Skip menu and go straight to game
- _pendingAction = WOX_PLAY_GAME;
-
- while (!shouldQuit() && _pendingAction != WOX_QUIT) {
- // TODO: Remove this once proper startup menus are added for Clouds & Dark Side
- if (g_vm->getGameID() != GType_WorldOfXeen) {
- _saves->newGame();
- _pendingAction = WOX_PLAY_GAME;
- }
-
- WOXGameAction action = _pendingAction;
- _pendingAction = WOX_MENU;
- _quitMode = QMODE_NONE;
-
- switch (action) {
- case WOX_CLOUDS_INTRO:
- if (showCloudsTitle())
- showCloudsIntro();
- break;
-
- case WOX_CLOUDS_ENDING:
- //showCloudsEnding();
- break;
-
- case WOX_DARKSIDE_INTRO:
- if (showDarkSideTitle())
- showDarkSideIntro();
- break;
-
- case WOX_DARKSIDE_ENDING:
- //showDarkSideEnding();
- break;
-
- case WOX_WORLD_ENDING:
- // TODO
- return;
-
- case WOX_MENU:
- WorldOfXeenMenu::show(this);
- break;
-
- case WOX_PLAY_GAME:
- playGame();
- break;
-
- default:
- break;
- }
- }
+ _gameMode = GMODE_STARTUP;
}
void WorldOfXeenEngine::death() {
@@ -218,11 +162,42 @@ void WorldOfXeenEngine::showCutscene(const Common::String &name, int status, uin
showDarkSideEnding(score);
else if (name == "WORLDEND")
showWorldOfXeenEnding((GooberState)status, score);
+ else if (name == "CLOUDS_TITLE")
+ showCloudsTitle();
+ else if (name == "CLOUDS_INTRO")
+ showCloudsIntro();
+ else if (name == "DARKSIDE_TITLE")
+ showDarkSideTitle();
+ else if (name == "DARKSIDE_INTRO")
+ showDarkSideIntro();
_screen->freePages();
_sound->stopAllAudio();
_events->clearEvents();
- _quitMode = QMODE_MENU;
+ _gameMode = GMODE_MENU;
+}
+
+void WorldOfXeenEngine::showStartup() {
+ if (getGameID() == GType_Clouds) {
+ if (showCloudsTitle())
+ showCloudsIntro();
+ } else {
+ if (showDarkSideTitle())
+ showDarkSideIntro();
+ }
+
+ _gameMode = GMODE_MENU;
+}
+
+void WorldOfXeenEngine::showMainMenu() {
+ if (getGameID() != GType_WorldOfXeen) {
+ // TODO: Implement menus for Clouds and Dark Side of Xeen
+ _saves->newGame();
+ _gameMode = GMODE_PLAY_GAME;
+ return;
+ }
+
+ WorldOfXeenMenu::show(this);
}
} // End of namespace WorldOfXeen
diff --git a/engines/xeen/worldofxeen/worldofxeen.h b/engines/xeen/worldofxeen/worldofxeen.h
index f985947af4..08c2e25ace 100644
--- a/engines/xeen/worldofxeen/worldofxeen.h
+++ b/engines/xeen/worldofxeen/worldofxeen.h
@@ -29,11 +29,6 @@
namespace Xeen {
namespace WorldOfXeen {
-enum WOXGameAction {
- WOX_QUIT, WOX_CLOUDS_INTRO, WOX_CLOUDS_ENDING, WOX_DARKSIDE_INTRO,
- WOX_DARKSIDE_ENDING, WOX_WORLD_ENDING, WOX_MENU, WOX_PLAY_GAME
-};
-
/**
* Implements a descendant of the base Xeen engine to handle
* Clouds of Xeen, Dark Side of Xeen, and Worlds of Xeen specific
@@ -42,10 +37,14 @@ enum WOXGameAction {
class WorldOfXeenEngine: public XeenEngine, public WorldOfXeenCutscenes {
protected:
/**
- * Outer gameplay loop responsible for dispatching control to game-specific
- * intros, main menus, or to play the actual game
+ * Show the starting sequence/intro
+ */
+ virtual void showStartup();
+
+ /**
+ * Show the startup menu
*/
- virtual void outerGameLoop();
+ virtual void showMainMenu();
/**
* Death cutscene
@@ -53,7 +52,6 @@ protected:
virtual void death();
public:
bool _seenDarkSideIntro;
- WOXGameAction _pendingAction;
public:
WorldOfXeenEngine(OSystem *syst, const XeenGameDescription *gameDesc);
virtual ~WorldOfXeenEngine() {}
@@ -67,11 +65,6 @@ public:
* Dream sequence
*/
virtual void dream();
-
- /**
- * Set the next overall game action to do
- */
- void setPendingAction(WOXGameAction action) { _pendingAction = action; }
};
#define WOX_VM (*(::Xeen::WorldOfXeen::WorldOfXeenEngine *)g_vm)
diff --git a/engines/xeen/worldofxeen/worldofxeen_menu.cpp b/engines/xeen/worldofxeen/worldofxeen_menu.cpp
index f43b00f027..42a55885a0 100644
--- a/engines/xeen/worldofxeen/worldofxeen_menu.cpp
+++ b/engines/xeen/worldofxeen/worldofxeen_menu.cpp
@@ -112,8 +112,7 @@ void WorldOfXeenMenu::execute() {
// Load a new game state and set the difficulty
_vm->_saves->newGame();
_vm->_party->_difficulty = (Difficulty)result;
-
- WOX_VM._pendingAction = WOX_PLAY_GAME;
+ _vm->_gameMode = GMODE_PLAY_GAME;
closeWindow();
return;
}