From 8778603d342da33957cf995dd3547231795b14ba Mon Sep 17 00:00:00 2001 From: Norbert Bajkó Date: Sun, 1 Mar 2015 14:48:34 +0100 Subject: DRASCULA: fix crash/graphic glitch at castle towers Fix bug #5903 DRASCULA-IT: Crash/graphic glitch at castle towers --- engines/drascula/actors.cpp | 7 +++++++ engines/drascula/talk.cpp | 41 ++++++++++++++++++++++++++--------------- 2 files changed, 33 insertions(+), 15 deletions(-) diff --git a/engines/drascula/actors.cpp b/engines/drascula/actors.cpp index 51148bbc05..0c18f513e1 100644 --- a/engines/drascula/actors.cpp +++ b/engines/drascula/actors.cpp @@ -396,6 +396,13 @@ void DrasculaEngine::increaseFrameNum() { curHeight = (int)newHeight; curWidth = (int)newWidth; } + + if ((currentChapter == 5) && (_roomNumber == 45)) { + curY = 0; + curX = 0; + curHeight = 0; + curWidth = 0; + } } void DrasculaEngine::walkDown() { diff --git a/engines/drascula/talk.cpp b/engines/drascula/talk.cpp index ed29dc5fe4..9773ceca5c 100644 --- a/engines/drascula/talk.cpp +++ b/engines/drascula/talk.cpp @@ -379,6 +379,7 @@ void DrasculaEngine::talk(const char *said, const char *filename) { int y_mask_talk = 170; int face; + bool notTowers = !((currentChapter == 5) && (_roomNumber == 45)); if (currentChapter == 6) { if (flags[0] == 0 && _roomNumber == 102) { @@ -434,44 +435,54 @@ 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); + if (!_subtitlesDisabled) { + if (notTowers) { + centerText(said, curX, curY); + } + else { + centerText(said, 160, 25); + } + } + updateScreen(); updateEvents(); -- cgit v1.2.3 From 43a09925381838efbcd36dadba465cb5cae3eb11 Mon Sep 17 00:00:00 2001 From: norbertbajko Date: Sun, 1 Mar 2015 17:06:20 +0100 Subject: DRASCULA: comment "actors.cpp" Explain #5903 DRASCULA-IT bug fix--- engines/drascula/actors.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/engines/drascula/actors.cpp b/engines/drascula/actors.cpp index 0c18f513e1..849e2ccd24 100644 --- a/engines/drascula/actors.cpp +++ b/engines/drascula/actors.cpp @@ -396,7 +396,10 @@ void DrasculaEngine::increaseFrameNum() { curHeight = (int)newHeight; curWidth = (int)newWidth; } - + + // Fix bug #5903 DRASCULA-IT: Crash/graphic glitch at castle towers + // Chapter 5 Room 45 is the castle tower part + // Fixing the character's coordinate(0,0) in the tower section to prevent out of window coordinates and crash if ((currentChapter == 5) && (_roomNumber == 45)) { curY = 0; curX = 0; -- cgit v1.2.3 From 0abf6d72b0ca15a81518190cb2040eb798754ebd Mon Sep 17 00:00:00 2001 From: norbertbajko Date: Sun, 1 Mar 2015 17:16:54 +0100 Subject: DRASCULA: comment "talk.cpp" Explain #5903 DRASCULA-IT bug fix--- engines/drascula/talk.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/engines/drascula/talk.cpp b/engines/drascula/talk.cpp index 9773ceca5c..6e0dd2a011 100644 --- a/engines/drascula/talk.cpp +++ b/engines/drascula/talk.cpp @@ -379,6 +379,10 @@ 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) { -- cgit v1.2.3 From bcf2e8204c481d9c4df17786e16591c100eb6c82 Mon Sep 17 00:00:00 2001 From: norbertbajko Date: Sun, 1 Mar 2015 17:23:28 +0100 Subject: DRASCULA: comment "talk.cpp" Explain #5903 DRASCULA-IT bug fix--- engines/drascula/talk.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/engines/drascula/talk.cpp b/engines/drascula/talk.cpp index 6e0dd2a011..e9fec868f8 100644 --- a/engines/drascula/talk.cpp +++ b/engines/drascula/talk.cpp @@ -478,6 +478,8 @@ void DrasculaEngine::talk(const char *said, const char *filename) { updateRefresh(); } + // 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); -- cgit v1.2.3