diff options
| author | Gregory Montoir | 2009-01-18 02:46:25 +0000 | 
|---|---|---|
| committer | Gregory Montoir | 2009-01-18 02:46:25 +0000 | 
| commit | 5a809e51bece57c428a125bea04c76243803e104 (patch) | |
| tree | a617ab2e7280f091e124349ae370b7306366e0cd | |
| parent | bd3ff9c719d4e34a112761a2eb63408a986ae159 (diff) | |
| download | scummvm-rg350-5a809e51bece57c428a125bea04c76243803e104.tar.gz scummvm-rg350-5a809e51bece57c428a125bea04c76243803e104.tar.bz2 scummvm-rg350-5a809e51bece57c428a125bea04c76243803e104.zip  | |
simplified Graphics::decode*()
svn-id: r35889
| -rw-r--r-- | engines/tucker/graphics.cpp | 109 | 
1 files changed, 30 insertions, 79 deletions
diff --git a/engines/tucker/graphics.cpp b/engines/tucker/graphics.cpp index abff2fb848..bc88081e01 100644 --- a/engines/tucker/graphics.cpp +++ b/engines/tucker/graphics.cpp @@ -28,8 +28,8 @@  namespace Tucker {  int Graphics::encodeRLE(const uint8 *src, uint8 *dst, int w, int h) { +	int sz = 0;  	int count = 0; -	int dstOffset = 0;  	int code = 0;  	for (int y = 0; y < h; ++y) {  		for (int x = 0; x < w; ++x) { @@ -37,26 +37,26 @@ int Graphics::encodeRLE(const uint8 *src, uint8 *dst, int w, int h) {  			if (code == 0) {  				++count;  				if (count > 200) { -					dst[dstOffset++] = 0; -					dst[dstOffset++] = count; +					dst[sz++] = 0; +					dst[sz++] = count;  					count = 0;  				}  			} else {  				if (count > 0) { -					dst[dstOffset++] = 0; -					dst[dstOffset++] = count; +					dst[sz++] = 0; +					dst[sz++] = count;  					count = 0;  				} -				dst[dstOffset++] = code; +				dst[sz++] = code;  			}  		}  		src += 320;  	}  	if (count > 0) { -		dst[dstOffset++] = 0; -		dst[dstOffset++] = count; +		dst[sz++] = 0; +		dst[sz++] = count;  	} -	return dstOffset; +	return sz;  }  int Graphics::encodeRAW(const uint8 *src, uint8 *dst, int w, int h) { @@ -70,35 +70,19 @@ int Graphics::encodeRAW(const uint8 *src, uint8 *dst, int w, int h) {  void Graphics::decodeRLE(uint8 *dst, const uint8 *src, int w, int h) {  	int code = 0; -	int offset = 0;  	int color = 0;  	for (int y = 0; y < h; ++y) {  		for (int x = 0; x < w; ++x) {  			if (code == 0) { -				color = src[offset++]; +				color = *src++;  				if (color == 0) { -					code = src[offset++]; -					--code; -					if (x + code < w) { -						x += code; -						code = 0; -					} else { -						code -= w - 1 - x; -						x = w - 1; -					} -				} -			} else { -				--code; -				if (x + code < w) { -					x += code; -					code = 0; -				} else { -					code -= w - 1 - x; -					x = w - 1; +					code = *src++;  				}  			}  			if (color != 0) {  				dst[x] = color; +			} else { +				--code;  			}  		}  		dst += 640; @@ -107,36 +91,21 @@ void Graphics::decodeRLE(uint8 *dst, const uint8 *src, int w, int h) {  void Graphics::decodeRLE_224(uint8 *dst, const uint8 *src, int w, int h) {  	int code = 0; -	int offset = 0;  	int color = 0;  	for (int y = 0; y < h; ++y) {  		for (int x = 0; x < w; ++x) {  			if (code == 0) { -				color = src[offset++]; -				if (color != 0) { -					if (dst[x] < 0xE0) { -						dst[x] = color; -					} -				} else { -					code = src[offset++]; -					--code; -					if (x + code < w) { -						x += code; -						code = 0; -					} else { -						code -= w - 1 - x; -						x = w - 1; -					} +				color = *src++; +				if (color == 0) { +					code = *src++; +				} +			} +			if (color != 0) { +				if (dst[x] < 0xE0) { +					dst[x] = color;  				}  			} else {  				--code; -				if (x + code < w) { -					x += code; -					code = 0; -				} else { -					code -= w - 1 - x; -					x = w - 1; -				}  			}  		}  		dst += 640; @@ -145,39 +114,22 @@ void Graphics::decodeRLE_224(uint8 *dst, const uint8 *src, int w, int h) {  void Graphics::decodeRLE_248(uint8 *dst, const uint8 *src, int w, int h, int y1, int y2, bool xflip) {  	int code = 0; -	int offset = 0;  	int color = 0; -	int dstOffset = 0;  	for (int y = 0; y < h; ++y) {  		for (int x = 0; x < w; ++x) { -			dstOffset = xflip ? (w - 1 - x) : x; +			const int offset = xflip ? (w - 1 - x) : x;  			if (code == 0) { -				color = src[offset++]; +				color = *src++;  				if (color == 0) { -					code = src[offset++]; -					--code; -					if (x + code < w) { -						x += code; -						code = 0; -					} else { -						code -= w - 1 - x; -						x = w - 1; -					} -				} -			} else { -				--code; -				if (x + code < w) { -					x += code; -					code = 0; -				} else { -					code -= w - 1 - x; -					x = w - 1; +					code = *src++;  				}  			}  			if (color != 0) { -				if ((dst[dstOffset] < 0xE0 || y + y1 < y2) && dst[dstOffset] < 0xF8) { -					dst[dstOffset] = color; +				if ((dst[offset] < 0xE0 || y + y1 < y2) && dst[offset] < 0xF8) { +					dst[offset] = color;  				} +			} else { +				--code;  			}  		}  		dst += 640; @@ -186,14 +138,13 @@ void Graphics::decodeRLE_248(uint8 *dst, const uint8 *src, int w, int h, int y1,  void Graphics::decodeRLE_320(uint8 *dst, const uint8 *src, int w, int h) {  	int code = 0; -	int offset = 0;  	int color = 0;  	for (int y = 0; y < h; ++y) {  		for (int x = 0; x < w; ++x) {  			if (code == 0) { -				color = src[offset++]; +				color = *src++;  				if (color == 0) { -					code = src[offset++]; +					code = *src++;  				}  			}  			if (code == 0) {  | 
