src/blitter/32bpp_anim.cpp
changeset 11008 c8174672193e
parent 10429 1b99254f9607
child 11013 71b7f7c475db
--- a/src/blitter/32bpp_anim.cpp	Wed Jun 18 03:19:31 2008 +0000
+++ b/src/blitter/32bpp_anim.cpp	Wed Jun 18 13:11:02 2008 +0000
@@ -4,6 +4,7 @@
 
 #include "../stdafx.h"
 #include "../core/alloc_func.hpp"
+#include "../core/math_func.hpp"
 #include "../gfx_func.h"
 #include "../zoom_func.h"
 #include "../debug.h"
@@ -291,20 +292,29 @@
 void Blitter_32bppAnim::PaletteAnimate(uint start, uint count)
 {
 	assert(!_screen_disable_anim);
-	uint8 *anim = this->anim_buf;
+	assert(_screen.width == this->anim_buf_width && _screen.height == this->anim_buf_height);
 
 	/* Never repaint the transparency pixel */
-	if (start == 0) start++;
+	if (start == 0) {
+		start++;
+		count--;
+	}
+
+	const uint8 *anim = this->anim_buf;
+	uint32 *dst = (uint32 *)_screen.dst_ptr;
 
 	/* Let's walk the anim buffer and try to find the pixels */
-	for (int y = 0; y < this->anim_buf_height; y++) {
-		for (int x = 0; x < this->anim_buf_width; x++) {
-			if (*anim >= start && *anim <= start + count) {
+	for (int y = this->anim_buf_height; y != 0 ; y--) {
+		for (int x = this->anim_buf_width; x != 0 ; x--) {
+			uint colour = *anim;
+			if (IsInsideBS(colour, start, count)) {
 				/* Update this pixel */
-				this->SetPixel(_screen.dst_ptr, x, y, *anim);
+				*dst = LookupColourInPalette(colour);
 			}
+			dst++;
 			anim++;
 		}
+		dst += _screen.pitch - _screen.width;
 	}
 
 	/* Make sure the backend redraws the whole screen */