L L4D2node

BuildDispSurfInit

0x00139750 · 918 bytes · __regparm3

_ZL17BuildDispSurfInitP7model_tP13CCoreDispInfoP11msurface2_t.isra.19

Decompiled

undefined (3 params)

/* BuildDispSurfInit(model_t*, CCoreDispInfo*, msurface2_t*) [clone .isra.19] */

void __regparm3 BuildDispSurfInit(model_t *param_1,CCoreDispInfo *param_2,msurface2_t *param_3)

{
  undefined4 *puVar1;
  model_t *pmVar2;
  model_t *pmVar3;
  int iVar4;
  int iVar5;
  float *pfVar6;
  uint local_158;
  model_t *local_154;
  undefined4 *local_150;
  float *local_14c;
  int local_140;
  undefined4 local_134;
  undefined4 local_130;
  undefined4 local_12c;
  undefined4 local_128;
  undefined4 local_124;
  undefined4 local_120;
  undefined4 local_11c [8];
  float local_fc;
  float local_f8;
  float local_f4;
  float local_f0;
  float local_ec;
  float local_e8;
  float local_d8;
  float local_d4;
  float local_d0;
  float local_cc;
  float local_c8;
  float local_c4;
  float local_c0;
  float local_bc;
  float local_b8;
  float local_b4;
  float local_b0;
  float local_ac;
  float local_a8;
  float local_a4;
  float local_a0;
  float local_9c [35];
  
  if ((param_2 != (CCoreDispInfo *)0x0) && (param_2[3] == (CCoreDispInfo)0x4)) {
    iVar5 = 1;
    local_9c[0] = (local_d4 - local_f8) * (local_e8 - local_f4) -
                  (local_d0 - local_f4) * (local_ec - local_f8);
    local_9c[1] = (local_d0 - local_f4) * (local_f0 - local_fc) -
                  (local_e8 - local_f4) * (local_d8 - local_fc);
    local_9c[2] = (local_ec - local_f8) * (local_d8 - local_fc) -
                  (local_f0 - local_fc) * (local_d4 - local_f8);
    VectorNormalize((Vector *)local_9c);
    local_cc = local_9c[0];
    local_158 = *(uint *)(param_1 + 0x188);
    local_c8 = local_9c[1];
    local_c4 = local_9c[2];
    local_c0 = local_9c[0];
    local_bc = local_9c[1];
    local_b8 = local_9c[2];
    local_b4 = local_9c[0];
    local_b0 = local_9c[1];
    local_ac = local_9c[2];
    local_a8 = local_9c[0];
    local_a4 = local_9c[1];
    local_a0 = local_9c[2];
    if (((byte)*param_2 & 8) != 0) {
      local_158 = local_158 | 1;
      iVar5 = 4;
    }
    local_140 = 0;
    local_14c = &local_fc;
    local_150 = local_11c;
    pfVar6 = &local_cc;
    *(undefined4 *)(param_1 + 0x14) = 4;
    pmVar3 = param_1;
    local_154 = param_1;
    do {
      *(float *)(pmVar3 + 0x18) = *local_14c;
      *(float *)(pmVar3 + 0x1c) = local_14c[1];
      *(float *)(pmVar3 + 0x20) = local_14c[2];
      *(float *)(pmVar3 + 0x48) = *pfVar6;
      *(float *)(pmVar3 + 0x4c) = pfVar6[1];
      *(float *)(pmVar3 + 0x50) = pfVar6[2];
      *(undefined4 *)(local_154 + 0x78) = *local_150;
      iVar4 = 0;
      *(undefined4 *)(local_154 + 0x7c) = local_150[1];
      puVar1 = (undefined4 *)((int)local_9c + local_140);
      pmVar2 = local_154;
      do {
        iVar4 = iVar4 + 1;
        *(undefined4 *)(pmVar2 + 0x98) = *puVar1;
        *(undefined4 *)(pmVar2 + 0x9c) = puVar1[1];
        puVar1 = puVar1 + 2;
        pmVar2 = pmVar2 + 0x20;
      } while (iVar4 < iVar5);
      local_140 = local_140 + 0x20;
      pmVar3 = pmVar3 + 0xc;
      pfVar6 = pfVar6 + 3;
      local_14c = local_14c + 3;
      local_150 = local_150 + 2;
      local_154 = local_154 + 8;
    } while (local_140 != 0x80);
    puVar1 = (undefined4 *)
             ((uint)(*(ushort *)(param_2 + 0x16) >> 1) * 0x50 + *(int *)(DAT_003a172c + 0x5c));
    local_134 = *puVar1;
    local_130 = puVar1[1];
    local_12c = puVar1[2];
    local_128 = puVar1[4];
    local_124 = puVar1[5];
    local_120 = puVar1[6];
    VectorNormalize((Vector *)&local_134);
    VectorNormalize((Vector *)&local_128);
    *(undefined4 *)(param_1 + 400) = local_134;
    *(undefined4 *)(param_1 + 0x194) = local_130;
    *(uint *)(param_1 + 0x188) = local_158;
    *(undefined4 *)(param_1 + 0x198) = local_12c;
    *(undefined4 *)(param_1 + 0x19c) = local_128;
    *(undefined4 *)(param_1 + 0x1a0) = local_124;
    *(undefined4 *)(param_1 + 0x1a4) = local_120;
    CCoreDispSurface::FindSurfPointStartIndex((CCoreDispSurface *)(param_1 + 0x10));
    CCoreDispSurface::AdjustSurfPointData((CCoreDispSurface *)(param_1 + 0x10));
    return;
  }
  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)