diff options
author | 2008-04-03 05:23:11 +0000 | |
---|---|---|
committer | 2008-04-03 05:23:11 +0000 | |
commit | 39d36956d2344d2da1e625c9dd25a921c33b52ea (patch) | |
tree | f4e258d4560d7abab2ed5eefd2f3558a27db1213 /src | |
parent | e621d87cfeea3071ab58886f1356906cd8be70f1 (diff) |
From: roberto zandona
Subject: some fix for aerfboot (bootleg of aerofgt)
this fix:
1) spriteram3 (previous value was too high and in the "city" level some build disappear
2) sprite gfx bank (previously some sprite appear right and some sprite was wrong)
3) the zoom is a litlle bit better
4) i have removed multisprite support; in the bootleg aren't present
the remaining problem is "not draw some sprite"; maybe there's a mark in some place
in the code i add, in a comment //, a way to avoid the draw of the sprite (searching a 0000 0000 0000 0000 sprite); this way works quite good but not perfectly (some time too many sprite are in the screen); maybe there's a value indicating the #number of sprite to draw (from the end to spriteram3 to start)
--
From: roberto zandona
Subject: addendum (aerfboot)
this fix perfectly the sprite zoom
Diffstat (limited to 'src')
-rw-r--r-- | src/mame/drivers/aerofgt.c | 2 | ||||
-rw-r--r-- | src/mame/video/aerofgt.c | 61 |
2 files changed, 23 insertions, 40 deletions
diff --git a/src/mame/drivers/aerofgt.c b/src/mame/drivers/aerofgt.c index 7bf6cf50293..50da02dacd7 100644 --- a/src/mame/drivers/aerofgt.c +++ b/src/mame/drivers/aerofgt.c @@ -349,7 +349,7 @@ static ADDRESS_MAP_START( aerfboot_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x0fe400, 0x0fe401) AM_WRITENOP AM_RANGE(0x0fe402, 0x0fe403) AM_WRITENOP AM_RANGE(0x0ff000, 0x0fffff) AM_RAM AM_BASE(&aerofgt_rasterram) /* used only for the scroll registers */ - AM_RANGE(0x10b800, 0x10bfff) AM_RAM AM_BASE(&aerofgt_spriteram3) AM_SIZE(&aerofgt_spriteram3_size) + AM_RANGE(0x108000, 0x10bfff) AM_RAM AM_BASE(&aerofgt_spriteram3) AM_SIZE(&aerofgt_spriteram3_size) ADDRESS_MAP_END static ADDRESS_MAP_START( wbbc97_map, ADDRESS_SPACE_PROGRAM, 16 ) diff --git a/src/mame/video/aerofgt.c b/src/mame/video/aerofgt.c index 01e066de2b9..007685e6106 100644 --- a/src/mame/video/aerofgt.c +++ b/src/mame/video/aerofgt.c @@ -479,15 +479,15 @@ static void pspikesb_draw_sprites(running_machine *machine, bitmap_t *bitmap,con static void aerfboot_draw_sprites(running_machine *machine, bitmap_t *bitmap,const rectangle *cliprect) { int attr_start;//,base,first; - +// int notdraw = 0; // base = chip * 0x0200; // first = 4 * aerofgt_spriteram3[0x1fe + base]; - for (attr_start = aerofgt_spriteram3_size/2 - 4;attr_start >= 0;attr_start -= 4) + for (attr_start = aerofgt_spriteram3_size/2 - 4 /* - 16 */;attr_start >= 0;attr_start -= 4) { int code; - int ox,oy,x,y,xsize,ysize,zoomx,zoomy,flipx,flipy,color,pri; + int ox,oy,sx,sy,zoomx,zoomy,flipx,flipy,color,pri; // some other drivers still use this wrong table, they have to be upgraded // int zoomtable[16] = { 0,7,14,20,25,30,34,38,42,46,49,52,54,57,59,61 }; @@ -497,52 +497,35 @@ static void aerfboot_draw_sprites(running_machine *machine, bitmap_t *bitmap,con flipy = aerofgt_spriteram3[attr_start + 2] & 0x8000; color = aerofgt_spriteram3[attr_start + 2] & 0x000f; -// xsize = (aerofgt_spriteram3[attr_start + 2] & 0x0700) >> 8; - xsize = (aerofgt_spriteram3[attr_start + 1] & 0x0e00) >> 9; zoomx = (aerofgt_spriteram3[attr_start + 1] & 0xf000) >> 12; -// ysize = (aerofgt_spriteram3[attr_start + 2] & 0x7000) >> 12; - ysize = (aerofgt_spriteram3[attr_start + 0] & 0x0e00) >> 9; zoomy = (aerofgt_spriteram3[attr_start + 0] & 0xf000) >> 12; - pri = aerofgt_spriteram3[attr_start + 2] & 0x0010; - code = aerofgt_spriteram3[attr_start + 3] & 0x3fff; +// code = aerofgt_spriteram3[attr_start + 3] & 0x3fff; + code = aerofgt_spriteram3[attr_start + 3] & 0x1fff; +// if ((!(aerofgt_spriteram3[attr_start + 0])) & (!(aerofgt_spriteram3[attr_start + 1])) & +// (!(aerofgt_spriteram3[attr_start + 2])) & (!(aerofgt_spriteram3[attr_start + 3]))) notdraw = 1; -// aerofgt has this adjustment, but doing it here would break turbo force title screen -// ox += (xsize*zoomx+2)/4; -// oy += (ysize*zoomy+2)/4; +// if (notdraw) continue; - zoomx = 32 - zoomx; - zoomy = 32 - zoomy; + if (!(aerofgt_spriteram3[attr_start + 2] & 0x0040)) code |= 0x2000; - for (y = 0;y <= ysize;y++) - { - int sx,sy; + zoomx = 32 + zoomx; + zoomy = 32 + zoomy; - if (flipy) sy = ((oy + zoomy * (ysize - y)/2 + 16) & 0x1ff) - 16; - else sy = ((oy + zoomy * y / 2 + 16) & 0x1ff) - 16; - - for (x = 0;x <= xsize;x++) - { - if (flipx) sx = ((ox + zoomx * (xsize - x) / 2 + 16) & 0x1ff) - 16; - else sx = ((ox + zoomx * x / 2 + 16) & 0x1ff) - 16; + sy = ((oy + 16) & 0x1ff) - 16; + + sx = ((ox + 16) & 0x1ff) - 16; - pdrawgfxzoom(bitmap,machine->gfx[sprite_gfx + (code >= 0x1000 ? 0 : 1)], - code, - color, - flipx,flipy, - sx,sy, - cliprect,TRANSPARENCY_PEN,15, - zoomx << 11,zoomy << 11, - pri ? 0 : 0x2); - code++; - } + pdrawgfxzoom(bitmap,machine->gfx[sprite_gfx + (code >= 0x1000 ? 0 : 1)], + code, + color, + flipx,flipy, + sx,sy, + cliprect,TRANSPARENCY_PEN,15, + zoomx << 11,zoomy << 11, + pri ? 0 : 0x2); -// if (xsize == 2) code += 1; -// if (xsize == 4) code += 3; -// if (xsize == 5) code += 2; -// if (xsize == 6) code += 1; - } } } |