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 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.