L L4D2node

CM_BoxTraceAgainstLeafList

0x0011cdf0 · 4020 bytes · __cdecl

_Z26CM_BoxTraceAgainstLeafListRK5Ray_tRK14CTraceListDataiR10CGameTrace

Decompiled

undefined (4 params)

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* CM_BoxTraceAgainstLeafList(Ray_t const&, CTraceListData const&, int, CGameTrace&) */

void CM_BoxTraceAgainstLeafList
               (Ray_t *param_1,CTraceListData *param_2,int param_3,CGameTrace *param_4)

{
  cbrush_t *pcVar1;
  ushort *puVar2;
  ushort uVar3;
  undefined4 uVar4;
  CCollisionBSPData *pCVar5;
  char cVar6;
  short sVar7;
  uint uVar8;
  int iVar9;
  int iVar10;
  Vector *pVVar11;
  CCollisionBSPData *pCVar12;
  float *pfVar13;
  int iVar14;
  int iVar15;
  ushort *puVar16;
  TraceInfo_t *pTVar17;
  float fVar18;
  float fVar19;
  float fVar20;
  float fVar21;
  TraceInfo_t *local_78;
  ushort *local_70;
  TraceInfo_t *local_60;
  undefined4 local_5c;
  undefined4 local_58;
  undefined4 local_54;
  undefined4 local_50;
  undefined4 local_4c;
  undefined4 local_48;
  float local_44;
  undefined4 local_40;
  undefined4 local_3c;
  float local_38;
  float local_34;
  float local_30;
  float local_2c;
  float local_28;
  float local_24;
  float local_20;
  
  local_5c = 0;
  local_58 = 0;
  if (_exit == 0.0) {
    local_44 = 0.0;
  }
  else {
    (**(code **)((int)_exit + 0x50))
              (_exit,&local_5c,0,0,0,0,"/data/src/engine/./cmodel.cpp",0x866,
               &CM_BoxTraceAgainstLeafList(Ray_t_const&,CTraceListData_const&,int,CGameTrace&)::
                tm_fmt,"(%s)%s","Unaccounted","CM_BoxTraceAgainstLeafList");
    local_44 = _exit;
  }
  iVar14 = _DAT_0040b9d4;
  local_4c = local_5c;
  local_48 = local_58;
                    /* try { // try from 0011d0d6 to 0011d124 has its CatchHandler @ 0011de5b */
  if (((_DAT_0040b028 != 0) || (DAT_0040b02c == '\0')) &&
     (iVar9 = ThreadGetCurrentId(), iVar14 == iVar9)) {
    if ((char *)*_DAT_0040b030 != "CM_BoxTraceAgainstLeafList") {
      _DAT_0040b030 =
           (int *)CVProfNode::GetSubNode((char *)_DAT_0040b030,0x2aab49,&DAT_00000001,0x2a054b);
    }
    CVProfNode::EnterScope();
    DAT_0040b02c = '\0';
  }
                    /* try { // try from 0011cea3 to 0011d0ca has its CatchHandler @ 0011de57 */
  local_60 = (TraceInfo_t *)BeginTrace();
  CM_ClearTrace((CGameTrace *)(local_60 + 0x54));
  pTVar17 = local_60;
  *(undefined4 *)(local_60 + 0x114) = 0;
  *(undefined4 *)(local_60 + 0x108) = 0;
  *(undefined4 *)(local_60 + 0x10c) = 0;
  *(undefined4 *)(local_60 + 0x110) = 0;
  *(int *)(local_60 + 0xfc) = param_3;
  *(undefined4 *)local_60 = *(undefined4 *)param_1;
  *(undefined4 *)(local_60 + 4) = *(undefined4 *)(param_1 + 4);
  *(undefined4 *)(local_60 + 8) = *(undefined4 *)(param_1 + 8);
  *(float *)(local_60 + 0xc) = *(float *)(param_1 + 0x10) + *(float *)param_1;
  *(float *)(local_60 + 0x10) = *(float *)(param_1 + 0x14) + *(float *)(param_1 + 4);
  *(float *)(local_60 + 0x14) = *(float *)(param_1 + 0x18) + *(float *)(param_1 + 8);
  *(uint *)(local_60 + 0x18) = *(uint *)(param_1 + 0x30) ^ 0x80000000;
  *(uint *)(local_60 + 0x1c) = *(uint *)(param_1 + 0x34) ^ 0x80000000;
  *(uint *)(local_60 + 0x20) = *(uint *)(param_1 + 0x38) ^ 0x80000000;
  *(undefined4 *)(local_60 + 0x24) = *(undefined4 *)(param_1 + 0x30);
  *(undefined4 *)(local_60 + 0x28) = *(undefined4 *)(param_1 + 0x34);
  *(undefined4 *)(local_60 + 0x2c) = *(undefined4 *)(param_1 + 0x38);
  *(undefined4 *)(local_60 + 0x30) = *(undefined4 *)(param_1 + 0x30);
  *(undefined4 *)(local_60 + 0x34) = *(undefined4 *)(param_1 + 0x34);
  *(undefined4 *)(local_60 + 0x38) = *(undefined4 *)(param_1 + 0x38);
  *(undefined4 *)(local_60 + 0x3c) = *(undefined4 *)(param_1 + 0x10);
  *(undefined4 *)(local_60 + 0x40) = *(undefined4 *)(param_1 + 0x14);
  *(undefined4 *)(local_60 + 0x44) = *(undefined4 *)(param_1 + 0x18);
  if (*(float *)(param_1 + 0x10) == 0.0) {
    local_28 = 3.4028235e+38;
  }
  else {
    local_28 = 1.0 / *(float *)(param_1 + 0x10);
  }
  if (*(float *)(param_1 + 0x14) == 0.0) {
    local_24 = 3.4028235e+38;
  }
  else {
    local_24 = 1.0 / *(float *)(param_1 + 0x14);
  }
  if (*(float *)(param_1 + 0x18) == 0.0) {
    local_20 = 3.4028235e+38;
  }
  else {
    local_20 = 1.0 / *(float *)(param_1 + 0x18);
  }
  *(float *)(local_60 + 0x48) = local_28;
  *(float *)(local_60 + 0x4c) = local_24;
  *(float *)(local_60 + 0x50) = local_20;
  *(Ray_t *)(local_60 + 0x100) = param_1[0x44];
  *(Ray_t *)(local_60 + 0x101) = param_1[0x45];
  if (param_1[0x45] == (Ray_t)0x0) {
    if (0 < *(int *)(param_2 + 0x98)) {
      iVar14 = 0;
      do {
        iVar9 = *(int *)(pTVar17 + 0x104);
        uVar8 = (uint)*(ushort *)(*(int *)(param_2 + 8) + iVar14 * 2);
        if (*(int *)(iVar9 + 200) <= (int)uVar8) {
          Error("Cannot load corrupted map.\n");
          pTVar17 = local_60;
        }
        pcVar1 = (cbrush_t *)(*(int *)(iVar9 + 0xc4) + uVar8 * 8);
      } while ((((*(uint *)pcVar1 & *(uint *)(pTVar17 + 0xfc)) == 0) ||
               (CM_TestBoxInBrush(pTVar17,pcVar1), pTVar17 = local_60,
               local_60[0x8a] == (TraceInfo_t)0x0
                    /* try { // try from 0011d13a to 0011d39a has its CatchHandler @ 0011de57 */))
              && (iVar14 = iVar14 + 1, iVar14 < *(int *)(param_2 + 0x98)));
    }
    if ((pTVar17[0x8b] == (TraceInfo_t)0x0) && (*(int *)(param_2 + 0xf0) != 0)) {
      CM_TestInDispTree(pTVar17,*(ushort **)(param_2 + 0xa0),*(int *)(param_2 + 0xf0),
                        (Vector *)pTVar17,(Vector *)(pTVar17 + 0x18),(Vector *)(pTVar17 + 0x24),
                        *(int *)(pTVar17 + 0xfc),(CGameTrace *)(pTVar17 + 0x54));
      pTVar17 = local_60;
    }
    if (param_2[0x544] != (CTraceListData)0x0) {
      fVar21 = *(float *)(pTVar17 + 0x80);
      goto LAB_0011d1bc;
    }
    pTVar17[0x8b] = (TraceInfo_t)0x1;
    fVar21 = 0.0;
    pTVar17[0x8a] = (TraceInfo_t)0x1;
    *(undefined4 *)(pTVar17 + 0x80) = 0;
    *(undefined4 *)(pTVar17 + 0x8c) = 0x3f800000;
    fVar20 = *(float *)(param_1 + 0x20) + *(float *)param_1;
    fVar19 = *(float *)(param_1 + 0x24) + *(float *)(param_1 + 4);
    fVar18 = *(float *)(param_1 + 0x28) + *(float *)(param_1 + 8);
  }
  else {
    local_70 = *(ushort **)(param_2 + 8);
    iVar14 = *(int *)(local_60 + 0x104);
    iVar9 = *(int *)(param_2 + 0x98);
    if (param_1[0x44] == (Ray_t)0x0) {
      if (0 < iVar9) {
        puVar16 = local_70 + iVar9;
        do {
          uVar3 = *local_70;
          if (*(int *)(iVar14 + 200) <= (int)(uint)uVar3) {
                    /* try { // try from 0011d7a0 to 0011da01 has its CatchHandler @ 0011de57 */
            Error("Cannot load corrupted map.\n");
          }
          pcVar1 = (cbrush_t *)(*(int *)(iVar14 + 0xc4) + (uint)uVar3 * 8);
          uVar8 = *(uint *)(pTVar17 + 0xfc) & *(uint *)pcVar1;
          if (uVar8 != 0) {
            if ((uVar8 == 0x80) && ((*(uint *)(pTVar17 + 0xfc) & 0x2000) != 0)) {
              sVar7 = *(short *)(pcVar1 + 4);
              if (sVar7 == -1) {
                pCVar5 = *(CCollisionBSPData **)(pTVar17 + 0x104);
                uVar3 = *(ushort *)(pcVar1 + 6);
                pCVar12 = pCVar5;
                if (*(int *)(pCVar5 + 0x78) <= (int)(uint)uVar3) {
                  Error("Cannot load corrupted map.\n");
                  pCVar12 = *(CCollisionBSPData **)(pTVar17 + 0x104);
                }
                iVar15 = 0;
                iVar9 = *(int *)(pCVar5 + 0x74);
                while (iVar10 = CCollisionBSPData::GetSurfaceAtIndex
                                          (pCVar12,*(ushort *)
                                                    ((uint)uVar3 * 0x30 + iVar9 + 0x20 + iVar15 * 2)
                                          ), (*(byte *)(iVar10 + 6) & 0x80) == 0) {
                  iVar15 = iVar15 + 1;
                  if (iVar15 == 6) goto LAB_0011d850;
                  pCVar12 = *(CCollisionBSPData **)(pTVar17 + 0x104);
                }
                goto LAB_0011d86c;
              }
              uVar3 = *(ushort *)(pcVar1 + 6);
              iVar9 = *(int *)(pTVar17 + 0x104);
              if (*(int *)(iVar9 + 0x6c) <= (int)(uint)uVar3) {
                Error("Cannot load corrupted map.\n");
                sVar7 = *(short *)(pcVar1 + 4);
              }
              iVar9 = *(int *)(iVar9 + 0x68);
              if (sVar7 != 0) {
                iVar15 = 0;
                do {
                  iVar10 = CCollisionBSPData::GetSurfaceAtIndex
                                     (*(CCollisionBSPData **)(pTVar17 + 0x104),
                                      *(ushort *)(iVar9 + (uint)uVar3 * 8 + 4 + iVar15 * 8));
                  if ((*(byte *)(iVar10 + 6) & 0x80) != 0) goto LAB_0011d86c;
                  iVar15 = iVar15 + 1;
                } while (iVar15 < (int)(uint)*(ushort *)(pcVar1 + 4));
              }
            }
LAB_0011d850:
            CM_ClipBoxToBrush<false>(pTVar17,pcVar1);
            if (*(float *)(pTVar17 + 0x80) == 0.0) break;
          }
LAB_0011d86c:
          local_70 = local_70 + 1;
        } while (local_70 != puVar16);
      }
    }
    else if (0 < iVar9) {
      puVar16 = local_70 + iVar9;
      do {
        uVar3 = *local_70;
        if (*(int *)(iVar14 + 200) <= (int)(uint)uVar3) {
                    /* try { // try from 0011d458 to 0011d5e5 has its CatchHandler @ 0011de57 */
          Error("Cannot load corrupted map.\n");
        }
        pcVar1 = (cbrush_t *)(*(int *)(iVar14 + 0xc4) + (uint)uVar3 * 8);
        uVar8 = *(uint *)(pTVar17 + 0xfc) & *(uint *)pcVar1;
        if (uVar8 != 0) {
          if ((uVar8 == 0x80) && ((*(uint *)(pTVar17 + 0xfc) & 0x2000) != 0)) {
            sVar7 = *(short *)(pcVar1 + 4);
            if (sVar7 == -1) {
              pCVar5 = *(CCollisionBSPData **)(pTVar17 + 0x104);
              uVar3 = *(ushort *)(pcVar1 + 6);
              pCVar12 = pCVar5;
              if (*(int *)(pCVar5 + 0x78) <= (int)(uint)uVar3) {
                Error("Cannot load corrupted map.\n");
                pCVar12 = *(CCollisionBSPData **)(pTVar17 + 0x104);
              }
              iVar15 = 0;
              iVar9 = *(int *)(pCVar5 + 0x74);
              while (iVar10 = CCollisionBSPData::GetSurfaceAtIndex
                                        (pCVar12,*(ushort *)
                                                  ((uint)uVar3 * 0x30 + iVar9 + 0x20 + iVar15 * 2)),
                    (*(byte *)(iVar10 + 6) & 0x80) == 0) {
                iVar15 = iVar15 + 1;
                if (iVar15 == 6) goto LAB_0011d500;
                pCVar12 = *(CCollisionBSPData **)(pTVar17 + 0x104);
              }
              goto LAB_0011d518;
            }
            uVar3 = *(ushort *)(pcVar1 + 6);
            iVar9 = *(int *)(pTVar17 + 0x104);
            if (*(int *)(iVar9 + 0x6c) <= (int)(uint)uVar3) {
              Error("Cannot load corrupted map.\n");
              sVar7 = *(short *)(pcVar1 + 4);
            }
            iVar9 = *(int *)(iVar9 + 0x68);
            if (sVar7 != 0) {
              iVar15 = 0;
              do {
                iVar10 = CCollisionBSPData::GetSurfaceAtIndex
                                   (*(CCollisionBSPData **)(pTVar17 + 0x104),
                                    *(ushort *)(iVar9 + (uint)uVar3 * 8 + 4 + iVar15 * 8));
                if ((*(byte *)(iVar10 + 6) & 0x80) != 0) goto LAB_0011d518;
                iVar15 = iVar15 + 1;
              } while (iVar15 < (int)(uint)*(ushort *)(pcVar1 + 4));
            }
          }
LAB_0011d500:
          CM_ClipBoxToBrush<true>(pTVar17,pcVar1);
          if (*(float *)(pTVar17 + 0x80) == 0.0) break;
        }
LAB_0011d518:
        local_70 = local_70 + 1;
      } while (local_70 != puVar16);
    }
    pTVar17 = local_60;
    fVar21 = *(float *)(local_60 + 0x80);
    if ((0.0 < fVar21) && (local_60[0x8b] == (TraceInfo_t)0x0)) {
      iVar14 = *(int *)(param_2 + 0xf0);
      puVar16 = *(ushort **)(param_2 + 0xa0);
      if (param_1[0x44] == (Ray_t)0x0) {
        local_54 = 0;
        local_50 = 0;
        if (_exit == 0.0) {
          local_38 = 0.0;
        }
        else {
                    /* try { // try from 0011db94 to 0011db96 has its CatchHandler @ 0011de57 */
          (**(code **)((int)_exit + 0x50))
                    (_exit,&local_54,0,0,0,0,"/data/src/engine/./cmodel.cpp",0x562,
                     &CM_TraceToDispList<false,false>(TraceInfo_t*,unsigned_short_const*,int,float,float)
                      ::tm_fmt,"(%s)%s","Unaccounted","CM_TraceToDispList");
          local_38 = _exit;
        }
        iVar9 = _DAT_0040b9d4;
        local_40 = local_54;
        local_3c = local_50;
                    /* try { // try from 0011dd49 to 0011dd97 has its CatchHandler @ 0011ddfc */
        if (((_DAT_0040b028 != 0) || (DAT_0040b02c == '\0')) &&
           (iVar15 = ThreadGetCurrentId(), iVar9 == iVar15)) {
          if ((char *)*_DAT_0040b030 != "CM_TraceToDispList") {
            _DAT_0040b030 =
                 (int *)CVProfNode::GetSubNode
                                  ((char *)_DAT_0040b030,0x2aab36,&DAT_00000001,0x2a054b);
          }
          CVProfNode::EnterScope();
          DAT_0040b02c = '\0';
        }
        puVar2 = puVar16 + iVar14;
        if (0 < iVar14) {
          do {
            local_78 = pTVar17 + 0x3c;
            uVar3 = *puVar16;
            pfVar13 = (float *)((uint)uVar3 * 0x30 + g_pDispBounds);
            if ((*(uint *)(pTVar17 + 0xfc) & (uint)pfVar13[9]) != 0) {
              local_28 = pfVar13[4] + *(float *)(pTVar17 + 0x30);
              local_24 = pfVar13[5] + *(float *)(pTVar17 + 0x34);
              local_20 = pfVar13[6] + *(float *)(pTVar17 + 0x38);
              local_34 = *pfVar13 - *(float *)(pTVar17 + 0x30);
              local_30 = pfVar13[1] - *(float *)(pTVar17 + 0x34);
              local_2c = pfVar13[2] - *(float *)(pTVar17 + 0x38);
                    /* try { // try from 0011dc9f to 0011dceb has its CatchHandler @ 0011de28 */
              cVar6 = IsBoxIntersectingRay
                                ((Vector *)&local_34,(Vector *)pfVar13[9],(Vector *)&local_34,
                                 (Vector *)&local_28,(Vector *)pTVar17,(float)local_78);
              if ((cVar6 != '\0') &&
                 (CM_TraceToDispTree<false>
                            (pTVar17,(CDispCollTree *)((uint)uVar3 * 0xf4 + g_pDispCollTrees),0.0,
                             1.0), *(float *)(pTVar17 + 0x80) == 0.0)) break;
            }
            puVar16 = puVar16 + 1;
          } while (puVar16 != puVar2);
        }
        CM_PostTraceToDispTree(pTVar17);
        iVar14 = _DAT_0040b9d4;
        if (((DAT_0040b02c == '\0') || (_DAT_0040b028 != 0)) &&
           (iVar9 = ThreadGetCurrentId(), iVar14 == iVar9)) {
          cVar6 = CVProfNode::ExitScope();
          if (cVar6 != '\0') {
            _DAT_0040b030 = (int *)_DAT_0040b030[0x19];
          }
          DAT_0040b02c = _DAT_0040b030 == (int *)0x40b034;
        }
        if (local_38 != 0.0) {
          (**(code **)((int)local_38 + 0x54))(local_38,local_40,local_3c,0,0,0);
        }
      }
      else {
        local_34 = 0.0;
        local_30 = 0.0;
        if (_exit == 0.0) {
          local_20 = 0.0;
        }
        else {
          (**(code **)((int)_exit + 0x50))
                    (_exit,&local_34,0,0,0,0,"/data/src/engine/./cmodel.cpp",0x562,
                     &CM_TraceToDispList<true,false>(TraceInfo_t*,unsigned_short_const*,int,float,float)
                      ::tm_fmt,"(%s)%s","Unaccounted","CM_TraceToDispList");
          local_20 = _exit;
        }
        iVar9 = _DAT_0040b9d4;
        local_28 = local_34;
        local_24 = local_30;
                    /* try { // try from 0011da4e to 0011da9c has its CatchHandler @ 0011de38 */
        if (((_DAT_0040b028 != 0) || (DAT_0040b02c == '\0')) &&
           (iVar15 = ThreadGetCurrentId(), iVar9 == iVar15)) {
          if ((char *)*_DAT_0040b030 != "CM_TraceToDispList") {
            _DAT_0040b030 =
                 (int *)CVProfNode::GetSubNode
                                  ((char *)_DAT_0040b030,0x2aab36,&DAT_00000001,0x2a054b);
          }
          CVProfNode::EnterScope();
          DAT_0040b02c = '\0';
        }
        puVar2 = puVar16 + iVar14;
        if (0 < iVar14) {
          do {
            uVar3 = *puVar16;
            pVVar11 = (Vector *)((uint)uVar3 * 0x30 + g_pDispBounds);
                    /* try { // try from 0011d67e to 0011d6c6 has its CatchHandler @ 0011de47 */
            if ((((*(uint *)(pTVar17 + 0xfc) & *(uint *)(pVVar11 + 0x24)) != 0) &&
                (cVar6 = IsBoxIntersectingRay
                                   (pVVar11,pVVar11 + 0x10,pVVar11,pVVar11 + 0x10,(Vector *)pTVar17,
                                    (float)(pTVar17 + 0x3c)), cVar6 != '\0')) &&
               (CM_TraceToDispTree<true>
                          (pTVar17,(CDispCollTree *)((uint)uVar3 * 0xf4 + g_pDispCollTrees),0.0,1.0)
               , *(float *)(pTVar17 + 0x80) == 0.0)) break;
            puVar16 = puVar16 + 1;
          } while (puVar16 != puVar2);
        }
        CM_PostTraceToDispTree(pTVar17);
        iVar14 = _DAT_0040b9d4;
        if (((DAT_0040b02c == '\0') || (_DAT_0040b028 != 0)) &&
           (iVar9 = ThreadGetCurrentId(), iVar14 == iVar9)) {
          cVar6 = CVProfNode::ExitScope();
          if (cVar6 != '\0') {
            _DAT_0040b030 = (int *)_DAT_0040b030[0x19];
          }
          DAT_0040b02c = _DAT_0040b030 == (int *)0x40b034;
        }
        if (local_20 != 0.0) {
          (**(code **)((int)local_20 + 0x54))(local_20,local_28,local_24,0,0,0);
        }
      }
      fVar21 = *(float *)(local_60 + 0x80);
      pTVar17 = local_60;
    }
LAB_0011d1bc:
    fVar20 = *(float *)(param_1 + 0x20) + *(float *)param_1;
    fVar19 = *(float *)(param_1 + 0x24) + *(float *)(param_1 + 4);
    fVar18 = *(float *)(param_1 + 0x28) + *(float *)(param_1 + 8);
    if (fVar21 == 1.0) {
      *(float *)(pTVar17 + 0x60) = *(float *)(param_1 + 0x10) + fVar20;
      *(float *)(pTVar17 + 100) = *(float *)(param_1 + 0x14) + fVar19;
      *(float *)(pTVar17 + 0x68) = *(float *)(param_1 + 0x18) + fVar18;
      fVar21 = *(float *)(pTVar17 + 0x8c);
      goto joined_r0x0011d910;
    }
  }
  *(float *)(pTVar17 + 0x60) = *(float *)(param_1 + 0x10) * fVar21 + fVar20;
  *(float *)(pTVar17 + 100) = *(float *)(param_1 + 0x14) * fVar21 + fVar19;
  *(float *)(pTVar17 + 0x68) = fVar21 * *(float *)(param_1 + 0x18) + fVar18;
  fVar21 = *(float *)(pTVar17 + 0x8c);
joined_r0x0011d910:
  if (fVar21 == 0.0) {
    *(float *)(pTVar17 + 0x54) = fVar20;
    *(float *)(pTVar17 + 0x58) = fVar19;
    *(float *)(pTVar17 + 0x5c) = fVar18;
  }
  else {
    if (fVar21 == 1.0) {
      pTVar17[0x8a] = (TraceInfo_t)0x1;
      pTVar17[0x8b] = (TraceInfo_t)0x1;
      *(undefined4 *)(pTVar17 + 0x80) = 0;
      *(float *)(pTVar17 + 0x60) = fVar20;
      *(float *)(pTVar17 + 100) = fVar19;
      *(float *)(pTVar17 + 0x68) = fVar18;
    }
    *(float *)(pTVar17 + 0x54) = *(float *)(param_1 + 0x10) * fVar21 + fVar20;
    *(float *)(pTVar17 + 0x58) = *(float *)(param_1 + 0x14) * fVar21 + fVar19;
    *(float *)(pTVar17 + 0x5c) = fVar21 * *(float *)(param_1 + 0x18) + fVar18;
  }
  *(undefined4 *)param_4 = *(undefined4 *)(pTVar17 + 0x54);
  *(undefined4 *)(param_4 + 4) = *(undefined4 *)(pTVar17 + 0x58);
  *(undefined4 *)(param_4 + 8) = *(undefined4 *)(pTVar17 + 0x5c);
  *(undefined4 *)(param_4 + 0xc) = *(undefined4 *)(pTVar17 + 0x60);
  *(undefined4 *)(param_4 + 0x10) = *(undefined4 *)(pTVar17 + 100);
  *(undefined4 *)(param_4 + 0x14) = *(undefined4 *)(pTVar17 + 0x68);
  *(undefined4 *)(param_4 + 0x18) = *(undefined4 *)(pTVar17 + 0x6c);
  *(undefined4 *)(param_4 + 0x1c) = *(undefined4 *)(pTVar17 + 0x70);
  *(undefined4 *)(param_4 + 0x20) = *(undefined4 *)(pTVar17 + 0x74);
  *(undefined4 *)(param_4 + 0x24) = *(undefined4 *)(pTVar17 + 0x78);
  *(TraceInfo_t *)(param_4 + 0x28) = pTVar17[0x7c];
  *(TraceInfo_t *)(param_4 + 0x29) = pTVar17[0x7d];
  *(undefined2 *)(param_4 + 0x2a) = *(undefined2 *)(pTVar17 + 0x7e);
  *(undefined4 *)(param_4 + 0x2c) = *(undefined4 *)(pTVar17 + 0x80);
  *(undefined4 *)(param_4 + 0x30) = *(undefined4 *)(pTVar17 + 0x84);
  *(undefined2 *)(param_4 + 0x34) = *(undefined2 *)(pTVar17 + 0x88);
  *(TraceInfo_t *)(param_4 + 0x36) = pTVar17[0x8a];
  *(TraceInfo_t *)(param_4 + 0x37) = pTVar17[0x8b];
  *(undefined4 *)(param_4 + 0x38) = *(undefined4 *)(pTVar17 + 0x8c);
  uVar4 = *(undefined4 *)(pTVar17 + 0x94);
  *(undefined4 *)(param_4 + 0x3c) = *(undefined4 *)(pTVar17 + 0x90);
  *(undefined4 *)(param_4 + 0x40) = uVar4;
  *(undefined4 *)(param_4 + 0x44) = *(undefined4 *)(pTVar17 + 0x98);
  *(undefined2 *)(param_4 + 0x48) = *(undefined2 *)(pTVar17 + 0x9c);
  *(undefined2 *)(param_4 + 0x4a) = *(undefined2 *)(pTVar17 + 0x9e);
  *(undefined4 *)(param_4 + 0x4c) = *(undefined4 *)(pTVar17 + 0xa0);
  *(undefined4 *)(param_4 + 0x50) = *(undefined4 *)(pTVar17 + 0xa4);
  EndTrace(&local_60);
  iVar14 = _DAT_0040b9d4;
  if (((DAT_0040b02c == '\0') || (_DAT_0040b028 != 0)) &&
     (iVar9 = ThreadGetCurrentId(), iVar14 == iVar9)) {
    cVar6 = CVProfNode::ExitScope();
    if (cVar6 != '\0') {
      _DAT_0040b030 = (int *)_DAT_0040b030[0x19];
    }
    DAT_0040b02c = _DAT_0040b030 == (int *)0x40b034;
  }
  if (local_44 != 0.0) {
    (**(code **)((int)local_44 + 0x54))(local_44,local_4c,local_48,0,0,0);
  }
  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)