L L4D2node

CEnvBeam::RandomArea

0x00683570 · 1812 bytes · __thiscall

_ZN8CEnvBeam10RandomAreaEv

Decompiled

undefined (1 param)

/* CEnvBeam::RandomArea() */

void __thiscall CEnvBeam::RandomArea(CEnvBeam *this)

{
  float fVar1;
  float fVar2;
  float fVar3;
  float fVar4;
  float fVar5;
  longdouble lVar6;
  longdouble lVar7;
  longdouble lVar8;
  int local_178;
  float local_154;
  float local_150;
  float local_14c;
  float local_148;
  float local_144;
  float local_140;
  CTraceFilterSimple local_13c [16];
  float local_12c;
  float local_128;
  float local_124;
  float local_11c;
  float local_118;
  float local_114;
  undefined4 local_10c;
  undefined4 local_108;
  undefined4 local_104;
  undefined4 local_fc;
  undefined4 local_f8;
  undefined4 local_f4;
  undefined4 local_ec;
  undefined1 local_e8;
  undefined1 local_e7;
  Vector local_d0 [12];
  float local_c4;
  float local_c0;
  float local_bc;
  float local_a4;
  float local_7c;
  float local_78;
  float local_74;
  float local_70;
  float local_6c;
  float local_68;
  float local_64;
  undefined4 local_5c;
  undefined4 local_58;
  undefined4 local_54;
  float local_50;
  undefined4 local_4c;
  undefined4 local_48;
  undefined4 local_44;
  undefined4 local_3c;
  undefined1 local_38;
  undefined1 local_37;
  
  local_178 = 10;
  do {
    if (((byte)this[0x14d] & 8) != 0) {
      CBaseEntity::CalcAbsolutePosition((CBaseEntity *)this);
    }
    fVar1 = *(float *)(this + 0x2e0);
    fVar2 = *(float *)(this + 0x2e4);
    fVar3 = *(float *)(this + 0x2e8);
    lVar6 = (longdouble)(**(code **)(*random_valve + 4))(random_valve,0xbf800000,0x3f800000);
    lVar7 = (longdouble)(**(code **)(*random_valve + 4))(random_valve,0xbf800000,0x3f800000);
    lVar8 = (longdouble)(**(code **)(*random_valve + 4))(random_valve,0xbf800000,0x3f800000);
    local_154 = (float)lVar8;
    local_150 = (float)lVar7;
    local_14c = (float)lVar6;
    VectorNormalize((Vector *)&local_154);
    local_64 = *(float *)(this + 0x510);
    local_6c = local_154 * local_64;
    local_68 = local_150 * local_64;
    local_64 = local_64 * local_14c;
    local_44 = 0;
    local_48 = 0;
    local_4c = 0;
    local_3c = 0;
    local_38 = 1;
    local_54 = 0;
    local_58 = 0;
    local_37 = local_68 * local_68 + local_6c * local_6c + local_64 * local_64 != 0.0;
    local_5c = 0;
    local_7c = fVar1;
    local_78 = fVar2;
    local_74 = fVar3;
    CTraceFilterSimple::CTraceFilterSimple
              ((CTraceFilterSimple *)&local_12c,(IHandleEntity *)this,0,
               (_func_bool_IHandleEntity_ptr_int *)0x0);
    (**(code **)(*enginetrace + 0x14))
              (enginetrace,(Vector *)&local_7c,0x400b,(CTraceFilterSimple *)&local_12c,local_d0);
    if (*(int *)(r_visualizetraces._28_4_ + 0x30) != 0) {
      DebugDrawLine(local_d0,(Vector *)&local_c4,0xff,0,0,true,-1.0);
    }
    if (local_a4 != 1.0) {
      do {
        lVar6 = (longdouble)(**(code **)(*random_valve + 4))(random_valve,0xbf800000,0x3f800000);
        fVar4 = (float)lVar6;
        lVar6 = (longdouble)(**(code **)(*random_valve + 4))(random_valve,0xbf800000,0x3f800000);
        fVar5 = (float)lVar6;
        lVar6 = (longdouble)(**(code **)(*random_valve + 4))(random_valve,0xbf800000,0x3f800000);
        local_148 = (float)lVar6;
        local_144 = fVar5;
        local_140 = fVar4;
      } while (0.0 < fVar5 * local_150 + local_148 * local_154 + fVar4 * local_14c);
      VectorNormalize((Vector *)&local_148);
      local_114 = *(float *)(this + 0x510);
      local_11c = local_148 * local_114;
      local_118 = local_144 * local_114;
      local_114 = local_114 * local_140;
      local_f4 = 0;
      local_f8 = 0;
      local_fc = 0;
      local_ec = 0;
      local_e8 = 1;
      local_104 = 0;
      local_108 = 0;
      local_10c = 0;
      local_e7 = local_118 * local_118 + local_11c * local_11c + local_114 * local_114 != 0.0;
      local_12c = fVar1;
      local_128 = fVar2;
      local_124 = fVar3;
      CTraceFilterSimple::CTraceFilterSimple
                (local_13c,(IHandleEntity *)this,0,(_func_bool_IHandleEntity_ptr_int *)0x0);
      (**(code **)(*enginetrace + 0x14))
                (enginetrace,(CTraceFilterSimple *)&local_12c,0x400b,local_13c,(Vector *)&local_7c);
      if (*(int *)(r_visualizetraces._28_4_ + 0x30) != 0) {
        DebugDrawLine((Vector *)&local_7c,(Vector *)&local_70,0xff,0,0,true,-1.0);
      }
      if ((local_50 != 1.0) &&
         (*(float *)(this + 0x510) * 0.1 <=
          SQRT((local_c0 - local_6c) * (local_c0 - local_6c) +
               (local_c4 - local_70) * (local_c4 - local_70) +
               (local_bc - local_68) * (local_bc - local_68)))) {
        local_11c = local_70 - local_c4;
        local_114 = local_68 - local_bc;
        local_118 = local_6c - local_c0;
        local_12c = local_c4;
        local_128 = local_c0;
        local_124 = local_bc;
        local_f4 = 0;
        local_f8 = 0;
        local_fc = 0;
        local_ec = 0;
        local_e7 = local_114 * local_114 + local_11c * local_11c + local_118 * local_118 != 0.0;
        local_e8 = 1;
        local_104 = 0;
        local_108 = 0;
        local_10c = 0;
        CTraceFilterSimple::CTraceFilterSimple
                  (local_13c,(IHandleEntity *)this,0,(_func_bool_IHandleEntity_ptr_int *)0x0);
        (**(code **)(*enginetrace + 0x14))
                  (enginetrace,(CTraceFilterSimple *)&local_12c,0x400b,local_13c,(Vector *)&local_7c
                  );
        if (*(int *)(r_visualizetraces._28_4_ + 0x30) != 0) {
          DebugDrawLine((Vector *)&local_7c,(Vector *)&local_70,0xff,0,0,true,-1.0);
        }
        if (local_50 == 1.0) {
          Zap(this,(Vector *)&local_c4,(Vector *)&local_70);
          return;
        }
      }
    }
    local_178 = local_178 + -1;
    if (local_178 == 0) {
      return;
    }
  } 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)