L L4D2node

CM_RayLeafnums_r

0x0011aab0 · 1292 bytes · __cdecl

_Z16CM_RayLeafnums_rRK5Ray_tP17CCollisionBSPDataiffRK6VectorS6_PiiRi

Decompiled

undefined (10 params)

/* CM_RayLeafnums_r(Ray_t const&, CCollisionBSPData*, int, float, float, Vector const&, Vector
   const&, int*, int, int&) */

void CM_RayLeafnums_r(Ray_t *param_1,CCollisionBSPData *param_2,int param_3,float param_4,
                     float param_5,Vector *param_6,Vector *param_7,int *param_8,int param_9,
                     int *param_10)

{
  float fVar1;
  float *pfVar2;
  uint uVar3;
  int iVar4;
  undefined4 *puVar5;
  float fVar6;
  float fVar7;
  float fVar8;
  float fVar9;
  int local_40;
  float local_3c;
  float local_28;
  float local_24;
  float local_20;
  
  if (*param_10 < param_9) {
    if (param_1[0x44] == (Ray_t)0x0) {
      if (-1 < param_3) {
        do {
          puVar5 = (undefined4 *)(*(int *)param_2 + param_3 * 0xc);
          pfVar2 = (float *)*puVar5;
          uVar3 = (uint)*(byte *)(pfVar2 + 4);
          if (*(byte *)(pfVar2 + 4) < 3) {
            fVar8 = *(float *)(param_1 + uVar3 * 4 + 0x30);
            fVar6 = *(float *)(param_7 + uVar3 * 4) - pfVar2[3];
            fVar7 = *(float *)(param_6 + uVar3 * 4) - pfVar2[3];
            if (fVar8 < fVar6) goto LAB_0011ac26;
LAB_0011acec:
            if ((-fVar8 <= fVar7) || (-fVar8 <= fVar6)) goto LAB_0011ad0b;
            param_3 = puVar5[2];
          }
          else {
            fVar8 = *pfVar2;
            fVar9 = pfVar2[1];
            fVar1 = pfVar2[2];
            fVar7 = (*(float *)(param_6 + 4) * fVar9 + *(float *)param_6 * fVar8 +
                    *(float *)(param_6 + 8) * fVar1) - pfVar2[3];
            fVar6 = (*(float *)param_7 * fVar8 - pfVar2[3]) + *(float *)(param_7 + 4) * fVar9 +
                    *(float *)(param_7 + 8) * fVar1;
            fVar8 = ABS(fVar9 * *(float *)(param_1 + 0x34)) +
                    ABS(fVar8 * *(float *)(param_1 + 0x30)) +
                    ABS(fVar1 * *(float *)(param_1 + 0x38));
            if (fVar6 <= fVar8) goto LAB_0011acec;
LAB_0011ac26:
            if (fVar7 <= fVar8) goto LAB_0011acec;
            param_3 = puVar5[1];
          }
        } while (-1 < param_3);
      }
    }
    else if (-1 < param_3) {
      do {
        while( true ) {
          puVar5 = (undefined4 *)(*(int *)param_2 + param_3 * 0xc);
          pfVar2 = (float *)*puVar5;
          uVar3 = (uint)*(byte *)(pfVar2 + 4);
          if (*(byte *)(pfVar2 + 4) < 3) break;
          fVar7 = (*(float *)param_6 * *pfVar2 - pfVar2[3]) + *(float *)(param_6 + 4) * pfVar2[1] +
                  *(float *)(param_6 + 8) * pfVar2[2];
          fVar6 = (*pfVar2 * *(float *)param_7 - pfVar2[3]) + pfVar2[1] * *(float *)(param_7 + 4) +
                  pfVar2[2] * *(float *)(param_7 + 8);
          fVar8 = 0.0;
          if (0.0 < fVar6) goto LAB_0011ab25;
LAB_0011aba1:
          if ((-fVar8 <= fVar7) || (-fVar8 <= fVar6)) {
LAB_0011ad0b:
            if (fVar7 < fVar6) {
              local_40 = 0;
              iVar4 = 1;
              fVar9 = 1.0 / (fVar7 - fVar6);
              fVar6 = (fVar7 + fVar8 + 0.03125) * fVar9;
              fVar9 = ((fVar7 - fVar8) + -0.03125) * fVar9;
              if (fVar6 <= 0.0) {
                fVar6 = 0.0;
              }
              if (fVar9 <= 0.0) {
                fVar9 = 0.0;
              }
              if (1.0 <= fVar6) {
                fVar6 = 1.0;
              }
              if (1.0 <= fVar9) {
                fVar9 = 1.0;
              }
              local_3c = fVar6 * (param_5 - param_4);
            }
            else if (fVar6 < fVar7) {
              iVar4 = 0;
              local_40 = 1;
              fVar9 = 1.0 / (fVar7 - fVar6);
              fVar6 = ((fVar7 - fVar8) + -0.03125) * fVar9;
              fVar9 = (fVar7 + fVar8 + 0.03125) * fVar9;
              if (fVar6 <= 0.0) {
                fVar6 = 0.0;
              }
              if (fVar9 <= 0.0) {
                fVar9 = 0.0;
              }
              if (1.0 <= fVar6) {
                fVar6 = 1.0;
              }
              if (1.0 <= fVar9) {
                fVar9 = 1.0;
              }
              local_3c = fVar6 * (param_5 - param_4);
            }
            else {
              fVar6 = 0.0;
              local_40 = 1;
              fVar9 = 1.0;
              local_3c = 0.0;
              iVar4 = 0;
            }
            local_28 = (*(float *)param_7 - *(float *)param_6) * fVar9 + *(float *)param_6;
            local_24 = (*(float *)(param_7 + 4) - *(float *)(param_6 + 4)) * fVar9 +
                       *(float *)(param_6 + 4);
            local_20 = (*(float *)(param_7 + 8) - *(float *)(param_6 + 8)) * fVar9 +
                       *(float *)(param_6 + 8);
            CM_RayLeafnums_r(param_1,param_2,puVar5[iVar4 + 1],param_4,
                             (param_5 - param_4) * fVar9 + param_4,param_6,(Vector *)&local_28,
                             param_8,param_9,param_10);
            local_28 = (*(float *)param_7 - *(float *)param_6) * fVar6 + *(float *)param_6;
            local_24 = (*(float *)(param_7 + 4) - *(float *)(param_6 + 4)) * fVar6 +
                       *(float *)(param_6 + 4);
            local_20 = (*(float *)(param_7 + 8) - *(float *)(param_6 + 8)) * fVar6 +
                       *(float *)(param_6 + 8);
            CM_RayLeafnums_r(param_1,param_2,puVar5[local_40 + 1],local_3c + param_4,param_5,
                             (Vector *)&local_28,param_7,param_8,param_9,param_10);
            return;
          }
          param_3 = puVar5[2];
          if (param_3 < 0) goto LAB_0011abc4;
        }
        fVar6 = *(float *)(param_7 + uVar3 * 4) - pfVar2[3];
        fVar8 = *(float *)(param_1 + uVar3 * 4 + 0x30);
        fVar7 = *(float *)(param_6 + uVar3 * 4) - pfVar2[3];
        if (fVar6 <= fVar8) goto LAB_0011aba1;
LAB_0011ab25:
        if (fVar7 <= fVar8) goto LAB_0011aba1;
        param_3 = puVar5[1];
      } while (-1 < param_3);
    }
LAB_0011abc4:
    param_8[*param_10] = ~param_3;
    *param_10 = *param_10 + 1;
  }
  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)