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 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.