summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/video/cave.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/video/cave.cpp')
-rw-r--r--src/mame/video/cave.cpp36
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
{