CTerrorGameMovement::TryOtherPlayerMove
0x004fb4d0 · 1997 bytes · __thiscall
_ZN19CTerrorGameMovement18TryOtherPlayerMoveEP13CTerrorPlayerR6VectorS3_PS2_P10CGameTrace
Decompiled
undefined (6 params)
/* CTerrorGameMovement::TryOtherPlayerMove(CTerrorPlayer*, Vector&, Vector&, Vector*, CGameTrace*)
*/
uint __thiscall
CTerrorGameMovement::TryOtherPlayerMove
(CTerrorGameMovement *this,CTerrorPlayer *param_1,Vector *param_2,Vector *param_3,
Vector *param_4,CGameTrace *param_5)
{
float fVar1;
float fVar2;
float fVar3;
float fVar4;
uint uVar5;
float *pfVar6;
int iVar7;
Vector *pVVar8;
int iVar9;
int iVar10;
longdouble lVar11;
float fVar12;
float fVar13;
float fVar14;
float fVar15;
int local_fc;
uint local_f4;
float local_f0;
float local_ec;
float local_d0;
float local_cc;
float local_c8;
float local_c4;
float local_c0;
float local_bc;
float local_b8;
float local_b4;
float local_b0;
float local_ac [4];
float local_9c;
float local_98;
undefined4 local_70;
undefined4 local_6c;
undefined4 local_68;
undefined4 local_64;
undefined4 local_60;
undefined4 local_5c;
float local_58;
float local_54;
float local_50;
undefined4 local_4c;
CGameTrace local_48;
CGameTrace local_47;
undefined2 local_46;
float local_44;
undefined4 local_40;
undefined2 local_3c;
CGameTrace local_3a;
CGameTrace local_39;
undefined4 local_38;
undefined4 local_34;
undefined4 local_30;
undefined4 local_2c;
undefined2 local_28;
undefined2 local_26;
undefined4 local_24;
undefined4 local_20;
iVar9 = 0;
local_c4 = 0.0;
local_c0 = 0.0;
local_bc = 0.0;
local_fc = 4;
local_f4 = 0;
local_f0 = *(float *)(gpGlobals + 0x10);
local_ec = 0.0;
fVar1 = *(float *)(param_3 + 8);
fVar2 = *(float *)param_3;
fVar3 = *(float *)(param_3 + 4);
fVar12 = fVar3;
fVar13 = fVar1;
fVar14 = fVar2;
local_d0 = fVar2;
local_cc = fVar3;
local_c8 = fVar1;
do {
if (SQRT(fVar12 * fVar12 + fVar14 * fVar14 + fVar13 * fVar13) == 0.0) {
LAB_004fb8fa:
if (local_ec != 0.0) {
return local_f4;
}
*(undefined4 *)param_3 = vec3_origin;
*(undefined4 *)(param_3 + 4) = DAT_01053d4c;
*(undefined4 *)(param_3 + 8) = DAT_01053d50;
return local_f4;
}
local_b8 = fVar14 * local_f0 + *(float *)param_2;
local_b4 = fVar12 * local_f0 + *(float *)(param_2 + 4);
local_b0 = fVar13 * local_f0 + *(float *)(param_2 + 8);
if ((((g_bMovementOptimizations == '\0') || (param_4 == (Vector *)0x0)) ||
(local_b8 != *(float *)param_4)) ||
((local_b4 != *(float *)(param_4 + 4) || (local_b0 != *(float *)(param_4 + 8))))) {
uVar5 = (**(code **)(*(int *)this + 0x40))(this,0,param_1);
TraceOtherPlayerBBox
(param_1,param_2,(Vector *)&local_b8,uVar5,8,(CGameTrace *)&local_70,
(int *)(this + 2000));
}
else {
local_70 = *(undefined4 *)param_5;
local_6c = *(undefined4 *)(param_5 + 4);
local_68 = *(undefined4 *)(param_5 + 8);
local_64 = *(undefined4 *)(param_5 + 0xc);
local_60 = *(undefined4 *)(param_5 + 0x10);
local_5c = *(undefined4 *)(param_5 + 0x14);
local_58 = *(float *)(param_5 + 0x18);
local_54 = *(float *)(param_5 + 0x1c);
local_50 = *(float *)(param_5 + 0x20);
local_4c = *(undefined4 *)(param_5 + 0x24);
local_48 = param_5[0x28];
local_47 = param_5[0x29];
local_46 = *(undefined2 *)(param_5 + 0x2a);
local_44 = *(float *)(param_5 + 0x2c);
local_40 = *(undefined4 *)(param_5 + 0x30);
local_39 = param_5[0x37];
local_3c = *(undefined2 *)(param_5 + 0x34);
local_38 = *(undefined4 *)(param_5 + 0x38);
local_34 = *(undefined4 *)(param_5 + 0x3c);
local_30 = *(undefined4 *)(param_5 + 0x40);
local_2c = *(undefined4 *)(param_5 + 0x44);
local_3a = param_5[0x36];
local_28 = *(undefined2 *)(param_5 + 0x48);
local_26 = *(undefined2 *)(param_5 + 0x4a);
local_24 = *(undefined4 *)(param_5 + 0x4c);
local_20 = *(undefined4 *)(param_5 + 0x50);
}
fVar14 = local_50;
local_ec = local_ec + local_44;
if (local_3a != (CGameTrace)0x0) {
*(undefined4 *)param_3 = vec3_origin;
*(undefined4 *)(param_3 + 4) = DAT_01053d4c;
*(undefined4 *)(param_3 + 8) = DAT_01053d50;
return 4;
}
iVar10 = iVar9;
if (0.0 < local_44) {
iVar10 = 0;
*(undefined4 *)param_2 = local_64;
*(undefined4 *)(param_2 + 4) = local_60;
*(undefined4 *)(param_2 + 8) = local_5c;
local_d0 = *(float *)param_3;
local_cc = *(float *)(param_3 + 4);
local_c8 = *(float *)(param_3 + 8);
}
if (local_44 == 1.0) goto LAB_004fb8fa;
lVar11 = (longdouble)(**(code **)(*(int *)this + 0x38))(this);
fVar4 = local_44;
fVar12 = local_50;
uVar5 = local_f4 | 1;
if (fVar14 <= (float)lVar11) {
uVar5 = local_f4;
}
local_f4 = uVar5 | 2;
if (local_50 != 0.0) {
local_f4 = uVar5;
}
if (4 < iVar10) {
LAB_004fb8d4:
*(undefined4 *)param_3 = vec3_origin;
*(undefined4 *)(param_3 + 4) = DAT_01053d4c;
*(undefined4 *)(param_3 + 8) = DAT_01053d50;
goto LAB_004fb8fa;
}
iVar9 = iVar10 + 1;
local_ac[iVar10 * 3] = local_58;
fVar14 = local_54;
local_ac[iVar10 * 3 + 2] = fVar12;
local_ac[iVar10 * 3 + 1] = fVar14;
if (((iVar9 == 1) && (param_1[0x186] == (CTerrorPlayer)0x2)) &&
(iVar10 = CBaseEntity::GetGroundEntity((CBaseEntity *)param_1), fVar14 = local_ac[2],
iVar10 == 0)) {
lVar11 = (longdouble)(**(code **)(*(int *)this + 0x38))(this);
if (fVar14 <= (float)lVar11) {
CGameMovement::ClipVelocity
((CGameMovement *)this,(Vector *)&local_d0,(Vector *)local_ac,(Vector *)&local_c4,
(1.0 - *(float *)(param_1 + 0x2180)) * *(float *)(sv_bounce._28_4_ + 0x2c) + 1.0)
;
}
else {
CGameMovement::ClipVelocity
((CGameMovement *)this,(Vector *)&local_d0,(Vector *)local_ac,(Vector *)&local_c4,
1.0);
}
*(float *)param_3 = local_c4;
*(float *)(param_3 + 4) = local_c0;
*(float *)(param_3 + 8) = local_bc;
local_d0 = local_c4;
local_cc = local_c0;
local_c8 = local_bc;
}
else {
iVar10 = 0;
pVVar8 = (Vector *)local_ac;
do {
CGameMovement::ClipVelocity((CGameMovement *)this,(Vector *)&local_d0,pVVar8,param_3,1.0);
iVar7 = 0;
pfVar6 = local_ac;
do {
if ((iVar7 != iVar10) &&
(pfVar6[1] * *(float *)(param_3 + 4) + *pfVar6 * *(float *)param_3 +
pfVar6[2] * *(float *)(param_3 + 8) < 0.0)) break;
iVar7 = iVar7 + 1;
pfVar6 = pfVar6 + 3;
} while (iVar7 < iVar9);
if (iVar7 == iVar9) break;
iVar10 = iVar10 + 1;
pVVar8 = pVVar8 + 0xc;
} while (iVar10 < iVar9);
if (iVar10 == iVar9) {
if (iVar10 != 2) goto LAB_004fb8d4;
fVar14 = local_98 * local_ac[1] - local_9c * local_ac[2];
fVar12 = local_ac[2] * local_ac[3] - local_98 * local_ac[0];
fVar15 = local_9c * local_ac[0] - local_ac[1] * local_ac[3];
fVar13 = *(float *)(param_3 + 4) * fVar12 + *(float *)param_3 * fVar14 +
*(float *)(param_3 + 8) * fVar15;
fVar14 = fVar14 * fVar13;
fVar12 = fVar12 * fVar13;
fVar13 = fVar13 * fVar15;
*(float *)param_3 = fVar14;
*(float *)(param_3 + 4) = fVar12;
*(float *)(param_3 + 8) = fVar13;
}
else {
fVar14 = *(float *)param_3;
fVar12 = *(float *)(param_3 + 4);
fVar13 = *(float *)(param_3 + 8);
}
if (fVar12 * fVar3 + fVar14 * fVar2 + fVar13 * fVar1 <= 0.0) goto LAB_004fb8d4;
}
local_fc = local_fc + -1;
if (local_fc == 0) goto LAB_004fb8fa;
fVar14 = *(float *)param_3;
fVar12 = *(float *)(param_3 + 4);
fVar13 = *(float *)(param_3 + 8);
local_f0 = (1.0 - fVar4) * local_f0;
} while( true );
}
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.