PointInQuadToBarycentric
0x000c82b0 · 2182 bytes · __cdecl
_Z24PointInQuadToBarycentricRK6VectorS1_S1_S1_S1_R8Vector2D
Decompiled
undefined (6 params)
/* PointInQuadToBarycentric(Vector const&, Vector const&, Vector const&, Vector const&, Vector
const&, Vector2D&) */
uint PointInQuadToBarycentric
(Vector *param_1,Vector *param_2,Vector *param_3,Vector *param_4,Vector *param_5,
Vector2D *param_6)
{
float fVar1;
float fVar3;
bool bVar4;
float fVar5;
float fVar6;
float fVar7;
int iVar8;
int iVar9;
uint uVar10;
int iVar11;
int iVar12;
longdouble lVar13;
longdouble lVar14;
longdouble lVar15;
float fVar16;
double dVar17;
float fVar18;
float fVar19;
float fVar20;
double dVar21;
float fVar22;
float fVar23;
float fVar24;
float fVar25;
float fVar26;
float fVar27;
float fVar28;
float fVar29;
double dVar30;
float fVar31;
undefined4 local_bc;
undefined4 uStack_b8;
undefined4 local_b4;
undefined4 uStack_b0;
float local_a8;
float local_a4;
float local_a0;
float local_9c;
float local_98;
float local_94;
float local_90;
float local_8c;
float local_88;
float local_84;
float local_80;
float local_7c [10];
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 fVar2;
fVar27 = *(float *)param_2 - *(float *)param_1;
fVar24 = *(float *)(param_2 + 4) - *(float *)(param_1 + 4);
fVar22 = *(float *)param_3 - *(float *)param_4;
fVar28 = *(float *)(param_2 + 8) - *(float *)(param_1 + 8);
fVar25 = *(float *)(param_3 + 4) - *(float *)(param_4 + 4);
fVar31 = *(float *)param_4 - *(float *)param_1;
fVar29 = *(float *)(param_4 + 4) - *(float *)(param_1 + 4);
fVar18 = *(float *)(param_3 + 8) - *(float *)(param_4 + 8);
fVar26 = *(float *)(param_3 + 8) - *(float *)(param_2 + 8);
fVar23 = *(float *)(param_4 + 8) - *(float *)(param_1 + 8);
fVar16 = *(float *)param_3 - *(float *)param_2;
fVar19 = *(float *)(param_3 + 4) - *(float *)(param_2 + 4);
local_7c[0] = fVar27;
local_7c[1] = fVar24;
local_7c[2] = fVar28;
local_7c[3] = fVar22;
local_7c[4] = fVar25;
local_7c[5] = fVar18;
local_7c[6] = fVar31;
local_7c[7] = fVar29;
local_7c[8] = fVar23;
local_7c[9] = fVar16;
local_54 = fVar19;
local_50 = fVar26;
local_4c = fVar27;
local_48 = fVar24;
local_44 = fVar28;
local_40 = fVar22;
local_3c = fVar25;
local_38 = fVar18;
local_34 = fVar31;
local_30 = fVar29;
local_2c = fVar23;
local_28 = fVar16;
local_24 = fVar19;
local_20 = fVar26;
lVar13 = (longdouble)VectorNormalize((Vector *)&local_4c);
fVar3 = (float)lVar13;
lVar13 = (longdouble)VectorNormalize((Vector *)&local_40);
lVar14 = (longdouble)VectorNormalize((Vector *)&local_34);
lVar15 = (longdouble)VectorNormalize((Vector *)&local_28);
if ((0.99 < local_3c * local_48 + local_40 * local_4c + local_38 * local_44) &&
(ABS(fVar3 - (float)lVar13) < 0.1)) {
uVar10 = QuadWithParallelEdges
(param_1,(Vector *)&local_4c,fVar3,(Vector *)&local_34,(float)lVar14,param_5,
param_6);
return uVar10;
}
bVar4 = local_24 * local_30 + local_28 * local_34 + local_20 * local_2c <= 0.99;
fVar20 = fVar24;
fVar1 = fVar31;
fVar2 = fVar23;
fVar5 = fVar29;
fVar6 = fVar27;
fVar7 = fVar28;
if (bVar4) {
fVar20 = fVar29;
fVar29 = fVar24;
fVar1 = fVar27;
fVar2 = fVar28;
fVar28 = fVar23;
fVar27 = fVar31;
fVar31 = local_7c[0];
fVar5 = local_7c[1];
fVar23 = local_7c[2];
fVar16 = local_7c[3];
fVar19 = local_7c[4];
fVar26 = local_7c[5];
fVar6 = local_7c[6];
fVar24 = local_7c[7];
fVar7 = local_7c[8];
fVar22 = local_7c[9];
fVar25 = local_54;
fVar18 = local_50;
}
local_50 = fVar18;
local_54 = fVar25;
local_7c[9] = fVar22;
local_7c[8] = fVar7;
local_7c[7] = fVar24;
local_7c[6] = fVar6;
local_7c[5] = fVar26;
local_7c[4] = fVar19;
local_7c[3] = fVar16;
local_7c[2] = fVar23;
local_7c[1] = fVar5;
local_7c[0] = fVar31;
local_a0 = fVar28 * fVar29 - fVar20 * fVar2;
local_9c = fVar2 * fVar27 - fVar28 * fVar1;
local_98 = fVar1 * fVar20 - fVar27 * fVar29;
GetNonMajorAxes((Vector *)&local_a0,(Vector2D *)&local_a8);
iVar12 = (int)local_a8;
iVar8 = (int)local_a4;
iVar11 = iVar12 * 4;
fVar28 = local_7c[iVar12];
fVar27 = local_7c[iVar8];
iVar9 = iVar8 * 4;
fVar29 = fVar27;
if (ABS(fVar28) < ABS(fVar27)) {
local_a8 = local_a4;
local_a4 = (float)iVar12;
iVar9 = (int)local_a4 * 4;
iVar11 = iVar8 * 4;
iVar12 = iVar8;
fVar29 = local_7c[(int)local_a4];
fVar28 = fVar27;
}
fVar27 = *(float *)((int)local_7c + iVar11 + 0x18);
local_bc = 0;
fVar31 = *(float *)((int)local_7c + iVar9 + 0x18);
uStack_b8 = 0;
fVar23 = *(float *)((int)local_7c + iVar9 + 0xc);
local_b4 = 0;
fVar19 = fVar27 * fVar29;
fVar26 = fVar31 * fVar28;
fVar16 = *(float *)((int)local_7c + iVar11 + 0xc);
uStack_b0 = 0;
dVar21 = (double)(((fVar19 - fVar26) - fVar27 * fVar23) + fVar31 * fVar16);
dVar17 = (double)(((*(float *)(param_1 + iVar9) - *(float *)(param_5 + iVar9)) * fVar28 -
*(float *)(param_1 + iVar11) * fVar29) + fVar29 * *(float *)(param_5 + iVar11));
dVar30 = (((((double)(*(float *)(param_1 + iVar11) * fVar23) +
(double)(*(float *)(param_5 + iVar9) * fVar16) + (double)fVar19) -
(double)(fVar16 * *(float *)(param_1 + iVar9))) - (double)fVar26) -
(double)(*(float *)(param_5 + iVar11) * fVar23)) + dVar17;
if ((dVar21 < 0.1) && (-0.1 < dVar21)) {
local_8c = (local_38 + local_44) * 0.5;
local_90 = (local_3c + local_48) * 0.5;
local_94 = (local_40 + local_4c) * 0.5;
local_80 = (local_20 + local_2c) * 0.5;
local_84 = (local_24 + local_30) * 0.5;
local_88 = (local_28 + local_34) * 0.5;
uVar10 = QuadWithParallelEdges
(param_1,(Vector *)&local_94,((float)lVar13 + fVar3) * 0.5,
(Vector *)&local_88,((float)lVar15 + (float)lVar14) * 0.5,param_5,param_6);
return uVar10;
}
dVar17 = dVar30 * dVar30 - dVar17 * dVar21 * 4.0;
if (0.0 <= dVar17) {
dVar17 = SQRT(dVar17);
ResolveQuadratic((dVar30 + dVar17) / (dVar21 + dVar21),(dVar30 - dVar17) / (dVar21 + dVar21),
local_7c[0],local_7c[1],local_7c[2],local_7c[3],local_7c[4],local_7c[5],
local_7c[6],local_7c[7],local_7c[8],local_7c[9],local_54,local_50,
*(undefined4 *)param_1,*(undefined4 *)(param_1 + 4),
*(undefined4 *)(param_1 + 8),*(undefined4 *)param_5,
*(undefined4 *)(param_5 + 4),*(undefined4 *)(param_5 + 8),iVar12,&local_bc,
&local_b4);
if (bVar4) {
fVar28 = (float)(double)CONCAT44(uStack_b8,local_bc);
*(float *)param_6 = fVar28;
*(float *)(param_6 + 4) = (float)(double)CONCAT44(uStack_b0,local_b4);
}
else {
fVar28 = (float)(double)CONCAT44(uStack_b0,local_b4);
*(float *)param_6 = fVar28;
*(float *)(param_6 + 4) = (float)(double)CONCAT44(uStack_b8,local_bc);
}
uVar10 = 0;
if (((0.0 <= fVar28) && (fVar28 <= 1.0)) && (0.0 <= *(float *)(param_6 + 4))) {
uVar10 = (uint)(*(float *)(param_6 + 4) <= 1.0);
}
}
else {
*(undefined4 *)param_6 = 0xc7c34f80;
*(undefined4 *)(param_6 + 4) = 0xc7c34f80;
uVar10 = 2;
}
return uVar10;
}
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.