From f156678f49df82d25dd715a485de16f6556bf157 Mon Sep 17 00:00:00 2001 From: David Haywood Date: Wed, 14 Aug 2013 04:32:16 +0000 Subject: [PATCH] New Working Game Panic Road [David Haywood] sprite-sprite priorities look a bit goofy in places, but with the current code I'm fairly sure the game logic is now correct at least (some sprites weren't getting drawn until now) Reference videos would be handy for refining this. --- src/mame/drivers/panicr.c | 28 +++++++++++++++++++++------- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/src/mame/drivers/panicr.c b/src/mame/drivers/panicr.c index 163bfd094b5..14537ff9bda 100644 --- a/src/mame/drivers/panicr.c +++ b/src/mame/drivers/panicr.c @@ -3,8 +3,8 @@ Panic Road ---------- TODO: -- problems with bg collision -- high priority tiles + - are collisions 100%, need to find reference videos of game being played properly to check things look ok (I think they are..) + - are priorities with sprites 100%, sprite-sprite priorities are ugly in many places, maybe the SEI0010BU are 3 sprite chips? -- @@ -252,7 +252,10 @@ void panicr_state::draw_sprites(bitmap_ind16 &bitmap,const rectangle &cliprect ) UINT8 *spriteram = m_spriteram; int offs,flipx,flipy,x,y,color,sprite; - for (offs = 0; offs<0x1000; offs+=16) + + // ssss ssss | Fx-- cccc | yyyy yyyy | xxxx xxxx + + for (offs = 0; offs<0x1d00; offs+=16) { flipx = 0; flipy = spriteram[offs+1] & 0x80; @@ -260,6 +263,17 @@ void panicr_state::draw_sprites(bitmap_ind16 &bitmap,const rectangle &cliprect ) x = spriteram[offs+3]; if (spriteram[offs+1] & 0x40) x -= 0x100; + if (spriteram[offs+1] & 0x20) + { + // often set + } + + if (spriteram[offs+1] & 0x10) + { + popmessage("(spriteram[offs+1] & 0x10) %02x\n", (spriteram[offs+1] & 0x10)); + } + + color = spriteram[offs+1] & 0x0f; sprite = spriteram[offs+0] | (*m_spritebank << 8); @@ -412,8 +426,8 @@ WRITE8_MEMBER(panicr_state::t5182shared_w) static ADDRESS_MAP_START( panicr_map, AS_PROGRAM, 8, panicr_state ) AM_RANGE(0x00000, 0x01fff) AM_RAM AM_SHARE("mainram") - AM_RANGE(0x02000, 0x02fff) AM_RAM AM_SHARE("spriteram") - AM_RANGE(0x03000, 0x03fff) AM_RAM + AM_RANGE(0x02000, 0x03cff) AM_RAM AM_SHARE("spriteram") // how big is sprite ram, some places definitely have sprites at 3000+ + AM_RANGE(0x03d00, 0x03fff) AM_RAM AM_RANGE(0x08000, 0x0bfff) AM_READ(panicr_collision_r) AM_RANGE(0x0c000, 0x0cfff) AM_RAM AM_SHARE("textram") AM_RANGE(0x0d000, 0x0d000) AM_DEVWRITE("t5182", t5182_device, sound_irq_w) @@ -821,5 +835,5 @@ DRIVER_INIT_MEMBER(panicr_state,panicr) } -GAME( 1986, panicr, 0, panicr, panicr, panicr_state, panicr, ROT270, "Seibu Kaihatsu (Taito license)", "Panic Road (Japan)", GAME_NOT_WORKING ) -GAME( 1986, panicrg, panicr, panicr, panicr, panicr_state, panicr, ROT270, "Seibu Kaihatsu (Tuning license)", "Panic Road (Germany)", GAME_NOT_WORKING ) +GAME( 1986, panicr, 0, panicr, panicr, panicr_state, panicr, ROT270, "Seibu Kaihatsu (Taito license)", "Panic Road (Japan)", GAME_IMPERFECT_GRAPHICS ) +GAME( 1986, panicrg, panicr, panicr, panicr, panicr_state, panicr, ROT270, "Seibu Kaihatsu (Tuning license)", "Panic Road (Germany)", GAME_IMPERFECT_GRAPHICS )