CCSGameMovement::HandleFastDuck
0x00430810 · 2748 bytes · __thiscall
_ZN15CCSGameMovement14HandleFastDuckEb
Decompiled
undefined (2 params)
/* CCSGameMovement::HandleFastDuck(bool) */
undefined4 __thiscall CCSGameMovement::HandleFastDuck(CCSGameMovement *this,bool param_1)
{
IHandleEntity *pIVar1;
code *pcVar2;
bool bVar3;
int iVar4;
float *pfVar5;
undefined4 uVar6;
int *piVar7;
float fVar8;
float fVar9;
float fVar10;
float fVar11;
float fVar12;
float fVar13;
float fVar14;
float fVar15;
float fVar16;
float fVar17;
float fVar18;
float fVar19;
float local_104;
float local_fc;
float local_f8;
float local_e8;
float local_e4;
float local_e0;
CTraceFilterSimple local_dc [16];
float local_cc;
float local_c8;
float local_c4;
undefined4 local_bc;
undefined4 local_b8;
float local_b4;
float local_ac;
float local_a8;
float local_a4;
float local_9c;
float local_98;
float local_94;
undefined4 local_8c;
undefined1 local_88;
undefined1 local_87;
Vector local_70 [12];
Vector local_64 [32];
float local_44;
char local_3a;
char local_39;
if (param_1) {
iVar4 = (**(code **)(*g_pGameRules + 0x7c))();
local_f8 = *(float *)(iVar4 + 0x3c);
local_fc = *(float *)(iVar4 + 0x40);
local_104 = *(float *)(iVar4 + 0x44);
iVar4 = (**(code **)(*g_pGameRules + 0x7c))(g_pGameRules);
local_e4 = *(float *)(iVar4 + 0x24);
local_e0 = *(float *)(iVar4 + 0x28);
local_e8 = *(float *)(iVar4 + 0x2c);
iVar4 = (**(code **)(*g_pGameRules + 0x7c))(g_pGameRules);
pfVar5 = (float *)(iVar4 + 0x30);
}
else {
pfVar5 = (float *)(**(code **)(*g_pGameRules + 0x7c))(g_pGameRules);
local_f8 = *pfVar5;
local_fc = pfVar5[1];
local_104 = pfVar5[2];
iVar4 = (**(code **)(*g_pGameRules + 0x7c))(g_pGameRules);
local_e4 = *(float *)(iVar4 + 0xc);
local_e0 = *(float *)(iVar4 + 0x10);
local_e8 = *(float *)(iVar4 + 0x14);
iVar4 = (**(code **)(*g_pGameRules + 0x7c))(g_pGameRules);
pfVar5 = (float *)(iVar4 + 0x18);
}
fVar9 = *pfVar5;
fVar12 = pfVar5[1];
fVar15 = pfVar5[2];
pfVar5 = (float *)(**(code **)(**(int **)(this + 4) + 0x250))(*(int **)(this + 4));
iVar4 = *(int *)(this + 8);
fVar18 = (*pfVar5 - local_f8) + *(float *)(iVar4 + 0x9c);
fVar16 = (pfVar5[1] - local_fc) + *(float *)(iVar4 + 0xa0);
fVar8 = (pfVar5[2] - local_104) + *(float *)(iVar4 + 0xa4);
if (param_1) {
pIVar1 = *(IHandleEntity **)(this + 4);
uVar6 = (**(code **)(*(int *)this + 0x40))(this,0,0);
local_bc = 0;
local_b8 = 0;
local_b4 = 0.0;
local_8c = 0;
local_87 = 0;
local_94 = (fVar15 - local_e8) * 0.5;
local_9c = (fVar9 - local_e4) * 0.5;
local_98 = (fVar12 - local_e0) * 0.5;
local_ac = (local_e4 + fVar9) * 0.5;
local_88 = local_94 * local_94 + local_9c * local_9c + local_98 * local_98 < 1e-06;
local_a8 = (local_e0 + fVar12) * 0.5;
local_a4 = (fVar15 + local_e8) * 0.5;
local_cc = fVar18 + local_ac;
local_c8 = fVar16 + local_a8;
local_c4 = local_a4 + fVar8;
local_ac = -local_ac;
local_a8 = -local_a8;
local_a4 = -local_a4;
CTraceFilterSimple::CTraceFilterSimple
(local_dc,pIVar1,8,(_func_bool_IHandleEntity_ptr_int *)0x0);
(**(code **)(*enginetrace + 0x14))(enginetrace,&local_cc,uVar6,local_dc,local_70);
if (*(int *)(r_visualizetraces._28_4_ + 0x30) != 0) {
DebugDrawLine(local_70,local_64,0xff,0xff,0,true,-1.0);
}
if (local_3a == '\0') {
if (local_39 != '\0') {
return 0;
}
if (local_44 == 0.0) {
return 0;
}
CBaseEntity::AddFlag(*(CBaseEntity **)(this + 4),2);
LAB_00431152:
piVar7 = *(int **)(this + 4);
if (param_1 != (bool)(char)piVar7[0x6a4]) {
(**(code **)(piVar7[0x690] + 4))(piVar7 + 0x690,piVar7 + 0x6a4);
*(bool *)(piVar7 + 0x6a4) = param_1;
piVar7 = *(int **)(this + 4);
}
if (*(char *)((int)piVar7 + 0x1a91) != '\0') {
(**(code **)(piVar7[0x690] + 4))(piVar7 + 0x690,(int)piVar7 + 0x1a91);
*(undefined1 *)((int)piVar7 + 0x1a91) = 0;
piVar7 = *(int **)(this + 4);
}
if (*(char *)((int)piVar7 + 0x1a92) != '\0') {
(**(code **)(piVar7[0x690] + 4))(piVar7 + 0x690,(int)piVar7 + 0x1a92);
*(undefined1 *)((int)piVar7 + 0x1a92) = 0;
piVar7 = *(int **)(this + 4);
}
if (piVar7[0x6a5] != 0) {
(**(code **)(piVar7[0x690] + 4))(piVar7 + 0x690,piVar7 + 0x6a5);
piVar7[0x6a5] = 0;
piVar7 = *(int **)(this + 4);
}
pcVar2 = *(code **)(*piVar7 + 0x254);
uVar6 = (**(code **)(*(int *)this + 0x24))(this,param_1);
(*pcVar2)(*(undefined4 *)(this + 4),uVar6);
iVar4 = *(int *)(this + 8);
*(float *)(iVar4 + 0x9c) = fVar18;
*(float *)(iVar4 + 0xa0) = fVar16;
*(float *)(iVar4 + 0xa4) = fVar8;
return 1;
}
}
else {
pIVar1 = *(IHandleEntity **)(this + 4);
fVar10 = *(float *)(pIVar1 + 0x1acc);
uVar6 = (**(code **)(*(int *)this + 0x40))(this,0,0);
local_bc = 0;
local_b8 = 0;
local_b4 = (fVar8 - fVar10) - fVar8;
local_8c = 0;
local_87 = local_b4 * local_b4 != 0.0;
fVar13 = (fVar9 - local_e4) * 0.5;
fVar11 = (fVar12 - local_e0) * 0.5;
fVar10 = (fVar15 - local_e8) * 0.5;
fVar19 = (fVar9 + local_e4) * 0.5;
fVar17 = (fVar12 + local_e0) * 0.5;
fVar12 = fVar18 + fVar19;
fVar14 = fVar16 + fVar17;
bVar3 = fVar13 * fVar13 + fVar10 * fVar10 + fVar11 * fVar11 < 1e-06;
fVar15 = (fVar15 + local_e8) * 0.5;
fVar9 = fVar15 + fVar8;
fVar19 = -fVar19;
fVar17 = -fVar17;
fVar15 = -fVar15;
local_cc = fVar12;
local_c8 = fVar14;
local_c4 = fVar9;
local_ac = fVar19;
local_a8 = fVar17;
local_a4 = fVar15;
local_9c = fVar13;
local_98 = fVar11;
local_94 = fVar10;
local_88 = bVar3;
CTraceFilterSimple::CTraceFilterSimple
(local_dc,pIVar1,8,(_func_bool_IHandleEntity_ptr_int *)0x0);
(**(code **)(*enginetrace + 0x14))(enginetrace,&local_cc,uVar6,local_dc,local_70);
if (*(int *)(r_visualizetraces._28_4_ + 0x30) != 0) {
DebugDrawLine(local_70,local_64,0xff,0xff,0,true,-1.0);
}
if (((local_3a == '\0') && (local_39 == '\0')) && (local_44 != 1.0)) {
pIVar1 = *(IHandleEntity **)(this + 4);
uVar6 = (**(code **)(*(int *)this + 0x40))(this,0,0);
local_bc = 0;
local_b8 = 0;
local_b4 = 0.0;
local_8c = 0;
local_87 = 0;
local_cc = fVar12;
local_c8 = fVar14;
local_c4 = fVar9;
local_ac = fVar19;
local_a8 = fVar17;
local_a4 = fVar15;
local_9c = fVar13;
local_98 = fVar11;
local_94 = fVar10;
local_88 = bVar3;
CTraceFilterSimple::CTraceFilterSimple
(local_dc,pIVar1,8,(_func_bool_IHandleEntity_ptr_int *)0x0);
(**(code **)(*enginetrace + 0x14))(enginetrace,&local_cc,uVar6,local_dc,local_70);
if (*(int *)(r_visualizetraces._28_4_ + 0x30) != 0) {
DebugDrawLine(local_70,local_64,0xff,0xff,0,true,-1.0);
}
if (((local_3a == '\0') && (local_39 == '\0')) && (local_44 == 1.0)) {
CBaseEntity::RemoveFlag(*(CBaseEntity **)(this + 4),2);
goto LAB_00431152;
}
}
}
return 0;
}
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.