L L4D2node

PropBreakableCreateAll

0x0049ab20 · 4339 bytes · __cdecl

_Z22PropBreakableCreateAlliP14IPhysicsObjectRK21breakablepropparams_tP11CBaseEntityibb

Decompiled

undefined (7 params)

/* WARNING: Removing unreachable block (ram,0x0049bc71) */
/* WARNING: Removing unreachable block (ram,0x0049ba38) */
/* WARNING: Removing unreachable block (ram,0x0049b7dd) */
/* WARNING: Removing unreachable block (ram,0x0049bc78) */
/* PropBreakableCreateAll(int, IPhysicsObject*, breakablepropparams_t const&, CBaseEntity*, int,
   bool, bool) */

void PropBreakableCreateAll
               (int param_1,IPhysicsObject *param_2,breakablepropparams_t *param_3,
               CBaseEntity *param_4,int param_5,bool param_6,bool param_7)

{
  float fVar1;
  int *piVar2;
  code *pcVar3;
  char cVar4;
  int iVar5;
  studiohdr_t *psVar6;
  CBaseEntity *this;
  float *pfVar7;
  float *pfVar8;
  int *piVar9;
  int iVar10;
  undefined1 *puVar11;
  undefined4 uVar12;
  undefined4 *puVar13;
  uint uVar14;
  int iVar15;
  int **ppiVar16;
  int in_GS_OFFSET;
  longdouble lVar17;
  int aiStack_658 [2];
  int *local_650;
  matrix3x4_t *local_624;
  int local_61c;
  CBaseAnimating *local_618;
  int local_610;
  CBaseEntity *local_60c;
  Vector *local_608;
  int local_604;
  undefined1 *local_600 [4];
  float local_5f0;
  float local_5ec;
  float local_5e8;
  float local_5e4;
  float local_5e0;
  float local_5dc;
  undefined4 local_5d8 [3];
  float local_5cc [3];
  float local_5c0;
  float local_5bc;
  float local_5b8;
  float local_5b4;
  float local_5b0;
  float local_5ac;
  float local_5a8;
  float local_5a4;
  float local_5a0;
  float local_59c;
  float local_598;
  float local_594;
  int local_590 [5];
  matrix3x4_t local_57c [48];
  matrix3x4_t local_54c [48];
  CStudioHdr local_51c [8];
  undefined4 local_514 [3];
  undefined4 local_508;
  undefined4 local_504;
  undefined4 local_4f0 [3];
  undefined4 local_4e4;
  undefined4 local_4e0;
  undefined4 local_4dc [3];
  undefined4 local_4d0;
  undefined4 local_4cc;
  int local_4b4 [2];
  undefined4 local_4ac [3];
  undefined4 local_4a0;
  undefined4 local_49c;
  undefined4 local_488 [3];
  undefined4 local_47c;
  undefined4 local_478;
  undefined4 local_474 [3];
  undefined4 local_468;
  undefined4 local_464;
  float local_44c;
  float local_448;
  float local_444;
  undefined1 local_440 [512];
  undefined1 local_240;
  float local_40;
  undefined4 local_3c;
  undefined4 local_38;
  undefined4 local_34;
  undefined4 local_30;
  undefined4 local_2c;
  undefined1 local_28;
  undefined1 local_27;
  undefined1 local_26;
  int local_20;
  
  local_20 = *(int *)(in_GS_OFFSET + 0x14);
  iVar10 = *(int *)(props_break_max_pieces_perframe._28_4_ + 0x30);
  if (iVar10 != -1) {
    if (*(int *)(gpGlobals + 4) != nFrameNumber) {
      nPropBreakablesPerFrameCount = 0;
      nFrameNumber = *(int *)(gpGlobals + 4);
    }
    piVar9 = (int *)&stack0xfffff9b4;
    if (iVar10 <= nPropBreakablesPerFrameCount) goto LAB_0049ab96;
  }
  iVar5 = param_5;
  if ((((!param_6) && (iVar15 = *(int *)(props_break_max_pieces._28_4_ + 0x30), iVar15 != -1)) &&
      (iVar5 = iVar15, param_5 != -1)) && (param_5 <= iVar15)) {
    iVar5 = param_5;
  }
  param_5 = iVar5;
  local_650 = (int *)0x49abf6;
  cVar4 = PropBreakableCapEdictsOnCreateAll(param_1,param_2,param_3,param_4,param_5);
  if (cVar4 == '\0') {
    local_650 = (int *)0x49b3ac;
    DevMsg("Failed to create PropBreakable: would exceed MAX_EDICTS\n");
    piVar9 = (int *)&stack0xfffff9b4;
  }
  else {
    local_650 = (int *)0x49ac0f;
    iVar5 = (**(code **)(*modelinfo + 0x18))();
    piVar9 = (int *)&stack0xfffff9b4;
    if (iVar5 != 0) {
      local_60c = param_4;
      if (param_2 != (IPhysicsObject *)0x0) {
        local_650 = (int *)0x49ac2b;
        local_60c = (CBaseEntity *)(**(code **)(*(int *)param_2 + 0x48))();
      }
      if (local_60c == (CBaseEntity *)0x0) {
        local_618 = (CBaseAnimating *)0x0;
        local_61c = 0;
      }
      else {
        local_650 = (int *)0x49ac4a;
        local_618 = (CBaseAnimating *)(**(code **)(*(int *)local_60c + 0xf0))();
        if (local_618 == (CBaseAnimating *)0x0) {
          local_61c = 0;
        }
        else {
          local_61c = *(int *)(local_618 + 0x458);
        }
      }
      local_650 = (int *)0x49ac72;
      CStudioHdr::CStudioHdr(local_51c);
                    /* try { // try from 0049ac80 to 0049ad33 has its CatchHandler @ 0049bcd1 */
      local_650 = (int *)0x49ac83;
      iVar5 = (**(code **)(*modelinfo + 8))();
      if (iVar5 != 0) {
        local_650 = (int *)0x49ac99;
        psVar6 = (studiohdr_t *)(**(code **)(*modelinfo + 0x7c))();
        local_650 = (int *)0x49acb3;
        CStudioHdr::Init(local_51c,psVar6,(IMDLCache *)0x0);
      }
      local_5f0 = vec3_origin;
      local_5ec = DAT_01053d4c;
      local_5e8 = DAT_01053d50;
      local_650 = (int *)0x49acea;
      iVar5 = Studio_FindAttachment(local_51c,"placementOrigin");
      if (iVar5 < 0) {
                    /* try { // try from 0049bc37 to 0049bc3b has its CatchHandler @ 0049bcd1 */
        local_650 = (int *)0x49bc3c;
        AngleMatrix((QAngle *)&vec3_angle,local_57c);
      }
      else {
        local_650 = (int *)0x49ad14;
        GetAttachmentLocalSpace(local_51c,iVar5,local_57c);
        local_650 = (int *)0x49ad34;
        MatrixGetColumn(local_57c,3,(Vector *)&local_5f0);
      }
      local_624 = local_57c;
      local_590[0] = 0;
      local_590[1] = 0;
      local_590[2] = 0;
      local_590[3] = 0;
      local_590[4] = 0;
                    /* try { // try from 0049ad85 to 0049ad89 has its CatchHandler @ 0049bccf */
      local_650 = (int *)0x49ad8a;
      BreakModelList((CUtlVector *)local_590,param_1,*(float *)(param_3 + 0x14),
                     *(int *)(param_3 + 0x18));
      if (local_590[3] == 0) {
        ppiVar16 = (int **)&stack0xfffff9b4;
        if (param_4 != (CBaseEntity *)0x0) {
          local_650 = (int *)0x49b5a8;
          piVar9 = (int *)__dynamic_cast();
          ppiVar16 = (int **)&stack0xfffff9b4;
          if (piVar9 != (int *)0x0) {
                    /* try { // try from 0049b5c7 to 0049b5c9 has its CatchHandler @ 0049bccf */
            local_650 = (int *)0x49b5ca;
            (**(code **)(*piVar9 + 0x54))();
            ppiVar16 = &local_650;
                    /* try { // try from 0049b5e0 to 0049b5e2 has its CatchHandler @ 0049bc85 */
            if ((local_600[0] != (undefined1 *)0x0) &&
               (local_650 = piVar9, iVar10 = (**(code **)(*piVar9 + 100))(), ppiVar16 = &local_650,
               iVar10 != 0)) {
              local_610 = 0;
              ppiVar16 = &local_650;
              while( true ) {
                iVar10 = *piVar9;
                *ppiVar16 = piVar9;
                pcVar3 = *(code **)(iVar10 + 100);
                ppiVar16[-1] = (int *)0x49b92c;
                iVar10 = (*pcVar3)();
                if ((iVar10 <= local_610) || ((param_5 <= local_610 && (param_5 != -1)))) break;
                iVar10 = *piVar9;
                *ppiVar16 = piVar9;
                pcVar3 = *(code **)(iVar10 + 0x6c);
                ppiVar16[-1] = (int *)0x49b955;
                iVar5 = (*pcVar3)();
                iVar10 = *piVar9;
                ppiVar16[1] = piVar9;
                *ppiVar16 = (int *)local_600;
                pcVar3 = *(code **)(iVar10 + 0x54);
                ppiVar16[-1] = (int *)0x49b96f;
                (*pcVar3)();
                ppiVar16[1] = (int *)iVar5;
                ppiVar16[-1] = (int *)g_PropDataSystem;
                puVar11 = &DAT_00d539c2;
                if (local_600[0] != (undefined1 *)0x0) {
                  puVar11 = local_600[0];
                }
                *ppiVar16 = (int *)puVar11;
                ppiVar16[-2] = (int *)0x49b996;
                uVar12 = CPropData::GetRandomChunkModel
                                   ((CPropData *)ppiVar16[-1],(char *)*ppiVar16,(int)ppiVar16[1]);
                *ppiVar16 = (int *)uVar12;
                ppiVar16[1] = (int *)0x200;
                ppiVar16[-1] = (int *)local_440;
                ppiVar16[-2] = (int *)0x49b9b0;
                V_strncpy((char *)ppiVar16[-1],(char *)*ppiVar16,(int)ppiVar16[1]);
                *ppiVar16 = (int *)0x41200000;
                ppiVar16[-1] = (int *)0x40a00000;
                local_34 = 0x3f800000;
                ppiVar16[-2] = (int *)0x49b9cb;
                lVar17 = (longdouble)RandomFloat();
                local_3c = 0;
                local_38 = 0;
                local_40 = (float)lVar17;
                local_2c = 1;
                local_30 = *(undefined4 *)(param_3 + 0x14);
                local_28 = 0;
                local_26 = 0;
                local_240 = 0;
                local_27 = 0;
                if (AllocTempVector()::s_vecTemp == '\0') {
                  ppiVar16[-1] = (int *)&AllocTempVector()::s_vecTemp;
                  ppiVar16[-2] = (int *)0x49bb6c;
                  iVar10 = __cxa_guard_acquire();
                  if (iVar10 != 0) {
                    ppiVar16[-1] = (int *)&AllocTempVector()::s_vecTemp;
                    ppiVar16[-2] = (int *)0x49bb80;
                    __cxa_guard_release();
                  }
                }
                if (AllocTempVector()::s_nIndex == '\0') {
                  ppiVar16[-1] = (int *)&AllocTempVector()::s_nIndex;
                  ppiVar16[-2] = (int *)0x49bb34;
                  iVar10 = __cxa_guard_acquire();
                  if (iVar10 != 0) {
                    ppiVar16[-1] = (int *)&AllocTempVector()::s_nIndex;
                    AllocTempVector()::s_nIndex = 0;
                    ppiVar16[-2] = (int *)0x49bb52;
                    __cxa_guard_release();
                  }
                }
                uVar14 = AllocTempVector()::s_nIndex + 0x10001 & 0x7f;
                LOCK();
                UNLOCK();
                iVar10 = uVar14 * 0xc;
                AllocTempVector()::s_nIndex = uVar14;
                *(float *)(AllocTempVector()::s_vecTemp + uVar14 * 0xc) =
                     *(float *)(param_4 + 0x1a8) - *(float *)(param_4 + 0x19c);
                *(float *)(AllocTempVector()::s_vecTemp + iVar10 + 4) =
                     *(float *)(param_4 + 0x1ac) - *(float *)(param_4 + 0x1a0);
                *(float *)(AllocTempVector()::s_vecTemp + iVar10 + 8) =
                     *(float *)(param_4 + 0x1b0) - *(float *)(param_4 + 0x1a4);
                local_5e4 = *(float *)(AllocTempVector()::s_vecTemp + uVar14 * 0xc);
                local_5e0 = *(float *)(AllocTempVector()::s_vecTemp + iVar10 + 4);
                local_5dc = *(float *)(AllocTempVector()::s_vecTemp + iVar10 + 8);
                if (local_5e4 < local_5e0) {
                  if (local_5dc <= local_5e4) goto LAB_0049bb00;
                  pfVar8 = local_5cc;
                  puVar13 = local_5d8;
                }
                else if (local_5dc <= local_5e0) {
LAB_0049bb00:
                  pfVar8 = local_5cc + 2;
                  puVar13 = local_5d8 + 2;
                }
                else {
                  pfVar8 = local_5cc + 1;
                  puVar13 = local_5d8 + 1;
                }
                local_608 = (Vector *)local_5cc;
                local_5d8[0] = 0;
                local_5d8[1] = 0;
                local_5d8[2] = 0;
                local_5cc[0] = 1.0;
                *puVar13 = 0x3f000000;
                local_5cc[1] = 1.0;
                local_5cc[2] = 1.0;
                *pfVar8 = 0.5;
                *ppiVar16 = local_5d8;
                ppiVar16[2] = (int *)&local_44c;
                ppiVar16[1] = (int *)local_608;
                ppiVar16[-1] = (int *)(param_4 + 0x194);
                    /* try { // try from 0049b69c to 0049bc15 has its CatchHandler @ 0049bccf */
                ppiVar16[-2] = (int *)0x49b6a1;
                CCollisionProperty::RandomPointInBounds
                          ((CCollisionProperty *)ppiVar16[-1],(Vector *)*ppiVar16,
                           (Vector *)ppiVar16[1],(Vector *)ppiVar16[2]);
                pfVar8 = *(float **)param_3;
                local_5c0 = local_44c - *pfVar8;
                local_5bc = local_448 - pfVar8[1];
                fVar1 = pfVar8[2];
                ppiVar16[-1] = (int *)&local_5c0;
                local_5b8 = local_444 - fVar1;
                ppiVar16[-2] = (int *)0x49b6ef;
                VectorNormalize((Vector *)ppiVar16[-1]);
                fVar1 = *(float *)(param_3 + 0x14);
                local_5b4 = local_5c0 * fVar1;
                local_5b0 = local_5bc * fVar1;
                local_5ac = fVar1 * local_5b8;
                if (((byte)param_4[0x14d] & 8) != 0) {
                  ppiVar16[-1] = (int *)param_4;
                  ppiVar16[-2] = (int *)0x49b73f;
                  CBaseEntity::CalcAbsolutePosition((CBaseEntity *)ppiVar16[-1]);
                }
                local_5a8 = *(float *)(param_4 + 0x37c);
                local_5a4 = *(float *)(param_4 + 0x380);
                local_5a0 = *(float *)(param_4 + 900);
                iVar10 = *piVar9;
                ppiVar16[-1] = piVar9;
                pcVar3 = *(code **)(iVar10 + 0x5c);
                ppiVar16[-2] = (int *)0x49b771;
                iVar10 = (*pcVar3)();
                ppiVar16[5] = (int *)iVar10;
                ppiVar16[3] = (int *)&local_5b4;
                ppiVar16[2] = (int *)&local_5a8;
                ppiVar16[6] = (int *)param_3;
                ppiVar16[4] = (int *)&vec3_origin;
                ppiVar16[1] = (int *)&local_44c;
                *ppiVar16 = (int *)&local_44c;
                ppiVar16[-1] = (int *)local_60c;
                ppiVar16[-2] = (int *)0x49b7ab;
                iVar10 = BreakModelCreateSingle
                                   ((CBaseEntity *)ppiVar16[-1],(breakmodel_t *)*ppiVar16,
                                    (Vector *)ppiVar16[1],(QAngle *)ppiVar16[2],
                                    (Vector *)ppiVar16[3],(Vector *)ppiVar16[4],(int)ppiVar16[5],
                                    (breakablepropparams_t *)ppiVar16[6]);
                if (iVar10 == 0) {
                  ppiVar16[-1] = (int *)"PropBreakableCreateAll: Could not create model %s\n";
                  *ppiVar16 = (int *)local_440;
                  ppiVar16[-2] = (int *)0x49bc16;
                  DevWarning((char *)ppiVar16[-1]);
                }
                else {
                  if (AllocTempVector()::s_vecTemp == '\0') {
                    ppiVar16[-1] = (int *)&AllocTempVector()::s_vecTemp;
                    ppiVar16[-2] = (int *)0x49bbdc;
                    iVar5 = __cxa_guard_acquire();
                    if (iVar5 != 0) {
                      ppiVar16[-1] = (int *)&AllocTempVector()::s_vecTemp;
                      ppiVar16[-2] = (int *)0x49bbf0;
                      __cxa_guard_release();
                    }
                  }
                  if (AllocTempVector()::s_nIndex == '\0') {
                    ppiVar16[-1] = (int *)&AllocTempVector()::s_nIndex;
                    ppiVar16[-2] = (int *)0x49bbac;
                    iVar5 = __cxa_guard_acquire();
                    if (iVar5 != 0) {
                      ppiVar16[-1] = (int *)&AllocTempVector()::s_nIndex;
                      AllocTempVector()::s_nIndex = 0;
                      ppiVar16[-2] = (int *)0x49bbca;
                      __cxa_guard_release();
                    }
                  }
                  uVar14 = AllocTempVector()::s_nIndex + 0x10001 & 0x7f;
                  LOCK();
                  UNLOCK();
                  iVar5 = uVar14 * 0xc;
                  AllocTempVector()::s_nIndex = uVar14;
                  *(float *)(AllocTempVector()::s_vecTemp + uVar14 * 0xc) =
                       *(float *)(iVar10 + 0x1a8) - *(float *)(iVar10 + 0x19c);
                  *(float *)(AllocTempVector()::s_vecTemp + iVar5 + 4) =
                       *(float *)(iVar10 + 0x1ac) - *(float *)(iVar10 + 0x1a0);
                  *(float *)(AllocTempVector()::s_vecTemp + iVar5 + 8) =
                       *(float *)(iVar10 + 0x1b0) - *(float *)(iVar10 + 0x1a4);
                  local_59c = *(float *)(AllocTempVector()::s_vecTemp + uVar14 * 0xc);
                  local_598 = *(float *)(AllocTempVector()::s_vecTemp + iVar5 + 4);
                  local_594 = *(float *)(AllocTempVector()::s_vecTemp + iVar5 + 8);
                  *ppiVar16 = local_4b4;
                  ppiVar16[-1] = (int *)&local_5a8;
                  ppiVar16[-2] = (int *)0x49b86f;
                  AngleMatrix((QAngle *)ppiVar16[-1],(matrix3x4_t *)*ppiVar16);
                  ppiVar16[-2] = (int *)0x49b886;
                  AlignBoxes((matrix3x4_t *)local_4b4,(Vector *)&local_5e4,(Vector *)&local_59c);
                  *ppiVar16 = (int *)&local_5a8;
                  ppiVar16[-1] = local_4b4;
                  ppiVar16[-2] = (int *)0x49b89e;
                  MatrixAngles((matrix3x4_t *)ppiVar16[-1],(float *)*ppiVar16);
                  piVar2 = *(int **)(iVar10 + 0x238);
                  if (piVar2 != (int *)0x0) {
                    iVar5 = *piVar2;
                    ppiVar16[1] = (int *)0x0;
                    *ppiVar16 = (int *)local_54c;
                    ppiVar16[-1] = piVar2;
                    pcVar3 = *(code **)(iVar5 + 0xc4);
                    ppiVar16[-2] = (int *)0x49b8c5;
                    (*pcVar3)();
                    piVar2 = *(int **)(iVar10 + 0x238);
                    iVar5 = *piVar2;
                    ppiVar16[1] = (int *)&local_5a8;
                    ppiVar16[2] = (int *)0x1;
                    *ppiVar16 = (int *)local_54c;
                    ppiVar16[-1] = piVar2;
                    pcVar3 = *(code **)(iVar5 + 0xbc);
                    ppiVar16[-2] = (int *)0x49b8f2;
                    (*pcVar3)();
                  }
                  ppiVar16[-1] = (int *)iVar10;
                  *ppiVar16 = (int *)&local_5a8;
                  ppiVar16[-2] = (int *)0x49b904;
                  CBaseEntity::SetAbsAngles((CBaseEntity *)ppiVar16[-1],(QAngle *)*ppiVar16);
                  if (((byte)local_60c[0xd4] & 0x10) != 0) {
                    *ppiVar16 = (int *)0x10;
                    ppiVar16[-1] = (int *)iVar10;
                    ppiVar16[-2] = (int *)0x49bb98;
                    CBaseEntity::AddEffects((CBaseEntity *)ppiVar16[-1],(int)*ppiVar16);
                  }
                }
                local_610 = local_610 + 1;
                ppiVar16 = ppiVar16 + -1;
              }
            }
          }
        }
      }
      else {
        ppiVar16 = (int **)&stack0xfffff9b4;
        if (0 < local_590[3]) {
          local_604 = 0;
          do {
            iVar15 = local_604 * 0x42c;
                    /* try { // try from 0049b134 to 0049b1ce has its CatchHandler @ 0049bccf */
            local_650 = (int *)0x49b137;
            iVar5 = (**(code **)(*modelinfo + 0xc))();
            if (iVar5 < 1) {
                    /* try { // try from 0049b471 to 0049b475 has its CatchHandler @ 0049bccf */
              local_650 = (int *)0x49b476;
              Warning();
            }
            else if (((*(int *)(gpGlobals + 0x14) < 2) ||
                     (*(int *)(breakable_multiplayer._28_4_ + 0x30) == 0)) ||
                    ((iVar5 = *(int *)(local_590[0] + 0x428 + iVar15), iVar5 != 2 &&
                     ((param_7 || (iVar5 != 0)))))) {
              if (((iVar10 != -1) &&
                  (ppiVar16 = (int **)&stack0xfffff9b4, iVar10 < nPropBreakablesPerFrameCount)) ||
                 ((param_5 <= local_604 && (ppiVar16 = (int **)&stack0xfffff9b4, param_5 != -1))))
              break;
              local_650 = (int *)0x49b1c1;
              AngleMatrix(*(QAngle **)(param_3 + 4),*(Vector **)param_3,local_54c);
              local_650 = (int *)0x49b1cf;
              CStudioHdr::CStudioHdr((CStudioHdr *)local_4b4);
                    /* try { // try from 0049b1dd to 0049b398 has its CatchHandler @ 0049bce7 */
              local_650 = (int *)0x49b1e0;
              iVar5 = (**(code **)(*modelinfo + 8))();
              if (iVar5 != 0) {
                local_650 = (int *)0x49b1f6;
                psVar6 = (studiohdr_t *)(**(code **)(*modelinfo + 0x7c))();
                local_650 = (int *)0x49b210;
                CStudioHdr::Init((CStudioHdr *)local_4b4,psVar6,(IMDLCache *)0x0);
              }
              local_5cc[0] = vec3_origin;
              nPropBreakablesPerFrameCount = nPropBreakablesPerFrameCount + 1;
              local_5cc[1] = DAT_01053d4c;
              local_5cc[2] = DAT_01053d50;
              pfVar8 = *(float **)(param_3 + 4);
              local_5c0 = *pfVar8;
              local_5bc = pfVar8[1];
              local_5b8 = pfVar8[2];
              if ((local_618 == (CBaseAnimating *)0x0) ||
                 (iVar5 = local_590[0] + iVar15, *(char *)(iVar5 + 0x20c) == '\0')) {
                local_650 = (int *)0x49b28a;
                iVar5 = Studio_FindAttachment((CStudioHdr *)local_4b4,"placementOrigin");
                local_5a8 = local_5f0;
                local_5a4 = local_5ec;
                local_5a0 = local_5e8;
                if (-1 < iVar5) {
                  local_650 = (int *)0x49b2d2;
                  GetAttachmentLocalSpace((CStudioHdr *)local_4b4,iVar5,local_624);
                  local_650 = (int *)0x49b2ec;
                  MatrixGetColumn(local_624,3,(Vector *)&local_5a8);
                  local_5a8 = local_5a8 - local_5f0;
                  local_5a4 = local_5a4 - local_5ec;
                  local_5a0 = local_5a0 - local_5e8;
                }
                pfVar8 = (float *)(local_590[0] + iVar15);
                local_59c = *pfVar8 - local_5a8;
                local_598 = pfVar8[1] - local_5a4;
                local_594 = pfVar8[2] - local_5a0;
                local_650 = (int *)0x49b399;
                VectorTransform(&local_59c,local_54c,local_5cc);
              }
              else if (*(char *)(iVar5 + 0x425) == '\0') {
                    /* try { // try from 0049b3fa to 0049b43c has its CatchHandler @ 0049bce7 */
                local_650 = (int *)0x49b3ff;
                iVar5 = Studio_FindAttachment((CStudioHdr *)local_4b4,(char *)(iVar5 + 0x20c));
                if (0 < iVar5 + 1) {
                  local_650 = (int *)0x49b425;
                  (**(code **)(*(int *)local_618 + 0x370))();
                  local_650 = (int *)0x49b43d;
                  MatrixAngles(local_54c,&local_5c0);
                }
              }
              else {
                    /* try { // try from 0049adcf to 0049af02 has its CatchHandler @ 0049bce7 */
                local_650 = (int *)0x49add4;
                iVar5 = CBaseAnimating::LookupBone(local_618,(char *)(iVar5 + 0x20c));
                if (-1 < iVar5) {
                  local_650 = (int *)0x49ae08;
                  CBaseAnimating::GetBonePosition
                            (local_618,iVar5,(Vector *)local_5cc,(QAngle *)&local_5c0);
                  local_650 = (int *)0x49ae24;
                  AngleMatrix((QAngle *)&local_5c0,(Vector *)local_5cc,local_54c);
                }
              }
              local_608 = (Vector *)local_5cc;
              pfVar8 = *(float **)(param_3 + 8);
              local_5b4 = *pfVar8;
              local_5b0 = pfVar8[1];
              local_5ac = pfVar8[2];
              if (param_2 != (IPhysicsObject *)0x0) {
                local_650 = (int *)0x49ae78;
                (**(code **)(*(int *)param_2 + 0xdc))();
              }
              iVar5 = 0;
              if (local_61c <= *(int *)(local_4b4[0] + 0xe0)) {
                iVar5 = local_61c;
              }
              local_650 = (int *)0x49aed0;
              this = (CBaseEntity *)
                     BreakModelCreateSingle
                               (local_60c,(breakmodel_t *)(local_590[0] + iVar15),local_608,
                                (QAngle *)&local_5c0,(Vector *)&local_5b4,
                                *(Vector **)(param_3 + 0xc),iVar5,param_3);
              if (this != (CBaseEntity *)0x0) {
                if ((local_60c != (CBaseEntity *)0x0) && (((byte)local_60c[0xd4] & 0x10) != 0)) {
                  local_650 = (int *)0x49af03;
                  CBaseEntity::AddEffects(this,0x10);
                }
                iVar5 = local_590[0] + iVar15;
                if (*(float *)(iVar5 + 0x41c) != 0.0) {
                  pfVar8 = *(float **)param_3;
                  local_5a8 = local_5cc[0] - *pfVar8;
                  local_5a4 = local_5cc[1] - pfVar8[1];
                  local_5a0 = local_5cc[2] - pfVar8[2];
                  if (((local_5a8 == vec3_origin) && (local_5a4 == DAT_01053d4c)) &&
                     (local_5a0 == DAT_01053d50)) {
                    /* try { // try from 0049af81 to 0049b030 has its CatchHandler @ 0049bcd5 */
                    local_650 = (int *)0x49af87;
                    pfVar7 = (float *)(**(code **)(*(int *)this + 0x288))();
                    local_5a4 = pfVar7[1] - pfVar8[1];
                    local_5a0 = pfVar7[2] - pfVar8[2];
                    local_5a8 = *pfVar7 - *pfVar8;
                  }
                  local_650 = (int *)0x49afd6;
                  VectorNormalize((Vector *)&local_5a8);
                  local_594 = *(float *)(local_590[0] + 0x41c + iVar15);
                  local_59c = local_5a8 * local_594;
                  local_598 = local_5a4 * local_594;
                  local_594 = local_594 * local_5a0;
                  local_650 = (int *)0x49b031;
                  CBaseEntity::ApplyAbsVelocityImpulse(this,(Vector *)&local_59c);
                  iVar5 = local_590[0] + iVar15;
                }
                if ((*(char *)(iVar5 + 0x426) != '\0') && (*(int **)(this + 0x238) != (int *)0x0)) {
                    /* try { // try from 0049b059 to 0049b05b has its CatchHandler @ 0049bce7 */
                  local_650 = (int *)0x49b05c;
                  (**(code **)(**(int **)(this + 0x238) + 0x40))();
                }
              }
              local_650 = (int *)0x49b070;
              CStudioHdr::Term((CStudioHdr *)local_4b4);
              local_468 = 0;
              local_650 = (int *)0x49b082;
              CUtlMemory<int,int>::Purge((CUtlMemory<int,int> *)local_474);
              local_464 = local_474[0];
              local_650 = (int *)0x49b09c;
              CUtlMemory<int,int>::Purge((CUtlMemory<int,int> *)local_474);
              local_47c = 0;
              local_650 = (int *)0x49b0ae;
              CUtlMemory<int,int>::Purge((CUtlMemory<int,int> *)local_488);
              local_478 = local_488[0];
              local_650 = (int *)0x49b0c8;
              CUtlMemory<int,int>::Purge((CUtlMemory<int,int> *)local_488);
              local_4a0 = 0;
              local_650 = (int *)0x49b0da;
              CUtlMemory<studiohdr_t_const*,int>::Purge
                        ((CUtlMemory<studiohdr_t_const*,int> *)local_4ac);
              local_49c = local_4ac[0];
              local_650 = (int *)0x49b0ee;
              CUtlMemory<studiohdr_t_const*,int>::Purge
                        ((CUtlMemory<studiohdr_t_const*,int> *)local_4ac);
            }
            local_604 = local_604 + 1;
            ppiVar16 = (int **)&stack0xfffff9b4;
          } while (local_604 < local_590[3]);
        }
      }
      local_590[3] = 0;
      *ppiVar16 = local_590;
      ppiVar16[-1] = (int *)0x49b4ae;
      CUtlMemory<breakmodel_t,int>::Purge((CUtlMemory<breakmodel_t,int> *)*ppiVar16);
      local_590[4] = local_590[0];
      *ppiVar16 = local_590;
      ppiVar16[-1] = (int *)0x49b4c8;
      CUtlMemory<breakmodel_t,int>::Purge((CUtlMemory<breakmodel_t,int> *)*ppiVar16);
      *ppiVar16 = (int *)local_51c;
      ppiVar16[-1] = (int *)0x49b4d6;
      CStudioHdr::Term((CStudioHdr *)*ppiVar16);
      *ppiVar16 = local_4dc;
      local_4d0 = 0;
      ppiVar16[-1] = (int *)0x49b4e8;
      CUtlMemory<int,int>::Purge((CUtlMemory<int,int> *)*ppiVar16);
      *ppiVar16 = local_4dc;
      local_4cc = local_4dc[0];
      ppiVar16[-1] = (int *)0x49b502;
      CUtlMemory<int,int>::Purge((CUtlMemory<int,int> *)*ppiVar16);
      *ppiVar16 = local_4f0;
      local_4e4 = 0;
      ppiVar16[-1] = (int *)0x49b514;
      CUtlMemory<int,int>::Purge((CUtlMemory<int,int> *)*ppiVar16);
      *ppiVar16 = local_4f0;
      local_4e0 = local_4f0[0];
      ppiVar16[-1] = (int *)0x49b52e;
      CUtlMemory<int,int>::Purge((CUtlMemory<int,int> *)*ppiVar16);
      *ppiVar16 = local_514;
      local_508 = 0;
      ppiVar16[-1] = (int *)0x49b540;
      CUtlMemory<studiohdr_t_const*,int>::Purge((CUtlMemory<studiohdr_t_const*,int> *)*ppiVar16);
      *ppiVar16 = local_514;
      local_504 = local_514[0];
      ppiVar16[-1] = (int *)0x49b554;
      CUtlMemory<studiohdr_t_const*,int>::Purge((CUtlMemory<studiohdr_t_const*,int> *)*ppiVar16);
      piVar9 = (int *)ppiVar16;
    }
  }
LAB_0049ab96:
  if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {
                    /* WARNING: Subroutine does not return */
    *(undefined1 **)((int)piVar9 + -4) = &LAB_0049bc85;
    __stack_chk_fail();
  }
  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)