diff options
| author | Filippos Karapetis | 2015-03-04 12:45:07 +0200 | 
|---|---|---|
| committer | Filippos Karapetis | 2015-03-04 12:45:07 +0200 | 
| commit | d9564d4cb2a0275698119b22e6ef3df32472d1da (patch) | |
| tree | f192d9afcfbf43a2242d06c83cbca07e70c6e819 | |
| parent | 6f7b0311afbd4df63aa9ac7b8604758286b1ae71 (diff) | |
| parent | bcf2e8204c481d9c4df17786e16591c100eb6c82 (diff) | |
| download | scummvm-rg350-d9564d4cb2a0275698119b22e6ef3df32472d1da.tar.gz scummvm-rg350-d9564d4cb2a0275698119b22e6ef3df32472d1da.tar.bz2 scummvm-rg350-d9564d4cb2a0275698119b22e6ef3df32472d1da.zip | |
Merge pull request #589 from norbertbajko/drascula_crash
DRASCULA: fix crash/graphic glitch at castle towers
| -rw-r--r-- | engines/drascula/actors.cpp | 10 | ||||
| -rw-r--r-- | engines/drascula/talk.cpp | 47 | 
2 files changed, 42 insertions, 15 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/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(); | 
