L L4D2node

CM_GetTraceDataForBSP

0x0011ec60 · 513 bytes · __cdecl

_Z21CM_GetTraceDataForBSPRK6VectorS1_R14CTraceListData

Decompiled

undefined (3 params)

/* CM_GetTraceDataForBSP(Vector const&, Vector const&, CTraceListData&) */

void CM_GetTraceDataForBSP(Vector *param_1,Vector *param_2,CTraceListData *param_3)

{
  undefined4 *puVar1;
  float fVar2;
  float fVar3;
  float fVar4;
  float *pfVar5;
  TraceInfo_t *pTVar6;
  uint uVar7;
  uint uVar8;
  uint uVar9;
  float fVar10;
  float fVar11;
  float fVar12;
  float fVar13;
  float fVar14;
  TraceInfo_t *local_1020;
  uint auStack_101c [1027];
  
  uVar8 = 0;
  fVar2 = *(float *)param_2;
  fVar3 = *(float *)(param_2 + 4);
  fVar4 = *(float *)(param_2 + 8);
  fVar14 = (*(float *)param_1 + fVar2) * 0.5;
  fVar13 = (*(float *)(param_1 + 4) + fVar3) * 0.5;
  fVar12 = (*(float *)(param_1 + 8) + fVar4) * 0.5;
  local_1020 = (TraceInfo_t *)BeginTrace();
  uVar7 = 0;
  uVar9 = 0;
  pTVar6 = local_1020;
  while( true ) {
    while (-1 < (int)uVar7) {
      puVar1 = (undefined4 *)(g_BSPData + uVar7 * 0xc);
      pfVar5 = (float *)*puVar1;
      fVar10 = ((fVar14 * *pfVar5 + fVar13 * pfVar5[1]) - pfVar5[3]) + fVar12 * pfVar5[2];
      fVar11 = ABS(pfVar5[1] * (fVar3 - fVar13)) + ABS(*pfVar5 * (fVar2 - fVar14)) +
               ABS(pfVar5[2] * (fVar4 - fVar12));
      if (fVar10 < fVar11) {
        if (-fVar11 <= fVar10) {
          auStack_101c[uVar9] = puVar1[1];
          uVar9 = uVar9 + 1 & 0x3ff;
        }
        uVar7 = puVar1[2];
      }
      else {
        uVar7 = puVar1[1];
      }
    }
    CM_GetTraceDataForLeaf(pTVar6,~uVar7,param_3);
    if (uVar8 == uVar9) break;
    uVar7 = auStack_101c[uVar8];
    uVar8 = uVar8 + 1 & 0x3ff;
    pTVar6 = local_1020;
  }
  EndTrace(&local_1020);
  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)