UINT32 wrally_state::screen_update_wrally(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { /* set scroll registers */ if (!flip_screen()) { m_pant[0]->set_scrolly(0, m_vregs[0]); m_pant[0]->set_scrollx(0, m_vregs[1]+4); m_pant[1]->set_scrolly(0, m_vregs[2]); m_pant[1]->set_scrollx(0, m_vregs[3]); } else { m_pant[0]->set_scrolly(0, 248 - m_vregs[0]); m_pant[0]->set_scrollx(0, 1024 - m_vregs[1] - 4); m_pant[1]->set_scrolly(0, 248 - m_vregs[2]); m_pant[1]->set_scrollx(0, 1024 - m_vregs[3]); } /* draw tilemaps + sprites */ m_pant[1]->draw(bitmap, cliprect, TILEMAP_DRAW_OPAQUE,0); m_pant[0]->draw(bitmap, cliprect, TILEMAP_DRAW_CATEGORY(0) | TILEMAP_DRAW_LAYER0,0); m_pant[0]->draw(bitmap, cliprect, TILEMAP_DRAW_CATEGORY(0) | TILEMAP_DRAW_LAYER1,0); m_pant[1]->draw(bitmap, cliprect, TILEMAP_DRAW_CATEGORY(1),0); m_pant[0]->draw(bitmap, cliprect, TILEMAP_DRAW_CATEGORY(1) | TILEMAP_DRAW_LAYER0,0); draw_sprites(bitmap,cliprect,0); m_pant[0]->draw(bitmap, cliprect, TILEMAP_DRAW_CATEGORY(1) | TILEMAP_DRAW_LAYER1,0); draw_sprites(bitmap,cliprect,1); return 0; }
static SCREEN_UPDATE(kingdrby) { kingdrby_state *state = screen->machine().driver_data<kingdrby_state>(); const rectangle &visarea = screen->visible_area(); rectangle clip; tilemap_set_scrollx( state->m_sc0_tilemap,0, state->m_vram[0x342]); tilemap_set_scrolly( state->m_sc0_tilemap,0, state->m_vram[0x341]); tilemap_set_scrollx( state->m_sc1_tilemap,0, state->m_vram[0x342]); tilemap_set_scrolly( state->m_sc1_tilemap,0, state->m_vram[0x341]); tilemap_set_scrolly( state->m_sc0w_tilemap,0, 32); /* maybe it needs two window tilemaps? (one at the top, the other at the bottom)*/ clip.min_x = visarea.min_x; clip.max_x = 256; clip.min_y = 192; clip.max_y = visarea.max_y; /*TILEMAP_DRAW_CATEGORY + TILEMAP_DRAW_OPAQUE doesn't suit well?*/ tilemap_draw(bitmap,cliprect,state->m_sc0_tilemap,0,0); draw_sprites(screen->machine(),bitmap,cliprect); tilemap_draw(bitmap,cliprect,state->m_sc1_tilemap,TILEMAP_DRAW_CATEGORY(1),0); tilemap_draw(bitmap,&clip,state->m_sc0w_tilemap,0,0); return 0; }
UINT32 kingdrby_state::screen_update_kingdrby(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { const rectangle &visarea = screen.visible_area(); rectangle clip; m_sc0_tilemap->set_scrollx(0, m_vram[0x342]); m_sc0_tilemap->set_scrolly(0, m_vram[0x341]); m_sc1_tilemap->set_scrollx(0, m_vram[0x342]); m_sc1_tilemap->set_scrolly(0, m_vram[0x341]); m_sc0w_tilemap->set_scrolly(0, 32); /* maybe it needs two window tilemaps? (one at the top, the other at the bottom)*/ clip.set(visarea.min_x, 256, 192, visarea.max_y); /*TILEMAP_DRAW_CATEGORY + TILEMAP_DRAW_OPAQUE doesn't suit well?*/ m_sc0_tilemap->draw(bitmap, cliprect, 0,0); draw_sprites(machine(),bitmap,cliprect); m_sc1_tilemap->draw(bitmap, cliprect, TILEMAP_DRAW_CATEGORY(1),0); m_sc0w_tilemap->draw(bitmap, clip, 0,0); return 0; }
static SCREEN_UPDATE_IND16(kingdrby) { kingdrby_state *state = screen.machine().driver_data<kingdrby_state>(); const rectangle &visarea = screen.visible_area(); rectangle clip; state->m_sc0_tilemap->set_scrollx(0, state->m_vram[0x342]); state->m_sc0_tilemap->set_scrolly(0, state->m_vram[0x341]); state->m_sc1_tilemap->set_scrollx(0, state->m_vram[0x342]); state->m_sc1_tilemap->set_scrolly(0, state->m_vram[0x341]); state->m_sc0w_tilemap->set_scrolly(0, 32); /* maybe it needs two window tilemaps? (one at the top, the other at the bottom)*/ clip.set(visarea.min_x, 256, 192, visarea.max_y); /*TILEMAP_DRAW_CATEGORY + TILEMAP_DRAW_OPAQUE doesn't suit well?*/ state->m_sc0_tilemap->draw(bitmap, cliprect, 0,0); draw_sprites(screen.machine(),bitmap,cliprect); state->m_sc1_tilemap->draw(bitmap, cliprect, TILEMAP_DRAW_CATEGORY(1),0); state->m_sc0w_tilemap->draw(bitmap, clip, 0,0); return 0; }