diff options
author | Thierry Crozat | 2016-04-12 21:51:36 +0100 |
---|---|---|
committer | Thierry Crozat | 2016-04-12 22:19:43 +0100 |
commit | e3cb949b95b1b6caa4239c4ee15ebcc6dec8063a (patch) | |
tree | 3f52d7568fe2bc7b33d2c1bf2e475cb05f53f6e1 /engines/drascula | |
parent | 6cd76152a554bdffb832e409183fbd6b0fd7bcb3 (diff) | |
download | scummvm-rg350-e3cb949b95b1b6caa4239c4ee15ebcc6dec8063a.tar.gz scummvm-rg350-e3cb949b95b1b6caa4239c4ee15ebcc6dec8063a.tar.bz2 scummvm-rg350-e3cb949b95b1b6caa4239c4ee15ebcc6dec8063a.zip |
DRASCULA: Fix wrong background for inventory in chapter 6
This was a regression from commit fa3d3e3 and this fixes part of
bug #7113 DRASCULA: Serious sprite glitches.
The original uses extraSurface to draw text in draw_abc() in the
Spanish version while other languages use tableSurface. But in
ScummVM this was changed to use tableSurface for all languages.
However this caused an issue in chapter 6 when displaying the
inventory has it is also using tableSurface, as it was for all languages
in the original. While using the same surface works for other
languages, in the Spanish version we get the wrong background in
the inventory.
Rather than revert to using extraSurface for drawing text which is
a big change and impact all the chapters, I have opted to simply
swap the usage of the tableSurface and extraSurface in chapter 6
for the Spanish version compared to the original engine. The
changes therefore only impact chapter 6 and only the Spanish
version. I played the chapter in full to check that it indeed works
without causing adverse effects.
Diffstat (limited to 'engines/drascula')
-rw-r--r-- | engines/drascula/actors.cpp | 20 | ||||
-rw-r--r-- | engines/drascula/animation.cpp | 4 | ||||
-rw-r--r-- | engines/drascula/drascula.cpp | 7 | ||||
-rw-r--r-- | engines/drascula/interface.cpp | 9 | ||||
-rw-r--r-- | engines/drascula/rooms.cpp | 2 | ||||
-rw-r--r-- | engines/drascula/sound.cpp | 17 | ||||
-rw-r--r-- | engines/drascula/talk.cpp | 10 |
7 files changed, 47 insertions, 22 deletions
diff --git a/engines/drascula/actors.cpp b/engines/drascula/actors.cpp index b459c4539b..a1f2c5386c 100644 --- a/engines/drascula/actors.cpp +++ b/engines/drascula/actors.cpp @@ -196,6 +196,10 @@ void DrasculaEngine::moveCharacters() { return; } } + + byte *srcSurface = extraSurface; + if (currentChapter == 6 && _lang == kSpanish) + srcSurface = tableSurface; if (characterMoved == 0) { curPos[0] = 0; @@ -214,17 +218,17 @@ void DrasculaEngine::moveCharacters() { curPos[1] = 0; if (currentChapter == 2) copyRect(curPos[0], curPos[1], curPos[2], curPos[3], curPos[4], curPos[5], - extraSurface, screenSurface); + srcSurface, screenSurface); else reduce_hare_chico(curPos[0], curPos[1], curPos[2], curPos[3], curPos[4], curPos[5], - factor_red[curY + curHeight], extraSurface, screenSurface); + factor_red[curY + curHeight], srcSurface, screenSurface); } else if (trackProtagonist == 1) { if (currentChapter == 2) copyRect(curPos[0], curPos[1], curPos[2], curPos[3], curPos[4], curPos[5], - extraSurface, screenSurface); + srcSurface, screenSurface); else reduce_hare_chico(curPos[0], curPos[1], curPos[2], curPos[3], curPos[4], curPos[5], - factor_red[curY + curHeight], extraSurface, screenSurface); + factor_red[curY + curHeight], srcSurface, screenSurface); } else if (trackProtagonist == 2) { if (currentChapter == 2) copyRect(curPos[0], curPos[1], curPos[2], curPos[3], curPos[4], curPos[5], @@ -256,17 +260,17 @@ void DrasculaEngine::moveCharacters() { curPos[1] = 0; if (currentChapter == 2) copyRect(curPos[0], curPos[1], curPos[2], curPos[3], curPos[4], curPos[5], - extraSurface, screenSurface); + srcSurface, screenSurface); else reduce_hare_chico(curPos[0], curPos[1], curPos[2], curPos[3], curPos[4], curPos[5], - factor_red[curY + curHeight], extraSurface, screenSurface); + factor_red[curY + curHeight], srcSurface, screenSurface); } else if (trackProtagonist == 1) { if (currentChapter == 2) copyRect(curPos[0], curPos[1], curPos[2], curPos[3], curPos[4], curPos[5], - extraSurface, screenSurface); + srcSurface, screenSurface); else reduce_hare_chico(curPos[0], curPos[1], curPos[2], curPos[3], curPos[4], curPos[5], - factor_red[curY + curHeight], extraSurface, screenSurface); + factor_red[curY + curHeight], srcSurface, screenSurface); } else if (trackProtagonist == 2) { if (currentChapter == 2) copyRect(curPos[0], curPos[1], curPos[2], curPos[3], curPos[4], curPos[5], diff --git a/engines/drascula/animation.cpp b/engines/drascula/animation.cpp index 439253e5d6..5901d57b1f 100644 --- a/engines/drascula/animation.cpp +++ b/engines/drascula/animation.cpp @@ -1611,7 +1611,7 @@ void DrasculaEngine::animation_6_6() { removeObject(20); loadPic(96, frontSurface); loadPic(97, frontSurface); - loadPic(97, extraSurface); + loadPic(97, _lang == kSpanish ? tableSurface : extraSurface); loadPic(99, backSurface); doBreak = 1; objExit = 104; @@ -2215,7 +2215,7 @@ void DrasculaEngine::activatePendulum() { _roomNumber = 102; loadPic(102, bgSurface, HALF_PAL); loadPic("an_p1.alg", drawSurface3); - loadPic("an_p2.alg", extraSurface); + loadPic("an_p2.alg", _lang == kSpanish ? tableSurface : extraSurface); loadPic("an_p3.alg", frontSurface); copyBackground(0, 171, 0, 0, OBJWIDTH, OBJHEIGHT, backSurface, drawSurface3); diff --git a/engines/drascula/drascula.cpp b/engines/drascula/drascula.cpp index b821e7dbbe..c2ea761164 100644 --- a/engines/drascula/drascula.cpp +++ b/engines/drascula/drascula.cpp @@ -366,12 +366,15 @@ Common::Error DrasculaEngine::run() { memcpy(crosshairCursor + i * 40, tableSurface + 225 + (56 + i) * 320, 40); if (_lang == kSpanish) - loadPic(974, tableSurface); + loadPic(currentChapter == 6 ? 97 : 974, tableSurface); if (currentChapter != 2) { loadPic(99, cursorSurface); loadPic(99, backSurface); - loadPic(97, extraSurface); + if (currentChapter == 6 && _lang == kSpanish) + loadPic(95, extraSurface); + else + loadPic(97, extraSurface); } memset(iconName, 0, sizeof(iconName)); diff --git a/engines/drascula/interface.cpp b/engines/drascula/interface.cpp index 07f192cd4c..a09b9da07d 100644 --- a/engines/drascula/interface.cpp +++ b/engines/drascula/interface.cpp @@ -123,6 +123,15 @@ void DrasculaEngine::showMenu() { int h, n, x; byte *srcSurface = (currentChapter == 6) ? tableSurface : frontSurface; x = whichObject(); + + // The original uses extraSurface to draw text in draw_abc() in the Spanish version + // while other languages use tableSurface. Here all language use tableSurface for + // chapter 6. However the code in ScummVM was changed to use tableSurface for all + // labguage in draw_abc(). So instead here for the Spanish version we use extraSurface. + // Compared to the original the use of the tableSurface and extraSurface has been swapped + // for the Spanish language all through chapter 6. + if (currentChapter == 6 && _lang == kSpanish) + srcSurface = extraSurface; for (n = 1; n < ARRAYSIZE(inventoryObjects); n++) { h = inventoryObjects[n]; diff --git a/engines/drascula/rooms.cpp b/engines/drascula/rooms.cpp index 57d4517295..acfc528b0c 100644 --- a/engines/drascula/rooms.cpp +++ b/engines/drascula/rooms.cpp @@ -1501,7 +1501,7 @@ void DrasculaEngine::update_102() { if (actorFrames[kFramePendulum] <= 4) pendulumSurface = drawSurface3; else if (actorFrames[kFramePendulum] <= 11) - pendulumSurface = extraSurface; + pendulumSurface = _lang == kSpanish ? tableSurface : extraSurface; else pendulumSurface = frontSurface; diff --git a/engines/drascula/sound.cpp b/engines/drascula/sound.cpp index c576b37660..6c0c171664 100644 --- a/engines/drascula/sound.cpp +++ b/engines/drascula/sound.cpp @@ -44,10 +44,13 @@ void DrasculaEngine::updateVolume(Audio::Mixer::SoundType soundType, int prevVol } void DrasculaEngine::volumeControls() { + byte* srcSurface = tableSurface; + if (currentChapter == 6 && _lang == kSpanish) + srcSurface = extraSurface; if (_lang == kSpanish) - loadPic(95, tableSurface); + loadPic(95, srcSurface); - copyRect(1, 56, 73, 63, 177, 97, tableSurface, screenSurface); + copyRect(1, 56, 73, 63, 177, 97, srcSurface, screenSurface); updateScreen(73, 63, 73, 63, 177, 97, screenSurface); setCursor(kCursorCrosshair); @@ -64,11 +67,11 @@ void DrasculaEngine::volumeControls() { updateRoom(); - copyRect(1, 56, 73, 63, 177, 97, tableSurface, screenSurface); + copyRect(1, 56, 73, 63, 177, 97, srcSurface, screenSurface); - copyBackground(183, 56, 82, masterVolumeY, 39, 2 + masterVolume * 4, tableSurface, screenSurface); - copyBackground(183, 56, 138, voiceVolumeY, 39, 2 + voiceVolume * 4, tableSurface, screenSurface); - copyBackground(183, 56, 194, musicVolumeY, 39, 2 + musicVolume * 4, tableSurface, screenSurface); + copyBackground(183, 56, 82, masterVolumeY, 39, 2 + masterVolume * 4, srcSurface, screenSurface); + copyBackground(183, 56, 138, voiceVolumeY, 39, 2 + voiceVolume * 4, srcSurface, screenSurface); + copyBackground(183, 56, 194, musicVolumeY, 39, 2 + musicVolume * 4, srcSurface, screenSurface); updateScreen(); @@ -102,7 +105,7 @@ void DrasculaEngine::volumeControls() { } if (_lang == kSpanish) - loadPic(974, tableSurface); + loadPic(currentChapter == 6 ? 95 : 974, srcSurface); selectVerb(kVerbNone); diff --git a/engines/drascula/talk.cpp b/engines/drascula/talk.cpp index cc329b206b..3176c5e0f3 100644 --- a/engines/drascula/talk.cpp +++ b/engines/drascula/talk.cpp @@ -440,9 +440,12 @@ void DrasculaEngine::talk(const char *said, const char *filename) { copyRect(x_talk_izq[face], y_mask_talk, curX + 8, curY - 1, TALK_WIDTH, TALK_HEIGHT, extraSurface, screenSurface); else if (notTowers) { + byte *srcSurface = extraSurface; + if (currentChapter == 6 && _lang == kSpanish) + srcSurface = tableSurface; reduce_hare_chico(x_talk_izq[face], y_mask_talk, curX + (int)((8.0f / 100) * factor_red[MIN(201, curY + curHeight)]), curY, TALK_WIDTH, TALK_HEIGHT, factor_red[MIN(201, curY + curHeight)], - extraSurface, screenSurface); + srcSurface, screenSurface); } updateRefresh(); } else if (trackProtagonist == 1) { @@ -450,8 +453,11 @@ void DrasculaEngine::talk(const char *said, const char *filename) { copyRect(x_talk_dch[face], y_mask_talk, curX + 12, curY, TALK_WIDTH, TALK_HEIGHT, extraSurface, screenSurface); else if (notTowers) { + byte *srcSurface = extraSurface; + if (currentChapter == 6 && _lang == kSpanish) + srcSurface = tableSurface; reduce_hare_chico(x_talk_dch[face], y_mask_talk, curX + (int)((12.0f / 100) * factor_red[MIN(201, curY + curHeight)]), - curY, TALK_WIDTH, TALK_HEIGHT, factor_red[MIN(201, curY + curHeight)], extraSurface, screenSurface); + curY, TALK_WIDTH, TALK_HEIGHT, factor_red[MIN(201, curY + curHeight)], srcSurface, screenSurface); } updateRefresh(); } else if (trackProtagonist == 2) { |