vdp rendering, bugfix for overlapping high prio sprites
authorkub <derkub@gmail.com>
Fri, 22 May 2020 21:14:52 +0000 (23:14 +0200)
committerkub <derkub@gmail.com>
Fri, 22 May 2020 21:14:52 +0000 (23:14 +0200)
pico/draw.c

index 8bf73e7..668a124 100644 (file)
@@ -1011,12 +1011,12 @@ static void DrawSpritesHiAS(unsigned char *sprited, int sh)
     delta<<=4; // Delta of address\r
 \r
     if (entry+1 == cnt) width = p[entry+1]; // last sprite width limited?\r
+    while (sx <= 0 && width) width--, sx+=8, tile+=delta; // Offscreen\r
     mp = mb+(sx>>3);\r
-    for (m = *mp; width; width--, sx+=8, *mp++ = m, m >>= 8, tile+=delta)\r
+    for (m = *mp; width; width--, sx+=8, tile+=delta, *mp++ = m, m >>= 8)\r
     {\r
       unsigned int pack;\r
 \r
-      if(sx<=0)   continue;\r
       if(sx>=328) break; // Offscreen\r
 \r
       pack = *(unsigned int *)(PicoMem.vram + (tile & 0x7fff));\r
@@ -1244,12 +1244,12 @@ static void DrawSpritesForced(unsigned char *sprited)
     delta<<=4; // Delta of address\r
 \r
     if (entry+1 == cnt) width = p[entry+1]; // last sprite width limited?\r
+    while (sx <= 0 && width) width--, sx+=8, tile+=delta; // Offscreen\r
     mp = mb+(sx>>3);\r
-    for (m = *mp; width; width--, sx+=8, *mp++ = m, m >>= 8, tile+=delta)\r
+    for (m = *mp; width; width--, sx+=8, tile+=delta, *mp++ = m, m >>= 8)\r
     {\r
       unsigned int pack;\r
 \r
-      if(sx<=0)   continue;\r
       if(sx>=328) break; // Offscreen\r
 \r
       pack = *(unsigned int *)(PicoMem.vram + (tile & 0x7fff));\r