Mercurial > repos > blastem
diff vdp.c @ 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 | b62580dc6f30 |
children | 593a4f308335 |
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; } } }