CParticleCollection::RecomputeBounds
0x00bccf00 · 2588 bytes · __thiscall
_ZN19CParticleCollection15RecomputeBoundsEv
Decompiled
undefined (1 param)
/* CParticleCollection::RecomputeBounds() */
void __thiscall CParticleCollection::RecomputeBounds(CParticleCollection *this)
{
undefined1 (*pauVar1) [16];
undefined1 (*pauVar2) [16];
float *pfVar3;
float fVar4;
uint uVar5;
float *pfVar6;
float *pfVar7;
float *pfVar8;
undefined1 (*pauVar9) [16];
undefined1 (*pauVar10) [16];
undefined1 (*pauVar11) [16];
undefined1 (*pauVar12) [16];
undefined1 (*pauVar13) [16];
undefined1 (*pauVar14) [16];
int iVar15;
undefined1 (*pauVar16) [16];
uint uVar17;
int iVar18;
float *pfVar19;
uint uVar20;
float *pfVar21;
longdouble lVar22;
float fVar23;
undefined1 auVar24 [16];
float fVar25;
float fVar26;
float fVar31;
undefined1 auVar27 [16];
undefined1 auVar28 [16];
undefined1 auVar29 [16];
undefined1 auVar30 [16];
float fVar32;
float fVar35;
undefined1 auVar33 [16];
float fVar36;
undefined1 auVar34 [16];
float fVar37;
float fVar39;
float fVar40;
undefined1 auVar38 [16];
float fVar41;
float fVar42;
float fVar45;
float fVar46;
undefined1 auVar43 [16];
float fVar47;
undefined1 auVar44 [16];
float fVar48;
float fVar51;
float fVar52;
undefined1 auVar49 [16];
float fVar53;
undefined1 auVar50 [16];
float fVar54;
undefined1 auVar55 [16];
undefined1 auVar56 [16];
float *local_f0;
int local_ec;
undefined1 (*local_e8) [16];
float *local_e0;
float local_a8;
undefined1 local_9c [16];
undefined1 local_8c [16];
undefined1 local_7c [8];
float fStack_74;
float fStack_70;
undefined1 local_6c [8];
float fStack_64;
float fStack_60;
float local_5c;
float fStack_58;
float fStack_54;
float fStack_50;
float local_4c;
float fStack_48;
float fStack_44;
float fStack_40;
float local_3c;
float fStack_38;
float fStack_34;
float fStack_30;
float local_28;
float local_24;
float local_20;
uVar17 = *(uint *)(this + 0x30);
if (uVar17 == 0) {
this[0x94] = (CParticleCollection)0x0;
*(undefined4 *)(this + 0x98) = 0x7f7fffff;
*(undefined4 *)(this + 0x9c) = 0x7f7fffff;
*(undefined4 *)(this + 0xa0) = 0x7f7fffff;
*(undefined4 *)(this + 0xa4) = 0xff7fffff;
*(undefined4 *)(this + 0xa8) = 0xff7fffff;
*(undefined4 *)(this + 0xac) = 0xff7fffff;
*(undefined4 *)(this + 0x334) = 0;
*(undefined4 *)(this + 0x338) = 0;
*(undefined4 *)(this + 0x33c) = 0;
return;
}
local_ec = *(int *)(this + 0x48);
local_8c._8_4_ = 0x65a96816;
local_8c._0_8_ = 0x65a9681665a96816;
local_8c._12_4_ = 0x65a96816;
local_9c._8_4_ = 0xe5a96816;
local_9c._0_8_ = 0xe5a96816e5a96816;
local_9c._12_4_ = 0xe5a96816;
local_5c = (float)0;
fStack_58 = (float)0;
fStack_54 = (float)0;
fStack_50 = (float)0;
fVar4 = *(float *)(local_ec + 0x1ec);
if (*(float *)(this + 0x34) == 0.0) {
local_a8 = 1.0;
}
else {
local_a8 = 1.0 / *(float *)(this + 0x34);
}
local_e0 = *(float **)(this + 0xfc);
local_e8 = *(undefined1 (**) [16])(this + 0xd4);
uVar5 = *(uint *)(this + 0x134) >> 2;
uVar20 = uVar17 + 3;
if (-1 < (int)uVar17) {
uVar20 = uVar17;
}
local_f0 = *(float **)(this + 0xdc);
iVar15 = (int)uVar20 >> 2;
if (0.0 < fVar4) {
iVar18 = iVar15 + -1;
if (iVar15 != 0) {
local_3c = (float)0;
fStack_38 = (float)0;
fStack_34 = (float)0;
fStack_30 = (float)0;
local_4c = (float)0;
fStack_48 = (float)0;
fStack_44 = (float)0;
fStack_40 = (float)0;
auVar24._8_4_ = 0x65a96816;
auVar24._0_8_ = 0x65a9681665a96816;
auVar24._12_4_ = 0x65a96816;
pauVar16 = local_e8;
pfVar19 = local_f0;
pfVar21 = local_e0;
auVar55 = local_8c;
_local_7c = local_9c;
_local_6c = local_9c;
do {
iVar18 = iVar18 + -1;
pauVar1 = pauVar16 + 1;
pauVar9 = pauVar16 + 1;
pauVar10 = pauVar16 + 1;
pauVar11 = pauVar16 + 1;
auVar49 = maxps(local_9c,pauVar16[2]);
auVar43 = minps(local_8c,pauVar16[2]);
auVar38 = maxps(_local_6c,*pauVar16);
fVar48 = *pfVar19 - *(float *)*pauVar16;
fVar51 = pfVar19[1] - *(float *)(*pauVar16 + 4);
fVar52 = pfVar19[2] - *(float *)(*pauVar16 + 8);
fVar53 = pfVar19[3] - *(float *)(*pauVar16 + 0xc);
pauVar2 = pauVar16 + 2;
pauVar12 = pauVar16 + 2;
pauVar13 = pauVar16 + 2;
pauVar14 = pauVar16 + 2;
fVar42 = pfVar19[4] - *(float *)pauVar16[1];
fVar45 = pfVar19[5] - *(float *)(pauVar16[1] + 4);
fVar46 = pfVar19[6] - *(float *)(pauVar16[1] + 8);
fVar47 = pfVar19[7] - *(float *)(pauVar16[1] + 0xc);
pfVar3 = pfVar19 + 8;
pfVar6 = pfVar19 + 9;
pfVar7 = pfVar19 + 10;
pfVar8 = pfVar19 + 0xb;
pfVar19 = pfVar19 + (*(uint *)(this + 0x13c) >> 2) * 4;
auVar56 = maxps(_local_7c,pauVar16[1]);
fVar37 = *pfVar3 - *(float *)pauVar16[2];
fVar39 = *pfVar6 - *(float *)(pauVar16[2] + 4);
fVar40 = *pfVar7 - *(float *)(pauVar16[2] + 8);
fVar41 = *pfVar8 - *(float *)(pauVar16[2] + 0xc);
auVar24 = minps(auVar24,*pauVar16);
auVar55 = minps(auVar55,pauVar16[1]);
auVar33._0_4_ = fVar42 * fVar42 + fVar48 * fVar48;
auVar33._4_4_ = fVar45 * fVar45 + fVar51 * fVar51;
auVar33._8_4_ = fVar46 * fVar46 + fVar52 * fVar52;
auVar33._12_4_ = fVar47 * fVar47 + fVar53 * fVar53;
auVar27._0_4_ = fVar37 * fVar37 + auVar33._0_4_;
auVar27._4_4_ = fVar39 * fVar39 + auVar33._4_4_;
auVar27._8_4_ = fVar40 * fVar40 + auVar33._8_4_;
auVar27._12_4_ = fVar41 * fVar41 + auVar33._12_4_;
auVar28 = sqrtps(auVar27,auVar27);
auVar29._8_4_ = 0x3a83126f;
auVar29._0_8_ = 0x3a83126f3a83126f;
auVar29._12_4_ = 0x3a83126f;
auVar29 = maxps(auVar28,auVar29);
auVar28 = rcpps(auVar33,auVar29);
fVar23 = auVar28._0_4_;
fVar31 = auVar28._4_4_;
fVar54 = auVar28._8_4_;
fVar36 = auVar28._12_4_;
fVar25 = *pfVar21;
pfVar3 = pfVar21 + 1;
pfVar6 = pfVar21 + 2;
pfVar7 = pfVar21 + 3;
pfVar21 = pfVar21 + (*(uint *)(this + 0x15c) >> 2) * 4;
fVar26 = (fVar23 + fVar23) - fVar23 * fVar23 * auVar29._0_4_;
fVar32 = (fVar31 + fVar31) - fVar31 * fVar31 * auVar29._4_4_;
fVar35 = (fVar54 + fVar54) - fVar54 * fVar54 * auVar29._8_4_;
fVar36 = (fVar36 + fVar36) - fVar36 * fVar36 * auVar29._12_4_;
auVar30._0_4_ = auVar29._0_4_ * fVar25 * local_a8;
auVar30._4_4_ = auVar29._4_4_ * *pfVar3 * local_a8;
auVar30._8_4_ = auVar29._8_4_ * *pfVar6 * local_a8;
auVar30._12_4_ = auVar29._12_4_ * *pfVar7 * local_a8;
auVar28._4_4_ = fVar4;
auVar28._0_4_ = fVar4;
auVar28._8_4_ = fVar4;
auVar28._12_4_ = fVar4;
auVar29 = minps(auVar30,auVar28);
fVar25 = auVar29._0_4_;
fVar23 = auVar29._4_4_;
fVar31 = auVar29._8_4_;
fVar54 = auVar29._12_4_;
auVar50._0_4_ = fVar48 * fVar26 * fVar25 + *(float *)*pauVar16;
auVar50._4_4_ = fVar51 * fVar32 * fVar23 + *(float *)(*pauVar16 + 4);
auVar50._8_4_ = fVar52 * fVar35 * fVar31 + *(float *)(*pauVar16 + 8);
auVar50._12_4_ = fVar53 * fVar36 * fVar54 + *(float *)(*pauVar16 + 0xc);
auVar44._0_4_ = fVar42 * fVar26 * fVar25 + *(float *)pauVar16[1];
auVar44._4_4_ = fVar45 * fVar32 * fVar23 + *(float *)(pauVar16[1] + 4);
auVar44._8_4_ = fVar46 * fVar35 * fVar31 + *(float *)(pauVar16[1] + 8);
auVar44._12_4_ = fVar47 * fVar36 * fVar54 + *(float *)(pauVar16[1] + 0xc);
auVar34._0_4_ = fVar26 * fVar37 * fVar25 + *(float *)pauVar16[2];
auVar34._4_4_ = fVar32 * fVar39 * fVar23 + *(float *)(pauVar16[2] + 4);
auVar34._8_4_ = fVar35 * fVar40 * fVar31 + *(float *)(pauVar16[2] + 8);
auVar34._12_4_ = fVar36 * fVar41 * fVar54 + *(float *)(pauVar16[2] + 0xc);
_local_6c = maxps(auVar38,auVar50);
auVar24 = minps(auVar24,auVar50);
auVar55 = minps(auVar55,auVar44);
local_3c = local_3c + *(float *)*pauVar16 + auVar50._0_4_;
fStack_38 = fStack_38 + *(float *)(*pauVar16 + 4) + auVar50._4_4_;
fStack_34 = fStack_34 + *(float *)(*pauVar16 + 8) + auVar50._8_4_;
fStack_30 = fStack_30 + *(float *)(*pauVar16 + 0xc) + auVar50._12_4_;
_local_7c = maxps(auVar56,auVar44);
pauVar16 = pauVar16 + uVar5;
local_9c = maxps(auVar49,auVar34);
local_4c = local_4c + *(float *)*pauVar1 + auVar44._0_4_;
fStack_48 = fStack_48 + *(float *)(*pauVar9 + 4) + auVar44._4_4_;
fStack_44 = fStack_44 + *(float *)(*pauVar10 + 8) + auVar44._8_4_;
fStack_40 = fStack_40 + *(float *)(*pauVar11 + 0xc) + auVar44._12_4_;
local_8c = minps(auVar43,auVar34);
local_5c = local_5c + *(float *)*pauVar2 + auVar34._0_4_;
fStack_58 = fStack_58 + *(float *)(*pauVar12 + 4) + auVar34._4_4_;
fStack_54 = fStack_54 + *(float *)(*pauVar13 + 8) + auVar34._8_4_;
fStack_50 = fStack_50 + *(float *)(*pauVar14 + 0xc) + auVar34._12_4_;
} while (iVar18 != -1);
local_f0 = (float *)((int)local_f0 + (*(uint *)(this + 0x13c) >> 2) * 0x10 * iVar15);
local_e8 = (undefined1 (*) [16])(*local_e8 + uVar5 * 0x10 * iVar15);
local_e0 = (float *)((int)local_e0 + (*(uint *)(this + 0x15c) >> 2) * 0x10 * iVar15);
goto LAB_00bcd09b;
}
}
else {
iVar18 = iVar15 + -1;
if (iVar15 != 0) {
auVar24._8_4_ = 0x65a96816;
auVar24._0_8_ = 0x65a9681665a96816;
auVar24._12_4_ = 0x65a96816;
auVar55._8_4_ = 0x65a96816;
auVar55._0_8_ = 0x65a9681665a96816;
auVar55._12_4_ = 0x65a96816;
fStack_64 = -1e+23;
local_6c = 0xe5a96816e5a96816;
fStack_60 = -1e+23;
fStack_74 = -1e+23;
local_7c = 0xe5a96816e5a96816;
fStack_70 = -1e+23;
local_5c = (float)0;
fStack_58 = (float)0;
fStack_54 = (float)0;
fStack_50 = (float)0;
local_3c = (float)0;
fStack_38 = (float)0;
fStack_34 = (float)0;
fStack_30 = (float)0;
local_4c = (float)0;
fStack_48 = (float)0;
fStack_44 = (float)0;
fStack_40 = (float)0;
pauVar16 = local_e8;
do {
auVar29 = *pauVar16;
iVar18 = iVar18 + -1;
auVar24 = minps(auVar24,auVar29);
_local_6c = maxps(_local_6c,auVar29);
local_3c = auVar29._0_4_ + local_3c;
fStack_38 = auVar29._4_4_ + fStack_38;
fStack_34 = auVar29._8_4_ + fStack_34;
fStack_30 = auVar29._12_4_ + fStack_30;
auVar29 = pauVar16[1];
auVar55 = minps(auVar55,auVar29);
_local_7c = maxps(_local_7c,auVar29);
local_4c = auVar29._0_4_ + local_4c;
fStack_48 = auVar29._4_4_ + fStack_48;
fStack_44 = auVar29._8_4_ + fStack_44;
fStack_40 = auVar29._12_4_ + fStack_40;
auVar29 = pauVar16[2];
pauVar16 = pauVar16 + uVar5;
local_8c = minps(local_8c,auVar29);
local_9c = maxps(local_9c,auVar29);
local_5c = local_5c + auVar29._0_4_;
fStack_58 = fStack_58 + auVar29._4_4_;
fStack_54 = fStack_54 + auVar29._8_4_;
fStack_50 = fStack_50 + auVar29._12_4_;
} while (iVar18 != -1);
local_e8 = (undefined1 (*) [16])(*local_e8 + uVar5 * 0x10 * iVar15);
goto LAB_00bcd09b;
}
}
auVar24._8_4_ = 0x65a96816;
auVar24._0_8_ = 0x65a9681665a96816;
auVar24._12_4_ = 0x65a96816;
local_4c = (float)0;
fStack_48 = (float)0;
fStack_44 = (float)0;
fStack_40 = (float)0;
local_3c = (float)0;
fStack_38 = (float)0;
fStack_34 = (float)0;
fStack_30 = (float)0;
auVar55._8_4_ = 0x65a96816;
auVar55._0_8_ = 0x65a9681665a96816;
auVar55._12_4_ = 0x65a96816;
_local_7c = local_9c;
_local_6c = local_9c;
LAB_00bcd09b:
fVar23 = auVar24._8_4_;
fVar25 = auVar24._12_4_;
this[0x94] = (CParticleCollection)0x1;
if (auVar24._4_4_ <= auVar24._0_4_) {
auVar24._0_4_ = auVar24._4_4_;
}
fVar54 = auVar55._8_4_;
fVar31 = auVar55._12_4_;
if (auVar24._0_4_ <= fVar23) {
fVar23 = auVar24._0_4_;
}
if (fVar23 <= fVar25) {
fVar25 = fVar23;
}
*(float *)(this + 0x98) = fVar25;
if (auVar55._4_4_ <= auVar55._0_4_) {
auVar55._0_4_ = auVar55._4_4_;
}
if (auVar55._0_4_ <= fVar54) {
fVar54 = auVar55._0_4_;
}
fVar23 = local_8c._4_4_;
if (local_8c._0_4_ <= local_8c._4_4_) {
fVar23 = local_8c._0_4_;
}
if (fVar54 <= fVar31) {
fVar31 = fVar54;
}
if (local_8c._8_4_ <= fVar23) {
fVar23 = local_8c._8_4_;
}
*(float *)(this + 0x9c) = fVar31;
if (local_8c._12_4_ <= fVar23) {
fVar23 = local_8c._12_4_;
}
if ((float)local_6c._4_4_ <= (float)local_6c._0_4_) {
local_6c._4_4_ = local_6c._0_4_;
}
*(float *)(this + 0xa0) = fVar23;
if ((float)local_6c._4_4_ <= fStack_64) {
local_6c._4_4_ = fStack_64;
}
if ((float)local_6c._4_4_ <= fStack_60) {
local_6c._4_4_ = fStack_60;
}
if ((float)local_7c._4_4_ <= (float)local_7c._0_4_) {
local_7c._4_4_ = local_7c._0_4_;
}
*(undefined4 *)(this + 0xa4) = local_6c._4_4_;
if ((float)local_7c._4_4_ <= fStack_74) {
local_7c._4_4_ = fStack_74;
}
if ((float)local_7c._4_4_ <= fStack_70) {
local_7c._4_4_ = fStack_70;
}
local_7c._0_4_ = local_9c._4_4_;
if (local_9c._4_4_ <= local_9c._0_4_) {
local_7c._0_4_ = local_9c._0_4_;
}
*(undefined4 *)(this + 0xa8) = local_7c._4_4_;
if ((float)local_7c._0_4_ <= local_9c._8_4_) {
local_7c._0_4_ = local_9c._8_4_;
}
if ((float)local_7c._0_4_ <= local_9c._12_4_) {
local_7c._0_4_ = local_9c._12_4_;
}
*(undefined4 *)(this + 0xac) = local_7c._0_4_;
fStack_30 = fStack_38 + local_3c + fStack_34 + fStack_30;
local_4c = fStack_48 + local_4c + fStack_44 + fStack_40;
local_3c = fStack_58 + local_5c + fStack_54 + fStack_50;
if ((uVar17 & 3) != 0) {
iVar15 = 0;
local_e8 = local_e8 + 2;
local_f0 = local_f0 + 8;
local_5c = fStack_30;
local_6c._0_4_ = fVar23;
do {
fVar54 = *(float *)local_e8[-2];
fVar26 = *(float *)*local_e8;
if ((float)local_6c._4_4_ <= fVar54) {
local_6c._4_4_ = fVar54;
}
fVar32 = *(float *)local_e8[-1];
if (fVar54 <= fVar25) {
fVar25 = fVar54;
}
if (fVar32 <= fVar31) {
fVar31 = fVar32;
}
if ((float)local_7c._4_4_ <= fVar32) {
local_7c._4_4_ = fVar32;
}
*(undefined4 *)(this + 0xa4) = local_6c._4_4_;
fVar23 = (float)local_6c._0_4_;
if (fVar26 <= (float)local_6c._0_4_) {
fVar23 = fVar26;
}
*(float *)(this + 0x9c) = fVar31;
local_5c = local_5c + fVar54;
*(undefined4 *)(this + 0xa8) = local_7c._4_4_;
*(float *)(this + 0xa0) = fVar23;
*(float *)(this + 0x98) = fVar25;
local_4c = local_4c + fVar32;
if ((float)local_7c._0_4_ <= fVar26) {
local_7c._0_4_ = fVar26;
}
*(undefined4 *)(this + 0xac) = local_7c._0_4_;
local_3c = local_3c + fVar26;
if (0.0 < fVar4) {
local_20 = *local_f0 - fVar26;
local_24 = local_f0[-4] - fVar32;
local_28 = local_f0[-8] - fVar54;
lVar22 = (longdouble)VectorNormalize((Vector *)&local_28);
fVar23 = (float)lVar22;
if (fVar23 <= 0.001) {
fVar23 = 0.001;
}
fVar23 = local_a8 * local_e0[iVar15] * fVar23;
uVar17 = *(uint *)(this + 0x30);
if (fVar4 <= fVar23) {
fVar23 = fVar4;
}
fVar54 = local_28 * fVar23 + fVar54;
fVar25 = *(float *)(this + 0x98);
if (fVar54 <= *(float *)(this + 0x98)) {
fVar25 = fVar54;
}
fVar32 = local_24 * fVar23 + fVar32;
*(float *)(this + 0x98) = fVar25;
fVar31 = *(float *)(this + 0x9c);
if (fVar32 <= *(float *)(this + 0x9c)) {
fVar31 = fVar32;
}
fVar26 = local_20 * fVar23 + fVar26;
*(float *)(this + 0x9c) = fVar31;
local_6c._4_4_ = *(float *)(this + 0xa4);
if (*(float *)(this + 0xa4) <= fVar54) {
local_6c._4_4_ = fVar54;
}
local_5c = fVar54 + local_5c;
*(undefined4 *)(this + 0xa4) = local_6c._4_4_;
local_7c._0_4_ = *(float *)(this + 0xac);
if (*(float *)(this + 0xac) <= fVar26) {
local_7c._0_4_ = fVar26;
}
local_7c._4_4_ = *(float *)(this + 0xa8);
if (*(float *)(this + 0xa8) <= fVar32) {
local_7c._4_4_ = fVar32;
}
local_4c = fVar32 + local_4c;
*(undefined4 *)(this + 0xac) = local_7c._0_4_;
*(undefined4 *)(this + 0xa8) = local_7c._4_4_;
fVar23 = *(float *)(this + 0xa0);
if (fVar26 <= *(float *)(this + 0xa0)) {
fVar23 = fVar26;
}
local_3c = fVar26 + local_3c;
*(float *)(this + 0xa0) = fVar23;
}
iVar15 = iVar15 + 1;
local_e8 = (undefined1 (*) [16])(*local_e8 + 4);
local_f0 = local_f0 + 1;
local_6c._0_4_ = fVar23;
} while (iVar15 < (int)(uVar17 & 3));
local_ec = *(int *)(this + 0x48);
fStack_30 = local_5c;
}
*(float *)(this + 0x98) = fVar25 + *(float *)(local_ec + 0x28);
*(float *)(this + 0x9c) = fVar31 + *(float *)(local_ec + 0x2c);
*(float *)(this + 0xa0) = fVar23 + *(float *)(local_ec + 0x30);
*(float *)(this + 0xa4) = *(float *)(local_ec + 0x34) + (float)local_6c._4_4_;
*(float *)(this + 0xa8) = *(float *)(local_ec + 0x38) + (float)local_7c._4_4_;
*(float *)(this + 0xac) = (float)local_7c._0_4_ + *(float *)(local_ec + 0x3c);
if (0.0 < fVar4) {
uVar17 = uVar17 * 2;
}
fVar4 = 1.0 / (float)(int)uVar17;
*(float *)(this + 0x334) = fStack_30 * fVar4;
*(float *)(this + 0x338) = local_4c * fVar4;
*(float *)(this + 0x33c) = local_3c * fVar4;
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.