acdream/docs/research/decompiled/chunk_005F0000.c
Erik 4d36756b91 research: full acclient.exe decompilation — 22,225 functions, 688K lines
Complete decompilation of the retail Asheron's Call client using
Ghidra 12.0.4 + pyghidra headless. 22,225 of 22,226 functions
successfully decompiled in 75 seconds.

Output: docs/research/decompiled/ (54 files, 688,567 lines of C)

Key findings already identified:
- CLandBlockStruct::ConstructPolygons at chunk_00530000.c:2270
  (split direction formula with 0x0CCAC033 constants)
- Motion command handlers at chunk_00510000.c (0x45000005 etc)
- Motion interpreter at chunk_00520000.c
- Portal space UI at chunk_004D0000.c and chunk_00560000.c

Next: identify CPhysicsObj, CMotionInterp, collision, and movement
functions by cross-referencing against ACE's C# port.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-12 23:25:51 +02:00

13792 lines
433 KiB
C

// Decompiled from acclient.exe — chunk 0x005F0000
// Ghidra 12.0.4 + pyghidra headless
// --- FUN_005f000d at 0x005F000D (size: 344) ---
undefined4 __fastcall FUN_005f000d(int *param_1)
{
int iVar1;
undefined4 uVar2;
uint uVar3;
int iVar4;
uint uVar5;
undefined4 *puVar6;
undefined4 *puVar7;
undefined4 *puVar8;
undefined4 *puVar9;
undefined4 *puVar10;
uint local_10;
undefined4 *local_c;
uint local_8;
iVar4 = *param_1;
if (((*(uint *)(iVar4 + 0x48) | *(uint *)(iVar4 + 0x44) | *(uint *)(iVar4 + 0x3c) |
*(uint *)(iVar4 + 0x40)) & 3) != 0) {
return 0x80004005;
}
iVar1 = param_1[1];
if (((*(uint *)(iVar1 + 0x48) | *(uint *)(iVar1 + 0x44) | *(uint *)(iVar1 + 0x40) |
*(uint *)(iVar1 + 0x3c)) & 3) == 0) {
iVar1 = *(int *)(param_1[1] + 4);
if (iVar1 == 0x31545844) {
local_8 = 8;
}
else {
if ((((iVar1 != 0x32545844) && (iVar1 != 0x33545844)) && (iVar1 != 0x34545844)) &&
(iVar1 != 0x35545844)) goto LAB_005f0052;
local_8 = 0x10;
}
iVar1 = param_1[1];
uVar5 = (*(uint *)(iVar1 + 0x68) >> 2) * local_8;
local_10 = 0;
puVar6 = (undefined4 *)
((*(uint *)(iVar1 + 0x40) >> 2) * *(int *)(iVar1 + 0x60) +
*(int *)(iVar1 + 100) * *(int *)(iVar1 + 0x4c) +
(*(uint *)(iVar1 + 0x3c) >> 2) * local_8 + *(int *)(iVar1 + 0x20));
local_c = (undefined4 *)
((*(uint *)(iVar4 + 0x40) >> 2) * *(int *)(iVar4 + 0x60) +
*(int *)(iVar4 + 100) * *(int *)(iVar4 + 0x4c) +
(*(uint *)(iVar4 + 0x3c) >> 2) * local_8 + *(int *)(iVar4 + 0x20));
if (*(int *)(param_1[1] + 0x70) != 0) {
uVar3 = *(uint *)(param_1[1] + 0x6c);
do {
local_8 = 0;
puVar8 = local_c;
puVar10 = puVar6;
if (uVar3 != 0) {
do {
local_8 = local_8 + 4;
puVar7 = puVar8;
puVar9 = puVar10;
for (uVar3 = uVar5 >> 2; uVar3 != 0; uVar3 = uVar3 - 1) {
*puVar9 = *puVar7;
puVar7 = puVar7 + 1;
puVar9 = puVar9 + 1;
}
for (iVar4 = 0; iVar4 != 0; iVar4 = iVar4 + -1) {
*(undefined1 *)puVar9 = *(undefined1 *)puVar7;
puVar7 = (undefined4 *)((int)puVar7 + 1);
puVar9 = (undefined4 *)((int)puVar9 + 1);
}
puVar10 = (undefined4 *)((int)puVar10 + *(int *)(param_1[1] + 0x60));
puVar8 = (undefined4 *)((int)puVar8 + *(int *)(*param_1 + 0x60));
uVar3 = *(uint *)(param_1[1] + 0x6c);
} while (local_8 < uVar3);
}
local_c = (undefined4 *)((int)local_c + *(int *)(*param_1 + 100));
puVar6 = (undefined4 *)((int)puVar6 + *(int *)(param_1[1] + 100));
local_10 = local_10 + 1;
} while (local_10 < *(uint *)(param_1[1] + 0x70));
}
uVar2 = 0;
}
else {
LAB_005f0052:
uVar2 = 0x80004005;
}
return uVar2;
}
// --- FUN_005f0165 at 0x005F0165 (size: 298) ---
undefined4 FUN_005f0165(uint *param_1,uint param_2,int param_3,uint param_4,int param_5,int param_6)
{
uint uVar1;
uint uVar2;
uint uVar3;
uint uVar4;
uint uVar5;
uint *puVar6;
int local_14;
uint *local_8;
uVar5 = param_4 * param_5 + param_2;
if (param_2 < uVar5) {
param_4 = param_2 + param_3 * 4;
do {
local_8 = param_1;
if (param_2 < param_4) {
puVar6 = (uint *)(param_2 + 4);
local_14 = ((param_4 - param_2) - 1 >> 3) + 1;
do {
uVar1 = *(uint *)((int)puVar6 + param_5);
uVar2 = *(uint *)(param_5 + -4 + (int)puVar6);
uVar3 = *puVar6;
uVar4 = puVar6[-1];
*local_8 = ((uVar4 >> 2 & 0xffc03fc0) + (uVar2 >> 2 & 0xffc03fc0) +
(uVar1 >> 2 & 0xffc03fc0) + -0x7fff80 + (uVar3 >> 2 & 0xffc03fc0) ^
(uVar4 & 0xff00ff) + (uVar2 & 0xff00ff) + (uVar1 & 0xff00ff) + 0x20002 +
(uVar3 & 0xff00ff) >> 2) & 0xff00ff ^
(uint)("Mouse-Look" +
(uVar3 >> 2 & 0x3fc03fc0) +
(uVar4 >> 2 & 0x3fc03fc0) + (uVar2 >> 2 & 0x3fc03fc0) +
(uVar1 >> 2 & 0x3fc03fc0) + 4);
puVar6 = puVar6 + 2;
local_14 = local_14 + -1;
local_8 = local_8 + 1;
} while (local_14 != 0);
}
param_1 = (uint *)((int)param_1 + param_6);
param_4 = param_4 + param_5 * 2;
param_2 = param_2 + param_5 * 2;
} while (param_2 < uVar5);
}
return 0;
}
// --- FUN_005f028f at 0x005F028F (size: 34) ---
void __fastcall FUN_005f028f(int *param_1)
{
int iVar1;
iVar1 = *param_1;
(*(code *)PTR_FUN_00825c6c)
(*(undefined4 *)(param_1[1] + 0x20),*(undefined4 *)(iVar1 + 0x20),
*(undefined4 *)(iVar1 + 0x68),*(undefined4 *)(iVar1 + 0x6c),
*(undefined4 *)(iVar1 + 0x60),*(undefined4 *)(param_1[1] + 0x60));
return;
}
// --- FUN_005f02b1 at 0x005F02B1 (size: 236) ---
undefined4
FUN_005f02b1(uint *param_1,uint param_2,uint *param_3,uint param_4,int param_5,int param_6)
{
uint *puVar1;
uint *puVar2;
uint uVar3;
uint uVar4;
uint uVar5;
uint *puVar6;
int local_10;
uVar5 = param_4 * param_5 + param_2;
if (param_2 < uVar5) {
param_4 = param_2 + (int)param_3 * 4;
do {
param_3 = param_1;
if (param_2 < param_4) {
local_10 = ((param_4 - param_2) - 1 >> 3) + 1;
puVar6 = (uint *)(param_2 + 4);
do {
puVar2 = (uint *)((int)puVar6 + param_5);
uVar3 = *puVar6;
uVar4 = *(uint *)(param_5 + -4 + (int)puVar6);
puVar1 = puVar6 + -1;
puVar6 = puVar6 + 2;
local_10 = local_10 + -1;
*param_3 = ((*puVar1 & 0xff00ff) + (uVar4 & 0xff00ff) + (*puVar2 & 0xff00ff) + 0x20002 +
(uVar3 & 0xff00ff) & 0x3fc03fc |
(*puVar1 & 0xff00) + (uVar4 & 0xff00) + (*puVar2 & 0xff00) + 0x200 +
(uVar3 & 0xff00) & 0x3fc00) >> 2;
param_3 = param_3 + 1;
} while (local_10 != 0);
}
param_1 = (uint *)((int)param_1 + param_6);
param_4 = param_4 + param_5 * 2;
param_2 = param_2 + param_5 * 2;
} while (param_2 < uVar5);
}
return 0;
}
// --- FUN_005f039d at 0x005F039D (size: 282) ---
undefined4
FUN_005f039d(undefined8 *param_1,undefined8 *param_2,uint param_3,int param_4,int param_5,
int param_6)
{
undefined8 uVar1;
undefined8 uVar2;
short sVar3;
short sVar4;
short sVar5;
short sVar6;
short sVar7;
short sVar8;
short sVar9;
short sVar10;
undefined8 *puVar11;
undefined4 uVar12;
undefined8 *puVar13;
undefined8 *puVar14;
undefined8 *puVar15;
undefined8 uVar16;
undefined8 uVar17;
if ((param_3 & 3) == 0) {
puVar13 = (undefined8 *)(param_4 * param_5 + (int)param_2);
for (; (int)param_2 < (int)puVar13; param_2 = (undefined8 *)((int)param_2 + param_5 * 2)) {
puVar14 = (undefined8 *)((int)param_2 + param_5);
puVar11 = param_1;
puVar15 = param_2;
while ((int)puVar15 < (int)((int)param_2 + param_3 * 4)) {
uVar16 = *puVar15;
uVar17 = *puVar14;
uVar1 = puVar15[1];
uVar2 = puVar14[1];
puVar15 = puVar15 + 2;
puVar14 = puVar14 + 2;
uVar16 = psraw(CONCAT26((ushort)(byte)((ulonglong)uVar16 >> 0x18) +
(ushort)(byte)((ulonglong)uVar16 >> 0x38) +
(ushort)(byte)((ulonglong)uVar17 >> 0x18) +
(ushort)(byte)((ulonglong)uVar17 >> 0x38) + 2,
CONCAT24((ushort)(byte)((ulonglong)uVar16 >> 0x10) +
(ushort)(byte)((ulonglong)uVar16 >> 0x30) +
(ushort)(byte)((ulonglong)uVar17 >> 0x10) +
(ushort)(byte)((ulonglong)uVar17 >> 0x30) + 2,
CONCAT22((ushort)(byte)((ulonglong)uVar16 >> 8) +
(ushort)(byte)((ulonglong)uVar16 >> 0x28) +
(ushort)(byte)((ulonglong)uVar17 >> 8) +
(ushort)(byte)((ulonglong)uVar17 >> 0x28) + 2,
(ushort)(byte)uVar16 +
(ushort)(byte)((ulonglong)uVar16 >> 0x20) +
(ushort)(byte)uVar17 +
(ushort)(byte)((ulonglong)uVar17 >> 0x20) + 2))),2
);
uVar17 = psraw(CONCAT26((ushort)(byte)((ulonglong)uVar1 >> 0x18) +
(ushort)(byte)((ulonglong)uVar1 >> 0x38) +
(ushort)(byte)((ulonglong)uVar2 >> 0x18) +
(ushort)(byte)((ulonglong)uVar2 >> 0x38) + 2,
CONCAT24((ushort)(byte)((ulonglong)uVar1 >> 0x10) +
(ushort)(byte)((ulonglong)uVar1 >> 0x30) +
(ushort)(byte)((ulonglong)uVar2 >> 0x10) +
(ushort)(byte)((ulonglong)uVar2 >> 0x30) + 2,
CONCAT22((ushort)(byte)((ulonglong)uVar1 >> 8) +
(ushort)(byte)((ulonglong)uVar1 >> 0x28) +
(ushort)(byte)((ulonglong)uVar2 >> 8) +
(ushort)(byte)((ulonglong)uVar2 >> 0x28) + 2,
(ushort)(byte)uVar1 +
(ushort)(byte)((ulonglong)uVar1 >> 0x20) +
(ushort)(byte)uVar2 +
(ushort)(byte)((ulonglong)uVar2 >> 0x20) + 2))),2)
;
sVar3 = (short)uVar16;
sVar4 = (short)((ulonglong)uVar16 >> 0x10);
sVar5 = (short)((ulonglong)uVar16 >> 0x20);
sVar6 = (short)((ulonglong)uVar16 >> 0x30);
sVar7 = (short)uVar17;
sVar8 = (short)((ulonglong)uVar17 >> 0x10);
sVar9 = (short)((ulonglong)uVar17 >> 0x20);
sVar10 = (short)((ulonglong)uVar17 >> 0x30);
*puVar11 = CONCAT17((0 < sVar10) * (sVar10 < 0x100) * (char)((ulonglong)uVar17 >> 0x30) -
(0xff < sVar10),
CONCAT16((0 < sVar9) * (sVar9 < 0x100) *
(char)((ulonglong)uVar17 >> 0x20) - (0xff < sVar9),
CONCAT15((0 < sVar8) * (sVar8 < 0x100) *
(char)((ulonglong)uVar17 >> 0x10) - (0xff < sVar8),
CONCAT14((0 < sVar7) * (sVar7 < 0x100) * (char)uVar17
- (0xff < sVar7),
CONCAT13((0 < sVar6) * (sVar6 < 0x100) *
(char)((ulonglong)uVar16 >> 0x30) -
(0xff < sVar6),
CONCAT12((0 < sVar5) *
(sVar5 < 0x100) *
(char)((ulonglong)uVar16 >>
0x20) -
(0xff < sVar5),
CONCAT11((0 < sVar4) *
(sVar4 < 0x100) *
(char)((ulonglong)
uVar16 >>
0x10) -
(0xff < sVar4),
(0 < sVar3) *
(sVar3 < 0x100) *
(char)uVar16 -
(0xff < sVar3)))))
)));
puVar11 = puVar11 + 1;
}
param_1 = (undefined8 *)((int)param_1 + param_6);
}
uVar12 = 0;
}
else {
uVar12 = FUN_005f0165(param_1,param_2,param_3,param_4,param_5,param_6);
}
return uVar12;
}
// --- FUN_005f04b7 at 0x005F04B7 (size: 58) ---
void FUN_005f04b7(void)
{
int iVar1;
iVar1 = FUN_005ff68e();
if (iVar1 == 0) {
PTR_FUN_00825c6c = FUN_005f0165;
PTR_FUN_00825c70 = FUN_005f02b1;
}
else {
PTR_FUN_00825c6c = FUN_005f039d;
PTR_FUN_00825c70 = FUN_005f039d;
}
/* WARNING: Could not recover jumptable at 0x005f04eb. Too many branches */
/* WARNING: Treating indirect jump as call */
(*(code *)PTR_FUN_00825c6c)();
return;
}
// --- FUN_005f04f1 at 0x005F04F1 (size: 49) ---
void FUN_005f04f1(void)
{
int iVar1;
code *UNRECOVERED_JUMPTABLE;
iVar1 = FUN_005ff68e();
if (iVar1 == 0) {
PTR_FUN_00825c6c = FUN_005f0165;
UNRECOVERED_JUMPTABLE = FUN_005f02b1;
}
else {
UNRECOVERED_JUMPTABLE = FUN_005f039d;
PTR_FUN_00825c6c = FUN_005f039d;
}
PTR_FUN_00825c70 = UNRECOVERED_JUMPTABLE;
/* WARNING: Could not recover jumptable at 0x005f0520. Too many branches */
/* WARNING: Treating indirect jump as call */
(*UNRECOVERED_JUMPTABLE)();
return;
}
// --- FUN_005f0522 at 0x005F0522 (size: 34) ---
void __fastcall FUN_005f0522(int *param_1)
{
int iVar1;
iVar1 = *param_1;
(*(code *)PTR_FUN_00825c70)
(*(undefined4 *)(param_1[1] + 0x20),*(undefined4 *)(iVar1 + 0x20),
*(undefined4 *)(iVar1 + 0x68),*(undefined4 *)(iVar1 + 0x6c),
*(undefined4 *)(iVar1 + 0x60),*(undefined4 *)(param_1[1] + 0x60));
return;
}
// --- FUN_005f0544 at 0x005F0544 (size: 308) ---
undefined4 __fastcall FUN_005f0544(int *param_1)
{
ushort uVar1;
ushort uVar2;
ushort uVar3;
int iVar4;
ushort *puVar5;
int iVar6;
ushort *puVar7;
uint uVar8;
ushort *puVar9;
ushort *puVar10;
ushort *puVar11;
ushort *puVar12;
iVar4 = *param_1;
puVar9 = *(ushort **)(param_1[1] + 0x20);
puVar5 = *(ushort **)(iVar4 + 0x20);
puVar11 = (ushort *)(*(int *)(iVar4 + 0x6c) * *(int *)(iVar4 + 0x60) + (int)puVar5);
for (; puVar5 < puVar11; puVar5 = puVar5 + *(int *)(iVar4 + 0x60)) {
iVar6 = *(int *)(iVar4 + 0x68);
puVar12 = (ushort *)(*(int *)(iVar4 + 0x60) + (int)puVar5);
puVar7 = puVar9;
for (puVar10 = puVar5; puVar10 < puVar5 + iVar6; puVar10 = puVar10 + 2) {
uVar8 = (uint)*puVar12;
uVar1 = puVar12[1];
uVar2 = puVar10[1];
uVar3 = *puVar10;
*puVar7 = ((ushort)((uint)(uVar1 & 0xf81f) + (uint)(uVar3 & 0xf81f) + (uVar8 & 0xfffff81f) +
0x1002 + (uint)(uVar2 & 0xf81f) >> 2) ^
(ushort)((uVar1 & 0xffff07e0) + (uVar3 & 0xffff07e0) + (uVar8 & 0xffff07e0) + 0x40 +
(uVar2 & 0xffff07e0) >> 2)) & 0x7e0 ^
(ushort)((uVar1 & 0xf81f) + (uVar3 & 0xf81f) + (uVar8 & 0xf81f) + 0x1002 +
(uVar2 & 0xf81f) >> 2);
puVar12 = puVar12 + 2;
puVar7 = puVar7 + 1;
}
puVar9 = (ushort *)((int)puVar9 + *(int *)(param_1[1] + 0x60));
iVar4 = *param_1;
}
return 0;
}
// --- FUN_005f0678 at 0x005F0678 (size: 261) ---
undefined4 __fastcall FUN_005f0678(int *param_1)
{
ushort *puVar1;
ushort uVar2;
int iVar3;
ushort *puVar4;
int iVar5;
ushort *puVar6;
ushort *puVar7;
ushort *puVar8;
ushort *puVar9;
ushort *puVar10;
iVar3 = *param_1;
puVar7 = *(ushort **)(param_1[1] + 0x20);
puVar4 = *(ushort **)(iVar3 + 0x20);
puVar9 = (ushort *)(*(int *)(iVar3 + 0x6c) * *(int *)(iVar3 + 0x60) + (int)puVar4);
for (; puVar4 < puVar9; puVar4 = puVar4 + *(int *)(iVar3 + 0x60)) {
iVar5 = *(int *)(iVar3 + 0x68);
puVar10 = (ushort *)(*(int *)(iVar3 + 0x60) + (int)puVar4);
puVar6 = puVar7;
for (puVar8 = puVar4; puVar8 < puVar4 + iVar5; puVar8 = puVar8 + 2) {
uVar2 = *puVar10;
puVar1 = puVar10 + 1;
puVar10 = puVar10 + 2;
*puVar6 = (ushort)((*puVar1 & 0xffff03e0) + (*puVar8 & 0xffff03e0) + (uVar2 & 0xffff03e0) +
0x40 + (puVar8[1] & 0xffff03e0) >> 2) & 0x3e0 |
(ushort)((*puVar1 & 0x7c1f) + (*puVar8 & 0x7c1f) + (uVar2 & 0x7c1f) + 0x802 +
(puVar8[1] & 0x7c1f) >> 2) & 0x7c1f;
puVar6 = puVar6 + 1;
}
puVar7 = (ushort *)((int)puVar7 + *(int *)(param_1[1] + 0x60));
iVar3 = *param_1;
}
return 0;
}
// --- FUN_005f077d at 0x005F077D (size: 297) ---
undefined4 __fastcall FUN_005f077d(int *param_1)
{
int iVar1;
ushort *puVar2;
int iVar3;
ushort *puVar4;
ushort *puVar5;
uint uVar6;
uint uVar7;
ushort *puVar8;
uint uVar9;
ushort *puVar10;
ushort *puVar11;
uint uVar12;
iVar1 = *param_1;
puVar2 = *(ushort **)(iVar1 + 0x20);
puVar10 = *(ushort **)(param_1[1] + 0x20);
puVar5 = (ushort *)(*(int *)(iVar1 + 0x6c) * *(int *)(iVar1 + 0x60) + (int)puVar2);
for (; puVar2 < puVar5; puVar2 = puVar2 + *(int *)(iVar1 + 0x60)) {
iVar3 = *(int *)(iVar1 + 0x68);
puVar11 = (ushort *)(*(int *)(iVar1 + 0x60) + (int)puVar2);
puVar4 = puVar10;
for (puVar8 = puVar2; puVar8 < puVar2 + iVar3; puVar8 = puVar8 + 2) {
uVar6 = (uint)puVar8[1];
uVar9 = (uint)puVar11[1];
uVar7 = (uint)*puVar11;
uVar12 = (uint)*puVar8;
puVar11 = puVar11 + 2;
*puVar4 = ((ushort)((uVar9 & 0x83e0) + (uVar12 & 0x83e0) + (uVar7 & 0x83e0) + 0x10040 +
(uVar6 & 0x83e0) >> 2) ^
(ushort)((uVar9 & 0x7c1f) + (uVar12 & 0x7c1f) + (uVar7 & 0x7c1f) + 0x802 +
(uVar6 & 0x7c1f) >> 2)) & 0x7c1f ^
(ushort)((uVar9 & 0x83e0) + (uVar12 & 0x83e0) + (uVar7 & 0x83e0) + 0x10040 +
(uVar6 & 0x83e0) >> 2);
puVar4 = puVar4 + 1;
}
puVar10 = (ushort *)((int)puVar10 + *(int *)(param_1[1] + 0x60));
iVar1 = *param_1;
}
return 0;
}
// --- FUN_005f08a6 at 0x005F08A6 (size: 311) ---
undefined4 __fastcall FUN_005f08a6(int *param_1)
{
ushort uVar1;
ushort uVar2;
ushort uVar3;
int iVar4;
ushort *puVar5;
int iVar6;
ushort *puVar7;
uint uVar8;
ushort *puVar9;
ushort *puVar10;
ushort *puVar11;
ushort *puVar12;
iVar4 = *param_1;
puVar9 = *(ushort **)(param_1[1] + 0x20);
puVar5 = *(ushort **)(iVar4 + 0x20);
puVar11 = (ushort *)(*(int *)(iVar4 + 0x6c) * *(int *)(iVar4 + 0x60) + (int)puVar5);
for (; puVar5 < puVar11; puVar5 = puVar5 + *(int *)(iVar4 + 0x60)) {
iVar6 = *(int *)(iVar4 + 0x68);
puVar12 = (ushort *)(*(int *)(iVar4 + 0x60) + (int)puVar5);
puVar7 = puVar9;
for (puVar10 = puVar5; puVar10 < puVar5 + iVar6; puVar10 = puVar10 + 2) {
uVar8 = (uint)*puVar12;
uVar1 = puVar12[1];
uVar2 = puVar10[1];
uVar3 = *puVar10;
*puVar7 = ((ushort)((uint)(uVar1 & 0xf0f0) + (uint)(uVar3 & 0xf0f0) + (uVar8 & 0xfffff0f0) +
0x2020 + (uint)(uVar2 & 0xf0f0) >> 2) ^
(ushort)((uVar1 & 0xffff0f0f) + (uVar3 & 0xffff0f0f) + (uVar8 & 0xffff0f0f) + 0x202
+ (uVar2 & 0xffff0f0f) >> 2)) & 0xf0f ^
(ushort)((uVar1 & 0xf0f0) + (uVar3 & 0xf0f0) + (uVar8 & 0xf0f0) + 0x2020 +
(uVar2 & 0xf0f0) >> 2);
puVar12 = puVar12 + 2;
puVar7 = puVar7 + 1;
}
puVar9 = (ushort *)((int)puVar9 + *(int *)(param_1[1] + 0x60));
iVar4 = *param_1;
}
return 0;
}
// --- FUN_005f09dd at 0x005F09DD (size: 286) ---
undefined4 __fastcall FUN_005f09dd(int *param_1)
{
byte bVar1;
byte bVar2;
byte bVar3;
int iVar4;
byte *pbVar5;
int iVar6;
byte *pbVar7;
uint uVar8;
byte *pbVar9;
byte *pbVar10;
byte *pbVar11;
byte *pbVar12;
pbVar9 = *(byte **)(param_1[1] + 0x20);
iVar4 = *param_1;
pbVar5 = *(byte **)(iVar4 + 0x20);
pbVar12 = pbVar5 + *(int *)(iVar4 + 0x6c) * *(int *)(iVar4 + 0x60);
for (; pbVar5 < pbVar12; pbVar5 = pbVar5 + *(int *)(iVar4 + 0x60) * 2) {
iVar6 = *(int *)(iVar4 + 0x68);
pbVar10 = pbVar5 + *(int *)(iVar4 + 0x60);
pbVar7 = pbVar9;
for (pbVar11 = pbVar5; pbVar11 < pbVar5 + iVar6; pbVar11 = pbVar11 + 2) {
uVar8 = (uint)*pbVar10;
bVar1 = pbVar10[1];
bVar2 = pbVar11[1];
bVar3 = *pbVar11;
*pbVar7 = ((byte)((bVar1 & 0x1c) + (bVar3 & 0x1c) + (uVar8 & 0x1c) + 8 + (bVar2 & 0x1c) >> 2)
^ (byte)((uint)(bVar1 & 0xe3) + (uint)(bVar3 & 0xe3) + (uVar8 & 0xffff00e3) + 0x42 +
(uint)(bVar2 & 0xe3) >> 2)) & 0x1c ^
(byte)((uint)(bVar1 & 0xe3) + (bVar3 & 0xffff00e3) + (uVar8 & 0xffff00e3) + 0x42 +
(uint)(bVar2 & 0xe3) >> 2);
pbVar10 = pbVar10 + 2;
pbVar7 = pbVar7 + 1;
}
pbVar9 = pbVar9 + *(int *)(param_1[1] + 0x60);
iVar4 = *param_1;
}
return 0;
}
// --- FUN_005f0afb at 0x005F0AFB (size: 140) ---
undefined4 __fastcall FUN_005f0afb(int *param_1)
{
byte *pbVar1;
byte *pbVar2;
byte bVar3;
int iVar4;
undefined1 *puVar5;
int iVar6;
byte *pbVar7;
undefined1 *puVar8;
byte *pbVar9;
byte *pbVar10;
puVar8 = *(undefined1 **)(param_1[1] + 0x20);
iVar6 = *param_1;
pbVar9 = *(byte **)(iVar6 + 0x20);
pbVar10 = pbVar9 + *(int *)(iVar6 + 0x6c) * *(int *)(iVar6 + 0x60);
for (; pbVar9 < pbVar10; pbVar9 = pbVar9 + *(int *)(iVar6 + 0x60) * 2) {
iVar4 = *(int *)(iVar6 + 0x68);
pbVar7 = pbVar9 + *(int *)(iVar6 + 0x60);
puVar5 = puVar8;
for (pbVar2 = pbVar9; pbVar2 < pbVar9 + iVar4; pbVar2 = pbVar2 + 2) {
pbVar1 = pbVar7 + 1;
bVar3 = *pbVar7;
pbVar7 = pbVar7 + 2;
*puVar5 = (char)((uint)*pbVar1 + (uint)pbVar2[1] + (uint)bVar3 + 2 + (uint)*pbVar2 >> 2);
puVar5 = puVar5 + 1;
}
puVar8 = puVar8 + *(int *)(param_1[1] + 0x60);
iVar6 = *param_1;
}
return 0;
}
// --- FUN_005f0b87 at 0x005F0B87 (size: 302) ---
undefined4 __fastcall FUN_005f0b87(int *param_1)
{
ushort uVar1;
ushort uVar2;
ushort uVar3;
int iVar4;
ushort *puVar5;
int iVar6;
ushort *puVar7;
uint uVar8;
ushort *puVar9;
ushort *puVar10;
ushort *puVar11;
ushort *puVar12;
puVar9 = *(ushort **)(param_1[1] + 0x20);
iVar4 = *param_1;
puVar5 = *(ushort **)(iVar4 + 0x20);
puVar12 = (ushort *)(*(int *)(iVar4 + 0x6c) * *(int *)(iVar4 + 0x60) + (int)puVar5);
for (; puVar5 < puVar12; puVar5 = puVar5 + *(int *)(iVar4 + 0x60)) {
iVar6 = *(int *)(iVar4 + 0x68);
puVar10 = (ushort *)(*(int *)(iVar4 + 0x60) + (int)puVar5);
puVar7 = puVar9;
for (puVar11 = puVar5; puVar11 < puVar5 + iVar6; puVar11 = puVar11 + 2) {
uVar1 = puVar10[1];
uVar8 = (uint)*puVar10;
uVar2 = *puVar11;
uVar3 = puVar11[1];
*puVar7 = (byte)((byte)((uint)(uVar1 & 0xe3) + (uint)(uVar2 & 0xe3) + (uVar8 & 0xffff00e3) +
0x42 + (uint)(uVar3 & 0xe3) >> 2) ^
(byte)((uint)(uVar1 & 0xff1c) + (uVar2 & 0xffffff1c) + (uVar8 & 0xffffff1c) +
0x208 + (uint)(uVar3 & 0xff1c) >> 2)) & 0xe3 ^
(ushort)((uVar1 & 0xff1c) + (uVar2 & 0xff1c) + (uVar8 & 0xff1c) + 0x208 +
(uVar3 & 0xff1c) >> 2);
puVar10 = puVar10 + 2;
puVar7 = puVar7 + 1;
}
puVar9 = (ushort *)((int)puVar9 + *(int *)(param_1[1] + 0x60));
iVar4 = *param_1;
}
return 0;
}
// --- FUN_005f0cb5 at 0x005F0CB5 (size: 265) ---
undefined4 __fastcall FUN_005f0cb5(int *param_1)
{
ushort *puVar1;
ushort uVar2;
int iVar3;
ushort *puVar4;
int iVar5;
ushort *puVar6;
ushort *puVar7;
ushort *puVar8;
ushort *puVar9;
ushort *puVar10;
puVar10 = *(ushort **)(param_1[1] + 0x20);
iVar3 = *param_1;
puVar4 = *(ushort **)(iVar3 + 0x20);
puVar7 = (ushort *)(*(int *)(iVar3 + 0x6c) * *(int *)(iVar3 + 0x60) + (int)puVar4);
for (; puVar4 < puVar7; puVar4 = puVar4 + *(int *)(iVar3 + 0x60)) {
iVar5 = *(int *)(iVar3 + 0x68);
puVar9 = (ushort *)(*(int *)(iVar3 + 0x60) + (int)puVar4);
puVar6 = puVar10;
for (puVar8 = puVar4; puVar8 < puVar4 + iVar5; puVar8 = puVar8 + 2) {
puVar1 = puVar9 + 1;
uVar2 = *puVar9;
puVar9 = puVar9 + 2;
*puVar6 = (ushort)((*puVar1 & 0xffff00f0) + (*puVar8 & 0xffff00f0) + (uVar2 & 0xffff00f0) +
0x20 + (puVar8[1] & 0xffff00f0) >> 2) & 0xf0 |
(ushort)((*puVar1 & 0xffff0f0f) + (*puVar8 & 0xffff0f0f) + (uint)(uVar2 & 0xf0f) +
0x202 + (uint)(puVar8[1] & 0xf0f) >> 2) & 0xf0f;
puVar6 = puVar6 + 1;
}
puVar10 = (ushort *)((int)puVar10 + *(int *)(param_1[1] + 0x60));
iVar3 = *param_1;
}
return 0;
}
// --- FUN_005f0dbe at 0x005F0DBE (size: 302) ---
undefined4 __fastcall FUN_005f0dbe(int *param_1)
{
ushort uVar1;
ushort uVar2;
ushort uVar3;
int iVar4;
ushort *puVar5;
int iVar6;
ushort *puVar7;
uint uVar8;
ushort *puVar9;
ushort *puVar10;
ushort *puVar11;
ushort *puVar12;
puVar9 = *(ushort **)(param_1[1] + 0x20);
iVar4 = *param_1;
puVar5 = *(ushort **)(iVar4 + 0x20);
puVar12 = (ushort *)(*(int *)(iVar4 + 0x6c) * *(int *)(iVar4 + 0x60) + (int)puVar5);
for (; puVar5 < puVar12; puVar5 = puVar5 + *(int *)(iVar4 + 0x60)) {
iVar6 = *(int *)(iVar4 + 0x68);
puVar10 = (ushort *)(*(int *)(iVar4 + 0x60) + (int)puVar5);
puVar7 = puVar9;
for (puVar11 = puVar5; puVar11 < puVar5 + iVar6; puVar11 = puVar11 + 2) {
uVar1 = puVar10[1];
uVar8 = (uint)*puVar10;
uVar2 = *puVar11;
uVar3 = puVar11[1];
*puVar7 = (ushort)(byte)((byte)((uint)(uVar1 & 0xff) + (uint)(uVar2 & 0xff) +
(uVar8 & 0xffff00ff) + 2 + (uint)(uVar3 & 0xff) >> 2) ^
(byte)((uint)(uVar1 & 0xff00) + (uVar2 & 0xffffff00) +
(uVar8 & 0xffffff00) + 0x200 + (uint)(uVar3 & 0xff00) >> 2)) ^
(ushort)((uVar1 & 0xff00) + (uVar2 & 0xff00) + (uVar8 & 0xff00) + 0x200 +
(uVar3 & 0xff00) >> 2);
puVar10 = puVar10 + 2;
puVar7 = puVar7 + 1;
}
puVar9 = (ushort *)((int)puVar9 + *(int *)(param_1[1] + 0x60));
iVar4 = *param_1;
}
return 0;
}
// --- FUN_005f0eec at 0x005F0EEC (size: 286) ---
undefined4 __fastcall FUN_005f0eec(int *param_1)
{
byte bVar1;
byte bVar2;
byte bVar3;
int iVar4;
byte *pbVar5;
int iVar6;
byte *pbVar7;
uint uVar8;
byte *pbVar9;
byte *pbVar10;
byte *pbVar11;
byte *pbVar12;
pbVar9 = *(byte **)(param_1[1] + 0x20);
iVar4 = *param_1;
pbVar5 = *(byte **)(iVar4 + 0x20);
pbVar12 = pbVar5 + *(int *)(iVar4 + 0x6c) * *(int *)(iVar4 + 0x60);
for (; pbVar5 < pbVar12; pbVar5 = pbVar5 + *(int *)(iVar4 + 0x60) * 2) {
iVar6 = *(int *)(iVar4 + 0x68);
pbVar10 = pbVar5 + *(int *)(iVar4 + 0x60);
pbVar7 = pbVar9;
for (pbVar11 = pbVar5; pbVar11 < pbVar5 + iVar6; pbVar11 = pbVar11 + 2) {
uVar8 = (uint)*pbVar10;
bVar1 = pbVar10[1];
bVar2 = pbVar11[1];
bVar3 = *pbVar11;
*pbVar7 = ((byte)((bVar1 & 0xf) + (bVar3 & 0xf) + (uVar8 & 0xf) + 2 + (bVar2 & 0xf) >> 2) ^
(byte)((uint)(bVar1 & 0xf0) + (uint)(bVar3 & 0xf0) + (uVar8 & 0xffff00f0) + 0x20 +
(uint)(bVar2 & 0xf0) >> 2)) & 0xf ^
(byte)((uint)(bVar1 & 0xf0) + (bVar3 & 0xffff00f0) + (uVar8 & 0xffff00f0) + 0x20 +
(uint)(bVar2 & 0xf0) >> 2);
pbVar10 = pbVar10 + 2;
pbVar7 = pbVar7 + 1;
}
pbVar9 = pbVar9 + *(int *)(param_1[1] + 0x60);
iVar4 = *param_1;
}
return 0;
}
// --- FUN_005f100a at 0x005F100A (size: 266) ---
undefined4 __fastcall FUN_005f100a(int *param_1)
{
undefined4 uVar1;
undefined4 *puVar2;
int iVar3;
int iVar4;
uint uVar5;
uint uVar6;
undefined4 *puVar7;
int *piVar8;
undefined4 *puVar9;
int iVar10;
int *piVar11;
undefined4 *puVar12;
bool bVar13;
uint local_c;
uint local_8;
iVar4 = param_1[1];
iVar10 = *param_1;
if ((*(int *)(iVar4 + 4) != *(int *)(iVar10 + 4)) || (*(int *)(iVar10 + 0x18) != 0)) {
return 0x80004005;
}
if ((((*(int *)(iVar4 + 0x68) == *(int *)(iVar10 + 0x68)) &&
(*(int *)(iVar4 + 0x6c) == *(int *)(iVar10 + 0x6c))) &&
(*(int *)(iVar4 + 0x70) == *(int *)(iVar10 + 0x70))) &&
(*(int *)(iVar4 + 0x10) == *(int *)(iVar10 + 0x10))) {
if (*(int *)(iVar4 + 0xc) == 0) {
uVar1 = FUN_005f000d();
return uVar1;
}
if (*(int *)(iVar4 + 0x1c) != 0) {
if (*(int **)(iVar4 + 0x38) != *(int **)(iVar10 + 0x38)) {
iVar3 = 0x100;
bVar13 = true;
piVar8 = *(int **)(iVar4 + 0x38);
piVar11 = *(int **)(iVar10 + 0x38);
do {
if (iVar3 == 0) break;
iVar3 = iVar3 + -1;
bVar13 = *piVar8 == *piVar11;
piVar8 = piVar8 + 1;
piVar11 = piVar11 + 1;
} while (bVar13);
if (!bVar13) goto LAB_005f110a;
}
}
*(undefined4 *)(iVar4 + 0x10) = 0;
*(undefined4 *)(*param_1 + 0x10) = 0;
iVar4 = param_1[1];
local_8 = 0;
if (*(int *)(iVar4 + 0x70) != 0) {
iVar10 = *param_1;
uVar6 = *(uint *)(iVar4 + 0x6c);
do {
puVar2 = (undefined4 *)(*(int *)(param_1[1] + 100) * local_8 + *(int *)(param_1[1] + 0x20));
puVar7 = (undefined4 *)(*(int *)(iVar10 + 100) * local_8 + *(int *)(iVar10 + 0x20));
local_c = 0;
if (uVar6 != 0) {
do {
uVar6 = *(uint *)(iVar4 + 0x74);
puVar9 = puVar7;
puVar12 = puVar2;
for (uVar5 = uVar6 >> 2; uVar5 != 0; uVar5 = uVar5 - 1) {
*puVar12 = *puVar9;
puVar9 = puVar9 + 1;
puVar12 = puVar12 + 1;
}
for (uVar6 = uVar6 & 3; uVar6 != 0; uVar6 = uVar6 - 1) {
*(undefined1 *)puVar12 = *(undefined1 *)puVar9;
puVar9 = (undefined4 *)((int)puVar9 + 1);
puVar12 = (undefined4 *)((int)puVar12 + 1);
}
iVar4 = param_1[1];
iVar10 = *param_1;
puVar2 = (undefined4 *)((int)puVar2 + *(int *)(iVar4 + 0x60));
puVar7 = (undefined4 *)((int)puVar7 + *(int *)(iVar10 + 0x60));
local_c = local_c + 1;
uVar6 = *(uint *)(iVar4 + 0x6c);
} while (local_c < uVar6);
}
local_8 = local_8 + 1;
iVar4 = param_1[1];
} while (local_8 < *(uint *)(iVar4 + 0x70));
}
uVar1 = 0;
}
else {
LAB_005f110a:
uVar1 = 0x80004005;
}
return uVar1;
}
// --- FUN_005f1114 at 0x005F1114 (size: 211) ---
undefined4 __fastcall FUN_005f1114(int *param_1)
{
int iVar1;
int iVar2;
int iVar3;
uint uVar4;
uint uVar5;
uint uVar6;
void *local_8;
iVar1 = param_1[1];
iVar2 = *param_1;
iVar3 = *(int *)(iVar1 + 0x68);
if (((iVar3 == *(int *)(iVar2 + 0x68)) && (*(int *)(iVar1 + 0x6c) == *(int *)(iVar2 + 0x6c))) &&
(*(int *)(iVar1 + 0x70) == *(int *)(iVar2 + 0x70))) {
local_8 = (void *)FUN_005df0f5(iVar3 << 4);
if (local_8 == (void *)0x0) {
local_8 = (void *)0x0;
}
else {
FUN_00401000(local_8,0x10,iVar3,&LAB_005eda5e);
}
if (local_8 != (void *)0x0) {
if ((*(int *)(param_1[1] + 0x10) != 0) && (*(int *)(*param_1 + 0x10) != 0)) {
*(undefined4 *)(param_1[1] + 0x10) = 0;
*(undefined4 *)(*param_1 + 0x10) = 0;
}
uVar5 = 0;
if (*(int *)(param_1[1] + 0x70) != 0) {
uVar4 = *(uint *)(param_1[1] + 0x6c);
do {
uVar6 = 0;
if (uVar4 != 0) {
do {
(**(code **)(*(int *)*param_1 + 4))(uVar6,uVar5,local_8);
(**(code **)(*(int *)param_1[1] + 8))(uVar6,uVar5,local_8);
uVar4 = *(uint *)(param_1[1] + 0x6c);
uVar6 = uVar6 + 1;
} while (uVar6 < uVar4);
}
uVar5 = uVar5 + 1;
} while (uVar5 < *(uint *)(param_1[1] + 0x70));
}
operator_delete(local_8);
return 0;
}
}
return 0x80004005;
}
// --- FUN_005f11e7 at 0x005F11E7 (size: 467) ---
undefined4 __fastcall FUN_005f11e7(int *param_1)
{
int iVar1;
undefined4 uVar2;
int iVar3;
uint uVar4;
undefined4 *puVar5;
uint uVar6;
uint local_18;
uint local_14;
undefined4 *local_10;
uint local_c;
undefined4 *local_8;
if ((char)param_1[2] == '\x01') {
iVar3 = param_1[1];
iVar1 = *param_1;
local_10 = (undefined4 *)*(uint *)(iVar3 + 0x68);
if (*(uint *)(iVar3 + 0x68) <= *(uint *)(iVar1 + 0x68)) {
local_10 = (undefined4 *)*(uint *)(iVar1 + 0x68);
}
local_18 = *(uint *)(iVar3 + 0x6c);
if (*(uint *)(iVar1 + 0x6c) <= *(uint *)(iVar3 + 0x6c)) {
local_18 = *(uint *)(iVar1 + 0x6c);
}
local_14 = *(uint *)(iVar3 + 0x70);
if (*(uint *)(iVar1 + 0x70) <= *(uint *)(iVar3 + 0x70)) {
local_14 = *(uint *)(iVar1 + 0x70);
}
uVar4 = (int)local_10 << 4;
local_8 = (undefined4 *)FUN_005df0f5(uVar4);
if (local_8 == (undefined4 *)0x0) {
local_8 = (undefined4 *)0x0;
}
else {
FUN_00401000(local_8,0x10,local_10,&LAB_005eda5e);
}
if (local_8 == (undefined4 *)0x0) {
uVar2 = 0x80004005;
}
else {
iVar3 = *(int *)(param_1[1] + 0x68);
local_10 = (undefined4 *)FUN_005df0f5(iVar3 << 4);
if (local_10 == (undefined4 *)0x0) {
local_10 = (undefined4 *)0x0;
}
else {
FUN_00401000(local_10,0x10,iVar3,&LAB_005eda5e);
}
if (local_10 == (undefined4 *)0x0) {
operator_delete(local_8);
uVar2 = 0x80004005;
}
else {
puVar5 = local_8;
for (uVar4 = uVar4 >> 2; uVar4 != 0; uVar4 = uVar4 - 1) {
*puVar5 = 0;
puVar5 = puVar5 + 1;
}
for (iVar3 = 0; iVar3 != 0; iVar3 = iVar3 + -1) {
*(undefined1 *)puVar5 = 0;
puVar5 = (undefined4 *)((int)puVar5 + 1);
}
puVar5 = local_10;
for (uVar4 = (uint)(*(int *)(param_1[1] + 0x68) << 4) >> 2; uVar4 != 0; uVar4 = uVar4 - 1) {
*puVar5 = 0;
puVar5 = puVar5 + 1;
}
for (iVar3 = 0; iVar3 != 0; iVar3 = iVar3 + -1) {
*(undefined1 *)puVar5 = 0;
puVar5 = (undefined4 *)((int)puVar5 + 1);
}
if ((*(int *)(param_1[1] + 0x10) != 0) && (*(int *)(*param_1 + 0x10) != 0)) {
*(undefined4 *)(param_1[1] + 0x10) = 0;
*(undefined4 *)(*param_1 + 0x10) = 0;
}
local_c = 0;
if (local_14 != 0) {
do {
uVar4 = 0;
if (local_18 != 0) {
do {
(**(code **)(*(int *)*param_1 + 4))(uVar4,local_c,local_8);
(**(code **)(*(int *)param_1[1] + 8))(uVar4,local_c,local_8);
uVar4 = uVar4 + 1;
} while (uVar4 < local_18);
}
uVar4 = local_18;
if (local_18 < *(uint *)(param_1[1] + 0x6c)) {
do {
(**(code **)(*(int *)param_1[1] + 8))(uVar4,local_c,local_10);
uVar4 = uVar4 + 1;
} while (uVar4 < *(uint *)(param_1[1] + 0x6c));
}
local_c = local_c + 1;
} while (local_c < local_14);
}
if (local_14 < *(uint *)(param_1[1] + 0x70)) {
uVar4 = *(uint *)(param_1[1] + 0x6c);
do {
uVar6 = 0;
if (uVar4 != 0) {
do {
(**(code **)(*(int *)param_1[1] + 8))(uVar6,local_14,local_10);
uVar4 = *(uint *)(param_1[1] + 0x6c);
uVar6 = uVar6 + 1;
} while (uVar6 < uVar4);
}
local_14 = local_14 + 1;
} while (local_14 < *(uint *)(param_1[1] + 0x70));
}
operator_delete(local_8);
operator_delete(local_10);
uVar2 = 0;
}
}
}
else {
uVar2 = 0x80004005;
}
return uVar2;
}
// --- FUN_005f13ba at 0x005F13BA (size: 470) ---
undefined4 __fastcall FUN_005f13ba(int *param_1)
{
int iVar1;
int iVar2;
uint uVar3;
int iVar4;
uint uVar5;
uint uVar6;
undefined4 uVar7;
int iVar8;
undefined4 *puVar9;
undefined4 *puVar10;
uint local_28;
uint local_24;
uint local_20;
uint local_1c;
uint local_18;
uint local_14;
uint local_10;
undefined4 *local_c;
void *local_8;
if ((char)param_1[2] == '\x02') {
iVar1 = *(int *)(*param_1 + 0x68);
local_8 = (void *)FUN_005df0f5(iVar1 << 4);
if (local_8 == (void *)0x0) {
local_8 = (void *)0x0;
}
else {
FUN_00401000(local_8,0x10,iVar1,&LAB_005eda5e);
}
if (local_8 == (void *)0x0) {
uVar7 = 0x8007000e;
}
else {
iVar1 = *(int *)(param_1[1] + 0x68);
local_c = (undefined4 *)FUN_005df0f5(iVar1 << 4);
if (local_c == (undefined4 *)0x0) {
local_c = (undefined4 *)0x0;
}
else {
FUN_00401000(local_c,0x10,iVar1,&LAB_005eda5e);
}
if (local_c == (undefined4 *)0x0) {
operator_delete(local_8);
uVar7 = 0x8007000e;
}
else {
if ((*(int *)(param_1[1] + 0x10) != 0) && (*(int *)(*param_1 + 0x10) != 0)) {
*(undefined4 *)(param_1[1] + 0x10) = 0;
*(undefined4 *)(*param_1 + 0x10) = 0;
}
iVar1 = *param_1;
iVar8 = param_1[1];
iVar2 = *(int *)(iVar1 + 0x68);
uVar3 = *(uint *)(iVar8 + 0x68);
local_20 = 0;
local_14 = 0;
iVar4 = *(int *)(iVar1 + 0x6c);
uVar5 = *(uint *)(iVar8 + 0x6c);
iVar1 = *(int *)(iVar1 + 0x70);
uVar6 = *(uint *)(iVar8 + 0x70);
if (*(int *)(iVar8 + 0x70) != 0) {
do {
local_24 = 0xffffffff;
local_28 = 0;
local_10 = 0;
if (*(int *)(iVar8 + 0x6c) != 0) {
do {
local_18 = 0;
local_1c = 0;
if (((local_24 ^ local_28) & 0xffff0000) != 0) {
(**(code **)(*(int *)*param_1 + 4))(local_28 >> 0x10,local_20 >> 0x10,local_8);
local_24 = local_28;
}
puVar9 = local_c;
if (*(int *)(param_1[1] + 0x68) != 0) {
do {
puVar10 = (undefined4 *)((local_18 >> 0x10) * 0x10 + (int)local_8);
local_1c = local_1c + 1;
*puVar9 = *puVar10;
puVar9[1] = puVar10[1];
puVar9[2] = puVar10[2];
puVar9[3] = puVar10[3];
puVar9 = puVar9 + 4;
local_18 = local_18 + (uint)(iVar2 << 0x10) / uVar3;
} while (local_1c < *(uint *)(param_1[1] + 0x68));
}
(**(code **)(*(int *)param_1[1] + 8))(local_10,local_14,local_c);
local_28 = local_28 + (uint)(iVar4 << 0x10) / uVar5;
local_10 = local_10 + 1;
} while (local_10 < *(uint *)(param_1[1] + 0x6c));
}
local_20 = local_20 + (uint)(iVar1 << 0x10) / uVar6;
local_14 = local_14 + 1;
iVar8 = param_1[1];
} while (local_14 < *(uint *)(iVar8 + 0x70));
}
operator_delete(local_8);
operator_delete(local_c);
uVar7 = 0;
}
}
}
else {
uVar7 = 0x80004005;
}
return uVar7;
}
// --- FUN_005f1590 at 0x005F1590 (size: 932) ---
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
undefined4 __fastcall FUN_005f1590(int *param_1)
{
int *piVar1;
uint *puVar2;
float fVar3;
float fVar4;
float fVar5;
float fVar6;
float fVar7;
float fVar8;
float fVar9;
float fVar10;
float fVar11;
float fVar12;
float fVar13;
float fVar14;
int iVar15;
float fVar16;
undefined4 uVar17;
void *pvVar18;
void *pvVar19;
float *pfVar20;
float *pfVar21;
float *pfVar22;
float *pfVar23;
uint uVar24;
int iVar25;
void *local_1c;
float *local_18;
float *local_14;
uint local_10;
void *local_8;
if ((char)param_1[2] != '\x05') {
return 0x80004005;
}
iVar25 = *param_1;
uVar24 = *(uint *)(iVar25 + 0x68);
iVar15 = param_1[1];
if ((((*(uint *)(iVar15 + 0x68) != uVar24 >> 1) &&
((*(uint *)(iVar15 + 0x68) != 1 || (uVar24 != 1)))) ||
((*(uint *)(iVar15 + 0x6c) != *(uint *)(iVar25 + 0x6c) >> 1 &&
((*(uint *)(iVar15 + 0x6c) != 1 || (*(int *)(iVar25 + 0x6c) != 1)))))) ||
((*(int *)(iVar15 + 0x70) != 1 || (*(int *)(iVar25 + 0x70) != 1)))) {
return 0x80004005;
}
if ((1 < uVar24) && ((uVar24 & 1) != 0)) {
*(uint *)(iVar25 + 0x68) = *(uint *)(iVar25 + 0x68) & 0xfffffffe;
piVar1 = (int *)(*param_1 + 0x74);
*piVar1 = *piVar1 - *(int *)(*param_1 + 0x78);
}
if (1 < *(uint *)(*param_1 + 0x6c)) {
puVar2 = (uint *)(*param_1 + 0x6c);
*puVar2 = *puVar2 & 0xfffffffe;
}
if ((*(byte *)((int)param_1 + 10) & 8) != 0) goto switchD_005f167b_caseD_14;
iVar25 = *param_1;
iVar15 = *(int *)(iVar25 + 4);
if ((((iVar15 != *(int *)(param_1[1] + 4)) || (*(uint *)(iVar25 + 0x68) < 2)) ||
(*(uint *)(iVar25 + 0x6c) < 2)) ||
((*(int *)(param_1[1] + 0x10) != 0 || (*(int *)(iVar25 + 0x10) != 0))))
goto switchD_005f167b_caseD_14;
if (iVar15 < 0x1e) {
if (iVar15 == 0x1d) {
iVar25 = FUN_005f0b87();
}
else {
switch(iVar15) {
default:
goto switchD_005f167b_caseD_14;
case 0x15:
switchD_005f167b_caseD_15:
iVar25 = FUN_005f028f();
break;
case 0x16:
switchD_005f167b_caseD_16:
iVar25 = FUN_005f0522();
break;
case 0x17:
iVar25 = FUN_005f0544();
break;
case 0x18:
iVar25 = FUN_005f0678();
break;
case 0x19:
iVar25 = FUN_005f077d();
break;
case 0x1a:
iVar25 = FUN_005f08a6();
break;
case 0x1b:
iVar25 = FUN_005f09dd();
break;
case 0x1c:
switchD_005f167b_caseD_1c:
iVar25 = FUN_005f0afb();
}
}
}
else if (iVar15 < 0x2a) {
if (iVar15 == 0x29) goto switchD_005f167b_caseD_14;
if (iVar15 != 0x1e) {
if (iVar15 != 0x20) {
if (iVar15 != 0x21) goto switchD_005f167b_caseD_14;
goto switchD_005f167b_caseD_16;
}
goto switchD_005f167b_caseD_15;
}
iVar25 = FUN_005f0cb5();
}
else {
if (iVar15 == 0x32) goto switchD_005f167b_caseD_1c;
if (iVar15 == 0x33) {
iVar25 = FUN_005f0dbe();
}
else {
if (iVar15 != 0x34) goto switchD_005f167b_caseD_14;
iVar25 = FUN_005f0eec();
}
}
if (-1 < iVar25) {
return 0;
}
switchD_005f167b_caseD_14:
iVar25 = *(int *)(param_1[1] + 0x68);
local_14 = (float *)FUN_005df0f5(iVar25 << 4);
if (local_14 == (float *)0x0) {
local_14 = (float *)0x0;
}
else {
FUN_00401000(local_14,0x10,iVar25,&LAB_005eda5e);
}
if (local_14 == (float *)0x0) {
uVar17 = 0x8007000e;
}
else {
iVar25 = *(int *)(*param_1 + 0x68);
if (*(int *)(*param_1 + 0x6c) == 1) {
local_8 = (void *)FUN_005df0f5(iVar25 << 4);
if (local_8 == (void *)0x0) {
local_8 = (void *)0x0;
pvVar18 = local_8;
}
else {
FUN_00401000(local_8,0x10,iVar25,&LAB_005eda5e);
pvVar18 = local_8;
}
}
else {
local_8 = (void *)FUN_005df0f5(iVar25 << 5);
if (local_8 == (void *)0x0) {
local_8 = (void *)0x0;
}
else {
FUN_00401000(local_8,0x10,iVar25 << 1,&LAB_005eda5e);
}
pvVar18 = (void *)(*(int *)(*param_1 + 0x68) * 0x10 + (int)local_8);
}
if (local_8 == (void *)0x0) {
uVar17 = 0x8007000e;
}
else {
pvVar19 = pvVar18;
local_1c = local_8;
if (*(int *)(*param_1 + 0x68) != 1) {
local_1c = (void *)((int)local_8 + 0x10);
pvVar19 = (void *)((int)pvVar18 + 0x10);
}
local_10 = 0;
if (*(int *)(param_1[1] + 0x6c) != 0) {
do {
(**(code **)(*(int *)*param_1 + 4))(local_10 * 2,0,local_8);
if (pvVar18 != local_8) {
(**(code **)(*(int *)*param_1 + 4))(local_10 * 2 + 1,0,pvVar18);
}
fVar16 = _DAT_007c97cc;
uVar24 = 0;
if (*(int *)(param_1[1] + 0x68) != 0) {
local_18 = local_14;
do {
iVar25 = uVar24 * 0x20;
pfVar20 = (float *)((int)local_1c + iVar25);
pfVar23 = (float *)((int)local_8 + iVar25);
fVar3 = pfVar20[1];
fVar4 = pfVar23[1];
fVar5 = pfVar20[2];
fVar6 = pfVar23[2];
fVar7 = pfVar20[3];
fVar8 = pfVar23[3];
pfVar21 = (float *)((int)pvVar18 + iVar25);
fVar9 = pfVar21[1];
fVar10 = pfVar21[2];
fVar11 = pfVar21[3];
pfVar22 = (float *)((int)pvVar19 + iVar25);
uVar24 = uVar24 + 1;
fVar12 = pfVar22[1];
fVar13 = pfVar22[2];
fVar14 = pfVar22[3];
*local_18 = (*pfVar20 + *pfVar23 + *pfVar21 + *pfVar22) * fVar16;
local_18[1] = (fVar3 + fVar4 + fVar9 + fVar12) * fVar16;
local_18[2] = (fVar5 + fVar6 + fVar10 + fVar13) * fVar16;
local_18[3] = (fVar7 + fVar8 + fVar11 + fVar14) * fVar16;
local_18 = local_18 + 4;
} while (uVar24 < *(uint *)(param_1[1] + 0x68));
}
(**(code **)(*(int *)param_1[1] + 8))(local_10,0,local_14);
local_10 = local_10 + 1;
} while (local_10 < *(uint *)(param_1[1] + 0x6c));
}
operator_delete(local_8);
uVar17 = 0;
}
operator_delete(local_14);
}
return uVar17;
}
// --- FUN_005f1958 at 0x005F1958 (size: 1032) ---
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
undefined4 __fastcall FUN_005f1958(int *param_1)
{
uint *puVar1;
float *pfVar2;
float fVar3;
float fVar4;
float fVar5;
float fVar6;
float fVar7;
float fVar8;
float fVar9;
float fVar10;
float fVar11;
float fVar12;
float fVar13;
float fVar14;
float fVar15;
float fVar16;
float fVar17;
float fVar18;
float fVar19;
float fVar20;
float fVar21;
float fVar22;
float fVar23;
float fVar24;
float fVar25;
float fVar26;
uint uVar27;
int iVar28;
float fVar29;
undefined4 uVar30;
void *pvVar31;
void *pvVar32;
int iVar33;
float *pfVar34;
int *piVar35;
float *pfVar36;
float *pfVar37;
float *pfVar38;
float *pfVar39;
float *pfVar40;
void *pvVar41;
float *pfVar42;
void *pvVar43;
void *local_34;
void *local_30;
float *local_2c;
uint local_20;
void *local_1c;
uint local_18;
float *local_14;
uint local_c;
void *local_8;
if ((char)param_1[2] == '\x05') {
iVar33 = *param_1;
uVar27 = *(uint *)(iVar33 + 0x68);
iVar28 = param_1[1];
if ((((*(uint *)(iVar28 + 0x68) == uVar27 >> 1) ||
((*(uint *)(iVar28 + 0x68) == 1 && (uVar27 == 1)))) &&
((*(uint *)(iVar28 + 0x6c) == *(uint *)(iVar33 + 0x6c) >> 1 ||
((*(uint *)(iVar28 + 0x6c) == 1 && (*(int *)(iVar33 + 0x6c) == 1)))))) &&
(*(uint *)(iVar28 + 0x70) == *(uint *)(iVar33 + 0x70) >> 1)) {
if ((1 < uVar27) && ((uVar27 & 1) != 0)) {
*(uint *)(iVar33 + 0x68) = *(uint *)(iVar33 + 0x68) & 0xfffffffe;
piVar35 = (int *)(*param_1 + 0x74);
*piVar35 = *piVar35 - *(int *)(*param_1 + 0x78);
}
if (1 < *(uint *)(*param_1 + 0x6c)) {
puVar1 = (uint *)(*param_1 + 0x6c);
*puVar1 = *puVar1 & 0xfffffffe;
}
if (1 < *(uint *)(*param_1 + 0x70)) {
puVar1 = (uint *)(*param_1 + 0x70);
*puVar1 = *puVar1 & 0xfffffffe;
}
iVar33 = *(int *)(param_1[1] + 0x68);
local_14 = (float *)FUN_005df0f5(iVar33 << 4);
if (local_14 == (float *)0x0) {
local_14 = (float *)0x0;
}
else {
FUN_00401000(local_14,0x10,iVar33,&LAB_005eda5e);
}
if (local_14 == (float *)0x0) {
uVar30 = 0x8007000e;
}
else {
iVar33 = *(int *)(*param_1 + 0x68);
if (*(int *)(*param_1 + 0x6c) == 1) {
local_8 = (void *)FUN_005df0f5(iVar33 << 5);
if (local_8 == (void *)0x0) {
local_8 = (void *)0x0;
}
else {
FUN_00401000(local_8,0x10,iVar33 << 1,&LAB_005eda5e);
}
piVar35 = (int *)(*param_1 + 0x68);
pvVar43 = (void *)(*piVar35 * 0x10 + (int)local_8);
local_1c = local_8;
pvVar31 = pvVar43;
}
else {
local_8 = (void *)FUN_005df0f5(iVar33 << 6);
if (local_8 == (void *)0x0) {
local_8 = (void *)0x0;
}
else {
FUN_00401000(local_8,0x10,iVar33 << 2,&LAB_005eda5e);
}
piVar35 = (int *)(*param_1 + 0x68);
iVar33 = *piVar35;
pvVar31 = (void *)(iVar33 * 0x10 + (int)local_8);
local_1c = (void *)(iVar33 * 0x20 + (int)local_8);
pvVar43 = (void *)(iVar33 * 0x30 + (int)local_8);
}
if (local_8 == (void *)0x0) {
uVar30 = 0x8007000e;
}
else {
if (*piVar35 == 1) {
local_34 = local_8;
pvVar32 = local_1c;
pvVar41 = pvVar43;
local_30 = pvVar31;
}
else {
local_34 = (void *)((int)local_8 + 0x10);
local_30 = (void *)((int)pvVar31 + 0x10);
pvVar32 = (void *)((int)local_1c + 0x10);
pvVar41 = (void *)((int)pvVar43 + 0x10);
}
local_18 = 0;
iVar33 = param_1[1];
if (*(int *)(iVar33 + 0x70) != 0) {
do {
local_c = 0;
if (*(int *)(iVar33 + 0x6c) != 0) {
do {
iVar33 = local_18 * 2;
(**(code **)(*(int *)*param_1 + 4))(local_c * 2,iVar33,local_8);
if (pvVar31 != local_8) {
(**(code **)(*(int *)*param_1 + 4))(local_c * 2,iVar33 + 1,pvVar31);
}
if (local_1c != local_8) {
(**(code **)(*(int *)*param_1 + 4))(local_c * 2 + 1,iVar33,local_1c);
}
if ((pvVar43 != pvVar31) && (pvVar43 != local_1c)) {
(**(code **)(*(int *)*param_1 + 4))(local_c * 2 + 1,iVar33 + 1,pvVar43);
}
fVar29 = _DAT_007c7624;
local_20 = 0;
if (*(int *)(param_1[1] + 0x68) != 0) {
local_2c = local_14;
do {
iVar33 = local_20 * 0x20;
pfVar36 = (float *)((int)local_34 + iVar33);
pfVar42 = (float *)((int)local_8 + iVar33);
fVar3 = pfVar36[1];
fVar4 = pfVar42[1];
fVar5 = pfVar36[2];
fVar6 = pfVar42[2];
fVar7 = pfVar36[3];
pfVar2 = (float *)(iVar33 + (int)pvVar31);
fVar8 = pfVar42[3];
fVar9 = pfVar2[1];
fVar10 = pfVar2[2];
fVar11 = pfVar2[3];
pfVar37 = (float *)((int)local_30 + iVar33);
fVar12 = pfVar37[1];
fVar13 = pfVar37[2];
fVar14 = pfVar37[3];
pfVar38 = (float *)((int)local_1c + iVar33);
fVar15 = pfVar38[1];
fVar16 = pfVar38[2];
fVar17 = pfVar38[3];
pfVar39 = (float *)((int)pvVar32 + iVar33);
fVar18 = pfVar39[1];
fVar19 = pfVar39[2];
fVar20 = pfVar39[3];
pfVar40 = (float *)((int)pvVar43 + iVar33);
fVar21 = pfVar40[1];
fVar22 = pfVar40[2];
fVar23 = pfVar40[3];
pfVar34 = (float *)(iVar33 + (int)pvVar41);
local_20 = local_20 + 1;
fVar24 = pfVar34[1];
fVar25 = pfVar34[2];
fVar26 = pfVar34[3];
*local_2c = (*pfVar36 + *pfVar42 + *pfVar2 + *pfVar37 + *pfVar38 + *pfVar39 +
*pfVar40 + *pfVar34) * fVar29;
local_2c[1] = (fVar3 + fVar4 + fVar9 + fVar12 + fVar15 + fVar18 + fVar21 +
fVar24) * fVar29;
local_2c[2] = (fVar5 + fVar6 + fVar10 + fVar13 + fVar16 + fVar19 + fVar22 +
fVar25) * fVar29;
local_2c[3] = (fVar7 + fVar8 + fVar11 + fVar14 + fVar17 + fVar20 + fVar23 +
fVar26) * fVar29;
local_2c = local_2c + 4;
} while (local_20 < *(uint *)(param_1[1] + 0x68));
}
(**(code **)(*(int *)param_1[1] + 8))(local_c,local_18,local_14);
local_c = local_c + 1;
} while (local_c < *(uint *)(param_1[1] + 0x6c));
}
local_18 = local_18 + 1;
iVar33 = param_1[1];
} while (local_18 < *(uint *)(iVar33 + 0x70));
}
operator_delete(local_8);
uVar30 = 0;
}
operator_delete(local_14);
}
}
else {
uVar30 = 0x80004005;
}
}
else {
uVar30 = 0x80004005;
}
return uVar30;
}
// --- FUN_005f1d60 at 0x005F1D60 (size: 236) ---
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
uint * FUN_005f1d60(int param_1)
{
float fVar1;
float fVar2;
float fVar3;
uint *puVar4;
uint uVar5;
uint *puVar6;
uint uVar7;
uint unaff_ESI;
uint unaff_EDI;
uint local_8;
puVar4 = (uint *)FUN_005df0f5(unaff_EDI << 4);
if (puVar4 != (uint *)0x0) {
fVar1 = (float)(int)unaff_ESI;
if ((int)unaff_ESI < 0) {
fVar1 = fVar1 + _DAT_0079920c;
}
fVar2 = (float)(int)unaff_EDI;
if ((int)unaff_EDI < 0) {
fVar2 = fVar2 + _DAT_0079920c;
}
local_8 = 0;
puVar6 = puVar4;
if (unaff_EDI != 0) {
do {
fVar3 = (float)(int)local_8;
if ((int)local_8 < 0) {
fVar3 = fVar3 + _DAT_0079920c;
}
fVar3 = (fVar3 + _DAT_007938b8) * (fVar1 / fVar2) + _DAT_007938b8;
uVar5 = (uint)ROUND(fVar3);
uVar7 = uVar5 - 1;
fVar3 = ((float)(int)uVar5 + _DAT_007938b0) - fVar3;
if ((int)uVar7 < 0) {
uVar7 = -(uint)(param_1 != 0) & unaff_ESI - 1;
}
if (unaff_ESI <= uVar5) {
uVar5 = ~-(uint)(param_1 != 0) & unaff_ESI - 1;
}
puVar6[1] = (uint)fVar3;
*puVar6 = uVar7;
puVar6[2] = uVar5;
local_8 = local_8 + 1;
puVar6[3] = (uint)(1.0 - fVar3);
puVar6 = puVar6 + 4;
} while (local_8 < unaff_EDI);
}
}
return puVar4;
}
// --- FUN_005f1e4c at 0x005F1E4C (size: 930) ---
undefined4 __fastcall FUN_005f1e4c(int *param_1)
{
float *pfVar1;
float *pfVar2;
float fVar3;
float fVar4;
float fVar5;
float fVar6;
float fVar7;
float fVar8;
float fVar9;
float fVar10;
float fVar11;
float fVar12;
float fVar13;
float fVar14;
float fVar15;
float fVar16;
float fVar17;
float fVar18;
float fVar19;
float fVar20;
uint uVar21;
int iVar22;
int iVar23;
void *pvVar24;
void *pvVar25;
int *piVar26;
float *pfVar27;
int *piVar28;
float *pfVar29;
undefined4 uVar30;
void *pvVar31;
void *pvVar32;
uint local_34;
int local_30;
float *local_2c;
void *local_24;
uint local_20;
int local_1c;
void *local_14;
void *local_10;
float *local_c;
local_c = (float *)0x0;
local_14 = (void *)0x0;
uVar21 = param_1[2];
if ((char)uVar21 != '\x03') {
return 0x80004005;
}
if ((*(int *)(param_1[1] + 0x70) != 1) || (*(int *)(*param_1 + 0x70) != 1)) {
return 0x80004005;
}
pvVar24 = (void *)FUN_005f1d60(~(uVar21 >> 0x10) & 1);
pvVar25 = (void *)FUN_005f1d60(~(uVar21 >> 0x11) & 1);
if ((pvVar24 != (void *)0x0) && (pvVar25 != (void *)0x0)) {
iVar22 = *(int *)(param_1[1] + 0x68);
local_c = (float *)FUN_005df0f5(iVar22 << 4);
if (local_c == (float *)0x0) {
local_c = (float *)0x0;
}
else {
FUN_00401000(local_c,0x10,iVar22,&LAB_005eda5e);
}
if (local_c != (float *)0x0) {
iVar22 = *(int *)(*param_1 + 0x68);
local_14 = (void *)FUN_005df0f5(iVar22 << 5);
if (local_14 == (void *)0x0) {
local_14 = (void *)0x0;
}
else {
FUN_00401000(local_14,0x10,iVar22 << 1,&LAB_005eda5e);
}
if (local_14 != (void *)0x0) {
local_20 = 0;
local_30 = -1;
local_1c = -1;
pvVar31 = (void *)(*(int *)(*param_1 + 0x68) * 0x10 + (int)local_14);
local_24 = local_14;
if (*(int *)(param_1[1] + 0x6c) != 0) {
piVar28 = (int *)((int)pvVar25 + 8);
local_10 = pvVar31;
do {
iVar23 = local_1c;
iVar22 = piVar28[-2];
local_34 = 0;
pvVar32 = pvVar31;
if (iVar22 != local_30) {
if (iVar22 == local_1c) {
local_1c = -1;
local_30 = iVar23;
local_10 = local_24;
pvVar32 = local_24;
local_24 = pvVar31;
}
else {
(**(code **)(*(int *)*param_1 + 4))(iVar22,0,local_24);
local_30 = iVar22;
}
}
iVar22 = *piVar28;
if (iVar22 != local_1c) {
(**(code **)(*(int *)*param_1 + 4))(iVar22,0,pvVar32);
local_1c = iVar22;
}
pvVar31 = pvVar32;
if (*(int *)(param_1[1] + 0x68) != 0) {
piVar26 = (int *)((int)pvVar24 + 8);
local_2c = local_c;
do {
fVar3 = (float)piVar26[1];
pfVar1 = (float *)(*piVar26 * 0x10 + (int)pvVar32);
fVar4 = pfVar1[1];
fVar5 = pfVar1[2];
fVar6 = pfVar1[3];
fVar7 = (float)piVar26[-1];
pfVar2 = (float *)(piVar26[-2] * 0x10 + (int)pvVar32);
pfVar27 = (float *)(*piVar26 * 0x10 + (int)local_24);
fVar8 = pfVar2[1];
pfVar29 = (float *)(piVar26[-2] * 0x10 + (int)local_24);
fVar9 = pfVar2[2];
fVar10 = pfVar2[3];
fVar11 = (float)piVar28[1];
fVar12 = (float)piVar26[1];
fVar13 = pfVar27[1];
fVar14 = pfVar27[2];
fVar15 = pfVar27[3];
fVar16 = (float)piVar26[-1];
fVar17 = pfVar29[1];
fVar18 = pfVar29[2];
fVar19 = pfVar29[3];
piVar26 = piVar26 + 4;
local_34 = local_34 + 1;
fVar20 = (float)piVar28[-1];
*local_2c = (fVar16 * *pfVar29 + fVar12 * *pfVar27) * fVar20 +
(fVar7 * *pfVar2 + fVar3 * *pfVar1) * fVar11;
local_2c[1] = (fVar16 * fVar17 + fVar12 * fVar13) * fVar20 +
(fVar7 * fVar8 + fVar3 * fVar4) * fVar11;
local_2c[2] = (fVar16 * fVar18 + fVar12 * fVar14) * fVar20 +
(fVar7 * fVar9 + fVar3 * fVar5) * fVar11;
local_2c[3] = (fVar12 * fVar15 + fVar16 * fVar19) * fVar20 +
(fVar3 * fVar6 + fVar7 * fVar10) * fVar11;
pvVar32 = local_10;
pvVar31 = local_10;
local_2c = local_2c + 4;
} while (local_34 < *(uint *)(param_1[1] + 0x68));
}
(**(code **)(*(int *)param_1[1] + 8))(local_20,0,local_c);
piVar28 = piVar28 + 4;
local_20 = local_20 + 1;
} while (local_20 < *(uint *)(param_1[1] + 0x6c));
}
uVar30 = 0;
goto LAB_005f21bd;
}
}
}
uVar30 = 0x8007000e;
LAB_005f21bd:
operator_delete(pvVar24);
operator_delete(pvVar25);
operator_delete(local_c);
operator_delete(local_14);
return uVar30;
}
// --- FUN_005f21ee at 0x005F21EE (size: 1730) ---
undefined4 __fastcall FUN_005f21ee(int *param_1)
{
float *pfVar1;
float fVar2;
float fVar3;
float fVar4;
float fVar5;
float fVar6;
float fVar7;
float fVar8;
float fVar9;
float fVar10;
float fVar11;
float fVar12;
float fVar13;
float fVar14;
float fVar15;
float fVar16;
float fVar17;
float fVar18;
float fVar19;
float fVar20;
float fVar21;
float fVar22;
float fVar23;
float fVar24;
float fVar25;
float fVar26;
float fVar27;
float fVar28;
float fVar29;
float fVar30;
float fVar31;
float fVar32;
float fVar33;
float fVar34;
float fVar35;
float fVar36;
float fVar37;
float fVar38;
float fVar39;
uint uVar40;
void *pvVar41;
void *pvVar42;
void *pvVar43;
void *pvVar44;
int iVar45;
int *piVar46;
int iVar47;
float *pfVar48;
float *pfVar49;
float *pfVar50;
float *pfVar51;
void *pvVar52;
void *pvVar53;
float *pfVar54;
float *pfVar55;
float *pfVar56;
undefined4 uVar57;
int *piVar58;
uint local_48;
float *local_3c;
void *local_38;
void *local_30;
void *local_2c;
void *local_28;
uint local_24;
uint local_20;
int local_1c;
void *local_18;
int local_14;
float *local_10;
undefined4 *local_c;
local_10 = (float *)0x0;
local_28 = (void *)0x0;
uVar40 = param_1[2];
if ((char)uVar40 != '\x03') {
return 0x80004005;
}
pvVar42 = (void *)FUN_005f1d60(~(uVar40 >> 0x10) & 1);
pvVar43 = (void *)FUN_005f1d60(~(uVar40 >> 0x11) & 1);
pvVar44 = (void *)FUN_005f1d60(~(uVar40 >> 0x12) & 1);
if (((pvVar42 != (void *)0x0) && (pvVar43 != (void *)0x0)) && (pvVar44 != (void *)0x0)) {
iVar47 = *(int *)(param_1[1] + 0x68);
local_10 = (float *)FUN_005df0f5(iVar47 << 4);
if (local_10 == (float *)0x0) {
local_10 = (float *)0x0;
}
else {
FUN_00401000(local_10,0x10,iVar47,&LAB_005eda5e);
}
if (local_10 != (float *)0x0) {
iVar47 = *(int *)(*param_1 + 0x68);
local_28 = (void *)FUN_005df0f5(iVar47 << 6);
if (local_28 == (void *)0x0) {
local_28 = (void *)0x0;
}
else {
FUN_00401000(local_28,0x10,iVar47 << 2,&LAB_005eda5e);
}
if (local_28 != (void *)0x0) {
iVar47 = *(int *)(*param_1 + 0x68);
local_24 = 0;
local_18 = (void *)(iVar47 * 0x10 + (int)local_28);
iVar45 = param_1[1];
local_2c = (void *)(iVar47 * 0x20 + (int)local_28);
pvVar52 = (void *)(iVar47 * 0x30 + (int)local_28);
local_38 = local_28;
if (*(int *)(iVar45 + 0x70) != 0) {
local_c = (undefined4 *)((int)pvVar44 + 8);
local_30 = pvVar52;
do {
local_20 = 0;
local_1c = -1;
local_14 = -1;
if (*(int *)(iVar45 + 0x6c) != 0) {
piVar58 = (int *)((int)pvVar43 + 8);
do {
iVar45 = local_14;
pvVar41 = local_18;
iVar47 = piVar58[-2];
local_48 = 0;
pvVar53 = pvVar52;
if (iVar47 != local_1c) {
if (iVar47 == local_14) {
local_14 = -1;
local_1c = iVar45;
local_18 = local_38;
local_38 = pvVar41;
local_30 = local_2c;
pvVar53 = local_2c;
local_2c = pvVar52;
}
else {
(**(code **)(*(int *)*param_1 + 4))(iVar47,local_c[-2],local_38);
(**(code **)(*(int *)*param_1 + 4))(iVar47,*local_c,local_2c);
local_1c = iVar47;
}
}
iVar47 = *piVar58;
if (iVar47 != local_14) {
(**(code **)(*(int *)*param_1 + 4))(iVar47,local_c[-2],local_18);
(**(code **)(*(int *)*param_1 + 4))(iVar47,*local_c,pvVar53);
local_14 = iVar47;
}
pvVar52 = pvVar53;
if (*(int *)(param_1[1] + 0x68) != 0) {
piVar46 = (int *)((int)pvVar42 + 8);
local_3c = local_10;
do {
fVar2 = (float)piVar46[1];
pfVar1 = (float *)(*piVar46 * 0x10 + (int)local_30);
fVar3 = pfVar1[1];
fVar4 = pfVar1[2];
fVar5 = pfVar1[3];
fVar6 = (float)piVar46[-1];
iVar47 = piVar46[-2] * 0x10;
pfVar49 = (float *)((int)local_30 + iVar47);
fVar7 = pfVar49[1];
fVar8 = pfVar49[2];
fVar9 = pfVar49[3];
pfVar54 = (float *)(*piVar46 * 0x10 + (int)local_2c);
pfVar50 = (float *)((int)local_2c + iVar47);
fVar10 = (float)piVar58[1];
fVar11 = (float)piVar46[1];
fVar12 = pfVar54[1];
fVar13 = pfVar54[2];
fVar14 = pfVar54[3];
fVar15 = (float)piVar46[-1];
fVar16 = pfVar50[1];
fVar17 = pfVar50[2];
fVar18 = pfVar50[3];
fVar19 = (float)piVar58[-1];
fVar20 = (float)local_c[1];
pfVar55 = (float *)((int)local_18 + *piVar46 * 0x10);
fVar21 = (float)piVar46[1];
fVar22 = pfVar55[1];
fVar23 = pfVar55[2];
fVar24 = pfVar55[3];
fVar25 = (float)piVar46[-1];
pfVar56 = (float *)((int)local_18 + iVar47);
fVar26 = pfVar56[1];
fVar27 = pfVar56[2];
fVar28 = pfVar56[3];
pfVar51 = (float *)(*piVar46 * 0x10 + (int)local_38);
pfVar48 = (float *)(iVar47 + (int)local_38);
fVar29 = (float)piVar58[1];
fVar30 = (float)piVar46[1];
fVar31 = pfVar51[1];
fVar32 = pfVar51[2];
fVar33 = pfVar51[3];
fVar34 = (float)piVar46[-1];
fVar35 = pfVar48[1];
fVar36 = pfVar48[2];
fVar37 = pfVar48[3];
fVar38 = (float)piVar58[-1];
fVar39 = (float)local_c[-1];
piVar46 = piVar46 + 4;
local_48 = local_48 + 1;
*local_3c = ((fVar34 * *pfVar48 + fVar30 * *pfVar51) * fVar38 +
(fVar25 * *pfVar56 + fVar21 * *pfVar55) * fVar29) * fVar39 +
((fVar15 * *pfVar50 + fVar11 * *pfVar54) * fVar19 +
(fVar6 * *pfVar49 + fVar2 * *pfVar1) * fVar10) * fVar20;
local_3c[1] = ((fVar34 * fVar35 + fVar30 * fVar31) * fVar38 +
(fVar25 * fVar26 + fVar21 * fVar22) * fVar29) * fVar39 +
((fVar15 * fVar16 + fVar11 * fVar12) * fVar19 +
(fVar6 * fVar7 + fVar2 * fVar3) * fVar10) * fVar20;
local_3c[2] = ((fVar34 * fVar36 + fVar30 * fVar32) * fVar38 +
(fVar25 * fVar27 + fVar21 * fVar23) * fVar29) * fVar39 +
((fVar15 * fVar17 + fVar11 * fVar13) * fVar19 +
(fVar6 * fVar8 + fVar2 * fVar4) * fVar10) * fVar20;
local_3c[3] = ((fVar30 * fVar33 + fVar34 * fVar37) * fVar38 +
(fVar21 * fVar24 + fVar25 * fVar28) * fVar29) * fVar39 +
((fVar11 * fVar14 + fVar15 * fVar18) * fVar19 +
(fVar2 * fVar5 + fVar6 * fVar9) * fVar10) * fVar20;
pvVar52 = local_30;
local_3c = local_3c + 4;
} while (local_48 < *(uint *)(param_1[1] + 0x68));
}
(**(code **)(*(int *)param_1[1] + 8))(local_20,local_24,local_10);
piVar58 = piVar58 + 4;
local_20 = local_20 + 1;
} while (local_20 < *(uint *)(param_1[1] + 0x6c));
}
local_c = local_c + 4;
local_24 = local_24 + 1;
iVar45 = param_1[1];
} while (local_24 < *(uint *)(iVar45 + 0x70));
}
uVar57 = 0;
goto LAB_005f287e;
}
}
}
uVar57 = 0x8007000e;
LAB_005f287e:
operator_delete(pvVar42);
operator_delete(pvVar43);
operator_delete(pvVar44);
operator_delete(local_10);
operator_delete(local_28);
return uVar57;
}
// --- FUN_005f28b0 at 0x005F28B0 (size: 79) ---
undefined4 * __thiscall FUN_005f28b0(undefined4 *param_1,byte param_2)
{
undefined4 *puVar1;
if ((param_2 & 2) == 0) {
operator_delete((void *)*param_1);
puVar1 = param_1;
if ((param_2 & 1) != 0) {
operator_delete(param_1);
}
}
else {
puVar1 = param_1 + -1;
FUN_00401030(param_1,0xc,*puVar1,&LAB_005efd46);
if ((param_2 & 1) != 0) {
operator_delete(puVar1);
}
}
return puVar1;
}
// --- FUN_005f28ff at 0x005F28FF (size: 1670) ---
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
undefined4 __fastcall FUN_005f28ff(int *param_1)
{
float fVar1;
float fVar2;
int iVar3;
int iVar4;
int iVar5;
int *piVar6;
int *piVar7;
int iVar8;
int iVar9;
int *piVar10;
uint uVar11;
int iVar12;
int *piVar13;
int *piVar14;
float *pfVar15;
int *piVar16;
int *piVar17;
undefined4 uVar18;
undefined4 *puVar19;
float *pfVar20;
int local_38;
int local_2c;
int *local_28;
int *local_20;
int *local_1c;
int *local_18;
void *local_10;
int *local_c;
int *local_8;
uVar11 = param_1[2];
local_20 = (int *)0x0;
local_1c = (int *)0x0;
local_c = (int *)0x0;
local_18 = (int *)0x0;
local_10 = (void *)0x0;
piVar6 = (int *)FUN_005efd4f(*(undefined4 *)(*param_1 + 0x68),*(undefined4 *)(param_1[1] + 0x68),
~(uVar11 >> 0x10) & 1);
if (((piVar6 == (int *)0x0) ||
(local_20 = (int *)FUN_005efd4f(*(undefined4 *)(*param_1 + 0x6c),
*(undefined4 *)(param_1[1] + 0x6c),~(uVar11 >> 0x11) & 1),
local_20 == (int *)0x0)) ||
(local_1c = (int *)FUN_005efd4f(*(undefined4 *)(*param_1 + 0x70),
*(undefined4 *)(param_1[1] + 0x70),~(uVar11 >> 0x12) & 1),
local_1c == (int *)0x0)) {
uVar18 = 0x80004005;
}
else {
iVar3 = *piVar6;
iVar4 = *local_20;
iVar5 = *local_1c;
iVar12 = *(int *)(param_1[1] + 0x70);
local_c = (int *)FUN_005df0f5(iVar12 * 0xc + 4);
if (local_c == (int *)0x0) {
local_c = (int *)0x0;
}
else {
*local_c = iVar12;
local_c = local_c + 1;
FUN_00401000(local_c,0xc,iVar12,&LAB_005efd39);
}
if (local_c != (int *)0x0) {
iVar12 = *(int *)(*param_1 + 0x68);
local_10 = (void *)FUN_005df0f5(iVar12 << 4);
if (local_10 == (void *)0x0) {
local_10 = (void *)0x0;
}
else {
FUN_00401000(local_10,0x10,iVar12,&LAB_005eda5e);
}
if (local_10 != (void *)0x0) {
piVar17 = local_1c + 1;
while (piVar17 < (int *)(iVar5 + (int)local_1c)) {
piVar14 = (int *)(*piVar17 + (int)piVar17);
for (piVar10 = piVar17 + 1; piVar17 = piVar14, piVar10 < piVar14; piVar10 = piVar10 + 2) {
local_c[*piVar10 * 3 + 2] = local_c[*piVar10 * 3 + 2] + 1;
}
}
local_38 = 0;
piVar17 = local_1c + 1;
fVar2 = _DAT_0079a1a0;
while (piVar17 < (int *)(iVar5 + (int)local_1c)) {
piVar14 = (int *)(*piVar17 + (int)piVar17);
piVar17 = piVar17 + 1;
for (piVar10 = piVar17; piVar10 < piVar14; piVar10 = piVar10 + 2) {
piVar7 = local_c + *piVar10 * 3;
if (*piVar7 == 0) {
if (local_18 == (int *)0x0) {
iVar8 = *(int *)(param_1[1] + 0x6c) * *(int *)(param_1[1] + 0x68);
iVar12 = FUN_005df0f5(iVar8 * 0x10);
if (iVar12 == 0) {
iVar12 = 0;
}
else {
FUN_00401000(iVar12,0x10,iVar8,&LAB_005eda5e);
}
*piVar7 = iVar12;
fVar2 = _DAT_0079a1a0;
if (iVar12 == 0) goto LAB_005f2f3a;
}
else {
*piVar7 = *local_18;
*local_18 = 0;
local_18 = (int *)local_18[1];
}
puVar19 = (undefined4 *)*piVar7;
for (uVar11 = (uint)(*(int *)(param_1[1] + 0x6c) * *(int *)(param_1[1] + 0x68) * 0x10)
>> 2; uVar11 != 0; uVar11 = uVar11 - 1) {
*puVar19 = 0;
puVar19 = puVar19 + 1;
}
for (iVar12 = 0; iVar12 != 0; iVar12 = iVar12 + -1) {
*(undefined1 *)puVar19 = 0;
puVar19 = (undefined4 *)((int)puVar19 + 1);
}
}
}
local_2c = 0;
piVar10 = local_20 + 1;
while (piVar10 < (int *)(iVar4 + (int)local_20)) {
iVar12 = *piVar10;
(**(code **)(*(int *)*param_1 + 4))(local_2c,local_38,local_10);
if (piVar6 + 1 < (int *)(iVar3 + (int)piVar6)) {
pfVar15 = (float *)((int)local_10 + 8);
local_28 = piVar6 + 1;
do {
piVar7 = (int *)(*local_28 + (int)local_28);
for (local_8 = piVar17; local_8 < piVar14; local_8 = local_8 + 2) {
for (piVar16 = piVar10 + 1; piVar16 < (int *)(iVar12 + (int)piVar10);
piVar16 = piVar16 + 2) {
iVar8 = *(int *)(param_1[1] + 0x68) * *piVar16 * 0x10 + local_c[*local_8 * 3];
for (piVar13 = local_28 + 1; piVar13 < piVar7; piVar13 = piVar13 + 2) {
pfVar20 = (float *)(*piVar13 * 0x10 + iVar8);
fVar2 = (float)piVar13[1] * (float)local_8[1] * (float)piVar16[1];
*pfVar20 = fVar2 * pfVar15[-2] + *pfVar20;
pfVar20 = (float *)(*piVar13 * 0x10 + 4 + iVar8);
*pfVar20 = fVar2 * pfVar15[-1] + *pfVar20;
pfVar20 = (float *)(*piVar13 * 0x10 + 8 + iVar8);
*pfVar20 = fVar2 * *pfVar15 + *pfVar20;
pfVar20 = (float *)(*piVar13 * 0x10 + 0xc + iVar8);
*pfVar20 = fVar2 * pfVar15[1] + *pfVar20;
}
}
}
pfVar15 = pfVar15 + 4;
local_28 = piVar7;
} while (piVar7 < (int *)(iVar3 + (int)piVar6));
}
local_2c = local_2c + 1;
piVar10 = (int *)(iVar12 + (int)piVar10);
fVar2 = _DAT_0079a1a0;
}
for (; piVar17 < piVar14; piVar17 = piVar17 + 2) {
piVar7 = local_c + *piVar17 * 3;
piVar10 = piVar7 + 2;
*piVar10 = *piVar10 + -1;
if (*piVar10 == 0) {
iVar12 = param_1[1];
local_8 = (int *)0x0;
if (*(int *)(iVar12 + 0x6c) != 0) {
do {
fVar1 = _DAT_007938b0;
iVar12 = *(int *)(iVar12 + 0x68);
iVar8 = *(int *)(*param_1 + 8);
iVar9 = iVar12 * (int)local_8 * 0x10 + *piVar7;
if (iVar8 == 1) {
uVar11 = 0;
if (iVar12 != 0) {
pfVar15 = (float *)(iVar9 + 8);
do {
if (0.0 <= pfVar15[-2]) {
if (fVar1 <= pfVar15[-2]) {
fVar2 = 1.0;
}
else {
fVar2 = pfVar15[-2];
}
}
else {
fVar2 = 0.0;
}
pfVar15[-2] = fVar2;
if (0.0 <= pfVar15[-1]) {
if (fVar1 <= pfVar15[-1]) {
fVar2 = 1.0;
}
else {
fVar2 = pfVar15[-1];
}
}
else {
fVar2 = 0.0;
}
pfVar15[-1] = fVar2;
if (0.0 <= *pfVar15) {
if (fVar1 <= *pfVar15) {
fVar2 = 1.0;
}
else {
fVar2 = *pfVar15;
}
}
else {
fVar2 = 0.0;
}
*pfVar15 = fVar2;
if (0.0 <= pfVar15[1]) {
if (fVar1 <= pfVar15[1]) {
fVar2 = 1.0;
}
else {
fVar2 = pfVar15[1];
}
}
else {
fVar2 = 0.0;
}
pfVar15[1] = fVar2;
uVar11 = uVar11 + 1;
pfVar15 = pfVar15 + 4;
} while (uVar11 < *(uint *)(param_1[1] + 0x68));
}
}
else if (iVar8 == 2) {
uVar11 = 0;
if (iVar12 != 0) {
pfVar15 = (float *)(iVar9 + 8);
do {
fVar1 = fVar2;
if (fVar2 <= pfVar15[-2]) {
if (_DAT_007938b0 <= pfVar15[-2]) {
fVar1 = 1.0;
}
else {
fVar1 = pfVar15[-2];
}
}
pfVar15[-2] = fVar1;
fVar1 = fVar2;
if (fVar2 <= pfVar15[-1]) {
if (_DAT_007938b0 <= pfVar15[-1]) {
fVar1 = 1.0;
}
else {
fVar1 = pfVar15[-1];
}
}
pfVar15[-1] = fVar1;
fVar1 = fVar2;
if (fVar2 <= *pfVar15) {
if (_DAT_007938b0 <= *pfVar15) {
fVar1 = 1.0;
}
else {
fVar1 = *pfVar15;
}
}
*pfVar15 = fVar1;
if (0.0 <= pfVar15[1]) {
if (_DAT_007938b0 <= pfVar15[1]) {
fVar1 = 1.0;
}
else {
fVar1 = pfVar15[1];
}
}
else {
fVar1 = 0.0;
}
pfVar15[1] = fVar1;
uVar11 = uVar11 + 1;
pfVar15 = pfVar15 + 4;
} while (uVar11 < *(uint *)(param_1[1] + 0x68));
}
}
else if ((iVar8 == 3) && (uVar11 = 0, iVar12 != 0)) {
pfVar15 = (float *)(iVar9 + 8);
do {
fVar1 = fVar2;
if (fVar2 <= pfVar15[-2]) {
if (_DAT_007938b0 <= pfVar15[-2]) {
fVar1 = 1.0;
}
else {
fVar1 = pfVar15[-2];
}
}
pfVar15[-2] = fVar1;
fVar1 = fVar2;
if (fVar2 <= pfVar15[-1]) {
if (_DAT_007938b0 <= pfVar15[-1]) {
fVar1 = 1.0;
}
else {
fVar1 = pfVar15[-1];
}
}
pfVar15[-1] = fVar1;
fVar1 = fVar2;
if (fVar2 <= *pfVar15) {
if (_DAT_007938b0 <= *pfVar15) {
fVar1 = 1.0;
}
else {
fVar1 = *pfVar15;
}
}
*pfVar15 = fVar1;
fVar1 = fVar2;
if (fVar2 <= pfVar15[1]) {
if (_DAT_007938b0 <= pfVar15[1]) {
fVar1 = 1.0;
}
else {
fVar1 = pfVar15[1];
}
}
pfVar15[1] = fVar1;
uVar11 = uVar11 + 1;
pfVar15 = pfVar15 + 4;
} while (uVar11 < *(uint *)(param_1[1] + 0x68));
}
(**(code **)(*(int *)param_1[1] + 8))
(local_8,*piVar17,
((int *)param_1[1])[0x1a] * (int)local_8 * 0x10 + *piVar7);
local_8 = (int *)((int)local_8 + 1);
iVar12 = param_1[1];
fVar2 = _DAT_0079a1a0;
} while (local_8 < *(uint *)(iVar12 + 0x6c));
}
piVar7[1] = (int)local_18;
local_18 = piVar7;
}
}
local_38 = local_38 + 1;
piVar17 = piVar14;
}
uVar18 = 0;
goto LAB_005f2f46;
}
}
LAB_005f2f3a:
uVar18 = 0x8007000e;
}
LAB_005f2f46:
if (local_c != (int *)0x0) {
FUN_005f28b0(3);
}
operator_delete(local_1c);
operator_delete(local_20);
operator_delete(piVar6);
operator_delete(local_10);
operator_delete((void *)0x0);
return uVar18;
}
// --- FUN_005f2f85 at 0x005F2F85 (size: 1472) ---
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
undefined4 __fastcall FUN_005f2f85(int *param_1)
{
float fVar1;
float fVar2;
int iVar3;
int iVar4;
float fVar5;
int *piVar6;
int iVar7;
int *piVar8;
int *piVar9;
uint uVar10;
int iVar11;
int *piVar12;
float *pfVar13;
float *pfVar14;
undefined4 uVar15;
undefined4 *puVar16;
int *piVar17;
int *piVar18;
int local_20;
int *local_1c;
int *local_18;
void *local_10;
int *local_c;
int *local_8;
local_1c = (int *)0x0;
local_c = (int *)0x0;
local_18 = (int *)0x0;
local_10 = (void *)0x0;
if ((*(int *)(param_1[1] + 0x70) != 1) || (*(int *)(*param_1 + 0x70) != 1)) {
return 0x80004005;
}
uVar10 = param_1[2];
piVar6 = (int *)FUN_005efd4f(*(undefined4 *)(*param_1 + 0x68),*(undefined4 *)(param_1[1] + 0x68),
~(uVar10 >> 0x10) & 1);
if ((piVar6 == (int *)0x0) ||
(local_1c = (int *)FUN_005efd4f(*(undefined4 *)(*param_1 + 0x6c),
*(undefined4 *)(param_1[1] + 0x6c),~(uVar10 >> 0x11) & 1),
local_1c == (int *)0x0)) {
uVar15 = 0x80004005;
}
else {
iVar3 = *piVar6;
iVar4 = *local_1c;
iVar11 = *(int *)(param_1[1] + 0x6c);
local_c = (int *)FUN_005df0f5(iVar11 * 0xc + 4);
if (local_c == (int *)0x0) {
local_c = (int *)0x0;
}
else {
*local_c = iVar11;
local_c = local_c + 1;
FUN_00401000(local_c,0xc,iVar11,&LAB_005efd39);
}
if (local_c != (int *)0x0) {
iVar11 = *(int *)(*param_1 + 0x68);
local_10 = (void *)FUN_005df0f5(iVar11 << 4);
if (local_10 == (void *)0x0) {
local_10 = (void *)0x0;
}
else {
FUN_00401000(local_10,0x10,iVar11,&LAB_005eda5e);
}
if (local_10 != (void *)0x0) {
piVar18 = local_1c + 1;
while (piVar18 < (int *)(iVar4 + (int)local_1c)) {
piVar12 = (int *)(*piVar18 + (int)piVar18);
for (piVar8 = piVar18 + 1; piVar18 = piVar12, piVar8 < piVar12; piVar8 = piVar8 + 2) {
local_c[*piVar8 * 3 + 2] = local_c[*piVar8 * 3 + 2] + 1;
}
}
local_20 = 0;
piVar18 = local_1c + 1;
while (piVar18 < (int *)(iVar4 + (int)local_1c)) {
piVar12 = (int *)(*piVar18 + (int)piVar18);
piVar18 = piVar18 + 1;
for (piVar8 = piVar18; piVar8 < piVar12; piVar8 = piVar8 + 2) {
piVar17 = local_c + *piVar8 * 3;
if (*piVar17 == 0) {
if (local_18 == (int *)0x0) {
iVar11 = *(int *)(param_1[1] + 0x68);
iVar7 = FUN_005df0f5(iVar11 << 4);
if (iVar7 == 0) {
iVar7 = 0;
}
else {
FUN_00401000(iVar7,0x10,iVar11,&LAB_005eda5e);
}
*piVar17 = iVar7;
if (iVar7 == 0) goto LAB_005f34fb;
}
else {
*piVar17 = *local_18;
*local_18 = 0;
local_18 = (int *)local_18[1];
}
puVar16 = (undefined4 *)*piVar17;
for (uVar10 = (uint)(*(int *)(param_1[1] + 0x68) << 4) >> 2; uVar10 != 0;
uVar10 = uVar10 - 1) {
*puVar16 = 0;
puVar16 = puVar16 + 1;
}
for (iVar11 = 0; iVar11 != 0; iVar11 = iVar11 + -1) {
*(undefined1 *)puVar16 = 0;
puVar16 = (undefined4 *)((int)puVar16 + 1);
}
}
}
(**(code **)(*(int *)*param_1 + 4))(local_20,0,local_10);
if (piVar6 + 1 < (int *)(iVar3 + (int)piVar6)) {
pfVar13 = (float *)((int)local_10 + 8);
piVar8 = piVar6 + 1;
do {
piVar17 = (int *)(*piVar8 + (int)piVar8);
if (piVar18 < piVar12) {
local_8 = piVar18;
do {
iVar11 = local_c[*local_8 * 3];
for (piVar9 = piVar8 + 1; piVar9 < piVar17; piVar9 = piVar9 + 2) {
fVar5 = (float)piVar9[1] * (float)local_8[1];
pfVar14 = (float *)(*piVar9 * 0x10 + iVar11);
*pfVar14 = fVar5 * pfVar13[-2] + *pfVar14;
pfVar14 = (float *)(*piVar9 * 0x10 + 4 + iVar11);
*pfVar14 = fVar5 * pfVar13[-1] + *pfVar14;
pfVar14 = (float *)(*piVar9 * 0x10 + 8 + iVar11);
*pfVar14 = fVar5 * *pfVar13 + *pfVar14;
pfVar14 = (float *)(*piVar9 * 0x10 + 0xc + iVar11);
*pfVar14 = fVar5 * pfVar13[1] + *pfVar14;
}
local_8 = local_8 + 2;
} while (local_8 < piVar12);
}
pfVar13 = pfVar13 + 4;
piVar8 = piVar17;
} while (piVar17 < (int *)(iVar3 + (int)piVar6));
}
for (; piVar18 < piVar12; piVar18 = piVar18 + 2) {
piVar17 = local_c + *piVar18 * 3;
piVar8 = piVar17 + 2;
*piVar8 = *piVar8 + -1;
fVar2 = _DAT_0079a1a0;
fVar5 = _DAT_007938b0;
if (*piVar8 == 0) {
iVar11 = *(int *)(*param_1 + 8);
if (iVar11 == 1) {
iVar11 = 0;
uVar10 = 0;
if (*(int *)(param_1[1] + 0x68) != 0) {
do {
pfVar13 = (float *)(*piVar17 + iVar11);
if (0.0 <= *pfVar13) {
if (fVar5 <= *pfVar13) {
fVar2 = 1.0;
}
else {
fVar2 = *pfVar13;
}
}
else {
fVar2 = 0.0;
}
*pfVar13 = fVar2;
pfVar13 = (float *)(*piVar17 + 4 + iVar11);
if (0.0 <= *pfVar13) {
if (fVar5 <= *pfVar13) {
fVar2 = 1.0;
}
else {
fVar2 = *pfVar13;
}
}
else {
fVar2 = 0.0;
}
*pfVar13 = fVar2;
pfVar13 = (float *)(*piVar17 + 8 + iVar11);
if (0.0 <= *pfVar13) {
if (fVar5 <= *pfVar13) {
fVar2 = 1.0;
}
else {
fVar2 = *pfVar13;
}
}
else {
fVar2 = 0.0;
}
*pfVar13 = fVar2;
pfVar13 = (float *)(*piVar17 + 0xc + iVar11);
if (0.0 <= *pfVar13) {
if (fVar5 <= *pfVar13) {
fVar2 = 1.0;
}
else {
fVar2 = *pfVar13;
}
}
else {
fVar2 = 0.0;
}
*pfVar13 = fVar2;
uVar10 = uVar10 + 1;
iVar11 = iVar11 + 0x10;
} while (uVar10 < *(uint *)(param_1[1] + 0x68));
}
}
else if (iVar11 == 2) {
iVar11 = 0;
uVar10 = 0;
if (*(int *)(param_1[1] + 0x68) != 0) {
do {
pfVar13 = (float *)(*piVar17 + iVar11);
fVar1 = fVar2;
if (fVar2 <= *pfVar13) {
if (fVar5 <= *pfVar13) {
fVar1 = 1.0;
}
else {
fVar1 = *pfVar13;
}
}
*pfVar13 = fVar1;
pfVar13 = (float *)(*piVar17 + 4 + iVar11);
fVar1 = fVar2;
if (fVar2 <= *pfVar13) {
if (fVar5 <= *pfVar13) {
fVar1 = 1.0;
}
else {
fVar1 = *pfVar13;
}
}
*pfVar13 = fVar1;
pfVar13 = (float *)(*piVar17 + 8 + iVar11);
fVar1 = fVar2;
if (fVar2 <= *pfVar13) {
if (fVar5 <= *pfVar13) {
fVar1 = 1.0;
}
else {
fVar1 = *pfVar13;
}
}
*pfVar13 = fVar1;
pfVar13 = (float *)(*piVar17 + 0xc + iVar11);
if (0.0 <= *pfVar13) {
if (fVar5 <= *pfVar13) {
fVar1 = 1.0;
}
else {
fVar1 = *pfVar13;
}
}
else {
fVar1 = 0.0;
}
*pfVar13 = fVar1;
uVar10 = uVar10 + 1;
iVar11 = iVar11 + 0x10;
} while (uVar10 < *(uint *)(param_1[1] + 0x68));
}
}
else if (iVar11 == 3) {
iVar11 = 0;
uVar10 = 0;
if (*(int *)(param_1[1] + 0x68) != 0) {
do {
pfVar13 = (float *)(*piVar17 + iVar11);
fVar1 = fVar2;
if (fVar2 <= *pfVar13) {
if (fVar5 <= *pfVar13) {
fVar1 = 1.0;
}
else {
fVar1 = *pfVar13;
}
}
*pfVar13 = fVar1;
pfVar13 = (float *)(*piVar17 + 4 + iVar11);
fVar1 = fVar2;
if (fVar2 <= *pfVar13) {
if (fVar5 <= *pfVar13) {
fVar1 = 1.0;
}
else {
fVar1 = *pfVar13;
}
}
*pfVar13 = fVar1;
pfVar13 = (float *)(*piVar17 + 8 + iVar11);
fVar1 = fVar2;
if (fVar2 <= *pfVar13) {
if (fVar5 <= *pfVar13) {
fVar1 = 1.0;
}
else {
fVar1 = *pfVar13;
}
}
*pfVar13 = fVar1;
pfVar13 = (float *)(*piVar17 + 0xc + iVar11);
fVar1 = fVar2;
if (fVar2 <= *pfVar13) {
if (fVar5 <= *pfVar13) {
fVar1 = 1.0;
}
else {
fVar1 = *pfVar13;
}
}
*pfVar13 = fVar1;
uVar10 = uVar10 + 1;
iVar11 = iVar11 + 0x10;
} while (uVar10 < *(uint *)(param_1[1] + 0x68));
}
}
(**(code **)(*(int *)param_1[1] + 8))(*piVar18,0,*piVar17);
piVar17[1] = (int)local_18;
local_18 = piVar17;
}
}
local_20 = local_20 + 1;
piVar18 = piVar12;
}
uVar15 = 0;
goto LAB_005f3507;
}
}
LAB_005f34fb:
uVar15 = 0x8007000e;
}
LAB_005f3507:
if (local_c != (int *)0x0) {
FUN_005f28b0(3);
}
operator_delete(local_1c);
operator_delete(piVar6);
operator_delete(local_10);
operator_delete((void *)0x0);
return uVar15;
}
// --- FUN_005f3545 at 0x005F3545 (size: 317) ---
int __thiscall FUN_005f3545(int *param_1,int param_2,int param_3,uint param_4)
{
int iVar1;
param_1[1] = 0;
*param_1 = 0;
param_1[2] = param_4;
if ((((param_4 & 0xffff) == 0) || (5 < (param_4 & 0xffff))) || ((param_4 & 0xff800000) != 0)) {
return -0x7789f794;
}
*(uint *)(param_3 + 0x48) = param_4 & 0x200000;
*(uint *)(param_2 + 0x48) = param_4 & 0x400000;
*(uint *)(param_2 + 0x40) = param_4 & 0x80000;
*(uint *)(param_2 + 0x44) = param_4 & 0x100000;
iVar1 = FUN_005fe6c1(param_2);
param_1[1] = iVar1;
if (iVar1 != 0) {
iVar1 = FUN_005fe6c1(param_3);
*param_1 = iVar1;
if (iVar1 != 0) {
iVar1 = FUN_005f535b(iVar1);
if (iVar1 < 0) goto LAB_005f3653;
iVar1 = FUN_005f100a();
if ((((-1 < iVar1) || (iVar1 = FUN_005f1114(), -1 < iVar1)) ||
((iVar1 = FUN_005f11e7(), -1 < iVar1 ||
((iVar1 = FUN_005f13ba(), -1 < iVar1 || (iVar1 = FUN_005f1590(), -1 < iVar1)))))) ||
((iVar1 = FUN_005f1958(), -1 < iVar1 ||
((((iVar1 = FUN_005f1e4c(), -1 < iVar1 || (iVar1 = FUN_005f21ee(), -1 < iVar1)) ||
(iVar1 = FUN_005f2f85(), -1 < iVar1)) || (iVar1 = FUN_005f28ff(), -1 < iVar1)))))) {
iVar1 = 0;
goto LAB_005f3653;
}
}
}
iVar1 = -0x7fffbffb;
LAB_005f3653:
if ((undefined4 *)param_1[1] != (undefined4 *)0x0) {
(*(code *)**(undefined4 **)param_1[1])(1);
param_1[1] = 0;
}
if ((undefined4 *)*param_1 != (undefined4 *)0x0) {
(*(code *)**(undefined4 **)*param_1)(1);
*param_1 = 0;
}
return iVar1;
}
// --- FUN_005f3682 at 0x005F3682 (size: 19) ---
void __fastcall FUN_005f3682(undefined4 *param_1)
{
*param_1 = 0;
param_1[1] = 0;
param_1[2] = 0;
param_1[3] = 0;
param_1[4] = 0;
return;
}
// --- FUN_005f3695 at 0x005F3695 (size: 223) ---
int FUN_005f3695(int *param_1,int *param_2)
{
int iVar1;
uint uVar2;
undefined4 *puVar3;
undefined4 *puVar4;
int local_3c [7];
uint local_20;
uint local_1c;
undefined4 *local_18;
uint local_14;
undefined4 *local_10;
uint local_c;
uint local_8;
(**(code **)(*param_1 + 0x30))(param_1,local_3c);
iVar1 = (**(code **)(*param_1 + 0x34))(param_1,&local_14,0,0);
if (-1 < iVar1) {
iVar1 = (**(code **)(*param_2 + 0x34))(param_2,&local_1c,0,0);
if (-1 < iVar1) {
if ((((local_3c[0] == 0x31545844) || (local_3c[0] == 0x32545844)) ||
(local_3c[0] == 0x33545844)) ||
((local_3c[0] == 0x34545844 || (local_3c[0] == 0x35545844)))) {
local_20 = local_20 + 3 >> 2;
}
local_c = local_1c;
if ((int)local_14 <= (int)local_1c) {
local_c = local_14;
}
local_8 = 0;
if (local_20 != 0) {
do {
puVar3 = local_10;
puVar4 = local_18;
for (uVar2 = local_c >> 2; uVar2 != 0; uVar2 = uVar2 - 1) {
*puVar4 = *puVar3;
puVar3 = puVar3 + 1;
puVar4 = puVar4 + 1;
}
for (uVar2 = local_c & 3; uVar2 != 0; uVar2 = uVar2 - 1) {
*(undefined1 *)puVar4 = *(undefined1 *)puVar3;
puVar3 = (undefined4 *)((int)puVar3 + 1);
puVar4 = (undefined4 *)((int)puVar4 + 1);
}
local_10 = (undefined4 *)((int)local_10 + local_14);
local_18 = (undefined4 *)((int)local_18 + local_1c);
local_8 = local_8 + 1;
} while (local_8 < local_20);
}
iVar1 = 0;
(**(code **)(*param_2 + 0x38))(param_2);
}
(**(code **)(*param_1 + 0x38))(param_1);
}
return iVar1;
}
// --- FUN_005f3774 at 0x005F3774 (size: 179) ---
undefined4 __fastcall FUN_005f3774(byte *param_1)
{
int *piVar1;
int iVar2;
piVar1 = *(int **)(param_1 + 8);
if ((piVar1 != (int *)0x0) || (piVar1 = *(int **)(param_1 + 4), piVar1 != (int *)0x0)) {
(**(code **)(*piVar1 + 0x38))(piVar1);
}
if ((((*(int *)(param_1 + 4) != 0) && (*(int *)(param_1 + 8) != 0)) &&
(*(int *)(param_1 + 0x10) != 0)) && ((*param_1 & 1) == 0)) {
FUN_005efb7f(1);
iVar2 = (**(code **)(**(int **)(param_1 + 0x10) + 0x78))
(*(int **)(param_1 + 0x10),*(undefined4 *)(param_1 + 8),0,
*(undefined4 *)(param_1 + 4),0);
FUN_005efb7f(0);
if (iVar2 < 0) {
FUN_005efb7f(1);
FUN_005f3695(*(undefined4 *)(param_1 + 8),*(undefined4 *)(param_1 + 4));
FUN_005efb7f(0);
}
}
piVar1 = *(int **)(param_1 + 8);
if (piVar1 != (int *)0x0) {
(**(code **)(*piVar1 + 8))(piVar1);
param_1[8] = 0;
param_1[9] = 0;
param_1[10] = 0;
param_1[0xb] = 0;
}
piVar1 = *(int **)(param_1 + 0xc);
if (piVar1 != (int *)0x0) {
(**(code **)(*piVar1 + 8))(piVar1);
param_1[0xc] = 0;
param_1[0xd] = 0;
param_1[0xe] = 0;
param_1[0xf] = 0;
}
piVar1 = *(int **)(param_1 + 0x10);
if (piVar1 != (int *)0x0) {
(**(code **)(*piVar1 + 8))(piVar1);
param_1[0x10] = 0;
param_1[0x11] = 0;
param_1[0x12] = 0;
param_1[0x13] = 0;
}
piVar1 = *(int **)(param_1 + 4);
if (piVar1 != (int *)0x0) {
(**(code **)(*piVar1 + 8))(piVar1);
param_1[4] = 0;
param_1[5] = 0;
param_1[6] = 0;
param_1[7] = 0;
}
return 0;
}
// --- FUN_005f3827 at 0x005F3827 (size: 6) ---
void __fastcall FUN_005f3827(undefined4 *param_1)
{
*param_1 = 0;
return;
}
// --- FUN_005f382d at 0x005F382D (size: 36) ---
undefined4 __fastcall FUN_005f382d(int *param_1)
{
int *piVar1;
piVar1 = (int *)*param_1;
if (piVar1 != (int *)0x0) {
(**(code **)(*piVar1 + 0x28))(piVar1);
piVar1 = (int *)*param_1;
if (piVar1 != (int *)0x0) {
(**(code **)(*piVar1 + 8))(piVar1);
*param_1 = 0;
}
}
return 0;
}
// --- thunk_FUN_005f3774 at 0x005F3851 (size: 5) ---
undefined4 __fastcall thunk_FUN_005f3774(byte *param_1)
{
int *piVar1;
int iVar2;
piVar1 = *(int **)(param_1 + 8);
if ((piVar1 != (int *)0x0) || (piVar1 = *(int **)(param_1 + 4), piVar1 != (int *)0x0)) {
(**(code **)(*piVar1 + 0x38))(piVar1);
}
if ((((*(int *)(param_1 + 4) != 0) && (*(int *)(param_1 + 8) != 0)) &&
(*(int *)(param_1 + 0x10) != 0)) && ((*param_1 & 1) == 0)) {
FUN_005efb7f(1);
iVar2 = (**(code **)(**(int **)(param_1 + 0x10) + 0x78))
(*(int **)(param_1 + 0x10),*(undefined4 *)(param_1 + 8),0,
*(undefined4 *)(param_1 + 4),0);
FUN_005efb7f(0);
if (iVar2 < 0) {
FUN_005efb7f(1);
FUN_005f3695(*(undefined4 *)(param_1 + 8),*(undefined4 *)(param_1 + 4));
FUN_005efb7f(0);
}
}
piVar1 = *(int **)(param_1 + 8);
if (piVar1 != (int *)0x0) {
(**(code **)(*piVar1 + 8))(piVar1);
param_1[8] = 0;
param_1[9] = 0;
param_1[10] = 0;
param_1[0xb] = 0;
}
piVar1 = *(int **)(param_1 + 0xc);
if (piVar1 != (int *)0x0) {
(**(code **)(*piVar1 + 8))(piVar1);
param_1[0xc] = 0;
param_1[0xd] = 0;
param_1[0xe] = 0;
param_1[0xf] = 0;
}
piVar1 = *(int **)(param_1 + 0x10);
if (piVar1 != (int *)0x0) {
(**(code **)(*piVar1 + 8))(piVar1);
param_1[0x10] = 0;
param_1[0x11] = 0;
param_1[0x12] = 0;
param_1[0x13] = 0;
}
piVar1 = *(int **)(param_1 + 4);
if (piVar1 != (int *)0x0) {
(**(code **)(*piVar1 + 8))(piVar1);
param_1[4] = 0;
param_1[5] = 0;
param_1[6] = 0;
param_1[7] = 0;
}
return 0;
}
// --- FUN_005f3856 at 0x005F3856 (size: 1263) ---
int FUN_005f3856(undefined4 *param_1,int *param_2,undefined4 param_3,uint *param_4,
undefined4 param_5,uint param_6)
{
uint *puVar1;
int *piVar2;
int iVar3;
uint uVar4;
uint *puVar5;
uint *puVar6;
int local_74 [2];
byte local_6b;
int local_68;
uint local_5c;
uint local_58;
uint local_54;
uint local_50;
uint local_4c;
uint local_48;
uint local_44;
uint local_40;
uint local_3c;
uint local_38;
undefined4 local_34;
undefined4 local_30;
uint local_2c;
uint local_28;
uint local_24;
int *local_20;
uint local_1c;
uint *local_18;
int *local_14;
int local_10;
int local_c;
int local_8;
FUN_005f3774();
(**(code **)(*param_2 + 0x30))(param_2,local_74);
puVar5 = local_18;
if (param_4 == (uint *)0x0) {
local_3c = local_5c;
local_38 = local_58;
local_44 = 0;
local_40 = 0;
local_8 = 0;
local_1c = ~param_6 & 1;
}
else {
local_44 = *param_4;
local_40 = param_4[1];
local_3c = param_4[2];
local_38 = param_4[3];
if (((((int)local_44 < 0) || (local_5c < local_3c)) || ((int)local_3c < (int)local_44)) ||
((((int)local_40 < 0 || (local_58 < local_38)) || ((int)local_38 < (int)local_40)))) {
return -0x7789f794;
}
local_1c = 1;
if (((local_44 != 0) || (local_3c != local_5c)) ||
((local_40 != 0 || (local_8 = 0, local_38 != local_58)))) {
local_8 = 1;
}
if (((param_6 & 1) != 0) || (local_8 != 0)) {
local_1c = 0;
}
}
local_2c = param_6 & 0x10000;
if (local_2c != 0) {
local_28 = local_5c;
local_24 = local_58;
local_10 = 0;
if ((((local_74[0] == 0x31545844) || (local_74[0] == 0x32545844)) || (local_74[0] == 0x33545844)
) || ((local_74[0] == 0x34545844 || (local_74[0] == 0x35545844)))) {
uVar4 = local_58 | local_5c;
while ((uVar4 & 3) != 0) {
local_10 = local_10 + 1;
uVar4 = (local_58 | local_5c) << ((byte)local_10 & 0x1f);
}
}
puVar1 = local_18 + 4;
(**(code **)(*param_2 + 0xc))(param_2,puVar1);
puVar5 = puVar5 + 3;
local_c = (**(code **)(*(int *)*puVar1 + 0x5c))
((int *)*puVar1,local_28 << ((byte)local_10 & 0x1f),
local_24 << ((byte)local_10 & 0x1f),local_10 + 1,0,local_74[0],
(local_68 == 3) + '\x02',puVar5,0);
if (-1 < local_c) {
puVar6 = local_18 + 2;
local_c = (**(code **)(*(int *)*puVar5 + 0x48))((int *)*puVar5,local_10,puVar6);
if (-1 < local_c) {
if (local_1c == 0) {
local_14 = (int *)0x0;
FUN_005efb7f(1);
local_c = FUN_005f3695(param_2,*puVar6);
FUN_005efb7f(0);
if (local_c < 0) {
if ((local_10 == 0) &&
(local_c = (**(code **)(*(int *)*puVar1 + 0x70))
((int *)*puVar1,local_28,local_24,local_74[0],0,0,1,&local_14,0)
, -1 < local_c)) {
local_c = (**(code **)(*(int *)*puVar1 + 0x88))((int *)*puVar1,param_2,0,local_14,0,0)
;
if (local_c < 0) {
(**(code **)(*local_14 + 8))(local_14);
}
else {
local_c = FUN_005f3695(local_14,*puVar6);
(**(code **)(*local_14 + 8))(local_14);
if (-1 < local_c) goto LAB_005f3a9e;
}
}
piVar2 = (int *)*puVar6;
if (piVar2 != (int *)0x0) {
(**(code **)(*piVar2 + 8))(piVar2);
*puVar6 = 0;
}
goto LAB_005f3a78;
}
}
LAB_005f3a9e:
local_14 = (int *)*puVar6;
goto LAB_005f3abe;
}
}
piVar2 = (int *)local_18[2];
if (piVar2 != (int *)0x0) {
(**(code **)(*piVar2 + 8))(piVar2);
local_18[2] = 0;
}
LAB_005f3a78:
piVar2 = (int *)*puVar5;
if (piVar2 != (int *)0x0) {
(**(code **)(*piVar2 + 8))(piVar2);
*puVar5 = 0;
}
piVar2 = (int *)*puVar1;
if (piVar2 == (int *)0x0) {
return local_c;
}
(**(code **)(*piVar2 + 8))(piVar2);
*puVar1 = 0;
return local_c;
}
local_14 = param_2;
LAB_005f3abe:
uVar4 = (param_6 & 1 | 0x80) << 4;
if (((local_1c == 0) || (local_2c != 0)) || ((local_6b & 2) == 0)) {
LAB_005f3b41:
if (local_8 != 0) {
if (local_74[0] < 0x34545845) {
if (((local_74[0] == 0x34545844) || (local_74[0] == 0x31545844)) ||
(local_74[0] == 0x32545844)) {
LAB_005f3b79:
local_4c = local_3c + 3 & 0xfffffffc;
local_54 = local_44 & 0xfffffffc;
local_50 = local_40 & 0xfffffffc;
local_48 = local_38 + 3 & 0xfffffffc;
if (local_5c < local_4c) {
local_4c = local_5c;
}
if (local_58 < local_48) {
local_48 = local_58;
}
}
else {
if (local_74[0] != 0x32595559) {
if (local_74[0] != 0x33545844) goto LAB_005f3bec;
goto LAB_005f3b79;
}
LAB_005f3bf8:
local_54 = local_44 & 0xfffffffe;
local_4c = local_3c + 1 & 0xfffffffe;
local_50 = local_40;
local_48 = local_38;
if (local_5c < local_4c) {
local_4c = local_5c;
}
}
if ((((local_54 == 0) && (local_4c == local_5c)) && (local_50 == 0)) &&
(local_48 == local_58)) {
local_8 = 0;
}
else {
local_8 = 1;
}
}
else {
if (local_74[0] == 0x35545844) goto LAB_005f3b79;
if (((local_74[0] == 0x42475247) || (local_74[0] == 0x47424752)) ||
(local_74[0] == 0x59565955)) goto LAB_005f3bf8;
LAB_005f3bec:
local_54 = local_44;
local_50 = local_40;
local_4c = local_3c;
local_48 = local_38;
}
}
if (local_2c != 0) {
iVar3 = (**(code **)(*local_14 + 0x34))
(local_14,&local_34,-(uint)(local_8 != 0) & (uint)&local_54,uVar4);
if (iVar3 < 0) {
return iVar3;
}
goto LAB_005f3cb8;
}
}
else {
if ((param_6 & 0x20000) == 0) {
FUN_005efb7f(1);
iVar3 = (**(code **)(*param_2 + 0x2c))(param_2,&DAT_007f14f8,&local_20);
if (-1 < iVar3) {
iVar3 = (**(code **)(*local_20 + 0x34))(local_20);
if (iVar3 == 1) {
uVar4 = uVar4 | 0x2000;
local_8 = 0;
}
if (local_20 != (int *)0x0) {
(**(code **)(*local_20 + 8))(local_20);
local_20 = (int *)0x0;
}
}
FUN_005efb7f(0);
goto LAB_005f3b41;
}
uVar4 = uVar4 | 0x2000;
local_8 = 0;
}
FUN_005efb7f(1);
iVar3 = (**(code **)(*local_14 + 0x34))
(local_14,&local_34,-(uint)(local_8 != 0) & (uint)&local_54,uVar4);
FUN_005efb7f(0);
if (iVar3 < 0) {
iVar3 = FUN_005f3856(param_1,param_2,param_3,param_4,param_5,param_6 | 0x10000);
return iVar3;
}
LAB_005f3cb8:
if (local_8 != 0) {
local_44 = local_44 - local_54;
local_3c = local_3c - local_54;
local_40 = local_40 - local_50;
local_38 = local_38 - local_50;
}
*param_1 = local_30;
param_1[1] = local_74[0];
param_1[2] = local_34;
param_1[6] = local_5c;
param_1[7] = local_58;
param_1[10] = local_44;
param_1[9] = 1;
param_1[0xb] = local_40;
param_1[0xf] = 1;
param_1[0x10] = 1;
param_1[0x13] = param_5;
param_1[0xc] = local_3c;
param_1[3] = 0;
param_1[4] = 0;
param_1[5] = 0;
param_1[8] = 0;
param_1[0xe] = 0;
param_1[0x11] = 0;
param_1[0x12] = 0;
param_1[0x14] = param_3;
param_1[0xd] = local_38;
local_18[1] = (uint)param_2;
*local_18 = param_6;
(**(code **)(*param_2 + 4))(param_2);
return 0;
}
// --- thunk_FUN_005f382d at 0x005F3D45 (size: 5) ---
undefined4 __fastcall thunk_FUN_005f382d(int *param_1)
{
int *piVar1;
piVar1 = (int *)*param_1;
if (piVar1 != (int *)0x0) {
(**(code **)(*piVar1 + 0x28))(piVar1);
piVar1 = (int *)*param_1;
if (piVar1 != (int *)0x0) {
(**(code **)(*piVar1 + 8))(piVar1);
*param_1 = 0;
}
}
return 0;
}
// --- FUN_005f3d4a at 0x005F3D4A (size: 885) ---
int __thiscall
FUN_005f3d4a(int *param_1,undefined4 *param_2,int *param_3,undefined4 param_4,uint *param_5,
undefined4 param_6,uint param_7)
{
bool bVar1;
uint uVar2;
uint uVar3;
int iVar4;
uint uVar5;
uint *puVar6;
uint *puVar7;
int local_68 [2];
uint local_60;
int local_5c;
uint local_58;
uint local_54;
uint local_50;
uint local_4c [4];
uint local_3c;
uint local_38;
uint local_34 [4];
uint local_24;
uint local_20;
undefined4 local_1c;
undefined4 local_18;
undefined4 local_14;
int *local_10;
uint local_c;
int *local_8;
local_10 = param_1;
if (*param_1 != 0) {
FUN_005f382d();
}
(**(code **)(*param_3 + 0x20))(param_3,local_68);
if (param_5 == (uint *)0x0) {
bVar1 = false;
local_34[2] = local_58;
local_34[3] = local_54;
uVar3 = ~param_7 & 1;
local_34[0] = 0;
local_34[1] = 0;
local_24 = 0;
local_20 = local_50;
}
else {
puVar6 = local_34;
for (iVar4 = 6; iVar4 != 0; iVar4 = iVar4 + -1) {
*puVar6 = *param_5;
param_5 = param_5 + 1;
puVar6 = puVar6 + 1;
}
if (local_58 < local_34[2]) {
return -0x7789f794;
}
if (local_34[2] < local_34[0]) {
return -0x7789f794;
}
if (local_54 < local_34[3]) {
return -0x7789f794;
}
if (local_34[3] < local_34[1]) {
return -0x7789f794;
}
if (local_50 < local_20) {
return -0x7789f794;
}
if (local_20 < local_24) {
return -0x7789f794;
}
if (((((local_34[0] != 0) || (local_34[2] != local_58)) || (local_34[1] != 0)) ||
((local_34[3] != local_54 || (local_24 != 0)))) || (bVar1 = false, local_20 != local_50)) {
bVar1 = true;
}
if (((param_7 & 1) != 0) || (bVar1)) {
uVar3 = 0;
}
else {
uVar3 = 1;
}
}
uVar2 = local_20;
if ((local_5c == 0) && ((local_60 & 0x200) == 0)) {
return -0x7789f794;
}
uVar5 = (param_7 & 1 | 0x80) << 4;
local_c = uVar5;
if ((uVar3 == 0) || ((local_60 & 0x200) == 0)) {
LAB_005f3eb2:
if (bVar1) {
if (local_68[0] < 0x34545845) {
if (((local_68[0] != 0x34545844) && (local_68[0] != 0x31545844)) &&
(local_68[0] != 0x32545844)) {
if (local_68[0] == 0x32595559) {
LAB_005f3fba:
local_4c[3] = local_34[3];
local_4c[1] = local_34[1];
local_4c[0] = local_34[0] & 0xfffffffe;
local_4c[2] = local_34[2] + 1 & 0xfffffffe;
local_3c = local_24;
if (local_58 < local_4c[2]) {
local_4c[2] = local_58;
}
local_38 = uVar2;
if (((local_4c[0] != 0) || (local_4c[2] != local_58)) ||
((local_34[1] != 0 ||
(((local_34[3] != local_54 || (local_24 != 0)) || (uVar2 != local_50))))))
goto LAB_005f4014;
goto LAB_005f3f6c;
}
if (local_68[0] != 0x33545844) goto LAB_005f3fad;
}
LAB_005f3ef5:
local_4c[0] = local_34[0] & 0xfffffffc;
local_4c[2] = local_34[2] + 3 & 0xfffffffc;
local_4c[1] = local_34[1] & 0xfffffffc;
local_4c[3] = local_34[3] + 3 & 0xfffffffc;
local_3c = local_24;
if (local_58 < local_4c[2]) {
local_4c[2] = local_58;
}
if (local_54 < local_4c[3]) {
local_4c[3] = local_54;
}
uVar5 = local_c;
local_38 = uVar2;
if (((local_4c[0] == 0) && (local_4c[2] == local_58)) &&
(((local_4c[1] == 0 && ((local_4c[3] == local_54 && (local_24 == 0)))) &&
(uVar2 == local_50)))) goto LAB_005f3f6c;
}
else {
if (local_68[0] == 0x35545844) goto LAB_005f3ef5;
if (((local_68[0] == 0x42475247) || (local_68[0] == 0x47424752)) ||
(local_68[0] == 0x59565955)) goto LAB_005f3fba;
LAB_005f3fad:
puVar6 = local_34;
puVar7 = local_4c;
for (iVar4 = 6; uVar5 = local_c, iVar4 != 0; iVar4 = iVar4 + -1) {
*puVar7 = *puVar6;
puVar6 = puVar6 + 1;
puVar7 = puVar7 + 1;
}
}
LAB_005f4014:
iVar4 = (**(code **)(*param_3 + 0x24))(param_3,&local_1c,local_4c,uVar5);
if (iVar4 < 0) {
return iVar4;
}
local_34[0] = local_34[0] - local_4c[0];
local_34[2] = local_34[2] - local_4c[0];
local_34[1] = local_34[1] - local_4c[1];
local_34[3] = local_34[3] - local_4c[1];
local_24 = local_24 - local_3c;
local_20 = uVar2 - local_3c;
goto LAB_005f404b;
}
}
else {
if ((param_7 & 0x20000) == 0) {
FUN_005efb7f(1);
iVar4 = (**(code **)(*param_3 + 0x1c))(param_3,&DAT_007f14e8,&local_8);
if (-1 < iVar4) {
iVar4 = (**(code **)(*local_8 + 0x34))(local_8);
if (iVar4 == 1) {
uVar5 = uVar5 | 0x2000;
bVar1 = false;
local_c = uVar5;
}
if (local_8 != (int *)0x0) {
(**(code **)(*local_8 + 8))(local_8);
local_8 = (int *)0x0;
}
}
FUN_005efb7f(0);
goto LAB_005f3eb2;
}
uVar5 = uVar5 | 0x2000;
}
LAB_005f3f6c:
iVar4 = (**(code **)(*param_3 + 0x24))(param_3,&local_1c,0,uVar5);
if (iVar4 < 0) {
return iVar4;
}
LAB_005f404b:
*param_2 = local_14;
param_2[0x11] = 0;
param_2[0x12] = 0;
param_2[1] = local_68[0];
param_2[2] = local_1c;
param_2[3] = local_18;
param_2[4] = 0;
param_2[5] = 0;
param_2[8] = 0;
param_2[9] = local_50;
puVar6 = local_34;
puVar7 = param_2 + 10;
for (iVar4 = 6; iVar4 != 0; iVar4 = iVar4 + -1) {
*puVar7 = *puVar6;
puVar6 = puVar6 + 1;
puVar7 = puVar7 + 1;
}
param_2[0x13] = param_6;
param_2[6] = local_58;
param_2[0x14] = param_4;
param_2[7] = local_54;
param_2[0x10] = 1;
*local_10 = (int)param_3;
(**(code **)(*param_3 + 4))(param_3);
return 0;
}
// --- FUN_005f40bf at 0x005F40BF (size: 40) ---
void __fastcall FUN_005f40bf(undefined4 *param_1)
{
*param_1 = &PTR_FUN_007ede98;
operator_delete((void *)param_1[0xe]);
operator_delete((void *)param_1[0x16]);
operator_delete((void *)param_1[0x17]);
return;
}
// --- FUN_005f40ea at 0x005F40EA (size: 1304) ---
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
undefined4 __thiscall FUN_005f40ea(int param_1,int param_2)
{
float fVar1;
float fVar2;
float fVar3;
float fVar4;
undefined4 *puVar5;
float *pfVar6;
int iVar7;
uint uVar8;
fVar4 = _DAT_007c6bc4;
fVar3 = _DAT_0079a1a0;
fVar1 = _DAT_007938b8;
fVar2 = _DAT_007938b0;
iVar7 = *(int *)(param_1 + 8);
if (iVar7 == 1) {
iVar7 = *(int *)(param_1 + 0x54);
if (iVar7 == 2) {
uVar8 = 0;
if (*(int *)(param_1 + 0x68) != 0) {
pfVar6 = (float *)(param_2 + 8);
iVar7 = 0;
do {
uVar8 = uVar8 + 1;
*(float *)(iVar7 + *(int *)(param_1 + 0x58)) = (pfVar6[-2] + fVar2) * fVar1;
*(float *)(iVar7 + 4 + *(int *)(param_1 + 0x58)) = (pfVar6[-1] + fVar2) * fVar1;
*(float *)(iVar7 + 8 + *(int *)(param_1 + 0x58)) = (*pfVar6 + fVar2) * fVar1;
*(float *)(iVar7 + 0xc + *(int *)(param_1 + 0x58)) = pfVar6[1];
pfVar6 = pfVar6 + 4;
iVar7 = iVar7 + 0x10;
} while (uVar8 < *(uint *)(param_1 + 0x68));
}
}
else if (iVar7 == 3) {
uVar8 = 0;
if (*(int *)(param_1 + 0x68) != 0) {
pfVar6 = (float *)(param_2 + 8);
iVar7 = 0;
do {
uVar8 = uVar8 + 1;
*(float *)(iVar7 + *(int *)(param_1 + 0x58)) = (pfVar6[-2] + fVar2) * fVar1;
*(float *)(iVar7 + 4 + *(int *)(param_1 + 0x58)) = (pfVar6[-1] + fVar2) * fVar1;
*(float *)(iVar7 + 8 + *(int *)(param_1 + 0x58)) = (*pfVar6 + fVar2) * fVar1;
*(float *)(iVar7 + 0xc + *(int *)(param_1 + 0x58)) = (pfVar6[1] + fVar2) * fVar1;
pfVar6 = pfVar6 + 4;
iVar7 = iVar7 + 0x10;
} while (uVar8 < *(uint *)(param_1 + 0x68));
}
}
else if ((iVar7 == 4) && (uVar8 = 0, *(int *)(param_1 + 0x68) != 0)) {
pfVar6 = (float *)(param_2 + 8);
param_2 = -param_2;
do {
if (0.0 <= pfVar6[-2]) {
if (fVar2 <= pfVar6[-2]) {
fVar1 = 1.0;
}
else {
fVar1 = pfVar6[-2];
}
}
else {
fVar1 = 0.0;
}
*(float *)((int)pfVar6 + *(int *)(param_1 + 0x58) + param_2 + -8) = fVar1;
if (0.0 <= pfVar6[-1]) {
if (fVar2 <= pfVar6[-1]) {
fVar1 = 1.0;
}
else {
fVar1 = pfVar6[-1];
}
}
else {
fVar1 = 0.0;
}
*(float *)((int)pfVar6 + *(int *)(param_1 + 0x58) + param_2 + -4) = fVar1;
if (0.0 <= *pfVar6) {
if (fVar2 <= *pfVar6) {
fVar1 = 1.0;
}
else {
fVar1 = *pfVar6;
}
}
else {
fVar1 = 0.0;
}
*(float *)((int)pfVar6 + *(int *)(param_1 + 0x58) + param_2) = fVar1;
if (0.0 <= pfVar6[1]) {
if (fVar2 <= pfVar6[1]) {
fVar1 = 1.0;
}
else {
fVar1 = pfVar6[1];
}
}
else {
fVar1 = 0.0;
}
uVar8 = uVar8 + 1;
*(float *)((int)pfVar6 + *(int *)(param_1 + 0x58) + param_2 + 4) = fVar1;
pfVar6 = pfVar6 + 4;
} while (uVar8 < *(uint *)(param_1 + 0x68));
}
}
else if (iVar7 == 2) {
iVar7 = *(int *)(param_1 + 0x54);
if (iVar7 == 1) {
uVar8 = 0;
if (*(int *)(param_1 + 0x68) != 0) {
pfVar6 = (float *)(param_2 + 8);
iVar7 = 0;
do {
uVar8 = uVar8 + 1;
*(float *)(iVar7 + *(int *)(param_1 + 0x58)) = pfVar6[-2] * fVar4 - fVar2;
*(float *)(iVar7 + 4 + *(int *)(param_1 + 0x58)) = pfVar6[-1] * fVar4 - fVar2;
*(float *)(iVar7 + 8 + *(int *)(param_1 + 0x58)) = *pfVar6 * fVar4 - fVar2;
*(float *)(iVar7 + 0xc + *(int *)(param_1 + 0x58)) = pfVar6[1];
pfVar6 = pfVar6 + 4;
iVar7 = iVar7 + 0x10;
} while (uVar8 < *(uint *)(param_1 + 0x68));
}
}
else if (iVar7 == 3) {
uVar8 = 0;
if (*(int *)(param_1 + 0x68) != 0) {
puVar5 = (undefined4 *)(param_2 + 8);
iVar7 = 0;
do {
*(undefined4 *)(iVar7 + *(int *)(param_1 + 0x58)) = puVar5[-2];
uVar8 = uVar8 + 1;
*(undefined4 *)(iVar7 + 4 + *(int *)(param_1 + 0x58)) = puVar5[-1];
*(undefined4 *)(iVar7 + 8 + *(int *)(param_1 + 0x58)) = *puVar5;
pfVar6 = (float *)(puVar5 + 1);
puVar5 = puVar5 + 4;
*(float *)(iVar7 + 0xc + *(int *)(param_1 + 0x58)) =
(*pfVar6 + _DAT_007938b0) * _DAT_007938b8;
iVar7 = iVar7 + 0x10;
} while (uVar8 < *(uint *)(param_1 + 0x68));
}
}
else if ((iVar7 == 4) && (uVar8 = 0, *(int *)(param_1 + 0x68) != 0)) {
pfVar6 = (float *)(param_2 + 8);
param_2 = -param_2;
do {
fVar1 = fVar3;
if (fVar3 <= pfVar6[-2]) {
if (fVar2 <= pfVar6[-2]) {
fVar1 = 1.0;
}
else {
fVar1 = pfVar6[-2];
}
}
*(float *)((int)pfVar6 + *(int *)(param_1 + 0x58) + param_2 + -8) = fVar1;
fVar1 = fVar3;
if (fVar3 <= pfVar6[-1]) {
if (fVar2 <= pfVar6[-1]) {
fVar1 = 1.0;
}
else {
fVar1 = pfVar6[-1];
}
}
*(float *)((int)pfVar6 + *(int *)(param_1 + 0x58) + param_2 + -4) = fVar1;
fVar1 = fVar3;
if (fVar3 <= *pfVar6) {
if (fVar2 <= *pfVar6) {
fVar1 = 1.0;
}
else {
fVar1 = *pfVar6;
}
}
*(float *)((int)pfVar6 + *(int *)(param_1 + 0x58) + param_2) = fVar1;
if (0.0 <= pfVar6[1]) {
if (fVar2 <= pfVar6[1]) {
fVar1 = 1.0;
}
else {
fVar1 = pfVar6[1];
}
}
else {
fVar1 = 0.0;
}
uVar8 = uVar8 + 1;
*(float *)((int)pfVar6 + *(int *)(param_1 + 0x58) + param_2 + 4) = fVar1;
pfVar6 = pfVar6 + 4;
} while (uVar8 < *(uint *)(param_1 + 0x68));
}
}
else if (iVar7 == 3) {
iVar7 = *(int *)(param_1 + 0x54);
if (iVar7 == 1) {
uVar8 = 0;
if (*(int *)(param_1 + 0x68) != 0) {
pfVar6 = (float *)(param_2 + 8);
iVar7 = 0;
do {
uVar8 = uVar8 + 1;
*(float *)(iVar7 + *(int *)(param_1 + 0x58)) = pfVar6[-2] * fVar4 - fVar2;
*(float *)(iVar7 + 4 + *(int *)(param_1 + 0x58)) = pfVar6[-1] * fVar4 - fVar2;
*(float *)(iVar7 + 8 + *(int *)(param_1 + 0x58)) = *pfVar6 * fVar4 - fVar2;
*(float *)(iVar7 + 0xc + *(int *)(param_1 + 0x58)) = pfVar6[1] * fVar4 - fVar2;
pfVar6 = pfVar6 + 4;
iVar7 = iVar7 + 0x10;
} while (uVar8 < *(uint *)(param_1 + 0x68));
}
}
else if (iVar7 == 2) {
uVar8 = 0;
if (*(int *)(param_1 + 0x68) != 0) {
puVar5 = (undefined4 *)(param_2 + 8);
iVar7 = 0;
do {
*(undefined4 *)(iVar7 + *(int *)(param_1 + 0x58)) = puVar5[-2];
uVar8 = uVar8 + 1;
*(undefined4 *)(iVar7 + 4 + *(int *)(param_1 + 0x58)) = puVar5[-1];
*(undefined4 *)(iVar7 + 8 + *(int *)(param_1 + 0x58)) = *puVar5;
pfVar6 = (float *)(puVar5 + 1);
puVar5 = puVar5 + 4;
*(float *)(iVar7 + 0xc + *(int *)(param_1 + 0x58)) = (*pfVar6 + *pfVar6) - _DAT_007938b0;
iVar7 = iVar7 + 0x10;
} while (uVar8 < *(uint *)(param_1 + 0x68));
}
}
else if ((iVar7 == 4) && (uVar8 = 0, *(int *)(param_1 + 0x68) != 0)) {
pfVar6 = (float *)(param_2 + 8);
param_2 = -param_2;
do {
fVar1 = fVar3;
if (fVar3 <= pfVar6[-2]) {
if (fVar2 <= pfVar6[-2]) {
fVar1 = 1.0;
}
else {
fVar1 = pfVar6[-2];
}
}
*(float *)((int)pfVar6 + *(int *)(param_1 + 0x58) + param_2 + -8) = fVar1;
fVar1 = fVar3;
if (fVar3 <= pfVar6[-1]) {
if (fVar2 <= pfVar6[-1]) {
fVar1 = 1.0;
}
else {
fVar1 = pfVar6[-1];
}
}
*(float *)((int)pfVar6 + *(int *)(param_1 + 0x58) + param_2 + -4) = fVar1;
fVar1 = fVar3;
if (fVar3 <= *pfVar6) {
if (fVar2 <= *pfVar6) {
fVar1 = 1.0;
}
else {
fVar1 = *pfVar6;
}
}
*(float *)((int)pfVar6 + *(int *)(param_1 + 0x58) + param_2) = fVar1;
fVar1 = fVar3;
if (fVar3 <= pfVar6[1]) {
if (fVar2 <= pfVar6[1]) {
fVar1 = 1.0;
}
else {
fVar1 = pfVar6[1];
}
}
uVar8 = uVar8 + 1;
*(float *)((int)pfVar6 + *(int *)(param_1 + 0x58) + param_2 + 4) = fVar1;
pfVar6 = pfVar6 + 4;
} while (uVar8 < *(uint *)(param_1 + 0x68));
}
}
return *(undefined4 *)(param_1 + 0x58);
}
// --- FUN_005f4603 at 0x005F4603 (size: 771) ---
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
undefined4 __fastcall FUN_005f4603(int param_1)
{
float *pfVar1;
float *pfVar2;
int iVar3;
uint uVar4;
float *pfVar5;
int iVar6;
ushort *puVar7;
undefined2 in_FPUControlWord;
undefined4 local_10;
int local_c;
int local_8;
if (*(int *)(param_1 + 0xa0) == 0) {
return 0;
}
if (*(int *)(param_1 + 0xa4) == 0) {
return 0;
}
pfVar5 = *(float **)(param_1 + 0x80);
puVar7 = (ushort *)
(*(int *)(param_1 + 0x94) * *(int *)(param_1 + 100) +
*(int *)(param_1 + 0x88) * *(int *)(param_1 + 0x60) + *(int *)(param_1 + 0x84) * 2 +
*(int *)(param_1 + 0x20));
local_10 = CONCAT22(local_10._2_2_,in_FPUControlWord);
*(undefined4 *)(param_1 + 0x7c) = local_10;
iVar3 = *(int *)(param_1 + 4);
if (iVar3 != 0x32595559) {
if ((iVar3 == 0x42475247) || (iVar3 == 0x47424752)) {
for (uVar4 = *(uint *)(param_1 + 0x84); uVar4 < *(uint *)(param_1 + 0x8c); uVar4 = uVar4 + 2)
{
*puVar7 = (ushort)((int)ROUND(pfVar5[1] * _DAT_00797188 + _DAT_007938b8) <<
((byte)*(undefined4 *)(param_1 + 0xa8) & 0x1f)) |
(ushort)((int)ROUND(*pfVar5 * _DAT_00797188 + _DAT_007938b8) <<
((byte)*(undefined4 *)(param_1 + 0xac) & 0x1f));
pfVar1 = pfVar5 + 5;
pfVar2 = pfVar5 + 2;
pfVar5 = pfVar5 + 8;
puVar7[1] = (ushort)((int)ROUND(*pfVar1 * _DAT_00797188 + _DAT_007938b8) <<
((byte)*(undefined4 *)(param_1 + 0xa8) & 0x1f)) |
(ushort)((int)ROUND(*pfVar2 * _DAT_00797188 + _DAT_007938b8) <<
((byte)*(undefined4 *)(param_1 + 0xac) & 0x1f));
puVar7 = puVar7 + 2;
}
goto LAB_005f48ef;
}
if (iVar3 != 0x59565955) goto LAB_005f48ef;
}
for (uVar4 = *(uint *)(param_1 + 0x84); uVar4 < *(uint *)(param_1 + 0x8c); uVar4 = uVar4 + 2) {
iVar3 = (int)ROUND(pfVar5[2] * _DAT_007edec0 +
pfVar5[1] * _DAT_007edebc + *pfVar5 * _DAT_007edec4 + _DAT_007938b8) + 0x10;
local_8 = (int)ROUND(pfVar5[5] * _DAT_007edebc +
pfVar5[6] * _DAT_007edec0 + pfVar5[4] * _DAT_007edec4 + _DAT_007938b8) +
0x10;
iVar6 = (int)ROUND(((pfVar5[2] * _DAT_007edeb8 - pfVar5[1] * _DAT_007edeb4) -
*pfVar5 * _DAT_007edeb0) + _DAT_007938b8) + 0x80;
local_c = (int)ROUND((*pfVar5 * _DAT_007edeb8 -
(pfVar5[2] * _DAT_007edea8 + pfVar5[1] * _DAT_007edeac)) + _DAT_007938b8) +
0x80;
if (iVar3 < 0) {
iVar3 = 0;
}
else if (0xff < iVar3) {
iVar3 = 0xff;
}
if (local_8 < 0) {
local_8 = 0;
}
else if (0xff < local_8) {
local_8 = 0xff;
}
if (iVar6 < 0) {
iVar6 = 0;
}
else if (0xff < iVar6) {
iVar6 = 0xff;
}
if (local_c < 0) {
local_c = 0;
}
else if (0xff < local_c) {
local_c = 0xff;
}
pfVar5 = pfVar5 + 8;
*puVar7 = (ushort)(iVar3 << ((byte)*(undefined4 *)(param_1 + 0xa8) & 0x1f)) |
(ushort)(iVar6 << ((byte)*(undefined4 *)(param_1 + 0xac) & 0x1f));
puVar7[1] = (ushort)(local_8 << ((byte)*(undefined4 *)(param_1 + 0xa8) & 0x1f)) |
(ushort)(local_c << ((byte)*(undefined4 *)(param_1 + 0xac) & 0x1f));
puVar7 = puVar7 + 2;
}
LAB_005f48ef:
*(undefined4 *)(param_1 + 0xa0) = 0;
return 0;
}
// --- FUN_005f4906 at 0x005F4906 (size: 1671) ---
/* WARNING: Removing unreachable block (ram,0x005f4c57) */
/* WARNING: Removing unreachable block (ram,0x005f4ced) */
/* WARNING: Removing unreachable block (ram,0x005f4e45) */
/* WARNING: Removing unreachable block (ram,0x005f4d95) */
/* WARNING: Removing unreachable block (ram,0x005f4bc0) */
/* WARNING: Removing unreachable block (ram,0x005f4ea5) */
/* WARNING: Removing unreachable block (ram,0x005f4c0b) */
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
int __thiscall FUN_005f4906(int param_1,uint param_2,uint param_3,uint param_4)
{
ushort uVar1;
undefined2 uVar2;
ushort uVar3;
undefined2 uVar4;
float fVar5;
float fVar6;
float fVar7;
float fVar8;
float fVar9;
float fVar10;
float fVar11;
byte bVar12;
int iVar13;
uint uVar14;
float *pfVar15;
ushort *puVar16;
if (*(int *)(param_1 + 0xa4) == 0) {
return -0x7ff8fff2;
}
if ((((param_2 < *(uint *)(param_1 + 0x88)) || (*(uint *)(param_1 + 0x90) <= param_2)) ||
(param_3 < *(uint *)(param_1 + 0x94))) || (*(uint *)(param_1 + 0x98) <= param_3)) {
iVar13 = FUN_005f4603();
if (iVar13 < 0) {
return iVar13;
}
*(uint *)(param_1 + 0x90) = param_2 + 1;
*(uint *)(param_1 + 0x88) = param_2;
*(uint *)(param_1 + 0x94) = param_3;
*(uint *)(param_1 + 0x98) = param_3 + 1;
fVar11 = _DAT_007e6488;
fVar7 = _DAT_00799208;
fVar10 = DAT_00796344;
fVar9 = _DAT_007938b0;
if (param_4 != 0) {
param_4 = *(uint *)(param_1 + 0x84);
pfVar15 = *(float **)(param_1 + 0x80);
uVar14 = *(uint *)(param_1 + 0x68);
puVar16 = (ushort *)
(*(int *)(param_1 + 0x60) * param_2 + *(int *)(param_1 + 100) * param_3 +
param_4 * 2 + *(int *)(param_1 + 0x20));
if ((uVar14 & 1) != 0) {
uVar14 = uVar14 + 1;
}
iVar13 = *(int *)(param_1 + 4);
if (iVar13 != 0x32595559) {
if ((iVar13 == 0x42475247) || (iVar13 == 0x47424752)) {
param_3 = param_4;
if (*(uint *)(param_1 + 0x8c) <= param_4) {
return 0;
}
do {
uVar2 = *(undefined2 *)(param_1 + 0xa8);
uVar1 = *puVar16;
param_3 = param_3 + 2;
uVar3 = puVar16[1];
fVar9 = (float)(uVar1 >> ((byte)*(undefined2 *)(param_1 + 0xac) & 0x1f) & 0xff) * fVar7;
uVar4 = *(undefined2 *)(param_1 + 0xac);
pfVar15[5] = (float)(uVar3 >> ((byte)*(undefined2 *)(param_1 + 0xa8) & 0x1f) & 0xff) *
fVar7;
fVar10 = (float)(uVar3 >> ((byte)uVar4 & 0x1f) & 0xff) * fVar7;
*pfVar15 = fVar9;
pfVar15[1] = (float)(uVar1 >> ((byte)uVar2 & 0x1f) & 0xff) * fVar7;
pfVar15[2] = fVar10;
pfVar15[3] = 1.0;
pfVar15[4] = fVar9;
pfVar15[6] = fVar10;
pfVar15[7] = 1.0;
pfVar15 = pfVar15 + 8;
puVar16 = puVar16 + 2;
} while (param_3 < *(uint *)(param_1 + 0x8c));
return 0;
}
if (iVar13 != 0x59565955) {
return 0;
}
}
if (param_4 < *(uint *)(param_1 + 0x8c)) {
do {
uVar1 = *puVar16;
if ((param_4 & 1) == 0) {
bVar12 = (byte)*(undefined2 *)(param_1 + 0xac);
fVar7 = (float)(uVar1 >> (bVar12 & 0x1f) & 0xff) - fVar11;
fVar6 = (float)(puVar16[1] >> (bVar12 & 0x1f) & 0xff);
}
else if (((param_4 & 1) == 1) && (uVar14 == 2)) {
bVar12 = (byte)*(undefined2 *)(param_1 + 0xac);
fVar7 = (float)(puVar16[-1] >> (bVar12 & 0x1f) & 0xff) - fVar11;
fVar6 = (float)(uVar1 >> (bVar12 & 0x1f) & 0xff);
}
else if ((param_4 == 1) && (uVar14 == 4)) {
fVar7 = (float)((puVar16[1] >> ((byte)*(undefined2 *)(param_1 + 0xac) & 0x1f) & 0xff) *
8 + (puVar16[-1] >> ((byte)*(undefined2 *)(param_1 + 0xac) & 0x1f) &
0xff) * 8 + 8 >> 4) - fVar11;
fVar6 = (float)((uVar1 >> ((byte)*(undefined2 *)(param_1 + 0xac) & 0x1f) & 0xff) * 8 +
(puVar16[2] >> ((byte)*(undefined2 *)(param_1 + 0xac) & 0x1f) & 0xff) *
8 + 8 >> 4);
}
else if (param_4 == uVar14 - 1) {
bVar12 = (byte)*(undefined2 *)(param_1 + 0xac);
fVar7 = (float)(((puVar16[-1] >> (bVar12 & 0x1f) & 0xff) * 0x11 -
(puVar16[-3] >> (bVar12 & 0x1f) & 0xff)) + 8 >> 4) - fVar11;
bVar12 = (byte)*(undefined2 *)(param_1 + 0xac);
fVar6 = (float)(((uVar1 >> (bVar12 & 0x1f) & 0xff) * 0x11 -
(puVar16[-2] >> (bVar12 & 0x1f) & 0xff)) + 8 >> 4);
}
else if (param_4 == 1) {
fVar7 = (float)((((puVar16[1] >> ((byte)*(undefined2 *)(param_1 + 0xac) & 0x1f) & 0xff)
* 9 + (puVar16[-1] >> ((byte)*(undefined2 *)(param_1 + 0xac) & 0x1f) &
0xff) * 8) -
(puVar16[3] >> ((byte)*(undefined2 *)(param_1 + 0xac) & 0x1f) & 0xff)) +
8 >> 4) - fVar11;
fVar6 = (float)((((puVar16[2] >> ((byte)*(undefined2 *)(param_1 + 0xac) & 0x1f) & 0xff)
* 9 + (uVar1 >> ((byte)*(undefined2 *)(param_1 + 0xac) & 0x1f) & 0xff)
* 8) -
(puVar16[4] >> ((byte)*(undefined2 *)(param_1 + 0xac) & 0x1f) & 0xff)) +
8 >> 4);
}
else if (param_4 == uVar14 - 3) {
fVar7 = (float)((((puVar16[-1] >> ((byte)*(undefined2 *)(param_1 + 0xac) & 0x1f) & 0xff)
* 9 + (puVar16[1] >> ((byte)*(undefined2 *)(param_1 + 0xac) & 0x1f) &
0xff) * 8) -
(puVar16[-3] >> ((byte)*(undefined2 *)(param_1 + 0xac) & 0x1f) & 0xff))
+ 8 >> 4) - fVar11;
bVar12 = (byte)*(undefined2 *)(param_1 + 0xac);
fVar6 = (float)((((puVar16[2] >> (bVar12 & 0x1f) & 0xff) * 8 + 8) -
(puVar16[-2] >> (bVar12 & 0x1f) & 0xff)) +
(uVar1 >> ((byte)*(undefined2 *)(param_1 + 0xac) & 0x1f) & 0xff) * 9 >>
4);
}
else {
bVar12 = (byte)*(undefined2 *)(param_1 + 0xac);
fVar7 = (float)(((((puVar16[-1] >> (bVar12 & 0x1f) & 0xff) +
(puVar16[1] >> (bVar12 & 0x1f) & 0xff)) * 9 -
(puVar16[-3] >> ((byte)*(undefined2 *)(param_1 + 0xac) & 0x1f) & 0xff))
- (puVar16[3] >> ((byte)*(undefined2 *)(param_1 + 0xac) & 0x1f) & 0xff))
+ 8 >> 4) - fVar11;
bVar12 = (byte)*(undefined2 *)(param_1 + 0xac);
fVar6 = (float)(((((puVar16[2] >> (bVar12 & 0x1f) & 0xff) +
(uVar1 >> (bVar12 & 0x1f) & 0xff)) * 9 -
(puVar16[4] >> ((byte)*(undefined2 *)(param_1 + 0xac) & 0x1f) & 0xff))
- (puVar16[-2] >> ((byte)*(undefined2 *)(param_1 + 0xac) & 0x1f) & 0xff)
) + 8 >> 4);
}
fVar8 = ((float)(uVar1 >> ((byte)*(undefined2 *)(param_1 + 0xa8) & 0x1f) & 0xff) -
_DAT_007ededc) * _DAT_007eded8;
fVar5 = (fVar6 - fVar11) * _DAT_007eded4 + fVar8;
*pfVar15 = fVar5;
fVar6 = (fVar8 - fVar7 * _DAT_007eded0) - (fVar6 - fVar11) * _DAT_007edecc;
pfVar15[1] = fVar6;
fVar8 = fVar7 * _DAT_007edec8 + fVar8;
pfVar15[2] = fVar8;
pfVar15[3] = 1.0;
if (fVar10 <= fVar5) {
if (fVar9 < fVar5) {
fVar5 = 1.0;
}
}
else {
fVar5 = 0.0;
}
*pfVar15 = fVar5;
if (fVar10 <= fVar6) {
if (fVar9 < fVar6) {
fVar6 = 1.0;
}
}
else {
fVar6 = 0.0;
}
pfVar15[1] = fVar6;
if (fVar10 <= fVar8) {
if (fVar9 < fVar8) {
fVar8 = 1.0;
}
}
else {
fVar8 = 0.0;
}
pfVar15[2] = fVar8;
puVar16 = puVar16 + 1;
param_4 = param_4 + 1;
pfVar15 = pfVar15 + 4;
} while (param_4 < *(uint *)(param_1 + 0x8c));
}
}
}
return 0;
}
// --- FUN_005f4f8d at 0x005F4F8D (size: 133) ---
void __fastcall FUN_005f4f8d(undefined4 *param_1)
{
uint uVar1;
uint uVar2;
int local_8;
*param_1 = &PTR_FUN_007ee1b4;
if (((param_1[0x3d] != 0) && (local_8 = param_1[0x3e], local_8 != 0)) &&
(uVar2 = param_1[0x35], uVar2 < (uint)param_1[0x36])) {
do {
for (uVar1 = param_1[0x32]; uVar1 < (uint)param_1[0x34]; uVar1 = uVar1 + 4) {
operator_delete(*(void **)(local_8 + 4));
local_8 = local_8 + 8;
}
uVar2 = uVar2 + 1;
} while (uVar2 < (uint)param_1[0x36]);
}
operator_delete((void *)param_1[0x3c]);
operator_delete((void *)param_1[0x3e]);
FUN_005f40bf();
return;
}
// --- FUN_005f5012 at 0x005F5012 (size: 226) ---
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
void __fastcall FUN_005f5012(int param_1)
{
float fVar1;
fVar1 = _DAT_0079c6d8;
if ((*(int *)(param_1 + 4) != 0x32545844) && (*(int *)(param_1 + 4) != 0x33545844)) {
fVar1 = _DAT_00797188;
}
*(float *)(param_1 + 0x80) = fVar1;
*(float *)(param_1 + 0x84) = 1.0 / fVar1;
*(float *)(param_1 + 0x24) =
(float)(int)ROUND(*(float *)(param_1 + 0x24) * _DAT_007edeec + _DAT_007938b8) * _DAT_007edee8
;
*(float *)(param_1 + 0x28) =
(float)(int)ROUND(*(float *)(param_1 + 0x28) * _DAT_007edee4 + _DAT_007938b8) * _DAT_007edee0
;
*(float *)(param_1 + 0x2c) =
(float)(int)ROUND(*(float *)(param_1 + 0x2c) * _DAT_007edeec + _DAT_007938b8) * _DAT_007edee8
;
*(float *)(param_1 + 0x30) =
(float)(int)ROUND(*(float *)(param_1 + 0x80) * *(float *)(param_1 + 0x30) + _DAT_007938b8) *
*(float *)(param_1 + 0x84);
return;
}
// --- FUN_005f50f4 at 0x005F50F4 (size: 82) ---
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
float10 FUN_005f50f4(float param_1)
{
int iVar1;
float fVar2;
float10 fVar3;
fVar3 = (float10)FUN_006005ca(param_1);
fVar2 = (float)(fVar3 * (float10)param_1 * (float10)_DAT_007edef0);
iVar1 = (int)ROUND(fVar2);
fVar3 = (float10)iVar1;
if (iVar1 < 0) {
fVar3 = fVar3 + (float10)_DAT_0079920c;
}
return ((float10)fVar2 - fVar3) *
((float10)*(float *)(&DAT_007ed69c + iVar1 * 4) -
(float10)*(float *)(&DAT_007ed698 + iVar1 * 4)) +
(float10)*(float *)(&DAT_007ed698 + iVar1 * 4);
}
// --- FUN_005f5146 at 0x005F5146 (size: 73) ---
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
float10 FUN_005f5146(float param_1)
{
int iVar1;
float fVar2;
float10 fVar3;
fVar2 = param_1 * param_1 * _DAT_007edef0;
iVar1 = (int)ROUND(fVar2);
fVar3 = (float10)iVar1;
if (iVar1 < 0) {
fVar3 = fVar3 + (float10)_DAT_0079920c;
}
return ((float10)fVar2 - fVar3) *
((float10)*(float *)(&DAT_007eda9c + iVar1 * 4) -
(float10)*(float *)(&DAT_007eda98 + iVar1 * 4)) +
(float10)*(float *)(&DAT_007eda98 + iVar1 * 4);
}
// --- FUN_005f518f at 0x005F518F (size: 460) ---
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
undefined4 * __thiscall
FUN_005f518f(undefined4 *param_1,undefined4 *param_2,uint param_3,int param_4)
{
uint uVar1;
float fVar2;
float fVar3;
float fVar4;
undefined *puVar5;
uint uVar6;
undefined4 uVar7;
undefined4 *puVar8;
int iVar9;
undefined4 *puVar10;
*param_1 = &PTR_FUN_007ede98;
param_1[8] = *param_2;
param_1[1] = param_2[1];
param_1[0x18] = param_2[2];
param_1[0x19] = param_2[3];
puVar8 = param_2 + 10;
puVar10 = param_1 + 0xf;
for (iVar9 = 6; iVar9 != 0; iVar9 = iVar9 + -1) {
*puVar10 = *puVar8;
puVar8 = puVar8 + 1;
puVar10 = puVar10 + 1;
}
puVar5 = &DAT_00825cf8;
if (param_2[0x10] == 0) {
puVar5 = &DAT_00825c78;
}
param_1[0xd] = puVar5;
uVar6 = param_3 >> 3;
param_1[0x1e] = uVar6;
param_1[0x15] = 0;
param_1[0x16] = 0;
param_1[3] = (uint)(param_3 != 0);
param_1[2] = param_4;
param_1[6] = param_2[0x13];
if ((param_1[1] == 0x29) || (param_1[1] == 0x28)) {
uVar7 = 1;
}
else {
uVar7 = 0;
}
param_1[7] = uVar7;
param_1[0xe] = 0;
param_1[4] = param_2[0x12];
param_1[5] = 0;
param_1[0x17] = 0;
if (param_1[6] != 0) {
uVar1 = param_2[0x13];
fVar2 = (float)(uVar1 >> 8 & 0xff) * _DAT_00799208;
fVar3 = (float)(uVar1 & 0xff) * _DAT_00799208;
fVar4 = (float)(uVar1 >> 0x18) * _DAT_00799208;
param_1[9] = (float)(uVar1 >> 0x10 & 0xff) * _DAT_00799208;
param_1[10] = fVar2;
param_1[0xb] = fVar3;
param_1[0xc] = fVar4;
}
if (param_4 == 2) {
if (param_1[1] == 0x3d) goto LAB_005f52a3;
param_1[4] = 0;
}
if (param_4 == 3) {
param_1[4] = 0;
}
LAB_005f52a3:
iVar9 = param_1[0x11] - param_1[0xf];
param_1[0x1a] = iVar9;
param_1[0x1b] = param_1[0x12] - param_1[0x10];
param_1[0x1d] = iVar9 * uVar6;
param_1[0x1c] = param_1[0x14] - param_1[0x13];
if ((param_3 != 0) != 0) {
param_1[8] = param_1[8] +
param_1[0xf] * uVar6 + param_1[0x18] * param_1[0x10] +
param_1[0x19] * param_1[0x13];
param_1[0x11] = param_1[0x1a];
param_1[0x12] = param_1[0x1b];
param_1[0xf] = 0;
param_1[0x10] = 0;
param_1[0x13] = 0;
param_1[0x14] = param_1[0x1c];
}
if (param_2[0x11] != 0) {
iVar9 = param_1[0x1a];
puVar8 = (undefined4 *)FUN_005df0f5((iVar9 + 2) * 0x10);
if (puVar8 == (undefined4 *)0x0) {
puVar8 = (undefined4 *)0x0;
}
else {
FUN_00401000(puVar8,0x10,iVar9 + 2,&LAB_005eda5e);
}
param_1[0x17] = puVar8;
if (puVar8 != (undefined4 *)0x0) {
for (uVar6 = (uint)((param_1[0x1a] + 2) * 0x10) >> 2; uVar6 != 0; uVar6 = uVar6 - 1) {
*puVar8 = 0;
puVar8 = puVar8 + 1;
}
for (iVar9 = 0; iVar9 != 0; iVar9 = iVar9 + -1) {
*(undefined1 *)puVar8 = 0;
puVar8 = (undefined4 *)((int)puVar8 + 1);
}
}
}
return param_1;
}
// --- FUN_005f535b at 0x005F535B (size: 131) ---
undefined4 __thiscall FUN_005f535b(int param_1,int param_2)
{
int iVar1;
int iVar2;
if ((*(int *)(param_1 + 8) != *(int *)(param_2 + 8)) && (*(int *)(param_1 + 8) != 4)) {
*(int *)(param_1 + 0x54) = *(int *)(param_2 + 8);
}
if ((*(int *)(param_1 + 0x54) != 0) || (*(int *)(param_1 + 0x10) != 0)) {
iVar1 = *(int *)(param_1 + 0x68);
iVar2 = FUN_005df0f5(iVar1 << 4);
if (iVar2 == 0) {
iVar2 = 0;
}
else {
FUN_00401000(iVar2,0x10,iVar1,&LAB_005eda5e);
}
*(int *)(param_1 + 0x58) = iVar2;
if (iVar2 == 0) {
return 0x8007000e;
}
if ((*(int *)(param_1 + 0x10) != 0) && (*(int *)(param_2 + 0x10) != 0)) {
*(undefined4 *)(param_2 + 0x14) = 1;
*(undefined4 *)(param_1 + 0x14) = 1;
}
}
return 0;
}
// --- FUN_005f53de at 0x005F53DE (size: 245) ---
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
undefined4 __thiscall FUN_005f53de(int param_1,int param_2)
{
float fVar1;
int iVar2;
undefined4 uVar3;
uint uVar4;
uint uVar5;
int iVar6;
iVar2 = FUN_005df0f5(0x1000);
if (iVar2 == 0) {
iVar2 = 0;
}
else {
FUN_00401000(iVar2,0x10,0x100,&LAB_005eda5e);
}
iVar6 = 0;
*(int *)(param_1 + 0x38) = iVar2;
fVar1 = _DAT_00799208;
if (iVar2 == 0) {
uVar3 = 0x8007000e;
}
else {
uVar4 = 0;
if (*(int *)(param_2 + 0x50) == 0) {
do {
*(undefined4 *)(uVar4 + 0xc + *(int *)(param_1 + 0x38)) = 0x3f800000;
*(undefined4 *)(uVar4 + 8 + *(int *)(param_1 + 0x38)) = 0x3f800000;
*(undefined4 *)(uVar4 + 4 + *(int *)(param_1 + 0x38)) = 0x3f800000;
*(undefined4 *)(uVar4 + *(int *)(param_1 + 0x38)) = 0x3f800000;
uVar4 = uVar4 + 0x10;
} while (uVar4 < 0x1000);
}
else {
do {
uVar5 = uVar4 + 4;
*(float *)(iVar6 + *(int *)(param_1 + 0x38)) =
(float)*(byte *)(uVar4 + *(int *)(param_2 + 0x50)) * fVar1;
*(float *)(iVar6 + 4 + *(int *)(param_1 + 0x38)) =
(float)*(byte *)(uVar4 + 1 + *(int *)(param_2 + 0x50)) * fVar1;
*(float *)(iVar6 + 8 + *(int *)(param_1 + 0x38)) =
(float)*(byte *)(uVar4 + 2 + *(int *)(param_2 + 0x50)) * fVar1;
*(float *)(iVar6 + 0xc + *(int *)(param_1 + 0x38)) =
(float)*(byte *)(uVar4 + 3 + *(int *)(param_2 + 0x50)) * fVar1;
uVar4 = uVar5;
iVar6 = iVar6 + 0x10;
} while (uVar5 < 0x400);
}
uVar3 = 0;
}
return uVar3;
}
// --- FUN_005f54d3 at 0x005F54D3 (size: 194) ---
/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */
void __fastcall FUN_005f54d3(int *param_1)
{
int iVar1;
int iVar2;
int iVar3;
int iVar4;
int iVar5;
int iVar6;
int iVar7;
undefined1 local_18 [16];
undefined4 local_8;
local_8 = DAT_00836f40;
iVar1 = param_1[8];
iVar2 = param_1[0x1d];
iVar3 = param_1[0xd];
iVar4 = param_1[6];
param_1[6] = 0;
param_1[0x1d] = param_1[0x1e];
param_1[8] = (int)local_18;
iVar5 = param_1[0x1a];
param_1[0x1a] = 1;
param_1[0xd] = (int)&DAT_00825c78;
if ((param_1[2] != 1) && (param_1[2] != 4)) {
iVar6 = param_1[0x15];
iVar7 = param_1[0x16];
param_1[0x15] = 1;
param_1[0x16] = (int)(param_1 + 9);
FUN_005f40ea(param_1 + 9);
param_1[0x15] = iVar6;
param_1[0x16] = iVar7;
}
(**(code **)(*param_1 + 8))(0,0,param_1 + 9);
(**(code **)(*param_1 + 4))(0,0,param_1 + 9);
param_1[8] = iVar1;
param_1[0xd] = iVar3;
param_1[0x1a] = iVar5;
param_1[0x1d] = iVar2;
param_1[6] = iVar4;
return;
}
// --- FUN_005f5595 at 0x005F5595 (size: 122) ---
void __thiscall FUN_005f5595(int param_1,uint param_2)
{
uint uVar1;
int iVar2;
float *pfVar3;
uVar1 = *(int *)(param_1 + 0x68) * 0x10 + param_2;
if (param_2 < uVar1) {
iVar2 = ((uVar1 - param_2) - 1 >> 4) + 1;
pfVar3 = (float *)(param_2 + 8);
do {
if ((((pfVar3[-2] == *(float *)(param_1 + 0x24)) && (pfVar3[-1] == *(float *)(param_1 + 0x28))
) && (*pfVar3 == *(float *)(param_1 + 0x2c))) &&
(pfVar3[1] == *(float *)(param_1 + 0x30))) {
pfVar3[1] = 0.0;
*pfVar3 = 0.0;
pfVar3[-1] = 0.0;
pfVar3[-2] = 0.0;
}
pfVar3 = pfVar3 + 4;
iVar2 = iVar2 + -1;
} while (iVar2 != 0);
}
return;
}
// --- FUN_005f560f at 0x005F560F (size: 499) ---
undefined4 __thiscall FUN_005f560f(int param_1,int param_2)
{
int iVar1;
float *pfVar2;
undefined4 *puVar3;
undefined2 in_FPUControlWord;
float10 fVar4;
undefined4 local_8;
iVar1 = 0;
if (*(int *)(param_1 + 0x14) == 0) {
local_8 = CONCAT22((short)((uint)param_1 >> 0x10),in_FPUControlWord);
*(uint *)(param_1 + 0x7c) = local_8;
if ((*(int *)(param_1 + 8) == 1) || (*(int *)(param_1 + 8) == 4)) {
local_8 = 0;
if (*(int *)(param_1 + 0x68) != 0) {
puVar3 = (undefined4 *)(param_2 + 8);
do {
fVar4 = (float10)FUN_005f50f4(puVar3[-2]);
*(float *)(iVar1 + *(int *)(param_1 + 0x58)) = (float)fVar4;
fVar4 = (float10)FUN_005f50f4(puVar3[-1]);
*(float *)(iVar1 + 4 + *(int *)(param_1 + 0x58)) = (float)fVar4;
fVar4 = (float10)FUN_005f50f4(*puVar3);
local_8 = local_8 + 1;
*(float *)(iVar1 + 8 + *(int *)(param_1 + 0x58)) = (float)fVar4;
*(undefined4 *)(iVar1 + 0xc + *(int *)(param_1 + 0x58)) = puVar3[1];
iVar1 = iVar1 + 0x10;
puVar3 = puVar3 + 4;
} while (local_8 < *(uint *)(param_1 + 0x68));
}
}
else {
local_8 = 0;
if (*(int *)(param_1 + 0x68) != 0) {
puVar3 = (undefined4 *)(param_2 + 8);
do {
*(undefined4 *)(iVar1 + *(int *)(param_1 + 0x58)) = puVar3[-2];
*(undefined4 *)(iVar1 + 4 + *(int *)(param_1 + 0x58)) = puVar3[-1];
*(undefined4 *)(iVar1 + 8 + *(int *)(param_1 + 0x58)) = *puVar3;
fVar4 = (float10)FUN_005f50f4(puVar3[1]);
local_8 = local_8 + 1;
*(float *)(iVar1 + 0xc + *(int *)(param_1 + 0x58)) = (float)fVar4;
iVar1 = iVar1 + 0x10;
puVar3 = puVar3 + 4;
} while (local_8 < *(uint *)(param_1 + 0x68));
}
}
}
else if ((*(int *)(param_1 + 8) == 1) || (*(int *)(param_1 + 8) == 4)) {
local_8 = 0;
if (*(int *)(param_1 + 0x68) != 0) {
iVar1 = -param_2;
pfVar2 = (float *)(param_2 + 8);
do {
fVar4 = (float10)FUN_006005ca(pfVar2[-2]);
*(float *)((int)pfVar2 + *(int *)(param_1 + 0x58) + iVar1 + -8) =
(float)(fVar4 * (float10)pfVar2[-2]);
fVar4 = (float10)FUN_006005ca(pfVar2[-1]);
*(float *)((int)pfVar2 + *(int *)(param_1 + 0x58) + iVar1 + -4) =
(float)(fVar4 * (float10)pfVar2[-1]);
fVar4 = (float10)FUN_006005ca(*pfVar2);
local_8 = local_8 + 1;
*(float *)((int)pfVar2 + *(int *)(param_1 + 0x58) + iVar1) =
(float)(fVar4 * (float10)*pfVar2);
*(float *)((int)pfVar2 + *(int *)(param_1 + 0x58) + iVar1 + 4) = pfVar2[1];
pfVar2 = pfVar2 + 4;
} while (local_8 < *(uint *)(param_1 + 0x68));
}
}
else {
local_8 = 0;
if (*(int *)(param_1 + 0x68) != 0) {
iVar1 = -0xc - param_2;
pfVar2 = (float *)(param_2 + 0xc);
do {
*(float *)((int)pfVar2 + *(int *)(param_1 + 0x58) + iVar1) = pfVar2[-3];
*(float *)((int)pfVar2 + *(int *)(param_1 + 0x58) + 4 + iVar1) = pfVar2[-2];
*(float *)((int)pfVar2 + *(int *)(param_1 + 0x58) + 8 + iVar1) = pfVar2[-1];
fVar4 = (float10)FUN_006005ca(*pfVar2);
local_8 = local_8 + 1;
*(float *)((int)pfVar2 + *(int *)(param_1 + 0x58) + 0xc + iVar1) =
(float)(fVar4 * (float10)*pfVar2);
pfVar2 = pfVar2 + 4;
} while (local_8 < *(uint *)(param_1 + 0x68));
}
}
return *(undefined4 *)(param_1 + 0x58);
}
// --- FUN_005f5802 at 0x005F5802 (size: 297) ---
void __thiscall FUN_005f5802(int param_1,uint param_2)
{
uint uVar1;
float *pfVar2;
uint uVar3;
int iVar4;
undefined2 in_FPUControlWord;
float10 fVar5;
uVar1 = param_2;
uVar3 = *(int *)(param_1 + 0x68) * 0x10 + param_2;
if (*(int *)(param_1 + 0x14) == 0) {
param_2 = CONCAT22(param_2._2_2_,in_FPUControlWord);
*(uint *)(param_1 + 0x7c) = param_2;
if ((*(int *)(param_1 + 8) == 1) || (*(int *)(param_1 + 8) == 4)) {
if (uVar1 < uVar3) {
iVar4 = ((uVar3 - uVar1) - 1 >> 4) + 1;
pfVar2 = (float *)(uVar1 + 8);
do {
fVar5 = (float10)FUN_005f5146(pfVar2[-2]);
pfVar2[-2] = (float)fVar5;
fVar5 = (float10)FUN_005f5146(pfVar2[-1]);
pfVar2[-1] = (float)fVar5;
fVar5 = (float10)FUN_005f5146(*pfVar2);
*pfVar2 = (float)fVar5;
pfVar2 = pfVar2 + 4;
iVar4 = iVar4 + -1;
} while (iVar4 != 0);
}
}
else if (uVar1 < uVar3) {
iVar4 = ((uVar3 - uVar1) - 1 >> 4) + 1;
pfVar2 = (float *)(uVar1 + 0xc);
do {
fVar5 = (float10)FUN_005f5146(*pfVar2);
*pfVar2 = (float)fVar5;
pfVar2 = pfVar2 + 4;
iVar4 = iVar4 + -1;
} while (iVar4 != 0);
}
}
else if ((*(int *)(param_1 + 8) == 1) || (*(int *)(param_1 + 8) == 4)) {
if (param_2 < uVar3) {
pfVar2 = (float *)(param_2 + 8);
iVar4 = ((uVar3 - param_2) - 1 >> 4) + 1;
do {
pfVar2[-2] = pfVar2[-2] * pfVar2[-2];
pfVar2[-1] = pfVar2[-1] * pfVar2[-1];
*pfVar2 = *pfVar2 * *pfVar2;
pfVar2 = pfVar2 + 4;
iVar4 = iVar4 + -1;
} while (iVar4 != 0);
}
}
else if (param_2 < uVar3) {
pfVar2 = (float *)(param_2 + 0xc);
iVar4 = ((uVar3 - param_2) - 1 >> 4) + 1;
do {
*pfVar2 = *pfVar2 * *pfVar2;
pfVar2 = pfVar2 + 4;
iVar4 = iVar4 + -1;
} while (iVar4 != 0);
}
return;
}
// --- FUN_005f592b at 0x005F592B (size: 114) ---
void __thiscall FUN_005f592b(int param_1,int param_2)
{
float *pfVar1;
float *pfVar2;
int iVar3;
uint uVar4;
undefined4 *puVar5;
uVar4 = 0;
if (*(int *)(param_1 + 0x68) != 0) {
pfVar2 = (float *)(param_2 + 8);
do {
pfVar1 = (float *)((int)pfVar2 + *(int *)(param_1 + 0x5c) + (8 - param_2));
uVar4 = uVar4 + 1;
pfVar2[-2] = *pfVar1 + pfVar2[-2];
pfVar2[-1] = pfVar1[1] + pfVar2[-1];
*pfVar2 = pfVar1[2] + *pfVar2;
pfVar2[1] = pfVar1[3] + pfVar2[1];
pfVar2 = pfVar2 + 4;
} while (uVar4 < *(uint *)(param_1 + 0x68));
}
puVar5 = *(undefined4 **)(param_1 + 0x5c);
for (uVar4 = (uint)((*(int *)(param_1 + 0x68) + 2) * 0x10) >> 2; uVar4 != 0; uVar4 = uVar4 - 1) {
*puVar5 = 0;
puVar5 = puVar5 + 1;
}
for (iVar3 = 0; iVar3 != 0; iVar3 = iVar3 + -1) {
*(undefined1 *)puVar5 = 0;
puVar5 = (undefined4 *)((int)puVar5 + 1);
}
return;
}
// --- FUN_005f599d at 0x005F599D (size: 765) ---
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
void __thiscall FUN_005f599d(int param_1,uint param_2,uint param_3,float *param_4)
{
float *pfVar1;
float fVar2;
int iVar3;
float fVar4;
float fVar5;
float fVar6;
float fVar7;
uint uVar8;
int iVar9;
uint uVar10;
int iVar11;
int iVar12;
undefined1 uVar13;
int iVar14;
int iVar15;
int iVar16;
undefined1 *puVar17;
undefined2 in_FPUControlWord;
float local_54;
float local_50;
float local_4c;
int local_34;
int local_30;
if (*(int *)(param_1 + 0x54) != 0) {
param_4 = (float *)FUN_005f40ea(param_4);
}
if (*(int *)(param_1 + 0x10) != 0) {
param_4 = (float *)FUN_005f560f(param_4);
}
local_54 = 0.0;
local_50 = 0.0;
local_4c = 0.0;
uVar10 = param_2 & 3;
uVar8 = param_3 & 3;
iVar3 = *(int *)(param_1 + 0x34);
puVar17 = (undefined1 *)
((*(int *)(param_1 + 0x68) + -1) * (param_2 & 1) * 3 +
*(int *)(param_1 + 0x60) * param_2 + *(int *)(param_1 + 100) * param_3 +
*(int *)(param_1 + 0x20));
if ((param_2 & 1) == 0) {
iVar15 = 0;
iVar14 = 1;
param_2 = 1;
}
else {
iVar15 = *(int *)(param_1 + 0x68) + -1;
param_2 = -1;
iVar14 = -1;
}
param_3 = CONCAT22(param_3._2_2_,in_FPUControlWord);
*(uint *)(param_1 + 0x7c) = param_3;
if (*(int *)(param_1 + 0x5c) != 0) {
FUN_005f592b(param_4);
iVar14 = param_2;
}
param_2 = 0;
if (*(int *)(param_1 + 0x68) != 0) {
iVar11 = iVar14 * 0x10;
iVar9 = iVar15 * 0x10;
iVar12 = (iVar14 + iVar15) * 0x10;
param_3 = (iVar15 - iVar14) * 0x10;
param_4 = (float *)(iVar9 + 8 + (int)param_4);
do {
fVar7 = _DAT_00799208;
fVar2 = *(float *)(iVar3 + (uVar8 + uVar10 * 8) * 4 + (param_2 & 3) * 4);
fVar4 = (local_54 + param_4[-2]) * _DAT_00797188;
fVar5 = (local_50 + param_4[-1]) * _DAT_00797188;
fVar6 = (local_4c + *param_4) * _DAT_00797188;
local_34 = (int)ROUND(fVar4 + fVar2);
local_30 = (int)ROUND(fVar5 + fVar2);
iVar15 = (int)ROUND(fVar6 + fVar2);
if (*(int *)(param_1 + 0x5c) != 0) {
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x10 + param_3);
local_54 = (fVar4 - (float)local_34) * _DAT_00799208;
*pfVar1 = _DAT_007edf08 * local_54 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x10 + iVar9);
*pfVar1 = _DAT_007edf04 * local_54 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x10 + iVar12);
*pfVar1 = _DAT_007edf00 * local_54 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x14 + param_3);
local_54 = local_54 * (float)_DAT_007edef8;
local_50 = (fVar5 - (float)local_30) * fVar7;
*pfVar1 = _DAT_007edf08 * local_50 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x14 + iVar9);
*pfVar1 = _DAT_007edf04 * local_50 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x14 + iVar12);
*pfVar1 = _DAT_007edf00 * local_50 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x18 + param_3);
local_50 = local_50 * (float)_DAT_007edef8;
fVar7 = (fVar6 - (float)iVar15) * fVar7;
*pfVar1 = _DAT_007edf08 * fVar7 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x18 + iVar9);
*pfVar1 = _DAT_007edf04 * fVar7 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x18 + iVar12);
*pfVar1 = _DAT_007edf00 * fVar7 + *pfVar1;
local_4c = fVar7 * (float)_DAT_007edef8;
}
uVar13 = 0xff;
iVar16 = local_34;
if (0xfe < local_34) {
iVar16 = 0xff;
}
if (iVar16 < 1) {
local_34 = 0;
}
else if (0xfe < local_34) {
local_34 = 0xff;
}
iVar16 = local_30;
if (0xfe < local_30) {
iVar16 = 0xff;
}
if (iVar16 < 1) {
local_30 = 0;
}
else if (0xfe < local_30) {
local_30 = 0xff;
}
iVar16 = iVar15;
if (0xfe < iVar15) {
iVar16 = 0xff;
}
if (iVar16 < 1) {
uVar13 = 0;
}
else if (iVar15 < 0xff) {
uVar13 = (undefined1)iVar15;
}
*puVar17 = uVar13;
puVar17[1] = (undefined1)local_30;
puVar17[2] = (undefined1)local_34;
param_4 = param_4 + iVar14 * 4;
param_3 = param_3 + iVar11;
puVar17 = puVar17 + iVar14 * 3;
iVar9 = iVar9 + iVar11;
iVar12 = iVar12 + iVar11;
param_2 = param_2 + 1;
} while (param_2 < *(uint *)(param_1 + 0x68));
}
return;
}
// --- FUN_005f5c9a at 0x005F5C9A (size: 943) ---
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
void __thiscall FUN_005f5c9a(int param_1,uint param_2,float *param_3,int param_4)
{
float *pfVar1;
float fVar2;
int iVar3;
float fVar4;
float fVar5;
float fVar6;
float fVar7;
float fVar8;
uint uVar9;
int iVar10;
int iVar11;
int iVar12;
uint uVar13;
int iVar14;
int iVar15;
uint uVar16;
int iVar17;
int iVar18;
ushort in_FPUControlWord;
float local_58;
float local_54;
float local_50;
float local_4c;
uint local_38;
uint local_34;
uint local_30;
uint *local_8;
if (*(int *)(param_1 + 0x54) != 0) {
param_4 = FUN_005f40ea(param_4);
}
if (*(int *)(param_1 + 0x10) != 0) {
param_4 = FUN_005f560f(param_4);
}
local_58 = 0.0;
local_54 = 0.0;
local_50 = 0.0;
local_4c = 0.0;
local_8 = (uint *)(*(int *)(param_1 + 0x60) * param_2 +
(*(int *)(param_1 + 0x68) + -1) * (param_2 & 1) * 4 +
*(int *)(param_1 + 100) * (int)param_3 + *(int *)(param_1 + 0x20));
uVar9 = param_2 & 3;
uVar13 = (uint)param_3 & 3;
iVar3 = *(int *)(param_1 + 0x34);
if ((param_2 & 1) == 0) {
iVar18 = 0;
iVar15 = 1;
}
else {
iVar18 = *(int *)(param_1 + 0x68) + -1;
iVar15 = -1;
}
param_2 = (uint)in_FPUControlWord;
*(uint *)(param_1 + 0x7c) = param_2;
if (*(int *)(param_1 + 0x5c) != 0) {
FUN_005f592b(param_4);
}
param_2 = 0;
if (*(int *)(param_1 + 0x68) != 0) {
iVar11 = iVar15 * 0x10;
iVar10 = iVar18 * 0x10;
param_3 = (float *)(iVar10 + 8 + param_4);
iVar12 = (iVar15 + iVar18) * 0x10;
iVar18 = (iVar18 - iVar15) * 0x10;
do {
fVar8 = _DAT_00799208;
fVar2 = *(float *)(iVar3 + (uVar13 + uVar9 * 8) * 4 + (param_2 & 3) * 4);
fVar4 = (local_58 + param_3[-2]) * _DAT_00797188;
fVar5 = (local_54 + param_3[-1]) * _DAT_00797188;
fVar6 = (local_50 + *param_3) * _DAT_00797188;
fVar7 = (local_4c + param_3[1]) * _DAT_00797188;
local_38 = (uint)ROUND(fVar4 + fVar2);
local_34 = (uint)ROUND(fVar5 + fVar2);
local_30 = (uint)ROUND(fVar6 + fVar2);
iVar14 = (int)ROUND(fVar7 + fVar2);
if (*(int *)(param_1 + 0x5c) != 0) {
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x10 + iVar18);
local_58 = (fVar4 - (float)(int)local_38) * _DAT_00799208;
*pfVar1 = _DAT_007edf08 * local_58 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x10 + iVar10);
*pfVar1 = _DAT_007edf04 * local_58 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x10 + iVar12);
*pfVar1 = _DAT_007edf00 * local_58 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x14 + iVar18);
local_58 = local_58 * (float)_DAT_007edef8;
local_54 = (fVar5 - (float)(int)local_34) * fVar8;
*pfVar1 = _DAT_007edf08 * local_54 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x14 + iVar10);
*pfVar1 = _DAT_007edf04 * local_54 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x14 + iVar12);
*pfVar1 = _DAT_007edf00 * local_54 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x18 + iVar18);
local_54 = local_54 * (float)_DAT_007edef8;
local_50 = (fVar6 - (float)(int)local_30) * fVar8;
*pfVar1 = _DAT_007edf08 * local_50 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x18 + iVar10);
*pfVar1 = _DAT_007edf04 * local_50 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x18 + iVar12);
*pfVar1 = _DAT_007edf00 * local_50 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x1c + iVar18);
local_50 = local_50 * (float)_DAT_007edef8;
fVar8 = (fVar7 - (float)iVar14) * fVar8;
*pfVar1 = _DAT_007edf08 * fVar8 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x1c + iVar10);
*pfVar1 = _DAT_007edf04 * fVar8 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x1c + iVar12);
*pfVar1 = _DAT_007edf00 * fVar8 + *pfVar1;
local_4c = fVar8 * (float)_DAT_007edef8;
}
uVar16 = local_38;
if (0xfe < (int)local_38) {
uVar16 = 0xff;
}
if ((int)uVar16 < 1) {
local_38 = 0;
}
else if (0xfe < (int)local_38) {
local_38 = 0xff;
}
uVar16 = local_34;
if (0xfe < (int)local_34) {
uVar16 = 0xff;
}
if ((int)uVar16 < 1) {
local_34 = 0;
}
else if (0xfe < (int)local_34) {
local_34 = 0xff;
}
uVar16 = local_30;
if (0xfe < (int)local_30) {
uVar16 = 0xff;
}
if ((int)uVar16 < 1) {
local_30 = 0;
}
else if (0xfe < (int)local_30) {
local_30 = 0xff;
}
iVar17 = iVar14;
if (0xfe < iVar14) {
iVar17 = 0xff;
}
if (iVar17 < 1) {
iVar14 = 0;
}
else if (0xfe < iVar14) {
iVar14 = 0xff;
}
*local_8 = ((iVar14 << 8 | local_38) << 8 | local_34) << 8 | local_30;
local_8 = local_8 + iVar15;
param_3 = param_3 + iVar15 * 4;
iVar10 = iVar10 + iVar11;
iVar18 = iVar18 + iVar11;
iVar12 = iVar12 + iVar11;
param_2 = param_2 + 1;
} while (param_2 < *(uint *)(param_1 + 0x68));
}
return;
}
// --- FUN_005f6049 at 0x005F6049 (size: 790) ---
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
void __thiscall FUN_005f6049(int param_1,uint param_2,uint param_3,float *param_4)
{
float *pfVar1;
float fVar2;
int iVar3;
float fVar4;
float fVar5;
float fVar6;
float fVar7;
uint uVar8;
int iVar9;
int iVar10;
int iVar11;
int iVar12;
int iVar13;
int iVar14;
int iVar15;
uint uVar16;
ushort in_FPUControlWord;
float local_54;
float local_50;
float local_4c;
uint local_30;
uint local_2c;
uint *local_8;
if (*(int *)(param_1 + 0x54) != 0) {
param_4 = (float *)FUN_005f40ea(param_4);
}
if (*(int *)(param_1 + 0x10) != 0) {
param_4 = (float *)FUN_005f560f(param_4);
}
local_54 = 0.0;
local_50 = 0.0;
local_4c = 0.0;
uVar8 = param_2 & 3;
local_8 = (uint *)(*(int *)(param_1 + 0x60) * param_2 +
(*(int *)(param_1 + 0x68) + -1) * (param_2 & 1) * 4 +
*(int *)(param_1 + 100) * param_3 + *(int *)(param_1 + 0x20));
iVar3 = *(int *)(param_1 + 0x34);
if ((param_2 & 1) == 0) {
iVar14 = 0;
iVar13 = 1;
}
else {
iVar14 = *(int *)(param_1 + 0x68) + -1;
iVar13 = -1;
}
param_2 = (uint)in_FPUControlWord;
*(uint *)(param_1 + 0x7c) = param_2;
if (*(int *)(param_1 + 0x5c) != 0) {
FUN_005f592b(param_4);
}
param_2 = 0;
if (*(int *)(param_1 + 0x68) != 0) {
iVar10 = iVar13 * 0x10;
iVar9 = iVar14 * 0x10;
iVar11 = (iVar13 + iVar14) * 0x10;
iVar14 = (iVar14 - iVar13) * 0x10;
param_4 = (float *)(iVar9 + 8 + (int)param_4);
do {
fVar7 = _DAT_00799208;
fVar2 = *(float *)(iVar3 + ((param_3 & 3) + uVar8 * 8) * 4 + (param_2 & 3) * 4);
fVar4 = (local_54 + param_4[-2]) * _DAT_00797188;
fVar5 = (local_50 + param_4[-1]) * _DAT_00797188;
fVar6 = (local_4c + *param_4) * _DAT_00797188;
iVar12 = (int)ROUND(fVar4 + fVar2);
local_30 = (uint)ROUND(fVar5 + fVar2);
local_2c = (uint)ROUND(fVar6 + fVar2);
if (*(int *)(param_1 + 0x5c) != 0) {
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x10 + iVar14);
local_54 = (fVar4 - (float)iVar12) * _DAT_00799208;
*pfVar1 = _DAT_007edf08 * local_54 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x10 + iVar9);
*pfVar1 = _DAT_007edf04 * local_54 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x10 + iVar11);
*pfVar1 = _DAT_007edf00 * local_54 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x14 + iVar14);
local_54 = local_54 * (float)_DAT_007edef8;
local_50 = (fVar5 - (float)(int)local_30) * fVar7;
*pfVar1 = _DAT_007edf08 * local_50 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x14 + iVar9);
*pfVar1 = _DAT_007edf04 * local_50 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x14 + iVar11);
*pfVar1 = _DAT_007edf00 * local_50 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x18 + iVar14);
local_50 = local_50 * (float)_DAT_007edef8;
fVar7 = (fVar6 - (float)(int)local_2c) * fVar7;
*pfVar1 = _DAT_007edf08 * fVar7 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x18 + iVar9);
*pfVar1 = _DAT_007edf04 * fVar7 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x18 + iVar11);
*pfVar1 = _DAT_007edf00 * fVar7 + *pfVar1;
local_4c = fVar7 * (float)_DAT_007edef8;
}
iVar15 = iVar12;
if (0xfe < iVar12) {
iVar15 = 0xff;
}
if (iVar15 < 1) {
iVar12 = 0;
}
else if (0xfe < iVar12) {
iVar12 = 0xff;
}
uVar16 = local_30;
if (0xfe < (int)local_30) {
uVar16 = 0xff;
}
if ((int)uVar16 < 1) {
local_30 = 0;
}
else if (0xfe < (int)local_30) {
local_30 = 0xff;
}
uVar16 = local_2c;
if (0xfe < (int)local_2c) {
uVar16 = 0xff;
}
if ((int)uVar16 < 1) {
local_2c = 0;
}
else if (0xfe < (int)local_2c) {
local_2c = 0xff;
}
*local_8 = (iVar12 << 8 | local_30) << 8 | local_2c;
local_8 = local_8 + iVar13;
param_4 = param_4 + iVar13 * 4;
iVar9 = iVar9 + iVar10;
iVar14 = iVar14 + iVar10;
iVar11 = iVar11 + iVar10;
param_2 = param_2 + 1;
} while (param_2 < *(uint *)(param_1 + 0x68));
}
return;
}
// --- FUN_005f635f at 0x005F635F (size: 771) ---
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
void __thiscall FUN_005f635f(int param_1,uint param_2,uint param_3,float *param_4)
{
float *pfVar1;
float fVar2;
int iVar3;
float fVar4;
float fVar5;
float fVar6;
float fVar7;
uint uVar8;
int iVar9;
int iVar10;
int iVar11;
int iVar12;
int iVar13;
int iVar14;
uint uVar15;
int iVar16;
ushort in_FPUControlWord;
float local_54;
float local_50;
float local_4c;
uint local_30;
int local_2c;
ushort *local_8;
if (*(int *)(param_1 + 0x54) != 0) {
param_4 = (float *)FUN_005f40ea(param_4);
}
if (*(int *)(param_1 + 0x10) != 0) {
param_4 = (float *)FUN_005f560f(param_4);
}
local_54 = 0.0;
local_50 = 0.0;
local_4c = 0.0;
uVar8 = param_2 & 3;
local_8 = (ushort *)
(*(int *)(param_1 + 0x60) * param_2 +
(*(int *)(param_1 + 0x68) + -1) * (param_2 & 1) * 2 + *(int *)(param_1 + 100) * param_3
+ *(int *)(param_1 + 0x20));
iVar3 = *(int *)(param_1 + 0x34);
if ((param_2 & 1) == 0) {
iVar14 = 0;
iVar13 = 1;
}
else {
iVar14 = *(int *)(param_1 + 0x68) + -1;
iVar13 = -1;
}
param_2 = (uint)in_FPUControlWord;
*(uint *)(param_1 + 0x7c) = param_2;
if (*(int *)(param_1 + 0x5c) != 0) {
FUN_005f592b(param_4);
}
param_2 = 0;
if (*(int *)(param_1 + 0x68) != 0) {
iVar10 = iVar13 * 0x10;
iVar9 = iVar14 * 0x10;
iVar11 = (iVar13 + iVar14) * 0x10;
iVar14 = (iVar14 - iVar13) * 0x10;
param_4 = (float *)(iVar9 + 8 + (int)param_4);
do {
fVar7 = _DAT_007edee8;
fVar2 = *(float *)(iVar3 + ((param_3 & 3) + uVar8 * 8) * 4 + (param_2 & 3) * 4);
fVar4 = (local_54 + param_4[-2]) * _DAT_007edeec;
fVar5 = (local_50 + param_4[-1]) * _DAT_007edee4;
fVar6 = (local_4c + *param_4) * _DAT_007edeec;
iVar12 = (int)ROUND(fVar4 + fVar2);
local_30 = (uint)ROUND(fVar5 + fVar2);
local_2c = (int)ROUND(fVar6 + fVar2);
if (*(int *)(param_1 + 0x5c) != 0) {
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x10 + iVar14);
local_54 = (fVar4 - (float)iVar12) * _DAT_007edee8;
*pfVar1 = _DAT_007edf08 * local_54 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x10 + iVar9);
*pfVar1 = _DAT_007edf04 * local_54 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x10 + iVar11);
*pfVar1 = _DAT_007edf00 * local_54 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x14 + iVar14);
local_54 = local_54 * (float)_DAT_007edef8;
local_50 = (fVar5 - (float)(int)local_30) * _DAT_007edee0;
*pfVar1 = _DAT_007edf08 * local_50 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x14 + iVar9);
*pfVar1 = _DAT_007edf04 * local_50 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x14 + iVar11);
*pfVar1 = _DAT_007edf00 * local_50 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x18 + iVar14);
local_50 = local_50 * (float)_DAT_007edef8;
fVar7 = (fVar6 - (float)local_2c) * fVar7;
*pfVar1 = _DAT_007edf08 * fVar7 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x18 + iVar9);
*pfVar1 = _DAT_007edf04 * fVar7 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x18 + iVar11);
*pfVar1 = _DAT_007edf00 * fVar7 + *pfVar1;
local_4c = fVar7 * (float)_DAT_007edef8;
}
iVar16 = iVar12;
if (0x1e < iVar12) {
iVar16 = 0x1f;
}
if (iVar16 < 1) {
iVar12 = 0;
}
else if (0x1e < iVar12) {
iVar12 = 0x1f;
}
uVar15 = local_30;
if (0x3e < (int)local_30) {
uVar15 = 0x3f;
}
if ((int)uVar15 < 1) {
local_30 = 0;
}
else if (0x3e < (int)local_30) {
local_30 = 0x3f;
}
iVar16 = local_2c;
if (0x1e < local_2c) {
iVar16 = 0x1f;
}
if (iVar16 < 1) {
local_2c = 0;
}
else if (0x1e < local_2c) {
local_2c = 0x1f;
}
*local_8 = (ushort)((iVar12 << 6 | local_30) << 5) | (ushort)local_2c;
local_8 = local_8 + iVar13;
param_4 = param_4 + iVar13 * 4;
iVar9 = iVar9 + iVar10;
iVar14 = iVar14 + iVar10;
iVar11 = iVar11 + iVar10;
param_2 = param_2 + 1;
} while (param_2 < *(uint *)(param_1 + 0x68));
}
return;
}
// --- FUN_005f6662 at 0x005F6662 (size: 767) ---
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
void __thiscall FUN_005f6662(int param_1,uint param_2,uint param_3,float *param_4)
{
float *pfVar1;
float fVar2;
int iVar3;
float fVar4;
float fVar5;
float fVar6;
float fVar7;
uint uVar8;
int iVar9;
int iVar10;
int iVar11;
int iVar12;
int iVar13;
int iVar14;
uint uVar15;
int iVar16;
ushort in_FPUControlWord;
float local_54;
float local_50;
float local_4c;
uint local_30;
int local_2c;
ushort *local_8;
if (*(int *)(param_1 + 0x54) != 0) {
param_4 = (float *)FUN_005f40ea(param_4);
}
if (*(int *)(param_1 + 0x10) != 0) {
param_4 = (float *)FUN_005f560f(param_4);
}
local_54 = 0.0;
local_50 = 0.0;
local_4c = 0.0;
uVar8 = param_2 & 3;
local_8 = (ushort *)
(*(int *)(param_1 + 0x60) * param_2 +
(*(int *)(param_1 + 0x68) + -1) * (param_2 & 1) * 2 + *(int *)(param_1 + 100) * param_3
+ *(int *)(param_1 + 0x20));
iVar3 = *(int *)(param_1 + 0x34);
if ((param_2 & 1) == 0) {
iVar14 = 0;
iVar13 = 1;
}
else {
iVar14 = *(int *)(param_1 + 0x68) + -1;
iVar13 = -1;
}
param_2 = (uint)in_FPUControlWord;
*(uint *)(param_1 + 0x7c) = param_2;
if (*(int *)(param_1 + 0x5c) != 0) {
FUN_005f592b(param_4);
}
param_2 = 0;
if (*(int *)(param_1 + 0x68) != 0) {
iVar10 = iVar13 * 0x10;
iVar9 = iVar14 * 0x10;
iVar11 = (iVar13 + iVar14) * 0x10;
iVar14 = (iVar14 - iVar13) * 0x10;
param_4 = (float *)(iVar9 + 8 + (int)param_4);
do {
fVar7 = _DAT_007edee8;
fVar2 = *(float *)(iVar3 + ((param_3 & 3) + uVar8 * 8) * 4 + (param_2 & 3) * 4);
fVar4 = (local_54 + param_4[-2]) * _DAT_007edeec;
fVar5 = (local_50 + param_4[-1]) * _DAT_007edeec;
fVar6 = (local_4c + *param_4) * _DAT_007edeec;
iVar12 = (int)ROUND(fVar4 + fVar2);
local_30 = (uint)ROUND(fVar5 + fVar2);
local_2c = (int)ROUND(fVar6 + fVar2);
if (*(int *)(param_1 + 0x5c) != 0) {
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x10 + iVar14);
local_54 = (fVar4 - (float)iVar12) * _DAT_007edee8;
*pfVar1 = _DAT_007edf08 * local_54 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x10 + iVar9);
*pfVar1 = _DAT_007edf04 * local_54 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x10 + iVar11);
*pfVar1 = _DAT_007edf00 * local_54 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x14 + iVar14);
local_54 = local_54 * (float)_DAT_007edef8;
local_50 = (fVar5 - (float)(int)local_30) * fVar7;
*pfVar1 = _DAT_007edf08 * local_50 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x14 + iVar9);
*pfVar1 = _DAT_007edf04 * local_50 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x14 + iVar11);
*pfVar1 = _DAT_007edf00 * local_50 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x18 + iVar14);
local_50 = local_50 * (float)_DAT_007edef8;
fVar7 = (fVar6 - (float)local_2c) * fVar7;
*pfVar1 = _DAT_007edf08 * fVar7 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x18 + iVar9);
*pfVar1 = _DAT_007edf04 * fVar7 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x18 + iVar11);
*pfVar1 = _DAT_007edf00 * fVar7 + *pfVar1;
local_4c = fVar7 * (float)_DAT_007edef8;
}
iVar16 = iVar12;
if (0x1e < iVar12) {
iVar16 = 0x1f;
}
if (iVar16 < 1) {
iVar12 = 0;
}
else if (0x1e < iVar12) {
iVar12 = 0x1f;
}
uVar15 = local_30;
if (0x1e < (int)local_30) {
uVar15 = 0x1f;
}
if ((int)uVar15 < 1) {
local_30 = 0;
}
else if (0x1e < (int)local_30) {
local_30 = 0x1f;
}
iVar16 = local_2c;
if (0x1e < local_2c) {
iVar16 = 0x1f;
}
if (iVar16 < 1) {
local_2c = 0;
}
else if (0x1e < local_2c) {
local_2c = 0x1f;
}
*local_8 = (ushort)((iVar12 << 5 | local_30) << 5) | (ushort)local_2c;
local_8 = local_8 + iVar13;
param_4 = param_4 + iVar13 * 4;
iVar9 = iVar9 + iVar10;
iVar14 = iVar14 + iVar10;
iVar11 = iVar11 + iVar10;
param_2 = param_2 + 1;
} while (param_2 < *(uint *)(param_1 + 0x68));
}
return;
}
// --- FUN_005f6961 at 0x005F6961 (size: 912) ---
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
void __thiscall FUN_005f6961(int param_1,uint param_2,float *param_3,int param_4)
{
float *pfVar1;
float fVar2;
float fVar3;
int iVar4;
float fVar5;
float fVar6;
float fVar7;
float fVar8;
uint uVar9;
int iVar10;
int iVar11;
int iVar12;
uint uVar13;
int iVar14;
int iVar15;
uint uVar16;
int iVar17;
int iVar18;
ushort in_FPUControlWord;
float local_58;
float local_54;
float local_50;
float local_4c;
uint local_38;
uint local_34;
int local_30;
ushort *local_8;
if (*(int *)(param_1 + 0x54) != 0) {
param_4 = FUN_005f40ea(param_4);
}
if (*(int *)(param_1 + 0x10) != 0) {
param_4 = FUN_005f560f(param_4);
}
local_58 = 0.0;
local_54 = 0.0;
local_50 = 0.0;
local_4c = 0.0;
local_8 = (ushort *)
(*(int *)(param_1 + 0x60) * param_2 +
(*(int *)(param_1 + 0x68) + -1) * (param_2 & 1) * 2 +
*(int *)(param_1 + 100) * (int)param_3 + *(int *)(param_1 + 0x20));
uVar9 = param_2 & 3;
uVar13 = (uint)param_3 & 3;
iVar4 = *(int *)(param_1 + 0x34);
if ((param_2 & 1) == 0) {
iVar18 = 0;
iVar15 = 1;
}
else {
iVar18 = *(int *)(param_1 + 0x68) + -1;
iVar15 = -1;
}
param_2 = (uint)in_FPUControlWord;
*(uint *)(param_1 + 0x7c) = param_2;
if (*(int *)(param_1 + 0x5c) != 0) {
FUN_005f592b(param_4);
}
param_2 = 0;
if (*(int *)(param_1 + 0x68) != 0) {
iVar11 = iVar15 * 0x10;
iVar10 = iVar18 * 0x10;
param_3 = (float *)(iVar10 + 8 + param_4);
iVar12 = (iVar15 + iVar18) * 0x10;
iVar18 = (iVar18 - iVar15) * 0x10;
do {
fVar8 = _DAT_007edee8;
fVar2 = *(float *)(iVar4 + (uVar13 + uVar9 * 8) * 4 + (param_2 & 3) * 4);
fVar5 = (local_58 + param_3[-2]) * _DAT_007edeec;
fVar6 = (local_54 + param_3[-1]) * _DAT_007edeec;
fVar7 = (local_50 + *param_3) * _DAT_007edeec;
fVar3 = param_3[1];
local_38 = (uint)ROUND(fVar5 + fVar2);
local_34 = (uint)ROUND(fVar6 + fVar2);
local_30 = (int)ROUND(fVar7 + fVar2);
iVar14 = (int)ROUND(local_4c + fVar3 + fVar2);
if (*(int *)(param_1 + 0x5c) != 0) {
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x10 + iVar18);
local_58 = (fVar5 - (float)(int)local_38) * _DAT_007edee8;
*pfVar1 = _DAT_007edf08 * local_58 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x10 + iVar10);
*pfVar1 = _DAT_007edf04 * local_58 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x10 + iVar12);
*pfVar1 = _DAT_007edf00 * local_58 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x14 + iVar18);
local_58 = local_58 * (float)_DAT_007edef8;
local_54 = (fVar6 - (float)(int)local_34) * fVar8;
*pfVar1 = _DAT_007edf08 * local_54 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x14 + iVar10);
*pfVar1 = _DAT_007edf04 * local_54 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x14 + iVar12);
*pfVar1 = _DAT_007edf00 * local_54 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x18 + iVar18);
local_54 = local_54 * (float)_DAT_007edef8;
fVar8 = (fVar7 - (float)local_30) * fVar8;
*pfVar1 = _DAT_007edf08 * fVar8 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x18 + iVar10);
*pfVar1 = _DAT_007edf04 * fVar8 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x18 + iVar12);
*pfVar1 = _DAT_007edf00 * fVar8 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x1c + iVar18);
local_50 = fVar8 * (float)_DAT_007edef8;
local_4c = (local_4c + fVar3) - (float)iVar14;
*pfVar1 = _DAT_007edf08 * local_4c + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x1c + iVar10);
*pfVar1 = _DAT_007edf04 * local_4c + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x1c + iVar12);
*pfVar1 = _DAT_007edf00 * local_4c + *pfVar1;
local_4c = local_4c * (float)_DAT_007edef8;
}
uVar16 = local_38;
if (0x1e < (int)local_38) {
uVar16 = 0x1f;
}
if ((int)uVar16 < 1) {
local_38 = 0;
}
else if (0x1e < (int)local_38) {
local_38 = 0x1f;
}
uVar16 = local_34;
if (0x1e < (int)local_34) {
uVar16 = 0x1f;
}
if ((int)uVar16 < 1) {
local_34 = 0;
}
else if (0x1e < (int)local_34) {
local_34 = 0x1f;
}
iVar17 = local_30;
if (0x1e < local_30) {
iVar17 = 0x1f;
}
if (iVar17 < 1) {
local_30 = 0;
}
else if (0x1e < local_30) {
local_30 = 0x1f;
}
iVar17 = iVar14;
if (0 < iVar14) {
iVar17 = 1;
}
if (iVar17 < 1) {
iVar14 = 0;
}
else if (0 < iVar14) {
iVar14 = 1;
}
*local_8 = (ushort)(((iVar14 << 5 | local_38) << 5 | local_34) << 5) | (ushort)local_30;
local_8 = local_8 + iVar15;
param_3 = param_3 + iVar15 * 4;
iVar10 = iVar10 + iVar11;
iVar18 = iVar18 + iVar11;
iVar12 = iVar12 + iVar11;
param_2 = param_2 + 1;
} while (param_2 < *(uint *)(param_1 + 0x68));
}
return;
}
// --- FUN_005f6cf1 at 0x005F6CF1 (size: 912) ---
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
void __thiscall FUN_005f6cf1(int param_1,uint param_2,float *param_3,int param_4)
{
float *pfVar1;
float fVar2;
int iVar3;
float fVar4;
float fVar5;
float fVar6;
float fVar7;
float fVar8;
uint uVar9;
int iVar10;
int iVar11;
int iVar12;
uint uVar13;
int iVar14;
int iVar15;
uint uVar16;
int iVar17;
int iVar18;
ushort in_FPUControlWord;
float local_58;
float local_54;
float local_50;
float local_4c;
uint local_38;
uint local_34;
int local_30;
ushort *local_8;
if (*(int *)(param_1 + 0x54) != 0) {
param_4 = FUN_005f40ea(param_4);
}
if (*(int *)(param_1 + 0x10) != 0) {
param_4 = FUN_005f560f(param_4);
}
local_58 = 0.0;
local_54 = 0.0;
local_50 = 0.0;
local_4c = 0.0;
local_8 = (ushort *)
(*(int *)(param_1 + 0x60) * param_2 +
(*(int *)(param_1 + 0x68) + -1) * (param_2 & 1) * 2 +
*(int *)(param_1 + 100) * (int)param_3 + *(int *)(param_1 + 0x20));
uVar9 = param_2 & 3;
uVar13 = (uint)param_3 & 3;
iVar3 = *(int *)(param_1 + 0x34);
if ((param_2 & 1) == 0) {
iVar18 = 0;
iVar15 = 1;
}
else {
iVar18 = *(int *)(param_1 + 0x68) + -1;
iVar15 = -1;
}
param_2 = (uint)in_FPUControlWord;
*(uint *)(param_1 + 0x7c) = param_2;
if (*(int *)(param_1 + 0x5c) != 0) {
FUN_005f592b(param_4);
}
param_2 = 0;
if (*(int *)(param_1 + 0x68) != 0) {
iVar11 = iVar15 * 0x10;
iVar10 = iVar18 * 0x10;
param_3 = (float *)(iVar10 + 8 + param_4);
iVar12 = (iVar15 + iVar18) * 0x10;
iVar18 = (iVar18 - iVar15) * 0x10;
do {
fVar8 = _DAT_0079cc80;
fVar2 = *(float *)(iVar3 + (uVar13 + uVar9 * 8) * 4 + (param_2 & 3) * 4);
fVar4 = (local_58 + param_3[-2]) * _DAT_0079c6d8;
fVar5 = (local_54 + param_3[-1]) * _DAT_0079c6d8;
fVar6 = (local_50 + *param_3) * _DAT_0079c6d8;
fVar7 = (local_4c + param_3[1]) * _DAT_0079c6d8;
local_38 = (uint)ROUND(fVar4 + fVar2);
local_34 = (uint)ROUND(fVar5 + fVar2);
local_30 = (int)ROUND(fVar6 + fVar2);
iVar14 = (int)ROUND(fVar7 + fVar2);
if (*(int *)(param_1 + 0x5c) != 0) {
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x10 + iVar18);
local_58 = (fVar4 - (float)(int)local_38) * _DAT_0079cc80;
*pfVar1 = _DAT_007edf08 * local_58 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x10 + iVar10);
*pfVar1 = _DAT_007edf04 * local_58 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x10 + iVar12);
*pfVar1 = _DAT_007edf00 * local_58 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x14 + iVar18);
local_58 = local_58 * (float)_DAT_007edef8;
local_54 = (fVar5 - (float)(int)local_34) * fVar8;
*pfVar1 = _DAT_007edf08 * local_54 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x14 + iVar10);
*pfVar1 = _DAT_007edf04 * local_54 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x14 + iVar12);
*pfVar1 = _DAT_007edf00 * local_54 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x18 + iVar18);
local_54 = local_54 * (float)_DAT_007edef8;
local_50 = (fVar6 - (float)local_30) * fVar8;
*pfVar1 = _DAT_007edf08 * local_50 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x18 + iVar10);
*pfVar1 = _DAT_007edf04 * local_50 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x18 + iVar12);
*pfVar1 = _DAT_007edf00 * local_50 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x1c + iVar18);
local_50 = local_50 * (float)_DAT_007edef8;
fVar8 = (fVar7 - (float)iVar14) * fVar8;
*pfVar1 = _DAT_007edf08 * fVar8 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x1c + iVar10);
*pfVar1 = _DAT_007edf04 * fVar8 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x1c + iVar12);
*pfVar1 = _DAT_007edf00 * fVar8 + *pfVar1;
local_4c = fVar8 * (float)_DAT_007edef8;
}
uVar16 = local_38;
if (0xe < (int)local_38) {
uVar16 = 0xf;
}
if ((int)uVar16 < 1) {
local_38 = 0;
}
else if (0xe < (int)local_38) {
local_38 = 0xf;
}
uVar16 = local_34;
if (0xe < (int)local_34) {
uVar16 = 0xf;
}
if ((int)uVar16 < 1) {
local_34 = 0;
}
else if (0xe < (int)local_34) {
local_34 = 0xf;
}
iVar17 = local_30;
if (0xe < local_30) {
iVar17 = 0xf;
}
if (iVar17 < 1) {
local_30 = 0;
}
else if (0xe < local_30) {
local_30 = 0xf;
}
iVar17 = iVar14;
if (0xe < iVar14) {
iVar17 = 0xf;
}
if (iVar17 < 1) {
iVar14 = 0;
}
else if (0xe < iVar14) {
iVar14 = 0xf;
}
*local_8 = (ushort)(((iVar14 << 4 | local_38) << 4 | local_34) << 4) | (ushort)local_30;
local_8 = local_8 + iVar15;
param_3 = param_3 + iVar15 * 4;
iVar10 = iVar10 + iVar11;
iVar18 = iVar18 + iVar11;
iVar12 = iVar12 + iVar11;
param_2 = param_2 + 1;
} while (param_2 < *(uint *)(param_1 + 0x68));
}
return;
}
// --- FUN_005f7081 at 0x005F7081 (size: 789) ---
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
void __thiscall FUN_005f7081(int param_1,uint param_2,uint param_3,float *param_4)
{
float *pfVar1;
float fVar2;
int iVar3;
float fVar4;
float fVar5;
float fVar6;
float fVar7;
uint uVar8;
int iVar9;
uint uVar10;
int iVar11;
int iVar12;
int iVar13;
byte *pbVar14;
int iVar15;
undefined2 in_FPUControlWord;
float local_58;
float local_54;
float local_50;
int local_34;
int local_30;
int local_8;
if (*(int *)(param_1 + 0x54) != 0) {
param_4 = (float *)FUN_005f40ea(param_4);
}
if (*(int *)(param_1 + 0x10) != 0) {
param_4 = (float *)FUN_005f560f(param_4);
}
local_58 = 0.0;
local_54 = 0.0;
local_50 = 0.0;
uVar8 = param_2 & 3;
uVar10 = param_3 & 3;
pbVar14 = (byte *)((*(int *)(param_1 + 0x68) + -1) * (param_2 & 1) +
*(int *)(param_1 + 0x60) * param_2 + *(int *)(param_1 + 100) * param_3 +
*(int *)(param_1 + 0x20));
iVar3 = *(int *)(param_1 + 0x34);
if ((param_2 & 1) == 0) {
local_8 = 0;
param_2 = 1;
}
else {
local_8 = *(int *)(param_1 + 0x68) + -1;
param_2 = -1;
}
param_3 = CONCAT22(param_3._2_2_,in_FPUControlWord);
*(uint *)(param_1 + 0x7c) = param_3;
if (*(int *)(param_1 + 0x5c) != 0) {
FUN_005f592b(param_4);
}
param_3 = 0;
if (*(int *)(param_1 + 0x68) != 0) {
iVar11 = param_2 * 0x10;
iVar9 = local_8 * 0x10;
iVar15 = (param_2 + local_8) * 0x10;
local_8 = (local_8 - param_2) * 0x10;
param_4 = (float *)(iVar9 + 8 + (int)param_4);
do {
fVar7 = _DAT_007edf0c;
fVar2 = *(float *)(iVar3 + (uVar10 + uVar8 * 8) * 4 + (param_3 & 3) * 4);
fVar4 = (local_58 + param_4[-2]) * _DAT_007cb7b4;
fVar5 = (local_54 + param_4[-1]) * _DAT_007cb7b4;
fVar6 = (local_50 + *param_4) * _DAT_007938bc;
iVar12 = (int)ROUND(fVar4 + fVar2);
local_34 = (int)ROUND(fVar5 + fVar2);
local_30 = (int)ROUND(fVar6 + fVar2);
if (*(int *)(param_1 + 0x5c) != 0) {
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x10 + local_8);
local_58 = (fVar4 - (float)iVar12) * _DAT_007edf0c;
*pfVar1 = _DAT_007edf08 * local_58 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x10 + iVar9);
*pfVar1 = _DAT_007edf04 * local_58 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x10 + iVar15);
*pfVar1 = _DAT_007edf00 * local_58 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x14 + local_8);
local_58 = local_58 * (float)_DAT_007edef8;
fVar7 = (fVar5 - (float)local_34) * fVar7;
*pfVar1 = _DAT_007edf08 * fVar7 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x14 + iVar9);
*pfVar1 = _DAT_007edf04 * fVar7 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x14 + iVar15);
*pfVar1 = _DAT_007edf00 * fVar7 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x18 + local_8);
local_54 = fVar7 * (float)_DAT_007edef8;
local_50 = (fVar6 - (float)local_30) * _DAT_007e75f0;
*pfVar1 = _DAT_007edf08 * local_50 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x18 + iVar9);
*pfVar1 = _DAT_007edf04 * local_50 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x18 + iVar15);
*pfVar1 = _DAT_007edf00 * local_50 + *pfVar1;
local_50 = local_50 * (float)_DAT_007edef8;
}
iVar13 = iVar12;
if (6 < iVar12) {
iVar13 = 7;
}
if (iVar13 < 1) {
iVar12 = 0;
}
else if (6 < iVar12) {
iVar12 = 7;
}
iVar13 = local_34;
if (6 < local_34) {
iVar13 = 7;
}
if (iVar13 < 1) {
local_34 = 0;
}
else if (6 < local_34) {
local_34 = 7;
}
iVar13 = local_30;
if (2 < local_30) {
iVar13 = 3;
}
if (iVar13 < 1) {
local_30 = 0;
}
else if (2 < local_30) {
local_30 = 3;
}
*pbVar14 = ((char)iVar12 << 3 | (byte)local_34) << 2 | (byte)local_30;
pbVar14 = pbVar14 + param_2;
param_4 = param_4 + param_2 * 4;
local_8 = local_8 + iVar11;
iVar9 = iVar9 + iVar11;
iVar15 = iVar15 + iVar11;
param_3 = param_3 + 1;
} while (param_3 < *(uint *)(param_1 + 0x68));
}
return;
}
// --- FUN_005f7396 at 0x005F7396 (size: 449) ---
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
void __thiscall FUN_005f7396(int param_1,uint param_2,uint param_3,float *param_4)
{
float *pfVar1;
int iVar2;
float fVar3;
uint uVar4;
int iVar5;
uint uVar6;
int iVar7;
int iVar8;
int iVar9;
int iVar10;
undefined1 *puVar11;
undefined2 in_FPUControlWord;
float local_2c;
int local_8;
if (*(int *)(param_1 + 0x54) != 0) {
param_4 = (float *)FUN_005f40ea(param_4);
}
if (*(int *)(param_1 + 0x10) != 0) {
param_4 = (float *)FUN_005f560f(param_4);
}
local_2c = 0.0;
uVar4 = param_2 & 3;
uVar6 = param_3 & 3;
iVar2 = *(int *)(param_1 + 0x34);
puVar11 = (undefined1 *)
((*(int *)(param_1 + 0x68) + -1) * (param_2 & 1) + *(int *)(param_1 + 0x60) * param_2 +
*(int *)(param_1 + 100) * param_3 + *(int *)(param_1 + 0x20));
if ((param_2 & 1) == 0) {
iVar9 = 0;
param_2 = 1;
}
else {
iVar9 = *(int *)(param_1 + 0x68) + -1;
param_2 = -1;
}
param_3 = CONCAT22(param_3._2_2_,in_FPUControlWord);
*(uint *)(param_1 + 0x7c) = param_3;
if (*(int *)(param_1 + 0x5c) != 0) {
FUN_005f592b(param_4);
}
param_3 = 0;
if (*(int *)(param_1 + 0x68) != 0) {
iVar7 = param_2 * 0x10;
iVar5 = iVar9 * 0x10;
iVar8 = (param_2 + iVar9) * 0x10;
local_8 = (iVar9 - param_2) * 0x10;
param_4 = (float *)(iVar5 + 0xc + (int)param_4);
do {
fVar3 = (local_2c + *param_4) * _DAT_00797188;
iVar9 = (int)ROUND(fVar3 + *(float *)(iVar2 + (uVar6 + uVar4 * 8) * 4 + (param_3 & 3) * 4));
if (*(int *)(param_1 + 0x5c) != 0) {
pfVar1 = (float *)(local_8 + 0x1c + *(int *)(param_1 + 0x5c));
local_2c = (fVar3 - (float)iVar9) * _DAT_00799208;
*pfVar1 = _DAT_007edf08 * local_2c + *pfVar1;
pfVar1 = (float *)(iVar5 + 0x1c + *(int *)(param_1 + 0x5c));
*pfVar1 = _DAT_007edf04 * local_2c + *pfVar1;
pfVar1 = (float *)(iVar8 + 0x1c + *(int *)(param_1 + 0x5c));
*pfVar1 = _DAT_007edf00 * local_2c + *pfVar1;
local_2c = local_2c * (float)_DAT_007edef8;
}
iVar10 = iVar9;
if (0xfe < iVar9) {
iVar10 = 0xff;
}
if (iVar10 < 1) {
iVar9 = 0;
}
else if (0xfe < iVar9) {
iVar9 = 0xff;
}
*puVar11 = (char)iVar9;
param_4 = param_4 + param_2 * 4;
local_8 = local_8 + iVar7;
puVar11 = puVar11 + param_2;
iVar5 = iVar5 + iVar7;
iVar8 = iVar8 + iVar7;
param_3 = param_3 + 1;
} while (param_3 < *(uint *)(param_1 + 0x68));
}
return;
}
// --- FUN_005f7557 at 0x005F7557 (size: 920) ---
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
void __thiscall FUN_005f7557(int param_1,uint param_2,float *param_3,int param_4)
{
float *pfVar1;
float fVar2;
int iVar3;
float fVar4;
float fVar5;
float fVar6;
float fVar7;
float fVar8;
uint uVar9;
int iVar10;
int iVar11;
int iVar12;
uint uVar13;
int iVar14;
uint uVar15;
int iVar16;
int iVar17;
int iVar18;
ushort in_FPUControlWord;
float local_58;
float local_54;
float local_50;
float local_4c;
uint local_38;
uint local_34;
int local_30;
ushort *local_8;
if (*(int *)(param_1 + 0x54) != 0) {
param_4 = FUN_005f40ea(param_4);
}
if (*(int *)(param_1 + 0x10) != 0) {
param_4 = FUN_005f560f(param_4);
}
local_58 = 0.0;
local_54 = 0.0;
local_50 = 0.0;
local_4c = 0.0;
local_8 = (ushort *)
(*(int *)(param_1 + 0x60) * param_2 +
(*(int *)(param_1 + 0x68) + -1) * (param_2 & 1) * 2 +
*(int *)(param_1 + 100) * (int)param_3 + *(int *)(param_1 + 0x20));
uVar9 = param_2 & 3;
uVar13 = (uint)param_3 & 3;
iVar3 = *(int *)(param_1 + 0x34);
if ((param_2 & 1) == 0) {
iVar18 = 0;
iVar14 = 1;
}
else {
iVar18 = *(int *)(param_1 + 0x68) + -1;
iVar14 = -1;
}
param_2 = (uint)in_FPUControlWord;
*(uint *)(param_1 + 0x7c) = param_2;
if (*(int *)(param_1 + 0x5c) != 0) {
FUN_005f592b(param_4);
}
param_2 = 0;
if (*(int *)(param_1 + 0x68) != 0) {
iVar11 = iVar14 * 0x10;
iVar10 = iVar18 * 0x10;
iVar12 = (iVar14 + iVar18) * 0x10;
iVar18 = (iVar18 - iVar14) * 0x10;
param_3 = (float *)(iVar10 + 8 + param_4);
do {
fVar8 = _DAT_007edf0c;
fVar2 = *(float *)(iVar3 + (uVar13 + uVar9 * 8) * 4 + (param_2 & 3) * 4);
fVar4 = (local_58 + param_3[-2]) * _DAT_007cb7b4;
fVar5 = (local_54 + param_3[-1]) * _DAT_007cb7b4;
fVar6 = (local_50 + *param_3) * _DAT_007938bc;
fVar7 = (local_4c + param_3[1]) * _DAT_00797188;
local_38 = (uint)ROUND(fVar4 + fVar2);
local_34 = (uint)ROUND(fVar5 + fVar2);
local_30 = (int)ROUND(fVar6 + fVar2);
iVar17 = (int)ROUND(fVar7 + fVar2);
if (*(int *)(param_1 + 0x5c) != 0) {
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x10 + iVar18);
local_58 = (fVar4 - (float)(int)local_38) * _DAT_007edf0c;
*pfVar1 = _DAT_007edf08 * local_58 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x10 + iVar10);
*pfVar1 = _DAT_007edf04 * local_58 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x10 + iVar12);
*pfVar1 = _DAT_007edf00 * local_58 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x14 + iVar18);
local_58 = local_58 * (float)_DAT_007edef8;
fVar8 = (fVar5 - (float)(int)local_34) * fVar8;
*pfVar1 = _DAT_007edf08 * fVar8 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x14 + iVar10);
*pfVar1 = _DAT_007edf04 * fVar8 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x14 + iVar12);
*pfVar1 = _DAT_007edf00 * fVar8 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x18 + iVar18);
local_54 = fVar8 * (float)_DAT_007edef8;
local_50 = (fVar6 - (float)local_30) * _DAT_007e75f0;
*pfVar1 = _DAT_007edf08 * local_50 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x18 + iVar10);
*pfVar1 = _DAT_007edf04 * local_50 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x18 + iVar12);
*pfVar1 = _DAT_007edf00 * local_50 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x1c + iVar18);
local_50 = local_50 * (float)_DAT_007edef8;
local_4c = (fVar7 - (float)iVar17) * _DAT_00799208;
*pfVar1 = _DAT_007edf08 * local_4c + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x1c + iVar10);
*pfVar1 = _DAT_007edf04 * local_4c + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x1c + iVar12);
*pfVar1 = _DAT_007edf00 * local_4c + *pfVar1;
local_4c = local_4c * (float)_DAT_007edef8;
}
uVar15 = local_38;
if (6 < (int)local_38) {
uVar15 = 7;
}
if ((int)uVar15 < 1) {
local_38 = 0;
}
else if (6 < (int)local_38) {
local_38 = 7;
}
uVar15 = local_34;
if (6 < (int)local_34) {
uVar15 = 7;
}
if ((int)uVar15 < 1) {
local_34 = 0;
}
else if (6 < (int)local_34) {
local_34 = 7;
}
iVar16 = local_30;
if (2 < local_30) {
iVar16 = 3;
}
if (iVar16 < 1) {
local_30 = 0;
}
else if (2 < local_30) {
local_30 = 3;
}
iVar16 = iVar17;
if (0xfe < iVar17) {
iVar16 = 0xff;
}
if (iVar16 < 1) {
iVar17 = 0;
}
else if (0xfe < iVar17) {
iVar17 = 0xff;
}
*local_8 = (ushort)(((iVar17 << 3 | local_38) << 3 | local_34) << 2) | (ushort)local_30;
local_8 = local_8 + iVar14;
param_3 = param_3 + iVar14 * 4;
iVar10 = iVar10 + iVar11;
iVar18 = iVar18 + iVar11;
iVar12 = iVar12 + iVar11;
param_2 = param_2 + 1;
} while (param_2 < *(uint *)(param_1 + 0x68));
}
return;
}
// --- FUN_005f78ef at 0x005F78EF (size: 767) ---
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
void __thiscall FUN_005f78ef(int param_1,uint param_2,uint param_3,float *param_4)
{
float *pfVar1;
float fVar2;
int iVar3;
float fVar4;
float fVar5;
float fVar6;
float fVar7;
uint uVar8;
int iVar9;
int iVar10;
int iVar11;
int iVar12;
int iVar13;
int iVar14;
uint uVar15;
int iVar16;
ushort in_FPUControlWord;
float local_54;
float local_50;
float local_4c;
uint local_30;
int local_2c;
ushort *local_8;
if (*(int *)(param_1 + 0x54) != 0) {
param_4 = (float *)FUN_005f40ea(param_4);
}
if (*(int *)(param_1 + 0x10) != 0) {
param_4 = (float *)FUN_005f560f(param_4);
}
local_54 = 0.0;
local_50 = 0.0;
local_4c = 0.0;
uVar8 = param_2 & 3;
local_8 = (ushort *)
(*(int *)(param_1 + 0x60) * param_2 +
(*(int *)(param_1 + 0x68) + -1) * (param_2 & 1) * 2 + *(int *)(param_1 + 100) * param_3
+ *(int *)(param_1 + 0x20));
iVar3 = *(int *)(param_1 + 0x34);
if ((param_2 & 1) == 0) {
iVar14 = 0;
iVar13 = 1;
}
else {
iVar14 = *(int *)(param_1 + 0x68) + -1;
iVar13 = -1;
}
param_2 = (uint)in_FPUControlWord;
*(uint *)(param_1 + 0x7c) = param_2;
if (*(int *)(param_1 + 0x5c) != 0) {
FUN_005f592b(param_4);
}
param_2 = 0;
if (*(int *)(param_1 + 0x68) != 0) {
iVar10 = iVar13 * 0x10;
iVar9 = iVar14 * 0x10;
iVar11 = (iVar13 + iVar14) * 0x10;
iVar14 = (iVar14 - iVar13) * 0x10;
param_4 = (float *)(iVar9 + 8 + (int)param_4);
do {
fVar7 = _DAT_0079cc80;
fVar2 = *(float *)(iVar3 + ((param_3 & 3) + uVar8 * 8) * 4 + (param_2 & 3) * 4);
fVar4 = (local_54 + param_4[-2]) * _DAT_0079c6d8;
fVar5 = (local_50 + param_4[-1]) * _DAT_0079c6d8;
fVar6 = (local_4c + *param_4) * _DAT_0079c6d8;
iVar12 = (int)ROUND(fVar4 + fVar2);
local_30 = (uint)ROUND(fVar5 + fVar2);
local_2c = (int)ROUND(fVar6 + fVar2);
if (*(int *)(param_1 + 0x5c) != 0) {
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x10 + iVar14);
local_54 = (fVar4 - (float)iVar12) * _DAT_0079cc80;
*pfVar1 = _DAT_007edf08 * local_54 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x10 + iVar9);
*pfVar1 = _DAT_007edf04 * local_54 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x10 + iVar11);
*pfVar1 = _DAT_007edf00 * local_54 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x14 + iVar14);
local_54 = local_54 * (float)_DAT_007edef8;
local_50 = (fVar5 - (float)(int)local_30) * fVar7;
*pfVar1 = _DAT_007edf08 * local_50 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x14 + iVar9);
*pfVar1 = _DAT_007edf04 * local_50 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x14 + iVar11);
*pfVar1 = _DAT_007edf00 * local_50 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x18 + iVar14);
local_50 = local_50 * (float)_DAT_007edef8;
fVar7 = (fVar6 - (float)local_2c) * fVar7;
*pfVar1 = _DAT_007edf08 * fVar7 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x18 + iVar9);
*pfVar1 = _DAT_007edf04 * fVar7 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x18 + iVar11);
*pfVar1 = _DAT_007edf00 * fVar7 + *pfVar1;
local_4c = fVar7 * (float)_DAT_007edef8;
}
iVar16 = iVar12;
if (0xe < iVar12) {
iVar16 = 0xf;
}
if (iVar16 < 1) {
iVar12 = 0;
}
else if (0xe < iVar12) {
iVar12 = 0xf;
}
uVar15 = local_30;
if (0xe < (int)local_30) {
uVar15 = 0xf;
}
if ((int)uVar15 < 1) {
local_30 = 0;
}
else if (0xe < (int)local_30) {
local_30 = 0xf;
}
iVar16 = local_2c;
if (0xe < local_2c) {
iVar16 = 0xf;
}
if (iVar16 < 1) {
local_2c = 0;
}
else if (0xe < local_2c) {
local_2c = 0xf;
}
*local_8 = (ushort)((iVar12 << 4 | local_30) << 4) | (ushort)local_2c;
local_8 = local_8 + iVar13;
param_4 = param_4 + iVar13 * 4;
iVar9 = iVar9 + iVar10;
iVar14 = iVar14 + iVar10;
iVar11 = iVar11 + iVar10;
param_2 = param_2 + 1;
} while (param_2 < *(uint *)(param_1 + 0x68));
}
return;
}
// --- FUN_005f7bee at 0x005F7BEE (size: 949) ---
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
void __thiscall FUN_005f7bee(int param_1,uint param_2,float *param_3,int param_4)
{
float *pfVar1;
float fVar2;
int iVar3;
float fVar4;
float fVar5;
float fVar6;
float fVar7;
float fVar8;
uint uVar9;
int iVar10;
int iVar11;
int iVar12;
uint uVar13;
int iVar14;
int iVar15;
uint uVar16;
int iVar17;
int iVar18;
ushort in_FPUControlWord;
float local_58;
float local_54;
float local_50;
float local_4c;
uint local_38;
uint local_34;
uint local_30;
uint *local_8;
if (*(int *)(param_1 + 0x54) != 0) {
param_4 = FUN_005f40ea(param_4);
}
if (*(int *)(param_1 + 0x10) != 0) {
param_4 = FUN_005f560f(param_4);
}
local_58 = 0.0;
local_54 = 0.0;
local_50 = 0.0;
local_4c = 0.0;
local_8 = (uint *)(*(int *)(param_1 + 0x60) * param_2 +
(*(int *)(param_1 + 0x68) + -1) * (param_2 & 1) * 4 +
*(int *)(param_1 + 100) * (int)param_3 + *(int *)(param_1 + 0x20));
uVar9 = param_2 & 3;
uVar13 = (uint)param_3 & 3;
iVar3 = *(int *)(param_1 + 0x34);
if ((param_2 & 1) == 0) {
iVar18 = 0;
iVar15 = 1;
}
else {
iVar18 = *(int *)(param_1 + 0x68) + -1;
iVar15 = -1;
}
param_2 = (uint)in_FPUControlWord;
*(uint *)(param_1 + 0x7c) = param_2;
if (*(int *)(param_1 + 0x5c) != 0) {
FUN_005f592b(param_4);
}
param_2 = 0;
if (*(int *)(param_1 + 0x68) != 0) {
iVar11 = iVar15 * 0x10;
iVar10 = iVar18 * 0x10;
param_3 = (float *)(iVar10 + 8 + param_4);
iVar12 = (iVar15 + iVar18) * 0x10;
iVar18 = (iVar18 - iVar15) * 0x10;
do {
fVar8 = _DAT_007edf10;
fVar2 = *(float *)(iVar3 + (uVar13 + uVar9 * 8) * 4 + (param_2 & 3) * 4);
fVar4 = (local_58 + param_3[-2]) * _DAT_007edf14;
fVar5 = (local_54 + param_3[-1]) * _DAT_007edf14;
fVar6 = (local_50 + *param_3) * _DAT_007edf14;
fVar7 = (local_4c + param_3[1]) * _DAT_007938bc;
local_38 = (uint)ROUND(fVar4 + fVar2);
local_34 = (uint)ROUND(fVar5 + fVar2);
local_30 = (uint)ROUND(fVar6 + fVar2);
iVar14 = (int)ROUND(fVar7 + fVar2);
if (*(int *)(param_1 + 0x5c) != 0) {
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x10 + iVar18);
local_58 = (fVar4 - (float)(int)local_38) * _DAT_007edf10;
*pfVar1 = _DAT_007edf08 * local_58 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x10 + iVar10);
*pfVar1 = _DAT_007edf04 * local_58 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x10 + iVar12);
*pfVar1 = _DAT_007edf00 * local_58 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x14 + iVar18);
local_58 = local_58 * (float)_DAT_007edef8;
local_54 = (fVar5 - (float)(int)local_34) * fVar8;
*pfVar1 = _DAT_007edf08 * local_54 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x14 + iVar10);
*pfVar1 = _DAT_007edf04 * local_54 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x14 + iVar12);
*pfVar1 = _DAT_007edf00 * local_54 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x18 + iVar18);
local_54 = local_54 * (float)_DAT_007edef8;
fVar8 = (fVar6 - (float)(int)local_30) * fVar8;
*pfVar1 = _DAT_007edf08 * fVar8 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x18 + iVar10);
*pfVar1 = _DAT_007edf04 * fVar8 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x18 + iVar12);
*pfVar1 = _DAT_007edf00 * fVar8 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x1c + iVar18);
local_50 = fVar8 * (float)_DAT_007edef8;
local_4c = (fVar7 - (float)iVar14) * _DAT_007e75f0;
*pfVar1 = _DAT_007edf08 * local_4c + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x1c + iVar10);
*pfVar1 = _DAT_007edf04 * local_4c + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x1c + iVar12);
*pfVar1 = _DAT_007edf00 * local_4c + *pfVar1;
local_4c = local_4c * (float)_DAT_007edef8;
}
uVar16 = local_38;
if (0x3fe < (int)local_38) {
uVar16 = 0x3ff;
}
if ((int)uVar16 < 1) {
local_38 = 0;
}
else if (0x3fe < (int)local_38) {
local_38 = 0x3ff;
}
uVar16 = local_34;
if (0x3fe < (int)local_34) {
uVar16 = 0x3ff;
}
if ((int)uVar16 < 1) {
local_34 = 0;
}
else if (0x3fe < (int)local_34) {
local_34 = 0x3ff;
}
uVar16 = local_30;
if (0x3fe < (int)local_30) {
uVar16 = 0x3ff;
}
if ((int)uVar16 < 1) {
local_30 = 0;
}
else if (0x3fe < (int)local_30) {
local_30 = 0x3ff;
}
iVar17 = iVar14;
if (2 < iVar14) {
iVar17 = 3;
}
if (iVar17 < 1) {
iVar14 = 0;
}
else if (2 < iVar14) {
iVar14 = 3;
}
*local_8 = ((iVar14 << 10 | local_30) << 10 | local_34) << 10 | local_38;
local_8 = local_8 + iVar15;
param_3 = param_3 + iVar15 * 4;
iVar10 = iVar10 + iVar11;
iVar18 = iVar18 + iVar11;
iVar12 = iVar12 + iVar11;
param_2 = param_2 + 1;
} while (param_2 < *(uint *)(param_1 + 0x68));
}
return;
}
// --- FUN_005f7fa3 at 0x005F7FA3 (size: 943) ---
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
void __thiscall FUN_005f7fa3(int param_1,uint param_2,float *param_3,int param_4)
{
float *pfVar1;
float fVar2;
int iVar3;
float fVar4;
float fVar5;
float fVar6;
float fVar7;
float fVar8;
uint uVar9;
int iVar10;
int iVar11;
int iVar12;
uint uVar13;
int iVar14;
int iVar15;
uint uVar16;
int iVar17;
int iVar18;
ushort in_FPUControlWord;
float local_58;
float local_54;
float local_50;
float local_4c;
uint local_38;
uint local_34;
uint local_30;
uint *local_8;
if (*(int *)(param_1 + 0x54) != 0) {
param_4 = FUN_005f40ea(param_4);
}
if (*(int *)(param_1 + 0x10) != 0) {
param_4 = FUN_005f560f(param_4);
}
local_58 = 0.0;
local_54 = 0.0;
local_50 = 0.0;
local_4c = 0.0;
local_8 = (uint *)(*(int *)(param_1 + 0x60) * param_2 +
(*(int *)(param_1 + 0x68) + -1) * (param_2 & 1) * 4 +
*(int *)(param_1 + 100) * (int)param_3 + *(int *)(param_1 + 0x20));
uVar9 = param_2 & 3;
uVar13 = (uint)param_3 & 3;
iVar3 = *(int *)(param_1 + 0x34);
if ((param_2 & 1) == 0) {
iVar18 = 0;
iVar15 = 1;
}
else {
iVar18 = *(int *)(param_1 + 0x68) + -1;
iVar15 = -1;
}
param_2 = (uint)in_FPUControlWord;
*(uint *)(param_1 + 0x7c) = param_2;
if (*(int *)(param_1 + 0x5c) != 0) {
FUN_005f592b(param_4);
}
param_2 = 0;
if (*(int *)(param_1 + 0x68) != 0) {
iVar11 = iVar15 * 0x10;
iVar10 = iVar18 * 0x10;
param_3 = (float *)(iVar10 + 8 + param_4);
iVar12 = (iVar15 + iVar18) * 0x10;
iVar18 = (iVar18 - iVar15) * 0x10;
do {
fVar8 = _DAT_00799208;
fVar2 = *(float *)(iVar3 + (uVar13 + uVar9 * 8) * 4 + (param_2 & 3) * 4);
fVar4 = (local_58 + param_3[-2]) * _DAT_00797188;
fVar5 = (local_54 + param_3[-1]) * _DAT_00797188;
fVar6 = (local_50 + *param_3) * _DAT_00797188;
fVar7 = (local_4c + param_3[1]) * _DAT_00797188;
local_38 = (uint)ROUND(fVar4 + fVar2);
local_34 = (uint)ROUND(fVar5 + fVar2);
local_30 = (uint)ROUND(fVar6 + fVar2);
iVar14 = (int)ROUND(fVar7 + fVar2);
if (*(int *)(param_1 + 0x5c) != 0) {
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x10 + iVar18);
local_58 = (fVar4 - (float)(int)local_38) * _DAT_00799208;
*pfVar1 = _DAT_007edf08 * local_58 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x10 + iVar10);
*pfVar1 = _DAT_007edf04 * local_58 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x10 + iVar12);
*pfVar1 = _DAT_007edf00 * local_58 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x14 + iVar18);
local_58 = local_58 * (float)_DAT_007edef8;
local_54 = (fVar5 - (float)(int)local_34) * fVar8;
*pfVar1 = _DAT_007edf08 * local_54 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x14 + iVar10);
*pfVar1 = _DAT_007edf04 * local_54 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x14 + iVar12);
*pfVar1 = _DAT_007edf00 * local_54 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x18 + iVar18);
local_54 = local_54 * (float)_DAT_007edef8;
local_50 = (fVar6 - (float)(int)local_30) * fVar8;
*pfVar1 = _DAT_007edf08 * local_50 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x18 + iVar10);
*pfVar1 = _DAT_007edf04 * local_50 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x18 + iVar12);
*pfVar1 = _DAT_007edf00 * local_50 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x1c + iVar18);
local_50 = local_50 * (float)_DAT_007edef8;
fVar8 = (fVar7 - (float)iVar14) * fVar8;
*pfVar1 = _DAT_007edf08 * fVar8 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x1c + iVar10);
*pfVar1 = _DAT_007edf04 * fVar8 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x1c + iVar12);
*pfVar1 = _DAT_007edf00 * fVar8 + *pfVar1;
local_4c = fVar8 * (float)_DAT_007edef8;
}
uVar16 = local_38;
if (0xfe < (int)local_38) {
uVar16 = 0xff;
}
if ((int)uVar16 < 1) {
local_38 = 0;
}
else if (0xfe < (int)local_38) {
local_38 = 0xff;
}
uVar16 = local_34;
if (0xfe < (int)local_34) {
uVar16 = 0xff;
}
if ((int)uVar16 < 1) {
local_34 = 0;
}
else if (0xfe < (int)local_34) {
local_34 = 0xff;
}
uVar16 = local_30;
if (0xfe < (int)local_30) {
uVar16 = 0xff;
}
if ((int)uVar16 < 1) {
local_30 = 0;
}
else if (0xfe < (int)local_30) {
local_30 = 0xff;
}
iVar17 = iVar14;
if (0xfe < iVar14) {
iVar17 = 0xff;
}
if (iVar17 < 1) {
iVar14 = 0;
}
else if (0xfe < iVar14) {
iVar14 = 0xff;
}
*local_8 = ((iVar14 << 8 | local_30) << 8 | local_34) << 8 | local_38;
local_8 = local_8 + iVar15;
param_3 = param_3 + iVar15 * 4;
iVar10 = iVar10 + iVar11;
iVar18 = iVar18 + iVar11;
iVar12 = iVar12 + iVar11;
param_2 = param_2 + 1;
} while (param_2 < *(uint *)(param_1 + 0x68));
}
return;
}
// --- FUN_005f8352 at 0x005F8352 (size: 790) ---
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
void __thiscall FUN_005f8352(int param_1,uint param_2,uint param_3,float *param_4)
{
float *pfVar1;
float fVar2;
int iVar3;
float fVar4;
float fVar5;
float fVar6;
float fVar7;
uint uVar8;
int iVar9;
int iVar10;
int iVar11;
int iVar12;
int iVar13;
int iVar14;
uint uVar15;
int iVar16;
ushort in_FPUControlWord;
float local_54;
float local_50;
float local_4c;
uint local_34;
uint local_30;
uint *local_8;
if (*(int *)(param_1 + 0x54) != 0) {
param_4 = (float *)FUN_005f40ea(param_4);
}
if (*(int *)(param_1 + 0x10) != 0) {
param_4 = (float *)FUN_005f560f(param_4);
}
local_54 = 0.0;
local_50 = 0.0;
local_4c = 0.0;
uVar8 = param_2 & 3;
local_8 = (uint *)(*(int *)(param_1 + 0x60) * param_2 +
(*(int *)(param_1 + 0x68) + -1) * (param_2 & 1) * 4 +
*(int *)(param_1 + 100) * param_3 + *(int *)(param_1 + 0x20));
iVar3 = *(int *)(param_1 + 0x34);
if ((param_2 & 1) == 0) {
iVar14 = 0;
iVar13 = 1;
}
else {
iVar14 = *(int *)(param_1 + 0x68) + -1;
iVar13 = -1;
}
param_2 = (uint)in_FPUControlWord;
*(uint *)(param_1 + 0x7c) = param_2;
if (*(int *)(param_1 + 0x5c) != 0) {
FUN_005f592b(param_4);
}
param_2 = 0;
if (*(int *)(param_1 + 0x68) != 0) {
iVar10 = iVar13 * 0x10;
iVar9 = iVar14 * 0x10;
iVar11 = (iVar13 + iVar14) * 0x10;
iVar14 = (iVar14 - iVar13) * 0x10;
param_4 = (float *)(iVar9 + 8 + (int)param_4);
do {
fVar7 = _DAT_00799208;
fVar2 = *(float *)(iVar3 + ((param_3 & 3) + uVar8 * 8) * 4 + (param_2 & 3) * 4);
fVar4 = (local_54 + param_4[-2]) * _DAT_00797188;
fVar5 = (local_50 + param_4[-1]) * _DAT_00797188;
fVar6 = (local_4c + *param_4) * _DAT_00797188;
local_34 = (uint)ROUND(fVar4 + fVar2);
local_30 = (uint)ROUND(fVar5 + fVar2);
iVar12 = (int)ROUND(fVar6 + fVar2);
if (*(int *)(param_1 + 0x5c) != 0) {
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x10 + iVar14);
local_54 = (fVar4 - (float)(int)local_34) * _DAT_00799208;
*pfVar1 = _DAT_007edf08 * local_54 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x10 + iVar9);
*pfVar1 = _DAT_007edf04 * local_54 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x10 + iVar11);
*pfVar1 = _DAT_007edf00 * local_54 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x14 + iVar14);
local_54 = local_54 * (float)_DAT_007edef8;
local_50 = (fVar5 - (float)(int)local_30) * fVar7;
*pfVar1 = _DAT_007edf08 * local_50 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x14 + iVar9);
*pfVar1 = _DAT_007edf04 * local_50 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x14 + iVar11);
*pfVar1 = _DAT_007edf00 * local_50 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x18 + iVar14);
local_50 = local_50 * (float)_DAT_007edef8;
fVar7 = (fVar6 - (float)iVar12) * fVar7;
*pfVar1 = _DAT_007edf08 * fVar7 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x18 + iVar9);
*pfVar1 = _DAT_007edf04 * fVar7 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x18 + iVar11);
*pfVar1 = _DAT_007edf00 * fVar7 + *pfVar1;
local_4c = fVar7 * (float)_DAT_007edef8;
}
uVar15 = local_34;
if (0xfe < (int)local_34) {
uVar15 = 0xff;
}
if ((int)uVar15 < 1) {
local_34 = 0;
}
else if (0xfe < (int)local_34) {
local_34 = 0xff;
}
uVar15 = local_30;
if (0xfe < (int)local_30) {
uVar15 = 0xff;
}
if ((int)uVar15 < 1) {
local_30 = 0;
}
else if (0xfe < (int)local_30) {
local_30 = 0xff;
}
iVar16 = iVar12;
if (0xfe < iVar12) {
iVar16 = 0xff;
}
if (iVar16 < 1) {
iVar12 = 0;
}
else if (0xfe < iVar12) {
iVar12 = 0xff;
}
*local_8 = (iVar12 << 8 | local_30) << 8 | local_34;
local_8 = local_8 + iVar13;
param_4 = param_4 + iVar13 * 4;
iVar9 = iVar9 + iVar10;
iVar14 = iVar14 + iVar10;
iVar11 = iVar11 + iVar10;
param_2 = param_2 + 1;
} while (param_2 < *(uint *)(param_1 + 0x68));
}
return;
}
// --- FUN_005f8668 at 0x005F8668 (size: 629) ---
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
void __thiscall FUN_005f8668(int param_1,uint param_2,uint param_3,int param_4)
{
float *pfVar1;
float fVar2;
int iVar3;
float fVar4;
float fVar5;
float fVar6;
int iVar7;
uint uVar8;
int iVar9;
uint uVar10;
int iVar11;
int iVar12;
uint *puVar13;
int iVar14;
uint uVar15;
int iVar16;
ushort in_FPUControlWord;
float local_54;
float local_50;
uint local_34;
if (*(int *)(param_1 + 0x54) != 0) {
param_4 = FUN_005f40ea(param_4);
}
if (*(int *)(param_1 + 0x10) != 0) {
param_4 = FUN_005f560f(param_4);
}
local_54 = 0.0;
local_50 = 0.0;
uVar8 = param_2 & 3;
uVar10 = param_3 & 3;
puVar13 = (uint *)(*(int *)(param_1 + 0x60) * param_2 +
(*(int *)(param_1 + 0x68) + -1) * (param_2 & 1) * 4 +
*(int *)(param_1 + 100) * param_3 + *(int *)(param_1 + 0x20));
iVar3 = *(int *)(param_1 + 0x34);
if ((param_2 & 1) == 0) {
iVar14 = 0;
param_3 = 1;
}
else {
iVar14 = *(int *)(param_1 + 0x68) + -1;
param_3 = -1;
}
iVar7 = param_3;
param_2 = (uint)in_FPUControlWord;
*(uint *)(param_1 + 0x7c) = param_2;
if (*(int *)(param_1 + 0x5c) != 0) {
FUN_005f592b(param_4);
}
param_2 = 0;
if (*(int *)(param_1 + 0x68) != 0) {
iVar11 = param_3 * 0x10;
iVar9 = iVar14 << 4;
iVar12 = (param_3 + iVar14) * 0x10;
param_3 = (iVar14 - param_3) * 0x10;
do {
fVar6 = _DAT_007edf18;
fVar2 = *(float *)(iVar3 + (uVar10 + uVar8 * 8) * 4 + (param_2 & 3) * 4);
fVar4 = (local_54 + *(float *)(param_4 + iVar9)) * _DAT_007edf1c;
fVar5 = (local_50 + ((float *)(param_4 + iVar9))[1]) * _DAT_007edf1c;
local_34 = (uint)ROUND(fVar4 + fVar2);
iVar14 = (int)ROUND(fVar5 + fVar2);
if (*(int *)(param_1 + 0x5c) != 0) {
pfVar1 = (float *)(param_3 + 0x10 + *(int *)(param_1 + 0x5c));
local_54 = (fVar4 - (float)(int)local_34) * _DAT_007edf18;
*pfVar1 = _DAT_007edf08 * local_54 + *pfVar1;
pfVar1 = (float *)(iVar9 + 0x10 + *(int *)(param_1 + 0x5c));
*pfVar1 = _DAT_007edf04 * local_54 + *pfVar1;
pfVar1 = (float *)(iVar12 + 0x10 + *(int *)(param_1 + 0x5c));
*pfVar1 = _DAT_007edf00 * local_54 + *pfVar1;
pfVar1 = (float *)(param_3 + 0x14 + *(int *)(param_1 + 0x5c));
local_54 = local_54 * (float)_DAT_007edef8;
fVar6 = (fVar5 - (float)iVar14) * fVar6;
*pfVar1 = _DAT_007edf08 * fVar6 + *pfVar1;
pfVar1 = (float *)(iVar9 + 0x14 + *(int *)(param_1 + 0x5c));
*pfVar1 = _DAT_007edf04 * fVar6 + *pfVar1;
pfVar1 = (float *)(iVar12 + 0x14 + *(int *)(param_1 + 0x5c));
*pfVar1 = _DAT_007edf00 * fVar6 + *pfVar1;
local_50 = fVar6 * (float)_DAT_007edef8;
}
uVar15 = local_34;
if (0xfffe < (int)local_34) {
uVar15 = 0xffff;
}
if ((int)uVar15 < 1) {
local_34 = 0;
}
else if (0xfffe < (int)local_34) {
local_34 = 0xffff;
}
iVar16 = iVar14;
if (0xfffe < iVar14) {
iVar16 = 0xffff;
}
if (iVar16 < 1) {
iVar14 = 0;
}
else if (0xfffe < iVar14) {
iVar14 = 0xffff;
}
*puVar13 = iVar14 << 0x10 | local_34;
puVar13 = puVar13 + iVar7;
param_3 = param_3 + iVar11;
iVar9 = iVar9 + iVar11;
iVar12 = iVar12 + iVar11;
param_2 = param_2 + 1;
} while (param_2 < *(uint *)(param_1 + 0x68));
}
return;
}
// --- FUN_005f88dd at 0x005F88DD (size: 949) ---
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
void __thiscall FUN_005f88dd(int param_1,uint param_2,float *param_3,int param_4)
{
float *pfVar1;
float fVar2;
int iVar3;
float fVar4;
float fVar5;
float fVar6;
float fVar7;
float fVar8;
uint uVar9;
int iVar10;
int iVar11;
int iVar12;
uint uVar13;
int iVar14;
int iVar15;
uint uVar16;
int iVar17;
int iVar18;
ushort in_FPUControlWord;
float local_58;
float local_54;
float local_50;
float local_4c;
uint local_38;
uint local_34;
uint local_30;
uint *local_8;
if (*(int *)(param_1 + 0x54) != 0) {
param_4 = FUN_005f40ea(param_4);
}
if (*(int *)(param_1 + 0x10) != 0) {
param_4 = FUN_005f560f(param_4);
}
local_58 = 0.0;
local_54 = 0.0;
local_50 = 0.0;
local_4c = 0.0;
local_8 = (uint *)(*(int *)(param_1 + 0x60) * param_2 +
(*(int *)(param_1 + 0x68) + -1) * (param_2 & 1) * 4 +
*(int *)(param_1 + 100) * (int)param_3 + *(int *)(param_1 + 0x20));
uVar9 = param_2 & 3;
uVar13 = (uint)param_3 & 3;
iVar3 = *(int *)(param_1 + 0x34);
if ((param_2 & 1) == 0) {
iVar18 = 0;
iVar15 = 1;
}
else {
iVar18 = *(int *)(param_1 + 0x68) + -1;
iVar15 = -1;
}
param_2 = (uint)in_FPUControlWord;
*(uint *)(param_1 + 0x7c) = param_2;
if (*(int *)(param_1 + 0x5c) != 0) {
FUN_005f592b(param_4);
}
param_2 = 0;
if (*(int *)(param_1 + 0x68) != 0) {
iVar11 = iVar15 * 0x10;
iVar10 = iVar18 * 0x10;
param_3 = (float *)(iVar10 + 8 + param_4);
iVar12 = (iVar15 + iVar18) * 0x10;
iVar18 = (iVar18 - iVar15) * 0x10;
do {
fVar8 = _DAT_007edf10;
fVar2 = *(float *)(iVar3 + (uVar13 + uVar9 * 8) * 4 + (param_2 & 3) * 4);
fVar4 = (local_58 + param_3[-2]) * _DAT_007edf14;
fVar5 = (local_54 + param_3[-1]) * _DAT_007edf14;
fVar6 = (local_50 + *param_3) * _DAT_007edf14;
fVar7 = (local_4c + param_3[1]) * _DAT_007938bc;
local_38 = (uint)ROUND(fVar4 + fVar2);
local_34 = (uint)ROUND(fVar5 + fVar2);
local_30 = (uint)ROUND(fVar6 + fVar2);
iVar14 = (int)ROUND(fVar7 + fVar2);
if (*(int *)(param_1 + 0x5c) != 0) {
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x10 + iVar18);
local_58 = (fVar4 - (float)(int)local_38) * _DAT_007edf10;
*pfVar1 = _DAT_007edf08 * local_58 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x10 + iVar10);
*pfVar1 = _DAT_007edf04 * local_58 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x10 + iVar12);
*pfVar1 = _DAT_007edf00 * local_58 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x14 + iVar18);
local_58 = local_58 * (float)_DAT_007edef8;
local_54 = (fVar5 - (float)(int)local_34) * fVar8;
*pfVar1 = _DAT_007edf08 * local_54 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x14 + iVar10);
*pfVar1 = _DAT_007edf04 * local_54 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x14 + iVar12);
*pfVar1 = _DAT_007edf00 * local_54 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x18 + iVar18);
local_54 = local_54 * (float)_DAT_007edef8;
fVar8 = (fVar6 - (float)(int)local_30) * fVar8;
*pfVar1 = _DAT_007edf08 * fVar8 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x18 + iVar10);
*pfVar1 = _DAT_007edf04 * fVar8 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x18 + iVar12);
*pfVar1 = _DAT_007edf00 * fVar8 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x1c + iVar18);
local_50 = fVar8 * (float)_DAT_007edef8;
local_4c = (fVar7 - (float)iVar14) * _DAT_007e75f0;
*pfVar1 = _DAT_007edf08 * local_4c + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x1c + iVar10);
*pfVar1 = _DAT_007edf04 * local_4c + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x1c + iVar12);
*pfVar1 = _DAT_007edf00 * local_4c + *pfVar1;
local_4c = local_4c * (float)_DAT_007edef8;
}
uVar16 = local_38;
if (0x3fe < (int)local_38) {
uVar16 = 0x3ff;
}
if ((int)uVar16 < 1) {
local_38 = 0;
}
else if (0x3fe < (int)local_38) {
local_38 = 0x3ff;
}
uVar16 = local_34;
if (0x3fe < (int)local_34) {
uVar16 = 0x3ff;
}
if ((int)uVar16 < 1) {
local_34 = 0;
}
else if (0x3fe < (int)local_34) {
local_34 = 0x3ff;
}
uVar16 = local_30;
if (0x3fe < (int)local_30) {
uVar16 = 0x3ff;
}
if ((int)uVar16 < 1) {
local_30 = 0;
}
else if (0x3fe < (int)local_30) {
local_30 = 0x3ff;
}
iVar17 = iVar14;
if (2 < iVar14) {
iVar17 = 3;
}
if (iVar17 < 1) {
iVar14 = 0;
}
else if (2 < iVar14) {
iVar14 = 3;
}
*local_8 = ((iVar14 << 10 | local_38) << 10 | local_34) << 10 | local_30;
local_8 = local_8 + iVar15;
param_3 = param_3 + iVar15 * 4;
iVar10 = iVar10 + iVar11;
iVar18 = iVar18 + iVar11;
iVar12 = iVar12 + iVar11;
param_2 = param_2 + 1;
} while (param_2 < *(uint *)(param_1 + 0x68));
}
return;
}
// --- FUN_005f8c92 at 0x005F8C92 (size: 951) ---
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
void __thiscall FUN_005f8c92(int param_1,uint param_2,float *param_3,int param_4)
{
float *pfVar1;
float fVar2;
int iVar3;
float fVar4;
float fVar5;
float fVar6;
float fVar7;
float fVar8;
uint uVar9;
int iVar10;
int iVar11;
uint uVar12;
int iVar13;
uint uVar14;
int iVar15;
int iVar16;
int iVar17;
ushort in_FPUControlWord;
float local_60;
float local_5c;
float local_58;
float local_54;
uint local_40;
uint local_3c;
uint local_38;
int local_34;
uint *local_8;
if (*(int *)(param_1 + 0x54) != 0) {
param_4 = FUN_005f40ea(param_4);
}
if (*(int *)(param_1 + 0x10) != 0) {
param_4 = FUN_005f560f(param_4);
}
local_60 = 0.0;
local_5c = 0.0;
local_58 = 0.0;
local_54 = 0.0;
local_8 = (uint *)(*(int *)(param_1 + 0x60) * param_2 +
(*(int *)(param_1 + 0x68) + -1) * (param_2 & 1) * 8 +
*(int *)(param_1 + 100) * (int)param_3 + *(int *)(param_1 + 0x20));
uVar9 = param_2 & 3;
uVar12 = (uint)param_3 & 3;
iVar3 = *(int *)(param_1 + 0x34);
if ((param_2 & 1) == 0) {
iVar17 = 0;
iVar16 = 1;
}
else {
iVar17 = *(int *)(param_1 + 0x68) + -1;
iVar16 = -1;
}
param_2 = (uint)in_FPUControlWord;
*(uint *)(param_1 + 0x7c) = param_2;
if (*(int *)(param_1 + 0x5c) != 0) {
FUN_005f592b(param_4);
}
param_2 = 0;
if (*(int *)(param_1 + 0x68) != 0) {
iVar10 = iVar16 * 0x10;
iVar11 = iVar17 * 0x10;
iVar13 = (iVar16 + iVar17) * 0x10;
iVar17 = (iVar17 - iVar16) * 0x10;
param_3 = (float *)(iVar11 + 8 + param_4);
do {
fVar8 = _DAT_007edf18;
fVar2 = *(float *)(iVar3 + (uVar12 + uVar9 * 8) * 4 + (param_2 & 3) * 4);
fVar4 = (local_60 + param_3[-2]) * _DAT_007edf1c;
fVar5 = (local_5c + param_3[-1]) * _DAT_007edf1c;
fVar6 = (local_58 + *param_3) * _DAT_007edf1c;
fVar7 = (local_54 + param_3[1]) * _DAT_007edf1c;
local_40 = (uint)ROUND(fVar4 + fVar2);
local_3c = (uint)ROUND(fVar5 + fVar2);
local_38 = (uint)ROUND(fVar6 + fVar2);
local_34 = (int)ROUND(fVar7 + fVar2);
if (*(int *)(param_1 + 0x5c) != 0) {
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x10 + iVar17);
local_60 = (fVar4 - (float)(int)local_40) * _DAT_007edf18;
*pfVar1 = _DAT_007edf08 * local_60 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x10 + iVar11);
*pfVar1 = _DAT_007edf04 * local_60 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x10 + iVar13);
*pfVar1 = _DAT_007edf00 * local_60 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x14 + iVar17);
local_60 = local_60 * (float)_DAT_007edef8;
local_5c = (fVar5 - (float)(int)local_3c) * fVar8;
*pfVar1 = _DAT_007edf08 * local_5c + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x14 + iVar11);
*pfVar1 = _DAT_007edf04 * local_5c + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x14 + iVar13);
*pfVar1 = _DAT_007edf00 * local_5c + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x18 + iVar17);
local_5c = local_5c * (float)_DAT_007edef8;
local_58 = (fVar6 - (float)(int)local_38) * fVar8;
*pfVar1 = _DAT_007edf08 * local_58 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x18 + iVar11);
*pfVar1 = _DAT_007edf04 * local_58 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x18 + iVar13);
*pfVar1 = _DAT_007edf00 * local_58 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x1c + iVar17);
local_58 = local_58 * (float)_DAT_007edef8;
fVar8 = (fVar7 - (float)local_34) * fVar8;
*pfVar1 = _DAT_007edf08 * fVar8 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x1c + iVar11);
*pfVar1 = _DAT_007edf04 * fVar8 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x1c + iVar13);
*pfVar1 = _DAT_007edf00 * fVar8 + *pfVar1;
local_54 = fVar8 * (float)_DAT_007edef8;
}
uVar14 = local_40;
if (0xfffe < (int)local_40) {
uVar14 = 0xffff;
}
if ((int)uVar14 < 1) {
local_40 = 0;
}
else if (0xfffe < (int)local_40) {
local_40 = 0xffff;
}
uVar14 = local_3c;
if (0xfffe < (int)local_3c) {
uVar14 = 0xffff;
}
if ((int)uVar14 < 1) {
local_3c = 0;
}
else if (0xfffe < (int)local_3c) {
local_3c = 0xffff;
}
uVar14 = local_38;
if (0xfffe < (int)local_38) {
uVar14 = 0xffff;
}
if ((int)uVar14 < 1) {
local_38 = 0;
}
else if (0xfffe < (int)local_38) {
local_38 = 0xffff;
}
iVar15 = local_34;
if (0xfffe < local_34) {
iVar15 = 0xffff;
}
if (iVar15 < 1) {
local_34 = 0;
}
else if (0xfffe < local_34) {
local_34 = 0xffff;
}
*local_8 = local_3c << 0x10 | local_40;
local_8[1] = ((local_34 << 0x10 | local_38) >> 0x10 | (int)local_3c >> 0x1f) << 0x10 |
(local_38 << 0x10 | local_3c) >> 0x10 | (int)local_40 >> 0x1f;
local_8 = local_8 + iVar16 * 2;
param_3 = param_3 + iVar16 * 4;
iVar17 = iVar17 + iVar10;
iVar13 = iVar13 + iVar10;
iVar11 = iVar11 + iVar10;
param_2 = param_2 + 1;
} while (param_2 < *(uint *)(param_1 + 0x68));
}
return;
}
// --- FUN_005f9049 at 0x005F9049 (size: 584) ---
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
void __thiscall FUN_005f9049(int param_1,uint param_2,uint param_3,uint param_4)
{
int iVar1;
float fVar2;
int iVar3;
uint uVar4;
float *pfVar5;
int iVar6;
uint uVar7;
int iVar8;
int iVar9;
ushort *puVar10;
int iVar11;
float *pfVar12;
undefined2 in_FPUControlWord;
float local_3c;
uint local_18;
float local_14;
if (*(int *)(param_1 + 0x54) != 0) {
param_4 = FUN_005f40ea(param_4);
}
if (*(int *)(param_1 + 0x10) != 0) {
param_4 = FUN_005f560f(param_4);
}
iVar3 = param_4;
local_3c = 0.0;
uVar4 = param_2 & 3;
uVar7 = param_3 & 3;
iVar1 = *(int *)(param_1 + 0x34);
puVar10 = (ushort *)
(*(int *)(param_1 + 0x60) * param_2 +
(*(int *)(param_1 + 0x68) + -1) * (param_2 & 1) * 2 + *(int *)(param_1 + 100) * param_3
+ *(int *)(param_1 + 0x20));
if ((param_2 & 1) == 0) {
iVar11 = 0;
param_2 = 1;
}
else {
iVar11 = *(int *)(param_1 + 0x68) + -1;
param_2 = -1;
}
param_3 = CONCAT22(param_3._2_2_,in_FPUControlWord);
*(uint *)(param_1 + 0x7c) = param_3;
if (*(int *)(param_1 + 0x5c) != 0) {
FUN_005f592b(param_4);
}
param_3 = 0;
if (*(int *)(param_1 + 0x68) != 0) {
iVar8 = (iVar11 - param_2) * 0x10;
pfVar12 = (float *)(iVar11 * 0x10 + 8 + param_4);
iVar11 = (param_2 + iVar11) * 0x10;
do {
pfVar5 = *(float **)(param_1 + 0x38);
local_18 = 0;
param_4 = 0;
local_14 = 3.4028235e+38;
do {
fVar2 = (pfVar12[-2] - *pfVar5) * (pfVar12[-2] - *pfVar5) +
(pfVar12[-1] - pfVar5[1]) * (pfVar12[-1] - pfVar5[1]) +
(*pfVar12 - pfVar5[2]) * (*pfVar12 - pfVar5[2]);
if (fVar2 < local_14) {
local_18 = param_4;
local_14 = fVar2;
}
param_4 = param_4 + 1;
pfVar5 = pfVar5 + 4;
} while (param_4 < 0x100);
fVar2 = (local_3c + pfVar12[1]) * _DAT_00797188;
iVar6 = (int)ROUND(fVar2 + *(float *)(iVar1 + (uVar7 + uVar4 * 8) * 4 + (param_3 & 3) * 4));
if (*(int *)(param_1 + 0x5c) != 0) {
pfVar5 = (float *)(*(int *)(param_1 + 0x5c) + 0x1c + iVar8);
local_3c = (fVar2 - (float)iVar6) * _DAT_00799208;
*pfVar5 = _DAT_007edf08 * local_3c + *pfVar5;
pfVar5 = (float *)((*(int *)(param_1 + 0x5c) - iVar3) + 0x14 + (int)pfVar12);
*pfVar5 = _DAT_007edf04 * local_3c + *pfVar5;
pfVar5 = (float *)(*(int *)(param_1 + 0x5c) + 0x1c + iVar11);
*pfVar5 = _DAT_007edf00 * local_3c + *pfVar5;
local_3c = local_3c * (float)_DAT_007edef8;
}
iVar9 = iVar6;
if (0xfe < iVar6) {
iVar9 = 0xff;
}
if (iVar9 < 1) {
iVar6 = 0;
}
else if (0xfe < iVar6) {
iVar6 = 0xff;
}
pfVar12 = pfVar12 + param_2 * 4;
iVar11 = iVar11 + param_2 * 0x10;
*puVar10 = (ushort)(byte)iVar6 << 8 | (ushort)local_18;
iVar8 = iVar8 + param_2 * 0x10;
puVar10 = puVar10 + param_2;
param_3 = param_3 + 1;
} while (param_3 < *(uint *)(param_1 + 0x68));
}
return;
}
// --- FUN_005f9291 at 0x005F9291 (size: 199) ---
void __thiscall FUN_005f9291(int param_1,uint param_2,float param_3,uint param_4)
{
float fVar1;
undefined1 *puVar2;
float *pfVar3;
uint uVar4;
float *pfVar5;
if (*(int *)(param_1 + 0x54) != 0) {
param_4 = FUN_005f40ea(param_4);
}
if (*(int *)(param_1 + 0x10) != 0) {
param_4 = FUN_005f560f(param_4);
}
puVar2 = (undefined1 *)
(*(int *)(param_1 + 0x60) * param_2 + *(int *)(param_1 + 100) * (int)param_3 +
*(int *)(param_1 + 0x20));
param_2 = 0;
if (*(int *)(param_1 + 0x68) != 0) {
pfVar5 = (float *)(param_4 + 8);
do {
pfVar3 = *(float **)(param_1 + 0x38);
uVar4 = 0;
param_4 = 0;
param_3 = 3.4028235e+38;
do {
fVar1 = (pfVar5[-2] - *pfVar3) * (pfVar5[-2] - *pfVar3) +
(pfVar5[-1] - pfVar3[1]) * (pfVar5[-1] - pfVar3[1]) +
(*pfVar5 - pfVar3[2]) * (*pfVar5 - pfVar3[2]) +
(pfVar5[1] - pfVar3[3]) * (pfVar5[1] - pfVar3[3]);
if (fVar1 < param_3) {
uVar4 = param_4;
param_3 = fVar1;
}
param_4 = param_4 + 1;
pfVar3 = pfVar3 + 4;
} while (param_4 < 0x100);
*puVar2 = (char)uVar4;
puVar2 = puVar2 + 1;
param_2 = param_2 + 1;
pfVar5 = pfVar5 + 4;
} while (param_2 < *(uint *)(param_1 + 0x68));
}
return;
}
// --- FUN_005f9358 at 0x005F9358 (size: 489) ---
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
void __thiscall FUN_005f9358(int param_1,uint param_2,uint param_3,float *param_4)
{
int iVar1;
float fVar2;
uint uVar3;
float *pfVar4;
int iVar5;
uint uVar6;
uint uVar7;
int iVar8;
int iVar9;
int iVar10;
int iVar11;
undefined1 *puVar12;
undefined2 in_FPUControlWord;
float local_38;
int local_8;
if (*(int *)(param_1 + 0x54) != 0) {
param_4 = (float *)FUN_005f40ea(param_4);
}
if (*(int *)(param_1 + 0x10) != 0) {
param_4 = (float *)FUN_005f560f(param_4);
}
local_38 = 0.0;
uVar3 = param_2 & 3;
uVar6 = param_3 & 3;
puVar12 = (undefined1 *)
(*(int *)(param_1 + 0x60) * param_2 + *(int *)(param_1 + 100) * param_3 +
(*(int *)(param_1 + 0x68) + -1) * (param_2 & 1) + *(int *)(param_1 + 0x20));
iVar1 = *(int *)(param_1 + 0x34);
if ((param_2 & 1) == 0) {
iVar10 = 0;
param_2 = 1;
}
else {
iVar10 = *(int *)(param_1 + 0x68) + -1;
param_2 = -1;
}
param_3 = CONCAT22(param_3._2_2_,in_FPUControlWord);
*(uint *)(param_1 + 0x7c) = param_3;
uVar7 = 0;
pfVar4 = param_4;
if (*(int *)(param_1 + 0x68) != 0) {
do {
uVar7 = uVar7 + 1;
*pfVar4 = *pfVar4 * _DAT_007eb2cc + pfVar4[1] * _DAT_007eb2d0 + pfVar4[2] * _DAT_007eb2d4;
pfVar4 = pfVar4 + 4;
} while (uVar7 < *(uint *)(param_1 + 0x68));
}
if (*(int *)(param_1 + 0x5c) != 0) {
FUN_005f592b(param_4);
}
param_3 = 0;
if (*(int *)(param_1 + 0x68) != 0) {
iVar8 = param_2 * 0x10;
iVar5 = iVar10 << 4;
iVar9 = (param_2 + iVar10) * 0x10;
local_8 = (iVar10 - param_2) * 0x10;
do {
fVar2 = (local_38 + *(float *)(iVar5 + (int)param_4)) * _DAT_00797188;
iVar10 = (int)ROUND(fVar2 + *(float *)(iVar1 + (uVar6 + uVar3 * 8) * 4 + (param_3 & 3) * 4));
if (*(int *)(param_1 + 0x5c) != 0) {
pfVar4 = (float *)(local_8 + 0x10 + *(int *)(param_1 + 0x5c));
local_38 = (fVar2 - (float)iVar10) * _DAT_00799208;
*pfVar4 = _DAT_007edf08 * local_38 + *pfVar4;
pfVar4 = (float *)(iVar5 + 0x10 + *(int *)(param_1 + 0x5c));
*pfVar4 = _DAT_007edf04 * local_38 + *pfVar4;
pfVar4 = (float *)(iVar9 + 0x10 + *(int *)(param_1 + 0x5c));
*pfVar4 = _DAT_007edf00 * local_38 + *pfVar4;
local_38 = local_38 * (float)_DAT_007edef8;
}
iVar11 = iVar10;
if (0xfe < iVar10) {
iVar11 = 0xff;
}
if (iVar11 < 1) {
iVar10 = 0;
}
else if (0xfe < iVar10) {
iVar10 = 0xff;
}
*puVar12 = (char)iVar10;
local_8 = local_8 + iVar8;
puVar12 = puVar12 + param_2;
iVar5 = iVar5 + iVar8;
iVar9 = iVar9 + iVar8;
param_3 = param_3 + 1;
} while (param_3 < *(uint *)(param_1 + 0x68));
}
return;
}
// --- FUN_005f9541 at 0x005F9541 (size: 654) ---
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
void __thiscall FUN_005f9541(int param_1,uint param_2,uint param_3,float *param_4)
{
float fVar1;
int iVar2;
float fVar3;
float fVar4;
float fVar5;
uint uVar6;
float *pfVar7;
int iVar8;
uint uVar9;
uint uVar10;
int iVar11;
int iVar12;
int iVar13;
int iVar14;
int iVar15;
ushort in_FPUControlWord;
float local_50;
float local_44;
int local_30;
int local_24;
ushort *local_8;
if (*(int *)(param_1 + 0x54) != 0) {
param_4 = (float *)FUN_005f40ea(param_4);
}
if (*(int *)(param_1 + 0x10) != 0) {
param_4 = (float *)FUN_005f560f(param_4);
}
local_50 = 0.0;
local_44 = 0.0;
local_8 = (ushort *)
(*(int *)(param_1 + 0x60) * param_2 +
(*(int *)(param_1 + 0x68) + -1) * (param_2 & 1) * 2 + *(int *)(param_1 + 100) * param_3
+ *(int *)(param_1 + 0x20));
uVar6 = param_2 & 3;
uVar9 = param_3 & 3;
iVar2 = *(int *)(param_1 + 0x34);
if ((param_2 & 1) == 0) {
iVar13 = 0;
iVar14 = 1;
param_3 = 1;
}
else {
iVar13 = *(int *)(param_1 + 0x68) + -1;
param_3 = -1;
iVar14 = -1;
}
param_2 = (uint)in_FPUControlWord;
*(uint *)(param_1 + 0x7c) = param_2;
uVar10 = 0;
pfVar7 = param_4;
if (*(int *)(param_1 + 0x68) != 0) {
do {
uVar10 = uVar10 + 1;
*pfVar7 = *pfVar7 * _DAT_007eb2cc + pfVar7[1] * _DAT_007eb2d0 + pfVar7[2] * _DAT_007eb2d4;
pfVar7 = pfVar7 + 4;
} while (uVar10 < *(uint *)(param_1 + 0x68));
}
if (*(int *)(param_1 + 0x5c) != 0) {
FUN_005f592b(param_4);
}
param_2 = 0;
if (*(int *)(param_1 + 0x68) != 0) {
iVar11 = iVar14 * 0x10;
iVar8 = iVar13 << 4;
iVar15 = (iVar14 + iVar13) * 0x10;
iVar13 = (iVar13 - param_3) * 0x10;
do {
fVar5 = _DAT_00799208;
fVar1 = *(float *)(iVar2 + (uVar9 + uVar6 * 8) * 4 + (param_2 & 3) * 4);
fVar3 = (local_50 + *(float *)((int)param_4 + iVar8)) * _DAT_00797188;
fVar4 = (local_44 + ((float *)((int)param_4 + iVar8))[3]) * _DAT_00797188;
local_30 = (int)ROUND(fVar3 + fVar1);
local_24 = (int)ROUND(fVar4 + fVar1);
if (*(int *)(param_1 + 0x5c) != 0) {
pfVar7 = (float *)(iVar13 + 0x10 + *(int *)(param_1 + 0x5c));
local_50 = (fVar3 - (float)local_30) * _DAT_00799208;
*pfVar7 = _DAT_007edf08 * local_50 + *pfVar7;
pfVar7 = (float *)(iVar8 + 0x10 + *(int *)(param_1 + 0x5c));
*pfVar7 = _DAT_007edf04 * local_50 + *pfVar7;
pfVar7 = (float *)(iVar15 + 0x10 + *(int *)(param_1 + 0x5c));
*pfVar7 = _DAT_007edf00 * local_50 + *pfVar7;
pfVar7 = (float *)(iVar13 + 0x1c + *(int *)(param_1 + 0x5c));
local_50 = local_50 * (float)_DAT_007edef8;
fVar5 = (fVar4 - (float)local_24) * fVar5;
*pfVar7 = _DAT_007edf08 * fVar5 + *pfVar7;
pfVar7 = (float *)(iVar8 + 0x1c + *(int *)(param_1 + 0x5c));
*pfVar7 = _DAT_007edf04 * fVar5 + *pfVar7;
pfVar7 = (float *)(iVar15 + 0x1c + *(int *)(param_1 + 0x5c));
*pfVar7 = _DAT_007edf00 * fVar5 + *pfVar7;
local_44 = fVar5 * (float)_DAT_007edef8;
}
iVar12 = local_30;
if (0xfe < local_30) {
iVar12 = 0xff;
}
if (iVar12 < 1) {
local_30 = 0;
}
else if (0xfe < local_30) {
local_30 = 0xff;
}
iVar12 = local_24;
if (0xfe < local_24) {
iVar12 = 0xff;
}
if (iVar12 < 1) {
local_24 = 0;
}
else if (0xfe < local_24) {
local_24 = 0xff;
}
iVar8 = iVar8 + iVar11;
iVar13 = iVar13 + iVar11;
iVar15 = iVar15 + iVar11;
*local_8 = (ushort)(byte)local_24 << 8 | (ushort)local_30;
local_8 = local_8 + iVar14;
param_2 = param_2 + 1;
} while (param_2 < *(uint *)(param_1 + 0x68));
}
return;
}
// --- FUN_005f97cf at 0x005F97CF (size: 673) ---
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
void __thiscall FUN_005f97cf(int param_1,uint param_2,uint param_3,float *param_4)
{
float fVar1;
int iVar2;
float fVar3;
float fVar4;
float fVar5;
uint uVar6;
float *pfVar7;
int iVar8;
uint uVar9;
uint uVar10;
int iVar11;
int iVar12;
int iVar13;
int iVar14;
byte *pbVar15;
undefined2 in_FPUControlWord;
float local_54;
float local_48;
int local_34;
undefined4 local_c;
uint local_8;
if (*(int *)(param_1 + 0x54) != 0) {
param_4 = (float *)FUN_005f40ea(param_4);
}
if (*(int *)(param_1 + 0x10) != 0) {
param_4 = (float *)FUN_005f560f(param_4);
}
local_54 = 0.0;
local_48 = 0.0;
uVar6 = param_2 & 3;
uVar9 = param_3 & 3;
pbVar15 = (byte *)((*(int *)(param_1 + 0x68) + -1) * (param_2 & 1) +
*(int *)(param_1 + 0x60) * param_2 + *(int *)(param_1 + 100) * param_3 +
*(int *)(param_1 + 0x20));
iVar2 = *(int *)(param_1 + 0x34);
if ((param_2 & 1) == 0) {
param_3 = 0;
param_2 = 1;
}
else {
param_3 = *(int *)(param_1 + 0x68) + -1;
param_2 = -1;
}
local_c = CONCAT22(local_c._2_2_,in_FPUControlWord);
*(undefined4 *)(param_1 + 0x7c) = local_c;
uVar10 = 0;
pfVar7 = param_4;
if (*(int *)(param_1 + 0x68) != 0) {
do {
uVar10 = uVar10 + 1;
*pfVar7 = pfVar7[1] * _DAT_007eb2d0 + *pfVar7 * _DAT_007eb2cc + pfVar7[2] * _DAT_007eb2d4;
pfVar7 = pfVar7 + 4;
} while (uVar10 < *(uint *)(param_1 + 0x68));
}
if (*(int *)(param_1 + 0x5c) != 0) {
FUN_005f592b(param_4);
}
local_8 = 0;
if (*(int *)(param_1 + 0x68) != 0) {
iVar11 = param_2 * 0x10;
iVar14 = (param_2 + param_3) * 0x10;
iVar8 = param_3 << 4;
param_3 = (param_3 - param_2) * 0x10;
do {
fVar5 = _DAT_0079cc80;
fVar1 = *(float *)(iVar2 + (uVar9 + uVar6 * 8) * 4 + (local_8 & 3) * 4);
fVar3 = (local_54 + *(float *)((int)param_4 + iVar8)) * _DAT_0079c6d8;
fVar4 = (local_48 + ((float *)((int)param_4 + iVar8))[3]) * _DAT_0079c6d8;
local_34 = (int)ROUND(fVar3 + fVar1);
iVar12 = (int)ROUND(fVar4 + fVar1);
if (*(int *)(param_1 + 0x5c) != 0) {
pfVar7 = (float *)(*(int *)(param_1 + 0x5c) + 0x10 + param_3);
local_54 = (fVar3 - (float)local_34) * _DAT_0079cc80;
*pfVar7 = _DAT_007edf08 * local_54 + *pfVar7;
pfVar7 = (float *)(*(int *)(param_1 + 0x5c) + 0x10 + iVar8);
*pfVar7 = _DAT_007edf04 * local_54 + *pfVar7;
pfVar7 = (float *)(*(int *)(param_1 + 0x5c) + 0x10 + iVar14);
*pfVar7 = _DAT_007edf00 * local_54 + *pfVar7;
pfVar7 = (float *)(*(int *)(param_1 + 0x5c) + 0x1c + param_3);
local_54 = local_54 * (float)_DAT_007edef8;
fVar5 = (fVar4 - (float)iVar12) * fVar5;
*pfVar7 = _DAT_007edf08 * fVar5 + *pfVar7;
pfVar7 = (float *)(*(int *)(param_1 + 0x5c) + 0x1c + iVar8);
*pfVar7 = _DAT_007edf04 * fVar5 + *pfVar7;
pfVar7 = (float *)(*(int *)(param_1 + 0x5c) + 0x1c + iVar14);
*pfVar7 = _DAT_007edf00 * fVar5 + *pfVar7;
local_48 = fVar5 * (float)_DAT_007edef8;
}
iVar13 = local_34;
if (0xe < local_34) {
iVar13 = 0xf;
}
if (iVar13 < 1) {
local_34 = 0;
}
else if (0xe < local_34) {
local_34 = 0xf;
}
iVar13 = iVar12;
if (0xe < iVar12) {
iVar13 = 0xf;
}
if (iVar13 < 1) {
iVar12 = 0;
}
else if (0xe < iVar12) {
iVar12 = 0xf;
}
*pbVar15 = (char)iVar12 << 4 | (byte)local_34;
param_3 = param_3 + iVar11;
pbVar15 = pbVar15 + param_2;
iVar14 = iVar14 + iVar11;
iVar8 = iVar8 + iVar11;
local_8 = local_8 + 1;
} while (local_8 < *(uint *)(param_1 + 0x68));
}
return;
}
// --- FUN_005f9a70 at 0x005F9A70 (size: 615) ---
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
void __thiscall FUN_005f9a70(int param_1,uint param_2,uint param_3,int param_4)
{
float *pfVar1;
float fVar2;
int iVar3;
float fVar4;
float fVar5;
float fVar6;
uint uVar7;
int iVar8;
uint uVar9;
int iVar10;
int iVar11;
int iVar12;
int iVar13;
int iVar14;
ushort in_FPUControlWord;
int iVar15;
float local_50;
float local_4c;
int local_30;
undefined2 *local_8;
if (*(int *)(param_1 + 0x54) != 0) {
param_4 = FUN_005f40ea(param_4);
}
if (*(int *)(param_1 + 0x10) != 0) {
param_4 = FUN_005f560f(param_4);
}
local_50 = 0.0;
local_4c = 0.0;
uVar7 = param_2 & 3;
uVar9 = param_3 & 3;
local_8 = (undefined2 *)
(*(int *)(param_1 + 0x60) * param_2 +
(*(int *)(param_1 + 0x68) + -1) * (param_2 & 1) * 2 + *(int *)(param_1 + 100) * param_3
+ *(int *)(param_1 + 0x20));
iVar3 = *(int *)(param_1 + 0x34);
if ((param_2 & 1) == 0) {
iVar12 = 0;
iVar13 = 1;
param_3 = 1;
}
else {
iVar12 = *(int *)(param_1 + 0x68) + -1;
param_3 = -1;
iVar13 = -1;
}
param_2 = (uint)in_FPUControlWord;
*(uint *)(param_1 + 0x7c) = param_2;
if (*(int *)(param_1 + 0x5c) != 0) {
FUN_005f592b(param_4);
}
param_2 = 0;
if (*(int *)(param_1 + 0x68) != 0) {
iVar10 = iVar13 * 0x10;
iVar8 = iVar12 << 4;
iVar14 = (iVar13 + iVar12) * 0x10;
iVar12 = (iVar12 - param_3) * 0x10;
do {
fVar6 = _DAT_007edf20;
fVar2 = *(float *)(iVar3 + (uVar9 + uVar7 * 8) * 4 + (param_2 & 3) * 4);
fVar4 = (local_50 + *(float *)(param_4 + iVar8)) * _DAT_007edf24;
fVar5 = (local_4c + ((float *)(param_4 + iVar8))[1]) * _DAT_007edf24;
local_30 = (int)ROUND(fVar4 + fVar2);
iVar15 = (int)ROUND(fVar5 + fVar2);
if (*(int *)(param_1 + 0x5c) != 0) {
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x10 + iVar12);
local_50 = (fVar4 - (float)local_30) * _DAT_007edf20;
*pfVar1 = _DAT_007edf08 * local_50 + *pfVar1;
pfVar1 = (float *)(iVar8 + 0x10 + *(int *)(param_1 + 0x5c));
*pfVar1 = _DAT_007edf04 * local_50 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x10 + iVar14);
*pfVar1 = _DAT_007edf00 * local_50 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x14 + iVar12);
local_50 = local_50 * (float)_DAT_007edef8;
fVar6 = (fVar5 - (float)iVar15) * fVar6;
*pfVar1 = _DAT_007edf08 * fVar6 + *pfVar1;
pfVar1 = (float *)(iVar8 + 0x14 + *(int *)(param_1 + 0x5c));
*pfVar1 = _DAT_007edf04 * fVar6 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x14 + iVar14);
*pfVar1 = _DAT_007edf00 * fVar6 + *pfVar1;
local_4c = fVar6 * (float)_DAT_007edef8;
}
iVar11 = local_30;
if (0x7e < local_30) {
iVar11 = 0x7f;
}
if (iVar11 < -0x7e) {
local_30 = -0x7f;
}
else if (0x7e < local_30) {
local_30 = 0x7f;
}
iVar11 = iVar15;
if (0x7e < iVar15) {
iVar11 = 0x7f;
}
if (iVar11 < -0x7e) {
iVar15 = -0x7f;
}
else if (0x7e < iVar15) {
iVar15 = 0x7f;
}
iVar8 = iVar8 + iVar10;
iVar12 = iVar12 + iVar10;
iVar14 = iVar14 + iVar10;
*local_8 = CONCAT11((char)iVar15,(undefined1)local_30);
local_8 = local_8 + iVar13;
param_2 = param_2 + 1;
} while (param_2 < *(uint *)(param_1 + 0x68));
}
return;
}
// --- FUN_005f9cd7 at 0x005F9CD7 (size: 795) ---
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
void __thiscall FUN_005f9cd7(int param_1,uint param_2,uint param_3,float *param_4)
{
float *pfVar1;
float fVar2;
int iVar3;
float fVar4;
float fVar5;
float fVar6;
float fVar7;
uint uVar8;
int iVar9;
int iVar10;
uint uVar11;
int iVar12;
uint uVar13;
int iVar14;
int iVar15;
int iVar16;
ushort in_FPUControlWord;
uint uVar17;
int iVar18;
float local_58;
float local_54;
float local_4c;
int local_38;
ushort *local_8;
if (*(int *)(param_1 + 0x54) != 0) {
param_4 = (float *)FUN_005f40ea(param_4);
}
if (*(int *)(param_1 + 0x10) != 0) {
param_4 = (float *)FUN_005f560f(param_4);
}
local_58 = 0.0;
local_54 = 0.0;
local_4c = 0.0;
local_8 = (ushort *)
(*(int *)(param_1 + 0x60) * param_2 +
(*(int *)(param_1 + 0x68) + -1) * (param_2 & 1) * 2 + *(int *)(param_1 + 100) * param_3
+ *(int *)(param_1 + 0x20));
uVar8 = param_2 & 3;
uVar11 = param_3 & 3;
iVar3 = *(int *)(param_1 + 0x34);
if ((param_2 & 1) == 0) {
iVar12 = 0;
iVar15 = 1;
param_3 = 1;
}
else {
iVar12 = *(int *)(param_1 + 0x68) + -1;
param_3 = -1;
iVar15 = -1;
}
param_2 = (uint)in_FPUControlWord;
*(uint *)(param_1 + 0x7c) = param_2;
if (*(int *)(param_1 + 0x5c) != 0) {
FUN_005f592b(param_4);
}
param_2 = 0;
if (*(int *)(param_1 + 0x68) != 0) {
iVar10 = iVar15 * 0x10;
iVar9 = iVar12 * 0x10;
iVar16 = (iVar15 + iVar12) * 0x10;
iVar12 = (iVar12 - param_3) * 0x10;
param_4 = (float *)(iVar9 + 0xc + (int)param_4);
do {
fVar7 = _DAT_0079cc80;
fVar2 = *(float *)(iVar3 + (uVar11 + uVar8 * 8) * 4 + (param_2 & 3) * 4);
fVar4 = (local_58 + param_4[-3]) * _DAT_0079c6d8;
fVar5 = (local_54 + param_4[-2]) * _DAT_0079c6d8;
fVar6 = (local_4c + *param_4) * _DAT_007edee4;
local_38 = (int)ROUND(fVar4 + fVar2);
uVar17 = (uint)ROUND(fVar5 + fVar2);
iVar18 = (int)ROUND(fVar6 + fVar2);
if (*(int *)(param_1 + 0x5c) != 0) {
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x10 + iVar12);
local_58 = (fVar4 - (float)local_38) * _DAT_0079cc80;
*pfVar1 = _DAT_007edf08 * local_58 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x10 + iVar9);
*pfVar1 = _DAT_007edf04 * local_58 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x10 + iVar16);
*pfVar1 = _DAT_007edf00 * local_58 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x14 + iVar12);
local_58 = local_58 * (float)_DAT_007edef8;
fVar7 = (fVar5 - (float)(int)uVar17) * fVar7;
*pfVar1 = _DAT_007edf08 * fVar7 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x14 + iVar9);
*pfVar1 = _DAT_007edf04 * fVar7 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x14 + iVar16);
*pfVar1 = _DAT_007edf00 * fVar7 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x1c + iVar12);
local_54 = fVar7 * (float)_DAT_007edef8;
local_4c = (fVar6 - (float)iVar18) * _DAT_007edee0;
*pfVar1 = _DAT_007edf08 * local_4c + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x1c + iVar9);
*pfVar1 = _DAT_007edf04 * local_4c + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x1c + iVar16);
*pfVar1 = _DAT_007edf00 * local_4c + *pfVar1;
local_4c = local_4c * (float)_DAT_007edef8;
}
iVar14 = local_38;
if (0xe < local_38) {
iVar14 = 0xf;
}
if (iVar14 < -0xe) {
local_38 = -0xf;
}
else if (0xe < local_38) {
local_38 = 0xf;
}
uVar13 = uVar17;
if (0xe < (int)uVar17) {
uVar13 = 0xf;
}
if ((int)uVar13 < -0xe) {
uVar17 = 0xfffffff1;
}
else if (0xe < (int)uVar17) {
uVar17 = 0xf;
}
iVar14 = iVar18;
if (0x3e < iVar18) {
iVar14 = 0x3f;
}
if (iVar14 < -0x3e) {
iVar18 = -0x3f;
}
else if (0x3e < iVar18) {
iVar18 = 0x3f;
}
*local_8 = (ushort)((uVar17 & 0x1f | iVar18 << 5) << 5) | (ushort)local_38 & 0x1f;
local_8 = local_8 + iVar15;
param_4 = param_4 + iVar15 * 4;
iVar12 = iVar12 + iVar10;
iVar9 = iVar9 + iVar10;
iVar16 = iVar16 + iVar10;
param_2 = param_2 + 1;
} while (param_2 < *(uint *)(param_1 + 0x68));
}
return;
}
// --- FUN_005f9ff2 at 0x005F9FF2 (size: 793) ---
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
void __thiscall FUN_005f9ff2(int param_1,uint param_2,uint param_3,float *param_4)
{
float *pfVar1;
float fVar2;
int iVar3;
float fVar4;
float fVar5;
float fVar6;
float fVar7;
uint uVar8;
int iVar9;
uint uVar10;
int iVar11;
uint uVar12;
int iVar13;
int iVar14;
int iVar15;
int iVar16;
ushort in_FPUControlWord;
float local_54;
float local_50;
float local_48;
uint local_34;
uint local_30;
int local_28;
uint *local_8;
if (*(int *)(param_1 + 0x54) != 0) {
param_4 = (float *)FUN_005f40ea(param_4);
}
if (*(int *)(param_1 + 0x10) != 0) {
param_4 = (float *)FUN_005f560f(param_4);
}
local_54 = 0.0;
local_50 = 0.0;
local_48 = 0.0;
uVar8 = param_2 & 3;
uVar10 = param_3 & 3;
local_8 = (uint *)(*(int *)(param_1 + 0x60) * param_2 +
(*(int *)(param_1 + 0x68) + -1) * (param_2 & 1) * 4 +
*(int *)(param_1 + 100) * param_3 + *(int *)(param_1 + 0x20));
iVar3 = *(int *)(param_1 + 0x34);
if ((param_2 & 1) == 0) {
iVar14 = 0;
iVar15 = 1;
param_3 = 1;
}
else {
iVar14 = *(int *)(param_1 + 0x68) + -1;
param_3 = -1;
iVar15 = -1;
}
param_2 = (uint)in_FPUControlWord;
*(uint *)(param_1 + 0x7c) = param_2;
if (*(int *)(param_1 + 0x5c) != 0) {
FUN_005f592b(param_4);
}
param_2 = 0;
if (*(int *)(param_1 + 0x68) != 0) {
iVar11 = iVar15 * 0x10;
iVar9 = iVar14 * 0x10;
param_4 = (float *)(iVar9 + 0xc + (int)param_4);
iVar16 = (iVar15 + iVar14) * 0x10;
iVar14 = (iVar14 - param_3) * 0x10;
do {
fVar7 = _DAT_007edf20;
fVar2 = *(float *)(iVar3 + (uVar10 + uVar8 * 8) * 4 + (param_2 & 3) * 4);
fVar4 = (local_54 + param_4[-3]) * _DAT_007edf24;
fVar5 = (local_50 + param_4[-2]) * _DAT_007edf24;
fVar6 = (local_48 + *param_4) * _DAT_00797188;
local_34 = (uint)ROUND(fVar4 + fVar2);
local_30 = (uint)ROUND(fVar5 + fVar2);
local_28 = (int)ROUND(fVar6 + fVar2);
if (*(int *)(param_1 + 0x5c) != 0) {
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x10 + iVar14);
local_54 = (fVar4 - (float)(int)local_34) * _DAT_007edf20;
*pfVar1 = _DAT_007edf08 * local_54 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x10 + iVar9);
*pfVar1 = _DAT_007edf04 * local_54 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x10 + iVar16);
*pfVar1 = _DAT_007edf00 * local_54 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x14 + iVar14);
local_54 = local_54 * (float)_DAT_007edef8;
fVar7 = (fVar5 - (float)(int)local_30) * fVar7;
*pfVar1 = _DAT_007edf08 * fVar7 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x14 + iVar9);
*pfVar1 = _DAT_007edf04 * fVar7 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x14 + iVar16);
*pfVar1 = _DAT_007edf00 * fVar7 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x1c + iVar14);
local_50 = fVar7 * (float)_DAT_007edef8;
local_48 = (fVar6 - (float)local_28) * _DAT_00799208;
*pfVar1 = _DAT_007edf08 * local_48 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x1c + iVar9);
*pfVar1 = _DAT_007edf04 * local_48 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x1c + iVar16);
*pfVar1 = _DAT_007edf00 * local_48 + *pfVar1;
local_48 = local_48 * (float)_DAT_007edef8;
}
uVar12 = local_34;
if (0x7e < (int)local_34) {
uVar12 = 0x7f;
}
if ((int)uVar12 < -0x7e) {
local_34 = 0xffffff81;
}
else if (0x7e < (int)local_34) {
local_34 = 0x7f;
}
uVar12 = local_30;
if (0x7e < (int)local_30) {
uVar12 = 0x7f;
}
if ((int)uVar12 < -0x7e) {
local_30 = 0xffffff81;
}
else if (0x7e < (int)local_30) {
local_30 = 0x7f;
}
iVar13 = local_28;
if (0xfe < local_28) {
iVar13 = 0xff;
}
if (iVar13 < -0xfe) {
local_28 = -0xff;
}
else if (0xfe < local_28) {
local_28 = 0xff;
}
*local_8 = (uint)CONCAT11((undefined1)local_28,(undefined1)local_30) << 8 | local_34 & 0xff;
local_8 = local_8 + iVar15;
param_4 = param_4 + iVar15 * 4;
iVar9 = iVar9 + iVar11;
iVar14 = iVar14 + iVar11;
iVar16 = iVar16 + iVar11;
param_2 = param_2 + 1;
} while (param_2 < *(uint *)(param_1 + 0x68));
}
return;
}
// --- FUN_005fa30b at 0x005FA30B (size: 33) ---
undefined4 * __thiscall FUN_005fa30b(undefined4 *param_1,undefined4 param_2)
{
FUN_005f518f(param_2,0x18,1);
*param_1 = &PTR_FUN_007edf28;
return param_1;
}
// --- FUN_005fa32c at 0x005FA32C (size: 33) ---
undefined4 * __thiscall FUN_005fa32c(undefined4 *param_1,undefined4 param_2)
{
FUN_005f518f(param_2,0x20,1);
*param_1 = &PTR_FUN_007edf38;
return param_1;
}
// --- FUN_005fa34d at 0x005FA34D (size: 33) ---
undefined4 * __thiscall FUN_005fa34d(undefined4 *param_1,undefined4 param_2)
{
FUN_005f518f(param_2,0x20,1);
*param_1 = &PTR_FUN_007edf48;
return param_1;
}
// --- FUN_005fa36e at 0x005FA36E (size: 940) ---
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
void __thiscall FUN_005fa36e(int param_1,uint param_2,float *param_3,int param_4)
{
float *pfVar1;
float fVar2;
int iVar3;
float fVar4;
float fVar5;
float fVar6;
float fVar7;
float fVar8;
uint uVar9;
int iVar10;
int iVar11;
int iVar12;
uint uVar13;
int iVar14;
uint uVar15;
int iVar16;
int iVar17;
ushort in_FPUControlWord;
uint uVar18;
int iVar19;
float local_58;
float local_54;
float local_50;
float local_4c;
uint local_38;
uint local_34;
uint *local_8;
if (*(int *)(param_1 + 0x54) != 0) {
param_4 = FUN_005f40ea(param_4);
}
if (*(int *)(param_1 + 0x10) != 0) {
param_4 = FUN_005f560f(param_4);
}
local_58 = 0.0;
local_54 = 0.0;
local_50 = 0.0;
local_4c = 0.0;
local_8 = (uint *)(*(int *)(param_1 + 0x60) * param_2 +
(*(int *)(param_1 + 0x68) + -1) * (param_2 & 1) * 4 +
*(int *)(param_1 + 100) * (int)param_3 + *(int *)(param_1 + 0x20));
uVar9 = param_2 & 3;
uVar13 = (uint)param_3 & 3;
iVar3 = *(int *)(param_1 + 0x34);
if ((param_2 & 1) == 0) {
iVar17 = 0;
iVar14 = 1;
}
else {
iVar17 = *(int *)(param_1 + 0x68) + -1;
iVar14 = -1;
}
param_2 = (uint)in_FPUControlWord;
*(uint *)(param_1 + 0x7c) = param_2;
if (*(int *)(param_1 + 0x5c) != 0) {
FUN_005f592b(param_4);
}
param_2 = 0;
if (*(int *)(param_1 + 0x68) != 0) {
iVar11 = iVar14 * 0x10;
iVar10 = iVar17 * 0x10;
param_3 = (float *)(iVar10 + 8 + param_4);
iVar12 = (iVar14 + iVar17) * 0x10;
iVar17 = (iVar17 - iVar14) * 0x10;
do {
fVar8 = _DAT_007edf20;
fVar2 = *(float *)(iVar3 + (uVar13 + uVar9 * 8) * 4 + (param_2 & 3) * 4);
fVar4 = (local_58 + param_3[-2]) * _DAT_007edf24;
fVar5 = (local_54 + param_3[-1]) * _DAT_007edf24;
fVar6 = (local_50 + *param_3) * _DAT_007edf24;
fVar7 = (local_4c + param_3[1]) * _DAT_007edf24;
local_38 = (uint)ROUND(fVar4 + fVar2);
local_34 = (uint)ROUND(fVar5 + fVar2);
uVar18 = (uint)ROUND(fVar6 + fVar2);
iVar19 = (int)ROUND(fVar7 + fVar2);
if (*(int *)(param_1 + 0x5c) != 0) {
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x10 + iVar17);
local_58 = (fVar4 - (float)(int)local_38) * _DAT_007edf20;
*pfVar1 = _DAT_007edf08 * local_58 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x10 + iVar10);
*pfVar1 = _DAT_007edf04 * local_58 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x10 + iVar12);
*pfVar1 = _DAT_007edf00 * local_58 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x14 + iVar17);
local_58 = local_58 * (float)_DAT_007edef8;
local_54 = (fVar5 - (float)(int)local_34) * fVar8;
*pfVar1 = _DAT_007edf08 * local_54 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x14 + iVar10);
*pfVar1 = _DAT_007edf04 * local_54 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x14 + iVar12);
*pfVar1 = _DAT_007edf00 * local_54 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x18 + iVar17);
local_54 = local_54 * (float)_DAT_007edef8;
local_50 = (fVar6 - (float)(int)uVar18) * fVar8;
*pfVar1 = _DAT_007edf08 * local_50 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x18 + iVar10);
*pfVar1 = _DAT_007edf04 * local_50 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x18 + iVar12);
*pfVar1 = _DAT_007edf00 * local_50 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x1c + iVar17);
local_50 = local_50 * (float)_DAT_007edef8;
fVar8 = (fVar7 - (float)iVar19) * fVar8;
*pfVar1 = _DAT_007edf08 * fVar8 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x1c + iVar10);
*pfVar1 = _DAT_007edf04 * fVar8 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x1c + iVar12);
*pfVar1 = _DAT_007edf00 * fVar8 + *pfVar1;
local_4c = fVar8 * (float)_DAT_007edef8;
}
uVar15 = local_38;
if (0x7e < (int)local_38) {
uVar15 = 0x7f;
}
if ((int)uVar15 < -0x7e) {
local_38 = 0xffffff81;
}
else if (0x7e < (int)local_38) {
local_38 = 0x7f;
}
uVar15 = local_34;
if (0x7e < (int)local_34) {
uVar15 = 0x7f;
}
if ((int)uVar15 < -0x7e) {
local_34 = 0xffffff81;
}
else if (0x7e < (int)local_34) {
local_34 = 0x7f;
}
uVar15 = uVar18;
if (0x7e < (int)uVar18) {
uVar15 = 0x7f;
}
if ((int)uVar15 < -0x7e) {
uVar18 = 0xffffff81;
}
else if (0x7e < (int)uVar18) {
uVar18 = 0x7f;
}
iVar16 = iVar19;
if (0x7e < iVar19) {
iVar16 = 0x7f;
}
if (iVar16 < -0x7e) {
iVar19 = -0x7f;
}
else if (0x7e < iVar19) {
iVar19 = 0x7f;
}
*local_8 = ((uVar18 & 0xff | iVar19 << 8) << 8 | local_34 & 0xff) << 8 | local_38 & 0xff;
local_8 = local_8 + iVar14;
param_3 = param_3 + iVar14 * 4;
iVar10 = iVar10 + iVar11;
iVar17 = iVar17 + iVar11;
iVar12 = iVar12 + iVar11;
param_2 = param_2 + 1;
} while (param_2 < *(uint *)(param_1 + 0x68));
}
return;
}
// --- FUN_005fa71a at 0x005FA71A (size: 33) ---
undefined4 * __thiscall FUN_005fa71a(undefined4 *param_1,undefined4 param_2)
{
FUN_005f518f(param_2,0x10,1);
*param_1 = &PTR_FUN_007edf58;
return param_1;
}
// --- FUN_005fa73b at 0x005FA73B (size: 33) ---
undefined4 * __thiscall FUN_005fa73b(undefined4 *param_1,undefined4 param_2)
{
FUN_005f518f(param_2,0x10,1);
*param_1 = &PTR_FUN_007edf68;
return param_1;
}
// --- FUN_005fa75c at 0x005FA75C (size: 33) ---
undefined4 * __thiscall FUN_005fa75c(undefined4 *param_1,undefined4 param_2)
{
FUN_005f518f(param_2,0x10,1);
*param_1 = &PTR_FUN_007edf78;
return param_1;
}
// --- FUN_005fa77d at 0x005FA77D (size: 33) ---
undefined4 * __thiscall FUN_005fa77d(undefined4 *param_1,undefined4 param_2)
{
FUN_005f518f(param_2,0x10,1);
*param_1 = &PTR_FUN_007edf88;
return param_1;
}
// --- FUN_005fa79e at 0x005FA79E (size: 33) ---
void * __thiscall FUN_005fa79e(void *param_1,byte param_2)
{
FUN_005f40bf();
if ((param_2 & 1) != 0) {
operator_delete(param_1);
}
return param_1;
}
// --- FUN_005fa7bf at 0x005FA7BF (size: 33) ---
undefined4 * __thiscall FUN_005fa7bf(undefined4 *param_1,undefined4 param_2)
{
FUN_005f518f(param_2,8,1);
*param_1 = &PTR_FUN_007edf98;
return param_1;
}
// --- FUN_005fa7e0 at 0x005FA7E0 (size: 33) ---
undefined4 * __thiscall FUN_005fa7e0(undefined4 *param_1,undefined4 param_2)
{
FUN_005f518f(param_2,8,1);
*param_1 = &PTR_FUN_007edfa8;
return param_1;
}
// --- FUN_005fa801 at 0x005FA801 (size: 33) ---
undefined4 * __thiscall FUN_005fa801(undefined4 *param_1,undefined4 param_2)
{
FUN_005f518f(param_2,0x10,1);
*param_1 = &PTR_FUN_007edfb8;
return param_1;
}
// --- FUN_005fa822 at 0x005FA822 (size: 631) ---
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
void __thiscall FUN_005fa822(int param_1,uint param_2,uint param_3,int param_4)
{
float *pfVar1;
float fVar2;
int iVar3;
float fVar4;
float fVar5;
float fVar6;
uint uVar7;
int iVar8;
uint uVar9;
int iVar10;
int iVar11;
int iVar12;
uint uVar13;
int iVar14;
int iVar15;
uint uVar16;
ushort in_FPUControlWord;
float local_44;
float local_40;
uint *local_8;
if (*(int *)(param_1 + 0x54) != 0) {
param_4 = FUN_005f40ea(param_4);
}
if (*(int *)(param_1 + 0x10) != 0) {
param_4 = FUN_005f560f(param_4);
}
local_44 = 0.0;
local_40 = 0.0;
uVar7 = param_2 & 3;
uVar9 = param_3 & 3;
local_8 = (uint *)(*(int *)(param_1 + 0x60) * param_2 +
(*(int *)(param_1 + 0x68) + -1) * (param_2 & 1) * 4 +
*(int *)(param_1 + 100) * param_3 + *(int *)(param_1 + 0x20));
iVar3 = *(int *)(param_1 + 0x34);
if ((param_2 & 1) == 0) {
iVar15 = 0;
iVar12 = 1;
}
else {
iVar15 = *(int *)(param_1 + 0x68) + -1;
iVar12 = -1;
}
param_2 = (uint)in_FPUControlWord;
*(uint *)(param_1 + 0x7c) = param_2;
if (*(int *)(param_1 + 0x5c) != 0) {
FUN_005f592b(param_4);
}
param_2 = 0;
if (*(int *)(param_1 + 0x68) != 0) {
iVar10 = iVar12 * 0x10;
iVar8 = iVar15 << 4;
iVar11 = (iVar12 + iVar15) * 0x10;
param_3 = (iVar15 - iVar12) * 0x10;
do {
fVar6 = _DAT_007cbd08;
fVar2 = *(float *)(iVar3 + (uVar9 + uVar7 * 8) * 4 + (param_2 & 3) * 4);
fVar4 = (local_44 + *(float *)(param_4 + iVar8)) * _DAT_007edfc8;
fVar5 = (local_40 + ((float *)(param_4 + iVar8))[1]) * _DAT_007edfc8;
uVar16 = (uint)ROUND(fVar4 + fVar2);
iVar15 = (int)ROUND(fVar5 + fVar2);
if (*(int *)(param_1 + 0x5c) != 0) {
pfVar1 = (float *)(param_3 + 0x10 + *(int *)(param_1 + 0x5c));
local_44 = (fVar4 - (float)(int)uVar16) * _DAT_007cbd08;
*pfVar1 = _DAT_007edf08 * local_44 + *pfVar1;
pfVar1 = (float *)(iVar8 + 0x10 + *(int *)(param_1 + 0x5c));
*pfVar1 = _DAT_007edf04 * local_44 + *pfVar1;
pfVar1 = (float *)(iVar11 + 0x10 + *(int *)(param_1 + 0x5c));
*pfVar1 = _DAT_007edf00 * local_44 + *pfVar1;
pfVar1 = (float *)(param_3 + 0x14 + *(int *)(param_1 + 0x5c));
local_44 = local_44 * (float)_DAT_007edef8;
fVar6 = (fVar5 - (float)iVar15) * fVar6;
*pfVar1 = _DAT_007edf08 * fVar6 + *pfVar1;
pfVar1 = (float *)(iVar8 + 0x14 + *(int *)(param_1 + 0x5c));
*pfVar1 = _DAT_007edf04 * fVar6 + *pfVar1;
pfVar1 = (float *)(iVar11 + 0x14 + *(int *)(param_1 + 0x5c));
*pfVar1 = _DAT_007edf00 * fVar6 + *pfVar1;
local_40 = fVar6 * (float)_DAT_007edef8;
}
uVar13 = uVar16;
if (0x7ffe < (int)uVar16) {
uVar13 = 0x7fff;
}
if ((int)uVar13 < -0x7ffe) {
uVar16 = 0xffff8001;
}
else if (0x7ffe < (int)uVar16) {
uVar16 = 0x7fff;
}
iVar14 = iVar15;
if (0x7ffe < iVar15) {
iVar14 = 0x7fff;
}
if (iVar14 < -0x7ffe) {
iVar15 = -0x7fff;
}
else if (0x7ffe < iVar15) {
iVar15 = 0x7fff;
}
*local_8 = iVar15 << 0x10 | uVar16 & 0xffff;
local_8 = local_8 + iVar12;
param_3 = param_3 + iVar10;
iVar8 = iVar8 + iVar10;
iVar11 = iVar11 + iVar10;
param_2 = param_2 + 1;
} while (param_2 < *(uint *)(param_1 + 0x68));
}
return;
}
// --- FUN_005faa99 at 0x005FAA99 (size: 33) ---
undefined4 * __thiscall FUN_005faa99(undefined4 *param_1,undefined4 param_2)
{
FUN_005f518f(param_2,0x10,1);
*param_1 = &PTR_FUN_007edfcc;
return param_1;
}
// --- FUN_005faaba at 0x005FAABA (size: 33) ---
undefined4 * __thiscall FUN_005faaba(undefined4 *param_1,undefined4 param_2)
{
FUN_005f518f(param_2,0x20,1);
*param_1 = &PTR_FUN_007edfdc;
return param_1;
}
// --- FUN_005faadb at 0x005FAADB (size: 33) ---
undefined4 * __thiscall FUN_005faadb(undefined4 *param_1,undefined4 param_2)
{
FUN_005f518f(param_2,0x20,1);
*param_1 = &PTR_FUN_007edfec;
return param_1;
}
// --- FUN_005faafc at 0x005FAAFC (size: 33) ---
undefined4 * __thiscall FUN_005faafc(undefined4 *param_1,undefined4 param_2)
{
FUN_005f518f(param_2,0x20,1);
*param_1 = &PTR_FUN_007edffc;
return param_1;
}
// --- FUN_005fab1d at 0x005FAB1D (size: 33) ---
undefined4 * __thiscall FUN_005fab1d(undefined4 *param_1,undefined4 param_2)
{
FUN_005f518f(param_2,0x20,1);
*param_1 = &PTR_FUN_007ee00c;
return param_1;
}
// --- FUN_005fab3e at 0x005FAB3E (size: 33) ---
undefined4 * __thiscall FUN_005fab3e(undefined4 *param_1,undefined4 param_2)
{
FUN_005f518f(param_2,0x20,1);
*param_1 = &PTR_FUN_007ee01c;
return param_1;
}
// --- FUN_005fab5f at 0x005FAB5F (size: 33) ---
undefined4 * __thiscall FUN_005fab5f(undefined4 *param_1,undefined4 param_2)
{
FUN_005f518f(param_2,0x40,1);
*param_1 = &PTR_FUN_007ee02c;
return param_1;
}
// --- FUN_005fab80 at 0x005FAB80 (size: 33) ---
undefined4 * __thiscall FUN_005fab80(undefined4 *param_1,undefined4 param_2)
{
FUN_005f518f(param_2,0x10,1);
*param_1 = &PTR_FUN_007ee03c;
return param_1;
}
// --- FUN_005faba1 at 0x005FABA1 (size: 986) ---
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
void __thiscall FUN_005faba1(int param_1,uint param_2,float *param_3,int param_4)
{
float *pfVar1;
float fVar2;
int iVar3;
float fVar4;
float fVar5;
float fVar6;
float fVar7;
float fVar8;
uint uVar9;
int iVar10;
int iVar11;
int iVar12;
uint uVar13;
uint uVar14;
int iVar15;
uint uVar16;
int iVar17;
int iVar18;
ushort in_FPUControlWord;
int iVar19;
float local_58;
float local_54;
float local_50;
float local_4c;
uint local_38;
uint local_34;
uint *local_8;
if (*(int *)(param_1 + 0x54) != 0) {
param_4 = FUN_005f40ea(param_4);
}
if (*(int *)(param_1 + 0x10) != 0) {
param_4 = FUN_005f560f(param_4);
}
local_58 = 0.0;
local_54 = 0.0;
local_50 = 0.0;
local_4c = 0.0;
local_8 = (uint *)(*(int *)(param_1 + 0x60) * param_2 +
(*(int *)(param_1 + 0x68) + -1) * (param_2 & 1) * 4 +
*(int *)(param_1 + 100) * (int)param_3 + *(int *)(param_1 + 0x20));
uVar9 = param_2 & 3;
uVar13 = (uint)param_3 & 3;
iVar3 = *(int *)(param_1 + 0x34);
if ((param_2 & 1) == 0) {
iVar18 = 0;
iVar15 = 1;
}
else {
iVar18 = *(int *)(param_1 + 0x68) + -1;
iVar15 = -1;
}
param_2 = (uint)in_FPUControlWord;
*(uint *)(param_1 + 0x7c) = param_2;
if (*(int *)(param_1 + 0x5c) != 0) {
FUN_005f592b(param_4);
}
param_2 = 0;
if (*(int *)(param_1 + 0x68) != 0) {
iVar11 = iVar15 * 0x10;
iVar10 = iVar18 * 0x10;
param_3 = (float *)(iVar10 + 8 + param_4);
iVar12 = (iVar15 + iVar18) * 0x10;
iVar18 = (iVar18 - iVar15) * 0x10;
do {
fVar8 = _DAT_007ee04c;
fVar2 = *(float *)(iVar3 + (uVar13 + uVar9 * 8) * 4 + (param_2 & 3) * 4);
fVar4 = (local_58 + param_3[-2]) * _DAT_007ee050;
fVar5 = (local_54 + param_3[-1]) * _DAT_007ee050;
fVar6 = (local_50 + *param_3) * _DAT_007ee050;
fVar7 = (local_4c + param_3[1]) * _DAT_007938bc;
local_38 = (uint)ROUND(fVar4 + fVar2);
local_34 = (uint)ROUND(fVar5 + fVar2);
uVar14 = (uint)ROUND(fVar6 + fVar2);
iVar19 = (int)ROUND(fVar7 + fVar2);
if (*(int *)(param_1 + 0x5c) != 0) {
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x10 + iVar18);
local_58 = (fVar4 - (float)(int)local_38) * _DAT_007ee04c;
*pfVar1 = _DAT_007edf08 * local_58 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x10 + iVar10);
*pfVar1 = _DAT_007edf04 * local_58 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x10 + iVar12);
*pfVar1 = _DAT_007edf00 * local_58 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x14 + iVar18);
local_58 = local_58 * (float)_DAT_007edef8;
local_54 = (fVar5 - (float)(int)local_34) * fVar8;
*pfVar1 = _DAT_007edf08 * local_54 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x14 + iVar10);
*pfVar1 = _DAT_007edf04 * local_54 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x14 + iVar12);
*pfVar1 = _DAT_007edf00 * local_54 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x18 + iVar18);
local_54 = local_54 * (float)_DAT_007edef8;
fVar8 = (fVar6 - (float)(int)uVar14) * fVar8;
*pfVar1 = _DAT_007edf08 * fVar8 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x18 + iVar10);
*pfVar1 = _DAT_007edf04 * fVar8 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x18 + iVar12);
*pfVar1 = _DAT_007edf00 * fVar8 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x1c + iVar18);
local_50 = fVar8 * (float)_DAT_007edef8;
local_4c = (fVar7 - (float)iVar19) * _DAT_007e75f0;
*pfVar1 = _DAT_007edf08 * local_4c + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x1c + iVar10);
*pfVar1 = _DAT_007edf04 * local_4c + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x1c + iVar12);
*pfVar1 = _DAT_007edf00 * local_4c + *pfVar1;
local_4c = local_4c * (float)_DAT_007edef8;
}
uVar16 = local_38;
if (0x1fe < (int)local_38) {
uVar16 = 0x1ff;
}
if ((int)uVar16 < -0x1fe) {
local_38 = 0xfffffe01;
}
else if (0x1fe < (int)local_38) {
local_38 = 0x1ff;
}
uVar16 = local_34;
if (0x1fe < (int)local_34) {
uVar16 = 0x1ff;
}
if ((int)uVar16 < -0x1fe) {
local_34 = 0xfffffe01;
}
else if (0x1fe < (int)local_34) {
local_34 = 0x1ff;
}
uVar16 = uVar14;
if (0x1fe < (int)uVar14) {
uVar16 = 0x1ff;
}
if ((int)uVar16 < -0x1fe) {
uVar14 = 0xfffffe01;
}
else if (0x1fe < (int)uVar14) {
uVar14 = 0x1ff;
}
iVar17 = iVar19;
if (2 < iVar19) {
iVar17 = 3;
}
if (iVar17 < -2) {
iVar19 = -3;
}
else if (2 < iVar19) {
iVar19 = 3;
}
*local_8 = ((uVar14 & 0x3ff | iVar19 << 10) << 10 | local_34 & 0x3ff) << 10 | local_38 & 0x3ff
;
local_8 = local_8 + iVar15;
param_3 = param_3 + iVar15 * 4;
iVar10 = iVar10 + iVar11;
iVar18 = iVar18 + iVar11;
iVar12 = iVar12 + iVar11;
param_2 = param_2 + 1;
} while (param_2 < *(uint *)(param_1 + 0x68));
}
return;
}
// --- FUN_005faf7b at 0x005FAF7B (size: 33) ---
undefined4 * __thiscall FUN_005faf7b(undefined4 *param_1,undefined4 param_2)
{
FUN_005f518f(param_2,8,1);
*param_1 = &PTR_FUN_007ee054;
return param_1;
}
// --- FUN_005faf9c at 0x005FAF9C (size: 33) ---
undefined4 * __thiscall FUN_005faf9c(undefined4 *param_1,undefined4 param_2)
{
FUN_005f518f(param_2,8,1);
*param_1 = &PTR_FUN_007ee064;
return param_1;
}
// --- FUN_005fafbd at 0x005FAFBD (size: 33) ---
undefined4 * __thiscall FUN_005fafbd(undefined4 *param_1,undefined4 param_2)
{
FUN_005f518f(param_2,0x10,1);
*param_1 = &PTR_FUN_007ee074;
return param_1;
}
// --- FUN_005fafde at 0x005FAFDE (size: 33) ---
undefined4 * __thiscall FUN_005fafde(undefined4 *param_1,undefined4 param_2)
{
FUN_005f518f(param_2,8,1);
*param_1 = &PTR_FUN_007ee084;
return param_1;
}
// --- FUN_005fafff at 0x005FAFFF (size: 33) ---
undefined4 * __thiscall FUN_005fafff(undefined4 *param_1,undefined4 param_2)
{
FUN_005f518f(param_2,0x10,1);
*param_1 = &PTR_FUN_007ee094;
return param_1;
}
// --- FUN_005fb020 at 0x005FB020 (size: 33) ---
undefined4 * __thiscall FUN_005fb020(undefined4 *param_1,undefined4 param_2)
{
FUN_005f518f(param_2,0x10,2);
*param_1 = &PTR_FUN_007ee0a4;
return param_1;
}
// --- FUN_005fb041 at 0x005FB041 (size: 33) ---
undefined4 * __thiscall FUN_005fb041(undefined4 *param_1,undefined4 param_2)
{
FUN_005f518f(param_2,0x10,2);
*param_1 = &PTR_FUN_007ee0b4;
return param_1;
}
// --- FUN_005fb062 at 0x005FB062 (size: 981) ---
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
void __thiscall FUN_005fb062(int param_1,uint param_2,float *param_3,int param_4)
{
float *pfVar1;
float fVar2;
int iVar3;
float fVar4;
float fVar5;
float fVar6;
float fVar7;
float fVar8;
uint uVar9;
int iVar10;
int iVar11;
uint uVar12;
int iVar13;
int iVar14;
int iVar15;
uint uVar16;
int iVar17;
ushort in_FPUControlWord;
float local_60;
float local_5c;
float local_58;
float local_54;
uint local_40;
int local_3c;
uint local_38;
int local_34;
uint *local_8;
if (*(int *)(param_1 + 0x54) != 0) {
param_4 = FUN_005f40ea(param_4);
}
if (*(int *)(param_1 + 0x10) != 0) {
param_4 = FUN_005f560f(param_4);
}
local_60 = 0.0;
local_5c = 0.0;
local_58 = 0.0;
local_54 = 0.0;
local_8 = (uint *)(*(int *)(param_1 + 0x60) * param_2 +
(*(int *)(param_1 + 0x68) + -1) * (param_2 & 1) * 8 +
*(int *)(param_1 + 100) * (int)param_3 + *(int *)(param_1 + 0x20));
uVar9 = param_2 & 3;
uVar12 = (uint)param_3 & 3;
iVar3 = *(int *)(param_1 + 0x34);
if ((param_2 & 1) == 0) {
iVar15 = 0;
iVar14 = 1;
}
else {
iVar15 = *(int *)(param_1 + 0x68) + -1;
iVar14 = -1;
}
param_2 = (uint)in_FPUControlWord;
*(uint *)(param_1 + 0x7c) = param_2;
if (*(int *)(param_1 + 0x5c) != 0) {
FUN_005f592b(param_4);
}
param_2 = 0;
if (*(int *)(param_1 + 0x68) != 0) {
iVar10 = iVar14 * 0x10;
iVar11 = iVar15 * 0x10;
iVar13 = (iVar14 + iVar15) * 0x10;
iVar15 = (iVar15 - iVar14) * 0x10;
param_3 = (float *)(iVar11 + 8 + param_4);
do {
fVar8 = _DAT_007cbd08;
fVar2 = *(float *)(iVar3 + (uVar12 + uVar9 * 8) * 4 + (param_2 & 3) * 4);
fVar4 = (local_60 + param_3[-2]) * _DAT_007edfc8;
fVar5 = (local_5c + param_3[-1]) * _DAT_007edfc8;
fVar6 = (local_58 + *param_3) * _DAT_007edfc8;
fVar7 = (local_54 + param_3[1]) * _DAT_007edfc8;
local_40 = (uint)ROUND(fVar4 + fVar2);
local_3c = (int)ROUND(fVar5 + fVar2);
local_38 = (uint)ROUND(fVar6 + fVar2);
local_34 = (int)ROUND(fVar7 + fVar2);
if (*(int *)(param_1 + 0x5c) != 0) {
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x10 + iVar15);
local_60 = (fVar4 - (float)(int)local_40) * _DAT_007cbd08;
*pfVar1 = _DAT_007edf08 * local_60 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x10 + iVar11);
*pfVar1 = _DAT_007edf04 * local_60 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x10 + iVar13);
*pfVar1 = _DAT_007edf00 * local_60 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x14 + iVar15);
local_60 = local_60 * (float)_DAT_007edef8;
local_5c = (fVar5 - (float)local_3c) * fVar8;
*pfVar1 = _DAT_007edf08 * local_5c + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x14 + iVar11);
*pfVar1 = _DAT_007edf04 * local_5c + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x14 + iVar13);
*pfVar1 = _DAT_007edf00 * local_5c + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x18 + iVar15);
local_5c = local_5c * (float)_DAT_007edef8;
local_58 = (fVar6 - (float)(int)local_38) * fVar8;
*pfVar1 = _DAT_007edf08 * local_58 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x18 + iVar11);
*pfVar1 = _DAT_007edf04 * local_58 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x18 + iVar13);
*pfVar1 = _DAT_007edf00 * local_58 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x1c + iVar15);
local_58 = local_58 * (float)_DAT_007edef8;
fVar8 = (fVar7 - (float)local_34) * fVar8;
*pfVar1 = _DAT_007edf08 * fVar8 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x1c + iVar11);
*pfVar1 = _DAT_007edf04 * fVar8 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x1c + iVar13);
*pfVar1 = _DAT_007edf00 * fVar8 + *pfVar1;
local_54 = fVar8 * (float)_DAT_007edef8;
}
uVar16 = local_40;
if (0x7ffe < (int)local_40) {
uVar16 = 0x7fff;
}
if ((int)uVar16 < -0x7ffe) {
local_40 = 0xffff8001;
}
else if (0x7ffe < (int)local_40) {
local_40 = 0x7fff;
}
iVar17 = local_3c;
if (0x7ffe < local_3c) {
iVar17 = 0x7fff;
}
if (iVar17 < -0x7ffe) {
local_3c = -0x7fff;
}
else if (0x7ffe < local_3c) {
local_3c = 0x7fff;
}
uVar16 = local_38;
if (0x7ffe < (int)local_38) {
uVar16 = 0x7fff;
}
if ((int)uVar16 < -0x7ffe) {
local_38 = 0xffff8001;
}
else if (0x7ffe < (int)local_38) {
local_38 = 0x7fff;
}
iVar17 = local_34;
if (0x7ffe < local_34) {
iVar17 = 0x7fff;
}
if (iVar17 < -0x7ffe) {
local_34 = -0x7fff;
}
else if (0x7ffe < local_34) {
local_34 = 0x7fff;
}
local_8[1] = local_34 << 0x10 | local_38 & 0xffff;
*local_8 = local_3c << 0x10 | local_40 & 0xffff;
local_8 = local_8 + iVar14 * 2;
param_3 = param_3 + iVar14 * 4;
iVar15 = iVar15 + iVar10;
iVar13 = iVar13 + iVar10;
iVar11 = iVar11 + iVar10;
param_2 = param_2 + 1;
} while (param_2 < *(uint *)(param_1 + 0x68));
}
return;
}
// --- FUN_005fb437 at 0x005FB437 (size: 33) ---
undefined4 * __thiscall FUN_005fb437(undefined4 *param_1,undefined4 param_2)
{
FUN_005f518f(param_2,0x20,2);
*param_1 = &PTR_FUN_007ee0c4;
return param_1;
}
// --- FUN_005fb458 at 0x005FB458 (size: 33) ---
undefined4 * __thiscall FUN_005fb458(undefined4 *param_1,undefined4 param_2)
{
FUN_005f518f(param_2,0x20,3);
*param_1 = &PTR_FUN_007ee0d4;
return param_1;
}
// --- FUN_005fb479 at 0x005FB479 (size: 33) ---
undefined4 * __thiscall FUN_005fb479(undefined4 *param_1,undefined4 param_2)
{
FUN_005f518f(param_2,0x20,2);
*param_1 = &PTR_FUN_007ee0e4;
return param_1;
}
// --- FUN_005fb49a at 0x005FB49A (size: 33) ---
undefined4 * __thiscall FUN_005fb49a(undefined4 *param_1,undefined4 param_2)
{
FUN_005f518f(param_2,0x20,2);
*param_1 = &PTR_FUN_007ee0f4;
return param_1;
}
// --- FUN_005fb4bb at 0x005FB4BB (size: 33) ---
undefined4 * __thiscall FUN_005fb4bb(undefined4 *param_1,undefined4 param_2)
{
FUN_005f518f(param_2,0x40,3);
*param_1 = &PTR_FUN_007ee104;
return param_1;
}
// --- FUN_005fb4dc at 0x005FB4DC (size: 33) ---
undefined4 * __thiscall FUN_005fb4dc(undefined4 *param_1,undefined4 param_2)
{
FUN_005f518f(param_2,0x10,2);
*param_1 = &PTR_FUN_007ee114;
return param_1;
}
// --- FUN_005fb4fd at 0x005FB4FD (size: 624) ---
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
void __thiscall FUN_005fb4fd(int param_1,uint param_2,uint param_3,int param_4)
{
float *pfVar1;
float fVar2;
int iVar3;
int iVar4;
float fVar5;
float fVar6;
float fVar7;
int iVar8;
uint uVar9;
int iVar10;
int iVar11;
uint uVar12;
int iVar13;
int iVar14;
int iVar15;
undefined2 in_FPUControlWord;
float local_48;
float local_44;
undefined2 *local_c;
uint local_8;
if (*(int *)(param_1 + 0x54) != 0) {
param_4 = FUN_005f40ea(param_4);
}
if (*(int *)(param_1 + 0x10) != 0) {
param_4 = FUN_005f560f(param_4);
}
local_48 = 0.0;
local_44 = 0.0;
uVar9 = param_2 & 3;
uVar12 = param_3 & 3;
local_c = (undefined2 *)
(*(int *)(param_1 + 0x60) * param_2 +
(*(int *)(param_1 + 0x68) + -1) * (param_2 & 1) * 2 + *(int *)(param_1 + 100) * param_3
+ *(int *)(param_1 + 0x20));
iVar3 = *(int *)(param_1 + 0x34);
if ((param_2 & 1) == 0) {
iVar14 = 0;
param_2 = 1;
}
else {
iVar14 = *(int *)(param_1 + 0x68) + -1;
param_2 = -1;
}
iVar8 = param_2;
param_3 = CONCAT22(param_3._2_2_,in_FPUControlWord);
*(uint *)(param_1 + 0x7c) = param_3;
if (*(int *)(param_1 + 0x5c) != 0) {
FUN_005f592b(param_4);
}
local_8 = 0;
if (*(int *)(param_1 + 0x68) != 0) {
iVar10 = param_2 * 0x10;
param_3 = (param_2 + iVar14) * 0x10;
iVar15 = iVar14 << 4;
param_2 = (iVar14 - param_2) * 0x10;
do {
pfVar1 = (float *)(iVar15 + param_4);
thunk_FUN_005e06f5(pfVar1,pfVar1);
fVar7 = _DAT_007edf20;
fVar2 = *(float *)(iVar3 + (uVar12 + uVar9 * 8) * 4 + (local_8 & 3) * 4);
fVar5 = (local_48 + *pfVar1) * _DAT_007edf24;
fVar6 = (local_44 + pfVar1[1]) * _DAT_007edf24;
iVar14 = (int)ROUND(fVar5 + fVar2);
iVar13 = (int)ROUND(fVar6 + fVar2);
if (*(int *)(param_1 + 0x5c) != 0) {
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x10 + param_2);
local_48 = (fVar5 - (float)iVar14) * _DAT_007edf20;
*pfVar1 = _DAT_007edf08 * local_48 + *pfVar1;
pfVar1 = (float *)(iVar15 + 0x10 + *(int *)(param_1 + 0x5c));
*pfVar1 = _DAT_007edf04 * local_48 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x10 + param_3);
*pfVar1 = _DAT_007edf00 * local_48 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x14 + param_2);
local_48 = local_48 * (float)_DAT_007edef8;
fVar7 = (fVar6 - (float)iVar13) * fVar7;
*pfVar1 = _DAT_007edf08 * fVar7 + *pfVar1;
pfVar1 = (float *)(iVar15 + 0x14 + *(int *)(param_1 + 0x5c));
*pfVar1 = _DAT_007edf04 * fVar7 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x14 + param_3);
*pfVar1 = _DAT_007edf00 * fVar7 + *pfVar1;
local_44 = fVar7 * (float)_DAT_007edef8;
}
iVar4 = 0x7f;
iVar11 = iVar14;
if (0x7e < iVar14) {
iVar11 = iVar4;
}
if (iVar11 < -0x7e) {
iVar14 = -0x7f;
}
else if (0x7e < iVar14) {
iVar14 = iVar4;
}
iVar11 = iVar13;
if (0x7e < iVar13) {
iVar11 = iVar4;
}
if (iVar11 < -0x7e) {
iVar13 = -0x7f;
}
else if (0x7e < iVar13) {
iVar13 = iVar4;
}
*local_c = CONCAT11((char)iVar13,(char)iVar14);
local_c = local_c + iVar8;
param_2 = param_2 + iVar10;
param_3 = param_3 + iVar10;
iVar15 = iVar15 + iVar10;
local_8 = local_8 + 1;
} while (local_8 < *(uint *)(param_1 + 0x68));
}
return;
}
// --- FUN_005fb76d at 0x005FB76D (size: 33) ---
undefined4 * __thiscall FUN_005fb76d(undefined4 *param_1,undefined4 param_2)
{
FUN_005f518f(param_2,0x10,4);
*param_1 = &PTR_FUN_007ee124;
return param_1;
}
// --- FUN_005fb78e at 0x005FB78E (size: 33) ---
undefined4 * __thiscall FUN_005fb78e(undefined4 *param_1,undefined4 param_2)
{
FUN_005f518f(param_2,0x20,4);
*param_1 = &PTR_FUN_007ee134;
return param_1;
}
// --- FUN_005fb7af at 0x005FB7AF (size: 33) ---
undefined4 * __thiscall FUN_005fb7af(undefined4 *param_1,undefined4 param_2)
{
FUN_005f518f(param_2,0x40,4);
*param_1 = &PTR_FUN_007ee144;
return param_1;
}
// --- FUN_005fb7d0 at 0x005FB7D0 (size: 33) ---
undefined4 * __thiscall FUN_005fb7d0(undefined4 *param_1,undefined4 param_2)
{
FUN_005f518f(param_2,0x20,4);
*param_1 = &PTR_FUN_007ee154;
return param_1;
}
// --- FUN_005fb7f1 at 0x005FB7F1 (size: 33) ---
undefined4 * __thiscall FUN_005fb7f1(undefined4 *param_1,undefined4 param_2)
{
FUN_005f518f(param_2,0x40,4);
*param_1 = &PTR_FUN_007ee164;
return param_1;
}
// --- FUN_005fb812 at 0x005FB812 (size: 36) ---
undefined4 * __thiscall FUN_005fb812(undefined4 *param_1,undefined4 param_2)
{
FUN_005f518f(param_2,0x80,4);
*param_1 = &PTR_FUN_007ee174;
return param_1;
}
// --- FUN_005fb836 at 0x005FB836 (size: 497) ---
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
void __thiscall FUN_005fb836(int param_1,uint param_2,uint param_3,float *param_4)
{
int iVar1;
float fVar2;
int iVar3;
uint uVar4;
float *pfVar5;
int iVar6;
uint uVar7;
uint uVar8;
int iVar9;
int iVar10;
undefined2 *puVar11;
int iVar12;
int iVar13;
ushort in_FPUControlWord;
float local_38;
if (*(int *)(param_1 + 0x54) != 0) {
param_4 = (float *)FUN_005f40ea(param_4);
}
if (*(int *)(param_1 + 0x10) != 0) {
param_4 = (float *)FUN_005f560f(param_4);
}
local_38 = 0.0;
uVar4 = param_2 & 3;
uVar7 = param_3 & 3;
iVar1 = *(int *)(param_1 + 0x34);
puVar11 = (undefined2 *)
(*(int *)(param_1 + 0x60) * param_2 + *(int *)(param_1 + 100) * param_3 +
(*(int *)(param_1 + 0x68) + -1) * (param_2 & 1) * 2 + *(int *)(param_1 + 0x20));
if ((param_2 & 1) == 0) {
iVar12 = 0;
param_3 = 1;
}
else {
iVar12 = *(int *)(param_1 + 0x68) + -1;
param_3 = -1;
}
iVar3 = param_3;
param_2 = (uint)in_FPUControlWord;
*(uint *)(param_1 + 0x7c) = param_2;
uVar8 = 0;
pfVar5 = param_4;
if (*(int *)(param_1 + 0x68) != 0) {
do {
uVar8 = uVar8 + 1;
*pfVar5 = *pfVar5 * _DAT_007eb2cc + pfVar5[1] * _DAT_007eb2d0 + pfVar5[2] * _DAT_007eb2d4;
pfVar5 = pfVar5 + 4;
} while (uVar8 < *(uint *)(param_1 + 0x68));
}
if (*(int *)(param_1 + 0x5c) != 0) {
FUN_005f592b(param_4);
}
param_2 = 0;
if (*(int *)(param_1 + 0x68) != 0) {
iVar9 = param_3 * 0x10;
iVar6 = iVar12 << 4;
iVar10 = (param_3 + iVar12) * 0x10;
param_3 = (iVar12 - param_3) * 0x10;
do {
fVar2 = (local_38 + *(float *)(iVar6 + (int)param_4)) * _DAT_007edf1c;
iVar12 = (int)ROUND(fVar2 + *(float *)(iVar1 + (uVar7 + uVar4 * 8) * 4 + (param_2 & 3) * 4));
if (*(int *)(param_1 + 0x5c) != 0) {
pfVar5 = (float *)(param_3 + 0x10 + *(int *)(param_1 + 0x5c));
local_38 = (fVar2 - (float)iVar12) * _DAT_007edf18;
*pfVar5 = _DAT_007edf08 * local_38 + *pfVar5;
pfVar5 = (float *)(iVar6 + 0x10 + *(int *)(param_1 + 0x5c));
*pfVar5 = _DAT_007edf04 * local_38 + *pfVar5;
pfVar5 = (float *)(iVar10 + 0x10 + *(int *)(param_1 + 0x5c));
*pfVar5 = _DAT_007edf00 * local_38 + *pfVar5;
local_38 = local_38 * (float)_DAT_007edef8;
}
iVar13 = iVar12;
if (0xfffe < iVar12) {
iVar13 = 0xffff;
}
if (iVar13 < 1) {
iVar12 = 0;
}
else if (0xfffe < iVar12) {
iVar12 = 0xffff;
}
*puVar11 = (short)iVar12;
param_3 = param_3 + iVar9;
puVar11 = puVar11 + iVar3;
iVar6 = iVar6 + iVar9;
iVar10 = iVar10 + iVar9;
param_2 = param_2 + 1;
} while (param_2 < *(uint *)(param_1 + 0x68));
}
return;
}
// --- FUN_005fba27 at 0x005FBA27 (size: 33) ---
undefined4 * __thiscall FUN_005fba27(undefined4 *param_1,undefined4 param_2)
{
FUN_005f518f(param_2,0x20,1);
*param_1 = &PTR_FUN_007ee184;
return param_1;
}
// --- FUN_005fba48 at 0x005FBA48 (size: 33) ---
undefined4 * __thiscall FUN_005fba48(undefined4 *param_1,undefined4 param_2)
{
FUN_005f518f(param_2,0x30,1);
*param_1 = &PTR_FUN_007ee194;
return param_1;
}
// --- FUN_005fba69 at 0x005FBA69 (size: 77) ---
void __thiscall FUN_005fba69(int param_1,int param_2,int param_3,undefined4 *param_4)
{
undefined4 *puVar1;
uint uVar2;
if (*(int *)(param_1 + 0x10) != 0) {
param_4 = (undefined4 *)FUN_005f560f(param_4);
}
puVar1 = (undefined4 *)
(*(int *)(param_1 + 0x60) * param_2 + *(int *)(param_1 + 100) * param_3 +
*(int *)(param_1 + 0x20));
uVar2 = 0;
if (*(int *)(param_1 + 0x68) != 0) {
do {
*puVar1 = *param_4;
puVar1 = puVar1 + 1;
uVar2 = uVar2 + 1;
param_4 = param_4 + 4;
} while (uVar2 < *(uint *)(param_1 + 0x68));
}
return;
}
// --- FUN_005fbab6 at 0x005FBAB6 (size: 88) ---
void __thiscall FUN_005fbab6(int param_1,int param_2,int param_3,int param_4)
{
uint uVar1;
int iVar2;
uVar1 = 0;
if (*(int *)(param_1 + 0x10) != 0) {
param_4 = FUN_005f560f(param_4);
}
iVar2 = *(int *)(param_1 + 0x60) * param_2 + *(int *)(param_1 + 100) * param_3 +
*(int *)(param_1 + 0x20);
if (*(int *)(param_1 + 0x68) != 0) {
do {
thunk_FUN_005e02d4(iVar2,param_4,1);
param_4 = param_4 + 0x10;
iVar2 = iVar2 + 2;
uVar1 = uVar1 + 1;
} while (uVar1 < *(uint *)(param_1 + 0x68));
}
return;
}
// --- FUN_005fbb0e at 0x005FBB0E (size: 89) ---
void __thiscall FUN_005fbb0e(int param_1,int param_2,int param_3,int param_4)
{
uint uVar1;
int iVar2;
uVar1 = 0;
if (*(int *)(param_1 + 0x10) != 0) {
param_4 = FUN_005f560f(param_4);
}
iVar2 = *(int *)(param_1 + 0x60) * param_2 + *(int *)(param_1 + 100) * param_3 +
*(int *)(param_1 + 0x20);
if (*(int *)(param_1 + 0x68) != 0) {
do {
thunk_FUN_005e02d4(iVar2,param_4,2);
param_4 = param_4 + 0x10;
iVar2 = iVar2 + 4;
uVar1 = uVar1 + 1;
} while (uVar1 < *(uint *)(param_1 + 0x68));
}
return;
}
// --- FUN_005fbb67 at 0x005FBB67 (size: 65) ---
void __thiscall FUN_005fbb67(int param_1,int param_2,int param_3,undefined4 param_4)
{
if (*(int *)(param_1 + 0x10) != 0) {
param_4 = FUN_005f560f(param_4);
}
thunk_FUN_005e02d4(*(int *)(param_1 + 0x60) * param_2 + *(int *)(param_1 + 100) * param_3 +
*(int *)(param_1 + 0x20),param_4,*(int *)(param_1 + 0x68) << 2);
return;
}
// --- FUN_005fbba8 at 0x005FBBA8 (size: 83) ---
void __thiscall FUN_005fbba8(int param_1,int param_2,int param_3,undefined4 *param_4)
{
undefined4 *puVar1;
uint uVar2;
if (*(int *)(param_1 + 0x10) != 0) {
param_4 = (undefined4 *)FUN_005f560f(param_4);
}
puVar1 = (undefined4 *)
(*(int *)(param_1 + 0x60) * param_2 + *(int *)(param_1 + 100) * param_3 +
*(int *)(param_1 + 0x20));
uVar2 = 0;
if (*(int *)(param_1 + 0x68) != 0) {
do {
*puVar1 = *param_4;
puVar1[1] = param_4[1];
puVar1 = puVar1 + 2;
uVar2 = uVar2 + 1;
param_4 = param_4 + 4;
} while (uVar2 < *(uint *)(param_1 + 0x68));
}
return;
}
// --- FUN_005fbbfb at 0x005FBBFB (size: 76) ---
void __thiscall FUN_005fbbfb(int param_1,int param_2,int param_3,undefined4 *param_4)
{
uint uVar1;
int iVar2;
undefined4 *puVar3;
if (*(int *)(param_1 + 0x10) != 0) {
param_4 = (undefined4 *)FUN_005f560f(param_4);
}
puVar3 = (undefined4 *)
(*(int *)(param_1 + 0x60) * param_2 + *(int *)(param_1 + 100) * param_3 +
*(int *)(param_1 + 0x20));
for (uVar1 = (uint)(*(int *)(param_1 + 0x68) << 4) >> 2; uVar1 != 0; uVar1 = uVar1 - 1) {
*puVar3 = *param_4;
param_4 = param_4 + 1;
puVar3 = puVar3 + 1;
}
for (iVar2 = 0; iVar2 != 0; iVar2 = iVar2 + -1) {
*(undefined1 *)puVar3 = *(undefined1 *)param_4;
param_4 = (undefined4 *)((int)param_4 + 1);
puVar3 = (undefined4 *)((int)puVar3 + 1);
}
return;
}
// --- FUN_005fbc47 at 0x005FBC47 (size: 680) ---
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
void __thiscall FUN_005fbc47(int param_1,uint param_2,uint param_3,float *param_4)
{
float fVar1;
int iVar2;
float fVar3;
float fVar4;
float fVar5;
int iVar6;
uint uVar7;
float *pfVar8;
int iVar9;
uint uVar10;
uint uVar11;
int iVar12;
int iVar13;
uint *puVar14;
int iVar15;
int iVar16;
ushort in_FPUControlWord;
float local_54;
float local_48;
uint local_34;
if (*(int *)(param_1 + 0x54) != 0) {
param_4 = (float *)FUN_005f40ea(param_4);
}
if (*(int *)(param_1 + 0x10) != 0) {
param_4 = (float *)FUN_005f560f(param_4);
}
local_54 = 0.0;
local_48 = 0.0;
uVar7 = param_2 & 3;
uVar10 = param_3 & 3;
puVar14 = (uint *)(*(int *)(param_1 + 0x60) * param_2 +
(*(int *)(param_1 + 0x68) + -1) * (param_2 & 1) * 4 +
*(int *)(param_1 + 100) * param_3 + *(int *)(param_1 + 0x20));
iVar2 = *(int *)(param_1 + 0x34);
if ((param_2 & 1) == 0) {
iVar15 = 0;
param_3 = 1;
}
else {
iVar15 = *(int *)(param_1 + 0x68) + -1;
param_3 = -1;
}
iVar6 = param_3;
param_2 = (uint)in_FPUControlWord;
uVar11 = 0;
*(uint *)(param_1 + 0x7c) = param_2;
pfVar8 = param_4;
if (*(int *)(param_1 + 0x68) != 0) {
do {
uVar11 = uVar11 + 1;
*pfVar8 = *pfVar8 * _DAT_007eb2cc + pfVar8[1] * _DAT_007eb2d0 + pfVar8[2] * _DAT_007eb2d4;
pfVar8 = pfVar8 + 4;
} while (uVar11 < *(uint *)(param_1 + 0x68));
}
if (*(int *)(param_1 + 0x5c) != 0) {
FUN_005f592b(param_4);
}
param_2 = 0;
if (*(int *)(param_1 + 0x68) != 0) {
iVar12 = param_3 * 0x10;
iVar9 = iVar15 << 4;
iVar13 = (param_3 + iVar15) * 0x10;
param_3 = (iVar15 - param_3) * 0x10;
do {
fVar5 = _DAT_007edf18;
fVar1 = *(float *)(iVar2 + (uVar10 + uVar7 * 8) * 4 + (param_2 & 3) * 4);
fVar3 = (local_54 + *(float *)((int)param_4 + iVar9)) * _DAT_007edf1c;
fVar4 = (local_48 + ((float *)((int)param_4 + iVar9))[3]) * _DAT_007edf1c;
local_34 = (uint)ROUND(fVar3 + fVar1);
iVar15 = (int)ROUND(fVar4 + fVar1);
if (*(int *)(param_1 + 0x5c) != 0) {
pfVar8 = (float *)(param_3 + 0x10 + *(int *)(param_1 + 0x5c));
local_54 = (fVar3 - (float)(int)local_34) * _DAT_007edf18;
*pfVar8 = _DAT_007edf08 * local_54 + *pfVar8;
pfVar8 = (float *)(iVar9 + 0x10 + *(int *)(param_1 + 0x5c));
*pfVar8 = _DAT_007edf04 * local_54 + *pfVar8;
pfVar8 = (float *)(iVar13 + 0x10 + *(int *)(param_1 + 0x5c));
*pfVar8 = _DAT_007edf00 * local_54 + *pfVar8;
pfVar8 = (float *)(param_3 + 0x1c + *(int *)(param_1 + 0x5c));
local_54 = local_54 * (float)_DAT_007edef8;
fVar5 = (fVar4 - (float)iVar15) * fVar5;
*pfVar8 = _DAT_007edf08 * fVar5 + *pfVar8;
pfVar8 = (float *)(iVar9 + 0x1c + *(int *)(param_1 + 0x5c));
*pfVar8 = _DAT_007edf04 * fVar5 + *pfVar8;
pfVar8 = (float *)(iVar13 + 0x1c + *(int *)(param_1 + 0x5c));
*pfVar8 = _DAT_007edf00 * fVar5 + *pfVar8;
local_48 = fVar5 * (float)_DAT_007edef8;
}
uVar11 = local_34;
if (0xfffe < (int)local_34) {
uVar11 = 0xffff;
}
if ((int)uVar11 < 1) {
local_34 = 0;
}
else if (0xfffe < (int)local_34) {
local_34 = 0xffff;
}
iVar16 = iVar15;
if (0xfffe < iVar15) {
iVar16 = 0xffff;
}
if (iVar16 < 1) {
iVar15 = 0;
}
else if (0xfffe < iVar15) {
iVar15 = 0xffff;
}
*puVar14 = iVar15 << 0x10 | local_34;
puVar14 = puVar14 + iVar6;
param_3 = param_3 + iVar12;
iVar9 = iVar9 + iVar12;
iVar13 = iVar13 + iVar12;
param_2 = param_2 + 1;
} while (param_2 < *(uint *)(param_1 + 0x68));
}
return;
}
// --- FUN_005fbeef at 0x005FBEEF (size: 771) ---
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
void __thiscall FUN_005fbeef(int param_1,uint param_2,uint param_3,float *param_4)
{
float *pfVar1;
float fVar2;
int iVar3;
float fVar4;
float fVar5;
float fVar6;
float fVar7;
uint uVar8;
int iVar9;
uint uVar10;
int iVar11;
int iVar12;
int iVar13;
int iVar14;
int iVar15;
undefined2 *puVar16;
undefined2 in_FPUControlWord;
float local_54;
float local_50;
float local_4c;
int local_34;
int local_30;
if (*(int *)(param_1 + 0x54) != 0) {
param_4 = (float *)FUN_005f40ea(param_4);
}
if (*(int *)(param_1 + 0x10) != 0) {
param_4 = (float *)FUN_005f560f(param_4);
}
local_54 = 0.0;
local_50 = 0.0;
local_4c = 0.0;
uVar10 = param_2 & 3;
uVar8 = param_3 & 3;
iVar3 = *(int *)(param_1 + 0x34);
puVar16 = (undefined2 *)
(*(int *)(param_1 + 0x60) * param_2 +
(*(int *)(param_1 + 0x68) + -1) * (param_2 & 1) * 6 + *(int *)(param_1 + 100) * param_3
+ *(int *)(param_1 + 0x20));
if ((param_2 & 1) == 0) {
iVar14 = 0;
iVar13 = 1;
param_2 = 1;
}
else {
iVar14 = *(int *)(param_1 + 0x68) + -1;
param_2 = -1;
iVar13 = -1;
}
param_3 = CONCAT22(param_3._2_2_,in_FPUControlWord);
*(uint *)(param_1 + 0x7c) = param_3;
if (*(int *)(param_1 + 0x5c) != 0) {
FUN_005f592b(param_4);
iVar13 = param_2;
}
param_2 = 0;
if (*(int *)(param_1 + 0x68) != 0) {
iVar11 = iVar13 * 0x10;
iVar9 = iVar14 * 0x10;
iVar12 = (iVar13 + iVar14) * 0x10;
param_3 = (iVar14 - iVar13) * 0x10;
param_4 = (float *)(iVar9 + 8 + (int)param_4);
do {
fVar7 = _DAT_007edf18;
fVar2 = *(float *)(iVar3 + (uVar8 + uVar10 * 8) * 4 + (param_2 & 3) * 4);
fVar4 = (local_54 + param_4[-2]) * _DAT_007edf1c;
fVar5 = (local_50 + param_4[-1]) * _DAT_007edf1c;
fVar6 = (local_4c + *param_4) * _DAT_007edf1c;
local_34 = (int)ROUND(fVar4 + fVar2);
local_30 = (int)ROUND(fVar5 + fVar2);
iVar14 = (int)ROUND(fVar6 + fVar2);
if (*(int *)(param_1 + 0x5c) != 0) {
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x10 + param_3);
local_54 = (fVar4 - (float)local_34) * _DAT_007edf18;
*pfVar1 = _DAT_007edf08 * local_54 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x10 + iVar9);
*pfVar1 = _DAT_007edf04 * local_54 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x10 + iVar12);
*pfVar1 = _DAT_007edf00 * local_54 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x14 + param_3);
local_54 = local_54 * (float)_DAT_007edef8;
local_50 = (fVar5 - (float)local_30) * fVar7;
*pfVar1 = _DAT_007edf08 * local_50 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x14 + iVar9);
*pfVar1 = _DAT_007edf04 * local_50 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x14 + iVar12);
*pfVar1 = _DAT_007edf00 * local_50 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x18 + param_3);
local_50 = local_50 * (float)_DAT_007edef8;
fVar7 = (fVar6 - (float)iVar14) * fVar7;
*pfVar1 = _DAT_007edf08 * fVar7 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x18 + iVar9);
*pfVar1 = _DAT_007edf04 * fVar7 + *pfVar1;
pfVar1 = (float *)(*(int *)(param_1 + 0x5c) + 0x18 + iVar12);
*pfVar1 = _DAT_007edf00 * fVar7 + *pfVar1;
local_4c = fVar7 * (float)_DAT_007edef8;
}
iVar15 = local_34;
if (0xfffe < local_34) {
iVar15 = 0xffff;
}
if (iVar15 < 1) {
local_34 = 0;
}
else if (0xfffe < local_34) {
local_34 = 0xffff;
}
iVar15 = local_30;
if (0xfffe < local_30) {
iVar15 = 0xffff;
}
if (iVar15 < 1) {
local_30 = 0;
}
else if (0xfffe < local_30) {
local_30 = 0xffff;
}
iVar15 = iVar14;
if (0xfffe < iVar14) {
iVar15 = 0xffff;
}
if (iVar15 < 1) {
iVar14 = 0;
}
else if (0xfffe < iVar14) {
iVar14 = 0xffff;
}
puVar16[1] = (undefined2)local_30;
puVar16[2] = (undefined2)local_34;
param_4 = param_4 + iVar13 * 4;
param_3 = param_3 + iVar11;
*puVar16 = (short)iVar14;
puVar16 = puVar16 + iVar13 * 3;
iVar9 = iVar9 + iVar11;
iVar12 = iVar12 + iVar11;
param_2 = param_2 + 1;
} while (param_2 < *(uint *)(param_1 + 0x68));
}
return;
}
// --- FUN_005fc1f2 at 0x005FC1F2 (size: 152) ---
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
void __thiscall FUN_005fc1f2(int param_1,int param_2,int param_3,float *param_4)
{
float fVar1;
byte *pbVar2;
int extraout_ECX;
byte *pbVar3;
fVar1 = _DAT_00799208;
pbVar2 = (byte *)(*(int *)(param_1 + 0x60) * param_2 + *(int *)(param_1 + 100) * param_3 +
*(int *)(param_1 + 0x20));
pbVar3 = pbVar2 + *(int *)(param_1 + 0x74);
for (; pbVar2 < pbVar3; pbVar2 = pbVar2 + 3) {
*param_4 = (float)pbVar2[2] * fVar1;
param_4[1] = (float)pbVar2[1] * fVar1;
param_4[2] = (float)*pbVar2 * fVar1;
param_4[3] = 1.0;
param_4 = param_4 + 4;
}
if (*(int *)(param_1 + 0x18) != 0) {
FUN_005f5595(param_4 + *(int *)(param_1 + 0x68) * -4);
param_1 = extraout_ECX;
}
if (*(int *)(param_1 + 0x10) != 0) {
FUN_005f5802(param_4 + *(int *)(param_1 + 0x68) * -4);
}
return;
}
// --- FUN_005fc28a at 0x005FC28A (size: 178) ---
/* WARNING: Removing unreachable block (ram,0x005fc2e6) */
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
void __thiscall FUN_005fc28a(int param_1,int param_2,int param_3,float *param_4)
{
uint *puVar1;
float fVar2;
uint *puVar3;
int extraout_ECX;
fVar2 = _DAT_00799208;
puVar3 = (uint *)(*(int *)(param_1 + 0x60) * param_2 + *(int *)(param_1 + 100) * param_3 +
*(int *)(param_1 + 0x20));
puVar1 = puVar3 + *(int *)(param_1 + 0x68);
for (; puVar3 < puVar1; puVar3 = puVar3 + 1) {
*param_4 = (float)*(byte *)((int)puVar3 + 2) * fVar2;
param_4[1] = (float)*(byte *)((int)puVar3 + 1) * fVar2;
param_4[2] = (float)(*puVar3 & 0xff) * fVar2;
param_4[3] = (float)*(byte *)((int)puVar3 + 3) * fVar2;
param_4 = param_4 + 4;
}
if (*(int *)(param_1 + 0x18) != 0) {
FUN_005f5595(param_4 + *(int *)(param_1 + 0x68) * -4);
param_1 = extraout_ECX;
}
if (*(int *)(param_1 + 0x10) != 0) {
FUN_005f5802(param_4 + *(int *)(param_1 + 0x68) * -4);
}
return;
}
// --- FUN_005fc33c at 0x005FC33C (size: 168) ---
/* WARNING: Removing unreachable block (ram,0x005fc398) */
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
void __thiscall FUN_005fc33c(int param_1,int param_2,int param_3,float *param_4)
{
uint *puVar1;
float fVar2;
uint *puVar3;
int extraout_ECX;
fVar2 = _DAT_00799208;
puVar3 = (uint *)(*(int *)(param_1 + 0x60) * param_2 + *(int *)(param_1 + 100) * param_3 +
*(int *)(param_1 + 0x20));
puVar1 = puVar3 + *(int *)(param_1 + 0x68);
for (; puVar3 < puVar1; puVar3 = puVar3 + 1) {
*param_4 = (float)*(byte *)((int)puVar3 + 2) * fVar2;
param_4[1] = (float)*(byte *)((int)puVar3 + 1) * fVar2;
param_4[2] = (float)(*puVar3 & 0xff) * fVar2;
param_4[3] = 1.0;
param_4 = param_4 + 4;
}
if (*(int *)(param_1 + 0x18) != 0) {
FUN_005f5595(param_4 + *(int *)(param_1 + 0x68) * -4);
param_1 = extraout_ECX;
}
if (*(int *)(param_1 + 0x10) != 0) {
FUN_005f5802(param_4 + *(int *)(param_1 + 0x68) * -4);
}
return;
}
// --- FUN_005fc3e4 at 0x005FC3E4 (size: 173) ---
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
void __thiscall FUN_005fc3e4(int param_1,int param_2,int param_3,float *param_4)
{
ushort *puVar1;
float fVar2;
ushort *puVar3;
int extraout_ECX;
fVar2 = _DAT_007edee8;
puVar3 = (ushort *)
(*(int *)(param_1 + 0x60) * param_2 + *(int *)(param_1 + 100) * param_3 +
*(int *)(param_1 + 0x20));
puVar1 = puVar3 + *(int *)(param_1 + 0x68);
for (; puVar3 < puVar1; puVar3 = puVar3 + 1) {
*param_4 = (float)(*puVar3 >> 0xb) * fVar2;
param_4[1] = (float)((*puVar3 & 0x7e0) >> 5) * _DAT_007edee0;
param_4[2] = (float)((byte)*puVar3 & 0x1f) * fVar2;
param_4[3] = 1.0;
param_4 = param_4 + 4;
}
if (*(int *)(param_1 + 0x18) != 0) {
FUN_005f5595(param_4 + *(int *)(param_1 + 0x68) * -4);
param_1 = extraout_ECX;
}
if (*(int *)(param_1 + 0x10) != 0) {
FUN_005f5802(param_4 + *(int *)(param_1 + 0x68) * -4);
}
return;
}
// --- FUN_005fc491 at 0x005FC491 (size: 170) ---
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
void __thiscall FUN_005fc491(int param_1,int param_2,int param_3,float *param_4)
{
ushort *puVar1;
float fVar2;
ushort *puVar3;
int extraout_ECX;
fVar2 = _DAT_007edee8;
puVar3 = (ushort *)
(*(int *)(param_1 + 0x60) * param_2 + *(int *)(param_1 + 100) * param_3 +
*(int *)(param_1 + 0x20));
puVar1 = puVar3 + *(int *)(param_1 + 0x68);
for (; puVar3 < puVar1; puVar3 = puVar3 + 1) {
*param_4 = (float)((*puVar3 & 0x7c00) >> 10) * fVar2;
param_4[1] = (float)((*puVar3 & 0x3e0) >> 5) * fVar2;
param_4[2] = (float)((byte)*puVar3 & 0x1f) * fVar2;
param_4[3] = 1.0;
param_4 = param_4 + 4;
}
if (*(int *)(param_1 + 0x18) != 0) {
FUN_005f5595(param_4 + *(int *)(param_1 + 0x68) * -4);
param_1 = extraout_ECX;
}
if (*(int *)(param_1 + 0x10) != 0) {
FUN_005f5802(param_4 + *(int *)(param_1 + 0x68) * -4);
}
return;
}
// --- FUN_005fc53b at 0x005FC53B (size: 184) ---
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
void __thiscall FUN_005fc53b(int param_1,int param_2,int param_3,float *param_4)
{
ushort *puVar1;
float fVar2;
ushort *puVar3;
int extraout_ECX;
fVar2 = _DAT_007edee8;
puVar3 = (ushort *)
(*(int *)(param_1 + 0x60) * param_2 + *(int *)(param_1 + 100) * param_3 +
*(int *)(param_1 + 0x20));
puVar1 = puVar3 + *(int *)(param_1 + 0x68);
for (; puVar3 < puVar1; puVar3 = puVar3 + 1) {
*param_4 = (float)((*puVar3 & 0x7c00) >> 10) * fVar2;
param_4[1] = (float)((*puVar3 & 0x3e0) >> 5) * fVar2;
param_4[2] = (float)((byte)*puVar3 & 0x1f) * fVar2;
param_4[3] = (float)(*puVar3 >> 0xf);
param_4 = param_4 + 4;
}
if (*(int *)(param_1 + 0x18) != 0) {
FUN_005f5595(param_4 + *(int *)(param_1 + 0x68) * -4);
param_1 = extraout_ECX;
}
if (*(int *)(param_1 + 0x10) != 0) {
FUN_005f5802(param_4 + *(int *)(param_1 + 0x68) * -4);
}
return;
}
// --- FUN_005fc5f3 at 0x005FC5F3 (size: 183) ---
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
void __thiscall FUN_005fc5f3(int param_1,int param_2,int param_3,float *param_4)
{
ushort *puVar1;
float fVar2;
ushort *puVar3;
int extraout_ECX;
fVar2 = _DAT_0079cc80;
puVar3 = (ushort *)
(*(int *)(param_1 + 0x60) * param_2 + *(int *)(param_1 + 100) * param_3 +
*(int *)(param_1 + 0x20));
puVar1 = puVar3 + *(int *)(param_1 + 0x68);
for (; puVar3 < puVar1; puVar3 = puVar3 + 1) {
*param_4 = (float)(*(byte *)((int)puVar3 + 1) & 0xf) * fVar2;
param_4[1] = (float)(byte)((byte)*puVar3 >> 4) * fVar2;
param_4[2] = (float)((byte)*puVar3 & 0xf) * fVar2;
param_4[3] = (float)(*puVar3 >> 0xc) * fVar2;
param_4 = param_4 + 4;
}
if (*(int *)(param_1 + 0x18) != 0) {
FUN_005f5595(param_4 + *(int *)(param_1 + 0x68) * -4);
param_1 = extraout_ECX;
}
if (*(int *)(param_1 + 0x10) != 0) {
FUN_005f5802(param_4 + *(int *)(param_1 + 0x68) * -4);
}
return;
}
// --- FUN_005fc6aa at 0x005FC6AA (size: 226) ---
/* WARNING: Removing unreachable block (ram,0x005fc70a) */
/* WARNING: Removing unreachable block (ram,0x005fc6ef) */
/* WARNING: Removing unreachable block (ram,0x005fc726) */
/* WARNING: Removing unreachable block (ram,0x005fc740) */
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
void __thiscall FUN_005fc6aa(int param_1,int param_2,int param_3,float *param_4)
{
uint *puVar1;
float fVar2;
uint *puVar3;
int extraout_ECX;
fVar2 = _DAT_007edf10;
puVar3 = (uint *)(*(int *)(param_1 + 0x60) * param_2 + *(int *)(param_1 + 100) * param_3 +
*(int *)(param_1 + 0x20));
puVar1 = puVar3 + *(int *)(param_1 + 0x68);
for (; puVar3 < puVar1; puVar3 = puVar3 + 1) {
*param_4 = (float)(*puVar3 & 0x3ff) * fVar2;
param_4[1] = (float)(*puVar3 >> 10 & 0x3ff) * fVar2;
param_4[2] = (float)(*puVar3 >> 0x14 & 0x3ff) * fVar2;
param_4[3] = (float)(*puVar3 >> 0x1e) * _DAT_007e75f0;
param_4 = param_4 + 4;
}
if (*(int *)(param_1 + 0x18) != 0) {
FUN_005f5595(param_4 + *(int *)(param_1 + 0x68) * -4);
param_1 = extraout_ECX;
}
if (*(int *)(param_1 + 0x10) != 0) {
FUN_005f5802(param_4 + *(int *)(param_1 + 0x68) * -4);
}
return;
}
// --- FUN_005fc78c at 0x005FC78C (size: 178) ---
/* WARNING: Removing unreachable block (ram,0x005fc7cb) */
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
void __thiscall FUN_005fc78c(int param_1,int param_2,int param_3,float *param_4)
{
uint *puVar1;
float fVar2;
uint *puVar3;
int extraout_ECX;
fVar2 = _DAT_00799208;
puVar3 = (uint *)(*(int *)(param_1 + 0x60) * param_2 + *(int *)(param_1 + 100) * param_3 +
*(int *)(param_1 + 0x20));
puVar1 = puVar3 + *(int *)(param_1 + 0x68);
for (; puVar3 < puVar1; puVar3 = puVar3 + 1) {
*param_4 = (float)(*puVar3 & 0xff) * fVar2;
param_4[1] = (float)*(byte *)((int)puVar3 + 1) * fVar2;
param_4[2] = (float)*(byte *)((int)puVar3 + 2) * fVar2;
param_4[3] = (float)*(byte *)((int)puVar3 + 3) * fVar2;
param_4 = param_4 + 4;
}
if (*(int *)(param_1 + 0x18) != 0) {
FUN_005f5595(param_4 + *(int *)(param_1 + 0x68) * -4);
param_1 = extraout_ECX;
}
if (*(int *)(param_1 + 0x10) != 0) {
FUN_005f5802(param_4 + *(int *)(param_1 + 0x68) * -4);
}
return;
}
// --- FUN_005fc83e at 0x005FC83E (size: 168) ---
/* WARNING: Removing unreachable block (ram,0x005fc87d) */
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
void __thiscall FUN_005fc83e(int param_1,int param_2,int param_3,float *param_4)
{
uint *puVar1;
float fVar2;
uint *puVar3;
int extraout_ECX;
fVar2 = _DAT_00799208;
puVar3 = (uint *)(*(int *)(param_1 + 0x60) * param_2 + *(int *)(param_1 + 100) * param_3 +
*(int *)(param_1 + 0x20));
puVar1 = puVar3 + *(int *)(param_1 + 0x68);
for (; puVar3 < puVar1; puVar3 = puVar3 + 1) {
*param_4 = (float)(*puVar3 & 0xff) * fVar2;
param_4[1] = (float)*(byte *)((int)puVar3 + 1) * fVar2;
param_4[2] = (float)*(byte *)((int)puVar3 + 2) * fVar2;
param_4[3] = 1.0;
param_4 = param_4 + 4;
}
if (*(int *)(param_1 + 0x18) != 0) {
FUN_005f5595(param_4 + *(int *)(param_1 + 0x68) * -4);
param_1 = extraout_ECX;
}
if (*(int *)(param_1 + 0x10) != 0) {
FUN_005f5802(param_4 + *(int *)(param_1 + 0x68) * -4);
}
return;
}
// --- FUN_005fc8e6 at 0x005FC8E6 (size: 158) ---
/* WARNING: Removing unreachable block (ram,0x005fc925) */
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
void __thiscall FUN_005fc8e6(int param_1,int param_2,int param_3,float *param_4)
{
uint *puVar1;
float fVar2;
uint *puVar3;
int extraout_ECX;
fVar2 = _DAT_007edf18;
puVar3 = (uint *)(*(int *)(param_1 + 0x60) * param_2 + *(int *)(param_1 + 100) * param_3 +
*(int *)(param_1 + 0x20));
puVar1 = puVar3 + *(int *)(param_1 + 0x68);
for (; puVar3 < puVar1; puVar3 = puVar3 + 1) {
*param_4 = (float)(*puVar3 & 0xffff) * fVar2;
param_4[1] = (float)*(ushort *)((int)puVar3 + 2) * fVar2;
param_4[2] = 1.0;
param_4[3] = 1.0;
param_4 = param_4 + 4;
}
if (*(int *)(param_1 + 0x18) != 0) {
FUN_005f5595(param_4 + *(int *)(param_1 + 0x68) * -4);
param_1 = extraout_ECX;
}
if (*(int *)(param_1 + 0x10) != 0) {
FUN_005f5802(param_4 + *(int *)(param_1 + 0x68) * -4);
}
return;
}
// --- FUN_005fc984 at 0x005FC984 (size: 226) ---
/* WARNING: Removing unreachable block (ram,0x005fc9e7) */
/* WARNING: Removing unreachable block (ram,0x005fc9cc) */
/* WARNING: Removing unreachable block (ram,0x005fca00) */
/* WARNING: Removing unreachable block (ram,0x005fca1a) */
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
void __thiscall FUN_005fc984(int param_1,int param_2,int param_3,float *param_4)
{
uint *puVar1;
float fVar2;
uint *puVar3;
int extraout_ECX;
fVar2 = _DAT_007edf10;
puVar3 = (uint *)(*(int *)(param_1 + 0x60) * param_2 + *(int *)(param_1 + 100) * param_3 +
*(int *)(param_1 + 0x20));
puVar1 = puVar3 + *(int *)(param_1 + 0x68);
for (; puVar3 < puVar1; puVar3 = puVar3 + 1) {
*param_4 = (float)(*puVar3 >> 0x14 & 0x3ff) * fVar2;
param_4[1] = (float)(*puVar3 >> 10 & 0x3ff) * fVar2;
param_4[2] = (float)(*puVar3 & 0x3ff) * fVar2;
param_4[3] = (float)(*puVar3 >> 0x1e) * _DAT_007e75f0;
param_4 = param_4 + 4;
}
if (*(int *)(param_1 + 0x18) != 0) {
FUN_005f5595(param_4 + *(int *)(param_1 + 0x68) * -4);
param_1 = extraout_ECX;
}
if (*(int *)(param_1 + 0x10) != 0) {
FUN_005f5802(param_4 + *(int *)(param_1 + 0x68) * -4);
}
return;
}
// --- FUN_005fca66 at 0x005FCA66 (size: 250) ---
/* WARNING: Removing unreachable block (ram,0x005fcad2) */
/* WARNING: Removing unreachable block (ram,0x005fcab0) */
/* WARNING: Removing unreachable block (ram,0x005fcb00) */
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
void __thiscall FUN_005fca66(int param_1,int param_2,int param_3,float *param_4)
{
uint *puVar1;
float fVar2;
ushort uVar3;
uint *puVar4;
puVar4 = (uint *)(*(int *)(param_1 + 0x60) * param_2 + *(int *)(param_1 + 100) * param_3 +
*(int *)(param_1 + 0x20));
puVar1 = puVar4 + *(int *)(param_1 + 0x68) * 2;
fVar2 = _DAT_007edf18;
for (; puVar4 < puVar1; puVar4 = puVar4 + 2) {
*param_4 = (float)(*puVar4 & 0xffff) * fVar2;
param_4[1] = (float)(*puVar4 >> 0x10) * fVar2;
uVar3 = __aullshr();
fVar2 = _DAT_007edf18;
param_4[2] = (float)uVar3 * _DAT_007edf18;
param_4[3] = (float)*(ushort *)((int)puVar4 + 6) * fVar2;
param_4 = param_4 + 4;
}
if (*(int *)(param_1 + 0x18) != 0) {
FUN_005f5595(param_4 + *(int *)(param_1 + 0x68) * -4);
}
if (*(int *)(param_1 + 0x10) != 0) {
FUN_005f5802(param_4 + *(int *)(param_1 + 0x68) * -4);
}
return;
}
// --- FUN_005fcb60 at 0x005FCB60 (size: 170) ---
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
void __thiscall FUN_005fcb60(int param_1,int param_2,int param_3,float *param_4)
{
float fVar1;
byte *pbVar2;
int extraout_ECX;
byte *pbVar3;
fVar1 = _DAT_007edf0c;
pbVar2 = (byte *)(*(int *)(param_1 + 0x60) * param_2 + *(int *)(param_1 + 100) * param_3 +
*(int *)(param_1 + 0x20));
pbVar3 = pbVar2 + *(int *)(param_1 + 0x68);
for (; pbVar2 < pbVar3; pbVar2 = pbVar2 + 1) {
*param_4 = (float)(*pbVar2 >> 5) * fVar1;
param_4[1] = (float)(*pbVar2 >> 2 & 7) * fVar1;
param_4[2] = (float)(*pbVar2 & 3) * _DAT_007e75f0;
param_4[3] = 1.0;
param_4 = param_4 + 4;
}
if (*(int *)(param_1 + 0x18) != 0) {
FUN_005f5595(param_4 + *(int *)(param_1 + 0x68) * -4);
param_1 = extraout_ECX;
}
if (*(int *)(param_1 + 0x10) != 0) {
FUN_005f5802(param_4 + *(int *)(param_1 + 0x68) * -4);
}
return;
}
// --- FUN_005fcc0a at 0x005FCC0A (size: 126) ---
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
void __thiscall FUN_005fcc0a(int param_1,int param_2,int param_3,undefined4 *param_4)
{
byte *pbVar1;
int extraout_ECX;
byte *pbVar2;
pbVar1 = (byte *)(*(int *)(param_1 + 0x60) * param_2 + *(int *)(param_1 + 100) * param_3 +
*(int *)(param_1 + 0x20));
pbVar2 = pbVar1 + *(int *)(param_1 + 0x68);
for (; pbVar1 < pbVar2; pbVar1 = pbVar1 + 1) {
*param_4 = 0;
param_4[1] = 0;
param_4[2] = 0;
param_4[3] = (float)*pbVar1 * _DAT_00799208;
param_4 = param_4 + 4;
}
if (*(int *)(param_1 + 0x18) != 0) {
FUN_005f5595(param_4 + *(int *)(param_1 + 0x68) * -4);
param_1 = extraout_ECX;
}
if (*(int *)(param_1 + 0x10) != 0) {
FUN_005f5802(param_4 + *(int *)(param_1 + 0x68) * -4);
}
return;
}
// --- FUN_005fcc88 at 0x005FCC88 (size: 186) ---
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
void __thiscall FUN_005fcc88(int param_1,int param_2,int param_3,float *param_4)
{
byte *pbVar1;
float fVar2;
byte *pbVar3;
int extraout_ECX;
fVar2 = _DAT_007edf0c;
pbVar3 = (byte *)(*(int *)(param_1 + 0x60) * param_2 + *(int *)(param_1 + 100) * param_3 +
*(int *)(param_1 + 0x20));
pbVar1 = pbVar3 + *(int *)(param_1 + 0x68) * 2;
for (; pbVar3 < pbVar1; pbVar3 = pbVar3 + 2) {
*param_4 = (float)(*pbVar3 >> 5) * fVar2;
param_4[1] = (float)(*pbVar3 >> 2 & 7) * fVar2;
param_4[2] = (float)(*pbVar3 & 3) * _DAT_007e75f0;
param_4[3] = (float)pbVar3[1] * _DAT_00799208;
param_4 = param_4 + 4;
}
if (*(int *)(param_1 + 0x18) != 0) {
FUN_005f5595(param_4 + *(int *)(param_1 + 0x68) * -4);
param_1 = extraout_ECX;
}
if (*(int *)(param_1 + 0x10) != 0) {
FUN_005f5802(param_4 + *(int *)(param_1 + 0x68) * -4);
}
return;
}
// --- FUN_005fcd42 at 0x005FCD42 (size: 167) ---
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
void __thiscall FUN_005fcd42(int param_1,int param_2,int param_3,float *param_4)
{
byte *pbVar1;
float fVar2;
byte *pbVar3;
int extraout_ECX;
fVar2 = _DAT_0079cc80;
pbVar3 = (byte *)(*(int *)(param_1 + 0x60) * param_2 + *(int *)(param_1 + 100) * param_3 +
*(int *)(param_1 + 0x20));
pbVar1 = pbVar3 + *(int *)(param_1 + 0x68) * 2;
for (; pbVar3 < pbVar1; pbVar3 = pbVar3 + 2) {
*param_4 = (float)(pbVar3[1] & 0xf) * fVar2;
param_4[1] = (float)(*pbVar3 >> 4) * fVar2;
param_4[2] = (float)(*pbVar3 & 0xf) * fVar2;
param_4[3] = 1.0;
param_4 = param_4 + 4;
}
if (*(int *)(param_1 + 0x18) != 0) {
FUN_005f5595(param_4 + *(int *)(param_1 + 0x68) * -4);
param_1 = extraout_ECX;
}
if (*(int *)(param_1 + 0x10) != 0) {
FUN_005f5802(param_4 + *(int *)(param_1 + 0x68) * -4);
}
return;
}
// --- FUN_005fcde9 at 0x005FCDE9 (size: 144) ---
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
void __thiscall FUN_005fcde9(int param_1,int param_2,int param_3,undefined4 *param_4)
{
byte *pbVar1;
byte *pbVar2;
int extraout_ECX;
undefined4 *puVar3;
pbVar2 = (byte *)(*(int *)(param_1 + 0x60) * param_2 + *(int *)(param_1 + 100) * param_3 +
*(int *)(param_1 + 0x20));
pbVar1 = pbVar2 + *(int *)(param_1 + 0x68) * 2;
for (; pbVar2 < pbVar1; pbVar2 = pbVar2 + 2) {
puVar3 = (undefined4 *)((uint)*pbVar2 * 0x10 + *(int *)(param_1 + 0x38));
*param_4 = *puVar3;
param_4[1] = puVar3[1];
param_4[2] = puVar3[2];
param_4[3] = puVar3[3];
param_4[3] = (float)pbVar2[1] * _DAT_00799208;
param_4 = param_4 + 4;
}
if (*(int *)(param_1 + 0x18) != 0) {
FUN_005f5595(param_4 + *(int *)(param_1 + 0x68) * -4);
param_1 = extraout_ECX;
}
if (*(int *)(param_1 + 0x10) != 0) {
FUN_005f5802(param_4 + *(int *)(param_1 + 0x68) * -4);
}
return;
}
// --- FUN_005fce79 at 0x005FCE79 (size: 111) ---
void __thiscall FUN_005fce79(int param_1,int param_2,int param_3,undefined4 *param_4)
{
undefined4 *puVar1;
byte *pbVar2;
int extraout_ECX;
byte *pbVar3;
undefined4 *puVar4;
pbVar2 = (byte *)(*(int *)(param_1 + 0x60) * param_2 + *(int *)(param_1 + 100) * param_3 +
*(int *)(param_1 + 0x20));
pbVar3 = pbVar2 + *(int *)(param_1 + 0x68);
for (; pbVar2 < pbVar3; pbVar2 = pbVar2 + 1) {
puVar4 = (undefined4 *)((uint)*pbVar2 * 0x10 + *(int *)(param_1 + 0x38));
*param_4 = *puVar4;
param_4[1] = puVar4[1];
puVar1 = param_4 + 3;
param_4[2] = puVar4[2];
param_4 = param_4 + 4;
*puVar1 = puVar4[3];
}
if (*(int *)(param_1 + 0x18) != 0) {
FUN_005f5595(param_4 + *(int *)(param_1 + 0x68) * -4);
param_1 = extraout_ECX;
}
if (*(int *)(param_1 + 0x10) != 0) {
FUN_005f5802(param_4 + *(int *)(param_1 + 0x68) * -4);
}
return;
}
// --- FUN_005fcee8 at 0x005FCEE8 (size: 122) ---
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
void __thiscall FUN_005fcee8(int param_1,int param_2,int param_3,float *param_4)
{
float fVar1;
byte *pbVar2;
int extraout_ECX;
byte *pbVar3;
pbVar2 = (byte *)(*(int *)(param_1 + 0x60) * param_2 + *(int *)(param_1 + 100) * param_3 +
*(int *)(param_1 + 0x20));
pbVar3 = pbVar2 + *(int *)(param_1 + 0x68);
for (; pbVar2 < pbVar3; pbVar2 = pbVar2 + 1) {
fVar1 = (float)*pbVar2 * _DAT_00799208;
param_4[2] = fVar1;
param_4[1] = fVar1;
*param_4 = fVar1;
param_4[3] = 1.0;
param_4 = param_4 + 4;
}
if (*(int *)(param_1 + 0x18) != 0) {
FUN_005f5595(param_4 + *(int *)(param_1 + 0x68) * -4);
param_1 = extraout_ECX;
}
if (*(int *)(param_1 + 0x10) != 0) {
FUN_005f5802(param_4 + *(int *)(param_1 + 0x68) * -4);
}
return;
}
// --- FUN_005fcf62 at 0x005FCF62 (size: 145) ---
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
void __thiscall FUN_005fcf62(int param_1,int param_2,int param_3,float *param_4)
{
byte *pbVar1;
float fVar2;
float fVar3;
byte *pbVar4;
int extraout_ECX;
fVar3 = _DAT_00799208;
pbVar4 = (byte *)(*(int *)(param_1 + 0x60) * param_2 + *(int *)(param_1 + 100) * param_3 +
*(int *)(param_1 + 0x20));
pbVar1 = pbVar4 + *(int *)(param_1 + 0x68) * 2;
for (; pbVar4 < pbVar1; pbVar4 = pbVar4 + 2) {
fVar2 = (float)*pbVar4 * fVar3;
param_4[2] = fVar2;
param_4[1] = fVar2;
*param_4 = fVar2;
param_4[3] = (float)pbVar4[1] * fVar3;
param_4 = param_4 + 4;
}
if (*(int *)(param_1 + 0x18) != 0) {
FUN_005f5595(param_4 + *(int *)(param_1 + 0x68) * -4);
param_1 = extraout_ECX;
}
if (*(int *)(param_1 + 0x10) != 0) {
FUN_005f5802(param_4 + *(int *)(param_1 + 0x68) * -4);
}
return;
}
// --- FUN_005fcff3 at 0x005FCFF3 (size: 145) ---
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
void __thiscall FUN_005fcff3(int param_1,int param_2,int param_3,float *param_4)
{
float fVar1;
float fVar2;
byte *pbVar3;
int extraout_ECX;
byte *pbVar4;
fVar2 = _DAT_0079cc80;
pbVar3 = (byte *)(*(int *)(param_1 + 0x60) * param_2 + *(int *)(param_1 + 100) * param_3 +
*(int *)(param_1 + 0x20));
pbVar4 = pbVar3 + *(int *)(param_1 + 0x68);
for (; pbVar3 < pbVar4; pbVar3 = pbVar3 + 1) {
fVar1 = (float)(*pbVar3 & 0xf) * fVar2;
param_4[2] = fVar1;
param_4[1] = fVar1;
*param_4 = fVar1;
param_4[3] = (float)(*pbVar3 >> 4) * fVar2;
param_4 = param_4 + 4;
}
if (*(int *)(param_1 + 0x18) != 0) {
FUN_005f5595(param_4 + *(int *)(param_1 + 0x68) * -4);
param_1 = extraout_ECX;
}
if (*(int *)(param_1 + 0x10) != 0) {
FUN_005f5802(param_4 + *(int *)(param_1 + 0x68) * -4);
}
return;
}
// --- FUN_005fd084 at 0x005FD084 (size: 174) ---
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
void __thiscall FUN_005fd084(int param_1,int param_2,int param_3,float *param_4)
{
char *pcVar1;
char cVar2;
float fVar3;
char *pcVar4;
fVar3 = _DAT_007edf20;
pcVar4 = (char *)(*(int *)(param_1 + 0x60) * param_2 + *(int *)(param_1 + 100) * param_3 +
*(int *)(param_1 + 0x20));
pcVar1 = pcVar4 + *(int *)(param_1 + 0x68) * 2;
for (; pcVar4 < pcVar1; pcVar4 = pcVar4 + 2) {
cVar2 = pcVar4[1];
*param_4 = (float)(int)(char)((*pcVar4 == -0x80) + *pcVar4) * fVar3;
param_4[1] = (float)(int)(char)((cVar2 == -0x80) + cVar2) * fVar3;
param_4[2] = 1.0;
param_4[3] = 1.0;
param_4 = param_4 + 4;
}
if (*(int *)(param_1 + 0x18) != 0) {
FUN_005f5595(param_4 + *(int *)(param_1 + 0x68) * -4);
}
if (*(int *)(param_1 + 0x10) != 0) {
FUN_005f5802(param_4 + *(int *)(param_1 + 0x68) * -4);
}
return;
}
// --- FUN_005fd132 at 0x005FD132 (size: 211) ---
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
void __thiscall FUN_005fd132(int param_1,int param_2,int param_3,float *param_4)
{
ushort *puVar1;
float fVar2;
ushort *puVar3;
char cVar4;
char cVar5;
fVar2 = _DAT_0079cc80;
puVar3 = (ushort *)
(*(int *)(param_1 + 0x60) * param_2 + *(int *)(param_1 + 100) * param_3 +
*(int *)(param_1 + 0x20));
puVar1 = puVar3 + *(int *)(param_1 + 0x68);
for (; puVar3 < puVar1; puVar3 = puVar3 + 1) {
cVar5 = (char)((char)*puVar3 << 3) >> 3;
cVar4 = (char)((char)(*puVar3 >> 5) << 3) >> 3;
*param_4 = (float)(int)(char)((cVar5 == -0x10) + cVar5) * fVar2;
param_4[1] = (float)(int)(char)((cVar4 == -0x10) + cVar4) * fVar2;
param_4[2] = 1.0;
param_4[3] = (float)(*puVar3 >> 10) * _DAT_007edee0;
param_4 = param_4 + 4;
}
if (*(int *)(param_1 + 0x18) != 0) {
FUN_005f5595(param_4 + *(int *)(param_1 + 0x68) * -4);
}
if (*(int *)(param_1 + 0x10) != 0) {
FUN_005f5802(param_4 + *(int *)(param_1 + 0x68) * -4);
}
return;
}
// --- FUN_005fd205 at 0x005FD205 (size: 191) ---
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
void __thiscall FUN_005fd205(int param_1,int param_2,int param_3,float *param_4)
{
char *pcVar1;
float fVar2;
char *pcVar3;
char cVar4;
fVar2 = _DAT_007edf20;
pcVar3 = (char *)(*(int *)(param_1 + 0x60) * param_2 + *(int *)(param_1 + 100) * param_3 +
*(int *)(param_1 + 0x20));
pcVar1 = pcVar3 + *(int *)(param_1 + 0x68) * 4;
for (; pcVar3 < pcVar1; pcVar3 = pcVar3 + 4) {
cVar4 = (char)((uint)*(undefined4 *)pcVar3 >> 8);
*param_4 = (float)(int)(char)((*pcVar3 == -0x80) + *pcVar3) * fVar2;
param_4[1] = (float)(int)(char)((cVar4 == -0x80) + cVar4) * fVar2;
param_4[2] = 1.0;
param_4[3] = (float)(byte)pcVar3[2] * _DAT_00799208;
param_4 = param_4 + 4;
}
if (*(int *)(param_1 + 0x18) != 0) {
FUN_005f5595(param_4 + *(int *)(param_1 + 0x68) * -4);
}
if (*(int *)(param_1 + 0x10) != 0) {
FUN_005f5802(param_4 + *(int *)(param_1 + 0x68) * -4);
}
return;
}
// --- FUN_005fd2c4 at 0x005FD2C4 (size: 238) ---
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
void __thiscall FUN_005fd2c4(int param_1,int param_2,int param_3,float *param_4)
{
undefined4 *puVar1;
undefined4 uVar2;
char cVar3;
float fVar4;
undefined4 *puVar5;
char cVar6;
char cVar7;
fVar4 = _DAT_007edf20;
puVar5 = (undefined4 *)
(*(int *)(param_1 + 0x60) * param_2 + *(int *)(param_1 + 100) * param_3 +
*(int *)(param_1 + 0x20));
puVar1 = puVar5 + *(int *)(param_1 + 0x68);
for (; puVar5 < puVar1; puVar5 = puVar5 + 1) {
uVar2 = *puVar5;
cVar3 = (char)((uint)uVar2 >> 0x10);
cVar7 = (char)((uint)uVar2 >> 0x18);
cVar6 = (char)((uint)uVar2 >> 8);
*param_4 = (float)(int)(char)(((char)uVar2 == -0x80) + (char)uVar2) * fVar4;
param_4[1] = (float)(int)(char)((cVar6 == -0x80) + cVar6) * fVar4;
param_4[2] = (float)(int)(char)((cVar3 == -0x80) + cVar3) * fVar4;
param_4[3] = (float)(int)(char)((cVar7 == -0x80) + cVar7) * fVar4;
param_4 = param_4 + 4;
}
if (*(int *)(param_1 + 0x18) != 0) {
FUN_005f5595(param_4 + *(int *)(param_1 + 0x68) * -4);
}
if (*(int *)(param_1 + 0x10) != 0) {
FUN_005f5802(param_4 + *(int *)(param_1 + 0x68) * -4);
}
return;
}
// --- FUN_005fd3b2 at 0x005FD3B2 (size: 181) ---
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
void __thiscall FUN_005fd3b2(int param_1,int param_2,int param_3,float *param_4)
{
short *psVar1;
short sVar2;
float fVar3;
short *psVar4;
int extraout_ECX;
fVar3 = _DAT_007cbd08;
psVar4 = (short *)(*(int *)(param_1 + 0x60) * param_2 + *(int *)(param_1 + 100) * param_3 +
*(int *)(param_1 + 0x20));
psVar1 = psVar4 + *(int *)(param_1 + 0x68) * 2;
for (; psVar4 < psVar1; psVar4 = psVar4 + 2) {
sVar2 = psVar4[1];
*param_4 = (float)(int)(short)((ushort)(*psVar4 == -0x8000) + *psVar4) * fVar3;
param_4[1] = (float)(int)(short)((ushort)(sVar2 == -0x8000) + sVar2) * fVar3;
param_4[2] = 1.0;
param_4[3] = 1.0;
param_4 = param_4 + 4;
}
if (*(int *)(param_1 + 0x18) != 0) {
FUN_005f5595(param_4 + *(int *)(param_1 + 0x68) * -4);
param_1 = extraout_ECX;
}
if (*(int *)(param_1 + 0x10) != 0) {
FUN_005f5802(param_4 + *(int *)(param_1 + 0x68) * -4);
}
return;
}
// --- FUN_005fd467 at 0x005FD467 (size: 268) ---
/* WARNING: Removing unreachable block (ram,0x005fd522) */
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
void __thiscall FUN_005fd467(int param_1,int param_2,int param_3,float *param_4)
{
uint *puVar1;
float fVar2;
uint *puVar3;
int extraout_ECX;
short sVar4;
short sVar5;
short sVar6;
fVar2 = _DAT_007ee04c;
puVar3 = (uint *)(*(int *)(param_1 + 0x60) * param_2 + *(int *)(param_1 + 100) * param_3 +
*(int *)(param_1 + 0x20));
puVar1 = puVar3 + *(int *)(param_1 + 0x68);
for (; puVar3 < puVar1; puVar3 = puVar3 + 1) {
sVar4 = (short)((ushort)(*puVar3 >> 0x14) << 6) >> 6;
sVar6 = (short)((short)*puVar3 << 6) >> 6;
sVar5 = (short)((short)(*puVar3 >> 10) << 6) >> 6;
*param_4 = (float)(int)(short)((ushort)(sVar6 == -0x200) + sVar6) * fVar2;
param_4[1] = (float)(int)(short)((ushort)(sVar5 == -0x200) + sVar5) * fVar2;
param_4[2] = (float)(int)(short)((ushort)(sVar4 == -0x200) + sVar4) * fVar2;
param_4[3] = (float)(*puVar3 >> 0x1e) * _DAT_007e75f0;
param_4 = param_4 + 4;
}
if (*(int *)(param_1 + 0x18) != 0) {
FUN_005f5595(param_4 + *(int *)(param_1 + 0x68) * -4);
param_1 = extraout_ECX;
}
if (*(int *)(param_1 + 0x10) != 0) {
FUN_005f5802(param_4 + *(int *)(param_1 + 0x68) * -4);
}
return;
}
// --- FUN_005fd573 at 0x005FD573 (size: 266) ---
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
void __thiscall FUN_005fd573(int param_1,int param_2,int param_3,float *param_4)
{
short *psVar1;
undefined4 uVar2;
float *pfVar3;
float fVar4;
short *psVar5;
int extraout_ECX;
short sVar6;
fVar4 = _DAT_007cbd08;
psVar5 = (short *)(*(int *)(param_1 + 0x60) * param_2 + *(int *)(param_1 + 100) * param_3 +
*(int *)(param_1 + 0x20));
psVar1 = psVar5 + *(int *)(param_1 + 0x68) * 4;
pfVar3 = param_4;
for (; psVar5 < psVar1; psVar5 = psVar5 + 4) {
uVar2 = *(undefined4 *)(psVar5 + 2);
sVar6 = (short)uVar2;
param_4._0_2_ = (short)((uint)*(undefined4 *)psVar5 >> 0x10);
*pfVar3 = (float)(int)(short)((ushort)(*psVar5 == -0x8000) + *psVar5) * fVar4;
pfVar3[1] = (float)(int)(short)((ushort)((short)param_4 == -0x8000) + (short)param_4) * fVar4;
param_2._0_2_ = (short)((uint)uVar2 >> 0x10);
pfVar3[2] = (float)(int)(short)((ushort)(sVar6 == -0x8000) + sVar6) * fVar4;
pfVar3[3] = (float)(int)(short)((ushort)((short)param_2 == -0x8000) + (short)param_2) * fVar4;
pfVar3 = pfVar3 + 4;
}
if (*(int *)(param_1 + 0x18) != 0) {
FUN_005f5595(pfVar3 + *(int *)(param_1 + 0x68) * -4);
param_1 = extraout_ECX;
}
if (*(int *)(param_1 + 0x10) != 0) {
FUN_005f5802(pfVar3 + *(int *)(param_1 + 0x68) * -4);
}
return;
}
// --- FUN_005fd67d at 0x005FD67D (size: 212) ---
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
void __thiscall FUN_005fd67d(int param_1,int param_2,int param_3,float *param_4)
{
char *pcVar1;
char cVar2;
float fVar3;
float fVar4;
float fVar5;
char *pcVar6;
fVar5 = _DAT_007edf20;
pcVar6 = (char *)(*(int *)(param_1 + 0x60) * param_2 + *(int *)(param_1 + 100) * param_3 +
*(int *)(param_1 + 0x20));
pcVar1 = pcVar6 + *(int *)(param_1 + 0x68) * 2;
for (; pcVar6 < pcVar1; pcVar6 = pcVar6 + 2) {
cVar2 = pcVar6[1];
fVar3 = (float)(int)(char)((*pcVar6 == -0x80) + *pcVar6) * fVar5;
*param_4 = fVar3;
fVar4 = (float)(int)(char)((cVar2 == -0x80) + cVar2) * fVar5;
param_4[1] = fVar4;
fVar3 = (_DAT_007938b0 - fVar3 * fVar3) - fVar4 * fVar4;
if (fVar3 < DAT_00796344 == (fVar3 == DAT_00796344)) {
fVar3 = SQRT(fVar3);
}
else {
fVar3 = 0.0;
}
param_4[2] = fVar3;
param_4[3] = 1.0;
param_4 = param_4 + 4;
}
if (*(int *)(param_1 + 0x18) != 0) {
FUN_005f5595(param_4 + *(int *)(param_1 + 0x68) * -4);
}
if (*(int *)(param_1 + 0x10) != 0) {
FUN_005f5802(param_4 + *(int *)(param_1 + 0x68) * -4);
}
return;
}
// --- FUN_005fd751 at 0x005FD751 (size: 124) ---
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
void __thiscall FUN_005fd751(int param_1,int param_2,int param_3,float *param_4)
{
ushort *puVar1;
float fVar2;
ushort *puVar3;
int extraout_ECX;
puVar3 = (ushort *)
(*(int *)(param_1 + 0x60) * param_2 + *(int *)(param_1 + 100) * param_3 +
*(int *)(param_1 + 0x20));
puVar1 = puVar3 + *(int *)(param_1 + 0x68);
for (; puVar3 < puVar1; puVar3 = puVar3 + 1) {
fVar2 = (float)*puVar3 * _DAT_007edf18;
param_4[2] = fVar2;
param_4[1] = fVar2;
*param_4 = fVar2;
param_4[3] = 1.0;
param_4 = param_4 + 4;
}
if (*(int *)(param_1 + 0x18) != 0) {
FUN_005f5595(param_4 + *(int *)(param_1 + 0x68) * -4);
param_1 = extraout_ECX;
}
if (*(int *)(param_1 + 0x10) != 0) {
FUN_005f5802(param_4 + *(int *)(param_1 + 0x68) * -4);
}
return;
}
// --- FUN_005fd7cd at 0x005FD7CD (size: 116) ---
void __thiscall FUN_005fd7cd(int param_1,int param_2,int param_3,undefined4 *param_4)
{
undefined4 *puVar1;
undefined4 uVar2;
undefined4 *puVar3;
int extraout_ECX;
puVar3 = (undefined4 *)
(*(int *)(param_1 + 0x60) * param_2 + *(int *)(param_1 + 100) * param_3 +
*(int *)(param_1 + 0x20));
puVar1 = puVar3 + *(int *)(param_1 + 0x68);
for (; puVar3 < puVar1; puVar3 = puVar3 + 1) {
uVar2 = *puVar3;
param_4[3] = 0x3f800000;
*param_4 = uVar2;
param_4[2] = 0x3f800000;
param_4[1] = 0x3f800000;
param_4 = param_4 + 4;
}
if (*(int *)(param_1 + 0x18) != 0) {
FUN_005f5595(param_4 + *(int *)(param_1 + 0x68) * -4);
param_1 = extraout_ECX;
}
if (*(int *)(param_1 + 0x10) != 0) {
FUN_005f5802(param_4 + *(int *)(param_1 + 0x68) * -4);
}
return;
}
// --- FUN_005fd841 at 0x005FD841 (size: 132) ---
void __thiscall FUN_005fd841(int param_1,int param_2,int param_3,int param_4)
{
uint uVar1;
uint uVar2;
uVar2 = *(int *)(param_1 + 0x60) * param_2 + *(int *)(param_1 + 100) * param_3 +
*(int *)(param_1 + 0x20);
uVar1 = uVar2 + *(int *)(param_1 + 0x68) * 2;
for (; uVar2 < uVar1; uVar2 = uVar2 + 2) {
thunk_FUN_005e038f(param_4,uVar2,1);
*(undefined4 *)(param_4 + 0xc) = 0x3f800000;
*(undefined4 *)(param_4 + 8) = 0x3f800000;
*(undefined4 *)(param_4 + 4) = 0x3f800000;
param_4 = param_4 + 0x10;
}
if (*(int *)(param_1 + 0x18) != 0) {
FUN_005f5595(param_4 + *(int *)(param_1 + 0x68) * -0x10);
}
if (*(int *)(param_1 + 0x10) != 0) {
FUN_005f5802(param_4 + *(int *)(param_1 + 0x68) * -0x10);
}
return;
}
// --- FUN_005fd8c5 at 0x005FD8C5 (size: 128) ---
void __thiscall FUN_005fd8c5(int param_1,int param_2,int param_3,int param_4)
{
uint uVar1;
uint uVar2;
uVar2 = *(int *)(param_1 + 0x60) * param_2 + *(int *)(param_1 + 100) * param_3 +
*(int *)(param_1 + 0x20);
uVar1 = uVar2 + *(int *)(param_1 + 0x68) * 4;
for (; uVar2 < uVar1; uVar2 = uVar2 + 4) {
thunk_FUN_005e038f(param_4,uVar2,2);
*(undefined4 *)(param_4 + 0xc) = 0x3f800000;
*(undefined4 *)(param_4 + 8) = 0x3f800000;
param_4 = param_4 + 0x10;
}
if (*(int *)(param_1 + 0x18) != 0) {
FUN_005f5595(param_4 + *(int *)(param_1 + 0x68) * -0x10);
}
if (*(int *)(param_1 + 0x10) != 0) {
FUN_005f5802(param_4 + *(int *)(param_1 + 0x68) * -0x10);
}
return;
}
// --- FUN_005fd945 at 0x005FD945 (size: 80) ---
void __thiscall FUN_005fd945(int param_1,int param_2,int param_3,undefined4 param_4)
{
thunk_FUN_005e038f(param_4,*(int *)(param_1 + 0x60) * param_2 + *(int *)(param_1 + 100) * param_3
+ *(int *)(param_1 + 0x20),*(int *)(param_1 + 0x68) << 2);
if (*(int *)(param_1 + 0x18) != 0) {
FUN_005f5595(param_4);
}
if (*(int *)(param_1 + 0x10) != 0) {
FUN_005f5802(param_4);
}
return;
}
// --- FUN_005fd995 at 0x005FD995 (size: 117) ---
void __thiscall FUN_005fd995(int param_1,int param_2,int param_3,undefined4 *param_4)
{
undefined4 *puVar1;
undefined4 uVar2;
undefined4 *puVar3;
int extraout_ECX;
puVar3 = (undefined4 *)
(*(int *)(param_1 + 0x60) * param_2 + *(int *)(param_1 + 100) * param_3 +
*(int *)(param_1 + 0x20));
puVar1 = puVar3 + *(int *)(param_1 + 0x68) * 2;
for (; puVar3 < puVar1; puVar3 = puVar3 + 2) {
*param_4 = *puVar3;
uVar2 = puVar3[1];
param_4[3] = 0x3f800000;
param_4[1] = uVar2;
param_4[2] = 0x3f800000;
param_4 = param_4 + 4;
}
if (*(int *)(param_1 + 0x18) != 0) {
FUN_005f5595(param_4 + *(int *)(param_1 + 0x68) * -4);
param_1 = extraout_ECX;
}
if (*(int *)(param_1 + 0x10) != 0) {
FUN_005f5802(param_4 + *(int *)(param_1 + 0x68) * -4);
}
return;
}
// --- FUN_005fda0a at 0x005FDA0A (size: 91) ---
void __thiscall FUN_005fda0a(int param_1,int param_2,int param_3,undefined4 *param_4)
{
uint uVar1;
int iVar2;
undefined4 *puVar3;
undefined4 *puVar4;
puVar3 = (undefined4 *)
(*(int *)(param_1 + 0x60) * param_2 + *(int *)(param_1 + 100) * param_3 +
*(int *)(param_1 + 0x20));
puVar4 = param_4;
for (uVar1 = (uint)(*(int *)(param_1 + 0x68) << 4) >> 2; uVar1 != 0; uVar1 = uVar1 - 1) {
*puVar4 = *puVar3;
puVar3 = puVar3 + 1;
puVar4 = puVar4 + 1;
}
for (iVar2 = 0; iVar2 != 0; iVar2 = iVar2 + -1) {
*(undefined1 *)puVar4 = *(undefined1 *)puVar3;
puVar3 = (undefined4 *)((int)puVar3 + 1);
puVar4 = (undefined4 *)((int)puVar4 + 1);
}
if (*(int *)(param_1 + 0x18) != 0) {
FUN_005f5595(param_4);
}
if (*(int *)(param_1 + 0x10) != 0) {
FUN_005f5802(param_4);
}
return;
}
// --- FUN_005fda65 at 0x005FDA65 (size: 154) ---
/* WARNING: Removing unreachable block (ram,0x005fdaa4) */
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
void __thiscall FUN_005fda65(int param_1,int param_2,int param_3,float *param_4)
{
uint *puVar1;
float fVar2;
float fVar3;
uint *puVar4;
int extraout_ECX;
fVar3 = _DAT_007edf18;
puVar4 = (uint *)(*(int *)(param_1 + 0x60) * param_2 + *(int *)(param_1 + 100) * param_3 +
*(int *)(param_1 + 0x20));
puVar1 = puVar4 + *(int *)(param_1 + 0x68);
for (; puVar4 < puVar1; puVar4 = puVar4 + 1) {
fVar2 = (float)(*puVar4 & 0xffff) * fVar3;
param_4[2] = fVar2;
param_4[1] = fVar2;
*param_4 = fVar2;
param_4[3] = (float)*(ushort *)((int)puVar4 + 2) * fVar3;
param_4 = param_4 + 4;
}
if (*(int *)(param_1 + 0x18) != 0) {
FUN_005f5595(param_4 + *(int *)(param_1 + 0x68) * -4);
param_1 = extraout_ECX;
}
if (*(int *)(param_1 + 0x10) != 0) {
FUN_005f5802(param_4 + *(int *)(param_1 + 0x68) * -4);
}
return;
}
// --- FUN_005fdaff at 0x005FDAFF (size: 152) ---
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
void __thiscall FUN_005fdaff(int param_1,int param_2,int param_3,float *param_4)
{
float fVar1;
ushort *puVar2;
int extraout_ECX;
ushort *puVar3;
fVar1 = _DAT_007edf18;
puVar2 = (ushort *)
(*(int *)(param_1 + 0x60) * param_2 + *(int *)(param_1 + 100) * param_3 +
*(int *)(param_1 + 0x20));
puVar3 = (ushort *)(*(int *)(param_1 + 0x74) + (int)puVar2);
for (; puVar2 < puVar3; puVar2 = puVar2 + 3) {
*param_4 = (float)puVar2[2] * fVar1;
param_4[1] = (float)puVar2[1] * fVar1;
param_4[2] = (float)*puVar2 * fVar1;
param_4[3] = 1.0;
param_4 = param_4 + 4;
}
if (*(int *)(param_1 + 0x18) != 0) {
FUN_005f5595(param_4 + *(int *)(param_1 + 0x68) * -4);
param_1 = extraout_ECX;
}
if (*(int *)(param_1 + 0x10) != 0) {
FUN_005f5802(param_4 + *(int *)(param_1 + 0x68) * -4);
}
return;
}
// --- FUN_005fdb97 at 0x005FDB97 (size: 238) ---
undefined4 * __thiscall FUN_005fdb97(undefined4 *param_1,int param_2)
{
uint uVar1;
int iVar2;
int iVar3;
FUN_005f518f(param_2,0,1);
uVar1 = param_1[0x11] + 1 & 0xfffffffe;
iVar3 = uVar1 - (param_1[0xf] & 0xfffffffe);
param_1[0x23] = uVar1;
*param_1 = &PTR_FUN_007ee1a4;
param_1[0x21] = param_1[0xf] & 0xfffffffe;
param_1[0x22] = 0;
param_1[0x25] = 0;
param_1[0x24] = 0;
param_1[0x26] = 0;
param_1[0x27] = iVar3;
param_1[0x28] = 0;
param_1[0x29] = 1;
iVar2 = FUN_005df0f5(iVar3 * 0x10);
if (iVar2 == 0) {
iVar2 = 0;
}
else {
FUN_00401000(iVar2,0x10,iVar3,&LAB_005eda5e);
}
param_1[0x20] = iVar2;
if (iVar2 == 0) {
param_1[0x29] = 0;
}
iVar2 = *(int *)(param_2 + 4);
if (iVar2 == 0x32595559) {
LAB_005fdc6c:
param_1[0x2a] = 0;
param_1[0x2b] = 8;
}
else {
if (iVar2 != 0x42475247) {
if (iVar2 == 0x47424752) goto LAB_005fdc6c;
if (iVar2 != 0x59565955) {
return param_1;
}
}
param_1[0x2a] = 8;
param_1[0x2b] = 0;
}
return param_1;
}
// --- FUN_005fdc85 at 0x005FDC85 (size: 41) ---
void __fastcall FUN_005fdc85(undefined4 *param_1)
{
*param_1 = &PTR_FUN_007ee1a4;
FUN_005f4603();
if ((void *)param_1[0x20] != (void *)0x0) {
operator_delete((void *)param_1[0x20]);
}
FUN_005f40bf();
return;
}
// --- FUN_005fdcae at 0x005FDCAE (size: 142) ---
void __thiscall FUN_005fdcae(int param_1,int param_2,int param_3,undefined4 *param_4)
{
int iVar1;
uint uVar2;
undefined4 *puVar3;
if (*(int *)(param_1 + 0x54) != 0) {
param_4 = (undefined4 *)FUN_005f40ea(param_4);
}
if (*(int *)(param_1 + 0x10) != 0) {
param_4 = (undefined4 *)FUN_005f560f(param_4);
}
iVar1 = FUN_005f4906(param_2 + *(int *)(param_1 + 0x40),param_3 + *(int *)(param_1 + 0x4c),
*(int *)(param_1 + 0x9c) != *(int *)(param_1 + 0x68));
if (-1 < iVar1) {
puVar3 = (undefined4 *)
((*(int *)(param_1 + 0x3c) - *(int *)(param_1 + 0x84)) * 0x10 +
*(int *)(param_1 + 0x80));
for (uVar2 = (uint)(*(int *)(param_1 + 0x68) << 4) >> 2; uVar2 != 0; uVar2 = uVar2 - 1) {
*puVar3 = *param_4;
param_4 = param_4 + 1;
puVar3 = puVar3 + 1;
}
for (iVar1 = 0; iVar1 != 0; iVar1 = iVar1 + -1) {
*(undefined1 *)puVar3 = *(undefined1 *)param_4;
param_4 = (undefined4 *)((int)param_4 + 1);
puVar3 = (undefined4 *)((int)puVar3 + 1);
}
*(undefined4 *)(param_1 + 0xa0) = 1;
}
return;
}
// --- FUN_005fdd3c at 0x005FDD3C (size: 117) ---
void __thiscall FUN_005fdd3c(int param_1,int param_2,int param_3,undefined4 *param_4)
{
int iVar1;
uint uVar2;
undefined4 *puVar3;
undefined4 *puVar4;
iVar1 = FUN_005f4906(param_2 + *(int *)(param_1 + 0x40),param_3 + *(int *)(param_1 + 0x4c),1);
if (-1 < iVar1) {
puVar3 = (undefined4 *)
((*(int *)(param_1 + 0x3c) - *(int *)(param_1 + 0x84)) * 0x10 +
*(int *)(param_1 + 0x80));
puVar4 = param_4;
for (uVar2 = (uint)(*(int *)(param_1 + 0x68) << 4) >> 2; uVar2 != 0; uVar2 = uVar2 - 1) {
*puVar4 = *puVar3;
puVar3 = puVar3 + 1;
puVar4 = puVar4 + 1;
}
for (iVar1 = 0; iVar1 != 0; iVar1 = iVar1 + -1) {
*(undefined1 *)puVar4 = *(undefined1 *)puVar3;
puVar3 = (undefined4 *)((int)puVar3 + 1);
puVar4 = (undefined4 *)((int)puVar4 + 1);
}
if (*(int *)(param_1 + 0x18) != 0) {
FUN_005f5595(param_4);
}
if (*(int *)(param_1 + 0x10) != 0) {
FUN_005f5802(param_4);
}
}
return;
}
// --- FUN_005fddb1 at 0x005FDDB1 (size: 488) ---
undefined4 * __thiscall FUN_005fddb1(undefined4 *param_1,int param_2)
{
uint uVar1;
int iVar2;
uint uVar3;
uint *puVar4;
uint *puVar5;
FUN_005f518f(param_2,0,1);
iVar2 = param_1[1];
*param_1 = &PTR_FUN_007ee1b4;
if (iVar2 == 0x31545844) {
param_1[0x22] = 8;
param_1[0x24] = FUN_00601f9e;
param_1[0x23] = FUN_00601c99;
}
else if (iVar2 == 0x32545844) {
param_1[0x22] = 0x10;
param_1[0x24] = FUN_00602711;
param_1[0x23] = FUN_006026c5;
}
else if (iVar2 == 0x33545844) {
param_1[0x22] = 0x10;
param_1[0x24] = FUN_006020c2;
param_1[0x23] = FUN_00601ddb;
}
else if (iVar2 == 0x34545844) {
param_1[0x22] = 0x10;
param_1[0x24] = FUN_0060274a;
param_1[0x23] = FUN_006026eb;
}
else if (iVar2 == 0x35545844) {
param_1[0x22] = 0x10;
param_1[0x24] = FUN_006021f1;
param_1[0x23] = FUN_00601e60;
}
puVar4 = (uint *)(param_2 + 0x10);
puVar5 = param_1 + 0x25;
for (iVar2 = 6; iVar2 != 0; iVar2 = iVar2 + -1) {
*puVar5 = *puVar4;
puVar4 = puVar4 + 1;
puVar5 = puVar5 + 1;
}
param_1[0x2b] = param_1[0x25] & 0xfffffffc;
param_1[0x2c] = param_1[0x26] & 0xfffffffc;
param_1[0x2f] = param_1[0x29];
param_1[0x2d] = param_1[0x27] + 3 & 0xfffffffc;
param_1[0x3a] = 0xffffffff;
param_1[0x3b] = 0xffffffff;
param_1[0x2e] = param_1[0x28] + 3 & 0xfffffffc;
param_1[0x30] = param_1[0x2a];
param_1[0x35] = param_1[0x13];
uVar1 = param_1[0x11] + 3 & 0xfffffffc;
param_1[0x33] = uVar1;
uVar3 = param_1[0x12] + 3 & 0xfffffffc;
param_1[0x34] = uVar3;
param_1[0x37] = uVar1 - (param_1[0xf] & 0xfffffffc) >> 2;
param_1[0x36] = param_1[0x14];
param_1[0x3c] = 0;
param_1[0x3d] = 0;
param_1[0x3e] = 0;
param_1[0x31] = param_1[0xf] & 0xfffffffc;
param_1[0x32] = param_1[0x10] & 0xfffffffc;
param_1[0x38] = uVar3 - (param_1[0x10] & 0xfffffffc) >> 2;
param_1[0x39] = param_1[0x14] - param_1[0x13];
param_1[0x3f] = *(undefined4 *)(param_2 + 0x40);
return param_1;
}
// --- FUN_005fdf99 at 0x005FDF99 (size: 33) ---
void * __thiscall FUN_005fdf99(void *param_1,byte param_2)
{
FUN_005f4f8d();
if ((param_2 & 1) != 0) {
operator_delete(param_1);
}
return param_1;
}
// --- FUN_005fdfba at 0x005FDFBA (size: 1057) ---
void __thiscall FUN_005fdfba(int param_1,uint param_2,int param_3,undefined4 *param_4)
{
undefined4 *puVar1;
uint uVar2;
undefined4 uVar3;
uint uVar4;
int iVar5;
uint uVar6;
uint *puVar7;
undefined4 *puVar8;
uint local_24 [5];
uint local_10;
uint local_c;
uint *local_8;
param_2 = param_2 + *(int *)(param_1 + 0x40);
param_3 = param_3 + *(int *)(param_1 + 0x4c);
if (*(int *)(param_1 + 0xf8) == 0) {
puVar1 = (undefined4 *)FUN_005df0f5(*(int *)(param_1 + 0xe0) * *(int *)(param_1 + 0xe4) * 8);
*(undefined4 **)(param_1 + 0xf8) = puVar1;
if (puVar1 == (undefined4 *)0x0) {
return;
}
for (uVar4 = (uint)(*(int *)(param_1 + 0xe0) * *(int *)(param_1 + 0xe4) * 8) >> 2; uVar4 != 0;
uVar4 = uVar4 - 1) {
*puVar1 = 0;
puVar1 = puVar1 + 1;
}
for (iVar5 = 0; iVar5 != 0; iVar5 = iVar5 + -1) {
*(undefined1 *)puVar1 = 0;
puVar1 = (undefined4 *)((int)puVar1 + 1);
}
}
puVar7 = (uint *)(*(int *)(param_1 + 0xf8) +
((param_3 - *(int *)(param_1 + 0xd4)) * *(int *)(param_1 + 0xe0) +
(param_2 - *(int *)(param_1 + 200) >> 2)) * 8);
local_8 = puVar7;
if (puVar7[1] == 0) {
iVar5 = *(int *)(param_1 + 0xdc);
local_24[4] = FUN_005df0f5(iVar5 << 8);
if (local_24[4] == 0) {
uVar4 = 0;
}
else {
FUN_00401000(local_24[4],0x10,iVar5 << 4,&LAB_005eda5e);
uVar4 = local_24[4];
}
puVar7[1] = uVar4;
if (uVar4 == 0) {
return;
}
*puVar7 = 0;
*(int *)(param_1 + 0xf4) = *(int *)(param_1 + 0xf4) + 1;
}
if (*puVar7 == 0) {
local_24[4] = param_2 & 0xfffffffc;
if (((local_24[4] < *(uint *)(param_1 + 0x40)) &&
(*(uint *)(param_1 + 0x98) < *(uint *)(param_1 + 0x40))) ||
((*(uint *)(param_1 + 0x48) < local_24[4] + 4 &&
(*(uint *)(param_1 + 0x48) < *(uint *)(param_1 + 0xa0))))) {
local_10 = *(uint *)(param_1 + 0xc4);
iVar5 = (param_2 >> 2) * *(int *)(param_1 + 0x60) + (local_10 >> 2) * *(int *)(param_1 + 0x88)
+ *(int *)(param_1 + 100) * param_3 + *(int *)(param_1 + 0x20);
local_c = puVar7[1];
if (local_10 < *(uint *)(param_1 + 0xcc)) {
do {
(**(code **)(param_1 + 0x8c))(local_c,iVar5);
local_10 = local_10 + 4;
iVar5 = iVar5 + *(int *)(param_1 + 0x88);
local_c = local_c + 0x100;
} while (local_10 < *(uint *)(param_1 + 0xcc));
}
}
else {
if ((*(uint *)(param_1 + 0xc4) < *(uint *)(param_1 + 0x3c)) &&
(*(uint *)(param_1 + 0x94) < *(uint *)(param_1 + 0x3c))) {
(**(code **)(param_1 + 0x8c))
(puVar7[1],
(*(uint *)(param_1 + 0xc4) >> 2) * *(int *)(param_1 + 0x88) +
(param_2 >> 2) * *(int *)(param_1 + 0x60) + *(int *)(param_1 + 100) * param_3 +
*(int *)(param_1 + 0x20));
}
if ((*(uint *)(param_1 + 0x44) < *(uint *)(param_1 + 0xcc)) &&
(*(uint *)(param_1 + 0x44) < *(uint *)(param_1 + 0x9c))) {
(**(code **)(param_1 + 0x8c))
(puVar7[1],
(*(uint *)(param_1 + 0xcc) - 4 >> 2) * *(int *)(param_1 + 0x88) +
(param_2 >> 2) * *(int *)(param_1 + 0x60) + *(int *)(param_1 + 100) * param_3 +
*(int *)(param_1 + 0x20));
}
}
uVar4 = 0;
do {
if ((uVar4 + local_24[4] < *(uint *)(param_1 + 0x40)) ||
(*(uint *)(param_1 + 0x48) <= uVar4 + local_24[4])) {
*puVar7 = *puVar7 | 1 << ((byte)uVar4 & 0x1f);
}
uVar4 = uVar4 + 1;
} while (uVar4 < 4);
}
if (*(int *)(param_1 + 0x54) != 0) {
param_4 = (undefined4 *)FUN_005f40ea(param_4);
}
if (*(int *)(param_1 + 0x10) != 0) {
param_4 = (undefined4 *)FUN_005f560f(param_4);
}
uVar4 = *(int *)(param_1 + 0x3c) - *(int *)(param_1 + 0xc4);
iVar5 = *(int *)(param_1 + 200);
local_24[4] = *(int *)(param_1 + 0x68) + uVar4;
for (; uVar4 < local_24[4]; uVar4 = uVar4 + 1) {
puVar1 = (undefined4 *)
(((uVar4 & 0xfffffffc | param_2 - iVar5 & 3) << 2 | uVar4 & 3) * 0x10 + puVar7[1]);
*puVar1 = *param_4;
puVar1[1] = param_4[1];
puVar1[2] = param_4[2];
puVar1[3] = param_4[3];
puVar7 = local_8;
param_4 = param_4 + 4;
}
*puVar7 = *puVar7 | 1 << ((byte)param_2 & 3);
if (*puVar7 == 0xf) {
local_c = *(uint *)(param_1 + 0xc4);
iVar5 = (param_2 >> 2) * *(int *)(param_1 + 0x60) + (local_c >> 2) * *(int *)(param_1 + 0x88) +
*(int *)(param_1 + 100) * param_3 + *(int *)(param_1 + 0x20);
param_4 = (undefined4 *)puVar7[1];
if (local_c < *(uint *)(param_1 + 0xcc)) {
local_24[0] = 0;
local_24[1] = 0;
local_24[2] = 0;
local_24[4] = param_2 & 0xfffffffc;
local_24[3] = 1;
do {
uVar2 = *(int *)(param_1 + 0x9c) - local_c;
uVar4 = *(int *)(param_1 + 0xa0) - local_24[4];
if ((uVar2 < 4) && (param_2 = 0, uVar4 != 0)) {
do {
uVar6 = uVar2;
if (3 < param_2) break;
do {
puVar1 = (undefined4 *)((local_24[uVar6] | param_2 << 2) * 0x10 + (int)param_4);
puVar8 = (undefined4 *)((param_2 << 2 | uVar6) * 0x10 + (int)param_4);
uVar6 = uVar6 + 1;
*puVar8 = *puVar1;
puVar8[1] = puVar1[1];
puVar8[2] = puVar1[2];
puVar8[3] = puVar1[3];
} while (uVar6 < 4);
param_2 = param_2 + 1;
puVar7 = local_8;
} while (param_2 < uVar4);
}
for (; uVar4 < 4; uVar4 = uVar4 + 1) {
uVar2 = local_24[uVar4];
uVar6 = 0;
do {
puVar8 = (undefined4 *)((uVar4 << 2 | uVar6) * 0x10 + (int)param_4);
puVar1 = (undefined4 *)((uVar2 << 2 | uVar6) * 0x10 + (int)param_4);
uVar6 = uVar6 + 1;
*puVar8 = *puVar1;
puVar8[1] = puVar1[1];
puVar8[2] = puVar1[2];
puVar8[3] = puVar1[3];
} while (uVar6 < 4);
puVar7 = local_8;
}
uVar3 = 0;
if ((*(int *)(param_1 + 0xfc) != 0) || (*(int *)(param_1 + 0x5c) != 0)) {
uVar3 = 1;
}
(**(code **)(param_1 + 0x90))(iVar5,param_4,uVar3);
local_c = local_c + 4;
iVar5 = iVar5 + *(int *)(param_1 + 0x88);
param_4 = (undefined4 *)((int)param_4 + 0x100);
} while (local_c < *(uint *)(param_1 + 0xcc));
}
if (((puVar7 + 2 <
(uint *)(*(int *)(param_1 + 0xf8) +
*(int *)(param_1 + 0xe4) * *(int *)(param_1 + 0xe0) * 8)) && (puVar7[2] == 0)) &&
(puVar7[3] == 0)) {
puVar7[3] = puVar7[1];
puVar7[1] = 0;
}
else {
operator_delete((void *)puVar7[1]);
*(int *)(param_1 + 0xf4) = *(int *)(param_1 + 0xf4) + -1;
}
puVar7[1] = 0;
}
return;
}
// --- FUN_005fe3db at 0x005FE3DB (size: 651) ---
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
void __thiscall FUN_005fe3db(int param_1,int param_2,int param_3,float *param_4)
{
int iVar1;
int iVar2;
uint uVar3;
uint uVar4;
float *pfVar5;
float *pfVar6;
uint uVar7;
float *pfVar8;
undefined2 in_FPUControlWord;
uVar7 = param_2 + *(int *)(param_1 + 0x40);
param_3 = param_3 + *(int *)(param_1 + 0x4c);
if (*(int *)(param_1 + 0xf0) == 0) {
iVar1 = *(int *)(param_1 + 0xdc);
iVar2 = FUN_005df0f5(iVar1 << 8);
if (iVar2 == 0) {
iVar2 = 0;
}
else {
FUN_00401000(iVar2,0x10,iVar1 << 4,&LAB_005eda5e);
}
*(int *)(param_1 + 0xf0) = iVar2;
if (iVar2 == 0) {
return;
}
}
if (((uVar7 & 0xfffffffc) != *(uint *)(param_1 + 0xe8)) || (param_3 != *(int *)(param_1 + 0xec)))
{
*(uint *)(param_1 + 0xe8) = uVar7 & 0xfffffffc;
uVar3 = *(uint *)(param_1 + 0xc4);
param_2 = (uVar7 >> 2) * *(int *)(param_1 + 0x60) + (uVar3 >> 2) * *(int *)(param_1 + 0x88) +
*(int *)(param_1 + 100) * param_3 + *(int *)(param_1 + 0x20);
*(int *)(param_1 + 0xec) = param_3;
param_3 = *(int *)(param_1 + 0xf0);
for (; uVar3 < *(uint *)(param_1 + 0xcc); uVar3 = uVar3 + 4) {
(**(code **)(param_1 + 0x8c))(param_3,param_2);
param_2 = param_2 + *(int *)(param_1 + 0x88);
param_3 = param_3 + 0x100;
}
}
iVar1 = *(int *)(param_1 + 200);
uVar3 = *(int *)(param_1 + 0x3c) - *(int *)(param_1 + 0xc4);
uVar4 = *(int *)(param_1 + 0x68) + uVar3;
pfVar5 = param_4;
for (; uVar3 < uVar4; uVar3 = uVar3 + 1) {
pfVar8 = (float *)(((uVar3 & 0xfffffffc | uVar7 - iVar1 & 3) << 2 | uVar3 & 3) * 0x10 +
*(int *)(param_1 + 0xf0));
*pfVar5 = *pfVar8;
pfVar5[1] = pfVar8[1];
pfVar6 = pfVar5 + 3;
pfVar5[2] = pfVar8[2];
pfVar5 = pfVar5 + 4;
*pfVar6 = pfVar8[3];
}
pfVar6 = pfVar5;
if (*(int *)(param_1 + 0x18) != 0) {
param_4 = (float *)CONCAT22(param_4._2_2_,in_FPUControlWord);
*(float **)(param_1 + 0x7c) = param_4;
for (pfVar6 = pfVar5 + *(int *)(param_1 + 0x68) * -4; pfVar6 < pfVar5; pfVar6 = pfVar6 + 4) {
if (((((float)(int)ROUND(*pfVar6 * _DAT_007edeec + _DAT_007938b8) * _DAT_007edee8 ==
*(float *)(param_1 + 0x24)) &&
((float)(int)ROUND(pfVar6[1] * _DAT_007edee4 + _DAT_007938b8) * _DAT_007edee0 ==
*(float *)(param_1 + 0x28))) &&
((float)(int)ROUND(pfVar6[2] * _DAT_007edeec + _DAT_007938b8) * _DAT_007edee8 ==
*(float *)(param_1 + 0x2c))) &&
((float)(int)ROUND(pfVar6[3] * *(float *)(param_1 + 0x80) + _DAT_007938b8) *
*(float *)(param_1 + 0x84) == *(float *)(param_1 + 0x30))) {
*pfVar6 = 0.0;
pfVar6[1] = 0.0;
pfVar6[2] = 0.0;
pfVar6[3] = 0.0;
}
}
}
if (*(int *)(param_1 + 0x10) != 0) {
FUN_005f5802(pfVar6 + *(int *)(param_1 + 0x68) * -4);
}
return;
}
// --- FUN_005fe666 at 0x005FE666 (size: 29) ---
undefined4 * __thiscall FUN_005fe666(undefined4 *param_1,undefined4 param_2)
{
FUN_005fdb97(param_2);
*param_1 = &PTR_FUN_007ee1a4;
return param_1;
}
// --- FUN_005fe683 at 0x005FE683 (size: 29) ---
undefined4 * __thiscall FUN_005fe683(undefined4 *param_1,undefined4 param_2)
{
FUN_005fddb1(param_2);
*param_1 = &PTR_FUN_007ee1b4;
return param_1;
}
// --- FUN_005fe6a0 at 0x005FE6A0 (size: 33) ---
void * __thiscall FUN_005fe6a0(void *param_1,byte param_2)
{
FUN_005fdc85();
if ((param_2 & 1) != 0) {
operator_delete(param_1);
}
return param_1;
}
// --- FUN_005fe6c1 at 0x005FE6C1 (size: 1916) ---
int * FUN_005fe6c1(int param_1)
{
int iVar1;
int *piVar2;
iVar1 = *(int *)(param_1 + 4);
if (iVar1 < 0x31545845) {
if (iVar1 == 0x31545844) {
iVar1 = FUN_005df0f5(0x100);
if (iVar1 == 0) goto LAB_005fee04;
piVar2 = (int *)FUN_005fe683(param_1);
}
else if (iVar1 < 0x33) {
if (iVar1 == 0x32) {
iVar1 = FUN_005df0f5(0x80);
if (iVar1 == 0) goto LAB_005fee04;
piVar2 = (int *)FUN_005faf9c(param_1);
}
else {
switch(iVar1) {
case 0x14:
iVar1 = FUN_005df0f5(0x80);
if (iVar1 == 0) {
LAB_005fee04:
piVar2 = (int *)0x0;
}
else {
piVar2 = (int *)FUN_005fa30b(param_1);
}
break;
case 0x15:
iVar1 = FUN_005df0f5(0x80);
if (iVar1 == 0) goto LAB_005fee04;
piVar2 = (int *)FUN_005fa32c(param_1);
break;
case 0x16:
iVar1 = FUN_005df0f5(0x80);
if (iVar1 == 0) goto LAB_005fee04;
piVar2 = (int *)FUN_005fa34d(param_1);
break;
case 0x17:
iVar1 = FUN_005df0f5(0x80);
if (iVar1 == 0) goto LAB_005fee04;
piVar2 = (int *)FUN_005fa71a(param_1);
break;
case 0x18:
iVar1 = FUN_005df0f5(0x80);
if (iVar1 == 0) goto LAB_005fee04;
piVar2 = (int *)FUN_005fa73b(param_1);
break;
case 0x19:
iVar1 = FUN_005df0f5(0x80);
if (iVar1 == 0) goto LAB_005fee04;
piVar2 = (int *)FUN_005fa75c(param_1);
break;
case 0x1a:
iVar1 = FUN_005df0f5(0x80);
if (iVar1 == 0) goto LAB_005fee04;
piVar2 = (int *)FUN_005fa77d(param_1);
break;
case 0x1b:
iVar1 = FUN_005df0f5(0x80);
if (iVar1 == 0) goto LAB_005fee04;
piVar2 = (int *)FUN_005fa7bf(param_1);
break;
case 0x1c:
iVar1 = FUN_005df0f5(0x80);
if (iVar1 == 0) goto LAB_005fee04;
piVar2 = (int *)FUN_005fa7e0(param_1);
break;
case 0x1d:
iVar1 = FUN_005df0f5(0x80);
if (iVar1 == 0) goto LAB_005fee04;
piVar2 = (int *)FUN_005fa801(param_1);
break;
case 0x1e:
iVar1 = FUN_005df0f5(0x80);
if (iVar1 == 0) goto LAB_005fee04;
piVar2 = (int *)FUN_005faa99(param_1);
break;
case 0x1f:
iVar1 = FUN_005df0f5(0x80);
if (iVar1 == 0) goto LAB_005fee04;
piVar2 = (int *)FUN_005faaba(param_1);
break;
case 0x20:
iVar1 = FUN_005df0f5(0x80);
if (iVar1 == 0) goto LAB_005fee04;
piVar2 = (int *)FUN_005faadb(param_1);
break;
case 0x21:
iVar1 = FUN_005df0f5(0x80);
if (iVar1 == 0) goto LAB_005fee04;
piVar2 = (int *)FUN_005faafc(param_1);
break;
case 0x22:
iVar1 = FUN_005df0f5(0x80);
if (iVar1 == 0) goto LAB_005fee04;
piVar2 = (int *)FUN_005fab1d(param_1);
break;
case 0x23:
iVar1 = FUN_005df0f5(0x80);
if (iVar1 == 0) goto LAB_005fee04;
piVar2 = (int *)FUN_005fab3e(param_1);
break;
case 0x24:
iVar1 = FUN_005df0f5(0x80);
if (iVar1 == 0) goto LAB_005fee04;
piVar2 = (int *)FUN_005fab5f(param_1);
break;
default:
goto LAB_005fee37;
case 0x28:
iVar1 = FUN_005df0f5(0x80);
if (iVar1 == 0) goto LAB_005fee04;
piVar2 = (int *)FUN_005fab80(param_1);
break;
case 0x29:
iVar1 = FUN_005df0f5(0x80);
if (iVar1 == 0) goto LAB_005fee04;
piVar2 = (int *)FUN_005faf7b(param_1);
}
}
}
else if (iVar1 < 0x52) {
if (iVar1 == 0x51) {
iVar1 = FUN_005df0f5(0x80);
if (iVar1 == 0) goto LAB_005fee04;
piVar2 = (int *)FUN_005fafff(param_1);
}
else if (iVar1 < 0x3f) {
if (iVar1 == 0x3e) {
iVar1 = FUN_005df0f5(0x80);
if (iVar1 == 0) goto LAB_005fee04;
piVar2 = (int *)FUN_005fb437(param_1);
}
else if (iVar1 == 0x33) {
iVar1 = FUN_005df0f5(0x80);
if (iVar1 == 0) goto LAB_005fee04;
piVar2 = (int *)FUN_005fafbd(param_1);
}
else if (iVar1 == 0x34) {
iVar1 = FUN_005df0f5(0x80);
if (iVar1 == 0) goto LAB_005fee04;
piVar2 = (int *)FUN_005fafde(param_1);
}
else if (iVar1 == 0x3c) {
iVar1 = FUN_005df0f5(0x80);
if (iVar1 == 0) goto LAB_005fee04;
piVar2 = (int *)FUN_005fb020(param_1);
}
else {
if (iVar1 != 0x3d) {
return (int *)0x0;
}
iVar1 = FUN_005df0f5(0x80);
if (iVar1 == 0) goto LAB_005fee04;
piVar2 = (int *)FUN_005fb041(param_1);
}
}
else if (iVar1 == 0x3f) {
iVar1 = FUN_005df0f5(0x80);
if (iVar1 == 0) goto LAB_005fee04;
piVar2 = (int *)FUN_005fb458(param_1);
}
else if (iVar1 == 0x40) {
iVar1 = FUN_005df0f5(0x80);
if (iVar1 == 0) goto LAB_005fee04;
piVar2 = (int *)FUN_005fb479(param_1);
}
else if (iVar1 == 0x43) {
iVar1 = FUN_005df0f5(0x80);
if (iVar1 == 0) goto LAB_005fee04;
piVar2 = (int *)FUN_005fb49a(param_1);
}
else {
if (iVar1 != 0x46) {
return (int *)0x0;
}
iVar1 = FUN_005df0f5(0x80);
if (iVar1 == 0) goto LAB_005fee04;
piVar2 = (int *)FUN_005fafff(param_1);
}
}
else if (iVar1 < 0x72) {
if (iVar1 == 0x71) {
iVar1 = FUN_005df0f5(0x80);
if (iVar1 == 0) goto LAB_005fee04;
piVar2 = (int *)FUN_005fb7af(param_1);
}
else if (iVar1 == 0x52) {
iVar1 = FUN_005df0f5(0x80);
if (iVar1 == 0) goto LAB_005fee04;
piVar2 = (int *)FUN_005fb7d0(param_1);
}
else if (iVar1 == 0x6e) {
iVar1 = FUN_005df0f5(0x80);
if (iVar1 == 0) goto LAB_005fee04;
piVar2 = (int *)FUN_005fb4bb(param_1);
}
else if (iVar1 == 0x6f) {
iVar1 = FUN_005df0f5(0x80);
if (iVar1 == 0) goto LAB_005fee04;
piVar2 = (int *)FUN_005fb76d(param_1);
}
else {
if (iVar1 != 0x70) {
return (int *)0x0;
}
iVar1 = FUN_005df0f5(0x80);
if (iVar1 == 0) goto LAB_005fee04;
piVar2 = (int *)FUN_005fb78e(param_1);
}
}
else if (iVar1 == 0x72) {
iVar1 = FUN_005df0f5(0x80);
if (iVar1 == 0) goto LAB_005fee04;
piVar2 = (int *)FUN_005fb7d0(param_1);
}
else if (iVar1 == 0x73) {
iVar1 = FUN_005df0f5(0x80);
if (iVar1 == 0) goto LAB_005fee04;
piVar2 = (int *)FUN_005fb7f1(param_1);
}
else if (iVar1 == 0x74) {
iVar1 = FUN_005df0f5(0x80);
if (iVar1 == 0) goto LAB_005fee04;
piVar2 = (int *)FUN_005fb812(param_1);
}
else {
if (iVar1 != 0x75) {
return (int *)0x0;
}
iVar1 = FUN_005df0f5(0x80);
if (iVar1 == 0) goto LAB_005fee04;
piVar2 = (int *)FUN_005fb4dc(param_1);
}
}
else if (iVar1 < 0x36314c42) {
if (iVar1 == 0x36314c41) {
iVar1 = FUN_005df0f5(0x80);
if (iVar1 == 0) goto LAB_005fee04;
piVar2 = (int *)FUN_005fba27(param_1);
}
else if (iVar1 == 0x32545844) {
iVar1 = FUN_005df0f5(0x100);
if (iVar1 == 0) goto LAB_005fee04;
piVar2 = (int *)FUN_005fe683(param_1);
}
else if (iVar1 == 0x32595559) {
iVar1 = FUN_005df0f5(0xb0);
if (iVar1 == 0) goto LAB_005fee04;
piVar2 = (int *)FUN_005fe666(param_1);
}
else if (iVar1 == 0x33545844) {
iVar1 = FUN_005df0f5(0x100);
if (iVar1 == 0) goto LAB_005fee04;
piVar2 = (int *)FUN_005fe683(param_1);
}
else if (iVar1 == 0x34545844) {
iVar1 = FUN_005df0f5(0x100);
if (iVar1 == 0) goto LAB_005fee04;
piVar2 = (int *)FUN_005fe683(param_1);
}
else {
if (iVar1 != 0x35545844) {
return (int *)0x0;
}
iVar1 = FUN_005df0f5(0x100);
if (iVar1 == 0) goto LAB_005fee04;
piVar2 = (int *)FUN_005fe683(param_1);
}
}
else if (iVar1 == 0x36315220) {
iVar1 = FUN_005df0f5(0x80);
if (iVar1 == 0) goto LAB_005fee04;
piVar2 = (int *)FUN_005fba48(param_1);
}
else if (iVar1 == 0x42475247) {
iVar1 = FUN_005df0f5(0xb0);
if (iVar1 == 0) goto LAB_005fee04;
piVar2 = (int *)FUN_005fe666(param_1);
}
else if (iVar1 == 0x47424752) {
iVar1 = FUN_005df0f5(0xb0);
if (iVar1 == 0) goto LAB_005fee04;
piVar2 = (int *)FUN_005fe666(param_1);
}
else {
if (iVar1 != 0x59565955) {
return (int *)0x0;
}
iVar1 = FUN_005df0f5(0xb0);
if (iVar1 == 0) goto LAB_005fee04;
piVar2 = (int *)FUN_005fe666(param_1);
}
if (piVar2 != (int *)0x0) {
if ((piVar2[7] == 0) || (iVar1 = FUN_005f53de(param_1), -1 < iVar1)) {
if (piVar2[6] != 0) {
(**(code **)(*piVar2 + 0xc))();
return piVar2;
}
return piVar2;
}
(**(code **)*piVar2)(1);
}
LAB_005fee37:
return (int *)0x0;
}
// --- FUN_005fee95 at 0x005FEE95 (size: 2) ---
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
void FUN_005fee95(int param_1,int param_2,undefined4 *param_3,undefined4 *param_4,uint param_5,
uint param_6,float *param_7,int *param_8,char *param_9,float param_10,
float *param_11)
{
int *piVar1;
undefined4 *puVar2;
byte bVar3;
float *pfVar4;
int iVar5;
int *piVar6;
uint uVar7;
uint uVar8;
float *pfVar9;
float fVar10;
undefined4 *puVar11;
undefined4 *puVar12;
float afStack_33c [195];
uint uStack_30;
uint uStack_2c;
float fStack_28;
float fStack_24;
float fStack_20;
float fStack_1c;
float fStack_18;
float fStack_14;
float fStack_10;
float *pfStack_c;
float fStack_8;
uStack_30 = (int)param_10 * 0xc;
uStack_2c = (uint)((int)param_10 * 0xc != param_6);
if (param_2 == 0) {
param_2 = param_1;
}
if (param_10 == 2.8026e-45) {
if ((*param_9 == '\0') && (param_9[1] == '\x03')) {
fStack_1c = *param_7;
fStack_8 = param_7[1];
pfStack_c = (float *)param_8[1];
pfVar9 = (float *)*param_8;
}
else {
if ((param_9[1] != '\0') || (*param_9 != '\x03')) goto LAB_005ff084;
fStack_1c = param_7[1];
fStack_8 = *param_7;
pfVar9 = (float *)param_8[1];
pfStack_c = (float *)*param_8;
}
if (fStack_1c != 0.0) {
if (param_5 == 0) {
return;
}
param_7 = (float *)param_5;
do {
if (uStack_2c != 0) {
puVar2 = (undefined4 *)((int)param_4 + param_6);
puVar11 = param_3;
for (uVar7 = param_6 >> 2; uVar7 != 0; uVar7 = uVar7 - 1) {
*param_4 = *puVar11;
puVar11 = puVar11 + 1;
param_4 = param_4 + 1;
}
param_3 = (undefined4 *)((int)param_3 + param_6);
puVar12 = param_4;
for (uVar7 = param_6 & 3; param_4 = puVar2, uVar7 != 0; uVar7 = uVar7 - 1) {
*(undefined1 *)puVar12 = *(undefined1 *)puVar11;
puVar11 = (undefined4 *)((int)puVar11 + 1);
puVar12 = (undefined4 *)((int)puVar12 + 1);
}
}
*pfVar9 = 0.0;
pfVar9[1] = 0.0;
pfVar9[2] = 0.0;
*pfStack_c = 0.0;
pfStack_c[1] = 0.0;
pfStack_c[2] = 0.0;
if (DAT_00796344 <= *param_11) {
do {
uVar7 = FUN_005df4c4();
iVar5 = (uVar7 >> 1) * 2;
fVar10 = (float)iVar5;
if (iVar5 < 0) {
fVar10 = fVar10 + _DAT_0079920c;
}
fVar10 = *param_11 - fVar10;
iVar5 = (uVar7 >> 1) * 0x40;
thunk_FUN_005e09a5(&fStack_18,fStack_1c,param_1 + iVar5);
thunk_FUN_005e09d7(&fStack_28,fStack_8,iVar5 + param_2);
fStack_18 = fStack_18 * fVar10;
param_11 = param_11 + 1;
fStack_14 = fStack_14 * fVar10;
fStack_10 = fStack_10 * fVar10;
fStack_28 = fStack_28 * fVar10;
fStack_24 = fStack_24 * fVar10;
fStack_20 = fStack_20 * fVar10;
*pfVar9 = fStack_18 + *pfVar9;
pfVar9[1] = fStack_14 + pfVar9[1];
pfVar9[2] = fStack_10 + pfVar9[2];
*pfStack_c = fStack_28 + *pfStack_c;
pfStack_c[1] = fStack_24 + pfStack_c[1];
pfStack_c[2] = fStack_20 + pfStack_c[2];
} while (DAT_00796344 <= *param_11);
}
fStack_1c = (float)((int)fStack_1c + param_6);
fStack_8 = (float)((int)fStack_8 + param_6);
pfStack_c = (float *)((int)pfStack_c + param_6);
param_11 = param_11 + 1;
pfVar9 = (float *)((int)pfVar9 + param_6);
param_7 = (float *)((int)param_7 - 1);
} while (param_7 != (float *)0x0);
return;
}
}
LAB_005ff084:
pfStack_c = (float *)0x0;
if (param_5 != 0) {
do {
uVar7 = uStack_30;
pfVar9 = afStack_33c;
for (uVar8 = uStack_30 >> 2; uVar8 != 0; uVar8 = uVar8 - 1) {
*pfVar9 = 0.0;
pfVar9 = pfVar9 + 1;
}
for (uVar7 = uVar7 & 3; uVar7 != 0; uVar7 = uVar7 - 1) {
*(undefined1 *)pfVar9 = 0;
pfVar9 = (float *)((int)pfVar9 + 1);
}
for (; DAT_00796344 <= *param_11; param_11 = param_11 + 1) {
uVar7 = FUN_005df4c4();
uVar7 = uVar7 >> 1;
fStack_8 = (float)(int)(uVar7 * 2);
if ((int)(uVar7 * 2) < 0) {
fStack_8 = fStack_8 + _DAT_0079920c;
}
fStack_8 = *param_11 - fStack_8;
fVar10 = 0.0;
if (param_10 != 0.0) {
pfVar9 = afStack_33c + 2;
do {
bVar3 = param_9[(int)fVar10];
if (bVar3 == 0) {
thunk_FUN_005e09a5(&fStack_18,param_7[(int)fVar10],uVar7 * 0x40 + param_1);
}
else {
if (bVar3 == 3) {
iVar5 = uVar7 * 0x40 + param_2;
}
else {
if (bVar3 < 6) {
return;
}
if (7 < bVar3) {
return;
}
iVar5 = uVar7 * 0x40 + param_1;
}
thunk_FUN_005e09d7(&fStack_18,param_7[(int)fVar10],iVar5);
}
fVar10 = (float)((int)fVar10 + 1);
fStack_18 = fStack_18 * fStack_8;
fStack_14 = fStack_14 * fStack_8;
fStack_10 = fStack_10 * fStack_8;
pfVar9[-2] = fStack_18 + pfVar9[-2];
pfVar9[-1] = fStack_14 + pfVar9[-1];
*pfVar9 = fStack_10 + *pfVar9;
pfVar9 = pfVar9 + 3;
} while ((uint)fVar10 < (uint)param_10);
}
}
if (uStack_2c != 0) {
puVar2 = (undefined4 *)((int)param_4 + param_6);
puVar11 = param_3;
for (uVar7 = param_6 >> 2; uVar7 != 0; uVar7 = uVar7 - 1) {
*param_4 = *puVar11;
puVar11 = puVar11 + 1;
param_4 = param_4 + 1;
}
param_3 = (undefined4 *)((int)param_3 + param_6);
puVar12 = param_4;
for (uVar7 = param_6 & 3; param_4 = puVar2, uVar7 != 0; uVar7 = uVar7 - 1) {
*(undefined1 *)puVar12 = *(undefined1 *)puVar11;
puVar11 = (undefined4 *)((int)puVar11 + 1);
puVar12 = (undefined4 *)((int)puVar12 + 1);
}
}
if (param_10 != 0.0) {
pfVar9 = afStack_33c;
fStack_8 = param_10;
piVar6 = param_8;
do {
pfVar4 = (float *)*piVar6;
*pfVar4 = *pfVar9;
pfVar4[1] = pfVar9[1];
pfVar4[2] = pfVar9[2];
*piVar6 = *piVar6 + param_6;
piVar1 = (int *)(((int)param_7 - (int)param_8) + (int)piVar6);
*piVar1 = *piVar1 + param_6;
pfVar9 = pfVar9 + 3;
piVar6 = piVar6 + 1;
fStack_8 = (float)((int)fStack_8 + -1);
} while (fStack_8 != 0.0);
}
param_11 = param_11 + 1;
pfStack_c = (float *)((int)pfStack_c + 1);
} while (pfStack_c < param_5);
}
return;
}
// --- FUN_005fee97 at 0x005FEE97 (size: 888) ---
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
void FUN_005fee97(int param_1,int param_2,undefined4 *param_3,undefined4 *param_4,uint param_5,
uint param_6,float *param_7,int *param_8,char *param_9,float param_10,
float *param_11)
{
int *piVar1;
undefined4 *puVar2;
byte bVar3;
float *pfVar4;
int iVar5;
int *piVar6;
uint uVar7;
uint uVar8;
float *pfVar9;
float fVar10;
undefined4 *puVar11;
undefined4 *puVar12;
float local_33c [195];
uint local_30;
uint local_2c;
float local_28;
float local_24;
float local_20;
float local_1c;
float local_18;
float local_14;
float local_10;
float *local_c;
float local_8;
local_30 = (int)param_10 * 0xc;
local_2c = (uint)((int)param_10 * 0xc != param_6);
if (param_2 == 0) {
param_2 = param_1;
}
if (param_10 == 2.8026e-45) {
if ((*param_9 == '\0') && (param_9[1] == '\x03')) {
local_1c = *param_7;
local_8 = param_7[1];
local_c = (float *)param_8[1];
pfVar9 = (float *)*param_8;
}
else {
if ((param_9[1] != '\0') || (*param_9 != '\x03')) goto LAB_005ff084;
local_1c = param_7[1];
local_8 = *param_7;
pfVar9 = (float *)param_8[1];
local_c = (float *)*param_8;
}
if (local_1c != 0.0) {
if (param_5 == 0) {
return;
}
param_7 = (float *)param_5;
do {
if (local_2c != 0) {
puVar2 = (undefined4 *)((int)param_4 + param_6);
puVar11 = param_3;
for (uVar7 = param_6 >> 2; uVar7 != 0; uVar7 = uVar7 - 1) {
*param_4 = *puVar11;
puVar11 = puVar11 + 1;
param_4 = param_4 + 1;
}
param_3 = (undefined4 *)((int)param_3 + param_6);
puVar12 = param_4;
for (uVar7 = param_6 & 3; param_4 = puVar2, uVar7 != 0; uVar7 = uVar7 - 1) {
*(undefined1 *)puVar12 = *(undefined1 *)puVar11;
puVar11 = (undefined4 *)((int)puVar11 + 1);
puVar12 = (undefined4 *)((int)puVar12 + 1);
}
}
*pfVar9 = 0.0;
pfVar9[1] = 0.0;
pfVar9[2] = 0.0;
*local_c = 0.0;
local_c[1] = 0.0;
local_c[2] = 0.0;
if (DAT_00796344 <= *param_11) {
do {
uVar7 = FUN_005df4c4();
iVar5 = (uVar7 >> 1) * 2;
fVar10 = (float)iVar5;
if (iVar5 < 0) {
fVar10 = fVar10 + _DAT_0079920c;
}
fVar10 = *param_11 - fVar10;
iVar5 = (uVar7 >> 1) * 0x40;
thunk_FUN_005e09a5(&local_18,local_1c,param_1 + iVar5);
thunk_FUN_005e09d7(&local_28,local_8,iVar5 + param_2);
local_18 = local_18 * fVar10;
param_11 = param_11 + 1;
local_14 = local_14 * fVar10;
local_10 = local_10 * fVar10;
local_28 = local_28 * fVar10;
local_24 = local_24 * fVar10;
local_20 = local_20 * fVar10;
*pfVar9 = local_18 + *pfVar9;
pfVar9[1] = local_14 + pfVar9[1];
pfVar9[2] = local_10 + pfVar9[2];
*local_c = local_28 + *local_c;
local_c[1] = local_24 + local_c[1];
local_c[2] = local_20 + local_c[2];
} while (DAT_00796344 <= *param_11);
}
local_1c = (float)((int)local_1c + param_6);
local_8 = (float)((int)local_8 + param_6);
local_c = (float *)((int)local_c + param_6);
param_11 = param_11 + 1;
pfVar9 = (float *)((int)pfVar9 + param_6);
param_7 = (float *)((int)param_7 - 1);
} while (param_7 != (float *)0x0);
return;
}
}
LAB_005ff084:
local_c = (float *)0x0;
if (param_5 != 0) {
do {
uVar7 = local_30;
pfVar9 = local_33c;
for (uVar8 = local_30 >> 2; uVar8 != 0; uVar8 = uVar8 - 1) {
*pfVar9 = 0.0;
pfVar9 = pfVar9 + 1;
}
for (uVar7 = uVar7 & 3; uVar7 != 0; uVar7 = uVar7 - 1) {
*(undefined1 *)pfVar9 = 0;
pfVar9 = (float *)((int)pfVar9 + 1);
}
for (; DAT_00796344 <= *param_11; param_11 = param_11 + 1) {
uVar7 = FUN_005df4c4();
uVar7 = uVar7 >> 1;
local_8 = (float)(int)(uVar7 * 2);
if ((int)(uVar7 * 2) < 0) {
local_8 = local_8 + _DAT_0079920c;
}
local_8 = *param_11 - local_8;
fVar10 = 0.0;
if (param_10 != 0.0) {
pfVar9 = local_33c + 2;
do {
bVar3 = param_9[(int)fVar10];
if (bVar3 == 0) {
thunk_FUN_005e09a5(&local_18,param_7[(int)fVar10],uVar7 * 0x40 + param_1);
}
else {
if (bVar3 == 3) {
iVar5 = uVar7 * 0x40 + param_2;
}
else {
if (bVar3 < 6) {
return;
}
if (7 < bVar3) {
return;
}
iVar5 = uVar7 * 0x40 + param_1;
}
thunk_FUN_005e09d7(&local_18,param_7[(int)fVar10],iVar5);
}
fVar10 = (float)((int)fVar10 + 1);
local_18 = local_18 * local_8;
local_14 = local_14 * local_8;
local_10 = local_10 * local_8;
pfVar9[-2] = local_18 + pfVar9[-2];
pfVar9[-1] = local_14 + pfVar9[-1];
*pfVar9 = local_10 + *pfVar9;
pfVar9 = pfVar9 + 3;
} while ((uint)fVar10 < (uint)param_10);
}
}
if (local_2c != 0) {
puVar2 = (undefined4 *)((int)param_4 + param_6);
puVar11 = param_3;
for (uVar7 = param_6 >> 2; uVar7 != 0; uVar7 = uVar7 - 1) {
*param_4 = *puVar11;
puVar11 = puVar11 + 1;
param_4 = param_4 + 1;
}
param_3 = (undefined4 *)((int)param_3 + param_6);
puVar12 = param_4;
for (uVar7 = param_6 & 3; param_4 = puVar2, uVar7 != 0; uVar7 = uVar7 - 1) {
*(undefined1 *)puVar12 = *(undefined1 *)puVar11;
puVar11 = (undefined4 *)((int)puVar11 + 1);
puVar12 = (undefined4 *)((int)puVar12 + 1);
}
}
if (param_10 != 0.0) {
pfVar9 = local_33c;
local_8 = param_10;
piVar6 = param_8;
do {
pfVar4 = (float *)*piVar6;
*pfVar4 = *pfVar9;
pfVar4[1] = pfVar9[1];
pfVar4[2] = pfVar9[2];
*piVar6 = *piVar6 + param_6;
piVar1 = (int *)(((int)param_7 - (int)param_8) + (int)piVar6);
*piVar1 = *piVar1 + param_6;
pfVar9 = pfVar9 + 3;
piVar6 = piVar6 + 1;
local_8 = (float)((int)local_8 + -1);
} while (local_8 != 0.0);
}
param_11 = param_11 + 1;
local_c = (float *)((int)local_c + 1);
} while (local_c < param_5);
}
return;
}
// --- FUN_005ff20f at 0x005FF20F (size: 159) ---
void FUN_005ff20f(float *param_1,float *param_2,float *param_3,float param_4,float *param_5)
{
float fVar1;
float fVar2;
float fVar3;
float fVar4;
*param_5 = *param_1;
param_5[1] = param_1[1];
param_5[2] = param_1[2];
*param_5 = *param_5 - *param_2;
param_5[1] = param_5[1] - param_2[1];
fVar3 = param_5[2] - param_2[2];
param_5[2] = fVar3;
fVar4 = param_5[1] * param_3[1] + *param_3 * *param_5 + fVar3 * param_3[2];
fVar1 = *param_3;
fVar2 = param_3[1];
param_5[2] = fVar3 - fVar4 * param_3[2];
fVar1 = (*param_5 - fVar4 * fVar1) * param_4;
*param_5 = fVar1;
fVar2 = (param_5[1] - fVar4 * fVar2) * param_4;
param_5[1] = fVar2;
param_5[2] = param_4 * param_5[2];
*param_5 = fVar1 + *param_2;
param_5[1] = fVar2 + param_2[1];
param_5[2] = param_2[2] + param_5[2];
return;
}
// --- FUN_005ff2ae at 0x005FF2AE (size: 857) ---
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
void FUN_005ff2ae(uint param_1,int param_2,uint param_3,float *param_4,float *param_5,float *param_6
,float *param_7,uint param_8)
{
float fVar1;
float fVar2;
float fVar3;
float fVar4;
float fVar5;
float *pfVar6;
uint uVar7;
int iVar8;
float *pfVar9;
float local_1cc [68];
float local_bc [10];
float local_94;
float local_8c;
float local_84;
float local_80;
float local_7c;
float local_78;
float local_74;
float local_70;
float fStack_6c;
float fStack_68;
float local_64;
float 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;
float local_1c;
float local_18;
float local_14;
float local_10;
float local_c;
float local_8;
local_7c = *param_5;
local_78 = param_5[1];
local_74 = param_5[2];
local_34 = *param_6;
local_30 = param_6[1];
local_2c = param_6[2];
local_10 = *param_7;
local_c = param_7[1];
local_8 = param_7[2];
FUN_005ff20f(&local_34,&local_7c,param_1,_DAT_007e75f0,&local_70);
FUN_005ff20f(&local_10,&local_7c,param_1,_DAT_007e75f0,&local_64);
FUN_005ff20f(&local_7c,&local_34,param_1 + 0xc,_DAT_007e75f0,&local_58);
FUN_005ff20f(&local_7c,&local_10,param_1 + 0x18,_DAT_007e75f0,&local_40);
FUN_005ff20f(&local_10,&local_34,param_1 + 0xc,_DAT_007e75f0,&local_28);
FUN_005ff20f(&local_34,&local_10,param_1 + 0x18,_DAT_007e75f0,&local_1c);
fVar5 = _DAT_007938bc;
local_94 = local_10 + local_34 + local_7c;
local_8c = local_8 + local_2c + local_74;
param_1 = 0;
local_84 = (local_c + local_30 + local_78) * _DAT_007f13bc;
local_80 = local_8c * _DAT_007f13bc;
local_4c = (local_1c + local_28 + local_40 + local_58 + local_64 + local_70) * _DAT_007c97cc -
local_94 * _DAT_007f13bc;
local_48 = (local_18 + local_24 + local_3c + local_54 + local_60 + fStack_6c) * _DAT_007c97cc -
local_84;
local_44 = (local_14 + local_20 + local_38 + local_50 + local_5c + fStack_68) * _DAT_007c97cc -
local_80;
if (param_3 != 0) {
do {
fVar1 = *(float *)(param_1 * 8 + param_2);
uVar7 = 0;
fVar2 = *(float *)(param_1 * 8 + 4 + param_2);
fVar3 = (1.0 - fVar1) - fVar2;
local_bc[0] = fVar2 * fVar2 * fVar2;
local_bc[1] = fVar3 * fVar2 * fVar2 * fVar5;
local_bc[2] = fVar2 * fVar2 * fVar1 * fVar5;
fVar4 = fVar3 * fVar3;
local_bc[3] = fVar4 * fVar2 * fVar5;
local_bc[4] = fVar3 * fVar2 * fVar1 * _DAT_007d07fc;
local_bc[5] = fVar2 * fVar1 * fVar1 * fVar5;
local_bc[6] = fVar4 * fVar3;
local_bc[7] = fVar4 * fVar1 * fVar5;
local_bc[8] = fVar3 * fVar1 * fVar1 * fVar5;
local_bc[9] = fVar1 * fVar1 * fVar1;
local_1cc[0] = 0.0;
local_1cc[1] = 0.0;
local_1cc[2] = 0.0;
pfVar6 = &local_78;
do {
pfVar9 = local_bc + uVar7;
uVar7 = uVar7 + 1;
local_1cc[0] = pfVar6[-1] * *pfVar9 + local_1cc[0];
local_1cc[1] = *pfVar9 * *pfVar6 + local_1cc[1];
local_1cc[2] = pfVar6[1] * *pfVar9 + local_1cc[2];
pfVar6 = pfVar6 + 3;
} while (uVar7 < 10);
if (3 < param_8) {
pfVar6 = param_6 + 3;
iVar8 = param_8 - 3;
do {
*(float *)(((int)local_1cc - (int)param_6) + (int)pfVar6) =
fVar3 * *pfVar6 +
fVar2 * *(float *)(((int)param_5 - (int)param_6) + (int)pfVar6) +
fVar1 * *(float *)(((int)param_7 - (int)param_6) + (int)pfVar6);
pfVar6 = pfVar6 + 1;
iVar8 = iVar8 + -1;
} while (iVar8 != 0);
}
pfVar6 = local_1cc;
pfVar9 = param_4;
for (uVar7 = param_8 & 0x3fffffff; uVar7 != 0; uVar7 = uVar7 - 1) {
*pfVar9 = *pfVar6;
pfVar6 = pfVar6 + 1;
pfVar9 = pfVar9 + 1;
}
param_1 = param_1 + 1;
for (iVar8 = 0; iVar8 != 0; iVar8 = iVar8 + -1) {
*(undefined1 *)pfVar9 = *(undefined1 *)pfVar6;
pfVar6 = (float *)((int)pfVar6 + 1);
pfVar9 = (float *)((int)pfVar9 + 1);
}
param_4 = param_4 + param_8;
} while (param_1 < param_3);
}
return;
}
// --- FUN_005ff607 at 0x005FF607 (size: 95) ---
undefined4 FUN_005ff607(LPBYTE param_1,LPCSTR param_2,LPBYTE param_3)
{
LSTATUS LVar1;
HKEY local_8;
local_8 = (HKEY)0x0;
LVar1 = RegOpenKeyA((HKEY)0x80000002,"Software\\Microsoft\\Direct3D",&local_8);
if (LVar1 == 0) {
LVar1 = RegQueryValueExA(local_8,param_2,(LPDWORD)0x0,(LPDWORD)&param_3,param_3,
(LPDWORD)&stack0x00000010);
RegCloseKey(local_8);
if ((LVar1 == 0) && (param_3 == param_1)) {
return 1;
}
}
return 0;
}
// --- FUN_005ff666 at 0x005FF666 (size: 40) ---
/* WARNING: Removing unreachable block (ram,0x005ff677) */
/* WARNING: Restarted to delay deadcode elimination for space: stack */
undefined8 __fastcall FUN_005ff666(undefined4 param_1,undefined4 param_2)
{
int iVar1;
iVar1 = cpuid_Version_info(1);
return CONCAT44(param_2,(uint)((*(uint *)(iVar1 + 8) & 0x800000) != 0));
}
// --- FUN_005ff68e at 0x005FF68E (size: 178) ---
int FUN_005ff68e(void)
{
LSTATUS LVar1;
int iVar2;
_union_530 local_38 [8];
ushort local_18;
int local_14;
DWORD local_10 [2];
HKEY local_8;
LVar1 = RegOpenKeyA((HKEY)0x80000002,"Software\\Microsoft\\Direct3D",&local_8);
if (LVar1 == 0) {
local_10[1] = 4;
LVar1 = RegQueryValueExA(local_8,"DisableMMX",(LPDWORD)0x0,local_10,(LPBYTE)&local_14,
local_10 + 1);
if (((LVar1 == 0) && (local_10[0] == 4)) && (local_14 != 0)) {
RegCloseKey(local_8);
DAT_00825d78 = 0;
return 0;
}
RegCloseKey(local_8);
}
if (DAT_00825d78 < 0) {
DAT_00825d78 = 0;
GetSystemInfo((LPSYSTEM_INFO)&local_38[0].s);
if (((local_38[0].s.wProcessorArchitecture == 0) && (4 < local_18)) &&
(iVar2 = FUN_005ff666(), iVar2 != 0)) {
DAT_00825d78 = 1;
}
}
return DAT_00825d78;
}
// --- FUN_005ff740 at 0x005FF740 (size: 66) ---
/* WARNING: Removing unreachable block (ram,0x005ff772) */
void FUN_005ff740(void)
{
undefined4 *puVar1;
undefined4 uVar2;
undefined4 uVar3;
undefined4 uVar4;
int unaff_EBP;
FUN_006b8bd4();
*(undefined4 *)(unaff_EBP + -0x18) = DAT_00836f40;
*(undefined1 **)(unaff_EBP + -0x10) = &stack0xffffffc0;
*(undefined4 *)(unaff_EBP + -0x14) = 0;
*(undefined4 *)(unaff_EBP + -0x28) = s_GenuineIntel_007f13cc._0_4_;
*(undefined4 *)(unaff_EBP + -0x24) = s_GenuineIntel_007f13cc._4_4_;
*(undefined4 *)(unaff_EBP + -0x20) = s_GenuineIntel_007f13cc._8_4_;
*(char *)(unaff_EBP + -0x1c) = s_GenuineIntel_007f13cc[0xc];
*(undefined4 *)(unaff_EBP + -4) = 0;
puVar1 = (undefined4 *)cpuid_basic_info(0);
uVar4 = puVar1[1];
uVar3 = puVar1[2];
uVar2 = puVar1[3];
*(undefined4 *)(unaff_EBP + -0x30) = *puVar1;
*(undefined4 *)(unaff_EBP + -0x3c) = uVar4;
*(undefined4 *)(unaff_EBP + -0x38) = uVar3;
*(undefined4 *)(unaff_EBP + -0x34) = uVar2;
FUN_005ff78e();
return;
}
// --- Catch@005ff782 at 0x005FF782 (size: 12) ---
undefined * Catch_005ff782(void)
{
int unaff_EBP;
*(undefined4 *)(unaff_EBP + -0x40) = *(undefined4 *)(unaff_EBP + -0x14);
return &DAT_005ff794;
}
// --- FUN_005ff78e at 0x005FF78E (size: 94) ---
/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */
/* WARNING: Removing unreachable block (ram,0x005ff7a9) */
undefined4 FUN_005ff78e(void)
{
undefined4 *puVar1;
undefined4 uVar2;
int unaff_EBP;
*(undefined4 *)(unaff_EBP + -4) = 0xffffffff;
if (*(int *)(unaff_EBP + -0x30) == 0) {
uVar2 = *(undefined4 *)(unaff_EBP + -0x14);
}
else {
puVar1 = (undefined4 *)cpuid_Version_info(1);
uVar2 = puVar1[2];
*(undefined4 *)(unaff_EBP + -0x30) = *puVar1;
*(undefined4 *)(unaff_EBP + -0x2c) = uVar2;
if ((*(uint *)(unaff_EBP + -0x2c) & 0x2000000) != 0) {
*(uint *)(unaff_EBP + -0x14) = *(uint *)(unaff_EBP + -0x14) | 4;
}
if ((*(uint *)(unaff_EBP + -0x2c) & 0x4000000) != 0) {
*(uint *)(unaff_EBP + -0x14) = *(uint *)(unaff_EBP + -0x14) | 8;
}
uVar2 = *(undefined4 *)(unaff_EBP + -0x14);
}
ExceptionList = *(void **)(unaff_EBP + -0xc);
return uVar2;
}
// --- FUN_005ff7f1 at 0x005FF7F1 (size: 259) ---
int FUN_005ff7f1(int param_1)
{
BOOL BVar1;
uint uVar2;
int iVar3;
undefined **ppuVar4;
undefined **ppuVar5;
int local_8;
FUN_005efc68();
if (param_1 == 0) {
DAT_00825d7c = 0xffff;
ppuVar4 = &PTR_FUN_00825310;
ppuVar5 = &PTR_FUN_008251e8;
for (iVar3 = 0x4a; iVar3 != 0; iVar3 = iVar3 + -1) {
*ppuVar5 = *ppuVar4;
ppuVar4 = ppuVar4 + 1;
ppuVar5 = ppuVar5 + 1;
}
}
else if (DAT_00825d7c == 0xffff) {
DAT_00825d7c = 0;
ppuVar4 = &PTR_FUN_00825310;
ppuVar5 = &PTR_FUN_008251e8;
for (iVar3 = 0x4a; iVar3 != 0; iVar3 = iVar3 + -1) {
*ppuVar5 = *ppuVar4;
ppuVar4 = ppuVar4 + 1;
ppuVar5 = ppuVar5 + 1;
}
FUN_00600850(&PTR_FUN_008251e8);
iVar3 = FUN_005ff607(4,"DisablePSGP",&param_1,4);
if (iVar3 == 0) {
param_1 = 0;
}
iVar3 = FUN_005ff607(4,"DisableD3DXPSGP",&local_8,4);
if (iVar3 != 0) {
param_1 = local_8;
}
if (param_1 != 1) {
if ((param_1 == 2) || (BVar1 = IsProcessorFeaturePresent(7), BVar1 == 0)) {
uVar2 = FUN_005ff740();
if ((uVar2 & 8) == 0) {
BVar1 = IsProcessorFeaturePresent(6);
if (BVar1 != 0) {
FUN_00602783(&PTR_FUN_008251e8);
DAT_00825d7c = 3;
}
}
else {
FUN_006028f6(&PTR_FUN_008251e8);
DAT_00825d7c = 2;
}
}
else {
FUN_00602b55(&PTR_FUN_008251e8);
DAT_00825d7c = 1;
}
}
}
return DAT_00825d7c;
}
// --- FUN_005ff8f4 at 0x005FF8F4 (size: 19) ---
int __fastcall FUN_005ff8f4(int param_1)
{
int iVar1;
undefined4 *puVar2;
puVar2 = (undefined4 *)(param_1 + 0x48);
for (iVar1 = 0x10; iVar1 != 0; iVar1 = iVar1 + -1) {
*puVar2 = 0;
puVar2 = puVar2 + 1;
}
return param_1;
}
// --- FUN_005ff907 at 0x005FF907 (size: 29) ---
undefined4 __thiscall FUN_005ff907(undefined4 *param_1,undefined4 param_2)
{
undefined4 uVar1;
*param_1 = param_2;
uVar1 = FUN_005e537f(param_2);
param_1[1] = uVar1;
return 0;
}
// --- FUN_005ff924 at 0x005FF924 (size: 46) ---
undefined4 __thiscall FUN_005ff924(undefined4 *param_1,int param_2,undefined4 param_3,int param_4)
{
param_1[param_2 + 2] = param_3;
if (param_4 == 0) {
param_4 = FUN_005e4f99(*param_1,param_2);
}
param_1[param_2 + 0x12] = param_4;
return 0;
}
// --- FUN_005ff952 at 0x005FF952 (size: 35) ---
int __thiscall FUN_005ff952(int param_1,ushort *param_2,int param_3)
{
return *(int *)(param_1 + 0x48 + (uint)*param_2 * 4) * param_3 +
*(int *)(param_1 + 8 + (uint)*param_2 * 4) + (uint)param_2[1];
}
// --- FUN_005ff975 at 0x005FF975 (size: 972) ---
/* WARNING: Removing unreachable block (ram,0x005ffc66) */
/* WARNING: Removing unreachable block (ram,0x005ffc4c) */
/* WARNING: Removing unreachable block (ram,0x005ffc84) */
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
void FUN_005ff975(int param_1,undefined4 param_2,float *param_3,uint param_4)
{
float fVar1;
float fVar2;
float *pfVar3;
uint uVar4;
int iVar5;
int iVar6;
int iVar7;
float local_14 [4];
if (param_1 == 0) {
local_14[0] = 0.0;
LAB_005ffd15:
local_14[1] = 0.0;
LAB_005ffd17:
goto LAB_005ffd1a;
}
pfVar3 = (float *)FUN_005ff952(param_1,param_2);
fVar1 = _DAT_00799208;
switch(*(undefined1 *)(param_1 + 4)) {
case 0:
local_14[0] = *pfVar3;
goto LAB_005ffd15;
case 1:
local_14[0] = *pfVar3;
local_14[1] = pfVar3[1];
goto LAB_005ffd1a;
case 2:
local_14[0] = *pfVar3;
local_14[1] = pfVar3[1];
local_14[2] = pfVar3[2];
goto LAB_005ffd1f;
case 3:
local_14[0] = *pfVar3;
local_14[1] = pfVar3[1];
local_14[2] = pfVar3[2];
local_14[3] = pfVar3[3];
break;
case 4:
local_14[0] = (float)*(byte *)((int)pfVar3 + 2) * _DAT_00799208;
local_14[1] = (float)((uint)*pfVar3 >> 8 & 0xff) * _DAT_00799208;
local_14[2] = (float)*(byte *)pfVar3 * _DAT_00799208;
fVar2 = (float)*(byte *)((int)pfVar3 + 3);
goto LAB_005ffa33;
case 5:
local_14[0] = (float)*(byte *)pfVar3;
local_14[1] = (float)*(byte *)((int)pfVar3 + 1);
local_14[2] = (float)*(byte *)((int)pfVar3 + 2);
local_14[3] = (float)*(byte *)((int)pfVar3 + 3);
goto LAB_005ffd21;
case 6:
local_14[0] = (float)(int)(short)*(ushort *)pfVar3;
local_14[1] = (float)(int)(short)*(ushort *)((int)pfVar3 + 2);
goto LAB_005ffd17;
case 7:
local_14[0] = (float)(int)(short)*(ushort *)pfVar3;
local_14[1] = (float)(int)(short)*(ushort *)((int)pfVar3 + 2);
local_14[2] = (float)(int)(short)*(ushort *)(pfVar3 + 1);
local_14[3] = (float)(int)(short)*(ushort *)((int)pfVar3 + 6);
goto LAB_005ffd21;
case 8:
local_14[0] = (float)*(byte *)pfVar3 * _DAT_00799208;
local_14[1] = (float)*(byte *)((int)pfVar3 + 1) * _DAT_00799208;
local_14[2] = (float)*(byte *)((int)pfVar3 + 2) * _DAT_00799208;
fVar2 = (float)*(byte *)((int)pfVar3 + 3);
goto LAB_005ffa33;
case 9:
local_14[0] = (float)(int)(short)((ushort)(*(ushort *)pfVar3 == 0x8000) + *(ushort *)pfVar3) *
_DAT_007cbd08;
uVar4 = (uint)(short)((ushort)(*(ushort *)((int)pfVar3 + 2) == 0x8000) +
*(ushort *)((int)pfVar3 + 2));
fVar1 = _DAT_007cbd08;
goto LAB_005ffbec;
case 10:
local_14[0] = (float)(int)(short)((ushort)(*(ushort *)pfVar3 == 0x8000) + *(ushort *)pfVar3) *
_DAT_007cbd08;
local_14[1] = (float)(int)(short)((ushort)(*(ushort *)((int)pfVar3 + 2) == 0x8000) +
*(ushort *)((int)pfVar3 + 2)) * _DAT_007cbd08;
local_14[2] = (float)(int)(short)((ushort)(*(ushort *)(pfVar3 + 1) == 0x8000) +
*(ushort *)(pfVar3 + 1)) * _DAT_007cbd08;
local_14[3] = (float)(int)(short)((ushort)(*(ushort *)((int)pfVar3 + 6) == 0x8000) +
*(ushort *)((int)pfVar3 + 6)) * _DAT_007cbd08;
break;
case 0xb:
local_14[0] = (float)*(ushort *)pfVar3 * _DAT_007edf18;
uVar4 = (uint)*(ushort *)((int)pfVar3 + 2);
fVar1 = _DAT_007edf18;
LAB_005ffbec:
local_14[1] = (float)(int)uVar4 * fVar1;
goto LAB_005ffd1a;
case 0xc:
local_14[0] = (float)*(ushort *)pfVar3 * _DAT_007edf18;
local_14[1] = (float)*(ushort *)((int)pfVar3 + 2) * _DAT_007edf18;
local_14[2] = (float)*(ushort *)(pfVar3 + 1) * _DAT_007edf18;
fVar2 = (float)*(ushort *)((int)pfVar3 + 6);
fVar1 = _DAT_007edf18;
LAB_005ffa33:
local_14[3] = fVar2 * fVar1;
break;
case 0xd:
local_14[0] = (float)((uint)*pfVar3 & 0x3ff);
local_14[1] = (float)((uint)*pfVar3 >> 10 & 0x3ff);
local_14[2] = (float)((uint)*pfVar3 >> 0x14 & 0x3ff);
goto LAB_005ffd1c;
case 0xe:
fVar1 = *pfVar3;
iVar6 = ((int)fVar1 << 0x16) >> 0x16;
iVar7 = ((int)fVar1 << 0xc) >> 0x16;
iVar5 = ((int)fVar1 << 2) >> 0x16;
local_14[0] = (float)(int)((uint)(iVar6 == -0x200) + iVar6) * _DAT_007ee04c;
local_14[1] = (float)(int)((uint)(iVar7 == -0x200) + iVar7) * _DAT_007ee04c;
local_14[2] = (float)(int)((uint)(iVar5 == -0x200) + iVar5) * _DAT_007ee04c;
goto LAB_005ffd1f;
case 0xf:
thunk_FUN_005e038f(local_14,pfVar3,2);
LAB_005ffd1a:
local_14[2] = 0.0;
LAB_005ffd1c:
LAB_005ffd1f:
local_14[3] = 1.0;
LAB_005ffd21:
break;
case 0x10:
thunk_FUN_005e038f(local_14,pfVar3,4);
}
if (4 < param_4) {
param_4 = 4;
}
if (param_4 != 0) {
pfVar3 = local_14;
for (; param_4 != 0; param_4 = param_4 - 1) {
*param_3 = *pfVar3;
pfVar3 = pfVar3 + 1;
param_3 = param_3 + 1;
}
}
return;
}
// --- FUN_005ffd85 at 0x005FFD85 (size: 1047) ---
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
void FUN_005ffd85(int param_1,undefined4 param_2,float *param_3,uint param_4)
{
float fVar1;
undefined1 uVar2;
undefined2 uVar3;
float *pfVar4;
uint uVar5;
int iVar6;
uint uVar7;
uint uVar8;
undefined4 uVar9;
float local_18 [5];
uVar7 = 0;
if (4 < param_4) {
param_4 = 4;
}
uVar2 = *(undefined1 *)(param_1 + 4);
switch(uVar2) {
case 4:
case 8:
case 0xb:
case 0xc:
if (param_4 == 0) break;
iVar6 = (int)local_18 - (int)param_3;
uVar7 = param_4;
do {
if (0.0 <= *param_3) {
if (*param_3 <= 1.0) {
fVar1 = *param_3;
}
else {
fVar1 = 1.0;
}
}
else {
fVar1 = 0.0;
}
*(float *)(iVar6 + (int)param_3) = fVar1;
param_3 = param_3 + 1;
uVar7 = uVar7 - 1;
} while (uVar7 != 0);
LAB_005ffe80:
uVar7 = param_4;
if (param_4 < 3) break;
goto LAB_005ffe96;
case 5:
case 0xd:
if (param_4 != 0) {
iVar6 = (int)local_18 - (int)param_3;
uVar7 = param_4;
do {
if (0.0 <= *param_3) {
fVar1 = *param_3;
}
else {
fVar1 = 0.0;
}
*(float *)((int)param_3 + iVar6) = fVar1;
param_3 = param_3 + 1;
uVar7 = uVar7 - 1;
} while (uVar7 != 0);
goto LAB_005ffe80;
}
break;
default:
if (param_4 != 0) {
pfVar4 = local_18;
for (uVar7 = param_4; uVar7 != 0; uVar7 = uVar7 - 1) {
*pfVar4 = *param_3;
param_3 = param_3 + 1;
pfVar4 = pfVar4 + 1;
}
goto LAB_005ffe80;
}
break;
case 9:
case 10:
case 0xe:
if (param_4 != 0) {
iVar6 = (int)local_18 - (int)param_3;
uVar7 = param_4;
do {
fVar1 = _DAT_0079a1a0;
if (_DAT_0079a1a0 <= *param_3) {
if (*param_3 <= 1.0) {
fVar1 = *param_3;
}
else {
fVar1 = 1.0;
}
}
*(float *)((int)param_3 + iVar6) = fVar1;
param_3 = param_3 + 1;
uVar7 = uVar7 - 1;
} while (uVar7 != 0);
goto LAB_005ffe80;
}
}
pfVar4 = local_18 + uVar7;
for (iVar6 = 3 - uVar7; iVar6 != 0; iVar6 = iVar6 + -1) {
*pfVar4 = 0.0;
pfVar4 = pfVar4 + 1;
}
param_4 = uVar7 + (3 - uVar7);
LAB_005ffe96:
if (param_4 < 4) {
pfVar4 = local_18 + param_4;
for (iVar6 = 4 - param_4; iVar6 != 0; iVar6 = iVar6 + -1) {
*pfVar4 = 1.0;
pfVar4 = pfVar4 + 1;
}
}
pfVar4 = (float *)FUN_005ff952(param_1,param_2);
switch(uVar2) {
case 0:
*pfVar4 = local_18[0];
break;
case 1:
*pfVar4 = local_18[0];
pfVar4[1] = local_18[1];
break;
case 2:
*pfVar4 = local_18[0];
pfVar4[1] = local_18[1];
pfVar4[2] = local_18[2];
break;
case 3:
*pfVar4 = local_18[0];
pfVar4[1] = local_18[1];
pfVar4[2] = local_18[2];
pfVar4[3] = local_18[3];
break;
case 4:
uVar7 = FUN_005df4c4();
uVar8 = 0xff;
iVar6 = FUN_005df4c4();
uVar5 = FUN_005df4c4();
uVar7 = ((uVar7 & 0xff | iVar6 << 8) << 8 | uVar5 & 0xff) << 8;
goto LAB_00600170;
case 5:
uVar2 = FUN_005df4c4();
*(undefined1 *)pfVar4 = uVar2;
uVar2 = FUN_005df4c4();
*(undefined1 *)((int)pfVar4 + 1) = uVar2;
uVar2 = FUN_005df4c4();
*(undefined1 *)((int)pfVar4 + 2) = uVar2;
uVar2 = FUN_005df4c4();
goto LAB_00600041;
case 6:
uVar3 = FUN_005df4c4();
*(undefined2 *)pfVar4 = uVar3;
goto LAB_00600095;
case 7:
uVar3 = FUN_005df4c4();
*(undefined2 *)pfVar4 = uVar3;
uVar3 = FUN_005df4c4();
*(undefined2 *)((int)pfVar4 + 2) = uVar3;
uVar3 = FUN_005df4c4();
*(undefined2 *)(pfVar4 + 1) = uVar3;
uVar3 = FUN_005df4c4();
goto LAB_006000f2;
case 8:
uVar2 = FUN_005df4c4();
*(undefined1 *)pfVar4 = uVar2;
uVar2 = FUN_005df4c4();
*(undefined1 *)((int)pfVar4 + 1) = uVar2;
uVar2 = FUN_005df4c4();
*(undefined1 *)((int)pfVar4 + 2) = uVar2;
uVar2 = FUN_005df4c4();
LAB_00600041:
*(undefined1 *)((int)pfVar4 + 3) = uVar2;
break;
case 9:
uVar3 = FUN_005df4c4();
*(undefined2 *)pfVar4 = uVar3;
goto LAB_00600095;
case 10:
goto LAB_006000af;
case 0xb:
uVar3 = FUN_005df4c4();
*(undefined2 *)pfVar4 = uVar3;
LAB_00600095:
uVar3 = FUN_005df4c4();
*(undefined2 *)((int)pfVar4 + 2) = uVar3;
break;
case 0xc:
LAB_006000af:
uVar3 = FUN_005df4c4();
*(undefined2 *)pfVar4 = uVar3;
uVar3 = FUN_005df4c4();
*(undefined2 *)((int)pfVar4 + 2) = uVar3;
uVar3 = FUN_005df4c4();
*(undefined2 *)(pfVar4 + 1) = uVar3;
uVar3 = FUN_005df4c4();
LAB_006000f2:
*(undefined2 *)((int)pfVar4 + 6) = uVar3;
break;
case 0xd:
uVar7 = FUN_005df4c4();
uVar8 = 0x3ff;
uVar5 = FUN_005df4c4();
uVar7 = ((uVar7 & 0x3ff) << 10 | uVar5 & 0x3ff) << 10;
uVar5 = FUN_005df4c4();
goto LAB_0060017b;
case 0xe:
uVar7 = FUN_005df4c4();
uVar8 = 0x3ff;
uVar5 = FUN_005df4c4();
uVar7 = ((uVar7 & 0x3ff) << 10 | uVar5 & 0x3ff) << 10;
LAB_00600170:
uVar5 = FUN_005df4c4();
LAB_0060017b:
*pfVar4 = (float)(uVar7 | uVar5 & uVar8);
break;
case 0xf:
uVar9 = 2;
goto LAB_0060018b;
case 0x10:
uVar9 = 4;
LAB_0060018b:
thunk_FUN_005e02d4(pfVar4,local_18,uVar9);
}
return;
}