diff options
Diffstat (limited to 'engines/drascula')
-rw-r--r-- | engines/drascula/actors.cpp | 10 | ||||
-rw-r--r-- | engines/drascula/detection.cpp | 3 | ||||
-rw-r--r-- | engines/drascula/talk.cpp | 47 |
3 files changed, 43 insertions, 17 deletions
diff --git a/engines/drascula/actors.cpp b/engines/drascula/actors.cpp index 51148bbc05..849e2ccd24 100644 --- a/engines/drascula/actors.cpp +++ b/engines/drascula/actors.cpp @@ -396,6 +396,16 @@ 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; + curHeight = 0; + curWidth = 0; + } } void DrasculaEngine::walkDown() { diff --git a/engines/drascula/detection.cpp b/engines/drascula/detection.cpp index 833363669d..a84bd11cb1 100644 --- a/engines/drascula/detection.cpp +++ b/engines/drascula/detection.cpp @@ -382,8 +382,7 @@ SaveStateList DrasculaMetaEngine::listSaves(const char *target) const { } SaveStateDescriptor DrasculaMetaEngine::querySaveMetaInfos(const char *target, int slot) const { - char fileName[MAXPATHLEN]; - sprintf(fileName, "%s.%03d", target, slot); + Common::String fileName = Common::String::format("%s.%03d", target, slot); Common::InSaveFile *in = g_system->getSavefileManager()->openForLoading(fileName); 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(); |