mirror of
https://github.com/holub/mame
synced 2025-04-24 01:11:11 +03:00
fix cocktail mode for marvins and vangrd2
00249: vangrd2: [possible] In cocktail mode, or when the flip screen dip is set, the score display is not flipped.
This commit is contained in:
parent
b2cbb55165
commit
26a76489a1
@ -60,6 +60,7 @@ extern WRITE8_HANDLER( marvins_spriteram_w );
|
||||
extern VIDEO_START( marvins );
|
||||
extern VIDEO_UPDATE( marvins );
|
||||
extern VIDEO_UPDATE( madcrash );
|
||||
extern VIDEO_UPDATE( vangrd2 );
|
||||
|
||||
extern WRITE8_HANDLER( marvins_palette_bank_w );
|
||||
|
||||
@ -592,7 +593,7 @@ static MACHINE_DRIVER_START( vangrd2 )
|
||||
MDRV_PALETTE_LENGTH((16+2)*16)
|
||||
|
||||
MDRV_VIDEO_START(marvins)
|
||||
MDRV_VIDEO_UPDATE(madcrash)
|
||||
MDRV_VIDEO_UPDATE(vangrd2)
|
||||
|
||||
/* sound hardware */
|
||||
MDRV_SPEAKER_STANDARD_MONO("mono")
|
||||
@ -625,6 +626,8 @@ static MACHINE_DRIVER_START( madcrash )
|
||||
/* video hardware */
|
||||
MDRV_SCREEN_MODIFY("main")
|
||||
MDRV_SCREEN_VISIBLE_AREA(16, 16+256-1, 0, 0+216-1)
|
||||
MDRV_VIDEO_START(marvins)
|
||||
MDRV_VIDEO_UPDATE(madcrash)
|
||||
MACHINE_DRIVER_END
|
||||
|
||||
|
||||
@ -775,6 +778,6 @@ static DRIVER_INIT( vangrd2 )
|
||||
}
|
||||
|
||||
|
||||
GAME( 1983, marvins, 0, marvins, marvins, marvins, ROT270, "SNK", "Marvin's Maze", GAME_NO_COCKTAIL )
|
||||
GAME( 1983, marvins, 0, marvins, marvins, marvins, ROT270, "SNK", "Marvin's Maze", 0 )
|
||||
GAME( 1984, madcrash, 0, madcrash, madcrash, madcrash, ROT0, "SNK", "Mad Crasher", GAME_IMPERFECT_GRAPHICS )
|
||||
GAME( 1984, vangrd2, 0, vangrd2, vangrd2, vangrd2, ROT270, "SNK", "Vanguard II", GAME_NO_COCKTAIL )
|
||||
GAME( 1984, vangrd2, 0, vangrd2, vangrd2, vangrd2, ROT270, "SNK", "Vanguard II", 0 )
|
||||
|
@ -238,30 +238,56 @@ static void draw_status(running_machine *machine, bitmap_t *bitmap, const rectan
|
||||
const UINT8 *base = videoram+0x400;
|
||||
const gfx_element *gfx = machine->gfx[0];
|
||||
int row;
|
||||
for( row=0; row<4; row++ )
|
||||
{
|
||||
int sy,sx = (row&1)*8;
|
||||
const UINT8 *source = base + (row&1)*32;
|
||||
if( row>1 )
|
||||
if (!flipscreen)
|
||||
for( row=0; row<4; row++ )
|
||||
{
|
||||
sx+=256+16;
|
||||
}
|
||||
else
|
||||
{
|
||||
source+=30*32;
|
||||
}
|
||||
int sy,sx = (row&1)*8;
|
||||
const UINT8 *source = base + (row&1)*32;
|
||||
if( row>1 )
|
||||
{
|
||||
sx+=256+16;
|
||||
}
|
||||
else
|
||||
{
|
||||
source+=30*32;
|
||||
}
|
||||
|
||||
for( sy=0; sy<256; sy+=8 )
|
||||
{
|
||||
int tile_number = *source++;
|
||||
drawgfx( bitmap, gfx,
|
||||
tile_number, tile_number>>5,
|
||||
0,0, /* no flip */
|
||||
sx,sy,
|
||||
cliprect,
|
||||
TRANSPARENCY_NONE, 0xf );
|
||||
for( sy=0; sy<256; sy+=8 )
|
||||
{
|
||||
int tile_number = *source++;
|
||||
drawgfx( bitmap, gfx,
|
||||
tile_number, tile_number>>5,
|
||||
0,0,
|
||||
sx,sy,
|
||||
cliprect,
|
||||
TRANSPARENCY_NONE, 0xf );
|
||||
}
|
||||
}
|
||||
else
|
||||
for( row=0; row<4; row++ )
|
||||
{
|
||||
int sy,sx = (row&1)*8;
|
||||
const UINT8 *source = base + 30*32 + 32 - (row&1)*32;
|
||||
if( row>1 )
|
||||
{
|
||||
sx+=256+16;
|
||||
}
|
||||
else
|
||||
{
|
||||
source-=30*32;
|
||||
}
|
||||
|
||||
for( sy=255; sy>=0; sy-=8 )
|
||||
{
|
||||
int tile_number = *source++;
|
||||
drawgfx( bitmap, gfx,
|
||||
tile_number, tile_number>>5,
|
||||
1,1,
|
||||
sx,sy-5*8,
|
||||
cliprect,
|
||||
TRANSPARENCY_NONE, 0xf );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void draw_sprites(running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect, int scrollx, int scrolly,
|
||||
@ -323,6 +349,74 @@ static void draw_sprites(running_machine *machine, bitmap_t *bitmap, const recta
|
||||
}
|
||||
}
|
||||
|
||||
VIDEO_UPDATE( vangrd2 )
|
||||
{
|
||||
cpuintrf_push_context(0);
|
||||
{
|
||||
int madcrash_vreg = (snk_gamegroup == 1) ? 0x00 : 0xf1; // Mad Crasher=0x00, VanguardII=0xf1
|
||||
|
||||
UINT8 sprite_partition = program_read_byte(0xfa00);
|
||||
|
||||
int attributes = program_read_byte(0x8600+madcrash_vreg); /* 0x20: normal, 0xa0: video flipped */
|
||||
int bg_scrolly = program_read_byte(0xf800+madcrash_vreg);
|
||||
int bg_scrollx = program_read_byte(0xf900+madcrash_vreg);
|
||||
int scroll_attributes = program_read_byte(0xfb00+madcrash_vreg);
|
||||
int sprite_scrolly = program_read_byte(0xfc00+madcrash_vreg);
|
||||
int sprite_scrollx = program_read_byte(0xfd00+madcrash_vreg);
|
||||
int fg_scrolly = program_read_byte(0xfe00+madcrash_vreg);
|
||||
int fg_scrollx = program_read_byte(0xff00+madcrash_vreg);
|
||||
|
||||
rectangle finalclip = tilemap_clip;
|
||||
sect_rect(&finalclip, cliprect);
|
||||
|
||||
if(video_bank != ((attributes & 8) >> 3))
|
||||
{
|
||||
video_bank = ((attributes & 8) >> 3);
|
||||
|
||||
tilemap_mark_all_tiles_dirty(bg_tilemap);
|
||||
tilemap_mark_all_tiles_dirty(fg_tilemap);
|
||||
}
|
||||
|
||||
if( (scroll_attributes & 4)==0 ) bg_scrollx += 256;
|
||||
if( scroll_attributes & 1 ) sprite_scrollx += 256;
|
||||
if( scroll_attributes & 2 ) fg_scrollx += 256;
|
||||
|
||||
marvins_palette_bank_w(screen->machine, 0, program_read_byte(0xc800+madcrash_vreg));
|
||||
update_palette(screen->machine, 1);
|
||||
|
||||
if( flipscreen != (attributes&0x80) )
|
||||
{
|
||||
flipscreen = attributes&0x80;
|
||||
tilemap_set_flip( ALL_TILEMAPS, flipscreen?TILEMAP_FLIPY|TILEMAP_FLIPX:0);
|
||||
}
|
||||
|
||||
if(!flipscreen) {
|
||||
tilemap_set_scrollx( bg_tilemap, 0, bg_scrollx );
|
||||
tilemap_set_scrolly( bg_tilemap, 0, bg_scrolly );
|
||||
tilemap_set_scrollx( fg_tilemap, 0, fg_scrollx );
|
||||
tilemap_set_scrolly( fg_tilemap, 0, fg_scrolly );
|
||||
tilemap_set_scrollx( tx_tilemap, 0, 0 );
|
||||
tilemap_set_scrolly( tx_tilemap, 0, 0 );
|
||||
} else {
|
||||
tilemap_set_scrollx( bg_tilemap, 0, bg_scrollx-14 );
|
||||
tilemap_set_scrolly( bg_tilemap, 0, bg_scrolly+60 );
|
||||
tilemap_set_scrollx( fg_tilemap, 0, fg_scrollx-32 );
|
||||
tilemap_set_scrolly( fg_tilemap, 0, fg_scrolly+40 );
|
||||
tilemap_set_scrollx( tx_tilemap, 0, 0 );
|
||||
tilemap_set_scrolly( tx_tilemap, 0, 0 );
|
||||
}
|
||||
|
||||
tilemap_draw(bitmap,&finalclip,bg_tilemap,TILEMAP_DRAW_OPAQUE ,0);
|
||||
draw_sprites(screen->machine,bitmap,cliprect, sprite_scrollx+29, sprite_scrolly+17, 0, sprite_partition );
|
||||
tilemap_draw(bitmap,&finalclip,fg_tilemap,0 ,0);
|
||||
draw_sprites(screen->machine,bitmap,cliprect, sprite_scrollx+29, sprite_scrolly+17, 1, sprite_partition );
|
||||
tilemap_draw(bitmap,&finalclip,tx_tilemap,0 ,0);
|
||||
draw_status(screen->machine,bitmap,cliprect );
|
||||
}
|
||||
cpuintrf_pop_context();
|
||||
return 0;
|
||||
}
|
||||
|
||||
VIDEO_UPDATE( marvins )
|
||||
{
|
||||
cpuintrf_push_context(0);
|
||||
@ -367,8 +461,8 @@ VIDEO_UPDATE( marvins )
|
||||
tilemap_set_scrolly( bg_tilemap, 0, bg_scrolly );
|
||||
tilemap_set_scrollx( fg_tilemap, 0, fg_scrollx );
|
||||
tilemap_set_scrolly( fg_tilemap, 0, fg_scrolly );
|
||||
tilemap_set_scrollx( tx_tilemap, 0, 0 );
|
||||
tilemap_set_scrolly( tx_tilemap, 0, 0 );
|
||||
tilemap_set_scrollx( tx_tilemap, 0, 0 );
|
||||
tilemap_set_scrolly( tx_tilemap, 0, 0 );
|
||||
|
||||
tilemap_draw(bitmap,&finalclip,fg_tilemap,TILEMAP_DRAW_OPAQUE ,0);
|
||||
draw_sprites(screen->machine,bitmap,cliprect, sprite_scrollx+29+1, sprite_scrolly+16, 0, sprite_partition );
|
||||
@ -434,12 +528,21 @@ VIDEO_UPDATE( madcrash )
|
||||
tilemap_set_flip( ALL_TILEMAPS, flipscreen?TILEMAP_FLIPY|TILEMAP_FLIPX:0);
|
||||
}
|
||||
|
||||
tilemap_set_scrollx( bg_tilemap, 0, bg_scrollx );
|
||||
tilemap_set_scrolly( bg_tilemap, 0, bg_scrolly );
|
||||
tilemap_set_scrollx( fg_tilemap, 0, fg_scrollx );
|
||||
tilemap_set_scrolly( fg_tilemap, 0, fg_scrolly );
|
||||
tilemap_set_scrollx( tx_tilemap, 0, 0 );
|
||||
tilemap_set_scrolly( tx_tilemap, 0, 0 );
|
||||
if(!flipscreen) {
|
||||
tilemap_set_scrollx( bg_tilemap, 0, bg_scrollx );
|
||||
tilemap_set_scrolly( bg_tilemap, 0, bg_scrolly );
|
||||
tilemap_set_scrollx( fg_tilemap, 0, fg_scrollx );
|
||||
tilemap_set_scrolly( fg_tilemap, 0, fg_scrolly );
|
||||
tilemap_set_scrollx( tx_tilemap, 0, 0 );
|
||||
tilemap_set_scrolly( tx_tilemap, 0, 0 );
|
||||
} else {
|
||||
tilemap_set_scrollx( bg_tilemap, 0, bg_scrollx );
|
||||
tilemap_set_scrolly( bg_tilemap, 0, bg_scrolly );
|
||||
tilemap_set_scrollx( fg_tilemap, 0, fg_scrollx );
|
||||
tilemap_set_scrolly( fg_tilemap, 0, fg_scrolly+24 );
|
||||
tilemap_set_scrollx( tx_tilemap, 0, 0 );
|
||||
tilemap_set_scrolly( tx_tilemap, 0, -8 );
|
||||
}
|
||||
|
||||
tilemap_draw(bitmap,&finalclip,bg_tilemap,TILEMAP_DRAW_OPAQUE ,0);
|
||||
draw_sprites(screen->machine,bitmap,cliprect, sprite_scrollx+29, sprite_scrolly+17, 0, sprite_partition );
|
||||
|
Loading…
Reference in New Issue
Block a user