aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Kiewitz2013-12-24 10:39:42 +0100
committerMartin Kiewitz2013-12-24 10:39:42 +0100
commit8b3efba40f637a8f5e972ba793a6e59895356355 (patch)
tree4354e3e0893d7c9fdb9e5d1bed3005e872f82eac
parent43c2054fd073adb22e6f2d03635033a9be817fd3 (diff)
downloadscummvm-rg350-8b3efba40f637a8f5e972ba793a6e59895356355.tar.gz
scummvm-rg350-8b3efba40f637a8f5e972ba793a6e59895356355.tar.bz2
scummvm-rg350-8b3efba40f637a8f5e972ba793a6e59895356355.zip
SCI: change floodfill fix for sq4
behaviour wasn't changed in SCI1, instead it seems that SSCI draws overlays to separate memory and then copies them over. Previous commit caused regression in qfg1vga (funny room)
-rw-r--r--engines/sci/graphics/picture.cpp12
1 files changed, 10 insertions, 2 deletions
diff --git a/engines/sci/graphics/picture.cpp b/engines/sci/graphics/picture.cpp
index d78b48884d..651eac75ea 100644
--- a/engines/sci/graphics/picture.cpp
+++ b/engines/sci/graphics/picture.cpp
@@ -919,7 +919,7 @@ void GfxPicture::vectorFloodFill(int16 x, int16 y, byte color, byte priority, by
}
// This logic was taken directly from sierra sci, floodfill will get aborted on various occations
- if (isEGA) {
+ if (!_addToFlag) {
if (screenMask & GFX_SCREEN_MASK_VISUAL) {
if ((color == _screen->getColorWhite()) || (searchColor != _screen->getColorWhite()))
return;
@@ -931,7 +931,9 @@ void GfxPicture::vectorFloodFill(int16 x, int16 y, byte color, byte priority, by
return;
}
} else {
- // VGA logic (SCI1 early w/o QfG2)
+ // When adding a picture onto another picture, don't abort in case current pixel was already drawn previously
+ // It seems Sierra SCI unpacks such pictures separately and then copies them over
+ // We draw directly to the screen.
// fixes Space Quest 4 orange ship lifting off (bug #6446)
if (screenMask & GFX_SCREEN_MASK_VISUAL) {
if (color == _screen->getColorWhite())
@@ -982,6 +984,12 @@ void GfxPicture::vectorFloodFill(int16 x, int16 y, byte color, byte priority, by
_screen->putPixel(--w, p.y, screenMask, color, priority, control);
while (e < r && (matchedMask = _screen->isFillMatch(e + 1, p.y, matchMask, searchColor, searchPriority, searchControl, isEGA)))
_screen->putPixel(++e, p.y, screenMask, color, priority, control);
+#if 0
+ // debug code for floodfill
+ _screen->copyToScreen();
+ g_system->updateScreen();
+ g_system->delayMillis(100);
+#endif
// checking lines above and below for possible flood targets
a_set = b_set = 0;
while (w <= e) {