CEngineTrace::GetBrushesInAABB
0x0015c910 · 1041 bytes · __thiscall
_ZN12CEngineTrace16GetBrushesInAABBERK6VectorS2_P10CUtlVectorIi10CUtlMemoryIiiEEi
Decompiled
undefined (5 params)
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* CEngineTrace::GetBrushesInAABB(Vector const&, Vector const&, CUtlVector<int, CUtlMemory<int, int>
>*, int) */
void __thiscall
CEngineTrace::GetBrushesInAABB
(CEngineTrace *this,Vector *param_1,Vector *param_2,CUtlVector *param_3,int param_4)
{
int *piVar1;
uint *puVar2;
ushort uVar3;
undefined4 uVar4;
int iVar5;
CUtlVector *pCVar6;
char cVar7;
uint uVar8;
uint uVar9;
float *pfVar10;
int iVar11;
int *piVar12;
int in_GS_OFFSET;
undefined4 uStack_d0;
int aiStack_cc [7];
CUtlVector *local_b0;
int local_ac;
int local_a8;
int local_a4;
uint local_a0;
uint local_98;
int local_94 [5];
float local_80 [21];
undefined1 local_2c [12];
int local_20;
piVar12 = aiStack_cc;
local_20 = *(int *)(in_GS_OFFSET + 0x14);
local_b0 = param_3;
if (param_3 != (CUtlVector *)0x0) {
uVar8 = 0;
pfVar10 = local_80 + 2;
do {
while ((uVar8 & 1) != 0) {
pfVar10[-2] = *(float *)param_2;
if ((uVar8 & 2) == 0) goto LAB_0015c987;
LAB_0015c953:
pfVar10[-1] = *(float *)(param_2 + 4);
if ((uVar8 & 4) == 0) goto LAB_0015c995;
LAB_0015c961:
uVar8 = uVar8 + 1;
*pfVar10 = *(float *)(param_2 + 8);
pfVar10 = pfVar10 + 3;
if (uVar8 == 8) goto LAB_0015c9aa;
}
pfVar10[-2] = *(float *)param_1;
if ((uVar8 & 2) != 0) goto LAB_0015c953;
LAB_0015c987:
pfVar10[-1] = *(float *)(param_1 + 4);
if ((uVar8 & 4) != 0) goto LAB_0015c961;
LAB_0015c995:
uVar8 = uVar8 + 1;
*pfVar10 = *(float *)(param_1 + 8);
pfVar10 = pfVar10 + 3;
} while (uVar8 != 8);
LAB_0015c9aa:
iVar5 = -((DAT_00394394 * 8 + 0xfU & 0xfffffff0) + 0x10);
piVar12 = (int *)((int)aiStack_cc + iVar5);
*(int *)((int)aiStack_cc + iVar5 + 0xc) = DAT_00394394 * 2;
aiStack_cc[6] = (int)&local_b0 + iVar5;
*(undefined4 *)((int)aiStack_cc + iVar5 + 0x10) = 0;
*(Vector **)((int)aiStack_cc + iVar5 + 4) = param_2;
*(Vector **)((int)aiStack_cc + iVar5) = param_1;
*(int *)((int)aiStack_cc + iVar5 + 8) = aiStack_cc[6];
*(undefined4 *)((int)&uStack_d0 + iVar5) = 0x15c9f3;
aiStack_cc[5] =
CM_BoxLeafnums(*(Vector **)((int)aiStack_cc + iVar5),
*(Vector **)((int)aiStack_cc + iVar5 + 4),
*(int **)((int)aiStack_cc + iVar5 + 8),
*(int *)((int)aiStack_cc + iVar5 + 0xc),
*(int **)((int)aiStack_cc + iVar5 + 0x10));
iVar11 = DAT_003943c0;
local_94[0] = 0;
local_94[1] = 0;
local_94[2] = 0;
local_94[4] = 0;
local_94[3] = 0;
if (DAT_003943c0 != 0) {
*(int *)((int)aiStack_cc + iVar5 + 4) = DAT_003943c0;
*(int **)((int)aiStack_cc + iVar5) = local_94;
*(undefined4 *)((int)&uStack_d0 + iVar5) = 0x15ccf8;
CUtlVector<int,CUtlMemory<int,int>>::GrowVector
(*(CUtlVector<int,CUtlMemory<int,int>> **)((int)aiStack_cc + iVar5),
*(int *)((int)aiStack_cc + iVar5 + 4));
*(int *)((int)aiStack_cc + iVar5 + 8) = iVar11;
*(undefined4 *)((int)aiStack_cc + iVar5 + 4) = 0;
*(int **)((int)aiStack_cc + iVar5) = local_94;
*(undefined4 *)((int)&uStack_d0 + iVar5) = 0x15cd12;
CUtlVector<int,CUtlMemory<int,int>>::ShiftElementsRight
(*(CUtlVector<int,CUtlMemory<int,int>> **)((int)aiStack_cc + iVar5),
*(int *)((int)aiStack_cc + iVar5 + 4),*(int *)((int)aiStack_cc + iVar5 + 8));
}
iVar11 = local_94[0];
*(undefined4 *)((int)aiStack_cc + iVar5 + 4) = 0;
*(int *)((int)aiStack_cc + iVar5 + 8) = DAT_003943c0 << 2;
*(int *)((int)aiStack_cc + iVar5) = iVar11;
*(undefined4 *)((int)&uStack_d0 + iVar5) = 0x15ca4f;
memset(*(void **)((int)aiStack_cc + iVar5),*(int *)((int)aiStack_cc + iVar5 + 4),
*(size_t *)((int)aiStack_cc + iVar5 + 8));
local_ac = 0;
if (aiStack_cc[5] != 0) {
do {
local_a8 = local_94[0];
iVar11 = *(int *)(aiStack_cc[6] + local_ac * 4);
if ((iVar11 < 0) || (DAT_0039439c <= iVar11)) {
*(char **)((int)aiStack_cc + iVar5) = "Cannot load corrupted map.\n";
/* try { // try from 0015ca9e to 0015cd11 has its CatchHandler @ 0015cd28 */
*(undefined4 *)((int)&uStack_d0 + iVar5) = 0x15caa3;
Error();
}
local_a0 = 0;
local_a4 = iVar11 * 0x10 + DAT_00394398;
if (*(short *)(local_a4 + 10) != 0) {
do {
iVar11 = *(ushort *)(local_a4 + 8) + local_a0;
if ((iVar11 < 0) || (DAT_003943b0 <= iVar11)) {
*(char **)((int)aiStack_cc + iVar5) = "Cannot load corrupted map.\n";
*(undefined4 *)((int)&uStack_d0 + iVar5) = 0x15cafe;
Error();
}
uVar8 = (uint)*(ushort *)(DAT_003943ac + iVar11 * 2);
local_98 = uVar8;
if (DAT_003943c8 <= (int)uVar8) {
*(char **)((int)aiStack_cc + iVar5) = "Cannot load corrupted map.\n";
*(undefined4 *)((int)&uStack_d0 + iVar5) = 0x15cb23;
Error();
}
piVar1 = (int *)(local_a8 + local_98 * 4);
if (*piVar1 == 0) {
puVar2 = (uint *)(DAT_003943c4 + uVar8 * 8);
*piVar1 = 1;
if ((param_4 & *puVar2) != 0) {
if ((short)puVar2[1] == -1) {
uVar3 = *(ushort *)((int)puVar2 + 6);
if (DAT_00394378 <= (int)(uint)uVar3) {
*(char **)((int)aiStack_cc + iVar5) = "Cannot load corrupted map.\n";
*(undefined4 *)((int)&uStack_d0 + iVar5) = 0x15cce4;
Error();
}
iVar11 = (uint)uVar3 * 0x30 + _DAT_00394374;
*(float **)((int)aiStack_cc + iVar5 + 8) = local_80;
*(undefined1 **)((int)aiStack_cc + iVar5 + 0xc) = local_2c;
*(int *)((int)aiStack_cc + iVar5) = iVar11;
*(int *)((int)aiStack_cc + iVar5 + 4) = iVar11 + 0x10;
*(undefined4 *)((int)&uStack_d0 + iVar5) = 0x15cca5;
cVar7 = IsBoxIntersectingBox
(*(Vector **)((int)aiStack_cc + iVar5),
*(Vector **)((int)aiStack_cc + iVar5 + 4),
*(Vector **)((int)aiStack_cc + iVar5 + 8),
*(Vector **)((int)aiStack_cc + iVar5 + 0xc));
if (cVar7 == '\0') goto LAB_0015cbf0;
}
else {
uVar8 = 0;
if ((short)puVar2[1] != 0) {
do {
iVar11 = *(ushort *)((int)puVar2 + 6) + uVar8;
if ((iVar11 < 0) || (DAT_0039436c <= iVar11)) {
*(char **)((int)aiStack_cc + iVar5) = "Cannot load corrupted map.\n";
*(undefined4 *)((int)&uStack_d0 + iVar5) = 0x15cb9b;
Error();
}
pfVar10 = *(float **)(DAT_00394368 + iVar11 * 8);
uVar9 = (uint)*(byte *)((int)pfVar10 + 0x11);
if (0.0 < (*pfVar10 * local_80[uVar9 * 3] - pfVar10[3]) +
pfVar10[1] * local_80[uVar9 * 3 + 1] +
pfVar10[2] * local_80[uVar9 * 3 + 2]) {
if ((ushort)puVar2[1] != uVar8) goto LAB_0015cbf0;
break;
}
uVar8 = uVar8 + 1;
} while (uVar8 != (ushort)puVar2[1]);
}
}
pCVar6 = local_b0;
*(uint **)((int)aiStack_cc + iVar5 + 8) = &local_98;
uVar4 = *(undefined4 *)(pCVar6 + 0xc);
*(CUtlVector **)((int)aiStack_cc + iVar5) = pCVar6;
*(undefined4 *)((int)aiStack_cc + iVar5 + 4) = uVar4;
*(undefined4 *)((int)&uStack_d0 + iVar5) = 0x15cccf;
CUtlVector<int,CUtlMemory<int,int>>::InsertBefore
(*(CUtlVector<int,CUtlMemory<int,int>> **)((int)aiStack_cc + iVar5),
*(int *)((int)aiStack_cc + iVar5 + 4),
*(int **)((int)aiStack_cc + iVar5 + 8));
}
}
LAB_0015cbf0:
local_a0 = local_a0 + 1;
} while (local_a0 != *(ushort *)(local_a4 + 10));
}
local_ac = local_ac + 1;
} while (aiStack_cc[5] != local_ac);
}
local_94[3] = 0;
*(int **)((int)aiStack_cc + iVar5) = local_94;
*(undefined4 *)((int)&uStack_d0 + iVar5) = 0x15cc3e;
CUtlMemory<int,int>::Purge(*(CUtlMemory<int,int> **)((int)aiStack_cc + iVar5));
local_94[4] = local_94[0];
*(int **)((int)aiStack_cc + iVar5) = local_94;
*(undefined4 *)((int)&uStack_d0 + iVar5) = 0x15cc55;
CUtlMemory<int,int>::Purge(*(CUtlMemory<int,int> **)((int)aiStack_cc + iVar5));
}
if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {
/* WARNING: Subroutine does not return */
*(undefined1 **)((int)piVar12 + -4) = &LAB_0015cd28;
__stack_chk_fail();
}
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.