CDispInfo::TestAddDecalTri
0x00132630 · 997 bytes · __thiscall
_ZN9CDispInfo15TestAddDecalTriEitP10CDispDecal
Decompiled
undefined (4 params)
/* CDispInfo::TestAddDecalTri(int, unsigned short, CDispDecal*) */
void __thiscall
CDispInfo::TestAddDecalTri(CDispInfo *this,int param_1,ushort param_2,CDispDecal *param_3)
{
float fVar1;
float fVar2;
float fVar3;
float fVar4;
int iVar5;
decal_t *pdVar6;
int iVar7;
int iVar8;
int iVar9;
float *pfVar10;
CDecalVert *pCVar11;
undefined4 *puVar12;
undefined4 *puVar13;
int iVar14;
int iVar15;
undefined4 *puVar16;
float *pfVar17;
float *pfVar18;
uint uVar19;
undefined4 *puVar20;
float fVar21;
float fVar22;
float fVar23;
float fVar24;
float fVar25;
float fVar26;
int local_a0;
ushort local_8e [3];
float local_88;
float local_84;
float local_80;
CDecalVert local_7c [4];
undefined4 local_78 [26];
iVar5 = *(int *)(this + 0xe4);
pdVar6 = *(decal_t **)(param_3 + 0x14);
iVar7 = *(int *)(this + 0xd8);
iVar14 = (param_1 + 1) * iVar5;
local_8e[0] = *(short *)(iVar7 + param_1 * 2 * iVar5) - *(short *)(this + 0x2c);
iVar8 = *(int *)(this + 0x88);
uVar19 = (uint)local_8e[0];
local_8e[1] = *(short *)(iVar7 + iVar14 * 2) - *(short *)(this + 0x2c);
local_8e[2] = *(short *)(iVar7 + (iVar5 + iVar14) * 2) - *(short *)(this + 0x2c);
pfVar18 = (float *)(*(int *)(this + 0x34) * uVar19 + iVar8);
pfVar17 = (float *)((uint)local_8e[1] * *(int *)(this + 0x34) + iVar8);
pfVar10 = (float *)((uint)local_8e[2] * *(int *)(this + 0x34) + iVar8);
fVar21 = *pfVar17 - *pfVar18;
fVar24 = *pfVar10 - *pfVar18;
fVar23 = pfVar17[1] - pfVar18[1];
fVar22 = pfVar10[1] - pfVar18[1];
fVar26 = pfVar10[2] - pfVar18[2];
fVar25 = pfVar17[2] - pfVar18[2];
local_88 = fVar22 * fVar25 - fVar26 * fVar23;
local_84 = fVar26 * fVar21 - fVar25 * fVar24;
local_80 = fVar23 * fVar24 - fVar21 * fVar22;
VectorNormalize((Vector *)&local_88);
if ((*(float *)(pdVar6 + 0x18) - pfVar18[1]) * local_84 +
(*(float *)(pdVar6 + 0x14) - *pfVar18) * local_88 +
(*(float *)(pdVar6 + 0x1c) - pfVar18[2]) * local_80 < *(float *)(param_3 + 0x44)) {
iVar5 = *(int *)(this + 0x34);
iVar15 = 0;
iVar7 = *(int *)(this + 0x88);
iVar8 = *(int *)(this + 0xa4);
iVar14 = *(int *)(this + 0x50);
fVar21 = *(float *)(param_3 + 0x28);
fVar22 = *(float *)(param_3 + 0x20);
fVar23 = *(float *)(param_3 + 0x2c);
fVar24 = *(float *)(param_3 + 0x24);
fVar25 = *(float *)(param_3 + 0x30);
iVar9 = *(int *)(param_3 + 0x14);
fVar26 = *(float *)(param_3 + 0x34);
pCVar11 = local_7c;
while( true ) {
iVar15 = iVar15 + 1;
pfVar10 = (float *)(iVar5 * uVar19 + iVar7);
pfVar17 = (float *)(uVar19 * iVar14 + iVar8);
fVar1 = *pfVar10;
*(float *)pCVar11 = fVar1;
fVar2 = pfVar10[1];
*(float *)(pCVar11 + 4) = fVar2;
fVar3 = pfVar10[2];
*(float *)(pCVar11 + 8) = fVar3;
fVar4 = *pfVar17;
*(float *)(pCVar11 + 0x1c) = pfVar17[1];
*(float *)(pCVar11 + 0x18) = fVar4;
fVar4 = *(float *)(iVar9 + 0x2c);
*(float *)(pCVar11 + 0x14) =
(fVar23 * fVar1 - *(float *)(iVar9 + 0x30)) + 0.5 + fVar25 * fVar2 + fVar26 * fVar3;
*(float *)(pCVar11 + 0x10) = (fVar1 * fVar22 - fVar4) + 0.5 + fVar2 * fVar24 + fVar3 * fVar21;
if (iVar15 == 3) break;
uVar19 = (uint)local_8e[iVar15];
pCVar11 = pCVar11 + 0x20;
}
puVar12 = (undefined4 *)
R_DoDecalSHClip(local_7c,(CDecalVert *)0x0,pdVar6,3,(Vector *)&vec3_origin);
uVar19 = (uint)*(ushort *)(pdVar6 + 0x4e);
if (2 < uVar19) {
if (6 < uVar19) {
uVar19 = 6;
}
puVar13 = (undefined4 *)AllocateDispDecalFragment(this,param_2,uVar19);
local_a0 = 0;
puVar16 = puVar12 + 4;
do {
iVar5 = local_a0 + 1;
local_a0 = local_a0 * 0x20;
puVar20 = (undefined4 *)(puVar13[1] + local_a0);
*puVar20 = *puVar12;
puVar20[1] = puVar12[1];
puVar20[2] = puVar12[2];
iVar7 = puVar13[1];
*(undefined4 *)(iVar7 + local_a0 + 0x10) = *puVar16;
*(undefined4 *)(iVar7 + local_a0 + 0x14) = puVar16[1];
iVar7 = puVar13[1];
*(undefined4 *)(local_a0 + iVar7 + 0x18) = puVar12[6];
*(undefined4 *)(local_a0 + iVar7 + 0x1c) = puVar12[7];
puVar16 = puVar16 + 8;
puVar12 = puVar12 + 8;
local_a0 = iVar5;
} while (iVar5 < (int)uVar19);
*puVar13 = pdVar6;
*(char *)(puVar13 + 2) = (char)uVar19;
*(short *)(param_3 + 0xe) = *(short *)(param_3 + 0xe) + (short)uVar19;
*(ushort *)(param_3 + 0x10) = *(short *)(param_3 + 0x10) + -2 + (ushort)*(byte *)(puVar13 + 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.