made pbillian plunger more authentic: just hold CTRL for an amount of time and let go

This commit is contained in:
Michaël Banaan Ananas 2011-08-25 14:47:46 +00:00
parent bf52cb2551
commit 5a19d33ee9
3 changed files with 41 additions and 75 deletions

View File

@ -33,11 +33,6 @@ Notes:
- pullout plunger for shot power (there's no on-screen power indicator in the game)
- dial for aiming
- button (fire M powerup, high score initials)
They are mapped a bit differently in MAME. BUTTON1 simlates pulling out the
plunger and releasing it. The plunger strength is controlled by an analog input
(by default mapped to up/down arrows) and shown on screen. The dial is mapped
as expected. The button is mapped on BUTTON2. BUTTON3 is also recognized by the
game when entering initials, but was probably not present in the cabinet.
TODO:
@ -383,7 +378,7 @@ static int read_dial(running_machine &machine, int player)
static TIMER_CALLBACK( delayed_z80_mcu_w )
{
superqix_state *state = machine.driver_data<superqix_state>();
logerror("Z80 sends command %02x\n",param);
// logerror("Z80 sends command %02x\n",param);
state->m_from_z80 = param;
state->m_from_mcu_pending = 0;
cputag_set_input_line(machine, "mcu", 0, HOLD_LINE);
@ -393,7 +388,7 @@ logerror("Z80 sends command %02x\n",param);
static TIMER_CALLBACK( delayed_mcu_z80_w )
{
superqix_state *state = machine.driver_data<superqix_state>();
logerror("68705 sends answer %02x\n",param);
// logerror("68705 sends answer %02x\n",param);
state->m_from_mcu = param;
state->m_from_mcu_pending = 1;
}
@ -458,7 +453,7 @@ static WRITE8_HANDLER( hotsmash_68705_portC_w )
case 0x3: // command from Z80
state->m_portA_in = state->m_from_z80;
logerror("%04x: z80 reads command %02x\n",cpu_get_pc(&space->device()),state->m_from_z80);
// logerror("%04x: z80 reads command %02x\n",cpu_get_pc(&space->device()),state->m_from_z80);
break;
case 0x4:
@ -487,7 +482,7 @@ static WRITE8_HANDLER( hotsmash_z80_mcu_w )
static READ8_HANDLER(hotsmash_from_mcu_r)
{
superqix_state *state = space->machine().driver_data<superqix_state>();
logerror("%04x: z80 reads answer %02x\n",cpu_get_pc(&space->device()),state->m_from_mcu);
// logerror("%04x: z80 reads answer %02x\n",cpu_get_pc(&space->device()),state->m_from_mcu);
state->m_from_mcu_pending = 0;
return state->m_from_mcu;
}
@ -517,15 +512,23 @@ static READ8_HANDLER(pbillian_from_mcu_r)
switch (state->m_from_z80)
{
case 0x01: return input_port_read(space->machine(), state->m_curr_player ? "PADDLE2" : "PADDLE1");
case 0x01:
{
UINT8 p = input_port_read(space->machine(), state->m_curr_player ? "PLUNGER2" : "PLUNGER1") & 0xbf;
if ((p & 0x3f) == 0) p |= 0x40;
return p;
}
case 0x02: return input_port_read(space->machine(), state->m_curr_player ? "DIAL2" : "DIAL1");
case 0x04: return input_port_read(space->machine(), "DSW1");
case 0x08: return input_port_read(space->machine(), "DSW2");
case 0x80: state->m_curr_player = 0; return 0;
case 0x81: state->m_curr_player = 1; return 0;
}
logerror("408[%x] r at %x\n",state->m_from_z80,cpu_get_pc(&space->device()));
// logerror("408[%x] r at %x\n",state->m_from_z80,cpu_get_pc(&space->device()));
return 0;
}
@ -732,19 +735,19 @@ static INPUT_PORTS_START( pbillian )
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_SPECIAL ) // mcu status (pending mcu->z80)
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_SPECIAL ) // mcu status (pending z80->mcu)
PORT_START("PADDLE1") // pullout plunger
PORT_BIT( 0x3f, 0x00, IPT_PADDLE_V ) PORT_MINMAX(0,0x3f) PORT_SENSITIVITY(30) PORT_KEYDELTA(3) PORT_CENTERDELTA(0) PORT_REVERSE
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_BUTTON1 )
PORT_START("PLUNGER1") // plunger mechanism for shot (BUTTON1 and PEDAL mapped to the same key in MAME)
PORT_BIT( 0x3f, 0x00, IPT_PEDAL ) PORT_MINMAX(0x00, 0x3f) PORT_SENSITIVITY(100) PORT_KEYDELTA(1)
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON1 )
PORT_START("DIAL1")
PORT_BIT( 0xff, 0x00, IPT_DIAL ) PORT_SENSITIVITY(20) PORT_KEYDELTA(10)
PORT_BIT( 0xff, 0x00, IPT_DIAL ) PORT_SENSITIVITY(20) PORT_KEYDELTA(8)
PORT_START("PADDLE2")
PORT_BIT( 0x3f, 0x00, IPT_PADDLE_V ) PORT_MINMAX(0,0x3f) PORT_SENSITIVITY(30) PORT_KEYDELTA(3) PORT_CENTERDELTA(0) PORT_REVERSE PORT_COCKTAIL
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_COCKTAIL
PORT_START("PLUNGER2")
PORT_BIT( 0x3f, 0x00, IPT_PEDAL ) PORT_MINMAX(0x00, 0x3f) PORT_SENSITIVITY(100) PORT_KEYDELTA(1) PORT_COCKTAIL
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL
PORT_START("DIAL2")
PORT_BIT( 0xff, 0x00, IPT_DIAL ) PORT_SENSITIVITY(20) PORT_KEYDELTA(10) PORT_COCKTAIL
PORT_BIT( 0xff, 0x00, IPT_DIAL ) PORT_SENSITIVITY(20) PORT_KEYDELTA(8) PORT_COCKTAIL
INPUT_PORTS_END
static INPUT_PORTS_START( hotsmash )
@ -1349,18 +1352,6 @@ ROM_END
static DRIVER_INIT( pbillian )
{
superqix_state *state = machine.driver_data<superqix_state>();
state->m_pbillian_show_power = 1;
}
static DRIVER_INIT( hotsmash )
{
superqix_state *state = machine.driver_data<superqix_state>();
state->m_pbillian_show_power = 0;
}
static DRIVER_INIT( sqix )
{
superqix_state *state = machine.driver_data<superqix_state>();
@ -1437,8 +1428,8 @@ static DRIVER_INIT( perestro )
GAME( 1986, pbillian, 0, pbillian, pbillian, pbillian, ROT0, "Kaneko / Taito", "Prebillian", GAME_SUPPORTS_SAVE )
GAME( 1987, hotsmash, 0, hotsmash, hotsmash, hotsmash, ROT90, "Kaneko / Taito", "Vs. Hot Smash", GAME_SUPPORTS_SAVE )
GAME( 1986, pbillian, 0, pbillian, pbillian, 0, ROT0, "Kaneko / Taito", "Prebillian", GAME_SUPPORTS_SAVE )
GAME( 1987, hotsmash, 0, hotsmash, hotsmash, 0, ROT90, "Kaneko / Taito", "Vs. Hot Smash", GAME_SUPPORTS_SAVE )
GAME( 1987, sqix, 0, sqix, superqix, sqix, ROT90, "Kaneko / Taito", "Super Qix (World, Rev 2)", GAME_SUPPORTS_SAVE )
GAME( 1987, sqixr1, sqix, sqix, superqix, sqix, ROT90, "Kaneko / Taito", "Super Qix (World, Rev 1)", GAME_SUPPORTS_SAVE )
GAME( 1987, sqixu, sqix, sqixu, superqix, 0, ROT90, "Kaneko / Taito (Romstar License)", "Super Qix (US)", GAME_SUPPORTS_SAVE )

View File

@ -24,12 +24,10 @@ public:
UINT8 *m_videoram;
UINT8 *m_bitmapram;
UINT8 *m_bitmapram2;
int m_pbillian_show_power;
int m_gfxbank;
bitmap_t *m_fg_bitmap[2];
int m_show_bitmap;
tilemap_t *m_bg_tilemap;
int m_last_power[2];
UINT8 *m_spriteram;
size_t m_spriteram_size;
};

View File

@ -53,11 +53,6 @@ VIDEO_START( pbillian )
{
superqix_state *state = machine.driver_data<superqix_state>();
state->m_bg_tilemap = tilemap_create(machine, pb_get_bg_tile_info, tilemap_scan_rows, 8, 8,32,32);
/* Need to do save state here */
state->save_item(NAME(state->m_last_power[0]));
state->save_item(NAME(state->m_last_power[1]));
state->save_item(NAME(state->m_pbillian_show_power));
}
VIDEO_START( superqix )
@ -235,24 +230,6 @@ SCREEN_UPDATE( pbillian )
tilemap_draw(bitmap, cliprect, state->m_bg_tilemap, 0, 0);
pbillian_draw_sprites(screen->machine(), bitmap,cliprect);
if (state->m_pbillian_show_power)
{
int curr_power;
curr_power = ((input_port_read(screen->machine(), "PADDLE1") & 0x3f) * 100) / 0x3f;
if (state->m_last_power[0] != curr_power)
{
popmessage ("Power %d%%", curr_power);
state->m_last_power[0] = curr_power;
}
curr_power = ((input_port_read(screen->machine(), "PADDLE2") & 0x3f) * 100) / 0x3f;
if (state->m_last_power[1] != curr_power)
{
popmessage ("Power %d%%", curr_power);
state->m_last_power[1] = curr_power;
}
}
return 0;
}