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 intoaddons/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.
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.
Gamedata KeyValues
DHooks plugin example
Type inference is best-effort from the C signature - sanity-check the DHooks types before shipping.