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 intoaddons/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.
Signatures + Functions block. The plugin uses
DHookCreateFromConf - DHooks reads return type, this-type,
calling convention, and argument types straight from the gamedata. Less
boilerplate in the plugin, types travel with the gamedata.
Gamedata KeyValues
DHooks plugin example
Type inference is best-effort from the C signature - sanity-check the DHooks types before shipping.