CStaticPropMgr::GetAllStaticPropsInOBB
0x001e73a0 · 1878 bytes · __thiscall
_ZN14CStaticPropMgr22GetAllStaticPropsInOBBERK6VectorS2_S2_S2_P10CUtlVectorIP12ICollideable10CUtlMemoryIS5_iEE
Decompiled
undefined (6 params)
/* CStaticPropMgr::GetAllStaticPropsInOBB(Vector const&, Vector const&, Vector const&, Vector
const&, CUtlVector<ICollideable*, CUtlMemory<ICollideable*, int> >*) */
void __thiscall
CStaticPropMgr::GetAllStaticPropsInOBB
(CStaticPropMgr *this,Vector *param_1,Vector *param_2,Vector *param_3,Vector *param_4,
CUtlVector *param_5)
{
float fVar1;
float fVar2;
float fVar3;
float fVar4;
undefined4 uVar5;
ICollideable *pIVar6;
undefined4 uVar7;
ICollideable *pIVar8;
undefined4 uVar9;
undefined4 uVar10;
int iVar11;
float *pfVar12;
undefined4 *puVar13;
Vector *pVVar14;
QAngle *pQVar15;
float *pfVar16;
uint uVar17;
float *pfVar18;
matrix3x4_t *pmVar19;
int *piVar20;
int iVar21;
float fVar22;
float fVar23;
float fVar24;
float fVar25;
float fVar26;
float fVar27;
float local_190;
float local_18c;
float local_188;
float local_184;
float local_180;
float local_17c;
ICollideable *local_178;
undefined4 local_174;
undefined4 local_170;
float local_16c [6];
matrix3x4_t local_154 [48];
float local_124;
float local_120;
float local_11c;
float local_118;
float local_114;
float local_110;
float local_10c;
float local_108;
float local_104;
float local_100;
float local_fc;
float local_f8;
float local_f4;
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 [21];
float local_7c [24];
float local_1c [3];
if (param_5 != (CUtlVector *)0x0) {
uVar17 = 0;
fVar1 = *(float *)(param_1 + 4);
fVar2 = *(float *)(param_1 + 8);
fVar3 = *(float *)param_1;
local_d8 = fVar1;
local_11c = *(float *)(param_2 + 8);
local_124 = *(float *)param_2;
local_d4 = fVar2;
local_120 = *(float *)(param_2 + 4);
local_dc = fVar3;
pfVar18 = local_d0;
pfVar16 = &local_dc;
fVar22 = fVar1;
fVar23 = fVar3;
fVar24 = fVar2;
fVar25 = fVar1;
fVar26 = fVar2;
fVar27 = fVar3;
while( true ) {
pfVar12 = pfVar18;
if ((uVar17 & 2) != 0) {
*pfVar16 = *pfVar16 + *(float *)param_3;
pfVar16[1] = pfVar16[1] + *(float *)(param_3 + 4);
pfVar16[2] = pfVar16[2] + *(float *)(param_3 + 8);
}
if ((uVar17 & 4) != 0) {
*pfVar16 = *pfVar16 + *(float *)param_4;
pfVar16[1] = pfVar16[1] + *(float *)(param_4 + 4);
pfVar16[2] = pfVar16[2] + *(float *)(param_4 + 8);
}
fVar4 = pfVar12[-3];
uVar17 = uVar17 + 1;
if (fVar4 <= fVar23) {
fVar23 = fVar4;
}
if (fVar27 <= fVar4) {
fVar27 = fVar4;
}
fVar4 = pfVar12[-2];
if (fVar4 <= fVar22) {
fVar22 = fVar4;
}
if (fVar25 <= fVar4) {
fVar25 = fVar4;
}
fVar4 = pfVar12[-1];
if (fVar4 <= fVar26) {
fVar26 = fVar4;
}
if (fVar24 <= fVar4) {
fVar24 = fVar4;
}
if (uVar17 == 8) break;
*pfVar12 = fVar3;
pfVar12[1] = fVar1;
pfVar12[2] = fVar2;
if ((uVar17 & 1) != 0) {
*pfVar12 = local_124 + fVar3;
pfVar12[1] = local_120 + fVar1;
pfVar12[2] = local_11c + fVar2;
}
pfVar18 = pfVar12 + 3;
pfVar16 = pfVar12;
}
VectorNormalize((Vector *)&local_124);
local_16c[0] = (*(float *)(param_2 + 4) + *(float *)(param_1 + 4)) * local_120 +
(*(float *)param_2 + *(float *)param_1) * local_124 +
(*(float *)(param_2 + 8) + *(float *)(param_1 + 8)) * local_11c;
local_114 = -local_120;
local_118 = -local_124;
local_110 = -local_11c;
local_10c = *(float *)param_3;
local_108 = *(float *)(param_3 + 4);
local_104 = *(float *)(param_3 + 8);
local_16c[1] = local_114 * *(float *)(param_1 + 4) + local_118 * *(float *)param_1 +
local_110 * *(float *)(param_1 + 8);
VectorNormalize((Vector *)&local_10c);
local_fc = -local_108;
local_100 = -local_10c;
local_f8 = -local_104;
local_16c[2] = (*(float *)(param_3 + 4) + *(float *)(param_1 + 4)) * local_108 +
(*(float *)param_3 + *(float *)param_1) * local_10c +
(*(float *)(param_1 + 8) + *(float *)(param_3 + 8)) * local_104;
local_16c[3] = local_fc * *(float *)(param_1 + 4) + local_100 * *(float *)param_1 +
local_f8 * *(float *)(param_1 + 8);
local_f4 = *(float *)param_4;
local_f0 = *(float *)(param_4 + 4);
local_ec = *(float *)(param_4 + 8);
VectorNormalize((Vector *)&local_f4);
local_e4 = -local_f0;
iVar11 = *(int *)(this + 0x2c);
local_e0 = -local_ec;
local_16c[4] = (*(float *)(param_4 + 4) + *(float *)(param_1 + 4)) * local_f0 +
(*(float *)param_4 + *(float *)param_1) * local_f4 +
(*(float *)(param_4 + 8) + *(float *)(param_1 + 8)) * local_ec;
local_e8 = -local_f4;
local_16c[5] = *(float *)(param_1 + 4) * local_e4 + local_e8 * *(float *)param_1 +
local_e0 * *(float *)(param_1 + 8);
if (iVar11 != 0) {
iVar21 = 0;
LAB_001e7868:
do {
piVar20 = (int *)(iVar21 * 0xd8 + *(int *)(this + 0x20));
(**(code **)(*piVar20 + 0x6c))(piVar20,&local_190,&local_184);
if ((((fVar23 <= local_184) && (fVar22 <= local_180)) && (fVar26 <= local_17c)) &&
(((local_190 <= fVar27 && (local_18c <= fVar25)) && (local_188 <= fVar24)))) {
puVar13 = (undefined4 *)(**(code **)(*piVar20 + 0x34))(piVar20);
uVar5 = puVar13[1];
pIVar6 = (ICollideable *)*puVar13;
uVar7 = puVar13[2];
puVar13 = (undefined4 *)(**(code **)(*piVar20 + 0x38))(piVar20);
pIVar8 = (ICollideable *)*puVar13;
uVar9 = puVar13[1];
uVar10 = puVar13[2];
pVVar14 = (Vector *)(**(code **)(*piVar20 + 0x4c))(piVar20);
pQVar15 = (QAngle *)(**(code **)(*piVar20 + 0x50))(piVar20);
AngleMatrix(pQVar15,pVVar14,local_154);
pfVar18 = local_7c;
uVar17 = 0;
local_178 = pIVar6;
while( true ) {
local_174 = uVar5;
if ((uVar17 & 2) != 0) {
local_174 = uVar9;
}
local_170 = uVar7;
if ((uVar17 & 4) != 0) {
local_170 = uVar10;
}
uVar17 = uVar17 + 1;
VectorTransform((float *)&local_178,local_154,pfVar18);
if (uVar17 == 8) break;
local_178 = pIVar6;
if ((uVar17 & 1) != 0) {
local_178 = pIVar8;
}
pfVar18 = pfVar18 + 3;
}
pmVar19 = (matrix3x4_t *)local_16c;
pfVar18 = &local_124;
do {
pfVar16 = local_7c;
while (0.0 <= ((*pfVar16 * *pfVar18 + pfVar16[1] * pfVar18[1]) - *(float *)pmVar19) +
pfVar16[2] * pfVar18[2]) {
pfVar16 = pfVar16 + 3;
if (pfVar16 == local_1c) {
iVar21 = iVar21 + 1;
if (iVar11 == iVar21) {
return;
}
goto LAB_001e7868;
}
}
pfVar18 = pfVar18 + 3;
pmVar19 = pmVar19 + 4;
} while (pmVar19 != local_154);
local_178 = (ICollideable *)(piVar20 + 2);
CUtlVector<ICollideable*,CUtlMemory<ICollideable*,int>>::InsertBefore
((CUtlVector<ICollideable*,CUtlMemory<ICollideable*,int>> *)param_5,
*(int *)(param_5 + 0xc),&local_178);
}
iVar21 = iVar21 + 1;
} while (iVar11 != iVar21);
}
}
return;
}
SourceMod gamedata
paste intoaddons/sourcemod/gamedata/<your_plugin>.txt
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.
Type inference is best-effort from the C signature - sanity-check the DHooks types before shipping.