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 intoaddons/sourcemod/gamedata/<your_plugin>.txt
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.
Type inference is best-effort from the C signature - sanity-check the DHooks types before shipping.