L L4D2node

InitPowerInfo

0x000d3ee0 · 747 bytes · __cdecl

_Z13InitPowerInfoP10CPowerInfoi

Decompiled

undefined (2 params)

/* InitPowerInfo(CPowerInfo*, int) */

void InitPowerInfo(CPowerInfo *param_1,int param_2)

{
  short sVar1;
  short sVar2;
  int iVar3;
  int iVar4;
  undefined **ppuVar5;
  undefined **ppuVar6;
  int iVar7;
  int iVar8;
  short sVar9;
  uint uVar10;
  CVertIndex *local_58;
  CPowerInfo *local_54;
  int local_50;
  CPowerInfo *local_40;
  CTriInfo *local_34;
  short local_30;
  short local_2e;
  undefined2 local_2c;
  undefined2 local_2a;
  short local_28;
  short local_26;
  short local_24;
  short local_22;
  short local_20;
  short local_1e;
  
  local_2a = 0;
  iVar3 = 1 << ((byte)param_2 & 0x1f);
  local_2c = 0;
  *(undefined2 *)(param_1 + 0xe8) = 0;
  *(int *)(param_1 + 0x28) = iVar3;
  iVar4 = iVar3 + 1;
  local_30 = (short)iVar4 + -1;
  *(int *)(param_1 + 0x24) = iVar4;
  *(int *)(param_1 + 0x30) = iVar4 * iVar4;
  *(undefined2 *)(param_1 + 0xea) = 0;
  sVar9 = (short)(iVar4 / 2);
  *(short *)(param_1 + 0x20) = sVar9;
  *(short *)(param_1 + 0x22) = sVar9;
  *(int *)(param_1 + 0x2c) = iVar4 / 2;
  *(undefined2 *)(param_1 + 0xec) = 0;
  *(short *)(param_1 + 0xee) = local_30;
  *(short *)(param_1 + 0xf0) = local_30;
  *(short *)(param_1 + 0xf2) = local_30;
  *(short *)(param_1 + 0xf4) = local_30;
  *(undefined2 *)(param_1 + 0xf6) = 0;
  local_20 = -1;
  local_1e = -1;
  local_26 = 0;
  local_28 = 0;
  local_2e = local_30;
  local_24 = local_30;
  local_22 = local_30;
  InitPowerInfo_R(param_1,param_2,(CVertIndex *)(param_1 + 0x20),(CVertIndex *)&local_30,
                  (CVertIndex *)&local_2c,(CVertIndex *)&local_28,(CVertIndex *)&local_24,
                  (CVertIndex *)&local_20,0);
  *(int *)(param_1 + 0x1c) = param_2;
  local_34 = *(CTriInfo **)(param_1 + 0x14);
  InitPowerInfoTriInfos_R(param_1,(CVertIndex *)(param_1 + 0x20),&local_34,param_2,0);
  local_50 = 0;
  local_58 = (CVertIndex *)(param_1 + 0x48);
  local_54 = param_1 + 0x68;
  do {
    GetEdgeVertIndex(iVar4,local_50,0,local_58);
    GetEdgeVertIndex(iVar4,local_50,1,(CVertIndex *)&local_28);
    uVar10 = local_50 + 2U & 3;
    *(short *)(local_58 + 0x12) = local_26 - *(short *)(local_58 + 2);
    *(short *)(local_58 + 0x10) = local_28 - *(short *)local_58;
    GetEdgeVertIndex(iVar4,uVar10,0,(CVertIndex *)&local_24);
    GetEdgeVertIndex(iVar4,uVar10,1,(CVertIndex *)&local_20);
    local_40 = local_54;
    ppuVar5 = (undefined **)&DAT_0033c128;
    do {
      ppuVar6 = ppuVar5 + 4;
      sVar1 = *(short *)ppuVar5;
      sVar2 = *(short *)(ppuVar5 + 1);
      *(short *)local_40 =
           (local_22 - sVar9) * *(short *)(ppuVar5 + -1) +
           (local_24 - sVar9) * *(short *)(ppuVar5 + -2) + sVar9;
      *(short *)(local_40 + 2) = (local_22 - sVar9) * sVar2 + (local_24 - sVar9) * sVar1 + sVar9;
      sVar1 = *(short *)(ppuVar5 + -1);
      sVar2 = *(short *)(ppuVar5 + -2);
      *(short *)(local_40 + 0x42) =
           (local_20 - local_24) * *(short *)ppuVar5 +
           (local_1e - local_22) * *(short *)(ppuVar5 + 1);
      *(short *)(local_40 + 0x40) = (local_20 - local_24) * sVar2 + (local_1e - local_22) * sVar1;
      ppuVar5 = ppuVar6;
      local_40 = local_40 + 4;
    } while (ppuVar6 != &PTR_DAT_0033c168);
    local_50 = local_50 + 1;
    local_58 = local_58 + 4;
    local_54 = local_54 + 0x10;
  } while (local_50 != 4);
  if (param_2 < 2) {
    iVar4 = 1;
  }
  else {
    iVar8 = 0;
    iVar4 = 1;
    iVar7 = 0;
    do {
      iVar8 = iVar8 + iVar4;
      iVar4 = iVar4 * 4;
      *(int *)(param_1 + iVar7 + param_2 * 4 + 0x30) = iVar8;
      iVar7 = iVar7 + -4;
    } while (iVar7 != param_2 * -4 + 4);
    iVar4 = iVar4 + iVar8;
  }
  *(int *)(param_1 + 0x34) = iVar4;
  *(int *)(param_1 + 0x18) = iVar3 * iVar3 * 2;
  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)