Fixed sprite-tilemap priorities in Super Slams [Angelo Salese]

This commit is contained in:
Angelo Salese 2009-12-20 17:36:28 +00:00
parent 38ccda1646
commit 9045f619dd
3 changed files with 14 additions and 8 deletions

View File

@ -133,7 +133,8 @@ static ADDRESS_MAP_START( suprslam_map, ADDRESS_SPACE_PROGRAM, 16 )
AM_RANGE(0xfd0000, 0xfdffff) AM_RAM AM_RANGE(0xfd0000, 0xfdffff) AM_RAM
AM_RANGE(0xfe0000, 0xfe0fff) AM_RAM_WRITE(suprslam_screen_videoram_w) AM_BASE_MEMBER(suprslam_state, screen_videoram) AM_RANGE(0xfe0000, 0xfe0fff) AM_RAM_WRITE(suprslam_screen_videoram_w) AM_BASE_MEMBER(suprslam_state, screen_videoram)
AM_RANGE(0xff0000, 0xff1fff) AM_RAM_WRITE(suprslam_bg_videoram_w) AM_BASE_MEMBER(suprslam_state, bg_videoram) AM_RANGE(0xff0000, 0xff1fff) AM_RAM_WRITE(suprslam_bg_videoram_w) AM_BASE_MEMBER(suprslam_state, bg_videoram)
// AM_RANGE(0xff2000, 0xff203f) AM_RAM /* ?? */ AM_RANGE(0xff2000, 0xff203f) AM_RAM // (layer) brightness control? Used on the title screen.
// AM_RANGE(0xff3000, 0xff3001) AM_WRITENOP // sprite buffer trigger?
AM_RANGE(0xff8000, 0xff8fff) AM_DEVREADWRITE("k053936", k053936_linectrl_r, k053936_linectrl_w) AM_RANGE(0xff8000, 0xff8fff) AM_DEVREADWRITE("k053936", k053936_linectrl_r, k053936_linectrl_w)
AM_RANGE(0xff9000, 0xff9001) AM_WRITE(sound_command_w) AM_RANGE(0xff9000, 0xff9001) AM_WRITE(sound_command_w)
AM_RANGE(0xffa000, 0xffafff) AM_RAM_WRITE(paletteram16_xGGGGGBBBBBRRRRR_word_w) AM_BASE_GENERIC(paletteram) AM_RANGE(0xffa000, 0xffafff) AM_RAM_WRITE(paletteram16_xGGGGGBBBBBRRRRR_word_w) AM_BASE_GENERIC(paletteram)
@ -144,6 +145,7 @@ static ADDRESS_MAP_START( suprslam_map, ADDRESS_SPACE_PROGRAM, 16 )
AM_RANGE(0xfff004, 0xfff005) AM_READ_PORT("SYSTEM") AM_RANGE(0xfff004, 0xfff005) AM_READ_PORT("SYSTEM")
AM_RANGE(0xfff006, 0xfff007) AM_READ_PORT("DSW1") AM_RANGE(0xfff006, 0xfff007) AM_READ_PORT("DSW1")
AM_RANGE(0xfff008, 0xfff009) AM_READ_PORT("DSW2") AM_RANGE(0xfff008, 0xfff009) AM_READ_PORT("DSW2")
AM_RANGE(0xfff00c, 0xfff00d) AM_WRITEONLY AM_BASE_MEMBER(suprslam_state, spr_ctrl)
ADDRESS_MAP_END ADDRESS_MAP_END
static ADDRESS_MAP_START( sound_map, ADDRESS_SPACE_PROGRAM, 8 ) static ADDRESS_MAP_START( sound_map, ADDRESS_SPACE_PROGRAM, 8 )

View File

@ -17,6 +17,7 @@ struct _suprslam_state
/* video-related */ /* video-related */
tilemap *screen_tilemap, *bg_tilemap; tilemap *screen_tilemap, *bg_tilemap;
UINT16 screen_bank, bg_bank; UINT16 screen_bank, bg_bank;
UINT16 *spr_ctrl;
/* misc */ /* misc */
int pending_command; int pending_command;

View File

@ -68,9 +68,9 @@ static void draw_sprites( running_machine *machine, bitmap_t *bitmap, const rect
if (ypos > 0xff) ypos -=0x200; if (ypos > 0xff) ypos -=0x200;
for (ycnt = 0; ycnt < high+1; ycnt ++) for (ycnt = 0; ycnt < high+1; ycnt ++)
{ {
if (!flipx) if (!flipx)
{ {
for (xcnt = 0; xcnt < wide+1; xcnt ++) for (xcnt = 0; xcnt < wide+1; xcnt ++)
{ {
@ -79,8 +79,8 @@ static void draw_sprites( running_machine *machine, bitmap_t *bitmap, const rect
drawgfxzoom_transpen(bitmap, cliprect, gfx, tileno, col, 0, 0,-0x200+xpos + xcnt * xzoom/2, ypos + ycnt * yzoom/2,xzoom << 11, yzoom << 11, 15); drawgfxzoom_transpen(bitmap, cliprect, gfx, tileno, col, 0, 0,-0x200+xpos + xcnt * xzoom/2, ypos + ycnt * yzoom/2,xzoom << 11, yzoom << 11, 15);
loopno ++; loopno ++;
} }
} }
else else
{ {
for (xcnt = wide; xcnt >= 0; xcnt --) for (xcnt = wide; xcnt >= 0; xcnt --)
{ {
@ -158,8 +158,11 @@ VIDEO_UPDATE( suprslam )
bitmap_fill(bitmap, cliprect, get_black_pen(screen->machine)); bitmap_fill(bitmap, cliprect, get_black_pen(screen->machine));
k053936_zoom_draw(state->k053936, bitmap, cliprect, state->bg_tilemap, 0, 0, 1); k053936_zoom_draw(state->k053936, bitmap, cliprect, state->bg_tilemap, 0, 0, 1);
draw_sprites(screen->machine, bitmap, cliprect); if(!(state->spr_ctrl[0] & 8))
draw_sprites(screen->machine, bitmap, cliprect);
tilemap_draw(bitmap, cliprect, state->screen_tilemap, 0, 0); tilemap_draw(bitmap, cliprect, state->screen_tilemap, 0, 0);
if(state->spr_ctrl[0] & 8)
draw_sprites(screen->machine, bitmap, cliprect);
return 0; return 0;
} }
@ -173,8 +176,8 @@ WRITE16_HANDLER (suprslam_bank_w)
state->screen_bank = data & 0xf000; state->screen_bank = data & 0xf000;
state->bg_bank = (data & 0x0f00) << 4; state->bg_bank = (data & 0x0f00) << 4;
if (state->screen_bank != old_screen_bank) if (state->screen_bank != old_screen_bank)
tilemap_mark_all_tiles_dirty(state->screen_tilemap); tilemap_mark_all_tiles_dirty(state->screen_tilemap);
if (state->bg_bank != old_bg_bank) if (state->bg_bank != old_bg_bank)
tilemap_mark_all_tiles_dirty(state->bg_tilemap); tilemap_mark_all_tiles_dirty(state->bg_tilemap);
} }