L L4D2node

MinigunFire

0x005490e0 · 5979 bytes · __cdecl

_Z11MinigunFireP13CTerrorPlayerP12CPropMinigunRK6VectorS5_RK6QAnglefb

Decompiled

undefined (7 params)

/* MinigunFire(CTerrorPlayer*, CPropMinigun*, Vector const&, Vector const&, QAngle const&, float,
   bool) */

void MinigunFire(CTerrorPlayer *param_1,CPropMinigun *param_2,Vector *param_3,Vector *param_4,
                QAngle *param_5,float param_6,bool param_7)

{
  float fVar1;
  code *pcVar2;
  char cVar3;
  CAmmoDef *this;
  int iVar4;
  CBaseEntity *this_00;
  int iVar5;
  uint uVar6;
  CTakeDamageInfo *pCVar7;
  Vector *pVVar8;
  float *pfVar9;
  int *piVar10;
  undefined4 uVar11;
  int iVar12;
  longdouble lVar13;
  Vector *pVVar14;
  Vector *pVVar15;
  Vector *pVVar16;
  CTraceFilterSimple *pCVar17;
  Vector *pVVar18;
  float local_168;
  float local_164;
  float local_160 [3];
  float local_154;
  float local_150;
  float local_14c;
  float local_148;
  Vector local_144 [12];
  float local_138;
  float local_134;
  float local_130;
  float local_12c;
  float local_128;
  float local_124;
  float local_120;
  float local_11c;
  float local_118;
  undefined **local_114;
  float local_110;
  float local_10c;
  CPropMinigun *local_100;
  CBaseEntity *local_fc;
  float local_f8;
  float local_f4;
  float local_f0;
  float local_ec;
  float local_e8;
  float local_e4;
  int local_e0;
  float local_dc;
  float local_d8;
  char local_d4;
  float local_d0;
  float local_cc;
  float local_c8;
  undefined4 local_c4;
  undefined4 local_c0;
  undefined4 local_bc;
  float local_a4;
  ushort local_8e;
  CTakeDamageInfo *local_84;
  float local_7c;
  float local_78;
  float local_74;
  float local_6c;
  float local_68;
  float local_64;
  undefined4 local_5c;
  undefined4 local_58;
  undefined4 local_54;
  undefined4 local_4c;
  undefined4 local_48;
  undefined4 local_44;
  undefined4 local_3c;
  undefined1 local_38;
  undefined1 local_37;
  int local_28;
  
  CCSPlayer::StartNewBulletGroup();
  this = (CAmmoDef *)GetAmmoDef();
  iVar4 = CAmmoDef::Index(this,"AMMO_TYPE_MINIGUN");
  pVVar16 = (Vector *)0x0;
  pVVar14 = (Vector *)&local_150;
  pVVar15 = (Vector *)0x0;
  AngleVectors(param_5,pVVar14,(Vector *)0x0,(Vector *)0x0);
  local_d4 = '\0';
  local_d8 = 10000.0;
  local_ec = local_150;
  local_100 = param_2;
  local_e8 = local_14c;
  local_e4 = local_148;
  local_fc = (CBaseEntity *)param_1;
  local_f8 = *(float *)param_3;
  local_f4 = *(float *)(param_3 + 4);
  local_f0 = *(float *)(param_3 + 8);
  local_dc = 1.0 - param_6;
  local_e0 = iVar4;
  if (0 < *(int *)(gpGlobals + 0x14)) {
    iVar12 = 1;
    do {
      this_00 = (CBaseEntity *)UTIL_PlayerByIndex(iVar12);
      if ((((((this_00 != (CBaseEntity *)0x0) && (*(int *)(this_00 + 0x30) != 0)) &&
            (*(int *)(this_00 + 0x30) - *(int *)(gpGlobals + 0x58) >> 4 != 0)) &&
           ((cVar3 = (**(code **)(*(int *)this_00 + 0x16c))(this_00), cVar3 != '\0' &&
            (*(int *)(this_00 + 0x1f6c) != 2)))) &&
          ((iVar5 = (**(code **)(*(int *)this_00 + 0x148))(this_00), iVar5 == 0 &&
           ((this_00 != local_fc &&
            (cVar3 = (**(code **)(*(int *)this_00 + 300))(this_00), cVar3 != '\0')))))) &&
         ((cVar3 = (**(code **)(*(int *)this_00 + 0x16c))(this_00), cVar3 == '\0' ||
          (cVar3 = (**(code **)(*(int *)this_00 + 0x558))(this_00), cVar3 == '\0')))) {
        pVVar14 = (Vector *)0x64;
        iVar5 = RandomInt(0,100);
        if (iVar5 < 0x1a) {
          local_138 = local_f8;
          local_12c = local_ec * local_d8;
          local_128 = local_e8 * local_d8;
          local_124 = local_d8 * local_e4;
          local_134 = local_f4;
          local_120 = local_12c + local_f8;
          local_11c = local_128 + local_f4;
          local_130 = local_f0;
          local_118 = local_124 + local_f0;
          pVVar8 = (Vector *)(**(code **)(*(int *)this_00 + 0x288))(this_00);
          pVVar16 = local_144;
          pVVar15 = (Vector *)&local_120;
          pVVar14 = (Vector *)&local_138;
          CalcClosestPointOnLineSegment(pVVar8,(Vector *)&local_138,pVVar15,pVVar16,&local_154);
          local_12c = local_12c * local_154;
          local_128 = local_128 * local_154;
          local_124 = local_124 * local_154;
          if ((0.0 <= local_154) && (local_154 <= 1.0)) {
            local_114 = (undefined **)(local_12c + local_138);
            local_110 = local_128 + local_134;
            local_10c = local_124 + local_130;
            pfVar9 = (float *)(**(code **)(*(int *)(this_00 + 0x194) + 8))(this_00 + 0x194);
            if (((byte)this_00[0x14d] & 8) != 0) {
              CBaseEntity::CalcAbsolutePosition(this_00);
            }
            local_d0 = *pfVar9 + *(float *)(this_00 + 0x2e0);
            local_cc = pfVar9[1] + *(float *)(this_00 + 0x2e4);
            local_c8 = pfVar9[2] + *(float *)(this_00 + 0x2e8);
            pfVar9 = (float *)(**(code **)(*(int *)(this_00 + 0x194) + 4))(this_00 + 0x194);
            if (((byte)this_00[0x14d] & 8) != 0) {
              CBaseEntity::CalcAbsolutePosition(this_00);
            }
            pCVar17 = (CTraceFilterSimple *)&local_114;
            local_7c = *pfVar9 + *(float *)(this_00 + 0x2e0);
            local_78 = pfVar9[1] + *(float *)(this_00 + 0x2e4);
            pVVar8 = (Vector *)&local_7c;
            local_74 = pfVar9[2] + *(float *)(this_00 + 0x2e8);
            pVVar18 = (Vector *)&local_d0;
            pVVar14 = pVVar18;
            pVVar15 = (Vector *)pCVar17;
            lVar13 = (longdouble)CalcSqrDistanceToAABB(pVVar8,pVVar18,(Vector *)pCVar17);
            if (0.0 < (float)lVar13) {
              pfVar9 = (float *)(**(code **)(*(int *)this_00 + 0x288))(this_00);
              local_128 = pfVar9[1] - local_134;
              local_124 = pfVar9[2] - local_130;
              local_12c = *pfVar9 - local_138;
            }
            lVar13 = (longdouble)VectorNormalize((Vector *)&local_12c);
            fVar1 = (float)lVar13;
            if (local_dc < local_128 * local_e8 + local_12c * local_ec + local_124 * local_e4) {
              CTraceFilterSimple::CTraceFilterSimple
                        (pCVar17,(IHandleEntity *)local_100,0,
                         (_func_bool_IHandleEntity_ptr_int *)0x0);
              pVVar15 = (Vector *)0x200400b;
              local_114 = &PTR_ShouldHitEntity_00c54558;
              local_78 = local_128 * fVar1 + local_134;
              local_74 = local_124 * fVar1 + local_130;
              local_7c = fVar1 * local_12c + local_138;
              pVVar14 = pVVar8;
              UTIL_TraceLine((Vector *)&local_138,pVVar8,0x200400b,(ITraceFilter *)pCVar17,
                             (CGameTrace *)pVVar18);
              pVVar16 = (Vector *)pCVar17;
              if (local_a4 == 1.0) {
                ClearMultiDamage();
                CTakeDamageInfo::CTakeDamageInfo
                          ((CTakeDamageInfo *)pVVar8,(CBaseEntity *)local_100,local_fc,
                           *(float *)(MinigunDamageRate._28_4_ + 0x2c) /
                           *(float *)(MinigunRateOfFire._28_4_ + 0x2c),-0x7ffffffe,0);
                pVVar15 = (Vector *)&local_ec;
                CalculateBulletDamageForce
                          ((CTakeDamageInfo *)pVVar8,local_e0,pVVar15,(Vector *)&local_c4,1.0);
                local_28 = local_e0;
                CBaseEntity::DispatchTraceAttack
                          ((CTakeDamageInfo *)this_00,pVVar8,(CGameTrace *)pVVar15);
                ApplyMultiDamage();
                pVVar14 = pVVar8;
                pVVar16 = pVVar18;
              }
            }
          }
        }
      }
      iVar12 = iVar12 + 1;
    } while (iVar12 <= *(int *)(gpGlobals + 0x14));
  }
  iVar12 = TheNextBots();
  uVar6 = (uint)*(ushort *)(iVar12 + 0x10);
  if (uVar6 != 0xffff) {
    iVar5 = *(int *)(iVar12 + 4);
    do {
      piVar10 = *(int **)(iVar5 + uVar6 * 8);
      pCVar7 = (CTakeDamageInfo *)(**(code **)(*piVar10 + 0xb4))(piVar10,pVVar14,pVVar15,pVVar16);
      if (((pCVar7 != (CTakeDamageInfo *)local_fc) &&
          (cVar3 = (**(code **)(*(int *)pCVar7 + 300))(pCVar7), cVar3 != '\0')) &&
         ((cVar3 = (**(code **)(*(int *)pCVar7 + 0x16c))(pCVar7), cVar3 == '\0' ||
          (cVar3 = (**(code **)(*(int *)pCVar7 + 0x558))(pCVar7), cVar3 == '\0')))) {
        pVVar14 = (Vector *)0x64;
        iVar5 = RandomInt(0);
        if (iVar5 < 0x1a) {
          local_138 = local_f8;
          local_12c = local_ec * local_d8;
          local_128 = local_e8 * local_d8;
          local_124 = local_d8 * local_e4;
          local_134 = local_f4;
          local_120 = local_12c + local_f8;
          local_11c = local_128 + local_f4;
          local_130 = local_f0;
          local_118 = local_124 + local_f0;
          pVVar8 = (Vector *)(**(code **)(*(int *)pCVar7 + 0x288))(pCVar7);
          pVVar15 = (Vector *)&local_120;
          pVVar16 = local_144;
          pVVar14 = (Vector *)&local_138;
          CalcClosestPointOnLineSegment(pVVar8,pVVar14,pVVar15,pVVar16,&local_154);
          local_12c = local_12c * local_154;
          local_128 = local_128 * local_154;
          local_124 = local_124 * local_154;
          if ((0.0 <= local_154) && (local_154 <= 1.0)) {
            local_114 = (undefined **)(local_12c + local_138);
            local_110 = local_128 + local_134;
            local_10c = local_124 + local_130;
            pfVar9 = (float *)(**(code **)(*(int *)(pCVar7 + 0x194) + 8))(pCVar7 + 0x194);
            if (((byte)pCVar7[0x14d] & 8) != 0) {
              CBaseEntity::CalcAbsolutePosition((CBaseEntity *)pCVar7);
            }
            local_d0 = *pfVar9 + *(float *)(pCVar7 + 0x2e0);
            local_cc = pfVar9[1] + *(float *)(pCVar7 + 0x2e4);
            local_c8 = pfVar9[2] + *(float *)(pCVar7 + 0x2e8);
            pfVar9 = (float *)(**(code **)(*(int *)(pCVar7 + 0x194) + 4))(pCVar7 + 0x194);
            if (((byte)pCVar7[0x14d] & 8) != 0) {
              CBaseEntity::CalcAbsolutePosition((CBaseEntity *)pCVar7);
            }
            local_7c = *pfVar9 + *(float *)(pCVar7 + 0x2e0);
            local_78 = pfVar9[1] + *(float *)(pCVar7 + 0x2e4);
            pCVar17 = (CTraceFilterSimple *)&local_114;
            local_74 = pfVar9[2] + *(float *)(pCVar7 + 0x2e8);
            pVVar18 = (Vector *)&local_d0;
            pVVar8 = (Vector *)&local_7c;
            pVVar14 = pVVar18;
            pVVar15 = (Vector *)pCVar17;
            lVar13 = (longdouble)CalcSqrDistanceToAABB(pVVar8,pVVar18,(Vector *)pCVar17);
            if (0.0 < (float)lVar13) {
              pfVar9 = (float *)(**(code **)(*(int *)pCVar7 + 0x288))(pCVar7);
              local_128 = pfVar9[1] - local_134;
              local_124 = pfVar9[2] - local_130;
              local_12c = *pfVar9 - local_138;
            }
            lVar13 = (longdouble)VectorNormalize((Vector *)&local_12c);
            fVar1 = (float)lVar13;
            if (local_dc < local_128 * local_e8 + local_12c * local_ec + local_124 * local_e4) {
              CTraceFilterSimple::CTraceFilterSimple
                        (pCVar17,(IHandleEntity *)local_100,0,
                         (_func_bool_IHandleEntity_ptr_int *)0x0);
              local_114 = &PTR_ShouldHitEntity_00c54558;
              local_44 = 0;
              local_48 = 0;
              local_6c = local_12c * fVar1;
              local_38 = 1;
              local_68 = local_128 * fVar1;
              local_4c = 0;
              local_64 = fVar1 * local_124;
              local_3c = 0;
              local_54 = 0;
              local_58 = 0;
              local_5c = 0;
              local_37 = local_68 * local_68 + local_6c * local_6c + local_64 * local_64 != 0.0;
              local_7c = local_138;
              local_78 = local_134;
              local_74 = local_130;
              pVVar15 = (Vector *)0x200400b;
              pVVar14 = pVVar8;
              (**(code **)(*enginetrace + 0x14))(enginetrace);
              if (*(int *)(r_visualizetraces._28_4_ + 0x30) != 0) {
                pVVar14 = (Vector *)&local_c4;
                pCVar17 = (CTraceFilterSimple *)0x0;
                pVVar15 = (Vector *)0xff;
                DebugDrawLine(pVVar18,pVVar14,0xff,0,0,true,-1.0);
              }
              pVVar16 = (Vector *)pCVar17;
              if (local_a4 == 1.0) {
                ClearMultiDamage();
                CTakeDamageInfo::CTakeDamageInfo
                          ((CTakeDamageInfo *)pVVar8,(CBaseEntity *)local_100,local_fc,
                           *(float *)(MinigunDamageRate._28_4_ + 0x2c) /
                           *(float *)(MinigunRateOfFire._28_4_ + 0x2c),-0x7ffffffe,0);
                pVVar15 = (Vector *)&local_ec;
                CalculateBulletDamageForce
                          ((CTakeDamageInfo *)pVVar8,local_e0,pVVar15,(Vector *)&local_c4,1.0);
                local_28 = local_e0;
                CBaseEntity::DispatchTraceAttack(pCVar7,pVVar8,(CGameTrace *)pVVar15);
                ApplyMultiDamage();
                pVVar14 = pVVar8;
                pVVar16 = pVVar18;
              }
            }
          }
        }
      }
      iVar5 = *(int *)(iVar12 + 4);
      uVar6 = (uint)*(ushort *)(iVar5 + 6 + uVar6 * 8);
    } while (uVar6 != 0xffff);
  }
  pVVar14 = (Vector *)0xc23804;
  piVar10 = (int *)CGlobalEntityList::FindEntityByClassname
                             ((CGlobalEntityList *)gEntList,(CBaseEntity *)0x0,"tank_rock");
  if (((((piVar10 != (int *)0x0) &&
        (pCVar7 = (CTakeDamageInfo *)(**(code **)(*piVar10 + 0x144))(piVar10),
        pCVar7 != (CTakeDamageInfo *)0x0)) && (pCVar7 != (CTakeDamageInfo *)local_fc)) &&
      ((cVar3 = (**(code **)(*(int *)pCVar7 + 300))(pCVar7), cVar3 != '\0' &&
       ((cVar3 = (**(code **)(*(int *)pCVar7 + 0x16c))(pCVar7), cVar3 == '\0' ||
        (cVar3 = (**(code **)(*(int *)pCVar7 + 0x558))(pCVar7), cVar3 == '\0')))))) &&
     (iVar12 = RandomInt(0,100), iVar12 < 0x1a)) {
    local_138 = local_f8;
    local_12c = local_ec * local_d8;
    local_128 = local_e8 * local_d8;
    local_124 = local_d8 * local_e4;
    local_134 = local_f4;
    local_120 = local_12c + local_f8;
    local_11c = local_128 + local_f4;
    local_130 = local_f0;
    local_118 = local_124 + local_f0;
    pVVar15 = (Vector *)(**(code **)(*(int *)pCVar7 + 0x288))(pCVar7);
    pVVar16 = local_144;
    pVVar14 = (Vector *)&local_120;
    CalcClosestPointOnLineSegment(pVVar15,(Vector *)&local_138,pVVar14,pVVar16,&local_154);
    local_12c = local_12c * local_154;
    local_128 = local_128 * local_154;
    local_124 = local_124 * local_154;
    if ((0.0 <= local_154) && (local_154 <= 1.0)) {
      local_114 = (undefined **)(local_12c + local_138);
      local_110 = local_128 + local_134;
      local_10c = local_124 + local_130;
      pfVar9 = (float *)(**(code **)(*(int *)(pCVar7 + 0x194) + 8))(pCVar7 + 0x194);
      if (((byte)pCVar7[0x14d] & 8) != 0) {
        CBaseEntity::CalcAbsolutePosition((CBaseEntity *)pCVar7);
      }
      local_d0 = *pfVar9 + *(float *)(pCVar7 + 0x2e0);
      local_cc = pfVar9[1] + *(float *)(pCVar7 + 0x2e4);
      local_c8 = pfVar9[2] + *(float *)(pCVar7 + 0x2e8);
      pfVar9 = (float *)(**(code **)(*(int *)(pCVar7 + 0x194) + 4))(pCVar7 + 0x194);
      if (((byte)pCVar7[0x14d] & 8) != 0) {
        CBaseEntity::CalcAbsolutePosition((CBaseEntity *)pCVar7);
      }
      pVVar15 = (Vector *)&local_d0;
      local_7c = *pfVar9 + *(float *)(pCVar7 + 0x2e0);
      local_78 = pfVar9[1] + *(float *)(pCVar7 + 0x2e4);
      pCVar17 = (CTraceFilterSimple *)&local_114;
      local_74 = pfVar9[2] + *(float *)(pCVar7 + 0x2e8);
      pVVar14 = (Vector *)pCVar17;
      lVar13 = (longdouble)CalcSqrDistanceToAABB((Vector *)&local_7c,pVVar15,(Vector *)pCVar17);
      if (0.0 < (float)lVar13) {
        pfVar9 = (float *)(**(code **)(*(int *)pCVar7 + 0x288))(pCVar7);
        local_128 = pfVar9[1] - local_134;
        local_124 = pfVar9[2] - local_130;
        local_12c = *pfVar9 - local_138;
      }
      lVar13 = (longdouble)VectorNormalize((Vector *)&local_12c);
      fVar1 = (float)lVar13;
      if (local_dc < local_128 * local_e8 + local_12c * local_ec + local_124 * local_e4) {
        CTraceFilterSimple::CTraceFilterSimple
                  (pCVar17,(IHandleEntity *)local_100,0,(_func_bool_IHandleEntity_ptr_int *)0x0);
        pVVar14 = (Vector *)0x200400b;
        local_114 = &PTR_ShouldHitEntity_00c54558;
        local_78 = local_128 * fVar1 + local_134;
        local_74 = local_124 * fVar1 + local_130;
        local_7c = fVar1 * local_12c + local_138;
        UTIL_TraceLine((Vector *)&local_138,(Vector *)&local_7c,0x200400b,(ITraceFilter *)pCVar17,
                       (CGameTrace *)pVVar15);
        pVVar16 = (Vector *)pCVar17;
        if (local_a4 == 1.0) {
          ClearMultiDamage();
          pVVar14 = (Vector *)&local_ec;
          CTakeDamageInfo::CTakeDamageInfo
                    ((CTakeDamageInfo *)&local_7c,(CBaseEntity *)local_100,local_fc,
                     *(float *)(MinigunDamageRate._28_4_ + 0x2c) /
                     *(float *)(MinigunRateOfFire._28_4_ + 0x2c),-0x7ffffffe,0);
          CalculateBulletDamageForce
                    ((CTakeDamageInfo *)&local_7c,local_e0,pVVar14,(Vector *)&local_c4,1.0);
          local_28 = local_e0;
          CBaseEntity::DispatchTraceAttack(pCVar7,(Vector *)&local_7c,(CGameTrace *)pVVar14);
          ApplyMultiDamage();
          pVVar16 = pVVar15;
        }
      }
    }
  }
  if ((local_d4 == '\0') && (param_7)) {
    local_120 = *(float *)param_5;
    local_11c = *(float *)(param_5 + 4);
    local_118 = *(float *)(param_5 + 8);
    lVar13 = (longdouble)RandomFloat(0,0x40c90fdb,pVVar14,pVVar16);
    sincosf((float)lVar13,local_160,&local_164);
    lVar13 = (longdouble)RandomFloat(0,*(float *)(MinigunSpread._28_4_ + 0x2c) * 0.5);
    local_11c = local_164 * (float)lVar13 + local_11c;
    local_120 = (float)lVar13 * local_160[0] + local_120;
    AngleVectors((QAngle *)&local_120,(Vector *)&local_150,(Vector *)0x0,(Vector *)0x0);
    CTraceFilterSkipClassname::CTraceFilterSkipClassname
              ((CTraceFilterSkipClassname *)&local_114,(IHandleEntity *)param_2,"player",0);
    local_3c = 0;
    local_38 = 1;
    local_6c = local_150 * 10000.0;
    local_68 = local_14c * 10000.0;
    local_64 = local_148 * 10000.0;
    local_44 = 0;
    local_7c = *(float *)param_3;
    local_78 = *(float *)(param_3 + 4);
    local_74 = *(float *)(param_3 + 8);
    local_48 = 0;
    local_4c = 0;
    local_54 = 0;
    local_58 = 0;
    local_5c = 0;
    local_37 = local_6c * local_6c + local_64 * local_64 + local_68 * local_68 != 0.0;
    (**(code **)(*enginetrace + 0x14))
              (enginetrace,(Vector *)&local_7c,0x200400b,(CTraceFilterSkipClassname *)&local_114,
               (Vector *)&local_d0);
    if (*(int *)(r_visualizetraces._28_4_ + 0x30) != 0) {
      DebugDrawLine((Vector *)&local_d0,(Vector *)&local_c4,0xff,0,0,true,-1.0);
    }
    if (*(int *)(MinigunDebug._28_4_ + 0x30) != 0) {
      local_7c = local_d0;
      local_78 = local_cc;
      local_74 = local_c8 - 10.0;
      NDebugOverlay::Line((Vector *)&local_7c,(Vector *)&local_c4,0xff,0,0,false,0.1);
    }
    piVar10 = (int *)(**(code **)(*gameeventmanager + 0x1c))(gameeventmanager,"bullet_impact",0,0);
    if (piVar10 != (int *)0x0) {
      pcVar2 = *(code **)(*piVar10 + 0x30);
      uVar11 = (**(code **)(*engine + 0x40))(engine,*(undefined4 *)(param_1 + 0x30));
      (*pcVar2)(piVar10,"userid",uVar11);
      (**(code **)(*piVar10 + 0x38))(piVar10,&DAT_00c147b6,local_c4);
      (**(code **)(*piVar10 + 0x38))(piVar10,&DAT_00ca1f7c,local_c0);
      (**(code **)(*piVar10 + 0x38))(piVar10,&DAT_00ca1f82,local_bc);
      (**(code **)(*gameeventmanager + 0x20))(gameeventmanager,piVar10,0);
    }
    if ((local_8e & 900) == 0) {
      if (local_84 == (CTakeDamageInfo *)0x0) {
        return;
      }
      iVar12 = (**(code **)(*(int *)local_84 + 0x144))(local_84);
      if (iVar12 == 0) {
        UTIL_ImpactTrace((CGameTrace *)&local_d0,-0x7ffffffe,(char *)0x0);
      }
    }
    if (local_84 != (CTakeDamageInfo *)0x0) {
      ClearMultiDamage();
      local_168 = 0.0013333333;
      piVar10 = *(int **)(local_84 + 0x238);
      if (piVar10 != (int *)0x0) {
        lVar13 = (longdouble)(**(code **)(*piVar10 + 0x78))(piVar10);
        local_168 = (float)lVar13;
        if (local_168 <= 1000.0) {
          local_168 = local_168 * 0.0013333333;
        }
        else {
          local_168 = local_168 * 0.0033333334;
        }
      }
      CTakeDamageInfo::CTakeDamageInfo
                ((CTakeDamageInfo *)&local_7c,(CBaseEntity *)param_2,(CBaseEntity *)param_1,
                 (*(float *)(MinigunDamageRate._28_4_ + 0x2c) /
                 *(float *)(MinigunRateOfFire._28_4_ + 0x2c)) * 10.0,-0x7ffffffe,0);
      CalculateMeleeDamageForce
                ((CTakeDamageInfo *)&local_7c,(Vector *)&local_150,(Vector *)&local_c4,local_168);
      local_28 = iVar4;
      CBaseEntity::DispatchTraceAttack(local_84,(Vector *)&local_7c,(CGameTrace *)&local_150);
      CBaseEntity::TraceAttackToTriggers
                ((CBaseEntity *)param_1,(CTakeDamageInfo *)&local_7c,(Vector *)&local_d0,
                 (Vector *)&local_c4,(Vector *)&local_150);
      ApplyMultiDamage();
    }
  }
  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)