L L4D2node

CSheet::CSheet

0x00bdd720 · 3832 bytes · __thiscall

_ZN6CSheetC1ER10CUtlBuffer

Decompiled

undefined (2 params)

/* WARNING: Type propagation algorithm not settling */
/* CSheet::CSheet(CUtlBuffer&) */

void __thiscall CSheet::CSheet(CSheet *this,CUtlBuffer *param_1)

{
  CUtlBuffer CVar1;
  char cVar2;
  void *pvVar3;
  int iVar4;
  undefined4 *puVar5;
  int iVar6;
  int *piVar7;
  int iVar8;
  undefined4 *puVar9;
  undefined4 *puVar10;
  undefined4 *puVar11;
  CSheet *pCVar12;
  float *pfVar13;
  uint *puVar14;
  CSheet *pCVar15;
  CSheet CVar16;
  float fVar17;
  CSheet *pCVar18;
  int iVar19;
  byte bVar20;
  undefined4 uVar21;
  int local_991c;
  uint local_9918;
  float *local_9910;
  float *local_990c;
  float local_9904;
  float local_9900;
  undefined4 *local_98fc;
  float local_98f8;
  float local_98f4;
  int local_98f0;
  int local_98e8;
  int local_98e4;
  uint local_98e0;
  float local_98dc;
  float local_98d8;
  undefined4 local_98d4;
  undefined4 local_98d0;
  undefined4 local_98cc;
  undefined4 local_98c8;
  undefined4 local_98c4;
  undefined4 local_98c0;
  undefined4 local_98bc;
  undefined4 local_98b8;
  undefined4 local_98b4;
  undefined4 local_98b0;
  undefined4 local_98ac;
  undefined4 local_98a8;
  undefined4 local_98a4;
  undefined4 local_9864;
  undefined4 local_9860;
  undefined4 local_985c [16];
  undefined4 local_981c;
  undefined4 local_901c;
  undefined4 local_881c;
  
  bVar20 = 0;
  *(undefined4 *)this = 0;
  pCVar12 = this + 4;
  pCVar15 = pCVar12;
  for (iVar8 = 0x40; iVar8 != 0; iVar8 = iVar8 + -1) {
    *(int *)pCVar15 = 0;
    pCVar15 = pCVar15 + 4;
  }
  pCVar18 = this + 0x104;
  pCVar15 = pCVar18;
  for (iVar8 = 0x10; iVar8 != 0; iVar8 = iVar8 + -1) {
    *(int *)pCVar15 = 0;
    pCVar15 = pCVar15 + 4;
  }
  pCVar15 = this + 0x144;
  for (iVar8 = 0x10; iVar8 != 0; iVar8 = iVar8 + -1) {
    *(undefined4 *)pCVar15 = 0;
    pCVar15 = pCVar15 + 4;
  }
  if (((byte)param_1[0x15] & 1) == 0) {
    cVar2 = CUtlBuffer::CheckGet(param_1,4);
    if (cVar2 != '\0') {
      if (((byte)param_1[0x34] & 1) == 0) {
        iVar8 = *(int *)(param_1 + 0xc);
        iVar6 = *(int *)(*(int *)param_1 + (iVar8 - *(int *)(param_1 + 0x20)));
      }
      else {
        piVar7 = (int *)((*(int *)(param_1 + 0xc) - *(int *)(param_1 + 0x20)) + *(int *)param_1);
        if (piVar7 == (int *)0x0) {
          piVar7 = &local_98e8;
        }
        local_98bc = local_98e8;
        local_98bc = CONCAT31((int3)((uint)local_98e8 >> 8),*(undefined1 *)((int)piVar7 + 3));
        local_98bc._2_2_ = (undefined2)((uint)local_98e8 >> 0x10);
        local_98bc._0_2_ =
             CONCAT11(*(undefined1 *)((int)piVar7 + 2),*(undefined1 *)((int)piVar7 + 3));
        local_98bc._3_1_ = (undefined1)((uint)local_98e8 >> 0x18);
        local_98bc._0_3_ = CONCAT12(*(undefined1 *)((int)piVar7 + 1),(undefined2)local_98bc);
        local_98bc = CONCAT13((char)*piVar7,(undefined3)local_98bc);
                    /* try { // try from 00bde677 to 00bde67b has its CatchHandler @ 00bde5af */
        _V_memcpy(&local_98e8,&local_98bc,4);
        iVar8 = *(int *)(param_1 + 0xc);
        iVar6 = local_98e8;
      }
      *(int *)(param_1 + 0xc) = iVar8 + 4;
      goto LAB_00bdd7a0;
    }
LAB_00bdd7ae:
    local_98f0 = 1;
  }
  else {
    local_98e8 = 0;
                    /* try { // try from 00bdd795 to 00bde5e5 has its CatchHandler @ 00bde5af */
    CUtlBuffer::Scanf(param_1,"%d",&local_98e8);
    iVar6 = local_98e8;
LAB_00bdd7a0:
    local_98f0 = 4;
    if (iVar6 == 0) goto LAB_00bdd7ae;
  }
  if (((byte)param_1[0x15] & 1) == 0) {
    cVar2 = CUtlBuffer::CheckGet(param_1,4);
    if (cVar2 == '\0') goto LAB_00bde06a;
    if (((byte)param_1[0x34] & 1) == 0) {
      iVar8 = *(int *)(param_1 + 0xc);
      iVar6 = *(int *)(*(int *)param_1 + (iVar8 - *(int *)(param_1 + 0x20)));
    }
    else {
      piVar7 = (int *)((*(int *)(param_1 + 0xc) - *(int *)(param_1 + 0x20)) + *(int *)param_1);
      if (piVar7 == (int *)0x0) {
        piVar7 = &local_98e4;
      }
      local_98b8 = local_98e4;
      local_98b8 = CONCAT31((int3)((uint)local_98e4 >> 8),*(undefined1 *)((int)piVar7 + 3));
      local_98b8._2_2_ = (undefined2)((uint)local_98e4 >> 0x10);
      local_98b8._0_2_ = CONCAT11(*(undefined1 *)((int)piVar7 + 2),*(undefined1 *)((int)piVar7 + 3))
      ;
      local_98b8._3_1_ = (undefined1)((uint)local_98e4 >> 0x18);
      local_98b8._0_3_ = CONCAT12(*(undefined1 *)((int)piVar7 + 1),(undefined2)local_98b8);
      local_98b8 = CONCAT13((char)*piVar7,(undefined3)local_98b8);
      _V_memcpy(&local_98e4,&local_98b8,4);
      iVar8 = *(int *)(param_1 + 0xc);
      iVar6 = local_98e4;
    }
    *(int *)(param_1 + 0xc) = iVar8 + 4;
  }
  else {
    local_98e4 = 0;
    CUtlBuffer::Scanf(param_1,"%d",&local_98e4);
    iVar6 = local_98e4;
  }
  for (; iVar6 != 0; iVar6 = iVar6 + -1) {
    if (((byte)param_1[0x15] & 1) == 0) {
      cVar2 = CUtlBuffer::CheckGet(param_1,4);
      if (cVar2 != '\0') {
        if (((byte)param_1[0x34] & 1) == 0) {
          iVar8 = *(int *)(param_1 + 0xc);
          local_9918 = *(uint *)(*(int *)param_1 + (iVar8 - *(int *)(param_1 + 0x20)));
        }
        else {
          puVar14 = (uint *)((*(int *)(param_1 + 0xc) - *(int *)(param_1 + 0x20)) + *(int *)param_1)
          ;
          if (puVar14 == (uint *)0x0) {
            puVar14 = &local_98e0;
          }
          local_98b4 = local_98e0;
          local_98b4 = CONCAT31((int3)(local_98e0 >> 8),*(undefined1 *)((int)puVar14 + 3));
          local_98b4._2_2_ = (undefined2)(local_98e0 >> 0x10);
          local_98b4._0_2_ =
               CONCAT11(*(undefined1 *)((int)puVar14 + 2),*(undefined1 *)((int)puVar14 + 3));
          local_98b4._3_1_ = (undefined1)(local_98e0 >> 0x18);
          local_98b4._0_3_ = CONCAT12(*(undefined1 *)((int)puVar14 + 1),(undefined2)local_98b4);
          local_98b4 = CONCAT13((char)*puVar14,(undefined3)local_98b4);
          _V_memcpy(&local_98e0,&local_98b4,4);
          iVar8 = *(int *)(param_1 + 0xc);
          local_9918 = local_98e0;
        }
        *(int *)(param_1 + 0xc) = iVar8 + 4;
        goto joined_r0x00bde456;
      }
      local_9918 = 0;
    }
    else {
      local_98e0 = 0;
      CUtlBuffer::Scanf(param_1,"%d",&local_98e0);
      local_9918 = local_98e0;
joined_r0x00bde456:
      if (0x3f < local_9918) {
        Warning("sequence number %d too high in sheet file!!!\n",local_9918);
        return;
      }
    }
    CVar16 = (CSheet)((byte)param_1[0x15] & 1);
    if (((byte)param_1[0x15] & 1) == 0) {
      cVar2 = CUtlBuffer::CheckGet(param_1,4);
      if (cVar2 != '\0') {
        if (((byte)param_1[0x34] & 1) == 0) {
          iVar8 = *(int *)(param_1 + 0xc);
          fVar17 = *(float *)(*(int *)param_1 + (iVar8 - *(int *)(param_1 + 0x20)));
        }
        else {
          pfVar13 = (float *)((*(int *)(param_1 + 0xc) - *(int *)(param_1 + 0x20)) + *(int *)param_1
                             );
          if (pfVar13 == (float *)0x0) {
            pfVar13 = &local_98dc;
          }
          local_981c = local_98dc;
          local_981c = (float)CONCAT31((int3)((uint)local_98dc >> 8),
                                       *(undefined1 *)((int)pfVar13 + 3));
          local_981c._2_2_ = (undefined2)((uint)local_98dc >> 0x10);
          local_981c._0_2_ =
               CONCAT11(*(undefined1 *)((int)pfVar13 + 2),*(undefined1 *)((int)pfVar13 + 3));
          local_981c._3_1_ = (undefined1)((uint)local_98dc >> 0x18);
          local_981c._0_3_ = CONCAT12(*(undefined1 *)((int)pfVar13 + 1),(undefined2)local_981c);
          local_981c = (float)CONCAT13(*(undefined1 *)pfVar13,(undefined3)local_981c);
          _V_memcpy(&local_98dc,&local_981c,4);
          iVar8 = *(int *)(param_1 + 0xc);
          fVar17 = local_98dc;
        }
        CVar16 = SUB41(fVar17,0);
        *(int *)(param_1 + 0xc) = iVar8 + 4;
      }
    }
    else {
      local_98dc = 0.0;
      CUtlBuffer::Scanf(param_1,"%d",&local_98dc);
      CVar16 = SUB41(local_98dc,0);
    }
    this[local_9918 + 0x104] = CVar16;
    if (((byte)param_1[0x15] & 1) == 0) {
      cVar2 = CUtlBuffer::CheckGet(param_1,4);
      if (cVar2 != '\0') {
        if (((byte)param_1[0x34] & 1) == 0) {
          iVar8 = *(int *)(param_1 + 0xc);
          local_9904 = *(float *)(*(int *)param_1 + (iVar8 - *(int *)(param_1 + 0x20)));
        }
        else {
          pfVar13 = (float *)((*(int *)(param_1 + 0xc) - *(int *)(param_1 + 0x20)) + *(int *)param_1
                             );
          if (pfVar13 == (float *)0x0) {
            pfVar13 = &local_98d8;
          }
          local_901c = local_98d8;
          local_901c = (float)CONCAT31((int3)((uint)local_98d8 >> 8),
                                       *(undefined1 *)((int)pfVar13 + 3));
          local_901c._2_2_ = (undefined2)((uint)local_98d8 >> 0x10);
          local_901c._0_2_ =
               CONCAT11(*(undefined1 *)((int)pfVar13 + 2),*(undefined1 *)((int)pfVar13 + 3));
          local_901c._3_1_ = (undefined1)((uint)local_98d8 >> 0x18);
          local_901c._0_3_ = CONCAT12(*(undefined1 *)((int)pfVar13 + 1),(undefined2)local_901c);
          local_901c = (float)CONCAT13(*(undefined1 *)pfVar13,(undefined3)local_901c);
          _V_memcpy(&local_98d8,&local_901c,4);
          iVar8 = *(int *)(param_1 + 0xc);
          local_9904 = local_98d8;
        }
        *(int *)(param_1 + 0xc) = iVar8 + 4;
        goto LAB_00bdd8c5;
      }
      local_9904 = 0.0;
      local_991c = 0x200;
      *(undefined4 *)(this + local_9918 * 4 + 0x184) = 0;
    }
    else {
      local_98d8 = 0.0;
      CUtlBuffer::Scanf(param_1,"%d",&local_98d8);
      local_9904 = local_98d8;
LAB_00bdd8c5:
      *(float *)(this + local_9918 * 4 + 0x184) = local_9904;
      local_991c = 0x200;
      if (local_9904 == 1.4013e-45) {
        local_991c = 1;
      }
    }
    if (*(int *)(this + local_9918 * 4 + 4) != 0) {
      Warning("Duplicate sequence %d in sheet file\n",local_9918);
      if (*(void **)(this + local_9918 * 4 + 4) != (void *)0x0) {
        operator_delete__(*(void **)(this + local_9918 * 4 + 4));
      }
    }
    pvVar3 = operator_new__(local_991c * 0x44);
    *(void **)(this + local_9918 * 4 + 4) = pvVar3;
    if (((byte)param_1[0x15] & 1) == 0) {
      cVar2 = CUtlBuffer::CheckGet(param_1,4);
      if (cVar2 == '\0') {
        iVar8 = 0;
      }
      else {
        iVar19 = *(int *)(param_1 + 0xc);
        fVar17 = *(float *)(*(int *)param_1 + (iVar19 - *(int *)(param_1 + 0x20)));
        local_98d4 = fVar17;
        if (((byte)param_1[0x34] & 1) != 0) {
          local_98d4._3_1_ = (undefined1)((uint)fVar17 >> 0x18);
          local_881c._0_1_ = local_98d4._3_1_;
          local_98d4._2_1_ = (undefined1)((uint)fVar17 >> 0x10);
          local_881c._1_1_ = local_98d4._2_1_;
          local_98d4._1_1_ = (undefined1)((uint)fVar17 >> 8);
          local_881c._2_1_ = local_98d4._1_1_;
          local_98d4._0_1_ = SUB41(fVar17,0);
          local_881c._3_1_ = (undefined1)local_98d4;
          _V_memcpy(&local_98d4,&local_881c,4);
          iVar19 = *(int *)(param_1 + 0xc);
        }
        iVar8 = (int)local_98d4;
        *(int *)(param_1 + 0xc) = iVar19 + 4;
      }
    }
    else {
      local_98d4 = 0.0;
      CUtlBuffer::Scanf(param_1,"%f",&local_98d4);
      iVar8 = (int)local_98d4;
    }
    if (0 < (int)local_9904) {
      local_98fc = &local_881c;
      local_98f8 = 0.0;
      local_98f4 = 0.0;
      do {
        if (((byte)param_1[0x15] & 1) == 0) {
          cVar2 = CUtlBuffer::CheckGet(param_1,4);
          if (cVar2 == '\0') {
            local_9900 = 0.0;
          }
          else {
            iVar19 = *(int *)(param_1 + 0xc);
            fVar17 = *(float *)(*(int *)param_1 + (iVar19 - *(int *)(param_1 + 0x20)));
            local_98d0 = fVar17;
            if (((byte)param_1[0x34] & 1) != 0) {
              local_98d0._3_1_ = (undefined1)((uint)fVar17 >> 0x18);
              local_98d0._2_1_ = (undefined1)((uint)fVar17 >> 0x10);
              local_98d0._1_1_ = (undefined1)((uint)fVar17 >> 8);
              local_98d0._0_1_ = SUB41(fVar17,0);
              local_98b0 = (float)CONCAT13((undefined1)local_98d0,
                                           CONCAT12(local_98d0._1_1_,
                                                    CONCAT11(local_98d0._2_1_,local_98d0._3_1_)));
              _V_memcpy(&local_98d0,&local_98b0,4);
              iVar19 = *(int *)(param_1 + 0xc);
            }
            *(int *)(param_1 + 0xc) = iVar19 + 4;
            local_9900 = local_98d0;
          }
        }
        else {
          local_98d0 = 0.0;
          CUtlBuffer::Scanf(param_1,"%f",&local_98d0);
          local_9900 = local_98d0;
        }
        iVar19 = 0;
        (&local_901c)[(int)local_98f8] = (float)(int)local_98f8;
        (&local_981c)[(int)local_98f8] = (1.0 / (float)iVar8) * 512.0 * local_98f4;
        local_98fc[0x10] = 0;
        puVar5 = local_98fc;
        do {
          if (((byte)param_1[0x15] & 1) == 0) {
            cVar2 = CUtlBuffer::CheckGet(param_1,4);
            if (cVar2 == '\0') {
              uVar21 = 0;
              goto LAB_00bdda9c;
            }
            iVar4 = *(int *)(param_1 + 0xc);
            uVar21 = *(undefined4 *)(*(int *)param_1 + (iVar4 - *(int *)(param_1 + 0x20)));
            local_98cc = uVar21;
            if (((byte)param_1[0x34] & 1) != 0) {
              local_98cc._3_1_ = (undefined1)((uint)uVar21 >> 0x18);
              local_98cc._2_1_ = (undefined1)((uint)uVar21 >> 0x10);
              local_98cc._1_1_ = (undefined1)((uint)uVar21 >> 8);
              local_98cc._0_1_ = (undefined1)uVar21;
              local_98ac = (float)CONCAT13((undefined1)local_98cc,
                                           CONCAT12(local_98cc._1_1_,
                                                    CONCAT11(local_98cc._2_1_,local_98cc._3_1_)));
              _V_memcpy(&local_98cc,&local_98ac,4);
              iVar4 = *(int *)(param_1 + 0xc);
            }
            CVar1 = param_1[0x15];
            *puVar5 = local_98cc;
            *(int *)(param_1 + 0xc) = iVar4 + 4;
            if (((byte)CVar1 & 1) != 0) goto LAB_00bddaaa;
LAB_00bddbc0:
            cVar2 = CUtlBuffer::CheckGet(param_1,4);
            if (cVar2 == '\0') {
              uVar21 = 0;
              goto LAB_00bddad6;
            }
            iVar4 = *(int *)(param_1 + 0xc);
            uVar21 = *(undefined4 *)(*(int *)param_1 + (iVar4 - *(int *)(param_1 + 0x20)));
            local_98c8 = uVar21;
            if (((byte)param_1[0x34] & 1) != 0) {
              local_98c8._3_1_ = (undefined1)((uint)uVar21 >> 0x18);
              local_98c8._2_1_ = (undefined1)((uint)uVar21 >> 0x10);
              local_98c8._1_1_ = (undefined1)((uint)uVar21 >> 8);
              local_98c8._0_1_ = (undefined1)uVar21;
              local_98a8 = (float)CONCAT13((undefined1)local_98c8,
                                           CONCAT12(local_98c8._1_1_,
                                                    CONCAT11(local_98c8._2_1_,local_98c8._3_1_)));
              _V_memcpy(&local_98c8,&local_98a8,4);
              iVar4 = *(int *)(param_1 + 0xc);
            }
            CVar1 = param_1[0x15];
            puVar5[1] = local_98c8;
            *(int *)(param_1 + 0xc) = iVar4 + 4;
            if (((byte)CVar1 & 1) != 0) goto LAB_00bddae5;
LAB_00bddc10:
            cVar2 = CUtlBuffer::CheckGet(param_1,4);
            if (cVar2 == '\0') {
              uVar21 = 0;
              goto LAB_00bddb11;
            }
            iVar4 = *(int *)(param_1 + 0xc);
            uVar21 = *(undefined4 *)(*(int *)param_1 + (iVar4 - *(int *)(param_1 + 0x20)));
            local_98c4 = uVar21;
            if (((byte)param_1[0x34] & 1) != 0) {
              local_98c4._3_1_ = (undefined1)((uint)uVar21 >> 0x18);
              local_98a4._0_1_ = local_98c4._3_1_;
              local_98c4._2_1_ = (undefined1)((uint)uVar21 >> 0x10);
              local_98a4._1_1_ = local_98c4._2_1_;
              local_98c4._1_1_ = (undefined1)((uint)uVar21 >> 8);
              local_98a4._2_1_ = local_98c4._1_1_;
              local_98c4._0_1_ = (undefined1)uVar21;
              local_98a4._3_1_ = (undefined1)local_98c4;
              _V_memcpy(&local_98c4,&local_98a4,4);
              iVar4 = *(int *)(param_1 + 0xc);
            }
            CVar1 = param_1[0x15];
            puVar5[2] = local_98c4;
            *(int *)(param_1 + 0xc) = iVar4 + 4;
            if (((byte)CVar1 & 1) != 0) goto LAB_00bddb20;
LAB_00bddc60:
            cVar2 = CUtlBuffer::CheckGet(param_1,4);
            if (cVar2 == '\0') {
              uVar21 = 0;
            }
            else {
              iVar4 = *(int *)(param_1 + 0xc);
              uVar21 = *(undefined4 *)(*(int *)param_1 + (iVar4 - *(int *)(param_1 + 0x20)));
              local_98c0 = uVar21;
              if (((byte)param_1[0x34] & 1) != 0) {
                local_98c0._3_1_ = (undefined1)((uint)uVar21 >> 0x18);
                local_9860._0_1_ = local_98c0._3_1_;
                local_98c0._2_1_ = (undefined1)((uint)uVar21 >> 0x10);
                local_9860._1_1_ = local_98c0._2_1_;
                local_98c0._1_1_ = (undefined1)((uint)uVar21 >> 8);
                local_9860._2_1_ = local_98c0._1_1_;
                local_98c0._0_1_ = (undefined1)uVar21;
                local_9860._3_1_ = (undefined1)local_98c0;
                _V_memcpy(&local_98c0,&local_9860,4);
                iVar4 = *(int *)(param_1 + 0xc);
              }
              *(int *)(param_1 + 0xc) = iVar4 + 4;
              uVar21 = local_98c0;
            }
          }
          else {
            local_98cc = 0;
            CUtlBuffer::Scanf(param_1,"%f",&local_98cc);
            uVar21 = local_98cc;
LAB_00bdda9c:
            CVar1 = param_1[0x15];
            *puVar5 = uVar21;
            if (((byte)CVar1 & 1) == 0) goto LAB_00bddbc0;
LAB_00bddaaa:
            local_98c8 = 0;
            CUtlBuffer::Scanf(param_1,"%f",&local_98c8);
            uVar21 = local_98c8;
LAB_00bddad6:
            CVar1 = param_1[0x15];
            puVar5[1] = uVar21;
            if (((byte)CVar1 & 1) == 0) goto LAB_00bddc10;
LAB_00bddae5:
            local_98c4 = 0;
            CUtlBuffer::Scanf(param_1,"%f",&local_98c4);
            uVar21 = local_98c4;
LAB_00bddb11:
            CVar1 = param_1[0x15];
            puVar5[2] = uVar21;
            if (((byte)CVar1 & 1) == 0) goto LAB_00bddc60;
LAB_00bddb20:
            local_98c0 = 0;
            CUtlBuffer::Scanf(param_1,"%f",&local_98c0);
            uVar21 = local_98c0;
          }
          iVar19 = iVar19 + 1;
          puVar5[3] = uVar21;
          puVar5 = puVar5 + 8;
        } while (iVar19 < local_98f0);
        if (local_98f0 == 1) {
          local_98fc[8] = *local_98fc;
          local_98fc[9] = local_98fc[1];
          local_98fc[10] = local_98fc[2];
          local_98fc[0xb] = local_98fc[3];
          local_98fc[0xc] = local_98fc[4];
          local_98fc[0xd] = local_98fc[5];
          local_98fc[0xe] = local_98fc[6];
          local_98fc[0xf] = local_98fc[7];
        }
        local_98f4 = local_98f4 + local_9900;
        local_98f8 = (float)((int)local_98f8 + 1);
        local_98fc = local_98fc + 0x11;
        *(float *)(this + local_9918 * 4 + 0x284) = local_98f4;
      } while (local_98f8 != local_9904);
    }
    local_990c = (float *)&local_901c;
    local_9910 = (float *)&local_981c;
    local_98f4 = 0.0;
    do {
      GetInterpolationData
                (local_9910,local_990c,(int)local_9904,0x200,(float)(int)local_98f4,
                 (bool)(~(byte)this[local_9918 + 0x104] & 1),(float *)&local_98b0,
                 (float *)&local_98ac,(float *)&local_98a8);
      puVar5 = &local_881c + (int)local_98b0 * 0x11;
      puVar9 = &local_98a4;
      for (iVar8 = 0x11; iVar8 != 0; iVar8 = iVar8 + -1) {
        *puVar9 = *puVar5;
        puVar5 = puVar5 + (uint)bVar20 * -2 + 1;
        puVar9 = puVar9 + (uint)bVar20 * -2 + 1;
      }
      puVar5 = &local_881c + (int)local_98ac * 0x11;
      puVar9 = &local_9860;
      for (iVar8 = 0x11; iVar8 != 0; iVar8 = iVar8 + -1) {
        *puVar9 = *puVar5;
        puVar5 = puVar5 + (uint)bVar20 * -2 + 1;
        puVar9 = puVar9 + (uint)bVar20 * -2 + 1;
      }
      puVar5 = (undefined4 *)((int)local_98f4 * 0x44 + *(int *)(this + local_9918 * 4 + 4));
      puVar5[0x10] = local_98a8;
      puVar9 = &local_9860;
      puVar10 = &local_98a4;
      do {
        puVar11 = puVar10 + 8;
        *puVar5 = *puVar10;
        puVar5[1] = puVar10[1];
        puVar5[2] = puVar10[2];
        puVar5[3] = puVar10[3];
        puVar5[4] = *puVar9;
        puVar5[5] = puVar9[1];
        puVar5[6] = puVar9[2];
        puVar5[7] = puVar9[3];
        puVar5 = puVar5 + 8;
        puVar9 = puVar9 + 8;
        puVar10 = puVar11;
      } while (puVar11 != &local_9864);
      local_98f4 = (float)((int)local_98f4 + 1);
    } while ((int)local_98f4 < local_991c);
  }
LAB_00bde06a:
  iVar8 = 0;
  do {
    pCVar15 = pCVar18;
    if (*(int *)(this + iVar8 * 4 + 4) != 0) {
      do {
        if (*(int *)pCVar12 == 0) {
          *(int *)pCVar12 = *(int *)(this + iVar8 * 4 + 4);
          *pCVar15 = this[iVar8 + 0x104];
          *(int *)(pCVar12 + 0x180) = *(int *)(this + iVar8 * 4 + 0x184);
          pCVar15[0x40] = (CSheet)0x1;
        }
        pCVar12 = pCVar12 + 4;
        pCVar15 = pCVar15 + 1;
      } while (pCVar12 != pCVar18);
      return;
    }
    iVar8 = iVar8 + 1;
  } while (iVar8 != 0x40);
  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)