diff options
Diffstat (limited to 'src/GPU2D.cpp')
-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 |