changeset 32:8602ad493794

Fix horizontal sprite mirroring
author Mike Pavone <pavone@retrodev.com>
date Sat, 08 Dec 2012 21:39:01 -0800
parents 25016576b5f3
children 2e15fa26fe58
files vdp.c
diffstat 1 files changed, 9 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/vdp.c	Sat Dec 08 20:25:56 2012 -0800
+++ b/vdp.c	Sat Dec 08 21:39:01 2012 -0800
@@ -112,10 +112,17 @@
 		if (x) {
 			x -= 128;
 			int16_t base_x = x;
+			int16_t dir;
+			if (tileinfo & MAP_BIT_H_FLIP) {
+				x += (width-1) * 8;
+				dir = -8;
+			} else {
+				dir = 8;
+			}
 			//printf("Sprite %d | x: %d, y: %d, width: %d, height: %d, pal_priority: %X, row: %d, tile addr: %X\n", context->sprite_info_list[context->cur_slot].index, x, context->sprite_info_list[context->cur_slot].y, width, height, pal_priority, row, address);
-			for (;width && context->sprite_draws; --width, x += 8) {
+			for (int16_t i=0; i < width && context->sprite_draws; i++, x += dir) {
 				--context->sprite_draws;
-				context->sprite_draw_list[context->sprite_draws].address = address + ((x-base_x) / 8) * height * 4;
+				context->sprite_draw_list[context->sprite_draws].address = address + i * height * 4;
 				context->sprite_draw_list[context->sprite_draws].x_pos = x;
 				context->sprite_draw_list[context->sprite_draws].pal_priority = pal_priority;
 				context->sprite_draw_list[context->sprite_draws].h_flip = (tileinfo & MAP_BIT_H_FLIP) ? 1 : 0;