diff options
| -rw-r--r-- | scumm/akos.cpp | 40 | 
1 files changed, 35 insertions, 5 deletions
| diff --git a/scumm/akos.cpp b/scumm/akos.cpp index 9bda00fce9..9e25d43e2e 100644 --- a/scumm/akos.cpp +++ b/scumm/akos.cpp @@ -308,7 +308,6 @@ void AkosRenderer::setPalette(byte *new_palette) {  		}  	} -  	if (_vm->_heversion == 70) {  		for (i = 0; i < size; i++)  			palette[i] = _vm->_HEV7ActorPalette[palette[i]]; @@ -869,8 +868,22 @@ byte AkosRenderer::codec1(int xmoveCur, int ymoveCur) {  	v1.scaleXstep = _mirror ? 1 : -1;  	if (_vm->_heversion >= 71) { -		if (_clipOverride.right > _clipOverride.left && _clipOverride.bottom > _clipOverride.top) -			rect.clip(_clipOverride); +		if (_clipOverride.right > _clipOverride.left && _clipOverride.bottom > _clipOverride.top) { +			if (rect.left < _clipOverride.left) +				rect.left = _clipOverride.left; + +			if (rect.right > _clipOverride.right) +				rect.right = _clipOverride.right; + +			if (rect.top < _clipOverride.top) +				rect.top = _clipOverride.top; + +			if (rect.bottom > _clipOverride.bottom) +				rect.bottom = _clipOverride.bottom; +		} + +		if (rect.isValidRect() == false) +			return 1;  	}  	if (_actorHitMode) { @@ -1140,8 +1153,22 @@ byte AkosRenderer::codec16(int xmoveCur, int ymoveCur) {  	maxh = _out.h;  	if (_vm->_heversion >= 71) { -		if (_clipOverride.right > _clipOverride.left && _clipOverride.bottom > _clipOverride.top) -			clip.clip(_clipOverride); +		if (_clipOverride.right > _clipOverride.left && _clipOverride.bottom > _clipOverride.top) { +			if (clip.left < _clipOverride.left) +				clip.left = _clipOverride.left; + +			if (clip.right > _clipOverride.right) +				clip.right = _clipOverride.right; + +			if (clip.top < _clipOverride.top) +				clip.top = _clipOverride.top; + +			if (clip.bottom > _clipOverride.bottom) +				clip.bottom = _clipOverride.bottom; +		} + +		if (clip.isValidRect() == false) +			return 0;  	}  	markRectAsDirty(clip); @@ -1258,6 +1285,9 @@ byte AkosRenderer::codec32(int xmoveCur, int ymoveCur) {  		dst.bottom -= diff;  	}	 +	if (dst.isValidRect() == false) +		return 0; +  	markRectAsDirty(dst);  	if (_draw_top > dst.top) | 
