L L4D2node

Overlay_TriTLToBR

0x001d03f0 · 3262 bytes · __cdecl

_Z17Overlay_TriTLToBRP9CDispInfoP11CMeshReaderR6VectorS4_ffiRKS3_

Decompiled

undefined (8 params)

/* Overlay_TriTLToBR(CDispInfo*, CMeshReader*, Vector&, Vector&, float, float, int, Vector const&)
    */

void Overlay_TriTLToBR(CDispInfo *param_1,CMeshReader *param_2,Vector *param_3,Vector *param_4,
                      float param_5,float param_6,int param_7,Vector *param_8)

{
  float fVar1;
  float fVar2;
  char cVar3;
  int iVar4;
  int iVar5;
  float *pfVar6;
  int iVar7;
  int iVar8;
  int iVar9;
  float *pfVar10;
  int iVar11;
  int iVar12;
  float *pfVar13;
  Vector *pVVar14;
  int iVar15;
  int iVar16;
  float *pfVar17;
  float fVar18;
  float fVar19;
  Vector *local_c8;
  int local_c4;
  int local_b8 [3];
  float local_ac;
  float local_a8;
  float local_a4;
  int local_a0 [3];
  float local_94;
  float local_90;
  float local_8c;
  float local_88;
  float local_84;
  float local_80;
  float local_7c;
  float local_78;
  float local_74;
  float local_70;
  float local_6c;
  float local_68;
  float local_64;
  float local_60;
  float local_5c;
  float local_58;
  float local_54;
  float local_50;
  float local_4c;
  float local_48;
  float local_44;
  float local_40;
  float local_3c;
  float local_38;
  float local_34;
  float local_30;
  float local_2c;
  float local_28;
  float local_24;
  float local_20;
  
  iVar15 = (int)param_6;
  iVar4 = (int)param_5;
  iVar11 = iVar4 + 1;
  if (iVar4 + 1 == param_7) {
    iVar11 = iVar4;
  }
  iVar8 = iVar15 + 1;
  if (param_7 == iVar15 + 1) {
    iVar8 = iVar15;
  }
  if (((param_6 + param_5) - (float)iVar15) - (float)iVar4 < 1.000001) {
    local_c4 = 0;
    iVar5 = *(int *)(param_2 + 0x60);
    iVar9 = iVar15 * param_7 + iVar4;
    iVar16 = iVar15 * param_7 + iVar11;
    iVar12 = param_7 * iVar8 + iVar4;
    iVar7 = *(int *)(param_2 + 0xc);
    pfVar13 = &local_88;
    pVVar14 = (Vector *)&local_64;
    pfVar17 = &local_40;
    local_b8[0] = iVar9;
    local_b8[1] = iVar12;
    local_b8[2] = iVar16;
    while( true ) {
      pfVar10 = (float *)(iVar5 + iVar7 * iVar9);
      pfVar6 = (float *)(*(int *)param_2 * iVar9 + *(int *)(param_2 + 0x54));
      fVar18 = pfVar10[2];
      fVar19 = *pfVar10;
      fVar1 = *pfVar6;
      fVar2 = pfVar6[2];
      pfVar13[1] = pfVar10[1] * 0.1 + pfVar6[1];
      *pfVar13 = fVar19 * 0.1 + fVar1;
      pfVar13[2] = fVar18 * 0.1 + fVar2;
      CDispInfo::GetFlatVert((int)&local_94);
      iVar7 = *(int *)(param_2 + 0xc);
      *(float *)pVVar14 = local_94;
      iVar5 = *(int *)(param_2 + 0x60);
      local_c4 = local_c4 + 1;
      *(float *)(pVVar14 + 4) = local_90;
      *(float *)(pVVar14 + 8) = local_8c;
      pfVar6 = (float *)(iVar9 * iVar7 + iVar5);
      fVar18 = pfVar6[1];
      fVar19 = *pfVar6;
      pfVar17[2] = pfVar6[2];
      pfVar17[1] = fVar18;
      *pfVar17 = fVar19;
      if (local_c4 == 3) break;
      iVar9 = local_b8[local_c4];
      pfVar13 = pfVar13 + 3;
      pVVar14 = pVVar14 + 0xc;
      pfVar17 = pfVar17 + 3;
    }
    if (iVar4 != iVar11) {
      if (iVar15 != iVar8) {
        cVar3 = CalcBarycentricCooefs
                          ((Vector *)&local_64,(Vector *)&local_58,(Vector *)&local_4c,param_8,
                           &local_ac,&local_a8,&local_a4);
        if (cVar3 == '\0') {
          local_c4 = 0;
          iVar4 = *(int *)(param_2 + 0xc);
          iVar15 = *(int *)(param_2 + 0x60);
          local_a0[1] = iVar11 + param_7 * iVar8;
          pVVar14 = (Vector *)&local_64;
          pfVar13 = &local_40;
          pfVar17 = &local_88;
          local_a0[0] = iVar12;
          local_a0[2] = iVar16;
          while( true ) {
            pfVar10 = (float *)(iVar15 + iVar4 * iVar12);
            pfVar6 = (float *)(*(int *)param_2 * iVar12 + *(int *)(param_2 + 0x54));
            fVar18 = pfVar10[2];
            fVar19 = *pfVar10;
            fVar1 = *pfVar6;
            fVar2 = pfVar6[2];
            pfVar17[1] = pfVar10[1] * 0.1 + pfVar6[1];
            *pfVar17 = fVar19 * 0.1 + fVar1;
            pfVar17[2] = fVar18 * 0.1 + fVar2;
            CDispInfo::GetFlatVert((int)&local_94);
            iVar4 = *(int *)(param_2 + 0xc);
            *(float *)pVVar14 = local_94;
            iVar15 = *(int *)(param_2 + 0x60);
            local_c4 = local_c4 + 1;
            *(float *)(pVVar14 + 4) = local_90;
            *(float *)(pVVar14 + 8) = local_8c;
            pfVar6 = (float *)(iVar12 * iVar4 + iVar15);
            fVar18 = pfVar6[1];
            fVar19 = *pfVar6;
            pfVar13[2] = pfVar6[2];
            pfVar13[1] = fVar18;
            *pfVar13 = fVar19;
            if (local_c4 == 3) break;
            iVar12 = local_a0[local_c4];
            pVVar14 = pVVar14 + 0xc;
            pfVar13 = pfVar13 + 3;
            pfVar17 = pfVar17 + 3;
          }
          CalcBarycentricCooefs
                    ((Vector *)&local_64,(Vector *)&local_58,(Vector *)&local_4c,param_8,&local_94,
                     &local_90,&local_8c);
          local_ac = local_94;
          local_a4 = local_8c;
          local_a8 = local_90;
        }
        goto LAB_001d0ef8;
      }
      fVar18 = (*(float *)param_8 - local_64) * (*(float *)param_8 - local_64) +
               (*(float *)(param_8 + 8) - local_5c) * (*(float *)(param_8 + 8) - local_5c) +
               (*(float *)(param_8 + 4) - local_60) * (*(float *)(param_8 + 4) - local_60);
      local_64 = local_4c - local_64;
      local_4c = local_48 - local_60;
      goto LAB_001d0bb9;
    }
    if (iVar15 == iVar8) goto LAB_001d0ff0;
    fVar18 = SQRT((*(float *)param_8 - local_64) * (*(float *)param_8 - local_64) +
                  (*(float *)(param_8 + 4) - local_60) * (*(float *)(param_8 + 4) - local_60) +
                  (*(float *)(param_8 + 8) - local_5c) * (*(float *)(param_8 + 8) - local_5c)) /
             SQRT((local_58 - local_64) * (local_58 - local_64) +
                  (local_50 - local_5c) * (local_50 - local_5c) +
                  (local_54 - local_60) * (local_54 - local_60));
    *(float *)(param_3 + 4) = (local_78 - local_84) * fVar18 + local_84;
    *(float *)(param_3 + 8) = (local_74 - local_80) * fVar18 + local_80;
    *(float *)param_3 = (local_7c - local_88) * fVar18 + local_88;
    local_3c = (local_30 - local_3c) * fVar18 + local_3c;
    local_38 = (local_2c - local_38) * fVar18 + local_38;
    local_28 = local_34;
  }
  else {
    local_c4 = 0;
    iVar16 = iVar4 + iVar8 * param_7;
    iVar9 = *(int *)(param_2 + 0x60);
    local_b8[1] = iVar8 * param_7 + iVar11;
    iVar12 = param_7 * iVar15 + iVar11;
    iVar5 = *(int *)(param_2 + 0xc);
    iVar7 = iVar16;
    pfVar13 = &local_88;
    pVVar14 = (Vector *)&local_64;
    pfVar17 = &local_40;
    local_b8[0] = iVar16;
    local_b8[2] = iVar12;
    while( true ) {
      pfVar10 = (float *)(iVar9 + iVar5 * iVar7);
      pfVar6 = (float *)(*(int *)param_2 * iVar7 + *(int *)(param_2 + 0x54));
      fVar18 = pfVar10[2];
      fVar19 = *pfVar10;
      fVar1 = *pfVar6;
      fVar2 = pfVar6[2];
      pfVar13[1] = pfVar10[1] * 0.1 + pfVar6[1];
      *pfVar13 = fVar19 * 0.1 + fVar1;
      pfVar13[2] = fVar18 * 0.1 + fVar2;
      CDispInfo::GetFlatVert((int)&local_94);
      iVar5 = *(int *)(param_2 + 0xc);
      *(float *)pVVar14 = local_94;
      iVar9 = *(int *)(param_2 + 0x60);
      local_c4 = local_c4 + 1;
      *(float *)(pVVar14 + 4) = local_90;
      *(float *)(pVVar14 + 8) = local_8c;
      pfVar6 = (float *)(iVar7 * iVar5 + iVar9);
      fVar18 = pfVar6[1];
      fVar19 = *pfVar6;
      pfVar17[2] = pfVar6[2];
      pfVar17[1] = fVar18;
      *pfVar17 = fVar19;
      if (local_c4 == 3) break;
      iVar7 = local_b8[local_c4];
      pfVar13 = pfVar13 + 3;
      pVVar14 = pVVar14 + 0xc;
      pfVar17 = pfVar17 + 3;
    }
    if (iVar4 == iVar11) {
      if (iVar15 == iVar8) {
LAB_001d0ff0:
        *(float *)param_3 = local_88;
        *(float *)(param_3 + 4) = local_84;
        *(float *)(param_3 + 8) = local_80;
        *(float *)param_4 = local_40;
        *(float *)(param_4 + 4) = local_3c;
        *(float *)(param_4 + 8) = local_38;
        goto LAB_001d0c97;
      }
      fVar19 = local_4c - local_64;
      fVar18 = (*(float *)param_8 - local_64) * (*(float *)param_8 - local_64) +
               (*(float *)(param_8 + 8) - local_5c) * (*(float *)(param_8 + 8) - local_5c) +
               (*(float *)(param_8 + 4) - local_60) * (*(float *)(param_8 + 4) - local_60);
      local_4c = local_48 - local_60;
      local_64 = local_44 - local_5c;
    }
    else {
      if (iVar15 != iVar8) {
                    /* try { // try from 001d0814 to 001d08d8 has its CatchHandler @ 001d10f1 */
        cVar3 = CalcBarycentricCooefs
                          ((Vector *)&local_64,(Vector *)&local_58,(Vector *)&local_4c,param_8,
                           &local_ac,&local_a8,&local_a4);
        if (cVar3 == '\0') {
          local_c4 = 0;
          iVar11 = *(int *)(param_2 + 0x60);
          iVar4 = iVar4 + param_7 * iVar15;
          pfVar13 = &local_88;
          iVar15 = *(int *)(param_2 + 0xc);
          pfVar17 = &local_40;
          local_c8 = (Vector *)&local_64;
          local_a0[0] = iVar4;
          local_a0[1] = iVar16;
          local_a0[2] = iVar12;
          while( true ) {
            pfVar10 = (float *)(iVar11 + iVar15 * iVar4);
            fVar18 = pfVar10[2];
            fVar19 = *pfVar10;
            pfVar6 = (float *)(*(int *)param_2 * iVar4 + *(int *)(param_2 + 0x54));
            fVar1 = pfVar6[2];
            fVar2 = *pfVar6;
            pfVar13[1] = pfVar10[1] * 0.1 + pfVar6[1];
            pfVar13[2] = fVar18 * 0.1 + fVar1;
            *pfVar13 = fVar19 * 0.1 + fVar2;
            CDispInfo::GetFlatVert((int)&local_94);
            pfVar13 = pfVar13 + 3;
            local_c4 = local_c4 + 1;
            *(float *)local_c8 = local_94;
            iVar11 = *(int *)(param_2 + 0x60);
            *(float *)(local_c8 + 4) = local_90;
            *(float *)(local_c8 + 8) = local_8c;
            iVar15 = *(int *)(param_2 + 0xc);
            pfVar6 = (float *)(iVar4 * iVar15 + iVar11);
            fVar18 = pfVar6[1];
            fVar19 = *pfVar6;
            pfVar17[2] = pfVar6[2];
            pfVar17[1] = fVar18;
            *pfVar17 = fVar19;
            if (local_c4 == 3) break;
            iVar4 = local_a0[local_c4];
            pfVar17 = pfVar17 + 3;
            local_c8 = local_c8 + 0xc;
          }
                    /* try { // try from 001d1082 to 001d1086 has its CatchHandler @ 001d10f1 */
          CalcBarycentricCooefs
                    ((Vector *)&local_64,(Vector *)&local_58,(Vector *)&local_4c,param_8,&local_94,
                     &local_90,&local_8c);
          local_ac = local_94;
          local_a4 = local_8c;
          local_a8 = local_90;
        }
LAB_001d0ef8:
        *(float *)(param_3 + 4) = local_78 * local_a8 + local_6c * local_a4 + local_84 * local_ac;
        *(float *)(param_3 + 8) = local_74 * local_a8 + local_68 * local_a4 + local_80 * local_ac;
        *(float *)param_3 = local_7c * local_a8 + local_70 * local_a4 + local_88 * local_ac;
        *(float *)(param_4 + 4) = local_30 * local_a8 + local_24 * local_a4 + local_3c * local_ac;
        *(float *)(param_4 + 8) = local_2c * local_a8 + local_20 * local_a4 + local_38 * local_ac;
        *(float *)param_4 = local_a8 * local_34 + local_a4 * local_28 + local_ac * local_40;
        goto LAB_001d0c97;
      }
      local_4c = local_4c - local_64;
      fVar18 = (*(float *)(param_8 + 4) - local_60) * (*(float *)(param_8 + 4) - local_60) +
               (*(float *)param_8 - local_64) * (*(float *)param_8 - local_64) +
               (*(float *)(param_8 + 8) - local_5c) * (*(float *)(param_8 + 8) - local_5c);
      local_64 = local_48 - local_60;
LAB_001d0bb9:
      fVar19 = local_44 - local_5c;
    }
    fVar18 = SQRT(fVar18) / SQRT(local_64 * local_64 + local_4c * local_4c + fVar19 * fVar19);
    *(float *)(param_3 + 4) = (local_6c - local_84) * fVar18 + local_84;
    *(float *)(param_3 + 8) = (local_68 - local_80) * fVar18 + local_80;
    *(float *)param_3 = (local_70 - local_88) * fVar18 + local_88;
    local_3c = (local_24 - local_3c) * fVar18 + local_3c;
    local_38 = (local_20 - local_38) * fVar18 + local_38;
  }
  *(float *)(param_4 + 4) = local_3c;
  *(float *)(param_4 + 8) = local_38;
  *(float *)param_4 = (local_28 - local_40) * fVar18 + local_40;
LAB_001d0c97:
  VectorNormalize(param_4);
  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)