mirror of
https://github.com/holub/mame
synced 2025-05-29 00:53:09 +03:00
02918: psychosj psychos: Title screen graphic glitch
This commit is contained in:
parent
1894be7bba
commit
9dd5dcc20e
@ -247,13 +247,14 @@ TODO:
|
|||||||
snk68.c for another game that needs this). tdfever dots still flicker a lot,
|
snk68.c for another game that needs this). tdfever dots still flicker a lot,
|
||||||
however I'm not sure if this is an emulation bug or the real game behaviour.
|
however I'm not sure if this is an emulation bug or the real game behaviour.
|
||||||
|
|
||||||
- psychos: in all games using the gwar video, palette colors 0x180-0x1ff are not
|
- psychos: the pcb has glitches (colored lines of length up to 16 pixels) during
|
||||||
used because bit 3 of the sprite attribute is used for tile bank select instead.
|
scrolling on the left side of the screen. This doesn't happen in the emulation
|
||||||
In all games, those colors 0x180-0x1ff are a copy of 0x100-0x17f so even if the
|
so it might be an unemulated hardware bug.
|
||||||
bit was wired to the palette, it would make no difference. In psychos, however,
|
|
||||||
the colors are different. Game colors appear to be correct as they are, and
|
- worldwar: at the beginning of the game, the bottom 16 pixels of the bg are
|
||||||
connecting bit 3 would break them, so it's unknown if colors 0x180-0x1ff should
|
blank. I think that this is related to the psychos glitch above, i.e. the pcb
|
||||||
be used and how.
|
wouldn't display that area correctly anyway so operators were supposed to
|
||||||
|
adjust the screen size to make them invisible.
|
||||||
|
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
|
|
||||||
@ -3549,9 +3550,8 @@ GFXDECODE_END
|
|||||||
static GFXDECODE_START( gwar )
|
static GFXDECODE_START( gwar )
|
||||||
GFXDECODE_ENTRY( "tx_tiles", 0, charlayout_4bpp, 0x000, 0x100>>4 )
|
GFXDECODE_ENTRY( "tx_tiles", 0, charlayout_4bpp, 0x000, 0x100>>4 )
|
||||||
GFXDECODE_ENTRY( "bg_tiles", 0, tilelayout_4bpp, 0x300, 0x100>>4 )
|
GFXDECODE_ENTRY( "bg_tiles", 0, tilelayout_4bpp, 0x300, 0x100>>4 )
|
||||||
GFXDECODE_ENTRY( "sp16_tiles", 0, spritelayout_4bpp, 0x100, 0x080>>4 )
|
GFXDECODE_ENTRY( "sp16_tiles", 0, spritelayout_4bpp, 0x100, 0x100>>4 )
|
||||||
GFXDECODE_ENTRY( "sp32_tiles", 0, bigspritelayout_4bpp, 0x200, 0x100>>4 )
|
GFXDECODE_ENTRY( "sp32_tiles", 0, bigspritelayout_4bpp, 0x200, 0x100>>4 )
|
||||||
/* what about colors 0x180-0x1ff? */
|
|
||||||
GFXDECODE_END
|
GFXDECODE_END
|
||||||
|
|
||||||
static GFXDECODE_START( tdfever )
|
static GFXDECODE_START( tdfever )
|
||||||
@ -3880,10 +3880,9 @@ static MACHINE_DRIVER_START( bermudat )
|
|||||||
MDRV_SCREEN_ADD("main", RASTER)
|
MDRV_SCREEN_ADD("main", RASTER)
|
||||||
MDRV_SCREEN_REFRESH_RATE(60)
|
MDRV_SCREEN_REFRESH_RATE(60)
|
||||||
MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16)
|
MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16)
|
||||||
// visible area uncertain but this size avoids glitches at the bottom of the screen
|
// this visible area matches the psychos pcb
|
||||||
// in worldwar at the beginning of the game
|
|
||||||
MDRV_SCREEN_SIZE(50*8, 28*8)
|
MDRV_SCREEN_SIZE(50*8, 28*8)
|
||||||
MDRV_SCREEN_VISIBLE_AREA(2*8, 48*8-1, 0*8, 28*8-1)
|
MDRV_SCREEN_VISIBLE_AREA(0*8, 50*8-1, 0*8, 28*8-1)
|
||||||
|
|
||||||
MDRV_GFXDECODE(gwar)
|
MDRV_GFXDECODE(gwar)
|
||||||
MDRV_PALETTE_LENGTH(0x400)
|
MDRV_PALETTE_LENGTH(0x400)
|
||||||
@ -3905,6 +3904,15 @@ static MACHINE_DRIVER_START( bermudat )
|
|||||||
MACHINE_DRIVER_END
|
MACHINE_DRIVER_END
|
||||||
|
|
||||||
|
|
||||||
|
static MACHINE_DRIVER_START( psychos )
|
||||||
|
|
||||||
|
MDRV_IMPORT_FROM(bermudat)
|
||||||
|
|
||||||
|
/* video hardware */
|
||||||
|
MDRV_VIDEO_START(psychos)
|
||||||
|
MACHINE_DRIVER_END
|
||||||
|
|
||||||
|
|
||||||
static MACHINE_DRIVER_START( gwar )
|
static MACHINE_DRIVER_START( gwar )
|
||||||
|
|
||||||
MDRV_IMPORT_FROM(bermudat)
|
MDRV_IMPORT_FROM(bermudat)
|
||||||
@ -6190,8 +6198,8 @@ GAME( 1987, bermudat, 0, bermudat, bermudat, 0, ROT270, "SNK", "Be
|
|||||||
GAME( 1987, bermudaj, bermudat, bermudat, bermudat, 0, ROT270, "SNK", "Bermuda Triangle (Japan)", 0 )
|
GAME( 1987, bermudaj, bermudat, bermudat, bermudat, 0, ROT270, "SNK", "Bermuda Triangle (Japan)", 0 )
|
||||||
GAME( 1987, worldwar, 0, bermudat, worldwar, 0, ROT270, "SNK", "World Wars (World?)", 0 )
|
GAME( 1987, worldwar, 0, bermudat, worldwar, 0, ROT270, "SNK", "World Wars (World?)", 0 )
|
||||||
GAME( 1987, bermudaa, worldwar, bermudat, bermudaa, 0, ROT270, "SNK", "Bermuda Triangle (World Wars) (US)", 0 )
|
GAME( 1987, bermudaa, worldwar, bermudat, bermudaa, 0, ROT270, "SNK", "Bermuda Triangle (World Wars) (US)", 0 )
|
||||||
GAME( 1987, psychos, 0, bermudat, psychos, 0, ROT0, "SNK", "Psycho Soldier (US)", 0 )
|
GAME( 1987, psychos, 0, psychos, psychos, 0, ROT0, "SNK", "Psycho Soldier (US)", 0 )
|
||||||
GAME( 1987, psychosj, psychos, bermudat, psychos, 0, ROT0, "SNK", "Psycho Soldier (Japan)", 0 )
|
GAME( 1987, psychosj, psychos, psychos, psychos, 0, ROT0, "SNK", "Psycho Soldier (Japan)", 0 )
|
||||||
GAME( 1987, gwar, 0, gwar, gwar, 0, ROT270, "SNK", "Guerrilla War (US)", 0 )
|
GAME( 1987, gwar, 0, gwar, gwar, 0, ROT270, "SNK", "Guerrilla War (US)", 0 )
|
||||||
GAME( 1987, gwarj, gwar, gwar, gwar, 0, ROT270, "SNK", "Guevara (Japan)", 0 )
|
GAME( 1987, gwarj, gwar, gwar, gwar, 0, ROT270, "SNK", "Guevara (Japan)", 0 )
|
||||||
GAME( 1987, gwara, gwar, gwara, gwar, 0, ROT270, "SNK", "Guerrilla War (Version 1)", 0 )
|
GAME( 1987, gwara, gwar, gwara, gwar, 0, ROT270, "SNK", "Guerrilla War (Version 1)", 0 )
|
||||||
|
@ -25,6 +25,7 @@ extern VIDEO_START( aso );
|
|||||||
extern VIDEO_START( tnk3 );
|
extern VIDEO_START( tnk3 );
|
||||||
extern VIDEO_START( ikari );
|
extern VIDEO_START( ikari );
|
||||||
extern VIDEO_START( gwar );
|
extern VIDEO_START( gwar );
|
||||||
|
extern VIDEO_START( psychos );
|
||||||
extern VIDEO_START( tdfever );
|
extern VIDEO_START( tdfever );
|
||||||
|
|
||||||
extern VIDEO_UPDATE( marvins );
|
extern VIDEO_UPDATE( marvins );
|
||||||
|
@ -35,6 +35,7 @@ static UINT8 sprite_split_point;
|
|||||||
static int num_sprites, yscroll_mask;
|
static int num_sprites, yscroll_mask;
|
||||||
static UINT32 bg_tile_offset;
|
static UINT32 bg_tile_offset;
|
||||||
static UINT32 tx_tile_offset;
|
static UINT32 tx_tile_offset;
|
||||||
|
static int is_psychos;
|
||||||
|
|
||||||
static UINT8 empty_tile[16*16];
|
static UINT8 empty_tile[16*16];
|
||||||
static UINT8 drawmode_table[16];
|
static UINT8 drawmode_table[16];
|
||||||
@ -169,6 +170,10 @@ static TILE_GET_INFO( gwar_get_bg_tile_info )
|
|||||||
int attr = snk_bg_videoram[2*tile_index+1];
|
int attr = snk_bg_videoram[2*tile_index+1];
|
||||||
int code = snk_bg_videoram[2*tile_index] | ((attr & 0x0f) << 8);
|
int code = snk_bg_videoram[2*tile_index] | ((attr & 0x0f) << 8);
|
||||||
int color = (attr & 0xf0) >> 4;
|
int color = (attr & 0xf0) >> 4;
|
||||||
|
|
||||||
|
if (is_psychos) // psychos has a separate palette bank bit
|
||||||
|
color &= 7;
|
||||||
|
|
||||||
SET_TILE_INFO(1,
|
SET_TILE_INFO(1,
|
||||||
code,
|
code,
|
||||||
color,
|
color,
|
||||||
@ -354,6 +359,14 @@ VIDEO_START( gwar )
|
|||||||
tilemap_set_scrolldy(bg_tilemap, 0, -32);
|
tilemap_set_scrolldy(bg_tilemap, 0, -32);
|
||||||
|
|
||||||
tx_tile_offset = 0;
|
tx_tile_offset = 0;
|
||||||
|
|
||||||
|
is_psychos = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
VIDEO_START( psychos )
|
||||||
|
{
|
||||||
|
VIDEO_START_CALL(gwar);
|
||||||
|
is_psychos = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
VIDEO_START( tdfever )
|
VIDEO_START( tdfever )
|
||||||
@ -595,6 +608,9 @@ WRITE8_HANDLER( gwar_tx_bank_w )
|
|||||||
tx_tile_offset = (data & 0x30) << 4;
|
tx_tile_offset = (data & 0x30) << 4;
|
||||||
tilemap_mark_all_tiles_dirty(tx_tilemap);
|
tilemap_mark_all_tiles_dirty(tx_tilemap);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (is_psychos)
|
||||||
|
tilemap_set_palette_offset(bg_tilemap, (data & 0x80));
|
||||||
}
|
}
|
||||||
|
|
||||||
WRITE8_HANDLER( gwar_videoattrs_w )
|
WRITE8_HANDLER( gwar_videoattrs_w )
|
||||||
@ -849,6 +865,8 @@ static void tdfever_draw_sprites(running_machine *machine, bitmap_t *bitmap, con
|
|||||||
case 16:
|
case 16:
|
||||||
tile_number |= ((attributes & 0x08) << 5) | ((attributes & 0x60) << 4);
|
tile_number |= ((attributes & 0x08) << 5) | ((attributes & 0x60) << 4);
|
||||||
color &= 7; // attribute bit 3 is used for bank select
|
color &= 7; // attribute bit 3 is used for bank select
|
||||||
|
if (from == 0)
|
||||||
|
color |= 8; // low priority sprites use the other palette bank
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 32:
|
case 32:
|
||||||
|
Loading…
Reference in New Issue
Block a user