aboutsummaryrefslogtreecommitdiff
path: root/engines/sherlock/screen.cpp
diff options
context:
space:
mode:
authorPaul Gilbert2015-03-18 19:02:17 -0400
committerPaul Gilbert2015-03-18 19:02:17 -0400
commitb8ad1ce140c91257ba79fe50f41da34a5a6e74c2 (patch)
tree72d3aeddfa430c575bfa313b52a8040ffa0e82d9 /engines/sherlock/screen.cpp
parent62f3f5d14e391cdac0bbfe200cdde2e4773afba4 (diff)
downloadscummvm-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.cpp19
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);
}
}