diff options
| -rw-r--r-- | engines/avalanche/background.cpp | 4 | ||||
| -rw-r--r-- | engines/avalanche/graphics.cpp | 12 | 
2 files changed, 11 insertions, 5 deletions
| diff --git a/engines/avalanche/background.cpp b/engines/avalanche/background.cpp index 54ab459d41..fc172871cc 100644 --- a/engines/avalanche/background.cpp +++ b/engines/avalanche/background.cpp @@ -109,7 +109,7 @@ void Background::update() {  			break;  		default:  			if (_vm->_roomTime % 200 <= 178) { // Normally. -				byte direction = 0; +				byte direction = 1;  				uint16 angle = _vm->bearing(1);  				if (((angle >= 1) && (angle <= 90)) || ((angle >= 358) && (angle <= 360)))  					direction = 3; @@ -315,6 +315,8 @@ void Background::release() {   * @remarks	Originally called 'show_one'   */  void Background::draw(int16 destX, int16 destY, byte sprId) { +	assert(sprId < 40); +  	if (_sprites[sprId]._x > kOnDisk) {  		if (destX < 0) {  			destX = _sprites[sprId]._x * 8; diff --git a/engines/avalanche/graphics.cpp b/engines/avalanche/graphics.cpp index 0b16590785..b3ba95fd80 100644 --- a/engines/avalanche/graphics.cpp +++ b/engines/avalanche/graphics.cpp @@ -540,8 +540,10 @@ void GraphicManager::drawSprite(AnimationType *sprite, byte picnum, int16 x, int  	// First we make the pixels of the sprite blank.  	for (int j = 0; j < sprite->_yLength; j++) {  		for (int i = 0; i < sprite->_xLength; i++) { -			if (((*sprite->_sil[picnum])[j][i / 8] >> ((7 - i % 8)) & 1) == 0) -				*(byte *)_surface.getBasePtr(x + i, y + j) = 0; +			if ((x + i < _surface.w) && (y + j < _surface.h)) { +				if (((*sprite->_sil[picnum])[j][i / 8] >> ((7 - i % 8)) & 1) == 0) +					*(byte *)_surface.getBasePtr(x + i, y + j) = 0; +			}  		}  	} @@ -553,8 +555,10 @@ void GraphicManager::drawSprite(AnimationType *sprite, byte picnum, int16 x, int  			for (uint16 i = 0; i < sprite->_xLength; i += 8) {  				byte pixel = (*sprite->_mani[picnum])[maniPos++];  				for (int bit = 0; bit < 8; bit++) { -					byte pixelBit = (pixel >> bit) & 1; -					*(byte *)_surface.getBasePtr(x + i + 7 - bit, y + j) += (pixelBit << plane); +					if ((x + i + 7 < _surface.w) && (y + j < _surface.h)) { +						byte pixelBit = (pixel >> bit) & 1; +						*(byte *)_surface.getBasePtr(x + i + 7 - bit, y + j) += (pixelBit << plane); +					}  				}  			}  		} | 
