L L4D2node

QuaternionSlerpNoAlign

0x00bbe440 · 546 bytes · __cdecl

_Z22QuaternionSlerpNoAlignRK10QuaternionS1_fRS_

Decompiled

undefined (4 params)

/* QuaternionSlerpNoAlign(Quaternion const&, Quaternion const&, float, Quaternion&) */

void QuaternionSlerpNoAlign
               (Quaternion *param_1,Quaternion *param_2,float param_3,Quaternion *param_4)

{
  float __x;
  int iVar1;
  longdouble lVar2;
  float fVar3;
  double dVar4;
  double dVar5;
  float fVar6;
  
  fVar3 = *(float *)(param_1 + 4) * *(float *)(param_2 + 4) + *(float *)param_1 * *(float *)param_2
          + *(float *)(param_1 + 8) * *(float *)(param_2 + 8) +
          *(float *)(param_1 + 0xc) * *(float *)(param_2 + 0xc);
  if (-0.999999 < fVar3) {
    if (0.999999 <= fVar3) {
      fVar3 = 1.0 - param_3;
    }
    else {
      lVar2 = (longdouble)__acosf_finite(fVar3);
      __x = (float)lVar2;
      fVar6 = sinf(__x);
      dVar4 = sin((double)((1.0 - param_3) * __x));
      fVar3 = (float)(dVar4 / (double)fVar6);
      dVar4 = sin((double)(param_3 * __x));
      param_3 = (float)(dVar4 / (double)fVar6);
    }
    iVar1 = 0;
    do {
      *(float *)(param_4 + iVar1 * 4) =
           *(float *)(param_2 + iVar1 * 4) * param_3 + *(float *)(param_1 + iVar1 * 4) * fVar3;
      iVar1 = iVar1 + 1;
    } while (iVar1 != 4);
    return;
  }
  *(float *)param_4 = -*(float *)(param_2 + 4);
  *(undefined4 *)(param_4 + 4) = *(undefined4 *)param_2;
  *(uint *)(param_4 + 8) = *(uint *)(param_2 + 0xc) ^ 0x80000000;
  *(undefined4 *)(param_4 + 0xc) = *(undefined4 *)(param_2 + 8);
  dVar4 = sin((double)(1.0 - param_3) * 1.5707963267948966);
  dVar5 = sin((double)param_3 * 1.5707963267948966);
  iVar1 = 0;
  do {
    *(float *)(param_4 + iVar1 * 4) =
         *(float *)(param_4 + iVar1 * 4) * (float)dVar5 +
         *(float *)(param_1 + iVar1 * 4) * (float)dVar4;
    iVar1 = iVar1 + 1;
  } while (iVar1 != 3);
  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)