Overlay_TriBLToTR
0x001d1100 · 3264 bytes · __cdecl
_Z17Overlay_TriBLToTRP9CDispInfoP11CMeshReaderR6VectorS4_ffiRKS3_
Decompiled
undefined (8 params)
/* Overlay_TriBLToTR(CDispInfo*, CMeshReader*, Vector&, Vector&, float, float, int, Vector const&)
*/
void Overlay_TriBLToTR(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;
float *pfVar5;
int iVar6;
int iVar7;
float *pfVar8;
int iVar9;
int iVar10;
float *pfVar11;
int iVar12;
int iVar13;
int iVar14;
float *pfVar15;
Vector *pVVar16;
int iVar17;
float fVar18;
float fVar19;
int local_e4;
float *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;
iVar14 = (int)param_5;
iVar17 = (int)param_6;
iVar9 = iVar14 + 1;
if (iVar14 + 1 == param_7) {
iVar9 = iVar14;
}
iVar10 = iVar17 + 1;
if (param_7 == iVar17 + 1) {
iVar10 = iVar17;
}
if (param_6 - (float)iVar17 <= param_5 - (float)iVar14) {
local_c4 = 0;
iVar4 = iVar14 + iVar17 * param_7;
local_b8[2] = iVar17 * param_7 + iVar9;
iVar12 = *(int *)(param_2 + 0x60);
iVar6 = param_7 * iVar10 + iVar9;
iVar7 = *(int *)(param_2 + 0xc);
iVar13 = iVar4;
pfVar15 = &local_88;
pVVar16 = (Vector *)&local_64;
pfVar8 = &local_40;
local_b8[0] = iVar4;
local_b8[1] = iVar6;
while( true ) {
pfVar11 = (float *)(iVar12 + iVar7 * iVar13);
pfVar5 = (float *)(*(int *)param_2 * iVar13 + *(int *)(param_2 + 0x54));
fVar18 = pfVar11[2];
fVar19 = *pfVar11;
fVar1 = *pfVar5;
fVar2 = pfVar5[2];
pfVar15[1] = pfVar11[1] * 0.1 + pfVar5[1];
*pfVar15 = fVar19 * 0.1 + fVar1;
pfVar15[2] = fVar18 * 0.1 + fVar2;
CDispInfo::GetFlatVert((int)&local_94);
iVar7 = *(int *)(param_2 + 0xc);
*(float *)pVVar16 = local_94;
iVar12 = *(int *)(param_2 + 0x60);
local_c4 = local_c4 + 1;
*(float *)(pVVar16 + 4) = local_90;
*(float *)(pVVar16 + 8) = local_8c;
pfVar5 = (float *)(iVar13 * iVar7 + iVar12);
fVar18 = pfVar5[1];
fVar19 = *pfVar5;
pfVar8[2] = pfVar5[2];
pfVar8[1] = fVar18;
*pfVar8 = fVar19;
if (local_c4 == 3) break;
iVar13 = local_b8[local_c4];
pfVar15 = pfVar15 + 3;
pVVar16 = pVVar16 + 0xc;
pfVar8 = pfVar8 + 3;
}
if (iVar14 != iVar9) {
if (iVar17 != iVar10) {
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;
iVar9 = *(int *)(param_2 + 0xc);
iVar17 = *(int *)(param_2 + 0x60);
local_a0[1] = iVar14 + param_7 * iVar10;
pVVar16 = (Vector *)&local_64;
pfVar15 = &local_40;
pfVar8 = &local_88;
local_a0[0] = iVar4;
local_a0[2] = iVar6;
while( true ) {
pfVar11 = (float *)(iVar17 + iVar9 * iVar4);
pfVar5 = (float *)(*(int *)param_2 * iVar4 + *(int *)(param_2 + 0x54));
fVar18 = pfVar11[2];
fVar19 = *pfVar11;
fVar1 = *pfVar5;
fVar2 = pfVar5[2];
pfVar8[1] = pfVar11[1] * 0.1 + pfVar5[1];
*pfVar8 = fVar19 * 0.1 + fVar1;
pfVar8[2] = fVar18 * 0.1 + fVar2;
CDispInfo::GetFlatVert((int)&local_94);
iVar9 = *(int *)(param_2 + 0xc);
*(float *)pVVar16 = local_94;
iVar17 = *(int *)(param_2 + 0x60);
local_c4 = local_c4 + 1;
*(float *)(pVVar16 + 4) = local_90;
*(float *)(pVVar16 + 8) = local_8c;
pfVar5 = (float *)(iVar4 * iVar9 + iVar17);
fVar18 = pfVar5[1];
fVar19 = *pfVar5;
pfVar15[2] = pfVar5[2];
pfVar15[1] = fVar18;
*pfVar15 = fVar19;
if (local_c4 == 3) break;
iVar4 = local_a0[local_c4];
pVVar16 = pVVar16 + 0xc;
pfVar15 = pfVar15 + 3;
pfVar8 = pfVar8 + 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_001d1c08;
}
fVar18 = (*(float *)(param_8 + 4) - local_60) * (*(float *)(param_8 + 4) - local_60) +
(*(float *)(param_8 + 8) - local_5c) * (*(float *)(param_8 + 8) - local_5c) +
(*(float *)param_8 - local_64) * (*(float *)param_8 - local_64);
local_64 = local_4c - local_64;
local_4c = local_48 - local_60;
goto LAB_001d18c9;
}
if (iVar17 == iVar10) goto LAB_001d1d00;
fVar18 = SQRT((*(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)) /
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;
local_e4 = iVar17 * param_7 + iVar14;
local_b8[1] = param_7 * iVar10 + iVar14;
iVar4 = param_7 * iVar10 + iVar9;
iVar12 = *(int *)(param_2 + 0x60);
iVar7 = *(int *)(param_2 + 0xc);
iVar13 = local_e4;
pfVar15 = &local_88;
pVVar16 = (Vector *)&local_64;
pfVar8 = &local_40;
local_b8[0] = local_e4;
local_b8[2] = iVar4;
while( true ) {
pfVar11 = (float *)(iVar12 + iVar7 * iVar13);
pfVar5 = (float *)(*(int *)param_2 * iVar13 + *(int *)(param_2 + 0x54));
fVar18 = pfVar11[2];
fVar19 = *pfVar11;
fVar1 = *pfVar5;
fVar2 = pfVar5[2];
pfVar15[1] = pfVar11[1] * 0.1 + pfVar5[1];
*pfVar15 = fVar19 * 0.1 + fVar1;
pfVar15[2] = fVar18 * 0.1 + fVar2;
CDispInfo::GetFlatVert((int)&local_94);
iVar7 = *(int *)(param_2 + 0xc);
*(float *)pVVar16 = local_94;
iVar12 = *(int *)(param_2 + 0x60);
local_c4 = local_c4 + 1;
*(float *)(pVVar16 + 4) = local_90;
*(float *)(pVVar16 + 8) = local_8c;
pfVar5 = (float *)(iVar13 * iVar7 + iVar12);
fVar18 = pfVar5[1];
fVar19 = *pfVar5;
pfVar8[2] = pfVar5[2];
pfVar8[1] = fVar18;
*pfVar8 = fVar19;
if (local_c4 == 3) break;
iVar13 = local_b8[local_c4];
pfVar15 = pfVar15 + 3;
pVVar16 = pVVar16 + 0xc;
pfVar8 = pfVar8 + 3;
}
if (iVar14 == iVar9) {
if (iVar17 == iVar10) {
LAB_001d1d00:
*(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_001d19a7;
}
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 (iVar17 != iVar10) {
/* try { // try from 001d151c to 001d15e3 has its CatchHandler @ 001d1e01 */
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;
pfVar15 = &local_88;
local_a0[2] = iVar9 + iVar17 * param_7;
iVar9 = *(int *)(param_2 + 0xc);
iVar14 = *(int *)(param_2 + 0x60);
pVVar16 = (Vector *)&local_64;
local_c8 = &local_40;
local_a0[0] = local_e4;
local_a0[1] = iVar4;
while( true ) {
pfVar5 = (float *)(iVar14 + iVar9 * local_e4);
fVar18 = pfVar5[2];
pfVar8 = (float *)(local_e4 * *(int *)param_2 + *(int *)(param_2 + 0x54));
fVar19 = *pfVar5;
fVar1 = pfVar8[2];
fVar2 = *pfVar8;
pfVar15[1] = pfVar5[1] * 0.1 + pfVar8[1];
pfVar15[2] = fVar18 * 0.1 + fVar1;
*pfVar15 = fVar19 * 0.1 + fVar2;
CDispInfo::GetFlatVert((int)&local_94);
pfVar15 = pfVar15 + 3;
local_c4 = local_c4 + 1;
iVar9 = *(int *)(param_2 + 0xc);
*(float *)pVVar16 = local_94;
iVar14 = *(int *)(param_2 + 0x60);
*(float *)(pVVar16 + 4) = local_90;
*(float *)(pVVar16 + 8) = local_8c;
pfVar8 = (float *)(local_e4 * iVar9 + iVar14);
fVar18 = pfVar8[2];
fVar19 = pfVar8[1];
*local_c8 = *pfVar8;
local_c8[1] = fVar19;
local_c8[2] = fVar18;
if (local_c4 == 3) break;
local_e4 = local_a0[local_c4];
pVVar16 = pVVar16 + 0xc;
local_c8 = local_c8 + 3;
}
/* try { // try from 001d1d92 to 001d1d96 has its CatchHandler @ 001d1e01 */
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_001d1c08:
*(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_001d19a7;
}
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_001d18c9:
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_001d19a7:
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.