CTongue::TestBend
0x00840850 · 1713 bytes · __cdecl
_ZN7CTongue8TestBendERK6VectorS2_
Decompiled
undefined (2 params)
/* CTongue::TestBend(Vector const&, Vector const&) */
undefined4 CTongue::TestBend(Vector *param_1,Vector *param_2)
{
uint uVar1;
int iVar2;
int *piVar3;
CBaseEdict *pCVar4;
Vector *pVVar5;
int iVar6;
int iVar7;
char *pcVar8;
undefined *puVar9;
undefined4 uVar10;
float fVar11;
float fVar12;
float fVar13;
float local_10c;
float local_108;
float local_104;
float local_100;
float local_fc;
float local_f8;
float local_f4;
float local_f0;
float local_ec;
float local_e8;
float local_e4;
float local_e0;
undefined **local_dc [4];
float local_cc;
float local_c8;
float local_c4;
float local_bc;
float local_b8;
float local_b4;
undefined4 local_ac;
undefined4 local_a8;
undefined4 local_a4;
undefined4 local_9c;
undefined4 local_98;
undefined4 local_94;
undefined4 local_8c;
undefined1 local_88;
undefined1 local_87;
Vector local_70 [12];
float local_64;
float local_60;
float local_5c;
float local_44;
int *local_24;
uVar1 = *(uint *)(param_1 + 0x44c);
if ((((uVar1 != 0xffffffff) &&
(puVar9 = g_pEntityList + (uVar1 & 0xfff) * 0x10, puVar9 != (undefined *)0xfffffffc)) &&
(*(uint *)(puVar9 + 8) == uVar1 >> 0xc)) &&
(((iVar2 = *(int *)(puVar9 + 4), iVar2 != 0 &&
(uVar1 = *(uint *)(iVar2 + 0x33c0), uVar1 != 0xffffffff)) &&
((puVar9 = g_pEntityList + (uVar1 & 0xfff) * 0x10, puVar9 != (undefined *)0xfffffffc &&
((*(uint *)(puVar9 + 8) == uVar1 >> 0xc &&
(piVar3 = *(int **)(puVar9 + 4), piVar3 != (int *)0x0)))))))) {
pVVar5 = param_1 + 0x544;
if (0 < *(int *)(param_1 + 0x534)) {
pVVar5 = param_1 + (*(int *)(param_1 + 0x534) * 3 + -3) * 4 + 0x4bc;
}
fVar11 = *(float *)pVVar5;
fVar12 = *(float *)(pVVar5 + 4);
fVar13 = *(float *)(pVVar5 + 8);
CTraceFilterSimple::CTraceFilterSimple
((CTraceFilterSimple *)local_dc,(IHandleEntity *)0x0,0,
(_func_bool_IHandleEntity_ptr_int *)0x0);
local_88 = 1;
local_dc[0] = &PTR_ShouldHitEntity_00c54558;
local_8c = 0;
local_bc = *(float *)param_2 - fVar11;
local_b8 = *(float *)(param_2 + 4) - fVar12;
local_b4 = *(float *)(param_2 + 8) - fVar13;
local_94 = 0;
local_98 = 0;
local_9c = 0;
local_87 = local_b8 * local_b8 + local_bc * local_bc + local_b4 * local_b4 != 0.0;
local_a4 = 0;
local_a8 = 0;
local_ac = 0;
local_cc = fVar11;
local_c8 = fVar12;
local_c4 = fVar13;
(**(code **)(*enginetrace + 0x14))
(enginetrace,(Vector *)&local_cc,0x2006083,(CTraceFilterSimple *)local_dc,local_70);
if (*(int *)(r_visualizetraces._28_4_ + 0x30) != 0) {
DebugDrawLine(local_70,(Vector *)&local_64,0xff,0,0,true,-1.0);
}
if (((local_44 < 1.0) && (local_24 != piVar3)) &&
((local_24 == (int *)0x0 || (iVar6 = (**(code **)(*local_24 + 0x144))(local_24), iVar6 == 0))
)) {
if (9 < *(int *)(param_1 + 0x534)) {
return 1;
}
local_10c = local_64 - fVar11;
local_108 = local_60 - fVar12;
local_104 = local_5c - fVar13;
local_100 = local_64 - *(float *)(param_1 + 0x4a0);
local_fc = local_60 - *(float *)(param_1 + 0x4a4);
local_f8 = local_5c - *(float *)(param_1 + 0x4a8);
VectorNormalize((Vector *)&local_10c);
VectorNormalize((Vector *)&local_100);
local_f4 = local_f8 * local_108 - local_fc * local_104;
local_f0 = local_104 * local_100 - local_f8 * local_10c;
local_ec = local_fc * local_10c - local_108 * local_100;
VectorNormalize((Vector *)&local_f4);
local_e8 = local_ec * local_108 - local_f0 * local_104;
local_e4 = local_104 * local_f4 - local_ec * local_10c;
local_e0 = local_f0 * local_10c - local_108 * local_f4;
VectorNormalize((Vector *)&local_e8);
iVar6 = *(int *)(param_1 + 0x534);
fVar11 = *(float *)(TongueBendPointDeflection._28_4_ + 0x2c);
pVVar5 = param_1 + iVar6 * 0xc + 0x4bc;
fVar12 = local_e4 * fVar11 + local_60;
fVar13 = local_e0 * fVar11 + local_5c;
fVar11 = fVar11 * local_e8 + local_64;
local_cc = fVar11;
local_c8 = fVar12;
local_c4 = fVar13;
iVar7 = memcmp(pVVar5,(Vector *)&local_cc,0xc);
if (iVar7 != 0) {
if (param_1[0x6c] == (Vector)0x0) {
pCVar4 = *(CBaseEdict **)(param_1 + 0x30);
if (pCVar4 != (CBaseEdict *)0x0) {
*(uint *)pCVar4 = *(uint *)pCVar4 | 0x101;
iVar6 = CBaseEdict::GetChangeAccessor(pCVar4);
*(undefined2 *)(iVar6 + 2) = 0;
fVar12 = local_c8;
fVar13 = local_c4;
fVar11 = local_cc;
}
}
else {
param_1[0x70] = (Vector)((byte)param_1[0x70] | 1);
}
*(float *)pVVar5 = fVar11;
*(float *)(pVVar5 + 4) = fVar12;
*(float *)(pVVar5 + 8) = fVar13;
iVar6 = *(int *)(param_1 + 0x534);
}
if (param_1[0x6c] == (Vector)0x0) {
pCVar4 = *(CBaseEdict **)(param_1 + 0x30);
if (pCVar4 != (CBaseEdict *)0x0) {
*(uint *)pCVar4 = *(uint *)pCVar4 | 0x101;
iVar7 = CBaseEdict::GetChangeAccessor(pCVar4);
*(undefined2 *)(iVar7 + 2) = 0;
}
}
else {
param_1[0x70] = (Vector)((byte)param_1[0x70] | 1);
}
uVar10 = TongueDebug._28_4_;
*(int *)(param_1 + 0x534) = iVar6 + 1;
if (*(int *)(uVar10 + 0x30) != 0) {
uVar10 = 0;
uVar1 = *(uint *)(iVar2 + 0x33c0);
if (((uVar1 != 0xffffffff) &&
(puVar9 = g_pEntityList + (uVar1 & 0xfff) * 0x10, puVar9 != (undefined *)0xfffffffc)) &&
(*(uint *)(puVar9 + 8) == uVar1 >> 0xc)) {
uVar10 = *(undefined4 *)(puVar9 + 4);
}
if (local_24 == (int *)0x0) {
pcVar8 = "world";
}
else {
pcVar8 = "";
if ((char *)local_24[0x1f] != (char *)0x0) {
pcVar8 = (char *)local_24[0x1f];
}
}
(**(code **)(*(int *)param_1 + 0x394))
(param_1,uVar10,"Tongue bending on %s at %.0f,%.0f,%.0f",pcVar8,(double)local_cc,
(double)local_c8,(double)local_c4);
NDebugOverlay::Cross3D((Vector *)&local_cc,5.0,0xff,0,0,true,30.0);
}
}
return 0;
}
return 1;
}
SourceMod gamedata
paste intoaddons/sourcemod/gamedata/<your_plugin>.txt
used as the SourceMod key — change to fit your plugin's convention
SourceMod library name (server / engine / matchmaking)
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.
Gamedata KeyValues
DHooks plugin example
Type inference is best-effort from the C signature - sanity-check the DHooks types before shipping.