mirror of
https://github.com/libretro/scummvm.git
synced 2025-01-05 09:10:29 +00:00
Merge pull request #589 from norbertbajko/drascula_crash
DRASCULA: fix crash/graphic glitch at castle towers
This commit is contained in:
commit
d9564d4cb2
@ -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() {
|
||||
|
@ -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();
|
||||
|
Loading…
Reference in New Issue
Block a user