mirror of
https://github.com/libretro/scummvm.git
synced 2025-01-31 07:53:36 +00:00
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
This commit is contained in:
parent
3e54f04f3d
commit
64aa291a16
5
NEWS
5
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.
|
||||
|
@ -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) {
|
||||
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;
|
||||
}
|
||||
|
||||
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();
|
||||
}
|
||||
++y1;
|
||||
--h1;
|
||||
if (h2 > 0) {
|
||||
_screen->copyRegion(0, 64, 0, y2, 320, h2, 4, 0);
|
||||
}
|
||||
--y2;
|
||||
++h2;
|
||||
_screen->updateScreen();
|
||||
now = (int32)_system->getMillis();
|
||||
wait = _tickLength - (now - start);
|
||||
if (wait > 0) {
|
||||
delay(wait);
|
||||
}
|
||||
} while (y2 >= 64 && !_quitFlag && !_abortIntroFlag);
|
||||
|
||||
oldDistance = distance;
|
||||
delay(10);
|
||||
} while (!doneFlag && !_quitFlag && !_abortIntroFlag);
|
||||
|
||||
if (_quitFlag)
|
||||
return;
|
||||
|
Loading…
x
Reference in New Issue
Block a user