mirror of
https://github.com/holub/mame
synced 2025-04-23 08:49:55 +03:00
dec8.cpp : Fix srdarwin_draw_sprite priority checking behavior
This commit is contained in:
parent
d5dd5c1ce9
commit
e82091d2dd
@ -200,7 +200,7 @@ private:
|
||||
DECLARE_WRITE_LINE_MEMBER(oscar_coin_irq);
|
||||
DECLARE_WRITE8_MEMBER(oscar_coin_clear_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(shackled_coin_irq);
|
||||
void srdarwin_draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect, int pri );
|
||||
void srdarwin_draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect, bitmap_ind8 &primap);
|
||||
DECLARE_WRITE_LINE_MEMBER(csilver_adpcm_int);
|
||||
|
||||
void set_screen_raw_params_data_east(machine_config &config);
|
||||
|
@ -157,30 +157,29 @@ void dec8_state::allocate_buffered_spriteram16()
|
||||
/******************************************************************************/
|
||||
|
||||
|
||||
void dec8_state::srdarwin_draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect, int pri )
|
||||
void dec8_state::srdarwin_draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect, bitmap_ind8 &primap)
|
||||
{
|
||||
uint8_t *buffered_spriteram = m_spriteram->buffer();
|
||||
int offs;
|
||||
|
||||
/* Sprites */
|
||||
for (offs = 0; offs < 0x200; offs += 4)
|
||||
for (int offs = 0x200 - 4; offs >= 0; offs -= 4)
|
||||
{
|
||||
int multi, fx, sx, sy, sy2, code, color;
|
||||
u32 pri_mask = 0;
|
||||
int sy2;
|
||||
|
||||
color = (buffered_spriteram[offs + 1] & 0x03) + ((buffered_spriteram[offs + 1] & 0x08) >> 1);
|
||||
if (pri == 0 && color != 0) continue;
|
||||
if (pri == 1 && color == 0) continue;
|
||||
const u32 color = (buffered_spriteram[offs + 1] & 0x03) + ((buffered_spriteram[offs + 1] & 0x08) >> 1);
|
||||
if (color == 0) pri_mask |= GFX_PMASK_2;
|
||||
|
||||
code = buffered_spriteram[offs + 3] + ((buffered_spriteram[offs + 1] & 0xe0) << 3);
|
||||
const u32 code = buffered_spriteram[offs + 3] + ((buffered_spriteram[offs + 1] & 0xe0) << 3);
|
||||
if (!code) continue;
|
||||
|
||||
sy = buffered_spriteram[offs];
|
||||
int sy = buffered_spriteram[offs];
|
||||
if (sy == 0xf8) continue;
|
||||
|
||||
sx = (241 - buffered_spriteram[offs + 2]);
|
||||
int sx = (241 - buffered_spriteram[offs + 2]);
|
||||
|
||||
fx = buffered_spriteram[offs + 1] & 0x04;
|
||||
multi = buffered_spriteram[offs + 1] & 0x10;
|
||||
int fx = buffered_spriteram[offs + 1] & 0x04;
|
||||
const bool multi = buffered_spriteram[offs + 1] & 0x10;
|
||||
|
||||
if (flip_screen())
|
||||
{
|
||||
@ -191,17 +190,17 @@ void dec8_state::srdarwin_draw_sprites( bitmap_ind16 &bitmap, const rectangle &
|
||||
}
|
||||
else sy2 = sy + 16;
|
||||
|
||||
m_gfxdecode->gfx(1)->transpen(bitmap,cliprect,
|
||||
code,
|
||||
m_gfxdecode->gfx(1)->prio_transpen(bitmap,cliprect,
|
||||
code,
|
||||
color,
|
||||
fx,flip_screen(),
|
||||
sx,sy,0);
|
||||
sx,sy,primap,pri_mask,0);
|
||||
if (multi)
|
||||
m_gfxdecode->gfx(1)->transpen(bitmap,cliprect,
|
||||
m_gfxdecode->gfx(1)->prio_transpen(bitmap,cliprect,
|
||||
code+1,
|
||||
color,
|
||||
fx,flip_screen(),
|
||||
sx,sy2,0);
|
||||
sx,sy2,primap,pri_mask,0);
|
||||
}
|
||||
}
|
||||
|
||||
@ -412,12 +411,12 @@ VIDEO_START_MEMBER(dec8_state,shackled)
|
||||
|
||||
uint32_t dec8_state::screen_update_srdarwin(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||
{
|
||||
screen.priority().fill(0, cliprect);
|
||||
m_bg_tilemap->set_scrollx(0, (m_scroll2[0] << 8) + m_scroll2[1]);
|
||||
|
||||
m_bg_tilemap->draw(screen, bitmap, cliprect, TILEMAP_DRAW_LAYER1, 0);
|
||||
srdarwin_draw_sprites(bitmap, cliprect, 0);
|
||||
m_bg_tilemap->draw(screen, bitmap, cliprect, TILEMAP_DRAW_LAYER0, 0);
|
||||
srdarwin_draw_sprites(bitmap, cliprect, 1);
|
||||
m_bg_tilemap->draw(screen, bitmap, cliprect, TILEMAP_DRAW_LAYER1, 1);
|
||||
m_bg_tilemap->draw(screen, bitmap, cliprect, TILEMAP_DRAW_LAYER0, 2);
|
||||
srdarwin_draw_sprites(bitmap, cliprect, screen.priority());
|
||||
m_fix_tilemap->draw(screen, bitmap, cliprect, 0, 0);
|
||||
return 0;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user