L L4D2node

CalcZeroframeData

0x00b968d0 · 5872 bytes · __regparm3

_ZL17CalcZeroframeDataPK10CStudioHdrPK11studiohdr_tPK14virtualgroup_tPK13mstudiobone_tR17mstudioanimdesc_tfP6VectorP10Quaternionif.isra.7

Decompiled

undefined (10 params)

/* CalcZeroframeData(CStudioHdr const*, studiohdr_t const*, virtualgroup_t const*, mstudiobone_t
   const*, mstudioanimdesc_t&, float, Vector*, Quaternion*, int, float) [clone .isra.7] */

void __regparm3
CalcZeroframeData(CStudioHdr *param_1,studiohdr_t *param_2,virtualgroup_t *param_3,
                 mstudiobone_t *param_4,mstudioanimdesc_t *param_5,float param_6,Vector *param_7,
                 Quaternion *param_8,int param_9,float param_10)

{
  mstudioanimdesc_t *pmVar1;
  float *pfVar2;
  short sVar3;
  ushort uVar4;
  mstudioanimdesc_t *pmVar5;
  int iVar6;
  uint uVar7;
  byte bVar8;
  int iVar9;
  int iVar10;
  int iVar11;
  float in_XMM0_Da;
  float fVar12;
  float in_XMM1_Da;
  float fVar13;
  float fVar14;
  float fVar15;
  float fVar16;
  float fVar17;
  float local_7c;
  mstudiobone_t *local_64;
  int local_60;
  float local_5c;
  float local_58;
  float local_54;
  float local_50;
  float local_4c;
  float local_48;
  float local_44;
  float local_40;
  float local_3c;
  float local_38;
  float local_34;
  float local_30;
  float local_2c;
  float local_28;
  float local_24;
  float local_20;
  
  if ((*(int *)(param_5 + 0x5c) != 0) &&
     (pmVar5 = param_5 + *(int *)(param_5 + 0x5c), pmVar5 != (mstudioanimdesc_t *)0x0)) {
    sVar3 = *(short *)(param_5 + 0x5a);
    if (sVar3 == 1) {
      if (0 < *(int *)param_2) {
        iVar11 = 0;
        fVar16 = in_XMM1_Da * -65504.0;
        fVar17 = in_XMM1_Da * 65504.0;
        iVar6 = iVar11;
        if (param_3 == (virtualgroup_t *)0x0) goto LAB_00b9783e;
        iVar6 = 0;
        do {
          iVar11 = *(int *)(*(int *)(param_3 + 0x18) + iVar6 * 4);
LAB_00b9783e:
          do {
            uVar7 = *(uint *)(param_4 + 0xa0);
            if ((uVar7 & 0x200000) != 0) {
              if ((-1 < iVar11) &&
                 (((uint)param_8 & *(uint *)(*(int *)(param_1 + 0x2c) + iVar11 * 4)) != 0)) {
                uVar4 = *(ushort *)pmVar5;
                if ((uVar4 & 0x7fff) == 0x7c00) {
                  fVar12 = fVar17;
                  if ((short)uVar4 < 0) {
                    fVar12 = fVar16;
                  }
                }
                else {
                  bVar8 = (byte)(uVar4 >> 8);
                  if ((bVar8 & 0x7c) == 0x7c) {
                    fVar12 = 0.0;
                    if ((uVar4 & 0x3ff) == 0) goto LAB_00b978f1;
                  }
                  else {
                    if (((uVar4 & 0x7c00) == 0) && ((uVar4 & 0x3ff) != 0)) {
                      if ((short)uVar4 < 0) {
                        fVar12 = -1.0;
                      }
                      else {
                        fVar12 = 1.0;
                      }
                      fVar12 = ((float)(uVar4 & 0x3ff) + 0.0) * 5.9604645e-08 * fVar12;
                    }
                    else {
LAB_00b978f1:
                      fVar12 = (float)((uVar4 & 0x3ff) << 0xd | (uint)(bVar8 >> 7) << 0x1f |
                                      (uint)((uVar4 >> 10 & 0x1f) != 0) *
                                      ((uVar4 >> 10 & 0x1f) + 0x70) * 0x800000);
                    }
                    fVar12 = fVar12 * in_XMM1_Da;
                  }
                }
                fVar13 = 1.0;
                uVar4 = *(ushort *)(pmVar5 + 2);
                if ((uVar4 & 0x7fff) == 0x7c00) {
                  fVar13 = fVar17;
                  if ((short)uVar4 < 0) {
                    fVar13 = fVar16;
                  }
                }
                else {
                  bVar8 = (byte)(uVar4 >> 8);
                  if ((bVar8 & 0x7c) == 0x7c) {
                    fVar13 = 0.0;
                    if ((uVar4 & 0x3ff) == 0) goto LAB_00b979c9;
                  }
                  else {
                    if (((uVar4 & 0x7c00) == 0) && ((uVar4 & 0x3ff) != 0)) {
                      if ((short)uVar4 < 0) {
                        fVar13 = -1.0;
                      }
                      fVar13 = ((float)(uVar4 & 0x3ff) + 0.0) * 5.9604645e-08 * fVar13;
                    }
                    else {
LAB_00b979c9:
                      fVar13 = (float)((uVar4 & 0x3ff) << 0xd | (uint)(bVar8 >> 7) << 0x1f |
                                      (uint)((uVar4 >> 10 & 0x1f) != 0) *
                                      ((uVar4 >> 10 & 0x1f) + 0x70) * 0x800000);
                    }
                    fVar13 = fVar13 * in_XMM1_Da;
                  }
                }
                uVar4 = *(ushort *)(pmVar5 + 4);
                if ((uVar4 & 0x7fff) == 0x7c00) {
                  fVar14 = fVar17;
                  if ((short)uVar4 < 0) {
                    fVar14 = fVar16;
                  }
                }
                else {
                  bVar8 = (byte)(uVar4 >> 8);
                  if ((bVar8 & 0x7c) == 0x7c) {
                    fVar14 = 0.0;
                    if ((uVar4 & 0x3ff) == 0) goto LAB_00b97a99;
                  }
                  else {
                    if (((uVar4 & 0x7c00) == 0) && ((uVar4 & 0x3ff) != 0)) {
                      fVar14 = 1.0;
                      if ((short)uVar4 < 0) {
                        fVar14 = -1.0;
                      }
                      fVar14 = ((float)(uVar4 & 0x3ff) + 0.0) * 5.9604645e-08 * fVar14;
                    }
                    else {
LAB_00b97a99:
                      fVar14 = (float)((uVar4 & 0x3ff) << 0xd | (uint)(bVar8 >> 7) << 0x1f |
                                      (uint)((uVar4 >> 10 & 0x1f) != 0) *
                                      ((uVar4 >> 10 & 0x1f) + 0x70) * 0x800000);
                    }
                    fVar14 = fVar14 * in_XMM1_Da;
                  }
                }
                fVar15 = 1.0 - in_XMM1_Da;
                pfVar2 = (float *)((int)param_6 + iVar11 * 0xc);
                pfVar2[1] = pfVar2[1] * fVar15 + fVar13;
                pfVar2[2] = pfVar2[2] * fVar15 + fVar14;
                *pfVar2 = fVar15 * *pfVar2 + fVar12;
                uVar7 = *(uint *)(param_4 + 0xa0);
              }
              pmVar5 = pmVar5 + 6;
            }
            if ((uVar7 & 0x400000) == 0) {
              if ((uVar7 & 0x800000) != 0) {
                if ((-1 < iVar11) &&
                   (((uint)param_8 & *(uint *)(*(int *)(param_1 + 0x2c) + iVar11 * 4)) != 0)) {
                  local_2c = (float)(int)((*(ushort *)pmVar5 & 0x7ff) - 0x400) * 0.0009765625;
                  local_28 = (float)(int)((*(uint *)pmVar5 >> 0xb & 0x3ff) - 0x200) * 0.001953125;
                  local_24 = (float)(int)((*(ushort *)(pmVar5 + 2) >> 5 & 0x3ff) - 0x200) *
                             0.001953125;
                  local_20 = SQRT(((1.0 - local_24 * local_24) - local_28 * local_28) -
                                  local_2c * local_2c);
                  if ((char)pmVar5[3] < '\0') {
                    local_20 = -local_20;
                  }
                  QuaternionBlend((Quaternion *)(param_7 + iVar11 * 0x10),(Quaternion *)&local_2c,
                                  in_XMM1_Da,(Quaternion *)(param_7 + iVar11 * 0x10));
                }
                pmVar5 = pmVar5 + 4;
              }
            }
            else {
              if ((-1 < iVar11) &&
                 (((uint)param_8 & *(uint *)(*(int *)(param_1 + 0x2c) + iVar11 * 4)) != 0)) {
                local_2c = (float)(int)((*(uint *)pmVar5 & 0x1fffff) - 0x100000) * 9.5367386e-07;
                local_28 = (float)(int)(((*(ushort *)(pmVar5 + 4) & 0x3ff) << 0xb |
                                        (uint)(*(ushort *)(pmVar5 + 2) >> 5)) - 0x100000) *
                           9.5367386e-07;
                local_24 = (float)(int)((*(uint *)(pmVar5 + 4) >> 10 & 0x1fffff) - 0x100000) *
                           9.5367386e-07;
                local_20 = SQRT(((1.0 - local_24 * local_24) - local_2c * local_2c) -
                                local_28 * local_28);
                if ((char)pmVar5[7] < '\0') {
                  local_20 = -local_20;
                }
                QuaternionBlend((Quaternion *)(param_7 + iVar11 * 0x10),(Quaternion *)&local_2c,
                                in_XMM1_Da,(Quaternion *)(param_7 + iVar11 * 0x10));
              }
              pmVar5 = pmVar5 + 8;
            }
            iVar11 = iVar6 + 1;
            param_4 = param_4 + 0xd8;
            if (*(int *)param_2 <= iVar11) {
              return;
            }
            iVar6 = iVar11;
          } while (param_3 == (virtualgroup_t *)0x0);
        } while( true );
      }
    }
    else {
      iVar11 = sVar3 + -1;
      local_7c = (float)(int)*(short *)(param_5 + 0x58);
      iVar6 = (int)(in_XMM0_Da / local_7c);
      if (iVar6 < iVar11) {
        local_7c = (in_XMM0_Da - (float)(*(short *)(param_5 + 0x58) * iVar6)) / local_7c;
        if (local_7c <= 0.0) {
          local_7c = 0.0;
        }
        if (1.0 <= local_7c) {
          local_7c = 1.0;
        }
      }
      else {
        iVar6 = sVar3 + -2;
        local_7c = 1.0;
      }
      iVar9 = 0;
      if (1 < iVar6) {
        iVar9 = iVar6 + -1;
      }
      if (iVar6 + 1 <= iVar11) {
        iVar11 = iVar6 + 1;
      }
      if (0 < *(int *)param_2) {
        local_60 = 0;
        fVar17 = 1.0 - in_XMM1_Da;
        local_64 = param_4;
        do {
          iVar10 = local_60;
          if (param_3 != (virtualgroup_t *)0x0) {
            iVar10 = *(int *)(*(int *)(param_3 + 0x18) + local_60 * 4);
          }
          uVar7 = *(uint *)(local_64 + 0xa0);
          if ((uVar7 & 0x200000) != 0) {
            if ((-1 < iVar10) &&
               (((uint)param_8 & *(uint *)(*(int *)(param_1 + 0x2c) + iVar10 * 4)) != 0)) {
              pmVar1 = pmVar5 + iVar9 * 6;
              uVar4 = *(ushort *)pmVar1;
              if ((uVar4 & 0x7fff) == 0x7c00) {
                local_5c = 65504.0;
                if ((short)uVar4 < 0) {
                  local_5c = -65504.0;
                }
              }
              else {
                bVar8 = (byte)(uVar4 >> 8);
                if ((bVar8 & 0x7c) == 0x7c) {
                  local_5c = 0.0;
                  if ((uVar4 & 0x3ff) == 0) goto LAB_00b96a8d;
                }
                else if (((uVar4 & 0x7c00) == 0) && ((uVar4 & 0x3ff) != 0)) {
                  local_5c = 1.0;
                  if ((short)uVar4 < 0) {
                    local_5c = -1.0;
                  }
                  local_5c = ((float)(uVar4 & 0x3ff) + 0.0) * 5.9604645e-08 * local_5c;
                }
                else {
LAB_00b96a8d:
                  local_5c = (float)((uVar4 & 0x3ff) << 0xd | (uint)(bVar8 >> 7) << 0x1f |
                                    ((uVar4 >> 10 & 0x1f) + 0x70) *
                                    (uint)((uVar4 >> 10 & 0x1f) != 0) * 0x800000);
                }
              }
              uVar4 = *(ushort *)(pmVar1 + 2);
              if ((uVar4 & 0x7fff) == 0x7c00) {
                local_58 = 65504.0;
                if ((short)uVar4 < 0) {
                  local_58 = -65504.0;
                }
              }
              else {
                bVar8 = (byte)(uVar4 >> 8);
                if ((bVar8 & 0x7c) == 0x7c) {
                  local_58 = 0.0;
                  if ((uVar4 & 0x3ff) == 0) goto LAB_00b96b14;
                }
                else if (((uVar4 & 0x7c00) == 0) && ((uVar4 & 0x3ff) != 0)) {
                  local_58 = 1.0;
                  if ((short)uVar4 < 0) {
                    local_58 = -1.0;
                  }
                  local_58 = ((float)(uVar4 & 0x3ff) + 0.0) * 5.9604645e-08 * local_58;
                }
                else {
LAB_00b96b14:
                  local_58 = (float)((uVar4 & 0x3ff) << 0xd | (uint)(bVar8 >> 7) << 0x1f |
                                    ((uVar4 >> 10 & 0x1f) + 0x70) *
                                    (uint)((uVar4 >> 10 & 0x1f) != 0) * 0x800000);
                }
              }
              uVar4 = *(ushort *)(pmVar1 + 4);
              if ((uVar4 & 0x7fff) == 0x7c00) {
                local_54 = 65504.0;
                if ((short)uVar4 < 0) {
                  local_54 = -65504.0;
                }
              }
              else {
                bVar8 = (byte)(uVar4 >> 8);
                if ((bVar8 & 0x7c) == 0x7c) {
                  local_54 = 0.0;
                  if ((uVar4 & 0x3ff) == 0) goto LAB_00b96b9b;
                }
                else if (((uVar4 & 0x7c00) == 0) && ((uVar4 & 0x3ff) != 0)) {
                  local_54 = 1.0;
                  if ((short)uVar4 < 0) {
                    local_54 = -1.0;
                  }
                  local_54 = ((float)(uVar4 & 0x3ff) + 0.0) * 5.9604645e-08 * local_54;
                }
                else {
LAB_00b96b9b:
                  local_54 = (float)((uVar4 & 0x3ff) << 0xd | (uint)(bVar8 >> 7) << 0x1f |
                                    (uint)((uVar4 >> 10 & 0x1f) != 0) *
                                    ((uVar4 >> 10 & 0x1f) + 0x70) * 0x800000);
                }
              }
              pmVar1 = pmVar5 + iVar6 * 6;
              uVar4 = *(ushort *)pmVar1;
              if ((uVar4 & 0x7fff) == 0x7c00) {
                local_4c = 65504.0;
                if ((short)uVar4 < 0) {
                  local_4c = -65504.0;
                }
              }
              else {
                bVar8 = (byte)(uVar4 >> 8);
                if ((bVar8 & 0x7c) == 0x7c) {
                  local_4c = 0.0;
                  if ((uVar4 & 0x3ff) == 0) goto LAB_00b96c14;
                }
                else if (((uVar4 & 0x7c00) == 0) && ((uVar4 & 0x3ff) != 0)) {
                  local_4c = 1.0;
                  if ((short)uVar4 < 0) {
                    local_4c = -1.0;
                  }
                  local_4c = ((float)(uVar4 & 0x3ff) + 0.0) * 5.9604645e-08 * local_4c;
                }
                else {
LAB_00b96c14:
                  local_4c = (float)((uVar4 & 0x3ff) << 0xd | (uint)(bVar8 >> 7) << 0x1f |
                                    ((uVar4 >> 10 & 0x1f) + 0x70) *
                                    (uint)((uVar4 >> 10 & 0x1f) != 0) * 0x800000);
                }
              }
              uVar4 = *(ushort *)(pmVar1 + 2);
              if ((uVar4 & 0x7fff) == 0x7c00) {
                local_48 = 65504.0;
                if ((short)uVar4 < 0) {
                  local_48 = -65504.0;
                }
              }
              else {
                bVar8 = (byte)(uVar4 >> 8);
                if ((bVar8 & 0x7c) == 0x7c) {
                  local_48 = 0.0;
                  if ((uVar4 & 0x3ff) == 0) goto LAB_00b96c9b;
                }
                else if (((uVar4 & 0x7c00) == 0) && ((uVar4 & 0x3ff) != 0)) {
                  local_48 = 1.0;
                  if ((short)uVar4 < 0) {
                    local_48 = -1.0;
                  }
                  local_48 = ((float)(uVar4 & 0x3ff) + 0.0) * 5.9604645e-08 * local_48;
                }
                else {
LAB_00b96c9b:
                  local_48 = (float)((uVar4 & 0x3ff) << 0xd | (uint)(bVar8 >> 7) << 0x1f |
                                    ((uVar4 >> 10 & 0x1f) + 0x70) *
                                    (uint)((uVar4 >> 10 & 0x1f) != 0) * 0x800000);
                }
              }
              uVar4 = *(ushort *)(pmVar1 + 4);
              if ((uVar4 & 0x7fff) == 0x7c00) {
                local_44 = 65504.0;
                if ((short)uVar4 < 0) {
                  local_44 = -65504.0;
                }
              }
              else {
                bVar8 = (byte)(uVar4 >> 8);
                if ((bVar8 & 0x7c) == 0x7c) {
                  local_44 = 0.0;
                  if ((uVar4 & 0x3ff) == 0) goto LAB_00b96d22;
                }
                else if (((uVar4 & 0x7c00) == 0) && ((uVar4 & 0x3ff) != 0)) {
                  local_44 = 1.0;
                  if ((short)uVar4 < 0) {
                    local_44 = -1.0;
                  }
                  local_44 = ((float)(uVar4 & 0x3ff) + 0.0) * 5.9604645e-08 * local_44;
                }
                else {
LAB_00b96d22:
                  local_44 = (float)((uVar4 & 0x3ff) << 0xd | (uint)(bVar8 >> 7) << 0x1f |
                                    (uint)((uVar4 >> 10 & 0x1f) != 0) *
                                    ((uVar4 >> 10 & 0x1f) + 0x70) * 0x800000);
                }
              }
              pmVar1 = pmVar5 + iVar11 * 6;
              uVar4 = *(ushort *)pmVar1;
              if ((uVar4 & 0x7fff) == 0x7c00) {
                local_3c = 65504.0;
                if ((short)uVar4 < 0) {
                  local_3c = -65504.0;
                }
              }
              else {
                bVar8 = (byte)(uVar4 >> 8);
                if ((bVar8 & 0x7c) == 0x7c) {
                  local_3c = 0.0;
                  if ((uVar4 & 0x3ff) == 0) goto LAB_00b96d9b;
                }
                else if (((uVar4 & 0x7c00) == 0) && ((uVar4 & 0x3ff) != 0)) {
                  local_3c = 1.0;
                  if ((short)uVar4 < 0) {
                    local_3c = -1.0;
                  }
                  local_3c = ((float)(uVar4 & 0x3ff) + 0.0) * 5.9604645e-08 * local_3c;
                }
                else {
LAB_00b96d9b:
                  local_3c = (float)((uVar4 & 0x3ff) << 0xd | (uint)(bVar8 >> 7) << 0x1f |
                                    ((uVar4 >> 10 & 0x1f) + 0x70) *
                                    (uint)((uVar4 >> 10 & 0x1f) != 0) * 0x800000);
                }
              }
              uVar4 = *(ushort *)(pmVar1 + 2);
              if ((uVar4 & 0x7fff) == 0x7c00) {
                local_38 = 65504.0;
                if ((short)uVar4 < 0) {
                  local_38 = -65504.0;
                }
              }
              else {
                bVar8 = (byte)(uVar4 >> 8);
                if ((bVar8 & 0x7c) == 0x7c) {
                  local_38 = 0.0;
                  if ((uVar4 & 0x3ff) == 0) goto LAB_00b96e22;
                }
                else if (((uVar4 & 0x7c00) == 0) && ((uVar4 & 0x3ff) != 0)) {
                  local_38 = 1.0;
                  if ((short)uVar4 < 0) {
                    local_38 = -1.0;
                  }
                  local_38 = ((float)(uVar4 & 0x3ff) + 0.0) * 5.9604645e-08 * local_38;
                }
                else {
LAB_00b96e22:
                  local_38 = (float)((uVar4 & 0x3ff) << 0xd | (uint)(bVar8 >> 7) << 0x1f |
                                    ((uVar4 >> 10 & 0x1f) + 0x70) *
                                    (uint)((uVar4 >> 10 & 0x1f) != 0) * 0x800000);
                }
              }
              uVar4 = *(ushort *)(pmVar1 + 4);
              if ((uVar4 & 0x7fff) == 0x7c00) {
                local_34 = 65504.0;
                if ((short)uVar4 < 0) {
                  local_34 = -65504.0;
                }
              }
              else {
                bVar8 = (byte)(uVar4 >> 8);
                if ((bVar8 & 0x7c) == 0x7c) {
                  local_34 = 0.0;
                  if ((uVar4 & 0x3ff) == 0) goto LAB_00b96ea9;
                }
                else if (((uVar4 & 0x7c00) == 0) && ((uVar4 & 0x3ff) != 0)) {
                  local_34 = 1.0;
                  if ((short)uVar4 < 0) {
                    local_34 = -1.0;
                  }
                  local_34 = ((float)(uVar4 & 0x3ff) + 0.0) * 5.9604645e-08 * local_34;
                }
                else {
LAB_00b96ea9:
                  local_34 = (float)((uVar4 & 0x3ff) << 0xd | (uint)(bVar8 >> 7) << 0x1f |
                                    (uint)((uVar4 >> 10 & 0x1f) != 0) *
                                    ((uVar4 >> 10 & 0x1f) + 0x70) * 0x800000);
                }
              }
              if (in_XMM1_Da == 1.0) {
                Hermite_Spline((Vector *)&local_5c,(Vector *)&local_4c,(Vector *)&local_3c,local_7c,
                               (Vector *)((int)param_6 + iVar10 * 0xc));
              }
              else {
                Hermite_Spline((Vector *)&local_5c,(Vector *)&local_4c,(Vector *)&local_3c,local_7c,
                               (Vector *)&local_2c);
                pfVar2 = (float *)((int)param_6 + iVar10 * 0xc);
                pfVar2[1] = pfVar2[1] * fVar17 + local_28 * in_XMM1_Da;
                pfVar2[2] = pfVar2[2] * fVar17 + local_24 * in_XMM1_Da;
                *pfVar2 = *pfVar2 * fVar17 + in_XMM1_Da * local_2c;
              }
              uVar7 = *(uint *)(local_64 + 0xa0);
            }
            pmVar5 = pmVar5 + *(short *)(param_5 + 0x5a) * 6;
          }
          if ((uVar7 & 0x400000) == 0) {
            if ((uVar7 & 0x800000) != 0) {
              if ((-1 < iVar10) &&
                 (((uint)param_8 & *(uint *)(*(int *)(param_1 + 0x2c) + iVar10 * 4)) != 0)) {
                pmVar1 = pmVar5 + iVar9 * 4;
                local_5c = (float)(int)((*(ushort *)pmVar1 & 0x7ff) - 0x400) * 0.0009765625;
                local_58 = (float)(int)((*(uint *)pmVar1 >> 0xb & 0x3ff) - 0x200) * 0.001953125;
                local_54 = (float)(int)((*(ushort *)(pmVar1 + 2) >> 5 & 0x3ff) - 0x200) *
                           0.001953125;
                local_50 = SQRT((1.0 - local_54 * local_54) -
                                (local_58 * local_58 + local_5c * local_5c));
                if ((char)pmVar1[3] < '\0') {
                  local_50 = -local_50;
                }
                pmVar1 = pmVar5 + iVar6 * 4;
                local_4c = (float)(int)((*(ushort *)pmVar1 & 0x7ff) - 0x400) * 0.0009765625;
                local_48 = (float)(int)((*(uint *)pmVar1 >> 0xb & 0x3ff) - 0x200) * 0.001953125;
                local_44 = (float)(int)((*(ushort *)(pmVar1 + 2) >> 5 & 0x3ff) - 0x200) *
                           0.001953125;
                local_40 = SQRT((1.0 - local_44 * local_44) -
                                (local_48 * local_48 + local_4c * local_4c));
                if ((char)pmVar1[3] < '\0') {
                  local_40 = -local_40;
                }
                pmVar1 = pmVar5 + iVar11 * 4;
                local_3c = (float)(int)((*(ushort *)pmVar1 & 0x7ff) - 0x400) * 0.0009765625;
                local_38 = (float)(int)((*(uint *)pmVar1 >> 0xb & 0x3ff) - 0x200) * 0.001953125;
                local_34 = (float)(int)((*(ushort *)(pmVar1 + 2) >> 5 & 0x3ff) - 0x200) *
                           0.001953125;
                local_30 = SQRT((1.0 - local_34 * local_34) -
                                (local_3c * local_3c + local_38 * local_38));
                if ((char)pmVar1[3] < '\0') {
                  local_30 = -local_30;
                }
                if (in_XMM1_Da == 1.0) {
                  Hermite_Spline((Quaternion *)&local_5c,(Quaternion *)&local_4c,
                                 (Quaternion *)&local_3c,local_7c,
                                 (Quaternion *)(param_7 + iVar10 * 0x10));
                }
                else {
                  Hermite_Spline((Quaternion *)&local_5c,(Quaternion *)&local_4c,
                                 (Quaternion *)&local_3c,local_7c,(Quaternion *)&local_2c);
                  QuaternionBlend((Quaternion *)(param_7 + iVar10 * 0x10),(Quaternion *)&local_2c,
                                  in_XMM1_Da,(Quaternion *)(param_7 + iVar10 * 0x10));
                }
              }
              pmVar5 = pmVar5 + *(short *)(param_5 + 0x5a) * 4;
            }
          }
          else {
            if ((-1 < iVar10) &&
               (((uint)param_8 & *(uint *)(*(int *)(param_1 + 0x2c) + iVar10 * 4)) != 0)) {
              pmVar1 = pmVar5 + iVar9 * 8;
              local_5c = (float)(int)((*(uint *)pmVar1 & 0x1fffff) - 0x100000) * 9.5367386e-07;
              local_58 = (float)(int)(((*(ushort *)(pmVar1 + 4) & 0x3ff) << 0xb |
                                      (uint)(*(ushort *)(pmVar1 + 2) >> 5)) - 0x100000) *
                         9.5367386e-07;
              local_54 = (float)(int)((*(uint *)(pmVar1 + 4) >> 10 & 0x1fffff) - 0x100000) *
                         9.5367386e-07;
              local_50 = SQRT((1.0 - local_54 * local_54) -
                              (local_58 * local_58 + local_5c * local_5c));
              if ((char)pmVar1[7] < '\0') {
                local_50 = -local_50;
              }
              pmVar1 = pmVar5 + iVar6 * 8;
              local_4c = (float)(int)((*(uint *)pmVar1 & 0x1fffff) - 0x100000) * 9.5367386e-07;
              local_48 = (float)(int)(((*(ushort *)(pmVar1 + 4) & 0x3ff) << 0xb |
                                      (uint)(*(ushort *)(pmVar1 + 2) >> 5)) - 0x100000) *
                         9.5367386e-07;
              local_44 = (float)(int)((*(uint *)(pmVar1 + 4) >> 10 & 0x1fffff) - 0x100000) *
                         9.5367386e-07;
              local_40 = SQRT((1.0 - local_44 * local_44) -
                              (local_4c * local_4c + local_48 * local_48));
              if ((char)pmVar1[7] < '\0') {
                local_40 = -local_40;
              }
              pmVar1 = pmVar5 + iVar11 * 8;
              local_3c = (float)(int)((*(uint *)pmVar1 & 0x1fffff) - 0x100000) * 9.5367386e-07;
              local_38 = (float)(int)(((*(ushort *)(pmVar1 + 4) & 0x3ff) << 0xb |
                                      (uint)(*(ushort *)(pmVar1 + 2) >> 5)) - 0x100000) *
                         9.5367386e-07;
              local_34 = (float)(int)((*(uint *)(pmVar1 + 4) >> 10 & 0x1fffff) - 0x100000) *
                         9.5367386e-07;
              local_30 = SQRT(((1.0 - local_34 * local_34) - local_38 * local_38) -
                              local_3c * local_3c);
              if ((char)pmVar1[7] < '\0') {
                local_30 = -local_30;
              }
              if (in_XMM1_Da == 1.0) {
                Hermite_Spline((Quaternion *)&local_5c,(Quaternion *)&local_4c,
                               (Quaternion *)&local_3c,local_7c,
                               (Quaternion *)(param_7 + iVar10 * 0x10));
              }
              else {
                Hermite_Spline((Quaternion *)&local_5c,(Quaternion *)&local_4c,
                               (Quaternion *)&local_3c,local_7c,(Quaternion *)&local_2c);
                QuaternionBlend((Quaternion *)(param_7 + iVar10 * 0x10),(Quaternion *)&local_2c,
                                in_XMM1_Da,(Quaternion *)(param_7 + iVar10 * 0x10));
              }
            }
            pmVar5 = pmVar5 + *(short *)(param_5 + 0x5a) * 8;
          }
          local_60 = local_60 + 1;
          local_64 = local_64 + 0xd8;
        } while (local_60 < *(int *)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)