CCoreDispInfo::GenerateDispSurf
0x000c0850 · 1021 bytes · __thiscall
_ZN13CCoreDispInfo16GenerateDispSurfEv
Decompiled
undefined (1 param)
/* CCoreDispInfo::GenerateDispSurf() */
void __thiscall CCoreDispInfo::GenerateDispSurf(CCoreDispInfo *this)
{
int iVar1;
float fVar2;
float *pfVar3;
int iVar4;
float *pfVar5;
int iVar6;
CCoreDispInfo *pCVar7;
int iVar8;
float fVar9;
float fVar10;
float fVar11;
float fVar12;
float fVar13;
float fVar14;
float fVar15;
float fVar16;
int local_7c;
float local_58;
float local_54;
float local_50;
float local_4c;
float local_48;
float local_44;
float local_40;
float local_3c;
float local_38;
float local_34;
float local_30;
float local_2c;
float local_28;
float local_24;
float local_20;
float local_1c [3];
pfVar5 = &local_4c;
pCVar7 = this;
do {
pfVar3 = pfVar5 + 3;
*pfVar5 = *(float *)(pCVar7 + 0x18);
pfVar5[1] = *(float *)(pCVar7 + 0x1c);
pfVar5[2] = *(float *)(pCVar7 + 0x20);
pfVar5 = pfVar3;
pCVar7 = pCVar7 + 0xc;
} while (pfVar3 != local_1c);
local_58 = 0.0;
local_54 = 0.0;
local_50 = 0.0;
iVar4 = 1 << ((byte)*(undefined4 *)(this + 0xc) & 0x1f);
iVar1 = iVar4 + 1;
fVar14 = 1.0 / (float)iVar4;
if (*(float *)(this + 8) != 0.0) {
fVar13 = *(float *)(this + 0x24) - *(float *)(this + 0x18);
fVar12 = *(float *)(this + 0x3c) - *(float *)(this + 0x18);
fVar15 = *(float *)(this + 0x28) - *(float *)(this + 0x1c);
fVar10 = *(float *)(this + 0x40) - *(float *)(this + 0x1c);
fVar11 = *(float *)(this + 0x2c) - *(float *)(this + 0x20);
fVar9 = *(float *)(this + 0x44) - *(float *)(this + 0x20);
local_54 = fVar9 * fVar13 - fVar11 * fVar12;
local_58 = fVar10 * fVar11 - fVar9 * fVar15;
local_50 = fVar12 * fVar15 - fVar10 * fVar13;
VectorNormalize((Vector *)&local_58);
fVar9 = *(float *)(this + 8);
local_58 = local_58 * fVar9;
local_54 = local_54 * fVar9;
local_50 = fVar9 * local_50;
}
if (0 < iVar1) {
local_7c = 0;
iVar4 = 0;
do {
fVar9 = (float)iVar4;
iVar8 = 0;
fVar11 = (local_3c - local_48) * fVar14 * fVar9 + local_48;
fVar15 = (local_40 - local_4c) * fVar14 * fVar9 + local_4c;
fVar12 = (local_38 - local_44) * fVar14 * fVar9 + local_44;
iVar6 = local_7c;
do {
fVar10 = (float)iVar8;
pfVar5 = (float *)(*(int *)(this + 0x1b8) + iVar6);
fVar16 = (((local_34 - local_28) * fVar14 * fVar9 + local_28) - fVar15) * fVar14 * fVar10 +
fVar15;
fVar13 = fVar10 * (((local_30 - local_24) * fVar14 * fVar9 + local_24) - fVar11) * fVar14 +
fVar11;
fVar10 = fVar10 * (((local_2c - local_20) * fVar14 * fVar9 + local_20) - fVar12) * fVar14 +
fVar12;
pfVar5[0xd] = fVar16;
pfVar5[0xe] = fVar13;
pfVar5[0xf] = fVar10;
pfVar5[10] = fVar16;
pfVar5[0xb] = fVar13;
pfVar5[0xc] = fVar10;
if (*(float *)(this + 8) != 0.0) {
fVar10 = fVar10 + local_50;
fVar13 = fVar13 + local_54;
fVar16 = fVar16 + local_58;
}
fVar2 = pfVar5[3];
iVar8 = iVar8 + 1;
iVar6 = iVar6 + 0x90;
pfVar5[0xb] = pfVar5[1] * fVar2 + pfVar5[8] + fVar13;
pfVar5[0xc] = pfVar5[2] * fVar2 + pfVar5[9] + fVar10;
pfVar5[10] = fVar2 * *pfVar5 + pfVar5[7] + fVar16;
} while (iVar8 != iVar1);
iVar4 = iVar4 + 1;
local_7c = local_7c + iVar1 * 0x90;
} while (iVar4 != iVar1);
}
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.