L L4D2node

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 into addons/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.



        

        

          

Type inference is best-effort from the C signature - sanity-check the DHooks types before shipping.

Return-type handling cheatsheet (DHookReturn)