mirror of
https://github.com/holub/mame
synced 2025-04-21 07:52:35 +03:00
tatsumi.cpp: improved road colors in Cycle Warriors [Angelo Salese]
This commit is contained in:
parent
f1465f9539
commit
0fe30e8cf2
@ -635,8 +635,8 @@ static INPUT_PORTS_START( cyclwarr )
|
||||
PORT_DIPNAME( 0x04, 0x04, "Ticket Dispenser" ) PORT_DIPLOCATION("SW2:3")
|
||||
PORT_DIPSETTING( 0x04, "10000" )
|
||||
PORT_DIPSETTING( 0x00, "15000" )
|
||||
PORT_DIPNAME( 0x18, 0x00, "Machine Type" ) PORT_DIPLOCATION("SW2:4,5")
|
||||
PORT_DIPSETTING( 0x00, "2 Players" )
|
||||
PORT_DIPNAME( 0x18, 0x08, "Machine Type" ) PORT_DIPLOCATION("SW2:4,5")
|
||||
// PORT_DIPSETTING( 0x00, "2 Players" ) // same as 4 players but text layout is 2p (invalid setting)
|
||||
PORT_DIPSETTING( 0x08, "2 Players" )
|
||||
PORT_DIPSETTING( 0x10, "3 Players" )
|
||||
PORT_DIPSETTING( 0x18, "4 Players" )
|
||||
|
@ -194,6 +194,7 @@ public:
|
||||
|
||||
void init_cyclwarr();
|
||||
template<int Bank> TILE_GET_INFO_MEMBER(get_tile_info_bigfight);
|
||||
template<int Bank> TILE_GET_INFO_MEMBER(get_tile_info_cyclwarr_road);
|
||||
DECLARE_VIDEO_START(cyclwarr);
|
||||
DECLARE_VIDEO_START(bigfight);
|
||||
uint32_t screen_update_cyclwarr(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
|
||||
@ -222,7 +223,8 @@ private:
|
||||
uint16_t m_bigfight_a40000[2];
|
||||
uint16_t m_bigfight_bank;
|
||||
uint16_t m_bigfight_last_bank;
|
||||
uint16_t m_cyclwarr_color_bank;
|
||||
|
||||
void tile_expand();
|
||||
void draw_bg(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect, tilemap_t *src, const uint16_t* scrollx, const uint16_t* scrolly, int xscroll_offset, int yscroll_offset, bool rowscroll_enable);
|
||||
void draw_bg(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect, tilemap_t *src, const uint16_t* scrollx, const uint16_t* scrolly, int xscroll_offset, int yscroll_offset, bool rowscroll_enable, bool is_road);
|
||||
};
|
||||
|
@ -87,6 +87,17 @@ TILE_GET_INFO_MEMBER(cyclwarr_state::get_tile_info_bigfight)
|
||||
tileinfo.mask_data = &m_mask[((tile&0x3ff)|(bank<<10))<<3];
|
||||
}
|
||||
|
||||
template<int Bank>
|
||||
TILE_GET_INFO_MEMBER(cyclwarr_state::get_tile_info_cyclwarr_road)
|
||||
{
|
||||
int tile=m_cyclwarr_videoram[Bank][(tile_index+0x400)&0x7fff];
|
||||
int bank = (m_bigfight_a40000[0] >> (((tile&0xc00)>>10)*4))&0xf;
|
||||
SET_TILE_INFO_MEMBER(1,(tile&0x3ff)|(bank<<10),((tile>>12)&0xf) | m_cyclwarr_color_bank,0);
|
||||
// TODO: enables transparent pen on sideways
|
||||
tileinfo.mask_data = &m_mask[((tile&0x3ff)|(bank<<10))<<3];
|
||||
}
|
||||
|
||||
|
||||
/********************************************************************/
|
||||
|
||||
void cyclwarr_state::tile_expand()
|
||||
@ -124,7 +135,7 @@ void cyclwarr_state::tile_expand()
|
||||
c0base += gx0->rowbytes();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
gx0->set_raw_layout(srcdata, gx0->width(), gx0->height(), gx0->elements(), 8 * gx0->width(), 8 * gx0->width() * gx0->height());
|
||||
gx0->set_granularity(256);
|
||||
}
|
||||
@ -156,11 +167,10 @@ VIDEO_START_MEMBER(cyclwarr_state,cyclwarr)
|
||||
{
|
||||
tile_expand();
|
||||
m_layer[0] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(cyclwarr_state::get_tile_info_bigfight<0>),this),TILEMAP_SCAN_ROWS,8,8,64,512);
|
||||
//m_layer[1] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(cyclwarr_state::get_tile_info_bigfight<0>),this),TILEMAP_SCAN_ROWS,8,8,64,512);
|
||||
m_layer[1] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(cyclwarr_state::get_tile_info_bigfight<0>),this),TILEMAP_SCAN_ROWS,8,8,128,256);
|
||||
m_layer[1] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(cyclwarr_state::get_tile_info_cyclwarr_road<0>),this),TILEMAP_SCAN_ROWS,8,8,128,256);
|
||||
m_layer[2] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(cyclwarr_state::get_tile_info_bigfight<1>),this),TILEMAP_SCAN_ROWS,8,8,64,512);
|
||||
m_layer[3] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(cyclwarr_state::get_tile_info_bigfight<1>),this),TILEMAP_SCAN_ROWS,8,8,64,512);
|
||||
|
||||
|
||||
m_shadow_pen_array = make_unique_clear<uint8_t[]>(8192);
|
||||
}
|
||||
|
||||
@ -900,7 +910,7 @@ void tatsumi_state::update_cluts(int fake_palette_offset, int object_base, int l
|
||||
/**********************************************************************/
|
||||
|
||||
// TODO: rowscroll_enable might be selectable somehow
|
||||
void cyclwarr_state::draw_bg(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect, tilemap_t *src, const uint16_t* scrollx, const uint16_t* scrolly, int xscroll_offset, int yscroll_offset, bool rowscroll_enable)
|
||||
void cyclwarr_state::draw_bg(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect, tilemap_t *src, const uint16_t* scrollx, const uint16_t* scrolly, int xscroll_offset, int yscroll_offset, bool rowscroll_enable, bool is_road)
|
||||
{
|
||||
rectangle clip;
|
||||
clip.min_x = cliprect.min_x;
|
||||
@ -908,8 +918,17 @@ void cyclwarr_state::draw_bg(screen_device &screen, bitmap_rgb32 &bitmap, const
|
||||
for (int y=cliprect.min_y; y<=cliprect.max_y; y++)
|
||||
{
|
||||
clip.min_y = clip.max_y = y;
|
||||
int src_x = scrollx[rowscroll_enable ? y : 0] + xscroll_offset;
|
||||
int src_y = scrolly[rowscroll_enable ? y : 0] + yscroll_offset;
|
||||
int y_base = rowscroll_enable ? y : 0;
|
||||
int src_x = scrollx[y_base] + xscroll_offset;
|
||||
int src_y = scrolly[y_base] + yscroll_offset;
|
||||
// special handling for cycle warriors road: it reads in scrolly table bits 15-13 an
|
||||
// additional tile color bank and per scanline.
|
||||
if(is_road == true && scrolly[y_base] & 0x8000)
|
||||
{
|
||||
m_cyclwarr_color_bank = (scrolly[y_base] >> 13) & 3;
|
||||
src->mark_all_dirty();
|
||||
}
|
||||
|
||||
src->set_scrollx(0,src_x);
|
||||
src->set_scrolly(0,src_y);
|
||||
src->draw(screen, bitmap, clip, 0, 0);
|
||||
@ -1029,14 +1048,14 @@ uint32_t cyclwarr_state::screen_update_cyclwarr(screen_device &screen, bitmap_rg
|
||||
}
|
||||
|
||||
bitmap.fill(m_palette->pen(0), cliprect);
|
||||
|
||||
draw_bg(screen, bitmap, cliprect, m_layer[3], &m_cyclwarr_videoram[1][0x000], &m_cyclwarr_videoram[1][0x100], 8, -0x80,false);
|
||||
draw_bg(screen, bitmap, cliprect, m_layer[2], &m_cyclwarr_videoram[1][0x200], &m_cyclwarr_videoram[1][0x300], 8, -0x80,false);
|
||||
draw_bg(screen, bitmap, cliprect, m_layer[1], &m_cyclwarr_videoram[0][0x000], &m_cyclwarr_videoram[0][0x100], 8, -0x40,true);
|
||||
|
||||
draw_bg(screen, bitmap, cliprect, m_layer[3], &m_cyclwarr_videoram[1][0x000], &m_cyclwarr_videoram[1][0x100], 8, -0x80,false, false);
|
||||
draw_bg(screen, bitmap, cliprect, m_layer[2], &m_cyclwarr_videoram[1][0x200], &m_cyclwarr_videoram[1][0x300], 8, -0x80,false, false);
|
||||
draw_bg(screen, bitmap, cliprect, m_layer[1], &m_cyclwarr_videoram[0][0x000], &m_cyclwarr_videoram[0][0x100], 8, -0x40,true, true);
|
||||
update_cluts(8192, 4096, 8192);
|
||||
draw_sprites(bitmap,cliprect,0,(m_sprite_control_ram[0xe0]&0x1000) ? 0x1000 : 0);
|
||||
draw_bg(screen, bitmap, cliprect, m_layer[0], &m_cyclwarr_videoram[0][0x200], &m_cyclwarr_videoram[0][0x300], 0x10, -0x80,false);
|
||||
|
||||
draw_bg(screen, bitmap, cliprect, m_layer[0], &m_cyclwarr_videoram[0][0x200], &m_cyclwarr_videoram[0][0x300], 0x10, -0x80,false, false);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -1053,12 +1072,12 @@ uint32_t cyclwarr_state::screen_update_bigfight(screen_device &screen, bitmap_rg
|
||||
}
|
||||
|
||||
bitmap.fill(m_palette->pen(0), cliprect);
|
||||
draw_bg(screen, bitmap, cliprect, m_layer[3], &m_cyclwarr_videoram[1][0x000], &m_cyclwarr_videoram[1][0x100], 8, -0x40,true);
|
||||
draw_bg(screen, bitmap, cliprect, m_layer[2], &m_cyclwarr_videoram[1][0x200], &m_cyclwarr_videoram[1][0x300], 8, -0x40,true);
|
||||
draw_bg(screen, bitmap, cliprect, m_layer[1], &m_cyclwarr_videoram[0][0x000], &m_cyclwarr_videoram[0][0x100], 8, -0x40,true);
|
||||
draw_bg(screen, bitmap, cliprect, m_layer[3], &m_cyclwarr_videoram[1][0x000], &m_cyclwarr_videoram[1][0x100], 8, -0x40,true, false);
|
||||
draw_bg(screen, bitmap, cliprect, m_layer[2], &m_cyclwarr_videoram[1][0x200], &m_cyclwarr_videoram[1][0x300], 8, -0x40,true, false);
|
||||
draw_bg(screen, bitmap, cliprect, m_layer[1], &m_cyclwarr_videoram[0][0x000], &m_cyclwarr_videoram[0][0x100], 8, -0x40,true, false);
|
||||
update_cluts(8192, 4096, 8192);
|
||||
draw_sprites(bitmap,cliprect,0,(m_sprite_control_ram[0xe0]&0x1000) ? 0x1000 : 0);
|
||||
draw_bg(screen, bitmap, cliprect, m_layer[0], &m_cyclwarr_videoram[0][0x200], &m_cyclwarr_videoram[0][0x300], 0x10, -0x40,true);
|
||||
draw_bg(screen, bitmap, cliprect, m_layer[0], &m_cyclwarr_videoram[0][0x200], &m_cyclwarr_videoram[0][0x300], 0x10, -0x40,true, false);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user