aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Gilbert2012-08-12 19:47:48 +1000
committerPaul Gilbert2012-08-12 19:47:48 +1000
commitdfb0e4f7001347aa50ee9707229647783f8f88c0 (patch)
treea4ce57ab9c5bd95b8ac3ee0470f2600e13a98f5a
parent846f9644ddd471b6e6c7b147e971382dddda14fb (diff)
downloadscummvm-rg350-dfb0e4f7001347aa50ee9707229647783f8f88c0.tar.gz
scummvm-rg350-dfb0e4f7001347aa50ee9707229647783f8f88c0.tar.bz2
scummvm-rg350-dfb0e4f7001347aa50ee9707229647783f8f88c0.zip
TONY: Fix dirty rect refresh glitch in the introduction sequence
-rw-r--r--engines/tony/gfxengine.h1
-rw-r--r--engines/tony/window.cpp7
2 files changed, 7 insertions, 1 deletions
diff --git a/engines/tony/gfxengine.h b/engines/tony/gfxengine.h
index a69182d032..8be09ddd8b 100644
--- a/engines/tony/gfxengine.h
+++ b/engines/tony/gfxengine.h
@@ -130,6 +130,7 @@ public:
// Manage a location
uint32 loadLocation(int nLoc, RMPoint ptTonyStart, RMPoint start);
void unloadLocation(CORO_PARAM, bool bDoOnExit, uint32 *result);
+ int getCurrentLocation() const { return _nCurLoc; }
// Freeze and unfreeze
void freeze();
diff --git a/engines/tony/window.cpp b/engines/tony/window.cpp
index c509a12f9e..2d5954a74c 100644
--- a/engines/tony/window.cpp
+++ b/engines/tony/window.cpp
@@ -140,11 +140,16 @@ void RMWindow::getNewFrame(RMGfxTargetBuffer &bigBuf, Common::Rect *rcBoundEllip
// Get a pointer to the bytes of the source buffer
byte *lpBuf = bigBuf;
+ // FIXME: The current dirty rect handling code has a minor issue with screen refresh in one
+ // scene in the introduction sequence as the scene changes. For now, we're working around the
+ // problem by explicitly having full screen refreshes on that scene
+ bool fullRefresh = _vm->getEngine()->getCurrentLocation() == 98;
+
if (rcBoundEllipse != NULL) {
// Circular wipe effect
getNewFrameWipe(lpBuf, *rcBoundEllipse);
_wiping = true;
- } else if (_wiping) {
+ } else if (_wiping || fullRefresh) {
// Just finished a wiping effect, so copy the full screen
copyRectToScreen(lpBuf, RM_SX * 2, 0, 0, RM_SX, RM_SY);
_wiping = false;