CChoreoEvent::GetOriginalPercentageFromPlaybackPercentage
0x00ba5770 · 915 bytes · __thiscall
_ZN12CChoreoEvent43GetOriginalPercentageFromPlaybackPercentageEf
Decompiled
undefined (2 params)
/* CChoreoEvent::GetOriginalPercentageFromPlaybackPercentage(float) */
longdouble __thiscall
CChoreoEvent::GetOriginalPercentageFromPlaybackPercentage(CChoreoEvent *this,float param_1)
{
int iVar1;
int iVar2;
int iVar3;
int iVar4;
int iVar5;
int iVar6;
longdouble lVar7;
float in_XMM0_Da;
float fVar8;
float fVar9;
float fVar10;
float fVar11;
float fVar12;
float local_68;
float local_60;
float local_58;
float local_54;
undefined4 local_50;
float local_4c;
float local_48;
undefined4 local_44;
float local_40;
float local_3c;
undefined4 local_38;
float local_34;
float local_30;
undefined4 local_2c;
Vector local_28 [4];
float local_24;
lVar7 = (longdouble)param_1;
if (((this[4] == (CChoreoEvent)0x6) &&
(iVar5 = *(int *)(this + 0xf0), iVar5 == *(int *)(this + 0x104))) && (0 < iVar5)) {
if (param_1 <= 0.0) {
lVar7 = (longdouble)0;
}
else {
local_60 = 0.0;
iVar6 = -1;
while( true ) {
iVar1 = iVar6 + 1;
GetBoundedAbsoluteTagPercentage();
if ((param_1 <= in_XMM0_Da) && (local_60 <= param_1)) goto LAB_00ba5802;
if (iVar1 == iVar5) break;
iVar6 = iVar1;
local_60 = in_XMM0_Da;
if (iVar1 == -1) {
in_XMM0_Da = 0.0;
local_60 = in_XMM0_Da;
}
}
iVar1 = iVar5 + 1;
iVar6 = iVar5;
LAB_00ba5802:
iVar3 = iVar6 + -1;
if (iVar3 < -2) {
iVar3 = -2;
}
iVar4 = -1;
if (-1 < iVar6) {
iVar4 = iVar6;
}
if (iVar5 < iVar1) {
iVar1 = iVar5;
}
if ((iVar4 < iVar5) && (-1 < iVar4)) {
iVar6 = iVar4 * 0x1c + *(int *)(this + 0xe4);
}
else {
iVar6 = 0;
}
if (iVar1 < iVar5) {
iVar5 = *(int *)(this + 0xe4) + iVar1 * 0x1c;
if ((((iVar6 != 0) && (iVar5 != 0)) && ((*(byte *)(iVar6 + 0x14) & 2) != 0)) &&
((*(byte *)(iVar5 + 0x14) & 2) != 0)) {
iVar2 = iVar4 * 0x1c + *(int *)(this + 0xf8);
iVar1 = iVar1 * 0x1c + *(int *)(this + 0xf8);
if ((iVar1 != 0) && (iVar2 != 0)) {
fVar11 = (param_1 - *(float *)(iVar6 + 0x10)) /
(*(float *)(iVar5 + 0x10) - *(float *)(iVar6 + 0x10));
return (longdouble)
(*(float *)(iVar2 + 0x10) * (1.0 - fVar11) + fVar11 * *(float *)(iVar1 + 0x10));
}
}
}
else {
iVar5 = 0;
}
in_XMM0_Da = in_XMM0_Da - local_60;
if (iVar3 < 0) {
fVar11 = 0.0;
local_54 = fVar11;
}
else {
fVar12 = in_XMM0_Da;
GetBoundedAbsoluteTagPercentage();
fVar11 = fVar12;
GetBoundedAbsoluteTagPercentage();
local_54 = fVar12;
}
local_50 = 0;
local_58 = fVar11;
if (iVar4 == -1) {
local_68 = 0.0;
fVar12 = 0.0;
fVar8 = fVar11;
}
else {
GetBoundedAbsoluteTagPercentage();
fVar12 = fVar11;
GetBoundedAbsoluteTagPercentage();
fVar8 = fVar12;
local_68 = fVar11;
}
local_44 = 0;
local_48 = local_68;
local_4c = fVar12;
GetBoundedAbsoluteTagPercentage();
fVar11 = fVar8;
GetBoundedAbsoluteTagPercentage();
local_38 = 0;
fVar9 = fVar11;
local_40 = fVar11;
local_3c = fVar8;
GetBoundedAbsoluteTagPercentage();
fVar10 = fVar9;
GetBoundedAbsoluteTagPercentage();
local_2c = 0;
if ((iVar6 != 0) && ((*(byte *)(iVar6 + 0x14) & 2) != 0)) {
local_58 = (fVar12 + fVar12) - fVar11;
local_54 = (local_68 + local_68) - fVar8;
}
local_34 = fVar10;
local_30 = fVar9;
if ((iVar5 != 0) && ((*(byte *)(iVar5 + 0x14) & 2) != 0)) {
local_34 = (fVar11 + fVar11) - fVar12;
local_30 = (fVar8 + fVar8) - local_68;
}
fVar11 = 0.0;
if (0.0 < in_XMM0_Da) {
fVar11 = (param_1 - local_60) / in_XMM0_Da;
if (fVar11 <= 0.0) {
fVar11 = 0.0;
}
if (1.0 <= fVar11) {
fVar11 = 1.0;
}
}
Catmull_Rom_Spline_NormalizeX
((Vector *)&local_58,(Vector *)&local_4c,(Vector *)&local_40,(Vector *)&local_34,
fVar11,local_28);
lVar7 = (longdouble)local_24;
}
}
return lVar7;
}
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.