L L4D2node

Surf_ComputeCentroid

0x001678a0 · 564 bytes · __cdecl

_Z20Surf_ComputeCentroidP11msurface2_tP6Vector

Decompiled

undefined (2 params)

/* Surf_ComputeCentroid(msurface2_t*, Vector*) */

void Surf_ComputeCentroid(msurface2_t *param_1,Vector *param_2)

{
  float *pfVar1;
  float fVar2;
  float fVar3;
  float fVar4;
  float fVar5;
  float fVar6;
  float fVar7;
  uint uVar8;
  int iVar9;
  int iVar10;
  int iVar11;
  int iVar12;
  float fVar13;
  float fVar14;
  float fVar15;
  float fVar16;
  float fVar17;
  float fVar18;
  float fVar19;
  float local_50;
  float local_4c;
  float local_48;
  float local_24;
  
  uVar8 = *(uint *)param_1;
  iVar9 = *(int *)(param_1 + 8);
  *(undefined4 *)param_2 = 0;
  *(undefined4 *)(param_2 + 4) = 0;
  iVar11 = DAT_003a172c;
  *(undefined4 *)(param_2 + 8) = 0;
  iVar12 = *(int *)(iVar11 + 0x88);
  iVar11 = *(int *)(iVar11 + 0x20);
  pfVar1 = (float *)(iVar11 + (uint)*(ushort *)(iVar12 + iVar9 * 2) * 0xc);
  fVar2 = *pfVar1;
  fVar3 = pfVar1[1];
  fVar4 = pfVar1[2];
  if (2 < uVar8 >> 0x18) {
    local_50 = 0.0;
    iVar10 = 0;
    local_4c = 0.0;
    local_48 = 0.0;
    local_24 = 0.0;
    while( true ) {
      iVar12 = iVar12 + iVar9 * 2 + iVar10;
      iVar10 = iVar10 + 2;
      pfVar1 = (float *)(iVar11 + (uint)*(ushort *)(iVar12 + 2) * 0xc);
      fVar5 = *pfVar1;
      fVar6 = pfVar1[1];
      fVar7 = pfVar1[2];
      fVar16 = fVar6 - fVar3;
      fVar17 = fVar7 - fVar4;
      pfVar1 = (float *)(iVar11 + (uint)*(ushort *)(iVar12 + 4) * 0xc);
      fVar18 = *pfVar1 - fVar5;
      fVar13 = pfVar1[1] - fVar6;
      fVar15 = fVar5 - fVar2;
      fVar19 = pfVar1[2] - fVar7;
      fVar14 = fVar13 * fVar17 - fVar19 * fVar16;
      fVar13 = fVar16 * fVar18 - fVar15 * fVar13;
      fVar15 = fVar19 * fVar15 - fVar17 * fVar18;
      fVar13 = SQRT(fVar13 * fVar13 + fVar14 * fVar14 + fVar15 * fVar15);
      local_24 = local_24 + fVar13;
      fVar13 = fVar13 * 0.33333334;
      local_48 = (*pfVar1 + fVar5 + fVar2) * fVar13 + local_48;
      local_4c = (fVar6 + pfVar1[1] + fVar3) * fVar13 + local_4c;
      local_50 = (pfVar1[2] + fVar7 + fVar4) * fVar13 + local_50;
      *(float *)param_2 = local_48;
      *(float *)(param_2 + 4) = local_4c;
      *(float *)(param_2 + 8) = local_50;
      if (iVar10 == (uVar8 >> 0x18) * 2 + -4) break;
      iVar12 = *(int *)(DAT_003a172c + 0x88);
      iVar11 = *(int *)(DAT_003a172c + 0x20);
    }
    if (local_24 != 0.0) {
      local_24 = 1.0 / local_24;
      *(float *)param_2 = local_48 * local_24;
      *(float *)(param_2 + 4) = local_4c * local_24;
      *(float *)(param_2 + 8) = local_50 * local_24;
    }
  }
  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)