L L4D2node

CreateExplosion

0x008c54f0 · 4032 bytes · __cdecl

_Z15CreateExplosionRK15CTakeDamageInfoff15ExplosionFxType

Decompiled

undefined (4 params)

/* CreateExplosion(CTakeDamageInfo const&, float, float, ExplosionFxType) */

void CreateExplosion(float *param_1,float param_2,float param_3,int param_4)

{
  code *pcVar1;
  char cVar2;
  int *piVar3;
  int iVar4;
  int iVar5;
  undefined *puVar6;
  int *piVar7;
  int *piVar8;
  int *piVar9;
  longdouble lVar10;
  float fVar11;
  float fVar12;
  float fVar13;
  float fVar14;
  float fVar15;
  int local_9c4 [2];
  int local_9ac;
  float local_9a8 [2];
  int local_9a0 [8];
  int local_980 [4];
  float local_970;
  float local_96c;
  float local_968;
  float local_964;
  float local_960;
  float local_95c;
  float local_958;
  float local_954;
  float local_950;
  undefined1 local_94c [16];
  float local_93c;
  float local_938;
  float local_934;
  float local_92c;
  float local_928;
  float local_924;
  undefined4 local_91c;
  undefined4 local_918;
  undefined4 local_914;
  undefined4 local_90c;
  undefined4 local_908;
  undefined4 local_904;
  undefined4 local_8fc;
  undefined1 local_8f8;
  undefined1 local_8f7;
  undefined1 local_8e0 [12];
  undefined1 local_8d4 [32];
  float local_8b4;
  float local_88c;
  float local_888;
  float local_884;
  float local_880;
  float local_87c;
  float local_878;
  float local_874;
  float local_870;
  float local_86c;
  float local_868;
  float local_864;
  float local_860;
  float local_85c;
  float local_858;
  float local_854;
  float local_850;
  float local_84c;
  float local_848;
  float local_844;
  float local_840;
  float local_83c;
  float local_838;
  float local_834;
  float local_830;
  float local_82c;
  float local_828;
  float local_824;
  undefined4 local_81c;
  undefined4 local_818;
  undefined4 local_814;
  undefined4 local_80c;
  undefined4 local_808;
  undefined4 local_804;
  undefined4 local_7fc;
  undefined4 local_7f8;
  undefined4 local_7f4;
  undefined4 local_7ec;
  undefined1 local_7e8;
  undefined1 local_7e7;
  
  local_970 = param_1[3];
  local_96c = param_1[4];
  local_968 = param_1[5];
  CEntitySphereQuery::CEntitySphereQuery
            ((CEntitySphereQuery *)&local_82c,(Vector *)&local_970,param_3,0);
  piVar8 = (int *)&stack0xfffff644;
  do {
    *piVar8 = (int)&local_82c;
    piVar8[-1] = 0x8c55dd;
    piVar3 = (int *)CEntitySphereQuery::GetCurrentEntity((CEntitySphereQuery *)*piVar8);
    if (piVar3 == (int *)0x0) {
      iVar4 = IPredictionSystem::g_pPredictionSystems;
      if (param_4 == 2) {
        for (; iVar4 != 0; iVar4 = *(int *)(iVar4 + 4)) {
          *(int *)(iVar4 + 0x10) = *(int *)(iVar4 + 0x10) + 1;
        }
        piVar8[9] = -1;
        piVar8[8] = 0;
        piVar8[7] = 0;
        piVar8[4] = 0;
        piVar8[1] = (int)local_970;
        piVar8[5] = 0;
        piVar8[6] = 0x3f800000;
        *piVar8 = (int)"boomer_explode";
        piVar8[2] = (int)local_96c;
        local_82c = 0.0;
        local_828 = 0.0;
        local_824 = 1.0;
        piVar8[3] = (int)local_968;
                    /* try { // try from 008c5cfe to 008c5eed has its CatchHandler @ 008c64e2 */
        piVar8[-1] = 0x8c5d03;
        DispatchParticleEffect();
        fVar15 = param_1[0xc];
        iVar4 = 0;
        if (((fVar15 != -NAN) &&
            (puVar6 = g_pEntityList + ((uint)fVar15 & 0xfff) * 0x10,
            puVar6 != (undefined *)0xfffffffc)) && (*(uint *)(puVar6 + 8) == (uint)fVar15 >> 0xc)) {
          iVar4 = *(int *)(puVar6 + 4);
        }
        piVar8[3] = 0;
        piVar8[2] = 0;
        local_82c = local_970;
        piVar8[1] = iVar4;
        local_828 = local_96c;
        *piVar8 = (int)&local_88c;
        local_81c = 0;
        local_818 = 0;
        local_814 = 0xc2c80000;
        local_7e7 = 1;
        local_7f4 = 0;
        local_7f8 = 0;
        local_7fc = 0;
        local_7ec = 0;
        local_7e8 = 1;
        local_804 = 0;
        local_808 = 0;
        local_80c = 0;
        local_824 = local_968;
        piVar8[-1] = 0x8c5df7;
        CTraceFilterSimple::CTraceFilterSimple
                  ((CTraceFilterSimple *)*piVar8,(IHandleEntity *)piVar8[1],piVar8[2],
                   (_func_bool_IHandleEntity_ptr_int *)piVar8[3]);
        iVar4 = *enginetrace;
        piVar8[4] = (int)local_8e0;
        piVar8[3] = (int)&local_88c;
        piVar8[2] = 0x600400b;
        piVar8[1] = (int)&local_82c;
        *piVar8 = (int)enginetrace;
        pcVar1 = *(code **)(iVar4 + 0x14);
        piVar8[-1] = 0x8c5e24;
        (*pcVar1)();
        if (*(int *)(r_visualizetraces._28_4_ + 0x30) != 0) {
          piVar8[6] = -0x40800000;
          piVar8[5] = 1;
          piVar8[4] = 0;
          piVar8[3] = 0;
          piVar8[2] = 0xff;
          piVar8[1] = (int)local_8d4;
          *piVar8 = (int)local_8e0;
          piVar8[-1] = 0x8c5e6a;
          DebugDrawLine((Vector *)*piVar8,(Vector *)piVar8[1],piVar8[2],piVar8[3],piVar8[4],
                        SUB41(piVar8[5],0),(float)piVar8[6]);
        }
        piVar8[1] = (int)"Blood";
        *piVar8 = (int)local_8e0;
        piVar8[-1] = 0x8c5e7a;
        UTIL_DecalTrace((CGameTrace *)*piVar8,(char *)piVar8[1]);
        fVar15 = param_1[0xc];
        if (((fVar15 != -NAN) &&
            (puVar6 = g_pEntityList + ((uint)fVar15 & 0xfff) * 0x10,
            puVar6 != (undefined *)0xfffffffc)) &&
           ((*(uint *)(puVar6 + 8) == (uint)fVar15 >> 0xc &&
            (iVar4 = *(int *)(puVar6 + 4), iVar4 != 0)))) {
          piVar8[3] = 0;
          piVar8[2] = 0;
          piVar8[1] = (int)"BoomerZombie.Detonate";
          *piVar8 = iVar4;
                    /* try { // try from 008c5f85 to 008c5f89 has its CatchHandler @ 008c64e2 */
          piVar8[-1] = 0x8c5f8a;
          CBaseEntity::EmitSound
                    ((CBaseEntity *)*piVar8,(char *)piVar8[1],(float)piVar8[2],(float *)piVar8[3]);
        }
        piVar8[7] = 0;
        piVar8[6] = 0;
        piVar8[5] = 0;
        piVar8[4] = 0x443b8000;
        piVar8[3] = 0x3f800000;
        piVar8[2] = 0x43160000;
        piVar8[1] = 0x42480000;
        *piVar8 = (int)&local_970;
        piVar8[-1] = 0x8c5eee;
        UTIL_ScreenShake();
        iVar4 = IPredictionSystem::g_pPredictionSystems;
        if (IPredictionSystem::g_pPredictionSystems != 0) {
          do {
            *(int *)(iVar4 + 0x10) = *(int *)(iVar4 + 0x10) + -1;
            piVar8 = (int *)(iVar4 + 4);
            iVar4 = *piVar8;
          } while (*piVar8 != 0);
          return;
        }
      }
      return;
    }
    piVar9 = piVar8;
    if (*(char *)((int)piVar3 + 0x105) == '\0') goto LAB_008c55c8;
    if ((char *)piVar3[0x1f] == "prop_physics") {
LAB_008c5580:
      piVar8[3] = -2;
      piVar8[2] = (int)&IBreakableWithPropData::typeinfo;
      piVar8[1] = (int)&CBaseEntity::typeinfo;
      *piVar8 = (int)piVar3;
      piVar8[-1] = 0x8c55a0;
      piVar7 = (int *)__dynamic_cast();
      if (piVar7 == (int *)0x0) goto LAB_008c5614;
      iVar4 = *piVar7;
      *piVar8 = (int)piVar7;
      pcVar1 = *(code **)(iVar4 + 0x2c);
      piVar8[-1] = 0x8c55ae;
      lVar10 = (longdouble)(*pcVar1)();
      if ((float)lVar10 <= 0.0) {
        iVar4 = *piVar7;
        *piVar8 = (int)piVar7;
        pcVar1 = *(code **)(iVar4 + 0x34);
        piVar8[-1] = 0x8c5f28;
        iVar4 = (*pcVar1)();
        if (iVar4 == 0) goto LAB_008c5614;
      }
    }
    else {
      piVar8[1] = (int)"prop_physics";
      *piVar8 = (int)piVar3;
      piVar8[-1] = 0x8c5609;
      cVar2 = CBaseEntity::ClassMatchesComplex((CBaseEntity *)*piVar8,(char *)piVar8[1]);
      if (cVar2 != '\0') goto LAB_008c5580;
LAB_008c5614:
      iVar4 = *piVar3;
      piVar8[2] = (int)&local_970;
      *piVar8 = (int)&local_88c;
      piVar8[3] = 0;
      piVar8[1] = (int)piVar3;
      pcVar1 = *(code **)(iVar4 + 0x244);
      piVar8[-1] = 0x8c5643;
      (*pcVar1)();
      *piVar8 = (int)&local_970;
      local_964 = local_88c;
      piVar8[1] = (int)piVar3;
      local_960 = local_888;
      piVar8[-1] = g_pGameRules;
      local_95c = local_884;
      piVar8[-2] = 0x8c5691;
      lVar10 = (longdouble)
               CCSGameRules::GetAmountOfEntityVisible
                         ((CCSGameRules *)piVar8[-1],(Vector *)*piVar8,(CBaseEntity *)piVar8[1]);
      fVar15 = (float)lVar10;
      piVar9 = piVar8 + -1;
      if (0.0 < fVar15) {
        fVar14 = local_964 - local_970;
        fVar13 = local_960 - local_96c;
        fVar12 = local_95c - local_968;
        fVar11 = SQRT(fVar13 * fVar13 + fVar14 * fVar14 + fVar12 * fVar12);
        piVar9 = piVar8 + -1;
        if ((fVar11 <= param_3) &&
           ((fVar11 <= param_2 ||
            (fVar15 = fVar15 * ((fVar11 - param_2) * (1.0 / (param_2 - param_3)) + 1.0),
            piVar9 = piVar8 + -1, 0.0 < fVar15)))) {
          local_88c = *param_1;
          local_84c = param_1[0x10];
          local_888 = param_1[1];
          local_850 = param_1[0xf] * fVar15;
          local_884 = param_1[2];
          local_880 = param_1[3];
          local_87c = param_1[4];
          local_878 = param_1[5];
          local_874 = param_1[6];
          local_870 = param_1[7];
          local_86c = param_1[8];
          local_868 = param_1[9];
          local_864 = param_1[10];
          local_860 = param_1[0xb];
          local_85c = param_1[0xc];
          local_858 = param_1[0xd];
          local_854 = param_1[0xe];
          local_844 = param_1[0x12];
          local_848 = param_1[0x11];
          local_834 = param_1[0x16];
          local_840 = param_1[0x13];
          local_83c = param_1[0x14];
          local_838 = param_1[0x15];
          local_830 = param_1[0x17];
          piVar8[-1] = (int)&local_958;
          piVar8[-2] = 0x8c5869;
          local_958 = fVar14;
          local_954 = fVar13;
          local_950 = fVar12;
          VectorNormalize((Vector *)piVar8[-1]);
          if (param_4 == 2) {
            piVar8[-2] = 0x8c5fbc;
            cVar2 = CTerrorGameRules::HasPlayerControlledZombies();
            if ((cVar2 == '\0') && (piVar9 = piVar8 + -1, local_950 < -0.7)) goto LAB_008c55c8;
            fVar11 = param_1[0xc];
            if ((fVar11 == -NAN) ||
               (((puVar6 = g_pEntityList + ((uint)fVar11 & 0xfff) * 0x10,
                 puVar6 == (undefined *)0xfffffffc || (*(uint *)(puVar6 + 8) != (uint)fVar11 >> 0xc)
                 ) || (piVar9 = *(int **)(puVar6 + 4), piVar9 == (int *)0x0)))) {
LAB_008c604d:
              piVar9 = (int *)0x0;
            }
            else {
              iVar4 = *piVar9;
              piVar8[-1] = (int)piVar9;
              pcVar1 = *(code **)(iVar4 + 0x16c);
              piVar8[-2] = 0x8c6039;
              cVar2 = (*pcVar1)();
              if (cVar2 == '\0') goto LAB_008c604d;
            }
            iVar4 = *piVar3;
            piVar8[-1] = (int)piVar3;
            pcVar1 = *(code **)(iVar4 + 0x16c);
            piVar8[-2] = 0x8c606a;
            cVar2 = (*pcVar1)();
            piVar7 = (int *)0x0;
            if (cVar2 != '\0') {
              piVar7 = piVar3;
            }
            if (piVar9 != (int *)0x0) {
              piVar8[-1] = (int)piVar9;
              piVar8[-2] = 0x8c6097;
              iVar4 = CBaseEntity::GetTeamNumber((CBaseEntity *)piVar8[-1]);
              if (iVar4 == 3) {
                iVar4 = *piVar9;
                piVar8[-1] = (int)piVar9;
                pcVar1 = *(code **)(iVar4 + 0x544);
                piVar8[-2] = 0x8c60cf;
                iVar4 = (*pcVar1)();
                if ((iVar4 == 2) && (piVar7 != (int *)0x0)) {
                  piVar8[-1] = (int)piVar7;
                  piVar8[-2] = 0x8c6114;
                  iVar4 = CBaseEntity::GetTeamNumber((CBaseEntity *)piVar8[-1]);
                  piVar8[-1] = iVar4;
                  piVar8[-2] = 0x8c611c;
                  cVar2 = IsASurvivorTeam(iVar4);
                  if (cVar2 != '\0') {
                    iVar4 = *piVar7;
                    piVar8[-1] = (int)piVar7;
                    pcVar1 = *(code **)(iVar4 + 0x52c);
                    piVar8[-2] = 0x8c6155;
                    iVar4 = (*pcVar1)();
                    piVar8[5] = 0;
                    *piVar8 = (int)&local_970;
                    piVar8[4] = 1;
                    piVar8[3] = 0;
                    piVar8[2] = 0x461c4000;
                    piVar8[1] = 0;
                    piVar8[-1] = TheNavMesh;
                    piVar8[-2] = 0x8c619a;
                    iVar5 = CNavMesh::GetNearestNavArea
                                      ((CNavMesh *)piVar8[-1],(Vector *)*piVar8,SUB41(piVar8[1],0),
                                       (float)piVar8[2],SUB41(piVar8[3],0),SUB41(piVar8[4],0),
                                       SUB41(piVar8[5],0));
                    if (((iVar5 != 0) && (iVar4 != 0)) &&
                       (((byte)(*(uint *)(iVar4 + 300) >> 0xb) & 1) !=
                        ((byte)(*(uint *)(iVar5 + 300) >> 0xb) & 1))) {
                      if (CreateExplosion(CTakeDamageInfo_const&,float,float,ExplosionFxType)::
                          doorStr == '\0') {
                        piVar8[-1] = (int)&CreateExplosion(CTakeDamageInfo_const&,float,float,ExplosionFxType)
                                           ::doorStr;
                        piVar8[-2] = 0x8c646f;
                        iVar4 = __cxa_guard_acquire();
                        if (iVar4 != 0) {
                          piVar8[-1] = (int)&CreateExplosion(CTakeDamageInfo_const&,float,float,ExplosionFxType)
                                             ::doorStr;
                          DAT_01002b50 = 0;
                          CreateExplosion(CTakeDamageInfo_const&,float,float,ExplosionFxType)::
                          doorStr = 0;
                          DAT_01002b4c = "prop_door_rotating_checkpoint";
                          piVar8[-2] = 0x8c64b1;
                          __cxa_guard_release();
                          piVar8[1] = (int)&__dso_handle;
                          *piVar8 = (int)&CreateExplosion(CTakeDamageInfo_const&,float,float,ExplosionFxType)
                                          ::doorStr;
                          piVar8[-1] = (int)CGameString::~CGameString;
                          piVar8[-2] = 0x8c64cd;
                          __cxa_atexit();
                        }
                      }
                      iVar4 = *piVar9;
                      piVar8[-1] = (int)piVar9;
                      pcVar1 = *(code **)(iVar4 + 0x288);
                      piVar8[-2] = 0x8c6208;
                      iVar4 = (*pcVar1)();
                      if (((CreateExplosion(CTakeDamageInfo_const&,float,float,ExplosionFxType)::
                            doorStr == 0) ||
                          (iVar5 = CreateExplosion(CTakeDamageInfo_const&,float,float,ExplosionFxType)
                                   ::doorStr, DAT_01002b50 != CGameString::gm_iSerialNumber)) &&
                         (iVar5 = 0, DAT_01002b4c != (char *)0x0)) {
                        *piVar8 = (int)DAT_01002b4c;
                        piVar8[-1] = (int)local_980;
                        piVar8[-2] = 0x8c625f;
                        AllocPooledString((char *)piVar8[-1]);
                        CreateExplosion(CTakeDamageInfo_const&,float,float,ExplosionFxType)::doorStr
                             = local_980[0];
                        DAT_01002b50 = CGameString::gm_iSerialNumber;
                        iVar5 = local_980[0];
                      }
                      piVar8[1] = iVar4;
                      *piVar8 = iVar5;
                      piVar8[2] = (int)(param_3 + param_3);
                      piVar8[-1] = (int)gEntList;
                      piVar8[-2] = 0x8c62bf;
                      piVar7 = (int *)CGlobalEntityList::FindEntityByClassnameNearestFast();
                      if (piVar7 != (int *)0x0) {
                        iVar4 = *piVar7;
                        piVar8[-1] = (int)piVar7;
                        pcVar1 = *(code **)(iVar4 + 0x478);
                        piVar8[-2] = 0x8c62e4;
                        cVar2 = (*pcVar1)();
                        if ((cVar2 != '\0') &&
                           ((piVar9 = piVar8 + -1, piVar7[0x57d] == 0 ||
                            (piVar9 = piVar8 + -1, piVar7[0x57d] == 3)))) goto LAB_008c55c8;
                      }
                    }
                  }
                }
              }
            }
          }
          if (((vec3_origin == local_880) &&
              ((local_87c == DAT_01053d4c && (local_878 == DAT_01053d50)))) ||
             ((vec3_origin == local_88c &&
              ((local_888 == DAT_01053d4c && (local_884 == DAT_01053d50)))))) {
            piVar8[2] = 0x3fc00000;
            piVar8[1] = (int)&local_970;
            *piVar8 = (int)&local_958;
            piVar8[-1] = (int)&local_88c;
            piVar8[-2] = 0x8c58f6;
            CalculateExplosiveDamageForce
                      ((CTakeDamageInfo *)piVar8[-1],(Vector *)*piVar8,(Vector *)piVar8[1],
                       (float)piVar8[2]);
          }
          else {
            local_88c = SQRT(local_884 * local_884 + local_888 * local_888 + local_88c * local_88c);
            local_884 = local_950 * fVar15 * local_88c;
            local_888 = local_954 * fVar15 * local_88c;
            local_88c = fVar15 * local_958 * local_88c;
            local_880 = local_970;
            local_87c = local_96c;
            local_878 = local_968;
          }
          if (local_884 < 0.0) {
            if ((*(byte *)((int)piVar3 + 0x14d) & 0x10) != 0) {
              piVar8[-1] = (int)piVar3;
              piVar8[-2] = 0x8c6373;
              CBaseEntity::CalcAbsoluteVelocity((CBaseEntity *)piVar8[-1]);
            }
            if ((float)piVar3[0x9e] * (float)piVar3[0x9e] +
                (float)piVar3[0x9d] * (float)piVar3[0x9d] +
                (float)piVar3[0x9f] * (float)piVar3[0x9f] < 1.0) {
              local_884 = local_884 * -0.5;
            }
          }
          piVar8[2] = 0;
          piVar8[-1] = (int)local_94c;
          piVar8[1] = 0;
          *piVar8 = 0;
          local_92c = local_964 - local_970;
          local_93c = local_970;
          local_928 = local_960 - local_96c;
          local_938 = local_96c;
          local_934 = local_968;
          local_924 = local_95c - local_968;
          local_904 = 0;
          local_908 = 0;
          local_90c = 0;
          local_8fc = 0;
          local_8f8 = 1;
          local_914 = 0;
          local_918 = 0;
          local_91c = 0;
          local_8f7 = local_928 * local_928 + local_92c * local_92c + local_924 * local_924 != 0.0;
          piVar8[-2] = 0x8c5b52;
          CTraceFilterSimple::CTraceFilterSimple
                    ((CTraceFilterSimple *)piVar8[-1],(IHandleEntity *)*piVar8,piVar8[1],
                     (_func_bool_IHandleEntity_ptr_int *)piVar8[2]);
          iVar4 = *enginetrace;
          piVar8[-1] = (int)enginetrace;
          piVar8[2] = (int)local_94c;
          *piVar8 = (int)&local_93c;
          piVar8[3] = (int)local_8e0;
          piVar8[1] = 0x46004003;
          pcVar1 = *(code **)(iVar4 + 0x14);
          piVar8[-2] = 0x8c5b7f;
          (*pcVar1)();
          if (*(int *)(r_visualizetraces._28_4_ + 0x30) != 0) {
            piVar8[5] = -0x40800000;
            piVar8[4] = 1;
            piVar8[3] = 0;
            piVar8[2] = 0;
            piVar8[1] = 0xff;
            *piVar8 = (int)local_8d4;
            piVar8[-1] = (int)local_8e0;
            piVar8[-2] = 0x8c5bc5;
            DebugDrawLine((Vector *)piVar8[-1],(Vector *)*piVar8,piVar8[1],piVar8[2],piVar8[3],
                          SUB41(piVar8[4],0),(float)piVar8[5]);
          }
          iVar4 = *piVar3;
          piVar8[-1] = (int)piVar3;
          pcVar1 = *(code **)(iVar4 + 0x144);
          piVar8[-2] = 0x8c5bd0;
          iVar4 = (*pcVar1)();
          if (iVar4 == 0) {
LAB_008c5be4:
            if (local_8b4 == 1.0) {
              piVar8[-1] = (int)piVar3;
              *piVar8 = (int)&local_88c;
              piVar8[-2] = 0x8c5fb2;
              CBaseEntity::TakeDamage((CBaseEntity *)piVar8[-1],(CTakeDamageInfo *)*piVar8);
            }
            else {
              piVar8[-2] = 0x8c5bfe;
              ClearMultiDamage();
              piVar8[2] = (int)local_8e0;
              piVar8[1] = (int)&local_958;
              *piVar8 = (int)&local_88c;
              piVar8[-1] = (int)piVar3;
              piVar8[-2] = 0x8c5c1e;
              CBaseEntity::DispatchTraceAttack
                        ((CTakeDamageInfo *)piVar8[-1],(Vector *)*piVar8,(CGameTrace *)piVar8[1]);
              piVar8[-2] = 0x8c5c23;
              ApplyMultiDamage();
            }
          }
          else {
            piVar8[-1] = (int)piVar3;
            piVar8[-2] = 0x8c5bdc;
            iVar4 = CBaseEntity::MyNPCPointer();
            if ((iVar4 != 0) || (param_4 != 2)) goto LAB_008c5be4;
            fVar15 = param_1[0xc];
            if ((((fVar15 == -NAN) ||
                 (puVar6 = g_pEntityList + ((uint)fVar15 & 0xfff) * 0x10,
                 puVar6 == (undefined *)0xfffffffc)) ||
                (*(uint *)(puVar6 + 8) != (uint)fVar15 >> 0xc)) ||
               (piVar9 = *(int **)(puVar6 + 4), piVar9 == (int *)0x0)) {
LAB_008c6353:
              iVar4 = *piVar3;
              piVar8[-1] = (int)piVar3;
              pcVar1 = *(code **)(iVar4 + 0x16c);
              piVar8[-2] = 0x8c635e;
              (*pcVar1)();
            }
            else {
              iVar4 = *piVar9;
              piVar8[-1] = (int)piVar9;
              pcVar1 = *(code **)(iVar4 + 0x16c);
              piVar8[-2] = 0x8c6392;
              cVar2 = (*pcVar1)();
              if (cVar2 == '\0') goto LAB_008c6353;
              iVar4 = *piVar3;
              piVar8[-1] = (int)piVar3;
              pcVar1 = *(code **)(iVar4 + 0x16c);
              piVar8[-2] = 0x8c63a1;
              cVar2 = (*pcVar1)();
              if (cVar2 == '\0') {
                piVar8[2] = -2;
                piVar8[1] = (int)&INextBot::typeinfo;
                *piVar8 = (int)&CBaseEntity::typeinfo;
                piVar8[-1] = (int)piVar3;
                piVar8[-2] = 0x8c63c5;
                piVar7 = (int *)__dynamic_cast();
                if (piVar7 != (int *)0x0) {
                  iVar4 = *piVar7;
                  *piVar8 = (int)piVar9;
                  piVar8[-1] = (int)piVar7;
                  pcVar1 = *(code **)(iVar4 + 0x74);
                  piVar8[-2] = 0x8c63d9;
                  (*pcVar1)();
                }
              }
              else {
                piVar8[-1] = (int)piVar3;
                piVar8[-2] = 0x8c63e6;
                iVar4 = CBaseEntity::GetTeamNumber((CBaseEntity *)piVar8[-1]);
                piVar8[-1] = iVar4;
                piVar8[-2] = 0x8c63ee;
                cVar2 = IsASurvivorTeam(iVar4);
                if (cVar2 != '\0') {
                  iVar4 = *piVar3;
                  piVar8[-1] = (int)piVar3;
                  pcVar1 = *(code **)(iVar4 + 0x550);
                  piVar8[-2] = 0x8c6416;
                  cVar2 = (*pcVar1)();
                  if (cVar2 == '\0') {
                    iVar4 = piVar3[0xae8];
                    piVar8[-1] = (int)piVar9;
                    *piVar8 = iVar4;
                    piVar8[-2] = 0x8c6451;
                    CTerrorPlayer::OnHitSurvivorWithBoomerBomb();
                  }
                  piVar8[1] = 1;
                  *piVar8 = (int)piVar9;
                  piVar8[-1] = (int)piVar3;
                  piVar8[-2] = 0x8c642e;
                  CTerrorPlayer::OnVomitedUpon
                            ((CTerrorPlayer *)piVar8[-1],(CTerrorPlayer *)*piVar8,SUB41(piVar8[1],0)
                            );
                  iVar4 = *piVar9;
                  *piVar8 = (int)piVar3;
                  piVar8[-1] = (int)piVar9;
                  pcVar1 = *(code **)(iVar4 + 0x64c);
                  piVar8[-2] = 0x8c643d;
                  (*pcVar1)();
                }
                piVar8[1] = 0;
                *piVar8 = (int)piVar9;
                piVar8[-1] = (int)piVar3;
                piVar8[-2] = 0x8c6406;
                CTerrorPlayer::OnStaggered
                          ((CTerrorPlayer *)piVar8[-1],(CBaseEntity *)*piVar8,(Vector *)piVar8[1]);
              }
            }
          }
          piVar8[-1] = (int)piVar3;
          piVar8[3] = (int)&local_958;
          piVar8[2] = (int)&local_964;
          piVar8[1] = (int)&local_970;
          *piVar8 = (int)&local_88c;
          piVar8[-2] = 0x8c5c58;
          CBaseEntity::TraceAttackToTriggers
                    ((CBaseEntity *)piVar8[-1],(CTakeDamageInfo *)*piVar8,(Vector *)piVar8[1],
                     (Vector *)piVar8[2],(Vector *)piVar8[3]);
          piVar9 = piVar8 + -1;
        }
      }
    }
LAB_008c55c8:
    local_82c = (float)((int)local_82c + 1);
    piVar8 = piVar9;
  } while( true );
}

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)