diff options
| author | Paul Gilbert | 2015-03-18 19:02:17 -0400 | 
|---|---|---|
| committer | Paul Gilbert | 2015-03-18 19:02:17 -0400 | 
| commit | b8ad1ce140c91257ba79fe50f41da34a5a6e74c2 (patch) | |
| tree | 72d3aeddfa430c575bfa313b52a8040ffa0e82d9 /engines/sherlock/screen.cpp | |
| parent | 62f3f5d14e391cdac0bbfe200cdde2e4773afba4 (diff) | |
| download | scummvm-rg350-b8ad1ce140c91257ba79fe50f41da34a5a6e74c2.tar.gz scummvm-rg350-b8ad1ce140c91257ba79fe50f41da34a5a6e74c2.tar.bz2 scummvm-rg350-b8ad1ce140c91257ba79fe50f41da34a5a6e74c2.zip  | |
SHERLOCK: Make random pixel transitions more like the original
Diffstat (limited to 'engines/sherlock/screen.cpp')
| -rw-r--r-- | engines/sherlock/screen.cpp | 19 | 
1 files changed, 14 insertions, 5 deletions
diff --git a/engines/sherlock/screen.cpp b/engines/sherlock/screen.cpp index 41cf19e48c..7a4d4863ac 100644 --- a/engines/sherlock/screen.cpp +++ b/engines/sherlock/screen.cpp @@ -30,6 +30,7 @@ namespace Sherlock {  Screen::Screen(SherlockEngine *vm) : Surface(SHERLOCK_SCREEN_WIDTH, SHERLOCK_SCREEN_HEIGHT), _vm(vm),  		_backBuffer(SHERLOCK_SCREEN_WIDTH, SHERLOCK_SCREEN_HEIGHT),  		_backBuffer2(SHERLOCK_SCREEN_WIDTH, SHERLOCK_SCREEN_HEIGHT) { +	_transitionSeed = 1;  	setFont(1);  } @@ -178,15 +179,23 @@ bool Screen::unionRectangle(Common::Rect &destRect, const Common::Rect &src1, co   */  void Screen::randomTransition() {  	EventsManager &events = *_vm->_events; +	const int TRANSITION_MULTIPLIER = 0x15a4e35; +	_dirtyRects.clear();  	for (int idx = 0; idx <= 65535; ++idx) { -		int offset = _vm->getRandomNumber(this->w * this->h); -		*((byte *)getPixels() + offset) = *((const byte *)_backBuffer.getPixels() + offset); +		_transitionSeed = _transitionSeed * TRANSITION_MULTIPLIER + 1; +		int offset = _transitionSeed & 65535; + +		if (offset < (SHERLOCK_SCREEN_WIDTH * SHERLOCK_SCREEN_HEIGHT)) +			*((byte *)getPixels() + offset) = *((const byte *)_backBuffer.getPixels() + offset);  		if (idx != 0 && (idx % 100) == 0) { -			_dirtyRects.clear(); -			addDirtyRect(Common::Rect(0, 0, this->w, this->h)); -			events.delay(5); +			// Ensure there's a full screen dirty rect for the next frame update +			if (_dirtyRects.empty()) +				addDirtyRect(Common::Rect(0, 0, this->w, this->h)); +			 +			events.pollEvents(); +			events.delay(1);  		}  	}  | 
