diff options
Diffstat (limited to 'engines/mads/nebular/dialogs_nebular.cpp')
| -rw-r--r-- | engines/mads/nebular/dialogs_nebular.cpp | 96 |
1 files changed, 53 insertions, 43 deletions
diff --git a/engines/mads/nebular/dialogs_nebular.cpp b/engines/mads/nebular/dialogs_nebular.cpp index 4e237ea52d..d4b277d856 100644 --- a/engines/mads/nebular/dialogs_nebular.cpp +++ b/engines/mads/nebular/dialogs_nebular.cpp @@ -33,6 +33,7 @@ #include "mads/staticres.h" #include "mads/nebular/dialogs_nebular.h" #include "mads/nebular/game_nebular.h" +#include "mads/nebular/menu_nebular.h" namespace MADS { @@ -269,35 +270,52 @@ bool DialogsNebular::commandCheck(const char *idStr, Common::String &valStr, } void DialogsNebular::showDialog() { - switch (_pendingDialog) { - 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 && !_vm->shouldQuit()) { + 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; + } + case DIALOG_ADVERT: { + AdvertView *dlg = new AdvertView(_vm); + dlg->show(); + delete dlg; + break; + } + default: + break; + } } } @@ -526,26 +544,22 @@ void PictureDialog::restore() { FullScreenDialog::FullScreenDialog(MADSEngine *vm) : _vm(vm) { _screenId = 990; + _palFlag = true; } FullScreenDialog::~FullScreenDialog() { + _vm->_screen._offset.y = 0; } void FullScreenDialog::display() { Game &game = *_vm->_game; Scene &scene = game._scene; - bool palFlag = false; int nextSceneId = scene._nextSceneId; int currentSceneId = scene._currentSceneId; int priorSceneId = scene._priorSceneId; - if (_vm->_dialogs->_pendingDialog) { - palFlag = true; - } else { - _vm->_palette->initPalette(); - } - scene.loadScene(_screenId, game._aaName, palFlag); + scene.loadScene(_screenId, game._aaName, _palFlag); scene._priorSceneId = priorSceneId; scene._currentSceneId = currentSceneId; @@ -567,11 +581,7 @@ void FullScreenDialog::display() { _vm->_screen.empty(); _vm->_screen.hLine(0, 20, MADS_SCREEN_WIDTH, 2); _vm->_screen.hLine(0, 179, MADS_SCREEN_WIDTH, 2); - - _vm->_screen.copyRectToScreen(Common::Rect(0, _vm->_screen._offset.y, - MADS_SCREEN_WIDTH, _vm->_screen._offset.y + 1)); - _vm->_screen.copyRectToScreen(Common::Rect(0, _vm->_screen._offset.y + 157, - MADS_SCREEN_WIDTH, _vm->_screen._offset.y + 157)); + game._scene._spriteSlots.fullRefresh(); game._fx = _vm->_screenFade == SCREEN_FADE_SMOOTH ? kTransitionFadeIn : kCenterVertTransition; game._trigger = 0; @@ -582,8 +592,6 @@ void FullScreenDialog::display() { _vm->_palette->setEntry(13, 45, 45, 0); _vm->_palette->setEntry(14, 63, 63, 63); _vm->_palette->setEntry(15, 45, 45, 45); - - _vm->_events->setCursor(CURSOR_ARROW); } /*------------------------------------------------------------------------*/ @@ -641,6 +649,8 @@ void GameDialog::display() { _lineIndex = -1; setClickableLines(); + + _vm->_events->setCursor(CURSOR_ARROW); } GameDialog::~GameDialog() { |
