diff --git a/engines/sci/graphics/picture.cpp b/engines/sci/graphics/picture.cpp index 39666b82cbd..6f2ca9e26db 100644 --- a/engines/sci/graphics/picture.cpp +++ b/engines/sci/graphics/picture.cpp @@ -754,6 +754,15 @@ void GfxPicture::drawVectorData(byte *data, int dataSize) { // Dithering EGA pictures if (isEGA) { _screen->dither(_addToFlag); + switch (g_sci->getGameId()) { + case GID_SQ3: + switch (_resourceId) { + case 154: // SQ3: intro, ship gets sucked in + _screen->ditherForceMemorial(0xD0); + break; + } + break; + } } return; default: diff --git a/engines/sci/graphics/screen.cpp b/engines/sci/graphics/screen.cpp index 7a10a6b749f..f8dc3118b5a 100644 --- a/engines/sci/graphics/screen.cpp +++ b/engines/sci/graphics/screen.cpp @@ -616,6 +616,11 @@ void GfxScreen::dither(bool addToFlag) { } } +// Force a color combination into memorial +void GfxScreen::ditherForceMemorial(byte color) { + _unditherMemorial[color] = 256; +} + void GfxScreen::debugUnditherSetState(bool flag) { _unditherState = flag; } diff --git a/engines/sci/graphics/screen.h b/engines/sci/graphics/screen.h index 97f57362895..44746ae00b4 100644 --- a/engines/sci/graphics/screen.h +++ b/engines/sci/graphics/screen.h @@ -115,6 +115,7 @@ public: void adjustBackUpscaledCoordinates(int16 &y, int16 &x); void dither(bool addToFlag); + void ditherForceMemorial(byte color); void debugUnditherSetState(bool flag); int16 *unditherGetMemorial();