L L4D2node

CStudioHdr::CActivityToSequenceMapping::Initialize

0x0059fac0 · 1899 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;
  int iVar9;
  uint uVar10;
  int iVar11;
  uint uVar12;
  uint uVar13;
  int iVar14;
  uint uVar15;
  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 (___atan2f_finite == 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/game/server/../../public/studio.cpp";
    local_7c[1] = (char *)0x0;
    local_7c[0] = (char *)0x0;
    uStackY_90 = 0x59fb58;
    (**(code **)(___atan2f_finite + 0x50))();
    local_24 = ___atan2f_finite;
  }
  iVar9 = _DAT_0105db00;
  local_2c = local_34;
  local_28 = local_30;
  if ((_DAT_0105d154 != 0) || (DAT_0105d158 == '\0')) {
                    /* try { // try from 0059fc06 to 0059fc54 has its CatchHandler @ 005a028b */
    uStackY_90 = 0x59fc0b;
    iVar8 = ThreadGetCurrentId();
    if (iVar9 == iVar8) {
      if ((char *)*_DAT_0105d15c != "CStudioHdr::CActivityToSequenceMapping::Initialize") {
        local_7c[0] = (char *)0x0;
        uStackY_90 = 0x59fc48;
        _DAT_0105d15c =
             (int *)CVProfNode::GetSubNode((char *)_DAT_0105d15c,0xc56944,(char *)0x1,0xbfafa1);
      }
      uStackY_90 = 0x59fc55;
      CVProfNode::EnterScope();
      DAT_0105d158 = '\0';
    }
  }
  *(int *)(local_40 + 0x24) = *(int *)local_48;
  if (*(int *)local_40 == 0) {
    *(int *)(local_40 + 0x28) = *(int *)(local_48 + 4);
                    /* try { // try from 0059fcca to 0059ff66 has its CatchHandler @ 005a026a */
    uStackY_90 = 0x59fccf;
    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 = 0x59fd12;
          iVar9 = pSeqdesc(local_48,local_44);
          if ((*(byte *)(iVar9 + 0xd) & 0x10) == 0) {
            uStackY_90 = 0x5a0182;
            SetActivityForSequence(local_48,local_44);
          }
          iVar8 = *(int *)(iVar9 + 0x10);
          if (-1 < iVar8) {
            local_58 = *(uint *)(iVar9 + 0x14);
            uStackY_90 = 0x59fd37;
            uVar10 = HashInt(iVar8);
            if (local_40[0x1e] == (CActivityToSequenceMapping)0x0) {
              local_50 = *(uint *)(local_40 + 0x14);
              uVar10 = uVar10 % local_50;
            }
            else {
              uVar10 = uVar10 & *(uint *)(local_40 + 0x20);
              local_50 = *(uint *)(local_40 + 0x14);
            }
            local_54 = *(void **)(local_40 + 8);
            puVar1 = (undefined4 *)((int)local_54 + uVar10 * 0x14);
            uVar15 = puVar1[3];
            if ((int)uVar15 < 1) {
              if (uVar15 != 0) goto LAB_005a009e;
LAB_0059fd93:
              uVar15 = 0xffff;
              uVar10 = 0xffff;
              if (0xffff < (int)local_50) goto LAB_0059fdab;
LAB_005a00b8:
                    /* try { // try from 005a00bb to 005a0181 has its CatchHandler @ 005a026a */
              uStackY_90 = 0x5a00c0;
              uVar10 = HashInt(iVar8);
              if (local_40[0x1e] == (CActivityToSequenceMapping)0x0) {
                uVar10 = uVar10 % *(uint *)(local_40 + 0x14);
              }
              else {
                uVar10 = uVar10 & *(uint *)(local_40 + 0x20);
              }
              this_00 = (CUtlVector<CStudioHdr::CActivityToSequenceMapping::HashValueType,CUtlMemory<CStudioHdr::CActivityToSequenceMapping::HashValueType,int>>
                         *)(*(int *)(local_40 + 8) + uVar10 * 0x14);
              iVar9 = *(int *)(this_00 + 0xc);
              if (iVar9 < 1) {
                if (iVar9 == 0) {
LAB_005a0113:
                  uStackY_90 = 0x5a0123;
                  CUtlVector<CStudioHdr::CActivityToSequenceMapping::HashValueType,CUtlMemory<CStudioHdr::CActivityToSequenceMapping::HashValueType,int>>
                  ::GrowVector(this_00,1);
                  uStackY_90 = 0x5a0137;
                  CUtlVector<CStudioHdr::CActivityToSequenceMapping::HashValueType,CUtlMemory<CStudioHdr::CActivityToSequenceMapping::HashValueType,int>>
                  ::ShiftElementsRight(this_00,iVar9,1);
                  piVar16 = (int *)(iVar9 * 0x10 + *(int *)this_00);
                  if (piVar16 != (int *)0x0) {
                    *piVar16 = iVar8;
                    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 (iVar8 != *piVar16) {
                  iVar11 = 0;
                  do {
                    piVar16 = piVar16 + 4;
                    iVar11 = iVar11 + 1;
                    if (iVar11 == iVar9) goto LAB_005a0113;
                  } while (iVar8 != *piVar16);
                }
              }
            }
            else {
              piVar16 = (int *)*puVar1;
              if (iVar8 == *piVar16) {
LAB_005a009e:
                uVar12 = 0;
              }
              else {
                uVar12 = 0;
                do {
                  piVar16 = piVar16 + 4;
                  uVar12 = uVar12 + 1;
                  if (uVar12 == uVar15) goto LAB_0059fd93;
                } while (iVar8 != *piVar16);
              }
              uVar15 = uVar12 & 0xffff;
              uVar10 = (uVar10 << 0x10 | uVar12) >> 0x10;
              if ((int)local_50 <= (int)uVar10) goto LAB_005a00b8;
LAB_0059fdab:
              piVar16 = (int *)((int)local_54 + uVar10 * 0x14);
              if (piVar16[3] <= (int)uVar15) goto LAB_005a00b8;
              iVar8 = uVar15 * 0x10 + *piVar16;
              piVar16 = (int *)(iVar8 + 8);
              *piVar16 = *piVar16 + 1;
              uVar10 = *(int *)(iVar9 + 0x14) >> 0x1f;
              piVar16 = (int *)(iVar8 + 0xc);
              *piVar16 = *piVar16 + ((*(uint *)(iVar9 + 0x14) ^ uVar10) - uVar10);
            }
            bVar4 = true;
          }
          local_44 = local_44 + 1;
        } while (local_44 != local_4c);
        if (bVar4) {
          uVar10 = *(uint *)(local_40 + 0x14);
          if ((int)uVar10 < 1) {
LAB_0059fe2d:
            uVar15 = 0xffffffff;
          }
          else {
            uVar15 = 0;
            piVar16 = (int *)(*(int *)(local_40 + 8) + 0x20);
            if (*(int *)(*(int *)(local_40 + 8) + 0xc) < 1) {
              do {
                uVar15 = uVar15 + 1;
                if (uVar15 == uVar10) goto LAB_0059fe2d;
                iVar9 = *piVar16;
                piVar16 = piVar16 + 5;
              } while (iVar9 < 1);
              uVar15 = uVar15 * 0x10000;
            }
            else {
              uVar15 = 0;
            }
          }
          iVar9 = 0;
          uVar12 = 0;
          while (uVar13 = uVar15 >> 0x10, (int)uVar13 < (int)uVar10) {
            while( true ) {
              piVar16 = (int *)(*(int *)(local_40 + 8) + uVar13 * 0x14);
              if (piVar16[3] <= (int)(uVar15 & 0xffff)) goto LAB_0059fedf;
              piVar16 = (int *)((uVar15 & 0xffff) * 0x10 + *piVar16);
              piVar16[1] = uVar12;
              uVar12 = uVar12 + piVar16[2];
              if (iVar9 < *piVar16) {
                iVar9 = *piVar16;
              }
              uVar10 = *(uint *)(local_40 + 0x14);
              local_44 = uVar15 + 1 >> 0x10;
              uVar15 = uVar15 + 1 & 0xffff;
              if ((int)uVar10 <= (int)local_44) break;
              if (*(int *)(*(int *)(local_40 + 8) + 0xc + local_44 * 0x14) <= (int)uVar15) {
                uVar13 = local_44;
                piVar16 = (int *)(*(int *)(local_40 + 8) + 0xc + (local_44 * 5 + 5) * 4);
                do {
                  uVar13 = uVar13 + 1;
                  if (uVar13 == uVar10) goto LAB_005a01ed;
                  iVar8 = *piVar16;
                  piVar16 = piVar16 + 5;
                } while (iVar8 < 1);
                uVar15 = 0;
                local_44 = uVar13;
              }
              uVar15 = local_44 << 0x10 | uVar15;
              uVar13 = local_44 & 0xffff;
              if ((int)uVar10 <= (int)uVar13) goto LAB_0059fedf;
            }
LAB_005a01ed:
            uVar15 = 0xffffffff;
          }
LAB_0059fedf:
          uVar10 = 0xffffffff;
          if (uVar12 < 0x1fc00001) {
            uVar10 = uVar12 * 4;
          }
          uStackY_90 = 0x59fefc;
          local_54 = operator_new__(uVar10);
          *(void **)local_40 = local_54;
          uVar10 = iVar9 * 4 + 0x13U & 0xfffffff0;
          *(uint *)(local_40 + 4) = uVar12;
          iVar9 = -(uVar10 + 0x10);
          *(uint *)(&stack0xffffff7c + iVar9) = uVar10;
          local_50 = (int)&local_50 + iVar9;
          *(undefined4 *)(&stack0xffffff78 + iVar9) = 0;
          *(uint *)(&stack0xffffff74 + iVar9) = local_50;
          *(undefined4 *)((int)&uStackY_90 + iVar9) = 0x59ff38;
          memset(*(void **)(&stack0xffffff74 + iVar9),*(int *)(&stack0xffffff78 + iVar9),
                 *(size_t *)(&stack0xffffff7c + iVar9));
          local_44 = 0;
          do {
            *(uint *)(&stack0xffffff78 + iVar9) = local_44;
            *(CStudioHdr **)(&stack0xffffff74 + iVar9) = local_48;
            *(undefined4 *)((int)&uStackY_90 + iVar9) = 0x59ff52;
            iVar11 = pSeqdesc(*(CStudioHdr **)(&stack0xffffff74 + iVar9),
                              *(int *)(&stack0xffffff78 + iVar9));
            iVar8 = *(int *)(iVar11 + 0x10);
            if (-1 < iVar8) {
              *(int *)(&stack0xffffff74 + iVar9) = iVar8;
              *(undefined4 *)((int)&uStackY_90 + iVar9) = 0x59ff67;
              uVar10 = HashInt(*(int *)(&stack0xffffff74 + iVar9));
              if (local_40[0x1e] == (CActivityToSequenceMapping)0x0) {
                uVar10 = uVar10 % *(uint *)(local_40 + 0x14);
              }
              else {
                uVar10 = uVar10 & *(uint *)(local_40 + 0x20);
              }
              local_58 = *(uint *)(local_40 + 8);
              puVar1 = (undefined4 *)(local_58 + uVar10 * 0x14);
              uVar15 = puVar1[3];
              if ((int)uVar15 < 1) {
                if (uVar15 != 0) goto LAB_005a01bb;
LAB_0059ffc3:
                iVar8 = 0xffff0;
                iVar14 = 0x13ffec;
              }
              else {
                piVar16 = (int *)*puVar1;
                if (iVar8 == *piVar16) {
LAB_005a01bb:
                  uVar12 = 0;
                }
                else {
                  uVar12 = 0;
                  do {
                    piVar16 = piVar16 + 4;
                    uVar12 = uVar12 + 1;
                    if (uVar12 == uVar15) goto LAB_0059ffc3;
                  } while (iVar8 != *piVar16);
                }
                iVar14 = ((uVar10 << 0x10 | uVar12) >> 0x10) * 0x14;
                iVar8 = (uVar12 & 0xffff) << 4;
              }
              iVar8 = iVar8 + *(int *)(local_58 + iVar14);
              iVar14 = *(int *)(local_50 + *(int *)(iVar11 + 0x10) * 4);
              *(undefined2 *)((int)local_54 + (*(int *)(iVar8 + 4) + iVar14) * 4) =
                   (undefined2)local_44;
              uVar3 = (ushort)((int)*(undefined4 *)(iVar11 + 0x14) >> 0x1f);
              *(ushort *)((int)local_54 + (*(int *)(iVar8 + 4) + iVar14) * 4 + 2) =
                   (uVar3 ^ (ushort)*(undefined4 *)(iVar11 + 0x14)) - uVar3;
              iVar14 = iVar14 + *(int *)(iVar8 + 4);
              if (*(short *)((int)local_54 + iVar14 * 4 + 2) == 0) {
                *(undefined2 *)((int)local_54 + iVar14 * 4 + 2) = 1;
              }
              piVar16 = (int *)(local_50 + *(int *)(iVar11 + 0x10) * 4);
              *piVar16 = *piVar16 + 1;
            }
            iVar8 = _DAT_0105db00;
            local_44 = local_44 + 1;
          } while (local_44 != local_4c);
          if ((DAT_0105d158 == '\0') || (_DAT_0105d154 != 0)) {
            *(undefined4 *)((int)&uStackY_90 + iVar9) = 0x5a0054;
            iVar11 = ThreadGetCurrentId();
            if (iVar8 == iVar11) {
              *(int **)(&stack0xffffff74 + iVar9) = _DAT_0105d15c;
              *(undefined4 *)((int)&uStackY_90 + iVar9) = 0x5a0235;
              cVar7 = CVProfNode::ExitScope();
              if (cVar7 != '\0') {
                _DAT_0105d15c = (int *)_DAT_0105d15c[0x19];
              }
              DAT_0105d158 = _DAT_0105d15c == (int *)0x105d160;
            }
          }
          iVar8 = local_24;
          uVar5 = local_2c;
          puVar17 = &stack0xffffff74 + iVar9;
          if (local_24 != 0) {
            *(undefined4 *)((int)local_7c + iVar9 + 4) = 0;
            uVar6 = local_28;
            *(undefined4 *)((int)local_7c + iVar9) = 0;
            *(undefined4 *)(&stack0xffffff80 + iVar9) = 0;
            *(int *)(&stack0xffffff74 + iVar9) = iVar8;
            *(undefined4 *)(&stack0xffffff78 + iVar9) = uVar5;
            *(undefined4 *)(&stack0xffffff7c + iVar9) = uVar6;
            pcVar2 = *(code **)(iVar8 + 0x54);
            *(undefined4 *)((int)&uStackY_90 + iVar9) = 0x5a0093;
            (*pcVar2)();
            puVar17 = &stack0xffffff74 + iVar9;
          }
          goto LAB_0059fbe5;
        }
      }
    }
  }
  iVar9 = _DAT_0105db00;
  if ((DAT_0105d158 == '\0') || (_DAT_0105d154 != 0)) {
    uStackY_90 = 0x59fc73;
    iVar8 = ThreadGetCurrentId();
    if (iVar9 == iVar8) {
      uStackY_90 = 0x59fc88;
      cVar7 = CVProfNode::ExitScope();
      if (cVar7 != '\0') {
        _DAT_0105d15c = (int *)_DAT_0105d15c[0x19];
      }
      DAT_0105d158 = _DAT_0105d15c == (int *)0x105d160;
    }
  }
  puVar17 = &stack0xffffff74;
  if (local_24 != 0) {
    local_7c[1] = (char *)0x0;
    local_7c[0] = (char *)0x0;
    uStackY_90 = 0x59fbe5;
    (**(code **)(local_24 + 0x54))();
    puVar17 = &stack0xffffff74;
  }
LAB_0059fbe5:
  if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {
                    /* WARNING: Subroutine does not return */
    *(undefined1 **)(puVar17 + -4) = &LAB_005a026a;
    __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)