Implement holding use button for activating for controllers
This commit is contained in:
parent
925eb1d0a9
commit
aa3c6d79c6
@ -138,6 +138,7 @@ namespace Game
|
||||
keyname_t combinedLocalizedKeyNames[VANILLA_KEY_NAME_COUNT + std::extent_v<decltype(extendedLocalizedKeyNames)> + 1];
|
||||
|
||||
PlayerKeyState* playerKeys = reinterpret_cast<PlayerKeyState*>(0xA1B7D0);
|
||||
kbutton_t* playersKb = reinterpret_cast<kbutton_t*>(0xA1A9A8);
|
||||
AimAssistGlobals* aaGlobArray = reinterpret_cast<AimAssistGlobals*>(0x7A2110);
|
||||
keyname_t* vanillaKeyNames = reinterpret_cast<keyname_t*>(0x798580);
|
||||
keyname_t* vanillaLocalizedKeyNames = reinterpret_cast<keyname_t*>(0x798880);
|
||||
@ -168,6 +169,7 @@ namespace Components
|
||||
Dvar::Var Gamepad::gpad_button_deadzone;
|
||||
Dvar::Var Gamepad::gpad_button_rstick_deflect_max;
|
||||
Dvar::Var Gamepad::gpad_button_lstick_deflect_max;
|
||||
Dvar::Var Gamepad::gpad_use_hold_time;
|
||||
Dvar::Var Gamepad::input_viewSensitivity;
|
||||
Dvar::Var Gamepad::input_invertPitch;
|
||||
Dvar::Var Gamepad::aim_turnrate_pitch;
|
||||
@ -876,6 +878,44 @@ namespace Components
|
||||
}
|
||||
}
|
||||
|
||||
bool Gamepad::Gamepad_ShouldUse(const unsigned useTime)
|
||||
{
|
||||
// Only apply hold time to +usereload keybind
|
||||
return !Game::playersKb[Game::KB_USE_RELOAD].active || useTime >= static_cast<unsigned>(gpad_use_hold_time.get<int>());
|
||||
}
|
||||
|
||||
__declspec(naked) void Gamepad::Player_UseEntity_Stub()
|
||||
{
|
||||
__asm
|
||||
{
|
||||
// Execute overwritten instructions
|
||||
cmp eax, [ecx + 0x10]
|
||||
jl skipUse
|
||||
|
||||
// Call our custom check
|
||||
push eax
|
||||
pushad
|
||||
push eax
|
||||
call Gamepad_ShouldUse
|
||||
add esp,4
|
||||
mov [esp + 0x20],eax
|
||||
popad
|
||||
pop eax
|
||||
|
||||
// Skip use if custom check returns false
|
||||
test al,al
|
||||
jz skipUse
|
||||
|
||||
// perform use
|
||||
push 0x5FE39B
|
||||
ret
|
||||
|
||||
skipUse:
|
||||
push 0x5FE3AF
|
||||
ret
|
||||
}
|
||||
}
|
||||
|
||||
bool Gamepad::Key_IsValidGamePadChar(const int key)
|
||||
{
|
||||
return key >= Game::K_FIRSTGAMEPADBUTTON_RANGE_1 && key <= Game::K_LASTGAMEPADBUTTON_RANGE_1
|
||||
@ -1608,6 +1648,7 @@ namespace Components
|
||||
gpad_button_deadzone = Dvar::Register<float>("gpad_button_deadzone", 0.13f, 0.0f, 1.0f, 0, "Game pad button deadzone threshhold");
|
||||
gpad_button_lstick_deflect_max = Dvar::Register<float>("gpad_button_lstick_deflect_max", 1.0f, 0.0f, 1.0f, 0, "Game pad maximum pad stick pressed value");
|
||||
gpad_button_rstick_deflect_max = Dvar::Register<float>("gpad_button_rstick_deflect_max", 1.0f, 0.0f, 1.0f, 0, "Game pad maximum pad stick pressed value");
|
||||
gpad_use_hold_time = Dvar::Register<int>("gpad_use_hold_time", 250, 0, INT32_MAX, 0, "Time to hold the 'use' button on gamepads to activate use");
|
||||
|
||||
input_viewSensitivity = Dvar::Register<float>("input_viewSensitivity", 1.0f, 0.0001f, 5.0f, Game::DVAR_FLAG_SAVED, "View Sensitivity");
|
||||
input_invertPitch = Dvar::Register<bool>("input_invertPitch", false, Game::DVAR_FLAG_SAVED, "Invert gamepad pitch");
|
||||
@ -1791,6 +1832,9 @@ namespace Components
|
||||
// Only return gamepad keys when gamepad enabled and only non gamepad keys when not
|
||||
Utils::Hook(0x5A7A23, Key_GetCommandAssignmentInternal_Hk, HOOK_CALL).install()->quick();
|
||||
|
||||
// Add hold time to gamepad usereload on hold prompts
|
||||
Utils::Hook(0x5FE396, Player_UseEntity_Stub, HOOK_JUMP).install()->quick();
|
||||
|
||||
// Add gamepad inputs to remote control (eg predator) handling
|
||||
Utils::Hook(0x5A6D4E, CL_RemoteControlMove_Stub, HOOK_CALL).install()->quick();
|
||||
|
||||
|
@ -298,6 +298,7 @@ namespace Components
|
||||
static Dvar::Var gpad_button_deadzone;
|
||||
static Dvar::Var gpad_button_rstick_deflect_max;
|
||||
static Dvar::Var gpad_button_lstick_deflect_max;
|
||||
static Dvar::Var gpad_use_hold_time;
|
||||
static Dvar::Var input_viewSensitivity;
|
||||
static Dvar::Var input_invertPitch;
|
||||
static Dvar::Var aim_turnrate_pitch;
|
||||
@ -354,6 +355,9 @@ namespace Components
|
||||
static void CL_GamepadMove(int gamePadIndex, Game::usercmd_s* cmd, float frameTimeBase);
|
||||
static void CL_MouseMove_Stub();
|
||||
|
||||
static bool Gamepad_ShouldUse(unsigned useTime);
|
||||
static void Player_UseEntity_Stub();
|
||||
|
||||
static bool Key_IsValidGamePadChar(int key);
|
||||
static void CL_GamepadResetMenuScrollTime(int gamePadIndex, int key, bool down, unsigned int time);
|
||||
static bool CL_CheckForIgnoreDueToRepeat(int gamePadIndex, int key, int repeatCount, unsigned int time);
|
||||
|
Loading…
Reference in New Issue
Block a user