L L4D2node

CCSGameRules::RadiusDamage

0x00436a40 · 1999 bytes · __thiscall

_ZN12CCSGameRules12RadiusDamageERK15CTakeDamageInfoRK6VectorfibP11CBaseEntity

Decompiled

undefined (7 params)

/* CCSGameRules::RadiusDamage(CTakeDamageInfo const&, Vector const&, float, int, bool, CBaseEntity*)
    */

void __thiscall
CCSGameRules::RadiusDamage
          (CCSGameRules *this,CTakeDamageInfo *param_1,Vector *param_2,float param_3,int param_4,
          bool param_5,CBaseEntity *param_6)

{
  code *pcVar1;
  int *piVar2;
  float fVar3;
  float fVar4;
  float fVar5;
  char cVar6;
  CBaseEntity *pCVar7;
  int iVar8;
  int *piVar9;
  longdouble lVar10;
  float fVar11;
  float fVar12;
  float fVar13;
  float fVar14;
  int local_980;
  float local_97c;
  float local_978;
  float local_960;
  float local_95c;
  float local_958;
  float local_954;
  float local_950;
  float local_94c;
  float local_948;
  float local_944;
  float local_940;
  undefined1 local_93c [16];
  float local_92c;
  float local_928;
  float local_924;
  float local_91c;
  float local_918;
  float local_914;
  undefined4 local_90c;
  undefined4 local_908;
  undefined4 local_904;
  undefined4 local_8fc;
  undefined4 local_8f8;
  undefined4 local_8f4;
  undefined4 local_8ec;
  undefined1 local_8e8;
  undefined1 local_8e7;
  undefined1 local_8d8 [12];
  undefined1 local_8cc [72];
  float local_884;
  float local_880;
  float local_87c;
  float local_878;
  float local_874;
  float local_870;
  undefined4 local_86c;
  undefined4 local_868;
  undefined4 local_864;
  undefined4 local_860;
  undefined4 local_85c;
  undefined4 local_858;
  undefined4 local_854;
  undefined4 local_850;
  undefined4 local_84c;
  float local_848;
  undefined4 local_844;
  undefined4 local_840;
  uint local_83c;
  undefined4 local_838;
  undefined4 local_834;
  undefined4 local_830;
  float local_82c;
  int local_828;
  int local_824 [517];
  
  local_960 = 0.0;
  local_95c = 0.0;
  local_958 = 0.0;
  local_954 = *(float *)param_2;
  local_950 = *(float *)(param_2 + 4);
  if (param_3 == 0.0) {
    local_97c = 1.0;
  }
  else {
    local_97c = *(float *)(param_1 + 0x3c) / param_3;
  }
  local_94c = *(float *)(param_2 + 8) + 1.0;
  CEntitySphereQuery::CEntitySphereQuery
            ((CEntitySphereQuery *)local_824,(Vector *)&local_954,param_3,0);
  local_980 = 0;
  local_978 = 1.0;
  pCVar7 = (CBaseEntity *)CEntitySphereQuery::GetCurrentEntity((CEntitySphereQuery *)local_824);
  piVar2 = (int *)&stack0xfffff654;
  do {
    if (pCVar7 == (CBaseEntity *)0x0) {
      return;
    }
    piVar9 = piVar2;
    if ((pCVar7 != param_6) && (pCVar7[0x105] != (CBaseEntity)0x0)) {
      if (param_4 != 0) {
        iVar8 = *(int *)pCVar7;
        *piVar2 = (int)pCVar7;
        pcVar1 = *(code **)(iVar8 + 0x100);
        piVar2[-1] = 0x437123;
        iVar8 = (*pcVar1)();
        if (iVar8 == param_4) goto LAB_004370f0;
      }
      iVar8 = *(int *)pCVar7;
      piVar2[1] = (int)pCVar7;
      piVar2[3] = 1;
      piVar2[2] = (int)&local_954;
      *piVar2 = (int)&local_884;
      pcVar1 = *(code **)(iVar8 + 0x244);
      piVar2[-1] = 0x436b80;
      (*pcVar1)();
      fVar5 = local_87c;
      fVar4 = local_880;
      fVar3 = local_884;
      if (!param_5) {
        piVar2[1] = (int)pCVar7;
        *piVar2 = (int)&local_954;
        piVar2[-1] = (int)this;
        piVar2[-2] = 0x437161;
        lVar10 = (longdouble)
                 GetAmountOfEntityVisible
                           ((CCSGameRules *)piVar2[-1],(Vector *)*piVar2,(CBaseEntity *)piVar2[1]);
        local_978 = (float)lVar10;
        piVar9 = piVar2 + -1;
        if (local_978 <= 0.0) goto LAB_004370f0;
      }
      fVar12 = fVar4 - local_950;
      fVar14 = fVar5 - local_94c;
      fVar13 = fVar3 - local_954;
      fVar11 = (*(float *)(param_1 + 0x3c) -
               SQRT(fVar12 * fVar12 + fVar14 * fVar14 + fVar13 * fVar13) * local_97c) * local_978;
      piVar9 = piVar2 + -1;
      local_960 = fVar3;
      local_95c = fVar4;
      local_958 = fVar5;
      if (0.0 < fVar11) {
        local_884 = *(float *)param_1;
        local_844 = *(undefined4 *)(param_1 + 0x40);
        local_840 = *(undefined4 *)(param_1 + 0x44);
        local_880 = *(float *)(param_1 + 4);
        local_87c = *(float *)(param_1 + 8);
        local_878 = *(float *)(param_1 + 0xc);
        local_874 = *(float *)(param_1 + 0x10);
        local_870 = *(float *)(param_1 + 0x14);
        local_86c = *(undefined4 *)(param_1 + 0x18);
        local_868 = *(undefined4 *)(param_1 + 0x1c);
        local_864 = *(undefined4 *)(param_1 + 0x20);
        local_860 = *(undefined4 *)(param_1 + 0x24);
        local_85c = *(undefined4 *)(param_1 + 0x28);
        local_858 = *(undefined4 *)(param_1 + 0x2c);
        local_854 = *(undefined4 *)(param_1 + 0x30);
        local_850 = *(undefined4 *)(param_1 + 0x34);
        local_84c = *(undefined4 *)(param_1 + 0x38);
        local_83c = *(uint *)(param_1 + 0x48);
        local_838 = *(undefined4 *)(param_1 + 0x4c);
        local_82c = param_3;
        local_834 = *(undefined4 *)(param_1 + 0x50);
        local_830 = *(undefined4 *)(param_1 + 0x54);
        local_828 = *(int *)(param_1 + 0x5c);
        piVar2[-1] = (int)&local_948;
        piVar2[-2] = 0x436d39;
        local_948 = fVar13;
        local_944 = fVar12;
        local_940 = fVar14;
        local_848 = fVar11;
        VectorNormalize((Vector *)piVar2[-1]);
        if ((((vec3_origin == local_878) && (local_874 == DAT_01053d4c)) &&
            (local_870 == DAT_01053d50)) ||
           (((vec3_origin == local_884 && (local_880 == DAT_01053d4c)) &&
            (local_87c == DAT_01053d50)))) {
          iVar8 = *(int *)(phys_explosion_force._28_4_ + 0x2c);
          piVar2[1] = (int)&local_954;
          *piVar2 = (int)&local_948;
          piVar2[2] = iVar8;
          piVar2[-1] = (int)&local_884;
          piVar2[-2] = 0x436da0;
          CalculateExplosiveDamageForce
                    ((CTakeDamageInfo *)piVar2[-1],(Vector *)*piVar2,(Vector *)piVar2[1],
                     (float)piVar2[2]);
        }
        else {
          local_884 = SQRT(local_880 * local_880 + local_884 * local_884 + local_87c * local_87c);
          local_880 = local_944 * local_884;
          local_87c = local_940 * local_884;
          local_884 = local_884 * local_948;
          local_878 = local_954;
          local_874 = local_950;
          local_870 = local_94c;
        }
        iVar8 = *(int *)pCVar7;
        piVar2[2] = 0;
        piVar2[1] = (int)&local_954;
        piVar2[-1] = (int)&local_92c;
        *piVar2 = (int)pCVar7;
        pcVar1 = *(code **)(iVar8 + 0x244);
        piVar2[-2] = 0x436e8c;
        (*pcVar1)();
        local_91c = local_92c;
        local_8f4 = 0;
        piVar2[1] = 0;
        piVar2[-2] = (int)local_93c;
        local_918 = local_928 - local_950;
        *piVar2 = 0;
        local_914 = local_924 - local_94c;
        piVar2[-1] = 0;
        local_92c = local_954;
        local_91c = local_91c - local_954;
        local_928 = local_950;
        local_924 = local_94c;
        local_8f8 = 0;
        local_8fc = 0;
        local_8e8 = 1;
        local_8ec = 0;
        local_904 = 0;
        local_908 = 0;
        local_8e7 = local_918 * local_918 + local_914 * local_914 + local_91c * local_91c != 0.0;
        local_90c = 0;
        piVar2[-3] = 0x436f95;
        CTraceFilterSimple::CTraceFilterSimple
                  ((CTraceFilterSimple *)piVar2[-2],(IHandleEntity *)piVar2[-1],*piVar2,
                   (_func_bool_IHandleEntity_ptr_int *)piVar2[1]);
        iVar8 = *enginetrace;
        piVar2[2] = (int)local_8d8;
        piVar2[-2] = (int)enginetrace;
        *piVar2 = 0x46004003;
        piVar2[1] = (int)local_93c;
        piVar2[-1] = (int)&local_92c;
        pcVar1 = *(code **)(iVar8 + 0x14);
        piVar2[-3] = 0x436fc8;
        (*pcVar1)();
        if (*(int *)(r_visualizetraces._28_4_ + 0x30) != 0) {
          piVar2[4] = -0x40800000;
          piVar2[-1] = (int)local_8cc;
          piVar2[3] = 1;
          piVar2[2] = 0;
          piVar2[1] = 0;
          *piVar2 = 0xff;
          piVar2[-2] = (int)local_8d8;
          piVar2[-3] = 0x437014;
          DebugDrawLine((Vector *)piVar2[-2],(Vector *)piVar2[-1],*piVar2,piVar2[1],piVar2[2],
                        SUB41(piVar2[3],0),(float)piVar2[4]);
        }
        piVar2[-2] = g_pGameRules;
        piVar2[-3] = 0x437034;
        local_828 = local_980;
        cVar6 = CTerrorGameRules::IsCurrentRoundActive((CTerrorGameRules *)piVar2[-2]);
        if (cVar6 == '\0') {
          piVar2[-3] = 0x4371ec;
          cVar6 = CTerrorGameRules::IsSurvivalMode();
          if (cVar6 != '\0') {
            local_884 = 0.0;
            local_880 = 0.0;
            local_87c = 0.0;
            local_83c = local_83c | 0x800;
          }
        }
        piVar2[-3] = 0x437041;
        ClearMultiDamage();
        piVar2[-2] = (int)pCVar7;
        piVar2[1] = (int)local_8d8;
        *piVar2 = (int)&local_948;
        piVar2[-1] = (int)&local_884;
        piVar2[-3] = 0x437067;
        CBaseEntity::DispatchTraceAttack
                  ((CTakeDamageInfo *)piVar2[-2],(Vector *)piVar2[-1],(CGameTrace *)*piVar2);
        piVar2[-3] = 0x43706c;
        ApplyMultiDamage();
        if (*(int *)(radius_damage_show_hits._28_4_ + 0x30) != 0) {
          piVar2[4] = 0x3f800000;
          piVar2[3] = 1;
          piVar2[2] = 0;
          piVar2[1] = 0xff;
          *piVar2 = 0;
          piVar2[-1] = 0x41800000;
          piVar2[-2] = (int)local_8cc;
          piVar2[-3] = 0x4370b6;
          NDebugOverlay::Cross3D
                    ((Vector *)piVar2[-2],(float)piVar2[-1],*piVar2,piVar2[1],piVar2[2],
                     SUB41(piVar2[3],0),(float)piVar2[4]);
        }
        piVar2[-2] = (int)pCVar7;
        piVar2[2] = (int)&local_948;
        piVar2[1] = (int)&local_960;
        *piVar2 = (int)&local_954;
        piVar2[-1] = (int)&local_884;
        piVar2[-3] = 0x4370e6;
        CBaseEntity::TraceAttackToTriggers
                  ((CBaseEntity *)piVar2[-2],(CTakeDamageInfo *)piVar2[-1],(Vector *)*piVar2,
                   (Vector *)piVar2[1],(Vector *)piVar2[2]);
        piVar9 = piVar2 + -2;
        local_980 = local_980 + 1;
      }
    }
LAB_004370f0:
    local_824[0] = local_824[0] + 1;
    *piVar9 = (int)local_824;
    piVar9[-1] = 0x4370ff;
    pCVar7 = (CBaseEntity *)CEntitySphereQuery::GetCurrentEntity((CEntitySphereQuery *)*piVar9);
    piVar2 = 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)