diff options
author | StapleButter <thetotalworm@gmail.com> | 2017-04-29 16:18:33 +0200 |
---|---|---|
committer | StapleButter <thetotalworm@gmail.com> | 2017-04-29 16:18:33 +0200 |
commit | ee0effd22fda3dc2134f5f8aa4839c293684cd93 (patch) | |
tree | 214d9e33b87f6ba07bf3818fceb1a7fde41f3ca3 | |
parent | da31af92029af5f9db3c9fcc226414e3789f2682 (diff) |
implement xflip for bitmap sprites (fixes #32)
-rw-r--r-- | src/GPU2D.cpp | 41 |
1 files changed, 32 insertions, 9 deletions
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<u16>(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<u16>(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<u16>(pixelsaddr); + pixelsaddr += 2; + + if (color & 0x8000) + { + if (window) ((u8*)dst)[xpos] = 1; + else dst[xpos] = color | prio; + } + + xoff++; + xpos++; + } } } else |