Mod_LoadOcclusion
0x0019b300 · 2833 bytes · unknown
_Z17Mod_LoadOcclusionv
Decompiled
undefined (0 params)
/* WARNING: Unknown calling convention -- yet parameter storage is locked */
/* Mod_LoadOcclusion() */
void Mod_LoadOcclusion(void)
{
int iVar1;
char cVar2;
void *pvVar3;
undefined4 uVar4;
undefined4 *puVar5;
int iVar6;
uint *puVar7;
uint uVar8;
undefined1 *puVar9;
int in_GS_OFFSET;
int local_1d4;
uint local_1c8;
uint local_1c4;
uint local_1c0;
uint local_1bc;
uint local_1b8;
uint local_1b4;
undefined4 local_1b0;
undefined4 local_1ac;
undefined4 local_1a8;
undefined4 local_1a4;
undefined4 local_1a0;
undefined4 local_19c;
undefined4 local_198;
undefined4 local_194;
undefined4 local_190;
undefined4 local_18c;
undefined4 local_188;
undefined4 local_184;
undefined4 local_180;
undefined4 local_17c;
int local_178 [3];
int local_16c;
byte local_163;
int local_158;
byte local_144;
int local_140 [2];
int local_138;
int local_134;
void *local_130;
int local_128;
undefined1 local_124 [260];
int local_20;
local_20 = *(int *)(in_GS_OFFSET + 0x14);
CMapLoadHelper::CMapLoadHelper((CMapLoadHelper *)local_140,9);
iVar1 = s_pMap;
*(undefined4 *)(s_pMap + 0x24) = 0;
*(undefined4 *)(iVar1 + 0x28) = 0;
*(undefined4 *)(iVar1 + 0x2c) = 0;
*(undefined4 *)(iVar1 + 0x30) = 0;
*(undefined4 *)(iVar1 + 0x34) = 0;
*(undefined4 *)(iVar1 + 0x38) = 0;
if (local_140[0] == 0) {
if (local_134 != 0) {
(**(code **)(*g_pFileSystem + 0x150))(g_pFileSystem,local_134);
}
goto LAB_0019b386;
}
/* try { // try from 0019b3c7 to 0019b3cb has its CatchHandler @ 0019be90 */
CUtlBuffer::CUtlBuffer((CUtlBuffer *)local_178,local_130,local_140[0],8);
if (local_138 == 1) {
if ((local_163 & 1) == 0) {
cVar2 = CUtlBuffer::CheckGet((CUtlBuffer *)local_178,4);
if (cVar2 != '\0') {
if ((local_144 & 1) == 0) {
uVar8 = *(uint *)(local_178[0] + (local_16c - local_158));
}
else {
puVar7 = (uint *)((local_16c - local_158) + local_178[0]);
if (puVar7 == (uint *)0x0) {
puVar7 = &local_1bc;
}
local_1a4 = local_1bc;
local_1a4 = CONCAT31((int3)(local_1bc >> 8),*(undefined1 *)((int)puVar7 + 3));
local_1a4._2_2_ = (undefined2)(local_1bc >> 0x10);
local_1a4._0_2_ =
CONCAT11(*(undefined1 *)((int)puVar7 + 2),*(undefined1 *)((int)puVar7 + 3));
local_1a4._3_1_ = (undefined1)(local_1bc >> 0x18);
local_1a4._0_3_ = CONCAT12(*(undefined1 *)((int)puVar7 + 1),(undefined2)local_1a4);
local_1a4 = CONCAT13((char)*puVar7,(undefined3)local_1a4);
_V_memcpy(&local_1bc,&local_1a4,4);
uVar8 = local_1bc;
}
local_16c = local_16c + 4;
goto LAB_0019b65d;
}
*(undefined4 *)(iVar1 + 0x24) = 0;
}
else {
local_1bc = 0;
CUtlBuffer::Scanf((CUtlBuffer *)local_178,"%d",&local_1bc);
uVar8 = local_1bc;
LAB_0019b65d:
*(uint *)(iVar1 + 0x24) = uVar8;
if (uVar8 != 0) {
puVar9 = local_124;
if ((&s_MapLumpFiles)[local_128 * 7] == 0) {
puVar9 = s_szMapPathName;
}
if ((((int)uVar8 >> 0x1f) << 3 | uVar8 >> 0x1d) +
(((int)uVar8 >> 0x1f) << 5 | uVar8 >> 0x1b) + (uint)CARRY4(uVar8 * 8,uVar8 * 0x20) !=
(int)(uVar8 * 0x28) >> 0x1f) {
Sys_Error("Couldn\'t load corrupted map %s",puVar9);
}
uVar4 = Hunk_AllocName(uVar8 * 0x28,"occluder data",true);
*(undefined4 *)(iVar1 + 0x28) = uVar4;
iVar6 = 0;
local_1d4 = 0;
if (0 < *(int *)(iVar1 + 0x24)) {
do {
CUtlBuffer::Get((CUtlBuffer *)local_178,&local_19c,0x24);
local_1d4 = local_1d4 + 1;
puVar5 = (undefined4 *)(*(int *)(iVar1 + 0x28) + iVar6);
*puVar5 = local_19c;
puVar5[1] = local_198;
puVar5[2] = local_194;
puVar5[3] = local_190;
puVar5[4] = local_18c;
puVar5[5] = local_188;
puVar5[6] = local_184;
puVar5[7] = local_180;
puVar5[8] = local_17c;
*(undefined4 *)(*(int *)(iVar1 + 0x28) + 0x24 + iVar6) = 1;
iVar6 = iVar6 + 0x28;
} while (local_1d4 < *(int *)(iVar1 + 0x24));
}
}
}
if ((local_163 & 1) == 0) {
cVar2 = CUtlBuffer::CheckGet((CUtlBuffer *)local_178,4);
if (cVar2 != '\0') {
if ((local_144 & 1) == 0) {
uVar8 = *(uint *)(local_178[0] + (local_16c - local_158));
}
else {
puVar7 = (uint *)((local_16c - local_158) + local_178[0]);
if (puVar7 == (uint *)0x0) {
puVar7 = &local_1b8;
}
local_1a0 = local_1b8;
local_1a0 = CONCAT31((int3)(local_1b8 >> 8),*(undefined1 *)((int)puVar7 + 3));
local_1a0._2_2_ = (undefined2)(local_1b8 >> 0x10);
local_1a0._0_2_ =
CONCAT11(*(undefined1 *)((int)puVar7 + 2),*(undefined1 *)((int)puVar7 + 3));
local_1a0._3_1_ = (undefined1)(local_1b8 >> 0x18);
local_1a0._0_3_ = CONCAT12(*(undefined1 *)((int)puVar7 + 1),(undefined2)local_1a0);
local_1a0 = CONCAT13((char)*puVar7,(undefined3)local_1a0);
_V_memcpy(&local_1b8,&local_1a0,4);
uVar8 = local_1b8;
}
local_16c = local_16c + 4;
goto LAB_0019b7b0;
}
*(undefined4 *)(iVar1 + 0x2c) = 0;
}
else {
local_1b8 = 0;
CUtlBuffer::Scanf((CUtlBuffer *)local_178,"%d",&local_1b8);
uVar8 = local_1b8;
LAB_0019b7b0:
*(uint *)(iVar1 + 0x2c) = uVar8;
if (uVar8 != 0) {
puVar9 = s_szMapPathName;
if ((&s_MapLumpFiles)[local_128 * 7] != 0) {
puVar9 = local_124;
}
iVar6 = uVar8 * 0xc;
if (((((int)uVar8 >> 0x1f) << 4 | uVar8 >> 0x1c) -
(((int)uVar8 >> 0x1f) << 2 | uVar8 >> 0x1e)) - (uint)(uVar8 * 0x10 < uVar8 * 4) !=
iVar6 >> 0x1f) {
Sys_Error("Couldn\'t load corrupted map %s",puVar9);
}
pvVar3 = (void *)Hunk_AllocName(iVar6,"occluder poly data",true);
*(void **)(iVar1 + 0x30) = pvVar3;
CUtlBuffer::Get((CUtlBuffer *)local_178,pvVar3,iVar6);
}
}
if ((local_163 & 1) != 0) {
local_1b4 = 0;
CUtlBuffer::Scanf((CUtlBuffer *)local_178,"%d",&local_1b4);
uVar8 = local_1b4;
goto LAB_0019b87f;
}
cVar2 = CUtlBuffer::CheckGet((CUtlBuffer *)local_178,4);
if (cVar2 != '\0') {
if ((local_144 & 1) == 0) {
LAB_0019bbe8:
uVar8 = *(uint *)(local_178[0] + (local_16c - local_158));
}
else {
puVar7 = (uint *)((local_16c - local_158) + local_178[0]);
if (puVar7 == (uint *)0x0) {
puVar7 = &local_1b4;
}
local_19c = local_1b4;
local_19c = CONCAT31((int3)(local_1b4 >> 8),*(undefined1 *)((int)puVar7 + 3));
local_19c._2_2_ = (undefined2)(local_1b4 >> 0x10);
local_19c._0_2_ =
CONCAT11(*(undefined1 *)((int)puVar7 + 2),*(undefined1 *)((int)puVar7 + 3));
local_19c._3_1_ = (undefined1)(local_1b4 >> 0x18);
local_19c._0_3_ = CONCAT12(*(undefined1 *)((int)puVar7 + 1),(undefined2)local_19c);
local_19c = CONCAT13((char)*puVar7,(undefined3)local_19c);
_V_memcpy(&local_1b4,&local_19c,4);
uVar8 = local_1b4;
}
goto LAB_0019bab8;
}
LAB_0019bad0:
*(undefined4 *)(iVar1 + 0x34) = 0;
}
else if (local_138 == 2) {
if ((local_163 & 1) == 0) {
cVar2 = CUtlBuffer::CheckGet((CUtlBuffer *)local_178,4);
if (cVar2 != '\0') {
if ((local_144 & 1) == 0) {
uVar8 = *(uint *)(local_178[0] + (local_16c - local_158));
}
else {
puVar7 = (uint *)((local_16c - local_158) + local_178[0]);
if (puVar7 == (uint *)0x0) {
puVar7 = &local_1c8;
}
local_1b0 = local_1c8;
local_1b0 = CONCAT31((int3)(local_1c8 >> 8),*(undefined1 *)((int)puVar7 + 3));
local_1b0._2_2_ = (undefined2)(local_1c8 >> 0x10);
local_1b0._0_2_ =
CONCAT11(*(undefined1 *)((int)puVar7 + 2),*(undefined1 *)((int)puVar7 + 3));
local_1b0._3_1_ = (undefined1)(local_1c8 >> 0x18);
local_1b0._0_3_ = CONCAT12(*(undefined1 *)((int)puVar7 + 1),(undefined2)local_1b0);
local_1b0 = CONCAT13((char)*puVar7,(undefined3)local_1b0);
_V_memcpy(&local_1c8,&local_1b0,4);
uVar8 = local_1c8;
}
local_16c = local_16c + 4;
goto LAB_0019b46d;
}
*(undefined4 *)(iVar1 + 0x24) = 0;
}
else {
local_1c8 = 0;
/* try { // try from 0019b462 to 0019be12 has its CatchHandler @ 0019be5a */
CUtlBuffer::Scanf((CUtlBuffer *)local_178,"%d",&local_1c8);
uVar8 = local_1c8;
LAB_0019b46d:
*(uint *)(iVar1 + 0x24) = uVar8;
if (uVar8 != 0) {
puVar9 = local_124;
if ((&s_MapLumpFiles)[local_128 * 7] == 0) {
puVar9 = s_szMapPathName;
}
iVar6 = uVar8 * 0x28;
if ((((int)uVar8 >> 0x1f) << 3 | uVar8 >> 0x1d) +
(((int)uVar8 >> 0x1f) << 5 | uVar8 >> 0x1b) + (uint)CARRY4(uVar8 * 8,uVar8 * 0x20) !=
iVar6 >> 0x1f) {
Sys_Error("Couldn\'t load corrupted map %s",puVar9);
}
pvVar3 = (void *)Hunk_AllocName(iVar6,"occluder data",true);
*(void **)(iVar1 + 0x28) = pvVar3;
CUtlBuffer::Get((CUtlBuffer *)local_178,pvVar3,iVar6);
}
}
if ((local_163 & 1) == 0) {
cVar2 = CUtlBuffer::CheckGet((CUtlBuffer *)local_178,4);
if (cVar2 != '\0') {
if ((local_144 & 1) == 0) {
uVar8 = *(uint *)(local_178[0] + (local_16c - local_158));
}
else {
puVar7 = (uint *)((local_16c - local_158) + local_178[0]);
if (puVar7 == (uint *)0x0) {
puVar7 = &local_1c4;
}
local_1ac = local_1c4;
local_1ac = CONCAT31((int3)(local_1c4 >> 8),*(undefined1 *)((int)puVar7 + 3));
local_1ac._2_2_ = (undefined2)(local_1c4 >> 0x10);
local_1ac._0_2_ =
CONCAT11(*(undefined1 *)((int)puVar7 + 2),*(undefined1 *)((int)puVar7 + 3));
local_1ac._3_1_ = (undefined1)(local_1c4 >> 0x18);
local_1ac._0_3_ = CONCAT12(*(undefined1 *)((int)puVar7 + 1),(undefined2)local_1ac);
local_1ac = CONCAT13((char)*puVar7,(undefined3)local_1ac);
_V_memcpy(&local_1c4,&local_1ac,4);
uVar8 = local_1c4;
}
local_16c = local_16c + 4;
goto LAB_0019b544;
}
*(undefined4 *)(iVar1 + 0x2c) = 0;
}
else {
local_1c4 = 0;
CUtlBuffer::Scanf((CUtlBuffer *)local_178,"%d",&local_1c4);
uVar8 = local_1c4;
LAB_0019b544:
*(uint *)(iVar1 + 0x2c) = uVar8;
if (uVar8 != 0) {
puVar9 = s_szMapPathName;
if ((&s_MapLumpFiles)[local_128 * 7] != 0) {
puVar9 = local_124;
}
iVar6 = uVar8 * 0xc;
if (((((int)uVar8 >> 0x1f) << 4 | uVar8 >> 0x1c) -
(((int)uVar8 >> 0x1f) << 2 | uVar8 >> 0x1e)) - (uint)(uVar8 * 0x10 < uVar8 * 4) !=
iVar6 >> 0x1f) {
Sys_Error("Couldn\'t load corrupted map %s",puVar9);
}
pvVar3 = (void *)Hunk_AllocName(iVar6,"occluder poly data",true);
*(void **)(iVar1 + 0x30) = pvVar3;
CUtlBuffer::Get((CUtlBuffer *)local_178,pvVar3,iVar6);
}
}
if ((local_163 & 1) == 0) {
cVar2 = CUtlBuffer::CheckGet((CUtlBuffer *)local_178,4);
if (cVar2 == '\0') goto LAB_0019bad0;
if ((local_144 & 1) == 0) goto LAB_0019bbe8;
puVar7 = (uint *)((local_16c - local_158) + local_178[0]);
if (puVar7 == (uint *)0x0) {
puVar7 = &local_1c0;
}
local_1a8 = local_1c0;
local_1a8 = CONCAT31((int3)(local_1c0 >> 8),*(undefined1 *)((int)puVar7 + 3));
local_1a8._2_2_ = (undefined2)(local_1c0 >> 0x10);
local_1a8._0_2_ = CONCAT11(*(undefined1 *)((int)puVar7 + 2),*(undefined1 *)((int)puVar7 + 3));
local_1a8._3_1_ = (undefined1)(local_1c0 >> 0x18);
local_1a8._0_3_ = CONCAT12(*(undefined1 *)((int)puVar7 + 1),(undefined2)local_1a8);
local_1a8 = CONCAT13((char)*puVar7,(undefined3)local_1a8);
_V_memcpy(&local_1c0,&local_1a8,4);
uVar8 = local_1c0;
LAB_0019bab8:
local_16c = local_16c + 4;
}
else {
local_1c0 = 0;
CUtlBuffer::Scanf((CUtlBuffer *)local_178,"%d",&local_1c0);
uVar8 = local_1c0;
}
LAB_0019b87f:
*(uint *)(iVar1 + 0x34) = uVar8;
if (uVar8 != 0) {
puVar9 = s_szMapPathName;
if ((&s_MapLumpFiles)[local_128 * 7] != 0) {
puVar9 = local_124;
}
iVar6 = uVar8 << 2;
if ((((int)uVar8 >> 0x1f) << 2 | uVar8 >> 0x1e) != iVar6 >> 0x1f) {
Sys_Error("Couldn\'t load corrupted map %s",puVar9);
}
pvVar3 = (void *)Hunk_AllocName(iVar6,"occluder vertices",true);
*(void **)(iVar1 + 0x38) = pvVar3;
CUtlBuffer::Get((CUtlBuffer *)local_178,pvVar3,iVar6);
}
}
else if (local_138 != 0) {
/* try { // try from 0019b3eb to 0019b3ef has its CatchHandler @ 0019be5a */
Host_Error("Invalid occlusion lump version!\n");
}
CUtlMemory<unsigned_char,int>::Purge((CUtlMemory<unsigned_char,int> *)local_178);
if (local_134 != 0) {
(**(code **)(*g_pFileSystem + 0x150))(g_pFileSystem,local_134);
}
LAB_0019b386:
if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {
/* WARNING: Subroutine does not return */
__stack_chk_fail();
}
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.