2019-06-12 20:35:26 -04:00
# pragma warning( push )
# pragma warning( disable : 4005)
2020-04-26 06:25:03 -04:00
# if defined RW_D3D9 || defined RWLIBS
2019-06-12 20:35:26 -04:00
# define DIRECTINPUT_VERSION 0x0800
# include <dinput.h>
2020-04-26 06:25:03 -04:00
# endif
2019-06-12 20:35:26 -04:00
# pragma warning( pop )
2019-05-15 10:52:37 -04:00
# include "common.h"
2020-04-26 06:25:03 -04:00
# include "crossplatform.h"
2020-03-27 14:54:35 -04:00
# ifdef XINPUT
2020-04-19 12:34:08 -04:00
# include <xinput.h>
2020-03-27 22:53:42 -04:00
# pragma comment( lib, "Xinput9_1_0.lib" )
2020-03-27 14:54:35 -04:00
# endif
2020-04-17 09:31:11 -04:00
2019-05-15 10:52:37 -04:00
# include "Pad.h"
2019-06-12 20:35:26 -04:00
# include "ControllerConfig.h"
# include "Timer.h"
# include "Frontend.h"
# include "Camera.h"
# include "Game.h"
# include "CutsceneMgr.h"
# include "Font.h"
2019-07-01 15:46:44 -04:00
# include "Hud.h"
2019-06-12 20:35:26 -04:00
# include "Text.h"
# include "Timer.h"
2020-04-10 04:03:38 -04:00
# include "Record.h"
2019-06-12 20:35:26 -04:00
# include "World.h"
# include "Vehicle.h"
# include "Ped.h"
# include "Population.h"
2020-04-10 19:03:42 -04:00
# include "Record.h"
2019-06-12 20:35:26 -04:00
# include "Replay.h"
# include "Weather.h"
2020-04-08 17:16:29 -04:00
# include "Streaming.h"
# include "PathFind.h"
# include "Wanted.h"
# include "General.h"
2019-05-15 10:52:37 -04:00
2020-04-17 01:54:14 -04:00
CPad Pads [ MAX_PADS ] ;
CMousePointerStateHelper MousePointerStateHelper ;
2019-06-01 23:00:38 -04:00
2020-04-17 01:54:14 -04:00
bool CPad : : bDisplayNoControllerMessage ;
bool CPad : : bObsoleteControllerMessage ;
2020-04-08 19:52:38 -04:00
bool CPad : : bOldDisplayNoControllerMessage ;
2020-04-17 01:54:14 -04:00
bool CPad : : m_bMapPadOneToPadTwo ;
2019-06-12 20:35:26 -04:00
2020-04-17 01:54:14 -04:00
CKeyboardState CPad : : OldKeyState ;
CKeyboardState CPad : : NewKeyState ;
CKeyboardState CPad : : TempKeyState ;
2019-05-15 10:52:37 -04:00
2019-11-09 10:17:54 -05:00
char CPad : : KeyBoardCheatString [ 20 ] ;
2019-06-12 20:35:26 -04:00
2020-04-17 01:54:14 -04:00
CMouseControllerState CPad : : OldMouseControllerState ;
CMouseControllerState CPad : : NewMouseControllerState ;
CMouseControllerState CPad : : PCTempMouseControllerState ;
2019-05-15 10:52:37 -04:00
2019-06-12 20:35:26 -04:00
_TODO ( " gbFastTime " ) ;
2020-04-17 01:54:14 -04:00
extern bool gbFastTime ;
2019-05-31 13:02:26 -04:00
2020-04-08 17:16:29 -04:00
void WeaponCheat ( )
{
CHud : : SetHelpMessage ( TheText . Get ( " CHEAT2 " ) , true ) ;
FindPlayerPed ( ) - > GiveWeapon ( WEAPONTYPE_BASEBALLBAT , 0 ) ;
FindPlayerPed ( ) - > GiveWeapon ( WEAPONTYPE_COLT45 , 100 ) ;
FindPlayerPed ( ) - > GiveWeapon ( WEAPONTYPE_UZI , 100 ) ;
FindPlayerPed ( ) - > GiveWeapon ( WEAPONTYPE_SHOTGUN , 20 ) ;
FindPlayerPed ( ) - > GiveWeapon ( WEAPONTYPE_AK47 , 200 ) ;
FindPlayerPed ( ) - > GiveWeapon ( WEAPONTYPE_M16 , 200 ) ;
FindPlayerPed ( ) - > GiveWeapon ( WEAPONTYPE_SNIPERRIFLE , 5 ) ;
FindPlayerPed ( ) - > GiveWeapon ( WEAPONTYPE_ROCKETLAUNCHER , 5 ) ;
FindPlayerPed ( ) - > GiveWeapon ( WEAPONTYPE_MOLOTOV , 5 ) ;
FindPlayerPed ( ) - > GiveWeapon ( WEAPONTYPE_GRENADE , 5 ) ;
FindPlayerPed ( ) - > GiveWeapon ( WEAPONTYPE_FLAMETHROWER , 200 ) ;
}
void HealthCheat ( )
{
CHud : : SetHelpMessage ( TheText . Get ( " CHEAT3 " ) , true ) ;
FindPlayerPed ( ) - > m_fHealth = 100.0f ;
if ( FindPlayerVehicle ( ) ) {
FindPlayerVehicle ( ) - > m_fHealth = 1000.0f ;
if ( FindPlayerVehicle ( ) - > m_vehType = = VEHICLE_TYPE_CAR )
( ( CAutomobile * ) FindPlayerVehicle ( ) ) - > Damage . SetEngineStatus ( 0 ) ;
}
}
void TankCheat ( )
{
CHud : : SetHelpMessage ( TheText . Get ( " CHEAT1 " ) , true ) ;
CStreaming : : RequestModel ( MI_RHINO , 0 ) ;
CStreaming : : LoadAllRequestedModels ( false ) ;
if ( CStreaming : : ms_aInfoForModel [ MI_RHINO ] . m_loadState = = STREAMSTATE_LOADED ) {
CHud : : SetHelpMessage ( TheText . Get ( " CHEAT1 " ) , true ) ;
int32 node = ThePaths . FindNodeClosestToCoors ( FindPlayerCoors ( ) , PATH_CAR , 100.0f ) ;
if ( node < 0 ) return ;
# ifdef FIX_BUGS
CAutomobile * tank = new CAutomobile ( MI_RHINO , RANDOM_VEHICLE ) ;
# else
CAutomobile * tank = new CAutomobile ( MI_RHINO , MISSION_VEHICLE ) ;
# endif
if ( tank ! = nil ) {
CVector pos = ThePaths . m_pathNodes [ node ] . pos ;
pos . z + = 4.0f ;
tank - > GetPosition ( ) = pos ;
tank - > SetOrientation ( 0.0f , 0.0f , DEGTORAD ( 200.0f ) ) ;
tank - > m_status = STATUS_ABANDONED ;
tank - > m_nDoorLock = CARLOCK_UNLOCKED ;
CWorld : : Add ( tank ) ;
}
}
}
void BlowUpCarsCheat ( )
{
CHud : : SetHelpMessage ( TheText . Get ( " CHEAT1 " ) , true ) ;
int i = CPools : : GetVehiclePool ( ) - > GetSize ( ) ;
while ( i - - > 0 ) {
if ( CVehicle * veh = CPools : : GetVehiclePool ( ) - > GetSlot ( i ) )
veh - > BlowUpCar ( nil ) ;
}
}
void ChangePlayerCheat ( )
{
int modelId ;
if ( FindPlayerPed ( ) - > IsPedInControl ( ) & & CModelInfo : : GetModelInfo ( " player " , nil ) ) {
CHud : : SetHelpMessage ( TheText . Get ( " CHEAT1 " ) , true ) ;
CPlayerPed * ped = FindPlayerPed ( ) ;
AssocGroupId AnimGrp = ped - > m_animGroup ;
do
{
do
modelId = CGeneral : : GetRandomNumberInRange ( 0 , MI_CAS_WOM + 1 ) ;
while ( ! CModelInfo : : GetModelInfo ( modelId ) ) ;
} while ( modelId > = MI_SPECIAL01 & & modelId < = MI_SPECIAL04 | | modelId = = MI_TAXI_D ) ;
uint8 flags = CStreaming : : ms_aInfoForModel [ modelId ] . m_flags ;
ped - > DeleteRwObject ( ) ;
CStreaming : : RequestModel ( modelId , STREAMFLAGS_DEPENDENCY | STREAMFLAGS_DONT_REMOVE ) ;
CStreaming : : LoadAllRequestedModels ( false ) ;
ped - > m_modelIndex = - 1 ;
ped - > SetModelIndex ( modelId ) ;
ped - > m_animGroup = AnimGrp ;
if ( modelId ! = MI_PLAYER ) {
if ( ! ( flags & STREAMFLAGS_DONT_REMOVE ) )
CStreaming : : SetModelIsDeletable ( modelId ) ;
}
}
}
void MayhemCheat ( )
{
CHud : : SetHelpMessage ( TheText . Get ( " CHEAT1 " ) , true ) ;
for ( int i = PEDTYPE_CIVMALE ; i < PEDTYPE_SPECIAL ; i + + )
CPedType : : SetThreats ( i , PED_FLAG_PLAYER1 | PED_FLAG_PLAYER2 | PED_FLAG_PLAYER3 | PED_FLAG_PLAYER4 |
PED_FLAG_CIVMALE | PED_FLAG_CIVFEMALE | PED_FLAG_COP | PED_FLAG_GANG1 |
PED_FLAG_GANG2 | PED_FLAG_GANG3 | PED_FLAG_GANG4 | PED_FLAG_GANG5 |
PED_FLAG_GANG6 | PED_FLAG_GANG7 | PED_FLAG_GANG8 | PED_FLAG_GANG9 |
PED_FLAG_EMERGENCY | PED_FLAG_PROSTITUTE | PED_FLAG_CRIMINAL | PED_FLAG_SPECIAL ) ;
}
void EverybodyAttacksPlayerCheat ( )
{
CHud : : SetHelpMessage ( TheText . Get ( " CHEAT1 " ) , true ) ;
for ( int i = PEDTYPE_CIVMALE ; i < PEDTYPE_SPECIAL ; i + + )
CPedType : : AddThreat ( i , PED_FLAG_PLAYER1 ) ;
}
void WeaponsForAllCheat ( )
{
CHud : : SetHelpMessage ( TheText . Get ( " CHEAT1 " ) , true ) ;
CPopulation : : ms_bGivePedsWeapons = ! CPopulation : : ms_bGivePedsWeapons ;
}
void FastTimeCheat ( )
{
CHud : : SetHelpMessage ( TheText . Get ( " CHEAT1 " ) , true ) ;
if ( CTimer : : GetTimeScale ( ) < 4.0f )
CTimer : : SetTimeScale ( CTimer : : GetTimeScale ( ) * 2.0f ) ;
}
void SlowTimeCheat ( )
{
CHud : : SetHelpMessage ( TheText . Get ( " CHEAT1 " ) , true ) ;
if ( CTimer : : GetTimeScale ( ) > 0.25f )
CTimer : : SetTimeScale ( CTimer : : GetTimeScale ( ) * 0.5f ) ;
}
void MoneyCheat ( )
{
CWorld : : Players [ CWorld : : PlayerInFocus ] . m_nMoney + = 250000 ;
CHud : : SetHelpMessage ( TheText . Get ( " CHEAT6 " ) , true ) ;
}
void ArmourCheat ( )
{
CHud : : SetHelpMessage ( TheText . Get ( " CHEAT4 " ) , true ) ;
FindPlayerPed ( ) - > m_fArmour = 100.0f ;
}
void WantedLevelUpCheat ( )
{
CHud : : SetHelpMessage ( TheText . Get ( " CHEAT5 " ) , true ) ;
2020-04-19 12:34:08 -04:00
FindPlayerPed ( ) - > SetWantedLevel ( Min ( FindPlayerPed ( ) - > m_pWanted - > m_nWantedLevel + 2 , 6 ) ) ;
2020-04-08 17:16:29 -04:00
}
void WantedLevelDownCheat ( )
{
CHud : : SetHelpMessage ( TheText . Get ( " CHEAT5 " ) , true ) ;
FindPlayerPed ( ) - > SetWantedLevel ( 0 ) ;
}
void SunnyWeatherCheat ( )
{
CHud : : SetHelpMessage ( TheText . Get ( " CHEAT7 " ) , true ) ;
CWeather : : ForceWeatherNow ( WEATHER_SUNNY ) ;
}
void CloudyWeatherCheat ( )
{
CHud : : SetHelpMessage ( TheText . Get ( " CHEAT7 " ) , true ) ;
CWeather : : ForceWeatherNow ( WEATHER_CLOUDY ) ;
}
void RainyWeatherCheat ( )
{
CHud : : SetHelpMessage ( TheText . Get ( " CHEAT7 " ) , true ) ;
CWeather : : ForceWeatherNow ( WEATHER_RAINY ) ;
}
void FoggyWeatherCheat ( )
{
CHud : : SetHelpMessage ( TheText . Get ( " CHEAT7 " ) , true ) ;
CWeather : : ForceWeatherNow ( WEATHER_FOGGY ) ;
}
void FastWeatherCheat ( )
{
CHud : : SetHelpMessage ( TheText . Get ( " CHEAT1 " ) , true ) ;
gbFastTime = ! gbFastTime ;
}
void OnlyRenderWheelsCheat ( )
{
CHud : : SetHelpMessage ( TheText . Get ( " CHEAT1 " ) , true ) ;
CVehicle : : bWheelsOnlyCheat = ! CVehicle : : bWheelsOnlyCheat ;
}
void ChittyChittyBangBangCheat ( )
{
CHud : : SetHelpMessage ( TheText . Get ( " CHEAT1 " ) , true ) ;
CVehicle : : bAllDodosCheat = ! CVehicle : : bAllDodosCheat ;
}
void StrongGripCheat ( )
{
CHud : : SetHelpMessage ( TheText . Get ( " CHEAT1 " ) , true ) ;
CVehicle : : bCheat3 = ! CVehicle : : bCheat3 ;
}
void NastyLimbsCheat ( )
{
CPed : : bNastyLimbsCheat = ! CPed : : bNastyLimbsCheat ;
}
2019-06-12 20:35:26 -04:00
//////////////////////////////////////////////////////////////////////////
2019-05-30 15:24:47 -04:00
2019-07-01 15:46:44 -04:00
# ifdef KANGAROO_CHEAT
void KangarooCheat ( )
{
wchar * string ;
CPed * playerPed = FindPlayerPed ( ) ;
int m_fMass ;
if ( playerPed - > m_ped_flagI80 ) {
string = TheText . Get ( " CHEATOF " ) ;
m_fMass = 70.0f ;
} else {
string = TheText . Get ( " CHEAT1 " ) ;
m_fMass = 15.0f ;
}
2020-04-08 17:16:29 -04:00
CHud : : SetHelpMessage ( string , true ) ;
2019-07-01 15:46:44 -04:00
playerPed - > m_ped_flagI80 = ! playerPed - > m_ped_flagI80 ;
playerPed - > m_fMass = m_fMass ;
playerPed - > m_fAirResistance = 0.4f / m_fMass ;
}
# endif
2020-04-25 14:25:14 -04:00
# ifdef ALLCARSHELI_CHEAT
void AllCarsHeliCheat ( void )
{
wchar * string ;
if ( bAllCarCheat ) {
string = TheText . Get ( " CHEATOF " ) ;
bAllCarCheat = false ;
}
else {
string = TheText . Get ( " CHEAT1 " ) ;
bAllCarCheat = true ;
}
CHud : : SetHelpMessage ( string , true ) ;
}
# endif
# ifdef ALT_DODO_CHEAT
void AltDodoCheat ( void )
{
wchar * string ;
if ( CVehicle : : bAltDodoCheat ) {
string = TheText . Get ( " CHEATOF " ) ;
CVehicle : : bAltDodoCheat = false ;
}
else {
string = TheText . Get ( " CHEAT1 " ) ;
CVehicle : : bAltDodoCheat = true ;
}
CHud : : SetHelpMessage ( string , true ) ;
}
# endif
2019-05-15 10:52:37 -04:00
void
CControllerState : : Clear ( void )
{
2019-06-12 20:35:26 -04:00
LeftStickX = LeftStickY = RightStickX = RightStickY = 0 ;
LeftShoulder1 = LeftShoulder2 = RightShoulder1 = RightShoulder2 = 0 ;
DPadUp = DPadDown = DPadLeft = DPadRight = 0 ;
Start = Select = 0 ;
Square = Triangle = Cross = Circle = 0 ;
LeftShock = RightShock = 0 ;
2019-05-29 12:06:33 -04:00
NetworkTalk = 0 ;
}
2019-06-12 20:35:26 -04:00
void CKeyboardState : : Clear ( )
{
2019-06-16 18:16:38 -04:00
for ( int32 i = 0 ; i < 12 ; i + + )
2019-06-12 20:35:26 -04:00
F [ i ] = 0 ;
2019-06-16 18:16:38 -04:00
for ( int32 i = 0 ; i < 256 ; i + + )
2019-06-12 20:35:26 -04:00
VK_KEYS [ i ] = 0 ;
ESC = INS = DEL = HOME = END = PGUP = PGDN = 0 ;
UP = DOWN = LEFT = RIGHT = 0 ;
NUMLOCK = 0 ;
DIV = MUL = SUB = ADD = 0 ;
DECIMAL = NUM1 = NUM2 = NUM3 = NUM4 = 0 ;
NUM5 = NUM6 = NUM7 = NUM8 = 0 ;
NUM9 = NUM0 = SCROLLLOCK = PAUSE = 0 ;
BACKSP = TAB = CAPSLOCK = EXTENTER = 0 ;
LSHIFT = SHIFT = RSHIFT = LCTRL = RCTRL = LALT = RALT = 0 ;
LWIN = RWIN = APPS = 0 ;
}
2020-04-08 23:20:44 -04:00
# ifdef GTA_PS2_STUFF
2020-04-08 19:52:38 -04:00
void CPad : : Initialise ( void )
{
for ( int i = 0 ; i < MAX_PADS ; i + + )
{
CPad : : GetPad ( i ) - > Clear ( true ) ;
CPad : : GetPad ( i ) - > Mode = 0 ;
}
bObsoleteControllerMessage = false ;
bOldDisplayNoControllerMessage = false ;
bDisplayNoControllerMessage = false ;
}
2020-04-08 23:20:44 -04:00
# endif
2020-04-08 19:52:38 -04:00
2019-06-16 18:16:38 -04:00
void CPad : : Clear ( bool bResetPlayerControls )
2019-06-12 20:35:26 -04:00
{
NewState . Clear ( ) ;
OldState . Clear ( ) ;
PCTempKeyState . Clear ( ) ;
PCTempJoyState . Clear ( ) ;
PCTempMouseState . Clear ( ) ;
NewKeyState . Clear ( ) ;
OldKeyState . Clear ( ) ;
TempKeyState . Clear ( ) ;
NewMouseControllerState . Clear ( ) ;
OldMouseControllerState . Clear ( ) ;
PCTempMouseControllerState . Clear ( ) ;
Phase = 0 ;
ShakeFreq = 0 ;
ShakeDur = 0 ;
if ( bResetPlayerControls )
2019-07-15 08:11:40 -04:00
DisablePlayerControls = PLAYERCONTROL_ENABLED ;
2019-06-12 20:35:26 -04:00
bApplyBrakes = false ;
2020-04-08 23:20:44 -04:00
for ( int32 i = 0 ; i < HORNHISTORY_SIZE ; i + + )
2019-06-12 20:35:26 -04:00
bHornHistory [ i ] = false ;
iCurrHornHistory = 0 ;
2020-04-08 23:20:44 -04:00
for ( int32 i = 0 ; i < ARRAY_SIZE ( CheatString ) ; i + + )
CheatString [ i ] = ' ' ;
2019-06-12 20:35:26 -04:00
LastTimeTouched = CTimer : : GetTimeInMilliseconds ( ) ;
AverageWeapon = 0 ;
AverageEntries = 0 ;
}
void CPad : : ClearMouseHistory ( )
{
PCTempMouseControllerState . Clear ( ) ;
NewMouseControllerState . Clear ( ) ;
OldMouseControllerState . Clear ( ) ;
}
2019-06-01 23:00:38 -04:00
CMouseControllerState : : CMouseControllerState ( )
{
LMB = 0 ;
RMB = 0 ;
MMB = 0 ;
WHEELUP = 0 ;
WHEELDN = 0 ;
MXB1 = 0 ;
MXB2 = 0 ;
x = 0.0f ;
y = 0.0f ;
}
void CMouseControllerState : : Clear ( )
{
LMB = 0 ;
RMB = 0 ;
MMB = 0 ;
WHEELUP = 0 ;
WHEELDN = 0 ;
MXB1 = 0 ;
MXB2 = 0 ;
}
CMouseControllerState CMousePointerStateHelper : : GetMouseSetUp ( )
{
2019-06-12 20:35:26 -04:00
CMouseControllerState state ;
2020-04-26 06:25:03 -04:00
# if defined RW_D3D9 || defined RWLIBS
2019-06-30 06:53:39 -04:00
if ( PSGLOBAL ( mouse ) = = nil )
2019-06-12 20:35:26 -04:00
_InputInitialiseMouse ( ) ;
2019-06-30 06:53:39 -04:00
if ( PSGLOBAL ( mouse ) ! = nil )
2019-06-12 20:35:26 -04:00
{
DIDEVCAPS devCaps ;
devCaps . dwSize = sizeof ( DIDEVCAPS ) ;
PSGLOBAL ( mouse ) - > GetCapabilities ( & devCaps ) ;
switch ( devCaps . dwButtons )
{
case 3 :
case 4 :
case 5 :
case 6 :
case 7 :
case 8 :
state . MMB = true ;
case 2 :
state . RMB = true ;
case 1 :
state . LMB = true ;
}
if ( devCaps . dwAxes = = 3 )
{
state . WHEELDN = true ;
state . WHEELUP = true ;
}
}
2020-04-26 06:25:03 -04:00
# else
// It seems there is no way to get number of buttons on mouse, so assign all buttons if we have mouse.
double xpos = 1.0f , ypos ;
glfwGetCursorPos ( PSGLOBAL ( window ) , & xpos , & ypos ) ;
if ( xpos ! = NULL ) {
state . MMB = true ;
state . RMB = true ;
state . LMB = true ;
state . WHEELDN = true ;
state . WHEELUP = true ;
}
# endif
2019-06-12 20:35:26 -04:00
return state ;
2019-06-01 23:00:38 -04:00
}
2019-06-12 20:35:26 -04:00
void CPad : : UpdateMouse ( )
2019-05-31 13:02:26 -04:00
{
2019-06-12 20:35:26 -04:00
if ( IsForegroundApp ( ) )
{
2020-04-26 06:25:03 -04:00
# if defined RW_D3D9 || defined RWLIBS
2019-06-30 06:53:39 -04:00
if ( PSGLOBAL ( mouse ) = = nil )
2019-06-12 20:35:26 -04:00
_InputInitialiseMouse ( ) ;
DIMOUSESTATE2 state ;
2019-06-30 06:53:39 -04:00
if ( PSGLOBAL ( mouse ) ! = nil & & SUCCEEDED ( _InputGetMouseState ( & state ) ) )
2019-06-12 20:35:26 -04:00
{
2019-06-16 18:16:38 -04:00
int32 signX = 1 ;
int32 signy = 1 ;
2019-06-12 20:35:26 -04:00
if ( ! FrontEndMenuManager . m_bMenuActive )
{
if ( MousePointerStateHelper . bInvertVertically )
signy = - 1 ;
if ( MousePointerStateHelper . bInvertHorizontally )
signX = - 1 ;
}
PCTempMouseControllerState . Clear ( ) ;
2019-06-16 18:16:38 -04:00
PCTempMouseControllerState . x = ( float ) ( signX * state . lX ) ;
PCTempMouseControllerState . y = ( float ) ( signy * state . lY ) ;
2019-06-12 20:35:26 -04:00
PCTempMouseControllerState . LMB = state . rgbButtons [ 0 ] & 128 ;
PCTempMouseControllerState . RMB = state . rgbButtons [ 1 ] & 128 ;
PCTempMouseControllerState . MMB = state . rgbButtons [ 2 ] & 128 ;
PCTempMouseControllerState . MXB1 = state . rgbButtons [ 3 ] & 128 ;
PCTempMouseControllerState . MXB2 = state . rgbButtons [ 4 ] & 128 ;
if ( state . lZ > 0 )
PCTempMouseControllerState . WHEELUP = 1 ;
else if ( state . lZ < 0 )
PCTempMouseControllerState . WHEELDN = 1 ;
OldMouseControllerState = NewMouseControllerState ;
NewMouseControllerState = PCTempMouseControllerState ;
}
2020-04-26 06:25:03 -04:00
# else
double xpos = 1.0f , ypos ;
glfwGetCursorPos ( PSGLOBAL ( window ) , & xpos , & ypos ) ;
if ( xpos = = NULL )
return ;
int32 signX = 1 ;
int32 signy = 1 ;
if ( ! FrontEndMenuManager . m_bMenuActive )
{
if ( MousePointerStateHelper . bInvertVertically )
signy = - 1 ;
if ( MousePointerStateHelper . bInvertHorizontally )
signX = - 1 ;
}
PCTempMouseControllerState . Clear ( ) ;
PCTempMouseControllerState . x = ( float ) ( signX * ( xpos - PSGLOBAL ( lastMousePos . x ) ) ) ;
PCTempMouseControllerState . y = ( float ) ( signy * ( ypos - PSGLOBAL ( lastMousePos . y ) ) ) ;
PCTempMouseControllerState . LMB = glfwGetMouseButton ( PSGLOBAL ( window ) , GLFW_MOUSE_BUTTON_LEFT ) ;
PCTempMouseControllerState . RMB = glfwGetMouseButton ( PSGLOBAL ( window ) , GLFW_MOUSE_BUTTON_RIGHT ) ;
PCTempMouseControllerState . MMB = glfwGetMouseButton ( PSGLOBAL ( window ) , GLFW_MOUSE_BUTTON_MIDDLE ) ;
PCTempMouseControllerState . MXB1 = glfwGetMouseButton ( PSGLOBAL ( window ) , GLFW_MOUSE_BUTTON_4 ) ;
PCTempMouseControllerState . MXB2 = glfwGetMouseButton ( PSGLOBAL ( window ) , GLFW_MOUSE_BUTTON_5 ) ;
if ( PSGLOBAL ( mouseWheel ) > 0 )
PCTempMouseControllerState . WHEELUP = 1 ;
else if ( PSGLOBAL ( mouseWheel ) < 0 )
PCTempMouseControllerState . WHEELDN = 1 ;
2020-04-29 11:53:05 -04:00
PSGLOBAL ( lastMousePos . x ) = xpos ;
PSGLOBAL ( lastMousePos . y ) = ypos ;
PSGLOBAL ( mouseWheel ) = 0.0f ;
2020-04-26 06:25:03 -04:00
OldMouseControllerState = NewMouseControllerState ;
NewMouseControllerState = PCTempMouseControllerState ;
# endif
2019-06-12 20:35:26 -04:00
}
}
CControllerState CPad : : ReconcileTwoControllersInput ( CControllerState const & State1 , CControllerState const & State2 )
{
static CControllerState ReconState ;
2019-05-31 13:02:26 -04:00
2019-06-12 20:35:26 -04:00
ReconState . Clear ( ) ;
2019-05-31 13:02:26 -04:00
2019-06-12 20:35:26 -04:00
# define _RECONCILE_BUTTON(button) \
{ if ( State1 . button | | State2 . button ) ReconState . button = 255 ; }
2019-05-31 13:02:26 -04:00
2019-06-12 20:35:26 -04:00
# define _RECONCILE_AXIS_POSITIVE(axis) \
2020-04-19 12:34:08 -04:00
{ if ( State1 . axis > = 0 & & State2 . axis > = 0 ) ReconState . axis = Max ( State1 . axis , State2 . axis ) ; }
2019-06-12 20:35:26 -04:00
# define _RECONCILE_AXIS_NEGATIVE(axis) \
2020-04-19 12:34:08 -04:00
{ if ( State1 . axis < = 0 & & State2 . axis < = 0 ) ReconState . axis = Min ( State1 . axis , State2 . axis ) ; }
2019-06-12 20:35:26 -04:00
# define _RECONCILE_AXIS(axis) \
{ _RECONCILE_AXIS_POSITIVE ( axis ) ; _RECONCILE_AXIS_NEGATIVE ( axis ) ; }
2019-05-31 13:02:26 -04:00
2019-06-12 20:35:26 -04:00
# define _FIX_AXIS_DIR(axis) \
{ if ( State1 . axis > 0 & & State2 . axis < 0 | | State1 . axis < 0 & & State2 . axis > 0 ) ReconState . axis = 0 ; }
# define _FIX_RECON_DIR(pos, neg, axis) \
{ if ( ( ReconState . pos | | ReconState . axis < 0 ) & & ( ReconState . neg | | ReconState . axis > 0 ) ) { ReconState . pos = 0 ; ReconState . neg = 0 ; ReconState . axis = 0 ; } }
_RECONCILE_BUTTON ( LeftShoulder1 ) ;
_RECONCILE_BUTTON ( LeftShoulder2 ) ;
_RECONCILE_BUTTON ( RightShoulder1 ) ;
_RECONCILE_BUTTON ( RightShoulder2 ) ;
_RECONCILE_BUTTON ( Start ) ;
_RECONCILE_BUTTON ( Select ) ;
_RECONCILE_BUTTON ( Square ) ;
_RECONCILE_BUTTON ( Triangle ) ;
_RECONCILE_BUTTON ( Cross ) ;
_RECONCILE_BUTTON ( Circle ) ;
_RECONCILE_BUTTON ( LeftShock ) ;
_RECONCILE_BUTTON ( RightShock ) ;
_RECONCILE_BUTTON ( NetworkTalk ) ;
_RECONCILE_AXIS ( LeftStickX ) ;
_RECONCILE_AXIS ( LeftStickY ) ;
_FIX_AXIS_DIR ( LeftStickX ) ;
_FIX_AXIS_DIR ( LeftStickY ) ;
_RECONCILE_AXIS ( RightStickX ) ;
_RECONCILE_AXIS ( RightStickY ) ;
_FIX_AXIS_DIR ( RightStickX ) ;
_FIX_AXIS_DIR ( RightStickY ) ;
_RECONCILE_BUTTON ( DPadUp ) ;
_RECONCILE_BUTTON ( DPadDown ) ;
_RECONCILE_BUTTON ( DPadLeft ) ;
_RECONCILE_BUTTON ( DPadRight ) ;
_FIX_RECON_DIR ( DPadUp , DPadDown , LeftStickY ) ;
_FIX_RECON_DIR ( DPadLeft , DPadRight , LeftStickX ) ;
return ReconState ;
2019-05-31 13:02:26 -04:00
2019-06-12 20:35:26 -04:00
# undef _RECONCILE_BUTTON
# undef _RECONCILE_AXIS_POSITIVE
# undef _RECONCILE_AXIS_NEGATIVE
# undef _RECONCILE_AXIS
# undef _FIX_AXIS_DIR
# undef _FIX_RECON_DIR
}
2019-06-16 18:16:38 -04:00
void CPad : : StartShake ( int16 nDur , uint8 nFreq )
2019-06-12 20:35:26 -04:00
{
if ( ! CMenuManager : : m_PrefsUseVibration )
return ;
2019-05-31 13:02:26 -04:00
2019-06-12 20:58:29 -04:00
if ( CCutsceneMgr : : IsRunning ( ) | | CGame : : playingIntro )
2019-06-12 20:35:26 -04:00
return ;
2019-05-31 13:02:26 -04:00
2019-06-12 20:35:26 -04:00
if ( nFreq = = 0 )
{
ShakeDur = 0 ;
ShakeFreq = 0 ;
return ;
}
2019-05-31 13:02:26 -04:00
2019-06-12 20:35:26 -04:00
if ( nDur > ShakeDur )
{
ShakeDur = nDur ;
ShakeFreq = nFreq ;
}
}
2019-05-31 13:02:26 -04:00
2019-06-16 18:16:38 -04:00
void CPad : : StartShake_Distance ( int16 nDur , uint8 nFreq , float fX , float fY , float fZ )
2019-06-12 20:35:26 -04:00
{
if ( ! CMenuManager : : m_PrefsUseVibration )
return ;
2019-06-12 20:58:29 -04:00
if ( CCutsceneMgr : : IsRunning ( ) | | CGame : : playingIntro )
2019-06-12 20:35:26 -04:00
return ;
2019-06-16 18:16:38 -04:00
float fDist = ( TheCamera . GetPosition ( ) - CVector ( fX , fY , fZ ) ) . Magnitude ( ) ;
2019-06-12 20:35:26 -04:00
if ( fDist < 70.0f )
{
if ( nFreq = = 0 )
{
ShakeDur = 0 ;
ShakeFreq = 0 ;
return ;
}
if ( nDur > ShakeDur )
{
ShakeDur = nDur ;
ShakeFreq = nFreq ;
}
}
}
2019-05-31 13:02:26 -04:00
2019-06-16 18:16:38 -04:00
void CPad : : StartShake_Train ( float fX , float fY )
2019-06-12 20:35:26 -04:00
{
if ( ! CMenuManager : : m_PrefsUseVibration )
return ;
2019-06-12 20:58:29 -04:00
if ( CCutsceneMgr : : IsRunning ( ) | | CGame : : playingIntro )
2019-06-12 20:35:26 -04:00
return ;
2019-06-30 06:53:39 -04:00
if ( FindPlayerVehicle ( ) ! = nil & & FindPlayerVehicle ( ) - > IsTrain ( ) )
2019-06-12 20:35:26 -04:00
return ;
2019-06-16 18:16:38 -04:00
float fDist = ( TheCamera . GetPosition ( ) - CVector ( fX , fY , 0.0f ) ) . Magnitude2D ( ) ;
2019-06-12 20:35:26 -04:00
if ( fDist < 70.0f )
{
2019-06-16 18:16:38 -04:00
int32 freq = ( int32 ) ( ( 70.0f - fDist ) * 70.0f / 70.0f + 30.0f ) ;
2019-05-31 13:02:26 -04:00
2019-06-12 20:35:26 -04:00
if ( ShakeDur < 100 )
{
ShakeDur = 100 ;
ShakeFreq = freq ;
}
}
2019-05-31 13:02:26 -04:00
}
2020-04-08 23:20:44 -04:00
# ifdef GTA_PS2_STUFF
void CPad : : AddToCheatString ( char c )
{
for ( int32 i = ARRAY_SIZE ( CheatString ) - 2 ; i > = 0 ; i - - )
CheatString [ i + 1 ] = CheatString [ i ] ;
2020-04-15 01:03:53 -04:00
CheatString [ 0 ] = c ;
2020-04-08 23:20:44 -04:00
# define _CHEATCMP(str) strncmp(str, CheatString, sizeof(str)-1)
// "4414LDRULDRU" - R2 R2 L1 R2 LEFT DOWN RIGHT UP LEFT DOWN RIGHT UP
if ( ! _CHEATCMP ( " URDLURDL4144 " ) )
WeaponCheat ( ) ;
// "4411LDRULDRU" - R2 R2 L1 L1 LEFT DOWN RIGHT UP LEFT DOWN RIGHT UP
else if ( ! _CHEATCMP ( " URDLURDL1144 " ) )
MoneyCheat ( ) ;
// "4412LDRULDRU" - R2 R2 L1 L2 LEFT DOWN RIGHT UP LEFT DOWN RIGHT UP
else if ( ! _CHEATCMP ( " URDLURDL2144 " ) )
ArmourCheat ( ) ;
// "4413LDRULDRU" - R2 R2 L1 R1 LEFT DOWN RIGHT UP LEFT DOWN RIGHT UP
else if ( ! _CHEATCMP ( " URDLURDL3144 " ) )
HealthCheat ( ) ;
// "4414LRLRLR" - R2 R2 L1 R2 LEFT RIGHT LEFT RIGHT LEFT RIGHT
else if ( ! _CHEATCMP ( " RLRLRL4144 " ) )
WantedLevelUpCheat ( ) ;
// "4414UDUDUD" - R2 R2 L1 R2 UP DOWN UP DOWN UP DOWN
else if ( ! _CHEATCMP ( " DUDUDU4144 " ) )
WantedLevelDownCheat ( ) ;
// "1234432T" - L1 L2 R1 R2 R2 R1 L2 TRIANGLE
else if ( ! _CHEATCMP ( " T2344321 " ) )
SunnyWeatherCheat ( ) ;
// "1234432S" - L1 L2 R1 R2 R2 R1 L2 SQUARE
else if ( ! _CHEATCMP ( " S2344321 " ) )
CloudyWeatherCheat ( ) ;
// "1234432C" - L1 L2 R1 R2 R2 R1 L2 CIRCLE
else if ( ! _CHEATCMP ( " C2344321 " ) )
RainyWeatherCheat ( ) ;
// "1234432X" - L1 L2 R1 R2 R2 R1 L2 CROSS
else if ( ! _CHEATCMP ( " X2344321 " ) )
FoggyWeatherCheat ( ) ;
// "CCCCCC321TCT" - CIRCLE CIRCLE CIRCLE CIRCLE CIRCLE CIRCLE R1 L2 L1 TRIANGLE CIRCLE TRIANGLE
else if ( ! _CHEATCMP ( " TCT123CCCCCC " ) )
TankCheat ( ) ;
// "CCCSSSSS1TCT" - CIRCLE CIRCLE CIRCLE SQUARE SQUARE SQUARE SQUARE SQUARE L1 TRIANGLE CIRCLE TRIANGLE
else if ( ! _CHEATCMP ( " TCT1SSSSSCCC " ) )
FastWeatherCheat ( ) ;
// "241324TSCT21" - L2 R2 L1 R1 L2 R2 TRIANGLE SQUARE CIRCLE TRIANGLE L2 L1
else if ( ! _CHEATCMP ( " 12TCST423142 " ) )
BlowUpCarsCheat ( ) ;
// "RDLU12ULDR" - RIGHT DOWN LEFT UP L1 L2 UP LEFT DOWN RIGHT
else if ( ! _CHEATCMP ( " RDLU21ULDR " ) )
ChangePlayerCheat ( ) ;
// "DULUX3421" - DOWN UP LEFT UP CROSS R1 R2 L2 L1
else if ( ! _CHEATCMP ( " 1243XULUD " ) )
MayhemCheat ( ) ;
// "DULUX3412" - DOWN UP LEFT UP CROSS R1 R2 L1 L2
else if ( ! _CHEATCMP ( " 2143XULUD " ) )
EverybodyAttacksPlayerCheat ( ) ;
// "43TX21UD" - R2 R1 TRIANGLE CROSS L2 L1 UP DOWN
else if ( ! _CHEATCMP ( " DU12XT34 " ) )
WeaponsForAllCheat ( ) ;
// "TURDS12" - TRIANGLE UP RIGHT DOWN SQUARE L1 L2
else if ( ! _CHEATCMP ( " 21SDRUT " ) )
FastTimeCheat ( ) ;
// "TURDS34" - TRIANGLE UP RIGHT DOWN SQUARE R1 R2
else if ( ! _CHEATCMP ( " 43SDRUT " ) )
SlowTimeCheat ( ) ;
// "11S4T1T" - L1 L1 SQUARE R2 TRIANGLE L1 TRIANGLE
else if ( ! _CHEATCMP ( " T1T4S11 " ) )
OnlyRenderWheelsCheat ( ) ;
// "R4C32D13" - RIGHT R2 CIRCLE R1 L2 DOWN L1 R1
else if ( ! _CHEATCMP ( " 31D23C4R " ) )
ChittyChittyBangBangCheat ( ) ;
// "3141L33T" - R1 L1 R2 L1 LEFT R1 R1 TRIANGLE
else if ( ! _CHEATCMP ( " T33L1413 " ) )
StrongGripCheat ( ) ;
// "S1CD13TR1X" - SQUARE L1 CIRCLE DOWN L1 R1 TRIANGLE RIGHT L1 CROSS
else if ( ! _CHEATCMP ( " X1RT31DC1S " ) )
NastyLimbsCheat ( ) ;
# undef _CHEATCMP
}
# endif
2019-06-16 18:16:38 -04:00
void CPad : : AddToPCCheatString ( char c )
2019-05-29 12:06:33 -04:00
{
2019-11-09 10:17:54 -05:00
for ( int32 i = ARRAY_SIZE ( KeyBoardCheatString ) - 2 ; i > = 0 ; i - - )
2019-06-12 20:35:26 -04:00
KeyBoardCheatString [ i + 1 ] = KeyBoardCheatString [ i ] ;
KeyBoardCheatString [ 0 ] = c ;
# define _CHEATCMP(str) strncmp(str, KeyBoardCheatString, sizeof(str)-1)
// "GUNSGUNSGUNS"
if ( ! _CHEATCMP ( " SNUGSNUGSNUG " ) )
WeaponCheat ( ) ;
// "IFIWEREARICHMAN"
if ( ! _CHEATCMP ( " NAMHCIRAEREWIFI " ) )
MoneyCheat ( ) ;
// "GESUNDHEIT"
if ( ! _CHEATCMP ( " TIEHDNUSEG " ) )
HealthCheat ( ) ;
// "MOREPOLICEPLEASE"
if ( ! _CHEATCMP ( " ESAELPECILOPEROM " ) )
WantedLevelUpCheat ( ) ;
// "NOPOLICEPLEASE"
if ( ! _CHEATCMP ( " ESAELPECILOPON " ) )
WantedLevelDownCheat ( ) ;
// "GIVEUSATANK"
if ( ! _CHEATCMP ( " KNATASUEVIG " ) )
TankCheat ( ) ;
// "BANGBANGBANG"
if ( ! _CHEATCMP ( " GNABGNABGNAB " ) )
BlowUpCarsCheat ( ) ;
// "ILIKEDRESSINGUP"
if ( ! _CHEATCMP ( " PUGNISSERDEKILI " ) )
ChangePlayerCheat ( ) ;
// "ITSALLGOINGMAAAD"
if ( ! _CHEATCMP ( " DAAAMGNIOGLLASTI " ) )
MayhemCheat ( ) ;
// "NOBODYLIKESME"
if ( ! _CHEATCMP ( " EMSEKILYDOBON " ) )
EverybodyAttacksPlayerCheat ( ) ;
// "WEAPONSFORALL"
if ( ! _CHEATCMP ( " LLAROFSNOPAEW " ) )
WeaponsForAllCheat ( ) ;
// "TIMEFLIESWHENYOU"
if ( ! _CHEATCMP ( " UOYNEHWSEILFEMIT " ) )
FastTimeCheat ( ) ;
// "BOOOOORING"
if ( ! _CHEATCMP ( " GNIROOOOOB " ) )
SlowTimeCheat ( ) ;
# ifndef GTA3_1_1_PATCH
// "TURTOISE"
if ( ! _CHEATCMP ( " ESIOTRUT " ) )
ArmourCheat ( ) ;
# else
// "TORTOISE"
if ( ! _CHEATCMP ( " ESIOTROT " ) )
ArmourCheat ( ) ;
# endif
// "SKINCANCERFORME"
if ( ! _CHEATCMP ( " EMROFRECNACNIKS " ) )
SunnyWeatherCheat ( ) ;
// "ILIKESCOTLAND"
if ( ! _CHEATCMP ( " DNALTOCSEKILI " ) )
CloudyWeatherCheat ( ) ;
// "ILOVESCOTLAND"
if ( ! _CHEATCMP ( " DNALTOCSEVOLI " ) )
RainyWeatherCheat ( ) ;
// "PEASOUP"
if ( ! _CHEATCMP ( " PUOSAEP " ) )
FoggyWeatherCheat ( ) ;
// "MADWEATHER"
if ( ! _CHEATCMP ( " REHTAEWDAM " ) )
FastWeatherCheat ( ) ;
// "ANICESETOFWHEELS"
if ( ! _CHEATCMP ( " SLEEHWFOTESECINA " ) )
OnlyRenderWheelsCheat ( ) ;
// "CHITTYCHITTYBB"
if ( ! _CHEATCMP ( " BBYTTIHCYTTIHC " ) )
ChittyChittyBangBangCheat ( ) ;
// "CORNERSLIKEMAD"
if ( ! _CHEATCMP ( " DAMEKILSRENROC " ) )
StrongGripCheat ( ) ;
// "NASTYLIMBSCHEAT"
if ( ! _CHEATCMP ( " TAEHCSBMILYTSAN " ) )
NastyLimbsCheat ( ) ;
2019-07-02 16:05:11 -04:00
2019-07-01 15:46:44 -04:00
# ifdef KANGAROO_CHEAT
// "KANGAROO"
if ( ! _CHEATCMP ( " OORAGNAK " ) )
KangarooCheat ( ) ;
# endif
2019-08-16 12:25:02 -04:00
# ifndef MASTER
// "PEDDEBUG"
if ( ! _CHEATCMP ( " GUBEDDEP " ) )
CPed : : SwitchDebugDisplay ( ) ;
# endif
2020-04-25 14:25:14 -04:00
# ifdef ALLCARSHELI_CHEAT
// "CARSAREHELI"
if ( ! _CHEATCMP ( " ILEHERASRAC " ) )
AllCarsHeliCheat ( ) ;
# endif
# ifdef ALT_DODO_CHEAT
// "IWANTTOMASTERDODO"
if ( ! _CHEATCMP ( " ODODRETSAMOTTNAWI " ) )
AltDodoCheat ( ) ;
# endif
2019-06-12 20:35:26 -04:00
# undef _CHEATCMP
}
2020-03-27 14:54:35 -04:00
# ifdef XINPUT
void CPad : : AffectFromXinput ( uint32 pad )
{
XINPUT_STATE xstate ;
memset ( & xstate , 0 , sizeof ( XINPUT_STATE ) ) ;
if ( XInputGetState ( pad , & xstate ) = = ERROR_SUCCESS )
{
PCTempJoyState . Circle = ( xstate . Gamepad . wButtons & XINPUT_GAMEPAD_B ) ? 255 : 0 ;
PCTempJoyState . Cross = ( xstate . Gamepad . wButtons & XINPUT_GAMEPAD_A ) ? 255 : 0 ;
PCTempJoyState . Square = ( xstate . Gamepad . wButtons & XINPUT_GAMEPAD_X ) ? 255 : 0 ;
PCTempJoyState . Triangle = ( xstate . Gamepad . wButtons & XINPUT_GAMEPAD_Y ) ? 255 : 0 ;
PCTempJoyState . DPadDown = ( xstate . Gamepad . wButtons & XINPUT_GAMEPAD_DPAD_DOWN ) ? 255 : 0 ;
PCTempJoyState . DPadLeft = ( xstate . Gamepad . wButtons & XINPUT_GAMEPAD_DPAD_LEFT ) ? 255 : 0 ;
PCTempJoyState . DPadRight = ( xstate . Gamepad . wButtons & XINPUT_GAMEPAD_DPAD_RIGHT ) ? 255 : 0 ;
PCTempJoyState . DPadUp = ( xstate . Gamepad . wButtons & XINPUT_GAMEPAD_DPAD_UP ) ? 255 : 0 ;
PCTempJoyState . LeftShock = ( xstate . Gamepad . wButtons & XINPUT_GAMEPAD_LEFT_THUMB ) ? 255 : 0 ;
PCTempJoyState . LeftShoulder1 = ( xstate . Gamepad . wButtons & XINPUT_GAMEPAD_LEFT_SHOULDER ) ? 255 : 0 ;
PCTempJoyState . LeftShoulder2 = xstate . Gamepad . bLeftTrigger ;
PCTempJoyState . RightShock = ( xstate . Gamepad . wButtons & XINPUT_GAMEPAD_RIGHT_THUMB ) ? 255 : 0 ;
PCTempJoyState . RightShoulder1 = ( xstate . Gamepad . wButtons & XINPUT_GAMEPAD_RIGHT_SHOULDER ) ? 255 : 0 ;
PCTempJoyState . RightShoulder2 = xstate . Gamepad . bRightTrigger ;
PCTempJoyState . Select = ( xstate . Gamepad . wButtons & XINPUT_GAMEPAD_BACK ) ? 255 : 0 ;
2020-03-28 10:47:52 -04:00
# ifdef REGISTER_START_BUTTON
2020-03-27 14:54:35 -04:00
PCTempJoyState . Start = ( xstate . Gamepad . wButtons & XINPUT_GAMEPAD_START ) ? 255 : 0 ;
2020-03-28 10:47:52 -04:00
# endif
2020-03-27 14:54:35 -04:00
float lx = ( float ) xstate . Gamepad . sThumbLX / ( float ) 0x7FFF ;
float ly = ( float ) xstate . Gamepad . sThumbLY / ( float ) 0x7FFF ;
float rx = ( float ) xstate . Gamepad . sThumbRX / ( float ) 0x7FFF ;
float ry = ( float ) xstate . Gamepad . sThumbRY / ( float ) 0x7FFF ;
if ( Abs ( lx ) > 0.3f | | Abs ( ly ) > 0.3f ) {
PCTempJoyState . LeftStickX = ( int32 ) ( lx * 128.0f ) ;
PCTempJoyState . LeftStickY = ( int32 ) ( - ly * 128.0f ) ;
}
if ( Abs ( rx ) > 0.3f | | Abs ( ry ) > 0.3f ) {
PCTempJoyState . RightStickX = ( int32 ) ( rx * 128.0f ) ;
PCTempJoyState . RightStickY = ( int32 ) ( ry * 128.0f ) ;
}
2020-03-27 22:53:42 -04:00
XINPUT_VIBRATION VibrationState ;
memset ( & VibrationState , 0 , sizeof ( XINPUT_VIBRATION ) ) ;
uint16 iLeftMotor = ( uint16 ) ( ( float ) ShakeFreq / 255.0f * ( float ) 0xffff ) ;
uint16 iRightMotor = ( uint16 ) ( ( float ) ShakeFreq / 255.0f * ( float ) 0xffff ) ;
if ( ShakeDur < CTimer : : GetTimeStepInMilliseconds ( ) )
ShakeDur = 0 ;
else
ShakeDur - = CTimer : : GetTimeStepInMilliseconds ( ) ;
if ( ShakeDur = = 0 ) ShakeFreq = 0 ;
VibrationState . wLeftMotorSpeed = iLeftMotor ;
VibrationState . wRightMotorSpeed = iRightMotor ;
XInputSetState ( pad , & VibrationState ) ;
2020-03-27 14:54:35 -04:00
}
}
# endif
2019-06-12 20:35:26 -04:00
void CPad : : UpdatePads ( void )
{
2019-06-16 18:16:38 -04:00
bool bUpdate = true ;
2019-06-12 20:35:26 -04:00
GetPad ( 0 ) - > UpdateMouse ( ) ;
2020-03-27 14:54:35 -04:00
# ifdef XINPUT
GetPad ( 0 ) - > AffectFromXinput ( 0 ) ;
GetPad ( 1 ) - > AffectFromXinput ( 1 ) ;
# else
2019-06-12 20:35:26 -04:00
CapturePad ( 0 ) ;
2020-03-27 14:54:35 -04:00
# endif
2019-06-12 20:35:26 -04:00
ControlsManager . ClearSimButtonPressCheckers ( ) ;
ControlsManager . AffectPadFromKeyBoard ( ) ;
ControlsManager . AffectPadFromMouse ( ) ;
2019-06-22 14:16:29 -04:00
if ( CReplay : : IsPlayingBackFromFile ( ) )
2019-06-12 20:35:26 -04:00
bUpdate = false ;
if ( bUpdate )
{
GetPad ( 0 ) - > Update ( 0 ) ;
2020-03-27 22:53:42 -04:00
GetPad ( 1 ) - > Update ( 0 ) ;
2019-05-29 12:06:33 -04:00
}
2020-03-27 14:54:35 -04:00
# if defined(MASTER) && !defined(XINPUT)
2019-06-12 20:35:26 -04:00
GetPad ( 1 ) - > NewState . Clear ( ) ;
GetPad ( 1 ) - > OldState . Clear ( ) ;
2020-03-27 14:54:35 -04:00
# endif
2019-06-12 20:35:26 -04:00
OldKeyState = NewKeyState ;
NewKeyState = TempKeyState ;
2019-05-29 12:06:33 -04:00
}
2019-06-12 20:35:26 -04:00
void CPad : : ProcessPCSpecificStuff ( void )
2019-05-29 12:06:33 -04:00
{
2019-06-12 20:35:26 -04:00
;
}
2019-06-16 18:16:38 -04:00
void CPad : : Update ( int16 unk )
2019-06-12 20:35:26 -04:00
{
OldState = NewState ;
2020-04-10 04:03:38 -04:00
# if (defined GTA_PS2 || defined FIX_BUGS)
2020-04-10 19:03:42 -04:00
if ( ! CRecordDataForGame : : IsPlayingBack ( ) & & ! CRecordDataForChase : : ShouldThisPadBeLeftAlone ( unk ) )
2020-04-10 04:03:38 -04:00
# endif
{
NewState = ReconcileTwoControllersInput ( PCTempKeyState , PCTempJoyState ) ;
NewState = ReconcileTwoControllersInput ( PCTempMouseState , NewState ) ;
}
2019-06-12 20:35:26 -04:00
PCTempJoyState . Clear ( ) ;
PCTempKeyState . Clear ( ) ;
PCTempMouseState . Clear ( ) ;
ProcessPCSpecificStuff ( ) ;
2020-04-08 23:20:44 -04:00
if ( + + iCurrHornHistory > = HORNHISTORY_SIZE )
2019-06-12 20:35:26 -04:00
iCurrHornHistory = 0 ;
bHornHistory [ iCurrHornHistory ] = GetHorn ( ) ;
if ( ! bDisplayNoControllerMessage )
CGame : : bDemoMode = false ;
}
void CPad : : DoCheats ( void )
{
GetPad ( 0 ) - > DoCheats ( 0 ) ;
}
2019-06-16 18:16:38 -04:00
void CPad : : DoCheats ( int16 unk )
2019-06-12 20:35:26 -04:00
{
2020-04-08 23:20:44 -04:00
# ifdef GTA_PS2_STUFF
2019-06-12 20:35:26 -04:00
if ( GetTriangleJustDown ( ) )
AddToCheatString ( ' T ' ) ;
if ( GetCircleJustDown ( ) )
AddToCheatString ( ' C ' ) ;
if ( GetCrossJustDown ( ) )
AddToCheatString ( ' X ' ) ;
if ( GetSquareJustDown ( ) )
AddToCheatString ( ' S ' ) ;
if ( GetDPadUpJustDown ( ) )
AddToCheatString ( ' U ' ) ;
if ( GetDPadDownJustDown ( ) )
AddToCheatString ( ' D ' ) ;
if ( GetDPadLeftJustDown ( ) )
AddToCheatString ( ' L ' ) ;
if ( GetDPadRightJustDown ( ) )
AddToCheatString ( ' R ' ) ;
if ( GetLeftShoulder1JustDown ( ) )
AddToCheatString ( ' 1 ' ) ;
if ( GetLeftShoulder2JustDown ( ) )
AddToCheatString ( ' 2 ' ) ;
if ( GetRightShoulder1JustDown ( ) )
AddToCheatString ( ' 3 ' ) ;
if ( GetRightShoulder2JustDown ( ) )
AddToCheatString ( ' 4 ' ) ;
# endif
}
void CPad : : StopPadsShaking ( void )
{
GetPad ( 0 ) - > StopShaking ( 0 ) ;
}
2019-06-16 18:16:38 -04:00
void CPad : : StopShaking ( int16 unk )
2019-06-12 20:35:26 -04:00
{
;
}
2019-06-16 18:16:38 -04:00
CPad * CPad : : GetPad ( int32 pad )
2019-06-12 20:35:26 -04:00
{
return & Pads [ pad ] ;
}
2019-06-16 18:16:38 -04:00
int16 CPad : : GetSteeringLeftRight ( void )
2019-06-12 20:35:26 -04:00
{
2019-07-15 08:11:40 -04:00
if ( ArePlayerControlsDisabled ( ) )
2019-06-12 20:35:26 -04:00
return 0 ;
switch ( Mode )
{
case 0 :
case 2 :
{
2019-06-16 18:16:38 -04:00
int16 axis = NewState . LeftStickX ;
int16 dpad = ( NewState . DPadRight - NewState . DPadLeft ) / 2 ;
2019-06-12 20:35:26 -04:00
2019-07-10 11:18:26 -04:00
if ( Abs ( axis ) > Abs ( dpad ) )
2019-06-12 20:35:26 -04:00
return axis ;
else
return dpad ;
break ;
}
case 1 :
case 3 :
{
return NewState . LeftStickX ;
break ;
}
2019-05-29 12:06:33 -04:00
}
2019-06-12 20:35:26 -04:00
return 0 ;
}
2019-06-16 18:16:38 -04:00
int16 CPad : : GetSteeringUpDown ( void )
2019-06-12 20:35:26 -04:00
{
2019-07-15 08:11:40 -04:00
if ( ArePlayerControlsDisabled ( ) )
2019-06-12 20:35:26 -04:00
return 0 ;
switch ( Mode )
{
case 0 :
case 2 :
{
2019-06-16 18:16:38 -04:00
int16 axis = NewState . LeftStickY ;
int16 dpad = ( NewState . DPadUp - NewState . DPadDown ) / 2 ;
2019-06-12 20:35:26 -04:00
2019-07-10 11:18:26 -04:00
if ( Abs ( axis ) > Abs ( dpad ) )
2019-06-12 20:35:26 -04:00
return axis ;
else
return dpad ;
break ;
}
case 1 :
case 3 :
{
return NewState . LeftStickY ;
break ;
}
}
return 0 ;
}
2019-06-16 18:16:38 -04:00
int16 CPad : : GetCarGunUpDown ( void )
2019-06-12 20:35:26 -04:00
{
2019-07-15 08:11:40 -04:00
if ( ArePlayerControlsDisabled ( ) )
2019-06-12 20:35:26 -04:00
return 0 ;
switch ( Mode )
{
case 0 :
case 1 :
case 2 :
{
return NewState . RightStickY ;
break ;
}
case 3 :
{
return ( NewState . DPadUp - NewState . DPadDown ) / 2 ;
break ;
}
}
return 0 ;
2019-05-29 12:06:33 -04:00
}
2019-06-16 18:16:38 -04:00
int16 CPad : : GetCarGunLeftRight ( void )
2019-05-29 12:06:33 -04:00
{
2019-07-15 08:11:40 -04:00
if ( ArePlayerControlsDisabled ( ) )
2019-06-12 20:35:26 -04:00
return 0 ;
switch ( Mode )
{
case 0 :
case 1 :
case 2 :
{
return NewState . RightStickX ;
break ;
}
case 3 :
{
return ( NewState . DPadRight - NewState . DPadLeft ) / 2 ;
break ;
}
}
return 0 ;
}
2019-06-16 18:16:38 -04:00
int16 CPad : : GetPedWalkLeftRight ( void )
2019-06-12 20:35:26 -04:00
{
2019-07-15 08:11:40 -04:00
if ( ArePlayerControlsDisabled ( ) )
2019-06-12 20:35:26 -04:00
return 0 ;
switch ( Mode )
{
case 0 :
case 2 :
{
2019-06-16 18:16:38 -04:00
int16 axis = NewState . LeftStickX ;
int16 dpad = ( NewState . DPadRight - NewState . DPadLeft ) / 2 ;
2019-06-12 20:35:26 -04:00
2019-07-10 11:18:26 -04:00
if ( Abs ( axis ) > Abs ( dpad ) )
2019-06-12 20:35:26 -04:00
return axis ;
else
return dpad ;
break ;
}
case 1 :
case 3 :
{
return NewState . LeftStickX ;
break ;
}
}
return 0 ;
}
2019-06-16 18:16:38 -04:00
int16 CPad : : GetPedWalkUpDown ( void )
2019-06-12 20:35:26 -04:00
{
2019-07-15 08:11:40 -04:00
if ( ArePlayerControlsDisabled ( ) )
2019-06-12 20:35:26 -04:00
return 0 ;
switch ( Mode )
{
case 0 :
case 2 :
{
2019-06-16 18:16:38 -04:00
int16 axis = NewState . LeftStickY ;
int16 dpad = ( NewState . DPadDown - NewState . DPadUp ) / 2 ;
2019-06-12 20:35:26 -04:00
2019-07-10 11:18:26 -04:00
if ( Abs ( axis ) > Abs ( dpad ) )
2019-06-12 20:35:26 -04:00
return axis ;
else
return dpad ;
break ;
}
case 1 :
case 3 :
{
return NewState . LeftStickY ;
break ;
}
}
return 0 ;
}
2019-06-16 18:16:38 -04:00
int16 CPad : : GetAnalogueUpDown ( void )
2019-06-12 20:35:26 -04:00
{
switch ( Mode )
{
case 0 :
case 2 :
{
2019-06-16 18:16:38 -04:00
int16 axis = NewState . LeftStickY ;
int16 dpad = ( NewState . DPadDown - NewState . DPadUp ) / 2 ;
2019-06-12 20:35:26 -04:00
2019-07-10 11:18:26 -04:00
if ( Abs ( axis ) > Abs ( dpad ) )
2019-06-12 20:35:26 -04:00
return axis ;
else
return dpad ;
break ;
}
case 1 :
case 3 :
{
return NewState . LeftStickY ;
break ;
}
}
return 0 ;
}
2019-06-16 18:16:38 -04:00
bool CPad : : GetLookLeft ( void )
2019-06-12 20:35:26 -04:00
{
2019-07-15 08:11:40 -04:00
if ( ArePlayerControlsDisabled ( ) )
2019-06-12 20:35:26 -04:00
return false ;
return ! ! ( NewState . LeftShoulder2 & & ! NewState . RightShoulder2 ) ;
}
2019-06-16 18:16:38 -04:00
bool CPad : : GetLookRight ( void )
2019-06-12 20:35:26 -04:00
{
2019-07-15 08:11:40 -04:00
if ( ArePlayerControlsDisabled ( ) )
2019-05-29 12:06:33 -04:00
return false ;
2020-04-17 09:31:11 -04:00
2019-06-12 20:35:26 -04:00
return ! ! ( NewState . RightShoulder2 & & ! NewState . LeftShoulder2 ) ;
}
2019-06-16 18:16:38 -04:00
bool CPad : : GetLookBehindForCar ( void )
2019-06-12 20:35:26 -04:00
{
2019-07-15 08:11:40 -04:00
if ( ArePlayerControlsDisabled ( ) )
2019-06-12 20:35:26 -04:00
return false ;
2020-04-17 09:31:11 -04:00
2019-06-12 20:35:26 -04:00
return ! ! ( NewState . RightShoulder2 & & NewState . LeftShoulder2 ) ;
2019-05-29 12:06:33 -04:00
}
2019-06-16 18:16:38 -04:00
bool CPad : : GetLookBehindForPed ( void )
2019-05-29 12:06:33 -04:00
{
2019-07-15 08:11:40 -04:00
if ( ArePlayerControlsDisabled ( ) )
2019-05-29 12:06:33 -04:00
return false ;
2019-06-12 20:35:26 -04:00
2019-05-29 12:06:33 -04:00
return ! ! NewState . RightShock ;
}
2019-06-16 18:16:38 -04:00
bool CPad : : GetHorn ( void )
2019-05-29 12:06:33 -04:00
{
2019-07-15 08:11:40 -04:00
if ( ArePlayerControlsDisabled ( ) )
2019-05-29 12:06:33 -04:00
return false ;
2019-06-12 20:35:26 -04:00
switch ( Mode )
{
case 0 :
{
return ! ! NewState . LeftShock ;
break ;
}
case 1 :
{
return ! ! NewState . LeftShoulder1 ;
break ;
}
case 2 :
{
return ! ! NewState . RightShoulder1 ;
break ;
}
case 3 :
{
return ! ! NewState . LeftShock ;
break ;
}
}
return false ;
2019-05-29 12:06:33 -04:00
}
2019-06-16 18:16:38 -04:00
bool CPad : : HornJustDown ( void )
2019-05-29 12:06:33 -04:00
{
2019-07-15 08:11:40 -04:00
if ( ArePlayerControlsDisabled ( ) )
2019-05-29 12:06:33 -04:00
return false ;
2019-06-12 20:35:26 -04:00
switch ( Mode )
{
case 0 :
{
return ! ! ( NewState . LeftShock & & ! OldState . LeftShock ) ;
break ;
}
case 1 :
{
return ! ! ( NewState . LeftShoulder1 & & ! OldState . LeftShoulder1 ) ;
break ;
}
case 2 :
{
return ! ! ( NewState . RightShoulder1 & & ! OldState . RightShoulder1 ) ;
break ;
}
case 3 :
{
return ! ! ( NewState . LeftShock & & ! OldState . LeftShock ) ;
break ;
}
}
return false ;
2019-05-15 10:52:37 -04:00
}
2019-06-12 20:35:26 -04:00
2019-06-16 18:16:38 -04:00
bool CPad : : GetCarGunFired ( void )
2019-06-12 20:35:26 -04:00
{
2019-07-15 08:11:40 -04:00
if ( ArePlayerControlsDisabled ( ) )
2019-06-12 20:35:26 -04:00
return false ;
switch ( Mode )
{
case 0 :
case 1 :
case 2 :
{
return ! ! NewState . Circle ;
break ;
}
case 3 :
{
return ! ! NewState . RightShoulder1 ;
break ;
}
}
return false ;
}
2019-06-16 18:16:38 -04:00
bool CPad : : CarGunJustDown ( void )
2019-06-12 20:35:26 -04:00
{
2019-07-15 08:11:40 -04:00
if ( ArePlayerControlsDisabled ( ) )
2019-06-12 20:35:26 -04:00
return false ;
switch ( Mode )
{
case 0 :
case 1 :
case 2 :
{
return ! ! ( NewState . Circle & & ! OldState . Circle ) ;
break ;
}
case 3 :
{
return ! ! ( NewState . RightShoulder1 & & ! OldState . RightShoulder1 ) ;
break ;
}
}
return false ;
}
2019-06-16 18:16:38 -04:00
int16 CPad : : GetHandBrake ( void )
2019-06-12 20:35:26 -04:00
{
2019-07-15 08:11:40 -04:00
if ( ArePlayerControlsDisabled ( ) )
2019-06-12 20:35:26 -04:00
return 0 ;
switch ( Mode )
{
case 0 :
case 1 :
{
return NewState . RightShoulder1 ;
break ;
}
case 2 :
{
return NewState . Triangle ;
break ;
}
case 3 :
{
return NewState . LeftShoulder1 ;
break ;
}
}
return 0 ;
}
2019-06-16 18:16:38 -04:00
int16 CPad : : GetBrake ( void )
2019-06-12 20:35:26 -04:00
{
2019-07-15 08:11:40 -04:00
if ( ArePlayerControlsDisabled ( ) )
2019-06-12 20:35:26 -04:00
return 0 ;
switch ( Mode )
{
case 0 :
case 2 :
{
return NewState . Square ;
break ;
}
case 1 :
{
return NewState . Square ;
break ;
}
case 3 :
{
2019-06-16 18:16:38 -04:00
int16 axis = 2 * NewState . RightStickY ;
2019-06-12 20:35:26 -04:00
if ( axis < 0 )
return 0 ;
else
return axis ;
break ;
}
}
return 0 ;
}
2019-06-16 18:16:38 -04:00
bool CPad : : GetExitVehicle ( void )
2019-06-12 20:35:26 -04:00
{
2019-07-15 08:11:40 -04:00
if ( ArePlayerControlsDisabled ( ) )
2019-06-12 20:35:26 -04:00
return false ;
switch ( Mode )
{
case 0 :
case 1 :
case 3 :
{
return ! ! NewState . Triangle ;
break ;
}
case 2 :
{
return ! ! NewState . LeftShoulder1 ;
break ;
}
}
return false ;
}
2019-06-16 18:16:38 -04:00
bool CPad : : ExitVehicleJustDown ( void )
2019-06-12 20:35:26 -04:00
{
2019-07-15 08:11:40 -04:00
if ( ArePlayerControlsDisabled ( ) )
2019-06-12 20:35:26 -04:00
return false ;
switch ( Mode )
{
case 0 :
case 1 :
case 3 :
{
return ! ! ( NewState . Triangle & & ! OldState . Triangle ) ;
break ;
}
case 2 :
{
return ! ! ( NewState . LeftShoulder1 & & ! OldState . LeftShoulder1 ) ;
break ;
}
}
return false ;
}
2019-06-16 18:16:38 -04:00
int32 CPad : : GetWeapon ( void )
2019-06-12 20:35:26 -04:00
{
2019-07-15 08:11:40 -04:00
if ( ArePlayerControlsDisabled ( ) )
2019-06-12 20:35:26 -04:00
return false ;
switch ( Mode )
{
case 0 :
case 1 :
{
return NewState . Circle ;
break ;
}
case 2 :
{
return NewState . Cross ;
break ;
}
case 3 :
{
return NewState . RightShoulder1 ;
break ;
}
}
return false ;
}
2019-06-16 18:16:38 -04:00
bool CPad : : WeaponJustDown ( void )
2019-06-12 20:35:26 -04:00
{
2019-07-15 08:11:40 -04:00
if ( ArePlayerControlsDisabled ( ) )
2019-06-12 20:35:26 -04:00
return false ;
switch ( Mode )
{
case 0 :
case 1 :
{
return ! ! ( NewState . Circle & & ! OldState . Circle ) ;
break ;
}
case 2 :
{
return ! ! ( NewState . Cross & & ! OldState . Cross ) ;
break ;
}
case 3 :
{
return ! ! ( NewState . RightShoulder1 & & ! OldState . RightShoulder1 ) ;
break ;
}
}
return false ;
}
2019-06-16 18:16:38 -04:00
int16 CPad : : GetAccelerate ( void )
2019-06-12 20:35:26 -04:00
{
2019-07-15 08:11:40 -04:00
if ( ArePlayerControlsDisabled ( ) )
2019-06-12 20:35:26 -04:00
return 0 ;
switch ( Mode )
{
case 0 :
case 2 :
{
return NewState . Cross ;
break ;
}
case 1 :
{
return NewState . Cross ;
break ;
}
case 3 :
{
2019-06-16 18:16:38 -04:00
int16 axis = - 2 * NewState . RightStickY ;
2019-06-12 20:35:26 -04:00
if ( axis < 0 )
return 0 ;
else
return axis ;
break ;
}
}
return 0 ;
}
2019-06-16 18:16:38 -04:00
bool CPad : : CycleCameraModeUpJustDown ( void )
2019-06-12 20:35:26 -04:00
{
switch ( Mode )
{
case 0 :
case 2 :
case 3 :
{
return ! ! ( NewState . Select & & ! OldState . Select ) ;
break ;
}
case 1 :
{
return ! ! ( NewState . DPadUp & & ! OldState . DPadUp ) ;
break ;
}
}
return false ;
}
2019-06-16 18:16:38 -04:00
bool CPad : : CycleCameraModeDownJustDown ( void )
2019-06-12 20:35:26 -04:00
{
switch ( Mode )
{
case 0 :
case 2 :
case 3 :
{
return false ;
break ;
}
case 1 :
{
return ! ! ( NewState . DPadDown & & ! OldState . DPadDown ) ;
break ;
}
}
return false ;
}
2019-06-16 18:16:38 -04:00
bool CPad : : ChangeStationJustDown ( void )
2019-06-12 20:35:26 -04:00
{
2019-07-15 08:11:40 -04:00
if ( ArePlayerControlsDisabled ( ) )
2019-06-12 20:35:26 -04:00
return false ;
switch ( Mode )
{
case 0 :
{
return ! ! ( NewState . LeftShoulder1 & & ! OldState . LeftShoulder1 ) ;
break ;
}
case 1 :
{
return ! ! ( NewState . Select & & ! OldState . Select ) ;
break ;
}
case 2 :
{
return ! ! ( NewState . LeftShock & & ! OldState . LeftShock ) ;
break ;
}
case 3 :
{
return ! ! ( NewState . Circle & & ! OldState . Circle ) ;
break ;
}
}
return false ;
}
2019-06-16 18:16:38 -04:00
bool CPad : : CycleWeaponLeftJustDown ( void )
2019-06-12 20:35:26 -04:00
{
2019-07-15 08:11:40 -04:00
if ( ArePlayerControlsDisabled ( ) )
2019-06-12 20:35:26 -04:00
return false ;
return ! ! ( NewState . LeftShoulder2 & & ! OldState . LeftShoulder2 ) ;
}
2019-06-16 18:16:38 -04:00
bool CPad : : CycleWeaponRightJustDown ( void )
2019-06-12 20:35:26 -04:00
{
2019-07-15 08:11:40 -04:00
if ( ArePlayerControlsDisabled ( ) )
2019-06-12 20:35:26 -04:00
return false ;
2020-04-17 09:31:11 -04:00
2019-06-12 20:35:26 -04:00
return ! ! ( NewState . RightShoulder2 & & ! OldState . RightShoulder2 ) ;
}
2019-06-16 18:16:38 -04:00
bool CPad : : GetTarget ( void )
2019-06-12 20:35:26 -04:00
{
2019-07-15 08:11:40 -04:00
if ( ArePlayerControlsDisabled ( ) )
2019-06-12 20:35:26 -04:00
return false ;
switch ( Mode )
{
case 0 :
case 1 :
case 2 :
{
return ! ! NewState . RightShoulder1 ;
break ;
}
case 3 :
{
return ! ! NewState . LeftShoulder1 ;
break ;
}
}
return false ;
}
2019-06-16 18:16:38 -04:00
bool CPad : : TargetJustDown ( void )
2019-06-12 20:35:26 -04:00
{
2019-07-15 08:11:40 -04:00
if ( ArePlayerControlsDisabled ( ) )
2019-06-12 20:35:26 -04:00
return false ;
switch ( Mode )
{
case 0 :
case 1 :
case 2 :
{
return ! ! ( NewState . RightShoulder1 & & ! OldState . RightShoulder1 ) ;
break ;
}
case 3 :
{
return ! ! ( NewState . LeftShoulder1 & & ! OldState . LeftShoulder1 ) ;
break ;
}
}
return false ;
}
2019-06-16 18:16:38 -04:00
bool CPad : : JumpJustDown ( void )
2019-06-12 20:35:26 -04:00
{
2019-07-15 08:11:40 -04:00
if ( ArePlayerControlsDisabled ( ) )
2019-06-12 20:35:26 -04:00
return false ;
return ! ! ( NewState . Square & & ! OldState . Square ) ;
}
2019-06-16 18:16:38 -04:00
bool CPad : : GetSprint ( void )
2019-06-12 20:35:26 -04:00
{
2019-07-15 08:11:40 -04:00
if ( ArePlayerControlsDisabled ( ) )
2019-06-12 20:35:26 -04:00
return false ;
switch ( Mode )
{
case 0 :
case 1 :
case 3 :
{
return ! ! NewState . Cross ;
break ;
}
case 2 :
{
return ! ! NewState . Circle ;
break ;
}
}
return false ;
}
2019-06-16 18:16:38 -04:00
bool CPad : : ShiftTargetLeftJustDown ( void )
2019-06-12 20:35:26 -04:00
{
2019-07-15 08:11:40 -04:00
if ( ArePlayerControlsDisabled ( ) )
2019-06-12 20:35:26 -04:00
return false ;
2020-04-17 09:31:11 -04:00
2019-06-12 20:35:26 -04:00
return ! ! ( NewState . LeftShoulder2 & & ! OldState . LeftShoulder2 ) ;
}
2019-06-16 18:16:38 -04:00
bool CPad : : ShiftTargetRightJustDown ( void )
2019-06-12 20:35:26 -04:00
{
2019-07-15 08:11:40 -04:00
if ( ArePlayerControlsDisabled ( ) )
2019-06-12 20:35:26 -04:00
return false ;
2020-04-17 09:31:11 -04:00
2019-06-12 20:35:26 -04:00
return ! ! ( NewState . RightShoulder2 & & ! OldState . RightShoulder2 ) ;
}
2019-06-16 18:16:38 -04:00
bool CPad : : GetAnaloguePadUp ( void )
2019-06-12 20:35:26 -04:00
{
2019-06-16 18:16:38 -04:00
static int16 oldfStickY = 0 ;
2019-06-12 20:35:26 -04:00
2019-06-16 18:16:38 -04:00
int16 Y = CPad : : GetPad ( 0 ) - > GetAnalogueUpDown ( ) ;
2019-06-12 20:35:26 -04:00
if ( Y < 0 & & oldfStickY > = 0 )
{
oldfStickY = Y ;
return true ;
}
else
{
oldfStickY = Y ;
return false ;
}
}
2019-06-16 18:16:38 -04:00
bool CPad : : GetAnaloguePadDown ( void )
2019-06-12 20:35:26 -04:00
{
2019-06-16 18:16:38 -04:00
static int16 oldfStickY = 0 ;
2019-06-12 20:35:26 -04:00
2019-06-16 18:16:38 -04:00
int16 Y = CPad : : GetPad ( 0 ) - > GetAnalogueUpDown ( ) ;
2019-06-12 20:35:26 -04:00
if ( Y > 0 & & oldfStickY < = 0 )
{
oldfStickY = Y ;
return true ;
}
else
{
oldfStickY = Y ;
return false ;
}
}
2019-06-16 18:16:38 -04:00
bool CPad : : GetAnaloguePadLeft ( void )
2019-06-12 20:35:26 -04:00
{
2019-06-16 18:16:38 -04:00
static int16 oldfStickX = 0 ;
2019-06-12 20:35:26 -04:00
2019-06-16 18:16:38 -04:00
int16 X = CPad : : GetPad ( 0 ) - > GetPedWalkLeftRight ( ) ;
2019-06-12 20:35:26 -04:00
if ( X < 0 & & oldfStickX > = 0 )
{
oldfStickX = X ;
return true ;
}
else
{
oldfStickX = X ;
return false ;
}
}
2019-06-16 18:16:38 -04:00
bool CPad : : GetAnaloguePadRight ( void )
2019-06-12 20:35:26 -04:00
{
2019-06-16 18:16:38 -04:00
static int16 oldfStickX = 0 ;
2019-06-12 20:35:26 -04:00
2019-06-16 18:16:38 -04:00
int16 X = CPad : : GetPad ( 0 ) - > GetPedWalkLeftRight ( ) ;
2019-06-12 20:35:26 -04:00
if ( X > 0 & & oldfStickX < = 0 )
{
oldfStickX = X ;
return true ;
}
else
{
oldfStickX = X ;
return false ;
}
}
2019-06-16 18:16:38 -04:00
bool CPad : : GetAnaloguePadLeftJustUp ( void )
2019-06-12 20:35:26 -04:00
{
2019-06-16 18:16:38 -04:00
static int16 oldfStickX = 0 ;
2019-06-12 20:35:26 -04:00
2019-06-16 18:16:38 -04:00
int16 X = GetPad ( 0 ) - > GetPedWalkLeftRight ( ) ;
2019-06-12 20:35:26 -04:00
if ( X = = 0 & & oldfStickX < 0 )
{
oldfStickX = X ;
return true ;
}
else
{
oldfStickX = X ;
return false ;
}
}
2019-06-16 18:16:38 -04:00
bool CPad : : GetAnaloguePadRightJustUp ( void )
2019-06-12 20:35:26 -04:00
{
2019-06-16 18:16:38 -04:00
static int16 oldfStickX = 0 ;
2019-06-12 20:35:26 -04:00
2019-06-16 18:16:38 -04:00
int16 X = GetPad ( 0 ) - > GetPedWalkLeftRight ( ) ;
2019-06-12 20:35:26 -04:00
if ( X = = 0 & & oldfStickX > 0 )
{
oldfStickX = X ;
return true ;
}
else
{
oldfStickX = X ;
return false ;
}
}
2019-06-16 18:16:38 -04:00
bool CPad : : ForceCameraBehindPlayer ( void )
2019-06-12 20:35:26 -04:00
{
2019-07-15 08:11:40 -04:00
if ( ArePlayerControlsDisabled ( ) )
2019-06-12 20:35:26 -04:00
return false ;
switch ( Mode )
{
case 0 :
case 1 :
{
return ! ! NewState . LeftShoulder1 ;
break ;
}
case 2 :
{
return ! ! NewState . Triangle ;
break ;
}
case 3 :
{
return ! ! NewState . Circle ;
break ;
}
}
return false ;
}
2019-06-16 18:16:38 -04:00
bool CPad : : SniperZoomIn ( void )
2019-06-12 20:35:26 -04:00
{
2019-07-15 08:11:40 -04:00
if ( ArePlayerControlsDisabled ( ) )
2019-06-12 20:35:26 -04:00
return false ;
switch ( Mode )
{
case 0 :
case 1 :
case 3 :
{
return ! ! NewState . Square ;
break ;
}
case 2 :
{
return ! ! NewState . Triangle ;
break ;
}
}
return false ;
}
2019-06-16 18:16:38 -04:00
bool CPad : : SniperZoomOut ( void )
2019-06-12 20:35:26 -04:00
{
2019-07-15 08:11:40 -04:00
if ( ArePlayerControlsDisabled ( ) )
2019-06-12 20:35:26 -04:00
return false ;
switch ( Mode )
{
case 0 :
case 1 :
case 3 :
{
return ! ! NewState . Cross ;
break ;
}
case 2 :
{
return ! ! NewState . Square ;
break ;
}
}
return false ;
}
2019-06-16 18:16:38 -04:00
int16 CPad : : SniperModeLookLeftRight ( void )
2019-06-12 20:35:26 -04:00
{
2019-06-16 18:16:38 -04:00
int16 axis = NewState . LeftStickX ;
int16 dpad = ( NewState . DPadRight - NewState . DPadLeft ) / 2 ;
2019-06-12 20:35:26 -04:00
2019-07-10 11:18:26 -04:00
if ( Abs ( axis ) > Abs ( dpad ) )
2019-06-12 20:35:26 -04:00
return axis ;
else
return dpad ;
}
2019-06-16 18:16:38 -04:00
int16 CPad : : SniperModeLookUpDown ( void )
2019-06-12 20:35:26 -04:00
{
2019-06-16 18:16:38 -04:00
int16 axis = NewState . LeftStickY ;
int16 dpad = ( NewState . DPadUp - NewState . DPadDown ) / 2 ;
2019-06-12 20:35:26 -04:00
2019-07-10 11:18:26 -04:00
if ( Abs ( axis ) > Abs ( dpad ) )
2019-06-12 20:35:26 -04:00
return axis ;
else
return dpad ;
}
2019-06-16 18:16:38 -04:00
int16 CPad : : LookAroundLeftRight ( void )
2019-06-12 20:35:26 -04:00
{
2019-06-16 18:16:38 -04:00
float axis = GetPad ( 0 ) - > NewState . RightStickX ;
2019-06-12 20:35:26 -04:00
2019-07-10 11:18:26 -04:00
if ( Abs ( axis ) > 85 & & ! GetLookBehindForPed ( ) )
2019-06-26 23:30:29 -04:00
return ( int16 ) ( ( axis + ( ( axis > 0 ) ? - 85 : 85 ) )
2019-06-12 20:35:26 -04:00
* ( 127.0f / 32.0f ) ) ; // 3.96875f
2019-07-10 11:18:26 -04:00
else if ( TheCamera . Cams [ 0 ] . Using3rdPersonMouseCam ( ) & & Abs ( axis ) > 10 )
2019-06-26 23:30:29 -04:00
return ( int16 ) ( ( axis + ( ( axis > 0 ) ? - 10 : 10 ) )
2019-06-12 20:35:26 -04:00
* ( 127.0f / 64.0f ) ) ; // 1.984375f
return 0 ;
}
2019-06-16 18:16:38 -04:00
int16 CPad : : LookAroundUpDown ( void )
2019-06-12 20:35:26 -04:00
{
2019-06-16 18:16:38 -04:00
int16 axis = GetPad ( 0 ) - > NewState . RightStickY ;
2019-06-12 20:35:26 -04:00
2019-07-10 11:18:26 -04:00
if ( Abs ( axis ) > 85 & & ! GetLookBehindForPed ( ) )
2019-06-26 23:30:29 -04:00
return ( int16 ) ( ( axis + ( ( axis > 0 ) ? - 85 : 85 ) )
2019-06-12 20:35:26 -04:00
* ( 127.0f / 32.0f ) ) ; // 3.96875f
2019-07-10 11:18:26 -04:00
else if ( TheCamera . Cams [ 0 ] . Using3rdPersonMouseCam ( ) & & Abs ( axis ) > 40 )
2019-06-26 23:30:29 -04:00
return ( int16 ) ( ( axis + ( ( axis > 0 ) ? - 40 : 40 ) )
2019-06-12 20:35:26 -04:00
* ( 127.0f / 64.0f ) ) ; // 1.984375f
return 0 ;
}
void CPad : : ResetAverageWeapon ( void )
{
AverageWeapon = GetWeapon ( ) ;
AverageEntries = 1 ;
}
void CPad : : PrintErrorMessage ( void )
{
if ( bDisplayNoControllerMessage & & ! CGame : : playingIntro & & ! FrontEndMenuManager . m_bMenuActive )
{
CFont : : SetScale ( 0.85f , 1.0f ) ;
CFont : : SetJustifyOff ( ) ;
CFont : : SetBackgroundOff ( ) ;
CFont : : SetCentreSize ( SCREEN_WIDTH - 20 ) ;
CFont : : SetCentreOn ( ) ;
CFont : : SetPropOn ( ) ;
CFont : : SetColor ( CRGBA ( 255 , 255 , 200 , 200 ) ) ;
CFont : : SetFontStyle ( FONT_BANK ) ;
CFont : : PrintString
(
SCREEN_WIDTH / 2 ,
SCREEN_HEIGHT / 2 ,
TheText . Get ( " NOCONT " ) // Please reconnect an analog controller (DUALSHOCK@) or analog controller (DUALSHOCK@2). to controller port 1 to continue
) ;
}
else if ( bObsoleteControllerMessage )
{
CFont : : SetScale ( 0.85f , 1.0f ) ;
CFont : : SetJustifyOff ( ) ;
CFont : : SetBackgroundOff ( ) ;
CFont : : SetCentreSize ( SCREEN_WIDTH - 20 ) ;
CFont : : SetCentreOn ( ) ;
CFont : : SetPropOn ( ) ;
CFont : : SetColor ( CRGBA ( 255 , 255 , 200 , 200 ) ) ;
CFont : : SetFontStyle ( FONT_BANK ) ;
CFont : : PrintString
(
SCREEN_WIDTH / 2 ,
SCREEN_HEIGHT / 2 ,
TheText . Get ( " WRCONT " ) // The controller connected to controller port 1 is an unsupported controller. Grand Theft Auto III requires an analog controller (DUALSHOCK@) or analog controller (DUALSHOCK@2).
) ;
}
}
void LittleTest ( void )
{
2019-06-16 18:16:38 -04:00
static int32 Cunt = 0 ;
2019-06-12 20:35:26 -04:00
Cunt + + ; // ???
}
void CPad : : ResetCheats ( void )
{
CWeather : : ReleaseWeather ( ) ;
CPopulation : : ms_bGivePedsWeapons = false ;
CPed : : bNastyLimbsCheat = false ;
CPed : : bPedCheat2 = false ;
CPed : : bPedCheat3 = false ;
CVehicle : : bWheelsOnlyCheat = false ;
CVehicle : : bAllDodosCheat = false ;
CVehicle : : bCheat3 = false ;
CVehicle : : bCheat4 = false ;
CVehicle : : bCheat5 = false ;
gbFastTime = false ;
CTimer : : SetTimeScale ( 1.0f ) ;
}
2019-06-16 18:16:38 -04:00
char * CPad : : EditString ( char * pStr , int32 nSize )
2019-06-12 20:35:26 -04:00
{
2019-06-16 18:16:38 -04:00
int32 pos = strlen ( pStr ) ;
2019-06-12 20:35:26 -04:00
// letters
2019-06-16 18:16:38 -04:00
for ( int32 i = 0 ; i < ( ' Z ' - ' A ' + 1 ) ; i + + )
2019-06-12 20:35:26 -04:00
{
if ( GetPad ( 0 ) - > GetCharJustDown ( i + ' A ' ) & & pos < nSize - 1 )
{
pStr [ pos + + ] = i + ' A ' ;
pStr [ pos ] = ' \0 ' ;
}
if ( GetPad ( 0 ) - > GetCharJustDown ( i + ' a ' ) & & pos < nSize - 1 )
{
pStr [ pos + + ] = i + ' a ' ;
pStr [ pos ] = ' \0 ' ;
}
}
// numbers
2019-07-20 08:39:38 -04:00
for ( int32 i = 0 ; i < ( ' 9 ' - ' 0 ' + 1 ) ; i + + )
2019-06-12 20:35:26 -04:00
{
if ( GetPad ( 0 ) - > GetCharJustDown ( i + ' 0 ' ) & & pos < nSize - 1 )
{
pStr [ pos + + ] = i + ' 0 ' ;
pStr [ pos ] = ' \0 ' ;
}
}
// space
if ( GetPad ( 0 ) - > GetCharJustDown ( ' ' ) & & pos < nSize - 1 )
{
pStr [ pos + + ] = ' ' ;
pStr [ pos ] = ' \0 ' ;
}
// del
if ( GetPad ( 0 ) - > GetDeleteJustDown ( ) | | GetPad ( 0 ) - > GetBackspaceJustDown ( ) )
{
if ( pos > 0 )
pStr [ pos - 1 ] = ' \0 ' ;
}
// extenter/up/down
2019-10-29 11:21:02 -04:00
if ( GetPad ( 0 ) - > GetReturnJustDown ( ) | | GetPad ( 0 ) - > GetUpJustDown ( ) | | GetPad ( 0 ) - > GetDownJustDown ( ) )
2019-06-30 06:53:39 -04:00
return nil ;
2019-06-12 20:35:26 -04:00
return pStr ;
}
2019-06-16 18:16:38 -04:00
int32 * CPad : : EditCodesForControls ( int32 * pRsKeys , int32 nSize )
2019-06-12 20:35:26 -04:00
{
* pRsKeys = rsNULL ;
2019-06-16 18:16:38 -04:00
for ( int32 i = 0 ; i < 255 ; i + + )
2019-06-12 20:35:26 -04:00
{
if ( GetPad ( 0 ) - > GetCharJustDown ( i ) )
* pRsKeys = i ;
}
2019-06-16 19:32:34 -04:00
for ( int32 i = 0 ; i < 12 ; i + + )
2019-06-12 20:35:26 -04:00
{
if ( GetPad ( 0 ) - > GetFJustDown ( i ) )
* pRsKeys = i + rsF1 ;
}
if ( GetPad ( 0 ) - > GetEscapeJustDown ( ) )
* pRsKeys = rsESC ;
if ( GetPad ( 0 ) - > GetInsertJustDown ( ) )
* pRsKeys = rsINS ;
if ( GetPad ( 0 ) - > GetDeleteJustDown ( ) )
* pRsKeys = rsDEL ;
if ( GetPad ( 0 ) - > GetHomeJustDown ( ) )
* pRsKeys = rsHOME ;
if ( GetPad ( 0 ) - > GetEndJustDown ( ) )
* pRsKeys = rsEND ;
if ( GetPad ( 0 ) - > GetPageUpJustDown ( ) )
* pRsKeys = rsPGUP ;
if ( GetPad ( 0 ) - > GetPageDownJustDown ( ) )
* pRsKeys = rsPGDN ;
if ( GetPad ( 0 ) - > GetUpJustDown ( ) )
* pRsKeys = rsUP ;
if ( GetPad ( 0 ) - > GetDownJustDown ( ) )
* pRsKeys = rsDOWN ;
if ( GetPad ( 0 ) - > GetLeftJustDown ( ) )
* pRsKeys = rsLEFT ;
if ( GetPad ( 0 ) - > GetRightJustDown ( ) )
* pRsKeys = rsRIGHT ;
if ( GetPad ( 0 ) - > GetScrollLockJustDown ( ) )
* pRsKeys = rsSCROLL ;
if ( GetPad ( 0 ) - > GetPauseJustDown ( ) )
* pRsKeys = rsPAUSE ;
if ( GetPad ( 0 ) - > GetNumLockJustDown ( ) )
* pRsKeys = rsNUMLOCK ;
if ( GetPad ( 0 ) - > GetDivideJustDown ( ) )
* pRsKeys = rsDIVIDE ;
if ( GetPad ( 0 ) - > GetTimesJustDown ( ) )
* pRsKeys = rsTIMES ;
if ( GetPad ( 0 ) - > GetMinusJustDown ( ) )
* pRsKeys = rsMINUS ;
if ( GetPad ( 0 ) - > GetPlusJustDown ( ) )
* pRsKeys = rsPLUS ;
if ( GetPad ( 0 ) - > GetPadEnterJustDown ( ) )
* pRsKeys = rsPADENTER ;
if ( GetPad ( 0 ) - > GetPadDelJustDown ( ) )
* pRsKeys = rsPADDEL ;
if ( GetPad ( 0 ) - > GetPad1JustDown ( ) )
* pRsKeys = rsPADEND ;
if ( GetPad ( 0 ) - > GetPad2JustDown ( ) )
* pRsKeys = rsPADDOWN ;
if ( GetPad ( 0 ) - > GetPad3JustDown ( ) )
* pRsKeys = rsPADPGDN ;
if ( GetPad ( 0 ) - > GetPad4JustDown ( ) )
* pRsKeys = rsPADLEFT ;
if ( GetPad ( 0 ) - > GetPad5JustDown ( ) )
* pRsKeys = rsPAD5 ;
if ( GetPad ( 0 ) - > GetPad6JustDown ( ) )
* pRsKeys = rsPADRIGHT ;
if ( GetPad ( 0 ) - > GetPad7JustDown ( ) )
* pRsKeys = rsPADHOME ;
if ( GetPad ( 0 ) - > GetPad8JustDown ( ) )
* pRsKeys = rsPADUP ;
if ( GetPad ( 0 ) - > GetPad9JustDown ( ) )
* pRsKeys = rsPADPGUP ;
if ( GetPad ( 0 ) - > GetPad0JustDown ( ) )
* pRsKeys = rsPADINS ;
if ( GetPad ( 0 ) - > GetBackspaceJustDown ( ) )
* pRsKeys = rsBACKSP ;
if ( GetPad ( 0 ) - > GetTabJustDown ( ) )
* pRsKeys = rsTAB ;
if ( GetPad ( 0 ) - > GetCapsLockJustDown ( ) )
* pRsKeys = rsCAPSLK ;
2019-10-29 11:21:02 -04:00
if ( GetPad ( 0 ) - > GetReturnJustDown ( ) )
2019-06-12 20:35:26 -04:00
* pRsKeys = rsENTER ;
if ( GetPad ( 0 ) - > GetLeftShiftJustDown ( ) )
* pRsKeys = rsLSHIFT ;
if ( GetPad ( 0 ) - > GetShiftJustDown ( ) )
* pRsKeys = rsSHIFT ;
if ( GetPad ( 0 ) - > GetRightShiftJustDown ( ) )
* pRsKeys = rsRSHIFT ;
if ( GetPad ( 0 ) - > GetLeftCtrlJustDown ( ) )
* pRsKeys = rsLCTRL ;
if ( GetPad ( 0 ) - > GetRightCtrlJustDown ( ) )
* pRsKeys = rsRCTRL ;
if ( GetPad ( 0 ) - > GetLeftAltJustDown ( ) )
* pRsKeys = rsLALT ;
if ( GetPad ( 0 ) - > GetRightAltJustDown ( ) )
* pRsKeys = rsRALT ;
if ( GetPad ( 0 ) - > GetLeftWinJustDown ( ) )
* pRsKeys = rsLWIN ;
if ( GetPad ( 0 ) - > GetRightWinJustDown ( ) )
* pRsKeys = rsRWIN ;
if ( GetPad ( 0 ) - > GetAppsJustDown ( ) )
* pRsKeys = rsAPPS ;
return pRsKeys ;
}