From f96a108503844e66b3072447fe46eace8f54df16 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Mon, 16 Nov 2015 22:25:53 -0500 Subject: MADS: Add buttons to the main menu to show the secret bonus animations The buttons will only appear if section0.hag is present, along with evolve.res and/or sets.res. The Evolve animation works, but the Sets animation still needs some work, since something funky is happening with palette usage --- engines/mads/nebular/menu_nebular.cpp | 26 ++++++++++++++++++++++++++ engines/mads/nebular/menu_nebular.h | 15 ++++++++++++++- engines/mads/resources.cpp | 4 ++-- 3 files changed, 42 insertions(+), 3 deletions(-) diff --git a/engines/mads/nebular/menu_nebular.cpp b/engines/mads/nebular/menu_nebular.cpp index 6fe17f3beb..0520294b29 100644 --- a/engines/mads/nebular/menu_nebular.cpp +++ b/engines/mads/nebular/menu_nebular.cpp @@ -48,6 +48,7 @@ MainMenu::MainMenu(MADSEngine *vm): MenuView(vm) { _highlightedIndex = -1; _selectedIndex = -1; _buttonDown = false; + _showEvolve = _showSets = false; for (int i = 0; i < 7; ++i) _menuItems[i] = nullptr; @@ -137,12 +138,14 @@ void MainMenu::doFrame() { } _vm->_events->showCursor(); + showBonusItems(); } else { if ((_menuItemIndex == -1) || (_frameIndex == 0)) { if (++_menuItemIndex == 6) { // Reached end of display animation _vm->_events->showCursor(); + showBonusItems(); return; } else if (_menuItemIndex == 4 && !shouldShowQuotes()) { ++_menuItemIndex; @@ -180,6 +183,17 @@ void MainMenu::addSpriteSlot() { _redrawFlag = true; } +void MainMenu::showBonusItems() { + Scene &scene = _vm->_game->_scene; + _showEvolve = Common::File::exists("SECTION0.HAG") && Common::File::exists("evolve.res"); + _showSets = Common::File::exists("SECTION0.HAG") && Common::File::exists("sets.res"); + + if (_showSets) + scene._kernelMessages.add(Common::Point(290, 143), 0x4140, 0, 0, 0, "S"); + if (_showEvolve) + scene._kernelMessages.add(Common::Point(305, 143), 0x4140, 0, 0, 0, "E"); +} + bool MainMenu::onEvent(Common::Event &event) { Scene &scene = _vm->_game->_scene; if (_selectedIndex != -1) @@ -280,6 +294,10 @@ bool MainMenu::onEvent(Common::Event &event) { _selectedIndex = _highlightedIndex; unhighlightItem(); _frameIndex = 0; + } else if (_showSets && Common::Rect(290, 165, 300, 185).contains(event.mouse)) { + handleAction(SETS); + } else if (_showEvolve && Common::Rect(305, 165, 315, 185).contains(event.mouse)) { + handleAction(EVOLVE); } return true; @@ -334,6 +352,14 @@ void MainMenu::handleAction(MADSGameAction action) { TextView::execute(_vm, "quotes"); return; + case SETS: + AnimationView::execute(_vm, "sets"); + break; + + case EVOLVE: + AnimationView::execute(_vm, "evolve"); + break; + case EXIT: _vm->_dialogs->_pendingDialog = DIALOG_ADVERT; break; diff --git a/engines/mads/nebular/menu_nebular.h b/engines/mads/nebular/menu_nebular.h index 35af0bb34f..8a0cc3575d 100644 --- a/engines/mads/nebular/menu_nebular.h +++ b/engines/mads/nebular/menu_nebular.h @@ -35,7 +35,10 @@ class MADSEngine; namespace Nebular { -enum MADSGameAction { START_GAME, RESUME_GAME, SHOW_INTRO, CREDITS, QUOTES, EXIT }; +enum MADSGameAction { + START_GAME, RESUME_GAME, SHOW_INTRO, CREDITS, QUOTES, EXIT, + SETS, EVOLVE +}; class MainMenu: public MenuView { private: @@ -45,6 +48,7 @@ private: int _frameIndex; uint32 _delayTimeout; bool _skipFlag; + bool _showEvolve, _showSets; /** * Currently highlighted menu item @@ -81,7 +85,16 @@ private: */ void addSpriteSlot(); + /** + * Returns true if the Quotes item should be shown. + * i.e. if the player has completed the game + */ bool shouldShowQuotes(); + + /** + * Show the bonus item icons, if available + */ + void showBonusItems(); protected: /** * Display the menu diff --git a/engines/mads/resources.cpp b/engines/mads/resources.cpp index d5352fb205..3b7cf2cab0 100644 --- a/engines/mads/resources.cpp +++ b/engines/mads/resources.cpp @@ -151,7 +151,7 @@ void HagArchive::loadIndex(MADSEngine *vm) { Common::File hagFile; for (int sectionIndex = -1; sectionIndex < 11; ++sectionIndex) { - if (sectionIndex == 0) + if (sectionIndex == 0 && !Common::File::exists("SECTION0.HAG")) continue; // Dragonsphere does not have some sections - skip them @@ -239,7 +239,7 @@ Common::String HagArchive::getResourceFilename(const Common::String &resourceNam int value = atoi(resourceName.c_str() + 2); int hagFileNum = (resType == RESTYPE_ROOM) ? value / 100 : value; - if (hagFileNum > 0) + if (hagFileNum >= 0) outputFilename = Common::String::format("SECTION%d.HAG", hagFileNum); } -- cgit v1.2.3