L L4D2node

InfoChangelevel::SaveEntities

0x00864d70 · 2868 bytes · __thiscall

_ZN15InfoChangelevel12SaveEntitiesEv

Decompiled

undefined (1 param)

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* InfoChangelevel::SaveEntities() */

void __thiscall InfoChangelevel::SaveEntities(InfoChangelevel *this)

{
  float fVar1;
  byte bVar2;
  code *pcVar3;
  char cVar4;
  undefined4 *puVar5;
  undefined4 uVar6;
  int *piVar7;
  int *piVar8;
  undefined **ppuVar9;
  undefined *puVar10;
  uint uVar11;
  undefined1 *puVar12;
  undefined1 *puVar13;
  undefined1 *puVar14;
  undefined4 uVar15;
  int iVar16;
  uint *puVar17;
  int iVar18;
  uint uVar19;
  int in_GS_OFFSET;
  double local_54;
  double local_4c;
  double local_44;
  undefined1 *local_30;
  undefined **local_2c;
  undefined4 local_28;
  undefined1 local_24;
  undefined1 local_23;
  undefined1 local_22;
  undefined1 local_21;
  int local_20;
  
  iVar16 = 0;
  local_20 = *(int *)(in_GS_OFFSET + 0x14);
  if (0 < (int)DAT_00ffc7e4) {
    do {
      piVar7 = *(int **)(g_SavedWeapons + iVar16 * 4);
      if (piVar7 != (int *)0x0) {
        (**(code **)(*piVar7 + 4))();
      }
      iVar16 = iVar16 + 1;
    } while (iVar16 < (int)DAT_00ffc7e4);
  }
  iVar16 = 0;
  DAT_00ffc7e4 = 0;
  CUtlMemory<SavedWeapon*,int>::Purge((CUtlMemory<SavedWeapon*,int> *)&g_SavedWeapons);
  _DAT_00ffc7e8 = g_SavedWeapons;
  if (0 < DAT_00ffc7f8) {
    do {
      piVar7 = *(int **)(g_SavedWeaponSpawns + iVar16 * 4);
      if (piVar7 != (int *)0x0) {
        (**(code **)(*piVar7 + 4))();
      }
      iVar16 = iVar16 + 1;
    } while (iVar16 < DAT_00ffc7f8);
  }
  DAT_00ffc7f8 = 0;
  CUtlMemory<SavedWeaponSpawn*,int>::Purge
            ((CUtlMemory<SavedWeaponSpawn*,int> *)&g_SavedWeaponSpawns);
  _DAT_00ffc7fc = g_SavedWeaponSpawns;
  iVar16 = DAT_00ffc7d0 + -1;
  iVar18 = iVar16 * 8;
  if (-1 < iVar16) {
    do {
      iVar16 = iVar16 + -1;
      puVar5 = (undefined4 *)(g_SavedPropPhysics + iVar18);
      iVar18 = iVar18 + -8;
      (**(code **)*puVar5)();
    } while (iVar16 != -1);
  }
  uVar19 = 0;
  DAT_00ffc7d0 = 0;
  CUtlMemory<SavedPropPhysics,int>::Purge((CUtlMemory<SavedPropPhysics,int> *)&g_SavedPropPhysics);
  _DAT_00ffc7d4 = g_SavedPropPhysics;
  g_bNeedRestore = 1;
  uVar6 = CGlobalEntityList::FindEntityByName
                    ((CGlobalEntityList *)gEntList,(CBaseEntity *)0x0,(char *)(this + 0x589),
                     (CBaseEntity *)0x0,(CBaseEntity *)0x0,(CBaseEntity *)0x0,
                     (IEntityFindFilter *)0x0);
  puVar17 = (uint *)&stack0xffffff84;
LAB_00864ed0:
  do {
    while( true ) {
      do {
        do {
          puVar17[1] = uVar19;
          *puVar17 = uVar6;
          puVar17[-1] = 0x864edf;
          uVar19 = UTIL_EntitiesInPVS((CBaseEntity *)*puVar17,(CBaseEntity *)puVar17[1]);
          if (uVar19 == 0) {
            if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {
                    /* WARNING: Subroutine does not return */
              puVar17[-1] = (uint)&LAB_00865a05;
              __stack_chk_fail();
            }
            return;
          }
        } while ((*(byte *)(uVar19 + 0x14c) & 1) != 0);
        puVar17[1] = uVar19;
        *puVar17 = (uint)this;
        puVar17[-1] = 0x864f01;
        cVar4 = IsEntitySaveable((InfoChangelevel *)*puVar17,(CBaseEntity *)puVar17[1]);
      } while (cVar4 == '\0');
      puVar17[3] = 0;
      puVar17[2] = (uint)&CWeaponCSBase::typeinfo;
      puVar17[1] = (uint)&CBaseEntity::typeinfo;
      *puVar17 = uVar19;
      puVar17[-1] = 0x864f25;
      piVar7 = (int *)__dynamic_cast();
      if (piVar7 == (int *)0x0) break;
      iVar16 = *piVar7;
      *puVar17 = (uint)piVar7;
      pcVar3 = *(code **)(iVar16 + 0x500);
      puVar17[-1] = 0x864f3a;
      piVar8 = (int *)(*pcVar3)();
      if (piVar8 == (int *)0x0) {
        iVar16 = *piVar7;
        *puVar17 = (uint)piVar7;
        pcVar3 = *(code **)(iVar16 + 0x638);
        puVar17[-1] = 0x865303;
        iVar16 = (*pcVar3)();
        if (iVar16 == 0x13) {
          *puVar17 = (uint)piVar7;
          puVar17[3] = 0;
          puVar17[2] = (uint)&CTerrorMeleeWeapon::typeinfo;
          puVar17[1] = (uint)&CWeaponCSBase::typeinfo;
          puVar17[-1] = 0x86534a;
          uVar11 = __dynamic_cast();
          if (uVar11 == 0) break;
          *puVar17 = 8;
          puVar17[-1] = 0x86535c;
          ppuVar9 = ::operator_new(*puVar17);
          puVar17[1] = uVar11;
          *puVar17 = (uint)ppuVar9;
                    /* try { // try from 00865365 to 00865369 has its CatchHandler @ 00865a35 */
          puVar17[-1] = 0x86536a;
          SavedWeapon::SavedWeapon((SavedWeapon *)*puVar17,(CWeaponCSBase *)puVar17[1]);
          *ppuVar9 = (undefined *)&PTR__SavedTerrorMeleeWeapon_00cda930;
          *puVar17 = uVar11;
                    /* try { // try from 00865373 to 00865377 has its CatchHandler @ 00865a45 */
          puVar17[-1] = 0x865378;
          uVar11 = CTerrorMeleeWeapon::GetMeleeWeaponInfoHandle((CTerrorMeleeWeapon *)*puVar17);
          puVar17[2] = uVar11;
          puVar17[1] = (uint)"melee_weapon";
          *puVar17 = (uint)ppuVar9[1];
                    /* try { // try from 0086538a to 0086538e has its CatchHandler @ 00865a5d */
          puVar17[-1] = 0x86538f;
          KeyValues::SetInt((KeyValues *)*puVar17,(char *)puVar17[1],puVar17[2]);
          local_2c = ppuVar9;
        }
        else {
          *puVar17 = 8;
          puVar17[-1] = 0x865314;
          ppuVar9 = ::operator_new(*puVar17);
          puVar17[1] = (uint)piVar7;
          *puVar17 = (uint)ppuVar9;
                    /* try { // try from 0086531d to 00865321 has its CatchHandler @ 00865a26 */
          puVar17[-1] = 0x865322;
          SavedWeapon::SavedWeapon((SavedWeapon *)*puVar17,(CWeaponCSBase *)puVar17[1]);
          local_2c = ppuVar9;
        }
      }
      else {
        *puVar17 = 0x10;
        puVar17[-1] = 0x864f50;
        ppuVar9 = ::operator_new(*puVar17);
        *ppuVar9 = (undefined *)&PTR__SavedEntity_00cda8a0;
        *puVar17 = 0x2c;
                    /* try { // try from 00864f5f to 00864f63 has its CatchHandler @ 00865a05 */
        puVar17[-1] = 0x864f64;
        puVar10 = KeyValues::operator_new((KeyValues *)*puVar17,puVar17[1]);
        puVar17[3] = 0;
        puVar17[2] = 0;
        puVar17[1] = (uint)"item";
        *puVar17 = (uint)puVar10;
                    /* try { // try from 00864f82 to 00864f86 has its CatchHandler @ 00865a0b */
        puVar17[-1] = 0x864f87;
        KeyValues::KeyValues
                  ((KeyValues *)*puVar17,(char *)puVar17[1],(IKeyValuesSystem *)puVar17[2],
                   SUB41(puVar17[3],0));
        ppuVar9[1] = puVar10;
        puVar13 = (undefined1 *)piVar8[0x1f];
        puVar17[1] = (uint)"classname";
        *puVar17 = (uint)puVar10;
        puVar12 = &DAT_00d539c2;
        if (puVar13 != (undefined1 *)0x0) {
          puVar12 = puVar13;
        }
        puVar17[2] = (uint)puVar12;
                    /* try { // try from 00864fa9 to 008650d6 has its CatchHandler @ 00865a05 */
        puVar17[-1] = 0x864fae;
        KeyValues::SetString((KeyValues *)*puVar17,(char *)puVar17[1],(char *)puVar17[2]);
        if ((*(byte *)((int)piVar8 + 0x14d) & 8) != 0) {
          *puVar17 = (uint)piVar8;
          puVar17[-1] = 0x865280;
          CBaseEntity::CalcAbsolutePosition((CBaseEntity *)*puVar17);
        }
        *(double *)(puVar17 + 5) = (double)(float)piVar8[0xba];
        *(double *)(puVar17 + 3) = (double)(float)piVar8[0xb9];
        fVar1 = (float)piVar8[0xb8];
        *puVar17 = (uint)"%f %f %f";
        *(double *)(puVar17 + 1) = (double)fVar1;
        puVar17[-1] = 0x864ffa;
        uVar11 = UTIL_VarArgs((char *)*puVar17);
        puVar17[2] = uVar11;
        puVar17[1] = (uint)"pos";
        *puVar17 = (uint)ppuVar9[1];
        puVar17[-1] = 0x865011;
        KeyValues::SetString((KeyValues *)*puVar17,(char *)puVar17[1],(char *)puVar17[2]);
        if ((*(byte *)((int)piVar8 + 0x14d) & 8) != 0) {
          *puVar17 = (uint)piVar8;
          puVar17[-1] = 0x865270;
          CBaseEntity::CalcAbsolutePosition((CBaseEntity *)*puVar17);
        }
        *(double *)(puVar17 + 5) = (double)(float)piVar8[0xe1];
        *(double *)(puVar17 + 3) = (double)(float)piVar8[0xe0];
        fVar1 = (float)piVar8[0xdf];
        *puVar17 = (uint)"%f %f %f";
        *(double *)(puVar17 + 1) = (double)fVar1;
        puVar17[-1] = 0x86505d;
        uVar11 = UTIL_VarArgs((char *)*puVar17);
        puVar17[2] = uVar11;
        puVar17[1] = (uint)"angles";
        *puVar17 = (uint)ppuVar9[1];
        puVar17[-1] = 0x865074;
        KeyValues::SetString((KeyValues *)*puVar17,(char *)puVar17[1],(char *)puVar17[2]);
        if ((*(byte *)((int)piVar8 + 0x14d) & 0x10) != 0) {
          *puVar17 = (uint)piVar8;
                    /* try { // try from 0086525b to 0086527f has its CatchHandler @ 00865a05 */
          puVar17[-1] = 0x865260;
          CBaseEntity::CalcAbsoluteVelocity((CBaseEntity *)*puVar17);
        }
        *(double *)(puVar17 + 5) = (double)(float)piVar8[0x9f];
        *(double *)(puVar17 + 3) = (double)(float)piVar8[0x9e];
        fVar1 = (float)piVar8[0x9d];
        *puVar17 = (uint)"%f %f %f";
        *(double *)(puVar17 + 1) = (double)fVar1;
        puVar17[-1] = 0x8650c0;
        uVar11 = UTIL_VarArgs((char *)*puVar17);
        puVar17[2] = uVar11;
        puVar17[1] = (uint)"vel";
        *puVar17 = (uint)ppuVar9[1];
        puVar17[-1] = 0x8650d7;
        KeyValues::SetString((KeyValues *)*puVar17,(char *)puVar17[1],(char *)puVar17[2]);
        *ppuVar9 = (undefined *)&PTR__SavedWeapon_00cda8e8;
        if ((*(byte *)((int)piVar8 + 0x14d) & 8) == 0) {
          local_4c = (double)(float)piVar8[0xba];
LAB_008650fa:
          local_44 = (double)(float)piVar8[0xb9];
        }
        else {
          *puVar17 = (uint)piVar8;
                    /* try { // try from 0086528b to 0086528f has its CatchHandler @ 008659d7 */
          puVar17[-1] = 0x865290;
          CBaseEntity::CalcAbsolutePosition((CBaseEntity *)*puVar17);
          local_4c = (double)(float)piVar8[0xba];
          if ((*(byte *)((int)piVar8 + 0x14d) & 8) == 0) goto LAB_008650fa;
          *puVar17 = (uint)piVar8;
                    /* try { // try from 008652b0 to 008652b4 has its CatchHandler @ 008659d5 */
          puVar17[-1] = 0x8652b5;
          CBaseEntity::CalcAbsolutePosition((CBaseEntity *)*puVar17);
          local_44 = (double)(float)piVar8[0xb9];
          if ((*(byte *)((int)piVar8 + 0x14d) & 8) != 0) {
            *puVar17 = (uint)piVar8;
                    /* try { // try from 008652d5 to 008652d9 has its CatchHandler @ 008659ac */
            puVar17[-1] = 0x8652da;
            CBaseEntity::CalcAbsolutePosition((CBaseEntity *)*puVar17);
          }
        }
        puVar13 = (undefined1 *)piVar8[0x1f];
        fVar1 = (float)piVar8[0xb8];
        puVar17[1] = (uint)"Saving %s at %.0f, %.0f, %.0f\n";
        *(double *)(puVar17 + 3) = (double)fVar1;
        *(double *)(puVar17 + 7) = local_4c;
        *(double *)(puVar17 + 5) = local_44;
        puVar12 = &DAT_00d539c2;
        if (puVar13 != (undefined1 *)0x0) {
          puVar12 = puVar13;
        }
        local_24 = 0;
        local_23 = 0xff;
        puVar17[2] = (uint)puVar12;
        *puVar17 = (uint)&local_24;
        local_22 = 0xc0;
        local_21 = 0xff;
                    /* try { // try from 00865160 to 00865164 has its CatchHandler @ 00865a09 */
        puVar17[-1] = 0x865165;
        ConColorMsg((Color *)*puVar17,(char *)puVar17[1]);
        uVar11 = piVar8[0x508];
        puVar17[1] = (uint)"currentMagazine";
        puVar17[2] = uVar11;
        *puVar17 = (uint)ppuVar9[1];
                    /* try { // try from 0086517d to 00865181 has its CatchHandler @ 00865a24 */
        puVar17[-1] = 0x865182;
        KeyValues::SetInt((KeyValues *)*puVar17,(char *)puVar17[1],puVar17[2]);
        uVar11 = piVar8[0x53f];
        puVar17[1] = (uint)"extraAmmo";
        puVar17[2] = uVar11;
        *puVar17 = (uint)ppuVar9[1];
                    /* try { // try from 0086519a to 0086519e has its CatchHandler @ 00865a22 */
        puVar17[-1] = 0x86519f;
        KeyValues::SetInt((KeyValues *)*puVar17,(char *)puVar17[1],puVar17[2]);
        uVar11 = piVar8[0x116];
        puVar17[1] = (uint)"weaponskin";
        puVar17[2] = uVar11;
        *puVar17 = (uint)ppuVar9[1];
                    /* try { // try from 008651b7 to 008651bb has its CatchHandler @ 00865a1c */
        puVar17[-1] = 0x8651bc;
        KeyValues::SetInt((KeyValues *)*puVar17,(char *)puVar17[1],puVar17[2]);
        *ppuVar9 = (undefined *)&PTR__SavedTerrorGun_00cda918;
        ppuVar9[3] = (undefined *)0x0;
        iVar16 = *piVar8;
        *puVar17 = (uint)piVar8;
                    /* try { // try from 008651d4 to 008651d9 has its CatchHandler @ 00865a1a */
        pcVar3 = *(code **)(iVar16 + 0x674);
        puVar17[-1] = 0x8651da;
        uVar11 = (*pcVar3)();
        puVar17[1] = (uint)"dual";
        puVar17[2] = uVar11 & 0xff;
        *puVar17 = (uint)ppuVar9[1];
                    /* try { // try from 008651ef to 008651f3 has its CatchHandler @ 008659f6 */
        puVar17[-1] = 0x8651f4;
        KeyValues::SetInt((KeyValues *)*puVar17,(char *)puVar17[1],puVar17[2]);
        bVar2 = *(byte *)((int)piVar8 + 0x17e2);
        puVar17[1] = (uint)"reloaded";
        puVar17[2] = (uint)(bVar2 ^ 1);
        *puVar17 = (uint)ppuVar9[1];
                    /* try { // try from 00865213 to 00865217 has its CatchHandler @ 008659f4 */
        puVar17[-1] = 0x865218;
        KeyValues::SetInt((KeyValues *)*puVar17,(char *)puVar17[1],puVar17[2]);
        *puVar17 = (uint)piVar8;
        puVar17[1] = (uint)(ppuVar9 + 3);
                    /* try { // try from 00865222 to 00865226 has its CatchHandler @ 008659d9 */
        puVar17[-1] = 0x865227;
        CTerrorGun::GetUpgradeBitVec((CTerrorGun *)*puVar17,(CBitVec *)puVar17[1]);
        ppuVar9[2] = (undefined *)(uint)*(byte *)(piVar8 + 0x5e4);
        local_2c = ppuVar9;
      }
      *puVar17 = (uint)&g_SavedWeapons;
      puVar17[2] = (uint)&local_2c;
      puVar17[1] = DAT_00ffc7e4;
      puVar17[-1] = 0x865250;
      CUtlVector<SavedWeapon*,CUtlMemory<SavedWeapon*,int>>::InsertBefore
                ((CUtlVector<SavedWeapon*,CUtlMemory<SavedWeapon*,int>> *)*puVar17,puVar17[1],
                 (SavedWeapon **)puVar17[2]);
    }
    puVar17[3] = 0;
    puVar17[2] = (uint)&CWeaponMeleeSpawn::typeinfo;
    puVar17[1] = (uint)&CBaseEntity::typeinfo;
    *puVar17 = uVar19;
    puVar17[-1] = 0x8653b1;
    piVar7 = (int *)__dynamic_cast();
    if (piVar7 == (int *)0x0) {
      puVar17[3] = 0;
      puVar17[2] = (uint)&CWeaponSpawn::typeinfo;
      puVar17[1] = (uint)&CBaseEntity::typeinfo;
      *puVar17 = uVar19;
      puVar17[-1] = 0x86572e;
      uVar11 = __dynamic_cast();
      if (uVar11 == 0) {
        puVar17[1] = uVar19;
        *puVar17 = (uint)this;
        puVar17[-1] = 0x8657d4;
        cVar4 = CBaseTrigger::IsTouching((CBaseTrigger *)*puVar17,(CBaseEntity *)puVar17[1]);
        if (cVar4 != '\0') {
          puVar17[3] = 0;
          puVar17[2] = (uint)&CPhysicsProp::typeinfo;
          puVar17[1] = (uint)&CBaseEntity::typeinfo;
          *puVar17 = uVar19;
          puVar17[-1] = 0x8657fc;
          piVar7 = (int *)__dynamic_cast();
          if (piVar7 != (int *)0x0) {
            puVar17[1] = (uint)piVar7;
            *puVar17 = *(undefined4 *)(TheDirector + 0x62c);
            puVar17[-1] = 0x86581d;
            cVar4 = CDirectorItemManager::ShouldTransitionPhysicsProp
                              ((CDirectorItemManager *)*puVar17,(CPhysicsProp *)puVar17[1]);
            if (cVar4 != '\0') {
              puVar17[1] = (uint)piVar7;
              *puVar17 = (uint)&local_2c;
              puVar17[-1] = 0x865834;
              SavedEntity::SavedEntity((SavedEntity *)*puVar17,(CBaseEntity *)puVar17[1]);
              local_2c = &PTR__SavedPropPhysics_00cda900;
              iVar16 = *piVar7;
              puVar17[1] = (uint)piVar7;
              *puVar17 = (uint)&local_30;
                    /* try { // try from 00865847 to 00865870 has its CatchHandler @ 008658eb */
              pcVar3 = *(code **)(iVar16 + 0x20);
              puVar17[-1] = 0x86584a;
              (*pcVar3)();
              *puVar17 = (uint)"model";
              puVar13 = &DAT_00d539c2;
              if (local_30 != (undefined1 *)0x0) {
                puVar13 = local_30;
              }
              puVar17[1] = (uint)puVar13;
              puVar17[-1] = local_28;
              puVar17[-2] = 0x865871;
              KeyValues::SetString((KeyValues *)puVar17[-1],(char *)*puVar17,(char *)puVar17[1]);
              puVar17[-1] = (uint)&g_SavedPropPhysics;
              puVar17[1] = (uint)&local_2c;
              *puVar17 = DAT_00ffc7d0;
                    /* try { // try from 00865888 to 0086588c has its CatchHandler @ 008658cf */
              puVar17[-2] = 0x86588d;
              CUtlVector<SavedPropPhysics,CUtlMemory<SavedPropPhysics,int>>::InsertBefore
                        ((CUtlVector<SavedPropPhysics,CUtlMemory<SavedPropPhysics,int>> *)
                         puVar17[-1],*puVar17,(SavedPropPhysics *)puVar17[1]);
              local_2c = &PTR__SavedEntity_00cda8a0;
              puVar17[-1] = local_28;
              puVar17[-2] = 0x86589f;
              KeyValues::deleteThis();
              puVar17 = puVar17 + -1;
            }
          }
        }
        goto LAB_00864ed0;
      }
      *puVar17 = 8;
      puVar17[-1] = 0x865744;
      ppuVar9 = ::operator_new(*puVar17);
      puVar17[1] = uVar11;
      *puVar17 = (uint)ppuVar9;
                    /* try { // try from 0086574d to 00865751 has its CatchHandler @ 00865909 */
      puVar17[-1] = 0x865752;
      SavedWeaponSpawn::SavedWeaponSpawn((SavedWeaponSpawn *)*puVar17,(CWeaponSpawn *)puVar17[1]);
    }
    else {
      *puVar17 = 8;
      puVar17[-1] = 0x8653c7;
      ppuVar9 = ::operator_new(*puVar17);
      *ppuVar9 = (undefined *)&PTR__SavedEntity_00cda8a0;
      *puVar17 = 0x2c;
                    /* try { // try from 008653d6 to 008653da has its CatchHandler @ 008659a7 */
      puVar17[-1] = 0x8653db;
      puVar10 = KeyValues::operator_new((KeyValues *)*puVar17,puVar17[1]);
      puVar17[3] = 0;
      puVar17[2] = 0;
      puVar17[1] = (uint)"item";
      *puVar17 = (uint)puVar10;
                    /* try { // try from 008653f9 to 008653fd has its CatchHandler @ 00865995 */
      puVar17[-1] = 0x8653fe;
      KeyValues::KeyValues
                ((KeyValues *)*puVar17,(char *)puVar17[1],(IKeyValuesSystem *)puVar17[2],
                 SUB41(puVar17[3],0));
      ppuVar9[1] = puVar10;
      puVar13 = (undefined1 *)piVar7[0x1f];
      puVar17[1] = (uint)"classname";
      *puVar17 = (uint)puVar10;
      puVar12 = &DAT_00d539c2;
      if (puVar13 != (undefined1 *)0x0) {
        puVar12 = puVar13;
      }
      puVar17[2] = (uint)puVar12;
                    /* try { // try from 00865420 to 0086554d has its CatchHandler @ 008659a7 */
      puVar17[-1] = 0x865425;
      KeyValues::SetString((KeyValues *)*puVar17,(char *)puVar17[1],(char *)puVar17[2]);
      if ((*(byte *)((int)piVar7 + 0x14d) & 8) != 0) {
        *puVar17 = (uint)piVar7;
        puVar17[-1] = 0x8657c0;
        CBaseEntity::CalcAbsolutePosition((CBaseEntity *)*puVar17);
      }
      *(double *)(puVar17 + 5) = (double)(float)piVar7[0xba];
      *(double *)(puVar17 + 3) = (double)(float)piVar7[0xb9];
      fVar1 = (float)piVar7[0xb8];
      *puVar17 = (uint)"%f %f %f";
      *(double *)(puVar17 + 1) = (double)fVar1;
      puVar17[-1] = 0x865471;
      uVar11 = UTIL_VarArgs((char *)*puVar17);
      puVar17[2] = uVar11;
      puVar17[1] = (uint)"pos";
      *puVar17 = (uint)ppuVar9[1];
      puVar17[-1] = 0x865488;
      KeyValues::SetString((KeyValues *)*puVar17,(char *)puVar17[1],(char *)puVar17[2]);
      if ((*(byte *)((int)piVar7 + 0x14d) & 8) != 0) {
        *puVar17 = (uint)piVar7;
                    /* try { // try from 008657ae to 008657bf has its CatchHandler @ 008659a7 */
        puVar17[-1] = 0x8657b3;
        CBaseEntity::CalcAbsolutePosition((CBaseEntity *)*puVar17);
      }
      *(double *)(puVar17 + 5) = (double)(float)piVar7[0xe1];
      *(double *)(puVar17 + 3) = (double)(float)piVar7[0xe0];
      fVar1 = (float)piVar7[0xdf];
      *puVar17 = (uint)"%f %f %f";
      *(double *)(puVar17 + 1) = (double)fVar1;
      puVar17[-1] = 0x8654d4;
      uVar11 = UTIL_VarArgs((char *)*puVar17);
      puVar17[2] = uVar11;
      puVar17[1] = (uint)"angles";
      *puVar17 = (uint)ppuVar9[1];
      puVar17[-1] = 0x8654eb;
      KeyValues::SetString((KeyValues *)*puVar17,(char *)puVar17[1],(char *)puVar17[2]);
      if ((*(byte *)((int)piVar7 + 0x14d) & 0x10) != 0) {
        *puVar17 = (uint)piVar7;
                    /* try { // try from 00865704 to 00865708 has its CatchHandler @ 008659a7 */
        puVar17[-1] = 0x865709;
        CBaseEntity::CalcAbsoluteVelocity((CBaseEntity *)*puVar17);
      }
      *(double *)(puVar17 + 5) = (double)(float)piVar7[0x9f];
      *(double *)(puVar17 + 3) = (double)(float)piVar7[0x9e];
      fVar1 = (float)piVar7[0x9d];
      *puVar17 = (uint)"%f %f %f";
      *(double *)(puVar17 + 1) = (double)fVar1;
      puVar17[-1] = 0x865537;
      uVar11 = UTIL_VarArgs((char *)*puVar17);
      puVar17[2] = uVar11;
      puVar17[1] = (uint)"vel";
      *puVar17 = (uint)ppuVar9[1];
      puVar17[-1] = 0x86554e;
      KeyValues::SetString((KeyValues *)*puVar17,(char *)puVar17[1],(char *)puVar17[2]);
      *ppuVar9 = (undefined *)&PTR__SavedWeaponSpawn_00cda8b8;
      iVar16 = *piVar7;
      puVar17[1] = (uint)piVar7;
      *puVar17 = (uint)&local_30;
                    /* try { // try from 00865560 to 00865562 has its CatchHandler @ 00865985 */
      pcVar3 = *(code **)(iVar16 + 0x20);
      puVar17[-1] = 0x865563;
      (*pcVar3)();
      puVar13 = local_30;
      if (local_30 == (undefined1 *)0x0) {
        puVar13 = &DAT_00d539c2;
      }
      if ((*(byte *)((int)piVar7 + 0x14d) & 8) == 0) {
        local_4c = (double)(float)piVar7[0xba];
LAB_00865593:
        local_54 = (double)(float)piVar7[0xb9];
      }
      else {
        puVar17[-1] = (uint)piVar7;
                    /* try { // try from 00865757 to 0086575b has its CatchHandler @ 00865907 */
        puVar17[-2] = 0x86575c;
        CBaseEntity::CalcAbsolutePosition((CBaseEntity *)puVar17[-1]);
        local_4c = (double)(float)piVar7[0xba];
        if ((*(byte *)((int)piVar7 + 0x14d) & 8) == 0) goto LAB_00865593;
        puVar17[-1] = (uint)piVar7;
                    /* try { // try from 0086577c to 00865780 has its CatchHandler @ 008658cd */
        puVar17[-2] = 0x865781;
        CBaseEntity::CalcAbsolutePosition((CBaseEntity *)puVar17[-1]);
        local_54 = (double)(float)piVar7[0xb9];
        if ((*(byte *)((int)piVar7 + 0x14d) & 8) != 0) {
          puVar17[-1] = (uint)piVar7;
                    /* try { // try from 008657a1 to 008657a5 has its CatchHandler @ 008658a4 */
          puVar17[-2] = 0x8657a6;
          CBaseEntity::CalcAbsolutePosition((CBaseEntity *)puVar17[-1]);
        }
      }
      puVar12 = (undefined1 *)piVar7[0x1f];
      *(double *)(puVar17 + 2) = (double)(float)piVar7[0xb8];
      *puVar17 = (uint)"Saving %s at %.0f, %.0f, %.0f (model %s)\n";
      local_24 = 0;
      *(double *)(puVar17 + 6) = local_4c;
      puVar14 = &DAT_00d539c2;
      if (puVar12 != (undefined1 *)0x0) {
        puVar14 = puVar12;
      }
      puVar17[8] = (uint)puVar13;
      *(double *)(puVar17 + 4) = local_54;
      puVar17[1] = (uint)puVar14;
      puVar17[-1] = (uint)&local_24;
      local_23 = 0xff;
      local_22 = 0xc0;
      local_21 = 0xff;
                    /* try { // try from 00865600 to 00865604 has its CatchHandler @ 00865975 */
      puVar17[-2] = 0x865605;
      ConColorMsg((Color *)puVar17[-1],(char *)*puVar17);
      uVar11 = piVar7[0x513];
      *puVar17 = (uint)"itemCount";
      puVar17[1] = uVar11;
      puVar17[-1] = (uint)ppuVar9[1];
                    /* try { // try from 0086561d to 00865621 has its CatchHandler @ 00865965 */
      puVar17[-2] = 0x865622;
      KeyValues::SetInt((KeyValues *)puVar17[-1],(char *)*puVar17,puVar17[1]);
      bVar2 = *(byte *)(piVar7 + 0x35);
      *puVar17 = (uint)"shadow";
      puVar17[1] = (uint)((bVar2 & 0x10) == 0);
      puVar17[-1] = (uint)ppuVar9[1];
                    /* try { // try from 00865640 to 00865644 has its CatchHandler @ 00865955 */
      puVar17[-2] = 0x865645;
      KeyValues::SetInt((KeyValues *)puVar17[-1],(char *)*puVar17,puVar17[1]);
      iVar16 = *piVar7;
      *puVar17 = (uint)piVar7;
      puVar17[-1] = (uint)&local_30;
                    /* try { // try from 00865651 to 00865653 has its CatchHandler @ 00865945 */
      pcVar3 = *(code **)(iVar16 + 0x20);
      puVar17[-2] = 0x865654;
      (*pcVar3)();
      puVar17[-1] = (uint)"model";
      puVar13 = &DAT_00d539c2;
      if (local_30 != (undefined1 *)0x0) {
        puVar13 = local_30;
      }
      *puVar17 = (uint)puVar13;
      puVar17[-2] = (uint)ppuVar9[1];
                    /* try { // try from 00865676 to 0086567a has its CatchHandler @ 00865935 */
      puVar17[-3] = 0x86567b;
      KeyValues::SetString((KeyValues *)puVar17[-2],(char *)puVar17[-1],(char *)*puVar17);
      iVar16 = *piVar7;
      puVar17[-2] = (uint)piVar7;
                    /* try { // try from 00865680 to 00865685 has its CatchHandler @ 00865929 */
      pcVar3 = *(code **)(iVar16 + 0x3cc);
      puVar17[-3] = 0x865686;
      uVar15 = (*pcVar3)();
      *puVar17 = uVar15;
      puVar17[-1] = (uint)"weaponID";
      puVar17[-2] = (uint)ppuVar9[1];
                    /* try { // try from 00865698 to 0086569c has its CatchHandler @ 00865924 */
      puVar17[-3] = 0x86569d;
      KeyValues::SetInt((KeyValues *)puVar17[-2],(char *)puVar17[-1],*puVar17);
      iVar16 = piVar7[0x514];
      puVar17[-1] = (uint)"weaponskin";
      *puVar17 = iVar16;
      puVar17[-2] = (uint)ppuVar9[1];
                    /* try { // try from 008656b5 to 008656b9 has its CatchHandler @ 00865922 */
      puVar17[-3] = 0x8656ba;
      KeyValues::SetInt((KeyValues *)puVar17[-2],(char *)puVar17[-1],*puVar17);
      *ppuVar9 = (undefined *)&PTR__SavedMeleeWeaponSpawn_00cda8d0;
      iVar16 = piVar7[0x51a];
      puVar17[-1] = (uint)"melee_weapon";
      *puVar17 = iVar16;
      puVar17[-2] = (uint)ppuVar9[1];
                    /* try { // try from 008656d8 to 008656dc has its CatchHandler @ 0086590d */
      puVar17[-3] = 0x8656dd;
      KeyValues::SetInt((KeyValues *)puVar17[-2],(char *)puVar17[-1],*puVar17);
      puVar17 = puVar17 + -2;
    }
    *puVar17 = (uint)&g_SavedWeaponSpawns;
    puVar17[2] = (uint)&local_2c;
    puVar17[1] = DAT_00ffc7f8;
    puVar17[-1] = 0x8656fc;
    local_2c = ppuVar9;
    CUtlVector<SavedWeaponSpawn*,CUtlMemory<SavedWeaponSpawn*,int>>::InsertBefore
              ((CUtlVector<SavedWeaponSpawn*,CUtlMemory<SavedWeaponSpawn*,int>> *)*puVar17,
               puVar17[1],(SavedWeaponSpawn **)puVar17[2]);
  } 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)