aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/xeen/module.mk1
-rw-r--r--engines/xeen/swordsofxeen/swordsofxeen.cpp5
-rw-r--r--engines/xeen/swordsofxeen/swordsofxeen_menu.cpp106
-rw-r--r--engines/xeen/swordsofxeen/swordsofxeen_menu.h60
-rw-r--r--engines/xeen/worldofxeen/worldofxeen.cpp4
5 files changed, 171 insertions, 5 deletions
diff --git a/engines/xeen/module.mk b/engines/xeen/module.mk
index 2a5ef613bf..1b3fbcb231 100644
--- a/engines/xeen/module.mk
+++ b/engines/xeen/module.mk
@@ -8,6 +8,7 @@ MODULE_OBJS := \
worldofxeen/worldofxeen.o \
worldofxeen/worldofxeen_resources.o \
swordsofxeen/swordsofxeen.o \
+ swordsofxeen/swordsofxeen_menu.h \
character.o \
combat.o \
cutscenes.o \
diff --git a/engines/xeen/swordsofxeen/swordsofxeen.cpp b/engines/xeen/swordsofxeen/swordsofxeen.cpp
index 386136770a..bbe0a74c1c 100644
--- a/engines/xeen/swordsofxeen/swordsofxeen.cpp
+++ b/engines/xeen/swordsofxeen/swordsofxeen.cpp
@@ -21,6 +21,7 @@
*/
#include "xeen/swordsofxeen/swordsofxeen.h"
+#include "xeen/swordsofxeen/swordsofxeen_menu.h"
namespace Xeen {
namespace SwordsOfXeen {
@@ -30,9 +31,7 @@ SwordsOfXeenEngine::SwordsOfXeenEngine(OSystem *syst, const XeenGameDescription
}
void SwordsOfXeenEngine::showMainMenu() {
- // TODO: Implement Swords of Xeen main menu. For now, skip to playing game
- _saves->newGame();
- _gameMode = GMODE_PLAY_GAME;
+ MainMenu::show(this);
}
void SwordsOfXeenEngine::death() {
diff --git a/engines/xeen/swordsofxeen/swordsofxeen_menu.cpp b/engines/xeen/swordsofxeen/swordsofxeen_menu.cpp
new file mode 100644
index 0000000000..f0ddccdd34
--- /dev/null
+++ b/engines/xeen/swordsofxeen/swordsofxeen_menu.cpp
@@ -0,0 +1,106 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "xeen/swordsofxeen/swordsofxeen_menu.h"
+#include "xeen/dialogs_difficulty.h"
+#include "xeen/xeen.h"
+
+namespace Xeen {
+namespace SwordsOfXeen {
+
+void MainMenu::show(XeenEngine *vm) {
+ MainMenu *dlg = new MainMenu(vm);
+ dlg->execute();
+ delete dlg;
+}
+
+MainMenu::MainMenu(XeenEngine *vm) : ButtonContainer(vm) {
+ loadButtons();
+ _start.load("start.int");
+}
+
+void MainMenu::execute() {
+ EventsManager &events = *_vm->_events;
+ Screen &screen = *_vm->_screen;
+ Sound &sound = *_vm->_sound;
+ int difficulty;
+
+ events.setCursor(0);
+ events.showCursor();
+ sound.playSong("newbrigh.m");
+
+ do {
+ // Draw the screen
+ screen.fadeOut();
+ screen.loadPalette("scr.pal");
+ _start.draw(0, 0, Common::Point(0, 0));
+ _start.draw(0, 1, Common::Point(160, 0));
+ screen.fadeIn(129);
+
+ bool redrawFlag = false;
+ do {
+ events.pollEventsAndWait();
+ checkEvents(_vm);
+
+ // Handle keypress
+ switch (_buttonValue) {
+ case Common::KEYCODE_ESCAPE:
+ // Exit game
+ _vm->_gameMode = GMODE_QUIT;
+ break;
+ case Common::KEYCODE_c:
+ case Common::KEYCODE_v:
+ // Show credits
+ CreditsScreen::show(_vm);
+ redrawFlag = true;
+ break;
+ case Common::KEYCODE_s:
+ // Start new game
+ difficulty = DifficultyDialog::show(_vm);
+ if (difficulty != -1) {
+ // Load a new game state and set the difficulty
+ _vm->_saves->newGame();
+ _vm->_party->_difficulty = (Difficulty)difficulty;
+ _vm->_gameMode = GMODE_PLAY_GAME;
+ }
+ break;
+ case Common::KEYCODE_l:
+ if (_vm->_saves->loadGame())
+ _vm->_gameMode = GMODE_PLAY_GAME;
+ break;
+ default:
+ break;
+ }
+ } while (!_vm->shouldExit() && _vm->_gameMode == GMODE_NONE && !redrawFlag);
+ } while (!_vm->shouldExit() && _vm->_gameMode == GMODE_NONE);
+
+ screen.loadPalette("dark.pal");
+}
+
+void MainMenu::loadButtons() {
+ addButton(Common::Rect(93, 87, 227, 97), Common::KEYCODE_s);
+ addButton(Common::Rect(93, 98, 227, 108), Common::KEYCODE_l);
+ addButton(Common::Rect(93, 110, 227, 120), Common::KEYCODE_v);
+}
+
+} // End of namespace SwordsOfXeen
+} // End of namespace Xeen
diff --git a/engines/xeen/swordsofxeen/swordsofxeen_menu.h b/engines/xeen/swordsofxeen/swordsofxeen_menu.h
new file mode 100644
index 0000000000..6457c2c859
--- /dev/null
+++ b/engines/xeen/swordsofxeen/swordsofxeen_menu.h
@@ -0,0 +1,60 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef XEEN_SWORDSOFXEEN_MENU_H
+#define XEEN_SWORDSOFXEEN_MENU_H
+
+#include "xeen/dialogs.h"
+
+namespace Xeen {
+namespace SwordsOfXeen {
+
+class MainMenu : public ButtonContainer {
+private:
+ SpriteResource _start;
+
+ /**
+ * Constructor
+ */
+ MainMenu(XeenEngine *vm);
+
+ /**
+ * Shows the menu
+ */
+ void execute();
+
+ /**
+ * Loads buttons for the menu
+ */
+ void loadButtons();
+public:
+ /**
+ * Shows the main menu
+ * @param vm Engine reference
+ */
+ static void show(XeenEngine *vm);
+};
+
+} // End of namespace SwordsOfXeen
+} // End of namespace Xeen
+
+#endif /* XEEN_SWORDSOFXEEN_MENU_H */
diff --git a/engines/xeen/worldofxeen/worldofxeen.cpp b/engines/xeen/worldofxeen/worldofxeen.cpp
index 88ab3d3c44..20fa7be44a 100644
--- a/engines/xeen/worldofxeen/worldofxeen.cpp
+++ b/engines/xeen/worldofxeen/worldofxeen.cpp
@@ -186,8 +186,8 @@ void WorldOfXeenEngine::showStartup() {
}
void WorldOfXeenEngine::showMainMenu() {
- if (getGameID() != GType_WorldOfXeen) {
- // TODO: Implement menus for Clouds and Dark Side of Xeen
+ // TODO: Remove this as the game main menus are properly implemented
+ if (getGameID() == GType_Clouds) {
_saves->newGame();
_gameMode = GMODE_PLAY_GAME;
return;