summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/konami/k051960.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/konami/k051960.cpp')
-rw-r--r--src/mame/konami/k051960.cpp33
1 files changed, 17 insertions, 16 deletions
diff --git a/src/mame/konami/k051960.cpp b/src/mame/konami/k051960.cpp
index 4a3a45f65c6..4e93122613e 100644
--- a/src/mame/konami/k051960.cpp
+++ b/src/mame/konami/k051960.cpp
@@ -151,6 +151,7 @@ k051960_device::k051960_device(const machine_config &mconfig, const char *tag, d
, m_romoffset(0)
, m_control(0)
, m_shadow_config(0)
+ , m_priority_shadows(false)
{
}
@@ -291,15 +292,13 @@ TIMER_CALLBACK_MEMBER(k051960_device::nmi_scanline)
u8 k051960_device::k051960_fetchromdata(offs_t offset)
{
- int code, color, pri, off1, addr;
- bool shadow;
-
- addr = m_romoffset + (m_spriterombank[0] << 8) + ((m_spriterombank[1] & 0x03) << 16);
- code = (addr & 0x3ffe0) >> 5;
- off1 = addr & 0x1f;
- color = ((m_spriterombank[1] & 0xfc) >> 2) + ((m_spriterombank[2] & 0x03) << 6);
- pri = 0;
- shadow = false;
+ int addr = m_romoffset + (m_spriterombank[0] << 8) + ((m_spriterombank[1] & 0x03) << 16);
+ int code = (addr & 0x3ffe0) >> 5;
+ int off1 = addr & 0x1f;
+ int color = ((m_spriterombank[1] & 0xfc) >> 2) + ((m_spriterombank[2] & 0x03) << 6);
+ int pri = 0;
+ bool shadow = false;
+
m_k051960_cb(&code, &color, &pri, &shadow);
addr = (code << 7) | (off1 << 2) | offset;
@@ -427,6 +426,8 @@ void k051960_device::k051960_sprites_draw(bitmap_ind16 &bitmap, const rectangle
memset(drawmode_table, DRAWMODE_SOURCE, sizeof(drawmode_table));
drawmode_table[0] = DRAWMODE_NONE;
+ const u32 shadow_mode = (m_priority_shadows || palette().shadow_mode()) ? DRAWMODE_SHADOW_PRI : DRAWMODE_SHADOW;
+
for (offs = 0; offs < NUM_SPRITES; offs++)
sortedlist[offs] = -1;
@@ -445,8 +446,7 @@ void k051960_device::k051960_sprites_draw(bitmap_ind16 &bitmap, const rectangle
for (pri_code = 0; pri_code < NUM_SPRITES; pri_code++)
{
- int ox, oy, code, color, pri, size, w, h, x, y, flipx, flipy, zoomx, zoomy;
- bool shadow;
+ int ox, oy, size, w, h, x, y, flipx, flipy, zoomx, zoomy;
/* sprites can be grouped up to 8x8. The draw order is
0 1 4 5 16 17 20 21
2 3 6 7 18 19 22 23
@@ -466,10 +466,11 @@ void k051960_device::k051960_sprites_draw(bitmap_ind16 &bitmap, const rectangle
if (offs == -1)
continue;
- code = m_buffer[offs + 2] + ((m_buffer[offs + 1] & 0x1f) << 8);
- color = m_buffer[offs + 3] & 0xff;
- pri = 0;
- shadow = !BIT(m_shadow_config, 2) && (BIT(m_shadow_config, 1) || BIT(color, 7));
+ int code = m_buffer[offs + 2] + ((m_buffer[offs + 1] & 0x1f) << 8);
+ int color = m_buffer[offs + 3] & 0xff;
+ int pri = 0;
+ bool shadow = !BIT(m_shadow_config, 2) && (BIT(m_shadow_config, 1) || BIT(color, 7));
+
m_k051960_cb(&code, &color, &pri, &shadow);
if (max_priority != -1)
@@ -529,7 +530,7 @@ void k051960_device::k051960_sprites_draw(bitmap_ind16 &bitmap, const rectangle
flipy = !flipy;
}
- drawmode_table[gfx(0)->granularity() - 1] = shadow ? DRAWMODE_SHADOW : DRAWMODE_SOURCE;
+ drawmode_table[gfx(0)->granularity() - 1] = shadow ? shadow_mode : DRAWMODE_SOURCE;
if (zoomx == 0x10000 && zoomy == 0x10000)
{