Client: fix aim magnet bug and several other issues with CurveLook

The decompile of this function was still incorrect, after looking at the raw disassembly, bool v36 and bool v35 are now set correctly. Also, a float was never set and the decompiler assigned a local to an incorrect one for some math that was supposed to set the inputSampleFrametime, causing it to work as a counter magnet when target compensation was activated. This now also has been set correctly according to the assembly of the function itself, and now works as intended. So far, all bugs appear to be fixed in this function, its pending tests by users.
This commit is contained in:
Kawe Mazidjatari 2024-08-06 00:59:59 +02:00
parent 886f1c6a53
commit 2914027574

View File

@ -30,14 +30,12 @@ void C_Player::CurveLook(C_Player* player, CInput::UserInput_t* input, float a3,
bool m_bAutoAim_UnknownBool1B1; // r14 bool m_bAutoAim_UnknownBool1B1; // r14
QAngle* v24; // rax QAngle* v24; // rax
bool v25; // zf bool v25; // zf
QAngle v26; // xmm0_12
QAngle* p_m_angUnknown1C8; // rax QAngle* p_m_angUnknown1C8; // rax
__int64 v28; // xmm0_8
vec_t v29; // eax
float inputSampleFrametime_c; // xmm13_4 float inputSampleFrametime_c; // xmm13_4
float v31; // xmm8_4 float v31; // xmm8_4
int selectedGamePadLookCurve; // r12d int selectedGamePadLookCurve; // r12d
float v33; // xmm7_4 float v33; // xmm7_4
float v34;
int customAimSpeed; // eax int customAimSpeed; // eax
int v37; // edx int v37; // edx
float* v38; // rsi float* v38; // rsi
@ -141,18 +139,14 @@ void C_Player::CurveLook(C_Player* player, CInput::UserInput_t* input, float a3,
m_flUnknownFloat1B8 = input->m_flUnknownFloat1B8; m_flUnknownFloat1B8 = input->m_flUnknownFloat1B8;
v24 = sub_1406257E0(&v69, player); v24 = sub_1406257E0(&v69, player);
v25 = !input->m_bUnknown1D4; v25 = !input->m_bUnknown1D4;
*(_QWORD*)&v26.x = *(_QWORD*)&v24->x; v68 = *v24;
v68.z = v24->z;
p_m_angUnknown1C8 = &input->m_angUnknown1C8; p_m_angUnknown1C8 = &input->m_angUnknown1C8;
*(_QWORD*)&v68.x = *(_QWORD*)&v26.x;
if (v25) if (v25)
p_m_angUnknown1C8 = &v68; p_m_angUnknown1C8 = &v68;
v28 = *(_QWORD*)&p_m_angUnknown1C8->x;
v29 = p_m_angUnknown1C8->z;
inputSampleFrametime_c = inputSampleFrametime; inputSampleFrametime_c = inputSampleFrametime;
*(_QWORD*)&v69.x = v28; v69 = *p_m_angUnknown1C8;
v69.z = v29;
if (m_bAutoAim_UnknownBool1AD && m_bAutoAim_UnknownBool1B1) if (m_bAutoAim_UnknownBool1AD && m_bAutoAim_UnknownBool1B1)
input->m_flUnknownFloat1B4 = 0.0f; input->m_flUnknownFloat1B4 = 0.0f;
else else
@ -163,15 +157,11 @@ void C_Player::CurveLook(C_Player* player, CInput::UserInput_t* input, float a3,
sub_1405B03A0(input, player, &v71); sub_1405B03A0(input, player, &v71);
selectedGamePadLookCurve = 1; selectedGamePadLookCurve = 1;
v33 = sub_1405B0BC0(player, input, 0); v33 = sub_1405B0BC0(player, input, 0);
a5 = sub_1405B0BC0(player, input, 1); v34 = sub_1405B0BC0(player, input, 1);
a5 = v34;
bool v35 = m_bAutoAim_UnknownBool1B1; // r9 const bool v36 = m_bAutoAim_UnknownBool1AD && runAimAssist;
bool v36 = runAimAssist; const bool v35 = m_bAutoAim_UnknownBool1AD && m_bAutoAim_UnknownBool1B1;
if (!m_bAutoAim_UnknownBool1AD || !m_bAutoAim_UnknownBool1B1)
{
v35 = false;
}
customAimSpeed = C_Player__GetAimSpeed(player, isZoomed); customAimSpeed = C_Player__GetAimSpeed(player, isZoomed);
v37 = *(_DWORD*)((unsigned int)(*dword_1423880E0) + *(_QWORD*)&player->gap_21a0[16]); v37 = *(_DWORD*)((unsigned int)(*dword_1423880E0) + *(_QWORD*)&player->gap_21a0[16]);
@ -210,6 +200,7 @@ void C_Player::CurveLook(C_Player* player, CInput::UserInput_t* input, float a3,
float m_flUnknownFloat1B4 = input->m_flUnknownFloat1B4; float m_flUnknownFloat1B4 = input->m_flUnknownFloat1B4;
if (m_flUnknownFloat1B4 <= 0.2f) if (m_flUnknownFloat1B4 <= 0.2f)
{ {
v34 = 0.1f;
if (m_flUnknownFloat1B4 > 0.1f) if (m_flUnknownFloat1B4 > 0.1f)
v40 = (float)((float)((float)(m_flUnknownFloat1B4 - 0.1f) / 0.1f) * 0.35000002f) + 0.64999998f; v40 = (float)((float)((float)(m_flUnknownFloat1B4 - 0.1f) / 0.1f) * 0.35000002f) + 0.64999998f;
else else
@ -223,7 +214,7 @@ void C_Player::CurveLook(C_Player* player, CInput::UserInput_t* input, float a3,
v42 = m_flUnknownFloat1B8; v42 = m_flUnknownFloat1B8;
sub_1405AF810(player, input, (__int64)v38, m_bAutoAim_UnknownBool1AC, v36, &v70, &v69, &v68, m_flUnknownFloat1B8); sub_1405AF810(player, input, (__int64)v38, m_bAutoAim_UnknownBool1AC, v36, &v70, &v69, &v68, m_flUnknownFloat1B8);
inputSampleFrametime = ((v42 * (1.0f - v40)) + v40) * (1.0f - (v33 * 0.94999999f)); inputSampleFrametime = ((v34 * (1.0f - v40)) + v40) * (1.0f - (v33 * 0.94999999f));
v43 = sqrtf((a3 * a3) + (v73 * v73)); v43 = sqrtf((a3 * a3) + (v73 * v73));
v44 = v43; v44 = v43;