L L4D2node

CChoreoEvent::RestoreFromBuffer

0x00bab350 · 6023 bytes · __thiscall

_ZN12CChoreoEvent17RestoreFromBufferER10CUtlBufferP12CChoreoSceneP17IChoreoStringPool

Decompiled

undefined (4 params)

/* CChoreoEvent::RestoreFromBuffer(CUtlBuffer&, CChoreoScene*, IChoreoStringPool*) */

undefined4 __thiscall
CChoreoEvent::RestoreFromBuffer
          (CChoreoEvent *this,CUtlBuffer *param_1,CChoreoScene *param_2,IChoreoStringPool *param_3)

{
  IChoreoStringPool IVar1;
  ushort uVar2;
  short sVar3;
  code *pcVar4;
  byte bVar5;
  byte bVar6;
  byte bVar7;
  CChoreoEvent CVar8;
  char cVar9;
  IChoreoStringPool IVar10;
  CChoreoEvent *pCVar11;
  int iVar12;
  byte bVar13;
  int iVar14;
  int iVar15;
  undefined4 *puVar16;
  byte bVar17;
  undefined4 uVar18;
  int in_GS_OFFSET;
  float fVar19;
  CUtlBuffer *pCVar20;
  IChoreoStringPool *pIVar21;
  byte local_b3d;
  int local_b38;
  undefined4 local_b28;
  undefined2 local_b24;
  undefined1 local_b22;
  undefined1 local_b21;
  char local_b20 [256];
  char local_a20 [256];
  IChoreoStringPool local_920 [256];
  char local_820 [2048];
  int local_20;
  
  local_20 = *(int *)(in_GS_OFFSET + 0x14);
  if (((byte)param_1[0x15] & 1) == 0) {
    cVar9 = CUtlBuffer::CheckGet(param_1,1);
    if (cVar9 != '\0') {
      CVar8 = *(CChoreoEvent *)
               (*(int *)param_1 + (*(int *)(param_1 + 0xc) - *(int *)(param_1 + 0x20)));
      *(int *)(param_1 + 0xc) = *(int *)(param_1 + 0xc) + 1;
      goto LAB_00bab3a8;
    }
    this[4] = (CChoreoEvent)0x0;
LAB_00bac122:
    this[0x178] = (CChoreoEvent)((byte)this[0x178] & 0xfe);
  }
  else {
    local_b24 = local_b24 & 0xff00;
    CUtlBuffer::Scanf(param_1,"%c",&local_b24);
    CVar8 = local_b24._0_1_;
LAB_00bab3a8:
    this[4] = CVar8;
    if ((CVar8 != (CChoreoEvent)0xb) && (CVar8 != (CChoreoEvent)0x5)) goto LAB_00bac122;
    this[0x178] = (CChoreoEvent)((byte)this[0x178] | 1);
  }
  pcVar4 = *(code **)(*(int *)param_3 + 4);
  if (((byte)param_1[0x15] & 1) == 0) {
    cVar9 = CUtlBuffer::CheckGet(param_1,2);
    iVar14 = 0;
    if (cVar9 != '\0') {
      if (((byte)param_1[0x34] & 1) == 0) {
        iVar15 = *(int *)(param_1 + 0xc);
        sVar3 = *(short *)(*(int *)param_1 + (iVar15 - *(int *)(param_1 + 0x20)));
      }
      else {
        puVar16 = (undefined4 *)
                  ((*(int *)(param_1 + 0xc) - *(int *)(param_1 + 0x20)) + *(int *)param_1);
        if (puVar16 == (undefined4 *)0x0) {
          puVar16 = &local_b28;
        }
        local_b24 = (ushort)local_b28;
        local_b24._1_1_ = (undefined1)((uint)local_b28 >> 8);
        local_b24 = CONCAT11(local_b24._1_1_,*(undefined1 *)((int)puVar16 + 1));
        local_b24 = CONCAT11(*(undefined1 *)puVar16,*(undefined1 *)((int)puVar16 + 1));
        _V_memcpy(&local_b28,&local_b24,2);
        iVar15 = *(int *)(param_1 + 0xc);
        sVar3 = (ushort)local_b28;
      }
      iVar14 = (int)sVar3;
      *(int *)(param_1 + 0xc) = iVar15 + 2;
    }
  }
  else {
    local_b28 = (float)((uint)local_b28 & 0xffff0000);
    CUtlBuffer::Scanf(param_1,"%d",&local_b28);
    iVar14 = (int)(short)(ushort)local_b28;
  }
  (*pcVar4)(param_3,iVar14,local_b20,0x100);
  CUtlString::operator=((CUtlString *)(this + 8),local_b20);
  if (((byte)param_1[0x15] & 1) == 0) {
    cVar9 = CUtlBuffer::CheckGet(param_1,4);
    fVar19 = 0.0;
    if (cVar9 != '\0') {
      iVar14 = *(int *)(param_1 + 0xc);
      fVar19 = *(float *)(*(int *)param_1 + (iVar14 - *(int *)(param_1 + 0x20)));
      local_b28 = fVar19;
      if (((byte)param_1[0x34] & 1) != 0) {
        local_b28._3_1_ = (undefined1)((uint)fVar19 >> 0x18);
        local_b28._2_1_ = (undefined1)((uint)fVar19 >> 0x10);
        local_b24 = CONCAT11(local_b28._2_1_,local_b28._3_1_);
        local_b28._1_1_ = (undefined1)((uint)fVar19 >> 8);
        local_b22 = local_b28._1_1_;
        local_b28._0_1_ = SUB41(fVar19,0);
        local_b21 = (undefined1)local_b28;
        _V_memcpy(&local_b28,&local_b24,4);
        iVar14 = *(int *)(param_1 + 0xc);
      }
      *(int *)(param_1 + 0xc) = iVar14 + 4;
      fVar19 = local_b28;
    }
  }
  else {
    local_b28 = 0.0;
    CUtlBuffer::Scanf(param_1,"%f",&local_b28);
    fVar19 = local_b28;
  }
  *(float *)(this + 0x48) = fVar19;
  if ((*(float *)(this + 0x4c) == -1.0) || (fVar19 <= *(float *)(this + 0x4c))) {
    if (((byte)param_1[0x15] & 1) == 0) goto LAB_00bab927;
LAB_00bab49d:
    local_b28 = 0.0;
    CUtlBuffer::Scanf(param_1,"%f",&local_b28);
    fVar19 = local_b28;
  }
  else {
    *(float *)(this + 0x4c) = fVar19;
    if (((byte)param_1[0x15] & 1) != 0) goto LAB_00bab49d;
LAB_00bab927:
    cVar9 = CUtlBuffer::CheckGet(param_1,4);
    fVar19 = 0.0;
    if (cVar9 != '\0') {
      iVar14 = *(int *)(param_1 + 0xc);
      fVar19 = *(float *)(*(int *)param_1 + (iVar14 - *(int *)(param_1 + 0x20)));
      local_b28 = fVar19;
      if (((byte)param_1[0x34] & 1) != 0) {
        local_b28._3_1_ = (undefined1)((uint)fVar19 >> 0x18);
        local_b28._2_1_ = (undefined1)((uint)fVar19 >> 0x10);
        local_b24 = CONCAT11(local_b28._2_1_,local_b28._3_1_);
        local_b28._1_1_ = (undefined1)((uint)fVar19 >> 8);
        local_b22 = local_b28._1_1_;
        local_b28._0_1_ = SUB41(fVar19,0);
        local_b21 = (undefined1)local_b28;
        _V_memcpy(&local_b28,&local_b24,4);
        iVar14 = *(int *)(param_1 + 0xc);
      }
      *(int *)(param_1 + 0xc) = iVar14 + 4;
      fVar19 = local_b28;
    }
  }
  SetEndTime(this,fVar19);
  pcVar4 = *(code **)(*(int *)param_3 + 4);
  if (((byte)param_1[0x15] & 1) == 0) {
    cVar9 = CUtlBuffer::CheckGet(param_1,2);
    iVar14 = 0;
    if (cVar9 != '\0') {
      if (((byte)param_1[0x34] & 1) == 0) {
        iVar15 = *(int *)(param_1 + 0xc);
        sVar3 = *(short *)(*(int *)param_1 + (iVar15 - *(int *)(param_1 + 0x20)));
      }
      else {
        puVar16 = (undefined4 *)
                  ((*(int *)(param_1 + 0xc) - *(int *)(param_1 + 0x20)) + *(int *)param_1);
        if (puVar16 == (undefined4 *)0x0) {
          puVar16 = &local_b28;
        }
        local_b24 = (ushort)local_b28;
        local_b24._1_1_ = (undefined1)((uint)local_b28 >> 8);
        local_b24 = CONCAT11(local_b24._1_1_,*(undefined1 *)((int)puVar16 + 1));
        local_b24 = CONCAT11(*(undefined1 *)puVar16,*(undefined1 *)((int)puVar16 + 1));
        _V_memcpy(&local_b28,&local_b24,2);
        iVar15 = *(int *)(param_1 + 0xc);
        sVar3 = (ushort)local_b28;
      }
      iVar14 = (int)sVar3;
      *(int *)(param_1 + 0xc) = iVar15 + 2;
    }
  }
  else {
    local_b28 = (float)((uint)local_b28 & 0xffff0000);
    CUtlBuffer::Scanf(param_1,"%d",&local_b28);
    iVar14 = (int)(short)(ushort)local_b28;
  }
  (*pcVar4)(param_3,iVar14,local_820,0x800);
  CUtlString::operator=((CUtlString *)(this + 0x18),local_820);
  pcVar4 = *(code **)(*(int *)param_3 + 4);
  if (((byte)param_1[0x15] & 1) == 0) {
    cVar9 = CUtlBuffer::CheckGet(param_1,2);
    iVar14 = 0;
    if (cVar9 != '\0') {
      if (((byte)param_1[0x34] & 1) == 0) {
        iVar15 = *(int *)(param_1 + 0xc);
        sVar3 = *(short *)(*(int *)param_1 + (iVar15 - *(int *)(param_1 + 0x20)));
      }
      else {
        puVar16 = (undefined4 *)
                  ((*(int *)(param_1 + 0xc) - *(int *)(param_1 + 0x20)) + *(int *)param_1);
        if (puVar16 == (undefined4 *)0x0) {
          puVar16 = &local_b28;
        }
        local_b24 = (ushort)local_b28;
        local_b24._1_1_ = (undefined1)((uint)local_b28 >> 8);
        local_b24 = CONCAT11(local_b24._1_1_,*(undefined1 *)((int)puVar16 + 1));
        local_b24 = CONCAT11(*(undefined1 *)puVar16,*(undefined1 *)((int)puVar16 + 1));
        _V_memcpy(&local_b28,&local_b24,2);
        iVar15 = *(int *)(param_1 + 0xc);
        sVar3 = (ushort)local_b28;
      }
      iVar14 = (int)sVar3;
      *(int *)(param_1 + 0xc) = iVar15 + 2;
    }
  }
  else {
    local_b28 = (float)((uint)local_b28 & 0xffff0000);
    CUtlBuffer::Scanf(param_1,"%d",&local_b28);
    iVar14 = (int)(short)(ushort)local_b28;
  }
  (*pcVar4)(param_3,iVar14,local_820,0x800);
  SetParameters2(this,local_820);
  pcVar4 = *(code **)(*(int *)param_3 + 4);
  if (((byte)param_1[0x15] & 1) == 0) {
    cVar9 = CUtlBuffer::CheckGet(param_1,2);
    iVar14 = 0;
    if (cVar9 != '\0') {
      if (((byte)param_1[0x34] & 1) == 0) {
        iVar15 = *(int *)(param_1 + 0xc);
        sVar3 = *(short *)(*(int *)param_1 + (iVar15 - *(int *)(param_1 + 0x20)));
      }
      else {
        puVar16 = (undefined4 *)
                  ((*(int *)(param_1 + 0xc) - *(int *)(param_1 + 0x20)) + *(int *)param_1);
        if (puVar16 == (undefined4 *)0x0) {
          puVar16 = &local_b28;
        }
        local_b24 = (ushort)local_b28;
        local_b24._1_1_ = (undefined1)((uint)local_b28 >> 8);
        local_b24 = CONCAT11(local_b24._1_1_,*(undefined1 *)((int)puVar16 + 1));
        local_b24 = CONCAT11(*(undefined1 *)puVar16,*(undefined1 *)((int)puVar16 + 1));
        _V_memcpy(&local_b28,&local_b24,2);
        iVar15 = *(int *)(param_1 + 0xc);
        sVar3 = (ushort)local_b28;
      }
      iVar14 = (int)sVar3;
      *(int *)(param_1 + 0xc) = iVar15 + 2;
    }
  }
  else {
    local_b28 = (float)((uint)local_b28 & 0xffff0000);
    CUtlBuffer::Scanf(param_1,"%d",&local_b28);
    iVar14 = (int)(short)(ushort)local_b28;
  }
  (*pcVar4)(param_3,iVar14,local_820,0x800);
  SetParameters3(this,local_820);
  pCVar11 = this + 0x5c;
  pCVar20 = param_1;
  pIVar21 = param_3;
  cVar9 = CCurveData::RestoreFromBuffer((CUtlBuffer *)pCVar11,(IChoreoStringPool *)param_1);
  if (cVar9 != '\0') {
    if (((byte)param_1[0x15] & 1) == 0) {
      cVar9 = CUtlBuffer::CheckGet(param_1,1);
      if (cVar9 != '\0') {
        IVar10 = *(IChoreoStringPool *)
                  (*(int *)param_1 + (*(int *)(param_1 + 0xc) - *(int *)(param_1 + 0x20)));
        *(int *)(param_1 + 0xc) = *(int *)(param_1 + 0xc) + 1;
        goto LAB_00bab69a;
      }
      bVar6 = 0;
      bVar13 = 0;
      bVar7 = 0;
      bVar5 = 0;
      local_b3d = 0;
      bVar17 = 0;
    }
    else {
      local_b24 = local_b24 & 0xff00;
      CUtlBuffer::Scanf(param_1,"%u",&local_b24);
      IVar10 = (IChoreoStringPool)local_b24._0_1_;
LAB_00bab69a:
      local_b3d = (byte)IVar10 & 1;
      bVar13 = (byte)IVar10 >> 1 & 1;
      bVar17 = (byte)IVar10 >> 2 & 1;
      bVar5 = (byte)IVar10 >> 3 & 1;
      bVar6 = (byte)IVar10 >> 5 & 1;
      bVar7 = (byte)IVar10 >> 4 & 1;
    }
    this[0x178] = (CChoreoEvent)
                  ((byte)this[0x178] & 0xdc | local_b3d * '\x02' | bVar13 << 5 | bVar17);
    this[0x179] = (CChoreoEvent)((byte)this[0x179] & 0x97 | bVar5 << 5 | bVar7 << 3 | bVar6 << 6);
    if (((byte)param_1[0x15] & 1) == 0) {
      cVar9 = CUtlBuffer::CheckGet(param_1,4);
      fVar19 = 0.0;
      if (cVar9 != '\0') {
        iVar14 = *(int *)(param_1 + 0xc);
        fVar19 = *(float *)(*(int *)param_1 + (iVar14 - *(int *)(param_1 + 0x20)));
        local_b28 = fVar19;
        if (((byte)param_1[0x34] & 1) != 0) {
          local_b28._3_1_ = (undefined1)((uint)fVar19 >> 0x18);
          local_b28._2_1_ = (undefined1)((uint)fVar19 >> 0x10);
          local_b24 = CONCAT11(local_b28._2_1_,local_b28._3_1_);
          local_b28._1_1_ = (undefined1)((uint)fVar19 >> 8);
          local_b22 = local_b28._1_1_;
          local_b28._0_1_ = SUB41(fVar19,0);
          local_b21 = (undefined1)local_b28;
          _V_memcpy(&local_b28,&local_b24,4);
          iVar14 = *(int *)(param_1 + 0xc);
        }
        *(int *)(param_1 + 0xc) = iVar14 + 4;
        fVar19 = local_b28;
      }
    }
    else {
      local_b28 = 0.0;
      CUtlBuffer::Scanf(param_1,"%f",&local_b28);
      fVar19 = local_b28;
    }
    *(float *)(this + 0x134) = fVar19;
    if (((byte)param_1[0x15] & 1) == 0) {
      cVar9 = CUtlBuffer::CheckGet(param_1,1);
      if (cVar9 != '\0') {
        IVar10 = *(IChoreoStringPool *)
                  (*(int *)param_1 + (*(int *)(param_1 + 0xc) - *(int *)(param_1 + 0x20)));
        *(int *)(param_1 + 0xc) = *(int *)(param_1 + 0xc) + 1;
        goto LAB_00bab7c9;
      }
    }
    else {
      local_b24 = local_b24 & 0xff00;
      CUtlBuffer::Scanf(param_1,"%u",&local_b24);
      IVar10 = (IChoreoStringPool)local_b24._0_1_;
LAB_00bab7c9:
      if (IVar10 != (IChoreoStringPool)0x0) {
        iVar14 = 1;
        do {
          pcVar4 = *(code **)(*(int *)param_3 + 4);
          if (((byte)param_1[0x15] & 1) == 0) {
            cVar9 = CUtlBuffer::CheckGet(param_1,2);
            iVar15 = 0;
            if (cVar9 != '\0') {
              if (((byte)param_1[0x34] & 1) == 0) {
                iVar12 = *(int *)(param_1 + 0xc);
                sVar3 = *(short *)(*(int *)param_1 + (iVar12 - *(int *)(param_1 + 0x20)));
              }
              else {
                puVar16 = (undefined4 *)
                          ((*(int *)(param_1 + 0xc) - *(int *)(param_1 + 0x20)) + *(int *)param_1);
                if (puVar16 == (undefined4 *)0x0) {
                  puVar16 = &local_b28;
                }
                local_b24 = (ushort)local_b28;
                local_b24._1_1_ = (undefined1)((uint)local_b28 >> 8);
                local_b24 = CONCAT11(local_b24._1_1_,*(undefined1 *)((int)puVar16 + 1));
                local_b24 = CONCAT11(*(undefined1 *)puVar16,*(undefined1 *)((int)puVar16 + 1));
                _V_memcpy(&local_b28,&local_b24,2);
                iVar12 = *(int *)(param_1 + 0xc);
                sVar3 = (ushort)local_b28;
              }
              iVar15 = (int)sVar3;
              *(int *)(param_1 + 0xc) = iVar12 + 2;
            }
          }
          else {
            local_b28 = (float)((uint)local_b28 & 0xffff0000);
            CUtlBuffer::Scanf(param_1,"%d",&local_b28);
            iVar15 = (int)(short)(ushort)local_b28;
          }
          (*pcVar4)(param_3,iVar15,local_920,0x100);
          if (((byte)param_1[0x15] & 1) == 0) {
            cVar9 = CUtlBuffer::CheckGet(param_1,1);
            fVar19 = 0.0;
            if (cVar9 != '\0') {
              IVar1 = *(IChoreoStringPool *)
                       (*(int *)param_1 + (*(int *)(param_1 + 0xc) - *(int *)(param_1 + 0x20)));
              *(int *)(param_1 + 0xc) = *(int *)(param_1 + 0xc) + 1;
              goto LAB_00bab875;
            }
          }
          else {
            local_b24 = local_b24 & 0xff00;
            CUtlBuffer::Scanf(param_1,"%u",&local_b24);
            IVar1 = (IChoreoStringPool)local_b24._0_1_;
LAB_00bab875:
            fVar19 = ((float)(byte)IVar1 + 0.0) * 0.003921569;
          }
          iVar14 = iVar14 + 1;
          AddRelativeTag(this,(char *)local_920,fVar19);
        } while (iVar14 != (byte)IVar10 + 1);
      }
    }
    if (((byte)param_1[0x15] & 1) == 0) {
      cVar9 = CUtlBuffer::CheckGet(param_1,1);
      if (cVar9 != '\0') {
        IVar10 = *(IChoreoStringPool *)
                  (*(int *)param_1 + (*(int *)(param_1 + 0xc) - *(int *)(param_1 + 0x20)));
        *(int *)(param_1 + 0xc) = *(int *)(param_1 + 0xc) + 1;
        goto LAB_00baba3a;
      }
    }
    else {
      local_b24 = local_b24 & 0xff00;
      CUtlBuffer::Scanf(param_1,"%u",&local_b24);
      IVar10 = (IChoreoStringPool)local_b24._0_1_;
LAB_00baba3a:
      if (IVar10 != (IChoreoStringPool)0x0) {
        iVar14 = 1;
        do {
          pcVar4 = *(code **)(*(int *)param_3 + 4);
          if (((byte)param_1[0x15] & 1) == 0) {
            cVar9 = CUtlBuffer::CheckGet(param_1,2);
            iVar15 = 0;
            if (cVar9 != '\0') {
              if (((byte)param_1[0x34] & 1) == 0) {
                iVar12 = *(int *)(param_1 + 0xc);
                sVar3 = *(short *)(*(int *)param_1 + (iVar12 - *(int *)(param_1 + 0x20)));
              }
              else {
                puVar16 = (undefined4 *)
                          ((*(int *)(param_1 + 0xc) - *(int *)(param_1 + 0x20)) + *(int *)param_1);
                if (puVar16 == (undefined4 *)0x0) {
                  puVar16 = &local_b28;
                }
                local_b24 = (ushort)local_b28;
                local_b24._1_1_ = (undefined1)((uint)local_b28 >> 8);
                local_b24 = CONCAT11(local_b24._1_1_,*(undefined1 *)((int)puVar16 + 1));
                local_b24 = CONCAT11(*(undefined1 *)puVar16,*(undefined1 *)((int)puVar16 + 1));
                _V_memcpy(&local_b28,&local_b24,2);
                iVar12 = *(int *)(param_1 + 0xc);
                sVar3 = (ushort)local_b28;
              }
              iVar15 = (int)sVar3;
              *(int *)(param_1 + 0xc) = iVar12 + 2;
            }
          }
          else {
            local_b28 = (float)((uint)local_b28 & 0xffff0000);
            CUtlBuffer::Scanf(param_1,"%d",&local_b28);
            iVar15 = (int)(short)(ushort)local_b28;
          }
          (*pcVar4)(param_3,iVar15,local_920,0x100);
          if (((byte)param_1[0x15] & 1) == 0) {
            cVar9 = CUtlBuffer::CheckGet(param_1,1);
            fVar19 = 0.0;
            if (cVar9 != '\0') {
              IVar1 = *(IChoreoStringPool *)
                       (*(int *)param_1 + (*(int *)(param_1 + 0xc) - *(int *)(param_1 + 0x20)));
              *(int *)(param_1 + 0xc) = *(int *)(param_1 + 0xc) + 1;
              goto LAB_00babae5;
            }
          }
          else {
            local_b24 = local_b24 & 0xff00;
            CUtlBuffer::Scanf(param_1,"%u",&local_b24);
            IVar1 = (IChoreoStringPool)local_b24._0_1_;
LAB_00babae5:
            fVar19 = ((float)(byte)IVar1 + 0.0) * 0.003921569;
          }
          iVar14 = iVar14 + 1;
          AddTimingTag(this,(char *)local_920,fVar19,false);
        } while (iVar14 != (byte)IVar10 + 1);
      }
    }
    local_b38 = 0;
    do {
      if (((byte)param_1[0x15] & 1) == 0) {
        cVar9 = CUtlBuffer::CheckGet(param_1,1);
        if (cVar9 != '\0') {
          IVar10 = *(IChoreoStringPool *)
                    (*(int *)param_1 + (*(int *)(param_1 + 0xc) - *(int *)(param_1 + 0x20)));
          *(int *)(param_1 + 0xc) = *(int *)(param_1 + 0xc) + 1;
          goto LAB_00babc84;
        }
      }
      else {
        local_b24 = local_b24 & 0xff00;
        CUtlBuffer::Scanf(param_1,"%u",&local_b24);
        IVar10 = (IChoreoStringPool)local_b24._0_1_;
LAB_00babc84:
        if (IVar10 != (IChoreoStringPool)0x0) {
          iVar14 = 1;
          do {
            pcVar4 = *(code **)(*(int *)param_3 + 4);
            if (((byte)param_1[0x15] & 1) == 0) {
              cVar9 = CUtlBuffer::CheckGet(param_1,2);
              iVar15 = 0;
              if (cVar9 != '\0') {
                if (((byte)param_1[0x34] & 1) == 0) {
                  iVar12 = *(int *)(param_1 + 0xc);
                  sVar3 = *(short *)(*(int *)param_1 + (iVar12 - *(int *)(param_1 + 0x20)));
                }
                else {
                  puVar16 = (undefined4 *)
                            ((*(int *)(param_1 + 0xc) - *(int *)(param_1 + 0x20)) + *(int *)param_1)
                  ;
                  if (puVar16 == (undefined4 *)0x0) {
                    puVar16 = &local_b28;
                  }
                  local_b24 = (ushort)local_b28;
                  local_b24._1_1_ = (undefined1)((uint)local_b28 >> 8);
                  local_b24 = CONCAT11(local_b24._1_1_,*(undefined1 *)((int)puVar16 + 1));
                  local_b24 = CONCAT11(*(undefined1 *)puVar16,*(undefined1 *)((int)puVar16 + 1));
                  _V_memcpy(&local_b28,&local_b24,2);
                  iVar12 = *(int *)(param_1 + 0xc);
                  sVar3 = (ushort)local_b28;
                }
                iVar15 = (int)sVar3;
                *(int *)(param_1 + 0xc) = iVar12 + 2;
              }
            }
            else {
              local_b28 = (float)((uint)local_b28 & 0xffff0000);
              CUtlBuffer::Scanf(param_1,"%d",&local_b28);
              iVar15 = (int)(short)(ushort)local_b28;
            }
            (*pcVar4)(param_3,iVar15,local_920,0x100);
            if (((byte)param_1[0x15] & 1) == 0) {
              cVar9 = CUtlBuffer::CheckGet(param_1,2);
              fVar19 = 0.0;
              if (cVar9 != '\0') {
                if (((byte)param_1[0x34] & 1) == 0) {
                  iVar15 = *(int *)(param_1 + 0xc);
                  uVar2 = *(ushort *)(*(int *)param_1 + (iVar15 - *(int *)(param_1 + 0x20)));
                }
                else {
                  puVar16 = (undefined4 *)
                            ((*(int *)(param_1 + 0xc) - *(int *)(param_1 + 0x20)) + *(int *)param_1)
                  ;
                  if (puVar16 == (undefined4 *)0x0) {
                    puVar16 = &local_b28;
                  }
                  local_b24 = (ushort)local_b28;
                  local_b24._1_1_ = (undefined1)((uint)local_b28 >> 8);
                  local_b24 = CONCAT11(local_b24._1_1_,*(undefined1 *)((int)puVar16 + 1));
                  local_b24 = CONCAT11(*(undefined1 *)puVar16,*(undefined1 *)((int)puVar16 + 1));
                  _V_memcpy(&local_b28,&local_b24,2);
                  iVar15 = *(int *)(param_1 + 0xc);
                  uVar2 = (ushort)local_b28;
                }
                *(int *)(param_1 + 0xc) = iVar15 + 2;
                goto LAB_00babd1f;
              }
            }
            else {
              local_b28 = (float)((uint)local_b28 & 0xffff0000);
              CUtlBuffer::Scanf(param_1,"%u",&local_b28);
              uVar2 = (ushort)local_b28;
LAB_00babd1f:
              fVar19 = ((float)uVar2 + 0.0) * 0.00024414063;
            }
            iVar14 = iVar14 + 1;
            AddAbsoluteTag(this,local_b38,local_920,fVar19);
          } while (iVar14 != (byte)IVar10 + 1);
        }
      }
      local_b38 = local_b38 + 1;
    } while (local_b38 != 2);
    if (this[4] == (CChoreoEvent)0x6) {
      if (((byte)param_1[0x15] & 1) == 0) {
        cVar9 = CUtlBuffer::CheckGet(param_1,4);
        if (cVar9 != '\0') {
          iVar14 = *(int *)(param_1 + 0xc);
          fVar19 = *(float *)(*(int *)param_1 + (iVar14 - *(int *)(param_1 + 0x20)));
          local_b28 = fVar19;
          if (((byte)param_1[0x34] & 1) != 0) {
            local_b28._3_1_ = (undefined1)((uint)fVar19 >> 0x18);
            local_b28._2_1_ = (undefined1)((uint)fVar19 >> 0x10);
            local_b24 = CONCAT11(local_b28._2_1_,local_b28._3_1_);
            local_b28._1_1_ = (undefined1)((uint)fVar19 >> 8);
            local_b22 = local_b28._1_1_;
            local_b28._0_1_ = SUB41(fVar19,0);
            local_b21 = (undefined1)local_b28;
            _V_memcpy(&local_b28,&local_b24,4);
            iVar14 = *(int *)(param_1 + 0xc);
          }
          *(int *)(param_1 + 0xc) = iVar14 + 4;
          goto LAB_00bac6c5;
        }
        fVar19 = 0.0;
      }
      else {
        local_b28 = 0.0;
        CUtlBuffer::Scanf(param_1,"%f",&local_b28);
LAB_00bac6c5:
        fVar19 = local_b28;
        if (local_b28 == -1.0) goto LAB_00babe4c;
      }
      *(float *)(this + 0x50) = fVar19;
    }
LAB_00babe4c:
    if (((byte)param_1[0x15] & 1) == 0) {
      cVar9 = CUtlBuffer::CheckGet(param_1,1);
      if (cVar9 != '\0') {
        IVar10 = *(IChoreoStringPool *)
                  (*(int *)param_1 + (*(int *)(param_1 + 0xc) - *(int *)(param_1 + 0x20)));
        *(int *)(param_1 + 0xc) = *(int *)(param_1 + 0xc) + 1;
        goto LAB_00babe7e;
      }
    }
    else {
      local_b24 = local_b24 & 0xff00;
      CUtlBuffer::Scanf(param_1,"%c",&local_b24);
      IVar10 = (IChoreoStringPool)local_b24._0_1_;
LAB_00babe7e:
      if (IVar10 == (IChoreoStringPool)0x1) {
        pcVar4 = *(code **)(*(int *)param_3 + 4);
        if (((byte)param_1[0x15] & 1) == 0) {
          cVar9 = CUtlBuffer::CheckGet(param_1,2);
          iVar14 = 0;
          if (cVar9 != '\0') {
            if (((byte)param_1[0x34] & 1) == 0) {
              iVar15 = *(int *)(param_1 + 0xc);
              sVar3 = *(short *)(*(int *)param_1 + (iVar15 - *(int *)(param_1 + 0x20)));
            }
            else {
              puVar16 = (undefined4 *)
                        ((*(int *)(param_1 + 0xc) - *(int *)(param_1 + 0x20)) + *(int *)param_1);
              if (puVar16 == (undefined4 *)0x0) {
                puVar16 = &local_b28;
              }
              local_b24 = (ushort)local_b28;
              local_b24._1_1_ = (undefined1)((uint)local_b28 >> 8);
              local_b24 = CONCAT11(local_b24._1_1_,*(undefined1 *)((int)puVar16 + 1));
              local_b24 = CONCAT11(*(undefined1 *)puVar16,*(undefined1 *)((int)puVar16 + 1));
              _V_memcpy(&local_b28,&local_b24,2);
              iVar15 = *(int *)(param_1 + 0xc);
              sVar3 = (ushort)local_b28;
            }
            iVar14 = (int)sVar3;
            *(int *)(param_1 + 0xc) = iVar15 + 2;
          }
        }
        else {
          local_b28 = (float)((uint)local_b28 & 0xffff0000);
          CUtlBuffer::Scanf(param_1,"%d",&local_b28);
          iVar14 = (int)(short)(ushort)local_b28;
        }
        (*pcVar4)(param_3,iVar14,local_a20,0x100);
        pcVar4 = *(code **)(*(int *)param_3 + 4);
        if (((byte)param_1[0x15] & 1) == 0) {
          cVar9 = CUtlBuffer::CheckGet(param_1,2);
          iVar14 = 0;
          if (cVar9 != '\0') {
            if (((byte)param_1[0x34] & 1) == 0) {
              iVar15 = *(int *)(param_1 + 0xc);
              sVar3 = *(short *)(*(int *)param_1 + (iVar15 - *(int *)(param_1 + 0x20)));
            }
            else {
              puVar16 = (undefined4 *)
                        ((*(int *)(param_1 + 0xc) - *(int *)(param_1 + 0x20)) + *(int *)param_1);
              if (puVar16 == (undefined4 *)0x0) {
                puVar16 = &local_b28;
              }
              local_b24 = (ushort)local_b28;
              local_b24._1_1_ = (undefined1)((uint)local_b28 >> 8);
              local_b24 = CONCAT11(local_b24._1_1_,*(undefined1 *)((int)puVar16 + 1));
              local_b24 = CONCAT11(*(undefined1 *)puVar16,*(undefined1 *)((int)puVar16 + 1));
              _V_memcpy(&local_b28,&local_b24,2);
              iVar15 = *(int *)(param_1 + 0xc);
              sVar3 = (ushort)local_b28;
            }
            iVar14 = (int)sVar3;
            *(int *)(param_1 + 0xc) = iVar15 + 2;
          }
        }
        else {
          local_b28 = (float)((uint)local_b28 & 0xffff0000);
          CUtlBuffer::Scanf(param_1,"%d",&local_b28);
          iVar14 = (int)(short)(ushort)local_b28;
        }
        (*pcVar4)(param_3,iVar14,local_920,0x100);
        SetUsingRelativeTag(this,true,local_a20,(char *)local_920);
      }
    }
    pCVar11 = this;
    pCVar20 = param_1;
    pIVar21 = param_3;
    uVar18 = RestoreFlexAnimationsFromBuffer(this,param_1,param_3);
    if ((char)uVar18 != '\0') {
      CVar8 = this[4];
      if (CVar8 == (CChoreoEvent)0xc) {
        if (((byte)param_1[0x15] & 1) == 0) {
          pCVar20 = (CUtlBuffer *)0x1;
          pCVar11 = (CChoreoEvent *)param_1;
          cVar9 = CUtlBuffer::CheckGet(param_1,1);
          iVar14 = 0;
          if (cVar9 != '\0') {
            iVar14 = (int)*(char *)(*(int *)param_1 +
                                   (*(int *)(param_1 + 0xc) - *(int *)(param_1 + 0x20)));
            *(int *)(param_1 + 0xc) = *(int *)(param_1 + 0xc) + 1;
            if (iVar14 < 0) {
              iVar14 = -1;
            }
          }
        }
        else {
          pIVar21 = (IChoreoStringPool *)&local_b24;
          pCVar20 = (CUtlBuffer *)0xd54391;
          local_b24 = local_b24 & 0xff00;
          pCVar11 = (CChoreoEvent *)param_1;
          CUtlBuffer::Scanf(param_1,"%c",pIVar21);
          iVar14 = (int)(char)local_b24._0_1_;
          if (iVar14 < 0) {
            iVar14 = -1;
          }
        }
        *(int *)(this + 0x54) = iVar14;
        CVar8 = this[4];
      }
      if (CVar8 == (CChoreoEvent)0x5) {
        CVar8 = (CChoreoEvent)((byte)param_1[0x15] & 1);
        if (((byte)param_1[0x15] & 1) == 0) {
          cVar9 = CUtlBuffer::CheckGet(param_1,1);
          if (cVar9 != '\0') {
            CVar8 = *(CChoreoEvent *)
                     (*(int *)param_1 + (*(int *)(param_1 + 0xc) - *(int *)(param_1 + 0x20)));
            *(int *)(param_1 + 0xc) = *(int *)(param_1 + 0xc) + 1;
          }
        }
        else {
          local_b24 = local_b24 & 0xff00;
          CUtlBuffer::Scanf(param_1,"%c",&local_b24);
          CVar8 = local_b24._0_1_;
        }
        this[5] = CVar8;
        pcVar4 = *(code **)(*(int *)param_3 + 4);
        if (((byte)param_1[0x15] & 1) == 0) {
          cVar9 = CUtlBuffer::CheckGet(param_1,2);
          iVar14 = 0;
          if (cVar9 != '\0') {
            if (((byte)param_1[0x34] & 1) == 0) {
              iVar15 = *(int *)(param_1 + 0xc);
              sVar3 = *(short *)(*(int *)param_1 + (iVar15 - *(int *)(param_1 + 0x20)));
            }
            else {
              puVar16 = (undefined4 *)
                        ((*(int *)(param_1 + 0xc) - *(int *)(param_1 + 0x20)) + *(int *)param_1);
              if (puVar16 == (undefined4 *)0x0) {
                puVar16 = &local_b28;
              }
              local_b24 = (ushort)local_b28;
              local_b24._1_1_ = (undefined1)((uint)local_b28 >> 8);
              local_b24 = CONCAT11(local_b24._1_1_,*(undefined1 *)((int)puVar16 + 1));
              local_b24 = CONCAT11(*(undefined1 *)puVar16,*(undefined1 *)((int)puVar16 + 1));
              _V_memcpy(&local_b28,&local_b24,2);
              iVar15 = *(int *)(param_1 + 0xc);
              sVar3 = (ushort)local_b28;
            }
            iVar14 = (int)sVar3;
            *(int *)(param_1 + 0xc) = iVar15 + 2;
          }
        }
        else {
          local_b28 = (float)((uint)local_b28 & 0xffff0000);
          CUtlBuffer::Scanf(param_1,"%d",&local_b28);
          iVar14 = (int)(short)(ushort)local_b28;
        }
        pIVar21 = local_920;
        (*pcVar4)(param_3,iVar14,local_920,0x100);
        CUtlString::operator=((CUtlString *)(this + 0x13c),(char *)local_920);
        if (((byte)param_1[0x15] & 1) == 0) {
          pCVar20 = (CUtlBuffer *)0x1;
          pCVar11 = (CChoreoEvent *)param_1;
          cVar9 = CUtlBuffer::CheckGet(param_1,1);
          if (cVar9 == '\0') goto LAB_00bab645;
          IVar10 = *(IChoreoStringPool *)
                    (*(int *)param_1 + (*(int *)(param_1 + 0xc) - *(int *)(param_1 + 0x20)));
          *(int *)(param_1 + 0xc) = *(int *)(param_1 + 0xc) + 1;
        }
        else {
          pIVar21 = (IChoreoStringPool *)&local_b24;
          pCVar20 = (CUtlBuffer *)0xd54391;
          local_b24 = local_b24 & 0xff00;
          CUtlBuffer::Scanf(param_1,"%c",pIVar21);
          IVar10 = (IChoreoStringPool)local_b24._0_1_;
          pCVar11 = (CChoreoEvent *)param_1;
        }
        if (((byte)IVar10 & 1) != 0) {
          this[0x178] = (CChoreoEvent)((byte)this[0x178] | 0x80);
        }
        if (((byte)IVar10 & 2) != 0) {
          this[0x179] = (CChoreoEvent)((byte)this[0x179] | 2);
        }
        if (((byte)IVar10 & 4) != 0) {
          this[0x179] = (CChoreoEvent)((byte)this[0x179] | 4);
        }
      }
      goto LAB_00bab645;
    }
  }
  uVar18 = 0;
LAB_00bab645:
  if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {
                    /* WARNING: Subroutine does not return */
    __stack_chk_fail(pCVar11,pCVar20,pIVar21);
  }
  return uVar18;
}

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)