OBBHasFullyContainedIntersectionWithQuad
0x000ca080 · 1449 bytes · __cdecl
_Z40OBBHasFullyContainedIntersectionWithQuadRK6VectorS1_S1_S1_S1_fS1_S1_fS1_f
Decompiled
undefined (11 params)
/* OBBHasFullyContainedIntersectionWithQuad(Vector const&, Vector const&, Vector const&, Vector
const&, Vector const&, float, Vector const&, Vector const&, float, Vector const&, float) */
undefined4
OBBHasFullyContainedIntersectionWithQuad
(Vector *param_1,Vector *param_2,Vector *param_3,Vector *param_4,Vector *param_5,
float param_6,Vector *param_7,Vector *param_8,float param_9,Vector *param_10,
float param_11)
{
float fVar1;
float fVar2;
float fVar3;
float fVar4;
int iVar5;
float *pfVar6;
float *pfVar7;
int iVar8;
float *pfVar9;
float *pfVar10;
uint uVar11;
float fVar12;
uint uVar13;
float fVar14;
float fVar15;
float fVar16;
float fVar17;
float fVar18;
float fVar19;
float fVar20;
int local_154;
float local_148;
float local_144 [8];
int aiStack_124 [9];
float local_100 [4];
float local_f0;
float local_ec;
float local_e8;
float local_e4;
float local_e0;
float local_dc;
float local_d8;
float local_d4;
float local_d0;
float local_cc;
float local_c8;
float local_c4;
float local_c0;
float local_bc;
float local_b8;
float local_b4;
float local_b0;
float local_ac;
float local_a8;
float local_a4;
float local_a0 [36];
fVar18 = *(float *)(param_4 + 4) - *(float *)(param_1 + 4);
fVar15 = *(float *)(param_4 + 8) - *(float *)(param_1 + 8);
fVar20 = *(float *)param_4 - *(float *)param_1;
fVar12 = *(float *)(param_2 + 4);
fVar1 = *(float *)param_2;
fVar19 = fVar18 - fVar12;
fVar17 = fVar20 - fVar1;
fVar2 = *(float *)(param_2 + 8);
fVar3 = *(float *)param_3;
fVar14 = fVar15 - fVar2;
fVar4 = *(float *)(param_3 + 4);
fVar16 = *(float *)(param_3 + 8);
pfVar9 = local_144 + 1;
local_100[0] = fVar17 - fVar3;
local_100[3] = fVar17 + fVar3;
fVar15 = fVar15 + fVar2;
fVar20 = fVar20 + fVar1;
local_f0 = fVar19 + fVar4;
local_100[1] = fVar19 - fVar4;
local_100[2] = fVar14 - fVar16;
local_ec = fVar14 + fVar16;
fVar18 = fVar12 + fVar18;
fVar17 = *(float *)param_1 + *(float *)param_4;
local_e8 = fVar20 + fVar3;
local_dc = fVar20 - fVar3;
local_d8 = fVar18 - fVar4;
local_e4 = fVar18 + fVar4;
fVar18 = *(float *)(param_1 + 4) + *(float *)(param_4 + 4);
local_d4 = fVar15 - fVar16;
local_e0 = fVar15 + fVar16;
fVar15 = fVar17 - fVar1;
fVar14 = *(float *)(param_1 + 8) + *(float *)(param_4 + 8);
fVar20 = fVar18 - fVar12;
fVar19 = fVar14 + fVar2;
fVar14 = fVar14 - fVar2;
local_d0 = fVar15 - fVar3;
local_cc = fVar20 - fVar4;
local_bc = fVar14 + fVar16;
local_c8 = fVar14 - fVar16;
fVar18 = fVar18 + fVar12;
local_c4 = fVar15 + fVar3;
fVar17 = fVar17 + fVar1;
local_c0 = fVar20 + fVar4;
local_b8 = fVar17 + fVar3;
local_ac = fVar17 - fVar3;
fVar12 = *(float *)(param_5 + 8);
local_a8 = fVar18 - fVar4;
fVar1 = *(float *)(param_5 + 4);
local_b4 = fVar18 + fVar4;
fVar2 = *(float *)param_5;
local_a4 = fVar19 - fVar16;
local_b0 = fVar19 + fVar16;
pfVar6 = local_100;
pfVar10 = pfVar9;
do {
pfVar7 = pfVar6 + 3;
*pfVar10 = ((*pfVar6 * fVar2 + pfVar6[1] * fVar1) - param_6) + pfVar6[2] * fVar12;
pfVar6 = pfVar7;
pfVar10 = pfVar10 + 1;
} while (pfVar7 != local_a0);
iVar8 = 0;
uVar11 = 0;
do {
while (0.0 < pfVar9[iVar8]) {
aiStack_124[iVar8 + 1] = 1;
iVar8 = iVar8 + 1;
uVar11 = uVar11 | 1;
if (iVar8 == 8) goto LAB_000ca40a;
}
aiStack_124[iVar8 + 1] = 2;
iVar8 = iVar8 + 1;
uVar11 = uVar11 | 2;
} while (iVar8 != 8);
LAB_000ca40a:
if (uVar11 != 3) {
return 0;
}
pfVar6 = local_100;
uVar11 = 1;
local_154 = 0;
do {
if (aiStack_124[uVar11] == 2) {
uVar13 = uVar11 - 1 & 4;
fVar12 = (float)(uVar11 - 1 ^ 4);
local_148 = (float)((uVar11 & 3) + uVar13);
iVar8 = aiStack_124[(int)fVar12 + 1];
local_144[0] = (float)((uVar11 - 2 & 3) + uVar13);
pfVar10 = &local_148;
iVar5 = local_154;
while( true ) {
local_154 = iVar5;
if (iVar8 == 1) {
fVar16 = local_144[(int)fVar12 + 1] - local_144[uVar11];
fVar1 = pfVar6[2];
local_154 = iVar5 + 1;
fVar14 = local_144[(int)fVar12 + 1] / fVar16;
fVar16 = -local_144[uVar11] / fVar16;
fVar2 = *pfVar6;
fVar3 = local_100[(int)fVar12 * 3 + 2];
fVar4 = local_100[(int)fVar12 * 3];
local_a0[iVar5 * 3 + 1] = local_100[(int)fVar12 * 3 + 1] * fVar16 + pfVar6[1] * fVar14;
local_a0[iVar5 * 3 + 2] = fVar3 * fVar16 + fVar1 * fVar14;
local_a0[iVar5 * 3] = fVar16 * fVar4 + fVar14 * fVar2;
}
if (pfVar10 == pfVar9) break;
fVar12 = *pfVar10;
pfVar10 = pfVar10 + 1;
iVar8 = aiStack_124[(int)fVar12 + 1];
iVar5 = local_154;
}
}
uVar11 = uVar11 + 1;
pfVar6 = pfVar6 + 3;
} while (uVar11 != 9);
if (local_154 != 0) {
iVar8 = 0;
pfVar9 = local_a0;
do {
if (param_9 < ABS(*(float *)(param_8 + 4) * (pfVar9[1] - *(float *)(param_7 + 4)) +
*(float *)param_8 * (*pfVar9 - *(float *)param_7) +
*(float *)(param_8 + 8) * (pfVar9[2] - *(float *)(param_7 + 8)))) {
return 0;
}
if (param_11 <
ABS((pfVar9[1] - *(float *)(param_7 + 4)) * *(float *)(param_10 + 4) +
(*pfVar9 - *(float *)param_7) * *(float *)param_10 +
(pfVar9[2] - *(float *)(param_7 + 8)) * *(float *)(param_10 + 8))) {
return 0;
}
iVar8 = iVar8 + 1;
pfVar9 = pfVar9 + 3;
} while (local_154 != iVar8);
}
return 1;
}
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.