diff options
Diffstat (limited to 'src/mame/video/cave.cpp')
-rw-r--r-- | src/mame/video/cave.cpp | 36 |
1 files changed, 13 insertions, 23 deletions
diff --git a/src/mame/video/cave.cpp b/src/mame/video/cave.cpp index 0587a3963e4..e77bd0d7b5c 100644 --- a/src/mame/video/cave.cpp +++ b/src/mame/video/cave.cpp @@ -89,9 +89,8 @@ void cave_state::sailormn_get_banked_code(bool tiledim, u32 &color, u32 &pri, u3 ***************************************************************************/ -void cave_state::vh_start(u16 sprcol_base, u16 sprcol_granularity) +void cave_state::vh_start(u16 sprcol_granularity) { - m_sprite_base_pal = sprcol_base; m_sprite_granularity = sprcol_granularity; sprite_init(); @@ -125,25 +124,19 @@ void cave_state::vh_start(u16 sprcol_base, u16 sprcol_granularity) // 4 bit sprite granularity VIDEO_START_MEMBER(cave_state,spr_4bpp) { - vh_start(0, 16); + vh_start(16); } // 8 bit sprite granularity VIDEO_START_MEMBER(cave_state,spr_8bpp) { - vh_start(0, 256); -} - -// korokoro (different sprite base palette) -VIDEO_START_MEMBER(cave_state,korokoro) -{ - vh_start(0x3c00, 16); + vh_start(256); } // ppsatan (3 screen) VIDEO_START_MEMBER(cave_state,ppsatan) { - vh_start(0x3c00, 16); + vh_start(16); for (int chip = 1; chip < 3; chip++) { m_background_pen[chip] = m_gfxdecode[chip]->gfx(0)->colorbase() + @@ -231,12 +224,11 @@ VIDEO_START_MEMBER(cave_state,ppsatan) void cave_state::get_sprite_info_cave(int chip) { chip %= 4; - const u8 *base_gfx = m_spriteregion[chip]->base(); - const int code_max = m_spriteregion[chip]->bytes() / (16*16); if (m_sprite[chip] == nullptr) return; + gfx_element *gfx = m_spr_gfxdecode[chip]->gfx(0); sprite_cave *sprite = m_sprite[chip].get(); const int glob_flipx = m_videoregs[chip][0] & 0x8000; @@ -285,8 +277,7 @@ void cave_state::get_sprite_info_cave(int chip) break; /* Bound checking */ - code %= code_max; - sprite->pen_data = base_gfx + (16 * 16) * code; + sprite->pen_data = &m_sprite_gfx[chip][(code << 8) & m_sprite_gfx_mask[chip]]; int flipx = attr & 0x0008; int flipy = attr & 0x0004; @@ -344,7 +335,7 @@ void cave_state::get_sprite_info_cave(int chip) sprite->priority = (attr & 0x0030) >> 4; sprite->flags = SPRITE_VISIBLE_CAVE; sprite->line_offset = sprite->tile_width; - sprite->base_pen = m_sprite_base_pal + (((attr & 0x3f00) >> 8) * m_sprite_granularity); // first 0x4000 colors + sprite->base_pen = gfx->colorbase() + (((attr & 0x3f00) >> 8) * gfx->granularity()); // first 0x4000 colors if (glob_flipx) { x = max_x - x - sprite->total_width; flipx = !flipx; } if (glob_flipy) { y = max_y - y - sprite->total_height; flipy = !flipy; } @@ -363,12 +354,11 @@ void cave_state::get_sprite_info_cave(int chip) void cave_state::get_sprite_info_donpachi(int chip) { chip %= 4; - const u8 *base_gfx = m_spriteregion[chip]->base(); - const int code_max = m_spriteregion[chip]->bytes() / (16*16); if (m_sprite[chip] == nullptr) return; + gfx_element *gfx = m_spr_gfxdecode[chip]->gfx(0); sprite_cave *sprite = m_sprite[chip].get(); const int glob_flipx = m_videoregs[chip][0] & 0x8000; @@ -404,8 +394,7 @@ void cave_state::get_sprite_info_donpachi(int chip) sprite->tile_height = sprite->total_height = ((size >> 0) & 0x1f) * 16; /* Bound checking */ - code %= code_max; - sprite->pen_data = base_gfx + (16*16) * code; + sprite->pen_data = &m_sprite_gfx[chip][(code << 8) & m_sprite_gfx_mask[chip]]; if (x > 0x1ff) x -= 0x400; if (y > 0x1ff) y -= 0x400; @@ -424,12 +413,12 @@ void cave_state::get_sprite_info_donpachi(int chip) if (m_spritetype[0] & TYPE_ISPWRINST2) /* pwrinst2 */ { sprite->priority = ((attr & 0x0010) >> 4) + 2; - sprite->base_pen = m_sprite_base_pal + ((((attr & 0x3f00) >> 8) + ((attr & 0x0020) << 1)) * m_sprite_granularity); + sprite->base_pen = gfx->colorbase() + ((((attr & 0x3f00) >> 8) + ((attr & 0x0020) << 1)) * gfx->granularity()); } else { sprite->priority = (attr & 0x0030) >> 4; - sprite->base_pen = m_sprite_base_pal + (((attr & 0x3f00) >> 8) * m_sprite_granularity); // first 0x4000 colors + sprite->base_pen = gfx->colorbase() + (((attr & 0x3f00) >> 8) * gfx->granularity()); // first 0x4000 colors } sprite->flags = SPRITE_VISIBLE_CAVE; @@ -477,7 +466,7 @@ void cave_state::sprite_init() for (int chip = 0; chip < 4; chip++) { m_max_sprite_clk[chip] = 0; - if (m_videoregs[chip]) + if (m_videoregs[chip] && m_spr_gfxdecode[chip]) { for (int screen = 0; screen < 4; screen++) { @@ -492,6 +481,7 @@ void cave_state::sprite_init() } m_num_sprites[chip] = m_spriteram[chip].bytes() / 0x10 / 2; m_sprite[chip] = std::make_unique<sprite_cave []>(m_num_sprites[chip]); + m_spr_gfxdecode[chip]->gfx(0)->set_granularity(m_sprite_granularity); } else { |