server-re/decomp/DBCServer_Release_x64/full/functions/0x1401d15c0.c

173 lines
5.7 KiB
C

/* DBCServer_Release_x64.exe sha256 d9e4fccdf3482e50247686d4452c0b13c75a53efc4bd7320668eece8d1ce828c
* Ghidra 12.1.2 decompiler output for 0x1401d15c0 FUN_1401d15c0
* Pseudocode, not original source. */
/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */
/* WARNING: Removing unreachable block (ram,0x0001401d1941) */
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
void FUN_1401d15c0(longlong param_1)
{
double dVar1;
undefined4 uVar2;
longlong lVar3;
undefined8 uVar4;
longlong lVar5;
longlong lVar6;
longlong lVar7;
double dVar8;
undefined1 auStack_d98 [32];
undefined1 local_d78 [8];
longlong local_d70;
longlong local_d68;
undefined4 local_d60;
int local_d5c;
undefined4 local_d50 [2];
undefined8 local_d48;
undefined1 local_d40;
undefined4 local_d3c;
undefined1 local_d38;
undefined1 local_d37;
undefined8 local_d30;
undefined4 uStack_d28;
undefined4 uStack_d24;
longlong *local_d20;
undefined8 local_d18;
undefined1 local_d10 [72];
undefined4 local_cc8;
undefined4 uStack_cc4;
undefined4 uStack_cc0;
undefined4 uStack_cbc;
undefined4 *local_48;
undefined4 local_40;
int local_3c;
ulonglong local_38;
local_d18 = 0xfffffffffffffffe;
local_38 = DAT_1403463c0 ^ (ulonglong)auStack_d98;
(**(code **)(*(longlong *)(param_1 + 0x78) + 0x10))();
lVar7 = 0;
lVar3 = lVar7;
if (*(longlong *)(param_1 + 0x1670) != 0) {
lVar3 = *(longlong *)(param_1 + 0x1660);
}
do {
lVar6 = lVar3;
if (lVar6 == 0) {
return;
}
if ((((*(longlong **)(lVar6 + 8) != (longlong *)0x0) &&
(lVar3 = **(longlong **)(lVar6 + 8), lVar3 != 0)) && (*(char *)(lVar3 + 0x684) == '\0')) &&
(*(int *)(lVar3 + 0x56c) != 1)) {
lVar5 = lVar7;
if (*(longlong *)(param_1 + 0x5d8) != 0) {
lVar5 = *(longlong *)(*(longlong *)(param_1 + 0x5d8) + 0x38);
}
dVar8 = *(double *)(lVar3 + 0x148) - *(double *)(lVar5 + 0x100);
*(double *)(lVar3 + 0x148) = dVar8;
if (dVar8 <= 0.0) {
*(undefined8 *)(lVar3 + 0x148) = DAT_140344d20;
uVar4 = (**(code **)(*(longlong *)(param_1 + 0x70) + 0x1c0))(param_1 + 0x70);
*(undefined8 *)(lVar3 + 0x80) = uVar4;
if (*(char *)(lVar3 + 0x608) == '\0') {
FUN_14016b440(local_d78);
FUN_14016abe0(local_d78);
FUN_14016b5a0(local_d78,0x800);
FUN_14016b5a0(local_d78,0);
FUN_14004eef0(local_d78,0x20);
uVar4 = FUN_1401a1eb0(param_1 + 0x1620);
FUN_14004ee00(local_d78,uVar4);
local_3c = 200;
local_40 = 0;
local_48 = &local_cc8;
if (local_d70 == 0) {
uVar2 = local_d60;
if (local_d68 == 0) {
/* WARNING: Subroutine does not return */
FUN_14016d1e0();
}
}
else {
uVar2 = *(undefined4 *)(local_d70 + 0x18);
}
lVar5 = local_d68;
if (local_d68 == 0) {
if (local_d70 == 0) {
/* WARNING: Subroutine does not return */
FUN_14016d1e0();
}
lVar5 = lVar7;
if (*(int *)(local_d70 + 0x18) != 0) {
lVar5 = *(longlong *)(local_d70 + 0x10);
}
}
local_40 = 1;
local_d30._0_4_ = (undefined4)lVar5;
local_d30._4_4_ = (undefined4)((ulonglong)lVar5 >> 0x20);
local_cc8 = (undefined4)local_d30;
uStack_cc4 = local_d30._4_4_;
uStack_cbc = uStack_d24;
local_d50[0] = 0;
local_d48 = 0;
local_d40 = 1;
local_d3c = 0xffffffff;
local_d38 = 1;
local_d37 = DAT_140344dfc;
local_d30 = lVar5;
uStack_d28 = uVar2;
uStack_cc0 = uVar2;
FUN_1401fa510(lVar3 + 0x668,&local_cc8,local_d50);
if (local_48 == (undefined4 *)0x0) {
FUN_14016d300(local_d10,PTR_u_ArrayWithExternalBuffer_is_unini_1403440d0);
/* WARNING: Subroutine does not return */
_CxxThrowException(local_d10,(ThrowInfo *)&DAT_1403417f8);
}
if (local_3c < 0) {
/* WARNING: Subroutine does not return */
FUN_14016d6b0();
}
local_40 = 0;
local_d20 = &local_d70;
FUN_14016d0e0(&local_d70);
if (local_d68 != 0) {
if (local_d5c < 0) {
/* WARNING: Subroutine does not return */
FUN_14016d6b0();
}
local_d60 = 0;
}
}
else {
dVar8 = (double)(**(code **)(*(longlong *)(param_1 + 0x70) + 0x1c0))(param_1 + 0x70);
dVar8 = dVar8 - *(double *)(lVar3 + 0xc0);
if (0.0 < dVar8) {
*(double *)(lVar3 + 0x140) = dVar8;
}
uVar4 = (**(code **)(*(longlong *)(param_1 + 0x70) + 0x1c0))(param_1 + 0x70);
*(undefined8 *)(lVar3 + 0xc0) = uVar4;
*(int *)(lVar3 + 0x100) = *(int *)(lVar3 + 0x100) + 1;
*(undefined8 *)(lVar3 + 0x150) = 0;
dVar8 = *(double *)(param_1 + 0x4f8) + *(double *)(lVar3 + 0x60);
*(double *)(lVar3 + 0x158) = dVar8;
if (*(char *)(lVar3 + 0x618) != '\0') {
*(undefined8 *)(lVar3 + 0x50) = 0;
*(undefined1 *)(lVar3 + 0x618) = 0;
}
dVar1 = *(double *)(lVar3 + 0x50);
if (dVar1 <= 0.0) {
*(undefined8 *)(lVar3 + 0x50) = *(undefined8 *)(lVar3 + 0x158);
}
else {
*(double *)(lVar3 + 0x50) = (dVar8 - dVar1) * _DAT_140344d38 + dVar1;
}
}
}
}
lVar3 = lVar7;
if (lVar6 != 0) {
lVar3 = *(longlong *)(lVar6 + 0x10);
}
} while( true );
}