Moved around allocation pointers to own function, and register video pointers/functions to save state (nw)

This commit is contained in:
angelosa 2016-07-03 16:05:47 +02:00
parent e298801bb7
commit 5eebcb3fb9
2 changed files with 29 additions and 27 deletions

View File

@ -93,6 +93,7 @@ public:
void draw_sprites(screen_device &screen, bitmap_ind16 &bitmap,const rectangle &cliprect);
void descramble_legionnaire_gfx(UINT8* src);
void common_video_start();
void common_video_allocate_ptr();
required_device<cpu_device> m_maincpu;
required_device<cpu_device> m_audiocpu;
optional_device<seibu_sound_device> m_seibu_sound;

View File

@ -215,21 +215,36 @@ TILE_GET_INFO_MEMBER(legionna_state::get_text_tile_info)
SET_TILE_INFO_MEMBER(0,tile,color,0);
}
void legionna_state::common_video_start()
void legionna_state::common_video_allocate_ptr()
{
m_back_data = make_unique_clear<UINT16[]>(0x800/2);
m_fore_data = make_unique_clear<UINT16[]>(0x800/2);
m_mid_data = make_unique_clear<UINT16[]>(0x800/2);
m_textram = make_unique_clear<UINT16[]>(0x1000/2);
m_background_layer = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(legionna_state::get_back_tile_info),this),TILEMAP_SCAN_ROWS,16,16,32,32);
m_foreground_layer = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(legionna_state::get_fore_tile_info),this),TILEMAP_SCAN_ROWS,16,16,32,32);
m_midground_layer = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(legionna_state::get_mid_tile_info),this), TILEMAP_SCAN_ROWS,16,16,32,32);
m_text_layer = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(legionna_state::get_text_tile_info),this),TILEMAP_SCAN_ROWS, 8,8,64,32);
m_scrollram16 = std::make_unique<UINT16[]>(0x60/2);
m_sprite_xoffs = 0;
m_sprite_yoffs = 0;
save_pointer(NAME(m_back_data.get()), 0x800/2);
save_pointer(NAME(m_fore_data.get()), 0x800/2);
save_pointer(NAME(m_mid_data.get()), 0x800/2);
save_pointer(NAME(m_textram.get()), 0x1000/2);
save_pointer(NAME(m_scrollram16.get()), 0x60/2);
save_item(NAME(m_back_gfx_bank));
save_item(NAME(m_mid_gfx_bank));
save_item(NAME(m_fore_gfx_bank));
save_item(NAME(m_layer_disable));
}
void legionna_state::common_video_start()
{
common_video_allocate_ptr();
m_background_layer = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(legionna_state::get_back_tile_info),this),TILEMAP_SCAN_ROWS,16,16,32,32);
m_midground_layer = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(legionna_state::get_mid_tile_info),this), TILEMAP_SCAN_ROWS,16,16,32,32);
m_foreground_layer = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(legionna_state::get_fore_tile_info),this),TILEMAP_SCAN_ROWS,16,16,32,32);
m_text_layer = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(legionna_state::get_text_tile_info),this),TILEMAP_SCAN_ROWS, 8,8,64,32);
m_has_extended_banking = 0;
m_has_extended_priority = 0;
@ -277,20 +292,13 @@ VIDEO_START_MEMBER(legionna_state,godzilla)
VIDEO_START_MEMBER(legionna_state,denjinmk)
{
m_back_data = make_unique_clear<UINT16[]>(0x800/2);
m_fore_data = make_unique_clear<UINT16[]>(0x800/2);
m_mid_data = make_unique_clear<UINT16[]>(0x800/2);
m_textram = make_unique_clear<UINT16[]>(0x1000/2);
common_video_allocate_ptr();
m_background_layer = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(legionna_state::get_back_tile_info),this),TILEMAP_SCAN_ROWS,16,16,32,32);
m_foreground_layer = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(legionna_state::get_fore_tile_info_denji),this),TILEMAP_SCAN_ROWS,16,16,32,32);
m_midground_layer = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(legionna_state::get_mid_tile_info_denji),this), TILEMAP_SCAN_ROWS,16,16,32,32);
m_foreground_layer = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(legionna_state::get_fore_tile_info_denji),this),TILEMAP_SCAN_ROWS,16,16,32,32);
m_text_layer = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(legionna_state::get_text_tile_info),this),TILEMAP_SCAN_ROWS, 8,8,64,32);
m_scrollram16 = std::make_unique<UINT16[]>(0x60/2);
m_sprite_xoffs = 0;
m_sprite_yoffs = 0;
m_has_extended_banking = 1;
m_has_extended_priority = 0;
@ -299,7 +307,7 @@ VIDEO_START_MEMBER(legionna_state,denjinmk)
m_sprite_pri_mask[2] = 0xfffe; // door at the end of sewers part in level 1
m_sprite_pri_mask[3] = 0x0000; // briefing guy in pre-stage and portraits before a boss fight
// m_background_layer->set_transparent_pen(15);
m_background_layer->set_transparent_pen(15);
m_midground_layer->set_transparent_pen(15);
m_foreground_layer->set_transparent_pen(15);
m_text_layer->set_transparent_pen(7);//?
@ -307,20 +315,13 @@ VIDEO_START_MEMBER(legionna_state,denjinmk)
VIDEO_START_MEMBER(legionna_state,cupsoc)
{
m_back_data = make_unique_clear<UINT16[]>(0x800/2);
m_fore_data = make_unique_clear<UINT16[]>(0x800/2);
m_mid_data = make_unique_clear<UINT16[]>(0x800/2);
m_textram = make_unique_clear<UINT16[]>(0x1000/2);
common_video_allocate_ptr();
m_background_layer = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(legionna_state::get_back_tile_info),this),TILEMAP_SCAN_ROWS,16,16,32,32);
m_foreground_layer = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(legionna_state::get_fore_tile_info),this),TILEMAP_SCAN_ROWS,16,16,32,32);
m_midground_layer = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(legionna_state::get_mid_tile_info_cupsoc),this), TILEMAP_SCAN_ROWS,16,16,32,32);
m_foreground_layer = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(legionna_state::get_fore_tile_info),this),TILEMAP_SCAN_ROWS,16,16,32,32);
m_text_layer = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(legionna_state::get_text_tile_info),this),TILEMAP_SCAN_ROWS, 8,8,64,32);
m_scrollram16 = std::make_unique<UINT16[]>(0x60/2);
m_sprite_xoffs = 0;
m_sprite_yoffs = 0;
m_has_extended_banking = 0;
m_has_extended_priority = 1;