aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
authorFilippos Karapetis2012-05-11 12:54:06 +0300
committerFilippos Karapetis2012-05-11 12:54:06 +0300
commitc424c22f19a050b1a2ee421e80172f7dda571dac (patch)
tree787c2b221099c03c36c3b22fb22c2d3b78a36061 /engines
parentf6acc5d5bef3c472fc3788407486a242fdd68a65 (diff)
downloadscummvm-rg350-c424c22f19a050b1a2ee421e80172f7dda571dac.tar.gz
scummvm-rg350-c424c22f19a050b1a2ee421e80172f7dda571dac.tar.bz2
scummvm-rg350-c424c22f19a050b1a2ee421e80172f7dda571dac.zip
SCI: Fix bug #3040625 - "SCI: ECOQUEST French/German: Speech balloon graphic glitch"
This bug is caused by the fact that the sprites in that scene and the speech bubble share the same priority, so we compensate for that with a workaround
Diffstat (limited to 'engines')
-rw-r--r--engines/sci/graphics/view.cpp13
1 files changed, 13 insertions, 0 deletions
diff --git a/engines/sci/graphics/view.cpp b/engines/sci/graphics/view.cpp
index a77bcccc52..4e5c4da8b2 100644
--- a/engines/sci/graphics/view.cpp
+++ b/engines/sci/graphics/view.cpp
@@ -720,6 +720,19 @@ void GfxView::draw(const Common::Rect &rect, const Common::Rect &clipRect, const
bitmap += (clipRect.top - rect.top) * celWidth + (clipRect.left - rect.left);
+ // WORKAROUND: EcoQuest French and German draw the fish and anemone sprites
+ // with priority 15 in scene 440. Afterwards, a dialog is shown on top of
+ // these sprites with priority 15 as well. This is undefined behavior
+ // actually, as the sprites and dialog share the same priority, so in our
+ // implementation the sprites get drawn incorrectly on top of the dialog.
+ // Perhaps this worked by mistake in SSCI because of subtle differences in
+ // how sprites are drawn. We compensate for this by resetting the priority
+ // of all sprites that have a priority of 15 in scene 440 to priority 14,
+ // so that the speech bubble can be drawn correctly on top of them. Fixes
+ // bug #3040625.
+ if (g_sci->getGameId() == GID_ECOQUEST && g_sci->getEngineState()->currentRoomNumber() == 440 && priority == 15)
+ priority = 14;
+
if (!_EGAmapping) {
for (y = 0; y < height; y++, bitmap += celWidth) {
for (x = 0; x < width; x++) {