L L4D2node

CM_TestInDispTree

0x00124b60 · 679 bytes · __cdecl

_Z17CM_TestInDispTreeP11TraceInfo_tPKtiRK6VectorS5_S5_iP10CGameTrace

Decompiled

undefined (8 params)

/* CM_TestInDispTree(TraceInfo_t*, unsigned short const*, int, Vector const&, Vector const&, Vector
   const&, int, CGameTrace*) */

void CM_TestInDispTree(TraceInfo_t *param_1,ushort *param_2,int param_3,Vector *param_4,
                      Vector *param_5,Vector *param_6,int param_7,CGameTrace *param_8)

{
  int *piVar1;
  ushort uVar2;
  int iVar3;
  int iVar4;
  char cVar5;
  Vector *pVVar6;
  ushort *puVar7;
  CDispCollTree *this;
  float fVar8;
  float fVar9;
  float fVar10;
  float fVar11;
  float fVar12;
  float *local_50;
  Vector *local_4c;
  float local_34;
  float local_30;
  float local_2c;
  float local_28;
  float local_24;
  float local_20;
  
  fVar8 = 0.0;
  if (*(float *)param_5 == 0.0) {
    fVar12 = *(float *)(param_5 + 8);
    fVar9 = *(float *)param_6;
    if (*(float *)(param_5 + 4) == 0.0) {
      if (fVar12 != 0.0) goto LAB_00124bb6;
      fVar10 = *(float *)(param_6 + 4);
      fVar11 = *(float *)(param_6 + 8);
      if (fVar9 == 0.0) {
        if (fVar10 == 0.0) {
          if (fVar11 == 0.0) goto LAB_00124d03;
          fVar10 = 0.0;
          fVar9 = 0.0;
          fVar12 = 0.0;
        }
        else {
          fVar9 = 0.0;
          fVar12 = 0.0;
        }
      }
      else {
        fVar12 = 0.0;
      }
    }
    else {
      fVar10 = *(float *)(param_6 + 4);
      fVar11 = *(float *)(param_6 + 8);
      fVar8 = *(float *)(param_5 + 4);
    }
  }
  else {
    fVar8 = *(float *)(param_5 + 4);
    fVar12 = *(float *)(param_5 + 8);
    fVar9 = *(float *)param_6;
LAB_00124bb6:
    fVar10 = *(float *)(param_6 + 4);
    fVar11 = *(float *)(param_6 + 8);
  }
  local_30 = fVar8 + *(float *)(param_4 + 4);
  local_34 = *(float *)param_5 + *(float *)param_4;
  local_24 = *(float *)(param_4 + 4) + fVar10;
  local_28 = *(float *)param_4 + fVar9;
  local_2c = fVar12 + *(float *)(param_4 + 8);
  local_20 = *(float *)(param_4 + 8) + fVar11;
  iVar3 = *(int *)(param_1 + *(int *)(param_1 + 0x11c) * 0x14 + 0x150);
  iVar4 = *(int *)(param_1 + *(int *)(param_1 + 0x11c) * 4 + 0x120);
  if (0 < param_3) {
    puVar7 = param_2;
    do {
      uVar2 = *puVar7;
      pVVar6 = (Vector *)((uint)uVar2 * 0x30 + g_pDispBounds);
      if (((*(uint *)(pVVar6 + 0x24) & param_7) != 0) &&
         (piVar1 = (int *)(iVar3 + *(int *)(pVVar6 + 0x20) * 4), iVar4 != *piVar1)) {
        *piVar1 = iVar4;
        cVar5 = IsBoxIntersectingBox((Vector *)&local_34,(Vector *)&local_28,pVVar6,pVVar6 + 0x10);
        if (cVar5 != '\0') {
          this = (CDispCollTree *)((uint)uVar2 * 0xf4 + g_pDispCollTrees);
          cVar5 = CDispCollTree::AABBTree_IntersectAABB
                            (this,(Vector *)&local_34,(Vector *)&local_28);
          if (cVar5 != '\0') {
            param_8[0x37] = (CGameTrace)0x1;
            param_8[0x36] = (CGameTrace)0x1;
            *(undefined4 *)(param_8 + 0x2c) = 0;
            *(undefined4 *)(param_8 + 0x38) = 0;
            *(undefined4 *)(param_8 + 0x30) = *(undefined4 *)(this + 0x20);
            return;
          }
        }
      }
      puVar7 = puVar7 + 1;
    } while (puVar7 != param_2 + param_3);
  }
LAB_00124d03:
  local_4c = (Vector *)&local_28;
  local_50 = &local_34;
  CM_PreStab(param_1,param_2,param_3,local_4c,param_7,(int *)local_50);
  CM_Stab(param_1,param_4,local_4c,(int)local_34);
  if ((*(int *)(param_1 + 0x114) != 0) && (param_1[0x8b] != (TraceInfo_t)0x0)) {
    param_1[0x8a] = (TraceInfo_t)0x1;
    *(undefined4 *)(param_1 + 0x80) = 0;
    *(undefined4 *)(param_1 + 0x8c) = 0;
    return;
  }
  param_1[0x8b] = (TraceInfo_t)0x0;
  param_1[0x8a] = (TraceInfo_t)0x0;
  *(undefined4 *)(param_1 + 0x84) = 0;
  *(undefined4 *)(param_1 + 0x80) = 0x3f800000;
  *(undefined4 *)(param_1 + 0x8c) = 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)