mirror of
https://github.com/holub/mame
synced 2025-04-26 10:13:37 +03:00
00895: arabianm and clones: During level 6, there is a rain effect, but the water is coloured green.
01917: gunlock, rayforce, rayfocj: The color of Battleships is wrong in the 1st stage. 01925: gunlock, rayforce, rayforcj: The explosive color of the demo is different.
This commit is contained in:
parent
990adaa4c4
commit
369948f58c
@ -348,7 +348,7 @@ static const gfx_layout spriteram_layout =
|
||||
{
|
||||
16,16,
|
||||
RGN_FRAC(1,2),
|
||||
6,
|
||||
6, /* Palettes have 4 bpp indexes despite up to 6 bpp data */
|
||||
{ RGN_FRAC(1,2)+0, RGN_FRAC(1,2)+1, 0, 1, 2, 3 },
|
||||
{
|
||||
4, 0, 12, 8,
|
||||
@ -364,7 +364,7 @@ static const gfx_layout tile_layout =
|
||||
{
|
||||
16,16,
|
||||
RGN_FRAC(1,2),
|
||||
6,
|
||||
6, /* Palettes have 4 bpp indexes despite up to 6 bpp data */
|
||||
{ RGN_FRAC(1,2)+2, RGN_FRAC(1,2)+3, 0, 1, 2, 3 },
|
||||
{
|
||||
4, 0, 16+4, 16+0,
|
||||
@ -378,10 +378,10 @@ static const gfx_layout tile_layout =
|
||||
};
|
||||
|
||||
static GFXDECODE_START( taito_f3 )
|
||||
GFXDECODE_ENTRY( 0, 0x000000, charlayout, 0, 64 ) /* Dynamically modified */
|
||||
GFXDECODE_ENTRY( REGION_GFX2, 0x000000, tile_layout, 0, 512 ) /* Tiles area */
|
||||
GFXDECODE_ENTRY( REGION_GFX1, 0x000000, spriteram_layout, 4096, 256 ) /* Sprites area */
|
||||
GFXDECODE_ENTRY( 0, 0x000000, pivotlayout, 0, 64 ) /* Dynamically modified */
|
||||
GFXDECODE_ENTRY( 0, 0x000000, charlayout, 0x0000, 0x400>>4 ) /* Dynamically modified */
|
||||
GFXDECODE_ENTRY( REGION_GFX2, 0x000000, tile_layout, 0x0000, 0x2000>>4 ) /* Tiles area */
|
||||
GFXDECODE_ENTRY( REGION_GFX1, 0x000000, spriteram_layout, 0x1000, 0x1000>>4 ) /* Sprites area */
|
||||
GFXDECODE_ENTRY( 0, 0x000000, pivotlayout, 0x0000, 0x400>>4 ) /* Dynamically modified */
|
||||
GFXDECODE_END
|
||||
|
||||
/******************************************************************************/
|
||||
@ -462,7 +462,7 @@ static MACHINE_DRIVER_START( f3 )
|
||||
MDRV_SCREEN_VISIBLE_AREA(46, 40*8-1 + 46, 24, 24+232-1)
|
||||
|
||||
MDRV_GFXDECODE(taito_f3)
|
||||
MDRV_PALETTE_LENGTH(8192)
|
||||
MDRV_PALETTE_LENGTH(0x2000)
|
||||
|
||||
MDRV_VIDEO_START(f3)
|
||||
MDRV_VIDEO_EOF(f3)
|
||||
@ -3251,13 +3251,13 @@ ROM_END
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
static void tile_decode(running_machine *machine, int uses_5bpp_tiles)
|
||||
static void tile_decode(running_machine *machine)
|
||||
{
|
||||
UINT8 lsb,msb;
|
||||
UINT32 offset,i;
|
||||
UINT8 *gfx = memory_region(machine, REGION_GFX2);
|
||||
int size=memory_region_length(machine, REGION_GFX2);
|
||||
int half=size/2,data;
|
||||
int data;
|
||||
|
||||
/* Setup ROM formats:
|
||||
|
||||
@ -3266,10 +3266,12 @@ static void tile_decode(running_machine *machine, int uses_5bpp_tiles)
|
||||
are tied low on the game board if unused. This is backed up by the fact the palette
|
||||
indices are always related to 4 bpp data, even in 6 bpp games.
|
||||
|
||||
Most (all?) games with 5bpp tiles have the sixth bit set. Also, in Arabian Magic
|
||||
sprites 1200-120f contain 6bpp data which is probably bogus.
|
||||
VIDEO_START( f3 ) clears the fifth and sixth bit of the decoded graphics according
|
||||
to the bit depth specified in f3_config_table.
|
||||
|
||||
*/
|
||||
if (uses_5bpp_tiles)
|
||||
for (i=half; i<size; i+=2)
|
||||
gfx[i+1]=0;
|
||||
|
||||
offset = size/2;
|
||||
for (i = size/2+size/4; i<size; i+=2)
|
||||
@ -3368,54 +3370,54 @@ F3_IRQ_SPEEDUP_2_R(kirameki, 0x12fc6, 0x0414/4, 0x0000ff00 )
|
||||
static DRIVER_INIT( ringrage )
|
||||
{
|
||||
f3_game=RINGRAGE;
|
||||
tile_decode(machine, 0);
|
||||
tile_decode(machine);
|
||||
}
|
||||
|
||||
static DRIVER_INIT( arabianm )
|
||||
{
|
||||
memory_install_read32_handler(machine, 0, ADDRESS_SPACE_PROGRAM, 0x408124, 0x408127, 0, 0, irq_speedup_r_arabianm );
|
||||
f3_game=ARABIANM;
|
||||
tile_decode(machine, 1);
|
||||
tile_decode(machine);
|
||||
}
|
||||
|
||||
static DRIVER_INIT( ridingf )
|
||||
{
|
||||
f3_game=RIDINGF;
|
||||
tile_decode(machine, 1);
|
||||
tile_decode(machine);
|
||||
}
|
||||
|
||||
static DRIVER_INIT( gseeker )
|
||||
{
|
||||
memory_install_read32_handler(machine, 0, ADDRESS_SPACE_PROGRAM, 0x40ad94, 0x40ad97, 0, 0, irq_speedup_r_gseeker );
|
||||
f3_game=GSEEKER;
|
||||
tile_decode(machine, 0);
|
||||
tile_decode(machine);
|
||||
}
|
||||
|
||||
static DRIVER_INIT( gunlock )
|
||||
{
|
||||
memory_install_read32_handler(machine, 0, ADDRESS_SPACE_PROGRAM, 0x400004, 0x400007, 0, 0, irq_speedup_r_gunlock );
|
||||
f3_game=GUNLOCK;
|
||||
tile_decode(machine, 1);
|
||||
tile_decode(machine);
|
||||
}
|
||||
|
||||
static DRIVER_INIT( elvactr )
|
||||
{
|
||||
memory_install_read32_handler(machine, 0, ADDRESS_SPACE_PROGRAM, 0x4007a0, 0x4007a3, 0, 0, irq_speedup_r_eaction2 );
|
||||
f3_game=EACTION2;
|
||||
tile_decode(machine, 1);
|
||||
tile_decode(machine);
|
||||
}
|
||||
|
||||
static DRIVER_INIT( cupfinal )
|
||||
{
|
||||
memory_install_read32_handler(machine, 0, ADDRESS_SPACE_PROGRAM, 0x408114, 0x408117, 0, 0, irq_speedup_r_cupfinal );
|
||||
f3_game=SCFINALS;
|
||||
tile_decode(machine, 1);
|
||||
tile_decode(machine);
|
||||
}
|
||||
|
||||
static DRIVER_INIT( trstaroj )
|
||||
{
|
||||
f3_game=TRSTAR;
|
||||
tile_decode(machine, 1);
|
||||
tile_decode(machine);
|
||||
}
|
||||
|
||||
static DRIVER_INIT( scfinals )
|
||||
@ -3430,69 +3432,69 @@ static DRIVER_INIT( scfinals )
|
||||
|
||||
memory_install_read32_handler(machine, 0, ADDRESS_SPACE_PROGRAM, 0x408114, 0x408117, 0, 0, irq_speedup_r_scfinals );
|
||||
f3_game=SCFINALS;
|
||||
tile_decode(machine, 1);
|
||||
tile_decode(machine);
|
||||
}
|
||||
|
||||
static DRIVER_INIT( lightbr )
|
||||
{
|
||||
memory_install_read32_handler(machine, 0, ADDRESS_SPACE_PROGRAM, 0x400130, 0x400133, 0, 0, irq_speedup_r_lightbr );
|
||||
f3_game=LIGHTBR;
|
||||
tile_decode(machine, 1);
|
||||
tile_decode(machine);
|
||||
}
|
||||
|
||||
static DRIVER_INIT( kaiserkn )
|
||||
{
|
||||
memory_install_read32_handler(machine, 0, ADDRESS_SPACE_PROGRAM, 0x408110, 0x408113, 0, 0, irq_speedup_r_kaiserkn );
|
||||
f3_game=KAISERKN;
|
||||
tile_decode(machine, 1);
|
||||
tile_decode(machine);
|
||||
}
|
||||
|
||||
static DRIVER_INIT( dariusg )
|
||||
{
|
||||
memory_install_read32_handler(machine, 0, ADDRESS_SPACE_PROGRAM, 0x406ba8, 0x406bab, 0, 0, irq_speedup_r_dariusg );
|
||||
f3_game=DARIUSG;
|
||||
tile_decode(machine, 0);
|
||||
tile_decode(machine);
|
||||
}
|
||||
|
||||
static DRIVER_INIT( spcinvdj )
|
||||
{
|
||||
memory_install_read32_handler(machine, 0, ADDRESS_SPACE_PROGRAM, 0x400230, 0x400233, 0, 0, irq_speedup_r_spcinvdj );
|
||||
f3_game=SPCINVDX;
|
||||
tile_decode(machine, 0);
|
||||
tile_decode(machine);
|
||||
}
|
||||
|
||||
static DRIVER_INIT( qtheater )
|
||||
{
|
||||
f3_game=QTHEATER;
|
||||
tile_decode(machine, 0);
|
||||
tile_decode(machine);
|
||||
}
|
||||
|
||||
static DRIVER_INIT( spcinv95 )
|
||||
{
|
||||
memory_install_read32_handler(machine, 0, ADDRESS_SPACE_PROGRAM, 0x408114, 0x408117, 0, 0, irq_speedup_r_spcinv95 );
|
||||
f3_game=SPCINV95;
|
||||
tile_decode(machine, 1);
|
||||
tile_decode(machine);
|
||||
}
|
||||
|
||||
static DRIVER_INIT( gekirido )
|
||||
{
|
||||
memory_install_read32_handler(machine, 0, ADDRESS_SPACE_PROGRAM, 0x406bb0, 0x406bb3, 0, 0, irq_speedup_r_gekirido );
|
||||
f3_game=GEKIRIDO;
|
||||
tile_decode(machine, 1);
|
||||
tile_decode(machine);
|
||||
}
|
||||
|
||||
static DRIVER_INIT( ktiger2 )
|
||||
{
|
||||
memory_install_read32_handler(machine, 0, ADDRESS_SPACE_PROGRAM, 0x400570, 0x400573, 0, 0, irq_speedup_r_ktiger2 );
|
||||
f3_game=KTIGER2;
|
||||
tile_decode(machine, 0);
|
||||
tile_decode(machine);
|
||||
}
|
||||
|
||||
static DRIVER_INIT( bubsymph )
|
||||
{
|
||||
memory_install_read32_handler(machine, 0, ADDRESS_SPACE_PROGRAM, 0x400134, 0x400137, 0, 0, irq_speedup_r_bubsymph );
|
||||
f3_game=BUBSYMPH;
|
||||
tile_decode(machine, 1);
|
||||
tile_decode(machine);
|
||||
}
|
||||
|
||||
|
||||
@ -3523,7 +3525,7 @@ static DRIVER_INIT( bubsympb )
|
||||
{
|
||||
memory_install_read32_handler(machine, 0, ADDRESS_SPACE_PROGRAM, 0x400134, 0x400137, 0, 0, irq_speedup_r_bubsymph );
|
||||
f3_game=BUBSYMPH;
|
||||
//tile_decode(machine, 1);
|
||||
//tile_decode(machine);
|
||||
|
||||
/* expand gfx rom */
|
||||
{
|
||||
@ -3553,28 +3555,28 @@ static DRIVER_INIT( bubblem )
|
||||
{
|
||||
memory_install_read32_handler(machine, 0, ADDRESS_SPACE_PROGRAM, 0x400134, 0x400137, 0, 0, irq_speedup_r_bubblem );
|
||||
f3_game=BUBBLEM;
|
||||
tile_decode(machine, 1);
|
||||
tile_decode(machine);
|
||||
}
|
||||
|
||||
static DRIVER_INIT( cleopatr )
|
||||
{
|
||||
memory_install_read32_handler(machine, 0, ADDRESS_SPACE_PROGRAM, 0x408114, 0x408117, 0, 0, irq_speedup_r_cleopatr );
|
||||
f3_game=CLEOPATR;
|
||||
tile_decode(machine, 0);
|
||||
tile_decode(machine);
|
||||
}
|
||||
|
||||
static DRIVER_INIT( popnpop )
|
||||
{
|
||||
memory_install_read32_handler(machine, 0, ADDRESS_SPACE_PROGRAM, 0x401cf8, 0x401cfb, 0, 0, irq_speedup_r_popnpop );
|
||||
f3_game=POPNPOP;
|
||||
tile_decode(machine, 0);
|
||||
tile_decode(machine);
|
||||
}
|
||||
|
||||
static DRIVER_INIT( landmakr )
|
||||
{
|
||||
memory_install_read32_handler(machine, 0, ADDRESS_SPACE_PROGRAM, 0x400824, 0x400827, 0, 0, irq_speedup_r_landmakr );
|
||||
f3_game=LANDMAKR;
|
||||
tile_decode(machine, 0);
|
||||
tile_decode(machine);
|
||||
}
|
||||
|
||||
static DRIVER_INIT( landmkrp )
|
||||
@ -3590,94 +3592,94 @@ static DRIVER_INIT( landmkrp )
|
||||
|
||||
memory_install_read32_handler(machine, 0, ADDRESS_SPACE_PROGRAM, 0x400824, 0x400827, 0, 0, irq_speedup_r_landmakr );
|
||||
f3_game=LANDMAKR;
|
||||
tile_decode(machine, 0);
|
||||
tile_decode(machine);
|
||||
}
|
||||
|
||||
static DRIVER_INIT( pbobble3 )
|
||||
{
|
||||
memory_install_read32_handler(machine, 0, ADDRESS_SPACE_PROGRAM, 0x405af4, 0x405af7, 0, 0, irq_speedup_r_pbobble3 );
|
||||
f3_game=PBOBBLE3;
|
||||
tile_decode(machine, 0);
|
||||
tile_decode(machine);
|
||||
}
|
||||
|
||||
static DRIVER_INIT( pbobble4 )
|
||||
{
|
||||
memory_install_read32_handler(machine, 0, ADDRESS_SPACE_PROGRAM, 0x4058f4, 0x4058f7, 0, 0, irq_speedup_r_pbobble4 );
|
||||
f3_game=PBOBBLE4;
|
||||
tile_decode(machine, 0);
|
||||
tile_decode(machine);
|
||||
}
|
||||
|
||||
static DRIVER_INIT( quizhuhu )
|
||||
{
|
||||
f3_game=QUIZHUHU;
|
||||
tile_decode(machine, 0);
|
||||
tile_decode(machine);
|
||||
}
|
||||
|
||||
static DRIVER_INIT( pbobble2 )
|
||||
{
|
||||
memory_install_read32_handler(machine, 0, ADDRESS_SPACE_PROGRAM, 0x404a50, 0x404a53, 0, 0, irq_speedup_r_pbobble2 );
|
||||
f3_game=PBOBBLE2;
|
||||
tile_decode(machine, 0);
|
||||
tile_decode(machine);
|
||||
}
|
||||
|
||||
static DRIVER_INIT( pbobbl2x )
|
||||
{
|
||||
memory_install_read32_handler(machine, 0, ADDRESS_SPACE_PROGRAM, 0x405c58, 0x405c5b, 0, 0, irq_speedup_r_pbobbl2x );
|
||||
f3_game=PBOBBLE2;
|
||||
tile_decode(machine, 0);
|
||||
tile_decode(machine);
|
||||
}
|
||||
|
||||
static DRIVER_INIT( hthero95 )
|
||||
{
|
||||
memory_install_read32_handler(machine, 0, ADDRESS_SPACE_PROGRAM, 0x408114, 0x408117, 0, 0, irq_speedup_r_pwrgoal );
|
||||
f3_game=HTHERO95;
|
||||
tile_decode(machine, 0);
|
||||
tile_decode(machine);
|
||||
}
|
||||
|
||||
static DRIVER_INIT( kirameki )
|
||||
{
|
||||
memory_install_read32_handler(machine, 0, ADDRESS_SPACE_PROGRAM, 0x400414, 0x400417, 0, 0, irq_speedup_r_kirameki );
|
||||
f3_game=KIRAMEKI;
|
||||
tile_decode(machine, 0);
|
||||
tile_decode(machine);
|
||||
}
|
||||
|
||||
static DRIVER_INIT( puchicar )
|
||||
{
|
||||
memory_install_read32_handler(machine, 0, ADDRESS_SPACE_PROGRAM, 0x4024d8, 0x4024db, 0, 0, irq_speedup_r_puchicar );
|
||||
f3_game=PUCHICAR;
|
||||
tile_decode(machine, 0);
|
||||
tile_decode(machine);
|
||||
}
|
||||
|
||||
static DRIVER_INIT( twinqix )
|
||||
{
|
||||
memory_install_read32_handler(machine, 0, ADDRESS_SPACE_PROGRAM, 0x400134, 0x400137, 0, 0, irq_speedup_r_twinqix );
|
||||
f3_game=TWINQIX;
|
||||
tile_decode(machine, 0);
|
||||
tile_decode(machine);
|
||||
}
|
||||
|
||||
static DRIVER_INIT( arkretrn )
|
||||
{
|
||||
memory_install_read32_handler(machine, 0, ADDRESS_SPACE_PROGRAM, 0x402154, 0x402157, 0, 0, irq_speedup_r_arkretrn );
|
||||
f3_game=ARKRETRN;
|
||||
tile_decode(machine, 0);
|
||||
tile_decode(machine);
|
||||
}
|
||||
|
||||
static DRIVER_INIT( intcup94 )
|
||||
{
|
||||
f3_game=SCFINALS;
|
||||
tile_decode(machine, 1);
|
||||
tile_decode(machine);
|
||||
}
|
||||
|
||||
static DRIVER_INIT( recalh )
|
||||
{
|
||||
f3_game=RECALH;
|
||||
tile_decode(machine, 0);
|
||||
tile_decode(machine);
|
||||
}
|
||||
|
||||
static DRIVER_INIT( commandw )
|
||||
{
|
||||
f3_game=COMMANDW;
|
||||
tile_decode(machine, 1);
|
||||
tile_decode(machine);
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
|
@ -236,45 +236,47 @@ struct F3config
|
||||
int name;
|
||||
int extend;
|
||||
int sprite_lag;
|
||||
int sprite_bpp;
|
||||
int tile_bpp;
|
||||
};
|
||||
|
||||
static const struct F3config *f3_game_config;
|
||||
|
||||
static const struct F3config f3_config_table[] =
|
||||
{
|
||||
/* Name Extend Sprite Lag */
|
||||
{ RINGRAGE, 0, 2 },
|
||||
{ ARABIANM, 0, 2 },
|
||||
{ RIDINGF, 1, 1 },
|
||||
{ GSEEKER, 0, 1 },
|
||||
{ TRSTAR, 1, 0 },
|
||||
{ GUNLOCK, 1, 2 },
|
||||
{ TWINQIX, 1, 1 },
|
||||
{ SCFINALS, 0, 1 },
|
||||
{ LIGHTBR, 1, 2 },
|
||||
{ KAISERKN, 0, 2 },
|
||||
{ DARIUSG, 0, 2 },
|
||||
{ BUBSYMPH, 1, 1 },
|
||||
{ SPCINVDX, 1, 1 },
|
||||
{ QTHEATER, 1, 1 },
|
||||
{ HTHERO95, 0, 1 },
|
||||
{ SPCINV95, 0, 1 },
|
||||
{ EACTION2, 1, 2 },
|
||||
{ QUIZHUHU, 1, 1 },
|
||||
{ PBOBBLE2, 0, 1 },
|
||||
{ GEKIRIDO, 0, 1 },
|
||||
{ KTIGER2, 0, 0 },
|
||||
{ BUBBLEM, 1, 1 },
|
||||
{ CLEOPATR, 0, 1 },
|
||||
{ PBOBBLE3, 0, 1 },
|
||||
{ ARKRETRN, 1, 1 },
|
||||
{ KIRAMEKI, 0, 1 },
|
||||
{ PUCHICAR, 1, 1 },
|
||||
{ PBOBBLE4, 0, 1 },
|
||||
{ POPNPOP, 1, 1 },
|
||||
{ LANDMAKR, 1, 1 },
|
||||
{ RECALH, 1, 1 },
|
||||
{ COMMANDW, 1, 1 },
|
||||
/* Name Extend Lag Bpp */
|
||||
{ RINGRAGE, 0, 2, 5, 6 },
|
||||
{ ARABIANM, 0, 2, 5, 5 }, /* sprites 1200-120F contain 6bpp pixels but this seems to be a data error */
|
||||
{ RIDINGF, 1, 1, 4, 4 },
|
||||
{ GSEEKER, 0, 1, 4, 4 },
|
||||
{ COMMANDW, 1, 1, 5, 5 },
|
||||
{ SCFINALS, 0, 1, 5, 5 },
|
||||
{ TRSTAR, 1, 0, 5, 5 },
|
||||
{ GUNLOCK, 1, 2, 5, 5 },
|
||||
{ LIGHTBR, 1, 2, 5, 5 },
|
||||
{ KAISERKN, 0, 2, 5, 5 },
|
||||
{ DARIUSG, 0, 2, 5, 5 },
|
||||
{ BUBSYMPH, 1, 1, 5, 5 },
|
||||
{ SPCINVDX, 1, 1, 4, 4 },
|
||||
{ HTHERO95, 0, 1, 6, 6 },
|
||||
{ QTHEATER, 1, 1, 4, 4 },
|
||||
{ EACTION2, 1, 2, 5, 5 },
|
||||
{ RECALH, 1, 1, 4, 4 },
|
||||
{ SPCINV95, 0, 1, 5, 5 },
|
||||
{ TWINQIX, 1, 1, 4, 6 },
|
||||
{ QUIZHUHU, 1, 1, 6, 6 },
|
||||
{ PBOBBLE2, 0, 1, 4, 6 },
|
||||
{ GEKIRIDO, 0, 1, 5, 5 },
|
||||
{ KTIGER2, 0, 0, 4, 4 },
|
||||
{ BUBBLEM, 1, 1, 4, 5 },
|
||||
{ CLEOPATR, 0, 1, 4, 6 },
|
||||
{ PBOBBLE3, 0, 1, 4, 6 },
|
||||
{ ARKRETRN, 1, 1, 5, 6 },
|
||||
{ KIRAMEKI, 0, 1, 5, 6 },
|
||||
{ PUCHICAR, 1, 1, 5, 6 },
|
||||
{ PBOBBLE4, 0, 1, 4, 6 },
|
||||
{ POPNPOP, 1, 1, 6, 6 },
|
||||
{ LANDMAKR, 1, 1, 5, 6 },
|
||||
{0}
|
||||
};
|
||||
|
||||
@ -443,11 +445,16 @@ INLINE void get_tile_info(running_machine *machine, tile_data *tileinfo, int til
|
||||
{
|
||||
UINT32 tile=gfx_base[tile_index];
|
||||
UINT8 abtype=(tile>>(16+9))&0x1f;
|
||||
int color_mask;
|
||||
|
||||
// if tiles use more than 4bpp, the bottom bits of the color code must be masked out.
|
||||
// This fixes (at least) the rain in round 6 of Arabian Magic.
|
||||
color_mask = ~((1 << (f3_game_config->tile_bpp - 4)) - 1);
|
||||
|
||||
SET_TILE_INFO(
|
||||
1,
|
||||
tile&0xffff,
|
||||
(tile>>16)&0x1ff,
|
||||
(tile>>16) & 0x1ff & color_mask,
|
||||
TILE_FLIPYX( tile >> 30 ));
|
||||
tileinfo->category = abtype&1; /* alpha blending type */
|
||||
}
|
||||
@ -617,10 +624,14 @@ VIDEO_START( f3 )
|
||||
tilemap_set_transparent_pen(vram_layer,0);
|
||||
tilemap_set_transparent_pen(pixel_layer,0);
|
||||
|
||||
/* Palettes have 4 bpp indexes despite up to 6 bpp data */
|
||||
// Palettes have 4 bpp indexes despite up to 6 bpp data. The unused
|
||||
// top bits in the gfx data are cleared later.
|
||||
machine->gfx[1]->color_granularity=16;
|
||||
machine->gfx[2]->color_granularity=16;
|
||||
|
||||
assert(f3_game_config->tile_bpp >= 4 && f3_game_config->tile_bpp <= 6);
|
||||
assert(f3_game_config->sprite_bpp >= 4 && f3_game_config->sprite_bpp <= 6);
|
||||
|
||||
flipscreen = 0;
|
||||
memset(spriteram32_buffered,0,spriteram_size);
|
||||
memset(spriteram32,0,spriteram_size);
|
||||
@ -642,6 +653,7 @@ VIDEO_START( f3 )
|
||||
{
|
||||
const gfx_element *sprite_gfx = machine->gfx[2];
|
||||
int c;
|
||||
int bpp_mask = (1 << f3_game_config->sprite_bpp) - 1;
|
||||
|
||||
for (c = 0;c < sprite_gfx->total_elements;c++)
|
||||
{
|
||||
@ -652,6 +664,9 @@ VIDEO_START( f3 )
|
||||
{
|
||||
for (x = 0;x < sprite_gfx->width;x++)
|
||||
{
|
||||
// clear unused top bits from gfx data
|
||||
dp[x] &= bpp_mask;
|
||||
|
||||
if(!dp[x]) chk_trans_or_opa|=2;
|
||||
else chk_trans_or_opa|=1;
|
||||
}
|
||||
@ -666,6 +681,7 @@ VIDEO_START( f3 )
|
||||
{
|
||||
const gfx_element *pf_gfx = machine->gfx[1];
|
||||
int c;
|
||||
int bpp_mask = (1 << f3_game_config->tile_bpp) - 1;
|
||||
|
||||
for (c = 0;c < pf_gfx->total_elements;c++)
|
||||
{
|
||||
@ -676,6 +692,9 @@ VIDEO_START( f3 )
|
||||
{
|
||||
for (x = 0;x < pf_gfx->width;x++)
|
||||
{
|
||||
// clear unused top bits from gfx data
|
||||
dp[x] &= bpp_mask;
|
||||
|
||||
if(!dp[x]) chk_trans_or_opa|=2;
|
||||
else chk_trans_or_opa|=1;
|
||||
}
|
||||
@ -3157,9 +3176,15 @@ static void draw_sprites(running_machine *machine, bitmap_t *bitmap, const recta
|
||||
{
|
||||
const struct tempsprite *sprite_ptr;
|
||||
const gfx_element *sprite_gfx = machine->gfx[2];
|
||||
int color_mask;
|
||||
|
||||
sprite_ptr = sprite_end;
|
||||
sprite_pri_usage=0;
|
||||
|
||||
// if sprites use more than 4bpp, the bottom bits of the color code must be masked out.
|
||||
// This fixes (at least) stage 1 battle ships and attract mode explosions in Ray Force.
|
||||
color_mask = ~((1 << (f3_game_config->sprite_bpp - 4)) - 1);
|
||||
|
||||
while (sprite_ptr != spritelist)
|
||||
{
|
||||
int pri;
|
||||
@ -3172,7 +3197,7 @@ static void draw_sprites(running_machine *machine, bitmap_t *bitmap, const recta
|
||||
f3_drawgfx(machine,
|
||||
bitmap,sprite_gfx,
|
||||
sprite_ptr->code,
|
||||
sprite_ptr->color,
|
||||
sprite_ptr->color & color_mask,
|
||||
sprite_ptr->flipx,sprite_ptr->flipy,
|
||||
sprite_ptr->x,sprite_ptr->y,
|
||||
cliprect,
|
||||
@ -3181,7 +3206,7 @@ static void draw_sprites(running_machine *machine, bitmap_t *bitmap, const recta
|
||||
f3_drawgfxzoom(machine,
|
||||
bitmap,sprite_gfx,
|
||||
sprite_ptr->code,
|
||||
sprite_ptr->color,
|
||||
sprite_ptr->color & color_mask,
|
||||
sprite_ptr->flipx,sprite_ptr->flipy,
|
||||
sprite_ptr->x,sprite_ptr->y,
|
||||
cliprect,
|
||||
|
Loading…
Reference in New Issue
Block a user