summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Roberto Zandona <robertoz@mamedev.org>2009-04-12 12:09:52 +0000
committer Roberto Zandona <robertoz@mamedev.org>2009-04-12 12:09:52 +0000
commitaa1b8f74fd784448523d84b8214c4094fe3221d1 (patch)
treedf2cbf726aac00e4f9863773c999e59543e1b48e
parent646fbe47046dc9204bafe1962d4e07bcd58ab543 (diff)
munch mobile: implemented priorities in munch mobile
-rw-r--r--src/mame/video/munchmo.c71
1 files changed, 50 insertions, 21 deletions
diff --git a/src/mame/video/munchmo.c b/src/mame/video/munchmo.c
index 09886111318..8eea3ab2933 100644
--- a/src/mame/video/munchmo.c
+++ b/src/mame/video/munchmo.c
@@ -122,31 +122,60 @@ static void draw_background(running_machine *machine, bitmap_t *bitmap, const re
static void draw_sprites(running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect)
{
int scroll = mnchmobl_vreg[6];
- int flags = mnchmobl_vreg[7]; /* XB?????? */
- int xadjust = - 128-16 - ((flags&0x80)?1:0);
- int bank = (flags&0x40)?1:0;
- const gfx_element *gfx = machine->gfx[2+bank];
- int color_base = mnchmobl_palette_bank*4+3;
- int i;
- for( i=0; i<0x200; i++ )
+ int flags = mnchmobl_vreg[7]; /* XB?????? */
+ int xadjust = - 128 - 16 - ((flags & 0x80) ? 1 : 0);
+ int bank = (flags & 0x40) ? 1 : 0;
+ const gfx_element *gfx = machine->gfx[2 + bank];
+ int color_base = mnchmobl_palette_bank * 4 + 3;
+ int i, j;
+ int firstsprite = mnchmobl_vreg[4] & 0x3f;
+ for( i = firstsprite; i < 0x40; i++ )
{
- int tile_number = mnchmobl_sprite_tile[i]; /* ETTTTTTT */
- int attributes = mnchmobl_sprite_attr[i]; /* XYYYYYCC */
- int sx = mnchmobl_sprite_xpos[i]; /* XXXXXXX? */
- int sy = (i/0x40)*0x20; /* Y YY------ */
- sy += (attributes>>2)&0x1f;
- if( tile_number != 0xff && (attributes&0x80) )
+ for( j = 0; j < 8; j++ )
{
- sx = (sx>>1) | (tile_number&0x80);
- sx = 2*((-32-scroll - sx)&0xff)+xadjust;
- drawgfx( bitmap, gfx,
- 0x7f - (tile_number&0x7f),
- color_base-(attributes&0x03),
- 0,0, /* no flip */
- sx,sy,
- cliprect, TRANSPARENCY_PEN, 7 );
+ int ii = (j << 6) | i;
+ int tile_number = mnchmobl_sprite_tile[ii]; /* ETTTTTTT */
+ int attributes = mnchmobl_sprite_attr[ii]; /* XYYYYYCC */
+ int sx = mnchmobl_sprite_xpos[ii]; /* XXXXXXX? */
+ int sy = (ii >> 6) << 5; /* Y YY------ */
+ sy += (attributes >> 2) & 0x1f;
+ if( tile_number != 0xff && (attributes & 0x80) )
+ {
+ sx = (sx >> 1) | (tile_number & 0x80);
+ sx = 2 * ((- 32 - scroll - sx) & 0xff) + xadjust;
+ drawgfx( bitmap, gfx,
+ 0x7f - (tile_number & 0x7f),
+ color_base - (attributes & 0x03),
+ 0,0, /* no flip */
+ sx,sy,
+ cliprect, TRANSPARENCY_PEN, 7 );
+ }
}
}
+ if (firstsprite != 0)
+ for( i = 0; i < firstsprite; i++ )
+ {
+ for( j = 0; j < 8; j++ )
+ {
+ int ii = (j << 6) | i;
+ int tile_number = mnchmobl_sprite_tile[ii]; /* ETTTTTTT */
+ int attributes = mnchmobl_sprite_attr[ii]; /* XYYYYYCC */
+ int sx = mnchmobl_sprite_xpos[ii]; /* XXXXXXX? */
+ int sy = (ii >> 6) << 5; /* Y YY------ */
+ sy += (attributes >> 2) & 0x1f;
+ if( tile_number != 0xff && (attributes & 0x80) )
+ {
+ sx = (sx >> 1) | (tile_number & 0x80);
+ sx = 2 * ((- 32 - scroll - sx) & 0xff) + xadjust;
+ drawgfx( bitmap, gfx,
+ 0x7f - (tile_number & 0x7f),
+ color_base - (attributes & 0x03),
+ 0,0, /* no flip */
+ sx,sy,
+ cliprect, TRANSPARENCY_PEN, 7 );
+ }
+ }
+ }
}
VIDEO_UPDATE( mnchmobl )