UINT32 rampart_state::screen_update_rampart(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { atarimo_rect_list rectlist; bitmap_ind16 *mobitmap; int x, y, r; /* draw the playfield */ rampart_bitmap_render(bitmap, cliprect); /* draw and merge the MO */ mobitmap = atarimo_render(0, cliprect, &rectlist); for (r = 0; r < rectlist.numrects; r++, rectlist.rect++) for (y = rectlist.rect->min_y; y <= rectlist.rect->max_y; y++) { UINT16 *mo = &mobitmap->pix16(y); UINT16 *pf = &bitmap.pix16(y); for (x = rectlist.rect->min_x; x <= rectlist.rect->max_x; x++) if (mo[x]) { /* the PCB supports more complex priorities, but the PAL is not stuffed, so we get the default */ pf[x] = mo[x]; /* erase behind ourselves */ mo[x] = 0; } } return 0; }
uint32_t rampart_state::screen_update_rampart(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { // start drawing m_mob->draw_async(cliprect); /* draw the playfield */ rampart_bitmap_render(bitmap, cliprect); // draw and merge the MO bitmap_ind16 &mobitmap = m_mob->bitmap(); for (const sparse_dirty_rect *rect = m_mob->first_dirty_rect(cliprect); rect != nullptr; rect = rect->next()) for (int y = rect->min_y; y <= rect->max_y; y++) { uint16_t *mo = &mobitmap.pix16(y); uint16_t *pf = &bitmap.pix16(y); for (int x = rect->min_x; x <= rect->max_x; x++) if (mo[x] != 0xffff) { /* the PCB supports more complex priorities, but the PAL is not stuffed, so we get the default */ pf[x] = mo[x]; } } return 0; }