vdp rendering, fix sprite masking and interlace layer priority
authorkub <derkub@gmail.com>
Mon, 21 Sep 2020 16:10:35 +0000 (18:10 +0200)
committerkub <derkub@gmail.com>
Mon, 21 Sep 2020 16:10:35 +0000 (18:10 +0200)
pico/draw.c

index ae11046..3ddc553 100644 (file)
@@ -418,7 +418,6 @@ void DrawStripInterlace(struct TileStrip *ts, int plane_sh)
     unsigned int pack;\r
 \r
     code = PicoMem.vram[ts->nametab + (tilex & ts->xmask)];\r
-    if (code==blank) continue;\r
     if (code>>15) { // high priority tile\r
       int cval = (code&0xfc00) | (dx<<16) | (ty<<25);\r
       cval|=(code&0x3ff)<<1;\r
@@ -426,6 +425,7 @@ void DrawStripInterlace(struct TileStrip *ts, int plane_sh)
       *ts->hc++ = cval; // cache it\r
       continue;\r
     }\r
+    if (code==blank) continue;\r
 \r
     if (code!=oldcode) {\r
       oldcode = code;\r
@@ -1358,7 +1358,7 @@ static NOINLINE void PrepareSprites(int max_lines)
         unsigned char *p = &HighLnSpr[y][0];\r
         int cnt = p[0];\r
         if (p[3] >= max_line_sprites) continue;         // sprite limit?\r
-        if ((p[1] & SPRL_MASKED) && !(entry & 0x80)) continue; // masked?\r
+        if (p[1] & SPRL_MASKED) continue;               // masked?\r
 \r
         w = width;\r
         if (p[2] + width > max_line_sprites*2) {        // tile limit?\r
@@ -1371,7 +1371,7 @@ static NOINLINE void PrepareSprites(int max_lines)
 \r
         if (sx == -0x78) {\r
           if (p[1] & (SPRL_HAVE_X|SPRL_TILE_OVFL))\r
-            p[1] |= SPRL_MASKED; // masked, no more low sprites for this line\r
+            p[1] |= SPRL_MASKED; // masked, no more sprites for this line\r
           if (!(p[1] & SPRL_HAVE_X) && cnt == 0)\r
             p[1] |= SPRL_HAVE_MASK0; // 1st sprite is masking\r
         } else\r