L L4D2node

ExtractTwoFrames

0x00b9aff0 · 4262 bytes · __cdecl

_Z16ExtractTwoFrameshfPhRS_iR10QuaternionR6VectorbPK19mstudiolinearbone_ti

Decompiled

undefined (10 params)

/* ExtractTwoFrames(unsigned char, float, unsigned char*, unsigned char*&, int, Quaternion&,
   Vector&, bool, mstudiolinearbone_t const*, int) */

ushort * ExtractTwoFrames(uchar param_1,float param_2,uchar *param_3,uchar **param_4,int param_5,
                         Quaternion *param_6,Vector *param_7,bool param_8,
                         mstudiolinearbone_t *param_9,int param_10)

{
  int iVar1;
  undefined4 uVar2;
  undefined4 uVar3;
  undefined4 uVar4;
  uchar uVar5;
  ushort uVar6;
  ushort uVar7;
  byte bVar8;
  mstudiolinearbone_t *pmVar9;
  void *pvVar10;
  float fVar11;
  ushort *puVar12;
  float fVar13;
  float *pfVar14;
  float fVar15;
  float *pfVar16;
  float fVar17;
  float fVar18;
  float fVar19;
  float local_84;
  float local_80;
  float local_7c;
  float local_78;
  float local_74;
  float local_70;
  float local_6c;
  float local_68;
  float local_64;
  float local_60;
  float local_5c;
  float local_58;
  float local_54;
  float local_50;
  float local_4c [4];
  float local_3c [4];
  float local_2c [7];
  
  if ((param_1 & 8) == 0) {
    if ((char)param_1 < '\0') {
      iVar1 = (uint)(param_3[3] >> 7) + (uint)(param_3[1] >> 7) * 2;
      pfVar14 = (float *)((int)local_4c + (iVar1 * 4 + 4U & 0xc));
      uVar6 = *(ushort *)(param_3 + 2);
      local_4c[iVar1] = (float)(int)((*(ushort *)param_3 & 0x7fff) - 0x4000) * 4.3162985e-05;
      uVar7 = *(ushort *)(param_3 + 4);
      *pfVar14 = (float)(int)((uVar6 & 0x7fff) - 0x4000) * 4.3162985e-05;
      fVar19 = (float)(int)((uVar7 & 0x7fff) - 0x4000) * 4.3162985e-05;
      local_4c[iVar1 + 2U & 3] = fVar19;
      fVar18 = local_4c[iVar1];
      fVar13 = *pfVar14;
      pfVar14 = (float *)((int)local_4c + (iVar1 * 4 + 0xcU & 0xc));
      uVar5 = param_3[5];
      fVar18 = SQRT(((1.0 - fVar19 * fVar19) - fVar18 * fVar18) - fVar13 * fVar13);
      *pfVar14 = fVar18;
      if ((char)uVar5 < '\0') {
        *pfVar14 = -fVar18;
      }
      local_6c = local_4c[0];
      local_68 = local_4c[1];
      local_64 = local_4c[2];
      local_60 = local_4c[3];
      puVar12 = (ushort *)(param_3 + param_5);
      iVar1 = (uint)(*(byte *)((int)puVar12 + 3) >> 7) +
              (uint)(*(byte *)((int)puVar12 + 1) >> 7) * 2;
      local_3c[iVar1] = (float)(int)((*puVar12 & 0x7fff) - 0x4000) * 4.3162985e-05;
      pfVar16 = (float *)((int)local_3c + (iVar1 * 4 + 4U & 0xc));
      *pfVar16 = (float)(int)((puVar12[1] & 0x7fff) - 0x4000) * 4.3162985e-05;
      pfVar14 = (float *)((int)local_3c + (iVar1 * 4 + 0xcU & 0xc));
      fVar19 = (float)(int)((puVar12[2] & 0x7fff) - 0x4000) * 4.3162985e-05;
      local_3c[iVar1 + 2U & 3] = fVar19;
      fVar18 = local_3c[iVar1];
      fVar13 = *pfVar16;
      fVar18 = SQRT(((1.0 - fVar19 * fVar19) - fVar18 * fVar18) - fVar13 * fVar13);
      *pfVar14 = fVar18;
      if (*(char *)((int)puVar12 + 5) < '\0') {
        *pfVar14 = -fVar18;
      }
      local_5c = local_3c[0];
      local_58 = local_3c[1];
      local_54 = local_3c[2];
      local_50 = local_3c[3];
      goto LAB_00b9b6de;
    }
    if ((param_1 & 2) == 0) {
      if ((param_1 & 0x40) == 0) {
        if (param_9 != (mstudiolinearbone_t *)0x0) {
          if (param_8) {
            *(undefined4 *)param_6 = 0;
            *(undefined4 *)(param_6 + 4) = 0;
            *(undefined4 *)(param_6 + 8) = 0;
            *(undefined4 *)(param_6 + 0xc) = 0x3f800000;
          }
          else {
            pmVar9 = param_9 + param_10 * 0x10 + *(int *)(param_9 + 0x10);
            uVar2 = *(undefined4 *)(pmVar9 + 4);
            uVar3 = *(undefined4 *)(pmVar9 + 8);
            uVar4 = *(undefined4 *)(pmVar9 + 0xc);
            *(undefined4 *)param_6 = *(undefined4 *)pmVar9;
            *(undefined4 *)(param_6 + 4) = uVar2;
            *(undefined4 *)(param_6 + 8) = uVar3;
            *(undefined4 *)(param_6 + 0xc) = uVar4;
          }
        }
      }
      else {
        puVar12 = (ushort *)*param_4;
        iVar1 = (uint)(*(byte *)((int)puVar12 + 3) >> 7) +
                (uint)(*(byte *)((int)puVar12 + 1) >> 7) * 2;
        local_2c[iVar1] = (float)(int)((*puVar12 & 0x7fff) - 0x4000) * 4.3162985e-05;
        pfVar16 = (float *)((int)local_2c + (iVar1 * 4 + 4U & 0xc));
        *pfVar16 = (float)(int)((puVar12[1] & 0x7fff) - 0x4000) * 4.3162985e-05;
        fVar19 = (float)(int)((puVar12[2] & 0x7fff) - 0x4000) * 4.3162985e-05;
        local_2c[iVar1 + 2U & 3] = fVar19;
        pfVar14 = (float *)((int)local_2c + (iVar1 * 4 + 0xcU & 0xc));
        fVar18 = *pfVar16;
        fVar13 = local_2c[iVar1];
        fVar18 = SQRT(((1.0 - fVar19 * fVar19) - fVar13 * fVar13) - fVar18 * fVar18);
        *pfVar14 = fVar18;
        if (*(char *)((int)puVar12 + 5) < '\0') {
          *pfVar14 = -fVar18;
        }
        *(float *)param_6 = local_2c[0];
        *(float *)(param_6 + 4) = local_2c[1];
        *(float *)(param_6 + 8) = local_2c[2];
        *(float *)(param_6 + 0xc) = local_2c[3];
        *param_4 = *param_4 + 6;
      }
    }
    else {
      puVar12 = (ushort *)*param_4;
      fVar18 = (float)(int)(*puVar12 - 0x8000) * 3.0517112e-05;
      fVar13 = (float)(int)(puVar12[1] - 0x8000) * 3.0517112e-05;
      fVar19 = (float)(int)((puVar12[2] & 0x7fff) - 0x4000) * 6.1033294e-05;
      fVar17 = SQRT(((1.0 - fVar19 * fVar19) - fVar13 * fVar13) - fVar18 * fVar18);
      if (*(char *)((int)puVar12 + 5) < '\0') {
        fVar17 = -fVar17;
      }
      *(float *)param_6 = fVar18;
      *(float *)(param_6 + 4) = fVar13;
      *(float *)(param_6 + 8) = fVar19;
      *(float *)(param_6 + 0xc) = fVar17;
      *param_4 = *param_4 + 6;
    }
  }
  else {
    local_6c = (float)(int)(*(ushort *)param_3 - 0x8000) * 3.0517112e-05;
    local_68 = (float)(int)(*(ushort *)(param_3 + 2) - 0x8000) * 3.0517112e-05;
    local_64 = (float)(int)((*(ushort *)(param_3 + 4) & 0x7fff) - 0x4000) * 6.1033294e-05;
    local_60 = SQRT(((1.0 - local_64 * local_64) - local_6c * local_6c) - local_68 * local_68);
    if ((char)param_3[5] < '\0') {
      local_60 = -local_60;
    }
    puVar12 = (ushort *)(param_3 + param_5);
    local_5c = (float)(int)(*puVar12 - 0x8000) * 3.0517112e-05;
    local_58 = (float)(int)(puVar12[1] - 0x8000) * 3.0517112e-05;
    local_54 = (float)(int)((puVar12[2] & 0x7fff) - 0x4000) * 6.1033294e-05;
    local_50 = SQRT((1.0 - local_54 * local_54) - (local_5c * local_5c + local_58 * local_58));
    if (*(char *)((int)puVar12 + 5) < '\0') {
      local_50 = -local_50;
    }
LAB_00b9b6de:
    param_3 = param_3 + 6;
    QuaternionBlend((Quaternion *)&local_6c,(Quaternion *)&local_5c,param_2,param_6);
  }
  if ((param_1 & 4) == 0) {
    if ((param_1 & 1) == 0) {
      if ((param_1 & 0x10) == 0) {
        if ((param_1 & 0x20) == 0) {
          if (param_9 != (mstudiolinearbone_t *)0x0) {
            if (param_8) {
              *(undefined4 *)param_7 = 0;
              *(undefined4 *)(param_7 + 4) = 0;
              *(undefined4 *)(param_7 + 8) = 0;
            }
            else {
              pmVar9 = param_9 + *(int *)(param_9 + 0xc) + param_10 * 0xc;
              uVar2 = *(undefined4 *)(pmVar9 + 4);
              uVar3 = *(undefined4 *)(pmVar9 + 8);
              *(undefined4 *)param_7 = *(undefined4 *)pmVar9;
              *(undefined4 *)(param_7 + 4) = uVar2;
              *(undefined4 *)(param_7 + 8) = uVar3;
            }
          }
        }
        else {
          _V_memcpy(param_7,*param_4,0xc);
          *param_4 = *param_4 + 0xc;
        }
      }
      else {
        _V_memcpy(&local_84,param_3,0xc);
        pvVar10 = (void *)(param_5 + (int)param_3);
        param_3 = (uchar *)((int)param_3 + 0xc);
        _V_memcpy(&local_78,pvVar10,0xc);
        fVar18 = 1.0 - param_2;
        *(float *)(param_7 + 4) = local_80 * fVar18 + param_2 * local_74;
        *(float *)(param_7 + 8) = local_7c * fVar18 + param_2 * local_70;
        *(float *)param_7 = fVar18 * local_84 + param_2 * local_78;
      }
      return (ushort *)param_3;
    }
    puVar12 = (ushort *)*param_4;
    uVar6 = *puVar12;
    if ((uVar6 & 0x7fff) == 0x7c00) {
      fVar18 = 65504.0;
      if ((short)uVar6 < 0) {
        fVar18 = -65504.0;
      }
    }
    else {
      bVar8 = (byte)(uVar6 >> 8);
      if ((bVar8 & 0x7c) == 0x7c) {
        fVar18 = 0.0;
        if ((uVar6 & 0x3ff) == 0) goto LAB_00b9b9dd;
      }
      else if (((uVar6 & 0x7c00) == 0) && ((uVar6 & 0x3ff) != 0)) {
        fVar18 = 1.0;
        if ((short)uVar6 < 0) {
          fVar18 = -1.0;
        }
        fVar18 = ((float)(uVar6 & 0x3ff) + 0.0) * 5.9604645e-08 * fVar18;
      }
      else {
LAB_00b9b9dd:
        fVar18 = (float)((uVar6 & 0x3ff) << 0xd | (uint)(bVar8 >> 7) << 0x1f |
                        (uint)((uVar6 >> 10 & 0x1f) != 0) * ((uVar6 >> 10 & 0x1f) + 0x70) * 0x800000
                        );
      }
    }
    uVar6 = puVar12[1];
    if ((uVar6 & 0x7fff) == 0x7c00) {
      fVar13 = 65504.0;
      if ((short)uVar6 < 0) {
        fVar13 = -65504.0;
      }
    }
    else {
      bVar8 = (byte)(uVar6 >> 8);
      if ((bVar8 & 0x7c) == 0x7c) {
        fVar13 = 0.0;
        if ((uVar6 & 0x3ff) == 0) goto LAB_00b9b833;
      }
      else if (((uVar6 & 0x7c00) == 0) && ((uVar6 & 0x3ff) != 0)) {
        fVar13 = 1.0;
        if ((short)uVar6 < 0) {
          fVar13 = -1.0;
        }
        fVar13 = ((float)(uVar6 & 0x3ff) + 0.0) * 5.9604645e-08 * fVar13;
      }
      else {
LAB_00b9b833:
        fVar13 = (float)((uVar6 & 0x3ff) << 0xd | (uint)(bVar8 >> 7) << 0x1f |
                        (uint)((uVar6 >> 10 & 0x1f) != 0) * ((uVar6 >> 10 & 0x1f) + 0x70) * 0x800000
                        );
      }
    }
    uVar6 = puVar12[2];
    if ((uVar6 & 0x7fff) == 0x7c00) {
      fVar19 = 65504.0;
      if ((short)uVar6 < 0) {
        fVar19 = -65504.0;
      }
    }
    else {
      bVar8 = (byte)(uVar6 >> 8);
      if ((bVar8 & 0x7c) == 0x7c) {
        fVar19 = 0.0;
        if ((uVar6 & 0x3ff) != 0) goto LAB_00b9b9a5;
      }
      else if (((uVar6 & 0x7c00) == 0) && ((uVar6 & 0x3ff) != 0)) {
        fVar19 = 1.0;
        if ((short)uVar6 < 0) {
          fVar19 = -1.0;
        }
        fVar19 = ((float)(uVar6 & 0x3ff) + 0.0) * 5.9604645e-08 * fVar19;
        goto LAB_00b9b9a5;
      }
      fVar19 = (float)((uVar6 & 0x3ff) << 0xd | (uint)(bVar8 >> 7) << 0x1f |
                      (uint)((uVar6 >> 10 & 0x1f) != 0) * ((uVar6 >> 10 & 0x1f) + 0x70) * 0x800000);
    }
LAB_00b9b9a5:
    *(float *)param_7 = fVar18;
    *(float *)(param_7 + 4) = fVar13;
    *(float *)(param_7 + 8) = fVar19;
    *param_4 = *param_4 + 6;
    return (ushort *)param_3;
  }
  uVar6 = *(ushort *)param_3;
  if ((uVar6 & 0x7fff) == 0x7c00) {
    if ((short)uVar6 < 0) {
      fVar18 = (1.0 - param_2) * -65504.0;
    }
    else {
      fVar18 = (1.0 - param_2) * 65504.0;
    }
  }
  else {
    bVar8 = (byte)(uVar6 >> 8);
    if ((bVar8 & 0x7c) == 0x7c) {
      if ((uVar6 & 0x3ff) == 0) goto LAB_00b9b2c7;
      fVar18 = 0.0;
    }
    else {
      if (((uVar6 & 0x7c00) == 0) && ((uVar6 & 0x3ff) != 0)) {
        if ((short)uVar6 < 0) {
          fVar18 = -1.0;
        }
        else {
          fVar18 = 1.0;
        }
        fVar18 = ((float)(uVar6 & 0x3ff) + 0.0) * 5.9604645e-08 * fVar18;
      }
      else {
LAB_00b9b2c7:
        fVar18 = (float)((uVar6 & 0x3ff) << 0xd | (uint)(bVar8 >> 7) << 0x1f |
                        (uint)((uVar6 >> 10 & 0x1f) != 0) * ((uVar6 >> 10 & 0x1f) + 0x70) * 0x800000
                        );
      }
      fVar18 = fVar18 * (1.0 - param_2);
    }
  }
  fVar19 = 1.0 - param_2;
  fVar13 = 1.0;
  uVar6 = *(ushort *)((int)param_3 + 2);
  if ((uVar6 & 0x7fff) == 0x7c00) {
    if ((short)uVar6 < 0) {
      fVar17 = fVar19 * -65504.0;
    }
    else {
      fVar17 = fVar19 * 65504.0;
    }
  }
  else {
    bVar8 = (byte)(uVar6 >> 8);
    if ((bVar8 & 0x7c) == 0x7c) {
      fVar17 = 0.0;
      if ((uVar6 & 0x3ff) == 0) goto LAB_00b9b34d;
    }
    else {
      if (((uVar6 & 0x7c00) == 0) && ((uVar6 & 0x3ff) != 0)) {
        fVar17 = fVar13;
        if ((short)uVar6 < 0) {
          fVar17 = -1.0;
        }
        fVar17 = ((float)(uVar6 & 0x3ff) + 0.0) * 5.9604645e-08 * fVar17;
      }
      else {
LAB_00b9b34d:
        fVar17 = (float)((uVar6 & 0x3ff) << 0xd | (uint)(bVar8 >> 7) << 0x1f |
                        (uint)((uVar6 >> 10 & 0x1f) != 0) * ((uVar6 >> 10 & 0x1f) + 0x70) * 0x800000
                        );
      }
      fVar17 = fVar17 * fVar19;
    }
  }
  uVar6 = *(ushort *)((int)param_3 + 4);
  if ((uVar6 & 0x7fff) == 0x7c00) {
    if ((short)uVar6 < 0) {
      fVar19 = fVar19 * -65504.0;
    }
    else {
      fVar19 = fVar19 * 65504.0;
    }
  }
  else {
    bVar8 = (byte)(uVar6 >> 8);
    if ((bVar8 & 0x7c) == 0x7c) {
      if ((uVar6 & 0x3ff) == 0) goto LAB_00b9b3c1;
      fVar19 = 0.0;
    }
    else {
      if (((uVar6 & 0x7c00) == 0) && ((uVar6 & 0x3ff) != 0)) {
        fVar11 = fVar13;
        if ((short)uVar6 < 0) {
          fVar11 = -1.0;
        }
        fVar11 = ((float)(uVar6 & 0x3ff) + 0.0) * 5.9604645e-08 * fVar11;
      }
      else {
LAB_00b9b3c1:
        fVar11 = (float)((uVar6 & 0x3ff) << 0xd | (uint)(bVar8 >> 7) << 0x1f |
                        (uint)((uVar6 >> 10 & 0x1f) != 0) * ((uVar6 >> 10 & 0x1f) + 0x70) * 0x800000
                        );
      }
      fVar19 = fVar19 * fVar11;
    }
  }
  puVar12 = (ushort *)(param_5 + (int)param_3);
  uVar6 = *puVar12;
  if ((uVar6 & 0x7fff) == 0x7c00) {
    if ((short)uVar6 < 0) {
      fVar11 = param_2 * -65504.0;
    }
    else {
      fVar11 = param_2 * 65504.0;
    }
  }
  else {
    bVar8 = (byte)(uVar6 >> 8);
    if ((bVar8 & 0x7c) == 0x7c) {
      fVar11 = 0.0;
      if ((uVar6 & 0x3ff) == 0) goto LAB_00b9b444;
    }
    else {
      if (((uVar6 & 0x7c00) == 0) && ((uVar6 & 0x3ff) != 0)) {
        fVar11 = fVar13;
        if ((short)uVar6 < 0) {
          fVar11 = -1.0;
        }
        fVar11 = ((float)(uVar6 & 0x3ff) + 0.0) * 5.9604645e-08 * fVar11;
      }
      else {
LAB_00b9b444:
        fVar11 = (float)((uVar6 & 0x3ff) << 0xd | (uint)(bVar8 >> 7) << 0x1f |
                        (uint)((uVar6 >> 10 & 0x1f) != 0) * ((uVar6 >> 10 & 0x1f) + 0x70) * 0x800000
                        );
      }
      fVar11 = fVar11 * param_2;
    }
  }
  uVar6 = puVar12[1];
  if ((uVar6 & 0x7fff) == 0x7c00) {
    if ((short)uVar6 < 0) {
      fVar15 = param_2 * -65504.0;
    }
    else {
      fVar15 = param_2 * 65504.0;
    }
  }
  else {
    bVar8 = (byte)(uVar6 >> 8);
    if ((bVar8 & 0x7c) == 0x7c) {
      fVar15 = 0.0;
      if ((uVar6 & 0x3ff) == 0) goto LAB_00b9b4b7;
    }
    else {
      if (((uVar6 & 0x7c00) == 0) && ((uVar6 & 0x3ff) != 0)) {
        fVar15 = fVar13;
        if ((short)uVar6 < 0) {
          fVar15 = -1.0;
        }
        fVar15 = ((float)(uVar6 & 0x3ff) + 0.0) * 5.9604645e-08 * fVar15;
      }
      else {
LAB_00b9b4b7:
        fVar15 = (float)((uVar6 & 0x3ff) << 0xd | (uint)(bVar8 >> 7) << 0x1f |
                        (uint)((uVar6 >> 10 & 0x1f) != 0) * ((uVar6 >> 10 & 0x1f) + 0x70) * 0x800000
                        );
      }
      fVar15 = fVar15 * param_2;
    }
  }
  uVar6 = puVar12[2];
  if ((uVar6 & 0x7fff) == 0x7c00) {
    if ((short)uVar6 < 0) {
      fVar13 = param_2 * -65504.0;
    }
    else {
      fVar13 = param_2 * 65504.0;
    }
    goto LAB_00b9b934;
  }
  bVar8 = (byte)(uVar6 >> 8);
  if ((bVar8 & 0x7c) == 0x7c) {
    fVar13 = 0.0;
    if ((uVar6 & 0x3ff) != 0) goto LAB_00b9b934;
LAB_00b9b8fa:
    fVar13 = (float)((uVar6 & 0x3ff) << 0xd | (uint)(bVar8 >> 7) << 0x1f |
                    (uint)((uVar6 >> 10 & 0x1f) != 0) * ((uVar6 >> 10 & 0x1f) + 0x70) * 0x800000);
  }
  else {
    if (((uVar6 & 0x7c00) != 0) || ((uVar6 & 0x3ff) == 0)) goto LAB_00b9b8fa;
    if ((short)uVar6 < 0) {
      fVar13 = -1.0;
    }
    fVar13 = ((float)(uVar6 & 0x3ff) + 0.0) * 5.9604645e-08 * fVar13;
  }
  fVar13 = fVar13 * param_2;
LAB_00b9b934:
  *(float *)param_7 = fVar18 + fVar11;
  *(float *)(param_7 + 4) = fVar15 + fVar17;
  *(float *)(param_7 + 8) = fVar19 + fVar13;
  return (ushort *)((int)param_3 + 6);
}

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)