diff options
Diffstat (limited to 'src/mame/konami/k051960.cpp')
| -rw-r--r-- | src/mame/konami/k051960.cpp | 33 |
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) { |
