diff options
author | Paul Gilbert | 2015-01-01 11:46:22 -1000 |
---|---|---|
committer | Paul Gilbert | 2015-01-01 11:46:22 -1000 |
commit | b2f1282aeb7f405f265afac3d601459f4cfebf6d (patch) | |
tree | 622091bc86636b2e6fd71ba958ee3ef3ac77653c /engines/xeen/dialogs.cpp | |
parent | aa3965cd5dcdf0d774f4798b003c8089e3bcdc7e (diff) | |
download | scummvm-rg350-b2f1282aeb7f405f265afac3d601459f4cfebf6d.tar.gz scummvm-rg350-b2f1282aeb7f405f265afac3d601459f4cfebf6d.tar.bz2 scummvm-rg350-b2f1282aeb7f405f265afac3d601459f4cfebf6d.zip |
XEEN: Credits screen now working
Diffstat (limited to 'engines/xeen/dialogs.cpp')
-rw-r--r-- | engines/xeen/dialogs.cpp | 105 |
1 files changed, 105 insertions, 0 deletions
diff --git a/engines/xeen/dialogs.cpp b/engines/xeen/dialogs.cpp index b550cf2f01..cdc6d5ba40 100644 --- a/engines/xeen/dialogs.cpp +++ b/engines/xeen/dialogs.cpp @@ -73,6 +73,111 @@ void Dialog::checkEvents() { } } + +/** +* Draws the scroll in the background +*/ +void Dialog::doScroll(bool drawFlag, bool doFade) { + Screen &screen = *_vm->_screen; + EventsManager &events = *_vm->_events; + + if (_vm->getGameID() != GType_Clouds) { + if (doFade) { + _vm->_screen->fadeIn(2); + } + return; + } + + const int SCROLL_L[8] = { 29, 23, 15, 251, 245, 233, 207, 185 }; + const int SCROLL_R[8] = { 165, 171, 198, 218, 228, 245, 264, 281 }; + + saveButtons(); + clearButtons(); + screen.saveBackground(); + + // Load hand vga files + SpriteResource *hand[16]; + for (int i = 0; i < 16; ++i) { + Common::String name = Common::String::format("hand%02u.vga", i); + hand[i] = new SpriteResource(name); + } + + // Load marb vga files + SpriteResource *marb[5]; + for (int i = 1; i < 5; ++i) { + Common::String name = Common::String::format("marb%02u.vga"); + marb[i] = new SpriteResource(name); + } + + if (drawFlag) { + for (int i = 22; i > 0; --i) { + events.updateGameCounter(); + screen.restoreBackground(); + + if (i > 0 && i <= 14) { + hand[i - 1]->draw(screen, 0); + } + else { + // TODO: Check '800h'.. horizontal reverse maybe? + hand[14]->draw(screen, 0, Common::Point(SCROLL_L[i - 14], 0)); + marb[15]->draw(screen, 0, Common::Point(SCROLL_R[i - 14], 0)); + } + + if (i <= 20) { + marb[i / 5]->draw(screen, i % 5); + } + + while (!_vm->shouldQuit() && _vm->_events->timeElapsed() == 0) + _vm->_events->pollEventsAndWait(); + + screen._windows[0].update(); + if (i == 0 && doFade) + screen.fadeIn(2); + } + } else { + for (int i = 0; i < 22 && !events.isKeyMousePressed(); ++i) { + events.updateGameCounter(); + screen.restoreBackground(); + + if (i < 14) { + hand[i]->draw(screen, 0); + } else { + // TODO: Check '800h'.. horizontal reverse maybe? + hand[14]->draw(screen, 0, Common::Point(SCROLL_L[i - 7], 0)); + marb[15]->draw(screen, 0, Common::Point(SCROLL_R[i - 7], 0)); + } + + if (i < 20) { + marb[i / 5]->draw(screen, i % 5); + } + + while (!_vm->shouldQuit() && _vm->_events->timeElapsed() == 0) + _vm->_events->pollEventsAndWait(); + + screen._windows[0].update(); + if (i == 0 && doFade) + screen.fadeIn(2); + } + } + + if (drawFlag) { + hand[0]->draw(screen, 0); + marb[0]->draw(screen, 0); + } + else { + screen.restoreBackground(); + } + + screen._windows[0].update(); + restoreButtons(); + + // Free resources + for (int i = 1; i < 5; ++i) + delete marb[i]; + for (int i = 0; i < 16; ++i) + delete hand[i]; +} + /*------------------------------------------------------------------------*/ void SettingsBaseDialog::showContents(SpriteResource &title1, bool waitFlag) { |