L L4D2node

CTankClaw::SweepFist

0x0055eb10 · 3708 bytes · __thiscall

_ZN9CTankClaw9SweepFistERK6VectorS2_

Decompiled

undefined (3 params)

/* CTankClaw::SweepFist(Vector const&, Vector const&) */

void __thiscall CTankClaw::SweepFist(CTankClaw *this,Vector *param_1,Vector *param_2)

{
  float fVar1;
  float fVar2;
  CTankClaw CVar3;
  code *pcVar4;
  int *piVar5;
  char cVar6;
  char cVar7;
  char cVar8;
  IHandleEntity *pIVar9;
  int iVar10;
  float *pfVar11;
  uint uVar12;
  int *piVar13;
  int iVar14;
  int *piVar15;
  Vector *pVVar16;
  int *piVar17;
  int local_268;
  float local_218;
  float local_214;
  float local_210;
  float local_20c;
  float local_208;
  float local_204;
  undefined **local_200 [4];
  undefined4 local_1f0 [3];
  undefined4 local_1e4;
  undefined4 local_1e0;
  float local_1dc;
  float local_1d8;
  float local_1d4;
  float local_1cc;
  float local_1c8;
  float local_1c4;
  float local_1bc;
  float local_1b8;
  float local_1b4;
  float local_1ac;
  float local_1a8;
  float local_1a4;
  undefined4 local_19c;
  undefined1 local_198;
  undefined1 local_197;
  float local_18c;
  float local_188;
  float local_184;
  float local_17c;
  float local_178;
  float local_174;
  undefined4 local_16c;
  undefined4 local_168;
  undefined4 local_164;
  undefined4 local_15c;
  undefined4 local_158;
  undefined4 local_154;
  undefined4 local_14c;
  undefined1 local_148;
  undefined1 local_147;
  Vector local_130 [12];
  float local_124;
  float local_120;
  float local_11c;
  char local_fa;
  char local_f9;
  int *local_e4;
  float local_dc;
  float local_d8;
  float local_d4;
  float local_d0;
  float local_cc;
  float local_c8;
  float local_c4;
  undefined4 local_bc;
  undefined4 local_b8;
  undefined4 local_b4;
  undefined4 local_ac;
  undefined4 local_a8;
  undefined4 local_a4;
  undefined4 local_9c;
  undefined1 local_98;
  undefined1 local_97;
  int *local_90;
  float local_7c;
  float local_78;
  float local_74;
  Vector local_70 [4];
  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;
  undefined4 local_3c;
  undefined1 local_38;
  undefined1 local_37;
  
  piVar17 = (int *)&stack0xfffffda4;
  pIVar9 = (IHandleEntity *)CTerrorWeapon::GetPlayerOwner((CTerrorWeapon *)this);
  if (pIVar9 == (IHandleEntity *)0x0) {
    return;
  }
  (**(code **)*lagcompensation)();
  local_20c = *(float *)(HulkFistRadius._28_4_ + 0x2c);
  local_218 = -local_20c;
  local_214 = local_218;
  local_210 = local_218;
  local_208 = local_20c;
  local_204 = local_20c;
  CTraceFilterSimpleList::CTraceFilterSimpleList((CTraceFilterSimpleList *)local_200,0);
  local_200[0] = &PTR_ShouldHitEntity_00c2e780;
                    /* try { // try from 0055ebd8 to 0055f53d has its CatchHandler @ 0055f9d9 */
  CTraceFilterSimpleList::AddEntityToIgnore((CTraceFilterSimpleList *)local_200,pIVar9);
  local_19c = 0;
  local_1cc = *(float *)param_2 - *(float *)param_1;
  local_1c8 = *(float *)(param_2 + 4) - *(float *)(param_1 + 4);
  local_1c4 = *(float *)(param_2 + 8) - *(float *)(param_1 + 8);
  local_197 = local_1cc * local_1cc + local_1c8 * local_1c8 + local_1c4 * local_1c4 != 0.0;
  local_1b8 = (local_208 + local_214) * 0.5;
  local_1a8 = (local_208 - local_214) * 0.5;
  local_1ac = (local_20c - local_218) * 0.5;
  local_1d8 = *(float *)(param_1 + 4) + local_1b8;
  local_1a4 = (local_204 - local_210) * 0.5;
  local_1bc = (local_20c + local_218) * 0.5;
  local_1b4 = (local_204 + local_210) * 0.5;
  local_1d4 = *(float *)(param_1 + 8) + local_1b4;
  local_198 = local_1a8 * local_1a8 + local_1ac * local_1ac + local_1a4 * local_1a4 < 1e-06;
  local_1dc = *(float *)param_1 + local_1bc;
  local_1bc = -local_1bc;
  local_1b8 = -local_1b8;
  local_1b4 = -local_1b4;
  (**(code **)(*enginetrace + 0x14))();
  if (*(int *)(r_visualizetraces._28_4_ + 0x30) != 0) {
    DebugDrawLine(local_130,(Vector *)&local_124,0xff,0xff,0,true,-1.0);
  }
  if (*(int *)(ZombieShowSwings._28_4_ + 0x30) != 0) {
    NDebugOverlay::SweptBox
              (param_1,param_2,(Vector *)&local_218,(Vector *)&local_20c,(QAngle *)&vec3_angle,0xff,
               0xff,0xff,0x32,10.1);
  }
  cVar6 = CGameTrace::DidHitNonWorldEntity((CGameTrace *)local_130);
  if ((cVar6 == '\0') || (piVar13 = local_e4, local_e4 == (int *)0x0)) {
    iVar10 = (**(code **)(*g_pGameRules + 0x7c))();
    local_dc = *(float *)(iVar10 + 0x18) - 1.0;
    local_18c = -local_dc;
    local_188 = local_18c;
    local_184 = local_18c;
    local_d8 = local_dc;
    local_d4 = local_dc;
    pfVar11 = (float *)(**(code **)(*(int *)pIVar9 + 0x288))();
    local_6c = *(float *)param_2 - *pfVar11;
    local_68 = *(float *)(param_2 + 4) - pfVar11[1];
    local_64 = *(float *)(param_2 + 8) - pfVar11[2];
    local_3c = 0;
    local_4c = (local_dc - local_18c) * 0.5;
    local_37 = local_6c * local_6c + local_64 * local_64 + local_68 * local_68 != 0.0;
    local_44 = (local_d4 - local_184) * 0.5;
    local_5c = (local_dc + local_18c) * 0.5;
    local_48 = (local_d8 - local_188) * 0.5;
    local_58 = (local_d8 + local_188) * 0.5;
    local_54 = (local_d4 + local_184) * 0.5;
    local_38 = local_48 * local_48 + local_4c * local_4c + local_44 * local_44 < 1e-06;
    local_7c = *pfVar11 + local_5c;
    local_5c = -local_5c;
    local_78 = pfVar11[1] + local_58;
    local_58 = -local_58;
    local_74 = pfVar11[2] + local_54;
    local_54 = -local_54;
    (**(code **)(*enginetrace + 0x14))();
    if (*(int *)(r_visualizetraces._28_4_ + 0x30) != 0) {
      DebugDrawLine(local_130,(Vector *)&local_124,0xff,0xff,0,true,-1.0);
    }
    if (*(int *)(ZombieShowSwings._28_4_ + 0x30) != 0) {
      pVVar16 = (Vector *)(**(code **)(*(int *)pIVar9 + 0x288))();
      NDebugOverlay::SweptBox
                (pVVar16,param_2,(Vector *)&local_18c,(Vector *)&local_dc,(QAngle *)&vec3_angle,0xff
                 ,0xff,0xff,0x32,10.1);
    }
    if (((local_fa != '\0') || (local_f9 != '\0')) ||
       (cVar6 = CGameTrace::DidHitNonWorldEntity((CGameTrace *)local_130), piVar13 = local_e4,
       cVar6 == '\0')) {
      piVar13 = (int *)0x0;
    }
  }
  cVar6 = CTerrorGameRules::HasPlayerControlledZombies();
  if (cVar6 == '\0') {
LAB_0055f3e0:
    if (piVar13 != (int *)0x0) {
      iVar10 = *piVar13;
      *piVar17 = (int)piVar13;
      pcVar4 = *(code **)(iVar10 + 0x16c);
      piVar17[-1] = 0x55f3f3;
      cVar6 = (*pcVar4)();
      cVar8 = '\0';
      if (cVar6 != '\0') {
        *piVar17 = (int)piVar13;
        piVar17[-1] = 0x55f8f3;
        iVar10 = CBaseEntity::GetTeamNumber((CBaseEntity *)*piVar17);
        *piVar17 = iVar10;
        piVar17[-1] = 0x55f8fb;
        cVar8 = IsASurvivorTeam(iVar10);
      }
      piVar17[-1] = 0x55f402;
      cVar6 = CTerrorGameRules::HasPlayerControlledZombies();
      cVar7 = '\x01';
      if (cVar6 == '\0') {
        piVar17[-1] = 0x55f8ca;
        cVar7 = CTerrorGameRules::IsSurvivalMode();
      }
      if (((cVar8 == '\0') || (this[0x1821] == (CTankClaw)0x0)) || (cVar7 != '\0')) {
        if (((byte)pIVar9[0x14d] & 8) != 0) {
          *piVar17 = (int)pIVar9;
          piVar17[-1] = 0x55f8e6;
          CBaseEntity::CalcAbsolutePosition((CBaseEntity *)*piVar17);
        }
        if ((*(byte *)((int)piVar13 + 0x14d) & 8) != 0) {
          *piVar17 = (int)piVar13;
          piVar17[-1] = 0x55f449;
          CBaseEntity::CalcAbsolutePosition((CBaseEntity *)*piVar17);
        }
        local_7c = (float)piVar13[0xb8] - *(float *)(pIVar9 + 0x2e0);
        local_78 = (float)piVar13[0xb9] - *(float *)(pIVar9 + 0x2e4);
        fVar1 = (float)piVar13[0xba];
        fVar2 = *(float *)(pIVar9 + 0x2e8);
        *piVar17 = (int)&local_7c;
        local_74 = fVar1 - fVar2;
        piVar17[-1] = 0x55f49f;
        VectorNormalize((Vector *)*piVar17);
        pcVar4 = *(code **)(*(int *)this + 0x6d8);
        piVar17[1] = (int)piVar13;
        *piVar17 = (int)this;
        piVar17[-1] = 0x55f4c1;
        uVar12 = CTerrorWeapon::HasBeenPreviouslyHit
                           ((CTerrorWeapon *)*piVar17,(CBaseEntity *)piVar17[1]);
        piVar17[1] = (int)local_130;
        piVar17[3] = (uVar12 ^ 1) & 0xff;
        piVar17[2] = (int)&local_7c;
        *piVar17 = (int)this;
        piVar17[-1] = 0x55f4e7;
        (*pcVar4)();
        piVar17[1] = (int)piVar13;
        *piVar17 = (int)this;
        piVar17[-1] = 0x55f4f6;
        CTerrorWeapon::MarkAsHit((CTerrorWeapon *)*piVar17,(CBaseEntity *)piVar17[1]);
        if (cVar8 == '\0') goto LAB_0055f328;
        this[0x1821] = (CTankClaw)0x1;
      }
      piVar17[-1] = 0x55f50f;
      cVar6 = CTerrorGameRules::HasPlayerControlledZombies();
      if (cVar6 == '\0') {
                    /* try { // try from 0055f8b0 to 0055f980 has its CatchHandler @ 0055f9d9 */
        piVar17[-1] = 0x55f8b5;
        cVar6 = CTerrorGameRules::IsSurvivalMode();
        if (cVar6 == '\0') goto LAB_0055f328;
      }
      *piVar17 = 2;
      piVar17[-1] = 0x55f523;
      piVar13 = (int *)GetGlobalTeam(*piVar17);
      iVar10 = 0;
      if (piVar13 != (int *)0x0) {
        while( true ) {
          iVar14 = *piVar13;
          *piVar17 = (int)piVar13;
          pcVar4 = *(code **)(iVar14 + 0x354);
          piVar17[-1] = 0x55f53e;
          iVar14 = (*pcVar4)();
          if (iVar14 <= iVar10) break;
          iVar14 = *piVar13;
          piVar17[1] = iVar10;
          *piVar17 = (int)piVar13;
                    /* try { // try from 0055f54f to 0055f898 has its CatchHandler @ 0055f999 */
          pcVar4 = *(code **)(iVar14 + 0x358);
          piVar17[-1] = 0x55f555;
          piVar15 = (int *)(*pcVar4)();
          if (piVar15 != (int *)0x0) {
            piVar17[1] = (int)piVar15;
            *piVar17 = (int)this;
            piVar17[-1] = 0x55f56a;
            cVar6 = CTerrorWeapon::HasBeenPreviouslyHit
                              ((CTerrorWeapon *)*piVar17,(CBaseEntity *)piVar17[1]);
            if (cVar6 == '\0') {
              iVar14 = *piVar15;
              *piVar17 = (int)piVar15;
              pcVar4 = *(code **)(iVar14 + 300);
              piVar17[-1] = 0x55f579;
              cVar6 = (*pcVar4)();
              if (cVar6 != '\0') {
                piVar17[5] = 8;
                piVar17[6] = (int)&local_dc;
                piVar17[3] = (int)&local_20c;
                piVar17[2] = (int)&local_218;
                piVar17[4] = (int)piVar15;
                piVar17[1] = (int)param_2;
                *piVar17 = (int)param_1;
                piVar17[-1] = 0x55f5b9;
                UTIL_TraceModel((Vector *)*piVar17,(Vector *)piVar17[1],(Vector *)piVar17[2],
                                (Vector *)piVar17[3],(CBaseEntity *)piVar17[4],piVar17[5],
                                (CGameTrace *)piVar17[6]);
                if (piVar15 == local_90) {
                  iVar14 = *(int *)pIVar9;
                  piVar17[1] = (int)pIVar9;
                  *piVar17 = (int)&local_1dc;
                  pcVar4 = *(code **)(iVar14 + 0x234);
                  piVar17[-1] = 0x55f5e0;
                  (*pcVar4)();
                  local_148 = 1;
                  local_18c = local_1dc;
                  local_184 = local_1d4;
                  local_17c = local_d0 - local_1dc;
                  local_174 = local_c8 - local_1d4;
                  local_154 = 0;
                  local_158 = 0;
                  local_178 = local_cc - local_1d8;
                  local_15c = 0;
                  local_14c = 0;
                  local_164 = 0;
                  local_168 = 0;
                  local_16c = 0;
                  local_188 = local_1d8;
                  local_147 = local_17c * local_17c + local_174 * local_174 + local_178 * local_178
                              != 0.0;
                  iVar14 = *enginetrace;
                  piVar17[3] = (int)&local_7c;
                  piVar17[2] = (int)local_200;
                  piVar17[1] = 0x600400b;
                  *piVar17 = (int)&local_18c;
                  piVar17[-1] = (int)enginetrace;
                  pcVar4 = *(code **)(iVar14 + 0x14);
                  piVar17[-2] = 0x55f6f3;
                  (*pcVar4)();
                  if (*(int *)(r_visualizetraces._28_4_ + 0x30) != 0) {
                    piVar17[5] = -0x40800000;
                    *piVar17 = (int)local_70;
                    piVar17[4] = 1;
                    piVar17[3] = 0;
                    piVar17[2] = 0;
                    piVar17[1] = 0xff;
                    piVar17[-1] = (int)&local_7c;
                    piVar17[-2] = 0x55f73c;
                    DebugDrawLine((Vector *)piVar17[-1],(Vector *)*piVar17,piVar17[1],piVar17[2],
                                  piVar17[3],SUB41(piVar17[4],0),(float)piVar17[5]);
                  }
                  piVar5 = piVar17 + -1;
                  if (*(int *)(ZombieShowSwings._28_4_ + 0x30) != 0) {
                    iVar14 = *(int *)pIVar9;
                    *piVar17 = (int)pIVar9;
                    piVar17[-1] = (int)&local_18c;
                    pcVar4 = *(code **)(iVar14 + 0x234);
                    piVar17[-2] = 0x55f763;
                    (*pcVar4)();
                    piVar17[-1] = (int)&local_d0;
                    piVar17[4] = 0x4121999a;
                    piVar17[3] = 1;
                    piVar17[2] = 0;
                    piVar17[1] = 0;
                    *piVar17 = 0xff;
                    piVar17[-2] = (int)&local_18c;
                    piVar17[-3] = 0x55f7a6;
                    NDebugOverlay::Line((Vector *)piVar17[-2],(Vector *)piVar17[-1],*piVar17,
                                        piVar17[1],piVar17[2],SUB41(piVar17[3],0),(float)piVar17[4])
                    ;
                    piVar5 = piVar17 + -2;
                  }
                  piVar17 = piVar5;
                  *piVar17 = (int)&local_7c;
                  piVar17[-1] = 0x55f7b4;
                  cVar6 = CGameTrace::DidHitWorld((CGameTrace *)*piVar17);
                  if (cVar6 == '\0') {
                    if (((byte)pIVar9[0x14d] & 8) != 0) {
                      *piVar17 = (int)pIVar9;
                    /* try { // try from 0055f98f to 0055f993 has its CatchHandler @ 0055f999 */
                      piVar17[-1] = 0x55f994;
                      CBaseEntity::CalcAbsolutePosition((CBaseEntity *)*piVar17);
                    }
                    if ((*(byte *)((int)piVar15 + 0x14d) & 8) != 0) {
                      *piVar17 = (int)piVar15;
                      piVar17[-1] = 0x55f7e0;
                      CBaseEntity::CalcAbsolutePosition((CBaseEntity *)*piVar17);
                    }
                    local_18c = (float)piVar15[0xb8] - *(float *)(pIVar9 + 0x2e0);
                    local_188 = (float)piVar15[0xb9] - *(float *)(pIVar9 + 0x2e4);
                    fVar1 = (float)piVar15[0xba];
                    fVar2 = *(float *)(pIVar9 + 0x2e8);
                    *piVar17 = (int)&local_18c;
                    local_184 = fVar1 - fVar2;
                    piVar17[-1] = 0x55f83c;
                    VectorNormalize((Vector *)*piVar17);
                    pcVar4 = *(code **)(*(int *)this + 0x6d8);
                    piVar17[1] = (int)piVar15;
                    *piVar17 = (int)this;
                    piVar17[-1] = 0x55f85e;
                    uVar12 = CTerrorWeapon::HasBeenPreviouslyHit
                                       ((CTerrorWeapon *)*piVar17,(CBaseEntity *)piVar17[1]);
                    piVar17[2] = (int)&local_18c;
                    piVar17[1] = (int)&local_dc;
                    piVar17[3] = (uVar12 ^ 1) & 0xff;
                    *piVar17 = (int)this;
                    piVar17[-1] = 0x55f88a;
                    (*pcVar4)();
                    piVar17[1] = (int)piVar15;
                    *piVar17 = (int)this;
                    piVar17[-1] = 0x55f899;
                    CTerrorWeapon::MarkAsHit((CTerrorWeapon *)*piVar17,(CBaseEntity *)piVar17[1]);
                  }
                }
              }
            }
          }
          iVar10 = iVar10 + 1;
        }
      }
      goto LAB_0055f328;
    }
  }
  else {
    piVar17 = (int *)&stack0xfffffda4;
    if (piVar13 != (int *)0x0) {
      (**(code **)(*(int *)pIVar9 + 0x234))();
      piVar17 = (int *)&stack0xfffffda0;
      local_98 = 1;
      local_dc = local_18c;
      local_d8 = local_188;
      local_cc = local_124 - local_18c;
      local_c8 = local_120 - local_188;
      local_a4 = 0;
      local_a8 = 0;
      local_c4 = local_11c - local_184;
      local_ac = 0;
      local_9c = 0;
      local_b4 = 0;
      local_b8 = 0;
      local_bc = 0;
      local_d4 = local_184;
      local_97 = local_c8 * local_c8 + local_cc * local_cc + local_c4 * local_c4 != 0.0;
      (**(code **)(*enginetrace + 0x14))();
      if (*(int *)(r_visualizetraces._28_4_ + 0x30) != 0) {
        DebugDrawLine((Vector *)&local_7c,local_70,0xff,0,0,true,-1.0);
      }
      if (*(int *)(ZombieShowSwings._28_4_ + 0x30) != 0) {
        (**(code **)(*(int *)pIVar9 + 0x234))();
        piVar17 = (int *)&stack0xfffffd9c;
        NDebugOverlay::Line((Vector *)&local_dc,(Vector *)&local_124,0xff,0,0,true,10.1);
      }
      *piVar17 = (int)&local_7c;
      piVar17[-1] = 0x55f289;
      cVar6 = CGameTrace::DidHitWorld((CGameTrace *)*piVar17);
      if (cVar6 == '\0') goto LAB_0055f3e0;
    }
  }
  *piVar17 = (int)local_130;
  piVar17[-1] = 0x55f299;
  cVar6 = CGameTrace::DidHitWorld((CGameTrace *)*piVar17);
  if (cVar6 != '\0') {
    iVar10 = *(int *)pIVar9;
    *piVar17 = (int)pIVar9;
    pcVar4 = *(code **)(iVar10 + 0x288);
    piVar17[-1] = 0x55f2b2;
    pfVar11 = (float *)(*pcVar4)();
    local_7c = *(float *)param_2 - *pfVar11;
    local_78 = *(float *)(param_2 + 4) - pfVar11[1];
    fVar1 = *(float *)(param_2 + 8);
    fVar2 = pfVar11[2];
    *piVar17 = (int)&local_7c;
    local_74 = fVar1 - fVar2;
    piVar17[-1] = 0x55f2ed;
    VectorNormalize((Vector *)*piVar17);
    iVar10 = *(int *)this;
    CVar3 = this[0x1820];
    piVar17[2] = (int)&local_7c;
    piVar17[1] = (int)local_130;
    piVar17[3] = (uint)((byte)CVar3 ^ 1);
    *piVar17 = (int)this;
    pcVar4 = *(code **)(iVar10 + 0x6d8);
    piVar17[-1] = 0x55f319;
    (*pcVar4)();
    this[0x1820] = (CTankClaw)0x1;
  }
LAB_0055f328:
  iVar10 = *lagcompensation;
  *piVar17 = (int)lagcompensation;
  piVar17[1] = (int)pIVar9;
  pcVar4 = *(code **)(iVar10 + 4);
  piVar17[-1] = 0x55f33f;
  (*pcVar4)();
  local_200[0] = &PTR_ShouldHitEntity_00c54590;
  *piVar17 = (int)local_1f0;
  local_1e4 = 0;
  piVar17[-1] = 0x55f361;
  CUtlMemory<IHandleEntity*,int>::Purge((CUtlMemory<IHandleEntity*,int> *)*piVar17);
  *piVar17 = (int)local_1f0;
  local_1e0 = local_1f0[0];
  piVar17[-1] = 0x55f375;
  CUtlMemory<IHandleEntity*,int>::Purge((CUtlMemory<IHandleEntity*,int> *)*piVar17);
  return;
}

SourceMod gamedata

paste into addons/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.



        

        

          

Type inference is best-effort from the C signature - sanity-check the DHooks types before shipping.

Return-type handling cheatsheet (DHookReturn)