L L4D2node

CDispCollTree::AABBTree_TreeTrisRayTest

0x000cbdf0 · 1001 bytes · __thiscall

_ZN13CDispCollTree24AABBTree_TreeTrisRayTestERK5Ray_tRK6VectoriP10CBaseTracebPP12CDispCollTri

Decompiled

undefined (7 params)

/* CDispCollTree::AABBTree_TreeTrisRayTest(Ray_t const&, Vector const&, int, CBaseTrace*, bool,
   CDispCollTri**) */

void __thiscall
CDispCollTree::AABBTree_TreeTrisRayTest
          (CDispCollTree *this,Ray_t *param_1,Vector *param_2,int param_3,CBaseTrace *param_4,
          bool param_5,CDispCollTri **param_6)

{
  short *psVar1;
  CDispCollTri *pCVar2;
  CDispCollTri *pCVar3;
  float fVar4;
  float fVar5;
  float fVar6;
  float fVar7;
  float fVar8;
  float fVar9;
  int iVar10;
  int iVar11;
  float *pfVar12;
  uint uVar13;
  int iVar14;
  int iVar15;
  longdouble lVar16;
  float fVar17;
  undefined1 auVar18 [16];
  float fVar19;
  float fVar20;
  float fVar21;
  float fVar22;
  float fVar23;
  float fVar24;
  undefined1 auVar25 [16];
  float fVar26;
  float fVar27;
  float fVar28;
  float fVar29;
  undefined1 auVar30 [16];
  undefined1 auVar31 [16];
  undefined1 auVar32 [16];
  undefined1 auVar33 [16];
  undefined1 auVar34 [16];
  undefined1 auVar35 [16];
  undefined1 auVar36 [16];
  undefined1 auVar37 [16];
  float fVar38;
  float fVar39;
  float fVar40;
  float fVar41;
  int local_58c [351];
  
  iVar11 = 0;
  fVar4 = *(float *)param_2;
  fVar5 = *(float *)(param_2 + 4);
  fVar6 = *(float *)(param_2 + 8);
  fVar7 = *(float *)param_1;
  fVar8 = *(float *)(param_1 + 4);
  fVar9 = *(float *)(param_1 + 8);
  fVar19 = *(float *)(param_1 + 0x30) + 0.03125;
  fVar20 = *(float *)(param_1 + 0x34) + 0.03125;
  fVar17 = *(float *)(param_1 + 0x38) + 0.03125;
  iVar15 = 0;
  iVar14 = *(int *)(this + 0x98);
  local_58c[0] = param_3;
  while( true ) {
    if (iVar14 <= param_3) {
      if (iVar11 < iVar15) {
        return;
      }
      while( true ) {
        psVar1 = (short *)(*(int *)(this + 0xa0) + (param_3 - iVar14) * 4);
        pCVar2 = (CDispCollTri *)(*(int *)(this + 0x80) + psVar1[1] * 0x18);
        pCVar3 = (CDispCollTri *)(*(int *)(this + 0x80) + *psVar1 * 0x18);
        iVar14 = *(int *)(this + 0x70);
        lVar16 = (longdouble)
                 IntersectRayWithTriangle
                           (param_1,(Vector *)(iVar14 + (*(ushort *)pCVar3 & 0x1ff) * 0xc),
                            (Vector *)(iVar14 + (*(ushort *)(pCVar3 + 4) & 0x1ff) * 0xc),
                            (Vector *)(iVar14 + (*(ushort *)(pCVar3 + 2) & 0x1ff) * 0xc),param_5);
        fVar4 = (float)lVar16;
        if ((0.0 <= fVar4) && (fVar4 < *(float *)(param_4 + 0x2c))) {
          *(float *)(param_4 + 0x2c) = fVar4;
          *param_6 = pCVar3;
        }
        iVar14 = *(int *)(this + 0x70);
        lVar16 = (longdouble)
                 IntersectRayWithTriangle
                           (param_1,(Vector *)(iVar14 + (*(ushort *)pCVar2 & 0x1ff) * 0xc),
                            (Vector *)(iVar14 + (*(ushort *)(pCVar2 + 4) & 0x1ff) * 0xc),
                            (Vector *)(iVar14 + (*(ushort *)(pCVar2 + 2) & 0x1ff) * 0xc),param_5);
        fVar4 = (float)lVar16;
        if ((0.0 <= fVar4) && (fVar4 < *(float *)(param_4 + 0x2c))) {
          *(float *)(param_4 + 0x2c) = fVar4;
          *param_6 = pCVar2;
        }
        iVar15 = iVar15 + 1;
        if (iVar11 < iVar15) break;
        param_3 = local_58c[iVar15];
        iVar14 = *(int *)(this + 0x98);
      }
      return;
    }
    iVar15 = iVar15 + 1;
    pfVar12 = (float *)(param_3 * 0x60 + *(int *)(this + 0x90));
    fVar26 = ((pfVar12[4] - fVar8) - fVar20) * fVar5;
    fVar27 = ((pfVar12[5] - fVar8) - fVar20) * fVar5;
    fVar28 = ((pfVar12[6] - fVar8) - fVar20) * fVar5;
    fVar29 = ((pfVar12[7] - fVar8) - fVar20) * fVar5;
    fVar38 = ((*pfVar12 - fVar7) - fVar19) * fVar4;
    fVar39 = ((pfVar12[1] - fVar7) - fVar19) * fVar4;
    fVar40 = ((pfVar12[2] - fVar7) - fVar19) * fVar4;
    fVar41 = ((pfVar12[3] - fVar7) - fVar19) * fVar4;
    auVar33._0_4_ = ((pfVar12[0x10] - fVar8) + fVar20) * fVar5;
    auVar33._4_4_ = ((pfVar12[0x11] - fVar8) + fVar20) * fVar5;
    auVar33._8_4_ = ((pfVar12[0x12] - fVar8) + fVar20) * fVar5;
    auVar33._12_4_ = ((pfVar12[0x13] - fVar8) + fVar20) * fVar5;
    auVar37._0_4_ = ((pfVar12[0xc] - fVar7) + fVar19) * fVar4;
    auVar37._4_4_ = ((pfVar12[0xd] - fVar7) + fVar19) * fVar4;
    auVar37._8_4_ = ((pfVar12[0xe] - fVar7) + fVar19) * fVar4;
    auVar37._12_4_ = ((pfVar12[0xf] - fVar7) + fVar19) * fVar4;
    fVar21 = ((pfVar12[8] - fVar9) - fVar17) * fVar6;
    fVar22 = ((pfVar12[9] - fVar9) - fVar17) * fVar6;
    fVar23 = ((pfVar12[10] - fVar9) - fVar17) * fVar6;
    fVar24 = ((pfVar12[0xb] - fVar9) - fVar17) * fVar6;
    auVar34._4_4_ = fVar27;
    auVar34._0_4_ = fVar26;
    auVar34._8_4_ = fVar28;
    auVar34._12_4_ = fVar29;
    auVar18._0_4_ = ((pfVar12[0x14] - fVar9) + fVar17) * fVar6;
    auVar18._4_4_ = ((pfVar12[0x15] - fVar9) + fVar17) * fVar6;
    auVar18._8_4_ = ((pfVar12[0x16] - fVar9) + fVar17) * fVar6;
    auVar18._12_4_ = ((pfVar12[0x17] - fVar9) + fVar17) * fVar6;
    auVar31._4_4_ = fVar39;
    auVar31._0_4_ = fVar38;
    auVar31._8_4_ = fVar40;
    auVar31._12_4_ = fVar41;
    auVar35 = maxps(auVar34,auVar33);
    auVar32 = maxps(auVar31,auVar37);
    auVar25._4_4_ = fVar27;
    auVar25._0_4_ = fVar26;
    auVar25._8_4_ = fVar28;
    auVar25._12_4_ = fVar29;
    auVar25 = minps(auVar33,auVar25);
    auVar30._4_4_ = fVar39;
    auVar30._0_4_ = fVar38;
    auVar30._8_4_ = fVar40;
    auVar30._12_4_ = fVar41;
    auVar30 = minps(auVar37,auVar30);
    auVar36._4_4_ = fVar22;
    auVar36._0_4_ = fVar21;
    auVar36._8_4_ = fVar23;
    auVar36._12_4_ = fVar24;
    auVar37 = maxps(auVar36,auVar18);
    auVar33 = minps(auVar32,auVar35);
    auVar32._4_4_ = fVar22;
    auVar32._0_4_ = fVar21;
    auVar32._8_4_ = fVar23;
    auVar32._12_4_ = fVar24;
    auVar32 = minps(auVar18,auVar32);
    auVar25 = maxps(auVar30,auVar25);
    auVar30 = minps(auVar33,auVar37);
    auVar32 = maxps(auVar25,auVar32);
    auVar25 = minps(auVar30,Four_Ones);
    auVar32 = maxps(auVar32,Four_Zeros);
    auVar35._4_4_ = -(uint)(auVar32._4_4_ <= auVar25._4_4_);
    auVar35._0_4_ = -(uint)(auVar32._0_4_ <= auVar25._0_4_);
    auVar35._8_4_ = -(uint)(auVar32._8_4_ <= auVar25._8_4_);
    auVar35._12_4_ = -(uint)(auVar32._12_4_ <= auVar25._12_4_);
    uVar13 = movmskps(pfVar12,auVar35);
    if (uVar13 != 0) {
      iVar10 = param_3 * 4;
      if ((uVar13 & 1) != 0) {
        iVar11 = iVar11 + 1;
        local_58c[iVar11] = iVar10 + 1;
      }
      if ((uVar13 & 2) != 0) {
        iVar11 = iVar11 + 1;
        local_58c[iVar11] = iVar10 + 2;
      }
      if ((uVar13 & 4) != 0) {
        iVar11 = iVar11 + 1;
        local_58c[iVar11] = iVar10 + 3;
      }
      if ((uVar13 & 8) != 0) {
        iVar11 = iVar11 + 1;
        local_58c[iVar11] = iVar10 + 4;
      }
    }
    if (iVar11 < iVar15) break;
    param_3 = local_58c[iVar15];
  }
  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)