mirror of
https://github.com/holub/mame
synced 2025-06-06 21:03:47 +03:00
ms32.cpp: fix hayaosi3 final round and flame text priorities [Angelo Salese]
This commit is contained in:
parent
8306e7a0ef
commit
6a57025550
@ -873,6 +873,7 @@ static INPUT_PORTS_START( ms32 )
|
||||
PORT_BIT( 0x00010000, IP_ACTIVE_LOW, IPT_COIN1 )
|
||||
PORT_BIT( 0x00020000, IP_ACTIVE_LOW, IPT_COIN2 )
|
||||
PORT_BIT( 0x00040000, IP_ACTIVE_LOW, IPT_SERVICE1 )
|
||||
// mapping to F1 key because there may be a specific service dip as well
|
||||
PORT_BIT( 0x00080000, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME(DEF_STR( Test )) PORT_CODE(KEYCODE_F1)
|
||||
PORT_BIT( 0x00100000, IP_ACTIVE_LOW, IPT_START1 )
|
||||
PORT_BIT( 0x00200000, IP_ACTIVE_LOW, IPT_START2 )
|
||||
@ -1291,21 +1292,23 @@ static INPUT_PORTS_START( hayaosi2 )
|
||||
PORT_INCLUDE( ms32 )
|
||||
|
||||
PORT_MODIFY("INPUTS")
|
||||
// fast button is actually mapped as button 1 in hayaosi2 and button 5 for hayaosi3.
|
||||
// We use latter layout for convenience
|
||||
PORT_BIT( 0x00000001, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1)
|
||||
PORT_BIT( 0x00000002, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1)
|
||||
PORT_BIT( 0x00000004, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2)
|
||||
PORT_BIT( 0x00000008, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2)
|
||||
PORT_BIT( 0x00000010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(3)
|
||||
PORT_BIT( 0x00000020, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(3)
|
||||
PORT_BIT( 0x00000040, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_PLAYER(1) // "Buzzer" (input 0 in "test mode")
|
||||
PORT_BIT( 0x00000080, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_PLAYER(3) // "Buzzer" (input 0 in "test mode")
|
||||
PORT_BIT( 0x00000040, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_PLAYER(1) PORT_NAME("P1 Fast Button")
|
||||
PORT_BIT( 0x00000080, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_PLAYER(3) PORT_NAME("P3 Fast Button")
|
||||
PORT_BIT( 0x00000100, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1)
|
||||
PORT_BIT( 0x00000200, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(1)
|
||||
PORT_BIT( 0x00000400, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2)
|
||||
PORT_BIT( 0x00000800, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(2)
|
||||
PORT_BIT( 0x00001000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(3)
|
||||
PORT_BIT( 0x00002000, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(3)
|
||||
PORT_BIT( 0x00004000, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_PLAYER(2) // "Buzzer" (input 0 in "test mode")
|
||||
PORT_BIT( 0x00004000, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_PLAYER(2) PORT_NAME("P2 Fast Button")
|
||||
PORT_BIT( 0x00008000, IP_ACTIVE_LOW, IPT_START3 )
|
||||
|
||||
PORT_BIT( 0x00400000, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||
@ -1348,6 +1351,7 @@ INPUT_PORTS_END
|
||||
static INPUT_PORTS_START( hayaosi3 )
|
||||
PORT_INCLUDE( hayaosi2 )
|
||||
|
||||
// TODO: dips are somehow different than hayaosi2, cfr. service mode
|
||||
PORT_MODIFY("DSW")
|
||||
PORT_DIPNAME( 0x00000002, 0x00000002, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW2:7")
|
||||
PORT_DIPSETTING( 0x00000000, DEF_STR( Off ) )
|
||||
|
@ -398,8 +398,7 @@ uint32_t ms32_state::screen_update_ms32(screen_device &screen, bitmap_rgb32 &bit
|
||||
draw_sprites(m_temp_bitmap_sprites, m_temp_bitmap_sprites_pri, cliprect, m_sprram, 0x20000, 0, m_reverse_sprite_order);
|
||||
|
||||
|
||||
|
||||
|
||||
// TODO: actually understand this (per-scanline priority and alpha-blend over every layer?)
|
||||
asc_pri = scr_pri = rot_pri = 0;
|
||||
|
||||
if((m_priram[0x2b00 / 2] & 0x00ff) == 0x0034)
|
||||
@ -413,18 +412,20 @@ uint32_t ms32_state::screen_update_ms32(screen_device &screen, bitmap_rgb32 &bit
|
||||
scr_pri++;
|
||||
|
||||
// Suchiepai 2 title & Gratia gameplay intermissions uses 0x0f
|
||||
// hayaosi3 uses 0x09 during flames screen on attract
|
||||
// hayaosi3 uses 0x09 during flames screen on attract (text should go above the rest)
|
||||
// this is otherwise 0x17 most of the time except for 0x15 in hayaosi3, tetris plus 2 & world pk soccer 2
|
||||
// kirarast flips between 0x16 in gameplay and 0x17 otherwise
|
||||
if(m_priram[0x3a00 / 2] == 0x09)
|
||||
asc_pri = 3;
|
||||
if((m_priram[0x3a00 / 2] & 0x0030) == 0x00)
|
||||
scr_pri++;
|
||||
else
|
||||
rot_pri++;
|
||||
|
||||
// popmessage("%02x %02x %02x",m_priram[0x2b00 / 2],m_priram[0x2e00 / 2],m_priram[0x3a00 / 2]);
|
||||
//popmessage("%02x %02x %02x %d %d %d",m_priram[0x2b00 / 2],m_priram[0x2e00 / 2],m_priram[0x3a00 / 2], asc_pri, scr_pri, rot_pri);
|
||||
|
||||
// tile-tile mixing
|
||||
for(int prin=0;prin<3;prin++)
|
||||
for(int prin=0;prin<4;prin++)
|
||||
{
|
||||
if(rot_pri == prin)
|
||||
draw_roz(screen, m_temp_bitmap_tilemaps, cliprect, 1 << 1);
|
||||
@ -489,7 +490,6 @@ uint32_t ms32_state::screen_update_ms32(screen_device &screen, bitmap_rgb32 &bit
|
||||
if (m_priram[(spritepri | 0x0a00 | 0x0100) / 2] & 0x38) primask |= 1 << 6;
|
||||
if (m_priram[(spritepri | 0x0a00 | 0x0000) / 2] & 0x38) primask |= 1 << 7;
|
||||
|
||||
|
||||
// TODO: spaghetti code ...
|
||||
if (primask == 0x00)
|
||||
{
|
||||
@ -557,6 +557,20 @@ uint32_t ms32_state::screen_update_ms32(screen_device &screen, bitmap_rgb32 &bit
|
||||
dstptr_bitmap[xx] = paldata[machine().rand()&0xfff];
|
||||
popmessage("unhandled priority type %02x, contact MAMEdev",primask);
|
||||
}
|
||||
else if (primask == 0xcc)
|
||||
{
|
||||
// hayaosi3 final round ($00 normal, $02 mesh, $03/$05/$07 zoomed in)
|
||||
// TODO: may have some blending, hard to say without ref video
|
||||
if (src_tilepri & 0x02)
|
||||
dstptr_bitmap[xx] = paldata[src_tile];
|
||||
else
|
||||
{
|
||||
if (spridat & 0xff)
|
||||
dstptr_bitmap[xx] = paldata[spridat];
|
||||
else
|
||||
dstptr_bitmap[xx] = paldata[src_tile];
|
||||
}
|
||||
}
|
||||
else if (primask == 0xf0)
|
||||
{
|
||||
// dstptr_bitmap[xx] = paldata[spridat];
|
||||
@ -695,6 +709,7 @@ uint32_t ms32_state::screen_update_ms32(screen_device &screen, bitmap_rgb32 &bit
|
||||
}
|
||||
else
|
||||
{
|
||||
// $fa actually used on hayaosi3 second champ transition, unknown purpose
|
||||
dstptr_bitmap[xx] = 0;
|
||||
popmessage("unhandled priority type %02x, contact MAMEdev",primask);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user