diff options
author | Torbjörn Andersson | 2006-08-31 17:17:31 +0000 |
---|---|---|
committer | Torbjörn Andersson | 2006-08-31 17:17:31 +0000 |
commit | 64aa291a1684e6d7feeb33c1a16687c36d396205 (patch) | |
tree | 49a74a96869a714e064e0c58b885de757c8001d0 | |
parent | 3e54f04f3d75383b93557edf9263acc7195f8274 (diff) | |
download | scummvm-rg350-64aa291a1684e6d7feeb33c1a16687c36d396205.tar.gz scummvm-rg350-64aa291a1684e6d7feeb33c1a16687c36d396205.tar.bz2 scummvm-rg350-64aa291a1684e6d7feeb33c1a16687c36d396205.zip |
Applied my own patch #1549054, after discussing it with LordHoto. This makes
the intro scrolling use constant time, rather than assuming that the screen can
be rendered once every "tick". On my^H^Hslow computers, this makes it a bit
less smooth, but that should be ok.
It also fixes a tiny glitch right after the scrolling.
svn-id: r23811
-rw-r--r-- | NEWS | 5 | ||||
-rw-r--r-- | engines/kyra/sequences_v1.cpp | 53 |
2 files changed, 34 insertions, 24 deletions
@@ -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; |