restore zapper fix from liuhb86 -

https://github.com/dborth/fceugx/pull/347
This commit is contained in:
Daryl Borth 2016-12-10 12:56:12 -07:00
parent a5eeb6fc02
commit 69308ec1a3

View File

@ -464,6 +464,58 @@ static unsigned char DecodeJoy(unsigned short chan)
} }
#endif #endif
bool zapper_triggered = false;
// zapper enabled
if(GCSettings.Controller == CTRL_ZAPPER)
{
int z; // NES port # (0 or 1)
if(GameInfo->type == GIT_VSUNI)
z = 0;
else
z = 1;
myzappers[z][2] = 0; // reset trigger to not pressed
// is trigger pressed?
if ( (jp & btnmap[CTRL_ZAPPER][CTRLR_GCPAD][0]) // gamecube controller
#ifdef HW_RVL
|| ( (exp_type == WPAD_EXP_NONE) && (wp & btnmap[CTRL_ZAPPER][CTRLR_WIIMOTE][0]) ) // wiimote
#endif
)
{
// report trigger press
myzappers[z][2] |= 2;
zapper_triggered = true;
}
// VS zapper games
if ( (jp & btnmap[CTRL_ZAPPER][CTRLR_GCPAD][1]) // gamecube controller
#ifdef HW_RVL
|| ( (exp_type == WPAD_EXP_NONE) && (wp & btnmap[CTRL_ZAPPER][CTRLR_WIIMOTE][1]) ) // wiimote
#endif
)
{
FCEUI_VSUniCoin(); // insert coin for VS zapper games
zapper_triggered = true;
}
// cursor position
int channel = 0; // by default, use wiimote 1
#ifdef HW_RVL
if (userInput[1].wpad->ir.valid)
{
channel = 1; // if wiimote 2 is connected, use wiimote 2 as zapper
}
#endif
UpdateCursorPosition(channel); // update cursor for wiimote
myzappers[z][0] = pos_x;
myzappers[z][1] = pos_y;
// Report changes to FCE Ultra
zapperdata[z]->Update(z,myzappers[z],0);
}
// Report pressed buttons (gamepads) // Report pressed buttons (gamepads)
int i; int i;
for (i = 0; i < MAXJP; i++) for (i = 0; i < MAXJP; i++)
@ -478,7 +530,7 @@ static unsigned char DecodeJoy(unsigned short chan)
) )
{ {
// if zapper is on, ignore all buttons except START and SELECT // if zapper is on, ignore all buttons except START and SELECT
if(GCSettings.Controller != CTRL_ZAPPER || nespadmap[i] == JOY_START || nespadmap[i] == JOY_SELECT) if (!zapper_triggered)
{ {
if(rapidAlternator && nespadmap[i] == RAPID_A) if(rapidAlternator && nespadmap[i] == RAPID_A)
{ {
@ -512,48 +564,6 @@ static unsigned char DecodeJoy(unsigned short chan)
} }
} }
// zapper enabled
if(GCSettings.Controller == CTRL_ZAPPER)
{
int z; // NES port # (0 or 1)
if(GameInfo->type == GIT_VSUNI)
z = 0;
else
z = 1;
myzappers[z][2] = 0; // reset trigger to not pressed
// is trigger pressed?
if ( (jp & btnmap[CTRL_ZAPPER][CTRLR_GCPAD][0]) // gamecube controller
#ifdef HW_RVL
|| ( (exp_type == WPAD_EXP_NONE) && (wp & btnmap[CTRL_ZAPPER][CTRLR_WIIMOTE][0]) ) // wiimote
#endif
)
{
// report trigger press
myzappers[z][2] |= 2;
}
// VS zapper games
if ( (jp & btnmap[CTRL_ZAPPER][CTRLR_GCPAD][1]) // gamecube controller
#ifdef HW_RVL
|| ( (exp_type == WPAD_EXP_NONE) && (wp & btnmap[CTRL_ZAPPER][CTRLR_WIIMOTE][1]) ) // wiimote
#endif
)
{
FCEUI_VSUniCoin(); // insert coin for VS zapper games
}
// cursor position
UpdateCursorPosition(0); // update cursor for wiimote 1
myzappers[z][0] = pos_x;
myzappers[z][1] = pos_y;
// Report changes to FCE Ultra
zapperdata[z]->Update(z,myzappers[z],0);
}
return J; return J;
} }