L L4D2node

CNavArea::Save

0x0071a3a0 · 3941 bytes · __cdecl

_ZNK8CNavArea4SaveER10CUtlBufferj

Decompiled

undefined (2 params)

/* CNavArea::Save(CUtlBuffer&, unsigned int) const */

void CNavArea::Save(CUtlBuffer *param_1,uint param_2)

{
  float *pfVar1;
  float fVar2;
  char cVar3;
  int *piVar4;
  int iVar5;
  undefined4 uVar6;
  void *pvVar7;
  byte bVar8;
  int iVar9;
  uint uVar10;
  uint uVar11;
  int iVar12;
  int local_7c;
  short local_5e;
  undefined4 local_5c;
  undefined4 local_58;
  undefined4 local_54;
  undefined4 local_50;
  undefined4 local_4c;
  undefined4 local_48;
  undefined4 local_44;
  undefined4 local_40;
  undefined4 local_3c;
  undefined4 local_38;
  undefined4 local_34;
  undefined4 local_30;
  undefined4 local_2c;
  undefined4 local_28;
  undefined4 local_24;
  undefined1 local_20;
  undefined1 local_1f;
  undefined1 local_1e;
  undefined1 local_1d;
  
  if ((*(byte *)(param_2 + 0x15) & 1) == 0) {
    local_5c = *(undefined4 *)(param_1 + 0x8c);
    cVar3 = CUtlBuffer::CheckPut((CUtlBuffer *)param_2,4);
    if (cVar3 != '\0') {
      if ((*(byte *)(param_2 + 0x34) & 1) == 0) {
        *(undefined4 *)(*(int *)param_2 + (*(int *)(param_2 + 0x10) - *(int *)(param_2 + 0x20))) =
             local_5c;
        iVar9 = *(int *)(param_2 + 0x10);
      }
      else {
        iVar9 = *(int *)(param_2 + 0x10);
        pvVar7 = (void *)((iVar9 - *(int *)(param_2 + 0x20)) + *(int *)param_2);
        if (pvVar7 != (void *)0x0) {
          local_20 = local_5c._3_1_;
          local_1f = local_5c._2_1_;
          local_1e = local_5c._1_1_;
          local_1d = (undefined1)local_5c;
          _V_memcpy(pvVar7,&local_20,4);
          iVar9 = *(int *)(param_2 + 0x10);
        }
      }
      *(int *)(param_2 + 0x10) = iVar9 + 4;
      CUtlBuffer::AddNullTermination((CUtlBuffer *)param_2);
    }
  }
  else {
    CUtlBuffer::Printf((CUtlBuffer *)param_2,"%u",*(undefined4 *)(param_1 + 0x8c));
  }
  if ((*(byte *)(param_2 + 0x15) & 1) == 0) {
    local_58 = *(uint *)(param_1 + 0x54) & 0x67ffffff;
    cVar3 = CUtlBuffer::CheckPut((CUtlBuffer *)param_2,4);
    if (cVar3 != '\0') {
      if ((*(byte *)(param_2 + 0x34) & 1) == 0) {
        *(uint *)(*(int *)param_2 + (*(int *)(param_2 + 0x10) - *(int *)(param_2 + 0x20))) =
             local_58;
        iVar9 = *(int *)(param_2 + 0x10);
      }
      else {
        iVar9 = *(int *)(param_2 + 0x10);
        pvVar7 = (void *)((iVar9 - *(int *)(param_2 + 0x20)) + *(int *)param_2);
        if (pvVar7 != (void *)0x0) {
          local_20 = local_58._3_1_;
          local_1f = local_58._2_1_;
          local_1e = local_58._1_1_;
          local_1d = (undefined1)local_58;
          _V_memcpy(pvVar7,&local_20,4);
          iVar9 = *(int *)(param_2 + 0x10);
        }
      }
      *(int *)(param_2 + 0x10) = iVar9 + 4;
      CUtlBuffer::AddNullTermination((CUtlBuffer *)param_2);
    }
  }
  else {
    CUtlBuffer::Printf((CUtlBuffer *)param_2,"%d",*(uint *)(param_1 + 0x54) & 0x67ffffff);
  }
  CUtlBuffer::Put((CUtlBuffer *)param_2,param_1 + 4,0xc);
  CUtlBuffer::Put((CUtlBuffer *)param_2,param_1 + 0x10,0xc);
  if ((*(byte *)(param_2 + 0x15) & 1) == 0) {
    local_54 = *(float *)(param_1 + 0x24);
    cVar3 = CUtlBuffer::CheckPut((CUtlBuffer *)param_2,4);
    if (cVar3 != '\0') {
      if ((*(byte *)(param_2 + 0x34) & 1) == 0) {
        *(float *)(*(int *)param_2 + (*(int *)(param_2 + 0x10) - *(int *)(param_2 + 0x20))) =
             local_54;
        iVar9 = *(int *)(param_2 + 0x10);
      }
      else {
        iVar9 = *(int *)(param_2 + 0x10);
        pvVar7 = (void *)((iVar9 - *(int *)(param_2 + 0x20)) + *(int *)param_2);
        if (pvVar7 != (void *)0x0) {
          local_20 = local_54._3_1_;
          local_1f = local_54._2_1_;
          local_1e = local_54._1_1_;
          local_1d = (undefined1)local_54;
          _V_memcpy(pvVar7,&local_20,4);
          iVar9 = *(int *)(param_2 + 0x10);
        }
      }
      *(int *)(param_2 + 0x10) = iVar9 + 4;
      CUtlBuffer::AddNullTermination((CUtlBuffer *)param_2);
    }
  }
  else {
    CUtlBuffer::Printf((CUtlBuffer *)param_2,"%f",(double)*(float *)(param_1 + 0x24));
  }
  if ((*(byte *)(param_2 + 0x15) & 1) == 0) {
    local_50 = *(float *)(param_1 + 0x28);
    cVar3 = CUtlBuffer::CheckPut((CUtlBuffer *)param_2,4);
    if (cVar3 != '\0') {
      if ((*(byte *)(param_2 + 0x34) & 1) == 0) {
        *(float *)(*(int *)param_2 + (*(int *)(param_2 + 0x10) - *(int *)(param_2 + 0x20))) =
             local_50;
        iVar9 = *(int *)(param_2 + 0x10);
      }
      else {
        iVar9 = *(int *)(param_2 + 0x10);
        pvVar7 = (void *)((iVar9 - *(int *)(param_2 + 0x20)) + *(int *)param_2);
        if (pvVar7 != (void *)0x0) {
          local_20 = local_50._3_1_;
          local_1f = local_50._2_1_;
          local_1e = local_50._1_1_;
          local_1d = (undefined1)local_50;
          _V_memcpy(pvVar7,&local_20,4);
          iVar9 = *(int *)(param_2 + 0x10);
        }
      }
      *(int *)(param_2 + 0x10) = iVar9 + 4;
      CUtlBuffer::AddNullTermination((CUtlBuffer *)param_2);
    }
  }
  else {
    CUtlBuffer::Printf((CUtlBuffer *)param_2,"%f",(double)*(float *)(param_1 + 0x28));
  }
  iVar9 = 0;
  do {
    if ((*(byte *)(param_2 + 0x15) & 1) == 0) {
      local_4c = **(undefined4 **)(param_1 + iVar9 * 4 + 0x58);
      cVar3 = CUtlBuffer::CheckPut((CUtlBuffer *)param_2,4);
      if (cVar3 != '\0') {
        if ((*(byte *)(param_2 + 0x34) & 1) == 0) {
          *(undefined4 *)(*(int *)param_2 + (*(int *)(param_2 + 0x10) - *(int *)(param_2 + 0x20))) =
               local_4c;
          iVar12 = *(int *)(param_2 + 0x10);
        }
        else {
          iVar12 = *(int *)(param_2 + 0x10);
          pvVar7 = (void *)((iVar12 - *(int *)(param_2 + 0x20)) + *(int *)param_2);
          if (pvVar7 != (void *)0x0) {
            local_20 = local_4c._3_1_;
            local_1f = local_4c._2_1_;
            local_1e = local_4c._1_1_;
            local_1d = (undefined1)local_4c;
            _V_memcpy(pvVar7,&local_20,4);
            iVar12 = *(int *)(param_2 + 0x10);
          }
        }
        *(int *)(param_2 + 0x10) = iVar12 + 4;
        CUtlBuffer::AddNullTermination((CUtlBuffer *)param_2);
      }
    }
    else {
      CUtlBuffer::Printf((CUtlBuffer *)param_2,"%u",**(undefined4 **)(param_1 + iVar9 * 4 + 0x58));
    }
    iVar12 = 0;
    piVar4 = *(int **)(param_1 + iVar9 * 4 + 0x58);
    if (0 < *piVar4) {
LAB_0071a4f2:
      do {
        if ((*(byte *)(param_2 + 0x15) & 1) == 0) {
          local_48 = *(undefined4 *)(piVar4[iVar12 * 2 + 1] + 0x8c);
          cVar3 = CUtlBuffer::CheckPut((CUtlBuffer *)param_2,4);
          if (cVar3 != '\0') {
            if ((*(byte *)(param_2 + 0x34) & 1) == 0) {
              *(undefined4 *)
               (*(int *)param_2 + (*(int *)(param_2 + 0x10) - *(int *)(param_2 + 0x20))) = local_48;
              iVar5 = *(int *)(param_2 + 0x10);
            }
            else {
              iVar5 = *(int *)(param_2 + 0x10);
              pvVar7 = (void *)((iVar5 - *(int *)(param_2 + 0x20)) + *(int *)param_2);
              if (pvVar7 != (void *)0x0) {
                local_20 = local_48._3_1_;
                local_1f = local_48._2_1_;
                local_1e = local_48._1_1_;
                local_1d = (undefined1)local_48;
                _V_memcpy(pvVar7,&local_20,4);
                iVar5 = *(int *)(param_2 + 0x10);
              }
            }
            iVar12 = iVar12 + 1;
            *(int *)(param_2 + 0x10) = iVar5 + 4;
            CUtlBuffer::AddNullTermination((CUtlBuffer *)param_2);
            piVar4 = *(int **)(param_1 + iVar9 * 4 + 0x58);
            if (*piVar4 <= iVar12) break;
            goto LAB_0071a4f2;
          }
        }
        else {
          CUtlBuffer::Printf((CUtlBuffer *)param_2,"%u",
                             *(undefined4 *)(piVar4[iVar12 * 2 + 1] + 0x8c));
        }
        iVar12 = iVar12 + 1;
        piVar4 = *(int **)(param_1 + iVar9 * 4 + 0x58);
      } while (iVar12 < *piVar4);
    }
    iVar9 = iVar9 + 1;
  } while (iVar9 != 4);
  uVar10 = **(uint **)(param_1 + 0xcc) & 0xff;
  if (0xff < (int)**(uint **)(param_1 + 0xcc)) {
    uVar10 = 0xff;
    Warning("Warning: NavArea #%d: Truncated hiding spot list to 255\n",
            *(undefined4 *)(param_1 + 0x8c));
  }
  if ((*(byte *)(param_2 + 0x15) & 1) == 0) {
    cVar3 = CUtlBuffer::CheckPut((CUtlBuffer *)param_2,1);
    if (cVar3 != '\0') {
      *(char *)(*(int *)param_2 + (*(int *)(param_2 + 0x10) - *(int *)(param_2 + 0x20))) =
           (char)uVar10;
      *(int *)(param_2 + 0x10) = *(int *)(param_2 + 0x10) + 1;
      CUtlBuffer::AddNullTermination((CUtlBuffer *)param_2);
    }
  }
  else {
    CUtlBuffer::Printf((CUtlBuffer *)param_2,"%u",uVar10);
  }
  piVar4 = *(int **)(param_1 + 0xcc);
  if (0 < *piVar4) {
    iVar9 = 0;
    do {
      HidingSpot::Save((CUtlBuffer *)piVar4[iVar9 + 1],param_2);
      if (iVar9 == uVar10 - 1) break;
      iVar9 = iVar9 + 1;
      piVar4 = *(int **)(param_1 + 0xcc);
    } while (iVar9 < *piVar4);
  }
  if ((*(byte *)(param_2 + 0x15) & 1) == 0) {
    local_44 = **(undefined4 **)(param_1 + 0xd0);
    cVar3 = CUtlBuffer::CheckPut((CUtlBuffer *)param_2,4);
    if (cVar3 != '\0') {
      if ((*(byte *)(param_2 + 0x34) & 1) == 0) {
        *(undefined4 *)(*(int *)param_2 + (*(int *)(param_2 + 0x10) - *(int *)(param_2 + 0x20))) =
             local_44;
        iVar9 = *(int *)(param_2 + 0x10);
      }
      else {
        iVar9 = *(int *)(param_2 + 0x10);
        pvVar7 = (void *)((iVar9 - *(int *)(param_2 + 0x20)) + *(int *)param_2);
        if (pvVar7 != (void *)0x0) {
          local_20 = local_44._3_1_;
          local_1f = local_44._2_1_;
          local_1e = local_44._1_1_;
          local_1d = (undefined1)local_44;
          _V_memcpy(pvVar7,&local_20,4);
          iVar9 = *(int *)(param_2 + 0x10);
        }
      }
      *(int *)(param_2 + 0x10) = iVar9 + 4;
      CUtlBuffer::AddNullTermination((CUtlBuffer *)param_2);
    }
  }
  else {
    CUtlBuffer::Printf((CUtlBuffer *)param_2,"%u",**(undefined4 **)(param_1 + 0xd0));
  }
  local_7c = 0;
  piVar4 = *(int **)(param_1 + 0xd0);
  if (0 < *piVar4) {
    do {
      piVar4 = (int *)piVar4[local_7c + 1];
      if (*piVar4 == 0) {
        if ((*(byte *)(param_2 + 0x15) & 1) == 0) {
          local_3c = 0;
          cVar3 = CUtlBuffer::CheckPut((CUtlBuffer *)param_2,4);
          if (cVar3 != '\0') {
            if ((*(byte *)(param_2 + 0x34) & 1) == 0) {
              *(undefined4 *)
               (*(int *)param_2 + (*(int *)(param_2 + 0x10) - *(int *)(param_2 + 0x20))) = local_3c;
              iVar9 = *(int *)(param_2 + 0x10);
            }
            else {
              iVar9 = *(int *)(param_2 + 0x10);
              pvVar7 = (void *)((iVar9 - *(int *)(param_2 + 0x20)) + *(int *)param_2);
              if (pvVar7 != (void *)0x0) {
                local_20 = local_3c._3_1_;
                local_1f = local_3c._2_1_;
                local_1e = local_3c._1_1_;
                local_1d = (undefined1)local_3c;
                goto LAB_0071acf8;
              }
            }
            goto LAB_0071abee;
          }
        }
        else {
          CUtlBuffer::Printf((CUtlBuffer *)param_2,"%u",0);
        }
      }
      else {
        uVar6 = *(undefined4 *)(*piVar4 + 0x8c);
        if ((*(byte *)(param_2 + 0x15) & 1) == 0) {
          local_40 = uVar6;
          cVar3 = CUtlBuffer::CheckPut((CUtlBuffer *)param_2,4);
          if (cVar3 != '\0') {
            if ((*(byte *)(param_2 + 0x34) & 1) == 0) {
              *(undefined4 *)
               (*(int *)param_2 + (*(int *)(param_2 + 0x10) - *(int *)(param_2 + 0x20))) = local_40;
              iVar9 = *(int *)(param_2 + 0x10);
            }
            else {
              iVar9 = *(int *)(param_2 + 0x10);
              pvVar7 = (void *)((iVar9 - *(int *)(param_2 + 0x20)) + *(int *)param_2);
              if (pvVar7 != (void *)0x0) {
                local_20 = local_40._3_1_;
                local_1f = local_40._2_1_;
                local_1e = local_40._1_1_;
                local_1d = (undefined1)local_40;
LAB_0071acf8:
                _V_memcpy(pvVar7,&local_20,4);
                iVar9 = *(int *)(param_2 + 0x10);
              }
            }
LAB_0071abee:
            *(int *)(param_2 + 0x10) = iVar9 + 4;
            CUtlBuffer::AddNullTermination((CUtlBuffer *)param_2);
          }
        }
        else {
          CUtlBuffer::Printf((CUtlBuffer *)param_2,"%u",uVar6);
        }
      }
      bVar8 = *(byte *)(piVar4 + 2);
      if ((*(byte *)(param_2 + 0x15) & 1) == 0) {
        cVar3 = CUtlBuffer::CheckPut((CUtlBuffer *)param_2,1);
        if (cVar3 == '\0') goto LAB_0071a67f;
        *(byte *)(*(int *)param_2 + (*(int *)(param_2 + 0x10) - *(int *)(param_2 + 0x20))) = bVar8;
        *(int *)(param_2 + 0x10) = *(int *)(param_2 + 0x10) + 1;
        CUtlBuffer::AddNullTermination((CUtlBuffer *)param_2);
        iVar9 = piVar4[3];
        if (iVar9 == 0) goto LAB_0071ab20;
LAB_0071a68a:
        if ((*(byte *)(param_2 + 0x15) & 1) == 0) {
          local_38 = *(undefined4 *)(iVar9 + 0x8c);
          cVar3 = CUtlBuffer::CheckPut((CUtlBuffer *)param_2,4);
          if (cVar3 != '\0') {
            if ((*(byte *)(param_2 + 0x34) & 1) == 0) {
              *(undefined4 *)
               (*(int *)param_2 + (*(int *)(param_2 + 0x10) - *(int *)(param_2 + 0x20))) = local_38;
              iVar9 = *(int *)(param_2 + 0x10);
            }
            else {
              iVar9 = *(int *)(param_2 + 0x10);
              pvVar7 = (void *)((iVar9 - *(int *)(param_2 + 0x20)) + *(int *)param_2);
              if (pvVar7 != (void *)0x0) {
                local_20 = local_38._3_1_;
                local_1f = local_38._2_1_;
                local_1e = local_38._1_1_;
                local_1d = (undefined1)local_38;
LAB_0071ad43:
                _V_memcpy(pvVar7,&local_20,4);
                iVar9 = *(int *)(param_2 + 0x10);
              }
            }
LAB_0071ac3e:
            *(int *)(param_2 + 0x10) = iVar9 + 4;
            CUtlBuffer::AddNullTermination((CUtlBuffer *)param_2);
          }
        }
        else {
          CUtlBuffer::Printf((CUtlBuffer *)param_2,"%u",*(undefined4 *)(iVar9 + 0x8c));
        }
LAB_0071a6ae:
        bVar8 = *(byte *)(piVar4 + 5);
        if ((*(byte *)(param_2 + 0x15) & 1) != 0) goto LAB_0071a6bc;
LAB_0071ab50:
        cVar3 = CUtlBuffer::CheckPut((CUtlBuffer *)param_2,1);
        if (cVar3 == '\0') goto LAB_0071a6d0;
        *(byte *)(*(int *)param_2 + (*(int *)(param_2 + 0x10) - *(int *)(param_2 + 0x20))) = bVar8;
        *(int *)(param_2 + 0x10) = *(int *)(param_2 + 0x10) + 1;
        CUtlBuffer::AddNullTermination((CUtlBuffer *)param_2);
        uVar10 = piVar4[0xf];
      }
      else {
        CUtlBuffer::Printf((CUtlBuffer *)param_2,"%u",(uint)bVar8);
LAB_0071a67f:
        iVar9 = piVar4[3];
        if (iVar9 != 0) goto LAB_0071a68a;
LAB_0071ab20:
        if ((*(byte *)(param_2 + 0x15) & 1) == 0) {
          local_34 = 0;
          cVar3 = CUtlBuffer::CheckPut((CUtlBuffer *)param_2,4);
          if (cVar3 != '\0') {
            if ((*(byte *)(param_2 + 0x34) & 1) != 0) {
              iVar9 = *(int *)(param_2 + 0x10);
              pvVar7 = (void *)((iVar9 - *(int *)(param_2 + 0x20)) + *(int *)param_2);
              if (pvVar7 == (void *)0x0) goto LAB_0071ac3e;
              local_20 = local_34._3_1_;
              local_1f = local_34._2_1_;
              local_1e = local_34._1_1_;
              local_1d = (undefined1)local_34;
              goto LAB_0071ad43;
            }
            *(undefined4 *)(*(int *)param_2 + (*(int *)(param_2 + 0x10) - *(int *)(param_2 + 0x20)))
                 = local_34;
            iVar9 = *(int *)(param_2 + 0x10);
            goto LAB_0071ac3e;
          }
          goto LAB_0071a6ae;
        }
        CUtlBuffer::Printf((CUtlBuffer *)param_2,"%u",0);
        bVar8 = *(byte *)(piVar4 + 5);
        if ((*(byte *)(param_2 + 0x15) & 1) == 0) goto LAB_0071ab50;
LAB_0071a6bc:
        CUtlBuffer::Printf((CUtlBuffer *)param_2,"%u",(uint)bVar8);
LAB_0071a6d0:
        uVar10 = piVar4[0xf];
      }
      uVar11 = uVar10 & 0xff;
      if (0xff < (int)uVar10) {
        uVar11 = 0xff;
        Warning("Warning: NavArea #%d: Truncated encounter spot list to 255\n",
                *(undefined4 *)(param_1 + 0x8c));
      }
      if ((*(byte *)(param_2 + 0x15) & 1) == 0) {
        cVar3 = CUtlBuffer::CheckPut((CUtlBuffer *)param_2,1);
        if (cVar3 != '\0') {
          *(char *)(*(int *)param_2 + (*(int *)(param_2 + 0x10) - *(int *)(param_2 + 0x20))) =
               (char)uVar11;
          *(int *)(param_2 + 0x10) = *(int *)(param_2 + 0x10) + 1;
          CUtlBuffer::AddNullTermination((CUtlBuffer *)param_2);
        }
      }
      else {
        CUtlBuffer::Printf((CUtlBuffer *)param_2,"%u",uVar11);
      }
      iVar9 = 0;
      if (0 < piVar4[0xf]) {
        do {
          pfVar1 = (float *)(piVar4[0xc] + iVar9 * 8);
          fVar2 = pfVar1[1];
          if (fVar2 == 0.0) {
            uVar6 = 0;
          }
          else {
            uVar6 = *(undefined4 *)((int)fVar2 + 0x10);
          }
          if ((*(byte *)(param_2 + 0x15) & 1) == 0) {
            local_30 = uVar6;
            cVar3 = CUtlBuffer::CheckPut((CUtlBuffer *)param_2,4);
            if (cVar3 != '\0') {
              if ((*(byte *)(param_2 + 0x34) & 1) == 0) {
                *(undefined4 *)
                 (*(int *)param_2 + (*(int *)(param_2 + 0x10) - *(int *)(param_2 + 0x20))) =
                     local_30;
                iVar12 = *(int *)(param_2 + 0x10);
              }
              else {
                iVar12 = *(int *)(param_2 + 0x10);
                pvVar7 = (void *)((iVar12 - *(int *)(param_2 + 0x20)) + *(int *)param_2);
                if (pvVar7 != (void *)0x0) {
                  local_20 = local_30._3_1_;
                  local_1f = local_30._2_1_;
                  local_1e = local_30._1_1_;
                  local_1d = (undefined1)local_30;
                  _V_memcpy(pvVar7,&local_20,4);
                  iVar12 = *(int *)(param_2 + 0x10);
                }
              }
              *(int *)(param_2 + 0x10) = iVar12 + 4;
              CUtlBuffer::AddNullTermination((CUtlBuffer *)param_2);
            }
          }
          else {
            CUtlBuffer::Printf((CUtlBuffer *)param_2,"%u",uVar6);
          }
          uVar10 = (uint)(*pfVar1 * 255.0);
          if ((*(byte *)(param_2 + 0x15) & 1) == 0) {
            cVar3 = CUtlBuffer::CheckPut((CUtlBuffer *)param_2,1);
            if (cVar3 != '\0') {
              *(char *)(*(int *)param_2 + (*(int *)(param_2 + 0x10) - *(int *)(param_2 + 0x20))) =
                   (char)uVar10;
              *(int *)(param_2 + 0x10) = *(int *)(param_2 + 0x10) + 1;
              CUtlBuffer::AddNullTermination((CUtlBuffer *)param_2);
            }
          }
          else {
            CUtlBuffer::Printf((CUtlBuffer *)param_2,"%u",uVar10 & 0xff);
          }
        } while ((iVar9 != uVar11 - 1) && (iVar9 = iVar9 + 1, iVar9 < piVar4[0xf]));
      }
      local_7c = local_7c + 1;
      piVar4 = *(int **)(param_1 + 0xd0);
    } while (local_7c < *piVar4);
  }
  iVar9 = *(int *)(param_1 + 0x94);
  local_5e = 0;
  if ((iVar9 != 0) && (0 < DAT_00fe6b50)) {
    if (iVar9 == *placeDirectory) {
      local_5e = 1;
    }
    else {
      iVar12 = 0;
      do {
        iVar5 = iVar12;
        iVar12 = iVar5 + 1;
        if (iVar12 == DAT_00fe6b50) goto LAB_0071a8e8;
      } while (iVar9 != placeDirectory[iVar12]);
      if (iVar12 < 0) {
LAB_0071a8e8:
        local_5e = 0;
      }
      else {
        local_5e = (short)iVar5 + 2;
      }
    }
  }
  iVar9 = 0;
  CUtlBuffer::Put((CUtlBuffer *)param_2,&local_5e,2);
  do {
    if ((*(byte *)(param_2 + 0x15) & 1) == 0) {
      local_2c = **(undefined4 **)(param_1 + iVar9 * 4 + 0x68);
      cVar3 = CUtlBuffer::CheckPut((CUtlBuffer *)param_2,4);
      if (cVar3 != '\0') {
        if ((*(byte *)(param_2 + 0x34) & 1) == 0) {
          *(undefined4 *)(*(int *)param_2 + (*(int *)(param_2 + 0x10) - *(int *)(param_2 + 0x20))) =
               local_2c;
          iVar12 = *(int *)(param_2 + 0x10);
        }
        else {
          iVar12 = *(int *)(param_2 + 0x10);
          pvVar7 = (void *)((iVar12 - *(int *)(param_2 + 0x20)) + *(int *)param_2);
          if (pvVar7 != (void *)0x0) {
            local_20 = local_2c._3_1_;
            local_1f = local_2c._2_1_;
            local_1e = local_2c._1_1_;
            local_1d = (undefined1)local_2c;
            _V_memcpy(pvVar7,&local_20,4);
            iVar12 = *(int *)(param_2 + 0x10);
          }
        }
        *(int *)(param_2 + 0x10) = iVar12 + 4;
        CUtlBuffer::AddNullTermination((CUtlBuffer *)param_2);
      }
    }
    else {
      CUtlBuffer::Printf((CUtlBuffer *)param_2,"%u",**(undefined4 **)(param_1 + iVar9 * 4 + 0x68));
    }
    iVar12 = 0;
    piVar4 = *(int **)(param_1 + iVar9 * 4 + 0x68);
    if (0 < *piVar4) {
LAB_0071a962:
      do {
        if ((*(byte *)(param_2 + 0x15) & 1) == 0) {
          local_28 = *(undefined4 *)(piVar4[iVar12 + 1] + 0x4c);
          cVar3 = CUtlBuffer::CheckPut((CUtlBuffer *)param_2,4);
          if (cVar3 != '\0') {
            if ((*(byte *)(param_2 + 0x34) & 1) == 0) {
              *(undefined4 *)
               (*(int *)param_2 + (*(int *)(param_2 + 0x10) - *(int *)(param_2 + 0x20))) = local_28;
              iVar5 = *(int *)(param_2 + 0x10);
            }
            else {
              iVar5 = *(int *)(param_2 + 0x10);
              pvVar7 = (void *)((iVar5 - *(int *)(param_2 + 0x20)) + *(int *)param_2);
              if (pvVar7 != (void *)0x0) {
                local_20 = local_28._3_1_;
                local_1f = local_28._2_1_;
                local_1e = local_28._1_1_;
                local_1d = (undefined1)local_28;
                _V_memcpy(pvVar7,&local_20,4);
                iVar5 = *(int *)(param_2 + 0x10);
              }
            }
            iVar12 = iVar12 + 1;
            *(int *)(param_2 + 0x10) = iVar5 + 4;
            CUtlBuffer::AddNullTermination((CUtlBuffer *)param_2);
            piVar4 = *(int **)(param_1 + iVar9 * 4 + 0x68);
            if (*piVar4 <= iVar12) break;
            goto LAB_0071a962;
          }
        }
        else {
          CUtlBuffer::Printf((CUtlBuffer *)param_2,"%u",*(undefined4 *)(piVar4[iVar12 + 1] + 0x4c));
        }
        iVar12 = iVar12 + 1;
        piVar4 = *(int **)(param_1 + iVar9 * 4 + 0x68);
      } while (iVar12 < *piVar4);
    }
    iVar9 = iVar9 + 1;
    if (iVar9 == 2) {
      iVar9 = 0;
      CUtlBuffer::Put((CUtlBuffer *)param_2,param_1 + 0xd4,4);
      CUtlBuffer::Put((CUtlBuffer *)param_2,param_1 + 0xd8,4);
      do {
        if ((*(byte *)(param_2 + 0x15) & 1) == 0) {
          local_24 = *(float *)(param_1 + iVar9 * 4 + 0xdc);
          cVar3 = CUtlBuffer::CheckPut((CUtlBuffer *)param_2,4);
          if (cVar3 != '\0') {
            if ((*(byte *)(param_2 + 0x34) & 1) == 0) {
              *(float *)(*(int *)param_2 + (*(int *)(param_2 + 0x10) - *(int *)(param_2 + 0x20))) =
                   local_24;
              iVar12 = *(int *)(param_2 + 0x10);
            }
            else {
              iVar12 = *(int *)(param_2 + 0x10);
              pvVar7 = (void *)((iVar12 - *(int *)(param_2 + 0x20)) + *(int *)param_2);
              if (pvVar7 != (void *)0x0) {
                local_20 = local_24._3_1_;
                local_1f = local_24._2_1_;
                local_1e = local_24._1_1_;
                local_1d = (undefined1)local_24;
                _V_memcpy(pvVar7,&local_20,4);
                iVar12 = *(int *)(param_2 + 0x10);
              }
            }
            *(int *)(param_2 + 0x10) = iVar12 + 4;
            CUtlBuffer::AddNullTermination((CUtlBuffer *)param_2);
          }
        }
        else {
          CUtlBuffer::Printf((CUtlBuffer *)param_2,"%f",
                             (double)*(float *)(param_1 + iVar9 * 4 + 0xdc));
        }
        iVar9 = iVar9 + 1;
      } while (iVar9 != 4);
      return;
    }
  } while( true );
}

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)