mirror of
https://github.com/ekeeke/Genesis-Plus-GX.git
synced 2024-11-04 18:05:06 +01:00
fixed inputs initialization & controller options, additional SSG-EG fixes (experimental)
This commit is contained in:
parent
bd90f522e1
commit
f674126a66
@ -226,6 +226,10 @@ void cart_hw_init()
|
||||
}
|
||||
else if (strstr(rominfo.international,"T2 ; THE ARCADE GAME") != NULL)
|
||||
{
|
||||
/* save current setting */
|
||||
if (old_system[0] == -1) old_system[0] = input.system[0];
|
||||
if (old_system[1] == -1) old_system[1] = input.system[1];
|
||||
|
||||
input.system[0] = SYSTEM_GAMEPAD;
|
||||
input.system[1] = SYSTEM_MENACER;
|
||||
input.x_offset = 0x84;
|
||||
@ -233,6 +237,10 @@ void cart_hw_init()
|
||||
}
|
||||
else if (strstr(rominfo.international,"BODY COUNT") != NULL)
|
||||
{
|
||||
/* save current setting */
|
||||
if (old_system[0] == -1) old_system[0] = input.system[0];
|
||||
if (old_system[1] == -1) old_system[1] = input.system[1];
|
||||
|
||||
input.system[0] = SYSTEM_MOUSE;
|
||||
input.system[1] = SYSTEM_MENACER;
|
||||
input.x_offset = 0x44;
|
||||
@ -244,13 +252,21 @@ void cart_hw_init()
|
||||
***********************************************/
|
||||
if (strstr(rominfo.international,"LETHAL ENFORCERS II") != NULL)
|
||||
{
|
||||
/* save current setting */
|
||||
if (old_system[0] == -1) old_system[0] = input.system[0];
|
||||
if (old_system[1] == -1) old_system[1] = input.system[1];
|
||||
|
||||
input.system[0] = SYSTEM_GAMEPAD;
|
||||
input.system[1] = SYSTEM_JUSTIFIER;
|
||||
input.x_offset = 0x18;
|
||||
input.x_offset = 0x18;
|
||||
input.y_offset = 0x00;
|
||||
}
|
||||
else if (strstr(rominfo.international,"LETHAL ENFORCERS") != NULL)
|
||||
{
|
||||
/* save current setting */
|
||||
if (old_system[0] == -1) old_system[0] = input.system[0];
|
||||
if (old_system[1] == -1) old_system[1] = input.system[1];
|
||||
|
||||
input.system[0] = SYSTEM_GAMEPAD;
|
||||
input.system[1] = SYSTEM_JUSTIFIER;
|
||||
input.x_offset = 0x00;
|
||||
|
@ -459,9 +459,9 @@ void ConfigureJoypads ()
|
||||
sprintf (padmenu[1], "Port 2: GAMEPAD");
|
||||
max_players ++;
|
||||
}
|
||||
else if (input.system[0] == SYSTEM_MOUSE)
|
||||
else if (input.system[1] == SYSTEM_MOUSE)
|
||||
{
|
||||
sprintf (padmenu[0], "Port 1: MOUSE");
|
||||
sprintf (padmenu[1], "Port 2: MOUSE");
|
||||
max_players ++;
|
||||
}
|
||||
else if (input.system[1] == SYSTEM_WAYPLAY)
|
||||
@ -535,10 +535,11 @@ void ConfigureJoypads ()
|
||||
break;
|
||||
}
|
||||
input.system[0] ++;
|
||||
if (input.system[0] == SYSTEM_MENACER) input.system[0] = SYSTEM_TEAMPLAYER;
|
||||
else if ((input.system[0] == SYSTEM_MOUSE) && (input.system[1] == SYSTEM_MOUSE)) input.system[1] ++;
|
||||
else if (input.system[0] == SYSTEM_WAYPLAY) input.system[1] = SYSTEM_WAYPLAY;
|
||||
else if (input.system[0] > SYSTEM_WAYPLAY)
|
||||
if (input.system[0] == SYSTEM_MENACER) input.system[0] ++;
|
||||
if (input.system[0] == SYSTEM_JUSTIFIER) input.system[0] ++;
|
||||
if ((input.system[0] == SYSTEM_MOUSE) && (input.system[1] == SYSTEM_MOUSE)) input.system[0] ++;
|
||||
if (input.system[0] == SYSTEM_WAYPLAY) input.system[1] = SYSTEM_WAYPLAY;
|
||||
if (input.system[0] > SYSTEM_WAYPLAY)
|
||||
{
|
||||
input.system[0] = NO_SYSTEM;
|
||||
input.system[1] = SYSTEM_GAMEPAD;
|
||||
@ -552,9 +553,9 @@ void ConfigureJoypads ()
|
||||
break;
|
||||
}
|
||||
input.system[1] ++;
|
||||
if ((input.system[1] == SYSTEM_MOUSE) && (input.system[0] == SYSTEM_MOUSE)) input.system[0] ++;
|
||||
else if (input.system[1] == SYSTEM_WAYPLAY) input.system[0] = SYSTEM_WAYPLAY;
|
||||
else if (input.system[1] > SYSTEM_WAYPLAY)
|
||||
if ((input.system[0] == SYSTEM_MOUSE) && (input.system[1] == SYSTEM_MOUSE)) input.system[1] ++;
|
||||
if (input.system[1] == SYSTEM_WAYPLAY) input.system[0] = SYSTEM_WAYPLAY;
|
||||
if (input.system[1] > SYSTEM_WAYPLAY)
|
||||
{
|
||||
input.system[1] = NO_SYSTEM;
|
||||
input.system[0] = SYSTEM_GAMEPAD;
|
||||
|
@ -166,7 +166,7 @@ static void pad_update(s8 num, u8 i)
|
||||
s8 x = PAD_StickX (num);
|
||||
s8 y = PAD_StickY (num);
|
||||
u16 p = PAD_ButtonsHeld(num);
|
||||
u8 sensitivity = 60;
|
||||
u8 sensitivity = 30;
|
||||
|
||||
/* get current key config */
|
||||
u16 pad_keymap[MAX_KEYS];
|
||||
@ -221,8 +221,8 @@ static void pad_update(s8 num, u8 i)
|
||||
/* MOUSE quantity of movement (-256,256) */
|
||||
else if (input.dev[i] == DEVICE_MOUSE)
|
||||
{
|
||||
input.analog[2][0] = x * 2;
|
||||
input.analog[2][1] = y * 2;
|
||||
input.analog[2][0] = (x / sensitivity) * 2;
|
||||
input.analog[2][1] = (x / sensitivity) * 2;
|
||||
if (!config.invert_mouse) input.analog[2][1] = 0 - input.analog[2][1];
|
||||
}
|
||||
|
||||
@ -393,13 +393,16 @@ static void wpad_config(u8 num, u8 exp, u8 padtype)
|
||||
}
|
||||
}
|
||||
|
||||
float old_x = 0.0;
|
||||
float old_y = 0.0;
|
||||
|
||||
static void wpad_update(s8 num, u8 i, u32 exp)
|
||||
{
|
||||
/* get buttons status */
|
||||
u32 p = WPAD_ButtonsHeld(num);
|
||||
|
||||
/* get analog sticks values */
|
||||
u8 sensitivity = 60;
|
||||
u8 sensitivity = 30;
|
||||
s8 x = 0;
|
||||
s8 y = 0;
|
||||
if (exp != WPAD_EXP_NONE)
|
||||
@ -483,9 +486,52 @@ static void wpad_update(s8 num, u8 i, u32 exp)
|
||||
else if (input.dev[i] == DEVICE_MOUSE)
|
||||
{
|
||||
/* analog stick */
|
||||
input.analog[2][0] = x * 2;
|
||||
input.analog[2][1] = y * 2;
|
||||
input.analog[2][0] = x * 2 / sensitivity;
|
||||
input.analog[2][1] = y * 2 / sensitivity;
|
||||
|
||||
if (exp != WPAD_EXP_CLASSIC)
|
||||
{
|
||||
/* wiimote IR */
|
||||
struct ir_t ir;
|
||||
WPAD_IR(num, &ir);
|
||||
//if (ir.valid)
|
||||
{
|
||||
input.analog[2][0] = ir.x - old_x;
|
||||
if (input.analog[2][0] > 256)
|
||||
{
|
||||
input.analog[2][0] = 256;
|
||||
old_x += 256;
|
||||
}
|
||||
else if (input.analog[2][0] < -256)
|
||||
{
|
||||
input.analog[2][0] = -256;
|
||||
old_x -= 256;
|
||||
}
|
||||
else
|
||||
{
|
||||
old_x = ir.x;
|
||||
}
|
||||
|
||||
input.analog[2][1] = ir.y - old_y;
|
||||
if (input.analog[2][1] > 256)
|
||||
{
|
||||
input.analog[2][1] = 256;
|
||||
old_y += 256;
|
||||
}
|
||||
else if (input.analog[2][1] < -256)
|
||||
{
|
||||
input.analog[2][1] = -256;
|
||||
old_y -= 256;
|
||||
}
|
||||
else
|
||||
{
|
||||
old_y = ir.y;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!config.invert_mouse) input.analog[2][1] = 0 - input.analog[2][1];
|
||||
|
||||
}
|
||||
|
||||
/* GAMEPAD directional buttons */
|
||||
|
@ -658,11 +658,12 @@ INLINE void FM_KEYON(FM_CH *CH , int s )
|
||||
{
|
||||
SLOT->key = 1;
|
||||
SLOT->phase = 0; /* restart Phase Generator */
|
||||
SLOT->ssgn = (SLOT->ssg & 0x04) >> 1;
|
||||
|
||||
if ((SLOT->ar + SLOT->ksr) < 94 /*32+62*/)
|
||||
{
|
||||
SLOT->state = EG_ATT; /* phase -> Attack */
|
||||
SLOT->volume = MAX_ATT_INDEX; /* fix Ecco 2 splash sound */
|
||||
SLOT->volume = 511; /* fix Ecco 2 splash sound */
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -682,7 +683,7 @@ INLINE void FM_KEYOFF(FM_CH *CH , int s )
|
||||
if (SLOT->state>EG_REL)
|
||||
{
|
||||
SLOT->state = EG_REL; /* phase -> Release */
|
||||
SLOT->ssgn = 0; /* reset Invert Flag (from Nemesis) */
|
||||
//SLOT->ssgn = 0; /* reset Invert Flag (from Nemesis) */
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -996,7 +997,7 @@ INLINE void advance_eg_channel(FM_SLOT *SLOT)
|
||||
SLOT->phase = 0; //Alone Coder
|
||||
|
||||
/* phase -> Attack */
|
||||
SLOT->volume = 511; //Alone Coder
|
||||
SLOT->volume = 511; //Alone Coder
|
||||
SLOT->state = EG_ATT;
|
||||
|
||||
swap_flag = (SLOT->ssg&0x02); /* bit 1 = alternate */
|
||||
@ -1023,10 +1024,14 @@ INLINE void advance_eg_channel(FM_SLOT *SLOT)
|
||||
case EG_REL: /* release phase */
|
||||
if ( !(ym2612.OPN.eg_cnt & ((1<<SLOT->eg_sh_rr)-1) ) )
|
||||
{
|
||||
if (SLOT->ssg&0x08)
|
||||
SLOT->volume += 6 * eg_inc[SLOT->eg_sel_rr + ((ym2612.OPN.eg_cnt>>SLOT->eg_sh_rr)&7)]; /* from Nemesis */
|
||||
else
|
||||
SLOT->volume += eg_inc[SLOT->eg_sel_rr + ((ym2612.OPN.eg_cnt>>SLOT->eg_sh_rr)&7)];
|
||||
if (SLOT->ssg&0x08)
|
||||
{
|
||||
SLOT->volume += 6 * eg_inc[SLOT->eg_sel_rr + ((ym2612.OPN.eg_cnt>>SLOT->eg_sh_rr)&7)]; /* from Nemesis */
|
||||
}
|
||||
else
|
||||
{
|
||||
SLOT->volume += eg_inc[SLOT->eg_sel_rr + ((ym2612.OPN.eg_cnt>>SLOT->eg_sh_rr)&7)];
|
||||
}
|
||||
|
||||
if ( SLOT->volume >= MAX_ATT_INDEX )
|
||||
{
|
||||
@ -1040,8 +1045,9 @@ INLINE void advance_eg_channel(FM_SLOT *SLOT)
|
||||
|
||||
out = SLOT->tl + ((UINT32)SLOT->volume);
|
||||
|
||||
if ((SLOT->ssg&0x08) && (SLOT->ssgn&2) && (SLOT->state != EG_OFF/*Alone Coder*/)) /* negate output (changes come from alternate bit, init comes from attack bit) */
|
||||
out ^= 511/*Alone Coder*/; //((1<<ENV_BITS)-1); /* 1023 */
|
||||
/* negate output (changes come from alternate bit, init comes from attack bit) */
|
||||
if ((SLOT->ssg&0x08) && (SLOT->ssgn&2) && ((SLOT->state == EG_DEC) || (SLOT->state == EG_SUS)))
|
||||
out ^= 511 /* Alone Coder*/; //((1<<ENV_BITS)-1); /* 1023 */
|
||||
|
||||
/* we need to store the result here because we are going to change ssgn
|
||||
in next instruction */
|
||||
|
Loading…
Reference in New Issue
Block a user