L L4D2node

CCommentarySystem::LoadCommentaryFile

0x0064dae0 · 4230 bytes · __thiscall

_ZN17CCommentarySystem18LoadCommentaryFileEv

Decompiled

undefined (1 param)

/* WARNING: Type propagation algorithm not settling */
/* CCommentarySystem::LoadCommentaryFile() */

void __thiscall CCommentarySystem::LoadCommentaryFile(CCommentarySystem *this)

{
  code *pcVar1;
  uint *puVar2;
  CCommentarySystem *pCVar3;
  char cVar4;
  KeyValues *this_00;
  IBaseFileSystem *pIVar5;
  int iVar6;
  undefined4 uVar7;
  int iVar8;
  int iVar9;
  undefined4 uVar10;
  int *piVar11;
  char *pcVar12;
  undefined4 *puVar13;
  void *pvVar14;
  undefined *puVar15;
  undefined *puVar16;
  int iVar17;
  char *pcVar18;
  int *piVar19;
  int iVar20;
  int in_GS_OFFSET;
  undefined4 uStackY_cab0;
  uint uVar21;
  char acStack_ca90 [4];
  code *local_ca8c;
  int local_ca88;
  int local_ca84;
  KeyValues *local_ca80;
  int local_ca7c;
  int local_ca78;
  int local_ca74;
  char *local_ca70;
  undefined *local_ca6c;
  int local_ca68;
  char *local_ca64;
  CCommentarySystem *local_ca60;
  undefined4 local_ca5c;
  undefined1 local_ca58 [16];
  int local_ca48;
  int local_ca20 [2048];
  int local_aa20 [4096];
  char local_6a20 [512];
  char local_6820 [1024];
  char local_6420 [1024];
  char local_6020 [1024];
  char local_5c20 [1024];
  char local_5820 [1024];
  char local_5420 [1022];
  char acStack_5022 [20482];
  int local_20;
  
  piVar19 = (int *)&stack0xffff3554;
  local_ca60 = this;
  local_20 = *(int *)(in_GS_OFFSET + 0x14);
  uVar21 = 0x200;
  uStackY_cab0 = 0x64db34;
  V_snprintf(local_6a20,0x200,"maps/%s_commentary.txt");
  uStackY_cab0 = 0x64db40;
  this_00 = KeyValues::operator_new((KeyValues *)0x2c,uVar21);
                    /* try { // try from 0064db63 to 0064db67 has its CatchHandler @ 0064e9c3 */
  uStackY_cab0 = 0x64db68;
  local_ca80 = this_00;
  KeyValues::KeyValues(this_00,"Commentary",(IKeyValuesSystem *)0x0,false);
  pIVar5 = (IBaseFileSystem *)0x0;
  if (filesystem != 0) {
    pIVar5 = (IBaseFileSystem *)(filesystem + 4);
  }
  uStackY_cab0 = 0x64db90;
  cVar4 = KeyValues::LoadFromFile(this_00,pIVar5,local_6a20,"GAME");
  if (cVar4 == '\0') {
    uStackY_cab0 = 0x64e9a1;
    Msg();
  }
  else {
    uStackY_cab0 = 0x64dba8;
    Msg();
    uStackY_cab0 = 0x64dbc5;
    iVar6 = (**(code **)(*(int *)(filesystem + 4) + 0x1c))();
    iVar6 = -((iVar6 * 4 + 0xfU & 0xfffffff0) + 0x10);
    piVar19 = (int *)(&stack0xffff3554 + iVar6);
    *(undefined4 *)(&stack0xffff3560 + iVar6) = 0;
    local_ca88 = (int)acStack_ca90 + iVar6;
    *(char **)(&stack0xffff3558 + iVar6) = acStack_5022 + 2;
    *(undefined1 **)(&stack0xffff3554 + iVar6) = local_ca58;
    *(undefined4 *)(&stack0xffff355c + iVar6) = 0x5000;
    *(undefined4 *)((int)&uStackY_cab0 + iVar6) = 0x64dc0d;
    CUtlBuffer::CUtlBuffer
              (*(CUtlBuffer **)(&stack0xffff3554 + iVar6),*(void **)(&stack0xffff3558 + iVar6),
               *(int *)(&stack0xffff355c + iVar6),*(int *)(&stack0xffff3560 + iVar6));
    *(KeyValues **)(&stack0xffff3554 + iVar6) = local_ca80;
                    /* try { // try from 0064dc16 to 0064e80d has its CatchHandler @ 0064e98e */
    *(undefined4 *)((int)&uStackY_cab0 + iVar6) = 0x64dc1b;
    local_ca68 = KeyValues::GetFirstSubKey(*(KeyValues **)(&stack0xffff3554 + iVar6));
    if (local_ca68 == 0) {
      local_ca7c = 0;
    }
    else {
      local_ca84 = 0;
      local_ca7c = 0;
      do {
        *(int *)(&stack0xffff3554 + iVar6) = local_ca68;
        *(undefined4 *)((int)&uStackY_cab0 + iVar6) = 0x64dc4b;
        uVar7 = KeyValues::GetName(*(KeyValues **)(&stack0xffff3554 + iVar6));
        *(undefined4 *)(&stack0xffff355c + iVar6) = 9;
        *(char **)(&stack0xffff3558 + iVar6) = "trackinfo";
        *(undefined4 *)(&stack0xffff3554 + iVar6) = uVar7;
        *(undefined4 *)((int)&uStackY_cab0 + iVar6) = 0x64dc65;
        iVar8 = V_strncmp(*(char **)(&stack0xffff3554 + iVar6),*(char **)(&stack0xffff3558 + iVar6),
                          *(int *)(&stack0xffff355c + iVar6));
        iVar9 = local_ca68;
        if (iVar8 != 0) {
          *(undefined4 *)(&stack0xffff355c + iVar6) = 0;
          *(char **)(&stack0xffff3558 + iVar6) = "classname";
          *(int *)(&stack0xffff3554 + iVar6) = iVar9;
          *(undefined4 *)((int)&uStackY_cab0 + iVar6) = 0x64dc8b;
          iVar9 = KeyValues::FindKey(*(KeyValues **)(&stack0xffff3554 + iVar6),
                                     *(char **)(&stack0xffff3558 + iVar6),
                                     (bool)(&stack0xffff355c)[iVar6]);
          if (iVar9 != 0) {
            *(undefined1 **)(&stack0xffff355c + iVar6) = &DAT_00d539c2;
            *(undefined4 *)(&stack0xffff3558 + iVar6) = 0;
            *(int *)(&stack0xffff3554 + iVar6) = iVar9;
            *(undefined4 *)((int)&uStackY_cab0 + iVar6) = 0x64dca7;
            uVar7 = KeyValues::GetString
                              (*(KeyValues **)(&stack0xffff3554 + iVar6),
                               *(char **)(&stack0xffff3558 + iVar6),
                               *(char **)(&stack0xffff355c + iVar6));
          }
          iVar9 = local_ca68;
          *(int *)(&stack0xffff3554 + iVar6) = local_ca68;
          *(undefined4 *)((int)&uStackY_cab0 + iVar6) = 0x64dcb7;
          uVar10 = KeyValues::GetName(*(KeyValues **)(&stack0xffff3554 + iVar6));
          *(char **)(&stack0xffff3558 + iVar6) = "modify_entity";
          *(undefined4 *)(&stack0xffff3554 + iVar6) = uVar10;
          *(undefined4 *)((int)&uStackY_cab0 + iVar6) = 0x64dcc7;
          iVar8 = _V_strcmp(*(char **)(&stack0xffff3554 + iVar6),
                            *(char **)(&stack0xffff3558 + iVar6));
          *(undefined4 *)(&stack0xffff355c + iVar6) = 0;
          *(char **)(&stack0xffff3558 + iVar6) = "mapupdate";
          *(int *)(&stack0xffff3554 + iVar6) = iVar9;
          *(undefined4 *)((int)&uStackY_cab0 + iVar6) = 0x64dce4;
          iVar9 = KeyValues::FindKey(*(KeyValues **)(&stack0xffff3554 + iVar6),
                                     *(char **)(&stack0xffff3558 + iVar6),
                                     (bool)(&stack0xffff355c)[iVar6]);
          if (g_bInCommentaryMode == '\0') {
            *(undefined4 *)(&stack0xffff355c + iVar6) = 0x10;
            *(char **)(&stack0xffff3558 + iVar6) = "info_remarkable";
            *(undefined4 *)(&stack0xffff3554 + iVar6) = uVar7;
                    /* try { // try from 0064e9f3 to 0064ebd0 has its CatchHandler @ 0064e98e */
            *(undefined4 *)((int)&uStackY_cab0 + iVar6) = 0x64e9f8;
            iVar20 = V_strncmp(*(char **)(&stack0xffff3554 + iVar6),
                               *(char **)(&stack0xffff3558 + iVar6),
                               *(int *)(&stack0xffff355c + iVar6));
            if (iVar20 != 0) {
              *(undefined4 *)(&stack0xffff355c + iVar6) = 0x13;
              *(char **)(&stack0xffff3558 + iVar6) = "info_item_position";
              *(undefined4 *)(&stack0xffff3554 + iVar6) = uVar7;
              *(undefined4 *)((int)&uStackY_cab0 + iVar6) = 0x64ea18;
              iVar20 = V_strncmp(*(char **)(&stack0xffff3554 + iVar6),
                                 *(char **)(&stack0xffff3558 + iVar6),
                                 *(int *)(&stack0xffff355c + iVar6));
              if (((iVar20 != 0) && (iVar9 == 0)) && (iVar8 != 0)) goto LAB_0064e6b8;
            }
          }
          if (iVar8 == 0) {
            if (*(int *)(local_ca60 + 0x2c) == 0) {
              *(undefined4 *)(&stack0xffff3554 + iVar6) = 0x2c;
              *(undefined4 *)((int)&uStackY_cab0 + iVar6) = 0x64e80e;
              pvVar14 = KeyValues::operator_new
                                  (*(KeyValues **)(&stack0xffff3554 + iVar6),
                                   *(uint *)(&stack0xffff3558 + iVar6));
              *(undefined4 *)(&stack0xffff3560 + iVar6) = 0;
              *(undefined4 *)(&stack0xffff355c + iVar6) = 0;
              *(char **)(&stack0xffff3558 + iVar6) = "Entities";
              *(void **)(&stack0xffff3554 + iVar6) = pvVar14;
                    /* try { // try from 0064e82b to 0064e82f has its CatchHandler @ 0064e83e */
              *(undefined4 *)((int)&uStackY_cab0 + iVar6) = 0x64e830;
              KeyValues::KeyValues
                        (*(KeyValues **)(&stack0xffff3554 + iVar6),
                         *(char **)(&stack0xffff3558 + iVar6),
                         *(IKeyValuesSystem **)(&stack0xffff355c + iVar6),
                         (bool)(&stack0xffff3560)[iVar6]);
              *(void **)(local_ca60 + 0x2c) = pvVar14;
            }
            *(int *)(&stack0xffff3554 + iVar6) = local_ca68;
            *(undefined4 *)((int)&uStackY_cab0 + iVar6) = 0x64dd16;
            uVar10 = KeyValues::MakeCopy(*(KeyValues **)(&stack0xffff3554 + iVar6));
            *(undefined4 *)(&stack0xffff3558 + iVar6) = uVar10;
            *(undefined4 *)(&stack0xffff3554 + iVar6) = *(undefined4 *)(local_ca60 + 0x2c);
            *(undefined4 *)((int)&uStackY_cab0 + iVar6) = 0x64dd2b;
            KeyValues::AddSubKey
                      (*(KeyValues **)(&stack0xffff3554 + iVar6),
                       *(KeyValues **)(&stack0xffff3558 + iVar6));
          }
          *(undefined4 *)(&stack0xffff355c + iVar6) = 1;
          *(undefined4 *)(&stack0xffff3558 + iVar6) = 0xffffffff;
          *(undefined4 *)(&stack0xffff3554 + iVar6) = uVar7;
          *(undefined4 *)((int)&uStackY_cab0 + iVar6) = 0x64dd43;
          piVar11 = (int *)CreateEntityByName(*(char **)(&stack0xffff3554 + iVar6),
                                              *(int *)(&stack0xffff3558 + iVar6),
                                              (bool)(&stack0xffff355c)[iVar6]);
          if (piVar11 == (int *)0x0) {
            *(undefined4 *)(&stack0xffff3558 + iVar6) = uVar7;
            *(char **)(&stack0xffff3554 + iVar6) =
                 "Commentary: Failed to spawn commentary entity, type: \'%s\'\n";
            *(undefined4 *)((int)&uStackY_cab0 + iVar6) = 0x64e6b8;
            Warning();
          }
          else {
            *(int *)(&stack0xffff3554 + iVar6) = local_ca68;
            *(undefined4 *)((int)&uStackY_cab0 + iVar6) = 0x64dd5b;
            local_ca6c = (undefined *)
                         KeyValues::GetFirstSubKey(*(KeyValues **)(&stack0xffff3554 + iVar6));
            while (local_ca6c != (undefined *)0x0) {
              *(undefined **)(&stack0xffff3554 + iVar6) = local_ca6c;
              *(undefined4 *)((int)&uStackY_cab0 + iVar6) = 0x64dd77;
              uVar7 = KeyValues::GetName(*(KeyValues **)(&stack0xffff3554 + iVar6));
              *(char **)(&stack0xffff3558 + iVar6) = "connections";
              *(undefined4 *)(&stack0xffff3554 + iVar6) = uVar7;
              *(undefined4 *)((int)&uStackY_cab0 + iVar6) = 0x64dd87;
              iVar9 = _V_strcmp(*(char **)(&stack0xffff3554 + iVar6),
                                *(char **)(&stack0xffff3558 + iVar6));
              puVar15 = local_ca6c;
              if (iVar9 == 0) {
                *(undefined **)(&stack0xffff3554 + iVar6) = local_ca6c;
                *(undefined4 *)((int)&uStackY_cab0 + iVar6) = 0x64dd9d;
                local_ca70 = (char *)KeyValues::GetFirstSubKey
                                               (*(KeyValues **)(&stack0xffff3554 + iVar6));
                while (local_ca70 != (char *)0x0) {
                  *(char **)(&stack0xffff3554 + iVar6) = local_ca70;
                  *(undefined4 *)((int)&uStackY_cab0 + iVar6) = 0x64ddb9;
                  uVar7 = KeyValues::GetName(*(KeyValues **)(&stack0xffff3554 + iVar6));
                  *(char **)(&stack0xffff3558 + iVar6) = "connections";
                  *(undefined4 *)(&stack0xffff3554 + iVar6) = uVar7;
                  *(undefined4 *)((int)&uStackY_cab0 + iVar6) = 0x64ddc9;
                  iVar9 = _V_strcmp(*(char **)(&stack0xffff3554 + iVar6),
                                    *(char **)(&stack0xffff3558 + iVar6));
                  pcVar18 = local_ca70;
                  if (iVar9 == 0) {
                    *(char **)(&stack0xffff3554 + iVar6) = local_ca70;
                    *(undefined4 *)((int)&uStackY_cab0 + iVar6) = 0x64dddf;
                    local_ca74 = KeyValues::GetFirstSubKey
                                           (*(KeyValues **)(&stack0xffff3554 + iVar6));
                    while (local_ca74 != 0) {
                      *(int *)(&stack0xffff3554 + iVar6) = local_ca74;
                      *(undefined4 *)((int)&uStackY_cab0 + iVar6) = 0x64ddfb;
                      uVar7 = KeyValues::GetName(*(KeyValues **)(&stack0xffff3554 + iVar6));
                      *(char **)(&stack0xffff3558 + iVar6) = "connections";
                      *(undefined4 *)(&stack0xffff3554 + iVar6) = uVar7;
                      *(undefined4 *)((int)&uStackY_cab0 + iVar6) = 0x64de0b;
                      iVar8 = _V_strcmp(*(char **)(&stack0xffff3554 + iVar6),
                                        *(char **)(&stack0xffff3558 + iVar6));
                      iVar9 = local_ca74;
                      if (iVar8 == 0) {
                        *(int *)(&stack0xffff3554 + iVar6) = local_ca74;
                        *(undefined4 *)((int)&uStackY_cab0 + iVar6) = 0x64de21;
                        local_ca78 = KeyValues::GetFirstSubKey
                                               (*(KeyValues **)(&stack0xffff3554 + iVar6));
                        while (local_ca78 != 0) {
                          *(int *)(&stack0xffff3554 + iVar6) = local_ca78;
                          *(undefined4 *)((int)&uStackY_cab0 + iVar6) = 0x64de3d;
                          uVar7 = KeyValues::GetName(*(KeyValues **)(&stack0xffff3554 + iVar6));
                          *(char **)(&stack0xffff3558 + iVar6) = "connections";
                          *(undefined4 *)(&stack0xffff3554 + iVar6) = uVar7;
                          *(undefined4 *)((int)&uStackY_cab0 + iVar6) = 0x64de4d;
                          iVar8 = _V_strcmp(*(char **)(&stack0xffff3554 + iVar6),
                                            *(char **)(&stack0xffff3558 + iVar6));
                          iVar9 = local_ca78;
                          if (iVar8 == 0) {
                            *(int *)(&stack0xffff3554 + iVar6) = local_ca78;
                            *(undefined4 *)((int)&uStackY_cab0 + iVar6) = 0x64de63;
                            local_ca64 = (char *)KeyValues::GetFirstSubKey
                                                           (*(KeyValues **)
                                                             (&stack0xffff3554 + iVar6));
                            while (local_ca64 != (char *)0x0) {
                              *(char **)(&stack0xffff3554 + iVar6) = local_ca64;
                              *(undefined4 *)((int)&uStackY_cab0 + iVar6) = 0x64de7f;
                              uVar7 = KeyValues::GetName(*(KeyValues **)(&stack0xffff3554 + iVar6));
                              *(char **)(&stack0xffff3558 + iVar6) = "connections";
                              *(undefined4 *)(&stack0xffff3554 + iVar6) = uVar7;
                              *(undefined4 *)((int)&uStackY_cab0 + iVar6) = 0x64de8f;
                              iVar9 = _V_strcmp(*(char **)(&stack0xffff3554 + iVar6),
                                                *(char **)(&stack0xffff3558 + iVar6));
                              pcVar18 = local_ca64;
                              if (iVar9 == 0) {
                                *(char **)(&stack0xffff3554 + iVar6) = local_ca64;
                                *(undefined4 *)((int)&uStackY_cab0 + iVar6) = 0x64dea5;
                                iVar9 = KeyValues::GetFirstSubKey
                                                  (*(KeyValues **)(&stack0xffff3554 + iVar6));
                                while (iVar9 != 0) {
                                  *(int *)(&stack0xffff3554 + iVar6) = iVar9;
                                  *(undefined4 *)((int)&uStackY_cab0 + iVar6) = 0x64dee0;
                                  uVar7 = KeyValues::GetName(*(KeyValues **)
                                                              (&stack0xffff3554 + iVar6));
                                  *(char **)(&stack0xffff3558 + iVar6) = "connections";
                                  *(undefined4 *)(&stack0xffff3554 + iVar6) = uVar7;
                                  *(undefined4 *)((int)&uStackY_cab0 + iVar6) = 0x64def0;
                                  iVar8 = _V_strcmp(*(char **)(&stack0xffff3554 + iVar6),
                                                    *(char **)(&stack0xffff3558 + iVar6));
                                  pCVar3 = local_ca60;
                                  if (iVar8 == 0) {
                                    *(int *)(&stack0xffff355c + iVar6) = iVar9;
                                    *(int **)(&stack0xffff3558 + iVar6) = piVar11;
                                    *(CCommentarySystem **)(&stack0xffff3554 + iVar6) = pCVar3;
                                    *(undefined4 *)((int)&uStackY_cab0 + iVar6) = 0x64dec6;
                                    ParseEntKVBlock(*(CCommentarySystem **)
                                                     (&stack0xffff3554 + iVar6),
                                                    *(CBaseEntity **)(&stack0xffff3558 + iVar6),
                                                    *(KeyValues **)(&stack0xffff355c + iVar6));
                                  }
                                  else {
                                    *(undefined1 **)(&stack0xffff355c + iVar6) = &DAT_00d539c2;
                                    *(undefined4 *)(&stack0xffff3558 + iVar6) = 0;
                                    *(int *)(&stack0xffff3554 + iVar6) = iVar9;
                                    *(undefined4 *)((int)&uStackY_cab0 + iVar6) = 0x64df0c;
                                    uVar7 = KeyValues::GetString
                                                      (*(KeyValues **)(&stack0xffff3554 + iVar6),
                                                       *(char **)(&stack0xffff3558 + iVar6),
                                                       *(char **)(&stack0xffff355c + iVar6));
                                    *(undefined4 *)(&stack0xffff355c + iVar6) = 0x400;
                                    *(undefined4 *)(&stack0xffff3558 + iVar6) = 0x5e;
                                    *(undefined4 *)(&stack0xffff3554 + iVar6) = uVar7;
                                    *(undefined4 *)((int)&uStackY_cab0 + iVar6) = 0x64df26;
                                    iVar8 = V_strnchr(*(char **)(&stack0xffff3554 + iVar6),
                                                      (&stack0xffff3558)[iVar6],
                                                      *(int *)(&stack0xffff355c + iVar6));
                                    if (iVar8 == 0) {
                                      pcVar1 = *(code **)(*piVar11 + 0x84);
                                      *(int *)(&stack0xffff3554 + iVar6) = iVar9;
                                      local_ca8c = pcVar1;
                                      *(undefined4 *)((int)&uStackY_cab0 + iVar6) = 0x64e0eb;
                                      uVar10 = KeyValues::GetName(*(KeyValues **)
                                                                   (&stack0xffff3554 + iVar6));
                                      *(undefined4 *)(&stack0xffff3558 + iVar6) = uVar10;
                                      pcVar1 = local_ca8c;
                                      *(undefined4 *)(&stack0xffff355c + iVar6) = uVar7;
                                      *(int **)(&stack0xffff3554 + iVar6) = piVar11;
                                      *(undefined4 *)((int)&uStackY_cab0 + iVar6) = 0x64e0fe;
                                      (*pcVar1)();
                                    }
                                    else {
                                      *(undefined4 *)(&stack0xffff355c + iVar6) = 0x400;
                                      *(undefined4 *)(&stack0xffff3558 + iVar6) = uVar7;
                                      *(char **)(&stack0xffff3554 + iVar6) = local_5420;
                                      *(undefined4 *)((int)&uStackY_cab0 + iVar6) = 0x64df48;
                                      V_strncpy(*(char **)(&stack0xffff3554 + iVar6),
                                                *(char **)(&stack0xffff3558 + iVar6),
                                                *(int *)(&stack0xffff355c + iVar6));
                                      *(char **)(&stack0xffff3554 + iVar6) = local_5420;
                                      *(undefined4 *)((int)&uStackY_cab0 + iVar6) = 0x64df56;
                                      iVar8 = _V_strlen(*(char **)(&stack0xffff3554 + iVar6));
                                      if (0 < iVar8) {
                                        pcVar18 = local_5420;
                                        pcVar12 = pcVar18 + iVar8;
                                        do {
                                          while (*pcVar18 != '^') {
                                            pcVar18 = pcVar18 + 1;
                                            if (pcVar18 == pcVar12) goto LAB_0064df7e;
                                          }
                                          *pcVar18 = '\"';
                                          pcVar18 = pcVar18 + 1;
                                        } while (pcVar18 != pcVar12);
                                      }
LAB_0064df7e:
                                      pcVar1 = *(code **)(*piVar11 + 0x84);
                                      *(int *)(&stack0xffff3554 + iVar6) = iVar9;
                                      *(undefined4 *)((int)&uStackY_cab0 + iVar6) = 0x64df8e;
                                      uVar7 = KeyValues::GetName(*(KeyValues **)
                                                                  (&stack0xffff3554 + iVar6));
                                      *(undefined4 *)(&stack0xffff3558 + iVar6) = uVar7;
                                      *(char **)(&stack0xffff355c + iVar6) = local_5420;
                                      *(int **)(&stack0xffff3554 + iVar6) = piVar11;
                                      *(undefined4 *)((int)&uStackY_cab0 + iVar6) = 0x64dfa1;
                                      (*pcVar1)();
                                    }
                                  }
                                  *(int *)(&stack0xffff3554 + iVar6) = iVar9;
                                  *(undefined4 *)((int)&uStackY_cab0 + iVar6) = 0x64dece;
                                  iVar9 = KeyValues::GetNextKey
                                                    (*(KeyValues **)(&stack0xffff3554 + iVar6));
                                }
LAB_0064dfcf:
                                *(char **)(&stack0xffff3554 + iVar6) = local_ca64;
                                *(undefined4 *)((int)&uStackY_cab0 + iVar6) = 0x64dfdd;
                                local_ca64 = (char *)KeyValues::GetNextKey
                                                               (*(KeyValues **)
                                                                 (&stack0xffff3554 + iVar6));
                              }
                              else {
                                *(undefined1 **)(&stack0xffff355c + iVar6) = &DAT_00d539c2;
                                *(undefined4 *)(&stack0xffff3558 + iVar6) = 0;
                                *(char **)(&stack0xffff3554 + iVar6) = pcVar18;
                                *(undefined4 *)((int)&uStackY_cab0 + iVar6) = 0x64e05e;
                                uVar7 = KeyValues::GetString
                                                  (*(KeyValues **)(&stack0xffff3554 + iVar6),
                                                   *(char **)(&stack0xffff3558 + iVar6),
                                                   *(char **)(&stack0xffff355c + iVar6));
                                *(undefined4 *)(&stack0xffff355c + iVar6) = 0x400;
                                *(undefined4 *)(&stack0xffff3558 + iVar6) = 0x5e;
                                *(undefined4 *)(&stack0xffff3554 + iVar6) = uVar7;
                                *(undefined4 *)((int)&uStackY_cab0 + iVar6) = 0x64e078;
                                iVar9 = V_strnchr(*(char **)(&stack0xffff3554 + iVar6),
                                                  (&stack0xffff3558)[iVar6],
                                                  *(int *)(&stack0xffff355c + iVar6));
                                if (iVar9 != 0) {
                                  *(undefined4 *)(&stack0xffff355c + iVar6) = 0x400;
                                  *(undefined4 *)(&stack0xffff3558 + iVar6) = uVar7;
                                  *(char **)(&stack0xffff3554 + iVar6) = local_5820;
                                  *(undefined4 *)((int)&uStackY_cab0 + iVar6) = 0x64e09a;
                                  V_strncpy(*(char **)(&stack0xffff3554 + iVar6),
                                            *(char **)(&stack0xffff3558 + iVar6),
                                            *(int *)(&stack0xffff355c + iVar6));
                                  *(char **)(&stack0xffff3554 + iVar6) = local_5820;
                                  *(undefined4 *)((int)&uStackY_cab0 + iVar6) = 0x64e0a8;
                                  iVar9 = _V_strlen(*(char **)(&stack0xffff3554 + iVar6));
                                  if (0 < iVar9) {
                                    pcVar18 = local_5820;
                                    pcVar12 = pcVar18 + iVar9;
                                    do {
                                      if (*pcVar18 == '^') {
                                        *pcVar18 = '\"';
                                      }
                                      pcVar18 = pcVar18 + 1;
                                    } while (pcVar18 != pcVar12);
                                  }
                                  pcVar1 = *(code **)(*piVar11 + 0x84);
                                  *(char **)(&stack0xffff3554 + iVar6) = local_ca64;
                                  *(undefined4 *)((int)&uStackY_cab0 + iVar6) = 0x64dfbc;
                                  uVar7 = KeyValues::GetName(*(KeyValues **)
                                                              (&stack0xffff3554 + iVar6));
                                  *(undefined4 *)(&stack0xffff3558 + iVar6) = uVar7;
                                  *(char **)(&stack0xffff355c + iVar6) = local_5820;
                                  *(int **)(&stack0xffff3554 + iVar6) = piVar11;
                                  *(undefined4 *)((int)&uStackY_cab0 + iVar6) = 0x64dfcf;
                                  (*pcVar1)();
                                  goto LAB_0064dfcf;
                                }
                                pcVar1 = *(code **)(*piVar11 + 0x84);
                                *(char **)(&stack0xffff3554 + iVar6) = local_ca64;
                                *(undefined4 *)((int)&uStackY_cab0 + iVar6) = 0x64e1e8;
                                uVar10 = KeyValues::GetName(*(KeyValues **)
                                                             (&stack0xffff3554 + iVar6));
                                *(undefined4 *)(&stack0xffff355c + iVar6) = uVar7;
                                *(undefined4 *)(&stack0xffff3558 + iVar6) = uVar10;
                                *(int **)(&stack0xffff3554 + iVar6) = piVar11;
                                *(undefined4 *)((int)&uStackY_cab0 + iVar6) = 0x64e1f5;
                                (*pcVar1)();
                                *(char **)(&stack0xffff3554 + iVar6) = local_ca64;
                                *(undefined4 *)((int)&uStackY_cab0 + iVar6) = 0x64e203;
                                local_ca64 = (char *)KeyValues::GetNextKey
                                                               (*(KeyValues **)
                                                                 (&stack0xffff3554 + iVar6));
                              }
                            }
                            *(int *)(&stack0xffff3554 + iVar6) = local_ca78;
                            *(undefined4 *)((int)&uStackY_cab0 + iVar6) = 0x64dff9;
                            local_ca78 = KeyValues::GetNextKey
                                                   (*(KeyValues **)(&stack0xffff3554 + iVar6));
                          }
                          else {
                            *(undefined1 **)(&stack0xffff355c + iVar6) = &DAT_00d539c2;
                            *(undefined4 *)(&stack0xffff3558 + iVar6) = 0;
                            *(int *)(&stack0xffff3554 + iVar6) = iVar9;
                            *(undefined4 *)((int)&uStackY_cab0 + iVar6) = 0x64e121;
                            uVar7 = KeyValues::GetString
                                              (*(KeyValues **)(&stack0xffff3554 + iVar6),
                                               *(char **)(&stack0xffff3558 + iVar6),
                                               *(char **)(&stack0xffff355c + iVar6));
                            *(undefined4 *)(&stack0xffff355c + iVar6) = 0x400;
                            *(undefined4 *)(&stack0xffff3558 + iVar6) = 0x5e;
                            *(undefined4 *)(&stack0xffff3554 + iVar6) = uVar7;
                            *(undefined4 *)((int)&uStackY_cab0 + iVar6) = 0x64e13b;
                            iVar9 = V_strnchr(*(char **)(&stack0xffff3554 + iVar6),
                                              (&stack0xffff3558)[iVar6],
                                              *(int *)(&stack0xffff355c + iVar6));
                            if (iVar9 == 0) {
                              pcVar1 = *(code **)(*piVar11 + 0x84);
                              *(int *)(&stack0xffff3554 + iVar6) = local_ca78;
                              *(undefined4 *)((int)&uStackY_cab0 + iVar6) = 0x64e21e;
                              uVar10 = KeyValues::GetName(*(KeyValues **)(&stack0xffff3554 + iVar6))
                              ;
                              *(undefined4 *)(&stack0xffff355c + iVar6) = uVar7;
                              *(undefined4 *)(&stack0xffff3558 + iVar6) = uVar10;
                              *(int **)(&stack0xffff3554 + iVar6) = piVar11;
                              *(undefined4 *)((int)&uStackY_cab0 + iVar6) = 0x64e22b;
                              (*pcVar1)();
                              *(int *)(&stack0xffff3554 + iVar6) = local_ca78;
                              *(undefined4 *)((int)&uStackY_cab0 + iVar6) = 0x64e239;
                              local_ca78 = KeyValues::GetNextKey
                                                     (*(KeyValues **)(&stack0xffff3554 + iVar6));
                            }
                            else {
                              *(undefined4 *)(&stack0xffff355c + iVar6) = 0x400;
                              *(undefined4 *)(&stack0xffff3558 + iVar6) = uVar7;
                              *(char **)(&stack0xffff3554 + iVar6) = local_5c20;
                              *(undefined4 *)((int)&uStackY_cab0 + iVar6) = 0x64e15d;
                              V_strncpy(*(char **)(&stack0xffff3554 + iVar6),
                                        *(char **)(&stack0xffff3558 + iVar6),
                                        *(int *)(&stack0xffff355c + iVar6));
                              *(char **)(&stack0xffff3554 + iVar6) = local_5c20;
                              *(undefined4 *)((int)&uStackY_cab0 + iVar6) = 0x64e16b;
                              iVar9 = _V_strlen(*(char **)(&stack0xffff3554 + iVar6));
                              if (0 < iVar9) {
                                pcVar18 = local_5c20;
                                pcVar12 = pcVar18 + iVar9;
                                do {
                                  while (*pcVar18 != '^') {
                                    pcVar18 = pcVar18 + 1;
                                    if (pcVar18 == pcVar12) goto LAB_0064e196;
                                  }
                                  *pcVar18 = '\"';
                                  pcVar18 = pcVar18 + 1;
                                } while (pcVar18 != pcVar12);
                              }
LAB_0064e196:
                              pcVar1 = *(code **)(*piVar11 + 0x84);
                              *(int *)(&stack0xffff3554 + iVar6) = local_ca78;
                              *(undefined4 *)((int)&uStackY_cab0 + iVar6) = 0x64e1ac;
                              uVar7 = KeyValues::GetName(*(KeyValues **)(&stack0xffff3554 + iVar6));
                              *(undefined4 *)(&stack0xffff3558 + iVar6) = uVar7;
                              *(char **)(&stack0xffff355c + iVar6) = local_5c20;
                              *(int **)(&stack0xffff3554 + iVar6) = piVar11;
                              *(undefined4 *)((int)&uStackY_cab0 + iVar6) = 0x64e1bf;
                              (*pcVar1)();
                              *(int *)(&stack0xffff3554 + iVar6) = local_ca78;
                              *(undefined4 *)((int)&uStackY_cab0 + iVar6) = 0x64e1cd;
                              local_ca78 = KeyValues::GetNextKey
                                                     (*(KeyValues **)(&stack0xffff3554 + iVar6));
                            }
                          }
                        }
                        *(int *)(&stack0xffff3554 + iVar6) = local_ca74;
                        *(undefined4 *)((int)&uStackY_cab0 + iVar6) = 0x64e015;
                        local_ca74 = KeyValues::GetNextKey
                                               (*(KeyValues **)(&stack0xffff3554 + iVar6));
                      }
                      else {
                        *(undefined1 **)(&stack0xffff355c + iVar6) = &DAT_00d539c2;
                        *(undefined4 *)(&stack0xffff3558 + iVar6) = 0;
                        *(int *)(&stack0xffff3554 + iVar6) = iVar9;
                        *(undefined4 *)((int)&uStackY_cab0 + iVar6) = 0x64e25c;
                        uVar7 = KeyValues::GetString
                                          (*(KeyValues **)(&stack0xffff3554 + iVar6),
                                           *(char **)(&stack0xffff3558 + iVar6),
                                           *(char **)(&stack0xffff355c + iVar6));
                        *(undefined4 *)(&stack0xffff355c + iVar6) = 0x400;
                        *(undefined4 *)(&stack0xffff3558 + iVar6) = 0x5e;
                        *(undefined4 *)(&stack0xffff3554 + iVar6) = uVar7;
                        *(undefined4 *)((int)&uStackY_cab0 + iVar6) = 0x64e276;
                        iVar9 = V_strnchr(*(char **)(&stack0xffff3554 + iVar6),
                                          (&stack0xffff3558)[iVar6],
                                          *(int *)(&stack0xffff355c + iVar6));
                        if (iVar9 == 0) {
                          pcVar1 = *(code **)(*piVar11 + 0x84);
                          *(int *)(&stack0xffff3554 + iVar6) = local_ca74;
                          *(undefined4 *)((int)&uStackY_cab0 + iVar6) = 0x64e320;
                          uVar10 = KeyValues::GetName(*(KeyValues **)(&stack0xffff3554 + iVar6));
                          *(undefined4 *)(&stack0xffff355c + iVar6) = uVar7;
                          *(undefined4 *)(&stack0xffff3558 + iVar6) = uVar10;
                          *(int **)(&stack0xffff3554 + iVar6) = piVar11;
                          *(undefined4 *)((int)&uStackY_cab0 + iVar6) = 0x64e32d;
                          (*pcVar1)();
                          *(int *)(&stack0xffff3554 + iVar6) = local_ca74;
                          *(undefined4 *)((int)&uStackY_cab0 + iVar6) = 0x64e33b;
                          local_ca74 = KeyValues::GetNextKey
                                                 (*(KeyValues **)(&stack0xffff3554 + iVar6));
                        }
                        else {
                          *(undefined4 *)(&stack0xffff355c + iVar6) = 0x400;
                          *(undefined4 *)(&stack0xffff3558 + iVar6) = uVar7;
                          *(char **)(&stack0xffff3554 + iVar6) = local_6020;
                          *(undefined4 *)((int)&uStackY_cab0 + iVar6) = 0x64e298;
                          V_strncpy(*(char **)(&stack0xffff3554 + iVar6),
                                    *(char **)(&stack0xffff3558 + iVar6),
                                    *(int *)(&stack0xffff355c + iVar6));
                          *(char **)(&stack0xffff3554 + iVar6) = local_6020;
                          *(undefined4 *)((int)&uStackY_cab0 + iVar6) = 0x64e2a6;
                          iVar9 = _V_strlen(*(char **)(&stack0xffff3554 + iVar6));
                          if (0 < iVar9) {
                            pcVar18 = local_6020;
                            pcVar12 = pcVar18 + iVar9;
                            do {
                              while (*pcVar18 != '^') {
                                pcVar18 = pcVar18 + 1;
                                if (pcVar18 == pcVar12) goto LAB_0064e2ce;
                              }
                              *pcVar18 = '\"';
                              pcVar18 = pcVar18 + 1;
                            } while (pcVar18 != pcVar12);
                          }
LAB_0064e2ce:
                          pcVar1 = *(code **)(*piVar11 + 0x84);
                          *(int *)(&stack0xffff3554 + iVar6) = local_ca74;
                          *(undefined4 *)((int)&uStackY_cab0 + iVar6) = 0x64e2e4;
                          uVar7 = KeyValues::GetName(*(KeyValues **)(&stack0xffff3554 + iVar6));
                          *(undefined4 *)(&stack0xffff3558 + iVar6) = uVar7;
                          *(char **)(&stack0xffff355c + iVar6) = local_6020;
                          *(int **)(&stack0xffff3554 + iVar6) = piVar11;
                          *(undefined4 *)((int)&uStackY_cab0 + iVar6) = 0x64e2f7;
                          (*pcVar1)();
                          *(int *)(&stack0xffff3554 + iVar6) = local_ca74;
                          *(undefined4 *)((int)&uStackY_cab0 + iVar6) = 0x64e305;
                          local_ca74 = KeyValues::GetNextKey
                                                 (*(KeyValues **)(&stack0xffff3554 + iVar6));
                        }
                      }
                    }
                  }
                  else {
                    *(undefined1 **)(&stack0xffff355c + iVar6) = &DAT_00d539c2;
                    *(undefined4 *)(&stack0xffff3558 + iVar6) = 0;
                    *(char **)(&stack0xffff3554 + iVar6) = pcVar18;
                    *(undefined4 *)((int)&uStackY_cab0 + iVar6) = 0x64e35e;
                    uVar7 = KeyValues::GetString
                                      (*(KeyValues **)(&stack0xffff3554 + iVar6),
                                       *(char **)(&stack0xffff3558 + iVar6),
                                       *(char **)(&stack0xffff355c + iVar6));
                    *(undefined4 *)(&stack0xffff355c + iVar6) = 0x400;
                    *(undefined4 *)(&stack0xffff3558 + iVar6) = 0x5e;
                    *(undefined4 *)(&stack0xffff3554 + iVar6) = uVar7;
                    *(undefined4 *)((int)&uStackY_cab0 + iVar6) = 0x64e378;
                    iVar9 = V_strnchr(*(char **)(&stack0xffff3554 + iVar6),(&stack0xffff3558)[iVar6]
                                      ,*(int *)(&stack0xffff355c + iVar6));
                    if (iVar9 == 0) {
                      pcVar1 = *(code **)(*piVar11 + 0x84);
                      *(char **)(&stack0xffff3554 + iVar6) = local_ca70;
                      *(undefined4 *)((int)&uStackY_cab0 + iVar6) = 0x64e41a;
                      uVar10 = KeyValues::GetName(*(KeyValues **)(&stack0xffff3554 + iVar6));
                      *(undefined4 *)(&stack0xffff355c + iVar6) = uVar7;
                      *(undefined4 *)(&stack0xffff3558 + iVar6) = uVar10;
                      *(int **)(&stack0xffff3554 + iVar6) = piVar11;
                      *(undefined4 *)((int)&uStackY_cab0 + iVar6) = 0x64e427;
                      (*pcVar1)();
                    }
                    else {
                      *(undefined4 *)(&stack0xffff355c + iVar6) = 0x400;
                      *(undefined4 *)(&stack0xffff3558 + iVar6) = uVar7;
                      *(char **)(&stack0xffff3554 + iVar6) = local_6420;
                      *(undefined4 *)((int)&uStackY_cab0 + iVar6) = 0x64e39a;
                      V_strncpy(*(char **)(&stack0xffff3554 + iVar6),
                                *(char **)(&stack0xffff3558 + iVar6),
                                *(int *)(&stack0xffff355c + iVar6));
                      *(char **)(&stack0xffff3554 + iVar6) = local_6420;
                      *(undefined4 *)((int)&uStackY_cab0 + iVar6) = 0x64e3a8;
                      iVar9 = _V_strlen(*(char **)(&stack0xffff3554 + iVar6));
                      if (0 < iVar9) {
                        pcVar18 = local_6420;
                        pcVar12 = pcVar18 + iVar9;
                        do {
                          while (*pcVar18 != '^') {
                            pcVar18 = pcVar18 + 1;
                            if (pcVar18 == pcVar12) goto LAB_0064e3d6;
                          }
                          *pcVar18 = '\"';
                          pcVar18 = pcVar18 + 1;
                        } while (pcVar18 != pcVar12);
                      }
LAB_0064e3d6:
                      pcVar1 = *(code **)(*piVar11 + 0x84);
                      *(char **)(&stack0xffff3554 + iVar6) = local_ca70;
                      *(undefined4 *)((int)&uStackY_cab0 + iVar6) = 0x64e3ec;
                      uVar7 = KeyValues::GetName(*(KeyValues **)(&stack0xffff3554 + iVar6));
                      *(undefined4 *)(&stack0xffff3558 + iVar6) = uVar7;
                      *(char **)(&stack0xffff355c + iVar6) = local_6420;
                      *(int **)(&stack0xffff3554 + iVar6) = piVar11;
                      *(undefined4 *)((int)&uStackY_cab0 + iVar6) = 0x64e3ff;
                      (*pcVar1)();
                    }
                  }
                  *(char **)(&stack0xffff3554 + iVar6) = local_ca70;
                  *(undefined4 *)((int)&uStackY_cab0 + iVar6) = 0x64e031;
                  local_ca70 = (char *)KeyValues::GetNextKey
                                                 (*(KeyValues **)(&stack0xffff3554 + iVar6));
                }
              }
              else {
                *(undefined1 **)(&stack0xffff355c + iVar6) = &DAT_00d539c2;
                *(undefined4 *)(&stack0xffff3558 + iVar6) = 0;
                *(undefined **)(&stack0xffff3554 + iVar6) = puVar15;
                *(undefined4 *)((int)&uStackY_cab0 + iVar6) = 0x64e44a;
                uVar7 = KeyValues::GetString
                                  (*(KeyValues **)(&stack0xffff3554 + iVar6),
                                   *(char **)(&stack0xffff3558 + iVar6),
                                   *(char **)(&stack0xffff355c + iVar6));
                *(undefined4 *)(&stack0xffff355c + iVar6) = 0x400;
                *(undefined4 *)(&stack0xffff3558 + iVar6) = 0x5e;
                *(undefined4 *)(&stack0xffff3554 + iVar6) = uVar7;
                *(undefined4 *)((int)&uStackY_cab0 + iVar6) = 0x64e464;
                iVar9 = V_strnchr(*(char **)(&stack0xffff3554 + iVar6),(&stack0xffff3558)[iVar6],
                                  *(int *)(&stack0xffff355c + iVar6));
                if (iVar9 == 0) {
                  pcVar1 = *(code **)(*piVar11 + 0x84);
                  *(undefined **)(&stack0xffff3554 + iVar6) = local_ca6c;
                  *(undefined4 *)((int)&uStackY_cab0 + iVar6) = 0x64e4fd;
                  uVar10 = KeyValues::GetName(*(KeyValues **)(&stack0xffff3554 + iVar6));
                  *(undefined4 *)(&stack0xffff355c + iVar6) = uVar7;
                  *(undefined4 *)(&stack0xffff3558 + iVar6) = uVar10;
                  *(int **)(&stack0xffff3554 + iVar6) = piVar11;
                  *(undefined4 *)((int)&uStackY_cab0 + iVar6) = 0x64e50a;
                  (*pcVar1)();
                }
                else {
                  *(undefined4 *)(&stack0xffff355c + iVar6) = 0x400;
                  *(undefined4 *)(&stack0xffff3558 + iVar6) = uVar7;
                  *(char **)(&stack0xffff3554 + iVar6) = local_6820;
                  *(undefined4 *)((int)&uStackY_cab0 + iVar6) = 0x64e482;
                  V_strncpy(*(char **)(&stack0xffff3554 + iVar6),
                            *(char **)(&stack0xffff3558 + iVar6),*(int *)(&stack0xffff355c + iVar6))
                  ;
                  *(char **)(&stack0xffff3554 + iVar6) = local_6820;
                  *(undefined4 *)((int)&uStackY_cab0 + iVar6) = 0x64e490;
                  iVar9 = _V_strlen(*(char **)(&stack0xffff3554 + iVar6));
                  if (0 < iVar9) {
                    pcVar18 = local_6820;
                    pcVar12 = pcVar18 + iVar9;
                    do {
                      if (*pcVar18 == '^') {
                        *pcVar18 = '\"';
                      }
                      pcVar18 = pcVar18 + 1;
                    } while (pcVar18 != pcVar12);
                  }
                  pcVar1 = *(code **)(*piVar11 + 0x84);
                  *(undefined **)(&stack0xffff3554 + iVar6) = local_ca6c;
                  *(undefined4 *)((int)&uStackY_cab0 + iVar6) = 0x64e4c1;
                  uVar7 = KeyValues::GetName(*(KeyValues **)(&stack0xffff3554 + iVar6));
                  *(undefined4 *)(&stack0xffff3558 + iVar6) = uVar7;
                  *(char **)(&stack0xffff355c + iVar6) = local_6820;
                  *(int **)(&stack0xffff3554 + iVar6) = piVar11;
                  *(undefined4 *)((int)&uStackY_cab0 + iVar6) = 0x64e4d4;
                  (*pcVar1)();
                }
              }
              *(undefined **)(&stack0xffff3554 + iVar6) = local_ca6c;
              *(undefined4 *)((int)&uStackY_cab0 + iVar6) = 0x64e4e2;
              local_ca6c = (undefined *)
                           KeyValues::GetNextKey(*(KeyValues **)(&stack0xffff3554 + iVar6));
            }
            local_ca5c = 0xffffffff;
            iVar9 = *piVar11;
            *(int **)(&stack0xffff3554 + iVar6) = piVar11;
            pcVar1 = *(code **)(iVar9 + 0xc);
            *(undefined4 *)((int)&uStackY_cab0 + iVar6) = 0x64e51e;
            puVar13 = (undefined4 *)(*pcVar1)();
            pCVar3 = local_ca60;
            local_ca5c = *puVar13;
            *(undefined4 **)(&stack0xffff355c + iVar6) = &local_ca5c;
            *(undefined4 *)(&stack0xffff3558 + iVar6) = *(undefined4 *)(pCVar3 + 0x50);
            *(CCommentarySystem **)(&stack0xffff3554 + iVar6) = pCVar3 + 0x44;
            *(undefined4 *)((int)&uStackY_cab0 + iVar6) = 0x64e54a;
            iVar8 = CUtlVector<CHandle<CBaseEntity>,CUtlMemory<CHandle<CBaseEntity>,int>>::
                    InsertBefore(*(CUtlVector<CHandle<CBaseEntity>,CUtlMemory<CHandle<CBaseEntity>,int>>
                                   **)(&stack0xffff3554 + iVar6),*(int *)(&stack0xffff3558 + iVar6),
                                 *(CHandle **)(&stack0xffff355c + iVar6));
            *(undefined4 *)(&stack0xffff355c + iVar6) = 0;
            *(undefined4 *)(&stack0xffff3558 + iVar6) = 0;
            *(undefined1 **)(&stack0xffff3554 + iVar6) = local_ca58;
            *(undefined4 *)((int)&uStackY_cab0 + iVar6) = 0x64e56a;
            CUtlBuffer::SeekPut();
            *(undefined4 *)(&stack0xffff355c + iVar6) = 0;
            *(undefined1 **)(&stack0xffff3558 + iVar6) = local_ca58;
            *(int *)(&stack0xffff3554 + iVar6) = local_ca68;
            *(undefined4 *)((int)&uStackY_cab0 + iVar6) = 0x64e58a;
            KeyValues::RecursiveSaveToFile
                      (*(KeyValues **)(&stack0xffff3554 + iVar6),
                       *(CUtlBuffer **)(&stack0xffff3558 + iVar6),*(int *)(&stack0xffff355c + iVar6)
                      );
            iVar9 = local_ca48;
            do {
              iVar20 = iVar9;
              iVar9 = iVar20 + -1;
            } while (acStack_5022[iVar20 + 1] != '}');
            pcVar18 = acStack_5022 + 2;
            cVar4 = acStack_5022[2];
            while (cVar4 != '{') {
              pcVar18 = pcVar18 + 1;
              cVar4 = *pcVar18;
            }
            *(char **)(&stack0xffff3558 + iVar6) = pcVar18 + 2;
            iVar9 = local_ca88;
            pcVar12 = acStack_5022 + (iVar20 - (int)(pcVar18 + 2));
            *(char **)(&stack0xffff355c + iVar6) = pcVar12;
            pcVar18 = (char *)(local_ca84 + iVar9);
            *(char **)(&stack0xffff3554 + iVar6) = pcVar18;
            local_ca64 = pcVar18;
            *(undefined4 *)((int)&uStackY_cab0 + iVar6) = 0x64e5e6;
            memcpy(*(void **)(&stack0xffff3554 + iVar6),*(void **)(&stack0xffff3558 + iVar6),
                   *(size_t *)(&stack0xffff355c + iVar6));
            pcVar18 = local_ca64;
            *(int **)(&stack0xffff3554 + iVar6) = piVar11;
            *(undefined4 *)(&stack0xffff3560 + iVar6) = 0;
            *(pointer_____offset_0x8___ **)(&stack0xffff355c + iVar6) =
                 &CPointCommentaryNode::typeinfo;
            local_ca84 = local_ca84 + (int)pcVar12;
            *(pointer_____offset_0x8___ **)(&stack0xffff3558 + iVar6) = &CBaseEntity::typeinfo;
            local_aa20[iVar8 * 2] = (int)pcVar18;
            local_aa20[iVar8 * 2 + 1] = (int)pcVar12;
            *(undefined4 *)((int)&uStackY_cab0 + iVar6) = 0x64e620;
            iVar9 = __dynamic_cast();
            if (iVar9 != 0) {
              pcVar18 = *(char **)(local_ca60 + 0x10) + 1;
              local_ca64 = *(char **)(local_ca60 + 0x10);
              *(char **)(local_ca60 + 0x10) = pcVar18;
              if (pcVar18 != *(char **)(iVar9 + 0x1494)) {
                if (*(char *)(iVar9 + 0x6c) == '\0') {
                  puVar2 = *(uint **)(iVar9 + 0x30);
                  if (puVar2 != (uint *)0x0) {
                    *puVar2 = *puVar2 | 0x101;
                    *(uint **)(&stack0xffff3554 + iVar6) = puVar2;
                    *(undefined4 *)((int)&uStackY_cab0 + iVar6) = 0x64e662;
                    iVar8 = CBaseEdict::GetChangeAccessor
                                      (*(CBaseEdict **)(&stack0xffff3554 + iVar6));
                    *(undefined2 *)(iVar8 + 2) = 0;
                  }
                }
                else {
                  *(byte *)(iVar9 + 0x70) = *(byte *)(iVar9 + 0x70) | 1;
                }
                *(char **)(iVar9 + 0x1494) = pcVar18;
              }
            }
            *(undefined4 *)(&stack0xffff3560 + iVar6) = 0;
            *(pointer_____offset_0x8___ **)(&stack0xffff355c + iVar6) = &CPointTemplate::typeinfo;
            *(pointer_____offset_0x8___ **)(&stack0xffff3558 + iVar6) = &CBaseEntity::typeinfo;
            *(int **)(&stack0xffff3554 + iVar6) = piVar11;
            *(undefined4 *)((int)&uStackY_cab0 + iVar6) = 0x64e68e;
            iVar8 = __dynamic_cast();
            iVar9 = local_ca7c;
            if (iVar8 != 0) {
              local_ca7c = local_ca7c + 1;
              local_ca20[iVar9] = iVar8;
            }
          }
        }
LAB_0064e6b8:
        *(int *)(&stack0xffff3554 + iVar6) = local_ca68;
        *(undefined4 *)((int)&uStackY_cab0 + iVar6) = 0x64e6c6;
        local_ca68 = KeyValues::GetNextKey(*(KeyValues **)(&stack0xffff3554 + iVar6));
      } while (local_ca68 != 0);
    }
    if (*(int *)(local_ca60 + 0x2c) != 0) {
      *(int *)(&stack0xffff3554 + iVar6) = *(int *)(local_ca60 + 0x2c);
      *(undefined4 *)((int)&uStackY_cab0 + iVar6) = 0x64e6f3;
      iVar9 = KeyValues::GetFirstSubKey(*(KeyValues **)(&stack0xffff3554 + iVar6));
      while (iVar9 != 0) {
        *(undefined4 *)(&stack0xffff355c + iVar6) = 0;
        *(char **)(&stack0xffff3558 + iVar6) = "modify";
        *(int *)(&stack0xffff3554 + iVar6) = iVar9;
        *(undefined4 *)((int)&uStackY_cab0 + iVar6) = 0x64e715;
        local_ca68 = KeyValues::FindKey(*(KeyValues **)(&stack0xffff3554 + iVar6),
                                        *(char **)(&stack0xffff3558 + iVar6),
                                        (bool)(&stack0xffff355c)[iVar6]);
        if (local_ca68 != 0) {
          *(undefined4 *)(&stack0xffff355c + iVar6) = 0;
          *(char **)(&stack0xffff3558 + iVar6) = "find_by_modelname";
          *(int *)(&stack0xffff3554 + iVar6) = iVar9;
          *(undefined4 *)((int)&uStackY_cab0 + iVar6) = 0x64e73b;
          iVar8 = KeyValues::FindKey(*(KeyValues **)(&stack0xffff3554 + iVar6),
                                     *(char **)(&stack0xffff3558 + iVar6),
                                     (bool)(&stack0xffff355c)[iVar6]);
          local_ca6c = (undefined *)iVar8;
          if (iVar8 != 0) {
            *(undefined1 **)(&stack0xffff355c + iVar6) = &DAT_00d539c2;
            *(undefined4 *)(&stack0xffff3558 + iVar6) = 0;
            *(int *)(&stack0xffff3554 + iVar6) = iVar8;
            *(undefined4 *)((int)&uStackY_cab0 + iVar6) = 0x64e767;
            uVar7 = KeyValues::GetString
                              (*(KeyValues **)(&stack0xffff3554 + iVar6),
                               *(char **)(&stack0xffff3558 + iVar6),
                               *(char **)(&stack0xffff355c + iVar6));
            *(undefined4 *)(&stack0xffff355c + iVar6) = uVar7;
            *(undefined4 *)(&stack0xffff3558 + iVar6) = 0;
            *(undefined1 **)(&stack0xffff3554 + iVar6) = gEntList;
            *(undefined4 *)((int)&uStackY_cab0 + iVar6) = 0x64e77f;
            piVar11 = (int *)CGlobalEntityList::FindEntityByModel
                                       (*(CGlobalEntityList **)(&stack0xffff3554 + iVar6),
                                        *(CBaseEntity **)(&stack0xffff3558 + iVar6),
                                        *(char **)(&stack0xffff355c + iVar6));
            while (piVar11 != (int *)0x0) {
              *(int *)(&stack0xffff3554 + iVar6) = local_ca68;
              *(undefined4 *)((int)&uStackY_cab0 + iVar6) = 0x64e797;
              local_ca64 = (char *)KeyValues::GetFirstSubKey
                                             (*(KeyValues **)(&stack0xffff3554 + iVar6));
              while (puVar15 = local_ca6c, local_ca64 != (char *)0x0) {
                pcVar1 = *(code **)(*piVar11 + 0x84);
                *(undefined1 **)(&stack0xffff355c + iVar6) = &DAT_00d539c2;
                pcVar18 = local_ca64;
                *(undefined4 *)(&stack0xffff3558 + iVar6) = 0;
                *(char **)(&stack0xffff3554 + iVar6) = pcVar18;
                *(undefined4 *)((int)&uStackY_cab0 + iVar6) = 0x64e7cb;
                local_ca70 = (char *)KeyValues::GetString
                                               (*(KeyValues **)(&stack0xffff3554 + iVar6),
                                                *(char **)(&stack0xffff3558 + iVar6),
                                                *(char **)(&stack0xffff355c + iVar6));
                *(char **)(&stack0xffff3554 + iVar6) = local_ca64;
                *(undefined4 *)((int)&uStackY_cab0 + iVar6) = 0x64e7df;
                uVar7 = KeyValues::GetName(*(KeyValues **)(&stack0xffff3554 + iVar6));
                pcVar18 = local_ca70;
                *(undefined4 *)(&stack0xffff3558 + iVar6) = uVar7;
                *(int **)(&stack0xffff3554 + iVar6) = piVar11;
                *(char **)(&stack0xffff355c + iVar6) = pcVar18;
                *(undefined4 *)((int)&uStackY_cab0 + iVar6) = 0x64e7f2;
                (*pcVar1)();
                *(char **)(&stack0xffff3554 + iVar6) = local_ca64;
                *(undefined4 *)((int)&uStackY_cab0 + iVar6) = 0x64e800;
                local_ca64 = (char *)KeyValues::GetNextKey
                                               (*(KeyValues **)(&stack0xffff3554 + iVar6));
              }
              *(undefined1 **)(&stack0xffff355c + iVar6) = &DAT_00d539c2;
              *(undefined4 *)(&stack0xffff3558 + iVar6) = 0;
              *(undefined **)(&stack0xffff3554 + iVar6) = puVar15;
                    /* try { // try from 0064e879 to 0064e979 has its CatchHandler @ 0064e98e */
              *(undefined4 *)((int)&uStackY_cab0 + iVar6) = 0x64e87e;
              uVar7 = KeyValues::GetString
                                (*(KeyValues **)(&stack0xffff3554 + iVar6),
                                 *(char **)(&stack0xffff3558 + iVar6),
                                 *(char **)(&stack0xffff355c + iVar6));
              *(undefined4 *)(&stack0xffff355c + iVar6) = uVar7;
              *(int **)(&stack0xffff3558 + iVar6) = piVar11;
              *(undefined1 **)(&stack0xffff3554 + iVar6) = gEntList;
              *(undefined4 *)((int)&uStackY_cab0 + iVar6) = 0x64e892;
              piVar11 = (int *)CGlobalEntityList::FindEntityByModel
                                         (*(CGlobalEntityList **)(&stack0xffff3554 + iVar6),
                                          *(CBaseEntity **)(&stack0xffff3558 + iVar6),
                                          *(char **)(&stack0xffff355c + iVar6));
            }
          }
          *(undefined4 *)(&stack0xffff355c + iVar6) = 0;
          *(char **)(&stack0xffff3558 + iVar6) = "find_by_targetname";
          *(int *)(&stack0xffff3554 + iVar6) = iVar9;
          *(undefined4 *)((int)&uStackY_cab0 + iVar6) = 0x64e8af;
          puVar15 = (undefined *)
                    KeyValues::FindKey(*(KeyValues **)(&stack0xffff3554 + iVar6),
                                       *(char **)(&stack0xffff3558 + iVar6),
                                       (bool)(&stack0xffff355c)[iVar6]);
          local_ca6c = puVar15;
          if (puVar15 != (undefined *)0x0) {
            *(undefined1 **)(&stack0xffff355c + iVar6) = &DAT_00d539c2;
            *(undefined4 *)(&stack0xffff3558 + iVar6) = 0;
            *(undefined **)(&stack0xffff3554 + iVar6) = puVar15;
            *(undefined4 *)((int)&uStackY_cab0 + iVar6) = 0x64e8db;
            uVar7 = KeyValues::GetString
                              (*(KeyValues **)(&stack0xffff3554 + iVar6),
                               *(char **)(&stack0xffff3558 + iVar6),
                               *(char **)(&stack0xffff355c + iVar6));
            *(undefined4 *)(&stack0xffff355c + iVar6) = uVar7;
            *(undefined4 *)(&stack0xffff3558 + iVar6) = 0;
            *(undefined1 **)(&stack0xffff3554 + iVar6) = gEntList;
            *(undefined4 *)((int)&uStackY_cab0 + iVar6) = 0x64e8f3;
            piVar11 = (int *)CGlobalEntityList::FindEntityByTarget
                                       (*(CGlobalEntityList **)(&stack0xffff3554 + iVar6),
                                        *(CBaseEntity **)(&stack0xffff3558 + iVar6),
                                        *(char **)(&stack0xffff355c + iVar6));
            while (piVar11 != (int *)0x0) {
              *(int *)(&stack0xffff3554 + iVar6) = local_ca68;
              *(undefined4 *)((int)&uStackY_cab0 + iVar6) = 0x64e907;
              local_ca64 = (char *)KeyValues::GetFirstSubKey
                                             (*(KeyValues **)(&stack0xffff3554 + iVar6));
              while (puVar15 = local_ca6c, local_ca64 != (char *)0x0) {
                pcVar1 = *(code **)(*piVar11 + 0x84);
                *(undefined1 **)(&stack0xffff355c + iVar6) = &DAT_00d539c2;
                pcVar18 = local_ca64;
                *(undefined4 *)(&stack0xffff3558 + iVar6) = 0;
                *(char **)(&stack0xffff3554 + iVar6) = pcVar18;
                *(undefined4 *)((int)&uStackY_cab0 + iVar6) = 0x64e93b;
                local_ca70 = (char *)KeyValues::GetString
                                               (*(KeyValues **)(&stack0xffff3554 + iVar6),
                                                *(char **)(&stack0xffff3558 + iVar6),
                                                *(char **)(&stack0xffff355c + iVar6));
                *(char **)(&stack0xffff3554 + iVar6) = local_ca64;
                *(undefined4 *)((int)&uStackY_cab0 + iVar6) = 0x64e94f;
                uVar7 = KeyValues::GetName(*(KeyValues **)(&stack0xffff3554 + iVar6));
                pcVar18 = local_ca70;
                *(undefined4 *)(&stack0xffff3558 + iVar6) = uVar7;
                *(int **)(&stack0xffff3554 + iVar6) = piVar11;
                *(char **)(&stack0xffff355c + iVar6) = pcVar18;
                *(undefined4 *)((int)&uStackY_cab0 + iVar6) = 0x64e962;
                (*pcVar1)();
                *(char **)(&stack0xffff3554 + iVar6) = local_ca64;
                *(undefined4 *)((int)&uStackY_cab0 + iVar6) = 0x64e970;
                local_ca64 = (char *)KeyValues::GetNextKey
                                               (*(KeyValues **)(&stack0xffff3554 + iVar6));
              }
              *(undefined1 **)(&stack0xffff355c + iVar6) = &DAT_00d539c2;
              *(undefined4 *)(&stack0xffff3558 + iVar6) = 0;
              *(undefined **)(&stack0xffff3554 + iVar6) = puVar15;
              *(undefined4 *)((int)&uStackY_cab0 + iVar6) = 0x64ead9;
              uVar7 = KeyValues::GetString
                                (*(KeyValues **)(&stack0xffff3554 + iVar6),
                                 *(char **)(&stack0xffff3558 + iVar6),
                                 *(char **)(&stack0xffff355c + iVar6));
              *(undefined4 *)(&stack0xffff355c + iVar6) = uVar7;
              *(int **)(&stack0xffff3558 + iVar6) = piVar11;
              *(undefined1 **)(&stack0xffff3554 + iVar6) = gEntList;
              *(undefined4 *)((int)&uStackY_cab0 + iVar6) = 0x64eaed;
              piVar11 = (int *)CGlobalEntityList::FindEntityByTarget
                                         (*(CGlobalEntityList **)(&stack0xffff3554 + iVar6),
                                          *(CBaseEntity **)(&stack0xffff3558 + iVar6),
                                          *(char **)(&stack0xffff355c + iVar6));
            }
          }
        }
        *(int *)(&stack0xffff3554 + iVar6) = iVar9;
        *(undefined4 *)((int)&uStackY_cab0 + iVar6) = 0x64e97a;
        iVar9 = KeyValues::GetNextKey(*(KeyValues **)(&stack0xffff3554 + iVar6));
      }
    }
    puVar15 = g_pEntityList;
    if (local_ca7c != 0) {
      local_ca64 = (char *)0x0;
      iVar9 = *(int *)(local_ca60 + 0x50);
      piVar19 = (int *)(&stack0xffff3554 + iVar6);
      if (iVar9 != 0) {
        local_ca68 = iVar9 * 4;
        iVar20 = 0;
        iVar8 = -((local_ca68 + 0xfU & 0xfffffff0) + 0x10);
        piVar19 = (int *)(&stack0xffff3554 + iVar8 + iVar6);
        local_ca64 = acStack_ca90 + iVar8 + iVar6;
        local_ca6c = g_pEntityList;
        local_ca70 = local_ca64;
        do {
          uVar7 = 0;
          uVar21 = *(uint *)(*(int *)(local_ca60 + 0x44) + iVar20);
          if (((uVar21 != 0xffffffff) &&
              (puVar16 = puVar15 + (uVar21 & 0xfff) * 0x10, puVar16 != (undefined *)0xfffffffc)) &&
             (*(uint *)(puVar16 + 8) == uVar21 >> 0xc)) {
            uVar7 = *(undefined4 *)(puVar16 + 4);
          }
          *(undefined4 *)(local_ca64 + iVar20) = uVar7;
          iVar20 = iVar20 + 4;
        } while (local_ca68 != iVar20);
      }
      piVar19[4] = iVar9;
      piVar19[3] = (int)local_aa20;
      piVar19[2] = (int)local_ca64;
      piVar19[1] = local_ca7c;
      *piVar19 = (int)local_ca20;
      piVar19[-1] = 0x64ea97;
      MapEntity_ParseAllEntites_SpawnTemplates
                ((CPointTemplate **)*piVar19,piVar19[1],(CBaseEntity **)piVar19[2],
                 (HierarchicalSpawnMapData_t *)piVar19[3],piVar19[4]);
      iVar6 = iVar9 * 4;
      while (iVar8 = iVar6, pCVar3 = local_ca60, iVar9 = iVar9 + -1, -1 < iVar9) {
        iVar6 = iVar8 + -4;
        if (*(int *)(local_ca64 + iVar9 * 4) == 0) {
          iVar20 = *(int *)(local_ca60 + 0x50);
          iVar17 = (iVar20 - iVar9) + -1;
          if (0 < iVar17) {
            iVar20 = *(int *)(local_ca60 + 0x44);
            piVar19[2] = iVar17 * 4;
            piVar19[1] = iVar8 + iVar20;
            *piVar19 = iVar20 + iVar6;
            piVar19[-1] = 0x64ebd1;
            _V_memmove((void *)*piVar19,(void *)piVar19[1],piVar19[2]);
            iVar20 = *(int *)(pCVar3 + 0x50);
          }
          *(int *)(local_ca60 + 0x50) = iVar20 + -1;
        }
      }
    }
    *piVar19 = (int)local_ca58;
    piVar19[-1] = 0x64ebac;
    CUtlMemory<unsigned_char,int>::Purge((CUtlMemory<unsigned_char,int> *)*piVar19);
  }
  *piVar19 = (int)local_ca80;
  piVar19[-1] = 0x64e9af;
  KeyValues::deleteThis();
  if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {
                    /* WARNING: Subroutine does not return */
    piVar19[-1] = 0x64e9e0;
    __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)