CCoreDispInfo::CreateBoundingBoxes
0x000c3200 · 468 bytes · __thiscall
_ZN13CCoreDispInfo19CreateBoundingBoxesEP14CoreDispBBox_ti
Decompiled
undefined (3 params)
/* CCoreDispInfo::CreateBoundingBoxes(CoreDispBBox_t*, int) */
void __thiscall
CCoreDispInfo::CreateBoundingBoxes(CCoreDispInfo *this,CoreDispBBox_t *param_1,int param_2)
{
float fVar1;
float fVar2;
float fVar3;
uint uVar4;
CoreDispBBox_t *pCVar5;
CoreDispBBox_t *pCVar6;
int iVar7;
int iVar8;
CoreDispBBox_t *pCVar9;
int iVar10;
int iVar11;
uint local_30;
int local_2c;
int local_28;
if (0 < param_2) {
pCVar6 = param_1;
pCVar9 = param_1 + 0xc;
do {
*(undefined4 *)pCVar6 = 0x7f7fffff;
pCVar5 = pCVar6 + 0x18;
*(undefined4 *)(pCVar6 + 4) = 0x7f7fffff;
*(undefined4 *)(pCVar6 + 8) = 0x7f7fffff;
*(undefined4 *)pCVar9 = 0x800000;
*(undefined4 *)(pCVar9 + 4) = 0x800000;
*(undefined4 *)(pCVar9 + 8) = 0x800000;
pCVar6 = pCVar5;
pCVar9 = pCVar9 + 0x18;
} while (pCVar5 != param_1 + param_2 * 0x18);
}
uVar4 = 1 << ((byte)*(undefined4 *)(this + 0xc) & 0x1f);
if (0 < (int)uVar4) {
local_30 = 0;
local_28 = 0;
local_2c = uVar4 + 1;
do {
local_30 = local_30 + 1;
pCVar6 = param_1 + local_28 * 0x18;
iVar11 = ~uVar4 + local_2c;
iVar7 = (local_2c + 1) - iVar11;
do {
iVar8 = 0;
iVar10 = iVar11;
while( true ) {
iVar10 = iVar10 * 0x90 + *(int *)(this + 0x1b8);
fVar1 = *(float *)(iVar10 + 0x28);
fVar2 = *(float *)(iVar10 + 0x2c);
fVar3 = *(float *)(iVar10 + 0x30);
if (fVar1 < *(float *)pCVar6) {
*(float *)pCVar6 = fVar1;
}
if (fVar2 < *(float *)(pCVar6 + 4)) {
*(float *)(pCVar6 + 4) = fVar2;
}
if (fVar3 < *(float *)(pCVar6 + 8)) {
*(float *)(pCVar6 + 8) = fVar3;
}
if (*(float *)(pCVar6 + 0xc) <= fVar1 && fVar1 != *(float *)(pCVar6 + 0xc)) {
*(float *)(pCVar6 + 0xc) = fVar1;
}
if (*(float *)(pCVar6 + 0x10) <= fVar2 && fVar2 != *(float *)(pCVar6 + 0x10)) {
*(float *)(pCVar6 + 0x10) = fVar2;
}
if (*(float *)(pCVar6 + 0x14) <= fVar3 && fVar3 != *(float *)(pCVar6 + 0x14)) {
*(float *)(pCVar6 + 0x14) = fVar3;
}
iVar8 = iVar8 + 1;
if (iVar8 == 4) break;
iVar10 = iVar7 + iVar11;
if (((iVar8 != 2) && (iVar10 = iVar11 + 1, iVar8 != 3)) &&
(iVar10 = iVar11 - ~uVar4, iVar8 != 1)) {
iVar10 = iVar11;
}
}
iVar11 = iVar11 + 1;
pCVar6 = pCVar6 + 0x18;
} while (iVar11 != local_2c + -1);
local_28 = local_28 + uVar4;
local_2c = local_2c + uVar4 + 1;
} while (local_30 != uVar4);
}
if (0 < param_2) {
pCVar6 = param_1 + param_2 * 0x18;
do {
iVar7 = 0;
do {
*(float *)(param_1 + iVar7 * 4) = *(float *)(param_1 + iVar7 * 4) - 1.0;
*(float *)(param_1 + iVar7 * 4 + 0xc) = *(float *)(param_1 + iVar7 * 4 + 0xc) + 1.0;
iVar7 = iVar7 + 1;
} while (iVar7 != 3);
param_1 = param_1 + 0x18;
} while (param_1 != pCVar6);
}
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.