Overlay_TriTLToBR
0x001d03f0 · 3262 bytes · __cdecl
_Z17Overlay_TriTLToBRP9CDispInfoP11CMeshReaderR6VectorS4_ffiRKS3_
Decompiled
undefined (8 params)
/* Overlay_TriTLToBR(CDispInfo*, CMeshReader*, Vector&, Vector&, float, float, int, Vector const&)
*/
void Overlay_TriTLToBR(CDispInfo *param_1,CMeshReader *param_2,Vector *param_3,Vector *param_4,
float param_5,float param_6,int param_7,Vector *param_8)
{
float fVar1;
float fVar2;
char cVar3;
int iVar4;
int iVar5;
float *pfVar6;
int iVar7;
int iVar8;
int iVar9;
float *pfVar10;
int iVar11;
int iVar12;
float *pfVar13;
Vector *pVVar14;
int iVar15;
int iVar16;
float *pfVar17;
float fVar18;
float fVar19;
Vector *local_c8;
int local_c4;
int local_b8 [3];
float local_ac;
float local_a8;
float local_a4;
int local_a0 [3];
float local_94;
float local_90;
float local_8c;
float local_88;
float local_84;
float local_80;
float local_7c;
float local_78;
float local_74;
float local_70;
float local_6c;
float local_68;
float local_64;
float local_60;
float local_5c;
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;
iVar15 = (int)param_6;
iVar4 = (int)param_5;
iVar11 = iVar4 + 1;
if (iVar4 + 1 == param_7) {
iVar11 = iVar4;
}
iVar8 = iVar15 + 1;
if (param_7 == iVar15 + 1) {
iVar8 = iVar15;
}
if (((param_6 + param_5) - (float)iVar15) - (float)iVar4 < 1.000001) {
local_c4 = 0;
iVar5 = *(int *)(param_2 + 0x60);
iVar9 = iVar15 * param_7 + iVar4;
iVar16 = iVar15 * param_7 + iVar11;
iVar12 = param_7 * iVar8 + iVar4;
iVar7 = *(int *)(param_2 + 0xc);
pfVar13 = &local_88;
pVVar14 = (Vector *)&local_64;
pfVar17 = &local_40;
local_b8[0] = iVar9;
local_b8[1] = iVar12;
local_b8[2] = iVar16;
while( true ) {
pfVar10 = (float *)(iVar5 + iVar7 * iVar9);
pfVar6 = (float *)(*(int *)param_2 * iVar9 + *(int *)(param_2 + 0x54));
fVar18 = pfVar10[2];
fVar19 = *pfVar10;
fVar1 = *pfVar6;
fVar2 = pfVar6[2];
pfVar13[1] = pfVar10[1] * 0.1 + pfVar6[1];
*pfVar13 = fVar19 * 0.1 + fVar1;
pfVar13[2] = fVar18 * 0.1 + fVar2;
CDispInfo::GetFlatVert((int)&local_94);
iVar7 = *(int *)(param_2 + 0xc);
*(float *)pVVar14 = local_94;
iVar5 = *(int *)(param_2 + 0x60);
local_c4 = local_c4 + 1;
*(float *)(pVVar14 + 4) = local_90;
*(float *)(pVVar14 + 8) = local_8c;
pfVar6 = (float *)(iVar9 * iVar7 + iVar5);
fVar18 = pfVar6[1];
fVar19 = *pfVar6;
pfVar17[2] = pfVar6[2];
pfVar17[1] = fVar18;
*pfVar17 = fVar19;
if (local_c4 == 3) break;
iVar9 = local_b8[local_c4];
pfVar13 = pfVar13 + 3;
pVVar14 = pVVar14 + 0xc;
pfVar17 = pfVar17 + 3;
}
if (iVar4 != iVar11) {
if (iVar15 != iVar8) {
cVar3 = CalcBarycentricCooefs
((Vector *)&local_64,(Vector *)&local_58,(Vector *)&local_4c,param_8,
&local_ac,&local_a8,&local_a4);
if (cVar3 == '\0') {
local_c4 = 0;
iVar4 = *(int *)(param_2 + 0xc);
iVar15 = *(int *)(param_2 + 0x60);
local_a0[1] = iVar11 + param_7 * iVar8;
pVVar14 = (Vector *)&local_64;
pfVar13 = &local_40;
pfVar17 = &local_88;
local_a0[0] = iVar12;
local_a0[2] = iVar16;
while( true ) {
pfVar10 = (float *)(iVar15 + iVar4 * iVar12);
pfVar6 = (float *)(*(int *)param_2 * iVar12 + *(int *)(param_2 + 0x54));
fVar18 = pfVar10[2];
fVar19 = *pfVar10;
fVar1 = *pfVar6;
fVar2 = pfVar6[2];
pfVar17[1] = pfVar10[1] * 0.1 + pfVar6[1];
*pfVar17 = fVar19 * 0.1 + fVar1;
pfVar17[2] = fVar18 * 0.1 + fVar2;
CDispInfo::GetFlatVert((int)&local_94);
iVar4 = *(int *)(param_2 + 0xc);
*(float *)pVVar14 = local_94;
iVar15 = *(int *)(param_2 + 0x60);
local_c4 = local_c4 + 1;
*(float *)(pVVar14 + 4) = local_90;
*(float *)(pVVar14 + 8) = local_8c;
pfVar6 = (float *)(iVar12 * iVar4 + iVar15);
fVar18 = pfVar6[1];
fVar19 = *pfVar6;
pfVar13[2] = pfVar6[2];
pfVar13[1] = fVar18;
*pfVar13 = fVar19;
if (local_c4 == 3) break;
iVar12 = local_a0[local_c4];
pVVar14 = pVVar14 + 0xc;
pfVar13 = pfVar13 + 3;
pfVar17 = pfVar17 + 3;
}
CalcBarycentricCooefs
((Vector *)&local_64,(Vector *)&local_58,(Vector *)&local_4c,param_8,&local_94,
&local_90,&local_8c);
local_ac = local_94;
local_a4 = local_8c;
local_a8 = local_90;
}
goto LAB_001d0ef8;
}
fVar18 = (*(float *)param_8 - local_64) * (*(float *)param_8 - local_64) +
(*(float *)(param_8 + 8) - local_5c) * (*(float *)(param_8 + 8) - local_5c) +
(*(float *)(param_8 + 4) - local_60) * (*(float *)(param_8 + 4) - local_60);
local_64 = local_4c - local_64;
local_4c = local_48 - local_60;
goto LAB_001d0bb9;
}
if (iVar15 == iVar8) goto LAB_001d0ff0;
fVar18 = SQRT((*(float *)param_8 - local_64) * (*(float *)param_8 - local_64) +
(*(float *)(param_8 + 4) - local_60) * (*(float *)(param_8 + 4) - local_60) +
(*(float *)(param_8 + 8) - local_5c) * (*(float *)(param_8 + 8) - local_5c)) /
SQRT((local_58 - local_64) * (local_58 - local_64) +
(local_50 - local_5c) * (local_50 - local_5c) +
(local_54 - local_60) * (local_54 - local_60));
*(float *)(param_3 + 4) = (local_78 - local_84) * fVar18 + local_84;
*(float *)(param_3 + 8) = (local_74 - local_80) * fVar18 + local_80;
*(float *)param_3 = (local_7c - local_88) * fVar18 + local_88;
local_3c = (local_30 - local_3c) * fVar18 + local_3c;
local_38 = (local_2c - local_38) * fVar18 + local_38;
local_28 = local_34;
}
else {
local_c4 = 0;
iVar16 = iVar4 + iVar8 * param_7;
iVar9 = *(int *)(param_2 + 0x60);
local_b8[1] = iVar8 * param_7 + iVar11;
iVar12 = param_7 * iVar15 + iVar11;
iVar5 = *(int *)(param_2 + 0xc);
iVar7 = iVar16;
pfVar13 = &local_88;
pVVar14 = (Vector *)&local_64;
pfVar17 = &local_40;
local_b8[0] = iVar16;
local_b8[2] = iVar12;
while( true ) {
pfVar10 = (float *)(iVar9 + iVar5 * iVar7);
pfVar6 = (float *)(*(int *)param_2 * iVar7 + *(int *)(param_2 + 0x54));
fVar18 = pfVar10[2];
fVar19 = *pfVar10;
fVar1 = *pfVar6;
fVar2 = pfVar6[2];
pfVar13[1] = pfVar10[1] * 0.1 + pfVar6[1];
*pfVar13 = fVar19 * 0.1 + fVar1;
pfVar13[2] = fVar18 * 0.1 + fVar2;
CDispInfo::GetFlatVert((int)&local_94);
iVar5 = *(int *)(param_2 + 0xc);
*(float *)pVVar14 = local_94;
iVar9 = *(int *)(param_2 + 0x60);
local_c4 = local_c4 + 1;
*(float *)(pVVar14 + 4) = local_90;
*(float *)(pVVar14 + 8) = local_8c;
pfVar6 = (float *)(iVar7 * iVar5 + iVar9);
fVar18 = pfVar6[1];
fVar19 = *pfVar6;
pfVar17[2] = pfVar6[2];
pfVar17[1] = fVar18;
*pfVar17 = fVar19;
if (local_c4 == 3) break;
iVar7 = local_b8[local_c4];
pfVar13 = pfVar13 + 3;
pVVar14 = pVVar14 + 0xc;
pfVar17 = pfVar17 + 3;
}
if (iVar4 == iVar11) {
if (iVar15 == iVar8) {
LAB_001d0ff0:
*(float *)param_3 = local_88;
*(float *)(param_3 + 4) = local_84;
*(float *)(param_3 + 8) = local_80;
*(float *)param_4 = local_40;
*(float *)(param_4 + 4) = local_3c;
*(float *)(param_4 + 8) = local_38;
goto LAB_001d0c97;
}
fVar19 = local_4c - local_64;
fVar18 = (*(float *)param_8 - local_64) * (*(float *)param_8 - local_64) +
(*(float *)(param_8 + 8) - local_5c) * (*(float *)(param_8 + 8) - local_5c) +
(*(float *)(param_8 + 4) - local_60) * (*(float *)(param_8 + 4) - local_60);
local_4c = local_48 - local_60;
local_64 = local_44 - local_5c;
}
else {
if (iVar15 != iVar8) {
/* try { // try from 001d0814 to 001d08d8 has its CatchHandler @ 001d10f1 */
cVar3 = CalcBarycentricCooefs
((Vector *)&local_64,(Vector *)&local_58,(Vector *)&local_4c,param_8,
&local_ac,&local_a8,&local_a4);
if (cVar3 == '\0') {
local_c4 = 0;
iVar11 = *(int *)(param_2 + 0x60);
iVar4 = iVar4 + param_7 * iVar15;
pfVar13 = &local_88;
iVar15 = *(int *)(param_2 + 0xc);
pfVar17 = &local_40;
local_c8 = (Vector *)&local_64;
local_a0[0] = iVar4;
local_a0[1] = iVar16;
local_a0[2] = iVar12;
while( true ) {
pfVar10 = (float *)(iVar11 + iVar15 * iVar4);
fVar18 = pfVar10[2];
fVar19 = *pfVar10;
pfVar6 = (float *)(*(int *)param_2 * iVar4 + *(int *)(param_2 + 0x54));
fVar1 = pfVar6[2];
fVar2 = *pfVar6;
pfVar13[1] = pfVar10[1] * 0.1 + pfVar6[1];
pfVar13[2] = fVar18 * 0.1 + fVar1;
*pfVar13 = fVar19 * 0.1 + fVar2;
CDispInfo::GetFlatVert((int)&local_94);
pfVar13 = pfVar13 + 3;
local_c4 = local_c4 + 1;
*(float *)local_c8 = local_94;
iVar11 = *(int *)(param_2 + 0x60);
*(float *)(local_c8 + 4) = local_90;
*(float *)(local_c8 + 8) = local_8c;
iVar15 = *(int *)(param_2 + 0xc);
pfVar6 = (float *)(iVar4 * iVar15 + iVar11);
fVar18 = pfVar6[1];
fVar19 = *pfVar6;
pfVar17[2] = pfVar6[2];
pfVar17[1] = fVar18;
*pfVar17 = fVar19;
if (local_c4 == 3) break;
iVar4 = local_a0[local_c4];
pfVar17 = pfVar17 + 3;
local_c8 = local_c8 + 0xc;
}
/* try { // try from 001d1082 to 001d1086 has its CatchHandler @ 001d10f1 */
CalcBarycentricCooefs
((Vector *)&local_64,(Vector *)&local_58,(Vector *)&local_4c,param_8,&local_94,
&local_90,&local_8c);
local_ac = local_94;
local_a4 = local_8c;
local_a8 = local_90;
}
LAB_001d0ef8:
*(float *)(param_3 + 4) = local_78 * local_a8 + local_6c * local_a4 + local_84 * local_ac;
*(float *)(param_3 + 8) = local_74 * local_a8 + local_68 * local_a4 + local_80 * local_ac;
*(float *)param_3 = local_7c * local_a8 + local_70 * local_a4 + local_88 * local_ac;
*(float *)(param_4 + 4) = local_30 * local_a8 + local_24 * local_a4 + local_3c * local_ac;
*(float *)(param_4 + 8) = local_2c * local_a8 + local_20 * local_a4 + local_38 * local_ac;
*(float *)param_4 = local_a8 * local_34 + local_a4 * local_28 + local_ac * local_40;
goto LAB_001d0c97;
}
local_4c = local_4c - local_64;
fVar18 = (*(float *)(param_8 + 4) - local_60) * (*(float *)(param_8 + 4) - local_60) +
(*(float *)param_8 - local_64) * (*(float *)param_8 - local_64) +
(*(float *)(param_8 + 8) - local_5c) * (*(float *)(param_8 + 8) - local_5c);
local_64 = local_48 - local_60;
LAB_001d0bb9:
fVar19 = local_44 - local_5c;
}
fVar18 = SQRT(fVar18) / SQRT(local_64 * local_64 + local_4c * local_4c + fVar19 * fVar19);
*(float *)(param_3 + 4) = (local_6c - local_84) * fVar18 + local_84;
*(float *)(param_3 + 8) = (local_68 - local_80) * fVar18 + local_80;
*(float *)param_3 = (local_70 - local_88) * fVar18 + local_88;
local_3c = (local_24 - local_3c) * fVar18 + local_3c;
local_38 = (local_20 - local_38) * fVar18 + local_38;
}
*(float *)(param_4 + 4) = local_3c;
*(float *)(param_4 + 8) = local_38;
*(float *)param_4 = (local_28 - local_40) * fVar18 + local_40;
LAB_001d0c97:
VectorNormalize(param_4);
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.