L L4D2node

CreateGibsFromList

0x00499850 · 4684 bytes · __cdecl

_Z18CreateGibsFromListR10CUtlVectorI12breakmodel_t10CUtlMemoryIS0_iEEiP14IPhysicsObjectRK21breakablepropparams_tP11CBaseEntityibbPS_I7CHandleISA_ES1_ISD_iEEb

Decompiled

undefined (10 params)

/* WARNING: Removing unreachable block (ram,0x0049aac7) */
/* WARNING: Removing unreachable block (ram,0x0049a6fc) */
/* WARNING: Removing unreachable block (ram,0x0049a44d) */
/* WARNING: Removing unreachable block (ram,0x0049aad7) */
/* CreateGibsFromList(CUtlVector<breakmodel_t, CUtlMemory<breakmodel_t, int> >&, int,
   IPhysicsObject*, breakablepropparams_t const&, CBaseEntity*, int, bool, bool,
   CUtlVector<CHandle<CBaseEntity>, CUtlMemory<CHandle<CBaseEntity>, int> >*, bool) */

CBaseEntity *
CreateGibsFromList(CUtlVector *param_1,int param_2,IPhysicsObject *param_3,
                  breakablepropparams_t *param_4,CBaseEntity *param_5,int param_6,bool param_7,
                  bool param_8,CUtlVector *param_9,bool param_10)

{
  float fVar1;
  code *pcVar2;
  char cVar3;
  int iVar4;
  studiohdr_t *psVar5;
  CBaseEntity *pCVar6;
  float *pfVar7;
  float *pfVar8;
  int *piVar9;
  int iVar10;
  undefined4 *puVar11;
  undefined1 *puVar12;
  undefined4 uVar13;
  uint uVar14;
  int iVar15;
  int **ppiVar16;
  int *piVar17;
  int in_GS_OFFSET;
  longdouble lVar18;
  int aiStack_648 [2];
  int *local_640;
  matrix3x4_t *local_614;
  int local_60c;
  CBaseAnimating *local_604;
  CBaseEntity *local_5f4;
  Vector *local_5f0;
  CBaseEntity *local_5ec;
  int local_5e8;
  undefined1 *local_5e0;
  float local_5dc;
  float local_5d8;
  float local_5d4;
  float local_5d0;
  float local_5cc;
  float local_5c8;
  undefined4 local_5c4 [3];
  float local_5b8 [3];
  float local_5ac;
  float local_5a8;
  float local_5a4;
  float local_5a0;
  float local_59c;
  float local_598;
  float local_594;
  float local_590;
  float local_58c;
  float local_588;
  float local_584;
  float local_580;
  matrix3x4_t local_57c [48];
  undefined4 local_54c [12];
  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;
  
  piVar17 = (int *)&stack0xfffff9c4;
  local_20 = *(int *)(in_GS_OFFSET + 0x14);
  iVar10 = *(int *)(props_break_max_pieces_perframe._28_4_ + 0x30);
  if (iVar10 == -1) {
LAB_004998dc:
    iVar4 = param_6;
    if ((((!param_7) && (iVar15 = *(int *)(props_break_max_pieces._28_4_ + 0x30), iVar15 != -1)) &&
        (iVar4 = iVar15, param_6 != -1)) && (param_6 <= iVar15)) {
      iVar4 = param_6;
    }
    param_6 = iVar4;
    local_640 = (int *)0x499905;
    cVar3 = PropBreakableCapEdictsOnCreateAll(param_2,param_3,param_4,param_5,param_6);
    if (cVar3 == '\0') {
      local_640 = (int *)0x49aa7c;
      DevMsg("Failed to create PropBreakable: would exceed MAX_EDICTS\n");
    }
    else {
      local_640 = (int *)0x49991e;
      iVar4 = (**(code **)(*modelinfo + 0x18))();
      if (iVar4 != 0) {
        local_5ec = param_5;
        if (param_3 != (IPhysicsObject *)0x0) {
          local_640 = (int *)0x49993e;
          local_5ec = (CBaseEntity *)(**(code **)(*(int *)param_3 + 0x48))();
        }
        if (local_5ec == (CBaseEntity *)0x0) {
          local_604 = (CBaseAnimating *)0x0;
          local_60c = 0;
        }
        else {
          local_640 = (int *)0x499972;
          local_604 = (CBaseAnimating *)__dynamic_cast();
          if (local_604 == (CBaseAnimating *)0x0) {
            local_60c = 0;
          }
          else {
            local_60c = *(int *)(local_604 + 0x458);
          }
        }
        local_640 = (int *)0x49999a;
        CStudioHdr::CStudioHdr(local_51c);
                    /* try { // try from 004999a8 to 00499a55 has its CatchHandler @ 0049aaf4 */
        local_640 = (int *)0x4999ab;
        iVar4 = (**(code **)(*modelinfo + 8))();
        if (iVar4 != 0) {
          local_640 = (int *)0x4999c1;
          psVar5 = (studiohdr_t *)(**(code **)(*modelinfo + 0x7c))();
          local_640 = (int *)0x4999db;
          CStudioHdr::Init(local_51c,psVar5,(IMDLCache *)0x0);
        }
        local_5dc = vec3_origin;
        local_5d8 = DAT_01053d4c;
        local_5d4 = DAT_01053d50;
        local_640 = (int *)0x499a12;
        iVar4 = Studio_FindAttachment(local_51c,"placementOrigin");
        if (iVar4 < 0) {
                    /* try { // try from 0049a92f to 0049aa5d has its CatchHandler @ 0049aaf4 */
          local_640 = (int *)0x49a934;
          AngleMatrix((QAngle *)&vec3_angle,local_57c);
        }
        else {
          local_640 = (int *)0x499a3c;
          GetAttachmentLocalSpace(local_51c,iVar4,local_57c);
          local_640 = (int *)0x499a56;
          MatrixGetColumn(local_57c,3,(Vector *)&local_5dc);
        }
        local_614 = local_57c;
        if (*(int *)(param_1 + 0xc) == 0) {
          ppiVar16 = (int **)&stack0xfffff9c4;
          if (param_5 != (CBaseEntity *)0x0) {
            local_640 = (int *)0x49a218;
            piVar9 = (int *)__dynamic_cast();
            ppiVar16 = (int **)&stack0xfffff9c4;
            if (piVar9 != (int *)0x0) {
                    /* try { // try from 0049a237 to 0049a239 has its CatchHandler @ 0049aaf4 */
              local_640 = (int *)0x49a23a;
              (**(code **)(*piVar9 + 0x54))();
              ppiVar16 = &local_640;
                    /* try { // try from 0049a250 to 0049a252 has its CatchHandler @ 0049aadc */
              if ((local_5e0 != (undefined1 *)0x0) &&
                 (local_640 = piVar9, iVar10 = (**(code **)(*piVar9 + 100))(), ppiVar16 = &local_640
                 , iVar10 != 0)) {
                local_5e8 = 0;
                local_5f4 = (CBaseEntity *)0x0;
                ppiVar16 = &local_640;
                while( true ) {
                  iVar10 = *piVar9;
                  *ppiVar16 = piVar9;
                  pcVar2 = *(code **)(iVar10 + 100);
                  ppiVar16[-1] = (int *)0x49a5f0;
                  iVar10 = (*pcVar2)();
                  piVar17 = (int *)ppiVar16;
                  if ((iVar10 <= local_5e8) || ((param_6 <= local_5e8 && (param_6 != -1)))) break;
                  iVar10 = *piVar9;
                  *ppiVar16 = piVar9;
                  pcVar2 = *(code **)(iVar10 + 0x6c);
                  ppiVar16[-1] = (int *)0x49a619;
                  iVar4 = (*pcVar2)();
                  iVar10 = *piVar9;
                  ppiVar16[1] = piVar9;
                  *ppiVar16 = (int *)&local_5e0;
                  pcVar2 = *(code **)(iVar10 + 0x54);
                  ppiVar16[-1] = (int *)0x49a633;
                  (*pcVar2)();
                  ppiVar16[1] = (int *)iVar4;
                  ppiVar16[-1] = (int *)g_PropDataSystem;
                  puVar12 = &DAT_00d539c2;
                  if (local_5e0 != (undefined1 *)0x0) {
                    puVar12 = local_5e0;
                  }
                  *ppiVar16 = (int *)puVar12;
                  ppiVar16[-2] = (int *)0x49a65a;
                  uVar13 = CPropData::GetRandomChunkModel
                                     ((CPropData *)ppiVar16[-1],(char *)*ppiVar16,(int)ppiVar16[1]);
                  *ppiVar16 = (int *)uVar13;
                  ppiVar16[1] = (int *)0x200;
                  ppiVar16[-1] = (int *)local_440;
                  ppiVar16[-2] = (int *)0x49a674;
                  V_strncpy((char *)ppiVar16[-1],(char *)*ppiVar16,(int)ppiVar16[1]);
                  *ppiVar16 = (int *)0x41200000;
                  ppiVar16[-1] = (int *)0x40a00000;
                  local_34 = 0x3f800000;
                  ppiVar16[-2] = (int *)0x49a68f;
                  lVar18 = (longdouble)RandomFloat();
                  local_3c = 0;
                  local_38 = 0;
                  local_40 = (float)lVar18;
                  local_2c = 1;
                  local_30 = *(undefined4 *)(param_4 + 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 *)0x49a9bc;
                    iVar10 = __cxa_guard_acquire();
                    if (iVar10 != 0) {
                      ppiVar16[-1] = (int *)&AllocTempVector()::s_vecTemp;
                      ppiVar16[-2] = (int *)0x49a9d0;
                      __cxa_guard_release();
                    }
                  }
                  if (AllocTempVector()::s_nIndex == '\0') {
                    ppiVar16[-1] = (int *)&AllocTempVector()::s_nIndex;
                    ppiVar16[-2] = (int *)0x49a984;
                    iVar10 = __cxa_guard_acquire();
                    if (iVar10 != 0) {
                      ppiVar16[-1] = (int *)&AllocTempVector()::s_nIndex;
                      AllocTempVector()::s_nIndex = 0;
                      ppiVar16[-2] = (int *)0x49a9a2;
                      __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_5 + 0x1a8) - *(float *)(param_5 + 0x19c);
                  *(float *)(AllocTempVector()::s_vecTemp + iVar10 + 4) =
                       *(float *)(param_5 + 0x1ac) - *(float *)(param_5 + 0x1a0);
                  *(float *)(AllocTempVector()::s_vecTemp + iVar10 + 8) =
                       *(float *)(param_5 + 0x1b0) - *(float *)(param_5 + 0x1a4);
                  local_5d0 = *(float *)(AllocTempVector()::s_vecTemp + uVar14 * 0xc);
                  local_5cc = *(float *)(AllocTempVector()::s_vecTemp + iVar10 + 4);
                  local_5c8 = *(float *)(AllocTempVector()::s_vecTemp + iVar10 + 8);
                  if (local_5d0 < local_5cc) {
                    if (local_5c8 <= local_5d0) goto LAB_0049a950;
                    pfVar8 = local_5b8;
                    puVar11 = local_5c4;
                  }
                  else if (local_5c8 <= local_5cc) {
LAB_0049a950:
                    pfVar8 = local_5b8 + 2;
                    puVar11 = local_5c4 + 2;
                  }
                  else {
                    pfVar8 = local_5b8 + 1;
                    puVar11 = local_5c4 + 1;
                  }
                  local_5f0 = (Vector *)local_5b8;
                  local_5c4[0] = 0;
                  local_5c4[1] = 0;
                  local_5c4[2] = 0;
                  local_5b8[0] = 1.0;
                  *puVar11 = 0x3f000000;
                  local_5b8[1] = 1.0;
                  local_5b8[2] = 1.0;
                  *pfVar8 = 0.5;
                  *ppiVar16 = local_5c4;
                  ppiVar16[2] = (int *)&local_44c;
                  ppiVar16[1] = (int *)local_5f0;
                  ppiVar16[-1] = (int *)(param_5 + 0x194);
                    /* try { // try from 0049a30c to 0049a68e has its CatchHandler @ 0049aaf4 */
                  ppiVar16[-2] = (int *)0x49a311;
                  CCollisionProperty::RandomPointInBounds
                            ((CCollisionProperty *)ppiVar16[-1],(Vector *)*ppiVar16,
                             (Vector *)ppiVar16[1],(Vector *)ppiVar16[2]);
                  pfVar8 = *(float **)param_4;
                  local_5ac = local_44c - *pfVar8;
                  local_5a8 = local_448 - pfVar8[1];
                  fVar1 = pfVar8[2];
                  ppiVar16[-1] = (int *)&local_5ac;
                  local_5a4 = local_444 - fVar1;
                  ppiVar16[-2] = (int *)0x49a35f;
                  VectorNormalize((Vector *)ppiVar16[-1]);
                  fVar1 = *(float *)(param_4 + 0x14);
                  local_5a0 = local_5ac * fVar1;
                  local_59c = local_5a8 * fVar1;
                  local_598 = fVar1 * local_5a4;
                  if (((byte)param_5[0x14d] & 8) != 0) {
                    ppiVar16[-1] = (int *)param_5;
                    ppiVar16[-2] = (int *)0x49a3af;
                    CBaseEntity::CalcAbsolutePosition((CBaseEntity *)ppiVar16[-1]);
                  }
                  local_594 = *(float *)(param_5 + 0x37c);
                  local_590 = *(float *)(param_5 + 0x380);
                  local_58c = *(float *)(param_5 + 900);
                  iVar10 = *piVar9;
                  ppiVar16[-1] = piVar9;
                  pcVar2 = *(code **)(iVar10 + 0x5c);
                  ppiVar16[-2] = (int *)0x49a3e1;
                  iVar10 = (*pcVar2)();
                  ppiVar16[5] = (int *)iVar10;
                  ppiVar16[3] = (int *)&local_5a0;
                  ppiVar16[2] = (int *)&local_594;
                  ppiVar16[6] = (int *)param_4;
                  ppiVar16[4] = (int *)&vec3_origin;
                  ppiVar16[1] = (int *)&local_44c;
                  *ppiVar16 = (int *)&local_44c;
                  ppiVar16[-1] = (int *)local_5ec;
                  ppiVar16[-2] = (int *)0x49a41b;
                  pCVar6 = (CBaseEntity *)
                           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 (pCVar6 == (CBaseEntity *)0x0) {
                    ppiVar16[-1] = (int *)"PropBreakableCreateAll: Could not create model %s\n";
                    *ppiVar16 = (int *)local_440;
                    ppiVar16[-2] = (int *)0x49aa5e;
                    DevWarning((char *)ppiVar16[-1]);
                  }
                  else {
                    if (AllocTempVector()::s_vecTemp == '\0') {
                      ppiVar16[-1] = (int *)&AllocTempVector()::s_vecTemp;
                      ppiVar16[-2] = (int *)0x49aa2c;
                      iVar10 = __cxa_guard_acquire();
                      if (iVar10 != 0) {
                        ppiVar16[-1] = (int *)&AllocTempVector()::s_vecTemp;
                        ppiVar16[-2] = (int *)0x49aa40;
                        __cxa_guard_release();
                      }
                    }
                    if (AllocTempVector()::s_nIndex == '\0') {
                      ppiVar16[-1] = (int *)&AllocTempVector()::s_nIndex;
                      ppiVar16[-2] = (int *)0x49a9fc;
                      iVar10 = __cxa_guard_acquire();
                      if (iVar10 != 0) {
                        ppiVar16[-1] = (int *)&AllocTempVector()::s_nIndex;
                        AllocTempVector()::s_nIndex = 0;
                        ppiVar16[-2] = (int *)0x49aa1a;
                        __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 *)(pCVar6 + 0x1a8) - *(float *)(pCVar6 + 0x19c);
                    *(float *)(AllocTempVector()::s_vecTemp + iVar10 + 4) =
                         *(float *)(pCVar6 + 0x1ac) - *(float *)(pCVar6 + 0x1a0);
                    *(float *)(AllocTempVector()::s_vecTemp + iVar10 + 8) =
                         *(float *)(pCVar6 + 0x1b0) - *(float *)(pCVar6 + 0x1a4);
                    local_588 = *(float *)(AllocTempVector()::s_vecTemp + uVar14 * 0xc);
                    local_584 = *(float *)(AllocTempVector()::s_vecTemp + iVar10 + 4);
                    local_580 = *(float *)(AllocTempVector()::s_vecTemp + iVar10 + 8);
                    *ppiVar16 = local_4b4;
                    ppiVar16[-1] = (int *)&local_594;
                    ppiVar16[-2] = (int *)0x49a4df;
                    AngleMatrix((QAngle *)ppiVar16[-1],(matrix3x4_t *)*ppiVar16);
                    ppiVar16[-2] = (int *)0x49a4f6;
                    AlignBoxes((matrix3x4_t *)local_4b4,(Vector *)&local_5d0,(Vector *)&local_588);
                    *ppiVar16 = (int *)&local_594;
                    ppiVar16[-1] = local_4b4;
                    ppiVar16[-2] = (int *)0x49a50e;
                    MatrixAngles((matrix3x4_t *)ppiVar16[-1],(float *)*ppiVar16);
                    piVar17 = *(int **)(pCVar6 + 0x238);
                    if (piVar17 != (int *)0x0) {
                      iVar10 = *piVar17;
                      ppiVar16[1] = (int *)0x0;
                      *ppiVar16 = local_54c;
                      ppiVar16[-1] = piVar17;
                      pcVar2 = *(code **)(iVar10 + 0xc4);
                      ppiVar16[-2] = (int *)0x49a535;
                      (*pcVar2)();
                      piVar17 = *(int **)(pCVar6 + 0x238);
                      iVar10 = *piVar17;
                      ppiVar16[1] = (int *)&local_594;
                      ppiVar16[2] = (int *)0x1;
                      *ppiVar16 = local_54c;
                      ppiVar16[-1] = piVar17;
                      pcVar2 = *(code **)(iVar10 + 0xbc);
                      ppiVar16[-2] = (int *)0x49a562;
                      (*pcVar2)();
                    }
                    ppiVar16[-1] = (int *)pCVar6;
                    *ppiVar16 = (int *)&local_594;
                    ppiVar16[-2] = (int *)0x49a574;
                    CBaseEntity::SetAbsAngles((CBaseEntity *)ppiVar16[-1],(QAngle *)*ppiVar16);
                    if (((byte)local_5ec[0xd4] & 0x10) != 0) {
                      *ppiVar16 = (int *)0x10;
                      ppiVar16[-1] = (int *)pCVar6;
                      ppiVar16[-2] = (int *)0x49a9e8;
                      CBaseEntity::AddEffects((CBaseEntity *)ppiVar16[-1],(int)*ppiVar16);
                    }
                    if (local_5f4 == (CBaseEntity *)0x0) {
                      local_5f4 = pCVar6;
                    }
                    if (param_9 != (CUtlVector *)0x0) {
                      local_54c[0] = 0xffffffff;
                      iVar10 = *(int *)pCVar6;
                      ppiVar16[-1] = (int *)pCVar6;
                      pcVar2 = *(code **)(iVar10 + 0xc);
                      ppiVar16[-2] = (int *)0x49a5b4;
                      puVar11 = (undefined4 *)(*pcVar2)();
                      local_54c[0] = *puVar11;
                      ppiVar16[1] = local_54c;
                      uVar13 = *(undefined4 *)(param_9 + 0xc);
                      ppiVar16[-1] = (int *)param_9;
                      *ppiVar16 = (int *)uVar13;
                      ppiVar16[-2] = (int *)0x49a5db;
                      CUtlVector<CHandle<CBaseEntity>,CUtlMemory<CHandle<CBaseEntity>,int>>::
                      InsertBefore((CUtlVector<CHandle<CBaseEntity>,CUtlMemory<CHandle<CBaseEntity>,int>>
                                    *)ppiVar16[-1],(int)*ppiVar16,(CHandle *)ppiVar16[1]);
                    }
                  }
                  local_5e8 = local_5e8 + 1;
                  ppiVar16 = ppiVar16 + -1;
                }
                goto LAB_0049a842;
              }
            }
          }
LAB_0049a838:
          local_5f4 = (CBaseEntity *)0x0;
          piVar17 = (int *)ppiVar16;
        }
        else {
          ppiVar16 = (int **)&stack0xfffff9c4;
          if (*(int *)(param_1 + 0xc) < 1) goto LAB_0049a838;
          local_5e8 = 0;
          local_5f4 = (CBaseEntity *)0x0;
          do {
            iVar15 = local_5e8 * 0x42c;
                    /* try { // try from 00499f59 to 00499fee has its CatchHandler @ 0049aaf4 */
            local_640 = (int *)0x499f5c;
            iVar4 = (**(code **)(*modelinfo + 0xc))();
            if ((0 < iVar4) &&
               (((*(int *)(gpGlobals + 0x14) < 2 ||
                 (*(int *)(breakable_multiplayer._28_4_ + 0x30) == 0)) ||
                ((iVar4 = *(int *)(*(int *)param_1 + 0x428 + iVar15), iVar4 != 2 &&
                 ((param_8 || (iVar4 != 0)))))))) {
              if (((iVar10 != -1) &&
                  (piVar17 = (int *)&stack0xfffff9c4, iVar10 < nPropBreakablesPerFrameCount)) ||
                 ((param_6 <= local_5e8 && (piVar17 = (int *)&stack0xfffff9c4, param_6 != -1))))
              break;
              local_640 = (int *)0x499fe1;
              AngleMatrix(*(QAngle **)(param_4 + 4),*(Vector **)param_4,(matrix3x4_t *)local_54c);
              local_640 = (int *)0x499fef;
              CStudioHdr::CStudioHdr((CStudioHdr *)local_4b4);
                    /* try { // try from 00499ffd to 0049a1b6 has its CatchHandler @ 0049aaf6 */
              local_640 = (int *)0x49a000;
              iVar4 = (**(code **)(*modelinfo + 8))();
              if (iVar4 != 0) {
                local_640 = (int *)0x49a016;
                psVar5 = (studiohdr_t *)(**(code **)(*modelinfo + 0x7c))();
                local_640 = (int *)0x49a030;
                CStudioHdr::Init((CStudioHdr *)local_4b4,psVar5,(IMDLCache *)0x0);
              }
              local_5b8[0] = vec3_origin;
              nPropBreakablesPerFrameCount = nPropBreakablesPerFrameCount + 1;
              local_5b8[1] = DAT_01053d4c;
              local_5b8[2] = DAT_01053d50;
              pfVar8 = *(float **)(param_4 + 4);
              local_5ac = *pfVar8;
              local_5a8 = pfVar8[1];
              local_5a4 = pfVar8[2];
              if ((local_604 == (CBaseAnimating *)0x0) ||
                 (iVar4 = *(int *)param_1 + iVar15, *(char *)(iVar4 + 0x20c) == '\0')) {
                local_640 = (int *)0x49a0ac;
                iVar4 = Studio_FindAttachment((CStudioHdr *)local_4b4,"placementOrigin");
                local_594 = local_5dc;
                local_590 = local_5d8;
                local_58c = local_5d4;
                if (-1 < iVar4) {
                  local_640 = (int *)0x49a0f4;
                  GetAttachmentLocalSpace((CStudioHdr *)local_4b4,iVar4,local_614);
                  local_640 = (int *)0x49a10e;
                  MatrixGetColumn(local_614,3,(Vector *)&local_594);
                  local_594 = local_594 - local_5dc;
                  local_590 = local_590 - local_5d8;
                  local_58c = local_58c - local_5d4;
                }
                pfVar8 = (float *)(*(int *)param_1 + iVar15);
                local_588 = *pfVar8 - local_594;
                local_584 = pfVar8[1] - local_590;
                local_580 = pfVar8[2] - local_58c;
                local_640 = (int *)0x49a1b7;
                VectorTransform(&local_588,(matrix3x4_t *)local_54c,local_5b8);
              }
              else if (*(char *)(iVar4 + 0x425) == '\0') {
                    /* try { // try from 0049a7d2 to 0049a818 has its CatchHandler @ 0049aaf6 */
                local_640 = (int *)0x49a7d7;
                iVar4 = Studio_FindAttachment((CStudioHdr *)local_4b4,(char *)(iVar4 + 0x20c));
                if (0 < iVar4 + 1) {
                  local_640 = (int *)0x49a801;
                  (**(code **)(*(int *)local_604 + 0x370))();
                  local_640 = (int *)0x49a819;
                  MatrixAngles((matrix3x4_t *)local_54c,&local_5ac);
                }
              }
              else {
                    /* try { // try from 00499aa7 to 00499cd4 has its CatchHandler @ 0049aaf6 */
                local_640 = (int *)0x499aac;
                iVar4 = CBaseAnimating::LookupBone(local_604,(char *)(iVar4 + 0x20c));
                if (-1 < iVar4) {
                  local_640 = (int *)0x499adc;
                  CBaseAnimating::GetBonePosition
                            (local_604,iVar4,(Vector *)local_5b8,(QAngle *)&local_5ac);
                  local_640 = (int *)0x499af8;
                  AngleMatrix((QAngle *)&local_5ac,(Vector *)local_5b8,(matrix3x4_t *)local_54c);
                }
              }
              pfVar8 = *(float **)(param_4 + 8);
              local_5a0 = *pfVar8;
              local_59c = pfVar8[1];
              local_598 = pfVar8[2];
              local_640 = (int *)0x499b2b;
              lVar18 = (longdouble)VectorNormalize((Vector *)&local_5a0);
              fVar1 = (float)lVar18;
              local_640 = (int *)0x499b45;
              lVar18 = (longdouble)RandomFloat();
              local_5a0 = (float)lVar18 + local_5a0;
              local_640 = (int *)0x499b77;
              lVar18 = (longdouble)RandomFloat();
              local_59c = (float)lVar18 + local_59c;
              local_640 = (int *)0x499ba9;
              lVar18 = (longdouble)RandomFloat();
              local_598 = (float)lVar18 + local_598;
              local_640 = (int *)0x499bcf;
              VectorNormalize((Vector *)&local_5a0);
              local_5a0 = local_5a0 * fVar1;
              local_59c = local_59c * fVar1;
              local_598 = local_598 * fVar1;
              if (param_3 != (IPhysicsObject *)0x0) {
                local_640 = (int *)0x499c48;
                (**(code **)(*(int *)param_3 + 0xdc))();
              }
              local_5f0 = (Vector *)local_5b8;
              iVar4 = 0;
              if (local_60c <= *(int *)(local_4b4[0] + 0xe0)) {
                iVar4 = local_60c;
              }
              local_640 = (int *)0x499ca2;
              pCVar6 = (CBaseEntity *)
                       BreakModelCreateSingle
                                 (local_5ec,(breakmodel_t *)(*(int *)param_1 + iVar15),local_5f0,
                                  (QAngle *)&local_5ac,(Vector *)&local_5a0,
                                  *(Vector **)(param_4 + 0xc),iVar4,param_4);
              if (pCVar6 != (CBaseEntity *)0x0) {
                if ((local_5ec != (CBaseEntity *)0x0) && (((byte)local_5ec[0xd4] & 0x10) != 0)) {
                  local_640 = (int *)0x499cd5;
                  CBaseEntity::AddEffects(pCVar6,0x10);
                }
                iVar4 = *(int *)param_1 + iVar15;
                if (*(float *)(iVar4 + 0x41c) != 0.0) {
                  pfVar8 = *(float **)param_4;
                  local_594 = local_5b8[0] - *pfVar8;
                  local_590 = local_5b8[1] - pfVar8[1];
                  local_58c = local_5b8[2] - pfVar8[2];
                  if (((local_594 == vec3_origin) && (local_590 == DAT_01053d4c)) &&
                     (local_58c == DAT_01053d50)) {
                    /* try { // try from 00499d55 to 00499e02 has its CatchHandler @ 0049ab08 */
                    local_640 = (int *)0x499d5b;
                    pfVar7 = (float *)(**(code **)(*(int *)pCVar6 + 0x288))();
                    local_590 = pfVar7[1] - pfVar8[1];
                    local_58c = pfVar7[2] - pfVar8[2];
                    local_594 = *pfVar7 - *pfVar8;
                  }
                  local_640 = (int *)0x499da6;
                  VectorNormalize((Vector *)&local_594);
                  local_580 = *(float *)(*(int *)param_1 + 0x41c + iVar15);
                  local_588 = local_594 * local_580;
                  local_584 = local_590 * local_580;
                  local_580 = local_580 * local_58c;
                  local_640 = (int *)0x499e03;
                  CBaseEntity::ApplyAbsVelocityImpulse(pCVar6,(Vector *)&local_588);
                  iVar4 = *(int *)param_1 + iVar15;
                }
                if ((*(char *)(iVar4 + 0x426) != '\0') && (*(int **)(pCVar6 + 0x238) != (int *)0x0))
                {
                    /* try { // try from 00499e2d to 00499e83 has its CatchHandler @ 0049aaf6 */
                  local_640 = (int *)0x499e30;
                  (**(code **)(**(int **)(pCVar6 + 0x238) + 0x40))();
                }
                if (local_5f4 == (CBaseEntity *)0x0) {
                  local_5f4 = pCVar6;
                }
                if (param_9 != (CUtlVector *)0x0) {
                  local_588 = -NAN;
                  local_640 = (int *)0x499e5d;
                  pfVar8 = (float *)(**(code **)(*(int *)pCVar6 + 0xc))();
                  local_588 = *pfVar8;
                  local_640 = (int *)0x499e84;
                  CUtlVector<CHandle<CBaseEntity>,CUtlMemory<CHandle<CBaseEntity>,int>>::
                  InsertBefore((CUtlVector<CHandle<CBaseEntity>,CUtlMemory<CHandle<CBaseEntity>,int>>
                                *)param_9,*(int *)(param_9 + 0xc),(CHandle *)&local_588);
                }
              }
              local_640 = (int *)0x499e98;
              CStudioHdr::Term((CStudioHdr *)local_4b4);
              local_468 = 0;
              local_640 = (int *)0x499eaa;
              CUtlMemory<int,int>::Purge((CUtlMemory<int,int> *)local_474);
              local_464 = local_474[0];
              local_640 = (int *)0x499ec4;
              CUtlMemory<int,int>::Purge((CUtlMemory<int,int> *)local_474);
              local_47c = 0;
              local_640 = (int *)0x499ed6;
              CUtlMemory<int,int>::Purge((CUtlMemory<int,int> *)local_488);
              local_478 = local_488[0];
              local_640 = (int *)0x499ef0;
              CUtlMemory<int,int>::Purge((CUtlMemory<int,int> *)local_488);
              local_4a0 = 0;
              local_640 = (int *)0x499f02;
              CUtlMemory<studiohdr_t_const*,int>::Purge
                        ((CUtlMemory<studiohdr_t_const*,int> *)local_4ac);
              local_49c = local_4ac[0];
              local_640 = (int *)0x499f16;
              CUtlMemory<studiohdr_t_const*,int>::Purge
                        ((CUtlMemory<studiohdr_t_const*,int> *)local_4ac);
            }
            local_5e8 = local_5e8 + 1;
            piVar17 = (int *)&stack0xfffff9c4;
          } while (local_5e8 < *(int *)(param_1 + 0xc));
        }
LAB_0049a842:
        *piVar17 = (int)local_51c;
        piVar17[-1] = 0x49a856;
        CStudioHdr::Term((CStudioHdr *)*piVar17);
        *piVar17 = (int)local_4dc;
        local_4d0 = 0;
        piVar17[-1] = 0x49a868;
        CUtlMemory<int,int>::Purge((CUtlMemory<int,int> *)*piVar17);
        *piVar17 = (int)local_4dc;
        local_4cc = local_4dc[0];
        piVar17[-1] = 0x49a882;
        CUtlMemory<int,int>::Purge((CUtlMemory<int,int> *)*piVar17);
        *piVar17 = (int)local_4f0;
        local_4e4 = 0;
        piVar17[-1] = 0x49a894;
        CUtlMemory<int,int>::Purge((CUtlMemory<int,int> *)*piVar17);
        *piVar17 = (int)local_4f0;
        local_4e0 = local_4f0[0];
        piVar17[-1] = 0x49a8ae;
        CUtlMemory<int,int>::Purge((CUtlMemory<int,int> *)*piVar17);
        *piVar17 = (int)local_514;
        local_508 = 0;
        piVar17[-1] = 0x49a8c0;
        CUtlMemory<studiohdr_t_const*,int>::Purge((CUtlMemory<studiohdr_t_const*,int> *)*piVar17);
        *piVar17 = (int)local_514;
        local_504 = local_514[0];
        piVar17[-1] = 0x49a8d4;
        CUtlMemory<studiohdr_t_const*,int>::Purge((CUtlMemory<studiohdr_t_const*,int> *)*piVar17);
        goto LAB_0049a8da;
      }
    }
  }
  else {
    if (*(int *)(gpGlobals + 4) != nFrameNumber) {
      nPropBreakablesPerFrameCount = 0;
      nFrameNumber = *(int *)(gpGlobals + 4);
    }
    if (nPropBreakablesPerFrameCount < iVar10) goto LAB_004998dc;
  }
  local_5f4 = (CBaseEntity *)0x0;
LAB_0049a8da:
  if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {
                    /* WARNING: Subroutine does not return */
    *(undefined4 *)((int)piVar17 + -4) = 0x49aad5;
    __stack_chk_fail();
  }
  return local_5f4;
}

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)