@@ -102,7 +102,7 @@ void segas24_tile_device::device_start()
102102}
103103
104104void segas24_tile_device::draw_rect (screen_device &screen, bitmap_ind16 &bm, bitmap_ind8 &tm, bitmap_ind16 &dm, const uint16_t *mask,
105- uint16_t tpri, uint8_t lpri, int win, int sx, int sy, int xx1, int yy1, int xx2, int yy2)
105+ uint16_t tpri, uint8_t lpri, int flags, int win, int sx, int sy, int xx1, int yy1, int xx2, int yy2)
106106{
107107 const uint16_t *source = &bm.pix (sy, sx);
108108 const uint8_t *trans = &tm.pix (sy, sx);
@@ -141,7 +141,7 @@ void segas24_tile_device::draw_rect(screen_device &screen, bitmap_ind16 &bm, bit
141141 if (!m) {
142142 // 1- 128 pixels from this layer
143143 for (int x=0 ; x<128 ; x++) {
144- if (*srct++ == tpri) {
144+ if (*srct++ == tpri || flags & TILEMAP_DRAW_OPAQUE ) {
145145 *dst = *src;
146146 *pr |= lpri;
147147 }
@@ -163,7 +163,7 @@ void segas24_tile_device::draw_rect(screen_device &screen, bitmap_ind16 &bm, bit
163163 if (!(m & 0x8000 )) {
164164 int xx;
165165 for (xx=0 ; xx<8 ; xx++)
166- if (srct[xx] == tpri) {
166+ if (srct[xx] == tpri || flags & TILEMAP_DRAW_OPAQUE ) {
167167 dst[xx] = src[xx];
168168 pr[xx] |= lpri;
169169 }
@@ -182,7 +182,7 @@ void segas24_tile_device::draw_rect(screen_device &screen, bitmap_ind16 &bm, bit
182182 if (!m) {
183183 // 1- 128 pixels from this layer
184184 for (int x = cur_x; x<llx1; x++) {
185- if (*srct++ == tpri) {
185+ if (*srct++ == tpri || flags & TILEMAP_DRAW_OPAQUE ) {
186186 *dst = *src;
187187 *pr |= lpri;
188188 }
@@ -201,7 +201,7 @@ void segas24_tile_device::draw_rect(screen_device &screen, bitmap_ind16 &bm, bit
201201 } else {
202202 // 3- 128 pixels from both layers
203203 for (int x=cur_x; x<llx1; x++) {
204- if (*srct++ == tpri && !(m & (0x8000 >> (x >> 3 )))) {
204+ if (( *srct++ == tpri || flags & TILEMAP_DRAW_OPAQUE) && !(m & (0x8000 >> (x >> 3 )))) {
205205 *dst = *src;
206206 *pr |= lpri;
207207 }
@@ -229,7 +229,7 @@ void segas24_tile_device::draw_rect(screen_device &screen, bitmap_ind16 &bm, bit
229229// priority_bitmap
230230
231231void segas24_tile_device::draw_rect (screen_device &screen, bitmap_ind16 &bm, bitmap_ind8 &tm, bitmap_rgb32 &dm, const uint16_t *mask,
232- uint16_t tpri, uint8_t lpri, int win, int sx, int sy, int xx1, int yy1, int xx2, int yy2)
232+ uint16_t tpri, uint8_t lpri, int flags, int win, int sx, int sy, int xx1, int yy1, int xx2, int yy2)
233233{
234234 const uint16_t *source = &bm.pix (sy, sx);
235235 const uint8_t *trans = &tm.pix (sy, sx);
@@ -267,7 +267,7 @@ void segas24_tile_device::draw_rect(screen_device &screen, bitmap_ind16 &bm, bit
267267 if (!m) {
268268 // 1- 128 pixels from this layer
269269 for (int x=0 ; x<128 ; x++) {
270- if (*srct++ == tpri)
270+ if (*srct++ == tpri || flags & TILEMAP_DRAW_OPAQUE )
271271 *dst = pens[*src];
272272 src++;
273273 dst++;
@@ -284,7 +284,7 @@ void segas24_tile_device::draw_rect(screen_device &screen, bitmap_ind16 &bm, bit
284284 for (int x=0 ; x<128 ; x+=8 ) {
285285 if (!(m & 0x8000 )) {
286286 for (int xx=0 ; xx<8 ; xx++)
287- if (srct[xx] == tpri)
287+ if (srct[xx] == tpri || flags & TILEMAP_DRAW_OPAQUE )
288288 dst[xx] = pens[src[xx]];
289289 }
290290 src += 8 ;
@@ -300,7 +300,7 @@ void segas24_tile_device::draw_rect(screen_device &screen, bitmap_ind16 &bm, bit
300300 if (!m) {
301301 // 1- 128 pixels from this layer
302302 for (int x = cur_x; x<llx1; x++) {
303- if (*srct++ == tpri)
303+ if (*srct++ == tpri || flags & TILEMAP_DRAW_OPAQUE )
304304 *dst = pens[*src];
305305 src++;
306306 dst++;
@@ -316,7 +316,7 @@ void segas24_tile_device::draw_rect(screen_device &screen, bitmap_ind16 &bm, bit
316316 // 3- 128 pixels from both layers
317317 int x;
318318 for (x=cur_x; x<llx1; x++) {
319- if (*srct++ == tpri && !(m & (0x8000 >> (x >> 3 ))))
319+ if (( *srct++ == tpri || flags & TILEMAP_DRAW_OPAQUE) && !(m & (0x8000 >> (x >> 3 ))))
320320 *dst = pens[*src];
321321
322322 src++;
@@ -380,7 +380,7 @@ void segas24_tile_device::draw_common(screen_device &screen, BitmapClass &bitmap
380380
381381 h = hscr & 0x1ff ;
382382 tile_layer[l1]->set_scrollx (0 , -h);
383- tile_layer[l1]->draw (screen, bitmap, c, tpri, lpri);
383+ tile_layer[l1]->draw (screen, bitmap, c, tpri | flags , lpri);
384384 }
385385 break ;
386386 }
@@ -407,8 +407,8 @@ void segas24_tile_device::draw_common(screen_device &screen, BitmapClass &bitmap
407407
408408 c1.min_y = c1.max_y = c2.min_y = c2.max_y = y;
409409
410- tile_layer[l1]->draw (screen, bitmap, c1, tpri, lpri);
411- tile_layer[l1^1 ]->draw (screen, bitmap, c2, tpri, lpri);
410+ tile_layer[l1]->draw (screen, bitmap, c1, tpri | flags , lpri);
411+ tile_layer[l1^1 ]->draw (screen, bitmap, c2, tpri | flags , lpri);
412412 }
413413 break ;
414414 }
@@ -431,8 +431,8 @@ void segas24_tile_device::draw_common(screen_device &screen, BitmapClass &bitmap
431431 if (!((-vscr) & 0x200 ))
432432 layer ^= 1 ;
433433
434- tile_layer[layer]->draw (screen, bitmap, c1, tpri, lpri);
435- tile_layer[layer^1 ]->draw (screen, bitmap, c2, tpri, lpri);
434+ tile_layer[layer]->draw (screen, bitmap, c1, tpri | flags , lpri);
435+ tile_layer[layer^1 ]->draw (screen, bitmap, c2, tpri | flags , lpri);
436436 break ;
437437 }
438438 case 2 : case 3 : {
@@ -447,8 +447,8 @@ void segas24_tile_device::draw_common(screen_device &screen, BitmapClass &bitmap
447447 if (!((+hscr) & 0x200 ))
448448 layer ^= 1 ;
449449
450- tile_layer[layer]->draw (screen, bitmap, c1, tpri, lpri);
451- tile_layer[layer^1 ]->draw (screen, bitmap, c2, tpri, lpri);
450+ tile_layer[layer]->draw (screen, bitmap, c1, tpri | flags , lpri);
451+ tile_layer[layer^1 ]->draw (screen, bitmap, c2, tpri | flags , lpri);
452452 break ;
453453 }
454454 }
@@ -469,11 +469,11 @@ void segas24_tile_device::draw_common(screen_device &screen, BitmapClass &bitmap
469469 hscr = (-hscrtb[y]) & 0x1ff ;
470470 if (hscr + 496 <= 512 ) {
471471 // Horizontal split unnecessary
472- draw_rect (screen, bm, tm, bitmap, mask, tpri, lpri, win, hscr, vscr, 0 , y, 496 , y+1 );
472+ draw_rect (screen, bm, tm, bitmap, mask, tpri, lpri, flags, win, hscr, vscr, 0 , y, 496 , y+1 );
473473 } else {
474474 // Horizontal split necessary
475- draw_rect (screen, bm, tm, bitmap, mask, tpri, lpri, win, hscr, vscr, 0 , y, 512 -hscr, y+1 );
476- draw_rect (screen, bm, tm, bitmap, mask, tpri, lpri, win, 0 , vscr, 512 -hscr, y, 496 , y+1 );
475+ draw_rect (screen, bm, tm, bitmap, mask, tpri, lpri, flags, win, hscr, vscr, 0 , y, 512 -hscr, y+1 );
476+ draw_rect (screen, bm, tm, bitmap, mask, tpri, lpri, flags, win, 0 , vscr, 512 -hscr, y, 496 , y+1 );
477477 }
478478 vscr = (vscr + 1 ) & 0x1ff ;
479479 }
@@ -485,25 +485,25 @@ void segas24_tile_device::draw_common(screen_device &screen, BitmapClass &bitmap
485485 // Horizontal split unnecessary
486486 if (vscr + 384 <= 512 ) {
487487 // Vertical split unnecessary
488- draw_rect (screen, bm, tm, bitmap, mask, tpri, lpri, win, hscr, vscr, 0 , 0 , 496 , 384 );
488+ draw_rect (screen, bm, tm, bitmap, mask, tpri, lpri, flags, win, hscr, vscr, 0 , 0 , 496 , 384 );
489489 } else {
490490 // Vertical split necessary
491- draw_rect (screen, bm, tm, bitmap, mask, tpri, lpri, win, hscr, vscr, 0 , 0 , 496 , 512 -vscr);
492- draw_rect (screen, bm, tm, bitmap, mask, tpri, lpri, win, hscr, 0 , 0 , 512 -vscr, 496 , 384 );
491+ draw_rect (screen, bm, tm, bitmap, mask, tpri, lpri, flags, win, hscr, vscr, 0 , 0 , 496 , 512 -vscr);
492+ draw_rect (screen, bm, tm, bitmap, mask, tpri, lpri, flags, win, hscr, 0 , 0 , 512 -vscr, 496 , 384 );
493493
494494 }
495495 } else {
496496 // Horizontal split necessary
497497 if (vscr + 384 <= 512 ) {
498498 // Vertical split unnecessary
499- draw_rect (screen, bm, tm, bitmap, mask, tpri, lpri, win, hscr, vscr, 0 , 0 , 512 -hscr, 384 );
500- draw_rect (screen, bm, tm, bitmap, mask, tpri, lpri, win, 0 , vscr, 512 -hscr, 0 , 496 , 384 );
499+ draw_rect (screen, bm, tm, bitmap, mask, tpri, lpri, flags, win, hscr, vscr, 0 , 0 , 512 -hscr, 384 );
500+ draw_rect (screen, bm, tm, bitmap, mask, tpri, lpri, flags, win, 0 , vscr, 512 -hscr, 0 , 496 , 384 );
501501 } else {
502502 // Vertical split necessary
503- draw_rect (screen, bm, tm, bitmap, mask, tpri, lpri, win, hscr, vscr, 0 , 0 , 512 -hscr, 512 -vscr);
504- draw_rect (screen, bm, tm, bitmap, mask, tpri, lpri, win, 0 , vscr, 512 -hscr, 0 , 496 , 512 -vscr);
505- draw_rect (screen, bm, tm, bitmap, mask, tpri, lpri, win, hscr, 0 , 0 , 512 -vscr, 512 -hscr, 384 );
506- draw_rect (screen, bm, tm, bitmap, mask, tpri, lpri, win, 0 , 0 , 512 -hscr, 512 -vscr, 496 , 384 );
503+ draw_rect (screen, bm, tm, bitmap, mask, tpri, lpri, flags, win, hscr, vscr, 0 , 0 , 512 -hscr, 512 -vscr);
504+ draw_rect (screen, bm, tm, bitmap, mask, tpri, lpri, flags, win, 0 , vscr, 512 -hscr, 0 , 496 , 512 -vscr);
505+ draw_rect (screen, bm, tm, bitmap, mask, tpri, lpri, flags, win, hscr, 0 , 0 , 512 -vscr, 512 -hscr, 384 );
506+ draw_rect (screen, bm, tm, bitmap, mask, tpri, lpri, flags, win, 0 , 0 , 512 -hscr, 512 -vscr, 496 , 384 );
507507 }
508508 }
509509 }
0 commit comments