CCurveData::GetIntensity
0x00ba6290 · 930 bytes · __thiscall
_ZN10CCurveData12GetIntensityEP18ICurveDataAccessorf
Decompiled
undefined (3 params)
/* CCurveData::GetIntensity(ICurveDataAccessor*, float) */
longdouble __thiscall
CCurveData::GetIntensity(CCurveData *this,ICurveDataAccessor *param_1,float param_2)
{
char cVar1;
float *pfVar2;
float *pfVar3;
int iVar4;
undefined4 *puVar5;
undefined4 *puVar6;
uint uVar7;
int iVar8;
int iVar9;
uint uVar10;
int iVar11;
float fVar12;
float fVar13;
float local_80;
bool local_72;
bool local_71;
int local_70;
int local_6c;
int local_68;
float local_64;
undefined4 local_60;
undefined4 local_5c;
float local_58;
float local_54;
undefined4 local_50;
float local_4c;
float local_48;
undefined4 local_44;
float local_40;
undefined4 local_3c;
undefined4 local_38;
Vector local_34 [4];
float local_30;
Vector local_28 [4];
float local_24;
cVar1 = (**(code **)(*(int *)param_1 + 4))(param_1);
fVar12 = 0.0;
if (cVar1 != '\0') {
iVar4 = *(int *)(this + 0xc);
if (0 < iVar4) {
iVar8 = 1;
if (3 < iVar4) {
iVar8 = iVar4 >> 1;
}
iVar9 = iVar8;
if (iVar8 <= iVar4) {
do {
pfVar2 = (float *)GetBoundedSample(this,param_1,iVar8,(bool *)local_28);
pfVar3 = (float *)GetBoundedSample(this,param_1,iVar8 + 1,(bool *)local_28);
iVar11 = 1;
if (3 < iVar9) {
iVar11 = iVar9 >> 1;
}
if (param_2 < pfVar2[1]) {
iVar9 = -iVar11;
}
else {
iVar9 = iVar11;
if (param_2 < pfVar3[1] || param_2 == pfVar3[1]) goto LAB_00ba6358;
}
iVar8 = iVar8 + iVar9;
if ((iVar4 < iVar8) || (iVar9 = iVar11, iVar8 < -1)) goto LAB_00ba6358;
} while( true );
}
}
fVar12 = 1.0;
}
LAB_00ba6596:
return (longdouble)fVar12;
LAB_00ba6358:
iVar9 = iVar8 + 2;
if (iVar4 < iVar8 + 2) {
iVar9 = iVar4;
}
iVar4 = -1;
if (-1 < iVar8 + -1) {
iVar4 = iVar8 + -1;
}
puVar5 = (undefined4 *)GetBoundedSample(this,param_1,iVar4,&local_72);
puVar6 = (undefined4 *)GetBoundedSample(this,param_1,iVar9,&local_71);
local_60 = *puVar5;
local_5c = 0;
local_54 = *pfVar2;
local_58 = pfVar2[1];
local_50 = 0;
local_4c = pfVar3[1];
local_48 = *pfVar3;
local_44 = 0;
local_3c = *puVar6;
local_40 = (float)puVar6[1];
local_38 = 0;
local_64 = (float)puVar5[1];
if (local_72 != false) {
local_64 = local_58;
}
if (local_71 != false) {
local_40 = local_4c;
}
if (pfVar3[1] - pfVar2[1] <= 0.0) {
fVar12 = 0.0;
}
else {
fVar12 = (param_2 - pfVar2[1]) / (pfVar3[1] - pfVar2[1]);
if (fVar12 <= 0.0) {
fVar12 = 0.0;
}
if (1.0 <= fVar12) {
fVar12 = 1.0;
}
}
local_80 = 1.0;
uVar10 = (uint)*(byte *)((int)pfVar3 + 9) << 7 | (uint)(*(byte *)(pfVar3 + 2) >> 1);
uVar7 = (uint)*(byte *)((int)pfVar2 + 9) << 7 | (uint)(*(byte *)(pfVar2 + 2) >> 1);
if (uVar7 == 0) {
uVar7 = (**(code **)(*(int *)param_1 + 8))(param_1);
}
if (uVar10 == 0) {
uVar10 = (**(code **)(*(int *)param_1 + 8))(param_1);
}
Interpolator_CurveInterpolatorsForType(uVar7,&local_70,&local_6c);
Interpolator_CurveInterpolatorsForType(uVar10,&local_68,&local_70);
fVar13 = local_54;
if ((local_6c != 0xf) && (fVar13 = local_48, local_68 != 0xf)) {
if (local_6c == local_68) {
Interpolator_CurveInterpolate
(local_6c,(Vector *)&local_64,(Vector *)&local_58,(Vector *)&local_4c,
(Vector *)&local_40,fVar12,local_28);
fVar13 = local_24;
}
else {
Interpolator_CurveInterpolate
(local_6c,(Vector *)&local_64,(Vector *)&local_58,(Vector *)&local_4c,
(Vector *)&local_40,fVar12,local_34);
Interpolator_CurveInterpolate
(local_68,(Vector *)&local_64,(Vector *)&local_58,(Vector *)&local_4c,
(Vector *)&local_40,fVar12,local_28);
fVar13 = (local_24 - local_30) * fVar12 + local_30;
}
}
fVar12 = 0.0;
if (0.0 <= fVar13) {
fVar12 = fVar13;
}
if (1.0 <= fVar12) {
fVar12 = local_80;
}
goto LAB_00ba6596;
}
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.