server-re/decomp/Agent_Release_x64/full/functions/0x14004c590.c
2026-10-14 16:45:19 -04:00

269 lines
9.5 KiB
C

/* Agent_Release_x64.exe sha256 6f2be7b8eb799ba51b359d1958720aac5baee5b7ee0d1d36684d3cbd72d45469
* Ghidra 12.1.2 decompiler output for 0x14004c590 FUN_14004c590
* Pseudocode, not original source. */
/* WARNING: Function: __chkstk replaced with injection: alloca_probe */
/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */
void FUN_14004c590(longlong param_1,uint *param_2,longlong param_3,TypeDescriptor *param_4)
{
bool bVar1;
undefined4 *puVar2;
ulonglong uVar3;
longlong lVar4;
longlong lVar5;
ulonglong uVar6;
ulonglong uVar7;
undefined1 *puVar8;
undefined1 *puVar9;
int iVar10;
ulonglong uVar11;
longlong *plVar12;
longlong lVar13;
TypeDescriptor *pTVar14;
uint uVar15;
longlong *plVar16;
double dVar17;
undefined8 uVar18;
double dVar19;
undefined1 auStack_d8 [32];
undefined4 local_b8;
longlong local_a8;
longlong local_a0;
double local_98;
ulonglong local_90;
uint *local_88;
longlong *local_80;
undefined8 local_60;
ulonglong local_58;
puVar9 = auStack_d8;
puVar8 = auStack_d8;
local_60 = 0xfffffffffffffffe;
local_58 = DAT_1401555a0 ^ (ulonglong)&local_a8;
dVar17 = (double)(**(code **)(*(longlong *)(param_1 + 0x118) + 8))();
local_98 = dVar17;
if ((*(longlong *)(param_2 + 10) == 0) || ((char)param_2[0x22] == '\0')) {
FUN_14003e030((longlong)(param_2 + 0x18),0,param_3);
goto LAB_14004cb4e;
}
local_88 = param_2 + 2;
uVar11 = 0;
uVar3 = uVar11;
if (*(longlong *)(param_2 + 10) != 0) {
uVar3 = *(ulonglong *)(param_2 + 6);
}
while (uVar6 = uVar3, local_90 = uVar6, uVar6 != 0) {
if (uVar6 == 0) {
/* WARNING: Subroutine does not return */
FUN_14000b450(0x80004005);
}
local_80 = *(longlong **)(uVar6 + 8);
local_a0 = 0;
local_b8 = 0;
param_4 = &Proud::CRemoteClient_S::RTTI_Type_Descriptor;
pTVar14 = &Proud::CP2PGroupMemberBase_S::RTTI_Type_Descriptor;
lVar4 = __RTDynamicCast(*(undefined8 *)(uVar6 + 0x10),0);
local_a0 = lVar4;
if ((lVar4 != 0) &&
((((*(double *)(lVar4 + 0x1b0) == 0.0 || ((int)param_2[0x1e] < 1)) ||
(**(int **)(param_2 + 0x1c) != *(int *)(lVar4 + 0x6f8))) ||
(*(char *)(lVar4 + 0x700) == '\0')))) {
*(undefined8 *)(lVar4 + 0x1b0) = 0;
if (*(char *)(lVar4 + 0x700) != '\0') {
*(double *)(lVar4 + 0x1b0) = *(double *)(param_2 + 0x24) + 0.0;
}
bVar1 = FUN_140095420(lVar4);
if (!bVar1) {
*(double *)(lVar4 + 0x1b0) = *(double *)(param_2 + 0x26) + *(double *)(lVar4 + 0x1b0);
}
dVar19 = *(double *)(lVar4 + 0x1b0) - *(double *)(lVar4 + 0x1c8) * *(double *)(param_2 + 0x28)
;
*(double *)(lVar4 + 0x1b0) = dVar19;
*(double *)(lVar4 + 0x1b0) = *(double *)(lVar4 + 0x1e0) * *(double *)(param_2 + 0x2e) + dVar19
;
dVar19 = (double)FUN_140096240(lVar4,*param_2,pTVar14,param_4);
if (0.0 <= dVar19) {
dVar19 = (double)FUN_140096240(lVar4,*param_2,pTVar14,param_4);
}
else {
dVar19 = 0.0;
}
dVar19 = *(double *)(lVar4 + 0x1b0) - dVar19 * *(double *)(param_2 + 0x2a);
*(double *)(lVar4 + 0x1b0) = dVar19;
*(double *)(lVar4 + 0x1b0) =
*(double *)(lVar4 + 400) * *(double *)(param_2 + 0x2c) * 10485760.0 + dVar19;
if ((0.0 < *(double *)(param_2 + 0x30)) &&
(dVar17 - (double)local_80 < *(double *)(param_2 + 0x30))) {
*(undefined8 *)(lVar4 + 0x1b0) = 0xc65c662460d49e87;
}
}
uVar3 = uVar11;
if (uVar6 != 0) {
uVar3 = *(ulonglong *)(uVar6 + 0x18);
}
}
lVar4 = *(longlong *)(param_2 + 10);
if (lVar4 * 0x18 + 0x10U < 0x401) {
uVar3 = lVar4 * 0x18 + 0x1f;
if (uVar3 <= lVar4 * 0x18 + 0x10U) {
uVar3 = 0xffffffffffffff0;
}
lVar4 = -(uVar3 & 0xfffffffffffffff0);
puVar8 = auStack_d8 + lVar4;
puVar2 = (undefined4 *)((longlong)&local_a8 + lVar4);
plVar12 = (longlong *)0x0;
puVar9 = auStack_d8 + lVar4;
if (puVar2 != (undefined4 *)0x0) {
*puVar2 = 0xcccc;
LAB_14004c6c7:
plVar12 = (longlong *)(puVar2 + 4);
puVar9 = puVar8;
}
}
else {
puVar2 = malloc(lVar4 * 0x18 + 0x10);
plVar12 = (longlong *)0x0;
puVar9 = auStack_d8;
if (puVar2 != (undefined4 *)0x0) {
*puVar2 = 0xdddd;
goto LAB_14004c6c7;
}
}
local_a8._0_4_ = 0;
local_88 = param_2 + 2;
uVar3 = uVar11;
uVar6 = uVar11;
local_80 = plVar12;
if (*(longlong *)(param_2 + 10) != 0) {
uVar3 = *(ulonglong *)(param_2 + 6);
}
while (uVar7 = uVar3, uVar15 = (uint)uVar6, local_90 = uVar7, uVar7 != 0) {
local_a0 = 0;
if (uVar7 == 0) {
/* WARNING: Subroutine does not return */
*(undefined8 *)(puVar9 + -8) = 0x14004c8d1;
FUN_14000b450(0x80004005);
}
*(undefined4 *)(puVar9 + 0x20) = 0;
param_4 = &Proud::CRemoteClient_S::RTTI_Type_Descriptor;
uVar18 = *(undefined8 *)(uVar7 + 0x10);
*(undefined8 *)(puVar9 + -8) = 0x14004c8ee;
local_a0 = __RTDynamicCast(uVar18,0);
if (local_a0 != 0) {
lVar4 = (longlong)(int)uVar15;
plVar12[lVar4 * 3] = local_a0;
plVar12[lVar4 * 3 + 1] = (longlong)param_2;
if (uVar7 == 0) {
/* WARNING: Subroutine does not return */
*(undefined **)(puVar9 + -8) = &UNK_14004c93d;
FUN_14000b450(0x80004005);
}
plVar12[lVar4 * 3 + 2] = (longlong)(dVar17 - *(double *)(uVar7 + 8));
local_a8._0_4_ = uVar15 + 1;
uVar6 = (ulonglong)(uint)local_a8;
}
uVar3 = uVar11;
if (uVar7 != 0) {
uVar3 = *(ulonglong *)(uVar7 + 0x18);
}
}
lVar13 = 0;
*(undefined8 *)(puVar9 + -8) = 0x14004c715;
FUN_140043ff0((longlong)plVar12,uVar15,0);
*(undefined8 *)(puVar9 + -8) = 0x14004c721;
FUN_14003e030((longlong)(param_2 + 0x18),uVar15,lVar13);
local_a8 = 0;
lVar4 = (longlong)(int)uVar15;
local_98 = (double)lVar4;
uVar3 = uVar11;
plVar16 = plVar12;
if (0 < (int)uVar15) {
do {
if ((local_a8 < 0) || (iVar10 = (int)uVar11, (int)param_2[0x1e] <= iVar10)) {
/* WARNING: Subroutine does not return */
*(undefined **)(puVar9 + -8) = &UNK_14004c892;
FUN_14002f5c0(lVar4,uVar6,lVar13,param_4);
}
lVar4 = *(longlong *)(param_2 + 0x1c);
*(undefined4 *)(uVar3 + lVar4) = *(undefined4 *)(*plVar16 + 0x6f8);
if ((int)param_2[0x1e] <= iVar10) {
/* WARNING: Subroutine does not return */
*(undefined **)(puVar9 + -8) = &UNK_14004c88c;
FUN_14002f5c0(lVar4,uVar6,lVar13,param_4);
}
lVar4 = *(longlong *)(param_2 + 0x1c);
*(undefined8 *)(lVar4 + 8 + uVar3) = *(undefined8 *)(*plVar16 + 0x1b0);
if ((int)param_2[0x1e] <= iVar10) {
/* WARNING: Subroutine does not return */
*(undefined **)(puVar9 + -8) = &UNK_14004c886;
FUN_14002f5c0(lVar4,uVar6,lVar13,param_4);
}
lVar4 = *(longlong *)(param_2 + 0x1c);
*(undefined1 *)(lVar4 + 0x10 + uVar3) = *(undefined1 *)(*plVar16 + 0x700);
if ((int)param_2[0x1e] <= iVar10) {
/* WARNING: Subroutine does not return */
*(undefined **)(puVar9 + -8) = &UNK_14004c880;
FUN_14002f5c0(lVar4,uVar6,lVar13,param_4);
}
lVar4 = *(longlong *)(param_2 + 0x1c);
lVar5 = *plVar16;
*(undefined8 *)(puVar9 + -8) = 0x14004c7b4;
bVar1 = FUN_140095420(lVar5);
*(bool *)(uVar3 + 0x11 + lVar4) = bVar1;
if ((int)param_2[0x1e] <= iVar10) {
/* WARNING: Subroutine does not return */
*(undefined **)(puVar9 + -8) = &UNK_14004c87a;
FUN_14002f5c0(lVar5,uVar6,lVar13,param_4);
}
lVar4 = *(longlong *)(param_2 + 0x1c);
*(undefined8 *)(lVar4 + 0x18 + uVar3) = *(undefined8 *)(*plVar16 + 0x1c8);
if ((int)param_2[0x1e] <= iVar10) {
/* WARNING: Subroutine does not return */
*(undefined **)(puVar9 + -8) = &UNK_14004c874;
FUN_14002f5c0(lVar4,uVar6,lVar13,param_4);
}
lVar4 = *(longlong *)(param_2 + 0x1c);
uVar15 = *param_2;
uVar6 = (ulonglong)uVar15;
lVar5 = *plVar16;
*(undefined8 *)(puVar9 + -8) = 0x14004c7f0;
uVar18 = FUN_140096240(lVar5,uVar15,lVar13,param_4);
*(undefined8 *)(uVar3 + 0x20 + lVar4) = uVar18;
if ((int)param_2[0x1e] <= iVar10) {
/* WARNING: Subroutine does not return */
*(undefined **)(puVar9 + -8) = &UNK_14004c86e;
FUN_14002f5c0(lVar5,uVar6,lVar13,param_4);
}
lVar4 = *(longlong *)(param_2 + 0x1c);
*(undefined8 *)(lVar4 + 0x28 + uVar3) = *(undefined8 *)(*plVar16 + 400);
if ((int)param_2[0x1e] <= iVar10) {
/* WARNING: Subroutine does not return */
*(undefined **)(puVar9 + -8) = &UNK_14004c868;
FUN_14002f5c0(lVar4,uVar6,lVar13,param_4);
}
lVar4 = *(longlong *)(param_2 + 0x1c);
*(longlong *)(lVar4 + 0x30 + uVar3) = plVar16[2];
if ((int)param_2[0x1e] <= iVar10) {
/* WARNING: Subroutine does not return */
*(undefined **)(puVar9 + -8) = &UNK_14004c862;
FUN_14002f5c0(lVar4,uVar6,lVar13,param_4);
}
lVar4 = *(longlong *)(param_2 + 0x1c);
*(undefined8 *)(lVar4 + 0x38 + uVar3) = *(undefined8 *)(*plVar16 + 0x1e0);
uVar11 = (ulonglong)(iVar10 + 1);
local_a8 = local_a8 + 1;
uVar3 = uVar3 + 0x40;
plVar16 = plVar16 + 3;
} while (local_a8 < (longlong)local_98);
}
if ((plVar12 != (longlong *)0x0) && ((int)plVar12[-2] == 0xdddd)) {
*(undefined8 *)(puVar9 + -8) = 0x14004c8b2;
free(plVar12 + -2);
}
LAB_14004cb4e:
*(undefined8 *)(puVar9 + -8) = 0x14004cb5a;
return;
}