L L4D2node

VProfPlayback_SeekToPercent

0x00234010 · 2532 bytes · __cdecl

_Z27VProfPlayback_SeekToPercentf

Decompiled

undefined (1 param)

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

int VProfPlayback_SeekToPercent(float param_1)

{
  CVProfNode *pCVar1;
  longlong lVar2;
  char cVar3;
  uint uVar4;
  int iVar5;
  int iVar6;
  undefined8 uVar7;
  byte local_32;
  byte local_31;
  ushort local_30;
  ushort local_2e;
  undefined4 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;
  uVar4 = (**(code **)(*(int *)(g_pFileSystem + 4) + 0x14))
                    (g_pFileSystem + 4,g_VProfRecorder._6628_4_);
  if (param_1 < ((float)(uVar4 >> 0x10) * 65536.0 + (float)(uVar4 & 0xffff)) /
                (float)(int)g_VProfRecorder._6648_4_) {
    if (g_VProfRecorder._6624_4_ == 2) {
      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 (param_1 <= 0.0) goto LAB_0023414a;
  }
  do {
    uVar4 = (**(code **)(*(int *)(g_pFileSystem + 4) + 0x14))
                      (g_pFileSystem + 4,g_VProfRecorder._6628_4_);
    if (param_1 <=
        ((float)(uVar4 >> 0x10) * 65536.0 + (float)(uVar4 & 0xffff)) /
        (float)(int)g_VProfRecorder._6648_4_) break;
    if (g_VProfRecorder._6624_4_ != 2) {
LAB_002340d6:
      iVar5 = 0;
      goto LAB_002340d8;
    }
    if ((g_VProfRecorder[0x1a0c] & 1) == 0) {
      iVar5 = (*(code *)**(undefined4 **)(g_pFileSystem + 4))
                        (g_pFileSystem + 4,&local_28,1,g_VProfRecorder._6628_4_);
    }
    else {
      iVar5 = (*(code *)**(undefined4 **)(g_pFileSystem + 4))(g_pFileSystem + 4,&local_24);
      local_20 = local_24;
      _V_memcpy(&local_28,&local_20,1);
    }
    if ((iVar5 != 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_002340d6;
    }
    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);
    }
    g_VProfRecorder._6636_4_ = local_2c;
LAB_00234220:
    if ((g_VProfRecorder[0x1a0c] & 1) == 0) {
      iVar5 = (*(code *)**(undefined4 **)(g_pFileSystem + 4))
                        (g_pFileSystem + 4,&local_28,1,g_VProfRecorder._6628_4_);
    }
    else {
      iVar5 = (*(code *)**(undefined4 **)(g_pFileSystem + 4))(g_pFileSystem + 4,&local_24);
      local_20 = local_24;
      _V_memcpy(&local_28,&local_20,1);
    }
    if (iVar5 != 1) {
LAB_00234278:
      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_002340d6;
    }
    if ((char)local_28 != '\x04') {
      if ((char)local_28 == '\x02') {
        cVar3 = CVProfRecorder::Playback_ReadAddBudgetGroup((CVProfRecorder *)g_VProfRecorder);
joined_r0x0023462e:
        if (cVar3 == '\0') goto LAB_002340d6;
      }
      else {
        if ((char)local_28 == '\x01') {
          cVar3 = CVProfRecorder::Playback_ReadAddNode((CVProfRecorder *)g_VProfRecorder);
          goto joined_r0x0023462e;
        }
        if ((char)local_28 != '\x03') goto LAB_00234278;
        if ((g_VProfRecorder[0x1a0c] & 1) == 0) {
          iVar5 = (*(code *)**(undefined4 **)(g_pFileSystem + 4))
                            (g_pFileSystem + 4,&local_32,1,g_VProfRecorder._6628_4_);
        }
        else {
          iVar5 = (*(code *)**(undefined4 **)(g_pFileSystem + 4))(g_pFileSystem + 4,&local_24);
          local_20 = local_24;
          _V_memcpy(&local_32,&local_20,1);
        }
        if (iVar5 != 1) goto LAB_002340d6;
        uVar4 = (uint)local_32;
        if (local_32 == 0xff) {
          if ((g_VProfRecorder[0x1a0c] & 1) == 0) {
            iVar5 = (*(code *)**(undefined4 **)(g_pFileSystem + 4))
                              (g_pFileSystem + 4,&local_28,2,g_VProfRecorder._6628_4_);
          }
          else {
            iVar5 = (*(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 (iVar5 != 2) goto LAB_002340d6;
          uVar4 = local_28 & 0xffff;
        }
        g_VProfRecorder._4176_4_ = uVar4;
        g_VProfRecorder._4188_4_ = uVar4;
        if ((g_VProfRecorder[0x1a0c] & 1) == 0) {
          iVar5 = (*(code *)**(undefined4 **)(g_pFileSystem + 4))
                            (g_pFileSystem + 4,&local_30,2,g_VProfRecorder._6628_4_);
        }
        else {
          iVar5 = (*(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 (iVar5 != 2) goto LAB_002340d6;
        uVar4 = (uint)local_30;
        if (local_30 == 0xffff) {
          if ((g_VProfRecorder[0x1a0c] & 1) == 0) {
            iVar5 = (*(code *)**(undefined4 **)(g_pFileSystem + 4))
                              (g_pFileSystem + 4,&local_28,4,g_VProfRecorder._6628_4_);
          }
          else {
            iVar5 = (*(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);
          }
          uVar4 = local_28;
          if (iVar5 != 4) goto LAB_002340d6;
        }
        lVar2 = (ulonglong)(uVar4 * 4) * (ulonglong)_g_ClockSpeed;
        uVar7 = __udivdi3((int)lVar2,(int)((ulonglong)lVar2 >> 0x20) + _vswprintf * uVar4 * 4,
                          1000000,0);
        g_VProfRecorder._4180_8_ = uVar7;
        g_VProfRecorder._4192_8_ = uVar7;
        for (iVar5 = g_VProfRecorder._4224_4_; iVar5 != 0; iVar5 = *(int *)(iVar5 + 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_002340d6;
          uVar4 = (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_002340d6;
            uVar4 = local_28 & 0xffff;
            *(uint *)(iVar5 + 0x38) = uVar4;
          }
          else {
            *(uint *)(iVar5 + 0x38) = uVar4;
          }
          *(uint *)(iVar5 + 0x44) = uVar4;
          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_002340d6;
          uVar4 = (uint)local_2e;
          if (local_2e == 0xffff) {
            if ((g_VProfRecorder[0x1a0c] & 1) == 0) {
              iVar6 = (*(code *)**(undefined4 **)(g_pFileSystem + 4))
                                (g_pFileSystem + 4,&local_28,4,g_VProfRecorder._6628_4_);
            }
            else {
              iVar6 = (*(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);
            }
            uVar4 = local_28;
            if (iVar6 != 4) goto LAB_002340d6;
          }
          lVar2 = (ulonglong)(uVar4 * 4) * (ulonglong)_g_ClockSpeed;
          uVar7 = __udivdi3((int)lVar2,(int)((ulonglong)lVar2 >> 0x20) + _vswprintf * uVar4 * 4,
                            1000000,0);
          *(undefined8 *)(iVar5 + 0x3c) = uVar7;
          pCVar1 = *(CVProfNode **)(iVar5 + 0x68);
          *(undefined4 *)(iVar5 + 0x4c) = *(undefined4 *)(iVar5 + 0x40);
          *(undefined4 *)(iVar5 + 0x48) = *(undefined4 *)(iVar5 + 0x3c);
          for (; pCVar1 != (CVProfNode *)0x0; pCVar1 = *(CVProfNode **)(pCVar1 + 0x6c)) {
            cVar3 = CVProfRecorder::Playback_ReadTimings_R((CVProfRecorder *)g_VProfRecorder,pCVar1)
            ;
            if (cVar3 == '\0') goto LAB_002340d6;
          }
        }
      }
      goto LAB_00234220;
    }
  } while (g_VProfRecorder[0x19f4] == '\0');
LAB_0023414a:
  iVar5 = g_VProfRecorder[0x19fc] + 1;
LAB_002340d8:
  return iVar5;
}

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)