[Gamepad]: Replaced Dvar_FindVar on actual dvars objects.

This commit is contained in:
JerryALT 2024-03-29 19:53:27 +03:00
parent 81f6cfa9a6
commit e29670b923
3 changed files with 219 additions and 132 deletions

View File

@ -41,7 +41,32 @@ namespace Dvars
Game::dvar_s* M_RawInput = nullptr; Game::dvar_s* M_RawInput = nullptr;
// Gamepad // Gamepad
Game::dvar_s* gpad_enabled = nullptr;
Game::dvar_s* gpad_debug = nullptr;
Game::dvar_s* gpad_present = nullptr;
Game::dvar_s* gpad_in_use = nullptr;
Game::dvar_s* gpad_style = nullptr;
Game::dvar_s* gpad_sticksConfig = nullptr;
Game::dvar_s* gpad_buttonConfig = nullptr;
Game::dvar_s* gpad_menu_scroll_delay_first = nullptr;
Game::dvar_s* gpad_menu_scroll_delay_rest = nullptr;
Game::dvar_s* gpad_stick_pressed_hysteresis = nullptr;
Game::dvar_s* gpad_stick_pressed = nullptr;
Game::dvar_s* gpad_stick_deadzone_min = nullptr;
Game::dvar_s* gpad_stick_deadzone_max = nullptr;
Game::dvar_s* gpad_button_deadzone = nullptr;
Game::dvar_s* gpad_button_lstick_deflect_max = nullptr;
Game::dvar_s* gpad_button_rstick_deflect_max = nullptr;
Game::dvar_s* gpad_use_hold_time = nullptr; Game::dvar_s* gpad_use_hold_time = nullptr;
Game::dvar_s* gpad_lockon_enabled = nullptr;
Game::dvar_s* gpad_slowdown_enabled = nullptr;
Game::dvar_s* gpad_autoaim_enabled = nullptr;
Game::dvar_s* gpad_aimassist = nullptr;
Game::dvar_s* input_viewSensitivity = nullptr;
Game::dvar_s* input_invertPitch = nullptr;
Game::dvar_s* aim_aimAssistRangeScale = nullptr;
Game::dvar_s* aim_autoAimRangeScale = nullptr;
Game::dvar_s* aim_lockon_pitch_strength = nullptr;
namespace Functions namespace Functions
{ {
@ -81,6 +106,36 @@ namespace Dvars
call Dvar_Reset_func; call Dvar_Reset_func;
} }
} }
void SetRaw(const char* dvarName, bool value)
{
if (const auto& dvar = Functions::Dvar_FindVar(dvarName); dvar)
{
dvar->current.enabled = value;
dvar->latched.enabled = value;
}
}
void SetRaw(Game::dvar_s* dvar, bool value)
{
dvar->current.enabled = value;
dvar->latched.enabled = value;
}
void SetRaw(const char* dvarName, const char* value)
{
if (const auto& dvar = Functions::Dvar_FindVar(dvarName); dvar)
{
dvar->current.enabled = value;
dvar->latched.enabled = value;
}
}
void SetRaw(Game::dvar_s* dvar, const char* value)
{
dvar->current.enabled = value;
dvar->latched.enabled = value;
}
} }
namespace Register namespace Register
@ -92,41 +147,39 @@ namespace Dvars
{ {
void DvarBoolOverride(const char* dvarName, const bool value, Game::dvar_flags flags) void DvarBoolOverride(const char* dvarName, const bool value, Game::dvar_flags flags)
{ {
auto dvar = Dvars::Functions::Dvar_FindVar(dvarName); if (const auto& dvar = Functions::Dvar_FindVar(dvarName); dvar)
if (!dvar)
{ {
return;
}
dvar->current.enabled = value; dvar->current.enabled = value;
dvar->latched.enabled = value; dvar->latched.enabled = value;
dvar->flags = flags; dvar->flags = flags;
dvar->modified = false; dvar->modified = false;
} }
}
void DvarBoolOverride(const char* dvarName, Game::dvar_flags flags) void DvarBoolOverride(const char* dvarName, Game::dvar_flags flags)
{ {
auto dvar = Dvars::Functions::Dvar_FindVar(dvarName); if (const auto& dvar = Functions::Dvar_FindVar(dvarName); dvar)
if (!dvar)
{ {
return;
}
dvar->flags = flags; dvar->flags = flags;
dvar->modified = false; dvar->modified = false;
} }
}
void DvarIntOverride(const char* dvarName, const int value, Game::dvar_flags flags)
{
if (const auto& dvar = Functions::Dvar_FindVar(dvarName); dvar)
{
dvar->current.integer = value;
dvar->latched.integer = value;
dvar->flags = flags;
dvar->modified = false;
}
}
void DvarVec4Override(const char* dvarName, const float* dvar_value) void DvarVec4Override(const char* dvarName, const float* dvar_value)
{ {
auto dvar = Dvars::Functions::Dvar_FindVar(dvarName); if (const auto& dvar = Functions::Dvar_FindVar(dvarName); dvar)
if (!dvar)
{ {
return;
}
for (auto i = 0; i < 4; i++) for (auto i = 0; i < 4; i++)
{ {
dvar->current.vector[i] = dvar_value[i]; dvar->current.vector[i] = dvar_value[i];
@ -134,16 +187,12 @@ namespace Dvars
dvar->modified = false; dvar->modified = false;
} }
} }
}
void DvarVec4OverrideDefaultValue(const char* dvarName, const float* dvar_value) void DvarVec4OverrideDefaultValue(const char* dvarName, const float* dvar_value)
{ {
auto dvar = Dvars::Functions::Dvar_FindVar(dvarName); if (const auto& dvar = Functions::Dvar_FindVar(dvarName); dvar)
if (!dvar)
{ {
return;
}
for (auto i = 0; i < 4; i++) for (auto i = 0; i < 4; i++)
{ {
dvar->reset.vector[i] = dvar_value[i]; dvar->reset.vector[i] = dvar_value[i];
@ -152,3 +201,4 @@ namespace Dvars
} }
} }
} }
}

View File

@ -41,7 +41,32 @@ namespace Dvars
extern Game::dvar_s* M_RawInput; extern Game::dvar_s* M_RawInput;
// Gamepad // Gamepad
extern Game::dvar_s* gpad_enabled;
extern Game::dvar_s* gpad_debug;
extern Game::dvar_s* gpad_present;
extern Game::dvar_s* gpad_in_use;
extern Game::dvar_s* gpad_style;
extern Game::dvar_s* gpad_sticksConfig;
extern Game::dvar_s* gpad_buttonConfig;
extern Game::dvar_s* gpad_menu_scroll_delay_first;
extern Game::dvar_s* gpad_menu_scroll_delay_rest;
extern Game::dvar_s* gpad_stick_pressed_hysteresis;
extern Game::dvar_s* gpad_stick_pressed;
extern Game::dvar_s* gpad_stick_deadzone_min;
extern Game::dvar_s* gpad_stick_deadzone_max;
extern Game::dvar_s* gpad_button_deadzone;
extern Game::dvar_s* gpad_button_lstick_deflect_max;
extern Game::dvar_s* gpad_button_rstick_deflect_max;
extern Game::dvar_s* gpad_use_hold_time; extern Game::dvar_s* gpad_use_hold_time;
extern Game::dvar_s* gpad_lockon_enabled;
extern Game::dvar_s* gpad_slowdown_enabled;
extern Game::dvar_s* gpad_autoaim_enabled;
extern Game::dvar_s* gpad_aimassist;
extern Game::dvar_s* input_viewSensitivity;
extern Game::dvar_s* input_invertPitch;
extern Game::dvar_s* aim_aimAssistRangeScale;
extern Game::dvar_s* aim_autoAimRangeScale;
extern Game::dvar_s* aim_lockon_pitch_strength;
namespace Functions namespace Functions
{ {
@ -51,10 +76,17 @@ namespace Dvars
void Dvar_SetStringByName(const char* dvarName, const char* value); void Dvar_SetStringByName(const char* dvarName, const char* value);
void Dvar_SetIntByName(const char* dvarName, int value); void Dvar_SetIntByName(const char* dvarName, int value);
void Dvar_Reset(int value/*eax*/, Game::dvar_s* dvar/*ecx*/); void Dvar_Reset(int value/*eax*/, Game::dvar_s* dvar/*ecx*/);
// Sets
void SetRaw(const char* dvarName, bool value);
void SetRaw(Game::dvar_s* dvar, bool value);
void SetRaw(const char* dvarName, const char* value);
void SetRaw(Game::dvar_s* dvar, const char* value);
} }
namespace Register namespace Register
{ {
// INTEGER
static Utils::function<Game::dvar_s* (const char* dvarName, Game::dvar_type typeInt, std::uint16_t flags, const char* description, std::int32_t defaultValue, std::int32_t null1, std::int32_t null2, std::int32_t null3, std::int32_t minValue, std::int32_t maxValue)> static Utils::function<Game::dvar_s* (const char* dvarName, Game::dvar_type typeInt, std::uint16_t flags, const char* description, std::int32_t defaultValue, std::int32_t null1, std::int32_t null2, std::int32_t null3, std::int32_t minValue, std::int32_t maxValue)>
Dvar_RegisterInt_r = 0x588750; Dvar_RegisterInt_r = 0x588750;
@ -63,22 +95,41 @@ namespace Dvars
return Dvar_RegisterInt_r(dvar_name, Game::dvar_type::integer, flags, description, default_value, 0, 0, 0, min_value, max_value); return Dvar_RegisterInt_r(dvar_name, Game::dvar_type::integer, flags, description, default_value, 0, 0, 0, min_value, max_value);
} }
// BOOL
static Utils::function<Game::dvar_s* (const char* dvar_name, Game::dvar_type type_bool, std::uint16_t flags, const char* description, std::int32_t default_value, std::int32_t null1, std::int32_t null2, std::int32_t null3, std::int32_t null4, std::int32_t null5)> static Utils::function<Game::dvar_s* (const char* dvar_name, Game::dvar_type type_bool, std::uint16_t flags, const char* description, std::int32_t default_value, std::int32_t null1, std::int32_t null2, std::int32_t null3, std::int32_t null4, std::int32_t null5)>
Dvar_RegisterBool_r = 0x588750; Dvar_RegisterNewBool = 0x588750;
static Utils::function<void(Game::dvar_s* dvar, const char* dvar_name, Game::dvar_type type_bool, std::uint16_t flags, const char* description, std::int32_t default_value, std::int32_t null1, std::int32_t null2, std::int32_t null3, std::int32_t null4, std::int32_t null5)>
Dvar_ReregisterBool = 0x588610;
inline Game::dvar_s* Dvar_RegisterBool(const char* dvar_name, const char* description, std::int32_t default_value, std::uint16_t flags) inline Game::dvar_s* Dvar_RegisterBool(const char* dvar_name, const char* description, std::int32_t default_value, std::uint16_t flags)
{ {
return Dvar_RegisterBool_r(dvar_name, Game::dvar_type::boolean, flags, description, default_value, 0, 0, 0, 0, 0); if (const auto& dvar = Functions::Dvar_FindVar(dvar_name); dvar)
{
Dvar_ReregisterBool(dvar, dvar_name, Game::dvar_type::boolean, flags, description, default_value, 0, 0, 0, 0, 0);
return dvar;
}
else
return Dvar_RegisterNewBool(dvar_name, Game::dvar_type::boolean, flags, description, default_value, 0, 0, 0, 0, 0);
} }
// ENUM
static Utils::function<Game::dvar_s* (const char* dvar_name, Game::dvar_type type_enum, std::uint16_t flags, const char* description, std::int32_t default_index, std::int32_t null1, std::int32_t null2, std::int32_t null3, std::int32_t enumSize, const char** enum_data)> static Utils::function<Game::dvar_s* (const char* dvar_name, Game::dvar_type type_enum, std::uint16_t flags, const char* description, std::int32_t default_index, std::int32_t null1, std::int32_t null2, std::int32_t null3, std::int32_t enumSize, const char** enum_data)>
Dvar_RegisterEnum_r = 0x588750; Dvar_RegisterNewEnum = 0x588750;
static Utils::function<void(Game::dvar_s* dvar, const char* dvar_name, Game::dvar_type type_enum, std::uint16_t flags, const char* description, std::int32_t default_value, std::int32_t null1, std::int32_t null2, std::int32_t null3, std::int32_t enumSize, const char** enum_data)>
Dvar_ReregisterEnum = 0x588610;
inline Game::dvar_s* Dvar_RegisterEnum(const char* dvar_name, const char* description, std::int32_t default_value, std::int32_t enum_size, const char** enum_data, std::uint16_t flags) inline Game::dvar_s* Dvar_RegisterEnum(const char* dvar_name, const char* description, std::int32_t default_value, std::int32_t enum_size, const char** enum_data, std::uint16_t flags)
{ {
return Dvar_RegisterEnum_r(dvar_name, Game::dvar_type::enumeration, flags, description, default_value, 0, 0, 0, enum_size, enum_data); if (const auto& dvar = Functions::Dvar_FindVar(dvar_name); dvar)
{
Dvar_ReregisterEnum(dvar, dvar_name, Game::dvar_type::enumeration, flags, description, default_value, 0, 0, 0, enum_size, enum_data);
return dvar;
}
else
return Dvar_RegisterNewEnum(dvar_name, Game::dvar_type::enumeration, flags, description, default_value, 0, 0, 0, enum_size, enum_data);
} }
// STRING
static Utils::function<Game::dvar_s* (const char* dvar_name, Game::dvar_type type_string, std::uint16_t flags, const char* description, const char* default_value, std::int32_t null1, std::int32_t null2, std::int32_t null3, std::int32_t null4, std::int32_t null5)> static Utils::function<Game::dvar_s* (const char* dvar_name, Game::dvar_type type_string, std::uint16_t flags, const char* description, const char* default_value, std::int32_t null1, std::int32_t null2, std::int32_t null3, std::int32_t null4, std::int32_t null5)>
Dvar_RegisterString_r = 0x588750; Dvar_RegisterString_r = 0x588750;
@ -93,6 +144,7 @@ namespace Dvars
return dvar; return dvar;
} }
// VEC2
static Utils::function<Game::dvar_s* (const char* dvar_name, Game::dvar_type type_float2, std::uint16_t flags, const char* description, float x, float y, std::int32_t null1, std::int32_t null2, float min, float max)> static Utils::function<Game::dvar_s* (const char* dvar_name, Game::dvar_type type_float2, std::uint16_t flags, const char* description, float x, float y, std::int32_t null1, std::int32_t null2, float min, float max)>
Dvar_RegisterVec2_r = 0x588750; Dvar_RegisterVec2_r = 0x588750;
@ -100,6 +152,7 @@ namespace Dvars
return Dvar_RegisterVec2_r(dvar_name, Game::dvar_type::vec2, flags, description, x, y, 0, 0, min_value, max_value); return Dvar_RegisterVec2_r(dvar_name, Game::dvar_type::vec2, flags, description, x, y, 0, 0, min_value, max_value);
} }
// VEC3
static Utils::function<Game::dvar_s* (const char* dvar_name, Game::dvar_type type_float3, std::uint16_t flags, const char* description, float x, float y, float z, std::int32_t null, float min, float max)> static Utils::function<Game::dvar_s* (const char* dvar_name, Game::dvar_type type_float3, std::uint16_t flags, const char* description, float x, float y, float z, std::int32_t null, float min, float max)>
Dvar_RegisterVec3_r = 0x588750; Dvar_RegisterVec3_r = 0x588750;
@ -107,13 +160,24 @@ namespace Dvars
return Dvar_RegisterVec3_r(dvar_name, Game::dvar_type::vec3, flags, description, x, y, z, 0, min_value, max_value); return Dvar_RegisterVec3_r(dvar_name, Game::dvar_type::vec3, flags, description, x, y, z, 0, min_value, max_value);
} }
// VEC4
static Utils::function<Game::dvar_s* (const char* dvar_name, Game::dvar_type type_float4, std::uint16_t flags, const char* description, float x, float y, float z, float w, float min, float max)> static Utils::function<Game::dvar_s* (const char* dvar_name, Game::dvar_type type_float4, std::uint16_t flags, const char* description, float x, float y, float z, float w, float min, float max)>
Dvar_RegisterVec4_r = 0x588750; Dvar_RegisterNewVec4 = 0x588750;
static Utils::function<void(Game::dvar_s* dvar, const char* dvar_name, Game::dvar_type type_float4, std::uint16_t flags, const char* description, float x, float y, float z, float w, float min, float max)>
Dvar_ReregisterVec4 = 0x588610;
inline Game::dvar_s* Dvar_RegisterVec4(const char* dvar_name, const char* description, float x, float y, float z, float w, float min_value, float max_value, std::uint16_t flags) { inline Game::dvar_s* Dvar_RegisterVec4(const char* dvar_name, const char* description, float x, float y, float z, float w, float min_value, float max_value, std::uint16_t flags)
return Dvar_RegisterVec4_r(dvar_name, Game::dvar_type::vec4, flags, description, x, y, z, w, min_value, max_value); {
if (const auto& dvar = Functions::Dvar_FindVar(dvar_name); dvar)
{
Dvar_ReregisterVec4(dvar, dvar_name, Game::dvar_type::vec4, flags, description, x, y, z, w, min_value, max_value);
return dvar;
}
else
return Dvar_RegisterNewVec4(dvar_name, Game::dvar_type::vec4, flags, description, x, y, z, w, min_value, max_value);
} }
// FLOAT
static Utils::function<Game::dvar_s* (const char* dvar_name, Game::dvar_type type_float2, std::uint16_t flags, const char* description, float x, float y, std::int32_t null1, std::int32_t null2, float min, float max)> static Utils::function<Game::dvar_s* (const char* dvar_name, Game::dvar_type type_float2, std::uint16_t flags, const char* description, float x, float y, std::int32_t null1, std::int32_t null2, float min, float max)>
Dvar_RegisterFloat_r = 0x588750; Dvar_RegisterFloat_r = 0x588750;
@ -121,6 +185,7 @@ namespace Dvars
return Dvar_RegisterFloat_r(dvar_name, Game::dvar_type::value, flags, description, default_value, 0, 0, 0, min_value, max_value); return Dvar_RegisterFloat_r(dvar_name, Game::dvar_type::value, flags, description, default_value, 0, 0, 0, min_value, max_value);
} }
//REMOVE THIS CODE!!!
static Utils::function<Game::dvar_s* (const char* dvar_name, Game::dvar_type type, std::uint16_t flags, const char* description, int x, int y, int z, int w, int min, int max)> static Utils::function<Game::dvar_s* (const char* dvar_name, Game::dvar_type type, std::uint16_t flags, const char* description, int x, int y, int z, int w, int min, int max)>
Dvar_RegisterNew = 0x588750; Dvar_RegisterNew = 0x588750;
} }

View File

@ -291,7 +291,7 @@ namespace Components
bool Gamepad::AimAssist_IsSlowdownActive(const Game::AimInput* input) bool Gamepad::AimAssist_IsSlowdownActive(const Game::AimInput* input)
{ {
if (!Dvars::Functions::Dvar_FindVar("aim_slowdown_enabled")->current.enabled || !Dvars::Functions::Dvar_FindVar("gpad_slowdown_enabled")->current.enabled) if (!Dvars::Functions::Dvar_FindVar("aim_slowdown_enabled")->current.enabled || !Dvars::gpad_slowdown_enabled->current.enabled)
{ {
return false; return false;
} }
@ -338,7 +338,7 @@ namespace Components
} }
const auto* weaponDef = Game::bg_weaponDefs[input->ps->weapon]; const auto* weaponDef = Game::bg_weaponDefs[input->ps->weapon];
const auto aimAssistRange = AimAssist_Lerp(weaponDef->aimAssistRange, weaponDef->aimAssistRangeAds, aaGlob.adsLerp) * Dvars::Functions::Dvar_FindVar("aim_aimAssistRangeScale")->current.value; const auto aimAssistRange = AimAssist_Lerp(weaponDef->aimAssistRange, weaponDef->aimAssistRangeAds, aaGlob.adsLerp) * Dvars::aim_aimAssistRangeScale->current.value;
const auto screenTarget = AimAssist_GetBestTarget(&aaGlob, aimAssistRange, aaGlob.tweakables.slowdownRegionWidth, aaGlob.tweakables.slowdownRegionHeight); const auto screenTarget = AimAssist_GetBestTarget(&aaGlob, aimAssistRange, aaGlob.tweakables.slowdownRegionWidth, aaGlob.tweakables.slowdownRegionHeight);
if (screenTarget) if (screenTarget)
@ -380,7 +380,7 @@ namespace Components
AimAssist_CalcSlowdown(input, &slowdownPitchScale, &slowdownYawScale); AimAssist_CalcSlowdown(input, &slowdownPitchScale, &slowdownYawScale);
} }
const auto sensitivity = Dvars::Functions::Dvar_FindVar("input_viewSensitivity")->current.value; const auto sensitivity = Dvars::input_viewSensitivity->current.value;
auto pitchTurnRate = AimAssist_Lerp(Dvars::Functions::Dvar_FindVar("aim_turnrate_pitch")->current.value, Dvars::Functions::Dvar_FindVar("aim_turnrate_pitch_ads")->current.value, aaGlob.adsLerp); auto pitchTurnRate = AimAssist_Lerp(Dvars::Functions::Dvar_FindVar("aim_turnrate_pitch")->current.value, Dvars::Functions::Dvar_FindVar("aim_turnrate_pitch_ads")->current.value, aaGlob.adsLerp);
pitchTurnRate = slowdownPitchScale * aaGlob.fovTurnRateScale * sensitivity * pitchTurnRate; pitchTurnRate = slowdownPitchScale * aaGlob.fovTurnRateScale * sensitivity * pitchTurnRate;
auto yawTurnRate = AimAssist_Lerp(Dvars::Functions::Dvar_FindVar("aim_turnrate_yaw")->current.value, Dvars::Functions::Dvar_FindVar("aim_turnrate_yaw_ads")->current.value, aaGlob.adsLerp); auto yawTurnRate = AimAssist_Lerp(Dvars::Functions::Dvar_FindVar("aim_turnrate_yaw")->current.value, Dvars::Functions::Dvar_FindVar("aim_turnrate_yaw_ads")->current.value, aaGlob.adsLerp);
@ -448,7 +448,7 @@ namespace Components
{ {
AssertIn(localClientNum, Game::MAX_GPAD_COUNT); AssertIn(localClientNum, Game::MAX_GPAD_COUNT);
if (!Dvars::Functions::Dvar_FindVar("aim_lockon_enabled")->current.enabled || !Dvars::Functions::Dvar_FindVar("gpad_lockon_enabled")->current.enabled) if (!Dvars::Functions::Dvar_FindVar("aim_lockon_enabled")->current.enabled || !Dvars::gpad_lockon_enabled->current.enabled)
{ {
return false; return false;
} }
@ -548,7 +548,7 @@ namespace Components
return; return;
} }
const auto aimAssistRange = AimAssist_Lerp(weaponDef->aimAssistRange, weaponDef->aimAssistRangeAds, aaGlob.adsLerp) * Dvars::Functions::Dvar_FindVar("aim_aimAssistRangeScale")->current.value; const auto aimAssistRange = AimAssist_Lerp(weaponDef->aimAssistRange, weaponDef->aimAssistRangeAds, aaGlob.adsLerp) * Dvars::aim_aimAssistRangeScale->current.value;
const auto screenTarget = AimAssist_GetPrevOrBestTarget(&aaGlob, aimAssistRange, aaGlob.tweakables.lockOnRegionWidth, aaGlob.tweakables.lockOnRegionHeight, prevTargetEnt); const auto screenTarget = AimAssist_GetPrevOrBestTarget(&aaGlob, aimAssistRange, aaGlob.tweakables.lockOnRegionWidth, aaGlob.tweakables.lockOnRegionHeight, prevTargetEnt);
if (screenTarget && screenTarget->distSqr > 0.0f) if (screenTarget && screenTarget->distSqr > 0.0f)
@ -559,7 +559,7 @@ namespace Components
const auto pitchTurnRate = const auto pitchTurnRate =
(screenTarget->velocity[0] * aaGlob.viewAxis[2][0] + screenTarget->velocity[1] * aaGlob.viewAxis[2][1] + screenTarget->velocity[2] * aaGlob.viewAxis[2][2] (screenTarget->velocity[0] * aaGlob.viewAxis[2][0] + screenTarget->velocity[1] * aaGlob.viewAxis[2][1] + screenTarget->velocity[2] * aaGlob.viewAxis[2][2]
- (input->ps->velocity[0] * aaGlob.viewAxis[2][0] + input->ps->velocity[1] * aaGlob.viewAxis[2][1] + input->ps->velocity[2] * aaGlob.viewAxis[2][2])) - (input->ps->velocity[0] * aaGlob.viewAxis[2][0] + input->ps->velocity[1] * aaGlob.viewAxis[2][1] + input->ps->velocity[2] * aaGlob.viewAxis[2][2]))
/ arcLength * 180.0f * Dvars::Functions::Dvar_FindVar("aim_lockon_pitch_strength")->current.value; / arcLength * 180.0f * Dvars::aim_lockon_pitch_strength->current.value;
const auto yawTurnRate = const auto yawTurnRate =
(screenTarget->velocity[0] * aaGlob.viewAxis[1][0] + screenTarget->velocity[1] * aaGlob.viewAxis[1][1] + screenTarget->velocity[2] * aaGlob.viewAxis[1][2] (screenTarget->velocity[0] * aaGlob.viewAxis[1][0] + screenTarget->velocity[1] * aaGlob.viewAxis[1][1] + screenTarget->velocity[2] * aaGlob.viewAxis[1][2]
@ -575,7 +575,7 @@ namespace Components
{ {
AssertIn(localClientNum, Game::MAX_GPAD_COUNT); AssertIn(localClientNum, Game::MAX_GPAD_COUNT);
if (!Dvars::Functions::Dvar_FindVar("aim_autoaim_enabled")->current.enabled || !Dvars::Functions::Dvar_FindVar("gpad_autoaim_enabled")->current.enabled) if (!Dvars::Functions::Dvar_FindVar("aim_autoaim_enabled")->current.enabled || !Dvars::gpad_autoaim_enabled->current.enabled)
{ {
return false; return false;
} }
@ -654,7 +654,7 @@ namespace Components
{ {
if (!aaGlob.autoAimPressed) if (!aaGlob.autoAimPressed)
{ {
const auto screenTarget = AimAssist_GetBestTarget(&aaGlob, weaponDef->autoAimRange * Dvars::Functions::Dvar_FindVar("aim_autoAimRangeScale")->current.value, aaGlob.tweakables.autoAimRegionWidth, aaGlob.tweakables.autoAimRegionHeight); const auto screenTarget = AimAssist_GetBestTarget(&aaGlob, weaponDef->autoAimRange * Dvars::aim_autoAimRangeScale->current.value, aaGlob.tweakables.autoAimRegionWidth, aaGlob.tweakables.autoAimRegionHeight);
if (screenTarget) if (screenTarget)
AimAssist_SetAutoAimTarget(&aaGlob, screenTarget); AimAssist_SetAutoAimTarget(&aaGlob, screenTarget);
aaGlob.autoAimPressed = 1; aaGlob.autoAimPressed = 1;
@ -761,7 +761,7 @@ namespace Components
auto& clientActive = Game::clients[0]; auto& clientActive = Game::clients[0];
auto pitch = CL_GamepadAxisValue(Game::GPAD_VIRTAXIS_PITCH); auto pitch = CL_GamepadAxisValue(Game::GPAD_VIRTAXIS_PITCH);
if (!Dvars::Functions::Dvar_FindVar("input_invertPitch")->current.enabled) if (!Dvars::input_invertPitch->current.enabled)
pitch *= -1; pitch *= -1;
auto yaw = -CL_GamepadAxisValue(Game::GPAD_VIRTAXIS_YAW); auto yaw = -CL_GamepadAxisValue(Game::GPAD_VIRTAXIS_YAW);
@ -826,7 +826,7 @@ namespace Components
{ {
Utils::Hook::Call<void(Game::usercmd_s*)>(0x43FA90)(cmd); Utils::Hook::Call<void(Game::usercmd_s*)>(0x43FA90)(cmd);
} }
else if (Dvars::Functions::Dvar_FindVar("gpad_enabled")->current.enabled && gamePad.enabled) else if (Dvars::gpad_enabled->current.enabled && gamePad.enabled)
{ {
if(!Game::Key_IsCatcherActive(Game::KEYCATCH_CONSOLE)) //disable any actions from gamepad if game console is opened if(!Game::Key_IsCatcherActive(Game::KEYCATCH_CONSOLE)) //disable any actions from gamepad if game console is opened
CL_GamepadMove(cmd); CL_GamepadMove(cmd);
@ -960,11 +960,7 @@ namespace Components
void Gamepad::Key_SetBinding_Hk(const int localClientNum, const int keyNum, const char* binding) void Gamepad::Key_SetBinding_Hk(const int localClientNum, const int keyNum, const char* binding)
{ {
if (Key_IsValidGamePadChar(keyNum)) if (Key_IsValidGamePadChar(keyNum))
{ Dvars::Functions::SetRaw(Dvars::gpad_buttonConfig, "custom");
Dvars::Functions::Dvar_FindVar("gpad_buttonConfig")->current.string = "custom";
Dvars::Functions::Dvar_FindVar("gpad_buttonConfig")->latched.string = "custom";
}
Game::Key_SetBinding(localClientNum, keyNum, binding); Game::Key_SetBinding(localClientNum, keyNum, binding);
} }
@ -972,8 +968,7 @@ namespace Components
{ {
// A keyboard key has been pressed. Mark controller as unused. // A keyboard key has been pressed. Mark controller as unused.
gamePads[0].inUse = false; gamePads[0].inUse = false;
Dvars::Functions::Dvar_FindVar("gpad_in_use")->current.enabled = false; Dvars::Functions::SetRaw(Dvars::gpad_in_use, false);
Dvars::Functions::Dvar_FindVar("gpad_in_use")->latched.enabled = false;
// Call original function // Call original function
Utils::Hook::Call<void(int, int, int, unsigned)>(0x443D60)(localClientNum, key, down, time); //CL_KeyEvent Utils::Hook::Call<void(int, int, int, unsigned)>(0x443D60)(localClientNum, key, down, time); //CL_KeyEvent
@ -994,8 +989,7 @@ namespace Components
if (dx != 0 || dy != 0) if (dx != 0 || dy != 0)
{ {
gamePads[0].inUse = false; gamePads[0].inUse = false;
Dvars::Functions::Dvar_FindVar("gpad_in_use")->current.enabled = false; Dvars::Functions::SetRaw(Dvars::gpad_in_use, false);
Dvars::Functions::Dvar_FindVar("gpad_in_use")->latched.enabled = false;
} }
} }
@ -1006,10 +1000,7 @@ namespace Components
Game::keyname_t* Gamepad::GetLocalizedKeyNameMap() Game::keyname_t* Gamepad::GetLocalizedKeyNameMap()
{ {
if(Dvars::Functions::Dvar_FindVar("gpad_style")->current.enabled) return Dvars::gpad_style->current.enabled ? combinedLocalizedKeyNamesPs3 : combinedLocalizedKeyNamesXenon;
return combinedLocalizedKeyNamesPs3;
else
return combinedLocalizedKeyNamesXenon;
} }
void __declspec(naked) Gamepad::GetLocalizedKeyName_Stub() void __declspec(naked) Gamepad::GetLocalizedKeyName_Stub()
@ -1137,8 +1128,8 @@ namespace Components
if (Game::Key_IsCatcherActive(Game::KEYCATCH_UI)) if (Game::Key_IsCatcherActive(Game::KEYCATCH_UI))
{ {
const int scrollDelayFirst = Dvars::Functions::Dvar_FindVar("gpad_menu_scroll_delay_first")->current.integer; const int scrollDelayFirst = Dvars::gpad_menu_scroll_delay_first->current.integer;
const int scrollDelayRest = Dvars::Functions::Dvar_FindVar("gpad_menu_scroll_delay_rest")->current.integer; const int scrollDelayRest = Dvars::gpad_menu_scroll_delay_rest->current.integer;
for (const auto menuScrollButton : menuScrollButtonList) for (const auto menuScrollButton : menuScrollButtonList)
{ {
@ -1192,6 +1183,13 @@ namespace Components
if (pressedOrUpdated && CL_CheckForIgnoreDueToRepeat(localClientNum, key, keyState.keys[key].repeats, time)) if (pressedOrUpdated && CL_CheckForIgnoreDueToRepeat(localClientNum, key, keyState.keys[key].repeats, time))
return; return;
if (Game::clientUIActive->connectionState == Game::CA_CINEMATIC || Game::clientUIActive->connectionState == Game::CA_LOGO)
{
if ((pressed && (key == Game::K_BUTTON_A || key == Game::K_FIRSTGAMEPADBUTTON_RANGE_2)) && Game::Key_IsCatcherActive(Game::KEYCATCH_UI) == 0 || Game::g_currentMenuType == 0)
Game::CL_StopLogoOrCinematic(localClientNum);
}
if (Game::Key_IsCatcherActive(Game::KEYCATCH_LOCATION_SELECTION) && pressedOrUpdated) if (Game::Key_IsCatcherActive(Game::KEYCATCH_LOCATION_SELECTION) && pressedOrUpdated)
{ {
if (key == Game::K_BUTTON_B || keyState.keys[key].binding && std::strcmp(keyState.keys[key].binding, "+actionslot 4") == 0) if (key == Game::K_BUTTON_B || keyState.keys[key].binding && std::strcmp(keyState.keys[key].binding, "+actionslot 4") == 0)
@ -1252,8 +1250,7 @@ namespace Components
auto& gamePad = gamePads[localClientNum]; auto& gamePad = gamePads[localClientNum];
gamePad.inUse = true; gamePad.inUse = true;
Dvars::Functions::Dvar_FindVar("gpad_in_use")->current.enabled = true; Dvars::Functions::SetRaw(Dvars::gpad_in_use, true);
Dvars::Functions::Dvar_FindVar("gpad_in_use")->latched.enabled = true;
if (Game::Key_IsCatcherActive(Game::KEYCATCH_UI)) if (Game::Key_IsCatcherActive(Game::KEYCATCH_UI))
{ {
@ -1277,14 +1274,14 @@ namespace Components
stickVec[0] = static_cast<float>(x) / static_cast<float>(std::numeric_limits<short>::max()); stickVec[0] = static_cast<float>(x) / static_cast<float>(std::numeric_limits<short>::max());
stickVec[1] = static_cast<float>(y) / static_cast<float>(std::numeric_limits<short>::max()); stickVec[1] = static_cast<float>(y) / static_cast<float>(std::numeric_limits<short>::max());
const auto deadZoneTotal = Dvars::Functions::Dvar_FindVar("gpad_stick_deadzone_min")->current.value + Dvars::Functions::Dvar_FindVar("gpad_stick_deadzone_max")->current.value; const auto deadZoneTotal = Dvars::gpad_stick_deadzone_min->current.value + Dvars::gpad_stick_deadzone_max->current.value;
auto len = Game::Vec2Normalize(stickVec); auto len = Game::Vec2Normalize(stickVec);
if (Dvars::Functions::Dvar_FindVar("gpad_stick_deadzone_min")->current.value <= len) if (Dvars::gpad_stick_deadzone_min->current.value <= len)
{ {
if (1.0f - Dvars::Functions::Dvar_FindVar("gpad_stick_deadzone_max")->current.value >= len) if (1.0f - Dvars::gpad_stick_deadzone_max->current.value >= len)
{ {
len = (len - Dvars::Functions::Dvar_FindVar("gpad_stick_deadzone_min")->current.value) / (1.0f - deadZoneTotal); len = (len - Dvars::gpad_stick_deadzone_min->current.value) / (1.0f - deadZoneTotal);
} }
else else
{ {
@ -1353,7 +1350,7 @@ namespace Components
return; return;
} }
const auto scrollDelayFirst = Dvars::Functions::Dvar_FindVar("gpad_menu_scroll_delay_first")->current.integer; const auto scrollDelayFirst = Dvars::gpad_menu_scroll_delay_first->current.integer;
for (const auto scrollButton : menuScrollButtonList) for (const auto scrollButton : menuScrollButtonList)
{ {
if (key == scrollButton) if (key == scrollButton)
@ -1413,9 +1410,7 @@ namespace Components
if (std::fabs(value) > 0.0f) if (std::fabs(value) > 0.0f)
{ {
gamePad.inUse = true; gamePad.inUse = true;
Dvars::Functions::SetRaw(Dvars::gpad_in_use, true);
Dvars::Functions::Dvar_FindVar("gpad_in_use")->current.enabled = true;
Dvars::Functions::Dvar_FindVar("gpad_in_use")->latched.enabled = true;
} }
} }
@ -1552,15 +1547,15 @@ namespace Components
auto& gamePad = gamePads[localClientNum]; auto& gamePad = gamePads[localClientNum];
gamePad.stickDownLast[stickIndex][dir] = gamePad.stickDown[stickIndex][dir]; gamePad.stickDownLast[stickIndex][dir] = gamePad.stickDown[stickIndex][dir];
auto threshold = Dvars::Functions::Dvar_FindVar("gpad_stick_pressed")->current.value; auto threshold = Dvars::gpad_stick_pressed->current.value;
if (gamePad.stickDownLast[stickIndex][dir]) if (gamePad.stickDownLast[stickIndex][dir])
{ {
threshold -= Dvars::Functions::Dvar_FindVar("gpad_stick_pressed_hysteresis")->current.value; threshold -= Dvars::gpad_stick_pressed_hysteresis->current.value;
} }
else else
{ {
threshold += Dvars::Functions::Dvar_FindVar("gpad_stick_pressed_hysteresis")->current.value; threshold += Dvars::gpad_stick_pressed_hysteresis->current.value;
} }
if (dir == Game::GPAD_STICK_POS) if (dir == Game::GPAD_STICK_POS)
@ -1597,7 +1592,7 @@ namespace Components
GPad_UpdateSticksDown(localClientNum); GPad_UpdateSticksDown(localClientNum);
if (Dvars::Functions::Dvar_FindVar("gpad_debug")->current.enabled) if (Dvars::gpad_debug->current.enabled)
{ {
Game::Com_Printf(0, "Left: X: {%f} Y: {%f}\n", lVec[0], lVec[1]); Game::Com_Printf(0, "Left: X: {%f} Y: {%f}\n", lVec[0], lVec[1]);
Game::Com_Printf(0, "Right: X: {%f} Y: {%f}\n", rVec[0], rVec[1]); Game::Com_Printf(0, "Right: X: {%f} Y: {%f}\n", rVec[0], rVec[1]);
@ -1618,23 +1613,21 @@ namespace Components
gamePad.lastDigitals = gamePad.digitals; gamePad.lastDigitals = gamePad.digitals;
gamePad.digitals = state.wButtons; gamePad.digitals = state.wButtons;
const auto leftDeflect = Dvars::Functions::Dvar_FindVar("gpad_button_lstick_deflect_max")->current.value; const auto leftDeflect = Dvars::gpad_button_lstick_deflect_max->current.value;
if (std::fabs(gamePad.sticks[0]) > leftDeflect || std::fabs(gamePad.sticks[1]) > leftDeflect) if (std::fabs(gamePad.sticks[0]) > leftDeflect || std::fabs(gamePad.sticks[1]) > leftDeflect)
{ {
gamePad.digitals &= ~static_cast<short>(XINPUT_GAMEPAD_LEFT_THUMB); gamePad.digitals &= ~static_cast<short>(XINPUT_GAMEPAD_LEFT_THUMB);
} }
const auto rightDeflect = Dvars::Functions::Dvar_FindVar("gpad_button_rstick_deflect_max")->current.value; const auto rightDeflect = Dvars::gpad_button_rstick_deflect_max->current.value;
if (std::fabs(gamePad.sticks[2]) > leftDeflect || std::fabs(gamePad.sticks[3]) > rightDeflect) if (std::fabs(gamePad.sticks[2]) > leftDeflect || std::fabs(gamePad.sticks[3]) > rightDeflect)
{ {
gamePad.digitals &= ~static_cast<short>(XINPUT_GAMEPAD_RIGHT_THUMB); gamePad.digitals &= ~static_cast<short>(XINPUT_GAMEPAD_RIGHT_THUMB);
} }
if (Dvars::Functions::Dvar_FindVar("gpad_debug")->current.enabled) if (Dvars::gpad_debug->current.enabled)
{
Game::Com_Printf(0, "Buttons: {%hu}\n", gamePad.digitals); Game::Com_Printf(0, "Buttons: {%hu}\n", gamePad.digitals);
} }
}
void Gamepad::GPad_UpdateAnalogs(const int localClientNum, const XINPUT_GAMEPAD& state) void Gamepad::GPad_UpdateAnalogs(const int localClientNum, const XINPUT_GAMEPAD& state)
{ {
@ -1642,7 +1635,7 @@ namespace Components
auto& gamePad = gamePads[localClientNum]; auto& gamePad = gamePads[localClientNum];
const auto buttonDeadZone = Dvars::Functions::Dvar_FindVar("gpad_button_deadzone")->current.value; const auto buttonDeadZone = Dvars::gpad_button_deadzone->current.value;
gamePad.lastAnalogs[0] = gamePad.analogs[0]; gamePad.lastAnalogs[0] = gamePad.analogs[0];
gamePad.analogs[0] = static_cast<float>(state.bLeftTrigger) / static_cast<float>(std::numeric_limits<unsigned char>::max()); gamePad.analogs[0] = static_cast<float>(state.bLeftTrigger) / static_cast<float>(std::numeric_limits<unsigned char>::max());
@ -1658,11 +1651,9 @@ namespace Components
gamePad.analogs[1] = 0.0f; gamePad.analogs[1] = 0.0f;
} }
if (Dvars::Functions::Dvar_FindVar("gpad_debug")->current.enabled) if (Dvars::gpad_debug->current.enabled)
{
Game::Com_Printf(0, "Triggers: {%f} {%f}\n", gamePad.analogs[0], gamePad.analogs[1]); Game::Com_Printf(0, "Triggers: {%f} {%f}\n", gamePad.analogs[0], gamePad.analogs[1]);
} }
}
void Gamepad::GPad_UpdateAll() void Gamepad::GPad_UpdateAll()
{ {
@ -1769,6 +1760,7 @@ namespace Components
void Gamepad::IN_GamePadsMove() void Gamepad::IN_GamePadsMove()
{ {
if (!Dvars::Functions::Dvar_FindVar("gpad_enabled")->current.enabled || Game::Key_IsCatcherActive(Game::KEYCATCH_CONSOLE)) if (!Dvars::Functions::Dvar_FindVar("gpad_enabled")->current.enabled || Game::Key_IsCatcherActive(Game::KEYCATCH_CONSOLE))
if (!Dvars::gpad_enabled->current.enabled || Game::Key_IsCatcherActive(Game::KEYCATCH_CONSOLE))
return; return;
UpdateGamepadHint(); UpdateGamepadHint();
@ -1780,9 +1772,7 @@ namespace Components
{ {
auto& gamePad = gamePads[localClientNum]; auto& gamePad = gamePads[localClientNum];
if (!gamePad.enabled) if (!gamePad.enabled)
{
continue; continue;
}
gpadPresent = true; gpadPresent = true;
const auto lx = GPad_GetStick(localClientNum, Game::GPAD_LX); const auto lx = GPad_GetStick(localClientNum, Game::GPAD_LX);
@ -1792,16 +1782,8 @@ namespace Components
const auto leftTrig = GPad_GetButton(localClientNum, Game::GPAD_L_TRIG); const auto leftTrig = GPad_GetButton(localClientNum, Game::GPAD_L_TRIG);
const auto rightTrig = GPad_GetButton(localClientNum, Game::GPAD_R_TRIG); const auto rightTrig = GPad_GetButton(localClientNum, Game::GPAD_R_TRIG);
// only without mods if (!Game::HasLoadedMod())
if (strlen(Dvars::Functions::Dvar_FindVar("fs_game")->current.string) == 0)
{
CL_GamepadCheat(); CL_GamepadCheat();
}
//if (XInputGetBatteryInformation(gamePad.portIndex, BATTERY_DEVTYPE_GAMEPAD, &gamePad.battery_info) == ERROR_SUCCESS)
//{
// Game::Com_Printf(0, "Battery Level: %d\n", gamePad.battery_info.BatteryLevel);
//}
CL_GamepadEvent(localClientNum, Game::GPAD_PHYSAXIS_LSTICK_X, lx, time); CL_GamepadEvent(localClientNum, Game::GPAD_PHYSAXIS_LSTICK_X, lx, time);
CL_GamepadEvent(localClientNum, Game::GPAD_PHYSAXIS_LSTICK_Y, ly, time); CL_GamepadEvent(localClientNum, Game::GPAD_PHYSAXIS_LSTICK_Y, ly, time);
@ -1827,8 +1809,7 @@ namespace Components
} }
} }
Dvars::Functions::Dvar_FindVar("gpad_present")->current.enabled = gpadPresent; Dvars::Functions::SetRaw(Dvars::gpad_present, gpadPresent);
Dvars::Functions::Dvar_FindVar("gpad_present")->latched.enabled = gpadPresent;
} }
void Gamepad::IN_Frame_Hk() void Gamepad::IN_Frame_Hk()
@ -2091,19 +2072,17 @@ namespace Components
void Gamepad::Bind_GP_SticksConfigs_f() void Gamepad::Bind_GP_SticksConfigs_f()
{ {
const auto* stickConfigName = Dvars::Functions::Dvar_FindVar("gpad_sticksConfig")->current.string; Game::Cbuf_AddText(0, Utils::String::VA("exec %s\n", Dvars::gpad_sticksConfig->current.string));
Game::Cbuf_AddText(0, Utils::String::VA("exec %s\n", stickConfigName));
} }
void Gamepad::Bind_GP_ButtonsConfigs_f() void Gamepad::Bind_GP_ButtonsConfigs_f()
{ {
const auto* buttonConfigName = Dvars::Functions::Dvar_FindVar("gpad_buttonConfig")->current.string; Game::Cbuf_AddText(0, Utils::String::VA("exec %s\n", Dvars::gpad_buttonConfig->current.string));
Game::Cbuf_AddText(0, Utils::String::VA("exec %s\n", buttonConfigName));
} }
void Gamepad::SetAimAssist_f() void Gamepad::SetAimAssist_f()
{ {
if (Dvars::Functions::Dvar_FindVar("gpad_aimassist")->current.enabled) if (Dvars::gpad_aimassist->current.enabled)
{ {
Command::Execute("set gpad_autoaim_enabled 1", false); Command::Execute("set gpad_autoaim_enabled 1", false);
Command::Execute("set gpad_lockon_enabled 1", false); Command::Execute("set gpad_lockon_enabled 1", false);
@ -2117,44 +2096,39 @@ namespace Components
} }
} }
void Gamepad::PauseMenu_Toggle_f()
{
Command::Execute("pause", false);
}
Gamepad::Gamepad() Gamepad::Gamepad()
{ {
CL_GamepadCheatInit(); CL_GamepadCheatInit();
Events::OnDvarInit([] Events::OnDvarInit([]
{ {
Game::dvar_s* gpad_enabled = Dvars::Register::Dvar_RegisterBool("gpad_enabled", "Game pad enabled", false, Game::saved); Dvars::gpad_enabled = Dvars::Register::Dvar_RegisterBool("gpad_enabled", "Game pad enabled", false, Game::saved);
Game::dvar_s* gpad_debug = Dvars::Register::Dvar_RegisterBool("gpad_debug", "Game pad debugging", false, Game::none); Dvars::gpad_debug = Dvars::Register::Dvar_RegisterBool("gpad_debug", "Game pad debugging", false, Game::none);
Game::dvar_s* gpad_present = Dvars::Register::Dvar_RegisterBool("gpad_present", "Game pad present", false, Game::none); Dvars::gpad_present = Dvars::Register::Dvar_RegisterBool("gpad_present", "Game pad present", false, Game::none);
Game::dvar_s* gpad_in_use = Dvars::Register::Dvar_RegisterBool("gpad_in_use", "A game pad is in use", false, Game::none); Dvars::gpad_in_use = Dvars::Register::Dvar_RegisterBool("gpad_in_use", "A game pad is in use", false, Game::none);
Game::dvar_s* gpad_style = Dvars::Register::Dvar_RegisterBool("gpad_style", "Switch between Xbox and PS HUD", false, Game::saved); Dvars::gpad_style = Dvars::Register::Dvar_RegisterBool("gpad_style", "Switch between Xbox and PS HUD", false, Game::saved);
Game::dvar_s* gpad_sticksConfig = Dvars::Register::Dvar_RegisterString("gpad_sticksConfig", "Game pad stick configuration", "", Game::saved); Dvars::gpad_sticksConfig = Dvars::Register::Dvar_RegisterString("gpad_sticksConfig", "Game pad stick configuration", "", Game::saved);
Game::dvar_s* gpad_buttonConfig = Dvars::Register::Dvar_RegisterString("gpad_buttonConfig", "Game pad button configuration", "", Game::saved); Dvars::gpad_buttonConfig = Dvars::Register::Dvar_RegisterString("gpad_buttonConfig", "Game pad button configuration", "", Game::saved);
Game::dvar_s* gpad_menu_scroll_delay_first = Dvars::Register::Dvar_RegisterInt("gpad_menu_scroll_delay_first", "Menu scroll key-repeat delay, for the first repeat, in milliseconds", 420, 0, 1000, Game::none); Dvars::gpad_menu_scroll_delay_first = Dvars::Register::Dvar_RegisterInt("gpad_menu_scroll_delay_first", "Menu scroll key-repeat delay, for the first repeat, in milliseconds", 420, 0, 1000, Game::none);
Game::dvar_s* gpad_menu_scroll_delay_rest = Dvars::Register::Dvar_RegisterInt("gpad_menu_scroll_delay_rest", "Menu scroll key-repeat delay, for repeats after the first, in milliseconds", 210, 0, 1000, Game::none); Dvars::gpad_menu_scroll_delay_rest = Dvars::Register::Dvar_RegisterInt("gpad_menu_scroll_delay_rest", "Menu scroll key-repeat delay, for repeats after the first, in milliseconds", 210, 0, 1000, Game::none);
Game::dvar_s* gpad_stick_pressed_hysteresis = Dvars::Register::Dvar_RegisterFloat("gpad_stick_pressed_hysteresis", "Game pad stick pressed no-change-zone around gpad_stick_pressed to prevent bouncing", 0.1f, 0.0f, 1.0f, Game::none); Dvars::gpad_stick_pressed_hysteresis = Dvars::Register::Dvar_RegisterFloat("gpad_stick_pressed_hysteresis", "Game pad stick pressed no-change-zone around gpad_stick_pressed to prevent bouncing", 0.1f, 0.0f, 1.0f, Game::none);
Game::dvar_s* gpad_stick_pressed = Dvars::Register::Dvar_RegisterFloat("gpad_stick_pressed", "Game pad stick pressed threshhold", 0.4f, 0.0f, 1.0f, Game::none); Dvars::gpad_stick_pressed = Dvars::Register::Dvar_RegisterFloat("gpad_stick_pressed", "Game pad stick pressed threshhold", 0.4f, 0.0f, 1.0f, Game::none);
Game::dvar_s* gpad_stick_deadzone_min = Dvars::Register::Dvar_RegisterFloat("gpad_stick_deadzone_min", "Game pad minimum stick deadzone", 0.2f, 0.0f, 1.0f, Game::none); Dvars::gpad_stick_deadzone_min = Dvars::Register::Dvar_RegisterFloat("gpad_stick_deadzone_min", "Game pad minimum stick deadzone", 0.2f, 0.0f, 1.0f, Game::none);
Game::dvar_s* gpad_stick_deadzone_max = Dvars::Register::Dvar_RegisterFloat("gpad_stick_deadzone_max", "Game pad maximum stick deadzone", 0.01f, 0.0f, 1.0f, Game::none); Dvars::gpad_stick_deadzone_max = Dvars::Register::Dvar_RegisterFloat("gpad_stick_deadzone_max", "Game pad maximum stick deadzone", 0.01f, 0.0f, 1.0f, Game::none);
Game::dvar_s* gpad_button_deadzone = Dvars::Register::Dvar_RegisterFloat("gpad_button_deadzone", "Game pad button deadzone threshhold", 0.13f, 0.0f, 1.0f, Game::none); Dvars::gpad_button_deadzone = Dvars::Register::Dvar_RegisterFloat("gpad_button_deadzone", "Game pad button deadzone threshhold", 0.13f, 0.0f, 1.0f, Game::none);
Game::dvar_s* gpad_button_lstick_deflect_max = Dvars::Register::Dvar_RegisterFloat("gpad_button_lstick_deflect_max", "Game pad maximum pad stick pressed value", 1.0f, 0.0f, 1.0f, Game::none); Dvars::gpad_button_lstick_deflect_max = Dvars::Register::Dvar_RegisterFloat("gpad_button_lstick_deflect_max", "Game pad maximum pad stick pressed value", 1.0f, 0.0f, 1.0f, Game::none);
Game::dvar_s* gpad_button_rstick_deflect_max = Dvars::Register::Dvar_RegisterFloat("gpad_button_rstick_deflect_max", "Game pad maximum pad stick pressed value", 1.0f, 0.0f, 1.0f, Game::none); Dvars::gpad_button_rstick_deflect_max = Dvars::Register::Dvar_RegisterFloat("gpad_button_rstick_deflect_max", "Game pad maximum pad stick pressed value", 1.0f, 0.0f, 1.0f, Game::none);
Dvars::gpad_use_hold_time = Dvars::Register::Dvar_RegisterInt("gpad_use_hold_time", "Time to hold the 'use' button on gamepads to activate use", 250, 0, std::numeric_limits<int>::max(), Game::none); Dvars::gpad_use_hold_time = Dvars::Register::Dvar_RegisterInt("gpad_use_hold_time", "Time to hold the 'use' button on gamepads to activate use", 250, 0, std::numeric_limits<int>::max(), Game::none);
Game::dvar_s* gpad_lockon_enabled = Dvars::Register::Dvar_RegisterBool("gpad_lockon_enabled", "Game pad lockon aim assist enabled", true, Game::saved); Dvars::gpad_lockon_enabled = Dvars::Register::Dvar_RegisterBool("gpad_lockon_enabled", "Game pad lockon aim assist enabled", true, Game::saved);
Game::dvar_s* gpad_slowdown_enabled = Dvars::Register::Dvar_RegisterBool("gpad_slowdown_enabled", "Game pad slowdown aim assist enabled", true, Game::saved); Dvars::gpad_slowdown_enabled = Dvars::Register::Dvar_RegisterBool("gpad_slowdown_enabled", "Game pad slowdown aim assist enabled", true, Game::saved);
Game::dvar_s* gpad_autoaim_enabled = Dvars::Register::Dvar_RegisterBool("gpad_autoaim_enabled", "Gamepad auto aim", true, Game::saved); Dvars::gpad_autoaim_enabled = Dvars::Register::Dvar_RegisterBool("gpad_autoaim_enabled", "Gamepad auto aim", true, Game::saved);
Game::dvar_s* gpad_aimassist = Dvars::Register::Dvar_RegisterBool("gpad_aimassist", "Gamepad aim assist", true, Game::saved); Dvars::gpad_aimassist = Dvars::Register::Dvar_RegisterBool("gpad_aimassist", "Gamepad aim assist", true, Game::saved);
Game::dvar_s* input_viewSensitivity = Dvars::Register::Dvar_RegisterFloat("input_viewSensitivity", "View Sensitivity", 1.0f, 0.0001f, 5.0f, Game::saved); Dvars::input_viewSensitivity = Dvars::Register::Dvar_RegisterFloat("input_viewSensitivity", "View Sensitivity", 1.0f, 0.0001f, 5.0f, Game::saved);
Game::dvar_s* input_invertPitch = Dvars::Register::Dvar_RegisterBool("input_invertPitch", "Invert gamepad pitch", false, Game::saved); Dvars::input_invertPitch = Dvars::Register::Dvar_RegisterBool("input_invertPitch", "Invert gamepad pitch", false, Game::saved);
Game::dvar_s* aim_aimAssistRangeScale = Dvars::Register::Dvar_RegisterFloat("aim_aimAssistRangeScale", "Scales the weapon'aim_autoAimRangeScales aim assist range", 1.0f, 0.0f, 2.0f, Game::none); Dvars::aim_aimAssistRangeScale = Dvars::Register::Dvar_RegisterFloat("aim_aimAssistRangeScale", "Scales the weapon'aim_autoAimRangeScales aim assist range", 1.0f, 0.0f, 2.0f, Game::none);
Game::dvar_s* aim_autoAimRangeScale = Dvars::Register::Dvar_RegisterFloat("aim_autoAimRangeScale", "Scales the weapon's auto aim range", 1.0f, 0.0f, 2.0f, Game::none); Dvars::aim_autoAimRangeScale = Dvars::Register::Dvar_RegisterFloat("aim_autoAimRangeScale", "Scales the weapon's auto aim range", 1.0f, 0.0f, 2.0f, Game::none);
Game::dvar_s* aim_lockon_pitch_strength = Dvars::Register::Dvar_RegisterFloat("aim_lockon_pitch_strength", "The amount of aim assistance given by the target lock on (pitch)", 0.6f, 0.0f, 1.0f, Game::none); Dvars::aim_lockon_pitch_strength = Dvars::Register::Dvar_RegisterFloat("aim_lockon_pitch_strength", "The amount of aim assistance given by the target lock on (pitch)", 0.6f, 0.0f, 1.0f, Game::none);
}); });
// Add hold time to gamepad usereload on hold prompts // Add hold time to gamepad usereload on hold prompts
@ -2204,20 +2178,18 @@ namespace Components
UIScript::Add("gamepadFirstExecIfEnabled", []([[maybe_unused]] const UIScript::Token& token, [[maybe_unused]] const Game::uiInfo_s* info) UIScript::Add("gamepadFirstExecIfEnabled", []([[maybe_unused]] const UIScript::Token& token, [[maybe_unused]] const Game::uiInfo_s* info)
{ {
if (Dvars::Functions::Dvar_FindVar("gpad_enabled")->current.enabled) if (Dvars::gpad_enabled->current.enabled)
{ {
std::string gpadSticksConfig = Dvars::Functions::Dvar_FindVar("gpad_sticksConfig")->current.string; std::string gpadSticksConfig = Dvars::gpad_sticksConfig->current.string;
std::string gpadButtonConfig = Dvars::Functions::Dvar_FindVar("gpad_buttonConfig")->current.string; std::string gpadButtonConfig = Dvars::gpad_buttonConfig->current.string;
if (gpadSticksConfig == "") if (gpadSticksConfig == "")
{ {
Dvars::Functions::Dvar_FindVar("gpad_sticksConfig")->current.string = "thumbstick_default"; Dvars::Functions::SetRaw(Dvars::gpad_sticksConfig, "thumbstick_default");
Dvars::Functions::Dvar_FindVar("gpad_sticksConfig")->latched.string = "thumbstick_default";
Command::Execute("bindgpsticksconfigs", false); Command::Execute("bindgpsticksconfigs", false);
} }
if (gpadButtonConfig == "") if (gpadButtonConfig == "")
{ {
Dvars::Functions::Dvar_FindVar("gpad_buttonConfig")->current.string = "buttons_default"; Dvars::Functions::SetRaw(Dvars::gpad_buttonConfig, "buttons_default");
Dvars::Functions::Dvar_FindVar("gpad_buttonConfig")->latched.string = "buttons_default";
Command::Execute("bindgpbuttonsconfigs", false); Command::Execute("bindgpbuttonsconfigs", false);
} }