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); } } |