L L4D2node

CDispInfo::SetupDecalNodeIntersect_R

0x00134450 · 1665 bytes · __thiscall

_ZN9CDispInfo25SetupDecalNodeIntersect_RERK10CVertIndexiP14CDispDecalBasePK12ShadowInfo_tiP20CDecalNodeSetupCache

Decompiled

undefined (7 params)

/* CDispInfo::SetupDecalNodeIntersect_R(CVertIndex const&, int, CDispDecalBase*, ShadowInfo_t
   const*, int, CDecalNodeSetupCache*) */

undefined4 __thiscall
CDispInfo::SetupDecalNodeIntersect_R
          (CDispInfo *this,CVertIndex *param_1,int param_2,CDispDecalBase *param_3,
          ShadowInfo_t *param_4,int param_5,CDecalNodeSetupCache *param_6)

{
  float fVar1;
  float fVar2;
  float fVar3;
  float fVar4;
  float fVar5;
  float fVar6;
  bool bVar7;
  char cVar8;
  float *pfVar9;
  int iVar10;
  short *psVar11;
  int iVar12;
  short *psVar13;
  int iVar14;
  CDecalNodeSetupCache *pCVar15;
  int iVar16;
  float fVar17;
  float fVar18;
  float fVar19;
  float fVar20;
  float fVar21;
  int local_40;
  float local_38;
  float local_34;
  float local_30;
  float local_2c;
  float local_28;
  int local_20;
  
  iVar10 = *(int *)(this + 0x1dc);
  iVar14 = *(int *)(iVar10 + 0x24);
  iVar12 = *(short *)(param_1 + 2) * iVar14 + (int)*(short *)param_1;
  if (param_5 + 1 < *(int *)(this + 0x184)) {
    bVar7 = false;
    iVar16 = param_2 + 1;
    iVar14 = 0;
    do {
      cVar8 = SetupDecalNodeIntersect_R
                        (this,(CVertIndex *)(iVar12 * 0x10 + *(int *)(iVar10 + 8) + iVar14 * 4),
                         iVar16,param_3,param_4,param_5 + 1,param_6);
      if (cVar8 != '\0') {
        bVar7 = true;
      }
      iVar14 = iVar14 + 1;
      iVar10 = *(int *)(this + 0x1dc);
      iVar16 = iVar16 + *(int *)(iVar10 + 8 + (param_5 + 0xc) * 4);
    } while (iVar14 != 4);
    if (bVar7) {
LAB_00134850:
      *(uint *)(param_3 + (param_2 >> 5) * 4) =
           *(uint *)(param_3 + (param_2 >> 5) * 4) | 1 << ((byte)param_2 & 0x1f);
      return 1;
    }
  }
  else {
    local_40 = *(int *)(param_6 + iVar12 * 4 + 0xd8c);
    if (local_40 == *(int *)(param_6 + 0x1210)) {
      pCVar15 = param_6 + iVar12 * 0xc;
    }
    else {
      pCVar15 = param_6 + iVar12 * 0xc;
      pfVar9 = (float *)(*(int *)(this + 0x34) * iVar12 + *(int *)(this + 0x88));
      if (param_4 == (ShadowInfo_t *)0x0) {
        *(float *)pCVar15 =
             (*(float *)(param_3 + 0x20) * *pfVar9 - *(float *)(*(int *)(param_3 + 0x14) + 0x2c)) +
             0.5 + *(float *)(param_3 + 0x24) * pfVar9[1] + *(float *)(param_3 + 0x28) * pfVar9[2];
        fVar21 = *(float *)(param_3 + 0x2c);
        fVar19 = *pfVar9;
        fVar1 = *(float *)(*(int *)(param_3 + 0x14) + 0x30);
        fVar2 = *(float *)(param_3 + 0x30);
        fVar17 = pfVar9[1];
        fVar18 = *(float *)(param_3 + 0x34);
        fVar20 = pfVar9[2];
        *(float *)(pCVar15 + 8) = 0.0;
        *(float *)(pCVar15 + 4) = (fVar21 * fVar19 - fVar1) + 0.5 + fVar2 * fVar17 + fVar18 * fVar20
        ;
      }
      else {
        fVar21 = *pfVar9;
        fVar19 = pfVar9[1];
        fVar1 = pfVar9[2];
        *(float *)pCVar15 =
             *(float *)param_4 * fVar21 + *(float *)(param_4 + 4) * fVar19 +
             *(float *)(param_4 + 0xc) + *(float *)(param_4 + 8) * fVar1;
        *(float *)(pCVar15 + 4) =
             *(float *)(param_4 + 0x10) * fVar21 + *(float *)(param_4 + 0x14) * fVar19 +
             *(float *)(param_4 + 0x1c) + *(float *)(param_4 + 0x18) * fVar1;
        *(float *)(pCVar15 + 8) =
             fVar21 * *(float *)(param_4 + 0x20) + fVar19 * *(float *)(param_4 + 0x24) +
             *(float *)(param_4 + 0x2c) + fVar1 * *(float *)(param_4 + 0x28);
      }
      local_40 = *(int *)(param_6 + 0x1210);
      *(int *)(param_6 + iVar12 * 4 + 0xd8c) = local_40;
      iVar10 = *(int *)(this + 0x1dc);
      iVar14 = *(int *)(iVar10 + 0x24);
    }
    local_20 = 0;
    fVar21 = *(float *)pCVar15;
    local_38 = *(float *)(pCVar15 + 8);
    local_34 = *(float *)(pCVar15 + 8);
    local_30 = *(float *)(pCVar15 + 4);
    local_2c = *(float *)(pCVar15 + 4);
    local_28 = fVar21;
    while( true ) {
      psVar13 = (short *)(*(int *)(iVar10 + 4) + iVar12 * 0x10 + local_20 * 4);
      psVar11 = (short *)(local_20 * 4 + iVar12 * 0x10 + *(int *)(iVar10 + 0xc));
      iVar16 = (int)*psVar13 + psVar13[1] * iVar14;
      iVar10 = *(int *)(param_6 + iVar16 * 4 + 0xd8c);
      if (iVar10 == local_40) {
        pCVar15 = param_6 + iVar16 * 0xc;
      }
      else {
        pCVar15 = param_6 + iVar16 * 0xc;
        pfVar9 = (float *)(iVar16 * *(int *)(this + 0x34) + *(int *)(this + 0x88));
        if (param_4 == (ShadowInfo_t *)0x0) {
          *(float *)pCVar15 =
               (*(float *)(param_3 + 0x20) * *pfVar9 + *(float *)(param_3 + 0x24) * pfVar9[1] + 0.5
               + *(float *)(param_3 + 0x28) * pfVar9[2]) -
               *(float *)(*(int *)(param_3 + 0x14) + 0x2c);
          fVar19 = *(float *)(param_3 + 0x2c);
          fVar1 = *pfVar9;
          fVar2 = *(float *)(*(int *)(param_3 + 0x14) + 0x30);
          fVar17 = *(float *)(param_3 + 0x30);
          fVar18 = pfVar9[1];
          fVar20 = *(float *)(param_3 + 0x34);
          fVar3 = pfVar9[2];
          *(float *)(pCVar15 + 8) = 0.0;
          *(float *)(pCVar15 + 4) =
               (fVar19 * fVar1 - fVar2) + 0.5 + fVar17 * fVar18 + fVar20 * fVar3;
        }
        else {
          fVar19 = *pfVar9;
          fVar1 = pfVar9[1];
          fVar2 = pfVar9[2];
          *(float *)pCVar15 =
               *(float *)param_4 * fVar19 + *(float *)(param_4 + 4) * fVar1 +
               *(float *)(param_4 + 0xc) + *(float *)(param_4 + 8) * fVar2;
          *(float *)(pCVar15 + 4) =
               *(float *)(param_4 + 0x10) * fVar19 + *(float *)(param_4 + 0x14) * fVar1 +
               *(float *)(param_4 + 0x1c) + *(float *)(param_4 + 0x18) * fVar2;
          *(float *)(pCVar15 + 8) =
               fVar19 * *(float *)(param_4 + 0x20) + fVar1 * *(float *)(param_4 + 0x24) +
               *(float *)(param_4 + 0x2c) + fVar2 * *(float *)(param_4 + 0x28);
        }
        iVar10 = *(int *)(param_6 + 0x1210);
        *(int *)(param_6 + iVar16 * 4 + 0xd8c) = iVar10;
        iVar14 = *(int *)(*(int *)(this + 0x1dc) + 0x24);
      }
      fVar19 = *(float *)pCVar15;
      fVar1 = *(float *)(pCVar15 + 4);
      fVar2 = *(float *)(pCVar15 + 8);
      iVar14 = psVar11[1] * iVar14 + (int)*psVar11;
      pCVar15 = param_6 + iVar14 * 0xc;
      if (*(int *)(param_6 + iVar14 * 4 + 0xd8c) != iVar10) {
        pfVar9 = (float *)(iVar14 * *(int *)(this + 0x34) + *(int *)(this + 0x88));
        if (param_4 == (ShadowInfo_t *)0x0) {
          *(float *)pCVar15 =
               (*(float *)(param_3 + 0x20) * *pfVar9 - *(float *)(*(int *)(param_3 + 0x14) + 0x2c))
               + 0.5 + *(float *)(param_3 + 0x24) * pfVar9[1] +
               *(float *)(param_3 + 0x28) * pfVar9[2];
          fVar17 = *(float *)(param_3 + 0x2c);
          fVar18 = *pfVar9;
          fVar20 = *(float *)(*(int *)(param_3 + 0x14) + 0x30);
          fVar3 = *(float *)(param_3 + 0x30);
          fVar4 = pfVar9[1];
          fVar5 = *(float *)(param_3 + 0x34);
          fVar6 = pfVar9[2];
          *(float *)(pCVar15 + 8) = 0.0;
          *(float *)(pCVar15 + 4) = (fVar17 * fVar18 - fVar20) + 0.5 + fVar3 * fVar4 + fVar5 * fVar6
          ;
        }
        else {
          fVar17 = *pfVar9;
          fVar18 = pfVar9[1];
          fVar20 = pfVar9[2];
          *(float *)pCVar15 =
               *(float *)param_4 * fVar17 + *(float *)(param_4 + 4) * fVar18 +
               *(float *)(param_4 + 0xc) + fVar20 * *(float *)(param_4 + 8);
          *(float *)(pCVar15 + 4) =
               *(float *)(param_4 + 0x10) * fVar17 + *(float *)(param_4 + 0x14) * fVar18 +
               *(float *)(param_4 + 0x1c) + fVar20 * *(float *)(param_4 + 0x18);
          *(float *)(pCVar15 + 8) =
               fVar17 * *(float *)(param_4 + 0x20) + fVar18 * *(float *)(param_4 + 0x24) +
               *(float *)(param_4 + 0x2c) + fVar20 * *(float *)(param_4 + 0x28);
        }
        *(undefined4 *)(param_6 + iVar14 * 4 + 0xd8c) = *(undefined4 *)(param_6 + 0x1210);
      }
      fVar17 = *(float *)pCVar15;
      fVar18 = *(float *)(pCVar15 + 4);
      local_20 = local_20 + 1;
      fVar20 = fVar19;
      if (fVar19 <= fVar17) {
        fVar20 = fVar17;
        fVar17 = fVar19;
      }
      if (fVar17 <= fVar21) {
        fVar21 = fVar17;
      }
      fVar19 = fVar1;
      if (fVar1 <= fVar18) {
        fVar19 = fVar18;
        fVar18 = fVar1;
      }
      if (fVar20 <= local_28) {
        fVar20 = local_28;
      }
      if (local_2c <= fVar18) {
        fVar18 = local_2c;
      }
      if (fVar19 <= local_30) {
        fVar19 = local_30;
      }
      fVar1 = *(float *)(pCVar15 + 8);
      fVar17 = fVar2;
      if (fVar2 <= fVar1) {
        fVar17 = fVar1;
        fVar1 = fVar2;
      }
      if (local_38 <= fVar1) {
        fVar1 = local_38;
      }
      if (fVar17 <= local_34) {
        fVar17 = local_34;
      }
      if (local_20 == 4) break;
      local_40 = *(int *)(param_6 + 0x1210);
      iVar10 = *(int *)(this + 0x1dc);
      iVar14 = *(int *)(iVar10 + 0x24);
      local_38 = fVar1;
      local_34 = fVar17;
      local_30 = fVar19;
      local_2c = fVar18;
      local_28 = fVar20;
    }
    if (((((fVar21 <= 1.0) && (0.0 <= fVar20)) && (fVar18 <= 1.0)) && (0.0 <= fVar19)) &&
       ((param_4 == (ShadowInfo_t *)0x0 ||
        ((0.0 <= fVar17 &&
         (fVar1 < *(float *)(param_4 + 0x44) || fVar1 == *(float *)(param_4 + 0x44)))))))
    goto LAB_00134850;
  }
  return 0;
}

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)