ResolveQuadratic
0x000c8020 · 629 bytes · __cdecl
_Z16ResolveQuadraticdd6VectorS_S_S_S_S_iRdS0_
Decompiled
undefined (11 params)
/* ResolveQuadratic(double, double, Vector, Vector, Vector, Vector, Vector, Vector, int, double&,
double&) */
void ResolveQuadratic(double param_1,double param_2)
{
float fVar1;
float fVar2;
double dVar3;
double dVar4;
double dVar5;
double dVar6;
double dVar7;
double dVar8;
int in_stack_0000005c;
double *in_stack_00000060;
double *in_stack_00000064;
in_stack_0000005c = in_stack_0000005c * 4;
dVar5 = (double)*(float *)(&stack0x00000020 + in_stack_0000005c) * param_1 +
(1.0 - param_1) * (double)*(float *)(&stack0x00000014 + in_stack_0000005c);
dVar6 = (double)*(float *)(&stack0x00000020 + in_stack_0000005c) * param_2 +
(1.0 - param_2) * (double)*(float *)(&stack0x00000014 + in_stack_0000005c);
if (ABS((float)dVar5) < 1e-05) {
dVar5 = -99999.0;
}
else {
dVar5 = ((double)(*(float *)(&stack0x00000050 + in_stack_0000005c) -
*(float *)(&stack0x00000044 + in_stack_0000005c)) -
(double)*(float *)(&stack0x0000002c + in_stack_0000005c) * param_1) / dVar5;
}
if (ABS((float)dVar6) < 1e-05) {
dVar6 = -99999.0;
}
else {
dVar6 = ((double)(*(float *)(&stack0x00000050 + in_stack_0000005c) -
*(float *)(&stack0x00000044 + in_stack_0000005c)) -
(double)*(float *)(&stack0x0000002c + in_stack_0000005c) * param_2) / dVar6;
}
if ((((0.0 <= param_1) && (param_1 <= 1.0)) && (0.0 <= dVar5)) && (dVar5 <= 1.0)) {
*in_stack_00000060 = dVar5;
*in_stack_00000064 = param_1;
return;
}
if (((0.0 <= param_2) && (param_2 <= 1.0)) && ((0.0 <= dVar6 && (dVar6 <= 1.0)))) {
*in_stack_00000060 = dVar6;
*in_stack_00000064 = param_2;
return;
}
dVar8 = dVar5;
if (1.0 <= dVar5) {
dVar8 = dVar5 - 1.0;
}
dVar7 = param_1;
if (1.0 <= param_1) {
dVar7 = param_1 - 1.0;
}
dVar3 = dVar6;
if (1.0 <= dVar6) {
dVar3 = dVar6 - 1.0;
}
dVar4 = param_2;
if (1.0 <= param_2) {
dVar4 = param_2 - 1.0;
}
fVar1 = ABS((float)dVar7);
if (ABS((float)dVar7) <= ABS((float)dVar8)) {
fVar1 = ABS((float)dVar8);
}
fVar2 = ABS((float)dVar4);
if (ABS((float)dVar4) <= ABS((float)dVar3)) {
fVar2 = ABS((float)dVar3);
}
if (fVar1 <= fVar2) {
*in_stack_00000060 = dVar5;
*in_stack_00000064 = param_1;
return;
}
*in_stack_00000060 = dVar6;
*in_stack_00000064 = param_2;
return;
}
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.