L L4D2node

Overlay_TriBLToTR

0x001d1100 · 3264 bytes · __cdecl

_Z17Overlay_TriBLToTRP9CDispInfoP11CMeshReaderR6VectorS4_ffiRKS3_

Decompiled

undefined (8 params)

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

void Overlay_TriBLToTR(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;
  float *pfVar5;
  int iVar6;
  int iVar7;
  float *pfVar8;
  int iVar9;
  int iVar10;
  float *pfVar11;
  int iVar12;
  int iVar13;
  int iVar14;
  float *pfVar15;
  Vector *pVVar16;
  int iVar17;
  float fVar18;
  float fVar19;
  int local_e4;
  float *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;
  
  iVar14 = (int)param_5;
  iVar17 = (int)param_6;
  iVar9 = iVar14 + 1;
  if (iVar14 + 1 == param_7) {
    iVar9 = iVar14;
  }
  iVar10 = iVar17 + 1;
  if (param_7 == iVar17 + 1) {
    iVar10 = iVar17;
  }
  if (param_6 - (float)iVar17 <= param_5 - (float)iVar14) {
    local_c4 = 0;
    iVar4 = iVar14 + iVar17 * param_7;
    local_b8[2] = iVar17 * param_7 + iVar9;
    iVar12 = *(int *)(param_2 + 0x60);
    iVar6 = param_7 * iVar10 + iVar9;
    iVar7 = *(int *)(param_2 + 0xc);
    iVar13 = iVar4;
    pfVar15 = &local_88;
    pVVar16 = (Vector *)&local_64;
    pfVar8 = &local_40;
    local_b8[0] = iVar4;
    local_b8[1] = iVar6;
    while( true ) {
      pfVar11 = (float *)(iVar12 + iVar7 * iVar13);
      pfVar5 = (float *)(*(int *)param_2 * iVar13 + *(int *)(param_2 + 0x54));
      fVar18 = pfVar11[2];
      fVar19 = *pfVar11;
      fVar1 = *pfVar5;
      fVar2 = pfVar5[2];
      pfVar15[1] = pfVar11[1] * 0.1 + pfVar5[1];
      *pfVar15 = fVar19 * 0.1 + fVar1;
      pfVar15[2] = fVar18 * 0.1 + fVar2;
      CDispInfo::GetFlatVert((int)&local_94);
      iVar7 = *(int *)(param_2 + 0xc);
      *(float *)pVVar16 = local_94;
      iVar12 = *(int *)(param_2 + 0x60);
      local_c4 = local_c4 + 1;
      *(float *)(pVVar16 + 4) = local_90;
      *(float *)(pVVar16 + 8) = local_8c;
      pfVar5 = (float *)(iVar13 * iVar7 + iVar12);
      fVar18 = pfVar5[1];
      fVar19 = *pfVar5;
      pfVar8[2] = pfVar5[2];
      pfVar8[1] = fVar18;
      *pfVar8 = fVar19;
      if (local_c4 == 3) break;
      iVar13 = local_b8[local_c4];
      pfVar15 = pfVar15 + 3;
      pVVar16 = pVVar16 + 0xc;
      pfVar8 = pfVar8 + 3;
    }
    if (iVar14 != iVar9) {
      if (iVar17 != iVar10) {
        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;
          iVar9 = *(int *)(param_2 + 0xc);
          iVar17 = *(int *)(param_2 + 0x60);
          local_a0[1] = iVar14 + param_7 * iVar10;
          pVVar16 = (Vector *)&local_64;
          pfVar15 = &local_40;
          pfVar8 = &local_88;
          local_a0[0] = iVar4;
          local_a0[2] = iVar6;
          while( true ) {
            pfVar11 = (float *)(iVar17 + iVar9 * iVar4);
            pfVar5 = (float *)(*(int *)param_2 * iVar4 + *(int *)(param_2 + 0x54));
            fVar18 = pfVar11[2];
            fVar19 = *pfVar11;
            fVar1 = *pfVar5;
            fVar2 = pfVar5[2];
            pfVar8[1] = pfVar11[1] * 0.1 + pfVar5[1];
            *pfVar8 = fVar19 * 0.1 + fVar1;
            pfVar8[2] = fVar18 * 0.1 + fVar2;
            CDispInfo::GetFlatVert((int)&local_94);
            iVar9 = *(int *)(param_2 + 0xc);
            *(float *)pVVar16 = local_94;
            iVar17 = *(int *)(param_2 + 0x60);
            local_c4 = local_c4 + 1;
            *(float *)(pVVar16 + 4) = local_90;
            *(float *)(pVVar16 + 8) = local_8c;
            pfVar5 = (float *)(iVar4 * iVar9 + iVar17);
            fVar18 = pfVar5[1];
            fVar19 = *pfVar5;
            pfVar15[2] = pfVar5[2];
            pfVar15[1] = fVar18;
            *pfVar15 = fVar19;
            if (local_c4 == 3) break;
            iVar4 = local_a0[local_c4];
            pVVar16 = pVVar16 + 0xc;
            pfVar15 = pfVar15 + 3;
            pfVar8 = pfVar8 + 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_001d1c08;
      }
      fVar18 = (*(float *)(param_8 + 4) - local_60) * (*(float *)(param_8 + 4) - local_60) +
               (*(float *)(param_8 + 8) - local_5c) * (*(float *)(param_8 + 8) - local_5c) +
               (*(float *)param_8 - local_64) * (*(float *)param_8 - local_64);
      local_64 = local_4c - local_64;
      local_4c = local_48 - local_60;
      goto LAB_001d18c9;
    }
    if (iVar17 == iVar10) goto LAB_001d1d00;
    fVar18 = SQRT((*(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)) /
             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;
    local_e4 = iVar17 * param_7 + iVar14;
    local_b8[1] = param_7 * iVar10 + iVar14;
    iVar4 = param_7 * iVar10 + iVar9;
    iVar12 = *(int *)(param_2 + 0x60);
    iVar7 = *(int *)(param_2 + 0xc);
    iVar13 = local_e4;
    pfVar15 = &local_88;
    pVVar16 = (Vector *)&local_64;
    pfVar8 = &local_40;
    local_b8[0] = local_e4;
    local_b8[2] = iVar4;
    while( true ) {
      pfVar11 = (float *)(iVar12 + iVar7 * iVar13);
      pfVar5 = (float *)(*(int *)param_2 * iVar13 + *(int *)(param_2 + 0x54));
      fVar18 = pfVar11[2];
      fVar19 = *pfVar11;
      fVar1 = *pfVar5;
      fVar2 = pfVar5[2];
      pfVar15[1] = pfVar11[1] * 0.1 + pfVar5[1];
      *pfVar15 = fVar19 * 0.1 + fVar1;
      pfVar15[2] = fVar18 * 0.1 + fVar2;
      CDispInfo::GetFlatVert((int)&local_94);
      iVar7 = *(int *)(param_2 + 0xc);
      *(float *)pVVar16 = local_94;
      iVar12 = *(int *)(param_2 + 0x60);
      local_c4 = local_c4 + 1;
      *(float *)(pVVar16 + 4) = local_90;
      *(float *)(pVVar16 + 8) = local_8c;
      pfVar5 = (float *)(iVar13 * iVar7 + iVar12);
      fVar18 = pfVar5[1];
      fVar19 = *pfVar5;
      pfVar8[2] = pfVar5[2];
      pfVar8[1] = fVar18;
      *pfVar8 = fVar19;
      if (local_c4 == 3) break;
      iVar13 = local_b8[local_c4];
      pfVar15 = pfVar15 + 3;
      pVVar16 = pVVar16 + 0xc;
      pfVar8 = pfVar8 + 3;
    }
    if (iVar14 == iVar9) {
      if (iVar17 == iVar10) {
LAB_001d1d00:
        *(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_001d19a7;
      }
      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 (iVar17 != iVar10) {
                    /* try { // try from 001d151c to 001d15e3 has its CatchHandler @ 001d1e01 */
        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;
          pfVar15 = &local_88;
          local_a0[2] = iVar9 + iVar17 * param_7;
          iVar9 = *(int *)(param_2 + 0xc);
          iVar14 = *(int *)(param_2 + 0x60);
          pVVar16 = (Vector *)&local_64;
          local_c8 = &local_40;
          local_a0[0] = local_e4;
          local_a0[1] = iVar4;
          while( true ) {
            pfVar5 = (float *)(iVar14 + iVar9 * local_e4);
            fVar18 = pfVar5[2];
            pfVar8 = (float *)(local_e4 * *(int *)param_2 + *(int *)(param_2 + 0x54));
            fVar19 = *pfVar5;
            fVar1 = pfVar8[2];
            fVar2 = *pfVar8;
            pfVar15[1] = pfVar5[1] * 0.1 + pfVar8[1];
            pfVar15[2] = fVar18 * 0.1 + fVar1;
            *pfVar15 = fVar19 * 0.1 + fVar2;
            CDispInfo::GetFlatVert((int)&local_94);
            pfVar15 = pfVar15 + 3;
            local_c4 = local_c4 + 1;
            iVar9 = *(int *)(param_2 + 0xc);
            *(float *)pVVar16 = local_94;
            iVar14 = *(int *)(param_2 + 0x60);
            *(float *)(pVVar16 + 4) = local_90;
            *(float *)(pVVar16 + 8) = local_8c;
            pfVar8 = (float *)(local_e4 * iVar9 + iVar14);
            fVar18 = pfVar8[2];
            fVar19 = pfVar8[1];
            *local_c8 = *pfVar8;
            local_c8[1] = fVar19;
            local_c8[2] = fVar18;
            if (local_c4 == 3) break;
            local_e4 = local_a0[local_c4];
            pVVar16 = pVVar16 + 0xc;
            local_c8 = local_c8 + 3;
          }
                    /* try { // try from 001d1d92 to 001d1d96 has its CatchHandler @ 001d1e01 */
          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_001d1c08:
        *(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_001d19a7;
      }
      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_001d18c9:
      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_001d19a7:
  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)