From ee0effd22fda3dc2134f5f8aa4839c293684cd93 Mon Sep 17 00:00:00 2001 From: StapleButter Date: Sat, 29 Apr 2017 16:18:33 +0200 Subject: implement xflip for bitmap sprites (fixes #32) --- src/GPU2D.cpp | 41 ++++++++++++++++++++++++++++++++--------- 1 file changed, 32 insertions(+), 9 deletions(-) (limited to 'src') diff --git a/src/GPU2D.cpp b/src/GPU2D.cpp index ce8714d..77b79b4 100644 --- a/src/GPU2D.cpp +++ b/src/GPU2D.cpp @@ -1859,21 +1859,44 @@ void GPU2D::DrawSprite_Normal(u16* attrib, u32 width, s32 xpos, u32 ypos, u32* d } u32 pixelsaddr = (Num ? 0x06600000 : 0x06400000) + tilenum; - pixelsaddr += (xoff << 1); - for (; xoff < xend;) + if (attrib[1] & 0x1000) { - u16 color = GPU::ReadVRAM_OBJ(pixelsaddr); - pixelsaddr += 2; + pixelsaddr += ((width-1 - xoff) << 1); - if (color & 0x8000) + for (; xoff < xend;) { - if (window) ((u8*)dst)[xpos] = 1; - else dst[xpos] = color | prio; + u16 color = GPU::ReadVRAM_OBJ(pixelsaddr); + pixelsaddr -= 2; + + if (color & 0x8000) + { + if (window) ((u8*)dst)[xpos] = 1; + else dst[xpos] = color | prio; + } + + xoff++; + xpos++; } + } + else + { + pixelsaddr += (xoff << 1); - xoff++; - xpos++; + for (; xoff < xend;) + { + u16 color = GPU::ReadVRAM_OBJ(pixelsaddr); + pixelsaddr += 2; + + if (color & 0x8000) + { + if (window) ((u8*)dst)[xpos] = 1; + else dst[xpos] = color | prio; + } + + xoff++; + xpos++; + } } } else -- cgit v1.2.3