CollisionBSPData_LoadDispInfo
0x001235d0 · 2234 bytes · __cdecl
_Z29CollisionBSPData_LoadDispInfoP17CCollisionBSPDataP9texinfo_si
Decompiled
undefined (3 params)
/* CollisionBSPData_LoadDispInfo(CCollisionBSPData*, texinfo_s*, int) */
void CollisionBSPData_LoadDispInfo(CCollisionBSPData *param_1,texinfo_s *param_2,int param_3)
{
code *pcVar1;
ushort uVar2;
int iVar3;
undefined4 uVar4;
undefined4 uVar5;
CCollisionBSPData *pCVar6;
char cVar7;
short sVar8;
undefined2 uVar9;
uint uVar10;
int iVar11;
uint uVar12;
undefined1 *puVar13;
undefined4 *puVar14;
int *piVar15;
int *piVar16;
undefined4 uVar17;
undefined4 uVar18;
undefined4 *puVar19;
int *piVar20;
int iVar21;
int iVar22;
int iVar23;
int in_GS_OFFSET;
undefined4 uStack_2700;
float fStack_26f0;
int aiStack_26ec [3];
texinfo_s *local_26e0;
CCollisionBSPData *local_26dc;
int local_26d8;
code *local_26d4;
int local_26d0;
undefined4 *local_26cc;
int local_26c8;
int local_26c4;
int local_26c0;
int local_26bc;
uint local_26b8;
int local_26b4;
code *local_26b0;
char local_269d;
undefined4 local_269c [12];
undefined4 local_266c;
undefined4 local_2668;
undefined4 local_2664;
uint local_2658;
undefined4 local_2654;
undefined4 local_2650;
undefined4 local_264c;
undefined1 local_25bc [16];
uint local_25ac;
int local_25a8;
undefined4 local_2430;
undefined4 local_2410;
undefined4 local_240c;
undefined4 local_2408;
undefined1 local_23b4 [1024];
undefined1 local_1fb4 [5780];
CMapLoadHelper local_920 [288];
CMapLoadHelper local_800 [288];
CMapLoadHelper local_6e0 [288];
CMapLoadHelper local_5c0 [288];
CMapLoadHelper local_4a0 [288];
undefined1 local_380 [288];
undefined1 local_260 [288];
undefined1 local_140 [288];
int local_20;
piVar20 = (int *)&stack0xffffd904;
local_26dc = param_1;
local_26e0 = param_2;
local_20 = *(int *)(in_GS_OFFSET + 0x14);
uStack_2700 = 0x12360f;
CMapLoadHelper::CMapLoadHelper(local_920,0x1a);
/* try { // try from 00123618 to 00123654 has its CatchHandler @ 00123f1b */
uStack_2700 = 0x12361d;
uVar10 = CMapLoadHelper::LumpSize(local_920);
local_26b8 = uVar10 / 0xb0;
piVar15 = (int *)&stack0xffffd904;
if (uVar10 / 0xb0 == 0) goto LAB_00123ded;
uStack_2700 = 0x123655;
CMapLoadHelper::CMapLoadHelper(local_800,3);
/* try { // try from 0012365e to 001236a6 has its CatchHandler @ 00123f36 */
uStack_2700 = 0x123663;
local_26d4 = (code *)CMapLoadHelper::LumpBase(local_800);
uStack_2700 = 0x123677;
uVar10 = CMapLoadHelper::LumpSize(local_800);
if (uVar10 != (uVar10 / 0xc) * 0xc) {
/* try { // try from 00123e3c to 00123e40 has its CatchHandler @ 00123f36 */
uStack_2700 = 0x123e41;
Sys_Error("CMod_LoadDispInfo: bad vertex lump size!");
}
uStack_2700 = 0x1236a7;
CMapLoadHelper::CMapLoadHelper(local_6e0,0xc);
/* try { // try from 001236b0 to 001236e6 has its CatchHandler @ 00123f32 */
uStack_2700 = 0x1236b5;
local_26b4 = CMapLoadHelper::LumpBase(local_6e0);
uStack_2700 = 0x1236c9;
uVar10 = CMapLoadHelper::LumpSize(local_6e0);
if ((uVar10 & 3) != 0) {
/* try { // try from 00123e2b to 00123e2f has its CatchHandler @ 00123f32 */
uStack_2700 = 0x123e30;
Sys_Error("CMod_LoadDispInfo: bad edge lump size!");
}
uStack_2700 = 0x1236e7;
CMapLoadHelper::CMapLoadHelper(local_5c0,0xd);
/* try { // try from 001236f0 to 0012373f has its CatchHandler @ 00123f2c */
uStack_2700 = 0x1236f5;
local_26d8 = CMapLoadHelper::LumpBase(local_5c0);
uStack_2700 = 0x123709;
uVar10 = CMapLoadHelper::LumpSize(local_5c0);
if ((uVar10 & 3) != 0) {
/* try { // try from 00123e1a to 00123e1e has its CatchHandler @ 00123f2c */
uStack_2700 = 0x123e1f;
Sys_Error("CMod_LoadDispInfo: bad surf edge lump size!");
}
uStack_2700 = 0x123721;
iVar11 = (**(code **)(*g_pMaterialSystemHardwareConfig + 0x8c))();
if (iVar11 == 0) {
LAB_00123729:
iVar11 = 7;
}
else {
/* try { // try from 00123e8a to 00123e8e has its CatchHandler @ 00123f2c */
uStack_2700 = 0x123e8f;
iVar11 = CMapLoadHelper::LumpSize(0x3a);
if (iVar11 < 1) goto LAB_00123729;
iVar11 = 0x3a;
}
uStack_2700 = 0x123740;
CMapLoadHelper::CMapLoadHelper(local_4a0,iVar11);
/* try { // try from 00123749 to 00123879 has its CatchHandler @ 00123f24 */
uStack_2700 = 0x12374e;
local_26d0 = CMapLoadHelper::LumpBase(local_4a0);
uStack_2700 = 0x123762;
uVar10 = CMapLoadHelper::LumpSize(local_4a0);
if (uVar10 != (uVar10 / 0x38) * 0x38) {
uStack_2700 = 0x123786;
Sys_Error("CMod_LoadDispInfo: bad face lump size!");
}
uStack_2700 = 0x123794;
uVar12 = CMapLoadHelper::LumpSize(local_4a0);
uVar10 = local_26b8;
if (local_26d0 != 0) {
g_DispCollTreeCount = local_26b8;
uStack_2700 = 0x1237c2;
g_pDispCollTrees = DispCollTrees_Alloc(local_26b8);
uStack_2700 = 0x1237ea;
g_pDispBounds = Hunk_AllocName(g_DispCollTreeCount * 0x30,"dispbounds",false);
iVar11 = -((uVar10 * 2 + 0xf & 0xfffffff0) + 0x1e & 0xffffff0);
piVar20 = (int *)(&stack0xffffd904 + iVar11);
*(uint *)(&stack0xffffd90c + iVar11) = uVar10 * 2;
local_26bc = (int)&local_26e0 + iVar11;
*(undefined4 *)(&stack0xffffd908 + iVar11) = 0xff;
*(int *)(&stack0xffffd904 + iVar11) = local_26bc;
*(undefined4 *)((int)&uStack_2700 + iVar11) = 0x12382d;
memset(*(void **)(&stack0xffffd904 + iVar11),*(int *)(&stack0xffffd908 + iVar11),
*(size_t *)(&stack0xffffd90c + iVar11));
uVar10 = 0;
iVar23 = local_26d0;
if (uVar12 / 0x38 != 0) {
do {
sVar8 = *(short *)(iVar23 + 0xc);
if ((sVar8 != -1) && ((int)sVar8 < (int)local_26b8)) {
*(short *)(local_26bc + sVar8 * 2) = (short)uVar10;
}
uVar10 = uVar10 + 1;
iVar23 = iVar23 + 0x38;
} while (uVar12 / 0x38 != uVar10);
}
*(undefined4 *)(&stack0xffffd908 + iVar11) = 0x21;
*(undefined1 **)(&stack0xffffd904 + iVar11) = local_380;
*(undefined4 *)((int)&uStack_2700 + iVar11) = 0x12387a;
CMapLoadHelper::CMapLoadHelper
(*(CMapLoadHelper **)(&stack0xffffd904 + iVar11),*(int *)(&stack0xffffd908 + iVar11));
*(undefined4 *)(&stack0xffffd908 + iVar11) = 0x30;
*(undefined1 **)(&stack0xffffd904 + iVar11) = local_260;
/* try { // try from 0012388b to 0012388f has its CatchHandler @ 00123f28 */
*(undefined4 *)((int)&uStack_2700 + iVar11) = 0x123890;
CMapLoadHelper::CMapLoadHelper
(*(CMapLoadHelper **)(&stack0xffffd904 + iVar11),*(int *)(&stack0xffffd908 + iVar11));
local_26c4 = 0;
local_26c0 = 0;
iVar23 = 0;
do {
uVar2 = *(ushort *)(local_26bc + iVar23 * 2);
if (uVar2 != 0xffff) {
*(undefined4 *)(&stack0xffffd90c + iVar11) = 0xb0;
*(undefined4 **)((int)&fStack_26f0 + iVar11) = &local_266c;
*(int *)(&stack0xffffd908 + iVar11) = iVar23;
*(CMapLoadHelper **)(&stack0xffffd904 + iVar11) = local_920;
/* try { // try from 001238e3 to 001239bb has its CatchHandler @ 00123f4b */
*(undefined4 *)((int)&uStack_2700 + iVar11) = 0x1238e8;
CMapLoadHelper::LoadLumpElement
(*(CMapLoadHelper **)(&stack0xffffd904 + iVar11),
*(int *)(&stack0xffffd908 + iVar11),*(int *)(&stack0xffffd90c + iVar11),
*(void **)((int)&fStack_26f0 + iVar11));
if (4 < local_2658) {
*(char **)(&stack0xffffd904 + iVar11) =
"CollisionBSPData_LoadDispInfo: Bad displacement info - invalid displacement power";
/* try { // try from 00123e57 to 00123e5b has its CatchHandler @ 00123f4b */
*(undefined4 *)((int)&uStack_2700 + iVar11) = 0x123e5c;
Sys_Error(*(char **)(&stack0xffffd904 + iVar11));
}
iVar21 = (1 << ((byte)local_2658 & 0x1f)) + 1;
iVar21 = iVar21 * iVar21;
if (0x121 < iVar21) {
*(int *)(&stack0xffffd908 + iVar11) = iVar21;
*(char **)(&stack0xffffd904 + iVar11) =
"DispInfo_LoadDisplacements: invalid vertex count (%d)";
*(undefined4 *)((int)&uStack_2700 + iVar11) = 0x12391c;
Error();
}
*(undefined1 **)((int)&fStack_26f0 + iVar11) = local_1fb4;
*(int *)(&stack0xffffd90c + iVar11) = iVar21 * 0x14;
*(int *)(&stack0xffffd908 + iVar11) = local_26c0 * 0x14;
*(undefined1 **)(&stack0xffffd904 + iVar11) = local_380;
*(undefined4 *)((int)&uStack_2700 + iVar11) = 0x12394e;
CMapLoadHelper::LoadLumpData
(*(CMapLoadHelper **)(&stack0xffffd904 + iVar11),
*(int *)(&stack0xffffd908 + iVar11),*(int *)(&stack0xffffd90c + iVar11),
*(void **)((int)&fStack_26f0 + iVar11));
local_26c0 = local_26c0 + iVar21;
iVar22 = (1 << ((byte)local_2658 & 0x1f)) << ((byte)local_2658 & 0x1f);
iVar21 = iVar22 * 2;
if (0x200 < iVar21) {
*(int *)(&stack0xffffd908 + iVar11) = iVar21;
*(char **)(&stack0xffffd904 + iVar11) =
"DispInfo_LoadDisplacements: invalid tri count (%d)";
*(undefined4 *)((int)&uStack_2700 + iVar11) = 0x12397d;
Error();
}
*(undefined1 **)((int)&fStack_26f0 + iVar11) = local_23b4;
*(int *)(&stack0xffffd90c + iVar11) = iVar22 << 2;
*(int *)(&stack0xffffd908 + iVar11) = local_26c4 * 2;
*(undefined1 **)(&stack0xffffd904 + iVar11) = local_260;
*(undefined4 *)((int)&uStack_2700 + iVar11) = 0x1239a8;
CMapLoadHelper::LoadLumpData
(*(CMapLoadHelper **)(&stack0xffffd904 + iVar11),
*(int *)(&stack0xffffd908 + iVar11),*(int *)(&stack0xffffd90c + iVar11),
*(void **)((int)&fStack_26f0 + iVar11));
local_26c4 = local_26c4 + iVar21;
*(undefined1 **)(&stack0xffffd904 + iVar11) = local_25bc;
*(undefined4 *)((int)&uStack_2700 + iVar11) = 0x1239bc;
CCoreDispInfo::CCoreDispInfo(*(CCoreDispInfo **)(&stack0xffffd904 + iVar11));
uVar17 = local_2668;
local_2410 = local_266c;
local_2430 = local_264c;
*(undefined1 **)((int)aiStack_26ec + iVar11 + 4) = local_23b4;
*(undefined1 **)((int)aiStack_26ec + iVar11) = local_1fb4;
uVar18 = local_2650;
local_240c = uVar17;
local_2408 = local_2664;
*(undefined4 *)(&stack0xffffd90c + iVar11) = local_2654;
uVar10 = local_2658;
*(undefined4 *)((int)&fStack_26f0 + iVar11) = uVar18;
*(uint *)(&stack0xffffd908 + iVar11) = uVar10;
*(undefined1 **)(&stack0xffffd904 + iVar11) = local_25bc;
/* try { // try from 00123a37 to 00123d34 has its CatchHandler @ 00123ea1 */
*(undefined4 *)((int)&uStack_2700 + iVar11) = 0x123a3c;
CCoreDispInfo::InitDispInfo
(*(CCoreDispInfo **)(&stack0xffffd904 + iVar11),
*(int *)(&stack0xffffd908 + iVar11),*(int *)(&stack0xffffd90c + iVar11),
*(float *)((int)&fStack_26f0 + iVar11),
*(CDispVert **)((int)aiStack_26ec + iVar11),
*(CDispTri **)((int)aiStack_26ec + iVar11 + 4));
local_25ac = (uint)uVar2;
iVar21 = (uint)uVar2 * 0x38 + local_26d0;
sVar8 = *(short *)(iVar21 + 8);
if (sVar8 < 5) {
if (sVar8 == 4) {
local_25a8 = 4;
sVar8 = *(short *)(iVar21 + 8);
}
if (0 < sVar8) {
local_26c8 = iVar23;
local_26cc = local_269c;
iVar22 = 0;
local_26b0 = local_26d4;
puVar19 = local_269c;
do {
iVar3 = *(int *)(local_26d8 + (*(int *)(iVar21 + 4) + iVar22) * 4);
if (iVar3 < 0) {
uVar2 = *(ushort *)(local_26b4 + iVar3 * -4 + 2);
}
else {
uVar2 = *(ushort *)(local_26b4 + iVar3 * 4);
}
iVar22 = iVar22 + 1;
pcVar1 = local_26d4 + (uint)uVar2 * 0xc;
*puVar19 = *(undefined4 *)pcVar1;
puVar19[1] = *(undefined4 *)(pcVar1 + 4);
puVar19[2] = *(undefined4 *)(pcVar1 + 8);
puVar19 = puVar19 + 3;
} while (iVar22 < *(short *)(iVar21 + 8));
}
puVar13 = local_25bc;
puVar19 = local_269c;
do {
puVar14 = puVar19 + 3;
*(undefined4 *)(puVar13 + 0x18) = *puVar19;
*(undefined4 *)(puVar13 + 0x1c) = puVar19[1];
*(undefined4 *)(puVar13 + 0x20) = puVar19[2];
puVar13 = puVar13 + 0xc;
puVar19 = puVar14;
} while (puVar14 != &local_266c);
*(uint **)(&stack0xffffd904 + iVar11) = &local_25ac;
*(undefined4 *)((int)&uStack_2700 + iVar11) = 0x123b4d;
CCoreDispSurface::FindSurfPointStartIndex
(*(CCoreDispSurface **)(&stack0xffffd904 + iVar11));
*(uint **)(&stack0xffffd904 + iVar11) = &local_25ac;
*(undefined4 *)((int)&uStack_2700 + iVar11) = 0x123b55;
CCoreDispSurface::AdjustSurfPointData(*(CCoreDispSurface **)(&stack0xffffd904 + iVar11));
puVar19 = (undefined4 *)(iVar23 * 0xf4 + g_pDispCollTrees);
puVar19[10] = 0;
if (local_25a8 == 4) {
*(undefined1 **)(&stack0xffffd904 + iVar11) = local_25bc;
*(undefined4 *)((int)&uStack_2700 + iVar11) = 0x123b83;
CCoreDispInfo::Create(*(CCoreDispInfo **)(&stack0xffffd904 + iVar11));
puVar14 = (undefined4 *)*puVar19;
*(undefined4 **)(&stack0xffffd904 + iVar11) = puVar19;
*(undefined1 **)(&stack0xffffd908 + iVar11) = local_25bc;
pcVar1 = (code *)*puVar14;
*(undefined4 *)((int)&uStack_2700 + iVar11) = 0x123b94;
(*pcVar1)();
uVar4 = puVar19[4];
uVar17 = puVar19[3];
puVar14 = (undefined4 *)(iVar23 * 0x30 + g_pDispBounds);
uVar18 = puVar19[2];
uVar5 = puVar19[8];
*puVar14 = puVar19[1];
puVar14[1] = uVar18;
puVar14[2] = uVar17;
puVar14[8] = uVar4;
uVar17 = puVar19[7];
uVar18 = puVar19[6];
uVar4 = puVar19[5];
puVar14[9] = uVar5;
puVar14[5] = uVar18;
puVar14[4] = uVar4;
puVar14[6] = uVar17;
iVar21 = *(int *)(local_26e0 + *(short *)(iVar21 + 10) * 0x48 + 0x44);
if (-1 < iVar21) {
local_26b0 = *(code **)(*materials + 0x11c);
if (*(int *)(local_26dc + 0x250) <= iVar21) {
*(char **)(&stack0xffffd904 + iVar11) = "Cannot load corrupted map.\n";
*(undefined4 *)((int)&uStack_2700 + iVar11) = 0x123c2d;
Error();
}
pCVar6 = local_26dc;
*(undefined4 *)((int)aiStack_26ec + iVar11) = 0;
*(undefined4 *)((int)&fStack_26f0 + iVar11) = 1;
*(char **)(&stack0xffffd90c + iVar11) = "World textures";
uVar17 = *(undefined4 *)(*(int *)(pCVar6 + 0x24c) + iVar21 * 8);
*(int **)(&stack0xffffd904 + iVar11) = materials;
pcVar1 = local_26b0;
*(undefined4 *)(&stack0xffffd908 + iVar11) = uVar17;
*(undefined4 *)((int)&uStack_2700 + iVar11) = 0x123c68;
piVar15 = (int *)(*pcVar1)();
if (piVar15 != (int *)0x0) {
iVar21 = *piVar15;
*(int **)(&stack0xffffd904 + iVar11) = piVar15;
pcVar1 = *(code **)(iVar21 + 0xa8);
*(undefined4 *)((int)&uStack_2700 + iVar11) = 0x123c7d;
cVar7 = (*pcVar1)();
if (cVar7 == '\0') {
iVar21 = *piVar15;
*(undefined4 *)((int)&fStack_26f0 + iVar11) = 0;
*(char **)(&stack0xffffd90c + iVar11) = &local_269d;
*(char **)(&stack0xffffd908 + iVar11) = "$surfaceprop";
*(int **)(&stack0xffffd904 + iVar11) = piVar15;
pcVar1 = *(code **)(iVar21 + 0x2c);
*(undefined4 *)((int)&uStack_2700 + iVar11) = 0x123ca7;
piVar16 = (int *)(*pcVar1)();
if (local_269d != '\0') {
iVar21 = *piVar16;
*(int **)(&stack0xffffd904 + iVar11) = piVar16;
pcVar1 = *(code **)(iVar21 + 0x18);
*(undefined4 *)((int)&uStack_2700 + iVar11) = 0x123cb8;
local_26b0 = (code *)(*pcVar1)();
iVar21 = *physprops;
*(code **)(&stack0xffffd908 + iVar11) = local_26b0;
*(int **)(&stack0xffffd904 + iVar11) = physprops;
pcVar1 = *(code **)(iVar21 + 0x10);
*(undefined4 *)((int)&uStack_2700 + iVar11) = 0x123cd1;
uVar9 = (*pcVar1)();
pcVar1 = local_26b0;
*(undefined2 *)(puVar19 + 0x1b) = uVar9;
iVar21 = *physprops;
*(int **)(&stack0xffffd904 + iVar11) = physprops;
*(code **)(&stack0xffffd908 + iVar11) = pcVar1;
pcVar1 = *(code **)(iVar21 + 0x10);
*(undefined4 *)((int)&uStack_2700 + iVar11) = 0x123cec;
uVar9 = (*pcVar1)();
*(undefined2 *)((int)puVar19 + 0x6e) = uVar9;
}
iVar21 = *piVar15;
*(undefined4 *)((int)&fStack_26f0 + iVar11) = 0;
*(char **)(&stack0xffffd90c + iVar11) = &local_269d;
*(char **)(&stack0xffffd908 + iVar11) = "$surfaceprop2";
*(int **)(&stack0xffffd904 + iVar11) = piVar15;
pcVar1 = *(code **)(iVar21 + 0x2c);
*(undefined4 *)((int)&uStack_2700 + iVar11) = 0x123d12;
piVar15 = (int *)(*pcVar1)();
if (local_269d != '\0') {
iVar21 = *piVar15;
*(int **)(&stack0xffffd904 + iVar11) = piVar15;
pcVar1 = *(code **)(iVar21 + 0x18);
*(undefined4 *)((int)&uStack_2700 + iVar11) = 0x123d23;
uVar17 = (*pcVar1)();
iVar21 = *physprops;
*(undefined4 *)(&stack0xffffd908 + iVar11) = uVar17;
*(int **)(&stack0xffffd904 + iVar11) = physprops;
pcVar1 = *(code **)(iVar21 + 0x10);
*(undefined4 *)((int)&uStack_2700 + iVar11) = 0x123d35;
uVar9 = (*pcVar1)();
*(undefined2 *)((int)puVar19 + 0x6e) = uVar9;
}
}
}
}
}
}
*(undefined1 **)(&stack0xffffd904 + iVar11) = local_25bc;
*(undefined4 *)((int)&uStack_2700 + iVar11) = 0x123d4e;
CCoreDispInfo::~CCoreDispInfo(*(CCoreDispInfo **)(&stack0xffffd904 + iVar11));
}
iVar23 = iVar23 + 1;
} while (iVar23 < (int)local_26b8);
*(undefined4 *)(&stack0xffffd908 + iVar11) = 0x1c;
*(undefined1 **)(&stack0xffffd904 + iVar11) = local_140;
/* try { // try from 00123d6e to 00123d72 has its CatchHandler @ 00123f4b */
*(undefined4 *)((int)&uStack_2700 + iVar11) = 0x123d73;
CMapLoadHelper::CMapLoadHelper
(*(CMapLoadHelper **)(&stack0xffffd904 + iVar11),*(int *)(&stack0xffffd908 + iVar11));
*(undefined1 **)(&stack0xffffd904 + iVar11) = local_140;
/* try { // try from 00123d76 to 00123d90 has its CatchHandler @ 00123f3a */
*(undefined4 *)((int)&uStack_2700 + iVar11) = 0x123d7b;
uVar17 = CMapLoadHelper::LumpBase(*(CMapLoadHelper **)(&stack0xffffd904 + iVar11));
*(undefined1 **)(&stack0xffffd904 + iVar11) = local_140;
*(undefined4 *)((int)&uStack_2700 + iVar11) = 0x123d85;
uVar18 = CMapLoadHelper::LumpSize(*(CMapLoadHelper **)(&stack0xffffd904 + iVar11));
*(undefined4 *)(&stack0xffffd908 + iVar11) = uVar18;
*(undefined4 *)(&stack0xffffd904 + iVar11) = uVar17;
*(undefined4 *)((int)&uStack_2700 + iVar11) = 0x123d91;
CM_CreateDispPhysCollide
(*(dphysdisp_t **)(&stack0xffffd904 + iVar11),*(int *)(&stack0xffffd908 + iVar11));
*(undefined1 **)(&stack0xffffd904 + iVar11) = local_140;
*(undefined4 *)((int)&uStack_2700 + iVar11) = 0x123d99;
CMapLoadHelper::~CMapLoadHelper(*(CMapLoadHelper **)(&stack0xffffd904 + iVar11));
*(undefined1 **)(&stack0xffffd904 + iVar11) = local_260;
*(undefined4 *)((int)&uStack_2700 + iVar11) = 0x123da7;
CMapLoadHelper::~CMapLoadHelper(*(CMapLoadHelper **)(&stack0xffffd904 + iVar11));
*(undefined1 **)(&stack0xffffd904 + iVar11) = local_380;
*(undefined4 *)((int)&uStack_2700 + iVar11) = 0x123db5;
CMapLoadHelper::~CMapLoadHelper(*(CMapLoadHelper **)(&stack0xffffd904 + iVar11));
}
*piVar20 = (int)local_4a0;
piVar20[-1] = 0x123dc3;
CMapLoadHelper::~CMapLoadHelper((CMapLoadHelper *)*piVar20);
*piVar20 = (int)local_5c0;
piVar20[-1] = 0x123dd1;
CMapLoadHelper::~CMapLoadHelper((CMapLoadHelper *)*piVar20);
*piVar20 = (int)local_6e0;
piVar20[-1] = 0x123ddf;
CMapLoadHelper::~CMapLoadHelper((CMapLoadHelper *)*piVar20);
*piVar20 = (int)local_800;
piVar20[-1] = 0x123ded;
CMapLoadHelper::~CMapLoadHelper((CMapLoadHelper *)*piVar20);
piVar15 = piVar20;
LAB_00123ded:
*piVar15 = (int)local_920;
piVar15[-1] = 0x123dfb;
CMapLoadHelper::~CMapLoadHelper((CMapLoadHelper *)*piVar15);
if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {
/* WARNING: Subroutine does not return */
piVar15[-1] = (int)&LAB_00123f24;
__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.