L L4D2node

CM_ClipBoxToBrush<false>

0x0011f9e0 · 1023 bytes · __cdecl

_Z17CM_ClipBoxToBrushILb0EEvP11TraceInfo_tPK8cbrush_t

Decompiled

void (2 params)

/* void CM_ClipBoxToBrush<false>(TraceInfo_t*, cbrush_t const*) */

void CM_ClipBoxToBrush<false>(TraceInfo_t *param_1,cbrush_t *param_2)

{
  undefined4 *puVar1;
  float fVar2;
  float fVar3;
  ushort uVar4;
  ushort uVar5;
  undefined4 uVar6;
  int iVar7;
  float *pfVar8;
  undefined *puVar9;
  cbrush_t *pcVar10;
  bool bVar11;
  bool bVar12;
  undefined **ppuVar13;
  undefined4 *puVar14;
  float fVar15;
  float fVar16;
  float fVar17;
  float fVar18;
  undefined4 *local_48;
  float local_44;
  
  uVar4 = *(ushort *)(param_2 + 4);
  if (uVar4 == 0xffff) {
    pcVar10 = *(cbrush_t **)(param_1 + 0x104);
    uVar4 = *(ushort *)(param_2 + 6);
    if (*(int *)(pcVar10 + 0x78) <= (int)(uint)uVar4) {
      Error("Cannot load corrupted map.\n");
    }
    IntersectRayWithBoxBrush
              ((TraceInfo_t *)((uint)uVar4 * 0x30 + *(int *)(pcVar10 + 0x74)),pcVar10,
               (cboxbrush_t *)param_1);
    return;
  }
  if (uVar4 == 0) {
    return;
  }
  uVar6 = *(undefined4 *)param_2;
  iVar7 = *(int *)(param_1 + 0x104);
  uVar5 = *(ushort *)(param_2 + 6);
  if (*(int *)(iVar7 + 0x6c) <= (int)(uint)uVar5) {
    Error("Cannot load corrupted map.\n");
    uVar4 = *(ushort *)(param_2 + 4);
  }
  puVar14 = (undefined4 *)(*(int *)(iVar7 + 0x68) + (uint)uVar5 * 8);
  puVar1 = puVar14 + (uint)uVar4 * 2;
  if (puVar14 < puVar1) {
    local_48 = (undefined4 *)0x0;
    bVar11 = false;
    bVar12 = false;
    local_44 = -99999.0;
    fVar18 = 1.0;
    do {
      while( true ) {
        pfVar8 = (float *)*puVar14;
        fVar16 = *pfVar8;
        fVar2 = pfVar8[1];
        fVar3 = pfVar8[2];
        fVar17 = ABS(*(float *)(param_1 + 0x30) * fVar16) + ABS(*(float *)(param_1 + 0x34) * fVar2)
                 + pfVar8[3] + ABS(*(float *)(param_1 + 0x38) * fVar3);
        fVar15 = (*(float *)(param_1 + 4) * fVar2 + *(float *)param_1 * fVar16 +
                 *(float *)(param_1 + 8) * fVar3) - fVar17;
        fVar17 = (fVar2 * *(float *)(param_1 + 0x10) + fVar16 * *(float *)(param_1 + 0xc) +
                 fVar3 * *(float *)(param_1 + 0x14)) - fVar17;
        if (0.0 < fVar15) break;
        if (0.0 < fVar17) {
          bVar12 = true;
          goto LAB_0011fb9a;
        }
LAB_0011fad5:
        puVar14 = puVar14 + 2;
        if (puVar1 <= puVar14) goto LAB_0011fbd6;
      }
      if (0.0 < fVar17) {
        return;
      }
      bVar11 = true;
LAB_0011fb9a:
      if (fVar17 < fVar15) {
        fVar16 = fVar15 - 0.03125;
        if (fVar16 <= 0.0) {
          fVar16 = 0.0;
        }
        fVar16 = fVar16 / (fVar15 - fVar17);
        if (local_44 < fVar16) {
          local_48 = puVar14;
          local_44 = fVar16;
        }
        goto LAB_0011fad5;
      }
      puVar14 = puVar14 + 2;
      fVar16 = (fVar15 + 0.03125) / (fVar15 - fVar17);
      if (fVar16 <= fVar18) {
        fVar18 = fVar16;
      }
    } while (puVar14 < puVar1);
LAB_0011fbd6:
    if (bVar11) {
      if (fVar18 <= local_44) {
        return;
      }
      if (local_44 <= -99999.0) {
        return;
      }
      if (*(float *)(param_1 + 0x80) <= local_44) {
        return;
      }
      fVar18 = 0.0;
      if (0.0 <= local_44) {
        fVar18 = local_44;
      }
      *(undefined4 *)(param_1 + 0x114) = 0;
      iVar7 = *(int *)(param_1 + 0x104);
      *(float *)(param_1 + 0x80) = fVar18;
      puVar14 = (undefined4 *)*local_48;
      *(undefined4 *)(param_1 + 0x6c) = *puVar14;
      *(undefined4 *)(param_1 + 0x70) = puVar14[1];
      *(undefined4 *)(param_1 + 0x74) = puVar14[2];
      *(undefined4 *)(param_1 + 0x78) = puVar14[3];
      param_1[0x7c] = *(TraceInfo_t *)(puVar14 + 4);
      param_1[0x7d] = *(TraceInfo_t *)((int)puVar14 + 0x11);
      *(undefined2 *)(param_1 + 0x7e) = *(undefined2 *)((int)puVar14 + 0x12);
      ppuVar13 = &CCollisionBSPData::nullsurface;
      uVar4 = *(ushort *)(local_48 + 1);
      if (uVar4 != 0xffff) {
        if (*(int *)(iVar7 + 0x250) <= (int)(uint)uVar4) {
          Error("Cannot load corrupted map.\n");
        }
        ppuVar13 = (undefined **)(*(int *)(iVar7 + 0x24c) + (uint)uVar4 * 8);
      }
      puVar9 = *ppuVar13;
      *(undefined **)(param_1 + 0x94) = ppuVar13[1];
      *(undefined **)(param_1 + 0x90) = puVar9;
      *(undefined4 *)(param_1 + 0x84) = uVar6;
      return;
    }
    param_1[0x8b] = (TraceInfo_t)0x1;
    *(undefined4 *)(param_1 + 0x84) = uVar6;
    if (bVar12) {
      if (fVar18 == 1.0) {
        return;
      }
      if (fVar18 < *(float *)(param_1 + 0x8c) || fVar18 == *(float *)(param_1 + 0x8c)) {
        return;
      }
      *(float *)(param_1 + 0x8c) = fVar18;
      if (fVar18 < *(float *)(param_1 + 0x80)) {
        return;
      }
      *(undefined4 *)(param_1 + 0x80) = 0x3f800000;
      uVar6 = DAT_00340c94;
      *(undefined **)(param_1 + 0x90) = CCollisionBSPData::nullsurface;
      *(undefined4 *)(param_1 + 0x94) = uVar6;
      return;
    }
  }
  else {
    param_1[0x8b] = (TraceInfo_t)0x1;
    *(undefined4 *)(param_1 + 0x84) = uVar6;
  }
  param_1[0x8a] = (TraceInfo_t)0x1;
  *(undefined4 *)(param_1 + 0x80) = 0;
  *(undefined4 *)(param_1 + 0x8c) = 0x3f800000;
  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)