L L4D2node

PointInQuadToBarycentric

0x0058c5e0 · 2182 bytes · __cdecl

_Z24PointInQuadToBarycentricRK6VectorS1_S1_S1_S1_R8Vector2D

Decompiled

undefined (6 params)

/* PointInQuadToBarycentric(Vector const&, Vector const&, Vector const&, Vector const&, Vector
   const&, Vector2D&) */

uint PointInQuadToBarycentric
               (Vector *param_1,Vector *param_2,Vector *param_3,Vector *param_4,Vector *param_5,
               Vector2D *param_6)

{
  float fVar1;
  float fVar3;
  bool bVar4;
  float fVar5;
  float fVar6;
  float fVar7;
  int iVar8;
  int iVar9;
  uint uVar10;
  int iVar11;
  int iVar12;
  longdouble lVar13;
  longdouble lVar14;
  longdouble lVar15;
  float fVar16;
  double dVar17;
  float fVar18;
  float fVar19;
  float fVar20;
  double dVar21;
  float fVar22;
  float fVar23;
  float fVar24;
  float fVar25;
  float fVar26;
  float fVar27;
  float fVar28;
  float fVar29;
  double dVar30;
  float fVar31;
  undefined4 local_bc;
  undefined4 uStack_b8;
  undefined4 local_b4;
  undefined4 uStack_b0;
  float local_a8;
  float local_a4;
  float local_a0;
  float local_9c;
  float local_98;
  float local_94;
  float local_90;
  float local_8c;
  float local_88;
  float local_84;
  float local_80;
  float local_7c [10];
  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;
  float fVar2;
  
  fVar27 = *(float *)param_2 - *(float *)param_1;
  fVar24 = *(float *)(param_2 + 4) - *(float *)(param_1 + 4);
  fVar22 = *(float *)param_3 - *(float *)param_4;
  fVar28 = *(float *)(param_2 + 8) - *(float *)(param_1 + 8);
  fVar25 = *(float *)(param_3 + 4) - *(float *)(param_4 + 4);
  fVar31 = *(float *)param_4 - *(float *)param_1;
  fVar29 = *(float *)(param_4 + 4) - *(float *)(param_1 + 4);
  fVar18 = *(float *)(param_3 + 8) - *(float *)(param_4 + 8);
  fVar26 = *(float *)(param_3 + 8) - *(float *)(param_2 + 8);
  fVar23 = *(float *)(param_4 + 8) - *(float *)(param_1 + 8);
  fVar16 = *(float *)param_3 - *(float *)param_2;
  fVar19 = *(float *)(param_3 + 4) - *(float *)(param_2 + 4);
  local_7c[0] = fVar27;
  local_7c[1] = fVar24;
  local_7c[2] = fVar28;
  local_7c[3] = fVar22;
  local_7c[4] = fVar25;
  local_7c[5] = fVar18;
  local_7c[6] = fVar31;
  local_7c[7] = fVar29;
  local_7c[8] = fVar23;
  local_7c[9] = fVar16;
  local_54 = fVar19;
  local_50 = fVar26;
  local_4c = fVar27;
  local_48 = fVar24;
  local_44 = fVar28;
  local_40 = fVar22;
  local_3c = fVar25;
  local_38 = fVar18;
  local_34 = fVar31;
  local_30 = fVar29;
  local_2c = fVar23;
  local_28 = fVar16;
  local_24 = fVar19;
  local_20 = fVar26;
  lVar13 = (longdouble)VectorNormalize((Vector *)&local_4c);
  fVar3 = (float)lVar13;
  lVar13 = (longdouble)VectorNormalize((Vector *)&local_40);
  lVar14 = (longdouble)VectorNormalize((Vector *)&local_34);
  lVar15 = (longdouble)VectorNormalize((Vector *)&local_28);
  if ((0.99 < local_3c * local_48 + local_40 * local_4c + local_38 * local_44) &&
     (ABS(fVar3 - (float)lVar13) < 0.1)) {
    uVar10 = QuadWithParallelEdges
                       (param_1,(Vector *)&local_4c,fVar3,(Vector *)&local_34,(float)lVar14,param_5,
                        param_6);
    return uVar10;
  }
  bVar4 = local_24 * local_30 + local_28 * local_34 + local_20 * local_2c <= 0.99;
  fVar20 = fVar24;
  fVar1 = fVar31;
  fVar2 = fVar23;
  fVar5 = fVar29;
  fVar6 = fVar27;
  fVar7 = fVar28;
  if (bVar4) {
    fVar20 = fVar29;
    fVar29 = fVar24;
    fVar1 = fVar27;
    fVar2 = fVar28;
    fVar28 = fVar23;
    fVar27 = fVar31;
    fVar31 = local_7c[0];
    fVar5 = local_7c[1];
    fVar23 = local_7c[2];
    fVar16 = local_7c[3];
    fVar19 = local_7c[4];
    fVar26 = local_7c[5];
    fVar6 = local_7c[6];
    fVar24 = local_7c[7];
    fVar7 = local_7c[8];
    fVar22 = local_7c[9];
    fVar25 = local_54;
    fVar18 = local_50;
  }
  local_50 = fVar18;
  local_54 = fVar25;
  local_7c[9] = fVar22;
  local_7c[8] = fVar7;
  local_7c[7] = fVar24;
  local_7c[6] = fVar6;
  local_7c[5] = fVar26;
  local_7c[4] = fVar19;
  local_7c[3] = fVar16;
  local_7c[2] = fVar23;
  local_7c[1] = fVar5;
  local_7c[0] = fVar31;
  local_a0 = fVar28 * fVar29 - fVar20 * fVar2;
  local_9c = fVar2 * fVar27 - fVar28 * fVar1;
  local_98 = fVar1 * fVar20 - fVar27 * fVar29;
  GetNonMajorAxes((Vector *)&local_a0,(Vector2D *)&local_a8);
  iVar12 = (int)local_a8;
  iVar8 = (int)local_a4;
  iVar11 = iVar12 * 4;
  fVar28 = local_7c[iVar12];
  fVar27 = local_7c[iVar8];
  iVar9 = iVar8 * 4;
  fVar29 = fVar27;
  if (ABS(fVar28) < ABS(fVar27)) {
    local_a8 = local_a4;
    local_a4 = (float)iVar12;
    iVar9 = (int)local_a4 * 4;
    iVar11 = iVar8 * 4;
    iVar12 = iVar8;
    fVar29 = local_7c[(int)local_a4];
    fVar28 = fVar27;
  }
  fVar27 = *(float *)((int)local_7c + iVar11 + 0x18);
  local_bc = 0;
  fVar31 = *(float *)((int)local_7c + iVar9 + 0x18);
  uStack_b8 = 0;
  fVar23 = *(float *)((int)local_7c + iVar9 + 0xc);
  local_b4 = 0;
  fVar19 = fVar27 * fVar29;
  fVar26 = fVar31 * fVar28;
  fVar16 = *(float *)((int)local_7c + iVar11 + 0xc);
  uStack_b0 = 0;
  dVar21 = (double)(((fVar19 - fVar26) - fVar27 * fVar23) + fVar31 * fVar16);
  dVar17 = (double)(((*(float *)(param_1 + iVar9) - *(float *)(param_5 + iVar9)) * fVar28 -
                    *(float *)(param_1 + iVar11) * fVar29) + fVar29 * *(float *)(param_5 + iVar11));
  dVar30 = (((((double)(*(float *)(param_1 + iVar11) * fVar23) +
               (double)(*(float *)(param_5 + iVar9) * fVar16) + (double)fVar19) -
             (double)(fVar16 * *(float *)(param_1 + iVar9))) - (double)fVar26) -
           (double)(*(float *)(param_5 + iVar11) * fVar23)) + dVar17;
  if ((dVar21 < 0.1) && (-0.1 < dVar21)) {
    local_8c = (local_38 + local_44) * 0.5;
    local_90 = (local_3c + local_48) * 0.5;
    local_94 = (local_40 + local_4c) * 0.5;
    local_80 = (local_20 + local_2c) * 0.5;
    local_84 = (local_24 + local_30) * 0.5;
    local_88 = (local_28 + local_34) * 0.5;
    uVar10 = QuadWithParallelEdges
                       (param_1,(Vector *)&local_94,((float)lVar13 + fVar3) * 0.5,
                        (Vector *)&local_88,((float)lVar15 + (float)lVar14) * 0.5,param_5,param_6);
    return uVar10;
  }
  dVar17 = dVar30 * dVar30 - dVar17 * dVar21 * 4.0;
  if (0.0 <= dVar17) {
    dVar17 = SQRT(dVar17);
    ResolveQuadratic((dVar30 + dVar17) / (dVar21 + dVar21),(dVar30 - dVar17) / (dVar21 + dVar21),
                     local_7c[0],local_7c[1],local_7c[2],local_7c[3],local_7c[4],local_7c[5],
                     local_7c[6],local_7c[7],local_7c[8],local_7c[9],local_54,local_50,
                     *(undefined4 *)param_1,*(undefined4 *)(param_1 + 4),
                     *(undefined4 *)(param_1 + 8),*(undefined4 *)param_5,
                     *(undefined4 *)(param_5 + 4),*(undefined4 *)(param_5 + 8),iVar12,&local_bc,
                     &local_b4);
    if (bVar4) {
      fVar28 = (float)(double)CONCAT44(uStack_b8,local_bc);
      *(float *)param_6 = fVar28;
      *(float *)(param_6 + 4) = (float)(double)CONCAT44(uStack_b0,local_b4);
    }
    else {
      fVar28 = (float)(double)CONCAT44(uStack_b0,local_b4);
      *(float *)param_6 = fVar28;
      *(float *)(param_6 + 4) = (float)(double)CONCAT44(uStack_b8,local_bc);
    }
    uVar10 = 0;
    if (((0.0 <= fVar28) && (fVar28 <= 1.0)) && (0.0 <= *(float *)(param_6 + 4))) {
      uVar10 = (uint)(*(float *)(param_6 + 4) <= 1.0);
    }
  }
  else {
    *(undefined4 *)param_6 = 0xc7c34f80;
    *(undefined4 *)(param_6 + 4) = 0xc7c34f80;
    uVar10 = 2;
  }
  return uVar10;
}

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)