aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Gilbert2014-07-27 11:10:59 -0400
committerPaul Gilbert2014-07-27 11:10:59 -0400
commit913751edae64a6ff35ab5f65822666273d279ea9 (patch)
treee0af8850b434e276c301731033942692f0d441ff
parent9b00eedd40d5abc1c13723608633f9bc488f7fd1 (diff)
downloadscummvm-rg350-913751edae64a6ff35ab5f65822666273d279ea9.tar.gz
scummvm-rg350-913751edae64a6ff35ab5f65822666273d279ea9.tar.bz2
scummvm-rg350-913751edae64a6ff35ab5f65822666273d279ea9.zip
MADS: Main menu selections now working
-rw-r--r--engines/mads/dialogs.h3
-rw-r--r--engines/mads/nebular/dialogs_nebular.cpp75
-rw-r--r--engines/mads/nebular/game_nebular.cpp8
-rw-r--r--engines/mads/nebular/menu_nebular.cpp46
-rw-r--r--engines/mads/nebular/menu_nebular.h34
5 files changed, 113 insertions, 53 deletions
diff --git a/engines/mads/dialogs.h b/engines/mads/dialogs.h
index c2d5bba8ed..c586a6f1fe 100644
--- a/engines/mads/dialogs.h
+++ b/engines/mads/dialogs.h
@@ -202,7 +202,8 @@ public:
enum DialogId {
DIALOG_NONE = 0, DIALOG_GAME_MENU = 1, DIALOG_SAVE = 2, DIALOG_RESTORE = 3,
DIALOG_OPTIONS = 4, DIALOG_DIFFICULTY = 5, DIALOG_ERROR = 6,
- DIALOG_MAIN_MENU = 7
+ DIALOG_MAIN_MENU = 7, DIALOG_TEXTVIEW = 8, DIALOG_ANIMVIEW = 9,
+ DIALOG_ADVERT = 10
};
class Dialogs {
diff --git a/engines/mads/nebular/dialogs_nebular.cpp b/engines/mads/nebular/dialogs_nebular.cpp
index 87bb954cdf..17c27b44f7 100644
--- a/engines/mads/nebular/dialogs_nebular.cpp
+++ b/engines/mads/nebular/dialogs_nebular.cpp
@@ -270,41 +270,46 @@ bool DialogsNebular::commandCheck(const char *idStr, Common::String &valStr,
}
void DialogsNebular::showDialog() {
- switch (_pendingDialog) {
- case DIALOG_MAIN_MENU: {
- MainMenu *menu = new MainMenu(_vm);
- menu->show();
- delete menu;
- break;
- }
- case DIALOG_DIFFICULTY: {
- DifficultyDialog *dlg = new DifficultyDialog(_vm);
- dlg->show();
- delete dlg;
- break;
- }
- case DIALOG_GAME_MENU: {
- GameMenuDialog *dlg = new GameMenuDialog(_vm);
- dlg->show();
- delete dlg;
- break;
- }
- case DIALOG_SAVE: {
- showScummVMSaveDialog();
- break;
- }
- case DIALOG_RESTORE: {
- showScummVMRestoreDialog();
- break;
- }
- case DIALOG_OPTIONS: {
- OptionsDialog *dlg = new OptionsDialog(_vm);
- dlg->show();
- delete dlg;
- break;
- }
- default:
- break;
+ while (_pendingDialog != DIALOG_NONE) {
+ DialogId dialogId = _pendingDialog;
+ _pendingDialog = DIALOG_NONE;
+
+ switch (dialogId) {
+ case DIALOG_MAIN_MENU: {
+ MainMenu *menu = new MainMenu(_vm);
+ menu->show();
+ delete menu;
+ break;
+ }
+ case DIALOG_DIFFICULTY: {
+ DifficultyDialog *dlg = new DifficultyDialog(_vm);
+ dlg->show();
+ delete dlg;
+ break;
+ }
+ case DIALOG_GAME_MENU: {
+ GameMenuDialog *dlg = new GameMenuDialog(_vm);
+ dlg->show();
+ delete dlg;
+ break;
+ }
+ case DIALOG_SAVE: {
+ showScummVMSaveDialog();
+ break;
+ }
+ case DIALOG_RESTORE: {
+ showScummVMRestoreDialog();
+ break;
+ }
+ case DIALOG_OPTIONS: {
+ OptionsDialog *dlg = new OptionsDialog(_vm);
+ dlg->show();
+ delete dlg;
+ break;
+ }
+ default:
+ break;
+ }
}
}
diff --git a/engines/mads/nebular/game_nebular.cpp b/engines/mads/nebular/game_nebular.cpp
index 8fddf8b9c4..902f42507a 100644
--- a/engines/mads/nebular/game_nebular.cpp
+++ b/engines/mads/nebular/game_nebular.cpp
@@ -60,9 +60,7 @@ ProtectionResult GameNebular::checkCopyProtection() {
}
void GameNebular::startGame() {
- // Show the main menu
- // TODO: Show the main menu here
-
+ /*
// Check copy protection
ProtectionResult protectionResult = checkCopyProtection();
switch (protectionResult) {
@@ -80,11 +78,13 @@ void GameNebular::startGame() {
// Copy protection check succeeded
break;
}
+ */
initSection(_sectionNumber);
_statusFlag = true;
- _vm->_dialogs->_pendingDialog = DIALOG_DIFFICULTY;
+ // Show the main menu
+ _vm->_dialogs->_pendingDialog = DIALOG_MAIN_MENU;
_vm->_dialogs->showDialog();
_vm->_dialogs->_pendingDialog = DIALOG_NONE;
diff --git a/engines/mads/nebular/menu_nebular.cpp b/engines/mads/nebular/menu_nebular.cpp
index 8deb8047fa..363ec06d02 100644
--- a/engines/mads/nebular/menu_nebular.cpp
+++ b/engines/mads/nebular/menu_nebular.cpp
@@ -319,34 +319,36 @@ void MainMenu::unhighlightItem() {
}
void MainMenu::handleAction(MADSGameAction action) {
- warning("Action %d", (int)action);
- /*
_vm->_events->hideCursor();
+ _breakFlag = true;
switch (action) {
case START_GAME:
+ // Show the difficulty dialog
+ _vm->_dialogs->_pendingDialog = DIALOG_DIFFICULTY;
+ break;
+
case RESUME_GAME:
- // Load a sample starting scene - note that, currently, calling loadScene automatically
- // removes this menu screen from being displayed
- _vm->_mouse->cursorOn();
- _vm->_viewManager->addView(_vm->_scene);
- _vm->_scene->loadScene(101);
+ // The original resumed the most recently saved game. Instead,
+ // just show the load game scren
+ _vm->_dialogs->_pendingDialog = DIALOG_RESTORE;
return;
case SHOW_INTRO:
- _vm->_viewManager->showAnimView("@rexopen");
+ AnimationView::execute("@rexopen");
break;
case CREDITS:
- _vm->_viewManager->showTextView("credits");
+ TextView::execute("credits");
return;
case QUOTES:
- _vm->_viewManager->showTextView("quotes");
+ TextView::execute("quotes");
return;
case EXIT:
- {
+ _vm->_dialogs->_pendingDialog = DIALOG_ADVERT;
+ /*
// When the Exit action is done from the menu, show one of two possible advertisements
// Activate the scene display with the specified scene
@@ -359,14 +361,32 @@ void MainMenu::handleAction(MADSGameAction action) {
_vm->_events->quitFlag = true;
return;
- }
+ */
break;
default:
break;
}
- */
}
+/*------------------------------------------------------------------------*/
+
+char TextView::_resourceName[100];
+
+void TextView::execute(const Common::String &resName) {
+ assert(resName.size() < 100);
+ strcpy(_resourceName, resName.c_str());
+}
+
+/*------------------------------------------------------------------------*/
+
+char AnimationView::_resourceName[100];
+
+void AnimationView::execute(const Common::String &resName) {
+ assert(resName.size() < 100);
+ strcpy(_resourceName, resName.c_str());
+}
+
+
} // End of namespace Nebular
} // End of namespace MADS
diff --git a/engines/mads/nebular/menu_nebular.h b/engines/mads/nebular/menu_nebular.h
index 89921191c1..04ac60fb0d 100644
--- a/engines/mads/nebular/menu_nebular.h
+++ b/engines/mads/nebular/menu_nebular.h
@@ -116,6 +116,40 @@ public:
virtual ~MainMenu();
};
+/**
+ * Scrolling text view
+ */
+class TextView : public MenuView {
+private:
+ static char _resourceName[100];
+public:
+ /**
+ * Queue the given text resource for display
+ */
+ static void execute(const Common::String &resName);
+
+ TextView(MADSEngine *vm) : MenuView(vm) {}
+
+ virtual ~TextView() {}
+};
+
+/**
+* Animation cutscene view
+*/
+class AnimationView : public MenuView {
+private:
+ static char _resourceName[100];
+public:
+ /**
+ * Queue the given text resource for display
+ */
+ static void execute(const Common::String &resName);
+
+ AnimationView(MADSEngine *vm) : MenuView(vm) {}
+
+ virtual ~AnimationView() {}
+};
+
} // End of namespace Nebular
} // End of namespace MADS