changeset 2503:fa49e06d8c92

Fix silly bug in Mode 4 sprite rendering (Thanks Sik!)
author Michael Pavone <pavone@retrodev.com>
date Wed, 31 Jul 2024 22:30:14 -0700
parents ad50530a7c27
children 593a4f308335
files vdp.c
diffstat 1 files changed, 9 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/vdp.c	Tue Jul 16 20:21:08 2024 -0700
+++ b/vdp.c	Wed Jul 31 22:30:14 2024 -0700
@@ -486,27 +486,28 @@
 		int x = d->x_pos & 0xFF;
 		for (int i = 28; i >= 0; i -= 4, x++)
 		{
-			if (context->linebuf[x] && (pixels >> i & 0xF)) {
-				if (
+			uint8_t pixel = pixels >> i & 0xF;
+			if (pixel) {
+				if (!context->linebuf[x]) {
+					context->linebuf[x] = pixel;
+				} else if(
 					((context->regs[REG_MODE_1] & BIT_SPRITE_8PX) && x > 8)
 					|| ((!(context->regs[REG_MODE_1] & BIT_SPRITE_8PX)) && x < 256)
 				) {
 					context->flags2 |= FLAG2_SPRITE_COLLIDE;
 				}
-			} else {
-				context->linebuf[x] = pixels >> i & 0xF;
 			}
 			if (zoom) {
 				x++;
-				if (context->linebuf[x] && (pixels >> i & 0xF)) {
-					if (
+				if (pixel) {
+					if (!context->linebuf[x]) {
+						context->linebuf[x] = pixel;
+					} else if(
 						((context->regs[REG_MODE_1] & BIT_SPRITE_8PX) && x > 8)
 						|| ((!(context->regs[REG_MODE_1] & BIT_SPRITE_8PX)) && x < 256)
 					) {
 						context->flags2 |= FLAG2_SPRITE_COLLIDE;
 					}
-				} else {
-					context->linebuf[x] = pixels >> i & 0xF;
 				}
 			}
 		}