L L4D2node

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 into addons/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.



        

        

          

Type inference is best-effort from the C signature - sanity-check the DHooks types before shipping.

Return-type handling cheatsheet (DHookReturn)