diff options
| -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;  | 
