L L4D2node

VProfPlayback_SetPlaybackTick

0x00234a60 · 2465 bytes · __cdecl

_Z29VProfPlayback_SetPlaybackTicki

Decompiled

undefined (1 param)

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

int VProfPlayback_SetPlaybackTick(int param_1)

{
  CVProfNode *pCVar1;
  longlong lVar2;
  char cVar3;
  int iVar4;
  uint uVar5;
  int iVar6;
  undefined8 uVar7;
  byte local_32;
  byte local_31;
  ushort local_30;
  ushort local_2e;
  int local_2c;
  uint local_28;
  undefined1 local_24;
  undefined1 local_23;
  undefined1 local_22;
  undefined1 local_21;
  undefined1 local_20;
  undefined1 local_1f;
  undefined1 local_1e;
  undefined1 local_1d;
  
  if (g_VProfRecorder._6624_4_ != 2) {
    return 0;
  }
  g_VProfRecorder[0x19fc] = 0;
  if (param_1 == g_VProfRecorder._6636_4_) {
    iVar4 = 1;
    goto LAB_00234aa7;
  }
  if (param_1 < (int)g_VProfRecorder._6636_4_) {
    g_VProfRecorder._6636_4_ = 0xffffffff;
    CVProfile::Term();
    g_VProfRecorder[0x19fc] = 1;
    (**(code **)(*(int *)(g_pFileSystem + 4) + 0x10))
              (g_pFileSystem + 4,g_VProfRecorder._6628_4_,g_VProfRecorder._6640_4_,0);
    CVProfRecorder::Playback_ReadTick((CVProfRecorder *)g_VProfRecorder,-1,(bool *)0x0);
    if ((int)g_VProfRecorder._6636_4_ < param_1) goto LAB_00234a94;
  }
  else {
LAB_00234a94:
    do {
      if (param_1 <= (int)g_VProfRecorder._6636_4_) break;
      if (g_VProfRecorder._6624_4_ != 2) {
LAB_00234aa5:
        iVar4 = 0;
        goto LAB_00234aa7;
      }
      if ((g_VProfRecorder[0x1a0c] & 1) == 0) {
        iVar4 = (*(code *)**(undefined4 **)(g_pFileSystem + 4))
                          (g_pFileSystem + 4,&local_28,1,g_VProfRecorder._6628_4_);
      }
      else {
        iVar4 = (*(code *)**(undefined4 **)(g_pFileSystem + 4))(g_pFileSystem + 4,&local_24);
        local_20 = local_24;
        _V_memcpy(&local_28,&local_20,1);
      }
      if ((iVar4 != 1) || ((char)local_28 == '\x05')) {
        Msg("VPROF playback finished.\n");
        g_VProfRecorder[0x19f4] = '\x01';
        break;
      }
      if ((char)local_28 != '\0') {
        if ((g_VProfRecorder._6624_4_ - 1 < 2) && (g_VProfRecorder._6628_4_ != 0)) {
          if (g_VProfRecorder._6624_4_ == 1) {
            g_VProfRecorder._6660_4_ = g_VProfRecorder._6660_4_ + 1;
          }
          (**(code **)(*(int *)(g_pFileSystem + 4) + 0xc))
                    (g_pFileSystem + 4,g_VProfRecorder._6628_4_);
        }
        g_VProfRecorder._6624_4_ = 0;
        g_VProfRecorder._6628_4_ = 0;
        g_pVProfileForDisplay = &g_VProfCurrentProfile;
        g_VProfRecorder._6636_4_ = 0xffffffff;
        g_VProfRecorder[0x19fc] = 1;
        CVProfile::Term();
        Warning("VPROF PLAYBACK ASSERT (%s, line %d) - stopping playback.\n",
                "/data/src/engine/./vprof_record.cpp",0x22b);
        goto LAB_00234aa5;
      }
      local_2c = g_VProfRecorder._6636_4_;
      if ((g_VProfRecorder[0x1a0c] & 1) == 0) {
        (*(code *)**(undefined4 **)(g_pFileSystem + 4))
                  (g_pFileSystem + 4,&local_2c,4,g_VProfRecorder._6628_4_);
      }
      else {
        (*(code *)**(undefined4 **)(g_pFileSystem + 4))
                  (g_pFileSystem + 4,&local_24,4,g_VProfRecorder._6628_4_);
        local_20 = local_21;
        local_1f = local_22;
        local_1e = local_23;
        local_1d = local_24;
        _V_memcpy(&local_2c,&local_20,4);
      }
      if ((param_1 != -1) && (param_1 < local_2c)) {
        (**(code **)(*(int *)(g_pFileSystem + 4) + 0x10))
                  (g_pFileSystem + 4,g_VProfRecorder._6628_4_,0xfffffffb,1);
        break;
      }
      g_VProfRecorder._6636_4_ = local_2c;
LAB_00234be0:
      if ((g_VProfRecorder[0x1a0c] & 1) == 0) {
        iVar4 = (*(code *)**(undefined4 **)(g_pFileSystem + 4))
                          (g_pFileSystem + 4,&local_28,1,g_VProfRecorder._6628_4_);
      }
      else {
        iVar4 = (*(code *)**(undefined4 **)(g_pFileSystem + 4))(g_pFileSystem + 4,&local_24);
        local_20 = local_24;
        _V_memcpy(&local_28,&local_20,1);
      }
      if (iVar4 != 1) {
LAB_00234c38:
        if ((g_VProfRecorder._6624_4_ - 1 < 2) && (g_VProfRecorder._6628_4_ != 0)) {
          if (g_VProfRecorder._6624_4_ == 1) {
            g_VProfRecorder._6660_4_ = g_VProfRecorder._6660_4_ + 1;
          }
          (**(code **)(*(int *)(g_pFileSystem + 4) + 0xc))
                    (g_pFileSystem + 4,g_VProfRecorder._6628_4_);
        }
        g_VProfRecorder._6624_4_ = 0;
        g_VProfRecorder._6628_4_ = 0;
        g_pVProfileForDisplay = &g_VProfCurrentProfile;
        g_VProfRecorder._6636_4_ = 0xffffffff;
        g_VProfRecorder[0x19fc] = 1;
        CVProfile::Term();
        Warning("VPROF PLAYBACK ASSERT (%s, line %d) - stopping playback.\n",
                "/data/src/engine/./vprof_record.cpp",0x254);
        goto LAB_00234aa5;
      }
      if ((char)local_28 != '\x04') {
        if ((char)local_28 == '\x02') {
          cVar3 = CVProfRecorder::Playback_ReadAddBudgetGroup((CVProfRecorder *)g_VProfRecorder);
joined_r0x00234fee:
          if (cVar3 == '\0') goto LAB_00234aa5;
        }
        else {
          if ((char)local_28 == '\x01') {
            cVar3 = CVProfRecorder::Playback_ReadAddNode((CVProfRecorder *)g_VProfRecorder);
            goto joined_r0x00234fee;
          }
          if ((char)local_28 != '\x03') goto LAB_00234c38;
          if ((g_VProfRecorder[0x1a0c] & 1) == 0) {
            iVar4 = (*(code *)**(undefined4 **)(g_pFileSystem + 4))
                              (g_pFileSystem + 4,&local_32,1,g_VProfRecorder._6628_4_);
          }
          else {
            iVar4 = (*(code *)**(undefined4 **)(g_pFileSystem + 4))(g_pFileSystem + 4,&local_24);
            local_20 = local_24;
            _V_memcpy(&local_32,&local_20,1);
          }
          if (iVar4 != 1) goto LAB_00234aa5;
          uVar5 = (uint)local_32;
          if (local_32 == 0xff) {
            if ((g_VProfRecorder[0x1a0c] & 1) == 0) {
              iVar4 = (*(code *)**(undefined4 **)(g_pFileSystem + 4))
                                (g_pFileSystem + 4,&local_28,2,g_VProfRecorder._6628_4_);
            }
            else {
              iVar4 = (*(code *)**(undefined4 **)(g_pFileSystem + 4))(g_pFileSystem + 4,&local_24);
              local_20 = local_23;
              local_1f = local_24;
              _V_memcpy(&local_28,&local_20,2);
            }
            if (iVar4 != 2) goto LAB_00234aa5;
            uVar5 = local_28 & 0xffff;
          }
          g_VProfRecorder._4176_4_ = uVar5;
          g_VProfRecorder._4188_4_ = uVar5;
          if ((g_VProfRecorder[0x1a0c] & 1) == 0) {
            iVar4 = (*(code *)**(undefined4 **)(g_pFileSystem + 4))
                              (g_pFileSystem + 4,&local_30,2,g_VProfRecorder._6628_4_);
          }
          else {
            iVar4 = (*(code *)**(undefined4 **)(g_pFileSystem + 4))(g_pFileSystem + 4,&local_24);
            local_20 = local_23;
            local_1f = local_24;
            _V_memcpy(&local_30,&local_20,2);
          }
          if (iVar4 != 2) goto LAB_00234aa5;
          uVar5 = (uint)local_30;
          if (local_30 == 0xffff) {
            if ((g_VProfRecorder[0x1a0c] & 1) == 0) {
              iVar4 = (*(code *)**(undefined4 **)(g_pFileSystem + 4))
                                (g_pFileSystem + 4,&local_28,4,g_VProfRecorder._6628_4_);
            }
            else {
              iVar4 = (*(code *)**(undefined4 **)(g_pFileSystem + 4))(g_pFileSystem + 4,&local_24);
              local_20 = local_21;
              local_1f = local_22;
              local_1e = local_23;
              local_1d = local_24;
              _V_memcpy(&local_28,&local_20,4);
            }
            uVar5 = local_28;
            if (iVar4 != 4) goto LAB_00234aa5;
          }
          lVar2 = (ulonglong)(uVar5 * 4) * (ulonglong)_g_ClockSpeed;
          uVar7 = __udivdi3((int)lVar2,(int)((ulonglong)lVar2 >> 0x20) + _vswprintf * uVar5 * 4,
                            1000000,0);
          g_VProfRecorder._4180_8_ = uVar7;
          g_VProfRecorder._4192_8_ = uVar7;
          for (iVar4 = g_VProfRecorder._4224_4_; iVar4 != 0; iVar4 = *(int *)(iVar4 + 0x6c)) {
            if ((g_VProfRecorder[0x1a0c] & 1) == 0) {
              iVar6 = (*(code *)**(undefined4 **)(g_pFileSystem + 4))
                                (g_pFileSystem + 4,&local_31,1,g_VProfRecorder._6628_4_);
            }
            else {
              iVar6 = (*(code *)**(undefined4 **)(g_pFileSystem + 4))(g_pFileSystem + 4,&local_24);
              local_20 = local_24;
              _V_memcpy(&local_31,&local_20,1);
            }
            if (iVar6 != 1) goto LAB_00234aa5;
            uVar5 = (uint)local_31;
            if (local_31 == 0xff) {
              if ((g_VProfRecorder[0x1a0c] & 1) == 0) {
                iVar6 = (*(code *)**(undefined4 **)(g_pFileSystem + 4))
                                  (g_pFileSystem + 4,&local_28,2,g_VProfRecorder._6628_4_);
              }
              else {
                iVar6 = (*(code *)**(undefined4 **)(g_pFileSystem + 4))(g_pFileSystem + 4,&local_24)
                ;
                local_20 = local_23;
                local_1f = local_24;
                _V_memcpy(&local_28,&local_20,2);
              }
              if (iVar6 != 2) goto LAB_00234aa5;
              uVar5 = local_28 & 0xffff;
              *(uint *)(iVar4 + 0x38) = uVar5;
            }
            else {
              *(uint *)(iVar4 + 0x38) = uVar5;
            }
            *(uint *)(iVar4 + 0x44) = uVar5;
            if ((g_VProfRecorder[0x1a0c] & 1) == 0) {
              iVar6 = (*(code *)**(undefined4 **)(g_pFileSystem + 4))
                                (g_pFileSystem + 4,&local_2e,2,g_VProfRecorder._6628_4_);
            }
            else {
              iVar6 = (*(code *)**(undefined4 **)(g_pFileSystem + 4))(g_pFileSystem + 4,&local_24);
              local_20 = local_23;
              local_1f = local_24;
              _V_memcpy(&local_2e,&local_20,2);
            }
            if (iVar6 != 2) goto LAB_00234aa5;
            uVar5 = (uint)local_2e;
            if (local_2e == 0xffff) {
              if ((g_VProfRecorder[0x1a0c] & 1) == 0) {
                iVar6 = (*(code *)**(undefined4 **)(g_pFileSystem + 4))(g_pFileSystem + 4,&local_28)
                ;
              }
              else {
                iVar6 = (*(code *)**(undefined4 **)(g_pFileSystem + 4))
                                  (g_pFileSystem + 4,&local_24,4,g_VProfRecorder._6628_4_);
                local_20 = local_21;
                local_1f = local_22;
                local_1e = local_23;
                local_1d = local_24;
                _V_memcpy(&local_28,&local_20,4);
              }
              uVar5 = local_28;
              if (iVar6 != 4) goto LAB_00234aa5;
            }
            lVar2 = (ulonglong)(uVar5 * 4) * (ulonglong)_g_ClockSpeed;
            uVar7 = __udivdi3((int)lVar2,(int)((ulonglong)lVar2 >> 0x20) + _vswprintf * uVar5 * 4,
                              1000000,0);
            *(undefined8 *)(iVar4 + 0x3c) = uVar7;
            pCVar1 = *(CVProfNode **)(iVar4 + 0x68);
            *(undefined4 *)(iVar4 + 0x4c) = *(undefined4 *)(iVar4 + 0x40);
            *(undefined4 *)(iVar4 + 0x48) = *(undefined4 *)(iVar4 + 0x3c);
            for (; pCVar1 != (CVProfNode *)0x0; pCVar1 = *(CVProfNode **)(pCVar1 + 0x6c)) {
              cVar3 = CVProfRecorder::Playback_ReadTimings_R
                                ((CVProfRecorder *)g_VProfRecorder,pCVar1);
              if (cVar3 == '\0') goto LAB_00234aa5;
            }
          }
        }
        goto LAB_00234be0;
      }
    } while (g_VProfRecorder[0x19f4] == '\0');
  }
  iVar4 = g_VProfRecorder[0x19fc] + 1;
LAB_00234aa7:
  return iVar4;
}

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)