mirror of
https://gitlab.com/skmp/dca3-game.git
synced 2025-09-03 03:32:37 +02:00
Cleaned up previous button binding MR for A & B buttons, added audible feedback for camera view changes.
This commit is contained in:
@@ -1669,54 +1669,54 @@ void CPad::AffectFromXinput(uint32 pad)
|
|||||||
|
|
||||||
void CPad::UpdatePads(void)
|
void CPad::UpdatePads(void)
|
||||||
{
|
{
|
||||||
bool bUpdate = true;
|
bool bUpdate = true;
|
||||||
|
|
||||||
GetPad(0)->UpdateMouse();
|
GetPad(0)->UpdateMouse();
|
||||||
#ifdef XINPUT
|
#ifdef XINPUT
|
||||||
GetPad(0)->AffectFromXinput(m_bMapPadOneToPadTwo ? 1 : 0);
|
GetPad(0)->AffectFromXinput(m_bMapPadOneToPadTwo ? 1 : 0);
|
||||||
GetPad(1)->AffectFromXinput(m_bMapPadOneToPadTwo ? 0 : 1);
|
GetPad(1)->AffectFromXinput(m_bMapPadOneToPadTwo ? 0 : 1);
|
||||||
#else
|
#else
|
||||||
CapturePad(0);
|
CapturePad(0);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Improve keyboard input latency part 1
|
// Improve keyboard input latency part 1
|
||||||
#ifdef FIX_BUGS
|
#ifdef FIX_BUGS
|
||||||
OldKeyState = NewKeyState;
|
OldKeyState = NewKeyState;
|
||||||
NewKeyState = TempKeyState;
|
NewKeyState = TempKeyState;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef DETECT_PAD_INPUT_SWITCH
|
#ifdef DETECT_PAD_INPUT_SWITCH
|
||||||
if (GetPad(0)->PCTempJoyState.CheckForInput())
|
if (GetPad(0)->PCTempJoyState.CheckForInput())
|
||||||
IsAffectedByController = true;
|
IsAffectedByController = true;
|
||||||
else {
|
else {
|
||||||
#endif
|
#endif
|
||||||
ControlsManager.ClearSimButtonPressCheckers();
|
ControlsManager.ClearSimButtonPressCheckers();
|
||||||
ControlsManager.AffectPadFromKeyBoard();
|
ControlsManager.AffectPadFromKeyBoard();
|
||||||
ControlsManager.AffectPadFromMouse();
|
ControlsManager.AffectPadFromMouse();
|
||||||
|
|
||||||
#ifdef DETECT_PAD_INPUT_SWITCH
|
#ifdef DETECT_PAD_INPUT_SWITCH
|
||||||
}
|
}
|
||||||
if (IsAffectedByController && (GetPad(0)->PCTempKeyState.CheckForInput() || GetPad(0)->PCTempMouseState.CheckForInput()))
|
if (IsAffectedByController && (GetPad(0)->PCTempKeyState.CheckForInput() || GetPad(0)->PCTempMouseState.CheckForInput()))
|
||||||
IsAffectedByController = false;
|
IsAffectedByController = false;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if ( CReplay::IsPlayingBackFromFile() && !FrontEndMenuManager.m_bMenuActive )
|
if ( CReplay::IsPlayingBackFromFile() && !FrontEndMenuManager.m_bMenuActive )
|
||||||
bUpdate = false;
|
bUpdate = false;
|
||||||
|
|
||||||
if ( bUpdate )
|
if ( bUpdate )
|
||||||
GetPad(0)->Update(0);
|
GetPad(0)->Update(0);
|
||||||
|
|
||||||
#ifndef MASTER
|
#ifndef MASTER
|
||||||
GetPad(1)->Update(1);
|
GetPad(1)->Update(1);
|
||||||
#else
|
#else
|
||||||
GetPad(1)->NewState.Clear();
|
GetPad(1)->NewState.Clear();
|
||||||
GetPad(1)->OldState.Clear();
|
GetPad(1)->OldState.Clear();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Improve keyboard input latency part 2
|
// Improve keyboard input latency part 2
|
||||||
#ifndef FIX_BUGS
|
#ifndef FIX_BUGS
|
||||||
OldKeyState = NewKeyState;
|
OldKeyState = NewKeyState;
|
||||||
NewKeyState = TempKeyState;
|
NewKeyState = TempKeyState;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1727,391 +1727,430 @@ void CPad::ProcessPCSpecificStuff(void)
|
|||||||
|
|
||||||
void CPad::Update(int16 pad)
|
void CPad::Update(int16 pad)
|
||||||
{
|
{
|
||||||
OldState = NewState;
|
OldState = NewState;
|
||||||
|
|
||||||
#ifdef GTA_PS2
|
#ifdef GTA_PS2
|
||||||
bObsoleteControllerMessage = false;
|
bObsoleteControllerMessage = false;
|
||||||
|
|
||||||
int id;
|
//int iPressureBtn;
|
||||||
int ext_id=0;
|
int id;
|
||||||
int state;
|
int ext_id=0;
|
||||||
int rterm_id = 0;
|
int state;
|
||||||
unsigned short paddata, tpad;
|
int rterm_id = 0;
|
||||||
unsigned char rdata[32];
|
unsigned short paddata, tpad;
|
||||||
|
unsigned char rdata[32];
|
||||||
|
|
||||||
state = scePadGetState(pad, 0);
|
state = scePadGetState(pad, 0);
|
||||||
|
|
||||||
switch(Phase)
|
switch(Phase)
|
||||||
{
|
{
|
||||||
case 0:
|
case 0:
|
||||||
if (state != scePadStateStable && state != scePadStateFindCTP1)
|
if (state != scePadStateStable && state != scePadStateFindCTP1)
|
||||||
break;
|
break;
|
||||||
id = scePadInfoMode(pad, 0, InfoModeCurID, 0);
|
id = scePadInfoMode(pad, 0, InfoModeCurID, 0);
|
||||||
if (id==0) break;
|
if (id==0) break;
|
||||||
|
|
||||||
ext_id = scePadInfoMode(pad, 0, InfoModeCurExID, 0);
|
ext_id = scePadInfoMode(pad, 0, InfoModeCurExID, 0);
|
||||||
if (ext_id>0) id = ext_id;
|
if (ext_id>0) id = ext_id;
|
||||||
|
|
||||||
switch(id)
|
switch(id)
|
||||||
{
|
{
|
||||||
case 4: // Digital controller
|
case 4: // Digital controller
|
||||||
Phase = 40; // Try for analog(dualshock)
|
Phase = 40; // Try for analog(dualshock)
|
||||||
break;
|
break;
|
||||||
case 7: // Dualshock2 controller
|
case 7: // Dualshock2 controller
|
||||||
Phase = 50;
|
Phase = 50;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
Phase = 99;
|
Phase = 99;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
// Analog Controller (old dualshock)
|
// Analog Controller (old dualshock)
|
||||||
case 40: // Analog Contoller check valid (otherwise fail phase)
|
case 40: // Analog Contoller check valid (otherwise fail phase)
|
||||||
if (scePadInfoMode(pad, 0, InfoModeIdTable, -1)==0)
|
if (scePadInfoMode(pad, 0, InfoModeIdTable, -1)==0)
|
||||||
{
|
{
|
||||||
Phase = 99;
|
Phase = 99;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
Phase++;
|
Phase++;
|
||||||
|
|
||||||
case 41: // Analog controller: Request Lock analog mode (asynchronous)
|
case 41: // Analog controller: Request Lock analog mode (asynchronous)
|
||||||
if (scePadSetMainMode(pad, 0, 1, 3)==1) Phase++;
|
if (scePadSetMainMode(pad, 0, 1, 3)==1) Phase++;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 42: // Analog controller: Check state of previous request
|
case 42: // Analog controller: Check state of previous request
|
||||||
if (scePadGetReqState(pad, 0)==scePadReqStateFaild)
|
if (scePadGetReqState(pad, 0)==scePadReqStateFaild)
|
||||||
{
|
{
|
||||||
Phase--;
|
Phase--;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (scePadGetReqState(pad, 0)==scePadReqStateComplete)
|
if (scePadGetReqState(pad, 0)==scePadReqStateComplete)
|
||||||
{
|
{
|
||||||
// Lock mode complete
|
// Lock mode complete
|
||||||
Phase=0; // Accept normal dualshock
|
Phase=0; // Accept normal dualshock
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
// DualShock 2 Controller
|
// DualShock 2 Controller
|
||||||
case 50: // Analog Contoller check valid (otherwise fail phase)
|
case 50: // Analog Contoller check valid (otherwise fail phase)
|
||||||
if (scePadInfoMode(pad, 0, InfoModeIdTable, -1)==0)
|
if (scePadInfoMode(pad, 0, InfoModeIdTable, -1)==0)
|
||||||
{
|
{
|
||||||
Phase = 99;
|
Phase = 99;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
Phase++;
|
Phase++;
|
||||||
|
|
||||||
case 51: // Analog controller: Request Lock analog mode (asynchronous)
|
case 51: // Analog controller: Request Lock analog mode (asynchronous)
|
||||||
if (scePadSetMainMode(pad, 0, 1, 3)==1) Phase++;
|
if (scePadSetMainMode(pad, 0, 1, 3)==1) Phase++;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 52: // Analog controller: Check state of previous request
|
case 52: // Analog controller: Check state of previous request
|
||||||
if (scePadGetReqState(pad, 0)==scePadReqStateFaild)
|
if (scePadGetReqState(pad, 0)==scePadReqStateFaild)
|
||||||
{
|
{
|
||||||
Phase--;
|
Phase--;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (scePadGetReqState(pad, 0)==scePadReqStateComplete)
|
if (scePadGetReqState(pad, 0)==scePadReqStateComplete)
|
||||||
{
|
{
|
||||||
// Lock mode complete
|
// Lock mode complete
|
||||||
Phase=0; // Accept normal dualshock
|
Phase=0; // Accept normal dualshock
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 70: // DualShock 2 check pressure sensitive possible
|
case 70: // DualShock 2 check pressure sensitive possible
|
||||||
if (scePadInfoPressMode(pad, 0)==1)
|
if (scePadInfoPressMode(pad, 0)==1)
|
||||||
{
|
{
|
||||||
Phase = 76;
|
Phase = 76;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
Phase = 99;
|
Phase = 99;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 76: // DualShock2 enable pressure sensitive mode (asynchronous function)
|
case 76: // DualShock2 enable pressure sensitive mode (asynchronous function)
|
||||||
if (scePadEnterPressMode(pad, 0)==1) Phase++;
|
if (scePadEnterPressMode(pad, 0)==1) Phase++;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 77: // Dualshock2 check status of request pressure sensitive mode
|
case 77: // Dualshock2 check status of request pressure sensitive mode
|
||||||
if (scePadGetReqState(pad, 0)==scePadReqStateFaild) Phase--;
|
if (scePadGetReqState(pad, 0)==scePadReqStateFaild) Phase--;
|
||||||
if (scePadGetReqState(pad, 0)==scePadReqStateComplete)
|
if (scePadGetReqState(pad, 0)==scePadReqStateComplete)
|
||||||
{
|
{
|
||||||
Phase=80;
|
Phase=80;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
// DualShock 2 Controller
|
// DualShock 2 Controller
|
||||||
case 80: // Set motors
|
case 80: // Set motors
|
||||||
if (scePadInfoAct(pad, 0, -1, 0)==0)
|
if (scePadInfoAct(pad, 0, -1, 0)==0)
|
||||||
{
|
{
|
||||||
Phase = 99;
|
Phase = 99;
|
||||||
}
|
}
|
||||||
|
|
||||||
act_align[0] = 0; // Offset 0 for motor0
|
act_align[0] = 0; // Offset 0 for motor0
|
||||||
act_align[1] = 1; // Offset 1 for motor1
|
act_align[1] = 1; // Offset 1 for motor1
|
||||||
|
|
||||||
act_align[2] = 0xff;
|
act_align[2] = 0xff;
|
||||||
act_align[3] = 0xff;
|
act_align[3] = 0xff;
|
||||||
act_align[4] = 0xff;
|
act_align[4] = 0xff;
|
||||||
act_align[5] = 0xff;
|
act_align[5] = 0xff;
|
||||||
|
|
||||||
// Asynchronous function
|
// Asynchronous function
|
||||||
if (scePadSetActAlign(pad, 0, act_align)==0) break;
|
if (scePadSetActAlign(pad, 0, act_align)==0) break;
|
||||||
Phase++;
|
Phase++;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 81:
|
|
||||||
if ( scePadGetState(pad, 0) != scePadStateExecCmd )
|
|
||||||
{
|
|
||||||
Phase = 99;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
case 81:
|
||||||
if ( state == scePadStateError ) break;
|
if ( scePadGetState(pad, 0) != scePadStateExecCmd )
|
||||||
|
{
|
||||||
|
Phase = 99;
|
||||||
|
}
|
||||||
|
|
||||||
if ( state == scePadStateStable || state == scePadStateFindCTP1 )
|
break;
|
||||||
{
|
|
||||||
if ( ShakeDur )
|
|
||||||
{
|
|
||||||
ShakeDur = Max(ShakeDur - (int32)CTimer::GetTimeStepInMilliseconds(), 0);
|
|
||||||
|
|
||||||
if ( ShakeDur == 0 )
|
default:
|
||||||
{
|
if ( state == scePadStateError ) break;
|
||||||
act_direct[0] = 0;
|
|
||||||
act_direct[1] = 0;
|
|
||||||
scePadSetActDirect(pad, 0, act_direct);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
act_direct[0] = 0;
|
|
||||||
act_direct[1] = (unsigned char) ShakeFreq;
|
|
||||||
scePadSetActDirect(pad, 0, act_direct);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (scePadRead( pad, 0, rdata )==0)
|
if ( state == scePadStateStable || state == scePadStateFindCTP1 )
|
||||||
{
|
{
|
||||||
NewState.Clear();
|
if ( ShakeDur )
|
||||||
break;
|
{
|
||||||
}
|
ShakeDur = Max(ShakeDur - (int32)CTimer::GetTimeStepInMilliseconds(), 0);
|
||||||
|
|
||||||
if ((rdata[0] == 0))
|
if ( ShakeDur == 0 )
|
||||||
{
|
{
|
||||||
paddata = (unsigned short) ( 0xffff ^ ((rdata[2]<<8)|rdata[3]) );
|
act_direct[0] = 0;
|
||||||
rterm_id = (rdata[1]);
|
act_direct[1] = 0;
|
||||||
|
scePadSetActDirect(pad, 0, act_direct);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
act_direct[0] = 0;
|
||||||
|
act_direct[1] = (unsigned char) ShakeFreq;
|
||||||
|
scePadSetActDirect(pad, 0, act_direct);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if ( (rterm_id>>4) == 7 ) // DUALSHOCK
|
if (scePadRead( pad, 0, rdata )==0)
|
||||||
{
|
{
|
||||||
if (!CRecordDataForGame::IsPlayingBack() && !CRecordDataForChase::ShouldThisPadBeLeftAlone(pad))
|
NewState.Clear();
|
||||||
{
|
break;
|
||||||
tpad = paddata;
|
}
|
||||||
|
|
||||||
NewState.DPadUp = ( tpad & SCE_PADLup ) ? 255 : 0;
|
if ((rdata[0] == 0))
|
||||||
NewState.DPadDown = ( tpad & SCE_PADLdown ) ? 255 : 0;
|
{
|
||||||
NewState.DPadLeft = ( tpad & SCE_PADLleft ) ? 255 : 0;
|
paddata = (unsigned short) ( 0xffff ^ ((rdata[2]<<8)|rdata[3]) );
|
||||||
NewState.DPadRight = ( tpad & SCE_PADLright ) ? 255 : 0;
|
rterm_id = (rdata[1]);
|
||||||
NewState.Triangle = ( tpad & SCE_PADRup ) ? 255 : 0;
|
|
||||||
NewState.Cross = ( tpad & SCE_PADRdown ) ? 255 : 0;
|
|
||||||
NewState.Square = ( tpad & SCE_PADRleft ) ? 255 : 0;
|
|
||||||
NewState.Circle = ( tpad & SCE_PADRright ) ? 255 : 0;
|
|
||||||
NewState.Start = ( tpad & SCE_PADstart ) ? 255 : 0;
|
|
||||||
NewState.Select = ( tpad & SCE_PADselect ) ? 255 : 0;
|
|
||||||
NewState.LeftShoulder1 = ( tpad & SCE_PADL1 ) ? 255 : 0;
|
|
||||||
NewState.LeftShoulder2 = ( tpad & SCE_PADL2 ) ? 255 : 0;
|
|
||||||
NewState.RightShoulder1 = ( tpad & SCE_PADR1 ) ? 255 : 0;
|
|
||||||
NewState.RightShoulder2 = ( tpad & SCE_PADR2 ) ? 255 : 0;
|
|
||||||
NewState.LeftShock = ( tpad & SCE_PADi ) ? 255 : 0;
|
|
||||||
NewState.RightShock = ( tpad & SCE_PADj ) ? 255 : 0;
|
|
||||||
NewState.RightStickX = (short)rdata[4];
|
|
||||||
NewState.RightStickY = (short)rdata[5];
|
|
||||||
NewState.LeftStickX = (short)rdata[6];
|
|
||||||
NewState.LeftStickY = (short)rdata[7];
|
|
||||||
|
|
||||||
#define CLAMP_AXIS(x) (((x) < 43 && (x) >= -42) ? 0 : (((x) > 0) ? (Max((x)-42, 0)*127/85) : Min((x)+42, 0)*127/85))
|
if ( (rterm_id>>4) == 7 ) // DUALSHOCK
|
||||||
#define FIX_AXIS(x) CLAMP_AXIS((x)-128)
|
{
|
||||||
|
if (!CRecordDataForGame::IsPlayingBack() && !CRecordDataForChase::ShouldThisPadBeLeftAlone(pad))
|
||||||
|
{
|
||||||
|
tpad = paddata;
|
||||||
|
|
||||||
NewState.RightStickX = FIX_AXIS(NewState.RightStickX);
|
NewState.DPadUp = ( tpad & SCE_PADLup ) ? 255 : 0;
|
||||||
NewState.RightStickY = FIX_AXIS(NewState.RightStickY);
|
NewState.DPadDown = ( tpad & SCE_PADLdown ) ? 255 : 0;
|
||||||
NewState.LeftStickX = FIX_AXIS(NewState.LeftStickX);
|
NewState.DPadLeft = ( tpad & SCE_PADLleft ) ? 255 : 0;
|
||||||
NewState.LeftStickY = FIX_AXIS(NewState.LeftStickY);
|
NewState.DPadRight = ( tpad & SCE_PADLright ) ? 255 : 0;
|
||||||
|
NewState.Triangle = ( tpad & SCE_PADRup ) ? 255 : 0;
|
||||||
|
NewState.Cross = ( tpad & SCE_PADRdown ) ? 255 : 0;
|
||||||
|
NewState.Square = ( tpad & SCE_PADRleft ) ? 255 : 0;
|
||||||
|
NewState.Circle = ( tpad & SCE_PADRright ) ? 255 : 0;
|
||||||
|
NewState.Start = ( tpad & SCE_PADstart ) ? 255 : 0;
|
||||||
|
NewState.Select = ( tpad & SCE_PADselect ) ? 255 : 0;
|
||||||
|
NewState.LeftShoulder1 = ( tpad & SCE_PADL1 ) ? 255 : 0;
|
||||||
|
NewState.LeftShoulder2 = ( tpad & SCE_PADL2 ) ? 255 : 0;
|
||||||
|
NewState.RightShoulder1 = ( tpad & SCE_PADR1 ) ? 255 : 0;
|
||||||
|
NewState.RightShoulder2 = ( tpad & SCE_PADR2 ) ? 255 : 0;
|
||||||
|
NewState.LeftShock = ( tpad & SCE_PADi ) ? 255 : 0;
|
||||||
|
NewState.RightShock = ( tpad & SCE_PADj ) ? 255 : 0;
|
||||||
|
NewState.RightStickX = (short)rdata[4];
|
||||||
|
NewState.RightStickY = (short)rdata[5];
|
||||||
|
NewState.LeftStickX = (short)rdata[6];
|
||||||
|
NewState.LeftStickY = (short)rdata[7];
|
||||||
|
|
||||||
#undef FIX_AXIS
|
#define CLAMP_AXIS(x) (((x) < 43 && (x) >= -42) ? 0 : (((x) > 0) ? (Max((x)-42, 0)*127/85) : Min((x)+42, 0)*127/85))
|
||||||
#undef CLAMP_AXIS
|
#define FIX_AXIS(x) CLAMP_AXIS((x)-128)
|
||||||
}
|
|
||||||
}
|
|
||||||
else if ( (rterm_id>>4) == 4 ) // Controller (digital)
|
|
||||||
{
|
|
||||||
if ( pad == 0 )
|
|
||||||
bObsoleteControllerMessage = true;
|
|
||||||
NewState.Clear();
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( NewState.IsAnyButtonPressed() )
|
NewState.RightStickX = FIX_AXIS(NewState.RightStickX);
|
||||||
LastTimeTouched = CTimer::GetTimeInMilliseconds();
|
NewState.RightStickY = FIX_AXIS(NewState.RightStickY);
|
||||||
|
NewState.LeftStickX = FIX_AXIS(NewState.LeftStickX);
|
||||||
|
NewState.LeftStickY = FIX_AXIS(NewState.LeftStickY);
|
||||||
|
|
||||||
break;
|
#undef FIX_AXIS
|
||||||
}
|
#undef CLAMP_AXIS
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if ( (rterm_id>>4) == 4 ) // Controller (digital)
|
||||||
|
{
|
||||||
|
if ( pad == 0 )
|
||||||
|
bObsoleteControllerMessage = true;
|
||||||
|
NewState.Clear();
|
||||||
|
}
|
||||||
|
|
||||||
if ( ++iCurrHornHistory >= HORNHISTORY_SIZE )
|
if ( NewState.IsAnyButtonPressed() )
|
||||||
iCurrHornHistory = 0;
|
LastTimeTouched = CTimer::GetTimeInMilliseconds();
|
||||||
|
|
||||||
bHornHistory[iCurrHornHistory] = GetHorn();
|
break;
|
||||||
NewState.Clear();
|
}
|
||||||
return;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( pad == 0 )
|
if ( ++iCurrHornHistory >= HORNHISTORY_SIZE )
|
||||||
{
|
iCurrHornHistory = 0;
|
||||||
bOldDisplayNoControllerMessage = bDisplayNoControllerMessage;
|
|
||||||
if ( state == scePadStateDiscon )
|
|
||||||
{
|
|
||||||
bDisplayNoControllerMessage = true;
|
|
||||||
Phase = 0;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
bDisplayNoControllerMessage = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( ++iCurrHornHistory >= HORNHISTORY_SIZE )
|
bHornHistory[iCurrHornHistory] = GetHorn();
|
||||||
iCurrHornHistory = 0;
|
NewState.Clear();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
bHornHistory[iCurrHornHistory] = GetHorn();
|
if ( pad == 0 )
|
||||||
|
{
|
||||||
|
bOldDisplayNoControllerMessage = bDisplayNoControllerMessage;
|
||||||
|
if ( state == scePadStateDiscon )
|
||||||
|
{
|
||||||
|
bDisplayNoControllerMessage = true;
|
||||||
|
Phase = 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
bDisplayNoControllerMessage = false;
|
||||||
|
}
|
||||||
|
|
||||||
if ( !bDisplayNoControllerMessage )
|
if ( ++iCurrHornHistory >= HORNHISTORY_SIZE )
|
||||||
CGame::bDemoMode = false;
|
iCurrHornHistory = 0;
|
||||||
|
|
||||||
|
bHornHistory[iCurrHornHistory] = GetHorn();
|
||||||
|
|
||||||
|
if ( !bDisplayNoControllerMessage )
|
||||||
|
CGame::bDemoMode = false;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if (defined GTA_PS2 || defined FIX_BUGS)
|
#if (defined GTA_PS2 || defined FIX_BUGS)
|
||||||
if (!CRecordDataForGame::IsPlayingBack() && !CRecordDataForChase::ShouldThisPadBeLeftAlone(pad))
|
if (!CRecordDataForGame::IsPlayingBack() && !CRecordDataForChase::ShouldThisPadBeLeftAlone(pad))
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
#ifdef RW_DC
|
#ifdef RW_DC
|
||||||
if (((NewState.RightStickY > 64 && OldState.RightStickY > 64)) || ((NewState.RightStickY) < -64 && (OldState.RightStickY < -64)))
|
if (((NewState.RightStickY > 64 && OldState.RightStickY > 64)) || ((NewState.RightStickY) < -64 && (OldState.RightStickY < -64)))
|
||||||
{
|
{
|
||||||
CPad::GetPad(0)->IsDualAnalog = true;
|
// if (contMaple == nullptr)
|
||||||
}
|
// CPad::GetPad(0)->IsDualAnalog = false;
|
||||||
|
// else
|
||||||
|
CPad::GetPad(0)->IsDualAnalog = true;
|
||||||
|
}
|
||||||
|
|
||||||
if (pad == 0)
|
//CPad::IsDualAnalog = cont_has_capabilities(contMaple, CONT_CAPABILITIES_DUAL_ANALOG); //Query controller about Dual analog capabilities
|
||||||
{
|
|
||||||
if (contMaple == NULL)
|
if (pad == 0)
|
||||||
{
|
{
|
||||||
CPad::GetPad(0)->IsDualAnalog = false;
|
if (contMaple == NULL)
|
||||||
NewState.DPadUp = 0;
|
{
|
||||||
NewState.DPadDown = 0;
|
CPad::GetPad(0)->IsDualAnalog = false;
|
||||||
NewState.DPadLeft = 0;
|
NewState.DPadUp = 0;
|
||||||
NewState.DPadRight = 0;
|
NewState.DPadDown = 0;
|
||||||
NewState.A = 0;
|
NewState.DPadLeft = 0;
|
||||||
NewState.B = 0;
|
NewState.DPadRight = 0;
|
||||||
NewState.C = 0;
|
NewState.A = 0;
|
||||||
NewState.D = 0;
|
NewState.B = 0;
|
||||||
NewState.X = 0;
|
NewState.C = 0;
|
||||||
NewState.Y = 0;
|
NewState.D = 0;
|
||||||
NewState.Z = 0;
|
NewState.X = 0;
|
||||||
NewState.Start = 0;
|
NewState.Y = 0;
|
||||||
NewState.RightTrigger = 0;
|
NewState.Z = 0;
|
||||||
NewState.LeftTrigger = 0;
|
NewState.Start = 0;
|
||||||
NewState.LeftStickX = 0;
|
NewState.RightTrigger = 0;
|
||||||
NewState.LeftStickY = 0;
|
NewState.LeftTrigger = 0;
|
||||||
NewState.RightStickX = 0;
|
NewState.LeftStickX = 0;
|
||||||
NewState.RightStickY = 0;
|
NewState.LeftStickY = 0;
|
||||||
NewState.RightShock = 0;
|
NewState.RightStickX = 0;
|
||||||
NewState.LeftShoulder1 = 0;
|
NewState.RightStickY = 0;
|
||||||
NewState.Cross = 0; // Added for safety
|
NewState.RightShock = 0;
|
||||||
|
NewState.LeftShoulder1 = 0;
|
||||||
|
NewState.Cross = 0; // Added for safety
|
||||||
NewState.Triangle = 0; // Added for safety
|
NewState.Triangle = 0; // Added for safety
|
||||||
NewState.Circle = 0; // Added for safety
|
NewState.Circle = 0; // Added for safety
|
||||||
NewState.Square = 0; // Added for safety
|
NewState.Square = 0; // Added for safety
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
NewState.DPadUp = state->dpad_up;
|
NewState.DPadUp = state->dpad_up; //This part could be inside a compiler directive to preserve the old code and just use this block if compil
|
||||||
NewState.DPadDown = state->dpad_down;
|
NewState.DPadDown = state->dpad_down; //I also changed CControllerState inside Pad.h and created these values for DC controllers
|
||||||
NewState.DPadLeft = state->dpad_left;
|
NewState.DPadLeft = state->dpad_left;
|
||||||
NewState.DPadRight = state->dpad_right;
|
NewState.DPadRight = state->dpad_right;
|
||||||
NewState.A = state->a;
|
NewState.A = state->a;
|
||||||
NewState.B = state->b;
|
NewState.B = state->b;
|
||||||
NewState.C = state->c;
|
NewState.C = state->c;
|
||||||
NewState.D = state->d;
|
NewState.D = state->d;
|
||||||
NewState.X = state->x;
|
NewState.X = state->x;
|
||||||
NewState.Y = state->y;
|
NewState.Y = state->y;
|
||||||
NewState.Z = state->z;
|
NewState.Z = state->z;
|
||||||
NewState.Start = state->start;
|
NewState.Start = state->start;
|
||||||
NewState.RightTrigger = state->rtrig;
|
NewState.RightTrigger = state->rtrig;
|
||||||
NewState.LeftTrigger = state->ltrig;
|
NewState.LeftTrigger = state->ltrig;
|
||||||
NewState.LeftStickX = state->joyx;
|
NewState.LeftStickX = state->joyx;
|
||||||
NewState.LeftStickY = state->joyy;
|
NewState.LeftStickY = state->joyy;
|
||||||
NewState.RightStickX = state->joy2x;
|
NewState.RightStickX = state->joy2x;
|
||||||
NewState.RightStickY = state->joy2y;
|
NewState.RightStickY = state->joy2y;
|
||||||
NewState.RightShock = state->dpad_left;
|
NewState.RightShock = state->dpad_left;
|
||||||
NewState.LeftShoulder1 = (state->rtrig > 128 && state->ltrig > 128) ? 255 : 0;
|
NewState.LeftShoulder1 = (state->rtrig > 128 && state->ltrig > 128) ? 255 : 0;
|
||||||
// Add PS2-style A and B mappings, This may be the only solution for purchase items issue ?...
|
// Add PS2-style A and B mappings, This may be the only solution for purchase items issue ?...
|
||||||
//Further more we can add other PS2 specific mapping here as certain `bool CPad::` functions are not available for mapping down below.
|
//Further more we can add other PS2 specific mapping here as certain `bool CPad::` functions are not available for mapping down below.
|
||||||
NewState.Cross = NewState.A; // A -> Cross (accept/purchase)
|
NewState.Cross = NewState.A; // A -> Cross (accept/purchase)
|
||||||
NewState.Triangle = NewState.B; // B -> Triangle (exit)
|
NewState.Triangle = NewState.B; // B -> Triangle (exit)
|
||||||
NewState.Circle = NewState.X; // Optional: X -> Circle
|
NewState.Circle = NewState.X; // Optional: X -> Circle
|
||||||
NewState.Square = NewState.Y; // Optional: Y -> Square
|
NewState.Square = NewState.Y; // Optional: Y -> Square
|
||||||
}
|
}
|
||||||
}
|
|
||||||
else
|
}
|
||||||
{
|
|
||||||
NewState.DPadUp = 0;
|
else
|
||||||
NewState.DPadDown = 0;
|
{
|
||||||
NewState.DPadLeft = 0;
|
NewState.DPadUp = 0;
|
||||||
NewState.DPadRight = 0;
|
NewState.DPadDown = 0;
|
||||||
NewState.A = 0;
|
NewState.DPadLeft = 0;
|
||||||
NewState.B = 0;
|
NewState.DPadRight = 0;
|
||||||
NewState.C = 0;
|
NewState.A = 0;
|
||||||
NewState.D = 0;
|
NewState.B = 0;
|
||||||
NewState.X = 0;
|
NewState.C = 0;
|
||||||
NewState.Y = 0;
|
NewState.D = 0;
|
||||||
NewState.Z = 0;
|
NewState.X = 0;
|
||||||
NewState.Start = 0;
|
NewState.Y = 0;
|
||||||
NewState.RightTrigger = 0;
|
NewState.Z = 0;
|
||||||
NewState.LeftTrigger = 0;
|
NewState.Start = 0;
|
||||||
NewState.LeftStickX = 0;
|
NewState.RightTrigger = 0;
|
||||||
NewState.LeftStickY = 0;
|
NewState.LeftTrigger = 0;
|
||||||
NewState.RightStickX = 0;
|
NewState.LeftStickX = 0;
|
||||||
NewState.RightStickY = 0;
|
NewState.LeftStickY = 0;
|
||||||
NewState.RightShock = 0;
|
NewState.RightStickX = 0;
|
||||||
NewState.LeftShoulder1 = 0;
|
NewState.RightStickY = 0;
|
||||||
NewState.Cross = 0; // Added for safety
|
NewState.RightShock = 0;
|
||||||
NewState.Triangle = 0; // Added for safety
|
NewState.LeftShoulder1 = 0;
|
||||||
NewState.Circle = 0; // Added for safety
|
NewState.Cross = 0; // Added for safety
|
||||||
NewState.Square = 0; // Added for safety
|
NewState.Triangle = 0; // Added for safety
|
||||||
}
|
NewState.Circle = 0; // Added for safety
|
||||||
|
NewState.Square = 0; // Added for safety
|
||||||
|
}
|
||||||
|
|
||||||
|
// if (old_contMaple == nullptr && contMaple != nullptr)
|
||||||
|
// {
|
||||||
|
// CPad::GetPad(0)->IsDualAnalog = false;
|
||||||
|
// NewState.DPadUp = 0;
|
||||||
|
// NewState.DPadDown = 0;
|
||||||
|
// NewState.DPadLeft = 0;
|
||||||
|
// NewState.DPadRight = 0;
|
||||||
|
// NewState.A = 0;
|
||||||
|
// NewState.B = 0;
|
||||||
|
// NewState.C = 0;
|
||||||
|
// NewState.D = 0;
|
||||||
|
// NewState.X = 0;
|
||||||
|
// NewState.Y = 0;
|
||||||
|
// NewState.Z = 0;
|
||||||
|
// NewState.Start = 0;
|
||||||
|
// NewState.RightTrigger = 0;
|
||||||
|
// NewState.LeftTrigger = 0;
|
||||||
|
// NewState.LeftStickX = 0;
|
||||||
|
// NewState.LeftStickY = 0;
|
||||||
|
// NewState.RightStickX = 0;
|
||||||
|
// NewState.RightStickY = 0;
|
||||||
|
// NewState.RightShock = 0;
|
||||||
|
// }
|
||||||
|
|
||||||
#else
|
#else
|
||||||
NewState = ReconcileTwoControllersInput(PCTempKeyState, PCTempJoyState);
|
NewState = ReconcileTwoControllersInput(PCTempKeyState, PCTempJoyState);
|
||||||
NewState = ReconcileTwoControllersInput(PCTempMouseState, NewState);
|
NewState = ReconcileTwoControllersInput(PCTempMouseState, NewState);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
PCTempJoyState.Clear();
|
PCTempJoyState.Clear();
|
||||||
PCTempKeyState.Clear();
|
PCTempKeyState.Clear();
|
||||||
PCTempMouseState.Clear();
|
PCTempMouseState.Clear();
|
||||||
|
|
||||||
ProcessPCSpecificStuff();
|
ProcessPCSpecificStuff();
|
||||||
|
|
||||||
if (NewState.CheckForInput())
|
if (NewState.CheckForInput())
|
||||||
LastTimeTouched = CTimer::GetTimeInMilliseconds();
|
LastTimeTouched = CTimer::GetTimeInMilliseconds();
|
||||||
|
|
||||||
if ( ++iCurrHornHistory >= HORNHISTORY_SIZE )
|
if ( ++iCurrHornHistory >= HORNHISTORY_SIZE )
|
||||||
iCurrHornHistory = 0;
|
iCurrHornHistory = 0;
|
||||||
|
|
||||||
bHornHistory[iCurrHornHistory] = GetHorn();
|
bHornHistory[iCurrHornHistory] = GetHorn();
|
||||||
|
|
||||||
for (int32 i = DRUNK_STEERING_BUFFER_SIZE - 2; i >= 0; i--) {
|
for (int32 i = DRUNK_STEERING_BUFFER_SIZE - 2; i >= 0; i--) {
|
||||||
SteeringLeftRightBuffer[i + 1] = SteeringLeftRightBuffer[i];
|
SteeringLeftRightBuffer[i + 1] = SteeringLeftRightBuffer[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( !bDisplayNoControllerMessage )
|
if ( !bDisplayNoControllerMessage )
|
||||||
CGame::bDemoMode = false;
|
CGame::bDemoMode = false;
|
||||||
|
|
||||||
if ( JustOutOfFrontend != 0 )
|
if ( JustOutOfFrontend != 0 )
|
||||||
--JustOutOfFrontend;
|
--JustOutOfFrontend;
|
||||||
|
|
||||||
|
|
||||||
|
//auto old_contMaple = contMaple;
|
||||||
|
//auto n_dev = maple_enum_count();
|
||||||
|
contMaple = maple_enum_type(0, MAPLE_FUNC_CONTROLLER);
|
||||||
|
state = (cont_state_t *)maple_dev_status(contMaple);
|
||||||
|
|
||||||
contMaple = maple_enum_type(0, MAPLE_FUNC_CONTROLLER);
|
|
||||||
state = (cont_state_t *)maple_dev_status(contMaple);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void CPad::DoCheats(void)
|
void CPad::DoCheats(void)
|
||||||
@@ -3492,7 +3531,7 @@ bool CPad::CycleCameraModeJustDown(void)
|
|||||||
case 0: //audible feedback when changing camera ?
|
case 0: //audible feedback when changing camera ?
|
||||||
|
|
||||||
{
|
{
|
||||||
return !!(NewState.DPadUp && !OldState.DPadUp);
|
result = !!(NewState.DPadUp && !OldState.DPadUp);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -3514,7 +3553,7 @@ bool CPad::CycleCameraModeJustDown(void)
|
|||||||
{
|
{
|
||||||
switch (CURMODE)
|
switch (CURMODE)
|
||||||
{
|
{
|
||||||
case 1:
|
case 1: //audible feedback when changing camera ?
|
||||||
{
|
{
|
||||||
result = !!(NewState.DPadUp && !OldState.DPadUp);
|
result = !!(NewState.DPadUp && !OldState.DPadUp);
|
||||||
break;
|
break;
|
||||||
|
Reference in New Issue
Block a user