L L4D2node

CStudioHdr::CActivityToSequenceMapping::Initialize

0x000e48b0 · 1855 bytes · __thiscall

_ZN10CStudioHdr26CActivityToSequenceMapping10InitializeEPKS_

Decompiled

undefined (2 params)

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* CStudioHdr::CActivityToSequenceMapping::Initialize(CStudioHdr const*) */

void __thiscall
CStudioHdr::CActivityToSequenceMapping::Initialize
          (CActivityToSequenceMapping *this,CStudioHdr *param_1)

{
  undefined4 *puVar1;
  CUtlVector<CStudioHdr::CActivityToSequenceMapping::HashValueType,CUtlMemory<CStudioHdr::CActivityToSequenceMapping::HashValueType,int>>
  *this_00;
  code *pcVar2;
  ushort uVar3;
  bool bVar4;
  undefined4 uVar5;
  undefined4 uVar6;
  char cVar7;
  int iVar8;
  uint uVar9;
  int iVar10;
  uint uVar11;
  uint uVar12;
  int iVar13;
  uint uVar14;
  int iVar15;
  int *piVar16;
  undefined1 *puVar17;
  int in_GS_OFFSET;
  undefined4 uStackY_90;
  char *local_7c [5];
  char *local_68;
  char *local_64;
  char *local_60;
  uint local_58;
  void *local_54;
  uint local_50;
  uint local_4c;
  CStudioHdr *local_48;
  uint local_44;
  CActivityToSequenceMapping *local_40;
  undefined4 local_34;
  undefined4 local_30;
  undefined4 local_2c;
  undefined4 local_28;
  int local_24;
  int local_20;
  
  local_34 = 0;
  local_30 = 0;
  local_40 = this;
  local_48 = param_1;
  local_20 = *(int *)(in_GS_OFFSET + 0x14);
  if (_exit == 0) {
    local_24 = 0;
  }
  else {
    local_60 = "CStudioHdr::CActivityToSequenceMapping::Initialize";
    local_64 = "Unaccounted";
    local_68 = "(%s)%s";
    local_7c[4] = (char *)&Initialize(CStudioHdr_const*)::tm_fmt;
    local_7c[3] = (char *)0x787;
    local_7c[2] = "/data/src/engine/../public/studio.cpp";
    local_7c[1] = (char *)0x0;
    local_7c[0] = (char *)0x0;
    uStackY_90 = 0xe4948;
    (**(code **)(_exit + 0x50))();
    local_24 = _exit;
  }
  iVar15 = _DAT_0040b9d4;
  local_2c = local_34;
  local_28 = local_30;
  if ((_DAT_0040b028 != 0) || (DAT_0040b02c == '\0')) {
                    /* try { // try from 000e49f6 to 000e4a44 has its CatchHandler @ 000e504b */
    uStackY_90 = 0xe49fb;
    iVar8 = ThreadGetCurrentId();
    if (iVar15 == iVar8) {
      if ((char *)*_DAT_0040b030 != "CStudioHdr::CActivityToSequenceMapping::Initialize") {
        local_7c[0] = (char *)0x0;
        uStackY_90 = 0xe4a38;
        _DAT_0040b030 =
             (int *)CVProfNode::GetSubNode((char *)_DAT_0040b030,0x2a4dd0,&DAT_00000001,0x2a054b);
      }
      uStackY_90 = 0xe4a45;
      CVProfNode::EnterScope();
      DAT_0040b02c = '\0';
    }
  }
  *(int *)(local_40 + 0x24) = *(int *)local_48;
  if (*(int *)local_40 == 0) {
    *(int *)(local_40 + 0x28) = *(int *)(local_48 + 4);
                    /* try { // try from 000e4aba to 000e4d46 has its CatchHandler @ 000e502a */
    uStackY_90 = 0xe4abf;
    cVar7 = SequencesAvailable(local_48);
    if (cVar7 != '\0') {
      if (*(int *)(local_48 + 4) == 0) {
        local_4c = *(uint *)(*(int *)local_48 + 0xbc);
      }
      else {
        local_4c = *(uint *)(*(int *)(local_48 + 4) + 0x14);
      }
      if (0 < (int)local_4c) {
        local_44 = 0;
        bVar4 = false;
        do {
          uStackY_90 = 0xe4b02;
          iVar8 = pSeqdesc(local_48,local_44);
          iVar15 = *(int *)(iVar8 + 0x10);
          if (-1 < iVar15) {
            local_58 = *(uint *)(iVar8 + 0x14);
            uStackY_90 = 0xe4b1d;
            uVar9 = HashInt(iVar15);
            if (local_40[0x1e] == (CActivityToSequenceMapping)0x0) {
              local_50 = *(uint *)(local_40 + 0x14);
              uVar9 = uVar9 % local_50;
            }
            else {
              uVar9 = uVar9 & *(uint *)(local_40 + 0x20);
              local_50 = *(uint *)(local_40 + 0x14);
            }
            local_54 = *(void **)(local_40 + 8);
            puVar1 = (undefined4 *)((int)local_54 + uVar9 * 0x14);
            uVar14 = puVar1[3];
            if ((int)uVar14 < 1) {
              if (uVar14 != 0) goto LAB_000e4e7e;
LAB_000e4b7b:
              uVar14 = 0xffff;
              uVar9 = 0xffff;
              if (0xffff < (int)local_50) goto LAB_000e4b93;
LAB_000e4e98:
                    /* try { // try from 000e4e9b to 000e4f16 has its CatchHandler @ 000e502a */
              uStackY_90 = 0xe4ea0;
              uVar9 = HashInt(iVar15);
              if (local_40[0x1e] == (CActivityToSequenceMapping)0x0) {
                uVar9 = uVar9 % *(uint *)(local_40 + 0x14);
              }
              else {
                uVar9 = uVar9 & *(uint *)(local_40 + 0x20);
              }
              this_00 = (CUtlVector<CStudioHdr::CActivityToSequenceMapping::HashValueType,CUtlMemory<CStudioHdr::CActivityToSequenceMapping::HashValueType,int>>
                         *)(*(int *)(local_40 + 8) + uVar9 * 0x14);
              iVar8 = *(int *)(this_00 + 0xc);
              if (iVar8 < 1) {
                if (iVar8 == 0) {
LAB_000e4ef3:
                  uStackY_90 = 0xe4f03;
                  CUtlVector<CStudioHdr::CActivityToSequenceMapping::HashValueType,CUtlMemory<CStudioHdr::CActivityToSequenceMapping::HashValueType,int>>
                  ::GrowVector(this_00,1);
                  uStackY_90 = 0xe4f17;
                  CUtlVector<CStudioHdr::CActivityToSequenceMapping::HashValueType,CUtlMemory<CStudioHdr::CActivityToSequenceMapping::HashValueType,int>>
                  ::ShiftElementsRight(this_00,iVar8,1);
                  piVar16 = (int *)(iVar8 * 0x10 + *(int *)this_00);
                  if (piVar16 != (int *)0x0) {
                    *piVar16 = iVar15;
                    piVar16[1] = 0;
                    piVar16[2] = 1;
                    piVar16[3] = local_58 ^ (int)local_58 >> 0x1f;
                    piVar16[3] = piVar16[3] - ((int)local_58 >> 0x1f);
                  }
                }
              }
              else {
                piVar16 = *(int **)this_00;
                if (iVar15 != *piVar16) {
                  iVar10 = 0;
                  do {
                    piVar16 = piVar16 + 4;
                    iVar10 = iVar10 + 1;
                    if (iVar10 == iVar8) goto LAB_000e4ef3;
                  } while (iVar15 != *piVar16);
                }
              }
            }
            else {
              piVar16 = (int *)*puVar1;
              if (iVar15 == *piVar16) {
LAB_000e4e7e:
                uVar11 = 0;
              }
              else {
                uVar11 = 0;
                do {
                  piVar16 = piVar16 + 4;
                  uVar11 = uVar11 + 1;
                  if (uVar11 == uVar14) goto LAB_000e4b7b;
                } while (iVar15 != *piVar16);
              }
              uVar14 = uVar11 & 0xffff;
              uVar9 = (uVar9 << 0x10 | uVar11) >> 0x10;
              if ((int)local_50 <= (int)uVar9) goto LAB_000e4e98;
LAB_000e4b93:
              piVar16 = (int *)((int)local_54 + uVar9 * 0x14);
              if (piVar16[3] <= (int)uVar14) goto LAB_000e4e98;
              iVar15 = uVar14 * 0x10 + *piVar16;
              piVar16 = (int *)(iVar15 + 8);
              *piVar16 = *piVar16 + 1;
              uVar9 = *(int *)(iVar8 + 0x14) >> 0x1f;
              piVar16 = (int *)(iVar15 + 0xc);
              *piVar16 = *piVar16 + ((*(uint *)(iVar8 + 0x14) ^ uVar9) - uVar9);
            }
            bVar4 = true;
          }
          local_44 = local_44 + 1;
        } while (local_44 != local_4c);
        if (bVar4) {
          uVar9 = *(uint *)(local_40 + 0x14);
          if ((int)uVar9 < 1) {
LAB_000e4c15:
            uVar14 = 0xffffffff;
          }
          else {
            uVar14 = 0;
            piVar16 = (int *)(*(int *)(local_40 + 8) + 0x20);
            if (*(int *)(*(int *)(local_40 + 8) + 0xc) < 1) {
              do {
                uVar14 = uVar14 + 1;
                if (uVar14 == uVar9) goto LAB_000e4c15;
                iVar15 = *piVar16;
                piVar16 = piVar16 + 5;
              } while (iVar15 < 1);
              uVar14 = uVar14 * 0x10000;
            }
            else {
              uVar14 = 0;
            }
          }
          iVar15 = 0;
          uVar11 = 0;
          while (uVar12 = uVar14 >> 0x10, (int)uVar12 < (int)uVar9) {
            while( true ) {
              piVar16 = (int *)(*(int *)(local_40 + 8) + uVar12 * 0x14);
              if (piVar16[3] <= (int)(uVar14 & 0xffff)) goto LAB_000e4cbf;
              piVar16 = (int *)((uVar14 & 0xffff) * 0x10 + *piVar16);
              piVar16[1] = uVar11;
              uVar11 = uVar11 + piVar16[2];
              if (iVar15 < *piVar16) {
                iVar15 = *piVar16;
              }
              uVar9 = *(uint *)(local_40 + 0x14);
              local_44 = uVar14 + 1 >> 0x10;
              uVar14 = uVar14 + 1 & 0xffff;
              if ((int)uVar9 <= (int)local_44) break;
              if (*(int *)(*(int *)(local_40 + 8) + 0xc + local_44 * 0x14) <= (int)uVar14) {
                uVar12 = local_44;
                piVar16 = (int *)(*(int *)(local_40 + 8) + 0xc + (local_44 * 5 + 5) * 4);
                do {
                  uVar12 = uVar12 + 1;
                  if (uVar12 == uVar9) goto LAB_000e4fb0;
                  iVar8 = *piVar16;
                  piVar16 = piVar16 + 5;
                } while (iVar8 < 1);
                uVar14 = 0;
                local_44 = uVar12;
              }
              uVar14 = local_44 << 0x10 | uVar14;
              uVar12 = local_44 & 0xffff;
              if ((int)uVar9 <= (int)uVar12) goto LAB_000e4cbf;
            }
LAB_000e4fb0:
            uVar14 = 0xffffffff;
          }
LAB_000e4cbf:
          uVar9 = 0xffffffff;
          if (uVar11 < 0x1fc00001) {
            uVar9 = uVar11 * 4;
          }
          uStackY_90 = 0xe4cdc;
          local_54 = operator_new__(uVar9);
          *(void **)local_40 = local_54;
          uVar9 = iVar15 * 4 + 0x13U & 0xfffffff0;
          *(uint *)(local_40 + 4) = uVar11;
          iVar15 = -(uVar9 + 0x10);
          *(uint *)(&stack0xffffff7c + iVar15) = uVar9;
          local_50 = (int)&local_50 + iVar15;
          *(undefined4 *)(&stack0xffffff78 + iVar15) = 0;
          *(uint *)(&stack0xffffff74 + iVar15) = local_50;
          *(undefined4 *)((int)&uStackY_90 + iVar15) = 0xe4d18;
          memset(*(void **)(&stack0xffffff74 + iVar15),*(int *)(&stack0xffffff78 + iVar15),
                 *(size_t *)(&stack0xffffff7c + iVar15));
          local_44 = 0;
          do {
            *(uint *)(&stack0xffffff78 + iVar15) = local_44;
            *(CStudioHdr **)(&stack0xffffff74 + iVar15) = local_48;
            *(undefined4 *)((int)&uStackY_90 + iVar15) = 0xe4d32;
            iVar10 = pSeqdesc(*(CStudioHdr **)(&stack0xffffff74 + iVar15),
                              *(int *)(&stack0xffffff78 + iVar15));
            iVar8 = *(int *)(iVar10 + 0x10);
            if (-1 < iVar8) {
              *(int *)(&stack0xffffff74 + iVar15) = iVar8;
              *(undefined4 *)((int)&uStackY_90 + iVar15) = 0xe4d47;
              uVar9 = HashInt(*(int *)(&stack0xffffff74 + iVar15));
              if (local_40[0x1e] == (CActivityToSequenceMapping)0x0) {
                uVar9 = uVar9 % *(uint *)(local_40 + 0x14);
              }
              else {
                uVar9 = uVar9 & *(uint *)(local_40 + 0x20);
              }
              local_58 = *(uint *)(local_40 + 8);
              puVar1 = (undefined4 *)(local_58 + uVar9 * 0x14);
              uVar14 = puVar1[3];
              if ((int)uVar14 < 1) {
                if (uVar14 != 0) goto LAB_000e4f7b;
LAB_000e4da3:
                iVar8 = 0xffff0;
                iVar13 = 0x13ffec;
              }
              else {
                piVar16 = (int *)*puVar1;
                if (iVar8 == *piVar16) {
LAB_000e4f7b:
                  uVar11 = 0;
                }
                else {
                  uVar11 = 0;
                  do {
                    piVar16 = piVar16 + 4;
                    uVar11 = uVar11 + 1;
                    if (uVar11 == uVar14) goto LAB_000e4da3;
                  } while (iVar8 != *piVar16);
                }
                iVar13 = ((uVar9 << 0x10 | uVar11) >> 0x10) * 0x14;
                iVar8 = (uVar11 & 0xffff) << 4;
              }
              iVar8 = iVar8 + *(int *)(local_58 + iVar13);
              iVar13 = *(int *)(local_50 + *(int *)(iVar10 + 0x10) * 4);
              *(undefined2 *)((int)local_54 + (*(int *)(iVar8 + 4) + iVar13) * 4) =
                   (undefined2)local_44;
              uVar3 = (ushort)((int)*(undefined4 *)(iVar10 + 0x14) >> 0x1f);
              *(ushort *)((int)local_54 + (*(int *)(iVar8 + 4) + iVar13) * 4 + 2) =
                   (uVar3 ^ (ushort)*(undefined4 *)(iVar10 + 0x14)) - uVar3;
              iVar13 = iVar13 + *(int *)(iVar8 + 4);
              if (*(short *)((int)local_54 + iVar13 * 4 + 2) == 0) {
                *(undefined2 *)((int)local_54 + iVar13 * 4 + 2) = 1;
              }
              piVar16 = (int *)(local_50 + *(int *)(iVar10 + 0x10) * 4);
              *piVar16 = *piVar16 + 1;
            }
            iVar8 = _DAT_0040b9d4;
            local_44 = local_44 + 1;
          } while (local_44 != local_4c);
          if ((DAT_0040b02c == '\0') || (_DAT_0040b028 != 0)) {
            *(undefined4 *)((int)&uStackY_90 + iVar15) = 0xe4e34;
            iVar10 = ThreadGetCurrentId();
            if (iVar8 == iVar10) {
              *(int **)(&stack0xffffff74 + iVar15) = _DAT_0040b030;
              *(undefined4 *)((int)&uStackY_90 + iVar15) = 0xe4ff5;
              cVar7 = CVProfNode::ExitScope();
              if (cVar7 != '\0') {
                _DAT_0040b030 = (int *)_DAT_0040b030[0x19];
              }
              DAT_0040b02c = _DAT_0040b030 == (int *)0x40b034;
            }
          }
          iVar8 = local_24;
          uVar5 = local_2c;
          puVar17 = &stack0xffffff74 + iVar15;
          if (local_24 != 0) {
            *(undefined4 *)((int)local_7c + iVar15 + 4) = 0;
            uVar6 = local_28;
            *(undefined4 *)((int)local_7c + iVar15) = 0;
            *(undefined4 *)(&stack0xffffff80 + iVar15) = 0;
            *(int *)(&stack0xffffff74 + iVar15) = iVar8;
            *(undefined4 *)(&stack0xffffff78 + iVar15) = uVar5;
            *(undefined4 *)(&stack0xffffff7c + iVar15) = uVar6;
            pcVar2 = *(code **)(iVar8 + 0x54);
            *(undefined4 *)((int)&uStackY_90 + iVar15) = 0xe4e73;
            (*pcVar2)();
            puVar17 = &stack0xffffff74 + iVar15;
          }
          goto LAB_000e49d5;
        }
      }
    }
  }
  iVar15 = _DAT_0040b9d4;
  if ((DAT_0040b02c == '\0') || (_DAT_0040b028 != 0)) {
    uStackY_90 = 0xe4a63;
    iVar8 = ThreadGetCurrentId();
    if (iVar15 == iVar8) {
      uStackY_90 = 0xe4a78;
      cVar7 = CVProfNode::ExitScope();
      if (cVar7 != '\0') {
        _DAT_0040b030 = (int *)_DAT_0040b030[0x19];
      }
      DAT_0040b02c = _DAT_0040b030 == (int *)0x40b034;
    }
  }
  puVar17 = &stack0xffffff74;
  if (local_24 != 0) {
    local_7c[1] = (char *)0x0;
    local_7c[0] = (char *)0x0;
    uStackY_90 = 0xe49d5;
    (**(code **)(local_24 + 0x54))();
    puVar17 = &stack0xffffff74;
  }
LAB_000e49d5:
  if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {
                    /* WARNING: Subroutine does not return */
    *(undefined1 **)(puVar17 + -4) = &LAB_000e502a;
    __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)