ClipPolyToPlane_Precise
0x000a8fb0 · 718 bytes · __cdecl
_Z23ClipPolyToPlane_PrecisePdiS_PKddd
Decompiled
undefined (6 params)
/* ClipPolyToPlane_Precise(double*, int, double*, double const*, double, double) */
int ClipPolyToPlane_Precise
(double *param_1,int param_2,double *param_3,double *param_4,double param_5,
double param_6)
{
undefined8 *puVar1;
undefined4 *puVar2;
double dVar3;
double dVar4;
double dVar5;
undefined4 uVar6;
int iVar7;
double *pdVar8;
int iVar9;
int iVar10;
int iVar11;
int iVar12;
int iVar13;
double *pdVar14;
int in_GS_OFFSET;
double dVar15;
undefined4 auStack_70 [2];
undefined8 uStack_68;
undefined8 *local_60;
int local_5c;
double *local_58;
undefined4 *local_54;
double *local_50;
int local_48 [3];
double local_3c [3];
int local_20;
local_3c[0] = 0.0;
local_20 = *(int *)(in_GS_OFFSET + 0x14);
local_3c[1] = 0.0;
local_3c[2] = 0.0;
local_48[2] = 0;
local_48[1] = 0;
local_48[0] = 0;
iVar11 = param_2 * 0x20 + 0x10;
local_58 = param_1;
iVar9 = -iVar11;
iVar11 = iVar11 * -2;
puVar1 = (undefined8 *)((int)&local_60 + iVar9);
puVar2 = (undefined4 *)((int)&local_60 + iVar11);
local_50 = param_3;
if (param_2 < 1) {
iVar12 = 0;
}
else {
iVar12 = 0;
dVar3 = *param_4;
dVar4 = param_4[1];
dVar5 = param_4[2];
pdVar8 = param_1;
do {
while( true ) {
dVar15 = ((*pdVar8 * dVar3 + pdVar8[1] * dVar4) - param_5) + pdVar8[2] * dVar5;
puVar1[iVar12] = dVar15;
if (dVar15 <= param_6) break;
puVar2[iVar12] = 0;
iVar13 = 0;
LAB_000a9061:
local_48[iVar13] = local_48[iVar13] + 1;
iVar12 = iVar12 + 1;
pdVar8 = pdVar8 + 3;
if (iVar12 == param_2) goto LAB_000a90c6;
}
if (-param_6 <= dVar15) {
puVar2[iVar12] = 2;
iVar13 = 2;
goto LAB_000a9061;
}
puVar2[iVar12] = 1;
iVar12 = iVar12 + 1;
local_48[1] = local_48[1] + 1;
pdVar8 = pdVar8 + 3;
} while (iVar12 != param_2);
LAB_000a90c6:
uVar6 = *puVar2;
puVar1[param_2] = *puVar1;
puVar2[param_2] = uVar6;
iVar12 = 0;
if (local_48[0] != 0) {
if (local_48[1] == 0) {
iVar9 = 0;
iVar12 = param_2;
if (0 < param_2 * 3) {
do {
param_3[iVar9] = param_1[iVar9];
iVar9 = iVar9 + 1;
} while (iVar9 != param_2 * 3);
}
}
else {
iVar13 = 0;
pdVar8 = (double *)0x1;
pdVar14 = param_1;
do {
local_50 = pdVar8;
iVar7 = *(int *)((int)&uStack_68 + (int)local_50 * 4 + iVar11 + 4);
if (iVar7 == 2) {
iVar12 = iVar13 + 1;
param_3[iVar13 * 3] = *pdVar14;
param_3[iVar13 * 3 + 1] = pdVar14[1];
param_3[iVar13 * 3 + 2] = pdVar14[2];
}
else {
iVar10 = iVar13;
if (iVar7 == 0) {
iVar10 = iVar13 + 1;
local_5c = iVar13 * 0x18;
param_3[iVar13 * 3] = *pdVar14;
param_3[iVar13 * 3 + 1] = pdVar14[1];
param_3[iVar13 * 3 + 2] = pdVar14[2];
}
iVar12 = iVar10;
if ((puVar2[(int)local_50] != 2) && (iVar7 != puVar2[(int)local_50])) {
dVar3 = *(double *)((int)&uStack_68 + (int)local_50 * 8 + iVar9);
dVar4 = (double)puVar1[(int)local_50];
iVar12 = 0;
do {
local_3c[iVar12] =
(param_1[((int)local_50 % param_2) * 3 + iVar12] - pdVar14[iVar12]) *
(dVar3 / (dVar3 - dVar4)) + pdVar14[iVar12];
iVar12 = iVar12 + 1;
} while (iVar12 != 3);
iVar12 = iVar10 + 1;
param_3[iVar10 * 3] = local_3c[0];
param_3[iVar10 * 3 + 1] = local_3c[1];
param_3[iVar10 * 3 + 2] = local_3c[2];
}
}
pdVar14 = pdVar14 + 3;
iVar13 = iVar12;
pdVar8 = (double *)((int)local_50 + 1);
local_60 = puVar1;
local_54 = puVar2;
} while ((int)local_50 < param_2);
}
}
}
if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {
/* WARNING: Subroutine does not return */
*(code **)((int)auStack_70 + iVar11) = CeilPow2;
__stack_chk_fail();
}
return iVar12;
}
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.