aboutsummaryrefslogtreecommitdiff
path: root/sky/intro.cpp
diff options
context:
space:
mode:
authorRobert Göffringmann2004-10-25 00:27:53 +0000
committerRobert Göffringmann2004-10-25 00:27:53 +0000
commit376f51ba7954d5fe09c2887d4027a0f208c702e9 (patch)
treec5359da86510b3761e0d35f00086fd3bf013a1ce /sky/intro.cpp
parent6fd31192e1413e2a84c22a28379278e5ee8a9355 (diff)
downloadscummvm-rg350-376f51ba7954d5fe09c2887d4027a0f208c702e9.tar.gz
scummvm-rg350-376f51ba7954d5fe09c2887d4027a0f208c702e9.tar.bz2
scummvm-rg350-376f51ba7954d5fe09c2887d4027a0f208c702e9.zip
use relative timing instead of constant values.
svn-id: r15684
Diffstat (limited to 'sky/intro.cpp')
-rw-r--r--sky/intro.cpp41
1 files changed, 17 insertions, 24 deletions
diff --git a/sky/intro.cpp b/sky/intro.cpp
index e2e338d1bf..8a7b0c1630 100644
--- a/sky/intro.cpp
+++ b/sky/intro.cpp
@@ -623,6 +623,7 @@ Intro::Intro(Disk *disk, Screen *screen, MusicBase *music, Sound *sound, Text *t
_saveBuf = (uint8*)malloc(10000);
_bgBuf = NULL;
_quitProg = false;
+ _relDelay = 0;
}
Intro::~Intro(void) {
@@ -681,9 +682,12 @@ bool Intro::nextPart(uint16 *&data) {
return true;
case FADEUP:
_skyScreen->paletteFadeUp(*data++);
+ _relDelay += 32 * 20; // hack: the screen uses a seperate delay function for the
+ // blocking fadeups. So add 32*20 msecs to out delay counter.
return true;
case FADEDOWN:
_skyScreen->fnFadeDown(0);
+ _relDelay += 32 * 20; // hack: see above.
return true;
case DELAY:
if (!escDelay(*data++))
@@ -794,11 +798,7 @@ bool Intro::floppyScrollFlirt(void) {
}
_system->copyRectToScreen(scrollPos, GAME_SCREEN_WIDTH, 0, 0, GAME_SCREEN_WIDTH, GAME_SCREEN_HEIGHT);
_system->updateScreen();
-#ifndef _WIN32_WCE
- if (!escDelay(40))
-#else
- if (!escDelay(15))
-#endif
+ if (!escDelay(60))
doContinue = false;
}
memcpy(_skyScreen->giveCurrent(), scrollPos, FRAME_SIZE);
@@ -890,11 +890,13 @@ void Intro::restoreScreen(void) {
bool Intro::escDelay(uint32 msecs) {
OSystem::Event event;
+ if (_relDelay == 0) // first call, init with system time
+ _relDelay = (int32)_system->getMillis();
+
+ _relDelay += msecs; // now wait until _system->getMillis() >= _relDelay
+
+ int32 nDelay = 0;
do {
-#ifdef _WIN32_WCE
- uint32 startTimeLoop = _system->getMillis();
- uint32 delta;
-#endif
while (_system->pollEvent(event)) {
if (event.event_code == OSystem::EVENT_KEYDOWN) {
if (event.kbd.keycode == 27)
@@ -904,22 +906,13 @@ bool Intro::escDelay(uint32 msecs) {
return false;
}
}
-#ifdef _WIN32_WCE
- uint8 nDelay = (msecs > 15) ? (15) : ((uint8)msecs);
-#else
- uint8 nDelay = (msecs > 50) ? (50) : ((uint8)msecs);
-#endif
+ nDelay = _relDelay - _system->getMillis();
+ if (nDelay < 0)
+ nDelay = 0;
+ else if (nDelay > 15)
+ nDelay = 15;
_system->delayMillis(nDelay);
-#ifdef _WIN32_WCE
- delta = _system->getMillis() - startTimeLoop;
- if (delta > msecs)
- break;
- else
- msecs -= delta;
-#else
- msecs -= nDelay;
-#endif
- } while (msecs > 0);
+ } while (nDelay == 15);
return true;
}