snes.c: fixed a sprite regression, no whatsnew
This commit is contained in:
parent
51c44a667a
commit
2238e2d3ea
@ -859,7 +859,7 @@ static void snes_oam_list_build( void )
|
|||||||
oam_spritelist[ii].pal = 128 + ((oamram[oam] & 0x0e) << 3);
|
oam_spritelist[ii].pal = 128 + ((oamram[oam] & 0x0e) << 3);
|
||||||
oam_spritelist[ii].tile = (oamram[oam--] & 0x1) << 8;
|
oam_spritelist[ii].tile = (oamram[oam--] & 0x1) << 8;
|
||||||
oam_spritelist[ii].tile |= oamram[oam--];
|
oam_spritelist[ii].tile |= oamram[oam--];
|
||||||
oam_spritelist[ii].y = oamram[oam--] + 1; /* We seem to need to add one here.... */
|
oam_spritelist[ii].y = oamram[oam--] + 1;
|
||||||
oam_spritelist[ii].x = oamram[oam--];
|
oam_spritelist[ii].x = oamram[oam--];
|
||||||
oam_spritelist[ii].size = (extra & 0x80) >> 7;
|
oam_spritelist[ii].size = (extra & 0x80) >> 7;
|
||||||
extra <<= 1;
|
extra <<= 1;
|
||||||
@ -867,10 +867,7 @@ static void snes_oam_list_build( void )
|
|||||||
extra <<= 1;
|
extra <<= 1;
|
||||||
|
|
||||||
oam_spritelist[ii].y *= snes_ppu.obj_interlace;
|
oam_spritelist[ii].y *= snes_ppu.obj_interlace;
|
||||||
|
oam_spritelist[ii].y &= 0x1ff;
|
||||||
/* Adjust if past maximum position */
|
|
||||||
if (oam_spritelist[ii].y >= snes_ppu.beam.last_visible_line * snes_ppu.interlace)
|
|
||||||
oam_spritelist[ii].y -= 256 * snes_ppu.interlace;
|
|
||||||
|
|
||||||
oam_spritelist[ii].x &= 0x1ff;
|
oam_spritelist[ii].x &= 0x1ff;
|
||||||
|
|
||||||
@ -1013,6 +1010,12 @@ static void snes_update_objects_rto( UINT16 curline )
|
|||||||
priority = oam_spritelist[active_sprite].priority_bits;
|
priority = oam_spritelist[active_sprite].priority_bits;
|
||||||
pal = oam_spritelist[active_sprite].pal;
|
pal = oam_spritelist[active_sprite].pal;
|
||||||
|
|
||||||
|
/* Adjust y, if past maximum position (for sprites which overlap between top & bottom) */
|
||||||
|
if (y >= 256 * snes_ppu.interlace)
|
||||||
|
y -= 256 * snes_ppu.interlace;
|
||||||
|
|
||||||
|
if (curline >= y && curline < (y + (height << 3)))
|
||||||
|
{
|
||||||
/* Only objects using tiles over 255 use name select */
|
/* Only objects using tiles over 255 use name select */
|
||||||
name_sel = (tile < 256) ? 0 : snes_ppu.oam.name_select;
|
name_sel = (tile < 256) ? 0 : snes_ppu.oam.name_select;
|
||||||
|
|
||||||
@ -1044,6 +1047,7 @@ static void snes_update_objects_rto( UINT16 curline )
|
|||||||
oam_tilelist[time_over - 1].priority = priority;
|
oam_tilelist[time_over - 1].priority = priority;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* set Range Over flag if necessary */
|
/* set Range Over flag if necessary */
|
||||||
if (range_over > 32)
|
if (range_over > 32)
|
||||||
|
Loading…
Reference in New Issue
Block a user