CCoreDispInfo::DispUVToSurf_TriTLToBR_1
0x000c1b30 · 1675 bytes · __thiscall
_ZN13CCoreDispInfo24DispUVToSurf_TriTLToBR_1ERK6VectoriiiiRS0_PS0_Pfb
Decompiled
undefined (10 params)
/* CCoreDispInfo::DispUVToSurf_TriTLToBR_1(Vector const&, int, int, int, int, Vector&, Vector*,
float*, bool) */
void __thiscall
CCoreDispInfo::DispUVToSurf_TriTLToBR_1
(CCoreDispInfo *this,Vector *param_1,int param_2,int param_3,int param_4,int param_5,
Vector *param_6,Vector *param_7,float *param_8,bool param_9)
{
int iVar1;
char cVar2;
int iVar3;
float *pfVar4;
int iVar5;
float *pfVar6;
int iVar7;
float fVar8;
int local_88 [3];
float local_7c [4];
float local_6c;
float local_68;
float local_64;
float local_60;
float local_5c;
Vector local_58 [12];
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;
iVar7 = 0;
iVar1 = *(int *)(this + 0x1b8);
iVar5 = (1 << ((byte)*(undefined4 *)(this + 0xc) & 0x1f)) + 1;
iVar3 = param_5 * iVar5;
local_88[0] = param_2 + iVar3;
local_88[1] = iVar3 + param_3;
local_88[2] = iVar5 * param_4 + param_3;
iVar3 = local_88[0];
pfVar4 = &local_64;
pfVar6 = &local_40;
while( true ) {
iVar3 = iVar3 * 0x90 + iVar1;
*pfVar4 = *(float *)(iVar3 + 0x34);
pfVar4[1] = *(float *)(iVar3 + 0x38);
pfVar4[2] = *(float *)(iVar3 + 0x3c);
*pfVar6 = *(float *)(iVar3 + 0x28);
pfVar6[1] = *(float *)(iVar3 + 0x2c);
pfVar6[2] = *(float *)(iVar3 + 0x30);
local_7c[iVar7] = *(float *)(iVar3 + 0x8c);
iVar7 = iVar7 + 1;
if (iVar7 == 3) break;
iVar3 = local_88[iVar7];
pfVar4 = pfVar4 + 3;
pfVar6 = pfVar6 + 3;
}
if (param_2 == param_3) {
if (param_4 == param_5) {
*(float *)param_6 = local_40;
*(float *)(param_6 + 4) = local_3c;
*(float *)(param_6 + 8) = local_38;
*param_8 = local_7c[0];
}
else {
fVar8 = SQRT((*(float *)(param_1 + 8) - local_5c) * (*(float *)(param_1 + 8) - local_5c) +
(*(float *)param_1 - local_64) * (*(float *)param_1 - local_64) +
(*(float *)(param_1 + 4) - local_60) * (*(float *)(param_1 + 4) - local_60)) /
SQRT((local_48 - local_60) * (local_48 - local_60) +
(local_4c - local_64) * (local_4c - local_64) +
(local_44 - local_5c) * (local_44 - local_5c));
*(float *)(param_6 + 4) = (local_24 - local_3c) * fVar8 + local_3c;
*(float *)(param_6 + 8) = (local_20 - local_38) * fVar8 + local_38;
*(float *)param_6 = (local_28 - local_40) * fVar8 + local_40;
if (param_8 != (float *)0x0) {
*param_8 = (local_7c[2] - local_7c[0]) * fVar8 + local_7c[0];
}
}
if (param_7 != (Vector *)0x0) {
*(float *)param_7 =
(local_20 - local_2c) * (local_3c - local_30) -
(local_24 - local_30) * (local_38 - local_2c);
*(float *)(param_7 + 4) =
(local_38 - local_2c) * (local_28 - local_34) -
(local_20 - local_2c) * (local_40 - local_34);
*(float *)(param_7 + 8) =
(local_40 - local_34) * (local_24 - local_30) -
(local_3c - local_30) * (local_28 - local_34);
VectorNormalize(param_7);
return;
}
}
else if (param_4 == param_5) {
fVar8 = SQRT((*(float *)(param_1 + 4) - local_60) * (*(float *)(param_1 + 4) - local_60) +
(*(float *)param_1 - local_64) * (*(float *)param_1 - local_64) +
(*(float *)(param_1 + 8) - local_5c) * (*(float *)(param_1 + 8) - local_5c)) /
SQRT((local_44 - local_5c) * (local_44 - local_5c) +
(local_48 - local_60) * (local_48 - local_60) +
(local_4c - local_64) * (local_4c - local_64));
*(float *)param_6 = (local_28 - local_40) * fVar8 + local_40;
*(float *)(param_6 + 4) = (local_24 - local_3c) * fVar8 + local_3c;
*(float *)(param_6 + 8) = (local_20 - local_38) * fVar8 + local_38;
if (param_8 != (float *)0x0) {
*param_8 = (local_7c[2] - local_7c[0]) * fVar8 + local_7c[0];
}
if (param_7 != (Vector *)0x0) {
*(float *)param_7 =
(local_20 - local_2c) * (local_3c - local_30) -
(local_24 - local_30) * (local_38 - local_2c);
*(float *)(param_7 + 4) =
(local_38 - local_2c) * (local_28 - local_34) -
(local_20 - local_2c) * (local_40 - local_34);
*(float *)(param_7 + 8) =
(local_40 - local_34) * (local_24 - local_30) -
(local_3c - local_30) * (local_28 - local_34);
VectorNormalize(param_7);
}
}
else {
cVar2 = CalcBarycentricCooefs
((Vector *)&local_64,local_58,(Vector *)&local_4c,param_1,local_7c + 3,
&local_6c,&local_68);
if (cVar2 == '\0') {
if (!param_9) {
DispUVToSurf_TriTLToBR_2
(this,param_1,param_2,param_3,param_4,param_5,param_6,param_7,param_8,true);
}
}
else {
*(float *)param_6 = local_34 * local_6c + local_28 * local_68 + local_40 * local_7c[3];
*(float *)(param_6 + 4) = local_30 * local_6c + local_24 * local_68 + local_3c * local_7c[3];
*(float *)(param_6 + 8) = local_2c * local_6c + local_20 * local_68 + local_38 * local_7c[3];
if (param_8 != (float *)0x0) {
*param_8 = local_6c * local_7c[1] + local_7c[3] * local_7c[0] + local_68 * local_7c[2];
}
if (param_7 != (Vector *)0x0) {
*(float *)param_7 =
(local_20 - local_2c) * (local_3c - local_30) -
(local_24 - local_30) * (local_38 - local_2c);
*(float *)(param_7 + 4) =
(local_38 - local_2c) * (local_28 - local_34) -
(local_20 - local_2c) * (local_40 - local_34);
*(float *)(param_7 + 8) =
(local_40 - local_34) * (local_24 - local_30) -
(local_3c - local_30) * (local_28 - local_34);
VectorNormalize(param_7);
return;
}
}
}
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.