aboutsummaryrefslogtreecommitdiff
path: root/engines/xeen/dialogs.cpp
diff options
context:
space:
mode:
authorPaul Gilbert2015-01-01 11:46:22 -1000
committerPaul Gilbert2015-01-01 11:46:22 -1000
commitb2f1282aeb7f405f265afac3d601459f4cfebf6d (patch)
tree622091bc86636b2e6fd71ba958ee3ef3ac77653c /engines/xeen/dialogs.cpp
parentaa3965cd5dcdf0d774f4798b003c8089e3bcdc7e (diff)
downloadscummvm-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.cpp105
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) {