From 9045f619dda60818a2f80fe6111959df287f8cb0 Mon Sep 17 00:00:00 2001 From: Angelo Salese Date: Sun, 20 Dec 2009 17:36:28 +0000 Subject: [PATCH] Fixed sprite-tilemap priorities in Super Slams [Angelo Salese] --- src/mame/drivers/suprslam.c | 4 +++- src/mame/includes/suprslam.h | 1 + src/mame/video/suprslam.c | 17 ++++++++++------- 3 files changed, 14 insertions(+), 8 deletions(-) diff --git a/src/mame/drivers/suprslam.c b/src/mame/drivers/suprslam.c index 3e2628295e5..8f5da264fb6 100644 --- a/src/mame/drivers/suprslam.c +++ b/src/mame/drivers/suprslam.c @@ -133,7 +133,8 @@ static ADDRESS_MAP_START( suprslam_map, ADDRESS_SPACE_PROGRAM, 16 ) 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(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(0xff9000, 0xff9001) AM_WRITE(sound_command_w) 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(0xfff006, 0xfff007) AM_READ_PORT("DSW1") AM_RANGE(0xfff008, 0xfff009) AM_READ_PORT("DSW2") + AM_RANGE(0xfff00c, 0xfff00d) AM_WRITEONLY AM_BASE_MEMBER(suprslam_state, spr_ctrl) ADDRESS_MAP_END static ADDRESS_MAP_START( sound_map, ADDRESS_SPACE_PROGRAM, 8 ) diff --git a/src/mame/includes/suprslam.h b/src/mame/includes/suprslam.h index b11a121a58e..c1cc75c591c 100644 --- a/src/mame/includes/suprslam.h +++ b/src/mame/includes/suprslam.h @@ -17,6 +17,7 @@ struct _suprslam_state /* video-related */ tilemap *screen_tilemap, *bg_tilemap; UINT16 screen_bank, bg_bank; + UINT16 *spr_ctrl; /* misc */ int pending_command; diff --git a/src/mame/video/suprslam.c b/src/mame/video/suprslam.c index cabad0e7c38..0149199aa1a 100644 --- a/src/mame/video/suprslam.c +++ b/src/mame/video/suprslam.c @@ -68,9 +68,9 @@ static void draw_sprites( running_machine *machine, bitmap_t *bitmap, const rect 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 ++) { @@ -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); loopno ++; } - } - else + } + else { for (xcnt = wide; xcnt >= 0; xcnt --) { @@ -158,8 +158,11 @@ VIDEO_UPDATE( suprslam ) bitmap_fill(bitmap, cliprect, get_black_pen(screen->machine)); 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); + if(state->spr_ctrl[0] & 8) + draw_sprites(screen->machine, bitmap, cliprect); return 0; } @@ -173,8 +176,8 @@ WRITE16_HANDLER (suprslam_bank_w) state->screen_bank = data & 0xf000; 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); - if (state->bg_bank != old_bg_bank) + if (state->bg_bank != old_bg_bank) tilemap_mark_all_tiles_dirty(state->bg_tilemap); }