diff options
Diffstat (limited to 'engines/drascula/talk.cpp')
-rw-r--r-- | engines/drascula/talk.cpp | 49 |
1 files changed, 33 insertions, 16 deletions
diff --git a/engines/drascula/talk.cpp b/engines/drascula/talk.cpp index ed29dc5fe4..cc329b206b 100644 --- a/engines/drascula/talk.cpp +++ b/engines/drascula/talk.cpp @@ -232,7 +232,7 @@ void DrasculaEngine::talk_solo(const char *said, const char *filename) { if (currentChapter == 1) color_abc(color_solo); - else if (currentChapter == 4) + else if (currentChapter == 5) color_abc(kColorRed); talkInit(filename); @@ -379,6 +379,11 @@ void DrasculaEngine::talk(const char *said, const char *filename) { int y_mask_talk = 170; int face; + + // Fix bug #5903 DRASCULA-IT: Crash/graphic glitch at castle towers + // Chapter 5 Room 45 is the castle tower part + // We use this variable as a condition below because at the castle towers we don't want to draw out the head + bool notTowers = !((currentChapter == 5) && (_roomNumber == 45)); if (currentChapter == 6) { if (flags[0] == 0 && _roomNumber == 102) { @@ -434,44 +439,56 @@ void DrasculaEngine::talk(const char *said, const char *filename) { if (currentChapter == 2) copyRect(x_talk_izq[face], y_mask_talk, curX + 8, curY - 1, TALK_WIDTH, TALK_HEIGHT, extraSurface, screenSurface); - else + else if (notTowers) { 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); - + curY, TALK_WIDTH, TALK_HEIGHT, factor_red[MIN(201, curY + curHeight)], + extraSurface, screenSurface); + } updateRefresh(); } else if (trackProtagonist == 1) { if (currentChapter == 2) copyRect(x_talk_dch[face], y_mask_talk, curX + 12, curY, TALK_WIDTH, TALK_HEIGHT, extraSurface, screenSurface); - else + else if (notTowers) { 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); + } updateRefresh(); } else if (trackProtagonist == 2) { if (currentChapter == 2) copyRect(x_talk_izq[face], y_mask_talk, curX + 12, curY, TALK_WIDTH, TALK_HEIGHT, frontSurface, screenSurface); - else + else if (notTowers) { reduce_hare_chico(x_talk_izq[face], y_mask_talk, - talkOffset + curX + (int)((12.0f / 100) * factor_red[MIN(201, curY + curHeight)]), - curY, TALK_WIDTH, TALK_HEIGHT, factor_red[MIN(201, curY + curHeight)], - frontSurface, screenSurface); + talkOffset + curX + (int)((12.0f / 100) * factor_red[MIN(201, curY + curHeight)]), + curY, TALK_WIDTH, TALK_HEIGHT, factor_red[MIN(201, curY + curHeight)], + frontSurface, screenSurface); + } updateRefresh(); } else if (trackProtagonist == 3) { if (currentChapter == 2) copyRect(x_talk_dch[face], y_mask_talk, curX + 8, curY, TALK_WIDTH, TALK_HEIGHT, frontSurface, screenSurface); - else + else if (notTowers) { reduce_hare_chico(x_talk_dch[face], y_mask_talk, - talkOffset + curX + (int)((8.0f / 100) * factor_red[MIN(201, curY + curHeight)]), - curY, TALK_WIDTH,TALK_HEIGHT, factor_red[MIN(201, curY + curHeight)], - frontSurface, screenSurface); + talkOffset + curX + (int)((8.0f / 100) * factor_red[MIN(201, curY + curHeight)]), + curY, TALK_WIDTH, TALK_HEIGHT, factor_red[MIN(201, curY + curHeight)], + frontSurface, screenSurface); + } updateRefresh(); } - if (!_subtitlesDisabled) - centerText(said, curX, curY); + // Fix bug #5903 DRASCULA-IT: Crash/graphic glitch at castle towers + // Without the head we have to fix the subtitle's coordinates(upper-center) at the tower section + if (!_subtitlesDisabled) { + if (notTowers) { + centerText(said, curX, curY); + } + else { + centerText(said, 160, 25); + } + } + updateScreen(); updateEvents(); |