CTerrorMeleeWeapon::TestMeleeSwingCollision
0x00569620 · 5232 bytes · __thiscall
_ZN18CTerrorMeleeWeapon23TestMeleeSwingCollisionERK6Vector
Decompiled
undefined (2 params)
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* CTerrorMeleeWeapon::TestMeleeSwingCollision(Vector const&) */
char __thiscall
CTerrorMeleeWeapon::TestMeleeSwingCollision(CTerrorMeleeWeapon *this,Vector *param_1)
{
float fVar1;
float fVar2;
float fVar3;
code *pcVar4;
char cVar5;
char cVar6;
IHandleEntity *pIVar7;
int iVar8;
undefined4 *puVar9;
Vector *pVVar10;
int iVar11;
int *piVar12;
CBaseEntity *this_00;
char *pcVar13;
uint uVar14;
undefined1 *puVar15;
int *piVar16;
longdouble lVar17;
float fVar18;
int iVar19;
Vector *pVVar20;
float local_214;
undefined **local_210;
float *local_20c;
Vector *local_204;
int *local_1f8;
float local_1f4;
float local_1f0;
float local_1ec;
float local_1e8;
float local_1e4;
float local_1e0;
float local_1dc;
float local_1d8;
float local_1d4;
float local_1d0;
float local_1cc;
float local_1c8;
undefined4 local_1c4;
undefined4 local_1c0;
undefined4 local_1bc;
float local_1b8;
float local_1b4;
float local_1b0;
float local_1ac;
float local_1a8;
float local_1a4;
float local_1a0;
float local_19c;
float local_198;
float local_194;
float local_190;
float local_18c;
float local_188;
float local_184;
float local_180;
int local_17c;
int local_178;
int local_170;
int local_16c;
int local_168;
undefined **local_150 [4];
undefined4 local_140 [3];
undefined4 local_134;
undefined4 local_130;
float local_12c;
float local_128;
float local_124;
float local_11c;
float local_118;
float local_114;
undefined4 local_10c;
undefined4 local_108;
undefined4 local_104;
undefined4 local_fc;
undefined4 local_f8;
undefined4 local_f4;
undefined4 local_ec;
undefined1 local_e8;
undefined1 local_e7;
Vector local_d0 [12];
undefined **local_c4;
float local_c0;
float local_bc;
float local_a4;
char local_9a;
char local_99;
int local_8c;
CTakeDamageInfo *local_84;
undefined **local_7c;
float local_78;
float local_74;
float local_70;
float local_6c;
float local_68;
int *local_64;
float local_60;
float local_5c;
float local_58;
float local_54;
float local_50;
float local_4c;
float local_48;
float local_44;
int local_40;
float local_3c;
undefined4 local_38;
uint local_34;
undefined4 local_30;
undefined4 local_2c;
undefined4 local_28;
undefined1 local_24;
undefined1 local_23;
pIVar7 = (IHandleEntity *)CTerrorWeapon::GetPlayerOwner((CTerrorWeapon *)this);
if ((pIVar7 == (IHandleEntity *)0x0) ||
(iVar8 = CMeleeWeaponInfoStore::GetMeleeWeaponInfo
((CMeleeWeaponInfoStore *)g_MeleeWeaponInfoStore,*(int *)(this + 0x17e0)),
iVar8 == 0)) {
return '\0';
}
(**(code **)(*(int *)pIVar7 + 0x478))();
fVar18 = *(float *)(melee_range._28_4_ + 0x2c);
puVar9 = (undefined4 *)(**(code **)(*(int *)pIVar7 + 0x238))();
local_1c4 = *puVar9;
local_1c0 = puVar9[1];
local_1bc = puVar9[2];
AngleVectors((QAngle *)&local_1c4,(Vector *)&local_1e8,(Vector *)&local_1dc,(Vector *)&local_1d0);
local_1b8 = *(float *)param_1 - local_1f4;
local_1b4 = *(float *)(param_1 + 4) - local_1f0;
local_1b0 = *(float *)(param_1 + 8) - local_1ec;
VectorNormalize((Vector *)&local_1b8);
local_1ac = *(float *)param_1;
local_1a8 = *(float *)(param_1 + 4);
local_1a4 = *(float *)(param_1 + 8);
VectorNormalize((Vector *)&local_1ac);
fVar1 = *(float *)(param_1 + 4);
fVar2 = *(float *)param_1;
fVar18 = (local_1a8 * local_1e4 + local_1ac * local_1e8 + local_1a4 * local_1e0) * fVar18;
fVar3 = *(float *)(param_1 + 8);
(**(code **)(*(int *)pIVar7 + 0x478))();
puVar15 = &stack0xfffffdac;
piVar16 = (int *)&stack0xfffffdac;
local_1a0 = fVar2 * fVar18 + (float)local_7c;
local_198 = fVar18 * fVar3 + local_74;
local_19c = fVar1 * fVar18 + local_78;
uVar14 = *(uint *)(*(int *)(this + 0x1824) + 0xc);
if (((uVar14 < 8) &&
((uVar14 = 1 << ((byte)uVar14 & 0x1f), (uVar14 & 0x91) != 0 || ((uVar14 & 0x62) != 0)))) ||
((uVar14 = *(uint *)(*(int *)(this + 0x1824) + 0x10), uVar14 < 8 &&
((uVar14 = 1 << ((byte)uVar14 & 0x1f), (uVar14 & 0x91) != 0 || ((uVar14 & 0x62) != 0)))))) {
local_194 = -16.0;
local_188 = 16.0;
}
else {
local_194 = -4.0;
local_188 = 4.0;
}
local_190 = local_194;
local_18c = local_194;
local_184 = local_188;
local_180 = local_188;
CTraceFilterSimpleList::CTraceFilterSimpleList((CTraceFilterSimpleList *)local_150,0);
local_150[0] = &PTR_ShouldHitEntity_00c2e780;
/* try { // try from 005698b5 to 00569f95 has its CatchHandler @ 0056aba8 */
CTraceFilterSimpleList::AddEntityToIgnore((CTraceFilterSimpleList *)local_150,pIVar7);
if (*(char *)(*(int *)(this + 0x1824) + 0x20) == '\0') {
local_3c = 0.0;
local_6c = local_1a0 - local_1f4;
local_64 = (int *)(local_198 - local_1ec);
local_68 = local_19c - local_1f0;
local_48 = (local_184 - local_190) * 0.5;
local_4c = (local_188 - local_194) * 0.5;
local_5c = (local_188 + local_194) * 0.5;
local_44 = (local_180 - local_18c) * 0.5;
local_58 = (local_184 + local_190) * 0.5;
local_54 = (local_180 + local_18c) * 0.5;
local_7c = (undefined **)(local_1f4 + local_5c);
local_74 = local_1ec + local_54;
local_78 = local_1f0 + local_58;
local_5c = -local_5c;
local_58 = -local_58;
local_54 = -local_54;
local_38 = CONCAT31(CONCAT21(local_38._2_2_,
(float)local_64 * (float)local_64 + local_6c * local_6c +
local_68 * local_68 != 0.0),
local_44 * local_44 + local_48 * local_48 + local_4c * local_4c < 1e-06);
(**(code **)(*enginetrace + 0x14))();
if (*(int *)(r_visualizetraces._28_4_ + 0x30) != 0) {
iVar19 = 0xff;
goto LAB_00569bfd;
}
}
else {
local_ec = 0;
local_f4 = 0;
local_f8 = 0;
local_fc = 0;
local_118 = local_19c - local_1f0;
local_e8 = 1;
local_114 = local_198 - local_1ec;
local_104 = 0;
local_108 = 0;
local_11c = local_1a0 - local_1f4;
local_10c = 0;
local_12c = local_1f4;
local_128 = local_1f0;
local_124 = local_1ec;
local_e7 = local_118 * local_118 + local_114 * local_114 + local_11c * local_11c != 0.0;
(**(code **)(*enginetrace + 0x14))();
if (*(int *)(r_visualizetraces._28_4_ + 0x30) != 0) {
iVar19 = 0;
LAB_00569bfd:
local_204 = local_d0;
DebugDrawLine(local_204,(Vector *)&local_c4,0xff,iVar19,0,true,-1.0);
}
}
local_204 = local_d0;
if (*(int *)(melee_show_swing._28_4_ + 0x30) != 0) {
uVar14 = 0;
if ((1.0 <= local_a4) && (local_9a == '\0')) {
uVar14 = -(uint)(local_99 == '\0') & 0xff;
}
if (*(int *)(melee_show_swing._28_4_ + 0x30) < 2) {
pVVar20 = (Vector *)&local_12c;
pVVar10 = (Vector *)&local_7c;
local_12c = 0.5;
local_128 = 0.5;
local_124 = 0.5;
local_7c = (undefined **)0xbf000000;
local_78 = -0.5;
local_74 = -0.5;
}
else {
pVVar20 = (Vector *)&local_188;
pVVar10 = (Vector *)&local_194;
}
NDebugOverlay::SweptBox
((Vector *)&local_1f4,(Vector *)&local_1a0,pVVar10,pVVar20,(QAngle *)&vec3_angle,0xff,
uVar14,0,0xff,3.0);
}
if ((*(byte *)(iVar8 + 0x124) & 4) != 0) {
ClipTraceToTongue::ClipTraceToTongue
((ClipTraceToTongue *)&local_7c,local_204,(Vector *)&local_c4);
ForEachTerrorPlayer<ClipTraceToTongue>((ClipTraceToTongue *)&local_7c);
if ((local_7c != (undefined **)0x0) && (local_6c < *(float *)(TongueBulletRadius._28_4_ + 0x2c))
) {
(**(code **)(*local_7c + 0x398))();
}
}
if ((((1.0 <= local_a4) && (local_9a == '\0')) && (local_99 == '\0')) ||
((local_84 == (CTakeDamageInfo *)0x0 ||
(cVar5 = ShouldHitEntity(this,(CBaseEntity *)local_84), cVar5 == '\0')))) {
cVar5 = '\0';
goto LAB_0056a20f;
}
if (*(char *)(*(int *)(this + 0x1824) + 0x20) == '\0') {
iVar19 = *(int *)(this + 0x17f4);
if (iVar19 < 1) {
LAB_00569d58:
(**(code **)(*(int *)this + 0x6d8))();
goto LAB_00569d7f;
}
piVar12 = *(int **)(this + 0x17e8);
piVar16 = (int *)&stack0xfffffdac;
if (local_84 != (CTakeDamageInfo *)*piVar12) {
iVar11 = 0;
do {
iVar11 = iVar11 + 1;
if (iVar11 == iVar19) goto LAB_00569d58;
} while (local_84 != (CTakeDamageInfo *)piVar12[iVar11]);
piVar16 = (int *)&stack0xfffffdac;
if (iVar11 == -1) goto LAB_00569d58;
goto LAB_00569d9d;
}
}
else {
/* try { // try from 0056a5fa to 0056a8b4 has its CatchHandler @ 0056abb5 */
lVar17 = (longdouble)GetDamageForVictim(this,(CBaseEntity *)local_84);
iVar19 = *(int *)(iVar8 + 0x124);
(**(code **)(*(int *)pIVar7 + 0x478))();
puVar15 = &stack0xfffffda8;
CTakeDamageInfo::CTakeDamageInfo
((CTakeDamageInfo *)&local_7c,(CBaseEntity *)this,(CBaseEntity *)pIVar7,
(CBaseEntity *)this,(Vector *)&vec3_origin,(Vector *)&local_17c,(float)lVar17,iVar19,
0,(Vector *)0x0);
if (0 < *(int *)(this + 0x17f4)) {
if (local_84 != (CTakeDamageInfo *)**(int **)(this + 0x17e8)) {
iVar19 = 0;
do {
iVar19 = iVar19 + 1;
if (iVar19 == *(int *)(this + 0x17f4)) goto LAB_0056a6b0;
} while (local_84 != (CTakeDamageInfo *)(*(int **)(this + 0x17e8))[iVar19]);
if (iVar19 == -1) goto LAB_0056a6b0;
}
local_40 = 0;
}
LAB_0056a6b0:
this_00 = (CBaseEntity *)__dynamic_cast();
if ((this_00 != (CBaseEntity *)0x0) &&
(iVar19 = CBaseEntity::GetTeamNumber(this_00), iVar19 == 3)) {
local_e8 = 1;
local_f4 = 0;
local_12c = local_1f4;
local_128 = local_1f0;
local_118 = local_19c - local_1f0;
local_f8 = 0;
local_11c = local_1a0 - local_1f4;
local_fc = 0;
local_ec = 0;
local_114 = local_198 - local_1ec;
local_104 = 0;
local_108 = 0;
local_124 = local_1ec;
local_10c = 0;
local_e7 = local_11c * local_11c + local_118 * local_118 + local_114 * local_114 != 0.0;
(**(code **)(*(int *)this_00 + 0x44))();
if ((local_34 & 0x84) != 0) {
uVar14 = local_34 >> 2 & 1;
if (uVar14 != 0) {
local_34 = local_34 | 0x80000000;
}
if (local_8c != 0) {
CRecipientFilter::CRecipientFilter((CRecipientFilter *)&local_170);
/* try { // try from 0056aa78 to 0056aab9 has its CatchHandler @ 0056abb7 */
CRecipientFilter::MakeReliable((CRecipientFilter *)&local_170);
CRecipientFilter::AddRecipient((CRecipientFilter *)&local_170,(CBasePlayer *)pIVar7);
pcVar13 = "MeleeSlashSplatter";
if ((char)uVar14 == '\0') {
pcVar13 = "MeleeClubSplatter";
}
UserMessageBegin((IRecipientFilter *)&local_170,pcVar13);
MessageWriteByte(1);
MessageEnd();
CRecipientFilter::~CRecipientFilter((CRecipientFilter *)&local_170);
}
}
}
iVar19 = *(int *)(this + 0x1824);
fVar18 = *(float *)(iVar19 + 0x2c);
local_124 = *(float *)(iVar19 + 0x28);
fVar1 = *(float *)(iVar19 + 0x24);
local_12c = local_1dc * local_124;
local_128 = local_1d8 * local_124;
local_124 = local_124 * local_1d4;
local_214 = *(float *)(melee_force_scalar._28_4_ + 0x2c);
local_210 = (undefined **)((local_1e8 * fVar1 + local_1d0 * fVar18 + local_12c) * local_214);
local_20c = (float *)((local_1cc * fVar18 + local_128 + local_1e4 * fVar1) * local_214);
local_214 = local_214 * (fVar1 * local_1e0 + fVar18 * local_1c8 + local_124);
local_58 = local_12c;
local_54 = local_128;
local_50 = local_124;
iVar19 = (**(code **)(*(int *)local_84 + 0x144))();
if (iVar19 != 0) {
fVar18 = *(float *)(melee_force_scalar_combat_character._28_4_ + 0x2c);
local_210 = (undefined **)((float)local_210 * fVar18);
local_20c = (float *)((float)local_20c * fVar18);
local_214 = fVar18 * local_214;
}
local_7c = local_210;
local_78 = (float)local_20c;
local_74 = local_214;
/* try { // try from 0056a913 to 0056aa74 has its CatchHandler @ 0056abb5 */
if ((400.0 < *(float *)(local_84 + 0x23c)) ||
((cVar6 = CTerrorGameRules::IsCurrentRoundActive(g_pGameRules), cVar6 == '\0' &&
(cVar6 = CTerrorGameRules::IsSurvivalMode(), cVar6 != '\0')))) {
local_34 = local_34 | 0x800;
local_7c = (undefined **)0x0;
local_78 = 0.0;
local_74 = 0.0;
}
ClearMultiDamage();
CBaseEntity::DispatchTraceAttack(local_84,(Vector *)&local_7c,(CGameTrace *)&local_12c);
ApplyMultiDamage();
LAB_00569d7f:
iVar19 = *(int *)(this + 0x17f4);
piVar16 = (int *)puVar15;
if (iVar19 < 1) {
LAB_00569db8:
if (*(char *)(*(int *)(this + 0x1824) + 0x20) != '\0') {
iVar19 = *(int *)local_84;
*piVar16 = (int)local_84;
pcVar4 = *(code **)(iVar19 + 0x144);
piVar16[-1] = 0x569dd6;
iVar19 = (*pcVar4)();
if (iVar19 == 0) {
iVar8 = *(int *)this;
piVar16[2] = 0;
piVar16[1] = 10;
*piVar16 = (int)this;
/* try { // try from 0056a900 to 0056a905 has its CatchHandler @ 0056aba8 */
pcVar4 = *(code **)(iVar8 + 0x4b8);
piVar16[-1] = 0x56a906;
(*pcVar4)();
}
else {
iVar19 = *(int *)this;
piVar16[2] = 0;
piVar16[1] = 9;
*piVar16 = (int)this;
pcVar4 = *(code **)(iVar19 + 0x4b8);
piVar16[-1] = 0x569dff;
(*pcVar4)();
uVar14 = *(uint *)(iVar8 + 0x124) >> 2 & 1;
cVar6 = (char)uVar14;
if ((*(uint *)(iVar8 + 0x124) & 0x80) == 0) {
if (cVar6 != '\0') goto LAB_00569e25;
}
else {
if (cVar6 != '\0') {
LAB_00569e25:
local_24 = 0;
local_34 = local_34 & 0xffff0000;
local_7c = local_c4;
local_70 = 0.0;
local_78 = local_c0;
local_6c = 0.0;
local_68 = 0.0;
local_64 = (int *)0x0;
local_60 = 0.0;
local_5c = 0.0;
local_58 = 0.0;
local_54 = 0.0;
local_50 = 0.0;
local_4c = 0.0;
local_44 = 1.0;
local_38 = 0;
local_40 = 0;
local_3c = 0.0;
local_30 = 0;
local_2c = 0;
local_28 = 0;
local_23 = 0;
local_74 = local_bc;
if (*(int *)(this + 0x30) == 0) {
local_48 = 0.0;
}
else {
local_48 = (float)(*(int *)(this + 0x30) - *(int *)(gpGlobals + 0x58) >> 4);
}
piVar16[1] = (int)&local_7c;
*piVar16 = (int)"bloodslash";
piVar16[-1] = 0x569f01;
DispatchEffect((char *)*piVar16,(CEffectData *)piVar16[1]);
}
*piVar16 = (int)local_84;
piVar16[-1] = 0x569f09;
iVar8 = CBaseEntity::GetTeamNumber((CBaseEntity *)*piVar16);
if (iVar8 == 3) {
iVar8 = *(int *)pIVar7;
piVar16[2] = 0;
piVar16[1] = 1;
*piVar16 = (int)pIVar7;
piVar16[3] = ((int)(uVar14 << 0x1f) >> 0x1f) + 2;
pcVar4 = *(code **)(iVar8 + 0x8f0);
piVar16[-1] = 0x569f36;
(*pcVar4)();
iVar8 = *(int *)local_84;
*piVar16 = (int)local_84;
pcVar4 = *(code **)(iVar8 + 0x14c);
piVar16[-1] = 0x569f41;
iVar8 = (*pcVar4)();
if (iVar8 != 0) {
*piVar16 = iVar8;
piVar16[-1] = 0x569f4f;
cVar6 = Infected::IsUncommonCommon((Infected *)*piVar16);
if (cVar6 != '\0') {
*piVar16 = iVar8;
/* try { // try from 0056aad1 to 0056aaf4 has its CatchHandler @ 0056aba8 */
piVar16[-1] = 0x56aad6;
iVar19 = CBaseEntity::GetGender((CBaseEntity *)*piVar16);
if (iVar19 == 0xf) {
iVar19 = *(int *)(iVar8 + 0x1a3c);
piVar16[1] = (int)pIVar7;
*piVar16 = iVar8 + 0x1a3c;
pcVar4 = *(code **)(iVar19 + 0x74);
piVar16[-1] = 0x56aaf5;
(*pcVar4)();
}
}
}
}
iVar8 = *(int *)local_84;
*piVar16 = (int)local_84;
pcVar4 = *(code **)(iVar8 + 0x144);
piVar16[-1] = 0x569f62;
iVar8 = (*pcVar4)();
if (iVar8 != 0) {
fVar18 = *(float *)(melee_collateral_shove_count._28_4_ + 0x30);
iVar8 = *(int *)local_84;
*piVar16 = (int)local_84;
pcVar4 = *(code **)(iVar8 + 0x144);
piVar16[-1] = 0x569f83;
piVar12 = (int *)(*pcVar4)();
if (((byte)local_84[0x14d] & 8) != 0) {
*piVar16 = (int)local_84;
piVar16[-1] = 0x569f96;
CBaseEntity::CalcAbsolutePosition((CBaseEntity *)*piVar16);
}
local_7c = &PTR_operator___00c51378;
local_60 = 0.0;
local_5c = 0.0;
local_58 = 0.0;
local_54 = 0.0;
local_50 = 0.0;
local_4c = 0.0;
local_48 = 0.0;
local_44 = 0.0;
local_40 = 0;
local_3c = 0.0;
local_78 = *(float *)(local_84 + 0x2e0);
local_74 = *(float *)(local_84 + 0x2e4);
local_70 = *(float *)(local_84 + 0x2e8);
local_6c = 5184.0;
/* try { // try from 0056a02f to 0056a0cf has its CatchHandler @ 0056aba1 */
piVar16[-1] = 0x56a034;
local_68 = fVar18;
local_64 = piVar12;
iVar8 = TheNextBots();
uVar14 = (uint)*(ushort *)(iVar8 + 0x10);
if (uVar14 != 0xffff) {
iVar19 = *(int *)(iVar8 + 4);
do {
piVar12 = *(int **)(iVar19 + uVar14 * 8);
iVar19 = *piVar12;
*piVar16 = (int)piVar12;
/* try { // try from 0056a1c9 to 0056a1ce has its CatchHandler @ 0056aba1 */
pcVar4 = *(code **)(iVar19 + 0xb4);
piVar16[-1] = 0x56a1cf;
local_1f8 = (int *)(*pcVar4)();
local_17c = 0;
local_178 = 0;
if (___atan2f_finite == 0) {
local_168 = 0;
}
else {
piVar16[0xb] = (int)"CollectClosestCommonInfectedScan()";
piVar16[10] = (int)"Unaccounted";
piVar16[9] = (int)"(%s)%s";
piVar16[8] = (int)&CollectClosestCommonInfectedScan::
operator()(CBaseCombatCharacter*)::tm_fmt;
piVar16[7] = 0x58b;
piVar16[6] = (int)"/data/src/game/server/terror/terrorfunctorutils.h";
piVar16[5] = 0;
piVar16[3] = 0;
piVar16[4] = 0;
piVar16[2] = 0;
piVar16[1] = (int)&local_17c;
*piVar16 = ___atan2f_finite;
pcVar4 = *(code **)(___atan2f_finite + 0x50);
piVar16[-1] = 0x56a0d0;
(*pcVar4)();
local_168 = ___atan2f_finite;
}
iVar19 = _DAT_0105db00;
local_170 = local_17c;
local_16c = local_178;
if ((_DAT_0105d154 != 0) || (DAT_0105d158 == '\0')) {
/* try { // try from 0056a10d to 0056a111 has its CatchHandler @ 0056abac */
piVar16[-1] = 0x56a112;
iVar11 = ThreadGetCurrentId();
if (iVar19 == iVar11) {
if ((char *)*_DAT_0105d15c != "CollectClosestCommonInfectedScan()") {
piVar16[4] = 0;
piVar16[3] = (int)"Unaccounted";
piVar16[2] = 1;
piVar16[1] = (int)"CollectClosestCommonInfectedScan()";
*piVar16 = (int)_DAT_0105d15c;
/* try { // try from 0056a5c0 to 0056a5d1 has its CatchHandler @ 0056abac */
piVar16[-1] = 0x56a5c5;
_DAT_0105d15c =
(int *)CVProfNode::GetSubNode
((char *)*piVar16,piVar16[1],(char *)piVar16[2],
piVar16[3]);
}
*piVar16 = (int)_DAT_0105d15c;
piVar16[-1] = 0x56a5d2;
CVProfNode::EnterScope();
DAT_0105d158 = '\0';
}
}
iVar19 = *local_1f8;
*piVar16 = (int)local_1f8;
/* try { // try from 0056a125 to 0056a12a has its CatchHandler @ 0056aafa */
pcVar4 = *(code **)(iVar19 + 300);
piVar16[-1] = 0x56a12b;
cVar6 = (*pcVar4)();
piVar12 = local_1f8;
if (cVar6 != '\0') {
*piVar16 = (int)local_1f8;
/* try { // try from 0056a3b1 to 0056a497 has its CatchHandler @ 0056aafa */
piVar16[-1] = 0x56a3b6;
iVar19 = CBaseEntity::GetTeamNumber((CBaseEntity *)*piVar16);
if (iVar19 == 3) {
iVar19 = *piVar12;
*piVar16 = (int)piVar12;
pcVar4 = *(code **)(iVar19 + 0x544);
piVar16[-1] = 0x56a3ca;
iVar19 = (*pcVar4)();
piVar12 = local_1f8;
if ((iVar19 == 0) && (local_64 != local_1f8)) {
if ((*(byte *)((int)local_1f8 + 0x14d) & 8) != 0) {
*piVar16 = (int)local_1f8;
piVar16[-1] = 0x56a498;
CBaseEntity::CalcAbsolutePosition((CBaseEntity *)*piVar16);
}
local_12c = (local_78 - (float)piVar12[0xb8]) *
(local_78 - (float)piVar12[0xb8]) +
(local_70 - (float)piVar12[0xba]) *
(local_70 - (float)piVar12[0xba]) +
(local_74 - (float)piVar12[0xb9]) *
(local_74 - (float)piVar12[0xb9]);
if ((local_12c <= local_6c) && ((int)local_54 < (int)local_68)) {
piVar16[1] = (int)local_54;
piVar16[2] = (int)&local_1f8;
*piVar16 = (int)&local_60;
piVar16[-1] = 0x56a463;
CUtlVector<CBaseCombatCharacter*,CUtlMemory<CBaseCombatCharacter*,int>>::
InsertBefore((CUtlVector<CBaseCombatCharacter*,CUtlMemory<CBaseCombatCharacter*,int>>
*)*piVar16,piVar16[1],(CBaseCombatCharacter **)piVar16[2]);
piVar16[2] = (int)&local_12c;
piVar16[1] = local_40;
*piVar16 = (int)&local_4c;
piVar16[-1] = 0x56a482;
CUtlVector<float,CUtlMemory<float,int>>::InsertBefore
((CUtlVector<float,CUtlMemory<float,int>> *)*piVar16,piVar16[1],
(float *)piVar16[2]);
}
}
}
}
iVar19 = _DAT_0105db00;
if ((DAT_0105d158 == '\0') || (_DAT_0105d154 != 0)) {
piVar16[-1] = 0x56a151;
iVar11 = ThreadGetCurrentId();
if (iVar19 == iVar11) {
*piVar16 = (int)_DAT_0105d15c;
piVar16[-1] = 0x56a565;
cVar6 = CVProfNode::ExitScope();
if (cVar6 != '\0') {
_DAT_0105d15c = (int *)_DAT_0105d15c[0x19];
}
DAT_0105d158 = _DAT_0105d15c == (int *)0x105d160;
}
}
if (local_168 != 0) {
piVar16[5] = 0;
piVar16[4] = 0;
piVar16[3] = 0;
*piVar16 = local_168;
piVar16[1] = local_170;
piVar16[2] = local_16c;
pcVar4 = *(code **)(local_168 + 0x54);
piVar16[-1] = 0x56a195;
(*pcVar4)();
}
iVar19 = *(int *)(iVar8 + 4);
uVar14 = (uint)*(ushort *)(iVar19 + 6 + uVar14 * 8);
} while (uVar14 != 0xffff);
}
local_20c = &local_4c;
local_210 = (undefined **)&local_60;
if (0 < (int)local_54) {
iVar8 = 0;
do {
piVar12 = *(int **)((int)local_60 + iVar8 * 4);
if (piVar12 != (int *)0x0) {
iVar19 = *piVar12;
*piVar16 = (int)piVar12;
/* try { // try from 0056a4cf to 0056a4ee has its CatchHandler @ 0056aba1 */
pcVar4 = *(code **)(iVar19 + 0x14c);
piVar16[-1] = 0x56a4d5;
iVar19 = (*pcVar4)();
if (iVar19 != 0) {
iVar11 = *(int *)(iVar19 + 0x1a3c);
piVar16[1] = (int)pIVar7;
*piVar16 = iVar19 + 0x1a3c;
pcVar4 = *(code **)(iVar11 + 0x74);
piVar16[-1] = 0x56a4ef;
(*pcVar4)();
}
}
iVar8 = iVar8 + 1;
} while (iVar8 < (int)local_54);
}
local_7c = &PTR_operator___00c51378;
local_40 = 0;
*piVar16 = (int)local_20c;
piVar16[-1] = 0x56a513;
CUtlMemory<float,int>::Purge((CUtlMemory<float,int> *)*piVar16);
*piVar16 = (int)local_20c;
local_3c = local_4c;
piVar16[-1] = 0x56a521;
CUtlMemory<float,int>::Purge((CUtlMemory<float,int> *)*piVar16);
local_54 = 0.0;
*piVar16 = (int)local_210;
piVar16[-1] = 0x56a536;
CUtlMemory<CBaseCombatCharacter*,int>::Purge
((CUtlMemory<CBaseCombatCharacter*,int> *)*piVar16);
*piVar16 = (int)local_210;
local_50 = local_60;
piVar16[-1] = 0x56a544;
CUtlMemory<CBaseCombatCharacter*,int>::Purge
((CUtlMemory<CBaseCombatCharacter*,int> *)*piVar16);
}
}
*piVar16 = (int)this;
/* try { // try from 0056a54a to 0056a54e has its CatchHandler @ 0056aba8 */
piVar16[-1] = 0x56a54f;
CTerrorWeapon::BloodyWeapon_Increment((CTerrorWeapon *)*piVar16);
}
}
}
else {
piVar12 = *(int **)(this + 0x17e8);
if (local_84 != (CTakeDamageInfo *)*piVar12) {
LAB_00569d9d:
iVar11 = 0;
do {
iVar11 = iVar11 + 1;
if (iVar19 <= iVar11) goto LAB_00569db8;
} while (local_84 != (CTakeDamageInfo *)piVar12[iVar11]);
if (iVar11 == -1) goto LAB_00569db8;
}
}
}
piVar16[1] = (int)local_84;
*piVar16 = (int)this;
/* try { // try from 0056a29b to 0056a321 has its CatchHandler @ 0056aba8 */
piVar16[-1] = 0x56a2a0;
RememberEntityAsHitThisSwing((CTerrorMeleeWeapon *)*piVar16,(IHandleEntity *)piVar16[1]);
LAB_0056a20f:
local_150[0] = &PTR_ShouldHitEntity_00c54590;
*piVar16 = (int)local_140;
local_134 = 0;
piVar16[-1] = 0x56a231;
CUtlMemory<IHandleEntity*,int>::Purge((CUtlMemory<IHandleEntity*,int> *)*piVar16);
*piVar16 = (int)local_140;
local_130 = local_140[0];
piVar16[-1] = 0x56a245;
CUtlMemory<IHandleEntity*,int>::Purge((CUtlMemory<IHandleEntity*,int> *)*piVar16);
return cVar5;
}
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.