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 intoaddons/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.
Signatures + Functions block. The plugin uses
DHookCreateFromConf - DHooks reads return type, this-type,
calling convention, and argument types straight from the gamedata. Less
boilerplate in the plugin, types travel with the gamedata.
Gamedata KeyValues
DHooks plugin example
Type inference is best-effort from the C signature - sanity-check the DHooks types before shipping.