CTerrorGameMovement::UpdatePosition
0x004fe5f0 · 5053 bytes · __thiscall
_ZN19CTerrorGameMovement14UpdatePositionEP13CTerrorPlayerRK6VectorS4_fPS2_P10CGameTraceP12ITraceFilteriS5_
Decompiled
undefined (10 params)
/* CTerrorGameMovement::UpdatePosition(CTerrorPlayer*, Vector const&, Vector const&, float, Vector*,
CGameTrace*, ITraceFilter*, int, Vector*) */
void __thiscall
CTerrorGameMovement::UpdatePosition
(CTerrorGameMovement *this,CTerrorPlayer *param_1,Vector *param_2,Vector *param_3,
float param_4,Vector *param_5,CGameTrace *param_6,ITraceFilter *param_7,int param_8,
Vector *param_9)
{
int *piVar1;
uint uVar2;
char cVar3;
CTerrorGameMovement CVar4;
int iVar5;
undefined4 uVar6;
undefined *puVar7;
float fVar8;
float fVar9;
float fVar10;
float fVar11;
float fVar12;
float fVar13;
float fVar14;
float fVar15;
float local_c4;
float local_c0;
float local_bc;
float local_b8;
Vector *local_b4;
float local_a8;
float local_a4;
float local_a0;
float local_9c;
float local_98;
float local_94;
float local_90;
float local_8c;
float local_88;
float local_84;
float local_80;
float local_7c;
float local_78;
float local_74;
float local_70;
float local_6c;
float local_68;
float local_64;
float local_5c;
float local_58;
float local_54;
float local_4c;
float local_48;
float local_44;
float local_3c;
float local_38;
float local_34;
undefined4 local_2c;
undefined1 local_28;
undefined1 local_27;
fVar9 = *(float *)param_3;
local_a8 = *(float *)param_3;
fVar12 = *(float *)param_2;
fVar11 = *(float *)(param_3 + 8);
fVar15 = *(float *)(param_3 + 4);
local_a4 = *(float *)(param_3 + 4);
local_a0 = *(float *)(param_3 + 8);
fVar8 = *(float *)(param_2 + 8);
fVar10 = *(float *)(param_2 + 4);
if (param_1[0x1a90] == (CTerrorPlayer)0x0) {
iVar5 = (**(code **)(*g_pGameRules + 0x7c))(g_pGameRules);
fVar14 = *(float *)(iVar5 + 0x14);
}
else {
iVar5 = (**(code **)(*g_pGameRules + 0x7c))();
fVar14 = *(float *)(iVar5 + 0x2c);
}
iVar5 = (**(code **)(*g_pGameRules + 0x7c))(g_pGameRules);
fVar13 = *(float *)(iVar5 + 0x10);
iVar5 = (**(code **)(*g_pGameRules + 0x7c))(g_pGameRules);
local_9c = *(float *)(iVar5 + 0xc);
local_98 = fVar13;
local_94 = fVar14;
if (param_1[0x1a90] == (CTerrorPlayer)0x0) {
iVar5 = (**(code **)(*g_pGameRules + 0x7c))(g_pGameRules);
fVar14 = *(float *)(iVar5 + 0x20);
}
else {
iVar5 = (**(code **)(*g_pGameRules + 0x7c))();
fVar14 = *(float *)(iVar5 + 0x38);
}
iVar5 = (**(code **)(*g_pGameRules + 0x7c))(g_pGameRules);
fVar13 = *(float *)(iVar5 + 0x1c);
iVar5 = (**(code **)(*g_pGameRules + 0x7c))(g_pGameRules);
local_90 = *(float *)(iVar5 + 0x18);
local_84 = *(float *)param_2;
local_b8 = vec3_origin;
local_bc = DAT_01053d4c;
local_80 = *(float *)(param_2 + 4);
local_c0 = DAT_01053d50;
local_7c = *(float *)(param_2 + 8);
local_8c = fVar13;
local_88 = fVar14;
if (param_9 != (Vector *)0x0) {
local_6c = *(float *)param_2;
local_2c = 0;
local_68 = *(float *)(param_2 + 4);
local_64 = *(float *)(param_2 + 8);
local_5c = *(float *)param_9;
local_58 = *(float *)(param_9 + 4);
local_54 = *(float *)(param_9 + 8);
*(int *)(this + 2000) = *(int *)(this + 2000) + 1;
local_27 = local_58 * local_58 + local_5c * local_5c + local_54 * local_54 != 0.0;
local_38 = (fVar13 - local_98) * 0.5;
local_34 = (fVar14 - local_94) * 0.5;
local_3c = (local_90 - local_9c) * 0.5;
local_4c = (local_90 + local_9c) * 0.5;
local_48 = (fVar13 + local_98) * 0.5;
local_44 = (fVar14 + local_94) * 0.5;
local_6c = local_6c + local_4c;
local_4c = -local_4c;
local_64 = local_64 + local_44;
local_68 = local_68 + local_48;
local_48 = -local_48;
local_28 = local_38 * local_38 + local_3c * local_3c + local_34 * local_34 < 1e-06;
local_44 = -local_44;
piVar1 = *(int **)(this + 0x7cc);
if (piVar1 == (int *)0x0) {
LAB_004fed79:
local_b4 = (Vector *)&local_6c;
(**(code **)(*enginetrace + 0x14))(enginetrace,local_b4,param_8,param_7,param_6);
}
else {
cVar3 = (**(code **)(*piVar1 + 0x10))(piVar1,&local_6c);
if (cVar3 == '\0') goto LAB_004fed79;
(**(code **)(*enginetrace + 0x20))
(enginetrace,&local_6c,*(undefined4 *)(this + 0x7cc),param_8,param_7,param_6);
}
if ((0.0 < *(float *)(param_6 + 0x2c)) && (param_6[0x37] == (CGameTrace)0x0)) {
local_7c = *(float *)(param_6 + 0x14);
local_84 = *(float *)(param_6 + 0xc);
local_c0 = local_7c - *(float *)(param_2 + 8);
local_b8 = local_84 - *(float *)param_2;
local_80 = *(float *)(param_6 + 0x10);
local_bc = local_80 - *(float *)(param_2 + 4);
local_a8 = local_a8 + local_b8;
local_a4 = local_a4 + local_bc;
local_a0 = local_a0 + local_c0;
}
}
if (this[0x63d] == (CTerrorGameMovement)0x0) {
local_2c = 0;
local_5c = local_a8 - local_84;
local_54 = local_a0 - local_7c;
local_58 = local_a4 - local_80;
*(int *)(this + 2000) = *(int *)(this + 2000) + 1;
local_27 = local_5c * local_5c + local_54 * local_54 + local_58 * local_58 != 0.0;
local_3c = (local_90 - local_9c) * 0.5;
local_38 = (local_8c - local_98) * 0.5;
local_34 = (local_88 - local_94) * 0.5;
local_4c = (local_90 + local_9c) * 0.5;
local_48 = (local_8c + local_98) * 0.5;
local_44 = (local_88 + local_94) * 0.5;
local_6c = local_84 + local_4c;
local_64 = local_7c + local_44;
local_68 = local_80 + local_48;
local_28 = local_38 * local_38 + local_3c * local_3c + local_34 * local_34 < 1e-06;
piVar1 = *(int **)(this + 0x7cc);
local_4c = -local_4c;
local_48 = -local_48;
local_44 = -local_44;
if (piVar1 == (int *)0x0) {
LAB_004ff339:
local_b4 = (Vector *)&local_6c;
(**(code **)(*enginetrace + 0x14))(enginetrace,local_b4,param_8,param_7,param_6);
goto LAB_004fea2e;
}
cVar3 = (**(code **)(*piVar1 + 0x10))(piVar1,&local_6c);
if (cVar3 == '\0') goto LAB_004ff339;
(**(code **)(*enginetrace + 0x20))
(enginetrace,&local_6c,*(undefined4 *)(this + 0x7cc),param_8,param_7,param_6);
if (*(float *)(param_6 + 0x2c) <= 1.0 && *(float *)(param_6 + 0x2c) != 1.0) goto LAB_004fef78;
}
else {
PlayerMovementTraceHull
(this,(Vector *)&local_84,(Vector *)&local_a8,(Vector *)&local_9c,(Vector *)&local_90,
param_8,param_7,param_6);
LAB_004fea2e:
if (*(float *)(param_6 + 0x2c) <= 1.0 && *(float *)(param_6 + 0x2c) != 1.0) {
LAB_004fef78:
if ((*(int *)(param_6 + 0x4c) != 0) && (this[0x63d] != (CTerrorGameMovement)0x0)) {
CUtlVector<CBaseEntity*,CUtlMemory<CBaseEntity*,int>>::InsertBefore
((CUtlVector<CBaseEntity*,CUtlMemory<CBaseEntity*,int>> *)(this + 0x7e8),
*(int *)(this + 0x7f4),(CBaseEntity **)(param_6 + 0x4c));
(**(code **)(*IMoveHelper::sm_pSingleton + 0xc))(IMoveHelper::sm_pSingleton,param_6,param_5)
;
}
fVar14 = *(float *)(param_6 + 0x20);
if (fVar14 < param_4) {
*(undefined4 *)(param_6 + 0x20) = 0;
VectorNormalize((Vector *)(param_6 + 0x18));
fVar14 = *(float *)(param_6 + 0x20);
}
local_c4 = 1.0 - *(float *)(param_6 + 0x2c);
fVar13 = (fVar9 - fVar12) * local_c4;
fVar12 = (fVar15 - fVar10) * local_c4;
local_78 = *(float *)(param_6 + 0xc);
local_c4 = (fVar11 - fVar8) * local_c4;
local_74 = *(float *)(param_6 + 0x10);
local_70 = *(float *)(param_6 + 0x14);
fVar9 = fVar12 * *(float *)(param_6 + 0x1c) + fVar13 * *(float *)(param_6 + 0x18) +
fVar14 * local_c4;
fVar13 = fVar13 - *(float *)(param_6 + 0x18) * fVar9;
fVar12 = fVar12 - *(float *)(param_6 + 0x1c) * fVar9;
local_c4 = local_c4 - fVar9 * fVar14;
if (this[0x63d] == (CTerrorGameMovement)0x0) {
local_2c = 0;
*(int *)(this + 2000) = *(int *)(this + 2000) + 1;
local_27 = fVar13 * fVar13 + local_c4 * local_c4 + fVar12 * fVar12 != 0.0;
local_3c = (local_90 - local_9c) * 0.5;
local_38 = (local_8c - local_98) * 0.5;
local_34 = (local_88 - local_94) * 0.5;
local_4c = (local_90 + local_9c) * 0.5;
local_48 = (local_8c + local_98) * 0.5;
local_44 = (local_88 + local_94) * 0.5;
local_6c = local_78 + local_4c;
local_4c = -local_4c;
local_64 = local_70 + local_44;
local_68 = local_74 + local_48;
local_48 = -local_48;
local_44 = -local_44;
local_28 = local_38 * local_38 + local_3c * local_3c + local_34 * local_34 < 1e-06;
piVar1 = *(int **)(this + 0x7cc);
local_5c = fVar13;
local_58 = fVar12;
local_54 = local_c4;
if (piVar1 != (int *)0x0) {
cVar3 = (**(code **)(*piVar1 + 0x10))(piVar1,&local_6c);
if (cVar3 != '\0') {
(**(code **)(*enginetrace + 0x20))
(enginetrace,&local_6c,*(undefined4 *)(this + 0x7cc),param_8,param_7,param_6);
goto LAB_004ff0ca;
}
}
local_b4 = (Vector *)&local_6c;
(**(code **)(*enginetrace + 0x14))(enginetrace,local_b4,param_8,param_7,param_6);
}
else {
local_6c = local_78 + fVar13;
local_68 = local_74 + fVar12;
local_64 = local_70 + local_c4;
PlayerMovementTraceHull
(this,(Vector *)&local_78,(Vector *)&local_6c,(Vector *)&local_9c,
(Vector *)&local_90,param_8,param_7,param_6);
}
LAB_004ff0ca:
local_b4 = (Vector *)&local_6c;
fVar9 = *(float *)(param_6 + 0x2c);
if (fVar9 == 0.0) {
if (local_c4 < 0.0) {
if (this[0x63d] == (CTerrorGameMovement)0x0) {
local_54 = 0.0;
local_2c = 0;
*(int *)(this + 2000) = *(int *)(this + 2000) + 1;
local_27 = fVar12 * fVar12 + fVar13 * fVar13 != 0.0;
local_3c = (local_90 - local_9c) * 0.5;
local_34 = (local_88 - local_94) * 0.5;
local_38 = (local_8c - local_98) * 0.5;
local_4c = (local_90 + local_9c) * 0.5;
local_6c = local_78 + local_4c;
local_28 = local_3c * local_3c + local_34 * local_34 + local_38 * local_38 < 1e-06;
local_44 = (local_94 + local_88) * 0.5;
local_48 = (local_98 + local_8c) * 0.5;
local_64 = local_70 + local_44;
local_4c = -local_4c;
local_68 = local_74 + local_48;
local_48 = -local_48;
local_44 = -local_44;
piVar1 = *(int **)(this + 0x7cc);
local_5c = fVar13;
local_58 = fVar12;
if ((piVar1 == (int *)0x0) ||
(cVar3 = (**(code **)(*piVar1 + 0x10))(piVar1,local_b4), cVar3 == '\0')) {
(**(code **)(*enginetrace + 0x14))(enginetrace,local_b4,param_8,param_7,param_6);
}
else {
(**(code **)(*enginetrace + 0x20))
(enginetrace,local_b4,*(undefined4 *)(this + 0x7cc),param_8,param_7,param_6)
;
}
fVar9 = *(float *)(param_6 + 0x2c);
local_c4 = 0.0;
}
else {
local_6c = fVar13 + local_78;
local_68 = fVar12 + local_74;
local_64 = local_70;
PlayerMovementTraceHull
(this,(Vector *)&local_78,local_b4,(Vector *)&local_9c,(Vector *)&local_90,
param_8,param_7,param_6);
local_c4 = 0.0;
fVar9 = *(float *)(param_6 + 0x2c);
}
goto LAB_004ff820;
}
}
else {
LAB_004ff820:
if (1.0 <= fVar9) goto LAB_004fea40;
}
CVar4 = this[0x63d];
if ((*(int *)(param_6 + 0x4c) != 0) && (CVar4 != (CTerrorGameMovement)0x0)) {
CUtlVector<CBaseEntity*,CUtlMemory<CBaseEntity*,int>>::InsertBefore
((CUtlVector<CBaseEntity*,CUtlMemory<CBaseEntity*,int>> *)(this + 0x7e8),
*(int *)(this + 0x7f4),(CBaseEntity **)(param_6 + 0x4c));
(**(code **)(*IMoveHelper::sm_pSingleton + 0xc))(IMoveHelper::sm_pSingleton,param_6,param_5)
;
CVar4 = this[0x63d];
}
fVar11 = 1.0 - *(float *)(param_6 + 0x2c);
fVar9 = fVar12 * fVar11 * *(float *)(param_6 + 0x1c) +
fVar13 * fVar11 * *(float *)(param_6 + 0x18) +
fVar11 * local_c4 * *(float *)(param_6 + 0x20);
fVar15 = fVar13 * fVar11 - *(float *)(param_6 + 0x18) * fVar9;
local_78 = *(float *)(param_6 + 0xc);
fVar12 = fVar12 * fVar11 - *(float *)(param_6 + 0x1c) * fVar9;
local_74 = *(float *)(param_6 + 0x10);
fVar9 = fVar11 * local_c4 - fVar9 * *(float *)(param_6 + 0x20);
local_70 = *(float *)(param_6 + 0x14);
if (CVar4 == (CTerrorGameMovement)0x0) {
piVar1 = *(int **)(this + 0x7cc);
local_2c = 0;
*(int *)(this + 2000) = *(int *)(this + 2000) + 1;
local_27 = fVar9 * fVar9 + fVar15 * fVar15 + fVar12 * fVar12 != 0.0;
local_38 = (local_8c - local_98) * 0.5;
local_34 = (local_88 - local_94) * 0.5;
local_3c = (local_90 - local_9c) * 0.5;
local_4c = (local_90 + local_9c) * 0.5;
local_6c = local_78 + local_4c;
local_28 = local_34 * local_34 + local_38 * local_38 + local_3c * local_3c < 1e-06;
local_44 = (local_94 + local_88) * 0.5;
local_48 = (local_98 + local_8c) * 0.5;
local_64 = local_70 + local_44;
local_4c = -local_4c;
local_68 = local_74 + local_48;
local_48 = -local_48;
local_44 = -local_44;
local_5c = fVar15;
local_58 = fVar12;
local_54 = fVar9;
if ((piVar1 == (int *)0x0) ||
(cVar3 = (**(code **)(*piVar1 + 0x10))(piVar1,local_b4), cVar3 == '\0')) {
(**(code **)(*enginetrace + 0x14))(enginetrace,local_b4,param_8,param_7,param_6);
}
else {
(**(code **)(*enginetrace + 0x20))
(enginetrace,local_b4,*(undefined4 *)(this + 0x7cc),param_8,param_7,param_6);
}
}
else {
local_6c = local_78 + fVar15;
local_68 = local_74 + fVar12;
local_64 = fVar9 + local_70;
PlayerMovementTraceHull
(this,(Vector *)&local_78,local_b4,(Vector *)&local_9c,(Vector *)&local_90,param_8
,param_7,param_6);
}
}
}
LAB_004fea40:
if (((((local_b8 <= -0.01) || (0.01 <= local_b8)) || (local_bc <= -0.01)) ||
((0.01 <= local_bc || (local_c0 <= -0.01)))) || (0.01 <= local_c0)) {
local_6c = *(float *)(param_6 + 0xc);
local_2c = 0;
local_68 = *(float *)(param_6 + 0x10);
local_64 = *(float *)(param_6 + 0x14);
local_5c = (local_6c - local_b8) - local_6c;
*(int *)(this + 2000) = *(int *)(this + 2000) + 1;
local_58 = (local_68 - local_bc) - local_68;
local_54 = (local_64 - local_c0) - local_64;
local_27 = local_58 * local_58 + local_5c * local_5c + local_54 * local_54 != 0.0;
local_3c = (local_90 - local_9c) * 0.5;
local_38 = (local_8c - local_98) * 0.5;
local_34 = (local_88 - local_94) * 0.5;
local_4c = (local_90 + local_9c) * 0.5;
local_6c = local_6c + local_4c;
local_28 = local_38 * local_38 + local_3c * local_3c + local_34 * local_34 < 1e-06;
local_44 = (local_94 + local_88) * 0.5;
local_48 = (local_98 + local_8c) * 0.5;
local_64 = local_64 + local_44;
local_68 = local_68 + local_48;
piVar1 = *(int **)(this + 0x7cc);
local_4c = -local_4c;
local_48 = -local_48;
local_44 = -local_44;
if (piVar1 != (int *)0x0) {
cVar3 = (**(code **)(*piVar1 + 0x10))(piVar1,&local_6c);
if (cVar3 != '\0') {
(**(code **)(*enginetrace + 0x20))
(enginetrace,&local_6c,*(undefined4 *)(this + 0x7cc),param_8,param_7,param_6);
goto LAB_004fec47;
}
}
local_b4 = (Vector *)&local_6c;
(**(code **)(*enginetrace + 0x14))(enginetrace,local_b4,param_8,param_7,param_6);
}
LAB_004fec47:
fVar9 = *(float *)param_2;
fVar8 = *(float *)(param_6 + 0x14) - *(float *)(param_2 + 8);
fVar12 = *(float *)(param_6 + 0x10);
fVar11 = *(float *)(param_2 + 4);
fVar15 = *(float *)(param_6 + 0xc);
uVar6 = CMultiPlayerAnimState::GetMainActivity(*(CMultiPlayerAnimState **)(param_1 + 0x2910));
cVar3 = CTerrorPlayer::IsMotionControlledZ(param_1,uVar6);
if ((cVar3 == '\0') &&
(((uVar2 = *(uint *)(param_1 + 0x33c4), uVar2 == 0xffffffff ||
(puVar7 = g_pEntityList + (uVar2 & 0xfff) * 0x10, puVar7 == (undefined *)0xfffffffc)) ||
((*(uint *)(puVar7 + 8) != uVar2 >> 0xc || (*(int *)(puVar7 + 4) == 0)))))) {
fVar8 = 0.0;
}
if (*(float *)(gpGlobals + 0x10) <= 0.0) {
*(float *)param_5 = vec3_origin;
*(float *)(param_5 + 4) = DAT_01053d4c;
*(float *)(param_5 + 8) = DAT_01053d50;
return;
}
fVar10 = 1.0 / *(float *)(gpGlobals + 0x10);
*(float *)param_5 = (fVar15 - fVar9) * fVar10;
*(float *)(param_5 + 8) = fVar8 * fVar10;
*(float *)(param_5 + 4) = (fVar12 - fVar11) * fVar10;
return;
}
SourceMod gamedata
paste intoaddons/sourcemod/gamedata/<your_plugin>.txt
Just a Signatures{} block, ready to drop into a gamedata
file. Wire it up in your plugin however you like - SDKCall, DHooks,
raw memory ops, or anything else.
Signatures + Functions block. The plugin uses
DHookCreateFromConf - DHooks reads return type, this-type,
calling convention, and argument types straight from the gamedata. Less
boilerplate in the plugin, types travel with the gamedata.
Type inference is best-effort from the C signature - sanity-check the DHooks types before shipping.