aboutsummaryrefslogtreecommitdiff
path: root/engines/drascula/talk.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/drascula/talk.cpp')
-rw-r--r--engines/drascula/talk.cpp47
1 files changed, 32 insertions, 15 deletions
diff --git a/engines/drascula/talk.cpp b/engines/drascula/talk.cpp
index ed29dc5fe4..e9fec868f8 100644
--- a/engines/drascula/talk.cpp
+++ b/engines/drascula/talk.cpp
@@ -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();