L L4D2node

CM_UnsweptBoxTrace

0x00119ce0 · 862 bytes · __regparm3

_ZL18CM_UnsweptBoxTraceP11TraceInfo_tRK5Ray_tii.isra.21

Decompiled

undefined (4 params)

/* CM_UnsweptBoxTrace(TraceInfo_t*, Ray_t const&, int, int) [clone .isra.21] */

void __regparm3 CM_UnsweptBoxTrace(TraceInfo_t *param_1,Ray_t *param_2,int param_3,int param_4)

{
  int *piVar1;
  cbrush_t *pcVar2;
  ushort uVar3;
  ushort uVar4;
  int iVar5;
  int iVar6;
  int iVar7;
  bool bVar8;
  int iVar9;
  int iVar10;
  int iVar11;
  int iVar12;
  uint uVar13;
  int iVar14;
  int local_1050;
  float local_1038;
  float local_1034;
  float local_1030;
  undefined4 local_102c;
  undefined4 local_1028;
  int *local_1024;
  undefined4 local_1020;
  int local_101c [1027];
  
  local_1024 = local_101c;
  local_102c = 0xffffffff;
  local_1028 = 0x400;
  local_1020 = *(undefined4 *)(param_1 + 0x104);
  local_1038 = *(float *)(param_2 + 0x30) + 1.0;
  local_1034 = *(float *)(param_2 + 0x34) + 1.0;
  local_1030 = *(float *)(param_2 + 0x38) + 1.0;
  iVar9 = CM_BoxLeafnums((leafnums_t *)&local_102c,(Vector *)param_2,(Vector *)&local_1038,param_3);
  bVar8 = false;
  local_1050 = 0;
  if (0 < iVar9) {
    do {
      iVar5 = local_101c[local_1050];
      iVar6 = *(int *)(param_1 + 0x104);
      if ((iVar5 < 0) || (iVar11 = iVar6, iVar14 = iVar5, *(int *)(iVar6 + 0x9c) <= iVar5)) {
        Error("Cannot load corrupted map.\n");
        iVar11 = *(int *)(param_1 + 0x104);
        iVar14 = local_101c[local_1050];
      }
      if ((*(byte *)(iVar5 * 0x10 + *(int *)(iVar6 + 0x98)) & 1) == 0) {
        bVar8 = true;
      }
      if ((iVar14 < 0) || (*(int *)(iVar11 + 0x9c) <= iVar14)) {
        Error("Cannot load corrupted map.\n");
      }
      iVar5 = *(int *)(param_1 + *(int *)(param_1 + 0x11c) * 4 + 0x120);
      iVar11 = *(int *)(iVar11 + 0x98) + iVar14 * 0x10;
      iVar6 = *(int *)(param_1 + *(int *)(param_1 + 0x11c) * 0x14 + 0x128);
      iVar14 = 0;
      if (*(short *)(iVar11 + 10) != 0) {
        do {
          iVar7 = *(int *)(param_1 + 0x104);
          iVar12 = (uint)*(ushort *)(iVar11 + 8) + iVar14;
          iVar10 = iVar7;
          if (*(int *)(iVar7 + 0xb0) <= iVar12) {
            Error("Cannot load corrupted map.\n");
            iVar10 = *(int *)(param_1 + 0x104);
          }
          uVar13 = (uint)*(ushort *)(*(int *)(iVar7 + 0xac) + iVar12 * 2);
          if (*(int *)(iVar10 + 200) <= (int)uVar13) {
            Error("Cannot load corrupted map.\n");
          }
          piVar1 = (int *)(iVar6 + uVar13 * 4);
          if (iVar5 != *piVar1) {
            pcVar2 = (cbrush_t *)(*(int *)(iVar10 + 0xc4) + uVar13 * 8);
            *piVar1 = iVar5;
            if (((*(uint *)pcVar2 & *(uint *)(param_1 + 0xfc)) != 0) &&
               (CM_TestBoxInBrush(param_1,pcVar2), *(float *)(param_1 + 0x80) == 0.0))
            goto LAB_00119f38;
          }
          iVar14 = iVar14 + 1;
        } while (iVar14 < (int)(uint)*(ushort *)(iVar11 + 10));
      }
      if ((param_1[0x8b] == (TraceInfo_t)0x0) && (uVar3 = *(ushort *)(iVar11 + 0xe), uVar3 != 0)) {
        iVar5 = *(int *)(param_1 + 0x104);
        uVar4 = *(ushort *)(iVar11 + 0xc);
        if (*(int *)(iVar5 + 0xd4) <= (int)(uint)uVar4) {
          Error("Cannot load corrupted map.\n");
          uVar3 = *(ushort *)(iVar11 + 0xe);
        }
        CM_TestInDispTree(param_1,(ushort *)(*(int *)(iVar5 + 0xd0) + (uint)uVar4 * 2),(uint)uVar3,
                          (Vector *)param_1,(Vector *)(param_1 + 0x18),(Vector *)(param_1 + 0x24),
                          *(int *)(param_1 + 0xfc),(CGameTrace *)(param_1 + 0x54));
      }
LAB_00119f38:
    } while ((param_1[0x8a] == (TraceInfo_t)0x0) &&
            (local_1050 = local_1050 + 1, local_1050 != iVar9));
    if (bVar8) {
      return;
    }
  }
  param_1[0x8b] = (TraceInfo_t)0x1;
  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)