L L4D2node

CCoreDispInfo::CalcNormalFromEdges

0x000bfea0 · 2098 bytes · __thiscall

_ZN13CCoreDispInfo19CalcNormalFromEdgesEiiPbR6Vector

Decompiled

undefined (5 params)

/* CCoreDispInfo::CalcNormalFromEdges(int, int, bool*, Vector&) */

void __thiscall
CCoreDispInfo::CalcNormalFromEdges
          (CCoreDispInfo *this,int param_1,int param_2,bool *param_3,Vector *param_4)

{
  int iVar1;
  char cVar2;
  int iVar3;
  int iVar4;
  int iVar5;
  int iVar6;
  int iVar7;
  int iVar8;
  float fVar9;
  float fVar10;
  float fVar11;
  float fVar12;
  float fVar13;
  float fVar14;
  float fVar15;
  float fVar16;
  float fVar17;
  float fVar18;
  int local_38;
  float local_34;
  float local_30;
  float local_28;
  float local_24;
  float local_20;
  
  iVar1 = (1 << ((byte)*(undefined4 *)(this + 0xc) & 0x1f)) + 1;
  if ((param_3[1] == false) || (param_3[2] == false)) {
    fVar9 = 0.0;
    local_38 = 0;
    local_30 = 0.0;
    local_34 = 0.0;
  }
  else {
    iVar6 = param_2 * iVar1;
    iVar3 = *(int *)(this + 0x1b8);
    iVar8 = iVar3 + (param_1 + iVar6) * 0x90;
    iVar5 = (param_1 + iVar1 + iVar6) * 0x90;
    iVar4 = iVar3 + iVar5;
    fVar9 = *(float *)(iVar4 + 0x28) - *(float *)(iVar8 + 0x28);
    fVar11 = *(float *)(iVar4 + 0x2c) - *(float *)(iVar8 + 0x2c);
    fVar13 = *(float *)(iVar4 + 0x30) - *(float *)(iVar8 + 0x30);
    iVar4 = (iVar6 + param_1 + 1) * 0x90;
    iVar3 = iVar3 + iVar4;
    fVar12 = *(float *)(iVar3 + 0x28) - *(float *)(iVar8 + 0x28);
    fVar10 = *(float *)(iVar3 + 0x2c) - *(float *)(iVar8 + 0x2c);
    fVar15 = *(float *)(iVar3 + 0x30) - *(float *)(iVar8 + 0x30);
    local_28 = fVar10 * fVar13 - fVar15 * fVar11;
    local_24 = fVar15 * fVar9 - fVar13 * fVar12;
    local_20 = fVar11 * fVar12 - fVar9 * fVar10;
    VectorNormalize((Vector *)&local_28);
    fVar9 = local_20;
    local_30 = local_24;
    local_34 = local_28;
    iVar8 = *(int *)(this + 0x1b8);
    iVar4 = iVar4 + iVar8;
    iVar5 = iVar5 + iVar8;
    iVar8 = iVar8 + (param_1 + 1 + iVar1 + iVar6) * 0x90;
    fVar10 = *(float *)(iVar5 + 0x28) - *(float *)(iVar4 + 0x28);
    fVar13 = *(float *)(iVar8 + 0x28) - *(float *)(iVar4 + 0x28);
    fVar12 = *(float *)(iVar5 + 0x2c) - *(float *)(iVar4 + 0x2c);
    fVar11 = *(float *)(iVar8 + 0x2c) - *(float *)(iVar4 + 0x2c);
    fVar17 = *(float *)(iVar8 + 0x30) - *(float *)(iVar4 + 0x30);
    fVar15 = *(float *)(iVar5 + 0x30) - *(float *)(iVar4 + 0x30);
    local_28 = fVar11 * fVar15 - fVar17 * fVar12;
    local_24 = fVar17 * fVar10 - fVar15 * fVar13;
    local_20 = fVar12 * fVar13 - fVar10 * fVar11;
    VectorNormalize((Vector *)&local_28);
    local_38 = 2;
    local_34 = local_34 + local_28;
    local_30 = local_30 + local_24;
    fVar9 = fVar9 + local_20;
  }
  if (*param_3 != false) {
    if (param_3[1] == false) {
      cVar2 = param_3[3];
    }
    else {
      iVar3 = param_2 * iVar1;
      iVar4 = *(int *)(this + 0x1b8);
      iVar5 = (iVar3 + param_1 + -1) * 0x90 + iVar4;
      iVar7 = (param_1 + -1 + iVar1 + iVar3) * 0x90;
      iVar8 = iVar4 + iVar7;
      iVar6 = (iVar3 + param_1) * 0x90;
      iVar4 = iVar4 + iVar6;
      fVar10 = *(float *)(iVar8 + 0x28) - *(float *)(iVar5 + 0x28);
      fVar12 = *(float *)(iVar8 + 0x2c) - *(float *)(iVar5 + 0x2c);
      fVar13 = *(float *)(iVar4 + 0x28) - *(float *)(iVar5 + 0x28);
      fVar15 = *(float *)(iVar8 + 0x30) - *(float *)(iVar5 + 0x30);
      fVar11 = *(float *)(iVar4 + 0x2c) - *(float *)(iVar5 + 0x2c);
      fVar17 = *(float *)(iVar4 + 0x30) - *(float *)(iVar5 + 0x30);
      local_28 = fVar11 * fVar15 - fVar17 * fVar12;
      local_24 = fVar17 * fVar10 - fVar15 * fVar13;
      local_20 = fVar12 * fVar13 - fVar10 * fVar11;
      VectorNormalize((Vector *)&local_28);
      fVar12 = local_20;
      fVar11 = local_24;
      fVar10 = local_28;
      iVar8 = *(int *)(this + 0x1b8);
      iVar6 = iVar6 + iVar8;
      iVar7 = iVar7 + iVar8;
      iVar8 = iVar8 + (iVar1 + iVar3 + param_1) * 0x90;
      fVar13 = *(float *)(iVar7 + 0x28) - *(float *)(iVar6 + 0x28);
      fVar14 = *(float *)(iVar8 + 0x28) - *(float *)(iVar6 + 0x28);
      fVar17 = *(float *)(iVar7 + 0x2c) - *(float *)(iVar6 + 0x2c);
      fVar15 = *(float *)(iVar8 + 0x2c) - *(float *)(iVar6 + 0x2c);
      fVar18 = *(float *)(iVar8 + 0x30) - *(float *)(iVar6 + 0x30);
      fVar16 = *(float *)(iVar7 + 0x30) - *(float *)(iVar6 + 0x30);
      local_28 = fVar15 * fVar16 - fVar18 * fVar17;
      local_24 = fVar18 * fVar13 - fVar16 * fVar14;
      local_20 = fVar17 * fVar14 - fVar13 * fVar15;
      VectorNormalize((Vector *)&local_28);
      local_38 = local_38 + 2;
      local_34 = local_34 + fVar10 + local_28;
      local_30 = local_30 + fVar11 + local_24;
      fVar9 = fVar9 + fVar12 + local_20;
      if (*param_3 == false) goto LAB_000bfefc;
      cVar2 = param_3[3];
    }
    if (cVar2 != '\0') {
      iVar4 = *(int *)(this + 0x1b8);
      iVar3 = (param_2 + -1) * iVar1;
      iVar5 = (iVar3 + param_1 + -1) * 0x90 + iVar4;
      iVar7 = (param_1 + -1 + iVar1 + iVar3) * 0x90;
      iVar8 = iVar4 + iVar7;
      iVar6 = (iVar3 + param_1) * 0x90;
      iVar4 = iVar4 + iVar6;
      fVar10 = *(float *)(iVar8 + 0x28) - *(float *)(iVar5 + 0x28);
      fVar12 = *(float *)(iVar8 + 0x2c) - *(float *)(iVar5 + 0x2c);
      fVar13 = *(float *)(iVar4 + 0x28) - *(float *)(iVar5 + 0x28);
      fVar15 = *(float *)(iVar8 + 0x30) - *(float *)(iVar5 + 0x30);
      fVar11 = *(float *)(iVar4 + 0x2c) - *(float *)(iVar5 + 0x2c);
      fVar17 = *(float *)(iVar4 + 0x30) - *(float *)(iVar5 + 0x30);
      local_28 = fVar11 * fVar15 - fVar17 * fVar12;
      local_24 = fVar17 * fVar10 - fVar15 * fVar13;
      local_20 = fVar12 * fVar13 - fVar10 * fVar11;
      VectorNormalize((Vector *)&local_28);
      fVar12 = local_20;
      fVar11 = local_24;
      fVar10 = local_28;
      iVar8 = *(int *)(this + 0x1b8);
      iVar6 = iVar6 + iVar8;
      iVar7 = iVar7 + iVar8;
      iVar8 = iVar8 + (iVar1 + iVar3 + param_1) * 0x90;
      fVar13 = *(float *)(iVar7 + 0x28) - *(float *)(iVar6 + 0x28);
      fVar14 = *(float *)(iVar8 + 0x28) - *(float *)(iVar6 + 0x28);
      fVar17 = *(float *)(iVar7 + 0x2c) - *(float *)(iVar6 + 0x2c);
      fVar15 = *(float *)(iVar8 + 0x2c) - *(float *)(iVar6 + 0x2c);
      fVar18 = *(float *)(iVar8 + 0x30) - *(float *)(iVar6 + 0x30);
      fVar16 = *(float *)(iVar7 + 0x30) - *(float *)(iVar6 + 0x30);
      local_28 = fVar15 * fVar16 - fVar18 * fVar17;
      local_24 = fVar18 * fVar13 - fVar16 * fVar14;
      local_20 = fVar17 * fVar14 - fVar13 * fVar15;
      VectorNormalize((Vector *)&local_28);
      local_38 = local_38 + 2;
      local_34 = local_34 + fVar10 + local_28;
      local_30 = local_30 + fVar11 + local_24;
      fVar9 = fVar9 + fVar12 + local_20;
    }
  }
LAB_000bfefc:
  if ((param_3[2] != false) && (param_3[3] != false)) {
    iVar4 = *(int *)(this + 0x1b8);
    iVar3 = (param_2 + -1) * iVar1;
    iVar6 = (param_1 + iVar3) * 0x90 + iVar4;
    iVar5 = (param_1 + iVar1 + iVar3) * 0x90;
    iVar8 = iVar4 + iVar5;
    fVar10 = *(float *)(iVar8 + 0x28) - *(float *)(iVar6 + 0x28);
    fVar12 = *(float *)(iVar8 + 0x2c) - *(float *)(iVar6 + 0x2c);
    fVar15 = *(float *)(iVar8 + 0x30) - *(float *)(iVar6 + 0x30);
    iVar8 = (iVar3 + param_1 + 1) * 0x90;
    iVar4 = iVar4 + iVar8;
    fVar13 = *(float *)(iVar4 + 0x28) - *(float *)(iVar6 + 0x28);
    fVar11 = *(float *)(iVar4 + 0x2c) - *(float *)(iVar6 + 0x2c);
    fVar17 = *(float *)(iVar4 + 0x30) - *(float *)(iVar6 + 0x30);
    local_28 = fVar11 * fVar15 - fVar17 * fVar12;
    local_24 = fVar17 * fVar10 - fVar15 * fVar13;
    local_20 = fVar12 * fVar13 - fVar10 * fVar11;
    VectorNormalize((Vector *)&local_28);
    fVar12 = local_20;
    fVar11 = local_24;
    fVar10 = local_28;
    iVar4 = *(int *)(this + 0x1b8);
    iVar8 = iVar4 + iVar8;
    iVar5 = iVar5 + iVar4;
    iVar4 = iVar4 + (param_1 + 1 + iVar1 + iVar3) * 0x90;
    fVar13 = *(float *)(iVar5 + 0x28) - *(float *)(iVar8 + 0x28);
    fVar17 = *(float *)(iVar5 + 0x2c) - *(float *)(iVar8 + 0x2c);
    fVar14 = *(float *)(iVar4 + 0x28) - *(float *)(iVar8 + 0x28);
    fVar16 = *(float *)(iVar5 + 0x30) - *(float *)(iVar8 + 0x30);
    fVar15 = *(float *)(iVar4 + 0x2c) - *(float *)(iVar8 + 0x2c);
    fVar18 = *(float *)(iVar4 + 0x30) - *(float *)(iVar8 + 0x30);
    local_28 = fVar15 * fVar16 - fVar18 * fVar17;
    local_24 = fVar18 * fVar13 - fVar16 * fVar14;
    local_20 = fVar17 * fVar14 - fVar13 * fVar15;
    VectorNormalize((Vector *)&local_28);
    local_38 = local_38 + 2;
    local_34 = local_34 + fVar10 + local_28;
    local_30 = local_30 + fVar11 + local_24;
    fVar9 = fVar9 + fVar12 + local_20;
  }
  fVar10 = 1.0 / (float)local_38;
  *(float *)param_4 = local_34 * fVar10;
  *(float *)(param_4 + 8) = fVar9 * fVar10;
  *(float *)(param_4 + 4) = local_30 * fVar10;
  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)