@@ -776,8 +776,10 @@ void supracan_state::draw_sprites(bitmap_ind16 &bitmap, bitmap_ind8 &maskmap, bi
776
776
// TODO: check on real HW
777
777
static const int ysizes_table[16 ] = {
778
778
1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 ,
779
- // 0x9: speedyd intro dash frame
780
- 11 ,
779
+ // 0x9: speedyd intro dash frame, speedyd bonus stages, boomzoo intro
780
+ // 11 would be more logical for former, except it will break latter and
781
+ // is confirmed to "cut" feet anyway.
782
+ 10 ,
781
783
// 0xa: A'Can logo
782
784
12 ,
783
785
// 0xb/0xc: jttlaugh stage 1-3 (particularly on the web scrolling jump platforms)
@@ -819,7 +821,7 @@ void supracan_state::draw_sprites(bitmap_ind16 &bitmap, bitmap_ind8 &maskmap, bi
819
821
if (y >= 0x180 ) y -= 0x200 ;
820
822
if (x >= 0x180 ) x -= 0x200 ;
821
823
822
- if ((vram[i + 0 ] & 0x4000 ))
824
+ if ((vram[i + 0 ] & 0x4000 ) && sprite_ptr )
823
825
{
824
826
int xsize = 1 << (vram[i + 1 ] & 7 );
825
827
int ysize = ysizes_table[(vram[i + 0 ] & 0x1e00 ) >> 9 ];
@@ -853,6 +855,10 @@ void supracan_state::draw_sprites(bitmap_ind16 &bitmap, bitmap_ind8 &maskmap, bi
853
855
for (int xtile = 0 ; xtile < xsize; xtile++)
854
856
{
855
857
uint16_t data = vram[((sprite_ptr << 1 ) + ytile * xsize + xtile) & VRAM_MASK];
858
+ // magipool will draw garbage during gameplay if we don't skip empty entries.
859
+ // NOTE: sets up both main table pointer and sub entries
860
+ if (data == 0 )
861
+ continue ;
856
862
int tile = (bank * bank_size) + (data & 0x03ff );
857
863
int palette = (data & 0xf000 ) >> 12 ;
858
864
0 commit comments