summaryrefslogtreecommitdiffstatshomepage
path: root/src
diff options
context:
space:
mode:
author Aaron Giles <aaron@aarongiles.com>2008-04-03 05:23:11 +0000
committer Aaron Giles <aaron@aarongiles.com>2008-04-03 05:23:11 +0000
commit39d36956d2344d2da1e625c9dd25a921c33b52ea (patch)
treef4e258d4560d7abab2ed5eefd2f3558a27db1213 /src
parente621d87cfeea3071ab58886f1356906cd8be70f1 (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.c2
-rw-r--r--src/mame/video/aerofgt.c61
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;
- }
}
}