CVoxelHash::RenderObjectsInPlayerLeafs
0x001df1b0 · 1285 bytes · __cdecl
_ZN10CVoxelHash26RenderObjectsInPlayerLeafsERK6VectorS2_f
Decompiled
undefined (3 params)
/* CVoxelHash::RenderObjectsInPlayerLeafs(Vector const&, Vector const&, float) */
void CVoxelHash::RenderObjectsInPlayerLeafs(Vector *param_1,Vector *param_2,float param_3)
{
undefined4 *puVar1;
float fVar2;
float fVar3;
float fVar4;
float fVar5;
float fVar6;
float fVar7;
float fVar8;
float fVar9;
float fVar10;
uint uVar11;
ushort uVar12;
int iVar13;
undefined4 uVar14;
int iVar15;
int iVar16;
undefined4 uVar17;
char cVar18;
int *piVar19;
undefined4 *puVar20;
uint uVar21;
uint uVar22;
uint uVar23;
undefined4 *puVar24;
byte bVar25;
uint uVar26;
int iVar27;
uint *puVar28;
uint uVar29;
uint uVar30;
undefined4 *local_74;
CUtlHashFast<int,CUtlHashFastNoHash> local_68 [72];
undefined4 local_20;
fVar2 = *(float *)param_2;
fVar3 = *(float *)param_1;
bVar25 = (char)*(undefined4 *)(param_1 + 0x104c) * '\x02' + 8;
fVar4 = *(float *)(param_2 + 4);
fVar5 = *(float *)(param_1 + 4);
fVar6 = *(float *)(param_2 + 8);
fVar7 = *(float *)(param_1 + 8);
fVar8 = *(float *)param_3;
fVar9 = *(float *)((int)param_3 + 4);
fVar10 = *(float *)((int)param_3 + 8);
iVar13 = *(int *)(param_1 + 0x1048);
piVar19 = (int *)___tls_get_addr();
iVar27 = *(int *)(iVar13 + 0xdc);
uVar14 = *(undefined4 *)(iVar13 + 0x3c + *piVar19 * 4);
puVar20 = *(undefined4 **)(iVar13 + 0xd8);
if (puVar20 != (undefined4 *)0x0) {
do {
cVar18 = ThreadInterlockedAssignIf64(iVar13 + 0xd8,*puVar20,iVar27 + -1,puVar20,iVar27);
if (cVar18 != '\0') {
uVar12 = *(ushort *)(iVar13 + 0xd4);
local_74 = puVar20 + 2;
puVar24 = (undefined4 *)puVar20[4];
if (uVar12 <= *(ushort *)(puVar20 + 2)) {
if (puVar24 != (undefined4 *)0x0) {
memset(puVar24,0,(uint)*(ushort *)((int)puVar20 + 10) << 2);
}
goto LAB_001df38c;
}
uVar21 = (int)(uVar12 + 0x1f) >> 5;
if (uVar21 == *(ushort *)((int)puVar20 + 10)) goto LAB_001df61e;
if (puVar24 == (undefined4 *)0x0) goto LAB_001df603;
puVar1 = puVar20 + 3;
if (puVar24 == puVar1) {
if (uVar21 != 1) {
puVar24 = malloc(uVar21 * 4);
puVar20[4] = puVar24;
*puVar24 = puVar20[3];
puVar24 = (undefined4 *)puVar20[4];
}
}
else if (uVar21 == 1) {
puVar20[3] = *puVar24;
free(puVar24);
puVar20[4] = puVar1;
puVar24 = puVar1;
}
else {
puVar24 = realloc(puVar24,uVar21 * 4);
puVar20[4] = puVar24;
}
goto LAB_001df61a;
}
puVar20 = *(undefined4 **)(iVar13 + 0xd8);
iVar27 = *(int *)(iVar13 + 0xdc);
} while (puVar20 != (undefined4 *)0x0);
}
puVar20 = operator_new(0x18);
puVar20[2] = 0;
local_74 = puVar20 + 2;
puVar20[3] = 0;
puVar20[4] = 0;
uVar12 = *(ushort *)(iVar13 + 0xd4);
if (*(ushort *)(puVar20 + 2) < uVar12) {
uVar21 = (int)(uVar12 + 0x1f) >> 5;
if (uVar21 != *(ushort *)((int)puVar20 + 10)) {
LAB_001df603:
if (uVar21 == 1) {
puVar24 = puVar20 + 3;
puVar20[4] = puVar24;
}
else {
puVar24 = malloc(uVar21 * 4);
puVar20[4] = puVar24;
}
LAB_001df61a:
*(short *)((int)puVar20 + 10) = (short)uVar21;
LAB_001df61e:
if (puVar24 != (undefined4 *)0x0) {
memset(puVar24,0,uVar21 << 2);
}
}
*(ushort *)(puVar20 + 2) = uVar12;
}
LAB_001df38c:
piVar19 = (int *)___tls_get_addr();
*(undefined4 **)(iVar13 + 0x3c + *piVar19 * 4) = local_74;
iVar13 = *(int *)(param_1 + 0x1048);
CUtlHashFast<int,CUtlHashFastNoHash>::CUtlHashFast(local_68);
local_20 = *(undefined4 *)(iVar13 + 0x38);
uVar29 = (int)(fVar6 - fVar7) >> (bVar25 & 0x1f) & 0x3ff;
uVar21 = (int)(fVar2 - fVar3) >> (bVar25 & 0x1f) & 0x7ff;
uVar30 = (uint)((ushort)((int)(fVar10 - fVar7) >> (bVar25 & 0x1f)) & 0x3ff);
do {
if (((int)(fVar8 - fVar3) >> (bVar25 & 0x1f) & 0x7ffU) < uVar21) {
iVar27 = *(int *)(param_1 + 0x1048);
iVar13 = iVar27 + *piVar19 * 4;
iVar15 = *(int *)(iVar13 + 0x3c);
do {
iVar16 = *(int *)(iVar27 + 0xdc);
uVar17 = *(undefined4 *)(iVar27 + 0xd8);
*(undefined4 *)(iVar15 + -8) = uVar17;
/* try { // try from 001df583 to 001df587 has its CatchHandler @ 001df5e0 */
cVar18 = ThreadInterlockedAssignIf64
(iVar27 + 0xd8,iVar15 + -8,iVar16 + 0x10001,uVar17,iVar16);
} while (cVar18 == '\0');
*(undefined4 *)(iVar13 + 0x3c) = uVar14;
CUtlHashFast<int,CUtlHashFastNoHash>::~CUtlHashFast(local_68);
return;
}
for (uVar11 = (int)(fVar4 - fVar5) >> (bVar25 & 0x1f) & 0x7ff;
uVar11 <= ((int)(fVar9 - fVar5) >> (bVar25 & 0x1f) & 0x7ffU); uVar11 = uVar11 + 1) {
if (uVar29 <= uVar30) {
uVar26 = uVar29;
LAB_001df478:
do {
uVar22 = uVar21 & 0x7ff | (uVar11 & 0x7ff) << 0xb;
uVar23 = uVar22 | uVar26 << 0x16;
uVar22 = ((((uVar21 & 0xff) + 0xaaaaaaaa) * 0x21 + ((uVar22 & 0xff00) >> 8)) * 0x21 +
((int)uVar23 >> 0x10 & 0xffU)) * 0x21 + ((uVar26 << 0x16) >> 0x18);
puVar28 = *(uint **)(param_1 + (((int)uVar22 >> 0x10 ^ uVar22) & 0x1ff) * 8 + 0xc);
while (puVar28 != (uint *)0x0) {
if (uVar23 == *puVar28) {
if ((puVar28 != (uint *)&DAT_ffffffff) && (uVar22 = puVar28[1], uVar22 != 0))
goto LAB_001df5c8;
break;
}
puVar28 = (uint *)puVar28[3];
if (*(uint **)(param_1 + (((int)uVar22 >> 0x10 ^ uVar22) & 0x1ff) * 8 + 0xc) == puVar28)
break;
}
uVar26 = uVar26 + 1;
} while (uVar26 <= uVar30);
}
LAB_001df4ff:
}
uVar21 = uVar21 + 1;
} while( true );
LAB_001df5c8:
do {
uVar22 = *(uint *)(uVar22 + 8);
} while (uVar22 != 0);
uVar26 = uVar26 + 1;
if (uVar30 < uVar26) goto LAB_001df4ff;
goto LAB_001df478;
}
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.