aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--NEWS5
-rw-r--r--engines/kyra/sequences_v1.cpp53
2 files changed, 34 insertions, 24 deletions
diff --git a/NEWS b/NEWS
index 5876eb4b56..37f4ea6dd4 100644
--- a/NEWS
+++ b/NEWS
@@ -41,6 +41,11 @@ For a more comprehensive changelog for the latest experimental SVN code, see:
Broken Sword 2:
- More robust handling of the optional startup.inf file.
+ Kyrandia:
+ - Scrolling in the Kyrandia intro is less CPU intensive, at the cost of
+ not being as smooth as before.
+ - Fixed a tiny graphics glitch in the Kyrandia intro.
+
PSP Port:
- Fixed crashes during scrolling scenes in certain SCUMM games.
- Added saving of thumbnail in SCUMM savegames.
diff --git a/engines/kyra/sequences_v1.cpp b/engines/kyra/sequences_v1.cpp
index d89bb1291b..31f4ffc853 100644
--- a/engines/kyra/sequences_v1.cpp
+++ b/engines/kyra/sequences_v1.cpp
@@ -151,33 +151,38 @@ void KyraEngine::seq_introLogos() {
if (_quitFlag)
return;
- int y1 = 8;
- int h1 = 175;
- int y2 = 176;
- int h2 = 0;
- int32 start, now;
- int wait;
- _screen->copyRegion(0, 91, 0, 8, 320, 103, 6, 2);
- _screen->copyRegion(0, 0, 0, 111, 320, 64, 6, 2);
+ _screen->copyRegion(0, 91, 0, 8, 320, 104, 6, 2);
+ _screen->copyRegion(0, 0, 0, 112, 320, 64, 6, 2);
+
+ uint32 start = _system->getMillis();
+ bool doneFlag = false;
+ int oldDistance = 0;
+
do {
- start = (int32)_system->getMillis();
- if (h1 > 0) {
- _screen->copyRegion(0, y1, 0, 8, 320, h1, 2, 0);
- }
- ++y1;
- --h1;
- if (h2 > 0) {
- _screen->copyRegion(0, 64, 0, y2, 320, h2, 4, 0);
+ uint32 now = _system->getMillis();
+
+ // The smallest y2 we ever draw the screen for is 65.
+ int distance = (now - start) / _tickLength;
+ if (distance > 112) {
+ distance = 112;
+ doneFlag = true;
}
- --y2;
- ++h2;
- _screen->updateScreen();
- now = (int32)_system->getMillis();
- wait = _tickLength - (now - start);
- if (wait > 0) {
- delay(wait);
+
+ if (distance > oldDistance) {
+ int y1 = 8 + distance;
+ int h1 = 168 - distance;
+ int y2 = 176 - distance;
+ int h2 = distance;
+
+ _screen->copyRegion(0, y1, 0, 8, 320, h1, 2, 0);
+ if (h2 > 0)
+ _screen->copyRegion(0, 64, 0, y2, 320, h2, 4, 0);
+ _screen->updateScreen();
}
- } while (y2 >= 64 && !_quitFlag && !_abortIntroFlag);
+
+ oldDistance = distance;
+ delay(10);
+ } while (!doneFlag && !_quitFlag && !_abortIntroFlag);
if (_quitFlag)
return;