L L4D2node

CEdgeList::LocateEdgeCrossingDiscontinuity

0x001cc4f0 · 283 bytes · __thiscall

_ZN9CEdgeList31LocateEdgeCrossingDiscontinuityEffRiPPNS_6Edge_tE

Decompiled

undefined (5 params)

/* CEdgeList::LocateEdgeCrossingDiscontinuity(float, float, int&, CEdgeList::Edge_t**) */

longdouble __thiscall
CEdgeList::LocateEdgeCrossingDiscontinuity
          (CEdgeList *this,float param_1,float param_2,int *param_3,Edge_t **param_4)

{
  float *pfVar1;
  CEdgeList *pCVar2;
  int iVar3;
  int iVar4;
  CEdgeList *pCVar5;
  float fVar6;
  float fVar7;
  float fVar8;
  float fVar9;
  float fVar10;
  float fVar11;
  
  *param_3 = 0;
  pCVar2 = *(CEdgeList **)(this + 0x70);
  pCVar5 = this + 0x74;
  fVar10 = param_1;
  if (pCVar2 != pCVar5) {
    fVar7 = -3.4028235e+38;
    fVar11 = param_1;
LAB_001cc520:
    do {
      fVar10 = *(float *)(pCVar2 + 0x18);
      pfVar1 = *(float **)(pCVar2 + 0x28);
      fVar6 = (fVar11 - *(float *)(pCVar2 + 4)) * fVar10 + *(float *)pCVar2;
      if (((fVar6 <= fVar7) && (fVar9 = pfVar1[6], fVar10 < fVar9)) &&
         ((*(float *)(pCVar2 + 0xc) != pfVar1[3] ||
          ((*(float *)(pCVar2 + 0x10) != pfVar1[4] || (*(float *)(pCVar2 + 0x14) != pfVar1[5]))))))
      {
        fVar7 = *pfVar1;
        fVar8 = ((*(float *)(pCVar2 + 4) - pfVar1[1]) * fVar10 - (*(float *)pCVar2 - fVar7)) /
                (fVar10 - fVar9);
        fVar10 = pfVar1[1] + fVar8;
        if ((fVar10 < param_1) && (fVar10 != param_1)) {
          if (fVar10 <= param_2) {
            fVar10 = param_2;
          }
          if (fVar11 == fVar10) {
            iVar3 = *param_3 + 1;
            iVar4 = *param_3 << 2;
          }
          else {
            *param_3 = 0;
            iVar3 = 1;
            fVar7 = *pfVar1;
            fVar9 = pfVar1[6];
            iVar4 = 0;
          }
          *param_3 = iVar3;
          *(CEdgeList **)((int)param_4 + iVar4) = pCVar2;
          pCVar2 = *(CEdgeList **)(pCVar2 + 0x2c);
          fVar7 = fVar9 * fVar8 + fVar7;
          fVar11 = fVar10;
          if (pCVar2 == pCVar5) break;
          goto LAB_001cc520;
        }
      }
      pCVar2 = *(CEdgeList **)(pCVar2 + 0x2c);
      fVar7 = fVar6;
      fVar10 = fVar11;
    } while (pCVar2 != pCVar5);
  }
  return (longdouble)fVar10;
}

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)