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>
13664 lines
346 KiB
C
13664 lines
346 KiB
C
// Decompiled from acclient.exe — chunk 0x00410000
|
|
// Ghidra 12.0.4 + pyghidra headless
|
|
|
|
// --- FUN_00410220 at 0x00410220 (size: 122) ---
|
|
|
|
|
|
int FUN_00410220(char *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
char cVar1;
|
|
|
|
char *pcVar2;
|
|
|
|
int iVar3;
|
|
|
|
int iVar4;
|
|
|
|
|
|
|
|
iVar3 = 0;
|
|
|
|
cVar1 = *param_1;
|
|
|
|
pcVar2 = param_1;
|
|
|
|
do {
|
|
|
|
if (cVar1 == '\0') {
|
|
|
|
if (*param_1 != '\0') {
|
|
|
|
iVar4 = 0;
|
|
|
|
pcVar2 = param_1;
|
|
|
|
do {
|
|
|
|
pcVar2 = pcVar2 + 1;
|
|
|
|
iVar4 = iVar4 + 1;
|
|
|
|
} while (*pcVar2 != '\0');
|
|
|
|
if (iVar4 != 0) {
|
|
|
|
printf("%0.*s",iVar4,param_1);
|
|
|
|
iVar3 = iVar3 + iVar4;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return iVar3;
|
|
|
|
}
|
|
|
|
if (*pcVar2 == '\x1b') {
|
|
|
|
iVar4 = (int)pcVar2 - (int)param_1;
|
|
|
|
if (iVar4 != 0) {
|
|
|
|
printf("%0.*s",iVar4,param_1);
|
|
|
|
iVar3 = iVar3 + iVar4;
|
|
|
|
}
|
|
|
|
iVar4 = FUN_0040ff80(pcVar2);
|
|
|
|
if (iVar4 == 0) goto LAB_00410261;
|
|
|
|
param_1 = pcVar2 + iVar4;
|
|
|
|
pcVar2 = param_1;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
LAB_00410261:
|
|
|
|
pcVar2 = pcVar2 + 1;
|
|
|
|
}
|
|
|
|
cVar1 = *pcVar2;
|
|
|
|
} while( true );
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_004102a0 at 0x004102A0 (size: 97) ---
|
|
|
|
|
|
int FUN_004102a0(undefined4 param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined *puVar1;
|
|
|
|
int iVar2;
|
|
|
|
LONG LVar3;
|
|
|
|
|
|
|
|
puVar1 = PTR_DAT_00818344;
|
|
|
|
InterlockedIncrement((LONG *)(PTR_DAT_00818344 + -0x10));
|
|
|
|
iVar2 = FUN_00402390(param_1,&stack0x00000008);
|
|
|
|
if (-1 < iVar2) {
|
|
|
|
iVar2 = FUN_00410220(puVar1);
|
|
|
|
}
|
|
|
|
LVar3 = InterlockedDecrement((LONG *)(puVar1 + -0x10));
|
|
|
|
if ((LVar3 == 0) && ((undefined4 *)(puVar1 + -0x14) != (undefined4 *)0x0)) {
|
|
|
|
(*(code *)**(undefined4 **)(puVar1 + -0x14))(1);
|
|
|
|
}
|
|
|
|
return iVar2;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00410310 at 0x00410310 (size: 49) ---
|
|
|
|
|
|
void FUN_00410310(undefined4 *param_1,int param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined4 *puVar1;
|
|
|
|
|
|
|
|
FUN_0040ad10(4);
|
|
|
|
puVar1 = (undefined4 *)FUN_0040acf0(4);
|
|
|
|
if (puVar1 != (undefined4 *)0x0) {
|
|
|
|
if ((*(byte *)(param_2 + 4) & 1) != 0) {
|
|
|
|
*puVar1 = *param_1;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
*param_1 = *puVar1;
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00410350 at 0x00410350 (size: 89) ---
|
|
|
|
|
|
void __fastcall FUN_00410350(int *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
int iVar2;
|
|
|
|
|
|
|
|
param_1[2] = 0;
|
|
|
|
if ((param_1[1] & 0x80000000U) != 0x80000000) {
|
|
|
|
if (*param_1 != 0) {
|
|
|
|
iVar2 = (param_1[1] & 0x7fffffffU) - 1;
|
|
|
|
while (-1 < iVar2) {
|
|
|
|
iVar1 = *param_1;
|
|
|
|
iVar2 = iVar2 + -1;
|
|
|
|
*(undefined4 *)(iVar1 + 8 + iVar2 * 8) = 0;
|
|
|
|
*(undefined4 *)(iVar1 + 0xc + iVar2 * 8) = 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
operator_delete__((void *)*param_1);
|
|
|
|
*param_1 = 0;
|
|
|
|
param_1[1] = 0;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_004103f0 at 0x004103F0 (size: 164) ---
|
|
|
|
|
|
undefined4 __thiscall FUN_004103f0(int *param_1,uint param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
int iVar2;
|
|
|
|
int iVar3;
|
|
|
|
|
|
|
|
if (param_2 < (uint)param_1[2]) {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
if ((param_1[1] & 0x7fffffffU) < param_2) {
|
|
|
|
if (param_2 != 0) {
|
|
|
|
iVar2 = thunk_FUN_005df0f5(param_2 * 8);
|
|
|
|
if (iVar2 == 0) {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
if (*param_1 != 0) {
|
|
|
|
iVar3 = param_1[2] + -1;
|
|
|
|
while (-1 < iVar3) {
|
|
|
|
iVar3 = iVar3 + -1;
|
|
|
|
iVar1 = *param_1;
|
|
|
|
*(undefined4 *)(iVar2 + 8 + iVar3 * 8) = *(undefined4 *)(iVar1 + 8 + iVar3 * 8);
|
|
|
|
*(undefined4 *)(iVar2 + 0xc + iVar3 * 8) = *(undefined4 *)(iVar1 + 0xc + iVar3 * 8);
|
|
|
|
}
|
|
|
|
if ((param_1[1] & 0x80000000U) == 0x80000000) {
|
|
|
|
operator_delete__((void *)*param_1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
*param_1 = iVar2;
|
|
|
|
param_1[1] = param_2 | 0x80000000;
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
FUN_00410350();
|
|
|
|
}
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_004104a0 at 0x004104A0 (size: 93) ---
|
|
|
|
|
|
undefined1 __thiscall FUN_004104a0(int *param_1,uint param_2,char param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
char cVar2;
|
|
|
|
uint uVar3;
|
|
|
|
|
|
|
|
if ((param_1[1] & 0x7fffffffU) < param_2) {
|
|
|
|
uVar3 = param_2;
|
|
|
|
if (param_3 == '\0') {
|
|
|
|
uVar3 = FUN_004077f0(param_2);
|
|
|
|
}
|
|
|
|
cVar2 = FUN_004103f0(uVar3);
|
|
|
|
if (cVar2 == '\0') {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
uVar3 = param_2;
|
|
|
|
if (param_2 < (uint)param_1[2]) {
|
|
|
|
do {
|
|
|
|
iVar1 = *param_1;
|
|
|
|
*(undefined4 *)(iVar1 + uVar3 * 8) = 0;
|
|
|
|
*(undefined4 *)(iVar1 + 4 + uVar3 * 8) = 0;
|
|
|
|
uVar3 = uVar3 + 1;
|
|
|
|
} while (uVar3 < (uint)param_1[2]);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
param_1[2] = param_2;
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00410500 at 0x00410500 (size: 132) ---
|
|
|
|
|
|
bool __thiscall FUN_00410500(int param_1,int param_2,int param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
uint uVar1;
|
|
|
|
char cVar2;
|
|
|
|
uint uVar3;
|
|
|
|
undefined4 uVar4;
|
|
|
|
int *piVar5;
|
|
|
|
|
|
|
|
uVar1 = *(uint *)(param_1 + 0xc);
|
|
|
|
uVar3 = 0;
|
|
|
|
if (uVar1 != 0) {
|
|
|
|
piVar5 = *(int **)(param_1 + 4);
|
|
|
|
do {
|
|
|
|
if (*piVar5 == param_2) {
|
|
|
|
if (uVar3 != 0xffffffff) {
|
|
|
|
return (*(int **)(param_1 + 4))[uVar3 * 2 + 1] == param_3;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
uVar3 = uVar3 + 1;
|
|
|
|
piVar5 = piVar5 + 2;
|
|
|
|
} while (uVar3 < uVar1);
|
|
|
|
}
|
|
|
|
uVar3 = *(int *)(param_1 + 0xc) + 1;
|
|
|
|
if ((*(uint *)(param_1 + 8) & 0x7fffffff) < uVar3) {
|
|
|
|
uVar4 = FUN_004077f0(uVar3);
|
|
|
|
cVar2 = FUN_004103f0(uVar4);
|
|
|
|
if (cVar2 == '\0') goto LAB_00410557;
|
|
|
|
}
|
|
|
|
*(uint *)(param_1 + 0xc) = uVar3;
|
|
|
|
LAB_00410557:
|
|
|
|
*(int *)(*(int *)(param_1 + 4) + uVar1 * 8) = param_2;
|
|
|
|
*(int *)(*(int *)(param_1 + 4) + 4 + uVar1 * 8) = param_3;
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00410590 at 0x00410590 (size: 157) ---
|
|
|
|
|
|
void __thiscall FUN_00410590(int param_1,int param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined4 *puVar1;
|
|
|
|
undefined4 *puVar2;
|
|
|
|
undefined4 uVar3;
|
|
|
|
int iVar4;
|
|
|
|
|
|
|
|
uVar3 = *(undefined4 *)(param_1 + 0xc);
|
|
|
|
FUN_0040ad10(4);
|
|
|
|
puVar1 = (undefined4 *)FUN_0040acf0(4);
|
|
|
|
if (puVar1 != (undefined4 *)0x0) {
|
|
|
|
if ((*(byte *)(param_2 + 4) & 1) == 0) {
|
|
|
|
uVar3 = *puVar1;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
*puVar1 = uVar3;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if ((*(uint *)(param_2 + 4) >> 2 & 1) == 0) {
|
|
|
|
if ((~*(byte *)(param_2 + 4) & 1) != 0) {
|
|
|
|
FUN_004104a0(uVar3,1);
|
|
|
|
}
|
|
|
|
iVar4 = *(int *)(param_1 + 0xc);
|
|
|
|
while (iVar4 != 0) {
|
|
|
|
iVar4 = iVar4 + -1;
|
|
|
|
puVar1 = (undefined4 *)(*(int *)(param_1 + 4) + iVar4 * 8);
|
|
|
|
FUN_0040ad10(8);
|
|
|
|
puVar2 = (undefined4 *)FUN_0040acf0(8);
|
|
|
|
if (puVar2 != (undefined4 *)0x0) {
|
|
|
|
if ((*(byte *)(param_2 + 4) & 1) == 0) {
|
|
|
|
*puVar1 = *puVar2;
|
|
|
|
puVar1[1] = puVar2[1];
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
*puVar2 = *puVar1;
|
|
|
|
puVar2[1] = puVar1[1];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00410630 at 0x00410630 (size: 188) ---
|
|
|
|
|
|
undefined4 FUN_00410630(int param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
char cVar1;
|
|
|
|
undefined4 uVar2;
|
|
|
|
uint *puVar3;
|
|
|
|
undefined4 uVar4;
|
|
|
|
uint uVar5;
|
|
|
|
|
|
|
|
uVar2 = 0xffffffff;
|
|
|
|
if ((~(byte)(*(uint *)(param_1 + 4) >> 2) & 1) != 0) {
|
|
|
|
uVar2 = FUN_0040a8d0();
|
|
|
|
uVar5 = 0x4d676963;
|
|
|
|
FUN_0040ad10(4);
|
|
|
|
puVar3 = (uint *)FUN_0040acf0(4);
|
|
|
|
if (puVar3 != (uint *)0x0) {
|
|
|
|
if ((*(byte *)(param_1 + 4) & 1) == 0) {
|
|
|
|
uVar5 = *puVar3;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
*puVar3 = 0x4d676963;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if ((~*(byte *)(param_1 + 4) & 1) != 0) {
|
|
|
|
if ((int)uVar5 < 0) {
|
|
|
|
uVar4 = FUN_0040a8d0();
|
|
|
|
FUN_0040a8e0(uVar5 & 0x3fffffff);
|
|
|
|
FUN_00410590(param_1);
|
|
|
|
FUN_0040a8e0(uVar4);
|
|
|
|
return uVar2;
|
|
|
|
}
|
|
|
|
cVar1 = FUN_00410500(0x436f7265,uVar5 & 0x3fffffff);
|
|
|
|
if (cVar1 == '\0') {
|
|
|
|
FUN_0040aa50();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return uVar2;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_004106f0 at 0x004106F0 (size: 294) ---
|
|
|
|
|
|
uint __thiscall FUN_004106f0(int param_1,uint param_2,int param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
int iVar2;
|
|
|
|
byte bVar3;
|
|
|
|
uint *puVar4;
|
|
|
|
uint uVar5;
|
|
|
|
uint uVar6;
|
|
|
|
|
|
|
|
iVar2 = param_3;
|
|
|
|
bVar3 = ~(byte)(*(uint *)(param_3 + 4) >> 2);
|
|
|
|
uVar6 = CONCAT31((uint3)(*(uint *)(param_3 + 4) >> 10),bVar3);
|
|
|
|
if (((bVar3 & 1) == 0) || (uVar6 = param_2, param_2 == 0xffffffff)) {
|
|
|
|
return uVar6 & 0xffffff00;
|
|
|
|
}
|
|
|
|
puVar4 = (uint *)FUN_0040ac70(param_2,4);
|
|
|
|
if (puVar4 == (uint *)0x0) goto LAB_00410786;
|
|
|
|
if ((~*(byte *)(iVar2 + 4) & 1) == 0) {
|
|
|
|
if (*puVar4 == 0x4d676963) {
|
|
|
|
iVar1 = *(int *)(param_1 + 0xc);
|
|
|
|
if ((iVar1 != 0) && ((iVar1 != 1 || (**(int **)(param_1 + 4) == 0x436f7265)))) {
|
|
|
|
if (iVar1 == 1) {
|
|
|
|
*puVar4 = 0xd676963;
|
|
|
|
*puVar4 = *(uint *)(*(int *)(param_1 + 4) + 4) & 0x3fffffff;
|
|
|
|
return ~(*(uint *)(iVar2 + 4) >> 2) & 1;
|
|
|
|
}
|
|
|
|
*puVar4 = 0x8d676963;
|
|
|
|
uVar6 = FUN_0040a8d0();
|
|
|
|
*puVar4 = *puVar4 ^ (*puVar4 ^ uVar6) & 0x3fffffff;
|
|
|
|
FUN_00410590(iVar2);
|
|
|
|
return ~(*(uint *)(iVar2 + 4) >> 2) & 1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
uVar6 = *puVar4;
|
|
|
|
if (-1 < (int)uVar6) goto LAB_00410786;
|
|
|
|
uVar5 = FUN_0040a8d0();
|
|
|
|
if (uVar5 == (uVar6 & 0x3fffffff)) {
|
|
|
|
FUN_00410310(¶m_3,iVar2);
|
|
|
|
FUN_0040acf0(param_3 * 8);
|
|
|
|
return ~(*(uint *)(iVar2 + 4) >> 2) & 1;
|
|
|
|
}
|
|
|
|
if (-1 < (int)uVar6) goto LAB_00410786;
|
|
|
|
}
|
|
|
|
FUN_0040aa50();
|
|
|
|
LAB_00410786:
|
|
|
|
return ~(*(uint *)(iVar2 + 4) >> 2) & 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00410820 at 0x00410820 (size: 81) ---
|
|
|
|
|
|
void __thiscall FUN_00410820(int *param_1,int *param_2,int *param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
if (param_3 == (int *)0x0) {
|
|
|
|
*param_2 = *param_1;
|
|
|
|
if (*param_1 != 0) {
|
|
|
|
*(int **)(*param_1 + 4) = param_2;
|
|
|
|
*param_1 = (int)param_2;
|
|
|
|
param_2[1] = 0;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
param_1[1] = (int)param_2;
|
|
|
|
*param_1 = (int)param_2;
|
|
|
|
param_2[1] = 0;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
*param_2 = *param_3;
|
|
|
|
if (*param_3 != 0) {
|
|
|
|
*(int **)(*param_3 + 4) = param_2;
|
|
|
|
*param_3 = (int)param_2;
|
|
|
|
param_2[1] = (int)param_3;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
param_1[1] = (int)param_2;
|
|
|
|
*param_3 = (int)param_2;
|
|
|
|
param_2[1] = (int)param_3;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00410880 at 0x00410880 (size: 80) ---
|
|
|
|
|
|
void __thiscall FUN_00410880(int *param_1,int *param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
undefined4 *puVar2;
|
|
|
|
|
|
|
|
if ((int *)param_2[1] == (int *)0x0) {
|
|
|
|
iVar1 = *(int *)*param_1;
|
|
|
|
*param_1 = iVar1;
|
|
|
|
if (iVar1 != 0) {
|
|
|
|
*(undefined4 *)(iVar1 + 4) = 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
*(int *)param_2[1] = *param_2;
|
|
|
|
}
|
|
|
|
if (*param_2 != 0) {
|
|
|
|
*(int *)(*param_2 + 4) = param_2[1];
|
|
|
|
*param_2 = 0;
|
|
|
|
param_2[1] = 0;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
puVar2 = *(undefined4 **)(param_1[1] + 4);
|
|
|
|
param_1[1] = (int)puVar2;
|
|
|
|
if (puVar2 != (undefined4 *)0x0) {
|
|
|
|
*puVar2 = 0;
|
|
|
|
}
|
|
|
|
*param_2 = 0;
|
|
|
|
param_2[1] = 0;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_004108d0 at 0x004108D0 (size: 149) ---
|
|
|
|
|
|
void __thiscall FUN_004108d0(int param_1,undefined4 *param_2,int *param_3,int *param_4)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined4 *puVar1;
|
|
|
|
int *piVar2;
|
|
|
|
undefined4 **ppuVar3;
|
|
|
|
undefined4 *local_18;
|
|
|
|
undefined4 *local_14 [5];
|
|
|
|
|
|
|
|
piVar2 = &DAT_00795700;
|
|
|
|
local_18 = &DAT_00795700;
|
|
|
|
local_14[0] = (undefined4 *)0x0;
|
|
|
|
local_14[1] = &DAT_00795710;
|
|
|
|
local_14[2] = (undefined4 *)0x0;
|
|
|
|
local_14[3] = (undefined4 *)0x0;
|
|
|
|
local_14[4] = (undefined4 *)0x0;
|
|
|
|
ppuVar3 = &local_18;
|
|
|
|
while ((((*piVar2 != *param_3 || (piVar2[1] != param_3[1])) || (piVar2[2] != param_3[2])) ||
|
|
|
|
(piVar2[3] != param_3[3]))) {
|
|
|
|
piVar2 = ppuVar3[2];
|
|
|
|
ppuVar3 = ppuVar3 + 2;
|
|
|
|
if (piVar2 == (int *)0x0) {
|
|
|
|
*param_2 = 0x80004002;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (param_4 != (int *)0x0) {
|
|
|
|
puVar1 = ppuVar3[1];
|
|
|
|
(**(code **)(*(int *)((int)puVar1 + param_1) + 0x10))();
|
|
|
|
*param_4 = (int)puVar1 + param_1;
|
|
|
|
}
|
|
|
|
*param_2 = 0;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00410a00 at 0x00410A00 (size: 133) ---
|
|
|
|
|
|
int * __thiscall FUN_00410a00(int *param_1,int *param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined4 *puVar1;
|
|
|
|
int iVar2;
|
|
|
|
char cVar3;
|
|
|
|
undefined4 *puVar4;
|
|
|
|
uint uVar5;
|
|
|
|
undefined4 *puVar6;
|
|
|
|
|
|
|
|
if ((param_1[1] & 0x7fffffffU) < (param_2[1] & 0x7fffffffU)) {
|
|
|
|
param_1[2] = 0;
|
|
|
|
cVar3 = FUN_004103f0(param_2[1] & 0x7fffffff);
|
|
|
|
if (cVar3 == '\0') {
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
puVar4 = (undefined4 *)*param_2;
|
|
|
|
puVar1 = puVar4 + param_2[2] * 2;
|
|
|
|
puVar6 = (undefined4 *)*param_1;
|
|
|
|
for (; puVar4 < puVar1; puVar4 = puVar4 + 2) {
|
|
|
|
*puVar6 = *puVar4;
|
|
|
|
puVar6[1] = puVar4[1];
|
|
|
|
puVar6 = puVar6 + 2;
|
|
|
|
}
|
|
|
|
uVar5 = param_2[2];
|
|
|
|
if (uVar5 < (uint)param_1[2]) {
|
|
|
|
do {
|
|
|
|
iVar2 = *param_1;
|
|
|
|
*(undefined4 *)(iVar2 + uVar5 * 8) = 0;
|
|
|
|
*(undefined4 *)(iVar2 + 4 + uVar5 * 8) = 0;
|
|
|
|
uVar5 = uVar5 + 1;
|
|
|
|
} while (uVar5 < (uint)param_1[2]);
|
|
|
|
}
|
|
|
|
param_1[2] = param_2[2];
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00410a90 at 0x00410A90 (size: 82) ---
|
|
|
|
|
|
void __fastcall FUN_00410a90(int param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined *puVar1;
|
|
|
|
undefined4 *puVar2;
|
|
|
|
uint local_8;
|
|
|
|
undefined4 local_4;
|
|
|
|
|
|
|
|
puVar1 = PTR_DAT_00818558;
|
|
|
|
local_4 = *(undefined4 *)(param_1 + 0x68);
|
|
|
|
local_8 = local_8 & 0xffffff00;
|
|
|
|
puVar2 = (undefined4 *)FUN_004064a0(PTR_DAT_00818554,PTR_DAT_00818558,&local_4,local_8,0);
|
|
|
|
if ((puVar2 != (undefined4 *)puVar1) || (puVar2 = puVar2 + -1, puVar2 != (undefined4 *)puVar1)) {
|
|
|
|
puVar2 = puVar2 + 1;
|
|
|
|
}
|
|
|
|
FUN_00410b30(*puVar2);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00410af0 at 0x00410AF0 (size: 58) ---
|
|
|
|
|
|
int __thiscall FUN_00410af0(int param_1,uint param_2,undefined4 *param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
uint *puVar1;
|
|
|
|
uint3 uVar2;
|
|
|
|
|
|
|
|
puVar1 = *(uint **)(*(int *)(param_1 + 0x6c) + (param_2 % *(uint *)(param_1 + 0x74)) * 4);
|
|
|
|
uVar2 = (uint3)((uint)*(int *)(param_1 + 0x6c) >> 8);
|
|
|
|
do {
|
|
|
|
if (puVar1 == (uint *)0x0) {
|
|
|
|
LAB_00410b11:
|
|
|
|
return (uint)uVar2 << 8;
|
|
|
|
}
|
|
|
|
if (*puVar1 == param_2) {
|
|
|
|
if (puVar1 != (uint *)0x0) {
|
|
|
|
*param_3 = puVar1 + 4;
|
|
|
|
return CONCAT31(uVar2,1);
|
|
|
|
}
|
|
|
|
goto LAB_00410b11;
|
|
|
|
}
|
|
|
|
puVar1 = (uint *)puVar1[1];
|
|
|
|
} while( true );
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00410b30 at 0x00410B30 (size: 234) ---
|
|
|
|
|
|
undefined4 __thiscall FUN_00410b30(int param_1,int param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
uint *puVar2;
|
|
|
|
int *piVar3;
|
|
|
|
undefined4 *puVar4;
|
|
|
|
uint uVar5;
|
|
|
|
uint *puVar6;
|
|
|
|
|
|
|
|
if (param_2 == *(int *)(param_1 + 0x68)) {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
iVar1 = *(int *)(param_1 + 0x6c);
|
|
|
|
puVar2 = (uint *)0x0;
|
|
|
|
do {
|
|
|
|
if (iVar1 == 0) {
|
|
|
|
if (*(void **)(param_1 + 0x60) != (void *)(param_1 + 4)) {
|
|
|
|
operator_delete__(*(void **)(param_1 + 0x60));
|
|
|
|
}
|
|
|
|
*(undefined4 *)(param_1 + 0x60) = 0;
|
|
|
|
*(undefined4 *)(param_1 + 100) = 0;
|
|
|
|
*(undefined4 *)(param_1 + 0x68) = 0;
|
|
|
|
*(undefined4 *)(param_1 + 0x6c) = 0;
|
|
|
|
FUN_0065ec90(param_2);
|
|
|
|
while (puVar2 != (uint *)0x0) {
|
|
|
|
puVar6 = (uint *)puVar2[1];
|
|
|
|
if (*(int *)(param_1 + 0x68) * 2 < *(int *)(param_1 + 0x6c) + 1) {
|
|
|
|
FUN_00410a90();
|
|
|
|
}
|
|
|
|
uVar5 = *puVar2 % *(uint *)(param_1 + 0x68);
|
|
|
|
iVar1 = *(int *)(param_1 + 0x60);
|
|
|
|
puVar2[1] = *(uint *)(iVar1 + uVar5 * 4);
|
|
|
|
*(uint **)(iVar1 + uVar5 * 4) = puVar2;
|
|
|
|
uVar5 = iVar1 + uVar5 * 4;
|
|
|
|
if (uVar5 < *(uint *)(param_1 + 100)) {
|
|
|
|
*(uint *)(param_1 + 100) = uVar5;
|
|
|
|
}
|
|
|
|
*(int *)(param_1 + 0x6c) = *(int *)(param_1 + 0x6c) + 1;
|
|
|
|
puVar2 = puVar6;
|
|
|
|
}
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
piVar3 = *(int **)(param_1 + 100);
|
|
|
|
while (piVar3 != (int *)(*(int *)(param_1 + 0x60) + *(int *)(param_1 + 0x68) * 4)) {
|
|
|
|
if (**(int **)(param_1 + 100) != 0) {
|
|
|
|
puVar4 = *(undefined4 **)(param_1 + 100);
|
|
|
|
puVar6 = (uint *)*puVar4;
|
|
|
|
goto LAB_00410b7e;
|
|
|
|
}
|
|
|
|
piVar3 = *(int **)(param_1 + 100) + 1;
|
|
|
|
*(int **)(param_1 + 100) = piVar3;
|
|
|
|
}
|
|
|
|
puVar4 = (undefined4 *)0x0;
|
|
|
|
puVar6 = (uint *)0x0;
|
|
|
|
LAB_00410b7e:
|
|
|
|
FUN_00410d00(param_1,puVar4,puVar6);
|
|
|
|
puVar6[1] = (uint)puVar2;
|
|
|
|
iVar1 = *(int *)(param_1 + 0x6c);
|
|
|
|
puVar2 = puVar6;
|
|
|
|
} while( true );
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00410c20 at 0x00410C20 (size: 117) ---
|
|
|
|
|
|
uint __thiscall FUN_00410c20(int param_1,uint *param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
uint *puVar1;
|
|
|
|
int iVar2;
|
|
|
|
uint uVar3;
|
|
|
|
|
|
|
|
puVar1 = *(uint **)(*(uint *)(param_1 + 0x60) + (*param_2 % *(uint *)(param_1 + 0x68)) * 4);
|
|
|
|
do {
|
|
|
|
if (puVar1 == (uint *)0x0) {
|
|
|
|
LAB_00410c4b:
|
|
|
|
if ((int)(*(uint *)(param_1 + 0x68) * 2) < *(int *)(param_1 + 0x6c) + 1) {
|
|
|
|
FUN_00410a90();
|
|
|
|
}
|
|
|
|
uVar3 = *param_2 % *(uint *)(param_1 + 0x68);
|
|
|
|
iVar2 = *(int *)(param_1 + 0x60);
|
|
|
|
param_2[1] = *(uint *)(iVar2 + uVar3 * 4);
|
|
|
|
*(uint **)(iVar2 + uVar3 * 4) = param_2;
|
|
|
|
uVar3 = iVar2 + uVar3 * 4;
|
|
|
|
if (uVar3 < *(uint *)(param_1 + 100)) {
|
|
|
|
*(uint *)(param_1 + 100) = uVar3;
|
|
|
|
}
|
|
|
|
*(int *)(param_1 + 0x6c) = *(int *)(param_1 + 0x6c) + 1;
|
|
|
|
return CONCAT31((int3)(uVar3 >> 8),1);
|
|
|
|
}
|
|
|
|
if (*puVar1 == *param_2) {
|
|
|
|
if (puVar1 != (uint *)0x0) {
|
|
|
|
return *(uint *)(param_1 + 0x60) & 0xffffff00;
|
|
|
|
}
|
|
|
|
goto LAB_00410c4b;
|
|
|
|
}
|
|
|
|
puVar1 = (uint *)puVar1[1];
|
|
|
|
} while( true );
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00410ca0 at 0x00410CA0 (size: 82) ---
|
|
|
|
|
|
undefined4 __thiscall FUN_00410ca0(int param_1,uint *param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
uint *puVar1;
|
|
|
|
|
|
|
|
puVar1 = *(uint **)(*(int *)(param_1 + 0x60) + (*param_2 % *(uint *)(param_1 + 0x68)) * 4);
|
|
|
|
do {
|
|
|
|
if (puVar1 == (uint *)0x0) {
|
|
|
|
LAB_00410ccb:
|
|
|
|
FUN_00410c20(param_2);
|
|
|
|
FUN_00410820(param_2 + 2,*(undefined4 *)(param_1 + 0x74));
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
if (*puVar1 == *param_2) {
|
|
|
|
if (puVar1 != (uint *)0x0) {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
goto LAB_00410ccb;
|
|
|
|
}
|
|
|
|
puVar1 = (uint *)puVar1[1];
|
|
|
|
} while( true );
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00410d00 at 0x00410D00 (size: 58) ---
|
|
|
|
|
|
void __thiscall FUN_00410d00(int param_1,undefined4 param_2,int *param_3,int param_4)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
int iVar2;
|
|
|
|
|
|
|
|
iVar2 = *param_3;
|
|
|
|
if (iVar2 != param_4) {
|
|
|
|
do {
|
|
|
|
iVar1 = iVar2;
|
|
|
|
iVar2 = *(int *)(iVar1 + 4);
|
|
|
|
} while (iVar2 != param_4);
|
|
|
|
if (iVar1 != 0) {
|
|
|
|
*(undefined4 *)(iVar1 + 4) = *(undefined4 *)(iVar2 + 4);
|
|
|
|
*(int *)(param_1 + 0x6c) = *(int *)(param_1 + 0x6c) + -1;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
*param_3 = *(int *)(iVar2 + 4);
|
|
|
|
*(int *)(param_1 + 0x6c) = *(int *)(param_1 + 0x6c) + -1;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00410d40 at 0x00410D40 (size: 146) ---
|
|
|
|
|
|
void __thiscall FUN_00410d40(int param_1,undefined4 *param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined4 uVar1;
|
|
|
|
undefined4 *puVar2;
|
|
|
|
|
|
|
|
*(int *)(param_1 + 0xe4) = *(int *)(param_1 + 0xe4) + 2;
|
|
|
|
uVar1 = *(undefined4 *)(param_1 + 0xe4);
|
|
|
|
if (*(int *)(param_1 + 0x78) == 0) {
|
|
|
|
*(undefined4 *)(param_1 + 0x84) = uVar1;
|
|
|
|
FUN_00410ca0((undefined4 *)(param_1 + 0x84));
|
|
|
|
*param_2 = uVar1;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
puVar2 = (undefined4 *)FUN_005df0f5(0x60);
|
|
|
|
if (puVar2 != (undefined4 *)0x0) {
|
|
|
|
*puVar2 = uVar1;
|
|
|
|
puVar2[1] = 0;
|
|
|
|
puVar2[2] = 0;
|
|
|
|
puVar2[3] = 0;
|
|
|
|
puVar2[4] = &PTR_LAB_00795430;
|
|
|
|
puVar2[5] = puVar2 + 8;
|
|
|
|
puVar2[6] = 8;
|
|
|
|
puVar2[7] = 0;
|
|
|
|
FUN_00410ca0(puVar2);
|
|
|
|
*param_2 = uVar1;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
FUN_00410ca0(0);
|
|
|
|
*param_2 = uVar1;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00410de0 at 0x00410DE0 (size: 136) ---
|
|
|
|
|
|
void __thiscall FUN_00410de0(int param_1,undefined4 *param_2,int param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined4 uVar1;
|
|
|
|
undefined4 *puVar2;
|
|
|
|
undefined4 *puVar3;
|
|
|
|
|
|
|
|
*(int *)(param_1 + 0xe4) = *(int *)(param_1 + 0xe4) + 2;
|
|
|
|
uVar1 = *(undefined4 *)(param_1 + 0xe4);
|
|
|
|
if (*(int *)(param_1 + 0x78) == 0) {
|
|
|
|
*(undefined4 *)(param_1 + 0x84) = uVar1;
|
|
|
|
puVar3 = (undefined4 *)(param_1 + 0x84);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
puVar2 = (undefined4 *)FUN_005df0f5(0x60);
|
|
|
|
puVar3 = (undefined4 *)0x0;
|
|
|
|
if (puVar2 != (undefined4 *)0x0) {
|
|
|
|
puVar2[1] = 0;
|
|
|
|
*puVar2 = uVar1;
|
|
|
|
puVar2[2] = 0;
|
|
|
|
puVar2[3] = 0;
|
|
|
|
puVar2[4] = &PTR_LAB_00795430;
|
|
|
|
puVar2[7] = 0;
|
|
|
|
puVar2[5] = puVar2 + 8;
|
|
|
|
puVar2[6] = 8;
|
|
|
|
puVar3 = puVar2;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
FUN_00410a00(param_3 + 4);
|
|
|
|
FUN_00410ca0(puVar3);
|
|
|
|
*param_2 = uVar1;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00410e70 at 0x00410E70 (size: 81) ---
|
|
|
|
|
|
uint * __thiscall FUN_00410e70(int param_1,uint *param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
uint *puVar1;
|
|
|
|
uint uVar2;
|
|
|
|
|
|
|
|
uVar2 = *param_2 % *(uint *)(param_1 + 0x68);
|
|
|
|
puVar1 = *(uint **)(*(int *)(param_1 + 0x60) + uVar2 * 4);
|
|
|
|
while( true ) {
|
|
|
|
if (puVar1 == (uint *)0x0) {
|
|
|
|
return (uint *)0x0;
|
|
|
|
}
|
|
|
|
if (*puVar1 == *param_2) break;
|
|
|
|
puVar1 = (uint *)puVar1[1];
|
|
|
|
}
|
|
|
|
if (puVar1 == (uint *)0x0) {
|
|
|
|
return (uint *)0x0;
|
|
|
|
}
|
|
|
|
FUN_00410d00(param_1,*(int *)(param_1 + 0x60) + uVar2 * 4,puVar1);
|
|
|
|
return puVar1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00410ed0 at 0x00410ED0 (size: 83) ---
|
|
|
|
|
|
uint * __thiscall FUN_00410ed0(int param_1,uint *param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
uint *puVar1;
|
|
|
|
|
|
|
|
puVar1 = *(uint **)(*(int *)(param_1 + 0x60) + (*param_2 % *(uint *)(param_1 + 0x68)) * 4);
|
|
|
|
if (puVar1 != (uint *)0x0) {
|
|
|
|
while (*puVar1 != *param_2) {
|
|
|
|
puVar1 = (uint *)puVar1[1];
|
|
|
|
if (puVar1 == (uint *)0x0) {
|
|
|
|
return (uint *)0x0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (puVar1 != (uint *)0x0) {
|
|
|
|
FUN_00410880(puVar1 + 2);
|
|
|
|
FUN_00410e70(param_2);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return puVar1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00410f30 at 0x00410F30 (size: 85) ---
|
|
|
|
|
|
undefined4 __fastcall FUN_00410f30(int param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
void *pvVar1;
|
|
|
|
|
|
|
|
pvVar1 = (void *)FUN_00410ed0(&stack0x00000004);
|
|
|
|
if (pvVar1 != (void *)0x0) {
|
|
|
|
if (pvVar1 != (void *)(param_1 + 0x84)) {
|
|
|
|
if ((*(uint *)((int)pvVar1 + 0x18) & 0x80000000) == 0x80000000) {
|
|
|
|
operator_delete__(*(void **)((int)pvVar1 + 0x14));
|
|
|
|
}
|
|
|
|
operator_delete(pvVar1);
|
|
|
|
}
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00410f90 at 0x00410F90 (size: 289) ---
|
|
|
|
|
|
void __fastcall FUN_00410f90(int param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
undefined4 *puVar2;
|
|
|
|
uint *puVar3;
|
|
|
|
uint *puVar4;
|
|
|
|
uint *puVar5;
|
|
|
|
uint *puVar6;
|
|
|
|
uint uVar7;
|
|
|
|
uint *local_8;
|
|
|
|
|
|
|
|
if ((*(int *)(param_1 + 0x78) != 0) && (*(int *)(param_1 + 0x7c) != 0)) {
|
|
|
|
local_8 = (uint *)(*(int *)(param_1 + 0x7c) + -8);
|
|
|
|
joined_r0x00410fb1:
|
|
|
|
puVar4 = local_8;
|
|
|
|
if (puVar4 != (uint *)0x0) {
|
|
|
|
puVar6 = puVar4 + 2;
|
|
|
|
if (puVar4[2] == 0) {
|
|
|
|
local_8 = (uint *)0x0;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
local_8 = (uint *)(puVar4[2] - 8);
|
|
|
|
}
|
|
|
|
if ((uint *)puVar4[3] == (uint *)0x0) {
|
|
|
|
iVar1 = **(int **)(param_1 + 0x7c);
|
|
|
|
*(int *)(param_1 + 0x7c) = iVar1;
|
|
|
|
if (iVar1 != 0) {
|
|
|
|
*(undefined4 *)(iVar1 + 4) = 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
*(uint *)puVar4[3] = *puVar6;
|
|
|
|
}
|
|
|
|
if (*puVar6 == 0) {
|
|
|
|
puVar2 = *(undefined4 **)(*(int *)(param_1 + 0x80) + 4);
|
|
|
|
*(undefined4 **)(param_1 + 0x80) = puVar2;
|
|
|
|
if (puVar2 != (undefined4 *)0x0) {
|
|
|
|
*puVar2 = 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
*(uint *)(*puVar6 + 4) = puVar4[3];
|
|
|
|
}
|
|
|
|
*puVar6 = 0;
|
|
|
|
puVar4[3] = 0;
|
|
|
|
uVar7 = *puVar4 % *(uint *)(param_1 + 0x74);
|
|
|
|
puVar6 = *(uint **)(*(int *)(param_1 + 0x6c) + uVar7 * 4);
|
|
|
|
for (puVar3 = puVar6; puVar3 != (uint *)0x0; puVar3 = (uint *)puVar3[1]) {
|
|
|
|
if (*puVar3 == *puVar4) {
|
|
|
|
if (puVar3 != (uint *)0x0) {
|
|
|
|
if (puVar6 != puVar3) goto LAB_00411050;
|
|
|
|
goto LAB_0041105d;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
goto LAB_0041106e;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
LAB_00411050:
|
|
|
|
do {
|
|
|
|
puVar5 = puVar6;
|
|
|
|
puVar6 = (uint *)puVar5[1];
|
|
|
|
} while (puVar6 != puVar3);
|
|
|
|
if (puVar5 == (uint *)0x0) {
|
|
|
|
LAB_0041105d:
|
|
|
|
*(uint *)(*(int *)(param_1 + 0x6c) + uVar7 * 4) = puVar6[1];
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
puVar5[1] = puVar6[1];
|
|
|
|
}
|
|
|
|
*(int *)(param_1 + 0x78) = *(int *)(param_1 + 0x78) + -1;
|
|
|
|
LAB_0041106e:
|
|
|
|
if (puVar4 != (uint *)(param_1 + 0x84)) {
|
|
|
|
if ((puVar4[6] & 0x80000000) == 0x80000000) {
|
|
|
|
operator_delete__((void *)puVar4[5]);
|
|
|
|
}
|
|
|
|
operator_delete(puVar4);
|
|
|
|
}
|
|
|
|
goto joined_r0x00410fb1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_004110c0 at 0x004110C0 (size: 96) ---
|
|
|
|
|
|
void __fastcall FUN_004110c0(undefined4 *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
*param_1 = &PTR_LAB_00795434;
|
|
|
|
FUN_00410f90();
|
|
|
|
if ((param_1[0x27] & 0x80000000) == 0x80000000) {
|
|
|
|
operator_delete__((void *)param_1[0x26]);
|
|
|
|
}
|
|
|
|
param_1[3] = &PTR_FUN_0079542c;
|
|
|
|
if ((undefined4 *)param_1[0x1b] != param_1 + 4) {
|
|
|
|
operator_delete__((undefined4 *)param_1[0x1b]);
|
|
|
|
}
|
|
|
|
param_1[0x1b] = 0;
|
|
|
|
param_1[0x1c] = 0;
|
|
|
|
param_1[0x1d] = 0;
|
|
|
|
param_1[0x1e] = 0;
|
|
|
|
param_1[1] = &PTR_LAB_00793b6c;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00411120 at 0x00411120 (size: 25) ---
|
|
|
|
|
|
PVOID __fastcall FUN_00411120(LPCVOID param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
_MEMORY_BASIC_INFORMATION local_1c;
|
|
|
|
|
|
|
|
VirtualQuery(param_1,&local_1c,0x1c);
|
|
|
|
return local_1c.AllocationBase;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00411140 at 0x00411140 (size: 73) ---
|
|
|
|
|
|
void __fastcall FUN_00411140(LONG *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
uint uVar2;
|
|
|
|
|
|
|
|
uVar2 = 0;
|
|
|
|
iVar1 = InterlockedExchange(param_1,1);
|
|
|
|
while (iVar1 != 0) {
|
|
|
|
iVar1 = *param_1;
|
|
|
|
while (iVar1 != 0) {
|
|
|
|
uVar2 = uVar2 + 1;
|
|
|
|
if (0x1ff < uVar2) {
|
|
|
|
Sleep(0);
|
|
|
|
uVar2 = 0;
|
|
|
|
}
|
|
|
|
iVar1 = *param_1;
|
|
|
|
}
|
|
|
|
iVar1 = InterlockedExchange(param_1,1);
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00411190 at 0x00411190 (size: 17) ---
|
|
|
|
|
|
void __fastcall FUN_00411190(int param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
*(undefined4 *)(param_1 + 0x40) = 0;
|
|
|
|
*(undefined4 *)(param_1 + 0x44) = 0;
|
|
|
|
*(undefined4 *)(param_1 + 0x48) = 0;
|
|
|
|
*(undefined4 *)(param_1 + 0x20) = 0;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_004111b0 at 0x004111B0 (size: 203) ---
|
|
|
|
|
|
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
|
|
|
|
|
|
|
|
void __fastcall FUN_004111b0(double *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined4 uVar1;
|
|
|
|
undefined4 uVar2;
|
|
|
|
BOOL BVar3;
|
|
|
|
DWORD DVar4;
|
|
|
|
double dVar5;
|
|
|
|
LARGE_INTEGER local_8;
|
|
|
|
|
|
|
|
BVar3 = QueryPerformanceFrequency(&local_8);
|
|
|
|
uVar2 = local_8.s.HighPart;
|
|
|
|
uVar1 = local_8.s.LowPart;
|
|
|
|
if (BVar3 != 0) {
|
|
|
|
dVar5 = (double)__alldiv(local_8.s.LowPart,local_8.s.HighPart,1000,0);
|
|
|
|
param_1[1] = dVar5;
|
|
|
|
dVar5 = (double)__alldiv(uVar1,uVar2,2,0);
|
|
|
|
*param_1 = (double)CONCAT44(local_8.s.HighPart,local_8.s.LowPart);
|
|
|
|
param_1[2] = dVar5;
|
|
|
|
QueryPerformanceCounter(&local_8);
|
|
|
|
}
|
|
|
|
FUN_00411140();
|
|
|
|
dVar5 = _DAT_00795610;
|
|
|
|
if (((ulonglong)param_1[4] & 1) == 0) {
|
|
|
|
*(DWORD *)(param_1 + 7) = local_8.s.LowPart;
|
|
|
|
*(LONG *)((int)param_1 + 0x3c) = local_8.s.HighPart;
|
|
|
|
param_1[3] = dVar5;
|
|
|
|
param_1[5] = _DAT_00795610;
|
|
|
|
DVar4 = timeGetTime();
|
|
|
|
*(DWORD *)(param_1 + 6) = DVar4;
|
|
|
|
if (BVar3 != 0) {
|
|
|
|
*(uint *)(param_1 + 4) = *(uint *)(param_1 + 4) & 0xfffffffd;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
*(uint *)(param_1 + 4) = *(uint *)(param_1 + 4) | 2;
|
|
|
|
}
|
|
|
|
*(uint *)(param_1 + 4) = *(uint *)(param_1 + 4) | 1;
|
|
|
|
}
|
|
|
|
InterlockedExchange((LONG *)(param_1 + 8),0);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00411280 at 0x00411280 (size: 489) ---
|
|
|
|
|
|
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
|
|
|
|
|
|
|
|
float10 __thiscall FUN_00411280(double *param_1,char param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
double dVar1;
|
|
|
|
DWORD DVar2;
|
|
|
|
int iVar3;
|
|
|
|
uint uVar4;
|
|
|
|
uint uVar5;
|
|
|
|
uint uVar6;
|
|
|
|
double *pdVar7;
|
|
|
|
double *pdVar8;
|
|
|
|
uint uVar9;
|
|
|
|
double *pdVar10;
|
|
|
|
undefined8 uVar11;
|
|
|
|
LARGE_INTEGER local_38;
|
|
|
|
double local_30;
|
|
|
|
uint local_28;
|
|
|
|
double local_20;
|
|
|
|
DWORD local_18;
|
|
|
|
uint local_10;
|
|
|
|
int local_c;
|
|
|
|
|
|
|
|
FUN_00411140();
|
|
|
|
pdVar10 = param_1 + 3;
|
|
|
|
pdVar7 = pdVar10;
|
|
|
|
pdVar8 = &local_30;
|
|
|
|
for (iVar3 = 10; iVar3 != 0; iVar3 = iVar3 + -1) {
|
|
|
|
*(undefined4 *)pdVar8 = *(undefined4 *)pdVar7;
|
|
|
|
pdVar7 = (double *)((int)pdVar7 + 4);
|
|
|
|
pdVar8 = (double *)((int)pdVar8 + 4);
|
|
|
|
}
|
|
|
|
InterlockedExchange((LONG *)(param_1 + 8),0);
|
|
|
|
if ((local_28 & 1) != 0) {
|
|
|
|
DVar2 = timeGetTime();
|
|
|
|
uVar4 = DVar2 - local_18;
|
|
|
|
if ((local_28 & 2) == 0) {
|
|
|
|
QueryPerformanceCounter(&local_38);
|
|
|
|
uVar9 = local_38.s.LowPart - local_10;
|
|
|
|
uVar6 = (local_38.s.HighPart - local_c) - (uint)(local_38.s.LowPart < local_10);
|
|
|
|
uVar11 = __allmul(*(undefined4 *)(param_1 + 1),*(undefined4 *)((int)param_1 + 0xc),uVar4,0);
|
|
|
|
uVar5 = (int)((ulonglong)uVar11 >> 0x20) + *(int *)((int)param_1 + 0x14) +
|
|
|
|
(uint)CARRY4((uint)uVar11,*(uint *)(param_1 + 2));
|
|
|
|
if ((uVar5 < uVar6) || ((uVar5 <= uVar6 && ((uint)uVar11 + *(int *)(param_1 + 2) <= uVar9))))
|
|
|
|
{
|
|
|
|
dVar1 = (double)(int)uVar4;
|
|
|
|
local_28 = local_28 | 2;
|
|
|
|
if ((int)uVar4 < 0) {
|
|
|
|
dVar1 = dVar1 + _DAT_00795518;
|
|
|
|
}
|
|
|
|
dVar1 = dVar1 * _DAT_00795720 + local_20;
|
|
|
|
if (DAT_008379dd == '\0') {
|
|
|
|
DAT_008379dd = '\x01';
|
|
|
|
}
|
|
|
|
if ((param_2 != '\0') && (DAT_008379dc == '\0')) {
|
|
|
|
DAT_008379dc = '\x01';
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
dVar1 = (-(double)(longlong)(((ulonglong)uVar6 & 0x80000000) << 0x20) +
|
|
|
|
(double)(CONCAT44(uVar6,uVar9) & 0x7fffffffffffffff)) / *param_1 + local_20;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
dVar1 = (double)(int)uVar4;
|
|
|
|
if ((int)uVar4 < 0) {
|
|
|
|
dVar1 = dVar1 + _DAT_00795518;
|
|
|
|
}
|
|
|
|
dVar1 = dVar1 * _DAT_00795720 + local_20;
|
|
|
|
}
|
|
|
|
if ((local_30 < dVar1) && (local_30 = dVar1, 9999 < uVar4)) {
|
|
|
|
local_10 = local_38.s.LowPart;
|
|
|
|
local_c = local_38.s.HighPart;
|
|
|
|
local_20 = dVar1;
|
|
|
|
local_18 = DVar2;
|
|
|
|
}
|
|
|
|
FUN_00411140();
|
|
|
|
if (local_30 <= *pdVar10) {
|
|
|
|
local_30 = *pdVar10;
|
|
|
|
}
|
|
|
|
else if (param_2 == '\0') {
|
|
|
|
*pdVar10 = local_30;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
pdVar7 = &local_30;
|
|
|
|
for (iVar3 = 10; iVar3 != 0; iVar3 = iVar3 + -1) {
|
|
|
|
*(undefined4 *)pdVar10 = *(undefined4 *)pdVar7;
|
|
|
|
pdVar7 = (double *)((int)pdVar7 + 4);
|
|
|
|
pdVar10 = (double *)((int)pdVar10 + 4);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
InterlockedExchange((LONG *)(param_1 + 8),0);
|
|
|
|
return (float10)local_30;
|
|
|
|
}
|
|
|
|
return (float10)_DAT_00795610;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00411470 at 0x00411470 (size: 25) ---
|
|
|
|
|
|
void __fastcall FUN_00411470(undefined4 *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
*param_1 = &PTR_FUN_00795824;
|
|
|
|
if (DAT_00837ff4 != (int *)0x0) {
|
|
|
|
(**(code **)(*DAT_00837ff4 + 0x3c))(param_1);
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00411490 at 0x00411490 (size: 47) ---
|
|
|
|
|
|
undefined4 * __thiscall FUN_00411490(undefined4 *param_1,byte param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
*param_1 = &PTR_FUN_00795824;
|
|
|
|
if (DAT_00837ff4 != (int *)0x0) {
|
|
|
|
(**(code **)(*DAT_00837ff4 + 0x3c))(param_1);
|
|
|
|
}
|
|
|
|
if ((param_2 & 1) != 0) {
|
|
|
|
operator_delete(param_1);
|
|
|
|
}
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_004114c0 at 0x004114C0 (size: 6) ---
|
|
|
|
|
|
undefined4 FUN_004114c0(void)
|
|
|
|
|
|
|
|
{
|
|
|
|
return DAT_008379e4;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_004114d0 at 0x004114D0 (size: 143) ---
|
|
|
|
|
|
void __fastcall FUN_004114d0(int param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
if (*(int **)(param_1 + 0xb0) != (int *)0x0) {
|
|
|
|
(**(code **)(**(int **)(param_1 + 0xb0) + 0x14))();
|
|
|
|
*(undefined4 *)(param_1 + 0xb0) = 0;
|
|
|
|
}
|
|
|
|
if (DAT_0083e03c != 0) {
|
|
|
|
FUN_0045f200();
|
|
|
|
FUN_00459310();
|
|
|
|
}
|
|
|
|
if (*(int **)(param_1 + 0x118) != (int *)0x0) {
|
|
|
|
(**(code **)(**(int **)(param_1 + 0x118) + 0x1c))();
|
|
|
|
if (*(int **)(param_1 + 0x118) != (int *)0x0) {
|
|
|
|
(**(code **)(**(int **)(param_1 + 0x118) + 0x14))();
|
|
|
|
*(undefined4 *)(param_1 + 0x118) = 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (*(int *)(param_1 + 0x120) != 0) {
|
|
|
|
FUN_004538e0(*(int *)(param_1 + 0x120));
|
|
|
|
}
|
|
|
|
if (DAT_00837ff4 != (int *)0x0) {
|
|
|
|
(**(code **)(*DAT_00837ff4 + 0x3c))(param_1 + 0x24);
|
|
|
|
}
|
|
|
|
FUN_0043a370();
|
|
|
|
FUN_00557ba0();
|
|
|
|
/* WARNING: Could not recover jumptable at 0x00411559. Too many branches */
|
|
|
|
/* WARNING: Treating indirect jump as call */
|
|
|
|
CoUninitialize();
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00411560 at 0x00411560 (size: 30) ---
|
|
|
|
|
|
void __fastcall FUN_00411560(int param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
if (*(int **)(param_1 + 0xac) != (int *)0x0) {
|
|
|
|
(**(code **)(**(int **)(param_1 + 0xac) + 0x14))();
|
|
|
|
*(undefined4 *)(param_1 + 0xac) = 0;
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_004115d0 at 0x004115D0 (size: 24) ---
|
|
|
|
|
|
undefined4 __fastcall FUN_004115d0(int param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
FUN_00541640(1,param_1 + 0x74,0,0);
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_004115f0 at 0x004115F0 (size: 50) ---
|
|
|
|
|
|
undefined4 __fastcall FUN_004115f0(int param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined4 in_EAX;
|
|
|
|
undefined3 uVar1;
|
|
|
|
undefined3 extraout_var;
|
|
|
|
|
|
|
|
uVar1 = (undefined3)((uint)in_EAX >> 8);
|
|
|
|
if (*(char *)(param_1 + 0xb4) != '\0') {
|
|
|
|
if (*(int *)(param_1 + 0x100) != 0) {
|
|
|
|
FUN_00544ab0();
|
|
|
|
}
|
|
|
|
(**(code **)(**(int **)(param_1 + 0xac) + 0x20))();
|
|
|
|
*(undefined1 *)(param_1 + 0xb4) = 0;
|
|
|
|
uVar1 = extraout_var;
|
|
|
|
}
|
|
|
|
return CONCAT31(uVar1,1);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00411630 at 0x00411630 (size: 107) ---
|
|
|
|
|
|
void __fastcall FUN_00411630(int param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
char cVar1;
|
|
|
|
|
|
|
|
FUN_0040fbd0();
|
|
|
|
cVar1 = FUN_00439e50();
|
|
|
|
if (cVar1 != '\0') {
|
|
|
|
FUN_00543fc0();
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
FUN_00543440();
|
|
|
|
(**(code **)(*(int *)(*(int *)(param_1 + 0xac) + 4) + 0x48))();
|
|
|
|
FUN_0045d0b0();
|
|
|
|
FUN_004554b0();
|
|
|
|
FUN_0043e690();
|
|
|
|
thunk_FUN_0043dc70();
|
|
|
|
FUN_00455610();
|
|
|
|
FUN_0043fcd0(1);
|
|
|
|
FUN_004392b0();
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_004116d0 at 0x004116D0 (size: 4) ---
|
|
|
|
|
|
float10 __fastcall FUN_004116d0(int param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
return (float10)*(float *)(param_1 + 0x1c);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_004116e0 at 0x004116E0 (size: 69) ---
|
|
|
|
|
|
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
|
|
|
|
|
|
|
|
float10 __thiscall FUN_004116e0(int param_1,uint *param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
uint uVar1;
|
|
|
|
float10 fVar2;
|
|
|
|
|
|
|
|
uVar1 = (uint)(*(int *)(param_1 + 8) == 3);
|
|
|
|
*param_2 = uVar1;
|
|
|
|
if (uVar1 == 0) {
|
|
|
|
fVar2 = (float10)_DAT_00795610;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
fVar2 = (float10)_DAT_008379a8 - (float10)*(double *)(param_1 + 0x10);
|
|
|
|
}
|
|
|
|
if ((*(int *)(param_1 + 0x2c) != 0) && ((float10)_DAT_00795870 < fVar2)) {
|
|
|
|
fVar2 = (float10)_DAT_00795870;
|
|
|
|
}
|
|
|
|
return fVar2;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00411760 at 0x00411760 (size: 67) ---
|
|
|
|
|
|
uint FUN_00411760(undefined4 param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
int *piVar1;
|
|
|
|
undefined *puVar2;
|
|
|
|
undefined4 uVar3;
|
|
|
|
uint *puVar4;
|
|
|
|
uint local_8;
|
|
|
|
int local_4;
|
|
|
|
|
|
|
|
puVar4 = &local_8;
|
|
|
|
uVar3 = 0;
|
|
|
|
puVar2 = &DAT_00795814;
|
|
|
|
piVar1 = &local_4;
|
|
|
|
local_8 = 0;
|
|
|
|
FUN_00406d10(piVar1,param_1,&DAT_00795814,0,&local_8);
|
|
|
|
FUN_00406650(piVar1,param_1,puVar2,uVar3,puVar4);
|
|
|
|
return (local_4 < 0) - 1 & local_8;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_004117b0 at 0x004117B0 (size: 68) ---
|
|
|
|
|
|
void __thiscall FUN_004117b0(int *param_1,int *param_2,uint param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
uint uVar2;
|
|
|
|
|
|
|
|
uVar2 = (**(code **)(*param_1 + 8))();
|
|
|
|
if ((uVar2 <= param_3) && (3 < param_3)) {
|
|
|
|
*(int *)*param_2 = param_1[1];
|
|
|
|
iVar1 = *param_2;
|
|
|
|
*param_2 = iVar1 + 4;
|
|
|
|
if (3 < param_3 - 4) {
|
|
|
|
*(int *)(iVar1 + 4) = param_1[2];
|
|
|
|
*param_2 = *param_2 + 4;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
(**(code **)(*param_1 + 8))();
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00411800 at 0x00411800 (size: 70) ---
|
|
|
|
|
|
undefined4 __thiscall FUN_00411800(int *param_1,int *param_2,uint param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
uint uVar2;
|
|
|
|
|
|
|
|
uVar2 = (**(code **)(*param_1 + 8))();
|
|
|
|
if (param_3 < uVar2) {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
if (3 < param_3) {
|
|
|
|
param_1[1] = *(int *)*param_2;
|
|
|
|
iVar1 = *param_2;
|
|
|
|
*param_2 = iVar1 + 4;
|
|
|
|
if (3 < param_3 - 4) {
|
|
|
|
param_1[2] = *(int *)(iVar1 + 4);
|
|
|
|
*param_2 = *param_2 + 4;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00411850 at 0x00411850 (size: 26) ---
|
|
|
|
|
|
int * __fastcall FUN_00411850(int *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
LONG *lpAddend;
|
|
|
|
|
|
|
|
lpAddend = (LONG *)(DAT_008ef11c + 4);
|
|
|
|
*param_1 = DAT_008ef11c;
|
|
|
|
InterlockedIncrement(lpAddend);
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00411870 at 0x00411870 (size: 90) ---
|
|
|
|
|
|
void __fastcall FUN_00411870(int *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined4 *puVar1;
|
|
|
|
LONG LVar2;
|
|
|
|
uint uVar3;
|
|
|
|
uint uVar4;
|
|
|
|
undefined4 *puVar5;
|
|
|
|
undefined4 *puVar6;
|
|
|
|
|
|
|
|
puVar1 = (undefined4 *)*param_1;
|
|
|
|
if (puVar1[1] == 1) {
|
|
|
|
puVar1[4] = 0xffffffff;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
FUN_00403560(puVar1[2] + -1);
|
|
|
|
uVar4 = *(uint *)(*param_1 + 8);
|
|
|
|
puVar5 = puVar1 + 5;
|
|
|
|
puVar6 = (undefined4 *)(*param_1 + 0x14);
|
|
|
|
for (uVar3 = uVar4 >> 2; uVar3 != 0; uVar3 = uVar3 - 1) {
|
|
|
|
*puVar6 = *puVar5;
|
|
|
|
puVar5 = puVar5 + 1;
|
|
|
|
puVar6 = puVar6 + 1;
|
|
|
|
}
|
|
|
|
for (uVar4 = uVar4 & 3; uVar4 != 0; uVar4 = uVar4 - 1) {
|
|
|
|
*(undefined1 *)puVar6 = *(undefined1 *)puVar5;
|
|
|
|
puVar5 = (undefined4 *)((int)puVar5 + 1);
|
|
|
|
puVar6 = (undefined4 *)((int)puVar6 + 1);
|
|
|
|
}
|
|
|
|
LVar2 = InterlockedDecrement(puVar1 + 1);
|
|
|
|
if ((LVar2 == 0) && (puVar1 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar1)(1);
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_004118d0 at 0x004118D0 (size: 163) ---
|
|
|
|
|
|
void __fastcall FUN_004118d0(int *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
void *pvVar1;
|
|
|
|
|
|
|
|
(**(code **)(*param_1 + 0x28))();
|
|
|
|
FUN_00557170();
|
|
|
|
(**(code **)(*param_1 + 0x8c))();
|
|
|
|
FUN_00422210();
|
|
|
|
(**(code **)(*param_1 + 0x84))();
|
|
|
|
(**(code **)(*param_1 + 0x6c))();
|
|
|
|
if ((undefined4 *)param_1[0x42] != (undefined4 *)0x0) {
|
|
|
|
(*(code *)**(undefined4 **)param_1[0x42])(1);
|
|
|
|
}
|
|
|
|
param_1[0x42] = 0;
|
|
|
|
if ((undefined4 *)param_1[0x41] != (undefined4 *)0x0) {
|
|
|
|
(*(code *)**(undefined4 **)param_1[0x41])(1);
|
|
|
|
}
|
|
|
|
param_1[0x41] = 0;
|
|
|
|
FUN_00406d10();
|
|
|
|
pvVar1 = DAT_00837740;
|
|
|
|
if (DAT_00837740 != (void *)0x0) {
|
|
|
|
FUN_00406bf0();
|
|
|
|
operator_delete(pvVar1);
|
|
|
|
DAT_00837740 = (void *)0x0;
|
|
|
|
DAT_00837744 = 1;
|
|
|
|
}
|
|
|
|
(**(code **)(*param_1 + 0x88))();
|
|
|
|
thunk_FUN_00550ec0();
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00411aa0 at 0x00411AA0 (size: 102) ---
|
|
|
|
|
|
undefined4 __thiscall FUN_00411aa0(int param_1,undefined4 param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined4 *puVar1;
|
|
|
|
int iVar2;
|
|
|
|
|
|
|
|
puVar1 = (undefined4 *)FUN_005df0f5(8);
|
|
|
|
if (puVar1 == (undefined4 *)0x0) {
|
|
|
|
puVar1 = (undefined4 *)0x0;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
*puVar1 = 0;
|
|
|
|
puVar1[1] = 0;
|
|
|
|
}
|
|
|
|
iVar2 = (short)param_2 * 4;
|
|
|
|
*(undefined4 **)(iVar2 + *(int *)(param_1 + 300)) = puVar1;
|
|
|
|
iVar2 = *(int *)(iVar2 + *(int *)(param_1 + 300));
|
|
|
|
if (iVar2 != 0) {
|
|
|
|
iVar2 = FUN_00541780(param_2,iVar2);
|
|
|
|
if (iVar2 != 0) {
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00411b50 at 0x00411B50 (size: 77) ---
|
|
|
|
|
|
void __thiscall FUN_00411b50(int param_1,int *param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
LONG LVar2;
|
|
|
|
|
|
|
|
iVar1 = *(int *)(param_1 + 0x88);
|
|
|
|
if (iVar1 != *param_2) {
|
|
|
|
LVar2 = InterlockedDecrement((LONG *)(iVar1 + -0x10));
|
|
|
|
if ((LVar2 == 0) && ((undefined4 *)(iVar1 + -0x14) != (undefined4 *)0x0)) {
|
|
|
|
(*(code *)**(undefined4 **)(iVar1 + -0x14))(1);
|
|
|
|
}
|
|
|
|
iVar1 = *param_2;
|
|
|
|
*(int *)(param_1 + 0x88) = iVar1;
|
|
|
|
/* WARNING: Could not recover jumptable at 0x00411b92. Too many branches */
|
|
|
|
/* WARNING: Treating indirect jump as call */
|
|
|
|
InterlockedIncrement((LONG *)(iVar1 + -0x10));
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00411c20 at 0x00411C20 (size: 156) ---
|
|
|
|
|
|
void __fastcall FUN_00411c20(int param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
int *piVar1;
|
|
|
|
int iVar2;
|
|
|
|
undefined4 *puVar3;
|
|
|
|
int *piVar4;
|
|
|
|
LONG LVar5;
|
|
|
|
undefined4 *puVar6;
|
|
|
|
|
|
|
|
piVar1 = *(int **)(param_1 + 0x124);
|
|
|
|
if (piVar1 != (int *)0x0) {
|
|
|
|
iVar2 = *piVar1;
|
|
|
|
while (iVar2 != 0) {
|
|
|
|
puVar3 = (undefined4 *)*piVar1;
|
|
|
|
if (puVar3 == (undefined4 *)0x0) {
|
|
|
|
puVar6 = (undefined4 *)0x0;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
iVar2 = puVar3[1];
|
|
|
|
*piVar1 = iVar2;
|
|
|
|
if (iVar2 == 0) {
|
|
|
|
piVar1[1] = 0;
|
|
|
|
}
|
|
|
|
puVar6 = (undefined4 *)*puVar3;
|
|
|
|
operator_delete(puVar3);
|
|
|
|
}
|
|
|
|
piVar1 = (int *)puVar6[0xb];
|
|
|
|
if (((piVar1 != (int *)0x0) && (3 < (uint)puVar6[0xc])) && (*piVar1 == 0xf7de)) {
|
|
|
|
iVar2 = piVar1[1];
|
|
|
|
FUN_00556f40();
|
|
|
|
piVar4 = (int *)FUN_00557440();
|
|
|
|
if (piVar4 != (int *)0x0) {
|
|
|
|
(**(code **)(*piVar4 + 0xc))(piVar4,iVar2,piVar1 + 2);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
LVar5 = InterlockedDecrement(puVar6 + 1);
|
|
|
|
if (LVar5 == 0) {
|
|
|
|
(**(code **)*puVar6)(1);
|
|
|
|
}
|
|
|
|
piVar1 = *(int **)(param_1 + 0x124);
|
|
|
|
iVar2 = *piVar1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00411d90 at 0x00411D90 (size: 126) ---
|
|
|
|
|
|
void __thiscall
|
|
|
|
FUN_00411d90(int param_1,int *param_2,undefined4 param_3,undefined4 param_4,undefined4 param_5,
|
|
|
|
undefined4 param_6,undefined4 param_7)
|
|
|
|
|
|
|
|
{
|
|
|
|
int *piVar1;
|
|
|
|
char cVar2;
|
|
|
|
int iVar3;
|
|
|
|
|
|
|
|
piVar1 = param_2;
|
|
|
|
if (param_1 != 0) {
|
|
|
|
FUN_004369a0(param_1,2,param_2,param_3,param_4,param_5,param_6,param_7);
|
|
|
|
}
|
|
|
|
if (DAT_008380c8 == 0) {
|
|
|
|
iVar3 = FUN_005df0f5(0x8100);
|
|
|
|
if (iVar3 == 0) {
|
|
|
|
DAT_008380c8 = 0;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
DAT_008380c8 = FUN_00433d20();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
cVar2 = FUN_00433710(piVar1,¶m_2);
|
|
|
|
if ((cVar2 != '\0') && (iVar3 = (**(code **)(*param_2 + 0x44))(), iVar3 != 0)) {
|
|
|
|
*(undefined1 *)(iVar3 + 0x28) = 1;
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00411e10 at 0x00411E10 (size: 106) ---
|
|
|
|
|
|
void __fastcall FUN_00411e10(undefined4 *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined4 *puVar1;
|
|
|
|
LONG LVar2;
|
|
|
|
|
|
|
|
operator_delete__((void *)param_1[0xf]);
|
|
|
|
param_1[0xf] = 0;
|
|
|
|
operator_delete__((void *)param_1[0xc]);
|
|
|
|
param_1[0xc] = 0;
|
|
|
|
puVar1 = (undefined4 *)param_1[8];
|
|
|
|
LVar2 = InterlockedDecrement(puVar1 + 1);
|
|
|
|
if ((LVar2 == 0) && (puVar1 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar1)(1);
|
|
|
|
}
|
|
|
|
puVar1 = (undefined4 *)param_1[4];
|
|
|
|
LVar2 = InterlockedDecrement(puVar1 + 1);
|
|
|
|
if ((LVar2 == 0) && (puVar1 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar1)(1);
|
|
|
|
}
|
|
|
|
*param_1 = &PTR_FUN_0079385c;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00411fa0 at 0x00411FA0 (size: 126) ---
|
|
|
|
|
|
undefined4 __fastcall FUN_00411fa0(int param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
char cVar1;
|
|
|
|
|
|
|
|
FUN_0040fbd0();
|
|
|
|
cVar1 = FUN_00439e50();
|
|
|
|
if (cVar1 != '\0') {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
FUN_00543440();
|
|
|
|
FUN_00411c20();
|
|
|
|
FUN_00541cb0();
|
|
|
|
(**(code **)(*(int *)(*(int *)(param_1 + 0xac) + 4) + 0x48))();
|
|
|
|
FUN_0045d0b0();
|
|
|
|
FUN_004554b0();
|
|
|
|
FUN_0043e690();
|
|
|
|
thunk_FUN_0043dc70();
|
|
|
|
FUN_00455610();
|
|
|
|
FUN_0043fcd0(1);
|
|
|
|
FUN_004392b0();
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00412020 at 0x00412020 (size: 51) ---
|
|
|
|
|
|
undefined4 * __thiscall FUN_00412020(undefined4 *param_1,byte param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
*param_1 = &PTR_FUN_00795538;
|
|
|
|
if (param_1[1] != 0) {
|
|
|
|
FUN_0040e340(param_1);
|
|
|
|
param_1[1] = 0;
|
|
|
|
}
|
|
|
|
if ((param_2 & 1) != 0) {
|
|
|
|
operator_delete(param_1);
|
|
|
|
}
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00412180 at 0x00412180 (size: 288) ---
|
|
|
|
|
|
bool __thiscall FUN_00412180(int *param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4)
|
|
|
|
|
|
|
|
{
|
|
|
|
char cVar1;
|
|
|
|
BOOL BVar2;
|
|
|
|
HMODULE hLibModule;
|
|
|
|
int iVar3;
|
|
|
|
undefined4 extraout_ECX;
|
|
|
|
undefined4 extraout_ECX_00;
|
|
|
|
undefined4 extraout_ECX_01;
|
|
|
|
_OSVERSIONINFOA *p_Var4;
|
|
|
|
undefined4 uVar5;
|
|
|
|
undefined4 uVar6;
|
|
|
|
undefined4 uVar7;
|
|
|
|
_OSVERSIONINFOA _Stack_a0;
|
|
|
|
|
|
|
|
_set_new_handler((_func_int_uint *)&LAB_00411580);
|
|
|
|
cVar1 = (**(code **)(*param_1 + 0x80))();
|
|
|
|
if (cVar1 == '\0') {
|
|
|
|
p_Var4 = &_Stack_a0;
|
|
|
|
for (iVar3 = 0x25; iVar3 != 0; iVar3 = iVar3 + -1) {
|
|
|
|
p_Var4->dwOSVersionInfoSize = 0;
|
|
|
|
p_Var4 = (_OSVERSIONINFOA *)&p_Var4->dwMajorVersion;
|
|
|
|
}
|
|
|
|
_Stack_a0.dwOSVersionInfoSize = 0x94;
|
|
|
|
BVar2 = GetVersionExA(&_Stack_a0);
|
|
|
|
if ((BVar2 == 0) || (_Stack_a0.dwPlatformId == 1)) {
|
|
|
|
hLibModule = LoadLibraryA("unicows.dll");
|
|
|
|
if (hLibModule == (HMODULE)0x0) {
|
|
|
|
uVar7 = extraout_ECX;
|
|
|
|
FUN_00402730(&DAT_00795320);
|
|
|
|
uVar6 = extraout_ECX_00;
|
|
|
|
FUN_00402730(&DAT_00795320);
|
|
|
|
uVar5 = extraout_ECX_01;
|
|
|
|
FUN_00402730(L"UnicoWS.dll");
|
|
|
|
FUN_0043d090(0x6d,uVar5,uVar6,uVar7,hLibModule);
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
FreeLibrary(hLibModule);
|
|
|
|
}
|
|
|
|
FUN_0040fcd0();
|
|
|
|
FUN_0042c800();
|
|
|
|
iVar3 = FUN_0054bb50();
|
|
|
|
param_1[0x41] = iVar3;
|
|
|
|
if (iVar3 != 0) {
|
|
|
|
iVar3 = FUN_0054bb70();
|
|
|
|
param_1[0x42] = iVar3;
|
|
|
|
if (iVar3 != 0) {
|
|
|
|
(**(code **)(*param_1 + 0x68))();
|
|
|
|
cVar1 = (**(code **)(*param_1 + 0x70))();
|
|
|
|
if (((cVar1 != '\0') &&
|
|
|
|
(cVar1 = (**(code **)(*param_1 + 0x74))(param_3,param_4,param_1[0x1c] != 0),
|
|
|
|
cVar1 != '\0')) && (cVar1 = FUN_004221c0(), cVar1 != '\0')) {
|
|
|
|
cVar1 = (**(code **)(*param_1 + 0x7c))(param_2);
|
|
|
|
return cVar1 != '\0';
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00412310 at 0x00412310 (size: 259) ---
|
|
|
|
|
|
undefined4 __fastcall FUN_00412310(int param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
LONG LVar1;
|
|
|
|
undefined4 *puVar2;
|
|
|
|
int local_4;
|
|
|
|
|
|
|
|
local_4 = param_1;
|
|
|
|
FUN_00438fe0(0,param_1 + 100);
|
|
|
|
FUN_00438940();
|
|
|
|
FUN_00401340("Network Bind Interface");
|
|
|
|
FUN_004020e0(&DAT_00837a10,&local_4,0,0,0,0);
|
|
|
|
puVar2 = (undefined4 *)(local_4 + -0x14);
|
|
|
|
LVar1 = InterlockedDecrement((LONG *)(local_4 + -0x10));
|
|
|
|
if ((LVar1 == 0) && (puVar2 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar2)(1);
|
|
|
|
}
|
|
|
|
FUN_00401340("Flag to compute a unique port");
|
|
|
|
FUN_00411d90(&DAT_00837a14,&local_4,0,0,0,0);
|
|
|
|
puVar2 = (undefined4 *)(local_4 + -0x14);
|
|
|
|
LVar1 = InterlockedDecrement((LONG *)(local_4 + -0x10));
|
|
|
|
if ((LVar1 == 0) && (puVar2 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar2)(1);
|
|
|
|
}
|
|
|
|
FUN_00401340("The user specified port");
|
|
|
|
FUN_00402160(&DAT_00837a18,&local_4,0,0,0,0);
|
|
|
|
puVar2 = (undefined4 *)(local_4 + -0x14);
|
|
|
|
LVar1 = InterlockedDecrement((LONG *)(local_4 + -0x10));
|
|
|
|
if ((LVar1 == 0) && (puVar2 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar2)(1);
|
|
|
|
}
|
|
|
|
FUN_00430d80();
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00412420 at 0x00412420 (size: 1070) ---
|
|
|
|
|
|
void __thiscall FUN_00412420(int param_1,int param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
LONG LVar1;
|
|
|
|
undefined4 *puVar2;
|
|
|
|
int local_8;
|
|
|
|
int local_4;
|
|
|
|
|
|
|
|
FUN_00401340("<string>: Specifies the account name to logon with.");
|
|
|
|
FUN_00401340("account");
|
|
|
|
FUN_00402660(2,0x61,&local_8,&local_4,0,0,0);
|
|
|
|
LVar1 = InterlockedDecrement((LONG *)(local_8 + -0x10));
|
|
|
|
if ((LVar1 == 0) && ((undefined4 *)(local_8 + -0x14) != (undefined4 *)0x0)) {
|
|
|
|
(*(code *)**(undefined4 **)(local_8 + -0x14))(1);
|
|
|
|
}
|
|
|
|
puVar2 = (undefined4 *)(local_4 + -0x14);
|
|
|
|
LVar1 = InterlockedDecrement((LONG *)(local_4 + -0x10));
|
|
|
|
if ((LVar1 == 0) && (puVar2 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar2)(1);
|
|
|
|
}
|
|
|
|
FUN_00401340("<32 bitfield>: Controls what kinds of debug outputs are enabled.");
|
|
|
|
FUN_00401340("debug");
|
|
|
|
FUN_00402660(2,0,¶m_2,&local_4,0,0,0);
|
|
|
|
puVar2 = (undefined4 *)(param_2 + -0x14);
|
|
|
|
LVar1 = InterlockedDecrement((LONG *)(param_2 + -0x10));
|
|
|
|
if ((LVar1 == 0) && (puVar2 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar2)(1);
|
|
|
|
}
|
|
|
|
puVar2 = (undefined4 *)(local_4 + -0x14);
|
|
|
|
LVar1 = InterlockedDecrement((LONG *)(local_4 + -0x10));
|
|
|
|
if ((LVar1 == 0) && (puVar2 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar2)(1);
|
|
|
|
}
|
|
|
|
FUN_00401340("[host/IP]:Specifies where to find the server to talk to.");
|
|
|
|
FUN_00401340(&DAT_00795b68);
|
|
|
|
FUN_00402660(0x32,0x68,¶m_2,&local_4,param_1 + 0x88,0,0);
|
|
|
|
puVar2 = (undefined4 *)(param_2 + -0x14);
|
|
|
|
LVar1 = InterlockedDecrement((LONG *)(param_2 + -0x10));
|
|
|
|
if ((LVar1 == 0) && (puVar2 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar2)(1);
|
|
|
|
}
|
|
|
|
puVar2 = (undefined4 *)(local_4 + -0x14);
|
|
|
|
LVar1 = InterlockedDecrement((LONG *)(local_4 + -0x10));
|
|
|
|
if ((LVar1 == 0) && (puVar2 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar2)(1);
|
|
|
|
}
|
|
|
|
FUN_00401340("<string>: Language to run the client in.");
|
|
|
|
FUN_00401340("language");
|
|
|
|
FUN_00402660(0x32,0,¶m_2,&local_4,param_1 + 0x84,0,0);
|
|
|
|
puVar2 = (undefined4 *)(param_2 + -0x14);
|
|
|
|
LVar1 = InterlockedDecrement((LONG *)(param_2 + -0x10));
|
|
|
|
if ((LVar1 == 0) && (puVar2 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar2)(1);
|
|
|
|
}
|
|
|
|
puVar2 = (undefined4 *)(local_4 + -0x14);
|
|
|
|
LVar1 = InterlockedDecrement((LONG *)(local_4 + -0x10));
|
|
|
|
if ((LVar1 == 0) && (puVar2 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar2)(1);
|
|
|
|
}
|
|
|
|
FUN_00401340("<1-65535>: Specify the outgoing network port to use.");
|
|
|
|
FUN_00401340("outport");
|
|
|
|
FUN_00402660(0x22,0x71,¶m_2,&local_4,param_1 + 0x94,0,0);
|
|
|
|
puVar2 = (undefined4 *)(param_2 + -0x14);
|
|
|
|
LVar1 = InterlockedDecrement((LONG *)(param_2 + -0x10));
|
|
|
|
if ((LVar1 == 0) && (puVar2 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar2)(1);
|
|
|
|
}
|
|
|
|
puVar2 = (undefined4 *)(local_4 + -0x14);
|
|
|
|
LVar1 = InterlockedDecrement((LONG *)(local_4 + -0x10));
|
|
|
|
if ((LVar1 == 0) && (puVar2 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar2)(1);
|
|
|
|
}
|
|
|
|
FUN_00401340("<1-65535>: Specify the server port to contact. See \'host\'");
|
|
|
|
FUN_00401340(&DAT_00795aac);
|
|
|
|
FUN_00402660(0x22,0x70,¶m_2,&local_4,param_1 + 0x90,0,0);
|
|
|
|
puVar2 = (undefined4 *)(param_2 + -0x14);
|
|
|
|
LVar1 = InterlockedDecrement((LONG *)(param_2 + -0x10));
|
|
|
|
if ((LVar1 == 0) && (puVar2 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar2)(1);
|
|
|
|
}
|
|
|
|
puVar2 = (undefined4 *)(local_4 + -0x14);
|
|
|
|
LVar1 = InterlockedDecrement((LONG *)(local_4 + -0x10));
|
|
|
|
if ((LVar1 == 0) && (puVar2 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar2)(1);
|
|
|
|
}
|
|
|
|
FUN_00401340("<string>: Specify the preferences file to use.");
|
|
|
|
FUN_00401340("prefs");
|
|
|
|
FUN_00402660(0x32,0,¶m_2,&local_4,param_1 + 0x60,0,0);
|
|
|
|
puVar2 = (undefined4 *)(param_2 + -0x14);
|
|
|
|
LVar1 = InterlockedDecrement((LONG *)(param_2 + -0x10));
|
|
|
|
if ((LVar1 == 0) && (puVar2 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar2)(1);
|
|
|
|
}
|
|
|
|
puVar2 = (undefined4 *)(local_4 + -0x14);
|
|
|
|
LVar1 = InterlockedDecrement((LONG *)(local_4 + -0x10));
|
|
|
|
if ((LVar1 == 0) && (puVar2 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar2)(1);
|
|
|
|
}
|
|
|
|
FUN_00401340("Opens the DAT files readonly");
|
|
|
|
FUN_00401340("rodat");
|
|
|
|
FUN_00402660(3,0,¶m_2,&local_4,0,0,0);
|
|
|
|
puVar2 = (undefined4 *)(param_2 + -0x14);
|
|
|
|
LVar1 = InterlockedDecrement((LONG *)(param_2 + -0x10));
|
|
|
|
if ((LVar1 == 0) && (puVar2 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar2)(1);
|
|
|
|
}
|
|
|
|
puVar2 = (undefined4 *)(local_4 + -0x14);
|
|
|
|
LVar1 = InterlockedDecrement((LONG *)(local_4 + -0x10));
|
|
|
|
if ((LVar1 == 0) && (puVar2 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar2)(1);
|
|
|
|
}
|
|
|
|
FUN_00401340("Enables the use of the memory manager.");
|
|
|
|
FUN_00401340("usemem");
|
|
|
|
FUN_00402660(0x11,0,¶m_2,&local_4,param_1 + 0x68,1,0);
|
|
|
|
puVar2 = (undefined4 *)(param_2 + -0x14);
|
|
|
|
LVar1 = InterlockedDecrement((LONG *)(param_2 + -0x10));
|
|
|
|
if ((LVar1 == 0) && (puVar2 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar2)(1);
|
|
|
|
}
|
|
|
|
LVar1 = InterlockedDecrement((LONG *)(local_4 + -0x10));
|
|
|
|
if ((LVar1 == 0) && ((undefined4 *)(local_4 + -0x14) != (undefined4 *)0x0)) {
|
|
|
|
(*(code *)**(undefined4 **)(local_4 + -0x14))(1);
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00412850 at 0x00412850 (size: 546) ---
|
|
|
|
|
|
char __thiscall FUN_00412850(int *param_1,undefined4 param_2,int *param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
char *_Str;
|
|
|
|
char cVar1;
|
|
|
|
char cVar2;
|
|
|
|
char cVar3;
|
|
|
|
LONG LVar4;
|
|
|
|
int *piVar5;
|
|
|
|
ulong uVar6;
|
|
|
|
undefined4 *puVar7;
|
|
|
|
int local_4;
|
|
|
|
|
|
|
|
cVar1 = FUN_004083f0(param_2,param_3);
|
|
|
|
cVar2 = '\0';
|
|
|
|
if (cVar1 != '\0') {
|
|
|
|
FUN_00401340("account");
|
|
|
|
cVar2 = FUN_00401920(&local_4);
|
|
|
|
puVar7 = (undefined4 *)(local_4 + -0x14);
|
|
|
|
LVar4 = InterlockedDecrement((LONG *)(local_4 + -0x10));
|
|
|
|
if ((LVar4 == 0) && (puVar7 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar7)(1);
|
|
|
|
}
|
|
|
|
if (cVar2 != '\0') {
|
|
|
|
FUN_004034c0(*param_3);
|
|
|
|
FUN_00411870();
|
|
|
|
_strlwr((char *)(param_1[0x1c] + 0x14));
|
|
|
|
return cVar1;
|
|
|
|
}
|
|
|
|
FUN_00401340("debug");
|
|
|
|
cVar2 = FUN_00401920(&local_4);
|
|
|
|
puVar7 = (undefined4 *)(local_4 + -0x14);
|
|
|
|
LVar4 = InterlockedDecrement((LONG *)(local_4 + -0x10));
|
|
|
|
if ((LVar4 == 0) && (puVar7 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar7)(1);
|
|
|
|
}
|
|
|
|
if (cVar2 != '\0') {
|
|
|
|
_Str = (char *)*param_3;
|
|
|
|
piVar5 = _errno();
|
|
|
|
*piVar5 = 0;
|
|
|
|
uVar6 = strtoul(_Str,(char **)0x0,0);
|
|
|
|
FUN_00405e60(uVar6,1);
|
|
|
|
FUN_00405e60(~uVar6,0);
|
|
|
|
return cVar1;
|
|
|
|
}
|
|
|
|
FUN_00401340("logfile");
|
|
|
|
cVar3 = FUN_00401920(&local_4);
|
|
|
|
LVar4 = InterlockedDecrement((LONG *)(local_4 + -0x10));
|
|
|
|
if ((LVar4 == 0) && ((undefined4 *)(local_4 + -0x14) != (undefined4 *)0x0)) {
|
|
|
|
(*(code *)**(undefined4 **)(local_4 + -0x14))(1);
|
|
|
|
}
|
|
|
|
cVar2 = cVar1;
|
|
|
|
if (cVar3 == '\0') {
|
|
|
|
FUN_00401340("outport");
|
|
|
|
cVar1 = FUN_00401920(&local_4);
|
|
|
|
FUN_004011b0();
|
|
|
|
if (cVar1 == '\0') {
|
|
|
|
FUN_00401340("rodat");
|
|
|
|
cVar1 = FUN_00401920(&local_4);
|
|
|
|
FUN_004011b0();
|
|
|
|
if (cVar1 != '\0') {
|
|
|
|
param_1[0x1b] = (uint)(*(int *)(*param_3 + -4) == 1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if ((param_1[0x25] < 1) || (0xffff < param_1[0x25])) {
|
|
|
|
FUN_00401340("Client port must be between 1 and 65535\n");
|
|
|
|
(**(code **)(*param_1 + 0x20))(¶m_3);
|
|
|
|
FUN_004011b0();
|
|
|
|
return '\0';
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return cVar2;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00412ae0 at 0x00412AE0 (size: 120) ---
|
|
|
|
|
|
undefined4 __thiscall FUN_00412ae0(int param_1,undefined4 param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
if ((*(int *)(param_1 + 4) != 0) && (*(int *)(param_1 + 8) != 0)) {
|
|
|
|
FUN_0042dc80();
|
|
|
|
FUN_0042c9c0(*(undefined4 *)(param_1 + 4),*(undefined4 *)(param_1 + 8));
|
|
|
|
FUN_0042e740(param_2,1);
|
|
|
|
FUN_0042e590();
|
|
|
|
return param_2;
|
|
|
|
}
|
|
|
|
FUN_00402730(L"unknown");
|
|
|
|
return param_2;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00412b70 at 0x00412B70 (size: 515) ---
|
|
|
|
|
|
void __fastcall FUN_00412b70(undefined4 *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
LONG LVar2;
|
|
|
|
uint uVar3;
|
|
|
|
undefined4 *puVar4;
|
|
|
|
|
|
|
|
param_1[-7] = &PTR_LAB_00795d48;
|
|
|
|
param_1[-6] = &PTR_LAB_00795cf8;
|
|
|
|
*param_1 = &PTR_FUN_00795ce8;
|
|
|
|
param_1[2] = &PTR_LAB_00795cdc;
|
|
|
|
param_1[3] = &PTR_LAB_00795ccc;
|
|
|
|
DAT_008379e4 = 0;
|
|
|
|
if ((HANDLE)param_1[0x45] != (HANDLE)0x0) {
|
|
|
|
CloseHandle((HANDLE)param_1[0x45]);
|
|
|
|
param_1[0x45] = 0;
|
|
|
|
}
|
|
|
|
puVar4 = (undefined4 *)(param_1[0x3c] + -0x14);
|
|
|
|
LVar2 = InterlockedDecrement((LONG *)(param_1[0x3c] + -0x10));
|
|
|
|
if ((LVar2 == 0) && (puVar4 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar4)(1);
|
|
|
|
}
|
|
|
|
FUN_00411e10();
|
|
|
|
puVar4 = (undefined4 *)(param_1[0x23] + -0x14);
|
|
|
|
LVar2 = InterlockedDecrement((LONG *)(param_1[0x23] + -0x10));
|
|
|
|
if ((LVar2 == 0) && (puVar4 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar4)(1);
|
|
|
|
}
|
|
|
|
puVar4 = (undefined4 *)(param_1[0x1c] + -0x14);
|
|
|
|
LVar2 = InterlockedDecrement((LONG *)(param_1[0x1c] + -0x10));
|
|
|
|
if ((LVar2 == 0) && (puVar4 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar4)(1);
|
|
|
|
}
|
|
|
|
puVar4 = (undefined4 *)(param_1[0x1b] + -0x14);
|
|
|
|
LVar2 = InterlockedDecrement((LONG *)(param_1[0x1b] + -0x10));
|
|
|
|
if ((LVar2 == 0) && (puVar4 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar4)(1);
|
|
|
|
}
|
|
|
|
puVar4 = (undefined4 *)(param_1[0x1a] + -0x14);
|
|
|
|
LVar2 = InterlockedDecrement((LONG *)(param_1[0x1a] + -0x10));
|
|
|
|
if ((LVar2 == 0) && (puVar4 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar4)(1);
|
|
|
|
}
|
|
|
|
puVar4 = (undefined4 *)param_1[0x16];
|
|
|
|
LVar2 = InterlockedDecrement(puVar4 + 1);
|
|
|
|
if ((LVar2 == 0) && (puVar4 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar4)(1);
|
|
|
|
}
|
|
|
|
puVar4 = (undefined4 *)(param_1[0x12] + -0x14);
|
|
|
|
LVar2 = InterlockedDecrement((LONG *)(param_1[0x12] + -0x10));
|
|
|
|
if ((LVar2 == 0) && (puVar4 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar4)(1);
|
|
|
|
}
|
|
|
|
puVar4 = (undefined4 *)(param_1[0x11] + -0x14);
|
|
|
|
LVar2 = InterlockedDecrement((LONG *)(param_1[0x11] + -0x10));
|
|
|
|
if ((LVar2 == 0) && (puVar4 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar4)(1);
|
|
|
|
}
|
|
|
|
puVar4 = (undefined4 *)(-(uint)(param_1 != (undefined4 *)0x1c) & (uint)(param_1 + 3));
|
|
|
|
param_1[0xf] = &PTR_LAB_00793b6c;
|
|
|
|
puVar4[8] = &PTR_FUN_0079385c;
|
|
|
|
*puVar4 = &PTR_FUN_00795538;
|
|
|
|
if (puVar4[1] != 0) {
|
|
|
|
FUN_0040e340(puVar4);
|
|
|
|
puVar4[1] = 0;
|
|
|
|
}
|
|
|
|
puVar4 = (undefined4 *)(-(uint)(param_1 != (undefined4 *)0x1c) & (uint)(param_1 + 2));
|
|
|
|
*puVar4 = &PTR_FUN_00795824;
|
|
|
|
if (DAT_00837ff4 != (int *)0x0) {
|
|
|
|
(**(code **)(*DAT_00837ff4 + 0x3c))(puVar4);
|
|
|
|
}
|
|
|
|
puVar4 = (undefined4 *)(-(uint)(param_1 != (undefined4 *)0x1c) & (uint)param_1);
|
|
|
|
*puVar4 = &PTR_FUN_00795538;
|
|
|
|
if (puVar4[1] != 0) {
|
|
|
|
FUN_0040e340(puVar4);
|
|
|
|
puVar4[1] = 0;
|
|
|
|
}
|
|
|
|
uVar3 = -(uint)(param_1 != (undefined4 *)0x1c) & (uint)(param_1 + -6);
|
|
|
|
iVar1 = *(int *)(uVar3 + 8);
|
|
|
|
puVar4 = (undefined4 *)(iVar1 + -0x14);
|
|
|
|
LVar2 = InterlockedDecrement((LONG *)(iVar1 + -0x10));
|
|
|
|
if ((LVar2 == 0) && (puVar4 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar4)(1);
|
|
|
|
}
|
|
|
|
iVar1 = *(int *)(uVar3 + 4);
|
|
|
|
puVar4 = (undefined4 *)(iVar1 + -0x14);
|
|
|
|
LVar2 = InterlockedDecrement((LONG *)(iVar1 + -0x10));
|
|
|
|
if ((LVar2 == 0) && (puVar4 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar4)(1);
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00412e10 at 0x00412E10 (size: 58) ---
|
|
|
|
|
|
undefined4 * __thiscall FUN_00412e10(undefined4 *param_1,byte param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
param_1[8] = &PTR_FUN_0079385c;
|
|
|
|
*param_1 = &PTR_FUN_00795538;
|
|
|
|
if (param_1[1] != 0) {
|
|
|
|
FUN_0040e340(param_1);
|
|
|
|
param_1[1] = 0;
|
|
|
|
}
|
|
|
|
if ((param_2 & 1) != 0) {
|
|
|
|
operator_delete(param_1);
|
|
|
|
}
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00412e50 at 0x00412E50 (size: 494) ---
|
|
|
|
|
|
undefined4 * __fastcall FUN_00412e50(undefined4 *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
LONG *pLVar1;
|
|
|
|
|
|
|
|
param_1[1] = &PTR_LAB_00795c80;
|
|
|
|
pLVar1 = (LONG *)(PTR_DAT_00818344 + -0x10);
|
|
|
|
param_1[2] = PTR_DAT_00818344;
|
|
|
|
InterlockedIncrement(pLVar1);
|
|
|
|
FUN_00401340(&DAT_00795c7c);
|
|
|
|
param_1[7] = &PTR_FUN_007959a8;
|
|
|
|
param_1[8] = 0;
|
|
|
|
param_1[9] = &PTR_FUN_00795824;
|
|
|
|
param_1[0xb] = 0;
|
|
|
|
param_1[10] = &PTR_FUN_00795dd8;
|
|
|
|
param_1[0xc] = 0;
|
|
|
|
param_1[0xe] = 0;
|
|
|
|
param_1[0xf] = 0;
|
|
|
|
param_1[0x10] = 0;
|
|
|
|
param_1[0x11] = 0x3f800000;
|
|
|
|
param_1[0x12] = &PTR_FUN_00795878;
|
|
|
|
param_1[0x15] = 0;
|
|
|
|
*param_1 = &PTR_LAB_00795d48;
|
|
|
|
param_1[1] = &PTR_LAB_00795cf8;
|
|
|
|
param_1[7] = &PTR_FUN_00795ce8;
|
|
|
|
param_1[9] = &PTR_LAB_00795cdc;
|
|
|
|
param_1[10] = &PTR_LAB_00795ccc;
|
|
|
|
param_1[0x17] = 1;
|
|
|
|
param_1[0x16] = &PTR_LAB_00793b6c;
|
|
|
|
pLVar1 = (LONG *)(PTR_DAT_00818344 + -0x10);
|
|
|
|
param_1[0x18] = PTR_DAT_00818344;
|
|
|
|
InterlockedIncrement(pLVar1);
|
|
|
|
pLVar1 = (LONG *)(PTR_DAT_00818344 + -0x10);
|
|
|
|
param_1[0x19] = PTR_DAT_00818344;
|
|
|
|
InterlockedIncrement(pLVar1);
|
|
|
|
param_1[0x1a] = 1;
|
|
|
|
param_1[0x1b] = 0;
|
|
|
|
param_1[0x1c] = 1;
|
|
|
|
pLVar1 = (LONG *)(DAT_008ef11c + 4);
|
|
|
|
param_1[0x1d] = DAT_008ef11c;
|
|
|
|
InterlockedIncrement(pLVar1);
|
|
|
|
param_1[0x1e] = 0;
|
|
|
|
param_1[0x1f] = 0;
|
|
|
|
param_1[0x20] = 0;
|
|
|
|
pLVar1 = (LONG *)(PTR_DAT_00818344 + -0x10);
|
|
|
|
param_1[0x21] = PTR_DAT_00818344;
|
|
|
|
InterlockedIncrement(pLVar1);
|
|
|
|
pLVar1 = (LONG *)(PTR_DAT_00818344 + -0x10);
|
|
|
|
param_1[0x22] = PTR_DAT_00818344;
|
|
|
|
InterlockedIncrement(pLVar1);
|
|
|
|
pLVar1 = (LONG *)(PTR_DAT_00818344 + -0x10);
|
|
|
|
param_1[0x23] = PTR_DAT_00818344;
|
|
|
|
InterlockedIncrement(pLVar1);
|
|
|
|
param_1[0x24] = 0;
|
|
|
|
param_1[0x25] = 0x1c88;
|
|
|
|
param_1[0x26] = 0;
|
|
|
|
param_1[0x27] = 0;
|
|
|
|
param_1[0x28] = 0;
|
|
|
|
param_1[0x29] = 1;
|
|
|
|
pLVar1 = (LONG *)(PTR_DAT_00818340 + -0x10);
|
|
|
|
param_1[0x2a] = PTR_DAT_00818340;
|
|
|
|
InterlockedIncrement(pLVar1);
|
|
|
|
param_1[0x2b] = 0;
|
|
|
|
param_1[0x2c] = 0;
|
|
|
|
*(undefined1 *)(param_1 + 0x2d) = 0;
|
|
|
|
FUN_005414a0();
|
|
|
|
param_1[0x40] = 0;
|
|
|
|
param_1[0x41] = 0;
|
|
|
|
param_1[0x42] = 0;
|
|
|
|
pLVar1 = (LONG *)(PTR_DAT_00818344 + -0x10);
|
|
|
|
param_1[0x43] = PTR_DAT_00818344;
|
|
|
|
InterlockedIncrement(pLVar1);
|
|
|
|
*(undefined1 *)(param_1 + 0x44) = 0;
|
|
|
|
param_1[0x45] = 0;
|
|
|
|
param_1[0x46] = 0;
|
|
|
|
param_1[0x48] = 0;
|
|
|
|
param_1[0x49] = 0;
|
|
|
|
param_1[0x4a] = 0;
|
|
|
|
param_1[0x4b] = 0;
|
|
|
|
param_1[0x4c] = 0;
|
|
|
|
DAT_008379e4 = param_1;
|
|
|
|
FUN_00556eb0();
|
|
|
|
FUN_00405e60(0x100,1);
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00413040 at 0x00413040 (size: 34) ---
|
|
|
|
|
|
int __thiscall FUN_00413040(int param_1,byte param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
FUN_00412b70();
|
|
|
|
if ((param_2 & 1) != 0) {
|
|
|
|
operator_delete((void *)(param_1 + -0x1c));
|
|
|
|
}
|
|
|
|
return param_1 + -0x1c;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00413180 at 0x00413180 (size: 714) ---
|
|
|
|
|
|
undefined4 * __thiscall FUN_00413180(int *param_1,undefined4 *param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
undefined *puVar2;
|
|
|
|
HMODULE pHVar3;
|
|
|
|
LONG LVar4;
|
|
|
|
undefined4 *puVar5;
|
|
|
|
int iStack_1fc;
|
|
|
|
undefined *puStack_1f8;
|
|
|
|
undefined **ppuStack_1f4;
|
|
|
|
int iStack_1f0;
|
|
|
|
int iStack_1ec;
|
|
|
|
int iStack_1e8;
|
|
|
|
undefined4 uStack_1e4;
|
|
|
|
undefined4 uStack_1e0;
|
|
|
|
undefined4 uStack_1dc;
|
|
|
|
undefined4 uStack_1d8;
|
|
|
|
undefined4 uStack_1d4;
|
|
|
|
undefined4 *puStack_1d0;
|
|
|
|
int iStack_1cc;
|
|
|
|
uint uStack_1c8;
|
|
|
|
undefined1 auStack_1c4 [24];
|
|
|
|
undefined4 uStack_1ac;
|
|
|
|
undefined4 uStack_1a8;
|
|
|
|
undefined1 auStack_120 [144];
|
|
|
|
undefined1 auStack_90 [144];
|
|
|
|
|
|
|
|
(**(code **)(*param_1 + 0x78))();
|
|
|
|
iStack_1cc = param_1[0x26];
|
|
|
|
iStack_1fc = param_1[0x25];
|
|
|
|
iVar1 = param_1[0x23];
|
|
|
|
if (iStack_1cc == 0) {
|
|
|
|
iStack_1cc = param_1[0x45];
|
|
|
|
}
|
|
|
|
FUN_0040e4e0(param_1 + 10);
|
|
|
|
puStack_1d0 = DAT_008ef11c;
|
|
|
|
uStack_1e4 = 0;
|
|
|
|
uStack_1e0 = 0;
|
|
|
|
uStack_1dc = 0;
|
|
|
|
uStack_1d8 = 0;
|
|
|
|
uStack_1d4 = 0;
|
|
|
|
InterlockedIncrement(DAT_008ef11c + 1);
|
|
|
|
uStack_1c8 = (uint)*(byte *)(param_1 + 0x44);
|
|
|
|
FUN_004034c0(param_1[0x43]);
|
|
|
|
pHVar3 = LoadLibraryA("acpl.dll");
|
|
|
|
if ((pHVar3 != (HMODULE)0x0) || (pHVar3 = LoadLibraryA("pl.dll"), pHVar3 != (HMODULE)0x0)) {
|
|
|
|
puVar2 = PTR_FUN_00837388;
|
|
|
|
iStack_1ec = (*(code *)PTR_FUN_00837388)(pHVar3,"LogWireDataReceived");
|
|
|
|
uStack_1e0 = (*(code *)puVar2)(pHVar3,"LogWireDataSent");
|
|
|
|
}
|
|
|
|
FUN_00413980();
|
|
|
|
FUN_00545bd0(&ppuStack_1f4,iStack_1fc,iVar1,auStack_1c4,param_1 + 0x2e,&uStack_1e4);
|
|
|
|
if (iStack_1f0 == DAT_00822344) {
|
|
|
|
if (iStack_1ec == DAT_00822348) {
|
|
|
|
iVar1 = param_1[0xc];
|
|
|
|
while (iVar1 < 3) {
|
|
|
|
FUN_00411630();
|
|
|
|
iVar1 = param_1[0xc];
|
|
|
|
}
|
|
|
|
iStack_1f0 = param_1[0x13];
|
|
|
|
iStack_1ec = param_1[0x14];
|
|
|
|
}
|
|
|
|
if ((iStack_1f0 == DAT_00822344) && (iStack_1ec == DAT_00822348)) {
|
|
|
|
*(undefined1 *)(param_1 + 0x2d) = 1;
|
|
|
|
goto LAB_004133fd;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
FUN_0042dc80();
|
|
|
|
FUN_0042c9c0(iStack_1f0,iStack_1ec);
|
|
|
|
FUN_0042e510(auStack_120);
|
|
|
|
FUN_0042e590();
|
|
|
|
FUN_0042e510(auStack_90);
|
|
|
|
FUN_0042e590();
|
|
|
|
FUN_00412ae0(&iStack_1fc);
|
|
|
|
FUN_00408fd0(&iStack_1e8,0);
|
|
|
|
puVar5 = (undefined4 *)(iStack_1fc + -0x14);
|
|
|
|
LVar4 = InterlockedDecrement((LONG *)(iStack_1fc + -0x10));
|
|
|
|
if ((LVar4 == 0) && (puVar5 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar5)(1);
|
|
|
|
}
|
|
|
|
puStack_1f8 = PTR_DAT_00818344;
|
|
|
|
InterlockedIncrement((LONG *)(PTR_DAT_00818344 + -0x10));
|
|
|
|
FUN_00402710(&puStack_1f8,"Failed to establish connection to the server: %s (%8X:%08X)",iStack_1e8
|
|
|
|
,uStack_1a8,uStack_1ac);
|
|
|
|
FUN_00555860(puStack_1f8);
|
|
|
|
puVar5 = (undefined4 *)(puStack_1f8 + -0x14);
|
|
|
|
LVar4 = InterlockedDecrement((LONG *)(puStack_1f8 + -0x10));
|
|
|
|
if ((LVar4 == 0) && (puVar5 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar5)(1);
|
|
|
|
}
|
|
|
|
LVar4 = InterlockedDecrement((LONG *)(iStack_1e8 + -0x10));
|
|
|
|
if ((LVar4 == 0) && ((undefined4 *)(iStack_1e8 + -0x14) != (undefined4 *)0x0)) {
|
|
|
|
(*(code *)**(undefined4 **)(iStack_1e8 + -0x14))(1);
|
|
|
|
}
|
|
|
|
FUN_0042e590();
|
|
|
|
LAB_004133fd:
|
|
|
|
param_2[2] = iStack_1ec;
|
|
|
|
*param_2 = &PTR_FUN_00795878;
|
|
|
|
param_2[1] = iStack_1f0;
|
|
|
|
ppuStack_1f4 = &PTR_FUN_0079385c;
|
|
|
|
FUN_00695670();
|
|
|
|
puVar5 = puStack_1d0;
|
|
|
|
LVar4 = InterlockedDecrement(puStack_1d0 + 1);
|
|
|
|
if ((LVar4 == 0) && (puVar5 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar5)(1);
|
|
|
|
}
|
|
|
|
return param_2;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00413470 at 0x00413470 (size: 64) ---
|
|
|
|
|
|
undefined4 * __thiscall FUN_00413470(undefined4 *param_1,byte param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
*param_1 = &PTR_FUN_00795ef8;
|
|
|
|
if ((undefined4 *)param_1[0x18] != param_1 + 1) {
|
|
|
|
operator_delete__((undefined4 *)param_1[0x18]);
|
|
|
|
}
|
|
|
|
param_1[0x18] = 0;
|
|
|
|
param_1[0x19] = 0;
|
|
|
|
param_1[0x1a] = 0;
|
|
|
|
param_1[0x1b] = 0;
|
|
|
|
if ((param_2 & 1) != 0) {
|
|
|
|
operator_delete(param_1);
|
|
|
|
}
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_004134b0 at 0x004134B0 (size: 25) ---
|
|
|
|
|
|
void __fastcall FUN_004134b0(int *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
undefined4 uVar2;
|
|
|
|
|
|
|
|
iVar1 = *param_1;
|
|
|
|
if (*(int *)(iVar1 + -8) == -1) {
|
|
|
|
uVar2 = FUN_004016b0(iVar1);
|
|
|
|
*(undefined4 *)(iVar1 + -8) = uVar2;
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_004134d0 at 0x004134D0 (size: 16) ---
|
|
|
|
|
|
int FUN_004134d0(int *param_1,int *param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
return *param_2 - *param_1 >> 2;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_004134e0 at 0x004134E0 (size: 18) ---
|
|
|
|
|
|
void FUN_004134e0(int *param_1,int param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
*param_1 = *param_1 + param_2 * 4;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00413500 at 0x00413500 (size: 102) ---
|
|
|
|
|
|
undefined4 * FUN_00413500(undefined4 *param_1,undefined4 param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
LONG LVar1;
|
|
|
|
undefined4 *puVar2;
|
|
|
|
undefined *local_4;
|
|
|
|
|
|
|
|
local_4 = PTR_DAT_00818344;
|
|
|
|
InterlockedIncrement((LONG *)(PTR_DAT_00818344 + -0x10));
|
|
|
|
FUN_00402710(&local_4,"\'<unknowable file>\' (did=0x%08X)",param_2);
|
|
|
|
*param_1 = local_4;
|
|
|
|
InterlockedIncrement((LONG *)(local_4 + -0x10));
|
|
|
|
puVar2 = (undefined4 *)(local_4 + -0x14);
|
|
|
|
LVar1 = InterlockedDecrement((LONG *)(local_4 + -0x10));
|
|
|
|
if ((LVar1 == 0) && (puVar2 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar2)(1);
|
|
|
|
}
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00413570 at 0x00413570 (size: 213) ---
|
|
|
|
|
|
void FUN_00413570(undefined4 param_1,undefined4 param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
LONG LVar1;
|
|
|
|
undefined4 *puVar2;
|
|
|
|
undefined *local_c;
|
|
|
|
undefined *local_8;
|
|
|
|
int local_4;
|
|
|
|
|
|
|
|
FUN_00413500(&local_4,param_1);
|
|
|
|
local_8 = PTR_DAT_00818344;
|
|
|
|
InterlockedIncrement((LONG *)(PTR_DAT_00818344 + -0x10));
|
|
|
|
FUN_00402390(param_2,&stack0x0000000c);
|
|
|
|
local_c = PTR_DAT_00818344;
|
|
|
|
InterlockedIncrement((LONG *)(PTR_DAT_00818344 + -0x10));
|
|
|
|
FUN_00402710(&local_c,"Error in file \"%s\": %s\n",local_4,local_8);
|
|
|
|
FUN_0065af70(&local_c);
|
|
|
|
puVar2 = (undefined4 *)(local_c + -0x14);
|
|
|
|
LVar1 = InterlockedDecrement((LONG *)(local_c + -0x10));
|
|
|
|
if ((LVar1 == 0) && (puVar2 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar2)(1);
|
|
|
|
}
|
|
|
|
puVar2 = (undefined4 *)(local_8 + -0x14);
|
|
|
|
LVar1 = InterlockedDecrement((LONG *)(local_8 + -0x10));
|
|
|
|
if ((LVar1 == 0) && (puVar2 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar2)(1);
|
|
|
|
}
|
|
|
|
LVar1 = InterlockedDecrement((LONG *)(local_4 + -0x10));
|
|
|
|
if ((LVar1 == 0) && ((undefined4 *)(local_4 + -0x14) != (undefined4 *)0x0)) {
|
|
|
|
(*(code *)**(undefined4 **)(local_4 + -0x14))(1);
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00413650 at 0x00413650 (size: 143) ---
|
|
|
|
|
|
undefined4 * __thiscall FUN_00413650(undefined4 *param_1,undefined4 param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined *puVar1;
|
|
|
|
uint *puVar2;
|
|
|
|
undefined4 uVar3;
|
|
|
|
uint uVar4;
|
|
|
|
int iVar5;
|
|
|
|
undefined4 *puVar6;
|
|
|
|
|
|
|
|
param_1[0x18] = 0;
|
|
|
|
param_1[0x19] = 0;
|
|
|
|
param_1[0x1a] = 0;
|
|
|
|
param_1[0x1b] = 0;
|
|
|
|
*param_1 = &PTR_FUN_00795ef8;
|
|
|
|
puVar1 = PTR_DAT_00818558;
|
|
|
|
puVar2 = (uint *)FUN_00422d20(PTR_DAT_00818554,PTR_DAT_00818558,¶m_2,param_2,0);
|
|
|
|
if (puVar2 == (uint *)puVar1) {
|
|
|
|
puVar2 = puVar2 + -1;
|
|
|
|
}
|
|
|
|
uVar4 = *puVar2;
|
|
|
|
param_1[0x1a] = uVar4;
|
|
|
|
if (uVar4 < 0x18) {
|
|
|
|
param_1[0x18] = param_1 + 1;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
uVar3 = thunk_FUN_005df0f5(uVar4 << 2);
|
|
|
|
param_1[0x18] = uVar3;
|
|
|
|
}
|
|
|
|
param_1[0x19] = (undefined4 *)param_1[0x18] + param_1[0x1a];
|
|
|
|
puVar6 = (undefined4 *)param_1[0x18];
|
|
|
|
for (uVar4 = param_1[0x1a] & 0x3fffffff; uVar4 != 0; uVar4 = uVar4 - 1) {
|
|
|
|
*puVar6 = 0;
|
|
|
|
puVar6 = puVar6 + 1;
|
|
|
|
}
|
|
|
|
for (iVar5 = 0; iVar5 != 0; iVar5 = iVar5 + -1) {
|
|
|
|
*(undefined1 *)puVar6 = 0;
|
|
|
|
puVar6 = (undefined4 *)((int)puVar6 + 1);
|
|
|
|
}
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_004136e0 at 0x004136E0 (size: 58) ---
|
|
|
|
|
|
void __fastcall FUN_004136e0(undefined4 *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
*param_1 = &PTR_FUN_00795f38;
|
|
|
|
FUN_00433a10();
|
|
|
|
param_1[1] = &PTR_FUN_00795ef8;
|
|
|
|
if ((undefined4 *)param_1[0x19] != param_1 + 2) {
|
|
|
|
operator_delete__((undefined4 *)param_1[0x19]);
|
|
|
|
}
|
|
|
|
param_1[0x19] = 0;
|
|
|
|
param_1[0x1a] = 0;
|
|
|
|
param_1[0x1b] = 0;
|
|
|
|
param_1[0x1c] = 0;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00413720 at 0x00413720 (size: 82) ---
|
|
|
|
|
|
undefined4 * __thiscall FUN_00413720(undefined4 *param_1,byte param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
*param_1 = &PTR_FUN_00795f38;
|
|
|
|
FUN_00433a10();
|
|
|
|
param_1[1] = &PTR_FUN_00795ef8;
|
|
|
|
if ((undefined4 *)param_1[0x19] != param_1 + 2) {
|
|
|
|
operator_delete__((undefined4 *)param_1[0x19]);
|
|
|
|
}
|
|
|
|
param_1[0x19] = 0;
|
|
|
|
param_1[0x1a] = 0;
|
|
|
|
param_1[0x1b] = 0;
|
|
|
|
param_1[0x1c] = 0;
|
|
|
|
if ((param_2 & 1) != 0) {
|
|
|
|
operator_delete(param_1);
|
|
|
|
}
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_004137f0 at 0x004137F0 (size: 95) ---
|
|
|
|
|
|
undefined4 * FUN_004137f0(void)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined4 *puVar1;
|
|
|
|
|
|
|
|
if (DAT_00837b9c == (undefined4 *)0x0) {
|
|
|
|
puVar1 = (undefined4 *)FUN_005df0f5(0x80);
|
|
|
|
if (puVar1 == (undefined4 *)0x0) {
|
|
|
|
DAT_00837b9c = (undefined4 *)0x0;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
puVar1[1] = 1;
|
|
|
|
*puVar1 = &PTR_FUN_00795f3c;
|
|
|
|
*(undefined1 *)(puVar1 + 2) = 0;
|
|
|
|
*(undefined1 *)((int)puVar1 + 9) = 0;
|
|
|
|
puVar1[3] = &PTR_FUN_00795f38;
|
|
|
|
FUN_00413650(0x17);
|
|
|
|
DAT_00837b9c = puVar1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
InterlockedIncrement(DAT_00837b9c + 1);
|
|
|
|
return DAT_00837b9c;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00413850 at 0x00413850 (size: 210) ---
|
|
|
|
|
|
void FUN_00413850(int param_1,int *param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined4 *puVar1;
|
|
|
|
LONG LVar2;
|
|
|
|
int iVar3;
|
|
|
|
undefined4 uVar4;
|
|
|
|
|
|
|
|
puVar1 = (undefined4 *)FUN_0040f4c0();
|
|
|
|
FUN_0065af30(puVar1);
|
|
|
|
LVar2 = InterlockedDecrement(puVar1 + 1);
|
|
|
|
if ((LVar2 == 0) && (puVar1 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar1)(1);
|
|
|
|
}
|
|
|
|
if (param_1 != 0) {
|
|
|
|
if (param_1 == 1) {
|
|
|
|
puVar1 = (undefined4 *)FUN_0040eb60();
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
if (param_1 != 2) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
puVar1 = (undefined4 *)FUN_0040eb40();
|
|
|
|
}
|
|
|
|
FUN_0065af30(puVar1);
|
|
|
|
LVar2 = InterlockedDecrement(puVar1 + 1);
|
|
|
|
if ((LVar2 == 0) && (puVar1 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar1)(1);
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
if (*(int *)(*param_2 + -4) == 1) {
|
|
|
|
uVar4 = FUN_004137f0();
|
|
|
|
FUN_0065af30(uVar4);
|
|
|
|
FUN_00405f70();
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
iVar3 = FUN_005df0f5(0x18);
|
|
|
|
if (iVar3 == 0) {
|
|
|
|
FUN_0065af30(0);
|
|
|
|
FUN_00405f70();
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
uVar4 = FUN_0040f020(*param_2);
|
|
|
|
FUN_0065af30(uVar4);
|
|
|
|
FUN_00405f70();
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00413930 at 0x00413930 (size: 39) ---
|
|
|
|
|
|
undefined4 * __thiscall FUN_00413930(undefined4 *param_1,byte param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
FUN_004136e0();
|
|
|
|
*param_1 = &PTR_FUN_007952f4;
|
|
|
|
if ((param_2 & 1) != 0) {
|
|
|
|
operator_delete(param_1);
|
|
|
|
}
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00413960 at 0x00413960 (size: 19) ---
|
|
|
|
|
|
void __fastcall FUN_00413960(undefined4 *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
*param_1 = 0;
|
|
|
|
param_1[1] = 0;
|
|
|
|
param_1[2] = 0;
|
|
|
|
param_1[3] = 0;
|
|
|
|
param_1[4] = 0;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00413980 at 0x00413980 (size: 21) ---
|
|
|
|
|
|
void __fastcall FUN_00413980(undefined4 *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
*param_1 = 0;
|
|
|
|
param_1[1] = 0;
|
|
|
|
param_1[2] = 0;
|
|
|
|
param_1[3] = 0;
|
|
|
|
param_1[4] = 0;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_004139a0 at 0x004139A0 (size: 45) ---
|
|
|
|
|
|
void __thiscall FUN_004139a0(undefined4 *param_1,undefined4 *param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
*param_1 = *param_2;
|
|
|
|
param_1[1] = param_2[1];
|
|
|
|
param_1[2] = param_2[2];
|
|
|
|
param_1[3] = param_2[3];
|
|
|
|
param_1[4] = param_2[4];
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_004139d0 at 0x004139D0 (size: 46) ---
|
|
|
|
|
|
void __fastcall FUN_004139d0(int param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
if (DAT_00837bac != 0) {
|
|
|
|
(**(code **)(*(int *)(DAT_00837bac + 4) + 0x34))(DAT_00818684);
|
|
|
|
}
|
|
|
|
DAT_00818684 = DAT_00837c20;
|
|
|
|
/* WARNING: Could not recover jumptable at 0x004139fb. Too many branches */
|
|
|
|
/* WARNING: Treating indirect jump as call */
|
|
|
|
(**(code **)(*(int *)(param_1 + 4) + 0x58))();
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00413a00 at 0x00413A00 (size: 34) ---
|
|
|
|
|
|
undefined4 FUN_00413a00(undefined4 param_1,undefined4 param_2,undefined4 param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined4 uVar1;
|
|
|
|
|
|
|
|
if (DAT_00837bac != (int *)0x0) {
|
|
|
|
uVar1 = (**(code **)(*DAT_00837bac + 0x24))(param_1,param_2,param_3);
|
|
|
|
return uVar1;
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00413a30 at 0x00413A30 (size: 24) ---
|
|
|
|
|
|
undefined4 FUN_00413a30(undefined4 param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined4 uVar1;
|
|
|
|
|
|
|
|
if (DAT_00837bac != (int *)0x0) {
|
|
|
|
uVar1 = (**(code **)(*DAT_00837bac + 0x2c))(param_1);
|
|
|
|
return uVar1;
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00413a50 at 0x00413A50 (size: 27) ---
|
|
|
|
|
|
undefined4 FUN_00413a50(undefined4 *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined4 uVar1;
|
|
|
|
|
|
|
|
if (DAT_00837bac != 0) {
|
|
|
|
uVar1 = *(undefined4 *)(DAT_00837bac + 0x120);
|
|
|
|
*param_1 = uVar1;
|
|
|
|
return CONCAT31((int3)((uint)uVar1 >> 8),1);
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00413a70 at 0x00413A70 (size: 19) ---
|
|
|
|
|
|
undefined4 FUN_00413a70(void)
|
|
|
|
|
|
|
|
{
|
|
|
|
if (DAT_00837bac != 0) {
|
|
|
|
return CONCAT31((int3)((uint)DAT_00837bac >> 8),*(undefined1 *)(DAT_00837bac + 0x128));
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00413a90 at 0x00413A90 (size: 19) ---
|
|
|
|
|
|
undefined4 FUN_00413a90(void)
|
|
|
|
|
|
|
|
{
|
|
|
|
if (DAT_00837bac != 0) {
|
|
|
|
return CONCAT31((int3)((uint)DAT_00837bac >> 8),*(undefined1 *)(DAT_00837bac + 0x129));
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00413ab0 at 0x00413AB0 (size: 19) ---
|
|
|
|
|
|
undefined4 FUN_00413ab0(void)
|
|
|
|
|
|
|
|
{
|
|
|
|
if (DAT_00837bac != 0) {
|
|
|
|
return CONCAT31((int3)((uint)DAT_00837bac >> 8),*(undefined1 *)(DAT_00837bac + 0x12a));
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00413ad0 at 0x00413AD0 (size: 15) ---
|
|
|
|
|
|
undefined4 __thiscall FUN_00413ad0(int param_1,undefined4 param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
*(undefined4 *)(param_1 + 0x120) = param_2;
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00413ae0 at 0x00413AE0 (size: 29) ---
|
|
|
|
|
|
uint FUN_00413ae0(undefined4 param_1,undefined4 param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
uint in_EAX;
|
|
|
|
uint uVar1;
|
|
|
|
|
|
|
|
if (DAT_00837bac != (int *)0x0) {
|
|
|
|
uVar1 = (**(code **)(*DAT_00837bac + 0x4c))(param_1,param_2);
|
|
|
|
return uVar1;
|
|
|
|
}
|
|
|
|
return in_EAX & 0xffffff00;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00413b00 at 0x00413B00 (size: 19) ---
|
|
|
|
|
|
undefined4 FUN_00413b00(void)
|
|
|
|
|
|
|
|
{
|
|
|
|
if (DAT_00837bac != 0) {
|
|
|
|
return *(undefined4 *)(DAT_00837bac + 0x124);
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00413b30 at 0x00413B30 (size: 47) ---
|
|
|
|
|
|
undefined4 * __thiscall FUN_00413b30(undefined4 *param_1,byte param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
*param_1 = &PTR_FUN_00795f70;
|
|
|
|
if ((void *)param_1[1] != (void *)0x0) {
|
|
|
|
operator_delete__((void *)param_1[1]);
|
|
|
|
}
|
|
|
|
if ((param_2 & 1) != 0) {
|
|
|
|
operator_delete(param_1);
|
|
|
|
}
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00413b60 at 0x00413B60 (size: 25) ---
|
|
|
|
|
|
void __thiscall FUN_00413b60(int param_1,undefined4 *param_2,undefined4 param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined4 uVar1;
|
|
|
|
|
|
|
|
uVar1 = *(undefined4 *)(param_1 + 0x11c);
|
|
|
|
*(undefined4 *)(param_1 + 0x11c) = param_3;
|
|
|
|
*param_2 = uVar1;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00413b80 at 0x00413B80 (size: 49) ---
|
|
|
|
|
|
void FUN_00413b80(undefined4 param_1,undefined4 param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined4 *puVar1;
|
|
|
|
undefined4 uVar2;
|
|
|
|
|
|
|
|
puVar1 = *(undefined4 **)(DAT_00837bac + 4);
|
|
|
|
uVar2 = FUN_004220b0(param_1,param_2);
|
|
|
|
(*(code *)*puVar1)(2,uVar2);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00413bc0 at 0x00413BC0 (size: 48) ---
|
|
|
|
|
|
undefined4 * FUN_00413bc0(undefined4 *param_1,undefined4 param_2,undefined4 param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
if (DAT_00837bac != (int *)0x0) {
|
|
|
|
(**(code **)(*DAT_00837bac + 0x28))(param_1,param_2,param_3);
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
*param_1 = DAT_00837bb0;
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00413d20 at 0x00413D20 (size: 185) ---
|
|
|
|
|
|
char __thiscall FUN_00413d20(int param_1,undefined4 param_2,undefined4 param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
char cVar1;
|
|
|
|
char cVar2;
|
|
|
|
int *piVar3;
|
|
|
|
int *piVar4;
|
|
|
|
char unaff_BP;
|
|
|
|
undefined4 unaff_ESI;
|
|
|
|
undefined1 local_8 [4];
|
|
|
|
char cStack_4;
|
|
|
|
|
|
|
|
FUN_004220b0(param_2,param_3);
|
|
|
|
piVar3 = (int *)(**(code **)(*(int *)(param_1 + 4) + 0x38))(local_8);
|
|
|
|
if (piVar3 == (int *)0x0) {
|
|
|
|
return '\0';
|
|
|
|
}
|
|
|
|
piVar4 = (int *)(**(code **)(*(int *)(param_1 + 4) + 0x84))(&stack0xfffffff4,piVar3);
|
|
|
|
if (piVar4 == (int *)0x0) {
|
|
|
|
return '\0';
|
|
|
|
}
|
|
|
|
cStack_4 = (char)piVar4[2];
|
|
|
|
if (cStack_4 != '\0') {
|
|
|
|
(**(code **)(*piVar4 + 0x2c))();
|
|
|
|
}
|
|
|
|
(**(code **)(*piVar4 + 0x3c))();
|
|
|
|
cVar1 = (**(code **)(*(int *)(param_1 + 4) + 0x7c))(piVar4,&stack0xffffffec,piVar3);
|
|
|
|
cVar2 = '\0';
|
|
|
|
if ((cVar1 != '\0') && (cVar2 = (**(code **)(*piVar4 + 0x24))(), cVar2 != '\0')) {
|
|
|
|
if (unaff_BP != '\0') {
|
|
|
|
cVar2 = (**(code **)(*piVar4 + 0x28))();
|
|
|
|
}
|
|
|
|
if (cVar2 != '\0') goto LAB_00413dc6;
|
|
|
|
}
|
|
|
|
(**(code **)(*piVar3 + 0x1c))(unaff_ESI);
|
|
|
|
LAB_00413dc6:
|
|
|
|
(**(code **)(*piVar4 + 0x14))();
|
|
|
|
return cVar2;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00413de0 at 0x00413DE0 (size: 108) ---
|
|
|
|
|
|
void FUN_00413de0(int *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
char cVar1;
|
|
|
|
undefined4 uVar2;
|
|
|
|
|
|
|
|
if (DAT_00837bac != 0) {
|
|
|
|
if ((param_1[10] != DAT_00837bb0) && (*(int *)(DAT_00837bac + 300) != 0)) {
|
|
|
|
uVar2 = (**(code **)(*param_1 + 0x48))();
|
|
|
|
cVar1 = FUN_0041c4a0(uVar2);
|
|
|
|
if (cVar1 == '\0') {
|
|
|
|
uVar2 = (**(code **)(*param_1 + 0x48))();
|
|
|
|
switch(uVar2) {
|
|
|
|
case 0x15:
|
|
|
|
case 0x1c:
|
|
|
|
case 0x24:
|
|
|
|
case 0x26:
|
|
|
|
case 0x28:
|
|
|
|
case 0x2d:
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
(**(code **)(*param_1 + 0x40))(*(undefined4 *)(DAT_00837bac + 300));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00413e70 at 0x00413E70 (size: 64) ---
|
|
|
|
|
|
undefined4 * __thiscall FUN_00413e70(undefined4 *param_1,byte param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
*param_1 = &PTR_FUN_00795f84;
|
|
|
|
if ((undefined4 *)param_1[0x18] != param_1 + 1) {
|
|
|
|
operator_delete__((undefined4 *)param_1[0x18]);
|
|
|
|
}
|
|
|
|
param_1[0x18] = 0;
|
|
|
|
param_1[0x19] = 0;
|
|
|
|
param_1[0x1a] = 0;
|
|
|
|
param_1[0x1b] = 0;
|
|
|
|
if ((param_2 & 1) != 0) {
|
|
|
|
operator_delete(param_1);
|
|
|
|
}
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00413eb0 at 0x00413EB0 (size: 64) ---
|
|
|
|
|
|
undefined4 * __thiscall FUN_00413eb0(undefined4 *param_1,byte param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
*param_1 = &PTR_FUN_00795f88;
|
|
|
|
if ((undefined4 *)param_1[0x18] != param_1 + 1) {
|
|
|
|
operator_delete__((undefined4 *)param_1[0x18]);
|
|
|
|
}
|
|
|
|
param_1[0x18] = 0;
|
|
|
|
param_1[0x19] = 0;
|
|
|
|
param_1[0x1a] = 0;
|
|
|
|
param_1[0x1b] = 0;
|
|
|
|
if ((param_2 & 1) != 0) {
|
|
|
|
operator_delete(param_1);
|
|
|
|
}
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00413ef0 at 0x00413EF0 (size: 64) ---
|
|
|
|
|
|
undefined4 * __thiscall FUN_00413ef0(undefined4 *param_1,byte param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
*param_1 = &PTR_FUN_00795f8c;
|
|
|
|
if ((undefined4 *)param_1[0x18] != param_1 + 1) {
|
|
|
|
operator_delete__((undefined4 *)param_1[0x18]);
|
|
|
|
}
|
|
|
|
param_1[0x18] = 0;
|
|
|
|
param_1[0x19] = 0;
|
|
|
|
param_1[0x1a] = 0;
|
|
|
|
param_1[0x1b] = 0;
|
|
|
|
if ((param_2 & 1) != 0) {
|
|
|
|
operator_delete(param_1);
|
|
|
|
}
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00413f30 at 0x00413F30 (size: 64) ---
|
|
|
|
|
|
undefined4 * __thiscall FUN_00413f30(undefined4 *param_1,byte param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
*param_1 = &PTR_FUN_00795f90;
|
|
|
|
if ((undefined4 *)param_1[0x18] != param_1 + 1) {
|
|
|
|
operator_delete__((undefined4 *)param_1[0x18]);
|
|
|
|
}
|
|
|
|
param_1[0x18] = 0;
|
|
|
|
param_1[0x19] = 0;
|
|
|
|
param_1[0x1a] = 0;
|
|
|
|
param_1[0x1b] = 0;
|
|
|
|
if ((param_2 & 1) != 0) {
|
|
|
|
operator_delete(param_1);
|
|
|
|
}
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00413f70 at 0x00413F70 (size: 64) ---
|
|
|
|
|
|
undefined4 * __thiscall FUN_00413f70(undefined4 *param_1,byte param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
*param_1 = &PTR_FUN_00795f94;
|
|
|
|
if ((undefined4 *)param_1[0x18] != param_1 + 1) {
|
|
|
|
operator_delete__((undefined4 *)param_1[0x18]);
|
|
|
|
}
|
|
|
|
param_1[0x18] = 0;
|
|
|
|
param_1[0x19] = 0;
|
|
|
|
param_1[0x1a] = 0;
|
|
|
|
param_1[0x1b] = 0;
|
|
|
|
if ((param_2 & 1) != 0) {
|
|
|
|
operator_delete(param_1);
|
|
|
|
}
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00413fb0 at 0x00413FB0 (size: 160) ---
|
|
|
|
|
|
int __thiscall FUN_00413fb0(int param_1,undefined4 *param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
uint uVar2;
|
|
|
|
uint uVar3;
|
|
|
|
|
|
|
|
if (*(int *)(param_1 + 0x10) == *(int *)(param_1 + 0x14)) {
|
|
|
|
iVar1 = thunk_FUN_005df0f5((*(int *)(param_1 + 0x18) + *(int *)(param_1 + 0x14)) * 4);
|
|
|
|
if (*(int *)(param_1 + 4) != 0) {
|
|
|
|
uVar3 = *(uint *)(param_1 + 8);
|
|
|
|
uVar2 = 0;
|
|
|
|
if (*(int *)(param_1 + 0x10) != 0) {
|
|
|
|
do {
|
|
|
|
*(undefined4 *)(iVar1 + uVar2 * 4) = *(undefined4 *)(*(int *)(param_1 + 4) + uVar3 * 4);
|
|
|
|
uVar3 = (uVar3 + 1) % *(uint *)(param_1 + 0x14);
|
|
|
|
uVar2 = uVar2 + 1;
|
|
|
|
} while (uVar2 < *(uint *)(param_1 + 0x10));
|
|
|
|
}
|
|
|
|
operator_delete__(*(void **)(param_1 + 4));
|
|
|
|
}
|
|
|
|
*(int *)(param_1 + 4) = iVar1;
|
|
|
|
*(undefined4 *)(param_1 + 8) = 0;
|
|
|
|
*(undefined4 *)(param_1 + 0xc) = *(undefined4 *)(param_1 + 0x10);
|
|
|
|
*(int *)(param_1 + 0x14) = *(int *)(param_1 + 0x14) + *(int *)(param_1 + 0x18);
|
|
|
|
}
|
|
|
|
*(undefined4 *)(*(int *)(param_1 + 4) + *(int *)(param_1 + 0xc) * 4) = *param_2;
|
|
|
|
*(uint *)(param_1 + 0xc) = (*(int *)(param_1 + 0xc) + 1U) % *(uint *)(param_1 + 0x14);
|
|
|
|
iVar1 = *(int *)(param_1 + 0x10);
|
|
|
|
*(int *)(param_1 + 0x10) = iVar1 + 1;
|
|
|
|
return iVar1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00414050 at 0x00414050 (size: 130) ---
|
|
|
|
|
|
uint __thiscall FUN_00414050(int param_1,int param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
uint uVar1;
|
|
|
|
uint uVar2;
|
|
|
|
uint uVar3;
|
|
|
|
int iVar4;
|
|
|
|
|
|
|
|
*(int *)(param_1 + 0x10) = *(int *)(param_1 + 0x10) + -1;
|
|
|
|
uVar1 = *(uint *)(param_1 + 0x14);
|
|
|
|
if (param_2 == 0) {
|
|
|
|
uVar2 = *(int *)(param_1 + 8) + 1;
|
|
|
|
*(uint *)(param_1 + 8) = uVar2 % uVar1;
|
|
|
|
return uVar2 / uVar1;
|
|
|
|
}
|
|
|
|
uVar2 = (uVar1 - 1) + *(int *)(param_1 + 0xc);
|
|
|
|
uVar3 = uVar2 / uVar1;
|
|
|
|
*(uint *)(param_1 + 0xc) = uVar2 % uVar1;
|
|
|
|
if (param_2 != *(int *)(param_1 + 0x10)) {
|
|
|
|
uVar1 = *(uint *)(param_1 + 8);
|
|
|
|
uVar2 = (uVar1 + param_2) % *(uint *)(param_1 + 0x14);
|
|
|
|
if ((*(uint *)(param_1 + 0xc) < uVar1) && (uVar1 < uVar2)) {
|
|
|
|
iVar4 = *(uint *)(param_1 + 0x14) - 1;
|
|
|
|
FUN_004140e0(uVar2,uVar2 + 1,iVar4 - uVar2);
|
|
|
|
(*(undefined4 **)(param_1 + 4))[iVar4] = **(undefined4 **)(param_1 + 4);
|
|
|
|
uVar2 = 0;
|
|
|
|
}
|
|
|
|
uVar3 = FUN_004140e0(uVar2,uVar2 + 1,*(int *)(param_1 + 0xc) - uVar2);
|
|
|
|
}
|
|
|
|
return uVar3;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_004140e0 at 0x004140E0 (size: 120) ---
|
|
|
|
|
|
void __thiscall FUN_004140e0(int param_1,uint param_2,uint param_3,int param_4)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
int iVar2;
|
|
|
|
|
|
|
|
if (param_4 != 0) {
|
|
|
|
if (param_2 < param_3) {
|
|
|
|
if (param_4 != 0) {
|
|
|
|
iVar2 = param_2 * 4;
|
|
|
|
iVar1 = param_3 * 4;
|
|
|
|
do {
|
|
|
|
*(undefined4 *)(iVar2 + *(int *)(param_1 + 4)) =
|
|
|
|
*(undefined4 *)(iVar1 + *(int *)(param_1 + 4));
|
|
|
|
iVar1 = iVar1 + 4;
|
|
|
|
iVar2 = iVar2 + 4;
|
|
|
|
param_4 = param_4 + -1;
|
|
|
|
} while (param_4 != 0);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (param_4 != 0) {
|
|
|
|
iVar1 = ((param_2 - 1) + param_4) * 4;
|
|
|
|
iVar2 = ((param_3 - 1) + param_4) * 4;
|
|
|
|
do {
|
|
|
|
*(undefined4 *)(iVar1 + *(int *)(param_1 + 4)) =
|
|
|
|
*(undefined4 *)(iVar2 + *(int *)(param_1 + 4));
|
|
|
|
iVar2 = iVar2 + -4;
|
|
|
|
iVar1 = iVar1 + -4;
|
|
|
|
param_4 = param_4 + -1;
|
|
|
|
} while (param_4 != 0);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00414190 at 0x00414190 (size: 66) ---
|
|
|
|
|
|
void __thiscall FUN_00414190(int param_1,int *param_2,int *param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined4 *puVar1;
|
|
|
|
int *piVar2;
|
|
|
|
|
|
|
|
puVar1 = (undefined4 *)
|
|
|
|
(*(int *)(param_1 + 0x60) +
|
|
|
|
((uint)(*param_3 + param_3[1]) % *(uint *)(param_1 + 0x68)) * 4);
|
|
|
|
for (piVar2 = (int *)*puVar1;
|
|
|
|
(piVar2 != (int *)0x0 && ((*piVar2 != *param_3 || (piVar2[1] != param_3[1]))));
|
|
|
|
piVar2 = (int *)piVar2[2]) {
|
|
|
|
}
|
|
|
|
param_2[1] = (int)puVar1;
|
|
|
|
*param_2 = param_1;
|
|
|
|
param_2[2] = (int)piVar2;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_004141e0 at 0x004141E0 (size: 424) ---
|
|
|
|
|
|
undefined1 FUN_004141e0(void)
|
|
|
|
|
|
|
|
{
|
|
|
|
char cVar1;
|
|
|
|
undefined4 *puVar2;
|
|
|
|
LONG LVar3;
|
|
|
|
int *piVar4;
|
|
|
|
int *piVar5;
|
|
|
|
int local_10;
|
|
|
|
int local_c;
|
|
|
|
int local_8;
|
|
|
|
int iStack_4;
|
|
|
|
|
|
|
|
if (DAT_00837c68 == 0) {
|
|
|
|
puVar2 = (undefined4 *)FUN_005df0f5(4);
|
|
|
|
if (puVar2 == (undefined4 *)0x0) {
|
|
|
|
puVar2 = (undefined4 *)0x0;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
*puVar2 = &PTR_FUN_00795f5c;
|
|
|
|
}
|
|
|
|
cVar1 = FUN_0041c220(puVar2);
|
|
|
|
if (cVar1 == '\0') {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
piVar5 = &local_10;
|
|
|
|
FUN_00401340(&DAT_007954ac);
|
|
|
|
piVar4 = &local_c;
|
|
|
|
FUN_00423430(&local_8,&DAT_00837be4,&local_10,piVar4);
|
|
|
|
FUN_0040bbc0(piVar5,piVar4);
|
|
|
|
puVar2 = (undefined4 *)(local_8 + -0x14);
|
|
|
|
LVar3 = InterlockedDecrement((LONG *)(local_8 + -0x10));
|
|
|
|
if ((LVar3 == 0) && (puVar2 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar2)(1);
|
|
|
|
}
|
|
|
|
puVar2 = (undefined4 *)(local_c + -0x14);
|
|
|
|
LVar3 = InterlockedDecrement((LONG *)(local_c + -0x10));
|
|
|
|
if ((LVar3 == 0) && (puVar2 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar2)(1);
|
|
|
|
}
|
|
|
|
FUN_0041c2e0(&local_10);
|
|
|
|
FUN_00401340(&DAT_007954ac);
|
|
|
|
piVar4 = &local_c;
|
|
|
|
piVar5 = &local_8;
|
|
|
|
FUN_00423430(&iStack_4,&DAT_00837be8,piVar5,piVar4);
|
|
|
|
piVar4 = (int *)FUN_0040bbc0(piVar5,piVar4);
|
|
|
|
if (local_10 != *piVar4) {
|
|
|
|
LVar3 = InterlockedDecrement((LONG *)(local_10 + -0x10));
|
|
|
|
if ((LVar3 == 0) && ((undefined4 *)(local_10 + -0x14) != (undefined4 *)0x0)) {
|
|
|
|
(*(code *)**(undefined4 **)(local_10 + -0x14))(1);
|
|
|
|
}
|
|
|
|
local_10 = *piVar4;
|
|
|
|
InterlockedIncrement((LONG *)(local_10 + -0x10));
|
|
|
|
}
|
|
|
|
LVar3 = InterlockedDecrement((LONG *)(local_8 + -0x10));
|
|
|
|
if ((LVar3 == 0) && ((undefined4 *)(local_8 + -0x14) != (undefined4 *)0x0)) {
|
|
|
|
(*(code *)**(undefined4 **)(local_8 + -0x14))(1);
|
|
|
|
}
|
|
|
|
LVar3 = InterlockedDecrement((LONG *)(iStack_4 + -0x10));
|
|
|
|
if ((LVar3 == 0) && ((undefined4 *)(iStack_4 + -0x14) != (undefined4 *)0x0)) {
|
|
|
|
(*(code *)**(undefined4 **)(iStack_4 + -0x14))(1);
|
|
|
|
}
|
|
|
|
LVar3 = InterlockedDecrement((LONG *)(local_c + -0x10));
|
|
|
|
if ((LVar3 == 0) && ((undefined4 *)(local_c + -0x14) != (undefined4 *)0x0)) {
|
|
|
|
(*(code *)**(undefined4 **)(local_c + -0x14))(1);
|
|
|
|
}
|
|
|
|
FUN_0041c330(&local_10);
|
|
|
|
puVar2 = (undefined4 *)(local_10 + -0x14);
|
|
|
|
LVar3 = InterlockedDecrement((LONG *)(local_10 + -0x10));
|
|
|
|
if ((LVar3 == 0) && (puVar2 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar2)(1);
|
|
|
|
}
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00414390 at 0x00414390 (size: 92) ---
|
|
|
|
|
|
void FUN_00414390(void)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
int *piVar2;
|
|
|
|
int iVar3;
|
|
|
|
undefined1 auStack_c [12];
|
|
|
|
|
|
|
|
FUN_00417710();
|
|
|
|
piVar2 = (int *)FUN_0052dcf0(auStack_c);
|
|
|
|
iVar3 = piVar2[2];
|
|
|
|
iVar1 = *piVar2;
|
|
|
|
piVar2 = (int *)piVar2[1];
|
|
|
|
do {
|
|
|
|
if (iVar3 == 0) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
do {
|
|
|
|
if (*(int *)(iVar3 + 8) != 0) {
|
|
|
|
FUN_00416ac0();
|
|
|
|
}
|
|
|
|
iVar3 = *(int *)(iVar3 + 4);
|
|
|
|
} while (iVar3 != 0);
|
|
|
|
do {
|
|
|
|
piVar2 = piVar2 + 1;
|
|
|
|
if (piVar2 == (int *)(*(int *)(iVar1 + 0x60) + *(int *)(iVar1 + 0x68) * 4)) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
iVar3 = *piVar2;
|
|
|
|
} while (iVar3 == 0);
|
|
|
|
} while( true );
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_004144e0 at 0x004144E0 (size: 82) ---
|
|
|
|
|
|
void FUN_004144e0(uint param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
uint *puVar2;
|
|
|
|
int *piVar3;
|
|
|
|
int iVar4;
|
|
|
|
undefined1 auStack_c [12];
|
|
|
|
|
|
|
|
if (param_1 == 0) {
|
|
|
|
piVar3 = (int *)FUN_0052dcf0(auStack_c);
|
|
|
|
iVar4 = piVar3[2];
|
|
|
|
iVar1 = *piVar3;
|
|
|
|
piVar3 = (int *)piVar3[1];
|
|
|
|
while (iVar4 != 0) {
|
|
|
|
do {
|
|
|
|
if (*(int **)(iVar4 + 8) != (int *)0x0) {
|
|
|
|
(**(code **)(**(int **)(iVar4 + 8) + 0x28))();
|
|
|
|
}
|
|
|
|
iVar4 = *(int *)(iVar4 + 4);
|
|
|
|
} while (iVar4 != 0);
|
|
|
|
do {
|
|
|
|
piVar3 = piVar3 + 1;
|
|
|
|
if (piVar3 == (int *)(*(int *)(iVar1 + 0x60) + *(int *)(iVar1 + 0x68) * 4)) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
iVar4 = *piVar3;
|
|
|
|
} while (iVar4 == 0);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
puVar2 = *(uint **)(DAT_0081866c + (param_1 % DAT_00818674) * 4);
|
|
|
|
if (puVar2 != (uint *)0x0) {
|
|
|
|
while (*puVar2 != param_1) {
|
|
|
|
puVar2 = (uint *)puVar2[1];
|
|
|
|
if (puVar2 == (uint *)0x0) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if ((puVar2 != (uint *)0x0) && (puVar2 + 2 != (uint *)0x0)) {
|
|
|
|
(**(code **)(*(int *)puVar2[2] + 0x28))();
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00414532 at 0x00414532 (size: 90) ---
|
|
|
|
|
|
void FUN_00414532(void)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
int *piVar2;
|
|
|
|
int iVar3;
|
|
|
|
|
|
|
|
piVar2 = (int *)FUN_0052dcf0(&stack0x00000000);
|
|
|
|
iVar3 = piVar2[2];
|
|
|
|
iVar1 = *piVar2;
|
|
|
|
piVar2 = (int *)piVar2[1];
|
|
|
|
do {
|
|
|
|
if (iVar3 == 0) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
do {
|
|
|
|
if (*(int **)(iVar3 + 8) != (int *)0x0) {
|
|
|
|
(**(code **)(**(int **)(iVar3 + 8) + 0x28))();
|
|
|
|
}
|
|
|
|
iVar3 = *(int *)(iVar3 + 4);
|
|
|
|
} while (iVar3 != 0);
|
|
|
|
do {
|
|
|
|
piVar2 = piVar2 + 1;
|
|
|
|
if (piVar2 == (int *)(*(int *)(iVar1 + 0x60) + *(int *)(iVar1 + 0x68) * 4)) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
iVar3 = *piVar2;
|
|
|
|
} while (iVar3 == 0);
|
|
|
|
} while( true );
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00414590 at 0x00414590 (size: 61) ---
|
|
|
|
|
|
uint FUN_00414590(uint param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
uint *puVar1;
|
|
|
|
|
|
|
|
puVar1 = *(uint **)(DAT_0081866c + (param_1 % DAT_00818674) * 4);
|
|
|
|
if (puVar1 != (uint *)0x0) {
|
|
|
|
while (*puVar1 != param_1) {
|
|
|
|
puVar1 = (uint *)puVar1[1];
|
|
|
|
if (puVar1 == (uint *)0x0) {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if ((puVar1 != (uint *)0x0) && (puVar1 + 2 != (uint *)0x0)) {
|
|
|
|
return puVar1[2];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_004145d0 at 0x004145D0 (size: 73) ---
|
|
|
|
|
|
void __fastcall FUN_004145d0(int param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined *puVar1;
|
|
|
|
undefined4 *puVar2;
|
|
|
|
undefined4 local_4;
|
|
|
|
|
|
|
|
puVar1 = PTR_DAT_00818558;
|
|
|
|
local_4 = *(undefined4 *)(param_1 + 0x68);
|
|
|
|
puVar2 = (undefined4 *)FUN_00422d20(PTR_DAT_00818554,PTR_DAT_00818558,&local_4,local_4,0);
|
|
|
|
if ((puVar2 != (undefined4 *)puVar1) || (puVar2 = puVar2 + -1, puVar2 != (undefined4 *)puVar1)) {
|
|
|
|
puVar2 = puVar2 + 1;
|
|
|
|
}
|
|
|
|
FUN_004148b0(*puVar2);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00414620 at 0x00414620 (size: 143) ---
|
|
|
|
|
|
undefined4 FUN_00414620(undefined4 param_1,int param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
int *piVar2;
|
|
|
|
int iVar3;
|
|
|
|
undefined1 local_c [12];
|
|
|
|
|
|
|
|
if (param_2 == 0) {
|
|
|
|
piVar2 = (int *)FUN_0052dcf0(local_c);
|
|
|
|
iVar3 = piVar2[2];
|
|
|
|
iVar1 = *piVar2;
|
|
|
|
piVar2 = (int *)piVar2[1];
|
|
|
|
while (iVar3 != 0) {
|
|
|
|
do {
|
|
|
|
if (*(int *)(iVar3 + 8) != 0) {
|
|
|
|
FUN_00416970(param_1);
|
|
|
|
}
|
|
|
|
iVar3 = *(int *)(iVar3 + 4);
|
|
|
|
} while (iVar3 != 0);
|
|
|
|
do {
|
|
|
|
piVar2 = piVar2 + 1;
|
|
|
|
if (piVar2 == (int *)(*(int *)(iVar1 + 0x60) + *(int *)(iVar1 + 0x68) * 4)) {
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
iVar3 = *piVar2;
|
|
|
|
} while (iVar3 == 0);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
iVar1 = FUN_00414590(param_2);
|
|
|
|
if (iVar1 != 0) {
|
|
|
|
FUN_00416970(param_1);
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00414700 at 0x00414700 (size: 143) ---
|
|
|
|
|
|
undefined4 * __thiscall FUN_00414700(undefined4 *param_1,undefined4 param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined *puVar1;
|
|
|
|
uint *puVar2;
|
|
|
|
undefined4 uVar3;
|
|
|
|
uint uVar4;
|
|
|
|
int iVar5;
|
|
|
|
undefined4 *puVar6;
|
|
|
|
|
|
|
|
param_1[0x18] = 0;
|
|
|
|
param_1[0x19] = 0;
|
|
|
|
param_1[0x1a] = 0;
|
|
|
|
param_1[0x1b] = 0;
|
|
|
|
*param_1 = &PTR_FUN_00795f84;
|
|
|
|
puVar1 = PTR_DAT_00818558;
|
|
|
|
puVar2 = (uint *)FUN_00422d20(PTR_DAT_00818554,PTR_DAT_00818558,¶m_2,param_2,0);
|
|
|
|
if (puVar2 == (uint *)puVar1) {
|
|
|
|
puVar2 = puVar2 + -1;
|
|
|
|
}
|
|
|
|
uVar4 = *puVar2;
|
|
|
|
param_1[0x1a] = uVar4;
|
|
|
|
if (uVar4 < 0x18) {
|
|
|
|
param_1[0x18] = param_1 + 1;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
uVar3 = thunk_FUN_005df0f5(uVar4 << 2);
|
|
|
|
param_1[0x18] = uVar3;
|
|
|
|
}
|
|
|
|
param_1[0x19] = (undefined4 *)param_1[0x18] + param_1[0x1a];
|
|
|
|
puVar6 = (undefined4 *)param_1[0x18];
|
|
|
|
for (uVar4 = param_1[0x1a] & 0x3fffffff; uVar4 != 0; uVar4 = uVar4 - 1) {
|
|
|
|
*puVar6 = 0;
|
|
|
|
puVar6 = puVar6 + 1;
|
|
|
|
}
|
|
|
|
for (iVar5 = 0; iVar5 != 0; iVar5 = iVar5 + -1) {
|
|
|
|
*(undefined1 *)puVar6 = 0;
|
|
|
|
puVar6 = (undefined4 *)((int)puVar6 + 1);
|
|
|
|
}
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00414790 at 0x00414790 (size: 143) ---
|
|
|
|
|
|
undefined4 * __thiscall FUN_00414790(undefined4 *param_1,undefined4 param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined *puVar1;
|
|
|
|
uint *puVar2;
|
|
|
|
undefined4 uVar3;
|
|
|
|
uint uVar4;
|
|
|
|
int iVar5;
|
|
|
|
undefined4 *puVar6;
|
|
|
|
|
|
|
|
param_1[0x18] = 0;
|
|
|
|
param_1[0x19] = 0;
|
|
|
|
param_1[0x1a] = 0;
|
|
|
|
param_1[0x1b] = 0;
|
|
|
|
*param_1 = &PTR_FUN_00795f90;
|
|
|
|
puVar1 = PTR_DAT_00818558;
|
|
|
|
puVar2 = (uint *)FUN_00422d20(PTR_DAT_00818554,PTR_DAT_00818558,¶m_2,param_2,0);
|
|
|
|
if (puVar2 == (uint *)puVar1) {
|
|
|
|
puVar2 = puVar2 + -1;
|
|
|
|
}
|
|
|
|
uVar4 = *puVar2;
|
|
|
|
param_1[0x1a] = uVar4;
|
|
|
|
if (uVar4 < 0x18) {
|
|
|
|
param_1[0x18] = param_1 + 1;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
uVar3 = thunk_FUN_005df0f5(uVar4 << 2);
|
|
|
|
param_1[0x18] = uVar3;
|
|
|
|
}
|
|
|
|
param_1[0x19] = (undefined4 *)param_1[0x18] + param_1[0x1a];
|
|
|
|
puVar6 = (undefined4 *)param_1[0x18];
|
|
|
|
for (uVar4 = param_1[0x1a] & 0x3fffffff; uVar4 != 0; uVar4 = uVar4 - 1) {
|
|
|
|
*puVar6 = 0;
|
|
|
|
puVar6 = puVar6 + 1;
|
|
|
|
}
|
|
|
|
for (iVar5 = 0; iVar5 != 0; iVar5 = iVar5 + -1) {
|
|
|
|
*(undefined1 *)puVar6 = 0;
|
|
|
|
puVar6 = (undefined4 *)((int)puVar6 + 1);
|
|
|
|
}
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00414820 at 0x00414820 (size: 143) ---
|
|
|
|
|
|
undefined4 * __thiscall FUN_00414820(undefined4 *param_1,undefined4 param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined *puVar1;
|
|
|
|
uint *puVar2;
|
|
|
|
undefined4 uVar3;
|
|
|
|
uint uVar4;
|
|
|
|
int iVar5;
|
|
|
|
undefined4 *puVar6;
|
|
|
|
|
|
|
|
param_1[0x18] = 0;
|
|
|
|
param_1[0x19] = 0;
|
|
|
|
param_1[0x1a] = 0;
|
|
|
|
param_1[0x1b] = 0;
|
|
|
|
*param_1 = &PTR_FUN_00795f94;
|
|
|
|
puVar1 = PTR_DAT_00818558;
|
|
|
|
puVar2 = (uint *)FUN_00422d20(PTR_DAT_00818554,PTR_DAT_00818558,¶m_2,param_2,0);
|
|
|
|
if (puVar2 == (uint *)puVar1) {
|
|
|
|
puVar2 = puVar2 + -1;
|
|
|
|
}
|
|
|
|
uVar4 = *puVar2;
|
|
|
|
param_1[0x1a] = uVar4;
|
|
|
|
if (uVar4 < 0x18) {
|
|
|
|
param_1[0x18] = param_1 + 1;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
uVar3 = thunk_FUN_005df0f5(uVar4 << 2);
|
|
|
|
param_1[0x18] = uVar3;
|
|
|
|
}
|
|
|
|
param_1[0x19] = (undefined4 *)param_1[0x18] + param_1[0x1a];
|
|
|
|
puVar6 = (undefined4 *)param_1[0x18];
|
|
|
|
for (uVar4 = param_1[0x1a] & 0x3fffffff; uVar4 != 0; uVar4 = uVar4 - 1) {
|
|
|
|
*puVar6 = 0;
|
|
|
|
puVar6 = puVar6 + 1;
|
|
|
|
}
|
|
|
|
for (iVar5 = 0; iVar5 != 0; iVar5 = iVar5 + -1) {
|
|
|
|
*(undefined1 *)puVar6 = 0;
|
|
|
|
puVar6 = (undefined4 *)((int)puVar6 + 1);
|
|
|
|
}
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_004148b0 at 0x004148B0 (size: 319) ---
|
|
|
|
|
|
undefined4 __thiscall FUN_004148b0(int param_1,int param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
int iVar2;
|
|
|
|
int *piVar3;
|
|
|
|
undefined4 *puVar4;
|
|
|
|
int *piVar5;
|
|
|
|
int *piVar6;
|
|
|
|
undefined4 *puVar7;
|
|
|
|
int *piVar8;
|
|
|
|
uint uVar9;
|
|
|
|
int *piVar10;
|
|
|
|
|
|
|
|
iVar2 = param_2;
|
|
|
|
if (param_2 == *(int *)(param_1 + 0x68)) {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
iVar1 = *(int *)(param_1 + 0x6c);
|
|
|
|
piVar3 = (int *)0x0;
|
|
|
|
do {
|
|
|
|
if (iVar1 == 0) {
|
|
|
|
if (*(void **)(param_1 + 0x60) != (void *)(param_1 + 4)) {
|
|
|
|
operator_delete__(*(void **)(param_1 + 0x60));
|
|
|
|
}
|
|
|
|
*(undefined4 *)(param_1 + 0x60) = 0;
|
|
|
|
*(undefined4 *)(param_1 + 100) = 0;
|
|
|
|
*(undefined4 *)(param_1 + 0x68) = 0;
|
|
|
|
*(undefined4 *)(param_1 + 0x6c) = 0;
|
|
|
|
FUN_00693b20(iVar2);
|
|
|
|
puVar4 = (undefined4 *)PTR_DAT_00818558;
|
|
|
|
while (piVar3 != (int *)0x0) {
|
|
|
|
param_2 = *(int *)(param_1 + 0x68);
|
|
|
|
piVar10 = (int *)piVar3[2];
|
|
|
|
PTR_DAT_00818558 = (undefined *)puVar4;
|
|
|
|
if (param_2 * 2 < *(int *)(param_1 + 0x6c) + 1) {
|
|
|
|
puVar7 = (undefined4 *)FUN_00422d20(PTR_DAT_00818554,puVar4,¶m_2,param_2,0);
|
|
|
|
if ((puVar7 != puVar4) || (puVar7 = puVar7 + -1, puVar7 != puVar4)) {
|
|
|
|
puVar7 = puVar7 + 1;
|
|
|
|
}
|
|
|
|
FUN_004148b0(*puVar7);
|
|
|
|
}
|
|
|
|
uVar9 = (uint)(piVar3[1] + *piVar3) % *(uint *)(param_1 + 0x68);
|
|
|
|
iVar2 = *(int *)(param_1 + 0x60);
|
|
|
|
piVar3[2] = *(int *)(iVar2 + uVar9 * 4);
|
|
|
|
*(int **)(iVar2 + uVar9 * 4) = piVar3;
|
|
|
|
uVar9 = iVar2 + uVar9 * 4;
|
|
|
|
if (uVar9 < *(uint *)(param_1 + 100)) {
|
|
|
|
*(uint *)(param_1 + 100) = uVar9;
|
|
|
|
}
|
|
|
|
*(int *)(param_1 + 0x6c) = *(int *)(param_1 + 0x6c) + 1;
|
|
|
|
puVar4 = (undefined4 *)PTR_DAT_00818558;
|
|
|
|
piVar3 = piVar10;
|
|
|
|
}
|
|
|
|
PTR_DAT_00818558 = (undefined *)puVar4;
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
piVar10 = *(int **)(param_1 + 100);
|
|
|
|
while (piVar10 != (int *)(*(int *)(param_1 + 0x60) + *(int *)(param_1 + 0x68) * 4)) {
|
|
|
|
if (**(int **)(param_1 + 100) != 0) {
|
|
|
|
piVar10 = *(int **)(param_1 + 100);
|
|
|
|
piVar8 = (int *)*piVar10;
|
|
|
|
goto LAB_004148ff;
|
|
|
|
}
|
|
|
|
piVar10 = *(int **)(param_1 + 100) + 1;
|
|
|
|
*(int **)(param_1 + 100) = piVar10;
|
|
|
|
}
|
|
|
|
piVar10 = (int *)0x0;
|
|
|
|
piVar8 = (int *)0x0;
|
|
|
|
LAB_004148ff:
|
|
|
|
piVar6 = (int *)*piVar10;
|
|
|
|
if (piVar6 == piVar8) {
|
|
|
|
LAB_00414912:
|
|
|
|
*piVar10 = piVar6[2];
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
do {
|
|
|
|
piVar5 = piVar6;
|
|
|
|
piVar6 = (int *)piVar5[2];
|
|
|
|
} while (piVar6 != piVar8);
|
|
|
|
if (piVar5 == (int *)0x0) goto LAB_00414912;
|
|
|
|
piVar5[2] = piVar6[2];
|
|
|
|
}
|
|
|
|
*(int *)(param_1 + 0x6c) = *(int *)(param_1 + 0x6c) + -1;
|
|
|
|
piVar8[2] = (int)piVar3;
|
|
|
|
iVar1 = *(int *)(param_1 + 0x6c);
|
|
|
|
piVar3 = piVar8;
|
|
|
|
} while( true );
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_004149f0 at 0x004149F0 (size: 52) ---
|
|
|
|
|
|
undefined4 * __thiscall FUN_004149f0(undefined4 *param_1,undefined4 param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
FUN_00414700(param_2);
|
|
|
|
*param_1 = &PTR_FUN_00795f98;
|
|
|
|
param_1[0x1c] = 0;
|
|
|
|
param_1[0x1d] = 0;
|
|
|
|
param_1[0x1e] = 0;
|
|
|
|
param_1[0x1f] = 0xffffffff;
|
|
|
|
param_1[0x1e] = 0;
|
|
|
|
param_1[0x1d] = 0;
|
|
|
|
param_1[0x1c] = param_1;
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00414a30 at 0x00414A30 (size: 30) ---
|
|
|
|
|
|
void * __thiscall FUN_00414a30(void *param_1,byte param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
FUN_0041a410();
|
|
|
|
if ((param_2 & 1) != 0) {
|
|
|
|
operator_delete(param_1);
|
|
|
|
}
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00414a50 at 0x00414A50 (size: 110) ---
|
|
|
|
|
|
uint __thiscall FUN_00414a50(int param_1,int *param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
uint uVar2;
|
|
|
|
undefined1 local_c [8];
|
|
|
|
uint local_4;
|
|
|
|
|
|
|
|
FUN_00414190(local_c,param_2);
|
|
|
|
if (local_4 != 0) {
|
|
|
|
return local_4 & 0xffffff00;
|
|
|
|
}
|
|
|
|
if (*(int *)(param_1 + 0x68) * 2 < *(int *)(param_1 + 0x6c) + 1) {
|
|
|
|
FUN_004145d0();
|
|
|
|
}
|
|
|
|
uVar2 = (uint)(param_2[1] + *param_2) % *(uint *)(param_1 + 0x68);
|
|
|
|
iVar1 = *(int *)(param_1 + 0x60);
|
|
|
|
param_2[2] = *(int *)(iVar1 + uVar2 * 4);
|
|
|
|
*(int **)(iVar1 + uVar2 * 4) = param_2;
|
|
|
|
uVar2 = iVar1 + uVar2 * 4;
|
|
|
|
if (uVar2 < *(uint *)(param_1 + 100)) {
|
|
|
|
*(uint *)(param_1 + 100) = uVar2;
|
|
|
|
}
|
|
|
|
*(int *)(param_1 + 0x6c) = *(int *)(param_1 + 0x6c) + 1;
|
|
|
|
return CONCAT31((int3)(uVar2 >> 8),1);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00414ac0 at 0x00414AC0 (size: 269) ---
|
|
|
|
|
|
undefined4 __thiscall FUN_00414ac0(int param_1,int param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
int *piVar2;
|
|
|
|
int *piVar3;
|
|
|
|
int *piVar4;
|
|
|
|
undefined4 uVar5;
|
|
|
|
int *piVar6;
|
|
|
|
uint uVar7;
|
|
|
|
int *piVar8;
|
|
|
|
|
|
|
|
if (param_2 == *(int *)(param_1 + 0x68)) {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
iVar1 = *(int *)(param_1 + 0x6c);
|
|
|
|
piVar2 = (int *)0x0;
|
|
|
|
do {
|
|
|
|
if (iVar1 == 0) {
|
|
|
|
if (*(void **)(param_1 + 0x60) != (void *)(param_1 + 4)) {
|
|
|
|
operator_delete__(*(void **)(param_1 + 0x60));
|
|
|
|
}
|
|
|
|
*(undefined4 *)(param_1 + 0x60) = 0;
|
|
|
|
*(undefined4 *)(param_1 + 100) = 0;
|
|
|
|
*(undefined4 *)(param_1 + 0x68) = 0;
|
|
|
|
*(undefined4 *)(param_1 + 0x6c) = 0;
|
|
|
|
FUN_00693b20(param_2);
|
|
|
|
while (piVar2 != (int *)0x0) {
|
|
|
|
piVar8 = (int *)piVar2[2];
|
|
|
|
if (*(int *)(param_1 + 0x68) * 2 < *(int *)(param_1 + 0x6c) + 1) {
|
|
|
|
uVar5 = FUN_004184d0(*(int *)(param_1 + 0x68));
|
|
|
|
FUN_00414ac0(uVar5);
|
|
|
|
}
|
|
|
|
uVar7 = (uint)(piVar2[1] + *piVar2) % *(uint *)(param_1 + 0x68);
|
|
|
|
iVar1 = *(int *)(param_1 + 0x60);
|
|
|
|
piVar2[2] = *(int *)(iVar1 + uVar7 * 4);
|
|
|
|
*(int **)(iVar1 + uVar7 * 4) = piVar2;
|
|
|
|
uVar7 = iVar1 + uVar7 * 4;
|
|
|
|
if (uVar7 < *(uint *)(param_1 + 100)) {
|
|
|
|
*(uint *)(param_1 + 100) = uVar7;
|
|
|
|
}
|
|
|
|
*(int *)(param_1 + 0x6c) = *(int *)(param_1 + 0x6c) + 1;
|
|
|
|
piVar2 = piVar8;
|
|
|
|
}
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
piVar8 = *(int **)(param_1 + 100);
|
|
|
|
while (piVar8 != (int *)(*(int *)(param_1 + 0x60) + *(int *)(param_1 + 0x68) * 4)) {
|
|
|
|
if (**(int **)(param_1 + 100) != 0) {
|
|
|
|
piVar8 = *(int **)(param_1 + 100);
|
|
|
|
piVar6 = (int *)*piVar8;
|
|
|
|
goto LAB_00414b0e;
|
|
|
|
}
|
|
|
|
piVar8 = *(int **)(param_1 + 100) + 1;
|
|
|
|
*(int **)(param_1 + 100) = piVar8;
|
|
|
|
}
|
|
|
|
piVar8 = (int *)0x0;
|
|
|
|
piVar6 = (int *)0x0;
|
|
|
|
LAB_00414b0e:
|
|
|
|
piVar4 = (int *)*piVar8;
|
|
|
|
if (piVar4 == piVar6) {
|
|
|
|
LAB_00414b21:
|
|
|
|
*piVar8 = piVar4[2];
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
do {
|
|
|
|
piVar3 = piVar4;
|
|
|
|
piVar4 = (int *)piVar3[2];
|
|
|
|
} while (piVar4 != piVar6);
|
|
|
|
if (piVar3 == (int *)0x0) goto LAB_00414b21;
|
|
|
|
piVar3[2] = piVar4[2];
|
|
|
|
}
|
|
|
|
*(int *)(param_1 + 0x6c) = *(int *)(param_1 + 0x6c) + -1;
|
|
|
|
piVar6[2] = (int)piVar2;
|
|
|
|
iVar1 = *(int *)(param_1 + 0x6c);
|
|
|
|
piVar2 = piVar6;
|
|
|
|
} while( true );
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00414bd0 at 0x00414BD0 (size: 264) ---
|
|
|
|
|
|
undefined4 __thiscall FUN_00414bd0(int param_1,int param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
uint *puVar2;
|
|
|
|
int *piVar3;
|
|
|
|
uint *puVar4;
|
|
|
|
uint *puVar5;
|
|
|
|
undefined4 uVar6;
|
|
|
|
uint *puVar7;
|
|
|
|
uint uVar8;
|
|
|
|
uint *puVar9;
|
|
|
|
|
|
|
|
if (param_2 == *(int *)(param_1 + 0x68)) {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
iVar1 = *(int *)(param_1 + 0x6c);
|
|
|
|
puVar2 = (uint *)0x0;
|
|
|
|
do {
|
|
|
|
if (iVar1 == 0) {
|
|
|
|
if (*(void **)(param_1 + 0x60) != (void *)(param_1 + 4)) {
|
|
|
|
operator_delete__(*(void **)(param_1 + 0x60));
|
|
|
|
}
|
|
|
|
*(undefined4 *)(param_1 + 0x60) = 0;
|
|
|
|
*(undefined4 *)(param_1 + 100) = 0;
|
|
|
|
*(undefined4 *)(param_1 + 0x68) = 0;
|
|
|
|
*(undefined4 *)(param_1 + 0x6c) = 0;
|
|
|
|
FUN_00693b20(param_2);
|
|
|
|
while (puVar2 != (uint *)0x0) {
|
|
|
|
puVar9 = (uint *)puVar2[1];
|
|
|
|
if (*(int *)(param_1 + 0x68) * 2 < *(int *)(param_1 + 0x6c) + 1) {
|
|
|
|
uVar6 = FUN_004184d0(*(int *)(param_1 + 0x68));
|
|
|
|
FUN_00414bd0(uVar6);
|
|
|
|
}
|
|
|
|
uVar8 = *puVar2 % *(uint *)(param_1 + 0x68);
|
|
|
|
iVar1 = *(int *)(param_1 + 0x60);
|
|
|
|
puVar2[1] = *(uint *)(iVar1 + uVar8 * 4);
|
|
|
|
*(uint **)(iVar1 + uVar8 * 4) = puVar2;
|
|
|
|
uVar8 = iVar1 + uVar8 * 4;
|
|
|
|
if (uVar8 < *(uint *)(param_1 + 100)) {
|
|
|
|
*(uint *)(param_1 + 100) = uVar8;
|
|
|
|
}
|
|
|
|
*(int *)(param_1 + 0x6c) = *(int *)(param_1 + 0x6c) + 1;
|
|
|
|
puVar2 = puVar9;
|
|
|
|
}
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
piVar3 = *(int **)(param_1 + 100);
|
|
|
|
while (piVar3 != (int *)(*(int *)(param_1 + 0x60) + *(int *)(param_1 + 0x68) * 4)) {
|
|
|
|
if (**(int **)(param_1 + 100) != 0) {
|
|
|
|
puVar9 = *(uint **)(param_1 + 100);
|
|
|
|
puVar7 = (uint *)*puVar9;
|
|
|
|
goto LAB_00414c1e;
|
|
|
|
}
|
|
|
|
piVar3 = *(int **)(param_1 + 100) + 1;
|
|
|
|
*(int **)(param_1 + 100) = piVar3;
|
|
|
|
}
|
|
|
|
puVar9 = (uint *)0x0;
|
|
|
|
puVar7 = (uint *)0x0;
|
|
|
|
LAB_00414c1e:
|
|
|
|
puVar5 = (uint *)*puVar9;
|
|
|
|
if (puVar5 == puVar7) {
|
|
|
|
LAB_00414c31:
|
|
|
|
*puVar9 = puVar5[1];
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
do {
|
|
|
|
puVar4 = puVar5;
|
|
|
|
puVar5 = (uint *)puVar4[1];
|
|
|
|
} while (puVar5 != puVar7);
|
|
|
|
if (puVar4 == (uint *)0x0) goto LAB_00414c31;
|
|
|
|
puVar4[1] = puVar5[1];
|
|
|
|
}
|
|
|
|
*(int *)(param_1 + 0x6c) = *(int *)(param_1 + 0x6c) + -1;
|
|
|
|
puVar7[1] = (uint)puVar2;
|
|
|
|
iVar1 = *(int *)(param_1 + 0x6c);
|
|
|
|
puVar2 = puVar7;
|
|
|
|
} while( true );
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00414ce0 at 0x00414CE0 (size: 73) ---
|
|
|
|
|
|
void __fastcall FUN_00414ce0(int param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined *puVar1;
|
|
|
|
undefined4 *puVar2;
|
|
|
|
undefined4 local_4;
|
|
|
|
|
|
|
|
puVar1 = PTR_DAT_00818558;
|
|
|
|
local_4 = *(undefined4 *)(param_1 + 0x68);
|
|
|
|
puVar2 = (undefined4 *)FUN_00422d20(PTR_DAT_00818554,PTR_DAT_00818558,&local_4,local_4,0);
|
|
|
|
if ((puVar2 != (undefined4 *)puVar1) || (puVar2 = puVar2 + -1, puVar2 != (undefined4 *)puVar1)) {
|
|
|
|
puVar2 = puVar2 + 1;
|
|
|
|
}
|
|
|
|
FUN_00414ac0(*puVar2);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00414d30 at 0x00414D30 (size: 73) ---
|
|
|
|
|
|
void __fastcall FUN_00414d30(int param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined *puVar1;
|
|
|
|
undefined4 *puVar2;
|
|
|
|
undefined4 local_4;
|
|
|
|
|
|
|
|
puVar1 = PTR_DAT_00818558;
|
|
|
|
local_4 = *(undefined4 *)(param_1 + 0x68);
|
|
|
|
puVar2 = (undefined4 *)FUN_00422d20(PTR_DAT_00818554,PTR_DAT_00818558,&local_4,local_4,0);
|
|
|
|
if ((puVar2 != (undefined4 *)puVar1) || (puVar2 = puVar2 + -1, puVar2 != (undefined4 *)puVar1)) {
|
|
|
|
puVar2 = puVar2 + 1;
|
|
|
|
}
|
|
|
|
FUN_00414bd0(*puVar2);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00414d80 at 0x00414D80 (size: 112) ---
|
|
|
|
|
|
undefined4 FUN_00414d80(undefined4 *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined4 *puVar1;
|
|
|
|
undefined1 local_c [8];
|
|
|
|
int local_4;
|
|
|
|
|
|
|
|
FUN_00414190(local_c,param_1);
|
|
|
|
if (local_4 != 0) {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
puVar1 = (undefined4 *)FUN_005df0f5(0xc);
|
|
|
|
if (puVar1 != (undefined4 *)0x0) {
|
|
|
|
*puVar1 = *param_1;
|
|
|
|
puVar1[1] = param_1[1];
|
|
|
|
puVar1[2] = 0;
|
|
|
|
FUN_00414a50(puVar1);
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
FUN_00414a50(0);
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00414df0 at 0x00414DF0 (size: 82) ---
|
|
|
|
|
|
undefined4 * __thiscall FUN_00414df0(undefined4 *param_1,byte param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
*param_1 = &PTR_FUN_00795fa0;
|
|
|
|
FUN_0041a390();
|
|
|
|
param_1[1] = &PTR_FUN_00795f94;
|
|
|
|
if ((undefined4 *)param_1[0x19] != param_1 + 2) {
|
|
|
|
operator_delete__((undefined4 *)param_1[0x19]);
|
|
|
|
}
|
|
|
|
param_1[0x19] = 0;
|
|
|
|
param_1[0x1a] = 0;
|
|
|
|
param_1[0x1b] = 0;
|
|
|
|
param_1[0x1c] = 0;
|
|
|
|
if ((param_2 & 1) != 0) {
|
|
|
|
operator_delete(param_1);
|
|
|
|
}
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00414e90 at 0x00414E90 (size: 160) ---
|
|
|
|
|
|
void __thiscall FUN_00414e90(int param_1,undefined4 param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
int iVar2;
|
|
|
|
undefined4 *puVar3;
|
|
|
|
undefined1 local_90 [4];
|
|
|
|
undefined1 local_8c [12];
|
|
|
|
undefined1 local_80 [128];
|
|
|
|
|
|
|
|
iVar2 = FUN_00414190(local_8c,param_2);
|
|
|
|
iVar1 = DAT_00837bac;
|
|
|
|
if ((*(int *)(iVar2 + 8) == 0) && (DAT_00837bac != 0)) {
|
|
|
|
if (DAT_00837c20 == *(int *)(param_1 + 4)) {
|
|
|
|
puVar3 = (undefined4 *)
|
|
|
|
(**(code **)(*(int *)(DAT_00837bac + 4) + 0x14))(local_90,3,param_2,param_1,0);
|
|
|
|
*(undefined4 *)(param_1 + 4) = *puVar3;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
FUN_004149f0(0x20);
|
|
|
|
FUN_0041a4e0(param_2,0);
|
|
|
|
(**(code **)(*(int *)(iVar1 + 4) + 0x30))(*(undefined4 *)(param_1 + 4),3,local_80);
|
|
|
|
FUN_0041a410();
|
|
|
|
}
|
|
|
|
FUN_00414d80(param_2);
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00414f80 at 0x00414F80 (size: 85) ---
|
|
|
|
|
|
int FUN_00414f80(undefined4 param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined4 local_c;
|
|
|
|
undefined4 local_8;
|
|
|
|
int local_4;
|
|
|
|
|
|
|
|
FUN_00414190(&local_c,param_1);
|
|
|
|
if (local_4 != 0) {
|
|
|
|
FUN_00540830(local_c,local_8,local_4);
|
|
|
|
return local_4;
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00415040 at 0x00415040 (size: 105) ---
|
|
|
|
|
|
void __fastcall FUN_00415040(int *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
int *piVar2;
|
|
|
|
int iVar3;
|
|
|
|
|
|
|
|
(**(code **)(*param_1 + 0x38))(1);
|
|
|
|
piVar2 = (int *)FUN_0052dcf0(&stack0xfffffff0);
|
|
|
|
iVar3 = piVar2[2];
|
|
|
|
iVar1 = *piVar2;
|
|
|
|
piVar2 = (int *)piVar2[1];
|
|
|
|
while (iVar3 != 0) {
|
|
|
|
do {
|
|
|
|
if (*(undefined4 **)(iVar3 + 8) != (undefined4 *)0x0) {
|
|
|
|
(**(code **)**(undefined4 **)(iVar3 + 8))(1);
|
|
|
|
}
|
|
|
|
iVar3 = *(int *)(iVar3 + 4);
|
|
|
|
} while (iVar3 != 0);
|
|
|
|
do {
|
|
|
|
piVar2 = piVar2 + 1;
|
|
|
|
if (piVar2 == (int *)(*(int *)(iVar1 + 0x60) + *(int *)(iVar1 + 0x68) * 4)) goto LAB_00415098;
|
|
|
|
iVar3 = *piVar2;
|
|
|
|
} while (iVar3 == 0);
|
|
|
|
}
|
|
|
|
LAB_00415098:
|
|
|
|
FUN_005870f0();
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_004150b0 at 0x004150B0 (size: 82) ---
|
|
|
|
|
|
undefined4 * __thiscall FUN_004150b0(undefined4 *param_1,byte param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
*param_1 = &PTR_FUN_00795f9c;
|
|
|
|
FUN_005870f0();
|
|
|
|
param_1[1] = &PTR_FUN_00795f90;
|
|
|
|
if ((undefined4 *)param_1[0x19] != param_1 + 2) {
|
|
|
|
operator_delete__((undefined4 *)param_1[0x19]);
|
|
|
|
}
|
|
|
|
param_1[0x19] = 0;
|
|
|
|
param_1[0x1a] = 0;
|
|
|
|
param_1[0x1b] = 0;
|
|
|
|
param_1[0x1c] = 0;
|
|
|
|
if ((param_2 & 1) != 0) {
|
|
|
|
operator_delete(param_1);
|
|
|
|
}
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00415110 at 0x00415110 (size: 148) ---
|
|
|
|
|
|
void __fastcall FUN_00415110(int param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
*(undefined ***)(param_1 + 0x94) = &PTR_FUN_007963a4;
|
|
|
|
FUN_005870f0();
|
|
|
|
*(undefined ***)(param_1 + 0x98) = &PTR_FUN_00795f8c;
|
|
|
|
if (*(void **)(param_1 + 0xf8) != (void *)(param_1 + 0x9c)) {
|
|
|
|
operator_delete__(*(void **)(param_1 + 0xf8));
|
|
|
|
}
|
|
|
|
*(undefined4 *)(param_1 + 0xf8) = 0;
|
|
|
|
*(undefined4 *)(param_1 + 0xfc) = 0;
|
|
|
|
*(undefined4 *)(param_1 + 0x100) = 0;
|
|
|
|
*(undefined4 *)(param_1 + 0x104) = 0;
|
|
|
|
*(undefined ***)(param_1 + 0x20) = &PTR_FUN_007963a8;
|
|
|
|
FUN_0041a390();
|
|
|
|
*(undefined ***)(param_1 + 0x24) = &PTR_FUN_00795f88;
|
|
|
|
if (*(void **)(param_1 + 0x84) != (void *)(param_1 + 0x28)) {
|
|
|
|
operator_delete__(*(void **)(param_1 + 0x84));
|
|
|
|
}
|
|
|
|
*(undefined4 *)(param_1 + 0x84) = 0;
|
|
|
|
*(undefined4 *)(param_1 + 0x88) = 0;
|
|
|
|
*(undefined4 *)(param_1 + 0x8c) = 0;
|
|
|
|
*(undefined4 *)(param_1 + 0x90) = 0;
|
|
|
|
*(undefined ***)(param_1 + 4) = &PTR_FUN_00795f70;
|
|
|
|
if (*(void **)(param_1 + 8) != (void *)0x0) {
|
|
|
|
operator_delete__(*(void **)(param_1 + 8));
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_004151b0 at 0x004151B0 (size: 94) ---
|
|
|
|
|
|
void __fastcall FUN_004151b0(undefined4 *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
*param_1 = &PTR_LAB_00796058;
|
|
|
|
param_1[1] = &PTR_FUN_00795fb0;
|
|
|
|
FUN_0041c240();
|
|
|
|
if (DAT_00837bac != 0) {
|
|
|
|
(**(code **)(*(int *)(DAT_00837bac + 4) + 0x34))(DAT_00818684);
|
|
|
|
}
|
|
|
|
DAT_00818684 = DAT_00837c20;
|
|
|
|
DAT_00837bac = 0;
|
|
|
|
DAT_00837ba8 = 0;
|
|
|
|
param_1[0x45] = &PTR_LAB_00793b6c;
|
|
|
|
FUN_00415110();
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00415210 at 0x00415210 (size: 86) ---
|
|
|
|
|
|
void __thiscall FUN_00415210(int *param_1,undefined4 *param_2,int *param_3,undefined4 *param_4)
|
|
|
|
|
|
|
|
{
|
|
|
|
if ((((*param_3 == -0x21524111) && (param_3[1] == DAT_00795f50)) && (param_3[2] == DAT_00795f54))
|
|
|
|
&& ((param_3[3] == DAT_00795f58 && (param_1 != (int *)0x0)))) {
|
|
|
|
*param_4 = param_1;
|
|
|
|
(**(code **)(*param_1 + 0x10))();
|
|
|
|
*param_2 = 0;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
*param_2 = 0x80004002;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00415280 at 0x00415280 (size: 39) ---
|
|
|
|
|
|
int __fastcall FUN_00415280(int *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
|
|
|
|
iVar1 = FUN_00401ea0();
|
|
|
|
if ((iVar1 == 0) && (param_1 != (int *)0x0)) {
|
|
|
|
(**(code **)(*param_1 + 0x18))(1);
|
|
|
|
}
|
|
|
|
return iVar1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00415320 at 0x00415320 (size: 123) ---
|
|
|
|
|
|
undefined4 * __fastcall FUN_00415320(undefined4 *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
FUN_0041a210();
|
|
|
|
*param_1 = &PTR_LAB_00796058;
|
|
|
|
param_1[1] = &PTR_FUN_00795fb0;
|
|
|
|
param_1[0x45] = &PTR_LAB_00793b6c;
|
|
|
|
param_1[0x46] = 1;
|
|
|
|
param_1[0x47] = DAT_00837bb0;
|
|
|
|
param_1[0x48] = 0;
|
|
|
|
param_1[0x49] = 0;
|
|
|
|
*(undefined1 *)(param_1 + 0x4a) = 1;
|
|
|
|
*(undefined1 *)((int)param_1 + 0x129) = 0;
|
|
|
|
*(undefined1 *)((int)param_1 + 0x12a) = 0;
|
|
|
|
param_1[0x4b] = 0;
|
|
|
|
if (DAT_00837bac != (int *)0x0) {
|
|
|
|
(**(code **)(*DAT_00837bac + 0x18))(1);
|
|
|
|
}
|
|
|
|
DAT_00837bac = param_1;
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_004153a0 at 0x004153A0 (size: 30) ---
|
|
|
|
|
|
void * __thiscall FUN_004153a0(void *param_1,byte param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
FUN_004151b0();
|
|
|
|
if ((param_2 & 1) != 0) {
|
|
|
|
operator_delete(param_1);
|
|
|
|
}
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_004153c0 at 0x004153C0 (size: 8) ---
|
|
|
|
|
|
void __fastcall FUN_004153c0(undefined4 param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
FUN_00413de0(param_1);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_004153d0 at 0x004153D0 (size: 33) ---
|
|
|
|
|
|
int __fastcall FUN_004153d0(int param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
|
|
|
|
if (*(int *)(param_1 + 0x20) != 0) {
|
|
|
|
FUN_00416f40(*(undefined4 *)(param_1 + 0x28));
|
|
|
|
return *(int *)(param_1 + 0x24);
|
|
|
|
}
|
|
|
|
iVar1 = *(int *)(param_1 + 0x24) + 1;
|
|
|
|
*(int *)(param_1 + 0x24) = iVar1;
|
|
|
|
return iVar1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00415400 at 0x00415400 (size: 38) ---
|
|
|
|
|
|
int __fastcall FUN_00415400(int *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
|
|
|
|
if ((int *)param_1[8] != (int *)0x0) {
|
|
|
|
iVar1 = (**(code **)(*(int *)param_1[8] + 0x14))(param_1[10]);
|
|
|
|
return iVar1;
|
|
|
|
}
|
|
|
|
iVar1 = param_1[9] + -1;
|
|
|
|
param_1[9] = iVar1;
|
|
|
|
if (iVar1 == 0) {
|
|
|
|
(**(code **)(*param_1 + 0x18))(1);
|
|
|
|
iVar1 = 0;
|
|
|
|
}
|
|
|
|
return iVar1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00415430 at 0x00415430 (size: 27) ---
|
|
|
|
|
|
undefined4 FUN_00415430(undefined4 param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined4 uVar1;
|
|
|
|
|
|
|
|
if (DAT_00837bac != 0) {
|
|
|
|
uVar1 = (*(code *)**(undefined4 **)(DAT_00837bac + 4))(2,param_1);
|
|
|
|
return uVar1;
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- thunk_FUN_00413a30 at 0x00415450 (size: 5) ---
|
|
|
|
|
|
undefined4 thunk_FUN_00413a30(undefined4 param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined4 uVar1;
|
|
|
|
|
|
|
|
if (DAT_00837bac != (int *)0x0) {
|
|
|
|
uVar1 = (**(code **)(*DAT_00837bac + 0x2c))(param_1);
|
|
|
|
return uVar1;
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00415460 at 0x00415460 (size: 52) ---
|
|
|
|
|
|
void __thiscall FUN_00415460(undefined4 *param_1,undefined4 param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
param_1[1] = 0;
|
|
|
|
*(undefined1 *)(param_1 + 2) = 0;
|
|
|
|
param_1[4] = 0;
|
|
|
|
param_1[5] = 0;
|
|
|
|
param_1[6] = 0;
|
|
|
|
param_1[7] = 0;
|
|
|
|
param_1[8] = 0;
|
|
|
|
*param_1 = &PTR_LAB_007961e0;
|
|
|
|
param_1[9] = 1;
|
|
|
|
param_1[10] = param_2;
|
|
|
|
*(undefined1 *)(param_1 + 0xb) = 1;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_004154a0 at 0x004154A0 (size: 3) ---
|
|
|
|
|
|
undefined1 FUN_004154a0(void)
|
|
|
|
|
|
|
|
{
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_004154b0 at 0x004154B0 (size: 7) ---
|
|
|
|
|
|
void __fastcall FUN_004154b0(undefined4 *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
*param_1 = &PTR_LAB_007961e0;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00415520 at 0x00415520 (size: 45) ---
|
|
|
|
|
|
undefined4 __fastcall FUN_00415520(int *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined4 uVar1;
|
|
|
|
int *piVar2;
|
|
|
|
|
|
|
|
if (param_1[10] != 0) {
|
|
|
|
uVar1 = (**(code **)(*param_1 + 0x48))();
|
|
|
|
piVar2 = (int *)FUN_00414590(uVar1);
|
|
|
|
if (piVar2 != (int *)0x0) {
|
|
|
|
uVar1 = (**(code **)(*piVar2 + 0x30))(param_1[10]);
|
|
|
|
return uVar1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00415550 at 0x00415550 (size: 51) ---
|
|
|
|
|
|
undefined4 __thiscall FUN_00415550(int *param_1,undefined4 param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined4 uVar1;
|
|
|
|
int *piVar2;
|
|
|
|
|
|
|
|
if (param_1[10] != 0) {
|
|
|
|
uVar1 = (**(code **)(*param_1 + 0x48))();
|
|
|
|
piVar2 = (int *)FUN_00414590(uVar1);
|
|
|
|
if (piVar2 != (int *)0x0) {
|
|
|
|
uVar1 = (**(code **)(*piVar2 + 0x2c))(param_2,param_1);
|
|
|
|
return uVar1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00415590 at 0x00415590 (size: 116) ---
|
|
|
|
|
|
void __thiscall FUN_00415590(int *param_1,int param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
char cVar1;
|
|
|
|
int *piVar2;
|
|
|
|
undefined4 uVar3;
|
|
|
|
|
|
|
|
FUN_0040ad10(4);
|
|
|
|
piVar2 = (int *)FUN_0040acf0(4);
|
|
|
|
if (piVar2 != (int *)0x0) {
|
|
|
|
if ((*(byte *)(param_2 + 4) & 1) == 0) {
|
|
|
|
param_1[10] = *piVar2;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
*piVar2 = param_1[10];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
uVar3 = (**(code **)(*param_1 + 0x48))();
|
|
|
|
cVar1 = FUN_0041c4e0(uVar3);
|
|
|
|
if (cVar1 != '\0') {
|
|
|
|
FUN_0040ad10(4);
|
|
|
|
piVar2 = (int *)FUN_0040acf0(4);
|
|
|
|
if (piVar2 != (int *)0x0) {
|
|
|
|
if ((*(byte *)(param_2 + 4) & 1) != 0) {
|
|
|
|
*piVar2 = param_1[1];
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
param_1[1] = *piVar2;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00415610 at 0x00415610 (size: 45) ---
|
|
|
|
|
|
void FUN_00415610(int *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
undefined4 uVar2;
|
|
|
|
int *piVar3;
|
|
|
|
|
|
|
|
iVar1 = (**(code **)(*param_1 + 0x48))();
|
|
|
|
if (iVar1 != 0) {
|
|
|
|
uVar2 = (**(code **)(*param_1 + 0x48))();
|
|
|
|
piVar3 = (int *)FUN_00414590(uVar2);
|
|
|
|
(**(code **)(*piVar3 + 0x1c))(param_1[10]);
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00415640 at 0x00415640 (size: 28) ---
|
|
|
|
|
|
undefined4 FUN_00415640(undefined4 param_1,undefined4 param_2,undefined4 param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
FUN_00413bc0(param_1,param_2,param_3);
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00415660 at 0x00415660 (size: 55) ---
|
|
|
|
|
|
void __fastcall FUN_00415660(int *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
int iVar2;
|
|
|
|
int *piVar3;
|
|
|
|
|
|
|
|
iVar1 = *(int *)(param_1[2] + 8);
|
|
|
|
param_1[2] = iVar1;
|
|
|
|
if (iVar1 == 0) {
|
|
|
|
iVar1 = *(int *)(*param_1 + 0x68);
|
|
|
|
iVar2 = *(int *)(*param_1 + 0x60);
|
|
|
|
do {
|
|
|
|
piVar3 = (int *)(param_1[1] + 4);
|
|
|
|
param_1[1] = (int)piVar3;
|
|
|
|
if (piVar3 == (int *)(iVar2 + iVar1 * 4)) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
} while (*piVar3 == 0);
|
|
|
|
param_1[2] = *piVar3;
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_004156a0 at 0x004156A0 (size: 112) ---
|
|
|
|
|
|
undefined * __thiscall FUN_004156a0(int param_1,int param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined4 *puVar1;
|
|
|
|
undefined1 local_c [12];
|
|
|
|
|
|
|
|
if (param_2 == 0) {
|
|
|
|
puVar1 = (undefined4 *)FUN_0052dcf0(local_c);
|
|
|
|
*(undefined4 *)(param_1 + 0x70) = *puVar1;
|
|
|
|
*(undefined4 *)(param_1 + 0x78) = puVar1[2];
|
|
|
|
*(undefined4 *)(param_1 + 0x74) = puVar1[1];
|
|
|
|
}
|
|
|
|
else if (param_2 != *(int *)(param_1 + 0x7c)) {
|
|
|
|
if ((*(int *)(param_1 + 0x78) == 0) || (param_2 != *(int *)(param_1 + 0x7c) + 1)) {
|
|
|
|
FUN_0041a2a0(param_2);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
FUN_00415660();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (*(undefined **)(param_1 + 0x78) != (undefined *)0x0) {
|
|
|
|
*(int *)(param_1 + 0x7c) = param_2;
|
|
|
|
return *(undefined **)(param_1 + 0x78);
|
|
|
|
}
|
|
|
|
return &DAT_00837cbc;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00415730 at 0x00415730 (size: 40) ---
|
|
|
|
|
|
void FUN_00415730(undefined4 param_1,undefined4 param_2,undefined4 param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined4 local_4;
|
|
|
|
|
|
|
|
FUN_00413bc0(&local_4,param_1,param_2);
|
|
|
|
FUN_00413b80(local_4,param_3);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00415830 at 0x00415830 (size: 64) ---
|
|
|
|
|
|
undefined4 * __thiscall FUN_00415830(undefined4 *param_1,byte param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
*param_1 = &PTR_FUN_00796294;
|
|
|
|
if ((undefined4 *)param_1[0x18] != param_1 + 1) {
|
|
|
|
operator_delete__((undefined4 *)param_1[0x18]);
|
|
|
|
}
|
|
|
|
param_1[0x18] = 0;
|
|
|
|
param_1[0x19] = 0;
|
|
|
|
param_1[0x1a] = 0;
|
|
|
|
param_1[0x1b] = 0;
|
|
|
|
if ((param_2 & 1) != 0) {
|
|
|
|
operator_delete(param_1);
|
|
|
|
}
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00415870 at 0x00415870 (size: 64) ---
|
|
|
|
|
|
undefined4 * __thiscall FUN_00415870(undefined4 *param_1,byte param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
*param_1 = &PTR_FUN_00796298;
|
|
|
|
if ((undefined4 *)param_1[0x18] != param_1 + 1) {
|
|
|
|
operator_delete__((undefined4 *)param_1[0x18]);
|
|
|
|
}
|
|
|
|
param_1[0x18] = 0;
|
|
|
|
param_1[0x19] = 0;
|
|
|
|
param_1[0x1a] = 0;
|
|
|
|
param_1[0x1b] = 0;
|
|
|
|
if ((param_2 & 1) != 0) {
|
|
|
|
operator_delete(param_1);
|
|
|
|
}
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_004158b0 at 0x004158B0 (size: 93) ---
|
|
|
|
|
|
void __fastcall FUN_004158b0(int *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
|
|
|
|
param_1[2] = 0;
|
|
|
|
if ((param_1[1] & 0x80000000U) == 0x80000000) {
|
|
|
|
if (*param_1 != 0) {
|
|
|
|
operator_delete__((void *)(*param_1 + -4));
|
|
|
|
}
|
|
|
|
*param_1 = 0;
|
|
|
|
param_1[1] = 0;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
if (*param_1 != 0) {
|
|
|
|
iVar1 = (param_1[1] & 0x7fffffffU) - 1;
|
|
|
|
while (-1 < iVar1) {
|
|
|
|
iVar1 = iVar1 + -1;
|
|
|
|
*(int **)(*param_1 + 4 + iVar1 * 4) = param_1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00415910 at 0x00415910 (size: 184) ---
|
|
|
|
|
|
undefined4 __thiscall FUN_00415910(int *param_1,uint param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
uint *puVar1;
|
|
|
|
int iVar2;
|
|
|
|
uint *puVar3;
|
|
|
|
|
|
|
|
if ((uint)param_1[2] <= param_2) {
|
|
|
|
if (param_2 <= (param_1[1] & 0x7fffffffU)) {
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
if (param_2 == 0) {
|
|
|
|
FUN_004158b0();
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
puVar3 = (uint *)thunk_FUN_005df0f5(param_2 * 4 + 4);
|
|
|
|
if (puVar3 != (uint *)0x0) {
|
|
|
|
puVar1 = puVar3 + 1;
|
|
|
|
*puVar3 = param_2;
|
|
|
|
FUN_00401000(puVar1,4,param_2,FUN_0050a140);
|
|
|
|
if (puVar1 != (uint *)0x0) {
|
|
|
|
if (*param_1 != 0) {
|
|
|
|
iVar2 = param_1[2] + -1;
|
|
|
|
while (-1 < iVar2) {
|
|
|
|
puVar3[iVar2 + 1] = *(uint *)(*param_1 + 4 + (iVar2 + -1) * 4);
|
|
|
|
iVar2 = iVar2 + -1;
|
|
|
|
}
|
|
|
|
if (((param_1[1] & 0x80000000U) == 0x80000000) && (*param_1 != 0)) {
|
|
|
|
operator_delete__((void *)(*param_1 + -4));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
*param_1 = (int)puVar1;
|
|
|
|
param_1[1] = param_2 | 0x80000000;
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_004159d0 at 0x004159D0 (size: 291) ---
|
|
|
|
|
|
undefined4 __thiscall FUN_004159d0(int param_1,undefined4 *param_2,undefined4 *param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
int *piVar1;
|
|
|
|
int iVar2;
|
|
|
|
int iVar3;
|
|
|
|
undefined4 *puVar4;
|
|
|
|
undefined1 local_c [12];
|
|
|
|
|
|
|
|
piVar1 = (int *)FUN_0052dcf0(local_c);
|
|
|
|
puVar4 = (undefined4 *)piVar1[2];
|
|
|
|
iVar3 = *piVar1;
|
|
|
|
piVar1 = (int *)piVar1[1];
|
|
|
|
while (puVar4 != (undefined4 *)0x0) {
|
|
|
|
do {
|
|
|
|
iVar2 = _stricmp((char *)*param_2,(char *)puVar4[2]);
|
|
|
|
if (iVar2 == 0) {
|
|
|
|
*param_3 = *puVar4;
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
puVar4 = (undefined4 *)puVar4[1];
|
|
|
|
} while (puVar4 != (undefined4 *)0x0);
|
|
|
|
do {
|
|
|
|
piVar1 = piVar1 + 1;
|
|
|
|
if (piVar1 == (int *)(*(int *)(iVar3 + 0x60) + *(int *)(iVar3 + 0x68) * 4)) goto LAB_00415a33;
|
|
|
|
puVar4 = (undefined4 *)*piVar1;
|
|
|
|
} while (puVar4 == (undefined4 *)0x0);
|
|
|
|
}
|
|
|
|
LAB_00415a33:
|
|
|
|
piVar1 = *(int **)(param_1 + 500);
|
|
|
|
do {
|
|
|
|
if (piVar1 == (int *)(*(int *)(param_1 + 0x1f0) + *(int *)(param_1 + 0x1f8) * 4)) {
|
|
|
|
piVar1 = (int *)0x0;
|
|
|
|
puVar4 = (undefined4 *)0x0;
|
|
|
|
joined_r0x00415a8e:
|
|
|
|
do {
|
|
|
|
if (puVar4 == (undefined4 *)0x0) {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
do {
|
|
|
|
iVar3 = _stricmp((char *)*param_2,(char *)puVar4[2]);
|
|
|
|
if (iVar3 == 0) {
|
|
|
|
*param_3 = *puVar4;
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
puVar4 = (undefined4 *)puVar4[1];
|
|
|
|
} while (puVar4 != (undefined4 *)0x0);
|
|
|
|
do {
|
|
|
|
piVar1 = piVar1 + 1;
|
|
|
|
if (piVar1 == (int *)(*(int *)(param_1 + 0x1f0) + *(int *)(param_1 + 0x1f8) * 4)) {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
puVar4 = (undefined4 *)*piVar1;
|
|
|
|
} while (puVar4 == (undefined4 *)0x0);
|
|
|
|
} while( true );
|
|
|
|
}
|
|
|
|
if (**(int **)(param_1 + 500) != 0) {
|
|
|
|
piVar1 = *(int **)(param_1 + 500);
|
|
|
|
puVar4 = (undefined4 *)*piVar1;
|
|
|
|
goto joined_r0x00415a8e;
|
|
|
|
}
|
|
|
|
piVar1 = *(int **)(param_1 + 500) + 1;
|
|
|
|
*(int **)(param_1 + 500) = piVar1;
|
|
|
|
} while( true );
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00415b00 at 0x00415B00 (size: 265) ---
|
|
|
|
|
|
void __fastcall FUN_00415b00(int param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
int *piVar1;
|
|
|
|
undefined4 uVar2;
|
|
|
|
int iVar3;
|
|
|
|
undefined4 uVar4;
|
|
|
|
undefined1 local_20 [12];
|
|
|
|
int local_14;
|
|
|
|
|
|
|
|
piVar1 = (int *)FUN_0052dcf0(local_20);
|
|
|
|
iVar3 = piVar1[2];
|
|
|
|
local_14 = *piVar1;
|
|
|
|
piVar1 = (int *)piVar1[1];
|
|
|
|
while (iVar3 != 0) {
|
|
|
|
do {
|
|
|
|
uVar4 = 0;
|
|
|
|
uVar2 = FUN_004220b0(*(undefined4 *)(iVar3 + 8),0);
|
|
|
|
FUN_0041a4e0(uVar2,uVar4);
|
|
|
|
iVar3 = *(int *)(iVar3 + 4);
|
|
|
|
} while (iVar3 != 0);
|
|
|
|
do {
|
|
|
|
piVar1 = piVar1 + 1;
|
|
|
|
if (piVar1 == (int *)(*(int *)(local_14 + 0x60) + *(int *)(local_14 + 0x68) * 4))
|
|
|
|
goto LAB_00415b73;
|
|
|
|
iVar3 = *piVar1;
|
|
|
|
} while (iVar3 == 0);
|
|
|
|
}
|
|
|
|
LAB_00415b73:
|
|
|
|
piVar1 = *(int **)(param_1 + 0x10c);
|
|
|
|
do {
|
|
|
|
if (piVar1 == (int *)(*(int *)(param_1 + 0x108) + *(int *)(param_1 + 0x110) * 4)) {
|
|
|
|
piVar1 = (int *)0x0;
|
|
|
|
iVar3 = 0;
|
|
|
|
joined_r0x00415bba:
|
|
|
|
do {
|
|
|
|
if (iVar3 == 0) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
do {
|
|
|
|
uVar4 = 2;
|
|
|
|
uVar2 = FUN_004220b0(*(undefined4 *)(iVar3 + 8),0);
|
|
|
|
FUN_0041a4e0(uVar2,uVar4);
|
|
|
|
iVar3 = *(int *)(iVar3 + 4);
|
|
|
|
} while (iVar3 != 0);
|
|
|
|
do {
|
|
|
|
piVar1 = piVar1 + 1;
|
|
|
|
if (piVar1 == (int *)(*(int *)(param_1 + 0x108) + *(int *)(param_1 + 0x110) * 4)) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
iVar3 = *piVar1;
|
|
|
|
} while (iVar3 == 0);
|
|
|
|
} while( true );
|
|
|
|
}
|
|
|
|
if (**(int **)(param_1 + 0x10c) != 0) {
|
|
|
|
piVar1 = *(int **)(param_1 + 0x10c);
|
|
|
|
iVar3 = *piVar1;
|
|
|
|
goto joined_r0x00415bba;
|
|
|
|
}
|
|
|
|
piVar1 = *(int **)(param_1 + 0x10c) + 1;
|
|
|
|
*(int **)(param_1 + 0x10c) = piVar1;
|
|
|
|
} while( true );
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00415c10 at 0x00415C10 (size: 119) ---
|
|
|
|
|
|
undefined4 __thiscall FUN_00415c10(int param_1,uint param_2,uint *param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
uint *puVar1;
|
|
|
|
|
|
|
|
puVar1 = *(uint **)(*(int *)(param_1 + 0x94) + (param_2 % *(uint *)(param_1 + 0x9c)) * 4);
|
|
|
|
do {
|
|
|
|
if (puVar1 == (uint *)0x0) {
|
|
|
|
LAB_00415c41:
|
|
|
|
puVar1 = *(uint **)(*(int *)(param_1 + 0x108) + (param_2 % *(uint *)(param_1 + 0x110)) * 4);
|
|
|
|
while( true ) {
|
|
|
|
if (puVar1 == (uint *)0x0) {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
if (*puVar1 == param_2) break;
|
|
|
|
puVar1 = (uint *)puVar1[1];
|
|
|
|
}
|
|
|
|
if (puVar1 == (uint *)0x0) {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
LAB_00415c75:
|
|
|
|
*param_3 = puVar1[2];
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
if (*puVar1 == param_2) {
|
|
|
|
if (puVar1 != (uint *)0x0) goto LAB_00415c75;
|
|
|
|
goto LAB_00415c41;
|
|
|
|
}
|
|
|
|
puVar1 = (uint *)puVar1[1];
|
|
|
|
} while( true );
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00415c90 at 0x00415C90 (size: 67) ---
|
|
|
|
|
|
undefined4 FUN_00415c90(undefined4 param_1,undefined4 param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined4 uVar1;
|
|
|
|
char cVar2;
|
|
|
|
|
|
|
|
uVar1 = param_2;
|
|
|
|
cVar2 = FUN_0041ae30(¶m_1,param_2);
|
|
|
|
if (cVar2 == '\0') {
|
|
|
|
cVar2 = FUN_0041ae30(¶m_1,uVar1);
|
|
|
|
if (cVar2 == '\0') {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00415ce0 at 0x00415CE0 (size: 68) ---
|
|
|
|
|
|
undefined4 __thiscall FUN_00415ce0(int param_1,uint param_2,uint *param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
uint *puVar1;
|
|
|
|
|
|
|
|
puVar1 = *(uint **)(*(int *)(param_1 + 0x264) + (param_2 % *(uint *)(param_1 + 0x26c)) * 4);
|
|
|
|
while( true ) {
|
|
|
|
if (puVar1 == (uint *)0x0) {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
if (*puVar1 == param_2) break;
|
|
|
|
puVar1 = (uint *)puVar1[1];
|
|
|
|
}
|
|
|
|
if (puVar1 == (uint *)0x0) {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
*param_3 = puVar1[2];
|
|
|
|
return CONCAT31((int3)((uint)puVar1 >> 8),1);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00415d30 at 0x00415D30 (size: 143) ---
|
|
|
|
|
|
undefined4 * __thiscall FUN_00415d30(undefined4 *param_1,undefined4 param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined *puVar1;
|
|
|
|
uint *puVar2;
|
|
|
|
undefined4 uVar3;
|
|
|
|
uint uVar4;
|
|
|
|
int iVar5;
|
|
|
|
undefined4 *puVar6;
|
|
|
|
|
|
|
|
param_1[0x18] = 0;
|
|
|
|
param_1[0x19] = 0;
|
|
|
|
param_1[0x1a] = 0;
|
|
|
|
param_1[0x1b] = 0;
|
|
|
|
*param_1 = &PTR_FUN_00796294;
|
|
|
|
puVar1 = PTR_DAT_00818558;
|
|
|
|
puVar2 = (uint *)FUN_00422d20(PTR_DAT_00818554,PTR_DAT_00818558,¶m_2,param_2,0);
|
|
|
|
if (puVar2 == (uint *)puVar1) {
|
|
|
|
puVar2 = puVar2 + -1;
|
|
|
|
}
|
|
|
|
uVar4 = *puVar2;
|
|
|
|
param_1[0x1a] = uVar4;
|
|
|
|
if (uVar4 < 0x18) {
|
|
|
|
param_1[0x18] = param_1 + 1;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
uVar3 = thunk_FUN_005df0f5(uVar4 << 2);
|
|
|
|
param_1[0x18] = uVar3;
|
|
|
|
}
|
|
|
|
param_1[0x19] = (undefined4 *)param_1[0x18] + param_1[0x1a];
|
|
|
|
puVar6 = (undefined4 *)param_1[0x18];
|
|
|
|
for (uVar4 = param_1[0x1a] & 0x3fffffff; uVar4 != 0; uVar4 = uVar4 - 1) {
|
|
|
|
*puVar6 = 0;
|
|
|
|
puVar6 = puVar6 + 1;
|
|
|
|
}
|
|
|
|
for (iVar5 = 0; iVar5 != 0; iVar5 = iVar5 + -1) {
|
|
|
|
*(undefined1 *)puVar6 = 0;
|
|
|
|
puVar6 = (undefined4 *)((int)puVar6 + 1);
|
|
|
|
}
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00415dc0 at 0x00415DC0 (size: 143) ---
|
|
|
|
|
|
undefined4 * __thiscall FUN_00415dc0(undefined4 *param_1,undefined4 param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined *puVar1;
|
|
|
|
uint *puVar2;
|
|
|
|
undefined4 uVar3;
|
|
|
|
uint uVar4;
|
|
|
|
int iVar5;
|
|
|
|
undefined4 *puVar6;
|
|
|
|
|
|
|
|
param_1[0x18] = 0;
|
|
|
|
param_1[0x19] = 0;
|
|
|
|
param_1[0x1a] = 0;
|
|
|
|
param_1[0x1b] = 0;
|
|
|
|
*param_1 = &PTR_FUN_00796298;
|
|
|
|
puVar1 = PTR_DAT_00818558;
|
|
|
|
puVar2 = (uint *)FUN_00422d20(PTR_DAT_00818554,PTR_DAT_00818558,¶m_2,param_2,0);
|
|
|
|
if (puVar2 == (uint *)puVar1) {
|
|
|
|
puVar2 = puVar2 + -1;
|
|
|
|
}
|
|
|
|
uVar4 = *puVar2;
|
|
|
|
param_1[0x1a] = uVar4;
|
|
|
|
if (uVar4 < 0x18) {
|
|
|
|
param_1[0x18] = param_1 + 1;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
uVar3 = thunk_FUN_005df0f5(uVar4 << 2);
|
|
|
|
param_1[0x18] = uVar3;
|
|
|
|
}
|
|
|
|
param_1[0x19] = (undefined4 *)param_1[0x18] + param_1[0x1a];
|
|
|
|
puVar6 = (undefined4 *)param_1[0x18];
|
|
|
|
for (uVar4 = param_1[0x1a] & 0x3fffffff; uVar4 != 0; uVar4 = uVar4 - 1) {
|
|
|
|
*puVar6 = 0;
|
|
|
|
puVar6 = puVar6 + 1;
|
|
|
|
}
|
|
|
|
for (iVar5 = 0; iVar5 != 0; iVar5 = iVar5 + -1) {
|
|
|
|
*(undefined1 *)puVar6 = 0;
|
|
|
|
puVar6 = (undefined4 *)((int)puVar6 + 1);
|
|
|
|
}
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00415e50 at 0x00415E50 (size: 170) ---
|
|
|
|
|
|
void __fastcall FUN_00415e50(int param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
void *pvVar2;
|
|
|
|
void *pvVar3;
|
|
|
|
LONG LVar4;
|
|
|
|
int *piVar5;
|
|
|
|
void *pvVar6;
|
|
|
|
undefined4 *puVar7;
|
|
|
|
|
|
|
|
iVar1 = *(int *)(param_1 + 0x6c);
|
|
|
|
do {
|
|
|
|
if (iVar1 == 0) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
piVar5 = *(int **)(param_1 + 100);
|
|
|
|
while (piVar5 != (int *)(*(int *)(param_1 + 0x60) + *(int *)(param_1 + 0x68) * 4)) {
|
|
|
|
if (**(int **)(param_1 + 100) != 0) {
|
|
|
|
piVar5 = *(int **)(param_1 + 100);
|
|
|
|
pvVar6 = (void *)*piVar5;
|
|
|
|
goto LAB_00415e94;
|
|
|
|
}
|
|
|
|
piVar5 = *(int **)(param_1 + 100) + 1;
|
|
|
|
*(int **)(param_1 + 100) = piVar5;
|
|
|
|
}
|
|
|
|
piVar5 = (int *)0x0;
|
|
|
|
pvVar6 = (void *)0x0;
|
|
|
|
LAB_00415e94:
|
|
|
|
pvVar3 = (void *)*piVar5;
|
|
|
|
if (pvVar3 == pvVar6) {
|
|
|
|
LAB_00415ead:
|
|
|
|
*piVar5 = *(int *)((int)pvVar3 + 4);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
do {
|
|
|
|
pvVar2 = pvVar3;
|
|
|
|
pvVar3 = *(void **)((int)pvVar2 + 4);
|
|
|
|
} while (pvVar3 != pvVar6);
|
|
|
|
if (pvVar2 == (void *)0x0) goto LAB_00415ead;
|
|
|
|
*(undefined4 *)((int)pvVar2 + 4) = *(undefined4 *)((int)pvVar3 + 4);
|
|
|
|
}
|
|
|
|
*(int *)(param_1 + 0x6c) = *(int *)(param_1 + 0x6c) + -1;
|
|
|
|
if (pvVar6 != (void *)0x0) {
|
|
|
|
puVar7 = (undefined4 *)(*(int *)((int)pvVar6 + 8) + -0x14);
|
|
|
|
LVar4 = InterlockedDecrement((LONG *)(*(int *)((int)pvVar6 + 8) + -0x10));
|
|
|
|
if ((LVar4 == 0) && (puVar7 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar7)(1);
|
|
|
|
}
|
|
|
|
operator_delete(pvVar6);
|
|
|
|
}
|
|
|
|
iVar1 = *(int *)(param_1 + 0x6c);
|
|
|
|
} while( true );
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00415f00 at 0x00415F00 (size: 581) ---
|
|
|
|
|
|
void FUN_00415f00(undefined4 param_1,int param_2,uint param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
undefined *puVar2;
|
|
|
|
undefined *puVar3;
|
|
|
|
uint uVar4;
|
|
|
|
char cVar5;
|
|
|
|
undefined *puVar6;
|
|
|
|
byte *pbVar7;
|
|
|
|
int *piVar8;
|
|
|
|
undefined4 *puVar9;
|
|
|
|
undefined4 *puVar10;
|
|
|
|
uint uVar11;
|
|
|
|
undefined4 *puVar12;
|
|
|
|
undefined1 local_c [12];
|
|
|
|
|
|
|
|
uVar4 = param_3;
|
|
|
|
if ((~*(byte *)(param_3 + 4) & 1) != 0) {
|
|
|
|
FUN_005c2c80();
|
|
|
|
}
|
|
|
|
puVar3 = PTR_DAT_00818558;
|
|
|
|
puVar2 = PTR_DAT_00818554;
|
|
|
|
if (((byte)*(undefined4 *)(uVar4 + 4) & 5) == 1) {
|
|
|
|
param_3 = *(uint *)(param_2 + 0x68);
|
|
|
|
puVar6 = (undefined *)FUN_00422d20(PTR_DAT_00818554,PTR_DAT_00818558,¶m_3,param_3,0);
|
|
|
|
if (puVar6 == puVar3) {
|
|
|
|
puVar6 = puVar6 + -4;
|
|
|
|
}
|
|
|
|
uVar11 = (int)puVar6 - (int)puVar2 >> 2;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
uVar11 = param_3 & 0xff;
|
|
|
|
}
|
|
|
|
FUN_0040ad10(1);
|
|
|
|
pbVar7 = (byte *)FUN_0040acf0(1);
|
|
|
|
if (pbVar7 != (byte *)0x0) {
|
|
|
|
if ((*(byte *)(uVar4 + 4) & 1) == 0) {
|
|
|
|
uVar11 = (uint)*pbVar7;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
*pbVar7 = (byte)uVar11;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if ((*(byte *)(uVar4 + 4) & 5) == 0) {
|
|
|
|
if ((uVar11 & 0xff) < DAT_007956cc) {
|
|
|
|
FUN_0042ab60(*(undefined4 *)(PTR_DAT_00818554 + (uVar11 & 0xff) * 4));
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
FUN_0040aa50();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (((byte)*(undefined4 *)(uVar4 + 4) & 5) == 1) {
|
|
|
|
param_3 = *(uint *)(param_2 + 0x6c);
|
|
|
|
}
|
|
|
|
FUN_00401a80(¶m_3,¶m_3,uVar4);
|
|
|
|
if (((byte)*(undefined4 *)(uVar4 + 4) & 5) == 1) {
|
|
|
|
piVar8 = (int *)FUN_0052dcf0(local_c);
|
|
|
|
iVar1 = *piVar8;
|
|
|
|
puVar12 = (undefined4 *)piVar8[1];
|
|
|
|
puVar9 = (undefined4 *)piVar8[2];
|
|
|
|
LAB_00416006:
|
|
|
|
puVar10 = puVar9;
|
|
|
|
if (puVar9 != (undefined4 *)0x0) {
|
|
|
|
do {
|
|
|
|
FUN_0040ad10(4);
|
|
|
|
puVar9 = (undefined4 *)FUN_0040acf0(4);
|
|
|
|
if (puVar9 != (undefined4 *)0x0) {
|
|
|
|
if ((*(byte *)(uVar4 + 4) & 1) == 0) {
|
|
|
|
*puVar10 = *puVar9;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
*puVar9 = *puVar10;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
FUN_0040ad10(4);
|
|
|
|
puVar9 = (undefined4 *)FUN_0040acf0(4);
|
|
|
|
if (puVar9 != (undefined4 *)0x0) {
|
|
|
|
if ((*(byte *)(uVar4 + 4) & 1) == 0) {
|
|
|
|
puVar10[2] = *puVar9;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
*puVar9 = puVar10[2];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
puVar10 = (undefined4 *)puVar10[1];
|
|
|
|
} while (puVar10 != (undefined4 *)0x0);
|
|
|
|
do {
|
|
|
|
puVar12 = puVar12 + 1;
|
|
|
|
puVar9 = puVar10;
|
|
|
|
if (puVar12 == (undefined4 *)(*(int *)(iVar1 + 0x60) + *(int *)(iVar1 + 0x68) * 4)) break;
|
|
|
|
puVar9 = (undefined4 *)*puVar12;
|
|
|
|
} while (puVar9 == (undefined4 *)0x0);
|
|
|
|
goto LAB_00416006;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if ((*(byte *)(uVar4 + 4) & 5) == 0) {
|
|
|
|
uVar11 = FUN_0040a8f0();
|
|
|
|
if (uVar11 < param_3) {
|
|
|
|
LAB_00416136:
|
|
|
|
FUN_0040aa50();
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
uVar11 = 0;
|
|
|
|
puVar12 = (undefined4 *)0x0;
|
|
|
|
if (param_3 != 0) {
|
|
|
|
while( true ) {
|
|
|
|
puVar10 = (undefined4 *)FUN_005df0f5(0xc);
|
|
|
|
puVar9 = (undefined4 *)0x0;
|
|
|
|
if (puVar10 != (undefined4 *)0x0) {
|
|
|
|
puVar10[1] = 0;
|
|
|
|
puVar9 = puVar10;
|
|
|
|
}
|
|
|
|
FUN_0040ad10(4);
|
|
|
|
puVar10 = (undefined4 *)FUN_0040acf0(4);
|
|
|
|
if (puVar10 != (undefined4 *)0x0) {
|
|
|
|
if ((*(byte *)(uVar4 + 4) & 1) == 0) {
|
|
|
|
*puVar9 = *puVar10;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
*puVar10 = *puVar9;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
FUN_0040ad10(4);
|
|
|
|
puVar10 = (undefined4 *)FUN_0040acf0(4);
|
|
|
|
if (puVar10 != (undefined4 *)0x0) {
|
|
|
|
if ((*(byte *)(uVar4 + 4) & 1) == 0) {
|
|
|
|
puVar9[2] = *puVar10;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
*puVar10 = puVar9[2];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if ((*(uint *)(uVar4 + 4) >> 2 & 1) != 0) break;
|
|
|
|
cVar5 = FUN_00599310(puVar9,puVar12);
|
|
|
|
if (cVar5 == '\0') goto LAB_00416136;
|
|
|
|
uVar11 = uVar11 + 1;
|
|
|
|
puVar12 = puVar9;
|
|
|
|
if (param_3 <= uVar11) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00416150 at 0x00416150 (size: 45) ---
|
|
|
|
|
|
void FUN_00416150(void)
|
|
|
|
|
|
|
|
{
|
|
|
|
FUN_005870f0();
|
|
|
|
FUN_00415e50();
|
|
|
|
FUN_005870f0();
|
|
|
|
FUN_00415e50();
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_004163b0 at 0x004163B0 (size: 82) ---
|
|
|
|
|
|
undefined4 * __thiscall FUN_004163b0(undefined4 *param_1,byte param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
*param_1 = &PTR_FUN_0079629c;
|
|
|
|
FUN_00415e50();
|
|
|
|
param_1[1] = &PTR_FUN_00796294;
|
|
|
|
if ((undefined4 *)param_1[0x19] != param_1 + 2) {
|
|
|
|
operator_delete__((undefined4 *)param_1[0x19]);
|
|
|
|
}
|
|
|
|
param_1[0x19] = 0;
|
|
|
|
param_1[0x1a] = 0;
|
|
|
|
param_1[0x1b] = 0;
|
|
|
|
param_1[0x1c] = 0;
|
|
|
|
if ((param_2 & 1) != 0) {
|
|
|
|
operator_delete(param_1);
|
|
|
|
}
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00416410 at 0x00416410 (size: 82) ---
|
|
|
|
|
|
undefined4 * __thiscall FUN_00416410(undefined4 *param_1,byte param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
*param_1 = &PTR_FUN_007962a0;
|
|
|
|
FUN_005870f0();
|
|
|
|
param_1[1] = &PTR_FUN_00796298;
|
|
|
|
if ((undefined4 *)param_1[0x19] != param_1 + 2) {
|
|
|
|
operator_delete__((undefined4 *)param_1[0x19]);
|
|
|
|
}
|
|
|
|
param_1[0x19] = 0;
|
|
|
|
param_1[0x1a] = 0;
|
|
|
|
param_1[0x1b] = 0;
|
|
|
|
param_1[0x1c] = 0;
|
|
|
|
if ((param_2 & 1) != 0) {
|
|
|
|
operator_delete(param_1);
|
|
|
|
}
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00416470 at 0x00416470 (size: 542) ---
|
|
|
|
|
|
void FUN_00416470(undefined4 param_1,int param_2,uint param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
undefined *puVar2;
|
|
|
|
undefined *puVar3;
|
|
|
|
uint uVar4;
|
|
|
|
char cVar5;
|
|
|
|
undefined *puVar6;
|
|
|
|
byte *pbVar7;
|
|
|
|
int *piVar8;
|
|
|
|
undefined4 *puVar9;
|
|
|
|
LONG *lpAddend;
|
|
|
|
undefined4 *puVar10;
|
|
|
|
uint uVar11;
|
|
|
|
undefined4 *puVar12;
|
|
|
|
undefined1 local_c [12];
|
|
|
|
|
|
|
|
uVar4 = param_3;
|
|
|
|
if ((~*(byte *)(param_3 + 4) & 1) != 0) {
|
|
|
|
FUN_005c2c80();
|
|
|
|
}
|
|
|
|
puVar3 = PTR_DAT_00818558;
|
|
|
|
puVar2 = PTR_DAT_00818554;
|
|
|
|
if (((byte)*(undefined4 *)(uVar4 + 4) & 5) == 1) {
|
|
|
|
param_3 = *(uint *)(param_2 + 0x68);
|
|
|
|
puVar6 = (undefined *)FUN_00422d20(PTR_DAT_00818554,PTR_DAT_00818558,¶m_3,param_3,0);
|
|
|
|
if (puVar6 == puVar3) {
|
|
|
|
puVar6 = puVar6 + -4;
|
|
|
|
}
|
|
|
|
uVar11 = (int)puVar6 - (int)puVar2 >> 2;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
uVar11 = param_3 & 0xff;
|
|
|
|
}
|
|
|
|
FUN_0040ad10(1);
|
|
|
|
pbVar7 = (byte *)FUN_0040acf0(1);
|
|
|
|
if (pbVar7 != (byte *)0x0) {
|
|
|
|
if ((*(byte *)(uVar4 + 4) & 1) == 0) {
|
|
|
|
uVar11 = (uint)*pbVar7;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
*pbVar7 = (byte)uVar11;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if ((*(byte *)(uVar4 + 4) & 5) == 0) {
|
|
|
|
if ((uVar11 & 0xff) < DAT_007956cc) {
|
|
|
|
FUN_0042ab60(*(undefined4 *)(PTR_DAT_00818554 + (uVar11 & 0xff) * 4));
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
FUN_0040aa50();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (((byte)*(undefined4 *)(uVar4 + 4) & 5) == 1) {
|
|
|
|
param_3 = *(uint *)(param_2 + 0x6c);
|
|
|
|
}
|
|
|
|
FUN_00401a80(¶m_3,¶m_3,uVar4);
|
|
|
|
if (((byte)*(undefined4 *)(uVar4 + 4) & 5) == 1) {
|
|
|
|
piVar8 = (int *)FUN_0052dcf0(local_c);
|
|
|
|
iVar1 = *piVar8;
|
|
|
|
puVar12 = (undefined4 *)piVar8[1];
|
|
|
|
puVar9 = (undefined4 *)piVar8[2];
|
|
|
|
LAB_00416572:
|
|
|
|
puVar10 = puVar9;
|
|
|
|
if (puVar9 != (undefined4 *)0x0) {
|
|
|
|
do {
|
|
|
|
FUN_0040ad10(4);
|
|
|
|
puVar9 = (undefined4 *)FUN_0040acf0(4);
|
|
|
|
if (puVar9 != (undefined4 *)0x0) {
|
|
|
|
if ((*(byte *)(uVar4 + 4) & 1) == 0) {
|
|
|
|
*puVar10 = *puVar9;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
*puVar9 = *puVar10;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
FUN_00402400(uVar4);
|
|
|
|
puVar10 = (undefined4 *)puVar10[1];
|
|
|
|
} while (puVar10 != (undefined4 *)0x0);
|
|
|
|
do {
|
|
|
|
puVar12 = puVar12 + 1;
|
|
|
|
puVar9 = puVar10;
|
|
|
|
if (puVar12 == (undefined4 *)(*(int *)(iVar1 + 0x60) + *(int *)(iVar1 + 0x68) * 4)) break;
|
|
|
|
puVar9 = (undefined4 *)*puVar12;
|
|
|
|
} while (puVar9 == (undefined4 *)0x0);
|
|
|
|
goto LAB_00416572;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if ((*(byte *)(uVar4 + 4) & 5) == 0) {
|
|
|
|
uVar11 = FUN_0040a8f0();
|
|
|
|
if (uVar11 < param_3) {
|
|
|
|
LAB_0041667f:
|
|
|
|
FUN_0040aa50();
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
uVar11 = 0;
|
|
|
|
puVar12 = (undefined4 *)0x0;
|
|
|
|
if (param_3 != 0) {
|
|
|
|
while( true ) {
|
|
|
|
puVar9 = (undefined4 *)FUN_005df0f5(0xc);
|
|
|
|
if (puVar9 == (undefined4 *)0x0) {
|
|
|
|
puVar9 = (undefined4 *)0x0;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
puVar9[1] = 0;
|
|
|
|
lpAddend = (LONG *)(PTR_DAT_00818344 + -0x10);
|
|
|
|
puVar9[2] = PTR_DAT_00818344;
|
|
|
|
InterlockedIncrement(lpAddend);
|
|
|
|
}
|
|
|
|
FUN_0040ad10(4);
|
|
|
|
puVar10 = (undefined4 *)FUN_0040acf0(4);
|
|
|
|
if (puVar10 != (undefined4 *)0x0) {
|
|
|
|
if ((*(byte *)(uVar4 + 4) & 1) == 0) {
|
|
|
|
*puVar9 = *puVar10;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
*puVar10 = *puVar9;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
FUN_00402400(uVar4);
|
|
|
|
if ((*(uint *)(uVar4 + 4) >> 2 & 1) != 0) break;
|
|
|
|
cVar5 = FUN_00599310(puVar9,puVar12);
|
|
|
|
if (cVar5 == '\0') goto LAB_0041667f;
|
|
|
|
uVar11 = uVar11 + 1;
|
|
|
|
puVar12 = puVar9;
|
|
|
|
if (param_3 <= uVar11) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00416690 at 0x00416690 (size: 110) ---
|
|
|
|
|
|
undefined4 * __fastcall FUN_00416690(undefined4 *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
FUN_00415460(DAT_00837c40);
|
|
|
|
*param_1 = &PTR_LAB_007962c8;
|
|
|
|
param_1[0xc] = &PTR_FUN_007962a0;
|
|
|
|
FUN_00415dc0(0x10);
|
|
|
|
param_1[0x29] = &PTR_FUN_007962a0;
|
|
|
|
FUN_00415dc0(0x10);
|
|
|
|
param_1[0x46] = &PTR_FUN_0079629c;
|
|
|
|
FUN_00415d30(0x10);
|
|
|
|
param_1[99] = &PTR_FUN_0079629c;
|
|
|
|
FUN_00415d30(0x10);
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00416710 at 0x00416710 (size: 298) ---
|
|
|
|
|
|
void __fastcall FUN_00416710(undefined4 *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
*param_1 = &PTR_LAB_007962c8;
|
|
|
|
FUN_005870f0();
|
|
|
|
FUN_00415e50();
|
|
|
|
FUN_005870f0();
|
|
|
|
FUN_00415e50();
|
|
|
|
param_1[99] = &PTR_FUN_0079629c;
|
|
|
|
FUN_00415e50();
|
|
|
|
param_1[100] = &PTR_FUN_00796294;
|
|
|
|
if ((undefined4 *)param_1[0x7c] != param_1 + 0x65) {
|
|
|
|
operator_delete__((undefined4 *)param_1[0x7c]);
|
|
|
|
}
|
|
|
|
param_1[0x7c] = 0;
|
|
|
|
param_1[0x7d] = 0;
|
|
|
|
param_1[0x7e] = 0;
|
|
|
|
param_1[0x7f] = 0;
|
|
|
|
param_1[0x46] = &PTR_FUN_0079629c;
|
|
|
|
FUN_00415e50();
|
|
|
|
param_1[0x47] = &PTR_FUN_00796294;
|
|
|
|
if ((undefined4 *)param_1[0x5f] != param_1 + 0x48) {
|
|
|
|
operator_delete__((undefined4 *)param_1[0x5f]);
|
|
|
|
}
|
|
|
|
param_1[0x5f] = 0;
|
|
|
|
param_1[0x60] = 0;
|
|
|
|
param_1[0x61] = 0;
|
|
|
|
param_1[0x62] = 0;
|
|
|
|
param_1[0x29] = &PTR_FUN_007962a0;
|
|
|
|
FUN_005870f0();
|
|
|
|
param_1[0x2a] = &PTR_FUN_00796298;
|
|
|
|
if ((undefined4 *)param_1[0x42] != param_1 + 0x2b) {
|
|
|
|
operator_delete__((undefined4 *)param_1[0x42]);
|
|
|
|
}
|
|
|
|
param_1[0x42] = 0;
|
|
|
|
param_1[0x43] = 0;
|
|
|
|
param_1[0x44] = 0;
|
|
|
|
param_1[0x45] = 0;
|
|
|
|
param_1[0xc] = &PTR_FUN_007962a0;
|
|
|
|
FUN_005870f0();
|
|
|
|
param_1[0xd] = &PTR_FUN_00796298;
|
|
|
|
if ((undefined4 *)param_1[0x25] != param_1 + 0xe) {
|
|
|
|
operator_delete__((undefined4 *)param_1[0x25]);
|
|
|
|
}
|
|
|
|
param_1[0x25] = 0;
|
|
|
|
param_1[0x26] = 0;
|
|
|
|
param_1[0x27] = 0;
|
|
|
|
param_1[0x28] = 0;
|
|
|
|
FUN_004154b0();
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00416870 at 0x00416870 (size: 30) ---
|
|
|
|
|
|
void * __thiscall FUN_00416870(void *param_1,byte param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
FUN_00416710();
|
|
|
|
if ((param_2 & 1) != 0) {
|
|
|
|
operator_delete(param_1);
|
|
|
|
}
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00416890 at 0x00416890 (size: 177) ---
|
|
|
|
|
|
void __thiscall FUN_00416890(int param_1,int param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
|
|
|
|
iVar1 = param_2;
|
|
|
|
FUN_00415590(param_2);
|
|
|
|
if ((~*(byte *)(iVar1 + 4) & 1) != 0) {
|
|
|
|
FUN_005870f0();
|
|
|
|
}
|
|
|
|
FUN_00415f00(¶m_2,param_1 + 0x34,iVar1);
|
|
|
|
if ((~*(byte *)(iVar1 + 4) & 1) != 0) {
|
|
|
|
FUN_00415e50();
|
|
|
|
}
|
|
|
|
FUN_00416470(¶m_2,param_1 + 0x11c,iVar1);
|
|
|
|
if ((~*(byte *)(iVar1 + 4) & 1) != 0) {
|
|
|
|
FUN_005870f0();
|
|
|
|
}
|
|
|
|
FUN_00415f00(¶m_2,param_1 + 0xa8,iVar1);
|
|
|
|
if ((~*(byte *)(iVar1 + 4) & 1) != 0) {
|
|
|
|
FUN_00415e50();
|
|
|
|
}
|
|
|
|
FUN_00416470(¶m_2,param_1 + 400,iVar1);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00416970 at 0x00416970 (size: 46) ---
|
|
|
|
|
|
undefined4 __thiscall FUN_00416970(int *param_1,char param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
char cVar1;
|
|
|
|
undefined4 in_EAX;
|
|
|
|
undefined3 uVar2;
|
|
|
|
undefined3 extraout_var;
|
|
|
|
|
|
|
|
uVar2 = (undefined3)((uint)in_EAX >> 8);
|
|
|
|
cVar1 = *(char *)((int)param_1 + 0xf1);
|
|
|
|
if ((char)param_1[0x3c] != '\0') {
|
|
|
|
*(char *)((int)param_1 + 0xf1) = param_2;
|
|
|
|
if ((cVar1 != '\0') && (param_2 == '\0')) {
|
|
|
|
(**(code **)(*param_1 + 0x28))();
|
|
|
|
uVar2 = extraout_var;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return CONCAT31(uVar2,cVar1);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_004169a0 at 0x004169A0 (size: 76) ---
|
|
|
|
|
|
void __thiscall FUN_004169a0(int *param_1,int *param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
if (param_2 != (int *)0x0) {
|
|
|
|
(**(code **)(*param_2 + 0x2c))();
|
|
|
|
*(undefined1 *)(param_2 + 2) = 0;
|
|
|
|
if ((*(char *)((int)param_1 + 0xf1) == '\0') || ((char)param_2[0xb] == '\0')) {
|
|
|
|
(**(code **)(*param_1 + 0x44))(param_2);
|
|
|
|
}
|
|
|
|
else if (*(char *)((int)param_1 + 0xf2) != '\0') {
|
|
|
|
(**(code **)(*param_1 + 0x48))(param_2);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00416a70 at 0x00416A70 (size: 70) ---
|
|
|
|
|
|
int * __fastcall FUN_00416a70(int *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
int *piVar1;
|
|
|
|
|
|
|
|
if (((char)param_1[0x3d] != '\0') && ((uint)param_1[0x3e] < (uint)param_1[0x42])) {
|
|
|
|
piVar1 = (int *)(**(code **)(*param_1 + 0x50))();
|
|
|
|
if (piVar1 != (int *)0x0) {
|
|
|
|
(**(code **)(*param_1 + 0x3c))(piVar1);
|
|
|
|
(**(code **)(*piVar1 + 0x3c))();
|
|
|
|
return piVar1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
piVar1 = (int *)(*(code *)param_1[0x44])();
|
|
|
|
return piVar1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00416ac0 at 0x00416AC0 (size: 69) ---
|
|
|
|
|
|
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
|
|
|
|
|
|
|
|
void __fastcall FUN_00416ac0(int *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
|
|
|
|
if ((((uint)param_1[0x3e] < (uint)param_1[0x42]) && (iVar1 = param_1[0x40], iVar1 != 0)) &&
|
|
|
|
(*(double *)(iVar1 + 0x10) + _DAT_00796330 < _DAT_008379a8)) {
|
|
|
|
(**(code **)(*param_1 + 0x4c))(iVar1);
|
|
|
|
(**(code **)(*param_1 + 0x44))(iVar1);
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00416b10 at 0x00416B10 (size: 32) ---
|
|
|
|
|
|
void __fastcall FUN_00416b10(int *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined4 uVar1;
|
|
|
|
|
|
|
|
while (param_1[0x42] != 0) {
|
|
|
|
uVar1 = (**(code **)(*param_1 + 0x50))();
|
|
|
|
(**(code **)(*param_1 + 0x44))(uVar1);
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00416bd0 at 0x00416BD0 (size: 64) ---
|
|
|
|
|
|
undefined4 * __thiscall FUN_00416bd0(undefined4 *param_1,byte param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
*param_1 = &PTR_FUN_00796338;
|
|
|
|
if ((undefined4 *)param_1[0x18] != param_1 + 1) {
|
|
|
|
operator_delete__((undefined4 *)param_1[0x18]);
|
|
|
|
}
|
|
|
|
param_1[0x18] = 0;
|
|
|
|
param_1[0x19] = 0;
|
|
|
|
param_1[0x1a] = 0;
|
|
|
|
param_1[0x1b] = 0;
|
|
|
|
if ((param_2 & 1) != 0) {
|
|
|
|
operator_delete(param_1);
|
|
|
|
}
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00416c10 at 0x00416C10 (size: 64) ---
|
|
|
|
|
|
undefined4 * __thiscall FUN_00416c10(undefined4 *param_1,byte param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
*param_1 = &PTR_FUN_0079633c;
|
|
|
|
if ((undefined4 *)param_1[0x18] != param_1 + 1) {
|
|
|
|
operator_delete__((undefined4 *)param_1[0x18]);
|
|
|
|
}
|
|
|
|
param_1[0x18] = 0;
|
|
|
|
param_1[0x19] = 0;
|
|
|
|
param_1[0x1a] = 0;
|
|
|
|
param_1[0x1b] = 0;
|
|
|
|
if ((param_2 & 1) != 0) {
|
|
|
|
operator_delete(param_1);
|
|
|
|
}
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00416c50 at 0x00416C50 (size: 44) ---
|
|
|
|
|
|
undefined4 __thiscall FUN_00416c50(int param_1,uint param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
uint *puVar1;
|
|
|
|
bool bVar2;
|
|
|
|
|
|
|
|
puVar1 = *(uint **)(*(int *)(param_1 + 0x68) + (param_2 % *(uint *)(param_1 + 0x70)) * 4);
|
|
|
|
bVar2 = puVar1 == (uint *)0x0;
|
|
|
|
if (!bVar2) {
|
|
|
|
do {
|
|
|
|
if (*puVar1 == param_2) break;
|
|
|
|
puVar1 = (uint *)puVar1[1];
|
|
|
|
} while (puVar1 != (uint *)0x0);
|
|
|
|
bVar2 = puVar1 == (uint *)0x0;
|
|
|
|
}
|
|
|
|
return CONCAT31((int3)((uint)puVar1 >> 8),!bVar2);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00416cd0 at 0x00416CD0 (size: 143) ---
|
|
|
|
|
|
undefined4 * __thiscall FUN_00416cd0(undefined4 *param_1,undefined4 param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined *puVar1;
|
|
|
|
uint *puVar2;
|
|
|
|
undefined4 uVar3;
|
|
|
|
uint uVar4;
|
|
|
|
int iVar5;
|
|
|
|
undefined4 *puVar6;
|
|
|
|
|
|
|
|
param_1[0x18] = 0;
|
|
|
|
param_1[0x19] = 0;
|
|
|
|
param_1[0x1a] = 0;
|
|
|
|
param_1[0x1b] = 0;
|
|
|
|
*param_1 = &PTR_FUN_0079633c;
|
|
|
|
puVar1 = PTR_DAT_00818558;
|
|
|
|
puVar2 = (uint *)FUN_00422d20(PTR_DAT_00818554,PTR_DAT_00818558,¶m_2,param_2,0);
|
|
|
|
if (puVar2 == (uint *)puVar1) {
|
|
|
|
puVar2 = puVar2 + -1;
|
|
|
|
}
|
|
|
|
uVar4 = *puVar2;
|
|
|
|
param_1[0x1a] = uVar4;
|
|
|
|
if (uVar4 < 0x18) {
|
|
|
|
param_1[0x18] = param_1 + 1;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
uVar3 = thunk_FUN_005df0f5(uVar4 << 2);
|
|
|
|
param_1[0x18] = uVar3;
|
|
|
|
}
|
|
|
|
param_1[0x19] = (undefined4 *)param_1[0x18] + param_1[0x1a];
|
|
|
|
puVar6 = (undefined4 *)param_1[0x18];
|
|
|
|
for (uVar4 = param_1[0x1a] & 0x3fffffff; uVar4 != 0; uVar4 = uVar4 - 1) {
|
|
|
|
*puVar6 = 0;
|
|
|
|
puVar6 = puVar6 + 1;
|
|
|
|
}
|
|
|
|
for (iVar5 = 0; iVar5 != 0; iVar5 = iVar5 + -1) {
|
|
|
|
*(undefined1 *)puVar6 = 0;
|
|
|
|
puVar6 = (undefined4 *)((int)puVar6 + 1);
|
|
|
|
}
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00416d60 at 0x00416D60 (size: 143) ---
|
|
|
|
|
|
undefined4 * __thiscall FUN_00416d60(undefined4 *param_1,undefined4 param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined *puVar1;
|
|
|
|
uint *puVar2;
|
|
|
|
undefined4 uVar3;
|
|
|
|
uint uVar4;
|
|
|
|
int iVar5;
|
|
|
|
undefined4 *puVar6;
|
|
|
|
|
|
|
|
param_1[0x18] = 0;
|
|
|
|
param_1[0x19] = 0;
|
|
|
|
param_1[0x1a] = 0;
|
|
|
|
param_1[0x1b] = 0;
|
|
|
|
*param_1 = &PTR_FUN_00796338;
|
|
|
|
puVar1 = PTR_DAT_00818558;
|
|
|
|
puVar2 = (uint *)FUN_00422d20(PTR_DAT_00818554,PTR_DAT_00818558,¶m_2,param_2,0);
|
|
|
|
if (puVar2 == (uint *)puVar1) {
|
|
|
|
puVar2 = puVar2 + -1;
|
|
|
|
}
|
|
|
|
uVar4 = *puVar2;
|
|
|
|
param_1[0x1a] = uVar4;
|
|
|
|
if (uVar4 < 0x18) {
|
|
|
|
param_1[0x18] = param_1 + 1;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
uVar3 = thunk_FUN_005df0f5(uVar4 << 2);
|
|
|
|
param_1[0x18] = uVar3;
|
|
|
|
}
|
|
|
|
param_1[0x19] = (undefined4 *)param_1[0x18] + param_1[0x1a];
|
|
|
|
puVar6 = (undefined4 *)param_1[0x18];
|
|
|
|
for (uVar4 = param_1[0x1a] & 0x3fffffff; uVar4 != 0; uVar4 = uVar4 - 1) {
|
|
|
|
*puVar6 = 0;
|
|
|
|
puVar6 = puVar6 + 1;
|
|
|
|
}
|
|
|
|
for (iVar5 = 0; iVar5 != 0; iVar5 = iVar5 + -1) {
|
|
|
|
*(undefined1 *)puVar6 = 0;
|
|
|
|
puVar6 = (undefined4 *)((int)puVar6 + 1);
|
|
|
|
}
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00416df0 at 0x00416DF0 (size: 73) ---
|
|
|
|
|
|
void __fastcall FUN_00416df0(int param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined *puVar1;
|
|
|
|
undefined4 *puVar2;
|
|
|
|
undefined4 local_4;
|
|
|
|
|
|
|
|
puVar1 = PTR_DAT_00818558;
|
|
|
|
local_4 = *(undefined4 *)(param_1 + 0x68);
|
|
|
|
puVar2 = (undefined4 *)FUN_00422d20(PTR_DAT_00818554,PTR_DAT_00818558,&local_4,local_4,0);
|
|
|
|
if ((puVar2 != (undefined4 *)puVar1) || (puVar2 = puVar2 + -1, puVar2 != (undefined4 *)puVar1)) {
|
|
|
|
puVar2 = puVar2 + 1;
|
|
|
|
}
|
|
|
|
FUN_00417020(*puVar2);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00416e40 at 0x00416E40 (size: 100) ---
|
|
|
|
|
|
bool __thiscall FUN_00416e40(int *param_1,uint param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
int *piVar1;
|
|
|
|
uint *puVar2;
|
|
|
|
int *piVar3;
|
|
|
|
|
|
|
|
piVar3 = (int *)0x0;
|
|
|
|
puVar2 = *(uint **)(param_1[0x1a] + (param_2 % (uint)param_1[0x1c]) * 4);
|
|
|
|
if (puVar2 != (uint *)0x0) {
|
|
|
|
while (*puVar2 != param_2) {
|
|
|
|
puVar2 = (uint *)puVar2[1];
|
|
|
|
if (puVar2 == (uint *)0x0) {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (puVar2 != (uint *)0x0) {
|
|
|
|
piVar3 = (int *)puVar2[2];
|
|
|
|
(**(code **)(*param_1 + 0x4c))(piVar3);
|
|
|
|
(**(code **)(*param_1 + 0x3c))(piVar3);
|
|
|
|
piVar1 = piVar3 + 9;
|
|
|
|
*piVar1 = *piVar1 + -1;
|
|
|
|
if (*piVar1 == 0) {
|
|
|
|
(**(code **)(*piVar3 + 0x18))(1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return piVar3 != (int *)0x0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00416eb0 at 0x00416EB0 (size: 133) ---
|
|
|
|
|
|
int * __thiscall FUN_00416eb0(int *param_1,uint param_2,char param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
uint *puVar1;
|
|
|
|
int *piVar2;
|
|
|
|
char cVar3;
|
|
|
|
|
|
|
|
puVar1 = *(uint **)(param_1[0x1a] + (param_2 % (uint)param_1[0x1c]) * 4);
|
|
|
|
while( true ) {
|
|
|
|
if (puVar1 == (uint *)0x0) {
|
|
|
|
return (int *)0x0;
|
|
|
|
}
|
|
|
|
if (*puVar1 == param_2) break;
|
|
|
|
puVar1 = (uint *)puVar1[1];
|
|
|
|
}
|
|
|
|
if (puVar1 == (uint *)0x0) {
|
|
|
|
return (int *)0x0;
|
|
|
|
}
|
|
|
|
piVar2 = (int *)puVar1[2];
|
|
|
|
if ((piVar2 == (int *)0x0) || (piVar2[9] < 2)) {
|
|
|
|
(**(code **)(*param_1 + 0x4c))(piVar2);
|
|
|
|
}
|
|
|
|
piVar2[9] = piVar2[9] + 1;
|
|
|
|
if (((char)piVar2[2] == '\0') && (param_3 != '\0')) {
|
|
|
|
cVar3 = (**(code **)(*piVar2 + 0x28))();
|
|
|
|
if (cVar3 == '\0') {
|
|
|
|
(**(code **)(*piVar2 + 0x14))();
|
|
|
|
return (int *)0x0;
|
|
|
|
}
|
|
|
|
*(undefined1 *)(piVar2 + 2) = 1;
|
|
|
|
}
|
|
|
|
return piVar2;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00416f40 at 0x00416F40 (size: 87) ---
|
|
|
|
|
|
uint __thiscall FUN_00416f40(int param_1,uint param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
uint *puVar1;
|
|
|
|
uint uVar2;
|
|
|
|
|
|
|
|
puVar1 = *(uint **)(*(int *)(param_1 + 0x68) + (param_2 % *(uint *)(param_1 + 0x70)) * 4);
|
|
|
|
while( true ) {
|
|
|
|
if (puVar1 == (uint *)0x0) {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
if (*puVar1 == param_2) break;
|
|
|
|
puVar1 = (uint *)puVar1[1];
|
|
|
|
}
|
|
|
|
if (puVar1 == (uint *)0x0) {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
uVar2 = puVar1[2];
|
|
|
|
if ((uVar2 != 0) && (1 < *(int *)(uVar2 + 0x24))) {
|
|
|
|
*(int *)(uVar2 + 0x24) = *(int *)(uVar2 + 0x24) + 1;
|
|
|
|
return uVar2;
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00417020 at 0x00417020 (size: 310) ---
|
|
|
|
|
|
undefined4 __thiscall FUN_00417020(int param_1,int param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
int iVar2;
|
|
|
|
uint *puVar3;
|
|
|
|
undefined4 *puVar4;
|
|
|
|
int *piVar5;
|
|
|
|
uint *puVar6;
|
|
|
|
uint *puVar7;
|
|
|
|
undefined4 *puVar8;
|
|
|
|
uint *puVar9;
|
|
|
|
uint uVar10;
|
|
|
|
uint *puVar11;
|
|
|
|
|
|
|
|
iVar2 = param_2;
|
|
|
|
if (param_2 == *(int *)(param_1 + 0x68)) {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
iVar1 = *(int *)(param_1 + 0x6c);
|
|
|
|
puVar3 = (uint *)0x0;
|
|
|
|
do {
|
|
|
|
if (iVar1 == 0) {
|
|
|
|
if (*(void **)(param_1 + 0x60) != (void *)(param_1 + 4)) {
|
|
|
|
operator_delete__(*(void **)(param_1 + 0x60));
|
|
|
|
}
|
|
|
|
*(undefined4 *)(param_1 + 0x60) = 0;
|
|
|
|
*(undefined4 *)(param_1 + 100) = 0;
|
|
|
|
*(undefined4 *)(param_1 + 0x68) = 0;
|
|
|
|
*(undefined4 *)(param_1 + 0x6c) = 0;
|
|
|
|
FUN_00693b20(iVar2);
|
|
|
|
puVar4 = (undefined4 *)PTR_DAT_00818558;
|
|
|
|
while (puVar3 != (uint *)0x0) {
|
|
|
|
param_2 = *(int *)(param_1 + 0x68);
|
|
|
|
puVar11 = (uint *)puVar3[1];
|
|
|
|
PTR_DAT_00818558 = (undefined *)puVar4;
|
|
|
|
if (param_2 * 2 < *(int *)(param_1 + 0x6c) + 1) {
|
|
|
|
puVar8 = (undefined4 *)FUN_00422d20(PTR_DAT_00818554,puVar4,¶m_2,param_2,0);
|
|
|
|
if ((puVar8 != puVar4) || (puVar8 = puVar8 + -1, puVar8 != puVar4)) {
|
|
|
|
puVar8 = puVar8 + 1;
|
|
|
|
}
|
|
|
|
FUN_00417020(*puVar8);
|
|
|
|
}
|
|
|
|
uVar10 = *puVar3 % *(uint *)(param_1 + 0x68);
|
|
|
|
iVar2 = *(int *)(param_1 + 0x60);
|
|
|
|
puVar3[1] = *(uint *)(iVar2 + uVar10 * 4);
|
|
|
|
*(uint **)(iVar2 + uVar10 * 4) = puVar3;
|
|
|
|
uVar10 = iVar2 + uVar10 * 4;
|
|
|
|
if (uVar10 < *(uint *)(param_1 + 100)) {
|
|
|
|
*(uint *)(param_1 + 100) = uVar10;
|
|
|
|
}
|
|
|
|
*(int *)(param_1 + 0x6c) = *(int *)(param_1 + 0x6c) + 1;
|
|
|
|
puVar4 = (undefined4 *)PTR_DAT_00818558;
|
|
|
|
puVar3 = puVar11;
|
|
|
|
}
|
|
|
|
PTR_DAT_00818558 = (undefined *)puVar4;
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
piVar5 = *(int **)(param_1 + 100);
|
|
|
|
while (piVar5 != (int *)(*(int *)(param_1 + 0x60) + *(int *)(param_1 + 0x68) * 4)) {
|
|
|
|
if (**(int **)(param_1 + 100) != 0) {
|
|
|
|
puVar11 = *(uint **)(param_1 + 100);
|
|
|
|
puVar9 = (uint *)*puVar11;
|
|
|
|
goto LAB_0041706f;
|
|
|
|
}
|
|
|
|
piVar5 = *(int **)(param_1 + 100) + 1;
|
|
|
|
*(int **)(param_1 + 100) = piVar5;
|
|
|
|
}
|
|
|
|
puVar11 = (uint *)0x0;
|
|
|
|
puVar9 = (uint *)0x0;
|
|
|
|
LAB_0041706f:
|
|
|
|
puVar7 = (uint *)*puVar11;
|
|
|
|
if (puVar7 == puVar9) {
|
|
|
|
LAB_00417082:
|
|
|
|
*puVar11 = puVar7[1];
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
do {
|
|
|
|
puVar6 = puVar7;
|
|
|
|
puVar7 = (uint *)puVar6[1];
|
|
|
|
} while (puVar7 != puVar9);
|
|
|
|
if (puVar6 == (uint *)0x0) goto LAB_00417082;
|
|
|
|
puVar6[1] = puVar7[1];
|
|
|
|
}
|
|
|
|
*(int *)(param_1 + 0x6c) = *(int *)(param_1 + 0x6c) + -1;
|
|
|
|
puVar9[1] = (uint)puVar3;
|
|
|
|
iVar1 = *(int *)(param_1 + 0x6c);
|
|
|
|
puVar3 = puVar9;
|
|
|
|
} while( true );
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00417160 at 0x00417160 (size: 120) ---
|
|
|
|
|
|
uint __thiscall FUN_00417160(int param_1,uint *param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
uint *puVar1;
|
|
|
|
int iVar2;
|
|
|
|
uint uVar3;
|
|
|
|
|
|
|
|
puVar1 = *(uint **)(*(int *)(param_1 + 0x60) + (*param_2 % *(uint *)(param_1 + 0x68)) * 4);
|
|
|
|
do {
|
|
|
|
if (puVar1 == (uint *)0x0) {
|
|
|
|
LAB_0041718b:
|
|
|
|
if ((int)(*(uint *)(param_1 + 0x68) * 2) < *(int *)(param_1 + 0x6c) + 1) {
|
|
|
|
FUN_00416df0();
|
|
|
|
}
|
|
|
|
uVar3 = *param_2 % *(uint *)(param_1 + 0x68);
|
|
|
|
iVar2 = *(int *)(param_1 + 0x60);
|
|
|
|
param_2[1] = *(uint *)(iVar2 + uVar3 * 4);
|
|
|
|
*(uint **)(iVar2 + uVar3 * 4) = param_2;
|
|
|
|
uVar3 = iVar2 + uVar3 * 4;
|
|
|
|
if (uVar3 < *(uint *)(param_1 + 100)) {
|
|
|
|
*(uint *)(param_1 + 100) = uVar3;
|
|
|
|
}
|
|
|
|
iVar2 = *(int *)(param_1 + 0x6c) + 1;
|
|
|
|
*(int *)(param_1 + 0x6c) = iVar2;
|
|
|
|
return CONCAT31((int3)((uint)iVar2 >> 8),1);
|
|
|
|
}
|
|
|
|
if (*puVar1 == *param_2) {
|
|
|
|
if (puVar1 != (uint *)0x0) {
|
|
|
|
return (uint)puVar1 & 0xffffff00;
|
|
|
|
}
|
|
|
|
goto LAB_0041718b;
|
|
|
|
}
|
|
|
|
puVar1 = (uint *)puVar1[1];
|
|
|
|
} while( true );
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_004171e0 at 0x004171E0 (size: 81) ---
|
|
|
|
|
|
uint * __thiscall FUN_004171e0(int param_1,uint *param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
uint *puVar1;
|
|
|
|
uint uVar2;
|
|
|
|
|
|
|
|
uVar2 = *param_2 % *(uint *)(param_1 + 0x68);
|
|
|
|
puVar1 = *(uint **)(*(int *)(param_1 + 0x60) + uVar2 * 4);
|
|
|
|
while( true ) {
|
|
|
|
if (puVar1 == (uint *)0x0) {
|
|
|
|
return (uint *)0x0;
|
|
|
|
}
|
|
|
|
if (*puVar1 == *param_2) break;
|
|
|
|
puVar1 = (uint *)puVar1[1];
|
|
|
|
}
|
|
|
|
if (puVar1 == (uint *)0x0) {
|
|
|
|
return (uint *)0x0;
|
|
|
|
}
|
|
|
|
FUN_00428ba0(param_1,*(int *)(param_1 + 0x60) + uVar2 * 4,puVar1);
|
|
|
|
return puVar1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00417240 at 0x00417240 (size: 88) ---
|
|
|
|
|
|
undefined4 FUN_00417240(undefined4 *param_1,undefined4 *param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
char cVar1;
|
|
|
|
undefined4 *puVar2;
|
|
|
|
|
|
|
|
puVar2 = (undefined4 *)FUN_005df0f5(0xc);
|
|
|
|
if (puVar2 == (undefined4 *)0x0) {
|
|
|
|
puVar2 = (undefined4 *)0x0;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
*puVar2 = *param_1;
|
|
|
|
puVar2[1] = 0;
|
|
|
|
puVar2[2] = *param_2;
|
|
|
|
}
|
|
|
|
cVar1 = FUN_00417160(puVar2);
|
|
|
|
if (cVar1 == '\0') {
|
|
|
|
if (puVar2 != (undefined4 *)0x0) {
|
|
|
|
operator_delete(puVar2);
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_004172a0 at 0x004172A0 (size: 82) ---
|
|
|
|
|
|
undefined4 * __thiscall FUN_004172a0(undefined4 *param_1,byte param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
*param_1 = &PTR_FUN_00796348;
|
|
|
|
FUN_005870f0();
|
|
|
|
param_1[1] = &PTR_FUN_00796338;
|
|
|
|
if ((undefined4 *)param_1[0x19] != param_1 + 2) {
|
|
|
|
operator_delete__((undefined4 *)param_1[0x19]);
|
|
|
|
}
|
|
|
|
param_1[0x19] = 0;
|
|
|
|
param_1[0x1a] = 0;
|
|
|
|
param_1[0x1b] = 0;
|
|
|
|
param_1[0x1c] = 0;
|
|
|
|
if ((param_2 & 1) != 0) {
|
|
|
|
operator_delete(param_1);
|
|
|
|
}
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00417300 at 0x00417300 (size: 82) ---
|
|
|
|
|
|
undefined4 * __thiscall FUN_00417300(undefined4 *param_1,byte param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
*param_1 = &PTR_FUN_00796340;
|
|
|
|
FUN_005870f0();
|
|
|
|
param_1[1] = &PTR_FUN_0079633c;
|
|
|
|
if ((undefined4 *)param_1[0x19] != param_1 + 2) {
|
|
|
|
operator_delete__((undefined4 *)param_1[0x19]);
|
|
|
|
}
|
|
|
|
param_1[0x19] = 0;
|
|
|
|
param_1[0x1a] = 0;
|
|
|
|
param_1[0x1b] = 0;
|
|
|
|
param_1[0x1c] = 0;
|
|
|
|
if ((param_2 & 1) != 0) {
|
|
|
|
operator_delete(param_1);
|
|
|
|
}
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00417360 at 0x00417360 (size: 212) ---
|
|
|
|
|
|
void __fastcall FUN_00417360(undefined4 *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
int *piVar2;
|
|
|
|
undefined4 *puVar3;
|
|
|
|
undefined1 local_c [12];
|
|
|
|
|
|
|
|
*param_1 = &PTR_FUN_007c6a98;
|
|
|
|
iVar1 = FUN_0052dcf0(local_c);
|
|
|
|
puVar3 = *(undefined4 **)(iVar1 + 8);
|
|
|
|
joined_r0x00417384:
|
|
|
|
do {
|
|
|
|
if (puVar3 == (undefined4 *)0x0) {
|
|
|
|
param_1[0x1f] = &PTR_FUN_00796340;
|
|
|
|
FUN_005870f0();
|
|
|
|
param_1[0x20] = &PTR_FUN_0079633c;
|
|
|
|
if ((undefined4 *)param_1[0x38] != param_1 + 0x21) {
|
|
|
|
operator_delete__((undefined4 *)param_1[0x38]);
|
|
|
|
}
|
|
|
|
param_1[0x38] = 0;
|
|
|
|
param_1[0x39] = 0;
|
|
|
|
param_1[0x3a] = 0;
|
|
|
|
param_1[0x3b] = 0;
|
|
|
|
param_1[1] = &PTR_FUN_00796348;
|
|
|
|
FUN_005870f0();
|
|
|
|
param_1[2] = &PTR_FUN_00796338;
|
|
|
|
if ((undefined4 *)param_1[0x1a] != param_1 + 3) {
|
|
|
|
operator_delete__((undefined4 *)param_1[0x1a]);
|
|
|
|
}
|
|
|
|
param_1[0x1a] = 0;
|
|
|
|
param_1[0x1b] = 0;
|
|
|
|
param_1[0x1c] = 0;
|
|
|
|
param_1[0x1d] = 0;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
FUN_00416e40(*puVar3);
|
|
|
|
piVar2 = (int *)param_1[0x1b];
|
|
|
|
while (piVar2 != (int *)(param_1[0x1a] + param_1[0x1c] * 4)) {
|
|
|
|
if (*(int *)param_1[0x1b] != 0) {
|
|
|
|
puVar3 = *(undefined4 **)param_1[0x1b];
|
|
|
|
goto joined_r0x00417384;
|
|
|
|
}
|
|
|
|
piVar2 = (int *)param_1[0x1b] + 1;
|
|
|
|
param_1[0x1b] = piVar2;
|
|
|
|
}
|
|
|
|
puVar3 = (undefined4 *)0x0;
|
|
|
|
} while( true );
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00417510 at 0x00417510 (size: 192) ---
|
|
|
|
|
|
undefined4 * __thiscall FUN_00417510(undefined4 *param_1,undefined4 param_2,undefined4 param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined4 *puVar1;
|
|
|
|
|
|
|
|
*param_1 = &PTR_FUN_007c6a98;
|
|
|
|
param_1[1] = &PTR_FUN_00796348;
|
|
|
|
FUN_00416d60(0x80);
|
|
|
|
param_1[1] = &PTR_FUN_00796348;
|
|
|
|
param_1[0x1e] = param_3;
|
|
|
|
param_1[0x1f] = &PTR_FUN_00796340;
|
|
|
|
FUN_00416cd0(0x17);
|
|
|
|
*(undefined1 *)(param_1 + 0x3c) = 1;
|
|
|
|
*(undefined1 *)((int)param_1 + 0xf1) = 1;
|
|
|
|
*(undefined1 *)((int)param_1 + 0xf2) = 1;
|
|
|
|
*(undefined1 *)(param_1 + 0x3d) = 0;
|
|
|
|
*(undefined1 *)((int)param_1 + 0xf5) = 0;
|
|
|
|
param_1[0x3e] = 0x10;
|
|
|
|
param_1[0x3f] = 0x10;
|
|
|
|
param_1[0x40] = 0;
|
|
|
|
param_1[0x41] = 0;
|
|
|
|
param_1[0x42] = 0;
|
|
|
|
param_1[0x43] = 0;
|
|
|
|
param_1[0x44] = param_2;
|
|
|
|
puVar1 = (undefined4 *)FUN_0041c500(param_1[0x1e]);
|
|
|
|
param_1[0x3d] = *puVar1;
|
|
|
|
param_1[0x3e] = puVar1[1];
|
|
|
|
param_1[0x3f] = puVar1[2];
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_004175d0 at 0x004175D0 (size: 30) ---
|
|
|
|
|
|
void * __thiscall FUN_004175d0(void *param_1,byte param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
FUN_00417360();
|
|
|
|
if ((param_2 & 1) != 0) {
|
|
|
|
operator_delete(param_1);
|
|
|
|
}
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00417600 at 0x00417600 (size: 28) ---
|
|
|
|
|
|
undefined4 * __fastcall FUN_00417600(undefined4 *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
*param_1 = 0;
|
|
|
|
param_1[1] = 0;
|
|
|
|
FUN_00406d60();
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00417620 at 0x00417620 (size: 27) ---
|
|
|
|
|
|
int FUN_00417620(void)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
|
|
|
|
FUN_004074b0(4,1);
|
|
|
|
iVar1 = FUN_00406d80();
|
|
|
|
return iVar1 + 4;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00417640 at 0x00417640 (size: 32) ---
|
|
|
|
|
|
int FUN_00417640(void)
|
|
|
|
|
|
|
|
{
|
|
|
|
uint uVar1;
|
|
|
|
int iVar2;
|
|
|
|
|
|
|
|
uVar1 = FUN_00406db0();
|
|
|
|
if (4 < uVar1) {
|
|
|
|
iVar2 = FUN_00406db0();
|
|
|
|
return iVar2 + -4;
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00417660 at 0x00417660 (size: 19) ---
|
|
|
|
|
|
void __thiscall FUN_00417660(int *param_1,int param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
(**(code **)(*param_1 + 0xc))();
|
|
|
|
param_1[9] = param_2;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00417680 at 0x00417680 (size: 24) ---
|
|
|
|
|
|
void __fastcall FUN_00417680(int param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
if (*(int **)(param_1 + 0x24) != (int *)0x0) {
|
|
|
|
(**(code **)(**(int **)(param_1 + 0x24) + 0x14))();
|
|
|
|
*(undefined4 *)(param_1 + 0x24) = 0;
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_004176a0 at 0x004176A0 (size: 35) ---
|
|
|
|
|
|
undefined4 * __thiscall FUN_004176a0(undefined4 *param_1,undefined4 *param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
*param_1 = *param_2;
|
|
|
|
param_1[1] = param_2[1];
|
|
|
|
FUN_004070d0(param_2 + 2);
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_004176d0 at 0x004176D0 (size: 48) ---
|
|
|
|
|
|
void __thiscall FUN_004176d0(int *param_1,int param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
|
|
|
|
iVar1 = *(int *)(param_2 + 0xc);
|
|
|
|
if (iVar1 == 0) {
|
|
|
|
/* WARNING: Could not recover jumptable at 0x004176fa. Too many branches */
|
|
|
|
/* WARNING: Treating indirect jump as call */
|
|
|
|
(**(code **)(*param_1 + 0x60))();
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
if (iVar1 != 1) {
|
|
|
|
if (iVar1 == 2) {
|
|
|
|
/* WARNING: Could not recover jumptable at 0x004176e8. Too many branches */
|
|
|
|
/* WARNING: Treating indirect jump as call */
|
|
|
|
(**(code **)(*param_1 + 100))();
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
/* WARNING: Could not recover jumptable at 0x004176f1. Too many branches */
|
|
|
|
/* WARNING: Treating indirect jump as call */
|
|
|
|
(**(code **)(*param_1 + 0x68))();
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00417710 at 0x00417710 (size: 5) ---
|
|
|
|
|
|
void __fastcall FUN_00417710(int *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
/* WARNING: Could not recover jumptable at 0x00417712. Too many branches */
|
|
|
|
/* WARNING: Treating indirect jump as call */
|
|
|
|
(**(code **)(*param_1 + 0x74))();
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_004178a0 at 0x004178A0 (size: 19) ---
|
|
|
|
|
|
void FUN_004178a0(void)
|
|
|
|
|
|
|
|
{
|
|
|
|
FUN_00406f90();
|
|
|
|
FUN_00406f90();
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_004178c0 at 0x004178C0 (size: 79) ---
|
|
|
|
|
|
undefined4 __fastcall FUN_004178c0(int param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined4 *puVar1;
|
|
|
|
uint uVar2;
|
|
|
|
LONG LVar3;
|
|
|
|
uint uVar4;
|
|
|
|
|
|
|
|
uVar4 = 0;
|
|
|
|
if (*(int *)(param_1 + 0x20) == 0) {
|
|
|
|
*(undefined4 *)(param_1 + 0x20) = 0;
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
do {
|
|
|
|
puVar1 = *(undefined4 **)(*(int *)(param_1 + 0x18) + uVar4 * 8);
|
|
|
|
LVar3 = InterlockedDecrement(puVar1 + 1);
|
|
|
|
if ((LVar3 == 0) && (puVar1 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar1)(1);
|
|
|
|
}
|
|
|
|
uVar2 = *(uint *)(param_1 + 0x20);
|
|
|
|
uVar4 = uVar4 + 1;
|
|
|
|
} while (uVar4 < uVar2);
|
|
|
|
*(undefined4 *)(param_1 + 0x20) = 0;
|
|
|
|
return CONCAT31((int3)(uVar2 >> 8),1);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00417910 at 0x00417910 (size: 78) ---
|
|
|
|
|
|
void __fastcall FUN_00417910(int param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
char cVar1;
|
|
|
|
undefined4 uVar2;
|
|
|
|
int *piVar3;
|
|
|
|
|
|
|
|
if (*(int **)(param_1 + 0x24) != (int *)0x0) {
|
|
|
|
if ((*(byte *)(param_1 + 0x60) & 4) == 0) {
|
|
|
|
cVar1 = (**(code **)(**(int **)(param_1 + 0x24) + 0x24))();
|
|
|
|
if (cVar1 == '\0') goto LAB_00417949;
|
|
|
|
}
|
|
|
|
uVar2 = (**(code **)(**(int **)(param_1 + 0x24) + 0x48))();
|
|
|
|
piVar3 = (int *)FUN_00414590(uVar2);
|
|
|
|
if (piVar3 != (int *)0x0) {
|
|
|
|
(**(code **)(*piVar3 + 0x18))(*(undefined4 *)(param_1 + 0x24));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
LAB_00417949:
|
|
|
|
if (*(int **)(param_1 + 0x24) != (int *)0x0) {
|
|
|
|
(**(code **)(**(int **)(param_1 + 0x24) + 0x14))();
|
|
|
|
*(undefined4 *)(param_1 + 0x24) = 0;
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00417960 at 0x00417960 (size: 202) ---
|
|
|
|
|
|
void __thiscall FUN_00417960(int *param_1,int *param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
char cVar1;
|
|
|
|
int iVar2;
|
|
|
|
|
|
|
|
if (param_2[5] == DAT_00837c50) {
|
|
|
|
param_2[2] = 3;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
iVar2 = param_2[3];
|
|
|
|
if (iVar2 == 0) {
|
|
|
|
iVar2 = (**(code **)*param_1)(param_2[10],param_2 + 4);
|
|
|
|
(**(code **)(*param_2 + 0xc))();
|
|
|
|
param_2[9] = iVar2;
|
|
|
|
param_2[2] = 3;
|
|
|
|
if (iVar2 != 0) {
|
|
|
|
param_2[2] = 1;
|
|
|
|
param_2[0x18] = param_2[0x18] | 4;
|
|
|
|
(**(code **)(*param_1 + 0x5c))(param_2);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
if (iVar2 == 1) {
|
|
|
|
cVar1 = (**(code **)(*param_1 + 4))(param_2 + 4);
|
|
|
|
param_2[2] = (-(uint)(cVar1 != '\0') & 0xfffffffe) + 3;
|
|
|
|
(**(code **)(*param_1 + 0x5c))(param_2);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
if (iVar2 == 2) {
|
|
|
|
cVar1 = (**(code **)(*param_1 + 8))(param_2 + 4,param_2 + 10);
|
|
|
|
param_2[2] = (-(uint)(cVar1 != '\0') & 0xfffffffe) + 3;
|
|
|
|
(**(code **)(*param_1 + 0x5c))(param_2);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
(**(code **)(*param_1 + 0x5c))(param_2);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00417cf0 at 0x00417CF0 (size: 109) ---
|
|
|
|
|
|
int * __thiscall FUN_00417cf0(int *param_1,int param_2,undefined4 param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
char cVar1;
|
|
|
|
int *piVar2;
|
|
|
|
|
|
|
|
piVar2 = (int *)0x0;
|
|
|
|
if (*(int *)(param_2 + 4) != DAT_00837c50) {
|
|
|
|
piVar2 = (int *)(**(code **)(*param_1 + 0x88))(param_2,param_3);
|
|
|
|
}
|
|
|
|
cVar1 = (**(code **)(*param_1 + 0x7c))(piVar2,param_2,param_3);
|
|
|
|
if ((cVar1 != '\0') && (cVar1 = (**(code **)(*piVar2 + 0x24))(), cVar1 != '\0')) {
|
|
|
|
(**(code **)(*param_1 + 0x94))(piVar2,param_3);
|
|
|
|
return piVar2;
|
|
|
|
}
|
|
|
|
if (piVar2 == (int *)0x0) {
|
|
|
|
return (int *)0x0;
|
|
|
|
}
|
|
|
|
(**(code **)(*piVar2 + 0x14))();
|
|
|
|
return (int *)0x0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00417d60 at 0x00417D60 (size: 80) ---
|
|
|
|
|
|
void __fastcall FUN_00417d60(int *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
int iVar2;
|
|
|
|
|
|
|
|
param_1[2] = 0;
|
|
|
|
if ((param_1[1] & 0x80000000U) == 0x80000000) {
|
|
|
|
operator_delete__((void *)*param_1);
|
|
|
|
*param_1 = 0;
|
|
|
|
param_1[1] = 0;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
if (*param_1 != 0) {
|
|
|
|
iVar2 = (param_1[1] & 0x7fffffffU) - 1;
|
|
|
|
while (-1 < iVar2) {
|
|
|
|
iVar2 = iVar2 + -1;
|
|
|
|
iVar1 = *param_1;
|
|
|
|
*(undefined4 *)(iVar1 + 8 + iVar2 * 8) = 0;
|
|
|
|
*(undefined4 *)(iVar1 + 0xc + iVar2 * 8) = 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00417db0 at 0x00417DB0 (size: 124) ---
|
|
|
|
|
|
undefined4 __thiscall FUN_00417db0(int param_1,undefined4 *param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
uint uVar1;
|
|
|
|
int iVar2;
|
|
|
|
int iVar3;
|
|
|
|
uint uVar4;
|
|
|
|
LONG LVar5;
|
|
|
|
int *piVar6;
|
|
|
|
|
|
|
|
uVar4 = 0;
|
|
|
|
if (*(uint *)(param_1 + 0x20) != 0) {
|
|
|
|
piVar6 = *(int **)(param_1 + 0x18);
|
|
|
|
do {
|
|
|
|
if ((undefined4 *)*piVar6 == param_2) {
|
|
|
|
if (uVar4 < *(uint *)(param_1 + 0x20)) {
|
|
|
|
uVar1 = *(uint *)(param_1 + 0x20) - 1;
|
|
|
|
*(uint *)(param_1 + 0x20) = uVar1;
|
|
|
|
if (uVar4 != uVar1) {
|
|
|
|
iVar2 = *(int *)(param_1 + 0x18);
|
|
|
|
*(undefined4 *)(iVar2 + uVar4 * 8) = *(undefined4 *)(iVar2 + uVar1 * 8);
|
|
|
|
*(undefined4 *)(iVar2 + 4 + uVar4 * 8) = *(undefined4 *)(iVar2 + 4 + uVar1 * 8);
|
|
|
|
iVar2 = *(int *)(param_1 + 0x20);
|
|
|
|
iVar3 = *(int *)(param_1 + 0x18);
|
|
|
|
*(undefined4 *)(iVar3 + iVar2 * 8) = 0;
|
|
|
|
*(undefined4 *)(iVar3 + 4 + iVar2 * 8) = 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
LVar5 = InterlockedDecrement(param_2 + 1);
|
|
|
|
if ((LVar5 == 0) && (param_2 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*param_2)(1);
|
|
|
|
}
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
uVar4 = uVar4 + 1;
|
|
|
|
piVar6 = piVar6 + 2;
|
|
|
|
} while (uVar4 < *(uint *)(param_1 + 0x20));
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00417e30 at 0x00417E30 (size: 109) ---
|
|
|
|
|
|
void __fastcall FUN_00417e30(int param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined4 *puVar1;
|
|
|
|
LONG LVar2;
|
|
|
|
uint uVar3;
|
|
|
|
|
|
|
|
uVar3 = 0;
|
|
|
|
if (*(int *)(param_1 + 0x20) != 0) {
|
|
|
|
do {
|
|
|
|
FUN_00417db0(param_1);
|
|
|
|
puVar1 = *(undefined4 **)(*(int *)(param_1 + 0x18) + uVar3 * 4);
|
|
|
|
if (puVar1 != (undefined4 *)0x0) {
|
|
|
|
LVar2 = InterlockedDecrement(puVar1 + 1);
|
|
|
|
if ((LVar2 == 0) && (puVar1 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar1)(1);
|
|
|
|
}
|
|
|
|
*(undefined4 *)(*(int *)(param_1 + 0x18) + uVar3 * 4) = 0;
|
|
|
|
}
|
|
|
|
uVar3 = uVar3 + 1;
|
|
|
|
} while (uVar3 < *(uint *)(param_1 + 0x20));
|
|
|
|
}
|
|
|
|
*(undefined4 *)(param_1 + 0x20) = 0;
|
|
|
|
*(undefined4 *)(param_1 + 0xc) = 0;
|
|
|
|
*(undefined4 *)(param_1 + 0x24) = DAT_00837c54;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00417ea0 at 0x00417EA0 (size: 185) ---
|
|
|
|
|
|
void __thiscall
|
|
|
|
FUN_00417ea0(int *param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4,uint param_5,
|
|
|
|
undefined4 param_6)
|
|
|
|
|
|
|
|
{
|
|
|
|
uint uVar1;
|
|
|
|
int iVar2;
|
|
|
|
int *piVar3;
|
|
|
|
undefined4 *puVar4;
|
|
|
|
LONG LVar5;
|
|
|
|
int *unaff_ESI;
|
|
|
|
uint uVar6;
|
|
|
|
|
|
|
|
uVar1 = param_1[5];
|
|
|
|
piVar3 = (int *)(**(code **)(*param_1 + 0x10))(¶m_6,param_3,param_4,param_5,param_6);
|
|
|
|
iVar2 = *piVar3;
|
|
|
|
*unaff_ESI = iVar2;
|
|
|
|
if (((char)param_1[0x43] == '\0') && (uVar6 = param_1[5], uVar1 < uVar6)) {
|
|
|
|
while (uVar6 = uVar6 - 1,
|
|
|
|
*(int *)(*(int *)(param_1[2] + ((param_1[3] + uVar6) % (uint)param_1[6]) * 4) + 0x24) !=
|
|
|
|
iVar2) {
|
|
|
|
if (uVar6 <= param_5) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
puVar4 = (undefined4 *)(**(code **)(param_1[1] + 0xc))(uVar6);
|
|
|
|
if (((undefined4 *)puVar4[3] != (undefined4 *)0x0) && (puVar4[9] != DAT_00837c54)) {
|
|
|
|
(*(code *)**(undefined4 **)puVar4[3])(puVar4[9],puVar4[4],puVar4[5]);
|
|
|
|
}
|
|
|
|
LVar5 = InterlockedDecrement(puVar4 + 1);
|
|
|
|
if (LVar5 == 0) {
|
|
|
|
(**(code **)*puVar4)(1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00417ff0 at 0x00417FF0 (size: 172) ---
|
|
|
|
|
|
undefined4 __thiscall FUN_00417ff0(int *param_1,uint param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
int iVar2;
|
|
|
|
int iVar3;
|
|
|
|
|
|
|
|
if (param_2 < (uint)param_1[2]) {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
if ((param_1[1] & 0x7fffffffU) < param_2) {
|
|
|
|
if (param_2 == 0) {
|
|
|
|
FUN_00417d60();
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
iVar2 = thunk_FUN_005df0f5(param_2 * 8);
|
|
|
|
if (iVar2 == 0) {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
FUN_00401000(iVar2,8,param_2,&LAB_004175f0);
|
|
|
|
if (*param_1 != 0) {
|
|
|
|
iVar3 = param_1[2] + -1;
|
|
|
|
while (-1 < iVar3) {
|
|
|
|
iVar3 = iVar3 + -1;
|
|
|
|
iVar1 = *param_1;
|
|
|
|
*(undefined4 *)(iVar2 + 8 + iVar3 * 8) = *(undefined4 *)(iVar1 + 8 + iVar3 * 8);
|
|
|
|
*(undefined4 *)(iVar2 + 0xc + iVar3 * 8) = *(undefined4 *)(iVar1 + 0xc + iVar3 * 8);
|
|
|
|
}
|
|
|
|
if ((param_1[1] & 0x80000000U) == 0x80000000) {
|
|
|
|
operator_delete__((void *)*param_1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
*param_1 = iVar2;
|
|
|
|
param_1[1] = param_2 | 0x80000000;
|
|
|
|
}
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_004180a0 at 0x004180A0 (size: 148) ---
|
|
|
|
|
|
undefined4 __thiscall FUN_004180a0(int *param_1,uint param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
int iVar2;
|
|
|
|
|
|
|
|
if (param_2 < (uint)param_1[2]) {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
if ((param_1[1] & 0x7fffffffU) < param_2) {
|
|
|
|
if (param_2 == 0) {
|
|
|
|
FUN_0044dcb0();
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
iVar1 = thunk_FUN_005df0f5(param_2 * 4);
|
|
|
|
if (iVar1 == 0) {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
if (*param_1 != 0) {
|
|
|
|
iVar2 = param_1[2] + -1;
|
|
|
|
while (-1 < iVar2) {
|
|
|
|
iVar2 = iVar2 + -1;
|
|
|
|
*(undefined4 *)(iVar1 + 4 + iVar2 * 4) = *(undefined4 *)(*param_1 + 4 + iVar2 * 4);
|
|
|
|
}
|
|
|
|
if ((param_1[1] & 0x80000000U) == 0x80000000) {
|
|
|
|
operator_delete__((void *)*param_1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
*param_1 = iVar1;
|
|
|
|
param_1[1] = param_2 | 0x80000000;
|
|
|
|
}
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00418150 at 0x00418150 (size: 65) ---
|
|
|
|
|
|
void __fastcall FUN_00418150(undefined4 *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
*param_1 = &PTR_FUN_00796360;
|
|
|
|
if ((int *)param_1[9] != (int *)0x0) {
|
|
|
|
(**(code **)(*(int *)param_1[9] + 0x14))();
|
|
|
|
param_1[9] = 0;
|
|
|
|
}
|
|
|
|
if ((param_1[7] & 0x80000000) == 0x80000000) {
|
|
|
|
operator_delete__((void *)param_1[6]);
|
|
|
|
}
|
|
|
|
*param_1 = &PTR_FUN_007952f4;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_004181a0 at 0x004181A0 (size: 322) ---
|
|
|
|
|
|
void __fastcall FUN_004181a0(undefined4 *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined4 *puVar1;
|
|
|
|
char cVar2;
|
|
|
|
LONG LVar3;
|
|
|
|
undefined4 uVar4;
|
|
|
|
int *piVar5;
|
|
|
|
uint uVar6;
|
|
|
|
|
|
|
|
uVar6 = 0;
|
|
|
|
*param_1 = &PTR_FUN_00796374;
|
|
|
|
if (param_1[0x10] != 0) {
|
|
|
|
do {
|
|
|
|
puVar1 = *(undefined4 **)(param_1[0xe] + uVar6 * 4);
|
|
|
|
LVar3 = InterlockedDecrement(puVar1 + 1);
|
|
|
|
if ((LVar3 == 0) && (puVar1 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar1)(1);
|
|
|
|
}
|
|
|
|
uVar6 = uVar6 + 1;
|
|
|
|
} while (uVar6 < (uint)param_1[0x10]);
|
|
|
|
}
|
|
|
|
uVar6 = 0;
|
|
|
|
if (param_1[0xd] != 0) {
|
|
|
|
do {
|
|
|
|
puVar1 = *(undefined4 **)(param_1[0xb] + uVar6 * 4);
|
|
|
|
LVar3 = InterlockedDecrement(puVar1 + 1);
|
|
|
|
if ((LVar3 == 0) && (puVar1 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar1)(1);
|
|
|
|
}
|
|
|
|
uVar6 = uVar6 + 1;
|
|
|
|
} while (uVar6 < (uint)param_1[0xd]);
|
|
|
|
}
|
|
|
|
if (((int *)param_1[9] != (int *)0x0) &&
|
|
|
|
(((*(byte *)(param_1 + 0x18) & 4) != 0 ||
|
|
|
|
(cVar2 = (**(code **)(*(int *)param_1[9] + 0x24))(), cVar2 != '\0')))) {
|
|
|
|
uVar4 = (**(code **)(*(int *)param_1[9] + 0x48))();
|
|
|
|
piVar5 = (int *)FUN_00414590(uVar4);
|
|
|
|
if (piVar5 != (int *)0x0) {
|
|
|
|
(**(code **)(*piVar5 + 0x18))(param_1[9]);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if ((int *)param_1[9] != (int *)0x0) {
|
|
|
|
(**(code **)(*(int *)param_1[9] + 0x14))();
|
|
|
|
param_1[9] = 0;
|
|
|
|
}
|
|
|
|
FUN_00406f90();
|
|
|
|
FUN_00406f90();
|
|
|
|
if ((param_1[0xf] & 0x80000000) == 0x80000000) {
|
|
|
|
operator_delete__((void *)param_1[0xe]);
|
|
|
|
}
|
|
|
|
if ((param_1[0xc] & 0x80000000) == 0x80000000) {
|
|
|
|
operator_delete__((void *)param_1[0xb]);
|
|
|
|
}
|
|
|
|
*param_1 = &PTR_FUN_00796360;
|
|
|
|
if ((int *)param_1[9] != (int *)0x0) {
|
|
|
|
(**(code **)(*(int *)param_1[9] + 0x14))();
|
|
|
|
param_1[9] = 0;
|
|
|
|
}
|
|
|
|
if ((param_1[7] & 0x80000000) == 0x80000000) {
|
|
|
|
operator_delete__((void *)param_1[6]);
|
|
|
|
}
|
|
|
|
*param_1 = &PTR_FUN_007952f4;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00418300 at 0x00418300 (size: 131) ---
|
|
|
|
|
|
void __fastcall FUN_00418300(undefined4 *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined4 *puVar1;
|
|
|
|
LONG LVar2;
|
|
|
|
uint uVar3;
|
|
|
|
|
|
|
|
uVar3 = 0;
|
|
|
|
*param_1 = &PTR_FUN_00796370;
|
|
|
|
if (param_1[8] != 0) {
|
|
|
|
do {
|
|
|
|
FUN_00417db0(param_1);
|
|
|
|
puVar1 = *(undefined4 **)(param_1[6] + uVar3 * 4);
|
|
|
|
if (puVar1 != (undefined4 *)0x0) {
|
|
|
|
LVar2 = InterlockedDecrement(puVar1 + 1);
|
|
|
|
if ((LVar2 == 0) && (puVar1 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar1)(1);
|
|
|
|
}
|
|
|
|
*(undefined4 *)(param_1[6] + uVar3 * 4) = 0;
|
|
|
|
}
|
|
|
|
uVar3 = uVar3 + 1;
|
|
|
|
} while (uVar3 < (uint)param_1[8]);
|
|
|
|
}
|
|
|
|
if ((param_1[7] & 0x80000000) == 0x80000000) {
|
|
|
|
operator_delete__((void *)param_1[6]);
|
|
|
|
}
|
|
|
|
*param_1 = &PTR_FUN_007952f4;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00418390 at 0x00418390 (size: 85) ---
|
|
|
|
|
|
undefined4 * __thiscall FUN_00418390(undefined4 *param_1,byte param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
*param_1 = &PTR_FUN_00796360;
|
|
|
|
if ((int *)param_1[9] != (int *)0x0) {
|
|
|
|
(**(code **)(*(int *)param_1[9] + 0x14))();
|
|
|
|
param_1[9] = 0;
|
|
|
|
}
|
|
|
|
if ((param_1[7] & 0x80000000) == 0x80000000) {
|
|
|
|
operator_delete__((void *)param_1[6]);
|
|
|
|
}
|
|
|
|
*param_1 = &PTR_FUN_007952f4;
|
|
|
|
if ((param_2 & 1) != 0) {
|
|
|
|
operator_delete(param_1);
|
|
|
|
}
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_004183f0 at 0x004183F0 (size: 30) ---
|
|
|
|
|
|
void * __thiscall FUN_004183f0(void *param_1,byte param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
FUN_00418300();
|
|
|
|
if ((param_2 & 1) != 0) {
|
|
|
|
operator_delete(param_1);
|
|
|
|
}
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00418410 at 0x00418410 (size: 74) ---
|
|
|
|
|
|
undefined4 * __fastcall FUN_00418410(undefined4 *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
param_1[1] = 1;
|
|
|
|
param_1[2] = 0;
|
|
|
|
param_1[6] = 0;
|
|
|
|
param_1[7] = 0;
|
|
|
|
param_1[8] = 0;
|
|
|
|
param_1[9] = 0;
|
|
|
|
*param_1 = &PTR_FUN_00796374;
|
|
|
|
param_1[0xb] = 0;
|
|
|
|
param_1[0xc] = 0;
|
|
|
|
param_1[0xd] = 0;
|
|
|
|
param_1[0xe] = 0;
|
|
|
|
param_1[0xf] = 0;
|
|
|
|
param_1[0x10] = 0;
|
|
|
|
param_1[0x11] = 0;
|
|
|
|
param_1[0x12] = 0;
|
|
|
|
FUN_00406d60();
|
|
|
|
param_1[0x18] = 0;
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00418460 at 0x00418460 (size: 30) ---
|
|
|
|
|
|
void * __thiscall FUN_00418460(void *param_1,byte param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
FUN_004181a0();
|
|
|
|
if ((param_2 & 1) != 0) {
|
|
|
|
operator_delete(param_1);
|
|
|
|
}
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00418480 at 0x00418480 (size: 30) ---
|
|
|
|
|
|
void * __thiscall FUN_00418480(void *param_1,byte param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
FUN_00418150();
|
|
|
|
if ((param_2 & 1) != 0) {
|
|
|
|
operator_delete(param_1);
|
|
|
|
}
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_004184a0 at 0x004184A0 (size: 40) ---
|
|
|
|
|
|
void * __thiscall FUN_004184a0(void *param_1,byte param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
FUN_004178a0();
|
|
|
|
FUN_00418150();
|
|
|
|
if ((param_2 & 1) != 0) {
|
|
|
|
operator_delete(param_1);
|
|
|
|
}
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_004184d0 at 0x004184D0 (size: 61) ---
|
|
|
|
|
|
undefined4 FUN_004184d0(undefined4 param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined *puVar1;
|
|
|
|
undefined4 *puVar2;
|
|
|
|
bool bVar3;
|
|
|
|
|
|
|
|
puVar1 = PTR_DAT_00818558;
|
|
|
|
puVar2 = (undefined4 *)FUN_00422d20(PTR_DAT_00818554,PTR_DAT_00818558,¶m_1,param_1,0);
|
|
|
|
bVar3 = false;
|
|
|
|
if (puVar2 == (undefined4 *)puVar1) {
|
|
|
|
puVar2 = puVar2 + -1;
|
|
|
|
bVar3 = puVar2 == (undefined4 *)puVar1;
|
|
|
|
}
|
|
|
|
if (!bVar3) {
|
|
|
|
return puVar2[1];
|
|
|
|
}
|
|
|
|
return *puVar2;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00418510 at 0x00418510 (size: 335) ---
|
|
|
|
|
|
void __thiscall FUN_00418510(int param_1,int *param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
int *piVar1;
|
|
|
|
int iVar2;
|
|
|
|
uint *puVar3;
|
|
|
|
int *piVar4;
|
|
|
|
char cVar5;
|
|
|
|
uint uVar6;
|
|
|
|
|
|
|
|
piVar4 = param_2;
|
|
|
|
if ((param_2[3] == 0) && (uVar6 = 0, param_2[8] != 0)) {
|
|
|
|
do {
|
|
|
|
piVar1 = (int *)(piVar4[6] + uVar6 * 8);
|
|
|
|
iVar2 = *piVar1;
|
|
|
|
if ((iVar2 != 0) && (*(char *)(iVar2 + 0x28) == '\0')) {
|
|
|
|
piVar1 = piVar1 + 1;
|
|
|
|
*piVar1 = *piVar1 + 1;
|
|
|
|
if (*(int **)(iVar2 + 0xc) != (int *)0x0) {
|
|
|
|
(**(code **)(**(int **)(iVar2 + 0xc) + 4))
|
|
|
|
(*(undefined4 *)(iVar2 + 0x24),piVar4[4],piVar4[5],piVar4[2],
|
|
|
|
*(undefined4 *)(iVar2 + 0x14),*(undefined4 *)(piVar4[6] + 4 + uVar6 * 8),piVar4
|
|
|
|
);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
uVar6 = uVar6 + 1;
|
|
|
|
} while (uVar6 < (uint)piVar4[8]);
|
|
|
|
}
|
|
|
|
cVar5 = (**(code **)(*piVar4 + 4))();
|
|
|
|
if (cVar5 != '\0') {
|
|
|
|
uVar6 = 0;
|
|
|
|
if (piVar4[8] != 0) {
|
|
|
|
do {
|
|
|
|
param_2 = *(int **)(piVar4[6] + uVar6 * 8);
|
|
|
|
if (param_2 != (int *)0x0) {
|
|
|
|
param_2[2] = param_2[2] + -1;
|
|
|
|
if (piVar4[2] == 1) {
|
|
|
|
if (param_2[4] == 3) {
|
|
|
|
param_2[4] = 2;
|
|
|
|
}
|
|
|
|
else if (param_2[4] == 0) {
|
|
|
|
param_2[4] = 1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (param_2[4] == 1) {
|
|
|
|
param_2[4] = 2;
|
|
|
|
}
|
|
|
|
else if (param_2[4] == 0) {
|
|
|
|
param_2[4] = piVar4[2];
|
|
|
|
}
|
|
|
|
if ((param_2[2] == 0) && ((char)param_2[10] == '\0')) {
|
|
|
|
for (puVar3 = *(uint **)(*(int *)(param_1 + 0xf8) +
|
|
|
|
((uint)param_2[9] % *(uint *)(param_1 + 0x100)) * 4);
|
|
|
|
puVar3 != (uint *)0x0; puVar3 = (uint *)puVar3[1]) {
|
|
|
|
if (*puVar3 == param_2[9]) {
|
|
|
|
if (puVar3 != (uint *)0x0) {
|
|
|
|
InterlockedIncrement(param_2 + 1);
|
|
|
|
*(undefined1 *)(param_2 + 10) = 1;
|
|
|
|
(**(code **)(*(int *)(param_1 + 4) + 4))(¶m_2);
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
uVar6 = uVar6 + 1;
|
|
|
|
} while (uVar6 < (uint)piVar4[8]);
|
|
|
|
}
|
|
|
|
FUN_004178c0();
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00418660 at 0x00418660 (size: 54) ---
|
|
|
|
|
|
undefined4 FUN_00418660(undefined4 param_1,undefined4 *param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined4 uVar1;
|
|
|
|
undefined1 local_c [8];
|
|
|
|
int local_4;
|
|
|
|
|
|
|
|
FUN_00414190(local_c,param_1);
|
|
|
|
if (local_4 != 0) {
|
|
|
|
uVar1 = *(undefined4 *)(local_4 + 0xc);
|
|
|
|
*param_2 = uVar1;
|
|
|
|
return CONCAT31((int3)((uint)uVar1 >> 8),1);
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_004186a0 at 0x004186A0 (size: 81) ---
|
|
|
|
|
|
void __thiscall FUN_004186a0(int param_1,int param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
int iVar2;
|
|
|
|
char cVar3;
|
|
|
|
uint uVar4;
|
|
|
|
undefined4 uVar5;
|
|
|
|
|
|
|
|
InterlockedIncrement((LONG *)(param_2 + 4));
|
|
|
|
uVar4 = *(uint *)(param_1 + 0x1c) & 0x7fffffff;
|
|
|
|
if (uVar4 <= *(uint *)(param_1 + 0x20)) {
|
|
|
|
uVar5 = FUN_00453850(uVar4 + 1);
|
|
|
|
cVar3 = FUN_00417ff0(uVar5);
|
|
|
|
if (cVar3 == '\0') {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
iVar1 = *(int *)(param_1 + 0x20);
|
|
|
|
iVar2 = *(int *)(param_1 + 0x18);
|
|
|
|
*(int *)(iVar2 + iVar1 * 8) = param_2;
|
|
|
|
*(undefined4 *)(iVar2 + 4 + iVar1 * 8) = 0;
|
|
|
|
*(int *)(param_1 + 0x20) = *(int *)(param_1 + 0x20) + 1;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00418700 at 0x00418700 (size: 146) ---
|
|
|
|
|
|
int __thiscall FUN_00418700(int *param_1,undefined4 param_2,undefined4 param_3,undefined4 *param_4)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
undefined4 uVar2;
|
|
|
|
undefined1 local_c [8];
|
|
|
|
int local_4;
|
|
|
|
|
|
|
|
FUN_00414190(local_c,param_4);
|
|
|
|
if (local_4 != 0) {
|
|
|
|
iVar1 = *(int *)(local_4 + 0xc);
|
|
|
|
InterlockedIncrement((LONG *)(iVar1 + 4));
|
|
|
|
return iVar1;
|
|
|
|
}
|
|
|
|
iVar1 = FUN_005df0f5(100);
|
|
|
|
if (iVar1 == 0) {
|
|
|
|
iVar1 = 0;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
iVar1 = FUN_00418410();
|
|
|
|
}
|
|
|
|
uVar2 = (**(code **)(*param_1 + 0x38))(param_4);
|
|
|
|
*(undefined4 *)(iVar1 + 0x5c) = uVar2;
|
|
|
|
*(undefined4 *)(iVar1 + 0x28) = param_2;
|
|
|
|
*(undefined4 *)(iVar1 + 0xc) = 0;
|
|
|
|
*(undefined4 *)(iVar1 + 0x10) = *param_4;
|
|
|
|
*(undefined4 *)(iVar1 + 0x14) = param_4[1];
|
|
|
|
*(undefined4 *)(iVar1 + 0x58) = 1;
|
|
|
|
*(undefined4 *)(iVar1 + 8) = 0;
|
|
|
|
return iVar1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_004187a0 at 0x004187A0 (size: 152) ---
|
|
|
|
|
|
void __thiscall FUN_004187a0(int *param_1,int param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
int iVar2;
|
|
|
|
undefined1 local_c [8];
|
|
|
|
int local_4;
|
|
|
|
|
|
|
|
FUN_00414190(local_c,param_2 + 0x10);
|
|
|
|
if (((local_4 != 0) && (iVar1 = *(int *)(local_4 + 0xc), *(int *)(iVar1 + 8) == 0)) &&
|
|
|
|
((*(byte *)(iVar1 + 0x60) & 2) == 0)) {
|
|
|
|
*(undefined4 *)(iVar1 + 8) = *(undefined4 *)(param_2 + 8);
|
|
|
|
if (*(int *)(param_2 + 8) == 1) {
|
|
|
|
iVar2 = FUN_00417620();
|
|
|
|
if ((iVar2 == 0) || (iVar2 = FUN_00417640(), iVar2 == 0)) {
|
|
|
|
(**(code **)(*param_1 + 0x9c))(param_2 + 0x10,param_2 + 0x28,0,0);
|
|
|
|
}
|
|
|
|
FUN_004176a0(param_2 + 0x28);
|
|
|
|
}
|
|
|
|
(**(code **)(*param_1 + 0x60))(iVar1);
|
|
|
|
}
|
|
|
|
(**(code **)(*param_1 + 0x6c))(param_2);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_004188d0 at 0x004188D0 (size: 250) ---
|
|
|
|
|
|
int * __thiscall FUN_004188d0(int *param_1,undefined4 param_2,int param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
char cVar1;
|
|
|
|
int *piVar2;
|
|
|
|
int *piVar3;
|
|
|
|
int *piVar4;
|
|
|
|
int unaff_EDI;
|
|
|
|
bool bVar5;
|
|
|
|
|
|
|
|
if (*(int *)(param_3 + 4) == DAT_00837c50) {
|
|
|
|
return (int *)0x0;
|
|
|
|
}
|
|
|
|
piVar2 = (int *)(**(code **)(*param_1 + 0x38))(param_3);
|
|
|
|
if (piVar2 == (int *)0x0) {
|
|
|
|
return (int *)0x0;
|
|
|
|
}
|
|
|
|
piVar3 = (int *)(**(code **)(*param_1 + 0x84))(param_3,piVar2);
|
|
|
|
bVar5 = false;
|
|
|
|
piVar4 = piVar3;
|
|
|
|
if (piVar3 == (int *)0x0) {
|
|
|
|
cVar1 = FUN_00418660(param_3,&stack0xfffffffc);
|
|
|
|
piVar4 = piRam00000024;
|
|
|
|
if ((cVar1 == '\0') || (piVar3 = piRam00000024, piRam00000024 == (int *)0x0)) {
|
|
|
|
piVar4 = piVar3;
|
|
|
|
cVar1 = (**(code **)(*piVar2 + 0x20))();
|
|
|
|
if (cVar1 != '\0') {
|
|
|
|
piVar4 = (int *)(**(code **)(*param_1 + 0x78))(param_3,piVar2);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
if (((uRam00000060 & 4) == 0) &&
|
|
|
|
(cVar1 = (**(code **)(*piRam00000024 + 0x24))(), cVar1 == '\0')) {
|
|
|
|
return (int *)0x0;
|
|
|
|
}
|
|
|
|
uRam00000060 = uRam00000060 | 4;
|
|
|
|
(**(code **)(*param_1 + 0x94))(piVar4,piVar2);
|
|
|
|
(**(code **)(*piVar4 + 0x10))();
|
|
|
|
}
|
|
|
|
bVar5 = piVar4 == (int *)0x0;
|
|
|
|
}
|
|
|
|
if (!bVar5) {
|
|
|
|
if ((char)piVar4[2] != '\0') {
|
|
|
|
return piVar4;
|
|
|
|
}
|
|
|
|
if (unaff_EDI == 1) {
|
|
|
|
return piVar4;
|
|
|
|
}
|
|
|
|
cVar1 = (**(code **)(*piVar4 + 0x28))();
|
|
|
|
if (cVar1 != '\0') {
|
|
|
|
*(undefined1 *)(piVar4 + 2) = 1;
|
|
|
|
return piVar4;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (piVar4 != (int *)0x0) {
|
|
|
|
(**(code **)(*piVar4 + 0x14))();
|
|
|
|
}
|
|
|
|
return (int *)0x0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00418a10 at 0x00418A10 (size: 143) ---
|
|
|
|
|
|
undefined4 * __thiscall FUN_00418a10(undefined4 *param_1,undefined4 param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined *puVar1;
|
|
|
|
uint *puVar2;
|
|
|
|
undefined4 uVar3;
|
|
|
|
uint uVar4;
|
|
|
|
int iVar5;
|
|
|
|
undefined4 *puVar6;
|
|
|
|
|
|
|
|
param_1[0x18] = 0;
|
|
|
|
param_1[0x19] = 0;
|
|
|
|
param_1[0x1a] = 0;
|
|
|
|
param_1[0x1b] = 0;
|
|
|
|
*param_1 = &PTR_FUN_00795f88;
|
|
|
|
puVar1 = PTR_DAT_00818558;
|
|
|
|
puVar2 = (uint *)FUN_00422d20(PTR_DAT_00818554,PTR_DAT_00818558,¶m_2,param_2,0);
|
|
|
|
if (puVar2 == (uint *)puVar1) {
|
|
|
|
puVar2 = puVar2 + -1;
|
|
|
|
}
|
|
|
|
uVar4 = *puVar2;
|
|
|
|
param_1[0x1a] = uVar4;
|
|
|
|
if (uVar4 < 0x18) {
|
|
|
|
param_1[0x18] = param_1 + 1;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
uVar3 = thunk_FUN_005df0f5(uVar4 << 2);
|
|
|
|
param_1[0x18] = uVar3;
|
|
|
|
}
|
|
|
|
param_1[0x19] = (undefined4 *)param_1[0x18] + param_1[0x1a];
|
|
|
|
puVar6 = (undefined4 *)param_1[0x18];
|
|
|
|
for (uVar4 = param_1[0x1a] & 0x3fffffff; uVar4 != 0; uVar4 = uVar4 - 1) {
|
|
|
|
*puVar6 = 0;
|
|
|
|
puVar6 = puVar6 + 1;
|
|
|
|
}
|
|
|
|
for (iVar5 = 0; iVar5 != 0; iVar5 = iVar5 + -1) {
|
|
|
|
*(undefined1 *)puVar6 = 0;
|
|
|
|
puVar6 = (undefined4 *)((int)puVar6 + 1);
|
|
|
|
}
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00418aa0 at 0x00418AA0 (size: 143) ---
|
|
|
|
|
|
undefined4 * __thiscall FUN_00418aa0(undefined4 *param_1,undefined4 param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined *puVar1;
|
|
|
|
uint *puVar2;
|
|
|
|
undefined4 uVar3;
|
|
|
|
uint uVar4;
|
|
|
|
int iVar5;
|
|
|
|
undefined4 *puVar6;
|
|
|
|
|
|
|
|
param_1[0x18] = 0;
|
|
|
|
param_1[0x19] = 0;
|
|
|
|
param_1[0x1a] = 0;
|
|
|
|
param_1[0x1b] = 0;
|
|
|
|
*param_1 = &PTR_FUN_00795f8c;
|
|
|
|
puVar1 = PTR_DAT_00818558;
|
|
|
|
puVar2 = (uint *)FUN_00422d20(PTR_DAT_00818554,PTR_DAT_00818558,¶m_2,param_2,0);
|
|
|
|
if (puVar2 == (uint *)puVar1) {
|
|
|
|
puVar2 = puVar2 + -1;
|
|
|
|
}
|
|
|
|
uVar4 = *puVar2;
|
|
|
|
param_1[0x1a] = uVar4;
|
|
|
|
if (uVar4 < 0x18) {
|
|
|
|
param_1[0x18] = param_1 + 1;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
uVar3 = thunk_FUN_005df0f5(uVar4 << 2);
|
|
|
|
param_1[0x18] = uVar3;
|
|
|
|
}
|
|
|
|
param_1[0x19] = (undefined4 *)param_1[0x18] + param_1[0x1a];
|
|
|
|
puVar6 = (undefined4 *)param_1[0x18];
|
|
|
|
for (uVar4 = param_1[0x1a] & 0x3fffffff; uVar4 != 0; uVar4 = uVar4 - 1) {
|
|
|
|
*puVar6 = 0;
|
|
|
|
puVar6 = puVar6 + 1;
|
|
|
|
}
|
|
|
|
for (iVar5 = 0; iVar5 != 0; iVar5 = iVar5 + -1) {
|
|
|
|
*(undefined1 *)puVar6 = 0;
|
|
|
|
puVar6 = (undefined4 *)((int)puVar6 + 1);
|
|
|
|
}
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00418b30 at 0x00418B30 (size: 269) ---
|
|
|
|
|
|
undefined4 __thiscall FUN_00418b30(int param_1,int param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
int *piVar2;
|
|
|
|
int *piVar3;
|
|
|
|
int *piVar4;
|
|
|
|
undefined4 uVar5;
|
|
|
|
int *piVar6;
|
|
|
|
uint uVar7;
|
|
|
|
int *piVar8;
|
|
|
|
|
|
|
|
if (param_2 == *(int *)(param_1 + 0x68)) {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
iVar1 = *(int *)(param_1 + 0x6c);
|
|
|
|
piVar2 = (int *)0x0;
|
|
|
|
do {
|
|
|
|
if (iVar1 == 0) {
|
|
|
|
if (*(void **)(param_1 + 0x60) != (void *)(param_1 + 4)) {
|
|
|
|
operator_delete__(*(void **)(param_1 + 0x60));
|
|
|
|
}
|
|
|
|
*(undefined4 *)(param_1 + 0x60) = 0;
|
|
|
|
*(undefined4 *)(param_1 + 100) = 0;
|
|
|
|
*(undefined4 *)(param_1 + 0x68) = 0;
|
|
|
|
*(undefined4 *)(param_1 + 0x6c) = 0;
|
|
|
|
FUN_00693b20(param_2);
|
|
|
|
while (piVar2 != (int *)0x0) {
|
|
|
|
piVar8 = (int *)piVar2[2];
|
|
|
|
if (*(int *)(param_1 + 0x68) * 2 < *(int *)(param_1 + 0x6c) + 1) {
|
|
|
|
uVar5 = FUN_004184d0(*(int *)(param_1 + 0x68));
|
|
|
|
FUN_00418b30(uVar5);
|
|
|
|
}
|
|
|
|
uVar7 = (uint)(piVar2[1] + *piVar2) % *(uint *)(param_1 + 0x68);
|
|
|
|
iVar1 = *(int *)(param_1 + 0x60);
|
|
|
|
piVar2[2] = *(int *)(iVar1 + uVar7 * 4);
|
|
|
|
*(int **)(iVar1 + uVar7 * 4) = piVar2;
|
|
|
|
uVar7 = iVar1 + uVar7 * 4;
|
|
|
|
if (uVar7 < *(uint *)(param_1 + 100)) {
|
|
|
|
*(uint *)(param_1 + 100) = uVar7;
|
|
|
|
}
|
|
|
|
*(int *)(param_1 + 0x6c) = *(int *)(param_1 + 0x6c) + 1;
|
|
|
|
piVar2 = piVar8;
|
|
|
|
}
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
piVar8 = *(int **)(param_1 + 100);
|
|
|
|
while (piVar8 != (int *)(*(int *)(param_1 + 0x60) + *(int *)(param_1 + 0x68) * 4)) {
|
|
|
|
if (**(int **)(param_1 + 100) != 0) {
|
|
|
|
piVar8 = *(int **)(param_1 + 100);
|
|
|
|
piVar6 = (int *)*piVar8;
|
|
|
|
goto LAB_00418b7e;
|
|
|
|
}
|
|
|
|
piVar8 = *(int **)(param_1 + 100) + 1;
|
|
|
|
*(int **)(param_1 + 100) = piVar8;
|
|
|
|
}
|
|
|
|
piVar8 = (int *)0x0;
|
|
|
|
piVar6 = (int *)0x0;
|
|
|
|
LAB_00418b7e:
|
|
|
|
piVar4 = (int *)*piVar8;
|
|
|
|
if (piVar4 == piVar6) {
|
|
|
|
LAB_00418b91:
|
|
|
|
*piVar8 = piVar4[2];
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
do {
|
|
|
|
piVar3 = piVar4;
|
|
|
|
piVar4 = (int *)piVar3[2];
|
|
|
|
} while (piVar4 != piVar6);
|
|
|
|
if (piVar3 == (int *)0x0) goto LAB_00418b91;
|
|
|
|
piVar3[2] = piVar4[2];
|
|
|
|
}
|
|
|
|
*(int *)(param_1 + 0x6c) = *(int *)(param_1 + 0x6c) + -1;
|
|
|
|
piVar6[2] = (int)piVar2;
|
|
|
|
iVar1 = *(int *)(param_1 + 0x6c);
|
|
|
|
piVar2 = piVar6;
|
|
|
|
} while( true );
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00418c40 at 0x00418C40 (size: 73) ---
|
|
|
|
|
|
void __fastcall FUN_00418c40(int param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined *puVar1;
|
|
|
|
undefined4 *puVar2;
|
|
|
|
undefined4 local_4;
|
|
|
|
|
|
|
|
puVar1 = PTR_DAT_00818558;
|
|
|
|
local_4 = *(undefined4 *)(param_1 + 0x68);
|
|
|
|
puVar2 = (undefined4 *)FUN_00422d20(PTR_DAT_00818554,PTR_DAT_00818558,&local_4,local_4,0);
|
|
|
|
if ((puVar2 != (undefined4 *)puVar1) || (puVar2 = puVar2 + -1, puVar2 != (undefined4 *)puVar1)) {
|
|
|
|
puVar2 = puVar2 + 1;
|
|
|
|
}
|
|
|
|
FUN_00418b30(*puVar2);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00418c90 at 0x00418C90 (size: 83) ---
|
|
|
|
|
|
void __thiscall FUN_00418c90(int param_1,int param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
char cVar1;
|
|
|
|
uint uVar2;
|
|
|
|
undefined4 uVar3;
|
|
|
|
|
|
|
|
InterlockedIncrement((LONG *)(param_2 + 4));
|
|
|
|
uVar2 = *(uint *)(param_1 + 0x1c) & 0x7fffffff;
|
|
|
|
if (uVar2 <= *(uint *)(param_1 + 0x20)) {
|
|
|
|
uVar3 = FUN_00453850(uVar2 + 1);
|
|
|
|
cVar1 = FUN_004180a0(uVar3);
|
|
|
|
if (cVar1 == '\0') goto LAB_00418cd5;
|
|
|
|
}
|
|
|
|
*(int *)(*(int *)(param_1 + 0x18) + *(int *)(param_1 + 0x20) * 4) = param_2;
|
|
|
|
*(int *)(param_1 + 0x20) = *(int *)(param_1 + 0x20) + 1;
|
|
|
|
LAB_00418cd5:
|
|
|
|
FUN_004186a0(param_1);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00419170 at 0x00419170 (size: 207) ---
|
|
|
|
|
|
void FUN_00419170(undefined4 param_1,int param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
int iVar2;
|
|
|
|
int *piVar3;
|
|
|
|
int iVar4;
|
|
|
|
int local_c;
|
|
|
|
int *local_8;
|
|
|
|
int local_4;
|
|
|
|
|
|
|
|
FUN_0052dcf0(&local_c);
|
|
|
|
joined_r0x00419187:
|
|
|
|
do {
|
|
|
|
if (local_4 == 0) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
do {
|
|
|
|
if ((param_2 == 1) ||
|
|
|
|
((param_2 != 2 && ((param_2 != 3 || ((~(byte)(*(uint *)(local_4 + 0xc) >> 3) & 1) == 0)))))
|
|
|
|
) {
|
|
|
|
iVar2 = *(int *)(local_4 + 8);
|
|
|
|
piVar3 = local_8;
|
|
|
|
iVar4 = iVar2;
|
|
|
|
if (iVar2 != 0) goto LAB_004191df;
|
|
|
|
goto LAB_004191d0;
|
|
|
|
}
|
|
|
|
local_4 = *(int *)(local_4 + 8);
|
|
|
|
} while (local_4 != 0);
|
|
|
|
do {
|
|
|
|
local_8 = local_8 + 1;
|
|
|
|
if (local_8 == (int *)(*(int *)(local_c + 0x60) + *(int *)(local_c + 0x68) * 4)) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
local_4 = *local_8;
|
|
|
|
} while (local_4 == 0);
|
|
|
|
} while( true );
|
|
|
|
while (iVar4 = *piVar3, iVar4 == 0) {
|
|
|
|
LAB_004191d0:
|
|
|
|
piVar3 = piVar3 + 1;
|
|
|
|
iVar4 = iVar2;
|
|
|
|
if (piVar3 == (int *)(*(int *)(local_c + 0x60) + *(int *)(local_c + 0x68) * 4)) break;
|
|
|
|
}
|
|
|
|
LAB_004191df:
|
|
|
|
iVar2 = *local_8;
|
|
|
|
if (iVar2 != local_4) {
|
|
|
|
do {
|
|
|
|
iVar1 = iVar2;
|
|
|
|
iVar2 = *(int *)(iVar1 + 8);
|
|
|
|
} while (iVar2 != local_4);
|
|
|
|
if (iVar1 != 0) {
|
|
|
|
*(undefined4 *)(iVar1 + 8) = *(undefined4 *)(iVar2 + 8);
|
|
|
|
*(int *)(local_c + 0x6c) = *(int *)(local_c + 0x6c) + -1;
|
|
|
|
local_8 = piVar3;
|
|
|
|
local_4 = iVar4;
|
|
|
|
goto joined_r0x00419187;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
*local_8 = *(int *)(iVar2 + 8);
|
|
|
|
*(int *)(local_c + 0x6c) = *(int *)(local_c + 0x6c) + -1;
|
|
|
|
local_8 = piVar3;
|
|
|
|
local_4 = iVar4;
|
|
|
|
goto joined_r0x00419187;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00419240 at 0x00419240 (size: 110) ---
|
|
|
|
|
|
uint __thiscall FUN_00419240(int param_1,int *param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
uint uVar2;
|
|
|
|
undefined1 local_c [8];
|
|
|
|
uint local_4;
|
|
|
|
|
|
|
|
FUN_00414190(local_c,param_2);
|
|
|
|
if (local_4 != 0) {
|
|
|
|
return local_4 & 0xffffff00;
|
|
|
|
}
|
|
|
|
if (*(int *)(param_1 + 0x68) * 2 < *(int *)(param_1 + 0x6c) + 1) {
|
|
|
|
FUN_00414ce0();
|
|
|
|
}
|
|
|
|
uVar2 = (uint)(param_2[1] + *param_2) % *(uint *)(param_1 + 0x68);
|
|
|
|
iVar1 = *(int *)(param_1 + 0x60);
|
|
|
|
param_2[2] = *(int *)(iVar1 + uVar2 * 4);
|
|
|
|
*(int **)(iVar1 + uVar2 * 4) = param_2;
|
|
|
|
uVar2 = iVar1 + uVar2 * 4;
|
|
|
|
if (uVar2 < *(uint *)(param_1 + 100)) {
|
|
|
|
*(uint *)(param_1 + 100) = uVar2;
|
|
|
|
}
|
|
|
|
*(int *)(param_1 + 0x6c) = *(int *)(param_1 + 0x6c) + 1;
|
|
|
|
return CONCAT31((int3)(uVar2 >> 8),1);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_004192b0 at 0x004192B0 (size: 120) ---
|
|
|
|
|
|
uint __thiscall FUN_004192b0(int param_1,uint *param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
uint *puVar1;
|
|
|
|
int iVar2;
|
|
|
|
uint uVar3;
|
|
|
|
|
|
|
|
puVar1 = *(uint **)(*(int *)(param_1 + 0x60) + (*param_2 % *(uint *)(param_1 + 0x68)) * 4);
|
|
|
|
do {
|
|
|
|
if (puVar1 == (uint *)0x0) {
|
|
|
|
LAB_004192db:
|
|
|
|
if ((int)(*(uint *)(param_1 + 0x68) * 2) < *(int *)(param_1 + 0x6c) + 1) {
|
|
|
|
FUN_00414d30();
|
|
|
|
}
|
|
|
|
uVar3 = *param_2 % *(uint *)(param_1 + 0x68);
|
|
|
|
iVar2 = *(int *)(param_1 + 0x60);
|
|
|
|
param_2[1] = *(uint *)(iVar2 + uVar3 * 4);
|
|
|
|
*(uint **)(iVar2 + uVar3 * 4) = param_2;
|
|
|
|
uVar3 = iVar2 + uVar3 * 4;
|
|
|
|
if (uVar3 < *(uint *)(param_1 + 100)) {
|
|
|
|
*(uint *)(param_1 + 100) = uVar3;
|
|
|
|
}
|
|
|
|
iVar2 = *(int *)(param_1 + 0x6c) + 1;
|
|
|
|
*(int *)(param_1 + 0x6c) = iVar2;
|
|
|
|
return CONCAT31((int3)((uint)iVar2 >> 8),1);
|
|
|
|
}
|
|
|
|
if (*puVar1 == *param_2) {
|
|
|
|
if (puVar1 != (uint *)0x0) {
|
|
|
|
return (uint)puVar1 & 0xffffff00;
|
|
|
|
}
|
|
|
|
goto LAB_004192db;
|
|
|
|
}
|
|
|
|
puVar1 = (uint *)puVar1[1];
|
|
|
|
} while( true );
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00419470 at 0x00419470 (size: 94) ---
|
|
|
|
|
|
undefined4 FUN_00419470(undefined4 *param_1,undefined4 *param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
char cVar1;
|
|
|
|
undefined4 *puVar2;
|
|
|
|
|
|
|
|
puVar2 = (undefined4 *)FUN_005df0f5(0x10);
|
|
|
|
if (puVar2 == (undefined4 *)0x0) {
|
|
|
|
puVar2 = (undefined4 *)0x0;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
*puVar2 = *param_1;
|
|
|
|
puVar2[1] = param_1[1];
|
|
|
|
puVar2[2] = 0;
|
|
|
|
puVar2[3] = *param_2;
|
|
|
|
}
|
|
|
|
cVar1 = FUN_00419240(puVar2);
|
|
|
|
if (cVar1 == '\0') {
|
|
|
|
if (puVar2 != (undefined4 *)0x0) {
|
|
|
|
operator_delete(puVar2);
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_004194d0 at 0x004194D0 (size: 88) ---
|
|
|
|
|
|
undefined4 FUN_004194d0(undefined4 *param_1,undefined4 *param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
char cVar1;
|
|
|
|
undefined4 *puVar2;
|
|
|
|
|
|
|
|
puVar2 = (undefined4 *)FUN_005df0f5(0xc);
|
|
|
|
if (puVar2 == (undefined4 *)0x0) {
|
|
|
|
puVar2 = (undefined4 *)0x0;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
*puVar2 = *param_1;
|
|
|
|
puVar2[1] = 0;
|
|
|
|
puVar2[2] = *param_2;
|
|
|
|
}
|
|
|
|
cVar1 = FUN_004192b0(puVar2);
|
|
|
|
if (cVar1 == '\0') {
|
|
|
|
if (puVar2 != (undefined4 *)0x0) {
|
|
|
|
operator_delete(puVar2);
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00419530 at 0x00419530 (size: 188) ---
|
|
|
|
|
|
undefined4 * __thiscall FUN_00419530(int param_1,undefined4 *param_2,undefined4 param_3,int param_4)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
int iVar2;
|
|
|
|
undefined4 *puVar3;
|
|
|
|
|
|
|
|
iVar2 = (int)param_2;
|
|
|
|
if (param_2 != (undefined4 *)0x0) {
|
|
|
|
if (*(int *)(param_1 + 0x108) == 0) {
|
|
|
|
*(undefined4 *)(param_1 + 0x108) = 1;
|
|
|
|
}
|
|
|
|
iVar1 = *(int *)(param_1 + 0x108);
|
|
|
|
*(int *)(param_1 + 0x108) = iVar1 + 1;
|
|
|
|
puVar3 = (undefined4 *)FUN_005df0f5(0x2c);
|
|
|
|
if (puVar3 == (undefined4 *)0x0) {
|
|
|
|
puVar3 = (undefined4 *)0x0;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
puVar3[1] = 1;
|
|
|
|
*puVar3 = &PTR_FUN_00796370;
|
|
|
|
puVar3[2] = 0;
|
|
|
|
puVar3[3] = iVar2;
|
|
|
|
puVar3[4] = 0;
|
|
|
|
puVar3[5] = param_3;
|
|
|
|
puVar3[6] = 0;
|
|
|
|
puVar3[7] = 0;
|
|
|
|
puVar3[8] = 0;
|
|
|
|
puVar3[9] = iVar1;
|
|
|
|
*(undefined1 *)(puVar3 + 10) = 0;
|
|
|
|
}
|
|
|
|
puVar3[2] = puVar3[2] + param_4;
|
|
|
|
param_2 = puVar3;
|
|
|
|
InterlockedIncrement(puVar3 + 1);
|
|
|
|
param_3 = puVar3[9];
|
|
|
|
FUN_004194d0(¶m_3,¶m_2);
|
|
|
|
return puVar3;
|
|
|
|
}
|
|
|
|
return (undefined4 *)0x0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00419aa0 at 0x00419AA0 (size: 69) ---
|
|
|
|
|
|
void __thiscall FUN_00419aa0(int *param_1,int param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
uint uVar1;
|
|
|
|
int iVar2;
|
|
|
|
char cVar3;
|
|
|
|
|
|
|
|
iVar2 = param_2;
|
|
|
|
cVar3 = FUN_00419470(param_2 + 0x10,¶m_2);
|
|
|
|
if (cVar3 != '\0') {
|
|
|
|
InterlockedIncrement((LONG *)(iVar2 + 4));
|
|
|
|
uVar1 = *(uint *)(iVar2 + 0x60);
|
|
|
|
*(uint *)(iVar2 + 0x60) = uVar1 | 1;
|
|
|
|
*(uint *)(iVar2 + 0x60) = uVar1 | 3;
|
|
|
|
(**(code **)(*param_1 + 0x50))(iVar2);
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00419d10 at 0x00419D10 (size: 633) ---
|
|
|
|
|
|
/* WARNING: Removing unreachable block (ram,0x00419edd) */
|
|
|
|
/* WARNING: Removing unreachable block (ram,0x00419e3a) */
|
|
|
|
/* WARNING: Removing unreachable block (ram,0x00419e56) */
|
|
|
|
/* WARNING: Removing unreachable block (ram,0x00419e5f) */
|
|
|
|
/* WARNING: Removing unreachable block (ram,0x00419e71) */
|
|
|
|
/* WARNING: Removing unreachable block (ram,0x00419e42) */
|
|
|
|
/* WARNING: Removing unreachable block (ram,0x00419e4b) */
|
|
|
|
/* WARNING: Removing unreachable block (ram,0x00419f3c) */
|
|
|
|
|
|
|
|
undefined4 FUN_00419d10(int param_1,int param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
int *piVar1;
|
|
|
|
int iVar2;
|
|
|
|
int iVar3;
|
|
|
|
int *piVar4;
|
|
|
|
char cVar5;
|
|
|
|
undefined4 uVar6;
|
|
|
|
uint uVar7;
|
|
|
|
uint local_80;
|
|
|
|
undefined1 local_6c [92];
|
|
|
|
undefined1 *local_10;
|
|
|
|
uint local_8;
|
|
|
|
|
|
|
|
FUN_00414820(0x17);
|
|
|
|
uVar6 = FUN_00453850(1);
|
|
|
|
cVar5 = FUN_004180a0(uVar6);
|
|
|
|
if (cVar5 != '\0') {
|
|
|
|
iRam00000000 = param_1;
|
|
|
|
}
|
|
|
|
local_80 = (uint)(cVar5 != '\0');
|
|
|
|
FUN_00414d80(param_1 + 0x10);
|
|
|
|
do {
|
|
|
|
do {
|
|
|
|
if (local_80 == 0) {
|
|
|
|
FUN_0041a390();
|
|
|
|
if (local_10 != local_6c) {
|
|
|
|
operator_delete__(local_10);
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
uVar7 = 0;
|
|
|
|
local_80 = local_80 - 1;
|
|
|
|
iVar2 = *(int *)(local_80 * 4);
|
|
|
|
*(undefined4 *)(local_80 * 4) = 0;
|
|
|
|
} while (*(int *)(iVar2 + 0x40) == 0);
|
|
|
|
do {
|
|
|
|
piVar1 = (int *)(*(int *)(iVar2 + 0x38) + uVar7 * 4);
|
|
|
|
iVar3 = *piVar1;
|
|
|
|
if ((iVar3 == param_2) ||
|
|
|
|
((*(int *)(param_2 + 0x10) == *(int *)(iVar3 + 0x10) &&
|
|
|
|
(*(int *)(param_2 + 0x14) == *(int *)(iVar3 + 0x14))))) {
|
|
|
|
FUN_0041a390();
|
|
|
|
if (local_10 != local_6c) {
|
|
|
|
operator_delete__(local_10);
|
|
|
|
}
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
for (piVar4 = *(int **)(local_10 +
|
|
|
|
((uint)(*(int *)(iVar3 + 0x10) + *(int *)(iVar3 + 0x14)) % local_8) * 4
|
|
|
|
); piVar4 != (int *)0x0; piVar4 = (int *)piVar4[2]) {
|
|
|
|
if ((*piVar4 == *(int *)(iVar3 + 0x10)) && (piVar4[1] == *(int *)(iVar3 + 0x14))) {
|
|
|
|
if (piVar4 != (int *)0x0) goto LAB_00419eb1;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
cVar5 = FUN_004180a0(8);
|
|
|
|
if (cVar5 != '\0') {
|
|
|
|
*(int *)(local_80 * 4) = *piVar1;
|
|
|
|
local_80 = local_80 + 1;
|
|
|
|
}
|
|
|
|
FUN_00414d80(*(int *)(*(int *)(iVar2 + 0x38) + uVar7 * 4) + 0x10);
|
|
|
|
LAB_00419eb1:
|
|
|
|
uVar7 = uVar7 + 1;
|
|
|
|
} while (uVar7 < *(uint *)(iVar2 + 0x40));
|
|
|
|
} while( true );
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00419f90 at 0x00419F90 (size: 82) ---
|
|
|
|
|
|
undefined4 * __thiscall FUN_00419f90(undefined4 *param_1,byte param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
*param_1 = &PTR_FUN_007963a4;
|
|
|
|
FUN_005870f0();
|
|
|
|
param_1[1] = &PTR_FUN_00795f8c;
|
|
|
|
if ((undefined4 *)param_1[0x19] != param_1 + 2) {
|
|
|
|
operator_delete__((undefined4 *)param_1[0x19]);
|
|
|
|
}
|
|
|
|
param_1[0x19] = 0;
|
|
|
|
param_1[0x1a] = 0;
|
|
|
|
param_1[0x1b] = 0;
|
|
|
|
param_1[0x1c] = 0;
|
|
|
|
if ((param_2 & 1) != 0) {
|
|
|
|
operator_delete(param_1);
|
|
|
|
}
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0041a1b0 at 0x0041A1B0 (size: 82) ---
|
|
|
|
|
|
undefined4 * __thiscall FUN_0041a1b0(undefined4 *param_1,byte param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
*param_1 = &PTR_FUN_007963a8;
|
|
|
|
FUN_0041a390();
|
|
|
|
param_1[1] = &PTR_FUN_00795f88;
|
|
|
|
if ((undefined4 *)param_1[0x19] != param_1 + 2) {
|
|
|
|
operator_delete__((undefined4 *)param_1[0x19]);
|
|
|
|
}
|
|
|
|
param_1[0x19] = 0;
|
|
|
|
param_1[0x1a] = 0;
|
|
|
|
param_1[0x1b] = 0;
|
|
|
|
param_1[0x1c] = 0;
|
|
|
|
if ((param_2 & 1) != 0) {
|
|
|
|
operator_delete(param_1);
|
|
|
|
}
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0041a210 at 0x0041A210 (size: 137) ---
|
|
|
|
|
|
undefined4 * __fastcall FUN_0041a210(undefined4 *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined4 uVar1;
|
|
|
|
|
|
|
|
*param_1 = &PTR_FUN_007963b0;
|
|
|
|
param_1[1] = &PTR_FUN_00795f70;
|
|
|
|
param_1[3] = 0;
|
|
|
|
param_1[4] = 0;
|
|
|
|
param_1[5] = 0;
|
|
|
|
param_1[6] = 0;
|
|
|
|
param_1[7] = 0x100;
|
|
|
|
uVar1 = thunk_FUN_005df0f5(0x4000);
|
|
|
|
param_1[2] = uVar1;
|
|
|
|
param_1[6] = 0x1000;
|
|
|
|
param_1[8] = &PTR_FUN_007963a8;
|
|
|
|
FUN_00418a10(0);
|
|
|
|
param_1[8] = &PTR_FUN_007963a8;
|
|
|
|
param_1[0x25] = &PTR_FUN_007963a4;
|
|
|
|
FUN_00418aa0(0);
|
|
|
|
param_1[0x25] = &PTR_FUN_007963a4;
|
|
|
|
*(undefined1 *)(param_1 + 0x43) = 0;
|
|
|
|
param_1[0x42] = 1;
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0041a2a0 at 0x0041A2A0 (size: 120) ---
|
|
|
|
|
|
void __thiscall FUN_0041a2a0(int param_1,int param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
int iVar2;
|
|
|
|
undefined4 *puVar3;
|
|
|
|
int *piVar4;
|
|
|
|
undefined1 local_c [12];
|
|
|
|
|
|
|
|
puVar3 = (undefined4 *)FUN_0052dcf0(local_c);
|
|
|
|
*(undefined4 *)(param_1 + 0x70) = *puVar3;
|
|
|
|
iVar1 = puVar3[2];
|
|
|
|
*(int *)(param_1 + 0x78) = iVar1;
|
|
|
|
*(undefined4 *)(param_1 + 0x74) = puVar3[1];
|
|
|
|
do {
|
|
|
|
if ((iVar1 == 0) || (param_2 == 0)) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
iVar1 = *(int *)(*(int *)(param_1 + 0x78) + 8);
|
|
|
|
*(int *)(param_1 + 0x78) = iVar1;
|
|
|
|
if (iVar1 == 0) {
|
|
|
|
iVar1 = *(int *)(*(int *)(param_1 + 0x70) + 0x68);
|
|
|
|
iVar2 = *(int *)(*(int *)(param_1 + 0x70) + 0x60);
|
|
|
|
do {
|
|
|
|
piVar4 = (int *)(*(int *)(param_1 + 0x74) + 4);
|
|
|
|
*(int **)(param_1 + 0x74) = piVar4;
|
|
|
|
if (piVar4 == (int *)(iVar2 + iVar1 * 4)) goto LAB_0041a307;
|
|
|
|
} while (*piVar4 == 0);
|
|
|
|
*(int *)(param_1 + 0x78) = *piVar4;
|
|
|
|
}
|
|
|
|
LAB_0041a307:
|
|
|
|
iVar1 = *(int *)(param_1 + 0x78);
|
|
|
|
param_2 = param_2 + -1;
|
|
|
|
} while( true );
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0041a320 at 0x0041A320 (size: 110) ---
|
|
|
|
|
|
uint __thiscall FUN_0041a320(int param_1,int *param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
uint uVar2;
|
|
|
|
undefined1 local_c [8];
|
|
|
|
uint local_4;
|
|
|
|
|
|
|
|
FUN_00414190(local_c,param_2);
|
|
|
|
if (local_4 != 0) {
|
|
|
|
return local_4 & 0xffffff00;
|
|
|
|
}
|
|
|
|
if (*(int *)(param_1 + 0x68) * 2 < *(int *)(param_1 + 0x6c) + 1) {
|
|
|
|
FUN_00418c40();
|
|
|
|
}
|
|
|
|
uVar2 = (uint)(param_2[1] + *param_2) % *(uint *)(param_1 + 0x68);
|
|
|
|
iVar1 = *(int *)(param_1 + 0x60);
|
|
|
|
param_2[2] = *(int *)(iVar1 + uVar2 * 4);
|
|
|
|
*(int **)(iVar1 + uVar2 * 4) = param_2;
|
|
|
|
uVar2 = iVar1 + uVar2 * 4;
|
|
|
|
if (uVar2 < *(uint *)(param_1 + 100)) {
|
|
|
|
*(uint *)(param_1 + 100) = uVar2;
|
|
|
|
}
|
|
|
|
*(int *)(param_1 + 0x6c) = *(int *)(param_1 + 0x6c) + 1;
|
|
|
|
return CONCAT31((int3)(uVar2 >> 8),1);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0041a390 at 0x0041A390 (size: 122) ---
|
|
|
|
|
|
void __fastcall FUN_0041a390(int param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
void *pvVar2;
|
|
|
|
void *pvVar3;
|
|
|
|
void *pvVar4;
|
|
|
|
int *piVar5;
|
|
|
|
|
|
|
|
iVar1 = *(int *)(param_1 + 0x6c);
|
|
|
|
do {
|
|
|
|
if (iVar1 == 0) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
piVar5 = *(int **)(param_1 + 100);
|
|
|
|
while (piVar5 != (int *)(*(int *)(param_1 + 0x60) + *(int *)(param_1 + 0x68) * 4)) {
|
|
|
|
if (**(int **)(param_1 + 100) != 0) {
|
|
|
|
piVar5 = *(int **)(param_1 + 100);
|
|
|
|
pvVar4 = (void *)*piVar5;
|
|
|
|
goto LAB_0041a3cf;
|
|
|
|
}
|
|
|
|
piVar5 = *(int **)(param_1 + 100) + 1;
|
|
|
|
*(int **)(param_1 + 100) = piVar5;
|
|
|
|
}
|
|
|
|
piVar5 = (int *)0x0;
|
|
|
|
pvVar4 = (void *)0x0;
|
|
|
|
LAB_0041a3cf:
|
|
|
|
pvVar3 = (void *)*piVar5;
|
|
|
|
if (pvVar3 == pvVar4) {
|
|
|
|
LAB_0041a3e2:
|
|
|
|
*piVar5 = *(int *)((int)pvVar3 + 8);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
do {
|
|
|
|
pvVar2 = pvVar3;
|
|
|
|
pvVar3 = *(void **)((int)pvVar2 + 8);
|
|
|
|
} while (pvVar3 != pvVar4);
|
|
|
|
if (pvVar2 == (void *)0x0) goto LAB_0041a3e2;
|
|
|
|
*(undefined4 *)((int)pvVar2 + 8) = *(undefined4 *)((int)pvVar3 + 8);
|
|
|
|
}
|
|
|
|
*(int *)(param_1 + 0x6c) = *(int *)(param_1 + 0x6c) + -1;
|
|
|
|
if (pvVar4 != (void *)0x0) {
|
|
|
|
operator_delete(pvVar4);
|
|
|
|
}
|
|
|
|
iVar1 = *(int *)(param_1 + 0x6c);
|
|
|
|
} while( true );
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0041a410 at 0x0041A410 (size: 55) ---
|
|
|
|
|
|
void __fastcall FUN_0041a410(undefined4 *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
*param_1 = &PTR_FUN_00795f98;
|
|
|
|
FUN_0041a390();
|
|
|
|
*param_1 = &PTR_FUN_00795f84;
|
|
|
|
if ((undefined4 *)param_1[0x18] != param_1 + 1) {
|
|
|
|
operator_delete__((undefined4 *)param_1[0x18]);
|
|
|
|
}
|
|
|
|
param_1[0x18] = 0;
|
|
|
|
param_1[0x19] = 0;
|
|
|
|
param_1[0x1a] = 0;
|
|
|
|
param_1[0x1b] = 0;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0041a450 at 0x0041A450 (size: 131) ---
|
|
|
|
|
|
char __thiscall FUN_0041a450(int param_1,void *param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
uint uVar1;
|
|
|
|
char cVar2;
|
|
|
|
uint uVar3;
|
|
|
|
undefined1 local_c [8];
|
|
|
|
int local_4;
|
|
|
|
|
|
|
|
cVar2 = '\0';
|
|
|
|
if ((*(int *)((int)param_2 + 4) == DAT_00837c5c) || (cVar2 = FUN_0041a320(param_2), cVar2 == '\0')
|
|
|
|
) {
|
|
|
|
FUN_00414190(local_c,param_2);
|
|
|
|
if (local_4 != 0) {
|
|
|
|
uVar1 = *(uint *)(local_4 + 0xc);
|
|
|
|
uVar3 = (uVar1 | *(uint *)((int)param_2 + 0xc)) & DAT_00837c58 |
|
|
|
|
uVar1 & *(uint *)((int)param_2 + 0xc);
|
|
|
|
cVar2 = uVar3 != uVar1;
|
|
|
|
*(uint *)(local_4 + 0xc) = uVar3;
|
|
|
|
}
|
|
|
|
operator_delete(param_2);
|
|
|
|
if (cVar2 == '\0') {
|
|
|
|
return '\0';
|
|
|
|
}
|
|
|
|
}
|
|
|
|
*(int *)(param_1 + 0x70) = param_1;
|
|
|
|
*(undefined4 *)(param_1 + 0x78) = 0;
|
|
|
|
*(undefined4 *)(param_1 + 0x74) = 0;
|
|
|
|
return cVar2;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0041a4e0 at 0x0041A4E0 (size: 170) ---
|
|
|
|
|
|
uint FUN_0041a4e0(undefined4 *param_1,uint param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined4 uVar1;
|
|
|
|
uint uVar2;
|
|
|
|
undefined4 *puVar3;
|
|
|
|
uint uVar4;
|
|
|
|
undefined1 local_c [8];
|
|
|
|
int local_4;
|
|
|
|
|
|
|
|
if (param_1[1] == DAT_00837c5c) {
|
|
|
|
return param_1[1] & 0xffffff00;
|
|
|
|
}
|
|
|
|
FUN_00414190(local_c,param_1);
|
|
|
|
if (local_4 != 0) {
|
|
|
|
uVar4 = *(uint *)(local_4 + 0xc);
|
|
|
|
uVar2 = (uVar4 | param_2) & DAT_00837c58 | uVar4 & param_2;
|
|
|
|
*(uint *)(local_4 + 0xc) = uVar2;
|
|
|
|
return CONCAT31((int3)(uVar2 >> 8),uVar2 != uVar4);
|
|
|
|
}
|
|
|
|
puVar3 = (undefined4 *)FUN_005df0f5(0x10);
|
|
|
|
if (puVar3 != (undefined4 *)0x0) {
|
|
|
|
*puVar3 = *param_1;
|
|
|
|
uVar1 = param_1[1];
|
|
|
|
puVar3[3] = param_2;
|
|
|
|
puVar3[1] = uVar1;
|
|
|
|
puVar3[2] = 0;
|
|
|
|
uVar4 = FUN_0041a450(puVar3);
|
|
|
|
return uVar4;
|
|
|
|
}
|
|
|
|
uVar4 = FUN_0041a450(0);
|
|
|
|
return uVar4;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0041a590 at 0x0041A590 (size: 78) ---
|
|
|
|
|
|
undefined4 FUN_0041a590(int *param_1,undefined4 param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
byte bVar1;
|
|
|
|
undefined4 uVar2;
|
|
|
|
uint uVar3;
|
|
|
|
byte bVar4;
|
|
|
|
uint uVar5;
|
|
|
|
undefined4 uVar6;
|
|
|
|
|
|
|
|
bVar4 = 0;
|
|
|
|
uVar5 = 0;
|
|
|
|
uVar3 = 0;
|
|
|
|
if (param_1[2] != 0) {
|
|
|
|
do {
|
|
|
|
uVar6 = param_2;
|
|
|
|
uVar2 = FUN_004220b0(*(undefined4 *)(*param_1 + uVar5 * 4),0);
|
|
|
|
bVar1 = FUN_0041a4e0(uVar2,uVar6);
|
|
|
|
bVar4 = bVar4 | bVar1;
|
|
|
|
uVar3 = param_1[2];
|
|
|
|
uVar5 = uVar5 + 1;
|
|
|
|
} while (uVar5 < uVar3);
|
|
|
|
}
|
|
|
|
return CONCAT31((int3)(uVar3 >> 8),bVar4);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0041a5f0 at 0x0041A5F0 (size: 11) ---
|
|
|
|
|
|
int FUN_0041a5f0(uint param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
return 2 - (uint)(param_1 < 2);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0041a600 at 0x0041A600 (size: 64) ---
|
|
|
|
|
|
undefined4 * __thiscall FUN_0041a600(undefined4 *param_1,byte param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
*param_1 = &PTR_FUN_0079645c;
|
|
|
|
if ((undefined4 *)param_1[0x18] != param_1 + 1) {
|
|
|
|
operator_delete__((undefined4 *)param_1[0x18]);
|
|
|
|
}
|
|
|
|
param_1[0x18] = 0;
|
|
|
|
param_1[0x19] = 0;
|
|
|
|
param_1[0x1a] = 0;
|
|
|
|
param_1[0x1b] = 0;
|
|
|
|
if ((param_2 & 1) != 0) {
|
|
|
|
operator_delete(param_1);
|
|
|
|
}
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0041a640 at 0x0041A640 (size: 143) ---
|
|
|
|
|
|
undefined4 * __thiscall FUN_0041a640(undefined4 *param_1,undefined4 param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined *puVar1;
|
|
|
|
uint *puVar2;
|
|
|
|
undefined4 uVar3;
|
|
|
|
uint uVar4;
|
|
|
|
int iVar5;
|
|
|
|
undefined4 *puVar6;
|
|
|
|
|
|
|
|
param_1[0x18] = 0;
|
|
|
|
param_1[0x19] = 0;
|
|
|
|
param_1[0x1a] = 0;
|
|
|
|
param_1[0x1b] = 0;
|
|
|
|
*param_1 = &PTR_FUN_0079645c;
|
|
|
|
puVar1 = PTR_DAT_00818558;
|
|
|
|
puVar2 = (uint *)FUN_00422d20(PTR_DAT_00818554,PTR_DAT_00818558,¶m_2,param_2,0);
|
|
|
|
if (puVar2 == (uint *)puVar1) {
|
|
|
|
puVar2 = puVar2 + -1;
|
|
|
|
}
|
|
|
|
uVar4 = *puVar2;
|
|
|
|
param_1[0x1a] = uVar4;
|
|
|
|
if (uVar4 < 0x18) {
|
|
|
|
param_1[0x18] = param_1 + 1;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
uVar3 = thunk_FUN_005df0f5(uVar4 << 2);
|
|
|
|
param_1[0x18] = uVar3;
|
|
|
|
}
|
|
|
|
param_1[0x19] = (undefined4 *)param_1[0x18] + param_1[0x1a];
|
|
|
|
puVar6 = (undefined4 *)param_1[0x18];
|
|
|
|
for (uVar4 = param_1[0x1a] & 0x3fffffff; uVar4 != 0; uVar4 = uVar4 - 1) {
|
|
|
|
*puVar6 = 0;
|
|
|
|
puVar6 = puVar6 + 1;
|
|
|
|
}
|
|
|
|
for (iVar5 = 0; iVar5 != 0; iVar5 = iVar5 + -1) {
|
|
|
|
*(undefined1 *)puVar6 = 0;
|
|
|
|
puVar6 = (undefined4 *)((int)puVar6 + 1);
|
|
|
|
}
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0041a6d0 at 0x0041A6D0 (size: 156) ---
|
|
|
|
|
|
void __fastcall FUN_0041a6d0(int param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
void *pvVar2;
|
|
|
|
void *pvVar3;
|
|
|
|
int *piVar4;
|
|
|
|
void *pvVar5;
|
|
|
|
|
|
|
|
iVar1 = *(int *)(param_1 + 0x6c);
|
|
|
|
do {
|
|
|
|
if (iVar1 == 0) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
piVar4 = *(int **)(param_1 + 100);
|
|
|
|
while (piVar4 != (int *)(*(int *)(param_1 + 0x60) + *(int *)(param_1 + 0x68) * 4)) {
|
|
|
|
if (**(int **)(param_1 + 100) != 0) {
|
|
|
|
piVar4 = *(int **)(param_1 + 100);
|
|
|
|
pvVar5 = (void *)*piVar4;
|
|
|
|
goto LAB_0041a70f;
|
|
|
|
}
|
|
|
|
piVar4 = *(int **)(param_1 + 100) + 1;
|
|
|
|
*(int **)(param_1 + 100) = piVar4;
|
|
|
|
}
|
|
|
|
piVar4 = (int *)0x0;
|
|
|
|
pvVar5 = (void *)0x0;
|
|
|
|
LAB_0041a70f:
|
|
|
|
pvVar3 = (void *)*piVar4;
|
|
|
|
if (pvVar3 == pvVar5) {
|
|
|
|
LAB_0041a722:
|
|
|
|
*piVar4 = *(int *)((int)pvVar3 + 4);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
do {
|
|
|
|
pvVar2 = pvVar3;
|
|
|
|
pvVar3 = *(void **)((int)pvVar2 + 4);
|
|
|
|
} while (pvVar3 != pvVar5);
|
|
|
|
if (pvVar2 == (void *)0x0) goto LAB_0041a722;
|
|
|
|
*(undefined4 *)((int)pvVar2 + 4) = *(undefined4 *)((int)pvVar3 + 4);
|
|
|
|
}
|
|
|
|
*(int *)(param_1 + 0x6c) = *(int *)(param_1 + 0x6c) + -1;
|
|
|
|
if (pvVar5 != (void *)0x0) {
|
|
|
|
if ((*(uint *)((int)pvVar5 + 0x10) & 0x80000000) == 0x80000000) {
|
|
|
|
operator_delete__(*(void **)((int)pvVar5 + 0xc));
|
|
|
|
}
|
|
|
|
operator_delete(pvVar5);
|
|
|
|
}
|
|
|
|
iVar1 = *(int *)(param_1 + 0x6c);
|
|
|
|
} while( true );
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0041a770 at 0x0041A770 (size: 150) ---
|
|
|
|
|
|
undefined4 FUN_0041a770(undefined4 *param_1,int param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
char cVar1;
|
|
|
|
undefined4 *puVar2;
|
|
|
|
|
|
|
|
puVar2 = (undefined4 *)FUN_005df0f5(0x58);
|
|
|
|
if (puVar2 == (undefined4 *)0x0) {
|
|
|
|
puVar2 = (undefined4 *)0x0;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
*puVar2 = *param_1;
|
|
|
|
puVar2[1] = 0;
|
|
|
|
puVar2[2] = &PTR_LAB_00795430;
|
|
|
|
puVar2[3] = puVar2 + 6;
|
|
|
|
puVar2[4] = 8;
|
|
|
|
puVar2[5] = 0;
|
|
|
|
FUN_00410a00(param_2 + 4);
|
|
|
|
}
|
|
|
|
cVar1 = FUN_0042bd40(puVar2);
|
|
|
|
if (cVar1 == '\0') {
|
|
|
|
if (puVar2 != (undefined4 *)0x0) {
|
|
|
|
if ((puVar2[4] & 0x80000000) == 0x80000000) {
|
|
|
|
operator_delete__((void *)puVar2[3]);
|
|
|
|
}
|
|
|
|
operator_delete(puVar2);
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0041a810 at 0x0041A810 (size: 247) ---
|
|
|
|
|
|
uint * FUN_0041a810(uint param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
uint *puVar1;
|
|
|
|
uint uVar2;
|
|
|
|
uint *puVar3;
|
|
|
|
undefined **local_50;
|
|
|
|
undefined1 *local_4c;
|
|
|
|
uint local_48;
|
|
|
|
undefined4 local_44;
|
|
|
|
undefined1 local_40 [64];
|
|
|
|
|
|
|
|
uVar2 = param_1;
|
|
|
|
puVar3 = (uint *)0x0;
|
|
|
|
for (puVar1 = *(uint **)(DAT_00818794 + (param_1 % DAT_0081879c) * 4); puVar1 != (uint *)0x0;
|
|
|
|
puVar1 = (uint *)puVar1[1]) {
|
|
|
|
if (*puVar1 == param_1) {
|
|
|
|
if ((puVar1 != (uint *)0x0) && (puVar1 + 2 != (uint *)0x0)) {
|
|
|
|
return puVar1 + 2;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
local_4c = local_40;
|
|
|
|
local_50 = &PTR_LAB_00795430;
|
|
|
|
local_48 = 8;
|
|
|
|
local_44 = 0;
|
|
|
|
FUN_0041a770(¶m_1,&local_50);
|
|
|
|
if ((local_48 & 0x80000000) == 0x80000000) {
|
|
|
|
operator_delete__(local_4c);
|
|
|
|
}
|
|
|
|
puVar1 = *(uint **)(DAT_00818794 + (uVar2 % DAT_0081879c) * 4);
|
|
|
|
do {
|
|
|
|
if (puVar1 == (uint *)0x0) {
|
|
|
|
LAB_0041a8ca:
|
|
|
|
FUN_00410500(0x436f7265,2 - (uint)(uVar2 < 2));
|
|
|
|
FUN_00410500(0x444f626a,uVar2);
|
|
|
|
FUN_00410500(0x55494c20,2 < uVar2);
|
|
|
|
return puVar3;
|
|
|
|
}
|
|
|
|
if (*puVar1 == uVar2) {
|
|
|
|
if (puVar1 != (uint *)0x0) {
|
|
|
|
puVar3 = puVar1 + 2;
|
|
|
|
}
|
|
|
|
goto LAB_0041a8ca;
|
|
|
|
}
|
|
|
|
puVar1 = (uint *)puVar1[1];
|
|
|
|
} while( true );
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0041a910 at 0x0041A910 (size: 82) ---
|
|
|
|
|
|
undefined4 * __thiscall FUN_0041a910(undefined4 *param_1,byte param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
*param_1 = &PTR_FUN_00796460;
|
|
|
|
FUN_0041a6d0();
|
|
|
|
param_1[1] = &PTR_FUN_0079645c;
|
|
|
|
if ((undefined4 *)param_1[0x19] != param_1 + 2) {
|
|
|
|
operator_delete__((undefined4 *)param_1[0x19]);
|
|
|
|
}
|
|
|
|
param_1[0x19] = 0;
|
|
|
|
param_1[0x1a] = 0;
|
|
|
|
param_1[0x1b] = 0;
|
|
|
|
param_1[0x1c] = 0;
|
|
|
|
if ((param_2 & 1) != 0) {
|
|
|
|
operator_delete(param_1);
|
|
|
|
}
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0041a970 at 0x0041A970 (size: 26) ---
|
|
|
|
|
|
undefined4 __fastcall FUN_0041a970(int param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
if (*(int **)(param_1 + 0x34) != (int *)0x0) {
|
|
|
|
(**(code **)(**(int **)(param_1 + 0x34) + 0x14))();
|
|
|
|
*(undefined4 *)(param_1 + 0x34) = 0;
|
|
|
|
}
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0041a9d0 at 0x0041A9D0 (size: 64) ---
|
|
|
|
|
|
undefined4 * __thiscall FUN_0041a9d0(undefined4 *param_1,byte param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
*param_1 = &PTR_FUN_00796464;
|
|
|
|
if ((undefined4 *)param_1[0x18] != param_1 + 1) {
|
|
|
|
operator_delete__((undefined4 *)param_1[0x18]);
|
|
|
|
}
|
|
|
|
param_1[0x18] = 0;
|
|
|
|
param_1[0x19] = 0;
|
|
|
|
param_1[0x1a] = 0;
|
|
|
|
param_1[0x1b] = 0;
|
|
|
|
if ((param_2 & 1) != 0) {
|
|
|
|
operator_delete(param_1);
|
|
|
|
}
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0041aa10 at 0x0041AA10 (size: 64) ---
|
|
|
|
|
|
undefined4 * __thiscall FUN_0041aa10(undefined4 *param_1,byte param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
*param_1 = &PTR_FUN_00796468;
|
|
|
|
if ((undefined4 *)param_1[0x18] != param_1 + 1) {
|
|
|
|
operator_delete__((undefined4 *)param_1[0x18]);
|
|
|
|
}
|
|
|
|
param_1[0x18] = 0;
|
|
|
|
param_1[0x19] = 0;
|
|
|
|
param_1[0x1a] = 0;
|
|
|
|
param_1[0x1b] = 0;
|
|
|
|
if ((param_2 & 1) != 0) {
|
|
|
|
operator_delete(param_1);
|
|
|
|
}
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0041aa50 at 0x0041AA50 (size: 71) ---
|
|
|
|
|
|
uint __fastcall FUN_0041aa50(undefined4 *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
char *pcVar1;
|
|
|
|
char cVar2;
|
|
|
|
int iVar3;
|
|
|
|
uint uVar4;
|
|
|
|
char *pcVar5;
|
|
|
|
|
|
|
|
pcVar5 = (char *)*param_1;
|
|
|
|
uVar4 = 0;
|
|
|
|
cVar2 = *pcVar5;
|
|
|
|
while (cVar2 != '\0') {
|
|
|
|
iVar3 = tolower((int)cVar2);
|
|
|
|
uVar4 = uVar4 * 0x10 + (int)(char)iVar3;
|
|
|
|
if ((uVar4 & 0xf0000000) != 0) {
|
|
|
|
uVar4 = ((uVar4 & 0xf0000000) >> 0x18 ^ uVar4) & 0xfffffff;
|
|
|
|
}
|
|
|
|
pcVar1 = pcVar5 + 1;
|
|
|
|
pcVar5 = pcVar5 + 1;
|
|
|
|
cVar2 = *pcVar1;
|
|
|
|
}
|
|
|
|
return uVar4;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0041aaa0 at 0x0041AAA0 (size: 42) ---
|
|
|
|
|
|
void FUN_0041aaa0(undefined4 param_1,undefined4 param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined4 uVar1;
|
|
|
|
|
|
|
|
uVar1 = FUN_004220b0(param_1,0);
|
|
|
|
FUN_0041a4e0(uVar1,param_2);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0041ab00 at 0x0041AB00 (size: 72) ---
|
|
|
|
|
|
bool __thiscall FUN_0041ab00(int *param_1,int *param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
if (*param_1 == 0) {
|
|
|
|
return *param_2 != 0;
|
|
|
|
}
|
|
|
|
if ((*param_1 == *param_2) && (param_1[3] == param_2[3])) {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0041ab50 at 0x0041AB50 (size: 6) ---
|
|
|
|
|
|
undefined4 __fastcall FUN_0041ab50(int param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
return **(undefined4 **)(param_1 + 0xc);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0041ab60 at 0x0041AB60 (size: 29) ---
|
|
|
|
|
|
int * __thiscall FUN_0041ab60(int param_1,int *param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
|
|
|
|
iVar1 = *(int *)(*(int *)(param_1 + 0xc) + 8);
|
|
|
|
*param_2 = iVar1;
|
|
|
|
InterlockedIncrement((LONG *)(iVar1 + -0x10));
|
|
|
|
return param_2;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0041ab80 at 0x0041AB80 (size: 27) ---
|
|
|
|
|
|
int * __thiscall FUN_0041ab80(int *param_1,int *param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
|
|
|
|
iVar1 = *param_2;
|
|
|
|
*param_1 = iVar1;
|
|
|
|
InterlockedIncrement((LONG *)(iVar1 + -0x10));
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0041aba0 at 0x0041ABA0 (size: 48) ---
|
|
|
|
|
|
undefined4 * __thiscall FUN_0041aba0(undefined4 *param_1,undefined4 param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined4 uVar1;
|
|
|
|
|
|
|
|
*param_1 = 0;
|
|
|
|
uVar1 = FUN_004220b0(param_2,0x24);
|
|
|
|
uVar1 = FUN_00415430(uVar1);
|
|
|
|
*param_1 = uVar1;
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0041abd0 at 0x0041ABD0 (size: 48) ---
|
|
|
|
|
|
undefined4 * __thiscall FUN_0041abd0(undefined4 *param_1,undefined4 param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined4 uVar1;
|
|
|
|
|
|
|
|
*param_1 = 0;
|
|
|
|
uVar1 = FUN_004220b0(param_2,0x26);
|
|
|
|
uVar1 = FUN_00415430(uVar1);
|
|
|
|
*param_1 = uVar1;
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0041ac00 at 0x0041AC00 (size: 48) ---
|
|
|
|
|
|
undefined4 * __thiscall FUN_0041ac00(undefined4 *param_1,undefined4 param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined4 uVar1;
|
|
|
|
|
|
|
|
*param_1 = 0;
|
|
|
|
uVar1 = FUN_004220b0(param_2,0x28);
|
|
|
|
uVar1 = FUN_00415430(uVar1);
|
|
|
|
*param_1 = uVar1;
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0041ac30 at 0x0041AC30 (size: 47) ---
|
|
|
|
|
|
undefined4 __thiscall FUN_0041ac30(int param_1,undefined4 param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
int local_c [3];
|
|
|
|
|
|
|
|
local_c[0] = param_1 + 0x3c;
|
|
|
|
local_c[1] = 0;
|
|
|
|
local_c[2] = 0;
|
|
|
|
FUN_0041ac60(0,local_c);
|
|
|
|
return param_2;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0041ac60 at 0x0041AC60 (size: 157) ---
|
|
|
|
|
|
int * __thiscall FUN_0041ac60(int *param_1,int param_2,int *param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
undefined4 uVar2;
|
|
|
|
int local_38 [3];
|
|
|
|
undefined1 local_2c [16];
|
|
|
|
int local_1c;
|
|
|
|
int local_18;
|
|
|
|
int local_14;
|
|
|
|
int local_4;
|
|
|
|
|
|
|
|
*param_1 = param_2;
|
|
|
|
param_1[1] = *param_3;
|
|
|
|
param_1[2] = param_3[1];
|
|
|
|
param_1[3] = param_3[2];
|
|
|
|
iVar1 = *param_1;
|
|
|
|
while( true ) {
|
|
|
|
if (iVar1 == 0) {
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
local_38[0] = *param_1 + 0x3c;
|
|
|
|
local_38[1] = 0;
|
|
|
|
local_38[2] = 0;
|
|
|
|
FUN_0041ac60(0,local_38);
|
|
|
|
if (param_1[3] != local_4) break;
|
|
|
|
iVar1 = *(int *)(*param_1 + 0x34);
|
|
|
|
*param_1 = iVar1;
|
|
|
|
if (iVar1 != 0) {
|
|
|
|
uVar2 = FUN_00429c70(local_2c);
|
|
|
|
FUN_0041ac60(iVar1,uVar2);
|
|
|
|
param_1[1] = local_1c;
|
|
|
|
param_1[3] = local_14;
|
|
|
|
param_1[2] = local_18;
|
|
|
|
}
|
|
|
|
iVar1 = *param_1;
|
|
|
|
}
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0041ad00 at 0x0041AD00 (size: 65) ---
|
|
|
|
|
|
undefined4 __thiscall FUN_0041ad00(undefined4 param_1,undefined4 param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined4 *puVar1;
|
|
|
|
undefined4 local_18;
|
|
|
|
undefined4 local_14;
|
|
|
|
undefined4 local_10;
|
|
|
|
undefined1 local_c [12];
|
|
|
|
|
|
|
|
puVar1 = (undefined4 *)FUN_0052dcf0(local_c);
|
|
|
|
local_18 = *puVar1;
|
|
|
|
local_14 = puVar1[1];
|
|
|
|
local_10 = puVar1[2];
|
|
|
|
FUN_0041ac60(param_1,&local_18);
|
|
|
|
return param_2;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0041ad50 at 0x0041AD50 (size: 212) ---
|
|
|
|
|
|
int * __fastcall FUN_0041ad50(int *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
int *piVar2;
|
|
|
|
int local_38 [4];
|
|
|
|
undefined4 *local_28;
|
|
|
|
undefined4 local_24;
|
|
|
|
int local_1c;
|
|
|
|
int local_18;
|
|
|
|
int local_14;
|
|
|
|
int local_4;
|
|
|
|
|
|
|
|
FUN_0042cb20(local_38 + 3,0);
|
|
|
|
if (*param_1 != 0) {
|
|
|
|
local_38[1] = 0;
|
|
|
|
local_38[2] = 0;
|
|
|
|
do {
|
|
|
|
local_38[0] = *param_1 + 0x3c;
|
|
|
|
FUN_0041ac60(0,local_38);
|
|
|
|
if (param_1[3] != local_4) {
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
iVar1 = *(int *)(*param_1 + 0x34);
|
|
|
|
*param_1 = iVar1;
|
|
|
|
if (iVar1 != 0) {
|
|
|
|
local_38[3] = iVar1 + 0x3c;
|
|
|
|
piVar2 = *(int **)(iVar1 + 0xa0);
|
|
|
|
while (piVar2 != (int *)(*(int *)(iVar1 + 0x9c) + *(int *)(iVar1 + 0xa4) * 4)) {
|
|
|
|
if (**(int **)(iVar1 + 0xa0) != 0) {
|
|
|
|
local_28 = *(undefined4 **)(iVar1 + 0xa0);
|
|
|
|
local_24 = *local_28;
|
|
|
|
goto LAB_0041ade3;
|
|
|
|
}
|
|
|
|
piVar2 = *(int **)(iVar1 + 0xa0) + 1;
|
|
|
|
*(int **)(iVar1 + 0xa0) = piVar2;
|
|
|
|
}
|
|
|
|
local_28 = (undefined4 *)0x0;
|
|
|
|
local_24 = 0;
|
|
|
|
LAB_0041ade3:
|
|
|
|
FUN_0041ac60(iVar1,local_38 + 3);
|
|
|
|
param_1[1] = local_1c;
|
|
|
|
param_1[3] = local_14;
|
|
|
|
param_1[2] = local_18;
|
|
|
|
}
|
|
|
|
} while (*param_1 != 0);
|
|
|
|
}
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0041ae30 at 0x0041AE30 (size: 120) ---
|
|
|
|
|
|
undefined4 __thiscall FUN_0041ae30(int param_1,uint *param_2,uint *param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
uint *puVar1;
|
|
|
|
uint uVar2;
|
|
|
|
LONG LVar3;
|
|
|
|
|
|
|
|
puVar1 = *(uint **)(*(int *)(param_1 + 100) + (*param_2 % *(uint *)(param_1 + 0x6c)) * 4);
|
|
|
|
while( true ) {
|
|
|
|
if (puVar1 == (uint *)0x0) {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
if (*puVar1 == *param_2) break;
|
|
|
|
puVar1 = (uint *)puVar1[1];
|
|
|
|
}
|
|
|
|
if (puVar1 == (uint *)0x0) {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
uVar2 = *param_3;
|
|
|
|
if (uVar2 != puVar1[2]) {
|
|
|
|
LVar3 = InterlockedDecrement((LONG *)(uVar2 - 0x10));
|
|
|
|
if ((LVar3 == 0) && ((undefined4 *)(uVar2 - 0x14) != (undefined4 *)0x0)) {
|
|
|
|
(*(code *)**(undefined4 **)(uVar2 - 0x14))(1);
|
|
|
|
}
|
|
|
|
uVar2 = puVar1[2];
|
|
|
|
*param_3 = uVar2;
|
|
|
|
InterlockedIncrement((LONG *)(uVar2 - 0x10));
|
|
|
|
}
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0041aeb0 at 0x0041AEB0 (size: 93) ---
|
|
|
|
|
|
void __thiscall FUN_0041aeb0(int param_1,int *param_2,undefined4 *param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
uint uVar1;
|
|
|
|
int iVar2;
|
|
|
|
undefined4 *puVar3;
|
|
|
|
uint uVar4;
|
|
|
|
int iVar5;
|
|
|
|
|
|
|
|
uVar1 = *(uint *)(param_1 + 0x68);
|
|
|
|
uVar4 = FUN_0041aa50();
|
|
|
|
uVar4 = uVar4 % uVar1;
|
|
|
|
iVar2 = *(int *)(param_1 + 0x60);
|
|
|
|
puVar3 = *(undefined4 **)(iVar2 + uVar4 * 4);
|
|
|
|
while ((puVar3 != (undefined4 *)0x0 &&
|
|
|
|
(iVar5 = _stricmp((char *)*puVar3,(char *)*param_3), iVar5 != 0))) {
|
|
|
|
puVar3 = (undefined4 *)puVar3[1];
|
|
|
|
}
|
|
|
|
param_2[2] = (int)puVar3;
|
|
|
|
*param_2 = param_1;
|
|
|
|
param_2[1] = iVar2 + uVar4 * 4;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0041af10 at 0x0041AF10 (size: 73) ---
|
|
|
|
|
|
void __fastcall FUN_0041af10(int param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined *puVar1;
|
|
|
|
undefined4 *puVar2;
|
|
|
|
undefined4 local_4;
|
|
|
|
|
|
|
|
puVar1 = PTR_DAT_00818558;
|
|
|
|
local_4 = *(undefined4 *)(param_1 + 0x68);
|
|
|
|
puVar2 = (undefined4 *)FUN_00422d20(PTR_DAT_00818554,PTR_DAT_00818558,&local_4,local_4,0);
|
|
|
|
if ((puVar2 != (undefined4 *)puVar1) || (puVar2 = puVar2 + -1, puVar2 != (undefined4 *)puVar1)) {
|
|
|
|
puVar2 = puVar2 + 1;
|
|
|
|
}
|
|
|
|
FUN_0041b570(*puVar2);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0041af60 at 0x0041AF60 (size: 246) ---
|
|
|
|
|
|
undefined1 __thiscall FUN_0041af60(int param_1,undefined4 param_2,int *param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined *puVar1;
|
|
|
|
int *piVar2;
|
|
|
|
undefined *puVar3;
|
|
|
|
char cVar4;
|
|
|
|
undefined1 uVar5;
|
|
|
|
LONG LVar6;
|
|
|
|
undefined4 *puVar7;
|
|
|
|
undefined *local_4;
|
|
|
|
|
|
|
|
local_4 = PTR_DAT_00818344;
|
|
|
|
InterlockedIncrement((LONG *)(PTR_DAT_00818344 + -0x10));
|
|
|
|
cVar4 = FUN_0041ae30(¶m_2,&local_4);
|
|
|
|
puVar3 = local_4;
|
|
|
|
piVar2 = param_3;
|
|
|
|
if (cVar4 != '\0') {
|
|
|
|
puVar1 = (undefined *)*param_3;
|
|
|
|
if (puVar1 != local_4) {
|
|
|
|
LVar6 = InterlockedDecrement((LONG *)(puVar1 + -0x10));
|
|
|
|
if ((LVar6 == 0) && ((undefined4 *)(puVar1 + -0x14) != (undefined4 *)0x0)) {
|
|
|
|
(*(code *)**(undefined4 **)(puVar1 + -0x14))(1);
|
|
|
|
}
|
|
|
|
*piVar2 = (int)puVar3;
|
|
|
|
InterlockedIncrement((LONG *)(puVar3 + -0x10));
|
|
|
|
}
|
|
|
|
LVar6 = InterlockedDecrement((LONG *)(puVar3 + -0x10));
|
|
|
|
if ((LVar6 == 0) && ((undefined4 *)(puVar3 + -0x14) != (undefined4 *)0x0)) {
|
|
|
|
(*(code *)**(undefined4 **)(puVar3 + -0x14))(1);
|
|
|
|
}
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
if (*(int *)(param_1 + 0x34) != 0) {
|
|
|
|
uVar5 = FUN_0041af60(param_2,param_3);
|
|
|
|
puVar7 = (undefined4 *)(local_4 + -0x14);
|
|
|
|
LVar6 = InterlockedDecrement((LONG *)(local_4 + -0x10));
|
|
|
|
if ((LVar6 == 0) && (puVar7 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar7)(1);
|
|
|
|
}
|
|
|
|
return uVar5;
|
|
|
|
}
|
|
|
|
puVar7 = (undefined4 *)(local_4 + -0x14);
|
|
|
|
LVar6 = InterlockedDecrement((LONG *)(local_4 + -0x10));
|
|
|
|
if ((LVar6 == 0) && (puVar7 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar7)(1);
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0041b060 at 0x0041B060 (size: 241) ---
|
|
|
|
|
|
bool FUN_0041b060(undefined4 param_1,undefined4 param_2,undefined4 param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
char cVar1;
|
|
|
|
int iVar2;
|
|
|
|
uint local_8;
|
|
|
|
int *local_4;
|
|
|
|
|
|
|
|
FUN_00415640(&local_8,param_1,1);
|
|
|
|
if (local_8 == DAT_00837c64) {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
iVar2 = FUN_0041c280(local_8);
|
|
|
|
if (iVar2 == 0x24) {
|
|
|
|
FUN_0041aba0(local_8);
|
|
|
|
if (local_4 == (int *)0x0) {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
cVar1 = FUN_0041af60(param_2,param_3);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
if (iVar2 == 0x26) {
|
|
|
|
FUN_0041abd0(local_8);
|
|
|
|
if (local_4 == (int *)0x0) {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
cVar1 = FUN_00415c90(param_2,param_3);
|
|
|
|
(**(code **)(*local_4 + 0x14))();
|
|
|
|
return cVar1 != '\0';
|
|
|
|
}
|
|
|
|
if (iVar2 != 0x28) {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
FUN_0041ac00(local_8);
|
|
|
|
if (local_4 == (int *)0x0) {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
cVar1 = FUN_00415c90(param_2,param_3);
|
|
|
|
}
|
|
|
|
(**(code **)(*local_4 + 0x14))();
|
|
|
|
return cVar1 != '\0';
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0041b160 at 0x0041B160 (size: 190) ---
|
|
|
|
|
|
undefined1 FUN_0041b160(undefined4 param_1,undefined4 param_2,int *param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
undefined1 uVar2;
|
|
|
|
int *piVar3;
|
|
|
|
LONG LVar4;
|
|
|
|
int local_8;
|
|
|
|
int local_4;
|
|
|
|
|
|
|
|
FUN_0040d810(&local_8,param_3);
|
|
|
|
uVar2 = FUN_0041b060(param_1,param_2,&local_8);
|
|
|
|
piVar3 = (int *)FUN_0040d200(&local_4,&local_8);
|
|
|
|
iVar1 = *param_3;
|
|
|
|
if (iVar1 != *piVar3) {
|
|
|
|
LVar4 = InterlockedDecrement((LONG *)(iVar1 + -0x10));
|
|
|
|
if ((LVar4 == 0) && ((undefined4 *)(iVar1 + -0x14) != (undefined4 *)0x0)) {
|
|
|
|
(*(code *)**(undefined4 **)(iVar1 + -0x14))(1);
|
|
|
|
}
|
|
|
|
iVar1 = *piVar3;
|
|
|
|
*param_3 = iVar1;
|
|
|
|
InterlockedIncrement((LONG *)(iVar1 + -0x10));
|
|
|
|
}
|
|
|
|
LVar4 = InterlockedDecrement((LONG *)(local_4 + -0x10));
|
|
|
|
if ((LVar4 == 0) && ((undefined4 *)(local_4 + -0x14) != (undefined4 *)0x0)) {
|
|
|
|
(*(code *)**(undefined4 **)(local_4 + -0x14))(1);
|
|
|
|
}
|
|
|
|
LVar4 = InterlockedDecrement((LONG *)(local_8 + -0x10));
|
|
|
|
if ((LVar4 == 0) && ((undefined4 *)(local_8 + -0x14) != (undefined4 *)0x0)) {
|
|
|
|
(*(code *)**(undefined4 **)(local_8 + -0x14))(1);
|
|
|
|
}
|
|
|
|
return uVar2;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0041b220 at 0x0041B220 (size: 150) ---
|
|
|
|
|
|
bool FUN_0041b220(undefined4 param_1,undefined4 param_2,undefined4 param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
char cVar1;
|
|
|
|
int iVar2;
|
|
|
|
int *piVar3;
|
|
|
|
undefined4 uVar4;
|
|
|
|
|
|
|
|
iVar2 = FUN_0041c280(param_1);
|
|
|
|
if (iVar2 == 0x24) {
|
|
|
|
uVar4 = FUN_004220b0(param_1,0x24);
|
|
|
|
piVar3 = (int *)FUN_00415430(uVar4);
|
|
|
|
if (piVar3 == (int *)0x0) {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
cVar1 = FUN_0041af60(param_2,param_3);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
if (iVar2 == 0x26) {
|
|
|
|
uVar4 = 0x26;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
if (iVar2 != 0x28) {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
uVar4 = 0x28;
|
|
|
|
}
|
|
|
|
uVar4 = FUN_004220b0(param_1,uVar4);
|
|
|
|
piVar3 = (int *)FUN_00415430(uVar4);
|
|
|
|
if (piVar3 == (int *)0x0) {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
cVar1 = FUN_00415c90(param_2,param_3);
|
|
|
|
}
|
|
|
|
(**(code **)(*piVar3 + 0x14))();
|
|
|
|
return cVar1 != '\0';
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0041b2c0 at 0x0041B2C0 (size: 82) ---
|
|
|
|
|
|
undefined4 * __thiscall FUN_0041b2c0(undefined4 *param_1,byte param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
*param_1 = &PTR_FUN_0079646c;
|
|
|
|
FUN_00433a10();
|
|
|
|
param_1[1] = &PTR_FUN_00796468;
|
|
|
|
if ((undefined4 *)param_1[0x19] != param_1 + 2) {
|
|
|
|
operator_delete__((undefined4 *)param_1[0x19]);
|
|
|
|
}
|
|
|
|
param_1[0x19] = 0;
|
|
|
|
param_1[0x1a] = 0;
|
|
|
|
param_1[0x1b] = 0;
|
|
|
|
param_1[0x1c] = 0;
|
|
|
|
if ((param_2 & 1) != 0) {
|
|
|
|
operator_delete(param_1);
|
|
|
|
}
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0041b320 at 0x0041B320 (size: 143) ---
|
|
|
|
|
|
undefined4 * __thiscall FUN_0041b320(undefined4 *param_1,undefined4 param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined *puVar1;
|
|
|
|
uint *puVar2;
|
|
|
|
undefined4 uVar3;
|
|
|
|
uint uVar4;
|
|
|
|
int iVar5;
|
|
|
|
undefined4 *puVar6;
|
|
|
|
|
|
|
|
param_1[0x18] = 0;
|
|
|
|
param_1[0x19] = 0;
|
|
|
|
param_1[0x1a] = 0;
|
|
|
|
param_1[0x1b] = 0;
|
|
|
|
*param_1 = &PTR_FUN_00796464;
|
|
|
|
puVar1 = PTR_DAT_00818558;
|
|
|
|
puVar2 = (uint *)FUN_00422d20(PTR_DAT_00818554,PTR_DAT_00818558,¶m_2,param_2,0);
|
|
|
|
if (puVar2 == (uint *)puVar1) {
|
|
|
|
puVar2 = puVar2 + -1;
|
|
|
|
}
|
|
|
|
uVar4 = *puVar2;
|
|
|
|
param_1[0x1a] = uVar4;
|
|
|
|
if (uVar4 < 0x18) {
|
|
|
|
param_1[0x18] = param_1 + 1;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
uVar3 = thunk_FUN_005df0f5(uVar4 << 2);
|
|
|
|
param_1[0x18] = uVar3;
|
|
|
|
}
|
|
|
|
param_1[0x19] = (undefined4 *)param_1[0x18] + param_1[0x1a];
|
|
|
|
puVar6 = (undefined4 *)param_1[0x18];
|
|
|
|
for (uVar4 = param_1[0x1a] & 0x3fffffff; uVar4 != 0; uVar4 = uVar4 - 1) {
|
|
|
|
*puVar6 = 0;
|
|
|
|
puVar6 = puVar6 + 1;
|
|
|
|
}
|
|
|
|
for (iVar5 = 0; iVar5 != 0; iVar5 = iVar5 + -1) {
|
|
|
|
*(undefined1 *)puVar6 = 0;
|
|
|
|
puVar6 = (undefined4 *)((int)puVar6 + 1);
|
|
|
|
}
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0041b3b0 at 0x0041B3B0 (size: 143) ---
|
|
|
|
|
|
undefined4 * __thiscall FUN_0041b3b0(undefined4 *param_1,undefined4 param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined *puVar1;
|
|
|
|
uint *puVar2;
|
|
|
|
undefined4 uVar3;
|
|
|
|
uint uVar4;
|
|
|
|
int iVar5;
|
|
|
|
undefined4 *puVar6;
|
|
|
|
|
|
|
|
param_1[0x18] = 0;
|
|
|
|
param_1[0x19] = 0;
|
|
|
|
param_1[0x1a] = 0;
|
|
|
|
param_1[0x1b] = 0;
|
|
|
|
*param_1 = &PTR_FUN_00796468;
|
|
|
|
puVar1 = PTR_DAT_00818558;
|
|
|
|
puVar2 = (uint *)FUN_00422d20(PTR_DAT_00818554,PTR_DAT_00818558,¶m_2,param_2,0);
|
|
|
|
if (puVar2 == (uint *)puVar1) {
|
|
|
|
puVar2 = puVar2 + -1;
|
|
|
|
}
|
|
|
|
uVar4 = *puVar2;
|
|
|
|
param_1[0x1a] = uVar4;
|
|
|
|
if (uVar4 < 0x18) {
|
|
|
|
param_1[0x18] = param_1 + 1;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
uVar3 = thunk_FUN_005df0f5(uVar4 << 2);
|
|
|
|
param_1[0x18] = uVar3;
|
|
|
|
}
|
|
|
|
param_1[0x19] = (undefined4 *)param_1[0x18] + param_1[0x1a];
|
|
|
|
puVar6 = (undefined4 *)param_1[0x18];
|
|
|
|
for (uVar4 = param_1[0x1a] & 0x3fffffff; uVar4 != 0; uVar4 = uVar4 - 1) {
|
|
|
|
*puVar6 = 0;
|
|
|
|
puVar6 = puVar6 + 1;
|
|
|
|
}
|
|
|
|
for (iVar5 = 0; iVar5 != 0; iVar5 = iVar5 + -1) {
|
|
|
|
*(undefined1 *)puVar6 = 0;
|
|
|
|
puVar6 = (undefined4 *)((int)puVar6 + 1);
|
|
|
|
}
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0041b440 at 0x0041B440 (size: 77) ---
|
|
|
|
|
|
void __thiscall FUN_0041b440(int param_1,int param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
uint uVar1;
|
|
|
|
int iVar2;
|
|
|
|
uint uVar3;
|
|
|
|
|
|
|
|
if (*(int *)(param_1 + 0x68) * 2 < *(int *)(param_1 + 0x6c) + 1) {
|
|
|
|
FUN_0041af10();
|
|
|
|
}
|
|
|
|
uVar1 = *(uint *)(param_1 + 0x68);
|
|
|
|
uVar3 = FUN_0041aa50();
|
|
|
|
uVar3 = uVar3 % uVar1;
|
|
|
|
iVar2 = *(int *)(param_1 + 0x60);
|
|
|
|
*(undefined4 *)(param_2 + 4) = *(undefined4 *)(iVar2 + uVar3 * 4);
|
|
|
|
*(int *)(iVar2 + uVar3 * 4) = param_2;
|
|
|
|
uVar1 = iVar2 + uVar3 * 4;
|
|
|
|
if (uVar1 < *(uint *)(param_1 + 100)) {
|
|
|
|
*(uint *)(param_1 + 100) = uVar1;
|
|
|
|
}
|
|
|
|
*(int *)(param_1 + 0x6c) = *(int *)(param_1 + 0x6c) + 1;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0041b490 at 0x0041B490 (size: 221) ---
|
|
|
|
|
|
undefined4 __thiscall FUN_0041b490(int param_1,undefined4 *param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
LONG *lpAddend;
|
|
|
|
undefined4 *puVar1;
|
|
|
|
int iVar2;
|
|
|
|
LONG LVar3;
|
|
|
|
undefined4 uVar4;
|
|
|
|
int iVar5;
|
|
|
|
undefined1 local_c [8];
|
|
|
|
int local_4;
|
|
|
|
|
|
|
|
iVar2 = (int)param_2;
|
|
|
|
lpAddend = (LONG *)((int)param_2 + -0x10);
|
|
|
|
InterlockedIncrement(lpAddend);
|
|
|
|
FUN_0041aeb0(local_c,¶m_2);
|
|
|
|
if (local_4 == 0) {
|
|
|
|
param_2 = (undefined4 *)0x0;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
param_2 = (undefined4 *)(local_4 + 8);
|
|
|
|
}
|
|
|
|
puVar1 = (undefined4 *)(iVar2 + -0x14);
|
|
|
|
LVar3 = InterlockedDecrement((LONG *)(iVar2 + -0x10));
|
|
|
|
if ((LVar3 == 0) && (puVar1 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar1)(1);
|
|
|
|
}
|
|
|
|
if (param_2 == (undefined4 *)0x0) {
|
|
|
|
if (*(int *)(param_1 + 0x34) == 0) {
|
|
|
|
LVar3 = InterlockedDecrement((LONG *)(iVar2 + -0x10));
|
|
|
|
if ((LVar3 == 0) && (puVar1 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar1)(1);
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
iVar5 = iVar2;
|
|
|
|
InterlockedIncrement(lpAddend);
|
|
|
|
uVar4 = FUN_0041b490(iVar5);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
uVar4 = *param_2;
|
|
|
|
}
|
|
|
|
LVar3 = InterlockedDecrement((LONG *)(iVar2 + -0x10));
|
|
|
|
if ((LVar3 == 0) && (puVar1 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar1)(1);
|
|
|
|
}
|
|
|
|
return uVar4;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0041b570 at 0x0041B570 (size: 320) ---
|
|
|
|
|
|
undefined4 __thiscall FUN_0041b570(int param_1,int param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
uint uVar1;
|
|
|
|
int iVar2;
|
|
|
|
int iVar3;
|
|
|
|
undefined4 *puVar4;
|
|
|
|
int iVar5;
|
|
|
|
int iVar6;
|
|
|
|
undefined4 *puVar7;
|
|
|
|
uint uVar8;
|
|
|
|
int iVar9;
|
|
|
|
int *piVar10;
|
|
|
|
|
|
|
|
iVar2 = param_2;
|
|
|
|
if (param_2 == *(int *)(param_1 + 0x68)) {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
iVar6 = *(int *)(param_1 + 0x6c);
|
|
|
|
iVar3 = 0;
|
|
|
|
do {
|
|
|
|
if (iVar6 == 0) {
|
|
|
|
if (*(void **)(param_1 + 0x60) != (void *)(param_1 + 4)) {
|
|
|
|
operator_delete__(*(void **)(param_1 + 0x60));
|
|
|
|
}
|
|
|
|
*(undefined4 *)(param_1 + 0x60) = 0;
|
|
|
|
*(undefined4 *)(param_1 + 100) = 0;
|
|
|
|
*(undefined4 *)(param_1 + 0x68) = 0;
|
|
|
|
*(undefined4 *)(param_1 + 0x6c) = 0;
|
|
|
|
FUN_00693b20(iVar2);
|
|
|
|
puVar4 = (undefined4 *)PTR_DAT_00818558;
|
|
|
|
iVar2 = param_2;
|
|
|
|
while (iVar3 != 0) {
|
|
|
|
param_2 = *(int *)(param_1 + 0x68);
|
|
|
|
iVar6 = *(int *)(iVar3 + 4);
|
|
|
|
PTR_DAT_00818558 = (undefined *)puVar4;
|
|
|
|
if (param_2 * 2 < *(int *)(param_1 + 0x6c) + 1) {
|
|
|
|
puVar7 = (undefined4 *)FUN_00422d20(PTR_DAT_00818554,puVar4,¶m_2,param_2,0);
|
|
|
|
if ((puVar7 != puVar4) || (puVar7 = puVar7 + -1, puVar7 != puVar4)) {
|
|
|
|
puVar7 = puVar7 + 1;
|
|
|
|
}
|
|
|
|
FUN_0041b570(*puVar7);
|
|
|
|
iVar2 = param_2;
|
|
|
|
}
|
|
|
|
param_2 = iVar2;
|
|
|
|
uVar1 = *(uint *)(param_1 + 0x68);
|
|
|
|
uVar8 = FUN_0041aa50();
|
|
|
|
uVar8 = uVar8 % uVar1;
|
|
|
|
iVar2 = *(int *)(param_1 + 0x60);
|
|
|
|
*(undefined4 *)(iVar3 + 4) = *(undefined4 *)(iVar2 + uVar8 * 4);
|
|
|
|
*(int *)(iVar2 + uVar8 * 4) = iVar3;
|
|
|
|
uVar1 = iVar2 + uVar8 * 4;
|
|
|
|
if (uVar1 < *(uint *)(param_1 + 100)) {
|
|
|
|
*(uint *)(param_1 + 100) = uVar1;
|
|
|
|
}
|
|
|
|
*(int *)(param_1 + 0x6c) = *(int *)(param_1 + 0x6c) + 1;
|
|
|
|
puVar4 = (undefined4 *)PTR_DAT_00818558;
|
|
|
|
iVar2 = param_2;
|
|
|
|
iVar3 = iVar6;
|
|
|
|
}
|
|
|
|
PTR_DAT_00818558 = (undefined *)puVar4;
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
piVar10 = *(int **)(param_1 + 100);
|
|
|
|
while (piVar10 != (int *)(*(int *)(param_1 + 0x60) + *(int *)(param_1 + 0x68) * 4)) {
|
|
|
|
if (**(int **)(param_1 + 100) != 0) {
|
|
|
|
piVar10 = *(int **)(param_1 + 100);
|
|
|
|
iVar9 = *piVar10;
|
|
|
|
goto LAB_0041b5bf;
|
|
|
|
}
|
|
|
|
piVar10 = *(int **)(param_1 + 100) + 1;
|
|
|
|
*(int **)(param_1 + 100) = piVar10;
|
|
|
|
}
|
|
|
|
piVar10 = (int *)0x0;
|
|
|
|
iVar9 = 0;
|
|
|
|
LAB_0041b5bf:
|
|
|
|
iVar6 = *piVar10;
|
|
|
|
if (iVar6 == iVar9) {
|
|
|
|
LAB_0041b5d2:
|
|
|
|
*piVar10 = *(int *)(iVar6 + 4);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
do {
|
|
|
|
iVar5 = iVar6;
|
|
|
|
iVar6 = *(int *)(iVar5 + 4);
|
|
|
|
} while (iVar6 != iVar9);
|
|
|
|
if (iVar5 == 0) goto LAB_0041b5d2;
|
|
|
|
*(undefined4 *)(iVar5 + 4) = *(undefined4 *)(iVar6 + 4);
|
|
|
|
}
|
|
|
|
*(int *)(param_1 + 0x6c) = *(int *)(param_1 + 0x6c) + -1;
|
|
|
|
*(int *)(iVar9 + 4) = iVar3;
|
|
|
|
iVar6 = *(int *)(param_1 + 0x6c);
|
|
|
|
iVar3 = iVar9;
|
|
|
|
} while( true );
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0041b6b0 at 0x0041B6B0 (size: 289) ---
|
|
|
|
|
|
undefined4 __thiscall FUN_0041b6b0(int param_1,int param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
uint *puVar1;
|
|
|
|
int iVar2;
|
|
|
|
uint *puVar3;
|
|
|
|
int *piVar4;
|
|
|
|
undefined4 *puVar5;
|
|
|
|
undefined4 *puVar6;
|
|
|
|
uint *puVar7;
|
|
|
|
|
|
|
|
if (param_2 == *(int *)(param_1 + 0x68)) {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
iVar2 = *(int *)(param_1 + 0x6c);
|
|
|
|
puVar3 = (uint *)0x0;
|
|
|
|
do {
|
|
|
|
if (iVar2 == 0) {
|
|
|
|
if (*(void **)(param_1 + 0x60) != (void *)(param_1 + 4)) {
|
|
|
|
operator_delete__(*(void **)(param_1 + 0x60));
|
|
|
|
}
|
|
|
|
*(undefined4 *)(param_1 + 0x60) = 0;
|
|
|
|
*(undefined4 *)(param_1 + 100) = 0;
|
|
|
|
*(undefined4 *)(param_1 + 0x68) = 0;
|
|
|
|
*(undefined4 *)(param_1 + 0x6c) = 0;
|
|
|
|
FUN_00693b20(param_2);
|
|
|
|
puVar6 = (undefined4 *)PTR_DAT_00818558;
|
|
|
|
while (puVar3 != (uint *)0x0) {
|
|
|
|
param_2 = *(int *)(param_1 + 0x68);
|
|
|
|
puVar7 = (uint *)puVar3[1];
|
|
|
|
PTR_DAT_00818558 = (undefined *)puVar6;
|
|
|
|
if (param_2 * 2 < *(int *)(param_1 + 0x6c) + 1) {
|
|
|
|
puVar5 = (undefined4 *)FUN_00422d20(PTR_DAT_00818554,puVar6,¶m_2,param_2,0);
|
|
|
|
if ((puVar5 != puVar6) || (puVar5 = puVar5 + -1, puVar5 != puVar6)) {
|
|
|
|
puVar5 = puVar5 + 1;
|
|
|
|
}
|
|
|
|
FUN_0041b6b0(*puVar5);
|
|
|
|
}
|
|
|
|
puVar1 = (uint *)(*(int *)(param_1 + 0x60) + (*puVar3 % *(uint *)(param_1 + 0x68)) * 4);
|
|
|
|
puVar3[1] = *puVar1;
|
|
|
|
*puVar1 = (uint)puVar3;
|
|
|
|
if (puVar1 < *(uint **)(param_1 + 100)) {
|
|
|
|
*(uint **)(param_1 + 100) = puVar1;
|
|
|
|
}
|
|
|
|
*(int *)(param_1 + 0x6c) = *(int *)(param_1 + 0x6c) + 1;
|
|
|
|
puVar6 = (undefined4 *)PTR_DAT_00818558;
|
|
|
|
puVar3 = puVar7;
|
|
|
|
}
|
|
|
|
PTR_DAT_00818558 = (undefined *)puVar6;
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
piVar4 = *(int **)(param_1 + 100);
|
|
|
|
while (piVar4 != (int *)(*(int *)(param_1 + 0x60) + *(int *)(param_1 + 0x68) * 4)) {
|
|
|
|
if (**(int **)(param_1 + 100) != 0) {
|
|
|
|
puVar6 = *(undefined4 **)(param_1 + 100);
|
|
|
|
puVar7 = (uint *)*puVar6;
|
|
|
|
goto LAB_0041b701;
|
|
|
|
}
|
|
|
|
piVar4 = *(int **)(param_1 + 100) + 1;
|
|
|
|
*(int **)(param_1 + 100) = piVar4;
|
|
|
|
}
|
|
|
|
puVar6 = (undefined4 *)0x0;
|
|
|
|
puVar7 = (uint *)0x0;
|
|
|
|
LAB_0041b701:
|
|
|
|
FUN_00428ba0(param_1,puVar6,puVar7);
|
|
|
|
puVar7[1] = (uint)puVar3;
|
|
|
|
iVar2 = *(int *)(param_1 + 0x6c);
|
|
|
|
puVar3 = puVar7;
|
|
|
|
} while( true );
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0041b7e0 at 0x0041B7E0 (size: 259) ---
|
|
|
|
|
|
uint __thiscall FUN_0041b7e0(int param_1,int param_2,undefined4 *param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined4 *puVar1;
|
|
|
|
int iVar2;
|
|
|
|
undefined1 uVar3;
|
|
|
|
LONG LVar4;
|
|
|
|
int iVar5;
|
|
|
|
undefined4 *puVar6;
|
|
|
|
undefined1 local_c [8];
|
|
|
|
int local_4;
|
|
|
|
|
|
|
|
iVar2 = param_2;
|
|
|
|
puVar1 = (undefined4 *)(param_2 + -0x14);
|
|
|
|
InterlockedIncrement((LONG *)(param_2 + -0x10));
|
|
|
|
FUN_0041aeb0(local_c,¶m_2);
|
|
|
|
if (local_4 == 0) {
|
|
|
|
param_2 = (uint)param_2._1_3_ << 8;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
*param_3 = *(undefined4 *)(local_4 + 8);
|
|
|
|
param_2 = CONCAT31(param_2._1_3_,1);
|
|
|
|
}
|
|
|
|
LVar4 = InterlockedDecrement((LONG *)(iVar2 + -0x10));
|
|
|
|
if ((LVar4 == 0) && (puVar1 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar1)(1);
|
|
|
|
}
|
|
|
|
if ((char)param_2 != '\0') {
|
|
|
|
LVar4 = InterlockedDecrement((LONG *)(iVar2 + -0x10));
|
|
|
|
if ((LVar4 == 0) && (puVar1 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar1)(1);
|
|
|
|
}
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
if (*(int *)(param_1 + 0x34) != 0) {
|
|
|
|
iVar5 = iVar2;
|
|
|
|
puVar6 = param_3;
|
|
|
|
InterlockedIncrement((LONG *)(iVar2 + -0x10));
|
|
|
|
uVar3 = FUN_0041b7e0(iVar5,puVar6);
|
|
|
|
param_3 = (undefined4 *)CONCAT31(param_3._1_3_,uVar3);
|
|
|
|
LVar4 = InterlockedDecrement((LONG *)(iVar2 + -0x10));
|
|
|
|
if ((LVar4 == 0) && (puVar1 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar1)(1);
|
|
|
|
}
|
|
|
|
return (uint)param_3 & 0xff;
|
|
|
|
}
|
|
|
|
LVar4 = InterlockedDecrement((LONG *)(iVar2 + -0x10));
|
|
|
|
if ((LVar4 == 0) && (puVar1 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar1)(1);
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0041b8f0 at 0x0041B8F0 (size: 320) ---
|
|
|
|
|
|
bool FUN_0041b8f0(undefined4 param_1,int param_2,undefined4 param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
char cVar1;
|
|
|
|
LONG LVar2;
|
|
|
|
int iVar3;
|
|
|
|
undefined4 *puVar4;
|
|
|
|
bool bVar5;
|
|
|
|
undefined4 uVar6;
|
|
|
|
int local_8;
|
|
|
|
int *local_4;
|
|
|
|
|
|
|
|
bVar5 = false;
|
|
|
|
FUN_00415640(&local_8,param_1,1);
|
|
|
|
if (local_8 == DAT_00837c64) {
|
|
|
|
puVar4 = (undefined4 *)(param_2 + -0x14);
|
|
|
|
LVar2 = InterlockedDecrement((LONG *)(param_2 + -0x10));
|
|
|
|
if ((LVar2 == 0) && (puVar4 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar4)(1);
|
|
|
|
}
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
iVar3 = FUN_0041c280(local_8);
|
|
|
|
if (iVar3 == 0x24) {
|
|
|
|
FUN_0041aba0(local_8);
|
|
|
|
if (local_4 == (int *)0x0) goto LAB_0041ba07;
|
|
|
|
iVar3 = param_2;
|
|
|
|
uVar6 = param_3;
|
|
|
|
InterlockedIncrement((LONG *)(param_2 + -0x10));
|
|
|
|
cVar1 = FUN_0041b7e0(iVar3,uVar6);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
if (iVar3 != 0x26) {
|
|
|
|
if ((iVar3 == 0x28) && (FUN_0041ac00(local_8), local_4 != (int *)0x0)) {
|
|
|
|
cVar1 = FUN_004159d0(¶m_2,param_3);
|
|
|
|
bVar5 = cVar1 != '\0';
|
|
|
|
(**(code **)(*local_4 + 0x14))();
|
|
|
|
}
|
|
|
|
goto LAB_0041ba07;
|
|
|
|
}
|
|
|
|
FUN_0041abd0(local_8);
|
|
|
|
if (local_4 == (int *)0x0) goto LAB_0041ba07;
|
|
|
|
cVar1 = FUN_004159d0(¶m_2,param_3);
|
|
|
|
}
|
|
|
|
bVar5 = cVar1 != '\0';
|
|
|
|
(**(code **)(*local_4 + 0x14))();
|
|
|
|
LAB_0041ba07:
|
|
|
|
puVar4 = (undefined4 *)(param_2 + -0x14);
|
|
|
|
LVar2 = InterlockedDecrement((LONG *)(param_2 + -0x10));
|
|
|
|
if ((LVar2 == 0) && (puVar4 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar4)(1);
|
|
|
|
}
|
|
|
|
return bVar5;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0041ba30 at 0x0041BA30 (size: 136) ---
|
|
|
|
|
|
undefined1 FUN_0041ba30(undefined4 param_1,int param_2,undefined4 param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined1 uVar1;
|
|
|
|
LONG LVar2;
|
|
|
|
undefined4 *puVar3;
|
|
|
|
int iVar4;
|
|
|
|
undefined4 uVar5;
|
|
|
|
int local_4;
|
|
|
|
|
|
|
|
FUN_0040d810(&local_4,¶m_2);
|
|
|
|
iVar4 = local_4;
|
|
|
|
uVar5 = param_3;
|
|
|
|
InterlockedIncrement((LONG *)(local_4 + -0x10));
|
|
|
|
uVar1 = FUN_0041b8f0(param_1,iVar4,uVar5);
|
|
|
|
LVar2 = InterlockedDecrement((LONG *)(local_4 + -0x10));
|
|
|
|
if ((LVar2 == 0) && ((undefined4 *)(local_4 + -0x14) != (undefined4 *)0x0)) {
|
|
|
|
(*(code *)**(undefined4 **)(local_4 + -0x14))(1);
|
|
|
|
}
|
|
|
|
puVar3 = (undefined4 *)(param_2 + -0x14);
|
|
|
|
LVar2 = InterlockedDecrement((LONG *)(param_2 + -0x10));
|
|
|
|
if ((LVar2 == 0) && (puVar3 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar3)(1);
|
|
|
|
}
|
|
|
|
return uVar1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0041bac0 at 0x0041BAC0 (size: 284) ---
|
|
|
|
|
|
bool FUN_0041bac0(undefined4 param_1,int param_2,undefined4 param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
char cVar1;
|
|
|
|
int iVar2;
|
|
|
|
undefined4 uVar3;
|
|
|
|
int *piVar4;
|
|
|
|
LONG LVar5;
|
|
|
|
undefined4 *puVar6;
|
|
|
|
bool bVar7;
|
|
|
|
|
|
|
|
bVar7 = false;
|
|
|
|
iVar2 = FUN_0041c280(param_1);
|
|
|
|
if (iVar2 == 0x24) {
|
|
|
|
uVar3 = FUN_004220b0(param_1,0x24);
|
|
|
|
piVar4 = (int *)FUN_00415430(uVar3);
|
|
|
|
if (piVar4 != (int *)0x0) {
|
|
|
|
iVar2 = param_2;
|
|
|
|
uVar3 = param_3;
|
|
|
|
InterlockedIncrement((LONG *)(param_2 + -0x10));
|
|
|
|
cVar1 = FUN_0041b7e0(iVar2,uVar3);
|
|
|
|
bVar7 = cVar1 != '\0';
|
|
|
|
(**(code **)(*piVar4 + 0x14))();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (iVar2 == 0x26) {
|
|
|
|
uVar3 = FUN_004220b0(param_1,0x26);
|
|
|
|
piVar4 = (int *)FUN_00415430(uVar3);
|
|
|
|
if (piVar4 != (int *)0x0) {
|
|
|
|
cVar1 = FUN_004159d0(¶m_2,param_3);
|
|
|
|
bVar7 = cVar1 != '\0';
|
|
|
|
(**(code **)(*piVar4 + 0x14))();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (iVar2 == 0x28) {
|
|
|
|
uVar3 = FUN_004220b0(param_1,0x28);
|
|
|
|
piVar4 = (int *)FUN_00415430(uVar3);
|
|
|
|
if (piVar4 != (int *)0x0) {
|
|
|
|
cVar1 = FUN_004159d0(¶m_2,param_3);
|
|
|
|
bVar7 = cVar1 != '\0';
|
|
|
|
(**(code **)(*piVar4 + 0x14))();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
puVar6 = (undefined4 *)(param_2 + -0x14);
|
|
|
|
LVar5 = InterlockedDecrement((LONG *)(param_2 + -0x10));
|
|
|
|
if ((LVar5 == 0) && (puVar6 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar6)(1);
|
|
|
|
}
|
|
|
|
return bVar7;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0041bbe0 at 0x0041BBE0 (size: 143) ---
|
|
|
|
|
|
undefined4 FUN_0041bbe0(int *param_1,int *param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
int *piVar2;
|
|
|
|
undefined1 local_c [8];
|
|
|
|
int local_4;
|
|
|
|
|
|
|
|
FUN_0041aeb0(local_c,param_1);
|
|
|
|
if (local_4 != 0) {
|
|
|
|
*(int *)(local_4 + 8) = *param_2;
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
piVar2 = (int *)FUN_005df0f5(0xc);
|
|
|
|
if (piVar2 == (int *)0x0) {
|
|
|
|
piVar2 = (int *)0x0;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
iVar1 = *param_1;
|
|
|
|
*piVar2 = iVar1;
|
|
|
|
InterlockedIncrement((LONG *)(iVar1 + -0x10));
|
|
|
|
piVar2[1] = 0;
|
|
|
|
piVar2[2] = *param_2;
|
|
|
|
}
|
|
|
|
FUN_0041aeb0(local_c,piVar2);
|
|
|
|
if (local_4 == 0) {
|
|
|
|
FUN_0041b440(piVar2);
|
|
|
|
}
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0041bc70 at 0x0041BC70 (size: 67) ---
|
|
|
|
|
|
void FUN_0041bc70(undefined4 param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined *puVar1;
|
|
|
|
undefined4 *puVar2;
|
|
|
|
|
|
|
|
puVar1 = PTR_DAT_00818558;
|
|
|
|
puVar2 = (undefined4 *)FUN_00422d20(PTR_DAT_00818554,PTR_DAT_00818558,¶m_1,param_1,0);
|
|
|
|
if (puVar2 == (undefined4 *)puVar1) {
|
|
|
|
puVar2 = puVar2 + -1;
|
|
|
|
}
|
|
|
|
FUN_0041b6b0(*puVar2);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0041bcc0 at 0x0041BCC0 (size: 542) ---
|
|
|
|
|
|
void FUN_0041bcc0(undefined4 param_1,int param_2,uint param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
undefined *puVar2;
|
|
|
|
undefined *puVar3;
|
|
|
|
uint uVar4;
|
|
|
|
char cVar5;
|
|
|
|
undefined *puVar6;
|
|
|
|
byte *pbVar7;
|
|
|
|
int *piVar8;
|
|
|
|
undefined4 *puVar9;
|
|
|
|
LONG *lpAddend;
|
|
|
|
undefined4 *puVar10;
|
|
|
|
uint uVar11;
|
|
|
|
undefined4 *puVar12;
|
|
|
|
undefined1 local_c [12];
|
|
|
|
|
|
|
|
uVar4 = param_3;
|
|
|
|
if ((~*(byte *)(param_3 + 4) & 1) != 0) {
|
|
|
|
FUN_005c2c80();
|
|
|
|
}
|
|
|
|
puVar3 = PTR_DAT_00818558;
|
|
|
|
puVar2 = PTR_DAT_00818554;
|
|
|
|
if (((byte)*(undefined4 *)(uVar4 + 4) & 5) == 1) {
|
|
|
|
param_3 = *(uint *)(param_2 + 0x68);
|
|
|
|
puVar6 = (undefined *)FUN_00422d20(PTR_DAT_00818554,PTR_DAT_00818558,¶m_3,param_3,0);
|
|
|
|
if (puVar6 == puVar3) {
|
|
|
|
puVar6 = puVar6 + -4;
|
|
|
|
}
|
|
|
|
uVar11 = (int)puVar6 - (int)puVar2 >> 2;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
uVar11 = param_3 & 0xff;
|
|
|
|
}
|
|
|
|
FUN_0040ad10(1);
|
|
|
|
pbVar7 = (byte *)FUN_0040acf0(1);
|
|
|
|
if (pbVar7 != (byte *)0x0) {
|
|
|
|
if ((*(byte *)(uVar4 + 4) & 1) == 0) {
|
|
|
|
uVar11 = (uint)*pbVar7;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
*pbVar7 = (byte)uVar11;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if ((*(byte *)(uVar4 + 4) & 5) == 0) {
|
|
|
|
if ((uVar11 & 0xff) < DAT_007956cc) {
|
|
|
|
FUN_0041bc70(*(undefined4 *)(PTR_DAT_00818554 + (uVar11 & 0xff) * 4));
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
FUN_0040aa50();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (((byte)*(undefined4 *)(uVar4 + 4) & 5) == 1) {
|
|
|
|
param_3 = *(uint *)(param_2 + 0x6c);
|
|
|
|
}
|
|
|
|
FUN_00401a80(¶m_3,¶m_3,uVar4);
|
|
|
|
if (((byte)*(undefined4 *)(uVar4 + 4) & 5) == 1) {
|
|
|
|
piVar8 = (int *)FUN_0052dcf0(local_c);
|
|
|
|
iVar1 = *piVar8;
|
|
|
|
puVar12 = (undefined4 *)piVar8[1];
|
|
|
|
puVar9 = (undefined4 *)piVar8[2];
|
|
|
|
LAB_0041bdc2:
|
|
|
|
puVar10 = puVar9;
|
|
|
|
if (puVar9 != (undefined4 *)0x0) {
|
|
|
|
do {
|
|
|
|
FUN_0040ad10(4);
|
|
|
|
puVar9 = (undefined4 *)FUN_0040acf0(4);
|
|
|
|
if (puVar9 != (undefined4 *)0x0) {
|
|
|
|
if ((*(byte *)(uVar4 + 4) & 1) == 0) {
|
|
|
|
*puVar10 = *puVar9;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
*puVar9 = *puVar10;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
FUN_00402400(uVar4);
|
|
|
|
puVar10 = (undefined4 *)puVar10[1];
|
|
|
|
} while (puVar10 != (undefined4 *)0x0);
|
|
|
|
do {
|
|
|
|
puVar12 = puVar12 + 1;
|
|
|
|
puVar9 = puVar10;
|
|
|
|
if (puVar12 == (undefined4 *)(*(int *)(iVar1 + 0x60) + *(int *)(iVar1 + 0x68) * 4)) break;
|
|
|
|
puVar9 = (undefined4 *)*puVar12;
|
|
|
|
} while (puVar9 == (undefined4 *)0x0);
|
|
|
|
goto LAB_0041bdc2;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if ((*(byte *)(uVar4 + 4) & 5) == 0) {
|
|
|
|
uVar11 = FUN_0040a8f0();
|
|
|
|
if (uVar11 < param_3) {
|
|
|
|
LAB_0041becf:
|
|
|
|
FUN_0040aa50();
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
uVar11 = 0;
|
|
|
|
puVar12 = (undefined4 *)0x0;
|
|
|
|
if (param_3 != 0) {
|
|
|
|
while( true ) {
|
|
|
|
puVar9 = (undefined4 *)FUN_005df0f5(0xc);
|
|
|
|
if (puVar9 == (undefined4 *)0x0) {
|
|
|
|
puVar9 = (undefined4 *)0x0;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
puVar9[1] = 0;
|
|
|
|
lpAddend = (LONG *)(PTR_DAT_00818344 + -0x10);
|
|
|
|
puVar9[2] = PTR_DAT_00818344;
|
|
|
|
InterlockedIncrement(lpAddend);
|
|
|
|
}
|
|
|
|
FUN_0040ad10(4);
|
|
|
|
puVar10 = (undefined4 *)FUN_0040acf0(4);
|
|
|
|
if (puVar10 != (undefined4 *)0x0) {
|
|
|
|
if ((*(byte *)(uVar4 + 4) & 1) == 0) {
|
|
|
|
*puVar9 = *puVar10;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
*puVar10 = *puVar9;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
FUN_00402400(uVar4);
|
|
|
|
if ((*(uint *)(uVar4 + 4) >> 2 & 1) != 0) break;
|
|
|
|
cVar5 = FUN_00599310(puVar9,puVar12);
|
|
|
|
if (cVar5 == '\0') goto LAB_0041becf;
|
|
|
|
uVar11 = uVar11 + 1;
|
|
|
|
puVar12 = puVar9;
|
|
|
|
if (param_3 <= uVar11) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0041bee0 at 0x0041BEE0 (size: 63) ---
|
|
|
|
|
|
void __fastcall FUN_0041bee0(int param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
FUN_00433a10();
|
|
|
|
FUN_00415e50();
|
|
|
|
if (*(int **)(param_1 + 0x34) != (int *)0x0) {
|
|
|
|
(**(code **)(**(int **)(param_1 + 0x34) + 0x14))();
|
|
|
|
*(undefined4 *)(param_1 + 0x34) = 0;
|
|
|
|
*(undefined4 *)(param_1 + 0x30) = DAT_00837c64;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
*(undefined4 *)(param_1 + 0x30) = DAT_00837c64;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0041bf20 at 0x0041BF20 (size: 82) ---
|
|
|
|
|
|
undefined4 * __thiscall FUN_0041bf20(undefined4 *param_1,byte param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
*param_1 = &PTR_FUN_007964c8;
|
|
|
|
FUN_00415e50();
|
|
|
|
param_1[1] = &PTR_FUN_00796464;
|
|
|
|
if ((undefined4 *)param_1[0x19] != param_1 + 2) {
|
|
|
|
operator_delete__((undefined4 *)param_1[0x19]);
|
|
|
|
}
|
|
|
|
param_1[0x19] = 0;
|
|
|
|
param_1[0x1a] = 0;
|
|
|
|
param_1[0x1b] = 0;
|
|
|
|
param_1[0x1c] = 0;
|
|
|
|
if ((param_2 & 1) != 0) {
|
|
|
|
operator_delete(param_1);
|
|
|
|
}
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0041bf80 at 0x0041BF80 (size: 180) ---
|
|
|
|
|
|
void __fastcall FUN_0041bf80(undefined4 *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
*param_1 = &PTR_LAB_00796470;
|
|
|
|
FUN_00433a10();
|
|
|
|
FUN_00415e50();
|
|
|
|
if ((int *)param_1[0xd] != (int *)0x0) {
|
|
|
|
(**(code **)(*(int *)param_1[0xd] + 0x14))();
|
|
|
|
param_1[0xd] = 0;
|
|
|
|
}
|
|
|
|
param_1[0xc] = DAT_00837c64;
|
|
|
|
param_1[0x2b] = &PTR_FUN_0079646c;
|
|
|
|
FUN_00433a10();
|
|
|
|
param_1[0x2c] = &PTR_FUN_00796468;
|
|
|
|
if ((undefined4 *)param_1[0x44] != param_1 + 0x2d) {
|
|
|
|
operator_delete__((undefined4 *)param_1[0x44]);
|
|
|
|
}
|
|
|
|
param_1[0x44] = 0;
|
|
|
|
param_1[0x45] = 0;
|
|
|
|
param_1[0x46] = 0;
|
|
|
|
param_1[0x47] = 0;
|
|
|
|
param_1[0xe] = &PTR_FUN_007964c8;
|
|
|
|
FUN_00415e50();
|
|
|
|
param_1[0xf] = &PTR_FUN_00796464;
|
|
|
|
if ((undefined4 *)param_1[0x27] != param_1 + 0x10) {
|
|
|
|
operator_delete__((undefined4 *)param_1[0x27]);
|
|
|
|
}
|
|
|
|
param_1[0x27] = 0;
|
|
|
|
param_1[0x28] = 0;
|
|
|
|
param_1[0x29] = 0;
|
|
|
|
param_1[0x2a] = 0;
|
|
|
|
FUN_004154b0();
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0041c050 at 0x0041C050 (size: 97) ---
|
|
|
|
|
|
undefined4 * __fastcall FUN_0041c050(undefined4 *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
FUN_00415460(DAT_00837c64);
|
|
|
|
*param_1 = &PTR_LAB_00796470;
|
|
|
|
param_1[0xc] = DAT_00837c64;
|
|
|
|
param_1[0xd] = 0;
|
|
|
|
param_1[0xe] = &PTR_FUN_007964c8;
|
|
|
|
FUN_0041b320(0);
|
|
|
|
param_1[0xe] = &PTR_FUN_007964c8;
|
|
|
|
param_1[0x2b] = &PTR_FUN_0079646c;
|
|
|
|
FUN_0041b3b0(0);
|
|
|
|
param_1[0x2b] = &PTR_FUN_0079646c;
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0041c0c0 at 0x0041C0C0 (size: 30) ---
|
|
|
|
|
|
void * __thiscall FUN_0041c0c0(void *param_1,byte param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
FUN_0041bf80();
|
|
|
|
if ((param_2 & 1) != 0) {
|
|
|
|
operator_delete(param_1);
|
|
|
|
}
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0041c220 at 0x0041C220 (size: 30) ---
|
|
|
|
|
|
uint FUN_0041c220(undefined4 *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
uint in_EAX;
|
|
|
|
uint uVar1;
|
|
|
|
|
|
|
|
if ((param_1 != (undefined4 *)0x0) &&
|
|
|
|
(in_EAX = (uint)DAT_00837c68, DAT_00837c68 == (undefined4 *)0x0)) {
|
|
|
|
DAT_00837c68 = param_1;
|
|
|
|
/* WARNING: Could not recover jumptable at 0x0041c239. Too many branches */
|
|
|
|
/* WARNING: Treating indirect jump as call */
|
|
|
|
uVar1 = (**(code **)*param_1)();
|
|
|
|
return uVar1;
|
|
|
|
}
|
|
|
|
return in_EAX & 0xffffff00;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0041c240 at 0x0041C240 (size: 27) ---
|
|
|
|
|
|
undefined4 FUN_0041c240(void)
|
|
|
|
|
|
|
|
{
|
|
|
|
operator_delete(DAT_00837c68);
|
|
|
|
DAT_00837c68 = (void *)0x0;
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0041c260 at 0x0041C260 (size: 24) ---
|
|
|
|
|
|
undefined4 FUN_0041c260(undefined4 param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined4 uVar1;
|
|
|
|
|
|
|
|
if (DAT_00837c68 != (int *)0x0) {
|
|
|
|
uVar1 = (**(code **)(*DAT_00837c68 + 4))(param_1);
|
|
|
|
return uVar1;
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0041c280 at 0x0041C280 (size: 24) ---
|
|
|
|
|
|
undefined4 FUN_0041c280(undefined4 param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined4 uVar1;
|
|
|
|
|
|
|
|
if (DAT_00837c68 != (int *)0x0) {
|
|
|
|
uVar1 = (**(code **)(*DAT_00837c68 + 8))(param_1);
|
|
|
|
return uVar1;
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0041c2a0 at 0x0041C2A0 (size: 64) ---
|
|
|
|
|
|
undefined4 * __thiscall FUN_0041c2a0(undefined4 *param_1,byte param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
*param_1 = &PTR_FUN_007964cc;
|
|
|
|
if ((undefined4 *)param_1[0x18] != param_1 + 1) {
|
|
|
|
operator_delete__((undefined4 *)param_1[0x18]);
|
|
|
|
}
|
|
|
|
param_1[0x18] = 0;
|
|
|
|
param_1[0x19] = 0;
|
|
|
|
param_1[0x1a] = 0;
|
|
|
|
param_1[0x1b] = 0;
|
|
|
|
if ((param_2 & 1) != 0) {
|
|
|
|
operator_delete(param_1);
|
|
|
|
}
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0041c2e0 at 0x0041C2E0 (size: 79) ---
|
|
|
|
|
|
void FUN_0041c2e0(int *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined4 *puVar1;
|
|
|
|
LONG LVar2;
|
|
|
|
|
|
|
|
if (DAT_00837c70 != *param_1) {
|
|
|
|
puVar1 = (undefined4 *)(DAT_00837c70 + -0x14);
|
|
|
|
LVar2 = InterlockedDecrement((LONG *)(DAT_00837c70 + -0x10));
|
|
|
|
if ((LVar2 == 0) && (puVar1 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar1)(1);
|
|
|
|
}
|
|
|
|
DAT_00837c70 = *param_1;
|
|
|
|
InterlockedIncrement((LONG *)(DAT_00837c70 + -0x10));
|
|
|
|
}
|
|
|
|
thunk_FUN_0040deb0(&DAT_00837c70,0);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0041c330 at 0x0041C330 (size: 79) ---
|
|
|
|
|
|
void FUN_0041c330(int *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined4 *puVar1;
|
|
|
|
LONG LVar2;
|
|
|
|
|
|
|
|
if (DAT_00837c74 != *param_1) {
|
|
|
|
puVar1 = (undefined4 *)(DAT_00837c74 + -0x14);
|
|
|
|
LVar2 = InterlockedDecrement((LONG *)(DAT_00837c74 + -0x10));
|
|
|
|
if ((LVar2 == 0) && (puVar1 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar1)(1);
|
|
|
|
}
|
|
|
|
DAT_00837c74 = *param_1;
|
|
|
|
InterlockedIncrement((LONG *)(DAT_00837c74 + -0x10));
|
|
|
|
}
|
|
|
|
thunk_FUN_0040deb0(&DAT_00837c74,0);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0041c380 at 0x0041C380 (size: 116) ---
|
|
|
|
|
|
undefined4 * __fastcall FUN_0041c380(undefined4 *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
LONG *lpAddend;
|
|
|
|
|
|
|
|
*param_1 = DAT_00837c6c;
|
|
|
|
param_1[1] = DAT_00837c6c;
|
|
|
|
param_1[2] = 0;
|
|
|
|
param_1[3] = 0;
|
|
|
|
param_1[4] = 0;
|
|
|
|
param_1[5] = 0;
|
|
|
|
param_1[6] = 0;
|
|
|
|
*(undefined1 *)(param_1 + 7) = 0;
|
|
|
|
*(undefined1 *)((int)param_1 + 0x1d) = 0;
|
|
|
|
*(undefined1 *)((int)param_1 + 0x1e) = 0;
|
|
|
|
*(undefined1 *)((int)param_1 + 0x1f) = 0;
|
|
|
|
lpAddend = (LONG *)(PTR_DAT_00818344 + -0x10);
|
|
|
|
param_1[8] = PTR_DAT_00818344;
|
|
|
|
InterlockedIncrement(lpAddend);
|
|
|
|
*(undefined1 *)(param_1 + 9) = 0;
|
|
|
|
*(undefined1 *)((int)param_1 + 0x25) = 0;
|
|
|
|
*(undefined1 *)((int)param_1 + 0x26) = 0;
|
|
|
|
*(undefined1 *)((int)param_1 + 0x27) = 0;
|
|
|
|
*(undefined1 *)(param_1 + 10) = 0;
|
|
|
|
*(undefined1 *)((int)param_1 + 0x29) = 0;
|
|
|
|
*(undefined1 *)((int)param_1 + 0x2a) = 0;
|
|
|
|
*(undefined1 *)(param_1 + 0xb) = 0;
|
|
|
|
*(undefined1 *)((int)param_1 + 0x2d) = 0;
|
|
|
|
param_1[0xc] = 0x10;
|
|
|
|
param_1[0xd] = 0x10;
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0041c400 at 0x0041C400 (size: 114) ---
|
|
|
|
|
|
uint * FUN_0041c400(uint param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
uint *puVar1;
|
|
|
|
|
|
|
|
if ((DAT_00837cb0 & 1) == 0) {
|
|
|
|
DAT_00837cb0 = DAT_00837cb0 | 1;
|
|
|
|
FUN_0041c380();
|
|
|
|
_atexit((_func_4879 *)&LAB_00727fc0);
|
|
|
|
}
|
|
|
|
puVar1 = *(uint **)(DAT_0081880c + (param_1 % DAT_00818814) * 4);
|
|
|
|
if (puVar1 != (uint *)0x0) {
|
|
|
|
while (*puVar1 != param_1) {
|
|
|
|
puVar1 = (uint *)puVar1[1];
|
|
|
|
if (puVar1 == (uint *)0x0) {
|
|
|
|
return (uint *)&DAT_00837c78;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if ((puVar1 != (uint *)0x0) && (puVar1 + 2 != (uint *)0x0)) {
|
|
|
|
return puVar1 + 2;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return (uint *)&DAT_00837c78;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0041c480 at 0x0041C480 (size: 17) ---
|
|
|
|
|
|
undefined1 FUN_0041c480(undefined4 param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
|
|
|
|
iVar1 = FUN_0041c400(param_1);
|
|
|
|
return *(undefined1 *)(iVar1 + 0x1d);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0041c4a0 at 0x0041C4A0 (size: 17) ---
|
|
|
|
|
|
undefined1 FUN_0041c4a0(undefined4 param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
|
|
|
|
iVar1 = FUN_0041c400(param_1);
|
|
|
|
return *(undefined1 *)(iVar1 + 0x1e);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0041c4c0 at 0x0041C4C0 (size: 17) ---
|
|
|
|
|
|
undefined1 FUN_0041c4c0(undefined4 param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
|
|
|
|
iVar1 = FUN_0041c400(param_1);
|
|
|
|
return *(undefined1 *)(iVar1 + 0x1f);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0041c4e0 at 0x0041C4E0 (size: 17) ---
|
|
|
|
|
|
undefined1 FUN_0041c4e0(undefined4 param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
|
|
|
|
iVar1 = FUN_0041c400(param_1);
|
|
|
|
return *(undefined1 *)(iVar1 + 0x29);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0041c500 at 0x0041C500 (size: 17) ---
|
|
|
|
|
|
int FUN_0041c500(undefined4 param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
|
|
|
|
iVar1 = FUN_0041c400(param_1);
|
|
|
|
return iVar1 + 0x2c;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0041c520 at 0x0041C520 (size: 332) ---
|
|
|
|
|
|
undefined1 FUN_0041c520(char *param_1,undefined4 param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
LONG LVar2;
|
|
|
|
char *_Str1;
|
|
|
|
char *_Str1_00;
|
|
|
|
char *pcVar3;
|
|
|
|
undefined1 local_9;
|
|
|
|
char *local_8;
|
|
|
|
char *local_4;
|
|
|
|
|
|
|
|
iVar1 = FUN_0041c400(param_2);
|
|
|
|
_Str1 = *(char **)(iVar1 + 0x20);
|
|
|
|
if (*(int *)(_Str1 + -4) == 1) {
|
|
|
|
InterlockedIncrement((LONG *)(_Str1 + -0x10));
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
FUN_0040bbc0(&local_4,(int *)(iVar1 + 0x20));
|
|
|
|
_Str1 = local_4;
|
|
|
|
}
|
|
|
|
iVar1 = FUN_0041c400(param_2);
|
|
|
|
_Str1_00 = *(char **)(iVar1 + 0x20);
|
|
|
|
if (*(int *)(_Str1_00 + -4) == 1) {
|
|
|
|
InterlockedIncrement((LONG *)(_Str1_00 + -0x10));
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
FUN_0040bbc0(&local_4,(int *)(iVar1 + 0x20));
|
|
|
|
_Str1_00 = local_4;
|
|
|
|
}
|
|
|
|
local_8 = param_1;
|
|
|
|
InterlockedIncrement((LONG *)(param_1 + -0x10));
|
|
|
|
thunk_FUN_0040deb0(&local_8,0);
|
|
|
|
iVar1 = _strnicmp(_Str1,local_8,*(int *)(_Str1 + -4) - 1);
|
|
|
|
if (iVar1 != 0) {
|
|
|
|
iVar1 = _strnicmp(_Str1_00,local_8,*(int *)(_Str1_00 + -4) - 1);
|
|
|
|
local_9 = 0;
|
|
|
|
if (iVar1 != 0) goto LAB_0041c5ee;
|
|
|
|
}
|
|
|
|
local_9 = 1;
|
|
|
|
LAB_0041c5ee:
|
|
|
|
pcVar3 = local_8 + -0x14;
|
|
|
|
LVar2 = InterlockedDecrement((LONG *)(local_8 + -0x10));
|
|
|
|
if ((LVar2 == 0) && (pcVar3 != (char *)0x0)) {
|
|
|
|
(*(code *)**(undefined4 **)pcVar3)(1);
|
|
|
|
}
|
|
|
|
LVar2 = InterlockedDecrement((LONG *)(_Str1_00 + -0x10));
|
|
|
|
if ((LVar2 == 0) && (_Str1_00 + -0x14 != (char *)0x0)) {
|
|
|
|
(*(code *)**(undefined4 **)(_Str1_00 + -0x14))(1);
|
|
|
|
}
|
|
|
|
LVar2 = InterlockedDecrement((LONG *)(_Str1 + -0x10));
|
|
|
|
if ((LVar2 == 0) && (_Str1 + -0x14 != (char *)0x0)) {
|
|
|
|
(*(code *)**(undefined4 **)(_Str1 + -0x14))(1);
|
|
|
|
}
|
|
|
|
LVar2 = InterlockedDecrement((LONG *)(param_1 + -0x10));
|
|
|
|
if ((LVar2 == 0) && (param_1 + -0x14 != (char *)0x0)) {
|
|
|
|
(*(code *)**(undefined4 **)(param_1 + -0x14))(1);
|
|
|
|
}
|
|
|
|
return local_9;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0041c670 at 0x0041C670 (size: 143) ---
|
|
|
|
|
|
undefined4 * __thiscall FUN_0041c670(undefined4 *param_1,undefined4 param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined *puVar1;
|
|
|
|
uint *puVar2;
|
|
|
|
undefined4 uVar3;
|
|
|
|
uint uVar4;
|
|
|
|
int iVar5;
|
|
|
|
undefined4 *puVar6;
|
|
|
|
|
|
|
|
param_1[0x18] = 0;
|
|
|
|
param_1[0x19] = 0;
|
|
|
|
param_1[0x1a] = 0;
|
|
|
|
param_1[0x1b] = 0;
|
|
|
|
*param_1 = &PTR_FUN_007964cc;
|
|
|
|
puVar1 = PTR_DAT_00818558;
|
|
|
|
puVar2 = (uint *)FUN_00422d20(PTR_DAT_00818554,PTR_DAT_00818558,¶m_2,param_2,0);
|
|
|
|
if (puVar2 == (uint *)puVar1) {
|
|
|
|
puVar2 = puVar2 + -1;
|
|
|
|
}
|
|
|
|
uVar4 = *puVar2;
|
|
|
|
param_1[0x1a] = uVar4;
|
|
|
|
if (uVar4 < 0x18) {
|
|
|
|
param_1[0x18] = param_1 + 1;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
uVar3 = thunk_FUN_005df0f5(uVar4 << 2);
|
|
|
|
param_1[0x18] = uVar3;
|
|
|
|
}
|
|
|
|
param_1[0x19] = (undefined4 *)param_1[0x18] + param_1[0x1a];
|
|
|
|
puVar6 = (undefined4 *)param_1[0x18];
|
|
|
|
for (uVar4 = param_1[0x1a] & 0x3fffffff; uVar4 != 0; uVar4 = uVar4 - 1) {
|
|
|
|
*puVar6 = 0;
|
|
|
|
puVar6 = puVar6 + 1;
|
|
|
|
}
|
|
|
|
for (iVar5 = 0; iVar5 != 0; iVar5 = iVar5 + -1) {
|
|
|
|
*(undefined1 *)puVar6 = 0;
|
|
|
|
puVar6 = (undefined4 *)((int)puVar6 + 1);
|
|
|
|
}
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0041c700 at 0x0041C700 (size: 271) ---
|
|
|
|
|
|
void __fastcall FUN_0041c700(int param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
void *pvVar2;
|
|
|
|
void *pvVar3;
|
|
|
|
LONG LVar4;
|
|
|
|
int *piVar5;
|
|
|
|
void *pvVar6;
|
|
|
|
undefined4 *puVar7;
|
|
|
|
int iVar8;
|
|
|
|
int local_8;
|
|
|
|
|
|
|
|
iVar1 = *(int *)(param_1 + 0x6c);
|
|
|
|
do {
|
|
|
|
if (iVar1 == 0) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
piVar5 = *(int **)(param_1 + 100);
|
|
|
|
while (piVar5 != (int *)(*(int *)(param_1 + 0x60) + *(int *)(param_1 + 0x68) * 4)) {
|
|
|
|
if (**(int **)(param_1 + 100) != 0) {
|
|
|
|
piVar5 = *(int **)(param_1 + 100);
|
|
|
|
pvVar6 = (void *)*piVar5;
|
|
|
|
goto LAB_0041c741;
|
|
|
|
}
|
|
|
|
piVar5 = *(int **)(param_1 + 100) + 1;
|
|
|
|
*(int **)(param_1 + 100) = piVar5;
|
|
|
|
}
|
|
|
|
piVar5 = (int *)0x0;
|
|
|
|
pvVar6 = (void *)0x0;
|
|
|
|
LAB_0041c741:
|
|
|
|
pvVar3 = (void *)*piVar5;
|
|
|
|
if (pvVar3 == pvVar6) {
|
|
|
|
LAB_0041c754:
|
|
|
|
*piVar5 = *(int *)((int)pvVar3 + 4);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
do {
|
|
|
|
pvVar2 = pvVar3;
|
|
|
|
pvVar3 = *(void **)((int)pvVar2 + 4);
|
|
|
|
} while (pvVar3 != pvVar6);
|
|
|
|
if (pvVar2 == (void *)0x0) goto LAB_0041c754;
|
|
|
|
*(undefined4 *)((int)pvVar2 + 4) = *(undefined4 *)((int)pvVar3 + 4);
|
|
|
|
}
|
|
|
|
*(int *)(param_1 + 0x6c) = *(int *)(param_1 + 0x6c) + -1;
|
|
|
|
if (pvVar6 != (void *)0x0) {
|
|
|
|
puVar7 = (undefined4 *)(*(int *)((int)pvVar6 + 0x28) + -0x14);
|
|
|
|
LVar4 = InterlockedDecrement((LONG *)(*(int *)((int)pvVar6 + 0x28) + -0x10));
|
|
|
|
if ((LVar4 == 0) && (puVar7 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar7)(1);
|
|
|
|
}
|
|
|
|
if (((*(uint *)((int)pvVar6 + 0x14) & 0x80000000) == 0x80000000) &&
|
|
|
|
(iVar1 = *(int *)((int)pvVar6 + 0x10), iVar1 != 0)) {
|
|
|
|
local_8 = *(int *)(iVar1 + -4);
|
|
|
|
iVar8 = iVar1 + local_8 * 4;
|
|
|
|
if (-1 < local_8 + -1) {
|
|
|
|
do {
|
|
|
|
piVar5 = (int *)(iVar8 + -4);
|
|
|
|
iVar8 = iVar8 + -4;
|
|
|
|
puVar7 = (undefined4 *)(*piVar5 + -0x14);
|
|
|
|
LVar4 = InterlockedDecrement((LONG *)(*piVar5 + -0x10));
|
|
|
|
if ((LVar4 == 0) && (puVar7 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar7)(1);
|
|
|
|
}
|
|
|
|
local_8 = local_8 + -1;
|
|
|
|
} while (local_8 != 0);
|
|
|
|
}
|
|
|
|
operator_delete__((void *)(iVar1 + -4));
|
|
|
|
}
|
|
|
|
operator_delete(pvVar6);
|
|
|
|
}
|
|
|
|
iVar1 = *(int *)(param_1 + 0x6c);
|
|
|
|
} while( true );
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0041c820 at 0x0041C820 (size: 82) ---
|
|
|
|
|
|
undefined4 * __thiscall FUN_0041c820(undefined4 *param_1,byte param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
*param_1 = &PTR_FUN_007964d0;
|
|
|
|
FUN_0041c700();
|
|
|
|
param_1[1] = &PTR_FUN_007964cc;
|
|
|
|
if ((undefined4 *)param_1[0x19] != param_1 + 2) {
|
|
|
|
operator_delete__((undefined4 *)param_1[0x19]);
|
|
|
|
}
|
|
|
|
param_1[0x19] = 0;
|
|
|
|
param_1[0x1a] = 0;
|
|
|
|
param_1[0x1b] = 0;
|
|
|
|
param_1[0x1c] = 0;
|
|
|
|
if ((param_2 & 1) != 0) {
|
|
|
|
operator_delete(param_1);
|
|
|
|
}
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0041c880 at 0x0041C880 (size: 1087) ---
|
|
|
|
|
|
int FUN_0041c880(uint param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
if (param_1 < 0x14010000) {
|
|
|
|
if (0x13ffffff < param_1) {
|
|
|
|
return 0x1d;
|
|
|
|
}
|
|
|
|
if (param_1 < 0xe00000e) {
|
|
|
|
if (0xe00000c < param_1) {
|
|
|
|
return 0x12;
|
|
|
|
}
|
|
|
|
if (param_1 < 0x8000000) {
|
|
|
|
if (0x5ffffff < param_1) {
|
|
|
|
return 0xc;
|
|
|
|
}
|
|
|
|
if (param_1 < 0x3010000) {
|
|
|
|
if (0x2ffffff < param_1) {
|
|
|
|
return 8;
|
|
|
|
}
|
|
|
|
if (param_1 < 0x2010000) {
|
|
|
|
if (0x1ffffff < param_1) {
|
|
|
|
return 7;
|
|
|
|
}
|
|
|
|
if (param_1 < 0x1010000) {
|
|
|
|
return (-(uint)(param_1 < 0x1000000) & 0xfffffffa) + 6;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (param_1 < 0x6000000) {
|
|
|
|
if (0x4ffffff < param_1) {
|
|
|
|
return 0xb;
|
|
|
|
}
|
|
|
|
if (param_1 < 0x4010000) {
|
|
|
|
return (-(uint)(param_1 < 0x4000000) & 0xfffffff6) + 10;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (param_1 < 0xa010000) {
|
|
|
|
if (0x9ffffff < param_1) {
|
|
|
|
return 0xf;
|
|
|
|
}
|
|
|
|
if (param_1 < 0x9010000) {
|
|
|
|
if (0x8ffffff < param_1) {
|
|
|
|
return 0xe;
|
|
|
|
}
|
|
|
|
if (param_1 < 0x8010000) {
|
|
|
|
return (-(uint)(param_1 < 0x8000000) & 0xfffffff3) + 0xd;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (param_1 < 0xe000008) {
|
|
|
|
if (0xe000006 < param_1) {
|
|
|
|
return 0x11;
|
|
|
|
}
|
|
|
|
if (param_1 < 0xd010000) {
|
|
|
|
return (-(uint)(param_1 < 0xd000000) & 0xfffffff0) + 0x10;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (param_1 < 0xf010000) {
|
|
|
|
if (0xeffffff < param_1) {
|
|
|
|
return 0x18;
|
|
|
|
}
|
|
|
|
if (param_1 < 0xe000020) {
|
|
|
|
if (0xe00001e < param_1) {
|
|
|
|
return 0x15;
|
|
|
|
}
|
|
|
|
if (param_1 < 0xe00001f) {
|
|
|
|
if (0xe00001d < param_1) {
|
|
|
|
return 0x14;
|
|
|
|
}
|
|
|
|
if (param_1 < 0xe00001b) {
|
|
|
|
return (-(uint)(param_1 < 0xe00001a) & 0xffffffed) + 0x13;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (param_1 < 0xe030000) {
|
|
|
|
if (0xe01ffff < param_1) {
|
|
|
|
return 0x17;
|
|
|
|
}
|
|
|
|
if (param_1 < 0xe000021) {
|
|
|
|
return (-(uint)(param_1 < 0xe000020) & 0xffffffea) + 0x16;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (param_1 < 0x12010000) {
|
|
|
|
if (0x11ffffff < param_1) {
|
|
|
|
return 0x1b;
|
|
|
|
}
|
|
|
|
if (param_1 < 0x11010000) {
|
|
|
|
if (0x10ffffff < param_1) {
|
|
|
|
return 0x1a;
|
|
|
|
}
|
|
|
|
if (param_1 < 0x10010000) {
|
|
|
|
return (-(uint)(param_1 < 0x10000000) & 0xffffffe7) + 0x19;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (param_1 < 0x13010000) {
|
|
|
|
return (-(uint)(param_1 < 0x13000000) & 0xffffffe4) + 0x1c;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (param_1 < 0x26010000) {
|
|
|
|
if (0x25ffffff < param_1) {
|
|
|
|
return 0x27;
|
|
|
|
}
|
|
|
|
if (param_1 < 0x20010000) {
|
|
|
|
if (0x1fffffff < param_1) {
|
|
|
|
return 0x22;
|
|
|
|
}
|
|
|
|
if (param_1 < 0x18000000) {
|
|
|
|
if (0x16ffffff < param_1) {
|
|
|
|
return 0x20;
|
|
|
|
}
|
|
|
|
if (param_1 < 0x17000000) {
|
|
|
|
if (0x15ffffff < param_1) {
|
|
|
|
return 0x1f;
|
|
|
|
}
|
|
|
|
if (param_1 < 0x16000000) {
|
|
|
|
return (-(uint)(param_1 < 0x15000000) & 0xffffffe2) + 0x1e;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (param_1 < 0x1a000000) {
|
|
|
|
if (0x18ffffff < param_1) {
|
|
|
|
return 0x43;
|
|
|
|
}
|
|
|
|
if (param_1 < 0x19000000) {
|
|
|
|
return (-(uint)(param_1 < 0x18000000) & 0xffffffdf) + 0x21;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (param_1 < 0x25000000) {
|
|
|
|
if (0x22ffffff < param_1) {
|
|
|
|
return 0x25;
|
|
|
|
}
|
|
|
|
if (param_1 < 0x23000000) {
|
|
|
|
if (0x21ffffff < param_1) {
|
|
|
|
return 0x24;
|
|
|
|
}
|
|
|
|
if (param_1 < 0x22000000) {
|
|
|
|
return (-(uint)(param_1 < 0x21000000) & 0xffffffdd) + 0x23;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (param_1 < 0x26000000) {
|
|
|
|
return (-(uint)(param_1 < 0x25000000) & 0xffffffda) + 0x26;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (param_1 < 0x3a000000) {
|
|
|
|
if (0x38ffffff < param_1) {
|
|
|
|
return 0x2d;
|
|
|
|
}
|
|
|
|
if (param_1 < 0x32010000) {
|
|
|
|
if (0x31ffffff < param_1) {
|
|
|
|
return 0x2a;
|
|
|
|
}
|
|
|
|
if (param_1 < 0x31010000) {
|
|
|
|
if (0x30ffffff < param_1) {
|
|
|
|
return 0x29;
|
|
|
|
}
|
|
|
|
if (param_1 < 0x28000000) {
|
|
|
|
return (-(uint)(param_1 < 0x27000000) & 0xffffffd8) + 0x28;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (param_1 < 0x34010000) {
|
|
|
|
if (0x33ffffff < param_1) {
|
|
|
|
return 0x2c;
|
|
|
|
}
|
|
|
|
if (param_1 < 0x33010000) {
|
|
|
|
return (-(uint)(param_1 < 0x33000000) & 0xffffffd5) + 0x2b;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (param_1 < 0x42000000) {
|
|
|
|
if (0x40ffffff < param_1) {
|
|
|
|
return 0x30;
|
|
|
|
}
|
|
|
|
if (param_1 < 0x41000000) {
|
|
|
|
if (0x40000fff < param_1) {
|
|
|
|
return 0x2f;
|
|
|
|
}
|
|
|
|
if (param_1 < 0x40001000) {
|
|
|
|
return (-(uint)(param_1 < 0x40000000) & 0xffffffd2) + 0x2e;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (param_1 < 0x80000000) {
|
|
|
|
return (-(uint)(param_1 < 0x78000000) & 0xffffffcf) + 0x31;
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0041ccc0 at 0x0041CCC0 (size: 22) ---
|
|
|
|
|
|
void __fastcall FUN_0041ccc0(undefined4 *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
FUN_004080c0();
|
|
|
|
_strlwr((char *)*param_1);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0041cce0 at 0x0041CCE0 (size: 5085) ---
|
|
|
|
|
|
undefined4 FUN_0041cce0(undefined4 param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
char *pcVar1;
|
|
|
|
uint uVar2;
|
|
|
|
int iVar3;
|
|
|
|
LONG LVar4;
|
|
|
|
char *local_e4;
|
|
|
|
char *local_e0;
|
|
|
|
char *local_dc;
|
|
|
|
char *local_d8;
|
|
|
|
char *local_d4;
|
|
|
|
char *local_d0;
|
|
|
|
char *local_cc;
|
|
|
|
char *local_c8;
|
|
|
|
char *local_c4;
|
|
|
|
char *local_c0;
|
|
|
|
char *local_bc;
|
|
|
|
char *local_b8;
|
|
|
|
char *local_b4;
|
|
|
|
char *local_b0;
|
|
|
|
char *local_ac;
|
|
|
|
char *local_a8;
|
|
|
|
char *local_a4;
|
|
|
|
char *local_a0;
|
|
|
|
char *local_9c;
|
|
|
|
char *local_98;
|
|
|
|
char *local_94;
|
|
|
|
char *local_90;
|
|
|
|
char *local_8c;
|
|
|
|
char *local_88;
|
|
|
|
char *local_84;
|
|
|
|
char *local_80;
|
|
|
|
char *local_7c;
|
|
|
|
char *local_78;
|
|
|
|
char *local_74;
|
|
|
|
char *local_70;
|
|
|
|
char *local_6c;
|
|
|
|
char *local_68;
|
|
|
|
char *local_64;
|
|
|
|
char *local_60;
|
|
|
|
char *local_5c;
|
|
|
|
char *local_58;
|
|
|
|
char *local_54;
|
|
|
|
char *local_50;
|
|
|
|
char *local_4c;
|
|
|
|
char *local_48;
|
|
|
|
char *local_44;
|
|
|
|
char *local_40;
|
|
|
|
char *local_3c;
|
|
|
|
char *local_38;
|
|
|
|
char *local_34;
|
|
|
|
char *local_30;
|
|
|
|
char *local_2c;
|
|
|
|
char *local_28;
|
|
|
|
char *local_24;
|
|
|
|
char *local_20;
|
|
|
|
char *local_1c;
|
|
|
|
char *local_18;
|
|
|
|
char *local_14;
|
|
|
|
char *local_10;
|
|
|
|
char *local_c;
|
|
|
|
char *local_8;
|
|
|
|
char *local_4;
|
|
|
|
|
|
|
|
FUN_0040ce00(&local_e4,param_1);
|
|
|
|
FUN_004080c0();
|
|
|
|
_strlwr(local_e4);
|
|
|
|
pcVar1 = local_e4;
|
|
|
|
uVar2 = *(uint *)(local_e4 + -8);
|
|
|
|
if (uVar2 == 0xffffffff) {
|
|
|
|
uVar2 = FUN_004016b0(local_e4);
|
|
|
|
*(uint *)(pcVar1 + -8) = uVar2;
|
|
|
|
}
|
|
|
|
if (uVar2 < 0x356c4) {
|
|
|
|
if (uVar2 == 0x356c3) {
|
|
|
|
FUN_00401340(&DAT_00796734);
|
|
|
|
iVar3 = _stricmp(local_e4,local_dc);
|
|
|
|
LVar4 = InterlockedDecrement((LONG *)(local_dc + -0x10));
|
|
|
|
if ((LVar4 == 0) && (local_dc + -0x14 != (char *)0x0)) {
|
|
|
|
(*(code *)**(undefined4 **)(local_dc + -0x14))(1);
|
|
|
|
}
|
|
|
|
if (iVar3 == 0) {
|
|
|
|
LVar4 = InterlockedDecrement((LONG *)(local_e4 + -0x10));
|
|
|
|
if ((LVar4 == 0) && (local_e4 + -0x14 != (char *)0x0)) {
|
|
|
|
(*(code *)**(undefined4 **)(local_e4 + -0x14))(1);
|
|
|
|
}
|
|
|
|
return 0x2b;
|
|
|
|
}
|
|
|
|
goto LAB_0041e096;
|
|
|
|
}
|
|
|
|
if (uVar2 < 0x34c45) {
|
|
|
|
if (uVar2 == 0x34c44) {
|
|
|
|
FUN_00401340(&DAT_0079672c);
|
|
|
|
iVar3 = _stricmp(local_e4,local_18);
|
|
|
|
FUN_004011b0();
|
|
|
|
if (iVar3 == 0) {
|
|
|
|
FUN_004011b0();
|
|
|
|
return 0x2a;
|
|
|
|
}
|
|
|
|
goto LAB_0041e096;
|
|
|
|
}
|
|
|
|
if (uVar2 < 0x34a30) {
|
|
|
|
if (uVar2 == 0x34a2f) {
|
|
|
|
FUN_00401340(&DAT_00796680);
|
|
|
|
iVar3 = _stricmp(local_e4,local_c0);
|
|
|
|
FUN_004011b0();
|
|
|
|
if (iVar3 == 0) {
|
|
|
|
FUN_004011b0();
|
|
|
|
return 0x19;
|
|
|
|
}
|
|
|
|
goto LAB_0041e096;
|
|
|
|
}
|
|
|
|
if (uVar2 < 0x347ec) {
|
|
|
|
if (uVar2 == 0x347eb) {
|
|
|
|
FUN_00401340(&DAT_007965cc);
|
|
|
|
iVar3 = _stricmp(local_e4,local_d0);
|
|
|
|
FUN_004011b0();
|
|
|
|
if (iVar3 == 0) {
|
|
|
|
FUN_004011b0();
|
|
|
|
return 9;
|
|
|
|
}
|
|
|
|
goto LAB_0041e096;
|
|
|
|
}
|
|
|
|
if (uVar2 == 0x3539) {
|
|
|
|
FUN_00401340(&DAT_007966c0);
|
|
|
|
iVar3 = _stricmp(local_e4,local_38);
|
|
|
|
FUN_004011b0();
|
|
|
|
if (iVar3 == 0) {
|
|
|
|
FUN_004011b0();
|
|
|
|
return 0x21;
|
|
|
|
}
|
|
|
|
goto LAB_0041e096;
|
|
|
|
}
|
|
|
|
if (uVar2 == 0x353d) {
|
|
|
|
FUN_00401340(&DAT_007966bc);
|
|
|
|
iVar3 = _stricmp(local_e4,local_d8);
|
|
|
|
FUN_004011b0();
|
|
|
|
if (iVar3 == 0) {
|
|
|
|
FUN_004011b0();
|
|
|
|
return 0x20;
|
|
|
|
}
|
|
|
|
goto LAB_0041e096;
|
|
|
|
}
|
|
|
|
if (uVar2 != 0x31586) goto LAB_0041e096;
|
|
|
|
FUN_00401340(&DAT_00796608);
|
|
|
|
iVar3 = _stricmp(local_e4,local_70);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
if (uVar2 != 0x34830) {
|
|
|
|
if (uVar2 == 0x3484d) {
|
|
|
|
FUN_00401340(&DAT_007965c4);
|
|
|
|
iVar3 = _stricmp(local_e4,local_c8);
|
|
|
|
FUN_004011b0();
|
|
|
|
if (iVar3 == 0) {
|
|
|
|
FUN_004011b0();
|
|
|
|
return 8;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (uVar2 == 0x34874) {
|
|
|
|
FUN_00401340(&DAT_00796654);
|
|
|
|
iVar3 = _stricmp(local_e4,local_68);
|
|
|
|
FUN_004011b0();
|
|
|
|
if (iVar3 == 0) {
|
|
|
|
FUN_004011b0();
|
|
|
|
return 0x13;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
goto LAB_0041e096;
|
|
|
|
}
|
|
|
|
FUN_00401340(&DAT_00796618);
|
|
|
|
iVar3 = _stricmp(local_e4,local_10);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
if (0x34ab7 < uVar2) {
|
|
|
|
if (uVar2 == 0x34b93) {
|
|
|
|
FUN_00401340(&DAT_0079662c);
|
|
|
|
iVar3 = _stricmp(local_e4,local_a8);
|
|
|
|
FUN_004011b0();
|
|
|
|
if (iVar3 == 0) {
|
|
|
|
FUN_004011b0();
|
|
|
|
return 0xe;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (uVar2 == 0x34c40) {
|
|
|
|
FUN_00401340(&DAT_007966e0);
|
|
|
|
iVar3 = _stricmp(local_e4,local_58);
|
|
|
|
FUN_004011b0();
|
|
|
|
if (iVar3 == 0) {
|
|
|
|
FUN_004011b0();
|
|
|
|
return 0x24;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
goto LAB_0041e096;
|
|
|
|
}
|
|
|
|
if (uVar2 == 0x34ab7) {
|
|
|
|
FUN_00401340(&DAT_00796688);
|
|
|
|
iVar3 = _stricmp(local_e4,local_b0);
|
|
|
|
FUN_004011b0();
|
|
|
|
if (iVar3 == 0) {
|
|
|
|
FUN_004011b0();
|
|
|
|
return 0x1a;
|
|
|
|
}
|
|
|
|
goto LAB_0041e096;
|
|
|
|
}
|
|
|
|
if (uVar2 == 0x34a73) {
|
|
|
|
FUN_00401340(&DAT_00796644);
|
|
|
|
iVar3 = _stricmp(local_e4,local_30);
|
|
|
|
FUN_004011b0();
|
|
|
|
if (iVar3 == 0) {
|
|
|
|
FUN_004011b0();
|
|
|
|
return 0x11;
|
|
|
|
}
|
|
|
|
goto LAB_0041e096;
|
|
|
|
}
|
|
|
|
if (uVar2 == 0x34a99) {
|
|
|
|
FUN_00401340(&DAT_00796610);
|
|
|
|
iVar3 = _stricmp(local_e4,local_b8);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
if (uVar2 != 0x34ab3) goto LAB_0041e096;
|
|
|
|
FUN_00401340(&DAT_007965f0);
|
|
|
|
iVar3 = _stricmp(local_e4,local_60);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
if (0x35289 < uVar2) {
|
|
|
|
if (uVar2 < 0x354d5) {
|
|
|
|
if (uVar2 == 0x354d4) {
|
|
|
|
FUN_00401340(&DAT_00796664);
|
|
|
|
iVar3 = _stricmp(local_e4,local_78);
|
|
|
|
FUN_004011b0();
|
|
|
|
if (iVar3 == 0) {
|
|
|
|
FUN_004011b0();
|
|
|
|
return 0x16;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (uVar2 == 0x3528f) {
|
|
|
|
FUN_00401340(&DAT_007965a4);
|
|
|
|
iVar3 = _stricmp(local_e4,local_40);
|
|
|
|
FUN_004011b0();
|
|
|
|
if (iVar3 == 0) {
|
|
|
|
FUN_004011b0();
|
|
|
|
return 4;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (uVar2 == 0x35384) {
|
|
|
|
FUN_00401340(&DAT_007966b4);
|
|
|
|
iVar3 = _stricmp(local_e4,local_80);
|
|
|
|
FUN_004011b0();
|
|
|
|
if (iVar3 == 0) {
|
|
|
|
FUN_004011b0();
|
|
|
|
return 0x1f;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (uVar2 == 0x35472) {
|
|
|
|
FUN_00401340(&DAT_00796744);
|
|
|
|
iVar3 = _stricmp(local_e4,local_8);
|
|
|
|
FUN_004011b0();
|
|
|
|
if (iVar3 == 0) {
|
|
|
|
FUN_004011b0();
|
|
|
|
return 0x2d;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (uVar2 == 0x3558a) {
|
|
|
|
FUN_00401340(&DAT_007965b4);
|
|
|
|
iVar3 = _stricmp(local_e4,local_e0);
|
|
|
|
FUN_004011b0();
|
|
|
|
if (iVar3 == 0) {
|
|
|
|
FUN_004011b0();
|
|
|
|
return 6;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (uVar2 == 0x3567c) {
|
|
|
|
FUN_00401340(&DAT_007965d4);
|
|
|
|
iVar3 = _stricmp(local_e4,local_20);
|
|
|
|
FUN_004011b0();
|
|
|
|
if (iVar3 == 0) {
|
|
|
|
FUN_004011b0();
|
|
|
|
return 10;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
goto LAB_0041e096;
|
|
|
|
}
|
|
|
|
if (uVar2 == 0x35289) {
|
|
|
|
FUN_00401340(&DAT_0079659c);
|
|
|
|
iVar3 = _stricmp(local_e4,local_88);
|
|
|
|
FUN_004011b0();
|
|
|
|
if (iVar3 == 0) {
|
|
|
|
FUN_004011b0();
|
|
|
|
return 2;
|
|
|
|
}
|
|
|
|
goto LAB_0041e096;
|
|
|
|
}
|
|
|
|
if (uVar2 < 0x35041) {
|
|
|
|
if (uVar2 == 0x35040) {
|
|
|
|
FUN_00401340(&DAT_00796708);
|
|
|
|
iVar3 = _stricmp(local_e4,local_28);
|
|
|
|
FUN_004011b0();
|
|
|
|
if (iVar3 == 0) {
|
|
|
|
FUN_004011b0();
|
|
|
|
return 0x26;
|
|
|
|
}
|
|
|
|
goto LAB_0041e096;
|
|
|
|
}
|
|
|
|
if (uVar2 == 0x34c56) {
|
|
|
|
FUN_00401340(&DAT_0079663c);
|
|
|
|
iVar3 = _stricmp(local_e4,local_98);
|
|
|
|
FUN_004011b0();
|
|
|
|
if (iVar3 == 0) {
|
|
|
|
FUN_004011b0();
|
|
|
|
return 0x10;
|
|
|
|
}
|
|
|
|
goto LAB_0041e096;
|
|
|
|
}
|
|
|
|
if (uVar2 == 0x34f83) {
|
|
|
|
FUN_00401340(&DAT_0079664c);
|
|
|
|
iVar3 = _stricmp(local_e4,local_50);
|
|
|
|
FUN_004011b0();
|
|
|
|
if (iVar3 == 0) {
|
|
|
|
FUN_004011b0();
|
|
|
|
return 0x12;
|
|
|
|
}
|
|
|
|
goto LAB_0041e096;
|
|
|
|
}
|
|
|
|
if (uVar2 != 0x34fc6) goto LAB_0041e096;
|
|
|
|
FUN_00401340(&DAT_00796600);
|
|
|
|
iVar3 = _stricmp(local_e4,local_a0);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
if (uVar2 == 0x35053) {
|
|
|
|
FUN_00401340(&DAT_007965ac);
|
|
|
|
iVar3 = _stricmp(local_e4,local_48);
|
|
|
|
FUN_004011b0();
|
|
|
|
if (iVar3 == 0) {
|
|
|
|
FUN_004011b0();
|
|
|
|
return 5;
|
|
|
|
}
|
|
|
|
goto LAB_0041e096;
|
|
|
|
}
|
|
|
|
if (uVar2 != 0x35167) goto LAB_0041e096;
|
|
|
|
FUN_00401340(&DAT_007965e8);
|
|
|
|
iVar3 = _stricmp(local_e4,local_90);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
if (0x34b040 < uVar2) {
|
|
|
|
if (uVar2 < 0xaba5baf) {
|
|
|
|
if (uVar2 != 0xaba5bae) {
|
|
|
|
if (0x4657c30 < uVar2) {
|
|
|
|
if (uVar2 == 0x51d03b0) {
|
|
|
|
FUN_00401340(".keymap");
|
|
|
|
iVar3 = _stricmp(local_e4,local_3c);
|
|
|
|
FUN_004011b0();
|
|
|
|
if (iVar3 == 0) {
|
|
|
|
FUN_004011b0();
|
|
|
|
return 0x1d;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (uVar2 == 0xa778f2c) {
|
|
|
|
FUN_00401340(".font_local");
|
|
|
|
iVar3 = _stricmp(local_e4,local_44);
|
|
|
|
FUN_004011b0();
|
|
|
|
if (iVar3 == 0) {
|
|
|
|
FUN_004011b0();
|
|
|
|
return 0x2f;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
goto LAB_0041e096;
|
|
|
|
}
|
|
|
|
if (uVar2 == 0x4657c30) {
|
|
|
|
FUN_00401340(".monprop");
|
|
|
|
iVar3 = _stricmp(local_e4,local_4c);
|
|
|
|
FUN_004011b0();
|
|
|
|
if (iVar3 == 0) {
|
|
|
|
FUN_004011b0();
|
|
|
|
return 0x17;
|
|
|
|
}
|
|
|
|
goto LAB_0041e096;
|
|
|
|
}
|
|
|
|
if (uVar2 == 0x34d654) {
|
|
|
|
FUN_00401340(".font");
|
|
|
|
iVar3 = _stricmp(local_e4,local_54);
|
|
|
|
FUN_004011b0();
|
|
|
|
if (iVar3 == 0) {
|
|
|
|
FUN_004011b0();
|
|
|
|
return 0x2e;
|
|
|
|
}
|
|
|
|
goto LAB_0041e096;
|
|
|
|
}
|
|
|
|
if (uVar2 != 0x357384) {
|
|
|
|
if (uVar2 == 0x35a795f) {
|
|
|
|
FUN_00401340(".taboo");
|
|
|
|
iVar3 = _stricmp(local_e4,local_64);
|
|
|
|
FUN_004011b0();
|
|
|
|
if (iVar3 == 0) {
|
|
|
|
FUN_004011b0();
|
|
|
|
return 0x14;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
goto LAB_0041e096;
|
|
|
|
}
|
|
|
|
FUN_00401340(".pmat");
|
|
|
|
iVar3 = _stricmp(local_e4,local_5c);
|
|
|
|
LAB_0041dc86:
|
|
|
|
FUN_004011b0();
|
|
|
|
if (iVar3 == 0) {
|
|
|
|
FUN_004011b0();
|
|
|
|
return 0x31;
|
|
|
|
}
|
|
|
|
goto LAB_0041e096;
|
|
|
|
}
|
|
|
|
FUN_00401340(".stt_bin");
|
|
|
|
iVar3 = _stricmp(local_e4,local_34);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
if (uVar2 < 0xafeb0d9) {
|
|
|
|
if (uVar2 == 0xafeb0d8) {
|
|
|
|
FUN_00401340(".rendermesh");
|
|
|
|
iVar3 = _stricmp(local_e4,local_14);
|
|
|
|
FUN_004011b0();
|
|
|
|
if (iVar3 == 0) {
|
|
|
|
FUN_004011b0();
|
|
|
|
return 0x43;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (uVar2 == 0xac8c4c5) {
|
|
|
|
FUN_00401340(".surface");
|
|
|
|
iVar3 = _stricmp(local_e4,local_1c);
|
|
|
|
FUN_004011b0();
|
|
|
|
if (iVar3 == 0) {
|
|
|
|
FUN_004011b0();
|
|
|
|
return 0xd;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (uVar2 == 0xacf8915) {
|
|
|
|
FUN_00401340(".rtexture");
|
|
|
|
iVar3 = _stricmp(local_e4,local_24);
|
|
|
|
FUN_004011b0();
|
|
|
|
if (iVar3 == 0) {
|
|
|
|
FUN_004011b0();
|
|
|
|
return 0x1e;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (uVar2 == 0xacfbfd5) {
|
|
|
|
FUN_00401340(".texture");
|
|
|
|
iVar3 = _stricmp(local_e4,local_2c);
|
|
|
|
FUN_004011b0();
|
|
|
|
if (iVar3 == 0) {
|
|
|
|
FUN_004011b0();
|
|
|
|
return 0xb;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
goto LAB_0041e096;
|
|
|
|
}
|
|
|
|
if (uVar2 == 0xb071420) {
|
|
|
|
FUN_00401340(".actionmap");
|
|
|
|
iVar3 = _stricmp(local_e4,local_4);
|
|
|
|
FUN_004011b0();
|
|
|
|
if (iVar3 == 0) {
|
|
|
|
FUN_004011b0();
|
|
|
|
return 0x27;
|
|
|
|
}
|
|
|
|
goto LAB_0041e096;
|
|
|
|
}
|
|
|
|
if (uVar2 != 0xba55039) goto LAB_0041e096;
|
|
|
|
FUN_00401340(".stt_ansi");
|
|
|
|
iVar3 = _stricmp(local_e4,local_c);
|
|
|
|
}
|
|
|
|
LAB_0041e017:
|
|
|
|
FUN_004011b0();
|
|
|
|
if (iVar3 == 0) {
|
|
|
|
FUN_004011b0();
|
|
|
|
return 0x25;
|
|
|
|
}
|
|
|
|
goto LAB_0041e096;
|
|
|
|
}
|
|
|
|
if (uVar2 == 0x34b040) {
|
|
|
|
FUN_00401340(".dimp");
|
|
|
|
iVar3 = _stricmp(local_e4,local_6c);
|
|
|
|
LVar4 = InterlockedDecrement((LONG *)(local_6c + -0x10));
|
|
|
|
if ((LVar4 == 0) && (local_6c + -0x14 != (char *)0x0)) {
|
|
|
|
(*(code *)**(undefined4 **)(local_6c + -0x14))(1);
|
|
|
|
}
|
|
|
|
if (iVar3 == 0) {
|
|
|
|
FUN_004011b0();
|
|
|
|
return 0x28;
|
|
|
|
}
|
|
|
|
goto LAB_0041e096;
|
|
|
|
}
|
|
|
|
if (uVar2 < 0x35aaa) {
|
|
|
|
if (uVar2 == 0x35aa9) {
|
|
|
|
FUN_00401340(&DAT_00796760);
|
|
|
|
iVar3 = _stricmp(local_e4,local_a4);
|
|
|
|
FUN_004011b0();
|
|
|
|
if (iVar3 == 0) {
|
|
|
|
FUN_004011b0();
|
|
|
|
return 0x30;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (uVar2 < 0x3599f) {
|
|
|
|
if (uVar2 == 0x3599e) {
|
|
|
|
FUN_00401340(&DAT_00796690);
|
|
|
|
iVar3 = _stricmp(local_e4,local_bc);
|
|
|
|
FUN_004011b0();
|
|
|
|
if (iVar3 == 0) {
|
|
|
|
FUN_004011b0();
|
|
|
|
return 0x1b;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (uVar2 == 0x356c4) {
|
|
|
|
FUN_00401340(&DAT_0079673c);
|
|
|
|
iVar3 = _stricmp(local_e4,local_c4);
|
|
|
|
FUN_004011b0();
|
|
|
|
if (iVar3 == 0) {
|
|
|
|
FUN_004011b0();
|
|
|
|
return 0x2c;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (uVar2 == 0x357a4) {
|
|
|
|
FUN_00401340(&DAT_00796678);
|
|
|
|
iVar3 = _stricmp(local_e4,local_cc);
|
|
|
|
FUN_004011b0();
|
|
|
|
if (iVar3 == 0) {
|
|
|
|
FUN_004011b0();
|
|
|
|
return 0x18;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (uVar2 == 0x358de) {
|
|
|
|
FUN_00401340(&DAT_00796698);
|
|
|
|
iVar3 = _stricmp(local_e4,local_d4);
|
|
|
|
FUN_004011b0();
|
|
|
|
if (iVar3 == 0) {
|
|
|
|
FUN_004011b0();
|
|
|
|
return 0x1c;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (uVar2 == 0x359c4) {
|
|
|
|
FUN_00401340(&DAT_007965bc);
|
|
|
|
iVar3 = _stricmp(local_e4,local_ac);
|
|
|
|
FUN_004011b0();
|
|
|
|
if (iVar3 == 0) {
|
|
|
|
FUN_004011b0();
|
|
|
|
return 7;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (uVar2 == 0x35aa2) {
|
|
|
|
FUN_00401340(&DAT_007966d0);
|
|
|
|
iVar3 = _stricmp(local_e4,local_b4);
|
|
|
|
FUN_004011b0();
|
|
|
|
if (iVar3 == 0) {
|
|
|
|
FUN_004011b0();
|
|
|
|
return 0x22;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
goto LAB_0041e096;
|
|
|
|
}
|
|
|
|
if (0x35bfc < uVar2) {
|
|
|
|
if (uVar2 == 0x35d86) {
|
|
|
|
FUN_00401340(&DAT_00796634);
|
|
|
|
iVar3 = _stricmp(local_e4,local_74);
|
|
|
|
FUN_004011b0();
|
|
|
|
if (iVar3 == 0) {
|
|
|
|
FUN_004011b0();
|
|
|
|
return 0xf;
|
|
|
|
}
|
|
|
|
goto LAB_0041e096;
|
|
|
|
}
|
|
|
|
if (uVar2 != 0x34a963) goto LAB_0041e096;
|
|
|
|
FUN_00401340(".dbpc");
|
|
|
|
iVar3 = _stricmp(local_e4,local_7c);
|
|
|
|
goto LAB_0041dc86;
|
|
|
|
}
|
|
|
|
if (uVar2 == 0x35bfc) {
|
|
|
|
FUN_00401340(&DAT_007966d8);
|
|
|
|
iVar3 = _stricmp(local_e4,local_84);
|
|
|
|
FUN_004011b0();
|
|
|
|
if (iVar3 == 0) {
|
|
|
|
FUN_004011b0();
|
|
|
|
return 0x23;
|
|
|
|
}
|
|
|
|
goto LAB_0041e096;
|
|
|
|
}
|
|
|
|
if (uVar2 == 0x35ab2) {
|
|
|
|
FUN_00401340(&DAT_00796724);
|
|
|
|
iVar3 = _stricmp(local_e4,local_8c);
|
|
|
|
FUN_004011b0();
|
|
|
|
if (iVar3 == 0) {
|
|
|
|
FUN_004011b0();
|
|
|
|
return 0x29;
|
|
|
|
}
|
|
|
|
goto LAB_0041e096;
|
|
|
|
}
|
|
|
|
if (uVar2 == 0x35ab4) {
|
|
|
|
FUN_00401340(&DAT_007966e8);
|
|
|
|
iVar3 = _stricmp(local_e4,local_94);
|
|
|
|
goto LAB_0041e017;
|
|
|
|
}
|
|
|
|
if (uVar2 != 0x35ad1) goto LAB_0041e096;
|
|
|
|
FUN_00401340(&DAT_007965f8);
|
|
|
|
iVar3 = _stricmp(local_e4,local_9c);
|
|
|
|
}
|
|
|
|
FUN_004011b0();
|
|
|
|
if (iVar3 == 0) {
|
|
|
|
FUN_004011b0();
|
|
|
|
return 0xc;
|
|
|
|
}
|
|
|
|
LAB_0041e096:
|
|
|
|
LVar4 = InterlockedDecrement((LONG *)(local_e4 + -0x10));
|
|
|
|
if ((LVar4 == 0) && (local_e4 + -0x14 != (char *)0x0)) {
|
|
|
|
(*(code *)**(undefined4 **)(local_e4 + -0x14))(1);
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0041e0c0 at 0x0041E0C0 (size: 4464) ---
|
|
|
|
|
|
undefined1 FUN_0041e0c0(undefined4 *param_1,undefined4 *param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
char *_String;
|
|
|
|
undefined *puVar1;
|
|
|
|
int iVar2;
|
|
|
|
LONG LVar3;
|
|
|
|
undefined1 uVar4;
|
|
|
|
char *local_c8;
|
|
|
|
char *local_c4;
|
|
|
|
char *local_c0;
|
|
|
|
char *local_bc;
|
|
|
|
char *local_b8;
|
|
|
|
char *local_b4;
|
|
|
|
char *local_b0;
|
|
|
|
char *local_ac;
|
|
|
|
char *local_a8;
|
|
|
|
char *local_a4;
|
|
|
|
char *local_a0;
|
|
|
|
char *local_9c;
|
|
|
|
char *local_98;
|
|
|
|
char *local_94;
|
|
|
|
char *local_90;
|
|
|
|
char *local_8c;
|
|
|
|
char *local_88;
|
|
|
|
char *local_84;
|
|
|
|
char *local_80;
|
|
|
|
char *local_7c;
|
|
|
|
char *local_78;
|
|
|
|
char *local_74;
|
|
|
|
char *local_70;
|
|
|
|
char *local_6c;
|
|
|
|
char *local_68;
|
|
|
|
char *local_64;
|
|
|
|
char *local_60;
|
|
|
|
char *local_5c;
|
|
|
|
char *local_58;
|
|
|
|
char *local_54;
|
|
|
|
char *local_50;
|
|
|
|
char *local_4c;
|
|
|
|
char *local_48;
|
|
|
|
char *local_44;
|
|
|
|
char *local_40;
|
|
|
|
char *local_3c;
|
|
|
|
char *local_38;
|
|
|
|
char *local_34;
|
|
|
|
char *local_30;
|
|
|
|
char *local_2c;
|
|
|
|
char *local_28;
|
|
|
|
char *local_24;
|
|
|
|
char *local_20;
|
|
|
|
char *local_1c;
|
|
|
|
char *local_18;
|
|
|
|
char *local_14;
|
|
|
|
char *local_10;
|
|
|
|
char *local_c;
|
|
|
|
char *local_8;
|
|
|
|
char *local_4;
|
|
|
|
|
|
|
|
_String = (char *)*param_1;
|
|
|
|
uVar4 = 0;
|
|
|
|
InterlockedIncrement((LONG *)(_String + -0x10));
|
|
|
|
FUN_004080c0();
|
|
|
|
_strlwr(_String);
|
|
|
|
puVar1 = *(undefined **)(_String + -8);
|
|
|
|
if (puVar1 == (undefined *)0xffffffff) {
|
|
|
|
puVar1 = (undefined *)FUN_004016b0(_String);
|
|
|
|
*(undefined **)(_String + -8) = puVar1;
|
|
|
|
}
|
|
|
|
if (puVar1 < (undefined *)0x6779a50) {
|
|
|
|
if (puVar1 == (undefined *)0x6779a4f) {
|
|
|
|
FUN_00401340("DEGRADEINFO");
|
|
|
|
iVar2 = _stricmp(_String,local_c4);
|
|
|
|
LVar3 = InterlockedDecrement((LONG *)(local_c4 + -0x10));
|
|
|
|
if ((LVar3 == 0) && (local_c4 + -0x14 != (char *)0x0)) {
|
|
|
|
(*(code *)**(undefined4 **)(local_c4 + -0x14))(1);
|
|
|
|
}
|
|
|
|
if (iVar2 != 0) goto LAB_0041f205;
|
|
|
|
*param_2 = 0x1a;
|
|
|
|
}
|
|
|
|
else if (puVar1 < (undefined *)0x29374e5) {
|
|
|
|
if (puVar1 == (undefined *)0x29374e4) {
|
|
|
|
FUN_00401340("PHYSICS_SCRIPT");
|
|
|
|
iVar2 = _stricmp(_String,local_28);
|
|
|
|
FUN_004011b0();
|
|
|
|
if (iVar2 != 0) goto LAB_0041f205;
|
|
|
|
*param_2 = 0x2b;
|
|
|
|
}
|
|
|
|
else if (&DAT_006209de < puVar1) {
|
|
|
|
if (puVar1 < (undefined *)0xe658ad) {
|
|
|
|
if (puVar1 == (undefined *)0xe658ac) {
|
|
|
|
FUN_00401340("RENDERMATERIAL");
|
|
|
|
iVar2 = _stricmp(_String,local_a0);
|
|
|
|
FUN_004011b0();
|
|
|
|
if (iVar2 != 0) goto LAB_0041f205;
|
|
|
|
*param_2 = 0x1f;
|
|
|
|
}
|
|
|
|
else if (puVar1 == (undefined *)0xc26824) {
|
|
|
|
FUN_00401340("PAL_SET");
|
|
|
|
iVar2 = _stricmp(_String,local_18);
|
|
|
|
FUN_004011b0();
|
|
|
|
if (iVar2 != 0) goto LAB_0041f205;
|
|
|
|
*param_2 = 0x18;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
if (puVar1 != (undefined *)0xc2ca45) goto LAB_0041f205;
|
|
|
|
FUN_00401340("PALETTE");
|
|
|
|
iVar2 = _stricmp(_String,local_a8);
|
|
|
|
FUN_004011b0();
|
|
|
|
if (iVar2 != 0) goto LAB_0041f205;
|
|
|
|
*param_2 = 10;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (puVar1 == (undefined *)0x1ef0bc0) {
|
|
|
|
FUN_00401340("SETUP");
|
|
|
|
iVar2 = _stricmp(_String,local_98);
|
|
|
|
FUN_004011b0();
|
|
|
|
if (iVar2 != 0) goto LAB_0041f205;
|
|
|
|
*param_2 = 7;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
if (puVar1 != (undefined *)0x1ef5c45) goto LAB_0041f205;
|
|
|
|
FUN_00401340("SCENE");
|
|
|
|
iVar2 = _stricmp(_String,local_50);
|
|
|
|
FUN_004011b0();
|
|
|
|
if (iVar2 != 0) goto LAB_0041f205;
|
|
|
|
*param_2 = 0x1b;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (puVar1 == &DAT_006209de) {
|
|
|
|
FUN_00401340("INSTANTIATION");
|
|
|
|
iVar2 = _stricmp(_String,local_58);
|
|
|
|
FUN_004011b0();
|
|
|
|
if (iVar2 != 0) goto LAB_0041f205;
|
|
|
|
*param_2 = 5;
|
|
|
|
}
|
|
|
|
else if (puVar1 < (undefined *)0x1dba55) {
|
|
|
|
if (puVar1 == (undefined *)0x1dba54) {
|
|
|
|
FUN_00401340(&DAT_007969dc);
|
|
|
|
iVar2 = _stricmp(_String,local_b8);
|
|
|
|
FUN_004011b0();
|
|
|
|
if (iVar2 != 0) goto LAB_0041f205;
|
|
|
|
*param_2 = 0x2e;
|
|
|
|
}
|
|
|
|
else if (puVar1 == (undefined *)0x1e449) {
|
|
|
|
FUN_00401340(&DAT_007969e4);
|
|
|
|
iVar2 = _stricmp(_String,local_60);
|
|
|
|
FUN_004011b0();
|
|
|
|
if (iVar2 != 0) goto LAB_0041f205;
|
|
|
|
*param_2 = 2;
|
|
|
|
}
|
|
|
|
else if (puVar1 == (undefined *)0x1e44f) {
|
|
|
|
FUN_00401340(&DAT_007969e8);
|
|
|
|
iVar2 = _stricmp(_String,local_c0);
|
|
|
|
FUN_004011b0();
|
|
|
|
if (iVar2 != 0) goto LAB_0041f205;
|
|
|
|
*param_2 = 4;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
if (puVar1 != (undefined *)0x1d28fd) goto LAB_0041f205;
|
|
|
|
FUN_00401340(&DAT_007969ec);
|
|
|
|
iVar2 = _stricmp(_String,local_68);
|
|
|
|
FUN_004011b0();
|
|
|
|
if (iVar2 != 0) goto LAB_0041f205;
|
|
|
|
*param_2 = 8;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (puVar1 == (undefined *)0x1df82c) {
|
|
|
|
FUN_00401340(&DAT_007969cc);
|
|
|
|
iVar2 = _stricmp(_String,local_b0);
|
|
|
|
FUN_004011b0();
|
|
|
|
if (iVar2 != 0) goto LAB_0041f205;
|
|
|
|
*param_2 = 3;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
if (puVar1 != (undefined *)0x1eb4c5) goto LAB_0041f205;
|
|
|
|
FUN_00401340(&DAT_007969d4);
|
|
|
|
iVar2 = _stricmp(_String,local_30);
|
|
|
|
FUN_004011b0();
|
|
|
|
if (iVar2 != 0) goto LAB_0041f205;
|
|
|
|
*param_2 = 0xf;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (puVar1 < (undefined *)0x4448256) {
|
|
|
|
if (puVar1 == (undefined *)0x4448255) {
|
|
|
|
FUN_00401340("NAME_FILTER_TABLE");
|
|
|
|
iVar2 = _stricmp(_String,local_78);
|
|
|
|
FUN_004011b0();
|
|
|
|
if (iVar2 != 0) goto LAB_0041f205;
|
|
|
|
*param_2 = 0x16;
|
|
|
|
}
|
|
|
|
else if (puVar1 < (undefined *)0x3cb6a8a) {
|
|
|
|
if (puVar1 == (undefined *)0x3cb6a89) {
|
|
|
|
FUN_00401340("MASTER_PROPERTY");
|
|
|
|
iVar2 = _stricmp(_String,local_8);
|
|
|
|
FUN_004011b0();
|
|
|
|
if (iVar2 != 0) goto LAB_0041f205;
|
|
|
|
*param_2 = 0x2d;
|
|
|
|
}
|
|
|
|
else if (puVar1 == (undefined *)0x2e89502) {
|
|
|
|
FUN_00401340("PARTICLE_EMITTER");
|
|
|
|
iVar2 = _stricmp(_String,local_88);
|
|
|
|
FUN_004011b0();
|
|
|
|
if (iVar2 != 0) goto LAB_0041f205;
|
|
|
|
*param_2 = 0x2a;
|
|
|
|
}
|
|
|
|
else if (puVar1 == (undefined *)0x3ad38f5) {
|
|
|
|
FUN_00401340("STRING_STATE");
|
|
|
|
iVar2 = _stricmp(_String,local_48);
|
|
|
|
FUN_004011b0();
|
|
|
|
if (iVar2 != 0) goto LAB_0041f205;
|
|
|
|
*param_2 = 0x30;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
if (puVar1 != (undefined *)0x3ade975) goto LAB_0041f205;
|
|
|
|
FUN_00401340("STRING_TABLE");
|
|
|
|
iVar2 = _stricmp(_String,local_90);
|
|
|
|
FUN_004011b0();
|
|
|
|
if (iVar2 != 0) goto LAB_0041f205;
|
|
|
|
*param_2 = 0x25;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (puVar1 == (undefined *)0x3cdb295) {
|
|
|
|
FUN_00401340("CHAT_POSE_TABLE");
|
|
|
|
iVar2 = _stricmp(_String,local_40);
|
|
|
|
FUN_004011b0();
|
|
|
|
if (iVar2 != 0) goto LAB_0041f205;
|
|
|
|
*param_2 = 0x11;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
if (puVar1 != (undefined *)0x428f205) goto LAB_0041f205;
|
|
|
|
FUN_00401340("FILE2ID_TABLE");
|
|
|
|
iVar2 = _stricmp(_String,local_80);
|
|
|
|
FUN_004011b0();
|
|
|
|
if (iVar2 != 0) goto LAB_0041f205;
|
|
|
|
*param_2 = 0x15;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (puVar1 < (undefined *)0x5e6eaf3) {
|
|
|
|
if (puVar1 == (undefined *)0x5e6eaf2) {
|
|
|
|
FUN_00401340("ENUM_MAPPER");
|
|
|
|
iVar2 = _stricmp(_String,local_38);
|
|
|
|
FUN_004011b0();
|
|
|
|
if (iVar2 != 0) goto LAB_0041f205;
|
|
|
|
*param_2 = 0x24;
|
|
|
|
}
|
|
|
|
else if (puVar1 == (undefined *)0x44b11f5) {
|
|
|
|
FUN_00401340("RENDERTEXTURE");
|
|
|
|
iVar2 = _stricmp(_String,local_70);
|
|
|
|
FUN_004011b0();
|
|
|
|
if (iVar2 != 0) goto LAB_0041f205;
|
|
|
|
*param_2 = 0x1e;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
if (puVar1 != (undefined *)0x44c6ae5) goto LAB_0041f205;
|
|
|
|
FUN_00401340("RENDERSURFACE");
|
|
|
|
iVar2 = _stricmp(_String,local_20);
|
|
|
|
FUN_004011b0();
|
|
|
|
if (iVar2 != 0) goto LAB_0041f205;
|
|
|
|
*param_2 = 0xc;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (puVar1 == (undefined *)0x625b562) {
|
|
|
|
FUN_00401340("DID_MAPPER");
|
|
|
|
iVar2 = _stricmp(_String,local_10);
|
|
|
|
FUN_004011b0();
|
|
|
|
if (iVar2 != 0) goto LAB_0041f205;
|
|
|
|
*param_2 = 0x26;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
if (puVar1 != (undefined *)0x6292bf4) goto LAB_0041f205;
|
|
|
|
FUN_00401340("UI_LAYOUT");
|
|
|
|
iVar2 = _stricmp(_String,local_c8);
|
|
|
|
FUN_004011b0();
|
|
|
|
if (iVar2 != 0) goto LAB_0041f205;
|
|
|
|
*param_2 = 0x23;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (puVar1 < (undefined *)0xcf90dc6) {
|
|
|
|
if (puVar1 == (undefined *)0xcf90dc5) {
|
|
|
|
FUN_00401340("PHYSICS_SCRIPT_TABLE");
|
|
|
|
iVar2 = _stricmp(_String,local_5c);
|
|
|
|
LVar3 = InterlockedDecrement((LONG *)(local_5c + -0x10));
|
|
|
|
if ((LVar3 == 0) && (local_5c + -0x14 != (char *)0x0)) {
|
|
|
|
(*(code *)**(undefined4 **)(local_5c + -0x14))(1);
|
|
|
|
}
|
|
|
|
if (iVar2 != 0) goto LAB_0041f205;
|
|
|
|
*param_2 = 0x2c;
|
|
|
|
}
|
|
|
|
else if (puVar1 < (undefined *)0xa4779dc) {
|
|
|
|
if (puVar1 == (undefined *)0xa4779db) {
|
|
|
|
FUN_00401340("LAND_BLOCK");
|
|
|
|
iVar2 = _stricmp(_String,local_8c);
|
|
|
|
FUN_004011b0();
|
|
|
|
if (iVar2 != 0) goto LAB_0041f205;
|
|
|
|
*param_2 = 1;
|
|
|
|
}
|
|
|
|
else if (puVar1 < (undefined *)0x93b52f6) {
|
|
|
|
if (puVar1 == (undefined *)0x93b52f5) {
|
|
|
|
FUN_00401340("MATERIALINSTANCE");
|
|
|
|
iVar2 = _stricmp(_String,local_a4);
|
|
|
|
FUN_004011b0();
|
|
|
|
if (iVar2 != 0) goto LAB_0041f205;
|
|
|
|
*param_2 = 0x21;
|
|
|
|
}
|
|
|
|
else if (puVar1 == (undefined *)0x686c245) {
|
|
|
|
FUN_00401340("TABOO_TABLE");
|
|
|
|
iVar2 = _stricmp(_String,local_ac);
|
|
|
|
FUN_004011b0();
|
|
|
|
if (iVar2 != 0) goto LAB_0041f205;
|
|
|
|
*param_2 = 0x14;
|
|
|
|
}
|
|
|
|
else if (puVar1 == (undefined *)0x730e209) {
|
|
|
|
FUN_00401340("OBJECT_HIERARCHY");
|
|
|
|
iVar2 = _stricmp(_String,local_b4);
|
|
|
|
FUN_004011b0();
|
|
|
|
if (iVar2 != 0) goto LAB_0041f205;
|
|
|
|
*param_2 = 0x12;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
if (puVar1 != (undefined *)0x8d7da23) goto LAB_0041f205;
|
|
|
|
FUN_00401340("MONITOREDPROPERTIES");
|
|
|
|
iVar2 = _stricmp(_String,local_bc);
|
|
|
|
FUN_004011b0();
|
|
|
|
if (iVar2 != 0) goto LAB_0041f205;
|
|
|
|
*param_2 = 0x17;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (puVar1 == (undefined *)0x93ef862) {
|
|
|
|
FUN_00401340("MATERIALMODIFIER");
|
|
|
|
iVar2 = _stricmp(_String,local_94);
|
|
|
|
FUN_004011b0();
|
|
|
|
if (iVar2 != 0) goto LAB_0041f205;
|
|
|
|
*param_2 = 0x20;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
if (puVar1 != (undefined *)0xa43db85) goto LAB_0041f205;
|
|
|
|
FUN_00401340("SURFACETEXTURE");
|
|
|
|
iVar2 = _stricmp(_String,local_9c);
|
|
|
|
FUN_004011b0();
|
|
|
|
if (iVar2 != 0) goto LAB_0041f205;
|
|
|
|
*param_2 = 0xb;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (puVar1 < (undefined *)0xb05a2e1) {
|
|
|
|
if (puVar1 == (undefined *)0xb05a2e0) {
|
|
|
|
FUN_00401340("ACTIONMAP");
|
|
|
|
iVar2 = _stricmp(_String,local_74);
|
|
|
|
FUN_004011b0();
|
|
|
|
if (iVar2 != 0) goto LAB_0041f205;
|
|
|
|
*param_2 = 0x27;
|
|
|
|
}
|
|
|
|
else if (puVar1 == (undefined *)0xa60e32c) {
|
|
|
|
FUN_00401340("FONT_LOCAL");
|
|
|
|
iVar2 = _stricmp(_String,local_7c);
|
|
|
|
FUN_004011b0();
|
|
|
|
if (iVar2 != 0) goto LAB_0041f205;
|
|
|
|
*param_2 = 0x2f;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
if (puVar1 != (undefined *)0xa9ba754) goto LAB_0041f205;
|
|
|
|
FUN_00401340("ENVIRONMENT");
|
|
|
|
iVar2 = _stricmp(_String,local_84);
|
|
|
|
FUN_004011b0();
|
|
|
|
if (iVar2 != 0) goto LAB_0041f205;
|
|
|
|
*param_2 = 0x10;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (puVar1 == (undefined *)0xb0cd6b3) {
|
|
|
|
FUN_00401340("DBPROPERTIES");
|
|
|
|
iVar2 = _stricmp(_String,local_64);
|
|
|
|
FUN_004011b0();
|
|
|
|
if (iVar2 != 0) goto LAB_0041f205;
|
|
|
|
*param_2 = 0x31;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
if (puVar1 != (undefined *)0xc08c675) goto LAB_0041f205;
|
|
|
|
FUN_00401340("SURFACE");
|
|
|
|
iVar2 = _stricmp(_String,local_6c);
|
|
|
|
FUN_004011b0();
|
|
|
|
if (iVar2 != 0) goto LAB_0041f205;
|
|
|
|
*param_2 = 0xd;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (puVar1 < (undefined *)0xe710391) {
|
|
|
|
if (puVar1 == (undefined *)0xe710390) {
|
|
|
|
FUN_00401340("KEYMAP");
|
|
|
|
iVar2 = _stricmp(_String,local_2c);
|
|
|
|
FUN_004011b0();
|
|
|
|
if (iVar2 != 0) goto LAB_0041f205;
|
|
|
|
*param_2 = 0x1d;
|
|
|
|
}
|
|
|
|
else if (puVar1 < (undefined *)0xdb1f59b) {
|
|
|
|
if (puVar1 == (undefined *)0xdb1f59a) {
|
|
|
|
FUN_00401340("GFXOBJ");
|
|
|
|
iVar2 = _stricmp(_String,local_44);
|
|
|
|
FUN_004011b0();
|
|
|
|
if (iVar2 != 0) goto LAB_0041f205;
|
|
|
|
*param_2 = 6;
|
|
|
|
}
|
|
|
|
else if (puVar1 == (undefined *)0xd4683bb) {
|
|
|
|
FUN_00401340("ANIMATION_HOOK");
|
|
|
|
iVar2 = _stricmp(_String,local_4c);
|
|
|
|
FUN_004011b0();
|
|
|
|
if (iVar2 != 0) goto LAB_0041f205;
|
|
|
|
*param_2 = 9;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
if (puVar1 != (undefined *)0xdacb838) goto LAB_0041f205;
|
|
|
|
FUN_00401340("RENDER_MESH");
|
|
|
|
iVar2 = _stricmp(_String,local_54);
|
|
|
|
FUN_004011b0();
|
|
|
|
if (iVar2 != 0) goto LAB_0041f205;
|
|
|
|
*param_2 = 0x43;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (puVar1 == (undefined *)0xe1c0432) {
|
|
|
|
FUN_00401340("DUAL_DID_MAPPER");
|
|
|
|
iVar2 = _stricmp(_String,local_34);
|
|
|
|
FUN_004011b0();
|
|
|
|
if (iVar2 != 0) goto LAB_0041f205;
|
|
|
|
*param_2 = 0x28;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
if (puVar1 != (undefined *)0xe267935) goto LAB_0041f205;
|
|
|
|
FUN_00401340("MTABLE");
|
|
|
|
iVar2 = _stricmp(_String,local_3c);
|
|
|
|
FUN_004011b0();
|
|
|
|
if (iVar2 != 0) goto LAB_0041f205;
|
|
|
|
*param_2 = 0xe;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (puVar1 < (undefined *)0xec79058) {
|
|
|
|
if (puVar1 == (undefined *)0xec79057) {
|
|
|
|
FUN_00401340("STRING");
|
|
|
|
iVar2 = _stricmp(_String,local_14);
|
|
|
|
FUN_004011b0();
|
|
|
|
if (iVar2 != 0) goto LAB_0041f205;
|
|
|
|
*param_2 = 0x29;
|
|
|
|
}
|
|
|
|
else if (puVar1 == (undefined *)0xebaa971) {
|
|
|
|
FUN_00401340("BADDATA");
|
|
|
|
iVar2 = _stricmp(_String,local_1c);
|
|
|
|
FUN_004011b0();
|
|
|
|
if (iVar2 != 0) goto LAB_0041f205;
|
|
|
|
*param_2 = 0x13;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
if (puVar1 != (undefined *)0xec67935) goto LAB_0041f205;
|
|
|
|
FUN_00401340("STABLE");
|
|
|
|
iVar2 = _stricmp(_String,local_24);
|
|
|
|
FUN_004011b0();
|
|
|
|
if (iVar2 != 0) goto LAB_0041f205;
|
|
|
|
*param_2 = 0x22;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (puVar1 == (undefined *)0xee7e04e) {
|
|
|
|
FUN_00401340("REGION");
|
|
|
|
iVar2 = _stricmp(_String,local_4);
|
|
|
|
FUN_004011b0();
|
|
|
|
if (iVar2 != 0) goto LAB_0041f205;
|
|
|
|
*param_2 = 0x1c;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
if (puVar1 != (undefined *)0xf6af247) goto LAB_0041f205;
|
|
|
|
FUN_00401340("CLOTHING");
|
|
|
|
iVar2 = _stricmp(_String,local_c);
|
|
|
|
FUN_004011b0();
|
|
|
|
if (iVar2 != 0) goto LAB_0041f205;
|
|
|
|
*param_2 = 0x19;
|
|
|
|
}
|
|
|
|
uVar4 = 1;
|
|
|
|
LAB_0041f205:
|
|
|
|
LVar3 = InterlockedDecrement((LONG *)(_String + -0x10));
|
|
|
|
if ((LVar3 == 0) && (_String + -0x14 != (char *)0x0)) {
|
|
|
|
(*(code *)**(undefined4 **)(_String + -0x14))(1);
|
|
|
|
}
|
|
|
|
return uVar4;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0041f230 at 0x0041F230 (size: 319) ---
|
|
|
|
|
|
int * __thiscall FUN_0041f230(int *param_1,undefined4 *param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
LONG *lpAddend;
|
|
|
|
int *piVar1;
|
|
|
|
int iVar2;
|
|
|
|
undefined *puVar3;
|
|
|
|
undefined *puVar4;
|
|
|
|
char cVar5;
|
|
|
|
LONG LVar6;
|
|
|
|
uint uVar7;
|
|
|
|
int *piVar8;
|
|
|
|
int *piVar9;
|
|
|
|
|
|
|
|
if ((param_1[1] & 0x7fffffffU) < (param_2[1] & 0x7fffffff)) {
|
|
|
|
param_1[2] = 0;
|
|
|
|
cVar5 = FUN_004082c0(param_2[1] & 0x7fffffff);
|
|
|
|
if (cVar5 == '\0') {
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
piVar8 = (int *)*param_1;
|
|
|
|
piVar9 = (int *)*param_2;
|
|
|
|
piVar1 = piVar9 + param_2[2];
|
|
|
|
for (; piVar9 < piVar1; piVar9 = piVar9 + 1) {
|
|
|
|
iVar2 = *piVar8;
|
|
|
|
if (iVar2 != *piVar9) {
|
|
|
|
LVar6 = InterlockedDecrement((LONG *)(iVar2 + -0x10));
|
|
|
|
if ((LVar6 == 0) && ((undefined4 *)(iVar2 + -0x14) != (undefined4 *)0x0)) {
|
|
|
|
(*(code *)**(undefined4 **)(iVar2 + -0x14))(1);
|
|
|
|
}
|
|
|
|
iVar2 = *piVar9;
|
|
|
|
*piVar8 = iVar2;
|
|
|
|
InterlockedIncrement((LONG *)(iVar2 + -0x10));
|
|
|
|
}
|
|
|
|
piVar8 = piVar8 + 1;
|
|
|
|
}
|
|
|
|
uVar7 = param_2[2];
|
|
|
|
if (uVar7 < (uint)param_1[2]) {
|
|
|
|
do {
|
|
|
|
puVar4 = PTR_DAT_00818344;
|
|
|
|
lpAddend = (LONG *)(PTR_DAT_00818344 + -0x10);
|
|
|
|
InterlockedIncrement(lpAddend);
|
|
|
|
piVar1 = (int *)(*param_1 + uVar7 * 4);
|
|
|
|
puVar3 = (undefined *)*piVar1;
|
|
|
|
if (puVar3 != puVar4) {
|
|
|
|
LVar6 = InterlockedDecrement((LONG *)(puVar3 + -0x10));
|
|
|
|
if ((LVar6 == 0) && ((undefined4 *)(puVar3 + -0x14) != (undefined4 *)0x0)) {
|
|
|
|
(*(code *)**(undefined4 **)(puVar3 + -0x14))(1);
|
|
|
|
}
|
|
|
|
*piVar1 = (int)puVar4;
|
|
|
|
InterlockedIncrement(lpAddend);
|
|
|
|
}
|
|
|
|
LVar6 = InterlockedDecrement((LONG *)(puVar4 + -0x10));
|
|
|
|
if ((LVar6 == 0) && ((undefined4 *)(puVar4 + -0x14) != (undefined4 *)0x0)) {
|
|
|
|
(*(code *)**(undefined4 **)(puVar4 + -0x14))(1);
|
|
|
|
}
|
|
|
|
uVar7 = uVar7 + 1;
|
|
|
|
} while (uVar7 < (uint)param_1[2]);
|
|
|
|
}
|
|
|
|
param_1[2] = param_2[2];
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0041f370 at 0x0041F370 (size: 973) ---
|
|
|
|
|
|
undefined1 FUN_0041f370(undefined4 param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined1 uVar1;
|
|
|
|
|
|
|
|
uVar1 = 0;
|
|
|
|
switch(param_1) {
|
|
|
|
case 1:
|
|
|
|
FUN_00405000("LAND_BLOCK");
|
|
|
|
return 1;
|
|
|
|
case 2:
|
|
|
|
FUN_00405000(&DAT_007969e4);
|
|
|
|
return 1;
|
|
|
|
case 3:
|
|
|
|
FUN_00405000(&DAT_007969cc);
|
|
|
|
return 1;
|
|
|
|
case 4:
|
|
|
|
FUN_00405000(&DAT_007969e8);
|
|
|
|
return 1;
|
|
|
|
case 5:
|
|
|
|
FUN_00405000("INSTANTIATION");
|
|
|
|
return 1;
|
|
|
|
case 6:
|
|
|
|
FUN_00405000("GFXOBJ");
|
|
|
|
return 1;
|
|
|
|
case 7:
|
|
|
|
FUN_00405000("SETUP");
|
|
|
|
return 1;
|
|
|
|
case 8:
|
|
|
|
FUN_00405000(&DAT_007969ec);
|
|
|
|
return 1;
|
|
|
|
case 9:
|
|
|
|
FUN_00405000("ANIMATION_HOOK");
|
|
|
|
return 1;
|
|
|
|
case 10:
|
|
|
|
FUN_00405000("PALETTE");
|
|
|
|
return 1;
|
|
|
|
case 0xb:
|
|
|
|
FUN_00405000("SURFACETEXTURE");
|
|
|
|
return 1;
|
|
|
|
case 0xc:
|
|
|
|
FUN_00405000("RENDERSURFACE");
|
|
|
|
return 1;
|
|
|
|
case 0xd:
|
|
|
|
FUN_00405000("SURFACE");
|
|
|
|
return 1;
|
|
|
|
case 0xe:
|
|
|
|
FUN_00405000("MTABLE");
|
|
|
|
return 1;
|
|
|
|
case 0xf:
|
|
|
|
FUN_00405000(&DAT_007969d4);
|
|
|
|
return 1;
|
|
|
|
case 0x10:
|
|
|
|
FUN_00405000("ENVIRONMENT");
|
|
|
|
return 1;
|
|
|
|
case 0x11:
|
|
|
|
FUN_00405000("CHAT_POSE_TABLE");
|
|
|
|
return 1;
|
|
|
|
case 0x12:
|
|
|
|
FUN_00405000("OBJECT_HIERARCHY");
|
|
|
|
return 1;
|
|
|
|
case 0x13:
|
|
|
|
FUN_00405000("BADDATA");
|
|
|
|
return 1;
|
|
|
|
case 0x14:
|
|
|
|
FUN_00405000("TABOO_TABLE");
|
|
|
|
return 1;
|
|
|
|
case 0x15:
|
|
|
|
FUN_00405000("FILE2ID_TABLE");
|
|
|
|
return 1;
|
|
|
|
case 0x16:
|
|
|
|
FUN_00405000("NAME_FILTER_TABLE");
|
|
|
|
return 1;
|
|
|
|
case 0x17:
|
|
|
|
FUN_00405000("MONITOREDPROPERTIES");
|
|
|
|
return 1;
|
|
|
|
case 0x18:
|
|
|
|
FUN_00405000("PAL_SET");
|
|
|
|
return 1;
|
|
|
|
case 0x19:
|
|
|
|
FUN_00405000("CLOTHING");
|
|
|
|
return 1;
|
|
|
|
case 0x1a:
|
|
|
|
FUN_00405000("DEGRADEINFO");
|
|
|
|
return 1;
|
|
|
|
case 0x1b:
|
|
|
|
FUN_00405000("SCENE");
|
|
|
|
return 1;
|
|
|
|
case 0x1c:
|
|
|
|
FUN_00405000("REGION");
|
|
|
|
return 1;
|
|
|
|
case 0x1d:
|
|
|
|
FUN_00405000("KEYMAP");
|
|
|
|
return 1;
|
|
|
|
case 0x1e:
|
|
|
|
FUN_00405000("RENDERTEXTURE");
|
|
|
|
return 1;
|
|
|
|
case 0x1f:
|
|
|
|
FUN_00405000("RENDERMATERIAL");
|
|
|
|
return 1;
|
|
|
|
case 0x20:
|
|
|
|
FUN_00405000("MATERIALMODIFIER");
|
|
|
|
return 1;
|
|
|
|
case 0x21:
|
|
|
|
FUN_00405000("MATERIALINSTANCE");
|
|
|
|
return 1;
|
|
|
|
case 0x22:
|
|
|
|
FUN_00405000("STABLE");
|
|
|
|
return 1;
|
|
|
|
case 0x23:
|
|
|
|
FUN_00405000("UI_LAYOUT");
|
|
|
|
return 1;
|
|
|
|
case 0x24:
|
|
|
|
FUN_00405000("ENUM_MAPPER");
|
|
|
|
return 1;
|
|
|
|
case 0x25:
|
|
|
|
FUN_00405000("STRING_TABLE");
|
|
|
|
return 1;
|
|
|
|
case 0x26:
|
|
|
|
FUN_00405000("DID_MAPPER");
|
|
|
|
return 1;
|
|
|
|
case 0x27:
|
|
|
|
FUN_00405000("ACTIONMAP");
|
|
|
|
return 1;
|
|
|
|
case 0x28:
|
|
|
|
FUN_00405000("DUAL_DID_MAPPER");
|
|
|
|
return 1;
|
|
|
|
case 0x29:
|
|
|
|
FUN_00405000("STRING");
|
|
|
|
return 1;
|
|
|
|
case 0x2a:
|
|
|
|
FUN_00405000("PARTICLE_EMITTER");
|
|
|
|
return 1;
|
|
|
|
case 0x2b:
|
|
|
|
FUN_00405000("PHYSICS_SCRIPT");
|
|
|
|
return 1;
|
|
|
|
case 0x2c:
|
|
|
|
FUN_00405000("PHYSICS_SCRIPT_TABLE");
|
|
|
|
return 1;
|
|
|
|
case 0x2d:
|
|
|
|
FUN_00405000("MASTER_PROPERTY");
|
|
|
|
return 1;
|
|
|
|
case 0x2e:
|
|
|
|
FUN_00405000(&DAT_007969dc);
|
|
|
|
return 1;
|
|
|
|
case 0x2f:
|
|
|
|
FUN_00405000("FONT_LOCAL");
|
|
|
|
return 1;
|
|
|
|
case 0x30:
|
|
|
|
FUN_00405000("STRING_STATE");
|
|
|
|
return 1;
|
|
|
|
case 0x31:
|
|
|
|
FUN_00405000("DBPROPERTIES");
|
|
|
|
uVar1 = 1;
|
|
|
|
break;
|
|
|
|
case 0x43:
|
|
|
|
FUN_00405000("RENDER_MESH");
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
return uVar1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0041f850 at 0x0041F850 (size: 163) ---
|
|
|
|
|
|
undefined4 * __thiscall FUN_0041f850(undefined4 *param_1,undefined4 *param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
|
|
|
|
*param_1 = *param_2;
|
|
|
|
param_1[1] = param_2[1];
|
|
|
|
param_1[2] = 0;
|
|
|
|
param_1[3] = 0;
|
|
|
|
param_1[4] = 0;
|
|
|
|
FUN_0041f230(param_2 + 2);
|
|
|
|
param_1[5] = param_2[5];
|
|
|
|
param_1[6] = param_2[6];
|
|
|
|
*(undefined1 *)(param_1 + 7) = *(undefined1 *)(param_2 + 7);
|
|
|
|
*(undefined1 *)((int)param_1 + 0x1d) = *(undefined1 *)((int)param_2 + 0x1d);
|
|
|
|
*(undefined1 *)((int)param_1 + 0x1e) = *(undefined1 *)((int)param_2 + 0x1e);
|
|
|
|
*(undefined1 *)((int)param_1 + 0x1f) = *(undefined1 *)((int)param_2 + 0x1f);
|
|
|
|
iVar1 = param_2[8];
|
|
|
|
param_1[8] = iVar1;
|
|
|
|
InterlockedIncrement((LONG *)(iVar1 + -0x10));
|
|
|
|
*(undefined1 *)(param_1 + 9) = *(undefined1 *)(param_2 + 9);
|
|
|
|
*(undefined1 *)((int)param_1 + 0x25) = *(undefined1 *)((int)param_2 + 0x25);
|
|
|
|
*(undefined1 *)((int)param_1 + 0x26) = *(undefined1 *)((int)param_2 + 0x26);
|
|
|
|
*(undefined1 *)((int)param_1 + 0x27) = *(undefined1 *)((int)param_2 + 0x27);
|
|
|
|
*(undefined1 *)(param_1 + 10) = *(undefined1 *)(param_2 + 10);
|
|
|
|
*(undefined1 *)((int)param_1 + 0x29) = *(undefined1 *)((int)param_2 + 0x29);
|
|
|
|
*(undefined1 *)((int)param_1 + 0x2a) = *(undefined1 *)((int)param_2 + 0x2a);
|
|
|
|
param_1[0xb] = param_2[0xb];
|
|
|
|
param_1[0xc] = param_2[0xc];
|
|
|
|
param_1[0xd] = param_2[0xd];
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0041f900 at 0x0041F900 (size: 153) ---
|
|
|
|
|
|
undefined4 FUN_0041f900(undefined4 *param_1,undefined4 param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
char cVar1;
|
|
|
|
undefined4 *puVar2;
|
|
|
|
LONG LVar3;
|
|
|
|
undefined4 *puVar4;
|
|
|
|
|
|
|
|
puVar2 = (undefined4 *)FUN_005df0f5(0x40);
|
|
|
|
if (puVar2 == (undefined4 *)0x0) {
|
|
|
|
puVar2 = (undefined4 *)0x0;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
*puVar2 = *param_1;
|
|
|
|
puVar2[1] = 0;
|
|
|
|
FUN_0041f850(param_2);
|
|
|
|
}
|
|
|
|
cVar1 = FUN_0042bd40(puVar2);
|
|
|
|
if (cVar1 == '\0') {
|
|
|
|
if (puVar2 != (undefined4 *)0x0) {
|
|
|
|
puVar4 = (undefined4 *)(puVar2[10] + -0x14);
|
|
|
|
LVar3 = InterlockedDecrement((LONG *)(puVar2[10] + -0x10));
|
|
|
|
if ((LVar3 == 0) && (puVar4 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar4)(1);
|
|
|
|
}
|
|
|
|
if (((puVar2[5] & 0x80000000) == 0x80000000) && (puVar2[4] != 0)) {
|
|
|
|
FUN_00407920(3);
|
|
|
|
}
|
|
|
|
operator_delete(puVar2);
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0041f9a0 at 0x0041F9A0 (size: 9998) ---
|
|
|
|
|
|
/* WARNING: Type propagation algorithm not settling */
|
|
|
|
|
|
|
|
undefined4 FUN_0041f9a0(void)
|
|
|
|
|
|
|
|
{
|
|
|
|
LONG LVar1;
|
|
|
|
undefined4 *puVar2;
|
|
|
|
int local_3c [4];
|
|
|
|
uint uStack_2c;
|
|
|
|
undefined4 local_28;
|
|
|
|
undefined4 local_24;
|
|
|
|
undefined4 local_20;
|
|
|
|
undefined1 local_1c;
|
|
|
|
undefined1 local_1b;
|
|
|
|
undefined1 local_1a;
|
|
|
|
undefined1 local_19;
|
|
|
|
int local_18;
|
|
|
|
undefined1 local_14;
|
|
|
|
undefined1 local_13;
|
|
|
|
undefined1 local_12;
|
|
|
|
undefined1 local_11;
|
|
|
|
undefined1 local_10;
|
|
|
|
undefined1 local_f;
|
|
|
|
undefined1 local_e;
|
|
|
|
undefined1 local_c;
|
|
|
|
undefined1 local_b;
|
|
|
|
undefined4 local_8;
|
|
|
|
undefined4 local_4;
|
|
|
|
|
|
|
|
FUN_0041c380();
|
|
|
|
local_3c[1] = 0;
|
|
|
|
local_3c[2] = 0;
|
|
|
|
local_24 = 1;
|
|
|
|
local_20 = 2;
|
|
|
|
local_1c = 0;
|
|
|
|
local_1b = 0;
|
|
|
|
local_1a = 1;
|
|
|
|
local_19 = 0;
|
|
|
|
FUN_00405000(&DAT_007938af);
|
|
|
|
local_14 = 1;
|
|
|
|
local_13 = 1;
|
|
|
|
local_12 = 1;
|
|
|
|
local_11 = 0;
|
|
|
|
local_10 = 0;
|
|
|
|
local_f = 0;
|
|
|
|
local_c = 0;
|
|
|
|
local_b = 1;
|
|
|
|
local_8 = 0x15;
|
|
|
|
local_4 = 0x90;
|
|
|
|
local_e = 0;
|
|
|
|
FUN_0041f900(&DAT_007964d4,local_3c + 1);
|
|
|
|
local_28 = 0;
|
|
|
|
local_3c[1] = 0;
|
|
|
|
local_3c[2] = 0;
|
|
|
|
FUN_00401340(&DAT_0079659c);
|
|
|
|
FUN_0040c440(local_3c);
|
|
|
|
puVar2 = (undefined4 *)(local_3c[0] + -0x14);
|
|
|
|
LVar1 = InterlockedDecrement((LONG *)(local_3c[0] + -0x10));
|
|
|
|
if ((LVar1 == 0) && (puVar2 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar2)(1);
|
|
|
|
}
|
|
|
|
local_24 = 1;
|
|
|
|
local_20 = 2;
|
|
|
|
local_1c = 1;
|
|
|
|
local_1b = 0;
|
|
|
|
local_1a = 1;
|
|
|
|
local_19 = 0;
|
|
|
|
FUN_00405000(&DAT_00796b18);
|
|
|
|
local_14 = 1;
|
|
|
|
local_13 = 1;
|
|
|
|
local_12 = 1;
|
|
|
|
local_11 = 0;
|
|
|
|
local_10 = 0;
|
|
|
|
local_f = 0;
|
|
|
|
local_c = 0;
|
|
|
|
local_b = 1;
|
|
|
|
local_8 = 0x15;
|
|
|
|
local_4 = 0x90;
|
|
|
|
local_e = 0;
|
|
|
|
FUN_0041f900(&DAT_007964d8,local_3c + 1);
|
|
|
|
local_28 = 0;
|
|
|
|
local_3c[1] = 0;
|
|
|
|
local_3c[2] = 0;
|
|
|
|
local_24 = 1;
|
|
|
|
local_20 = 2;
|
|
|
|
local_1c = 0;
|
|
|
|
local_1b = 0;
|
|
|
|
local_1a = 1;
|
|
|
|
local_19 = 0;
|
|
|
|
FUN_00405000(&DAT_007938af);
|
|
|
|
local_14 = 1;
|
|
|
|
local_13 = 1;
|
|
|
|
local_12 = 1;
|
|
|
|
local_11 = 0;
|
|
|
|
local_10 = 0;
|
|
|
|
local_f = 0;
|
|
|
|
local_c = 0;
|
|
|
|
local_b = 1;
|
|
|
|
local_8 = 0x14;
|
|
|
|
local_4 = 0x90;
|
|
|
|
local_e = 0;
|
|
|
|
FUN_0041f900(&DAT_007964dc,local_3c + 1);
|
|
|
|
local_28 = 0;
|
|
|
|
local_3c[1] = 0;
|
|
|
|
local_3c[2] = 0;
|
|
|
|
FUN_00401340(&DAT_007965a4);
|
|
|
|
FUN_0040c440(local_3c);
|
|
|
|
puVar2 = (undefined4 *)(local_3c[0] + -0x14);
|
|
|
|
LVar1 = InterlockedDecrement((LONG *)(local_3c[0] + -0x10));
|
|
|
|
if ((LVar1 == 0) && (puVar2 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar2)(1);
|
|
|
|
}
|
|
|
|
local_24 = 1;
|
|
|
|
local_20 = 2;
|
|
|
|
local_1c = 1;
|
|
|
|
local_1b = 0;
|
|
|
|
local_1a = 0;
|
|
|
|
local_19 = 0;
|
|
|
|
FUN_00405000(&DAT_00796b14);
|
|
|
|
local_14 = 0;
|
|
|
|
local_13 = 0;
|
|
|
|
local_12 = 1;
|
|
|
|
local_11 = 0;
|
|
|
|
local_10 = 0;
|
|
|
|
local_f = 0;
|
|
|
|
local_c = 0;
|
|
|
|
local_b = 1;
|
|
|
|
local_8 = 3;
|
|
|
|
local_4 = 0xf;
|
|
|
|
local_e = 0;
|
|
|
|
FUN_0041f900(&DAT_007964e0,local_3c + 1);
|
|
|
|
local_28 = 0;
|
|
|
|
local_3c[1] = 0;
|
|
|
|
local_3c[2] = 0;
|
|
|
|
FUN_00401340(&DAT_007965ac);
|
|
|
|
FUN_0040c440(local_3c);
|
|
|
|
puVar2 = (undefined4 *)(local_3c[0] + -0x14);
|
|
|
|
LVar1 = InterlockedDecrement((LONG *)(local_3c[0] + -0x10));
|
|
|
|
if ((LVar1 == 0) && (puVar2 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar2)(1);
|
|
|
|
}
|
|
|
|
local_24 = 1;
|
|
|
|
local_20 = 2;
|
|
|
|
local_1c = 1;
|
|
|
|
local_1b = 0;
|
|
|
|
local_1a = 0;
|
|
|
|
local_19 = 0;
|
|
|
|
FUN_00405000(&DAT_00796b10);
|
|
|
|
local_14 = 0;
|
|
|
|
local_13 = 0;
|
|
|
|
local_12 = 1;
|
|
|
|
local_11 = 0;
|
|
|
|
local_10 = 0;
|
|
|
|
local_f = 0;
|
|
|
|
local_c = 0;
|
|
|
|
local_b = 1;
|
|
|
|
local_8 = 3;
|
|
|
|
local_4 = 0xf;
|
|
|
|
local_e = 0;
|
|
|
|
FUN_0041f900(&DAT_007964e4,local_3c + 1);
|
|
|
|
local_28 = 0;
|
|
|
|
local_3c[1] = 0x1000000;
|
|
|
|
local_3c[2] = 0x100ffff;
|
|
|
|
FUN_00401340(&DAT_007965b4);
|
|
|
|
FUN_0040c440(local_3c);
|
|
|
|
puVar2 = (undefined4 *)(local_3c[0] + -0x14);
|
|
|
|
LVar1 = InterlockedDecrement((LONG *)(local_3c[0] + -0x10));
|
|
|
|
if ((LVar1 == 0) && (puVar2 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar2)(1);
|
|
|
|
}
|
|
|
|
local_24 = 1;
|
|
|
|
local_20 = 1;
|
|
|
|
local_1c = 1;
|
|
|
|
local_1b = 1;
|
|
|
|
local_1a = 0;
|
|
|
|
local_19 = 0;
|
|
|
|
FUN_00405000("gfxobj");
|
|
|
|
local_14 = 1;
|
|
|
|
local_13 = 1;
|
|
|
|
local_12 = 1;
|
|
|
|
local_11 = 0;
|
|
|
|
local_10 = 0;
|
|
|
|
local_f = 0;
|
|
|
|
local_c = 0;
|
|
|
|
local_b = 1;
|
|
|
|
local_8 = 100;
|
|
|
|
local_4 = 200;
|
|
|
|
local_e = 0;
|
|
|
|
FUN_0041f900(&DAT_007964e8,local_3c + 1);
|
|
|
|
local_28 = 0;
|
|
|
|
local_3c[1] = 0x2000000;
|
|
|
|
local_3c[2] = 0x200ffff;
|
|
|
|
FUN_00401340(&DAT_007965bc);
|
|
|
|
FUN_0040c440(local_3c);
|
|
|
|
puVar2 = (undefined4 *)(local_3c[0] + -0x14);
|
|
|
|
LVar1 = InterlockedDecrement((LONG *)(local_3c[0] + -0x10));
|
|
|
|
if ((LVar1 == 0) && (puVar2 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar2)(1);
|
|
|
|
}
|
|
|
|
local_24 = 1;
|
|
|
|
local_20 = 1;
|
|
|
|
local_1c = 1;
|
|
|
|
local_1b = 1;
|
|
|
|
local_1a = 0;
|
|
|
|
local_19 = 0;
|
|
|
|
FUN_00405000("setup");
|
|
|
|
local_14 = 1;
|
|
|
|
local_13 = 1;
|
|
|
|
local_12 = 1;
|
|
|
|
local_11 = 0;
|
|
|
|
local_10 = 0;
|
|
|
|
local_f = 0;
|
|
|
|
local_c = 0;
|
|
|
|
local_b = 1;
|
|
|
|
local_8 = 0x19;
|
|
|
|
local_4 = 100;
|
|
|
|
local_e = 0;
|
|
|
|
FUN_0041f900(&DAT_007964ec,local_3c + 1);
|
|
|
|
local_28 = 0;
|
|
|
|
local_3c[1] = 0x3000000;
|
|
|
|
local_3c[2] = 0x300ffff;
|
|
|
|
FUN_00401340(&DAT_007965c4);
|
|
|
|
FUN_0040c440(local_3c);
|
|
|
|
puVar2 = (undefined4 *)(local_3c[0] + -0x14);
|
|
|
|
LVar1 = InterlockedDecrement((LONG *)(local_3c[0] + -0x10));
|
|
|
|
if ((LVar1 == 0) && (puVar2 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar2)(1);
|
|
|
|
}
|
|
|
|
local_24 = 1;
|
|
|
|
local_20 = 1;
|
|
|
|
local_1c = 1;
|
|
|
|
local_1b = 1;
|
|
|
|
local_1a = 0;
|
|
|
|
local_19 = 0;
|
|
|
|
FUN_00405000(&DAT_00796af8);
|
|
|
|
local_14 = 1;
|
|
|
|
local_13 = 1;
|
|
|
|
local_12 = 1;
|
|
|
|
local_11 = 0;
|
|
|
|
local_10 = 0;
|
|
|
|
local_f = 0;
|
|
|
|
local_c = 0;
|
|
|
|
local_b = 1;
|
|
|
|
local_8 = 0x14;
|
|
|
|
local_4 = 0x50;
|
|
|
|
local_e = 0;
|
|
|
|
FUN_0041f900(&DAT_007964f0,local_3c + 1);
|
|
|
|
local_28 = 0;
|
|
|
|
local_3c[1] = 0;
|
|
|
|
local_3c[2] = 0;
|
|
|
|
FUN_00401340(&DAT_007965cc);
|
|
|
|
FUN_0040c440(local_3c);
|
|
|
|
puVar2 = (undefined4 *)(local_3c[0] + -0x14);
|
|
|
|
LVar1 = InterlockedDecrement((LONG *)(local_3c[0] + -0x10));
|
|
|
|
if ((LVar1 == 0) && (puVar2 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar2)(1);
|
|
|
|
}
|
|
|
|
local_24 = 1;
|
|
|
|
local_20 = 1;
|
|
|
|
local_1c = 1;
|
|
|
|
local_1b = 0;
|
|
|
|
local_1a = 0;
|
|
|
|
local_19 = 0;
|
|
|
|
FUN_00405000(&DAT_00796af4);
|
|
|
|
local_14 = 0;
|
|
|
|
local_13 = 0;
|
|
|
|
local_12 = 1;
|
|
|
|
local_11 = 0;
|
|
|
|
local_10 = 0;
|
|
|
|
local_f = 0;
|
|
|
|
local_c = 0;
|
|
|
|
local_b = 1;
|
|
|
|
local_8 = 3;
|
|
|
|
local_4 = 0xf;
|
|
|
|
local_e = 0;
|
|
|
|
FUN_0041f900(&DAT_007964f4,local_3c + 1);
|
|
|
|
local_28 = 0;
|
|
|
|
local_3c[1] = 0x4000000;
|
|
|
|
local_3c[2] = 0x400ffff;
|
|
|
|
FUN_00401340(&DAT_007965d4);
|
|
|
|
FUN_0040c440(local_3c);
|
|
|
|
puVar2 = (undefined4 *)(local_3c[0] + -0x14);
|
|
|
|
LVar1 = InterlockedDecrement((LONG *)(local_3c[0] + -0x10));
|
|
|
|
if ((LVar1 == 0) && (puVar2 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar2)(1);
|
|
|
|
}
|
|
|
|
local_24 = 1;
|
|
|
|
local_20 = 1;
|
|
|
|
local_1c = 1;
|
|
|
|
local_1b = 1;
|
|
|
|
local_1a = 0;
|
|
|
|
local_19 = 0;
|
|
|
|
FUN_00405000("palette");
|
|
|
|
local_14 = 1;
|
|
|
|
local_13 = 0;
|
|
|
|
local_12 = 1;
|
|
|
|
local_11 = 0;
|
|
|
|
local_10 = 0;
|
|
|
|
local_f = 0;
|
|
|
|
local_c = 0;
|
|
|
|
local_b = 1;
|
|
|
|
local_8 = 0x3c;
|
|
|
|
local_4 = 100;
|
|
|
|
local_e = 0;
|
|
|
|
FUN_0041f900(&DAT_007964f8,local_3c + 1);
|
|
|
|
local_28 = 0;
|
|
|
|
local_3c[1] = 0x5000000;
|
|
|
|
local_3c[2] = 0x5ffffff;
|
|
|
|
FUN_00401340(".texture");
|
|
|
|
FUN_0040c440(local_3c);
|
|
|
|
puVar2 = (undefined4 *)(local_3c[0] + -0x14);
|
|
|
|
LVar1 = InterlockedDecrement((LONG *)(local_3c[0] + -0x10));
|
|
|
|
if ((LVar1 == 0) && (puVar2 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar2)(1);
|
|
|
|
}
|
|
|
|
local_24 = 1;
|
|
|
|
local_20 = 1;
|
|
|
|
local_1c = 1;
|
|
|
|
local_1b = 1;
|
|
|
|
local_1a = 0;
|
|
|
|
local_19 = 0;
|
|
|
|
FUN_00405000("textures");
|
|
|
|
local_14 = 1;
|
|
|
|
local_13 = 0;
|
|
|
|
local_12 = 1;
|
|
|
|
local_11 = 0;
|
|
|
|
local_10 = 0;
|
|
|
|
local_f = 1;
|
|
|
|
local_c = 0;
|
|
|
|
local_b = 1;
|
|
|
|
local_8 = 100;
|
|
|
|
local_4 = 400;
|
|
|
|
local_e = 0;
|
|
|
|
FUN_0041f900(&DAT_007964fc,local_3c + 1);
|
|
|
|
local_28 = 0;
|
|
|
|
local_3c[1] = 0x6000000;
|
|
|
|
local_3c[2] = 0x7ffffff;
|
|
|
|
FUN_00401340(&DAT_007965e8);
|
|
|
|
FUN_0040c440(local_3c);
|
|
|
|
puVar2 = (undefined4 *)(local_3c[0] + -0x14);
|
|
|
|
LVar1 = InterlockedDecrement((LONG *)(local_3c[0] + -0x10));
|
|
|
|
if ((LVar1 == 0) && (puVar2 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar2)(1);
|
|
|
|
}
|
|
|
|
FUN_00401340(&DAT_007965f0);
|
|
|
|
FUN_0040c440(local_3c);
|
|
|
|
puVar2 = (undefined4 *)(local_3c[0] + -0x14);
|
|
|
|
LVar1 = InterlockedDecrement((LONG *)(local_3c[0] + -0x10));
|
|
|
|
if ((LVar1 == 0) && (puVar2 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar2)(1);
|
|
|
|
}
|
|
|
|
FUN_00401340(&DAT_007965f8);
|
|
|
|
FUN_0040c440(local_3c);
|
|
|
|
puVar2 = (undefined4 *)(local_3c[0] + -0x14);
|
|
|
|
LVar1 = InterlockedDecrement((LONG *)(local_3c[0] + -0x10));
|
|
|
|
if ((LVar1 == 0) && (puVar2 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar2)(1);
|
|
|
|
}
|
|
|
|
FUN_00401340(&DAT_00796600);
|
|
|
|
FUN_0040c440(local_3c);
|
|
|
|
puVar2 = (undefined4 *)(local_3c[0] + -0x14);
|
|
|
|
LVar1 = InterlockedDecrement((LONG *)(local_3c[0] + -0x10));
|
|
|
|
if ((LVar1 == 0) && (puVar2 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar2)(1);
|
|
|
|
}
|
|
|
|
FUN_00401340(&DAT_00796608);
|
|
|
|
FUN_0040c440(local_3c);
|
|
|
|
puVar2 = (undefined4 *)(local_3c[0] + -0x14);
|
|
|
|
LVar1 = InterlockedDecrement((LONG *)(local_3c[0] + -0x10));
|
|
|
|
if ((LVar1 == 0) && (puVar2 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar2)(1);
|
|
|
|
}
|
|
|
|
FUN_00401340(&DAT_00796610);
|
|
|
|
FUN_0040c440(local_3c);
|
|
|
|
puVar2 = (undefined4 *)(local_3c[0] + -0x14);
|
|
|
|
LVar1 = InterlockedDecrement((LONG *)(local_3c[0] + -0x10));
|
|
|
|
if ((LVar1 == 0) && (puVar2 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar2)(1);
|
|
|
|
}
|
|
|
|
FUN_00401340(&DAT_00796618);
|
|
|
|
FUN_0040c440(local_3c);
|
|
|
|
puVar2 = (undefined4 *)(local_3c[0] + -0x14);
|
|
|
|
LVar1 = InterlockedDecrement((LONG *)(local_3c[0] + -0x10));
|
|
|
|
if ((LVar1 == 0) && (puVar2 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar2)(1);
|
|
|
|
}
|
|
|
|
local_24 = 1;
|
|
|
|
local_20 = 1;
|
|
|
|
local_1c = 1;
|
|
|
|
local_1b = 1;
|
|
|
|
local_1a = 0;
|
|
|
|
local_19 = 0;
|
|
|
|
FUN_00405000("surfaces");
|
|
|
|
local_14 = 1;
|
|
|
|
local_13 = 0;
|
|
|
|
local_12 = 1;
|
|
|
|
local_11 = 0;
|
|
|
|
local_10 = 0;
|
|
|
|
local_f = 1;
|
|
|
|
local_c = 0;
|
|
|
|
local_b = 1;
|
|
|
|
local_8 = 100;
|
|
|
|
local_4 = 400;
|
|
|
|
local_e = 0;
|
|
|
|
FUN_0041f900(&DAT_00796500,local_3c + 1);
|
|
|
|
local_28 = 0;
|
|
|
|
local_3c[1] = 0x8000000;
|
|
|
|
local_3c[2] = 0x800ffff;
|
|
|
|
FUN_00401340(".surface");
|
|
|
|
FUN_0040c440(local_3c);
|
|
|
|
puVar2 = (undefined4 *)(local_3c[0] + -0x14);
|
|
|
|
LVar1 = InterlockedDecrement((LONG *)(local_3c[0] + -0x10));
|
|
|
|
if ((LVar1 == 0) && (puVar2 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar2)(1);
|
|
|
|
}
|
|
|
|
local_24 = 1;
|
|
|
|
local_20 = 1;
|
|
|
|
local_1c = 1;
|
|
|
|
local_1b = 1;
|
|
|
|
local_1a = 0;
|
|
|
|
local_19 = 0;
|
|
|
|
FUN_00405000("materials");
|
|
|
|
local_14 = 1;
|
|
|
|
local_13 = 0;
|
|
|
|
local_12 = 1;
|
|
|
|
local_11 = 0;
|
|
|
|
local_10 = 0;
|
|
|
|
local_f = 0;
|
|
|
|
local_c = 0;
|
|
|
|
local_b = 1;
|
|
|
|
local_8 = 0x32;
|
|
|
|
local_4 = 200;
|
|
|
|
local_e = 0;
|
|
|
|
FUN_0041f900(&DAT_00796504,local_3c + 1);
|
|
|
|
local_28 = 0;
|
|
|
|
local_3c[1] = 0x9000000;
|
|
|
|
local_3c[2] = 0x900ffff;
|
|
|
|
FUN_00401340(&DAT_0079662c);
|
|
|
|
FUN_0040c440(local_3c);
|
|
|
|
puVar2 = (undefined4 *)(local_3c[0] + -0x14);
|
|
|
|
LVar1 = InterlockedDecrement((LONG *)(local_3c[0] + -0x10));
|
|
|
|
if ((LVar1 == 0) && (puVar2 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar2)(1);
|
|
|
|
}
|
|
|
|
local_24 = 1;
|
|
|
|
local_20 = 1;
|
|
|
|
local_1c = 1;
|
|
|
|
local_1b = 1;
|
|
|
|
local_1a = 0;
|
|
|
|
local_19 = 0;
|
|
|
|
FUN_00405000(&DAT_00796ac4);
|
|
|
|
local_14 = 1;
|
|
|
|
local_13 = 1;
|
|
|
|
local_12 = 1;
|
|
|
|
local_11 = 0;
|
|
|
|
local_10 = 0;
|
|
|
|
local_f = 0;
|
|
|
|
local_c = 0;
|
|
|
|
local_b = 1;
|
|
|
|
local_8 = 3;
|
|
|
|
local_4 = 0xf;
|
|
|
|
local_e = 0;
|
|
|
|
FUN_0041f900(&DAT_00796508,local_3c + 1);
|
|
|
|
local_28 = 0;
|
|
|
|
local_3c[1] = 0xa000000;
|
|
|
|
local_3c[2] = 0xa00ffff;
|
|
|
|
FUN_00401340(&DAT_00796634);
|
|
|
|
FUN_0040c440(local_3c);
|
|
|
|
puVar2 = (undefined4 *)(local_3c[0] + -0x14);
|
|
|
|
LVar1 = InterlockedDecrement((LONG *)(local_3c[0] + -0x10));
|
|
|
|
if ((LVar1 == 0) && (puVar2 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar2)(1);
|
|
|
|
}
|
|
|
|
local_24 = 1;
|
|
|
|
local_20 = 1;
|
|
|
|
local_1c = 1;
|
|
|
|
local_1b = 1;
|
|
|
|
local_1a = 0;
|
|
|
|
local_19 = 0;
|
|
|
|
FUN_00405000("sound");
|
|
|
|
local_14 = 1;
|
|
|
|
local_13 = 0;
|
|
|
|
local_12 = 1;
|
|
|
|
local_11 = 0;
|
|
|
|
local_10 = 0;
|
|
|
|
local_f = 0;
|
|
|
|
local_c = 0;
|
|
|
|
local_b = 1;
|
|
|
|
local_8 = 3;
|
|
|
|
local_4 = 0xf;
|
|
|
|
local_e = 0;
|
|
|
|
FUN_0041f900(&DAT_0079650c,local_3c + 1);
|
|
|
|
local_28 = 0;
|
|
|
|
local_3c[1] = 0xd000000;
|
|
|
|
local_3c[2] = 0xd00ffff;
|
|
|
|
FUN_00401340(&DAT_0079663c);
|
|
|
|
FUN_0040c440(local_3c);
|
|
|
|
puVar2 = (undefined4 *)(local_3c[0] + -0x14);
|
|
|
|
LVar1 = InterlockedDecrement((LONG *)(local_3c[0] + -0x10));
|
|
|
|
if ((LVar1 == 0) && (puVar2 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar2)(1);
|
|
|
|
}
|
|
|
|
local_24 = 1;
|
|
|
|
local_20 = 1;
|
|
|
|
local_1c = 1;
|
|
|
|
local_1b = 1;
|
|
|
|
local_1a = 0;
|
|
|
|
local_19 = 0;
|
|
|
|
FUN_00405000(&DAT_00796ab8);
|
|
|
|
local_14 = 1;
|
|
|
|
local_13 = 1;
|
|
|
|
local_12 = 1;
|
|
|
|
local_11 = 0;
|
|
|
|
local_10 = 0;
|
|
|
|
local_f = 0;
|
|
|
|
local_c = 0;
|
|
|
|
local_b = 1;
|
|
|
|
local_8 = 3;
|
|
|
|
local_4 = 0xf;
|
|
|
|
local_e = 0;
|
|
|
|
FUN_0041f900(&DAT_00796510,local_3c + 1);
|
|
|
|
local_28 = 0;
|
|
|
|
local_3c[1] = 0xe000007;
|
|
|
|
local_3c[2] = 0xe000007;
|
|
|
|
FUN_00401340(&DAT_00796644);
|
|
|
|
FUN_0040c440(local_3c);
|
|
|
|
puVar2 = (undefined4 *)(local_3c[0] + -0x14);
|
|
|
|
LVar1 = InterlockedDecrement((LONG *)(local_3c[0] + -0x10));
|
|
|
|
if ((LVar1 == 0) && (puVar2 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar2)(1);
|
|
|
|
}
|
|
|
|
local_24 = 1;
|
|
|
|
local_20 = 1;
|
|
|
|
local_1c = 1;
|
|
|
|
local_1b = 1;
|
|
|
|
local_1a = 0;
|
|
|
|
local_19 = 0;
|
|
|
|
FUN_00405000(&DAT_00796ab4);
|
|
|
|
local_14 = 1;
|
|
|
|
local_13 = 0;
|
|
|
|
local_12 = 1;
|
|
|
|
local_11 = 0;
|
|
|
|
local_10 = 0;
|
|
|
|
local_f = 0;
|
|
|
|
local_c = 0;
|
|
|
|
local_b = 0;
|
|
|
|
local_8 = 1;
|
|
|
|
local_4 = 1;
|
|
|
|
local_e = 0;
|
|
|
|
FUN_0041f900(&DAT_00796514,local_3c + 1);
|
|
|
|
local_28 = 0;
|
|
|
|
local_3c[1] = 0xe00000d;
|
|
|
|
local_3c[2] = 0xe00000d;
|
|
|
|
FUN_00401340(&DAT_0079664c);
|
|
|
|
FUN_0040c440(local_3c);
|
|
|
|
puVar2 = (undefined4 *)(local_3c[0] + -0x14);
|
|
|
|
LVar1 = InterlockedDecrement((LONG *)(local_3c[0] + -0x10));
|
|
|
|
if ((LVar1 == 0) && (puVar2 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar2)(1);
|
|
|
|
}
|
|
|
|
local_24 = 1;
|
|
|
|
local_20 = 1;
|
|
|
|
local_1c = 1;
|
|
|
|
local_1b = 1;
|
|
|
|
local_1a = 0;
|
|
|
|
local_19 = 0;
|
|
|
|
FUN_00405000("DungeonCfgs");
|
|
|
|
local_14 = 1;
|
|
|
|
local_13 = 0;
|
|
|
|
local_12 = 1;
|
|
|
|
local_11 = 0;
|
|
|
|
local_10 = 0;
|
|
|
|
local_f = 0;
|
|
|
|
local_c = 0;
|
|
|
|
local_b = 1;
|
|
|
|
local_8 = 3;
|
|
|
|
local_4 = 0xf;
|
|
|
|
local_e = 0;
|
|
|
|
FUN_0041f900(&DAT_00796518,local_3c + 1);
|
|
|
|
local_28 = 0;
|
|
|
|
local_3c[1] = 0xe00001a;
|
|
|
|
local_3c[2] = 0xe00001a;
|
|
|
|
FUN_00401340(&DAT_00796654);
|
|
|
|
FUN_0040c440(local_3c);
|
|
|
|
puVar2 = (undefined4 *)(local_3c[0] + -0x14);
|
|
|
|
LVar1 = InterlockedDecrement((LONG *)(local_3c[0] + -0x10));
|
|
|
|
if ((LVar1 == 0) && (puVar2 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar2)(1);
|
|
|
|
}
|
|
|
|
local_24 = 1;
|
|
|
|
local_20 = 1;
|
|
|
|
local_1c = 1;
|
|
|
|
local_1b = 1;
|
|
|
|
local_1a = 0;
|
|
|
|
local_19 = 0;
|
|
|
|
FUN_00405000("weenie");
|
|
|
|
local_14 = 1;
|
|
|
|
local_13 = 1;
|
|
|
|
local_12 = 1;
|
|
|
|
local_11 = 0;
|
|
|
|
local_10 = 0;
|
|
|
|
local_f = 0;
|
|
|
|
local_c = 0;
|
|
|
|
local_b = 0;
|
|
|
|
local_8 = 1;
|
|
|
|
local_4 = 1;
|
|
|
|
local_e = 0;
|
|
|
|
FUN_0041f900(&DAT_0079651c,local_3c + 1);
|
|
|
|
local_28 = 0;
|
|
|
|
local_3c[1] = 0xe00001e;
|
|
|
|
local_3c[2] = 0xe00001e;
|
|
|
|
FUN_00401340(".taboo");
|
|
|
|
FUN_0040c440(local_3c);
|
|
|
|
puVar2 = (undefined4 *)(local_3c[0] + -0x14);
|
|
|
|
LVar1 = InterlockedDecrement((LONG *)(local_3c[0] + -0x10));
|
|
|
|
if ((LVar1 == 0) && (puVar2 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar2)(1);
|
|
|
|
}
|
|
|
|
local_24 = 1;
|
|
|
|
local_20 = 1;
|
|
|
|
local_1c = 1;
|
|
|
|
local_1b = 1;
|
|
|
|
local_1a = 0;
|
|
|
|
local_19 = 0;
|
|
|
|
FUN_00405000("weenie");
|
|
|
|
local_14 = 1;
|
|
|
|
local_13 = 1;
|
|
|
|
local_12 = 1;
|
|
|
|
local_11 = 0;
|
|
|
|
local_10 = 0;
|
|
|
|
local_f = 0;
|
|
|
|
local_c = 0;
|
|
|
|
local_b = 1;
|
|
|
|
local_8 = 3;
|
|
|
|
local_4 = 0xf;
|
|
|
|
local_e = 0;
|
|
|
|
FUN_0041f900(&DAT_00796520,local_3c + 1);
|
|
|
|
local_28 = 0;
|
|
|
|
local_3c[1] = 0xe00001f;
|
|
|
|
local_3c[2] = 0xe00001f;
|
|
|
|
local_24 = 1;
|
|
|
|
local_20 = 1;
|
|
|
|
local_1c = 0;
|
|
|
|
local_1b = 1;
|
|
|
|
local_1a = 0;
|
|
|
|
local_19 = 0;
|
|
|
|
FUN_00405000(&DAT_007938af);
|
|
|
|
local_14 = 1;
|
|
|
|
local_13 = 1;
|
|
|
|
local_12 = 1;
|
|
|
|
local_11 = 0;
|
|
|
|
local_10 = 0;
|
|
|
|
local_f = 0;
|
|
|
|
local_c = 0;
|
|
|
|
local_b = 1;
|
|
|
|
local_8 = 3;
|
|
|
|
local_4 = 0xf;
|
|
|
|
local_e = 0;
|
|
|
|
FUN_0041f900(&DAT_00796524,local_3c + 1);
|
|
|
|
local_28 = 0;
|
|
|
|
local_3c[1] = 0xe000020;
|
|
|
|
local_3c[2] = 0xe000020;
|
|
|
|
FUN_00401340(&DAT_00796664);
|
|
|
|
FUN_0040c440(local_3c);
|
|
|
|
puVar2 = (undefined4 *)(local_3c[0] + -0x14);
|
|
|
|
LVar1 = InterlockedDecrement((LONG *)(local_3c[0] + -0x10));
|
|
|
|
if ((LVar1 == 0) && (puVar2 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar2)(1);
|
|
|
|
}
|
|
|
|
local_24 = 1;
|
|
|
|
local_20 = 1;
|
|
|
|
local_1c = 1;
|
|
|
|
local_1b = 1;
|
|
|
|
local_1a = 0;
|
|
|
|
local_19 = 0;
|
|
|
|
FUN_00405000("namefilter");
|
|
|
|
local_14 = 1;
|
|
|
|
local_13 = 1;
|
|
|
|
local_12 = 1;
|
|
|
|
local_11 = 0;
|
|
|
|
local_10 = 0;
|
|
|
|
local_f = 0;
|
|
|
|
local_c = 0;
|
|
|
|
local_b = 1;
|
|
|
|
local_8 = 3;
|
|
|
|
local_4 = 0xf;
|
|
|
|
local_e = 0;
|
|
|
|
FUN_0041f900(&DAT_00796528,local_3c + 1);
|
|
|
|
local_28 = 0;
|
|
|
|
local_3c[1] = 0xe020000;
|
|
|
|
local_3c[2] = 0xe02ffff;
|
|
|
|
FUN_00401340(".monprop");
|
|
|
|
FUN_0040c440(local_3c);
|
|
|
|
puVar2 = (undefined4 *)(local_3c[0] + -0x14);
|
|
|
|
LVar1 = InterlockedDecrement((LONG *)(local_3c[0] + -0x10));
|
|
|
|
if ((LVar1 == 0) && (puVar2 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar2)(1);
|
|
|
|
}
|
|
|
|
local_24 = 1;
|
|
|
|
local_20 = 1;
|
|
|
|
local_1c = 1;
|
|
|
|
local_1b = 1;
|
|
|
|
local_1a = 0;
|
|
|
|
local_19 = 0;
|
|
|
|
FUN_00405000("properties");
|
|
|
|
local_14 = 0;
|
|
|
|
local_13 = 1;
|
|
|
|
local_12 = 1;
|
|
|
|
local_11 = 0;
|
|
|
|
local_10 = 0;
|
|
|
|
local_f = 0;
|
|
|
|
local_c = 0;
|
|
|
|
local_b = 1;
|
|
|
|
local_8 = 3;
|
|
|
|
local_4 = 0xf;
|
|
|
|
local_e = 0;
|
|
|
|
FUN_0041f900(&DAT_0079652c,local_3c + 1);
|
|
|
|
local_28 = 0;
|
|
|
|
local_3c[1] = 0xf000000;
|
|
|
|
local_3c[2] = 0xf00ffff;
|
|
|
|
FUN_00401340(&DAT_00796678);
|
|
|
|
FUN_0040c440(local_3c);
|
|
|
|
puVar2 = (undefined4 *)(local_3c[0] + -0x14);
|
|
|
|
LVar1 = InterlockedDecrement((LONG *)(local_3c[0] + -0x10));
|
|
|
|
if ((LVar1 == 0) && (puVar2 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar2)(1);
|
|
|
|
}
|
|
|
|
local_24 = 1;
|
|
|
|
local_20 = 1;
|
|
|
|
local_1c = 1;
|
|
|
|
local_1b = 1;
|
|
|
|
local_1a = 0;
|
|
|
|
local_19 = 0;
|
|
|
|
FUN_00405000("palset");
|
|
|
|
local_14 = 1;
|
|
|
|
local_13 = 1;
|
|
|
|
local_12 = 1;
|
|
|
|
local_11 = 0;
|
|
|
|
local_10 = 0;
|
|
|
|
local_f = 0;
|
|
|
|
local_c = 0;
|
|
|
|
local_b = 1;
|
|
|
|
local_8 = 10;
|
|
|
|
local_4 = 0x28;
|
|
|
|
local_e = 0;
|
|
|
|
FUN_0041f900(&DAT_00796530,local_3c + 1);
|
|
|
|
local_28 = 0;
|
|
|
|
local_3c[1] = 0x10000000;
|
|
|
|
local_3c[2] = 0x1000ffff;
|
|
|
|
FUN_00401340(&DAT_00796680);
|
|
|
|
FUN_0040c440(local_3c);
|
|
|
|
puVar2 = (undefined4 *)(local_3c[0] + -0x14);
|
|
|
|
LVar1 = InterlockedDecrement((LONG *)(local_3c[0] + -0x10));
|
|
|
|
if ((LVar1 == 0) && (puVar2 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar2)(1);
|
|
|
|
}
|
|
|
|
local_24 = 1;
|
|
|
|
local_20 = 1;
|
|
|
|
local_1c = 1;
|
|
|
|
local_1b = 1;
|
|
|
|
local_1a = 0;
|
|
|
|
local_19 = 0;
|
|
|
|
FUN_00405000("clothing");
|
|
|
|
local_14 = 1;
|
|
|
|
local_13 = 1;
|
|
|
|
local_12 = 1;
|
|
|
|
local_11 = 0;
|
|
|
|
local_10 = 0;
|
|
|
|
local_f = 0;
|
|
|
|
local_c = 0;
|
|
|
|
local_b = 1;
|
|
|
|
local_8 = 0x14;
|
|
|
|
local_4 = 0x28;
|
|
|
|
local_e = 0;
|
|
|
|
FUN_0041f900(&DAT_00796534,local_3c + 1);
|
|
|
|
local_28 = 0;
|
|
|
|
local_3c[1] = 0x11000000;
|
|
|
|
local_3c[2] = 0x1100ffff;
|
|
|
|
FUN_00401340(&DAT_00796688);
|
|
|
|
FUN_0040c440(local_3c);
|
|
|
|
puVar2 = (undefined4 *)(local_3c[0] + -0x14);
|
|
|
|
LVar1 = InterlockedDecrement((LONG *)(local_3c[0] + -0x10));
|
|
|
|
if ((LVar1 == 0) && (puVar2 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar2)(1);
|
|
|
|
}
|
|
|
|
local_24 = 1;
|
|
|
|
local_20 = 1;
|
|
|
|
local_1c = 1;
|
|
|
|
local_1b = 1;
|
|
|
|
local_1a = 0;
|
|
|
|
local_19 = 0;
|
|
|
|
FUN_00405000(&DAT_00796a70);
|
|
|
|
local_14 = 1;
|
|
|
|
local_13 = 0;
|
|
|
|
local_12 = 1;
|
|
|
|
local_11 = 0;
|
|
|
|
local_10 = 0;
|
|
|
|
local_f = 0;
|
|
|
|
local_c = 0;
|
|
|
|
local_b = 1;
|
|
|
|
local_8 = 0x50;
|
|
|
|
local_4 = 200;
|
|
|
|
local_e = 0;
|
|
|
|
FUN_0041f900(&DAT_00796538,local_3c + 1);
|
|
|
|
local_28 = 0;
|
|
|
|
local_3c[1] = 0x12000000;
|
|
|
|
local_3c[2] = 0x1200ffff;
|
|
|
|
FUN_00401340(&DAT_00796690);
|
|
|
|
FUN_0040c440(local_3c);
|
|
|
|
puVar2 = (undefined4 *)(local_3c[0] + -0x14);
|
|
|
|
LVar1 = InterlockedDecrement((LONG *)(local_3c[0] + -0x10));
|
|
|
|
if ((LVar1 == 0) && (puVar2 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar2)(1);
|
|
|
|
}
|
|
|
|
local_24 = 1;
|
|
|
|
local_20 = 1;
|
|
|
|
local_1c = 1;
|
|
|
|
local_1b = 1;
|
|
|
|
local_1a = 0;
|
|
|
|
local_19 = 0;
|
|
|
|
FUN_00405000(&DAT_00796a6c);
|
|
|
|
local_14 = 1;
|
|
|
|
local_13 = 1;
|
|
|
|
local_12 = 1;
|
|
|
|
local_11 = 0;
|
|
|
|
local_10 = 0;
|
|
|
|
local_f = 0;
|
|
|
|
local_c = 0;
|
|
|
|
local_b = 1;
|
|
|
|
local_8 = 0x19;
|
|
|
|
local_4 = 100;
|
|
|
|
local_e = 0;
|
|
|
|
FUN_0041f900(&DAT_0079653c,local_3c + 1);
|
|
|
|
local_28 = 0;
|
|
|
|
local_3c[1] = 0x13000000;
|
|
|
|
local_3c[2] = 0x1300ffff;
|
|
|
|
FUN_00401340(&DAT_00796698);
|
|
|
|
FUN_0040c440(local_3c);
|
|
|
|
puVar2 = (undefined4 *)(local_3c[0] + -0x14);
|
|
|
|
LVar1 = InterlockedDecrement((LONG *)(local_3c[0] + -0x10));
|
|
|
|
if ((LVar1 == 0) && (puVar2 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar2)(1);
|
|
|
|
}
|
|
|
|
local_24 = 1;
|
|
|
|
local_20 = 1;
|
|
|
|
local_1c = 1;
|
|
|
|
local_1b = 1;
|
|
|
|
local_1a = 0;
|
|
|
|
local_19 = 0;
|
|
|
|
FUN_00405000("landscape");
|
|
|
|
local_14 = 1;
|
|
|
|
local_13 = 1;
|
|
|
|
local_12 = 1;
|
|
|
|
local_11 = 0;
|
|
|
|
local_10 = 0;
|
|
|
|
local_f = 0;
|
|
|
|
local_c = 0;
|
|
|
|
local_b = 1;
|
|
|
|
local_8 = 3;
|
|
|
|
local_4 = 0xf;
|
|
|
|
local_e = 1;
|
|
|
|
FUN_0041f900(&DAT_00796540,local_3c + 1);
|
|
|
|
local_28 = 0;
|
|
|
|
local_3c[1] = 0x14000000;
|
|
|
|
local_3c[2] = 0x1400ffff;
|
|
|
|
FUN_00401340(".keymap");
|
|
|
|
FUN_0040c440(local_3c);
|
|
|
|
puVar2 = (undefined4 *)(local_3c[0] + -0x14);
|
|
|
|
LVar1 = InterlockedDecrement((LONG *)(local_3c[0] + -0x10));
|
|
|
|
if ((LVar1 == 0) && (puVar2 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar2)(1);
|
|
|
|
}
|
|
|
|
local_24 = 1;
|
|
|
|
local_20 = 1;
|
|
|
|
local_1c = 1;
|
|
|
|
local_1b = 1;
|
|
|
|
local_1a = 0;
|
|
|
|
local_19 = 0;
|
|
|
|
FUN_00405000("keymap");
|
|
|
|
local_14 = 1;
|
|
|
|
local_13 = 0;
|
|
|
|
local_12 = 1;
|
|
|
|
local_11 = 0;
|
|
|
|
local_10 = 0;
|
|
|
|
local_f = 0;
|
|
|
|
local_c = 0;
|
|
|
|
local_b = 1;
|
|
|
|
local_8 = 3;
|
|
|
|
local_4 = 0xf;
|
|
|
|
local_e = 0;
|
|
|
|
FUN_0041f900(&DAT_00796544,local_3c + 1);
|
|
|
|
local_28 = 0;
|
|
|
|
local_3c[1] = 0x15000000;
|
|
|
|
local_3c[2] = 0x15ffffff;
|
|
|
|
FUN_00401340(".rtexture");
|
|
|
|
FUN_0040c440(local_3c);
|
|
|
|
puVar2 = (undefined4 *)(local_3c[0] + -0x14);
|
|
|
|
LVar1 = InterlockedDecrement((LONG *)(local_3c[0] + -0x10));
|
|
|
|
if ((LVar1 == 0) && (puVar2 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar2)(1);
|
|
|
|
}
|
|
|
|
local_24 = 1;
|
|
|
|
local_20 = 1;
|
|
|
|
local_1c = 1;
|
|
|
|
local_1b = 1;
|
|
|
|
local_1a = 0;
|
|
|
|
local_19 = 0;
|
|
|
|
FUN_00405000("textures");
|
|
|
|
local_14 = 1;
|
|
|
|
local_13 = 0;
|
|
|
|
local_12 = 1;
|
|
|
|
local_11 = 0;
|
|
|
|
local_10 = 0;
|
|
|
|
local_f = 1;
|
|
|
|
local_c = 0;
|
|
|
|
local_b = 1;
|
|
|
|
local_8 = 0x80;
|
|
|
|
local_4 = 0x100;
|
|
|
|
local_e = 0;
|
|
|
|
FUN_0041f900(&DAT_00796548,local_3c + 1);
|
|
|
|
local_28 = 0;
|
|
|
|
local_3c[1] = 0x16000000;
|
|
|
|
local_3c[2] = 0x16ffffff;
|
|
|
|
FUN_00401340(&DAT_007966b4);
|
|
|
|
FUN_0040c440(local_3c);
|
|
|
|
puVar2 = (undefined4 *)(local_3c[0] + -0x14);
|
|
|
|
LVar1 = InterlockedDecrement((LONG *)(local_3c[0] + -0x10));
|
|
|
|
if ((LVar1 == 0) && (puVar2 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar2)(1);
|
|
|
|
}
|
|
|
|
local_24 = 1;
|
|
|
|
local_20 = 1;
|
|
|
|
local_1c = 1;
|
|
|
|
local_1b = 1;
|
|
|
|
local_1a = 0;
|
|
|
|
local_19 = 0;
|
|
|
|
FUN_00405000("materials");
|
|
|
|
local_14 = 1;
|
|
|
|
local_13 = 0;
|
|
|
|
local_12 = 1;
|
|
|
|
local_11 = 0;
|
|
|
|
local_10 = 0;
|
|
|
|
local_f = 0;
|
|
|
|
local_c = 0;
|
|
|
|
local_b = 1;
|
|
|
|
local_8 = 0x40;
|
|
|
|
local_4 = 0x80;
|
|
|
|
local_e = 1;
|
|
|
|
FUN_0041f900(&DAT_0079654c,local_3c + 1);
|
|
|
|
local_28 = 0;
|
|
|
|
local_3c[1] = 0x17000000;
|
|
|
|
local_3c[2] = 0x17ffffff;
|
|
|
|
FUN_00401340(&DAT_007966bc);
|
|
|
|
FUN_0040c440(local_3c);
|
|
|
|
puVar2 = (undefined4 *)(local_3c[0] + -0x14);
|
|
|
|
LVar1 = InterlockedDecrement((LONG *)(local_3c[0] + -0x10));
|
|
|
|
if ((LVar1 == 0) && (puVar2 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar2)(1);
|
|
|
|
}
|
|
|
|
local_24 = 1;
|
|
|
|
local_20 = 1;
|
|
|
|
local_1c = 1;
|
|
|
|
local_1b = 1;
|
|
|
|
local_1a = 0;
|
|
|
|
local_19 = 0;
|
|
|
|
FUN_00405000("materials");
|
|
|
|
local_14 = 1;
|
|
|
|
local_13 = 0;
|
|
|
|
local_12 = 1;
|
|
|
|
local_11 = 0;
|
|
|
|
local_10 = 0;
|
|
|
|
local_f = 0;
|
|
|
|
local_c = 0;
|
|
|
|
local_b = 1;
|
|
|
|
local_8 = 0x40;
|
|
|
|
local_4 = 0x80;
|
|
|
|
local_e = 0;
|
|
|
|
FUN_0041f900(&DAT_00796550,local_3c + 1);
|
|
|
|
local_28 = 0;
|
|
|
|
local_3c[1] = 0x18000000;
|
|
|
|
local_3c[2] = 0x18ffffff;
|
|
|
|
FUN_00401340(&DAT_007966c0);
|
|
|
|
FUN_0040c440(local_3c);
|
|
|
|
puVar2 = (undefined4 *)(local_3c[0] + -0x14);
|
|
|
|
LVar1 = InterlockedDecrement((LONG *)(local_3c[0] + -0x10));
|
|
|
|
if ((LVar1 == 0) && (puVar2 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar2)(1);
|
|
|
|
}
|
|
|
|
local_24 = 1;
|
|
|
|
local_20 = 1;
|
|
|
|
local_1c = 1;
|
|
|
|
local_1b = 1;
|
|
|
|
local_1a = 0;
|
|
|
|
local_19 = 0;
|
|
|
|
FUN_00405000("materials");
|
|
|
|
local_14 = 1;
|
|
|
|
local_13 = 0;
|
|
|
|
local_12 = 1;
|
|
|
|
local_11 = 0;
|
|
|
|
local_10 = 0;
|
|
|
|
local_f = 0;
|
|
|
|
local_c = 0;
|
|
|
|
local_b = 1;
|
|
|
|
local_8 = 0x40;
|
|
|
|
local_4 = 0x80;
|
|
|
|
local_e = 0;
|
|
|
|
FUN_0041f900(&DAT_00796554,local_3c + 1);
|
|
|
|
local_28 = 0;
|
|
|
|
local_3c[1] = 0x19000000;
|
|
|
|
local_3c[2] = 0x19ffffff;
|
|
|
|
FUN_00401340(".rendermesh");
|
|
|
|
FUN_0040c440(local_3c);
|
|
|
|
puVar2 = (undefined4 *)(local_3c[0] + -0x14);
|
|
|
|
LVar1 = InterlockedDecrement((LONG *)(local_3c[0] + -0x10));
|
|
|
|
if ((LVar1 == 0) && (puVar2 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar2)(1);
|
|
|
|
}
|
|
|
|
local_24 = 1;
|
|
|
|
local_20 = 1;
|
|
|
|
local_1c = 1;
|
|
|
|
local_1b = 1;
|
|
|
|
local_1a = 0;
|
|
|
|
local_19 = 0;
|
|
|
|
FUN_00405000(&DAT_00796a58);
|
|
|
|
local_14 = 1;
|
|
|
|
local_13 = 0;
|
|
|
|
local_12 = 1;
|
|
|
|
local_11 = 0;
|
|
|
|
local_10 = 0;
|
|
|
|
local_f = 0;
|
|
|
|
local_c = 0;
|
|
|
|
local_b = 1;
|
|
|
|
local_8 = 0x10;
|
|
|
|
local_4 = 0x20;
|
|
|
|
local_e = 0;
|
|
|
|
FUN_0041f900(&DAT_00796598,local_3c + 1);
|
|
|
|
local_28 = 0;
|
|
|
|
local_3c[1] = 0x20000000;
|
|
|
|
local_3c[2] = 0x2000ffff;
|
|
|
|
FUN_00401340(&DAT_007966d0);
|
|
|
|
FUN_0040c440(local_3c);
|
|
|
|
puVar2 = (undefined4 *)(local_3c[0] + -0x14);
|
|
|
|
LVar1 = InterlockedDecrement((LONG *)(local_3c[0] + -0x10));
|
|
|
|
if ((LVar1 == 0) && (puVar2 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar2)(1);
|
|
|
|
}
|
|
|
|
local_24 = 1;
|
|
|
|
local_20 = 1;
|
|
|
|
local_1c = 1;
|
|
|
|
local_1b = 1;
|
|
|
|
local_1a = 0;
|
|
|
|
local_19 = 0;
|
|
|
|
FUN_00405000(&DAT_00796a54);
|
|
|
|
local_14 = 1;
|
|
|
|
local_13 = 0;
|
|
|
|
local_12 = 1;
|
|
|
|
local_11 = 0;
|
|
|
|
local_10 = 0;
|
|
|
|
local_f = 0;
|
|
|
|
local_c = 0;
|
|
|
|
local_b = 1;
|
|
|
|
local_8 = 2;
|
|
|
|
local_4 = 6;
|
|
|
|
local_e = 0;
|
|
|
|
FUN_0041f900(&DAT_00796558,local_3c + 1);
|
|
|
|
local_28 = 0;
|
|
|
|
local_3c[1] = 0x21000000;
|
|
|
|
local_3c[2] = 0x21ffffff;
|
|
|
|
FUN_00401340(&DAT_007966d8);
|
|
|
|
FUN_0040c440(local_3c);
|
|
|
|
puVar2 = (undefined4 *)(local_3c[0] + -0x14);
|
|
|
|
LVar1 = InterlockedDecrement((LONG *)(local_3c[0] + -0x10));
|
|
|
|
if ((LVar1 == 0) && (puVar2 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar2)(1);
|
|
|
|
}
|
|
|
|
local_24 = 3;
|
|
|
|
local_20 = 1;
|
|
|
|
local_1c = 1;
|
|
|
|
local_1b = 0;
|
|
|
|
local_1a = 0;
|
|
|
|
local_19 = 1;
|
|
|
|
FUN_00405000("ui/layout");
|
|
|
|
local_14 = 1;
|
|
|
|
local_13 = 0;
|
|
|
|
local_12 = 1;
|
|
|
|
local_11 = 0;
|
|
|
|
local_10 = 0;
|
|
|
|
local_f = 0;
|
|
|
|
local_c = 0;
|
|
|
|
local_b = 1;
|
|
|
|
local_8 = 3;
|
|
|
|
local_4 = 0xf;
|
|
|
|
local_e = 1;
|
|
|
|
FUN_0041f900(&DAT_0079655c,local_3c + 1);
|
|
|
|
local_28 = 0;
|
|
|
|
local_3c[1] = 0x22000000;
|
|
|
|
local_3c[2] = 0x22ffffff;
|
|
|
|
FUN_00401340(&DAT_007966e0);
|
|
|
|
FUN_0040c440(local_3c);
|
|
|
|
puVar2 = (undefined4 *)(local_3c[0] + -0x14);
|
|
|
|
LVar1 = InterlockedDecrement((LONG *)(local_3c[0] + -0x10));
|
|
|
|
if ((LVar1 == 0) && (puVar2 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar2)(1);
|
|
|
|
}
|
|
|
|
local_24 = 1;
|
|
|
|
local_20 = 1;
|
|
|
|
local_1c = 1;
|
|
|
|
local_1b = 1;
|
|
|
|
local_1a = 0;
|
|
|
|
local_19 = 0;
|
|
|
|
FUN_00405000(&DAT_00796a44);
|
|
|
|
local_14 = 1;
|
|
|
|
local_13 = 1;
|
|
|
|
local_12 = 1;
|
|
|
|
local_11 = 0;
|
|
|
|
local_10 = 0;
|
|
|
|
local_f = 0;
|
|
|
|
local_c = 0;
|
|
|
|
local_b = 1;
|
|
|
|
local_8 = 0x40;
|
|
|
|
local_4 = 0x80;
|
|
|
|
local_e = 1;
|
|
|
|
FUN_0041f900(&DAT_00796560,local_3c + 1);
|
|
|
|
local_28 = 0;
|
|
|
|
local_3c[1] = 0x23000000;
|
|
|
|
local_3c[2] = 0x24ffffff;
|
|
|
|
FUN_00401340(&DAT_007966e8);
|
|
|
|
FUN_0040c440(local_3c);
|
|
|
|
puVar2 = (undefined4 *)(local_3c[0] + -0x14);
|
|
|
|
LVar1 = InterlockedDecrement((LONG *)(local_3c[0] + -0x10));
|
|
|
|
if ((LVar1 == 0) && (puVar2 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar2)(1);
|
|
|
|
}
|
|
|
|
FUN_00401340(".stt_ansi");
|
|
|
|
FUN_0040c440(local_3c);
|
|
|
|
puVar2 = (undefined4 *)(local_3c[0] + -0x14);
|
|
|
|
LVar1 = InterlockedDecrement((LONG *)(local_3c[0] + -0x10));
|
|
|
|
if ((LVar1 == 0) && (puVar2 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar2)(1);
|
|
|
|
}
|
|
|
|
FUN_00401340(".stt_bin");
|
|
|
|
FUN_0040c440(local_3c);
|
|
|
|
puVar2 = (undefined4 *)(local_3c[0] + -0x14);
|
|
|
|
LVar1 = InterlockedDecrement((LONG *)(local_3c[0] + -0x10));
|
|
|
|
if ((LVar1 == 0) && (puVar2 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar2)(1);
|
|
|
|
}
|
|
|
|
local_24 = 1;
|
|
|
|
local_20 = 1;
|
|
|
|
local_1c = 1;
|
|
|
|
local_1b = 0;
|
|
|
|
local_1a = 0;
|
|
|
|
local_19 = 1;
|
|
|
|
FUN_00405000("stringtable");
|
|
|
|
local_14 = 1;
|
|
|
|
local_13 = 1;
|
|
|
|
local_12 = 1;
|
|
|
|
local_11 = 0;
|
|
|
|
local_10 = 0;
|
|
|
|
local_f = 0;
|
|
|
|
local_c = 0;
|
|
|
|
local_b = 1;
|
|
|
|
local_8 = 3;
|
|
|
|
local_4 = 0xf;
|
|
|
|
local_e = 1;
|
|
|
|
FUN_0041f900(&DAT_00796564,local_3c + 1);
|
|
|
|
local_28 = 0;
|
|
|
|
local_3c[1] = 0x25000000;
|
|
|
|
local_3c[2] = 0x25ffffff;
|
|
|
|
FUN_00401340(&DAT_00796708);
|
|
|
|
FUN_0040c440(local_3c);
|
|
|
|
puVar2 = (undefined4 *)(local_3c[0] + -0x14);
|
|
|
|
LVar1 = InterlockedDecrement((LONG *)(local_3c[0] + -0x10));
|
|
|
|
if ((LVar1 == 0) && (puVar2 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar2)(1);
|
|
|
|
}
|
|
|
|
local_24 = 1;
|
|
|
|
local_20 = 1;
|
|
|
|
local_1c = 1;
|
|
|
|
local_1b = 1;
|
|
|
|
local_1a = 0;
|
|
|
|
local_19 = 0;
|
|
|
|
FUN_00405000("emp/idmap");
|
|
|
|
local_14 = 1;
|
|
|
|
local_13 = 1;
|
|
|
|
local_12 = 1;
|
|
|
|
local_11 = 0;
|
|
|
|
local_10 = 0;
|
|
|
|
local_f = 0;
|
|
|
|
local_c = 0;
|
|
|
|
local_b = 1;
|
|
|
|
local_8 = 0x40;
|
|
|
|
local_4 = 0x80;
|
|
|
|
local_e = 1;
|
|
|
|
FUN_0041f900(&DAT_00796568,local_3c + 1);
|
|
|
|
local_28 = 0;
|
|
|
|
local_3c[1] = 0x26000000;
|
|
|
|
local_3c[2] = 0x2600ffff;
|
|
|
|
FUN_00401340(".actionmap");
|
|
|
|
FUN_0040c440(local_3c);
|
|
|
|
puVar2 = (undefined4 *)(local_3c[0] + -0x14);
|
|
|
|
LVar1 = InterlockedDecrement((LONG *)(local_3c[0] + -0x10));
|
|
|
|
if ((LVar1 == 0) && (puVar2 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar2)(1);
|
|
|
|
}
|
|
|
|
local_24 = 1;
|
|
|
|
local_20 = 1;
|
|
|
|
local_1c = 1;
|
|
|
|
local_1b = 1;
|
|
|
|
local_1a = 0;
|
|
|
|
local_19 = 0;
|
|
|
|
FUN_00405000("actionmap");
|
|
|
|
local_14 = 1;
|
|
|
|
local_13 = 0;
|
|
|
|
local_12 = 1;
|
|
|
|
local_11 = 0;
|
|
|
|
local_10 = 0;
|
|
|
|
local_f = 0;
|
|
|
|
local_c = 0;
|
|
|
|
local_b = 1;
|
|
|
|
local_8 = 3;
|
|
|
|
local_4 = 0xf;
|
|
|
|
local_e = 0;
|
|
|
|
FUN_0041f900(&DAT_0079656c,local_3c + 1);
|
|
|
|
local_28 = 0;
|
|
|
|
local_3c[1] = 0x27000000;
|
|
|
|
local_3c[2] = 0x27ffffff;
|
|
|
|
FUN_00401340(".dimp");
|
|
|
|
FUN_0040c440(local_3c);
|
|
|
|
puVar2 = (undefined4 *)(local_3c[0] + -0x14);
|
|
|
|
LVar1 = InterlockedDecrement((LONG *)(local_3c[0] + -0x10));
|
|
|
|
if ((LVar1 == 0) && (puVar2 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar2)(1);
|
|
|
|
}
|
|
|
|
local_24 = 1;
|
|
|
|
local_20 = 1;
|
|
|
|
local_1c = 1;
|
|
|
|
local_1b = 1;
|
|
|
|
local_1a = 0;
|
|
|
|
local_19 = 0;
|
|
|
|
FUN_00405000("emp/idmap");
|
|
|
|
local_14 = 1;
|
|
|
|
local_13 = 1;
|
|
|
|
local_12 = 1;
|
|
|
|
local_11 = 0;
|
|
|
|
local_10 = 0;
|
|
|
|
local_f = 0;
|
|
|
|
local_c = 0;
|
|
|
|
local_b = 1;
|
|
|
|
local_8 = 0x40;
|
|
|
|
local_4 = 0x80;
|
|
|
|
local_e = 1;
|
|
|
|
FUN_0041f900(&DAT_00796570,local_3c + 1);
|
|
|
|
local_28 = 0;
|
|
|
|
local_3c[1] = 0x31000000;
|
|
|
|
local_3c[2] = 0x3100ffff;
|
|
|
|
FUN_00401340(&DAT_00796724);
|
|
|
|
FUN_0040c440(local_3c);
|
|
|
|
puVar2 = (undefined4 *)(local_3c[0] + -0x14);
|
|
|
|
LVar1 = InterlockedDecrement((LONG *)(local_3c[0] + -0x10));
|
|
|
|
if ((LVar1 == 0) && (puVar2 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar2)(1);
|
|
|
|
}
|
|
|
|
local_24 = 1;
|
|
|
|
local_20 = 1;
|
|
|
|
local_1c = 1;
|
|
|
|
local_1b = 1;
|
|
|
|
local_1a = 0;
|
|
|
|
local_19 = 0;
|
|
|
|
FUN_00405000("string");
|
|
|
|
local_14 = 1;
|
|
|
|
local_13 = 0;
|
|
|
|
local_12 = 1;
|
|
|
|
local_11 = 0;
|
|
|
|
local_10 = 0;
|
|
|
|
local_f = 0;
|
|
|
|
local_c = 0;
|
|
|
|
local_b = 1;
|
|
|
|
local_8 = 3;
|
|
|
|
local_4 = 0xf;
|
|
|
|
local_e = 0;
|
|
|
|
FUN_0041f900(&DAT_00796574,local_3c + 1);
|
|
|
|
local_28 = 0;
|
|
|
|
local_3c[1] = 0x32000000;
|
|
|
|
local_3c[2] = 0x3200ffff;
|
|
|
|
FUN_00401340(&DAT_0079672c);
|
|
|
|
FUN_0040c440(local_3c);
|
|
|
|
puVar2 = (undefined4 *)(local_3c[0] + -0x14);
|
|
|
|
LVar1 = InterlockedDecrement((LONG *)(local_3c[0] + -0x10));
|
|
|
|
if ((LVar1 == 0) && (puVar2 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar2)(1);
|
|
|
|
}
|
|
|
|
local_24 = 1;
|
|
|
|
local_20 = 1;
|
|
|
|
local_1c = 1;
|
|
|
|
local_1b = 1;
|
|
|
|
local_1a = 0;
|
|
|
|
local_19 = 0;
|
|
|
|
FUN_00405000(&DAT_00796a14);
|
|
|
|
local_14 = 1;
|
|
|
|
local_13 = 0;
|
|
|
|
local_12 = 1;
|
|
|
|
local_11 = 0;
|
|
|
|
local_10 = 0;
|
|
|
|
local_f = 0;
|
|
|
|
local_c = 0;
|
|
|
|
local_b = 1;
|
|
|
|
local_8 = 3;
|
|
|
|
local_4 = 0xf;
|
|
|
|
local_e = 0;
|
|
|
|
FUN_0041f900(&DAT_00796578,local_3c + 1);
|
|
|
|
local_28 = 0;
|
|
|
|
local_3c[1] = 0x33000000;
|
|
|
|
local_3c[2] = 0x3300ffff;
|
|
|
|
FUN_00401340(&DAT_00796734);
|
|
|
|
FUN_0040c440(local_3c);
|
|
|
|
puVar2 = (undefined4 *)(local_3c[0] + -0x14);
|
|
|
|
LVar1 = InterlockedDecrement((LONG *)(local_3c[0] + -0x10));
|
|
|
|
if ((LVar1 == 0) && (puVar2 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar2)(1);
|
|
|
|
}
|
|
|
|
local_24 = 1;
|
|
|
|
local_20 = 1;
|
|
|
|
local_1c = 1;
|
|
|
|
local_1b = 1;
|
|
|
|
local_1a = 0;
|
|
|
|
local_19 = 0;
|
|
|
|
FUN_00405000(&DAT_00796a10);
|
|
|
|
local_14 = 1;
|
|
|
|
local_13 = 0;
|
|
|
|
local_12 = 1;
|
|
|
|
local_11 = 0;
|
|
|
|
local_10 = 0;
|
|
|
|
local_f = 0;
|
|
|
|
local_c = 0;
|
|
|
|
local_b = 1;
|
|
|
|
local_8 = 3;
|
|
|
|
local_4 = 0xf;
|
|
|
|
local_e = 0;
|
|
|
|
FUN_0041f900(&DAT_0079657c,local_3c + 1);
|
|
|
|
local_28 = 0;
|
|
|
|
local_3c[1] = 0x34000000;
|
|
|
|
local_3c[2] = 0x3400ffff;
|
|
|
|
FUN_00401340(&DAT_0079673c);
|
|
|
|
FUN_0040c440(local_3c);
|
|
|
|
puVar2 = (undefined4 *)(local_3c[0] + -0x14);
|
|
|
|
LVar1 = InterlockedDecrement((LONG *)(local_3c[0] + -0x10));
|
|
|
|
if ((LVar1 == 0) && (puVar2 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar2)(1);
|
|
|
|
}
|
|
|
|
local_24 = 1;
|
|
|
|
local_20 = 1;
|
|
|
|
local_1c = 1;
|
|
|
|
local_1b = 1;
|
|
|
|
local_1a = 0;
|
|
|
|
local_19 = 0;
|
|
|
|
FUN_00405000(&DAT_00796a0c);
|
|
|
|
local_14 = 1;
|
|
|
|
local_13 = 0;
|
|
|
|
local_12 = 1;
|
|
|
|
local_11 = 0;
|
|
|
|
local_10 = 0;
|
|
|
|
local_f = 0;
|
|
|
|
local_c = 0;
|
|
|
|
local_b = 1;
|
|
|
|
local_8 = 3;
|
|
|
|
local_4 = 0xf;
|
|
|
|
local_e = 0;
|
|
|
|
FUN_0041f900(&DAT_00796580,local_3c + 1);
|
|
|
|
local_28 = 0;
|
|
|
|
local_3c[1] = 0x39000000;
|
|
|
|
local_3c[2] = 0x39ffffff;
|
|
|
|
FUN_00401340(&DAT_00796744);
|
|
|
|
FUN_0040c440(local_3c);
|
|
|
|
puVar2 = (undefined4 *)(local_3c[0] + -0x14);
|
|
|
|
LVar1 = InterlockedDecrement((LONG *)(local_3c[0] + -0x10));
|
|
|
|
if ((LVar1 == 0) && (puVar2 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar2)(1);
|
|
|
|
}
|
|
|
|
local_24 = 1;
|
|
|
|
local_20 = 1;
|
|
|
|
local_1c = 1;
|
|
|
|
local_1b = 1;
|
|
|
|
local_1a = 0;
|
|
|
|
local_19 = 0;
|
|
|
|
FUN_00405000("emp/property");
|
|
|
|
local_14 = 1;
|
|
|
|
local_13 = 1;
|
|
|
|
local_12 = 1;
|
|
|
|
local_11 = 0;
|
|
|
|
local_10 = 0;
|
|
|
|
local_f = 0;
|
|
|
|
local_c = 0;
|
|
|
|
local_b = 1;
|
|
|
|
local_8 = 3;
|
|
|
|
local_4 = 0xf;
|
|
|
|
local_e = 1;
|
|
|
|
FUN_0041f900(&DAT_00796584,local_3c + 1);
|
|
|
|
local_28 = 0;
|
|
|
|
local_3c[1] = 0x40000000;
|
|
|
|
local_3c[2] = 0x40000fff;
|
|
|
|
FUN_00401340(".font");
|
|
|
|
FUN_0040c440(local_3c);
|
|
|
|
puVar2 = (undefined4 *)(local_3c[0] + -0x14);
|
|
|
|
LVar1 = InterlockedDecrement((LONG *)(local_3c[0] + -0x10));
|
|
|
|
if ((LVar1 == 0) && (puVar2 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar2)(1);
|
|
|
|
}
|
|
|
|
local_24 = 1;
|
|
|
|
local_20 = 1;
|
|
|
|
local_1c = 1;
|
|
|
|
local_1b = 1;
|
|
|
|
local_1a = 0;
|
|
|
|
local_19 = 0;
|
|
|
|
FUN_00405000("fonts");
|
|
|
|
local_14 = 1;
|
|
|
|
local_13 = 0;
|
|
|
|
local_12 = 1;
|
|
|
|
local_11 = 0;
|
|
|
|
local_10 = 0;
|
|
|
|
local_f = 0;
|
|
|
|
local_c = 0;
|
|
|
|
local_b = 1;
|
|
|
|
local_8 = 3;
|
|
|
|
local_4 = 0xf;
|
|
|
|
local_e = 0;
|
|
|
|
FUN_0041f900(&DAT_00796588,local_3c + 1);
|
|
|
|
local_28 = 0;
|
|
|
|
local_3c[1] = 0x40001000;
|
|
|
|
local_3c[2] = 0x40ffffff;
|
|
|
|
FUN_00401340(".font_local");
|
|
|
|
FUN_0040c440(local_3c);
|
|
|
|
puVar2 = (undefined4 *)(local_3c[0] + -0x14);
|
|
|
|
LVar1 = InterlockedDecrement((LONG *)(local_3c[0] + -0x10));
|
|
|
|
if ((LVar1 == 0) && (puVar2 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar2)(1);
|
|
|
|
}
|
|
|
|
local_24 = 1;
|
|
|
|
local_20 = 1;
|
|
|
|
local_1c = 1;
|
|
|
|
local_1b = 0;
|
|
|
|
local_1a = 0;
|
|
|
|
local_19 = 1;
|
|
|
|
FUN_00405000("fonts");
|
|
|
|
local_14 = 1;
|
|
|
|
local_13 = 0;
|
|
|
|
local_12 = 1;
|
|
|
|
local_11 = 0;
|
|
|
|
local_10 = 0;
|
|
|
|
local_f = 0;
|
|
|
|
local_c = 0;
|
|
|
|
local_b = 1;
|
|
|
|
local_8 = 3;
|
|
|
|
local_4 = 0xf;
|
|
|
|
local_e = 1;
|
|
|
|
FUN_0041f900(&DAT_0079658c,local_3c + 1);
|
|
|
|
local_28 = 0;
|
|
|
|
local_3c[1] = 0x41000000;
|
|
|
|
local_3c[2] = 0x41ffffff;
|
|
|
|
FUN_00401340(&DAT_00796760);
|
|
|
|
FUN_0040c440(local_3c);
|
|
|
|
puVar2 = (undefined4 *)(local_3c[0] + -0x14);
|
|
|
|
LVar1 = InterlockedDecrement((LONG *)(local_3c[0] + -0x10));
|
|
|
|
if ((LVar1 == 0) && (puVar2 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar2)(1);
|
|
|
|
}
|
|
|
|
local_24 = 1;
|
|
|
|
local_20 = 1;
|
|
|
|
local_1c = 1;
|
|
|
|
local_1b = 0;
|
|
|
|
local_1a = 0;
|
|
|
|
local_19 = 1;
|
|
|
|
FUN_00405000("stringtable");
|
|
|
|
local_14 = 1;
|
|
|
|
local_13 = 0;
|
|
|
|
local_12 = 1;
|
|
|
|
local_11 = 0;
|
|
|
|
local_10 = 0;
|
|
|
|
local_f = 0;
|
|
|
|
local_c = 0;
|
|
|
|
local_b = 1;
|
|
|
|
local_8 = 3;
|
|
|
|
local_4 = 0xf;
|
|
|
|
local_e = 1;
|
|
|
|
FUN_0041f900(&DAT_00796590,local_3c + 1);
|
|
|
|
local_28 = 0;
|
|
|
|
local_3c[1] = 0x78000000;
|
|
|
|
local_3c[2] = 0x7fffffff;
|
|
|
|
FUN_00401340(".dbpc");
|
|
|
|
FUN_0040c440(local_3c);
|
|
|
|
puVar2 = (undefined4 *)(local_3c[0] + -0x14);
|
|
|
|
LVar1 = InterlockedDecrement((LONG *)(local_3c[0] + -0x10));
|
|
|
|
if ((LVar1 == 0) && (puVar2 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar2)(1);
|
|
|
|
}
|
|
|
|
FUN_00401340(".pmat");
|
|
|
|
FUN_0040c440(local_3c);
|
|
|
|
LVar1 = InterlockedDecrement((LONG *)(local_3c[0] + -0x10));
|
|
|
|
if ((LVar1 == 0) && ((undefined4 *)(local_3c[0] + -0x14) != (undefined4 *)0x0)) {
|
|
|
|
(*(code *)**(undefined4 **)(local_3c[0] + -0x14))(1);
|
|
|
|
}
|
|
|
|
local_24 = 1;
|
|
|
|
local_20 = 1;
|
|
|
|
local_1c = 1;
|
|
|
|
local_1b = 1;
|
|
|
|
local_1a = 0;
|
|
|
|
local_19 = 0;
|
|
|
|
FUN_00405000("properties");
|
|
|
|
local_14 = 1;
|
|
|
|
local_13 = 1;
|
|
|
|
local_12 = 1;
|
|
|
|
local_11 = 0;
|
|
|
|
local_10 = 0;
|
|
|
|
local_f = 0;
|
|
|
|
local_c = 0;
|
|
|
|
local_b = 1;
|
|
|
|
local_8 = 3;
|
|
|
|
local_4 = 0xf;
|
|
|
|
local_e = 0;
|
|
|
|
FUN_0041f900(&DAT_00796594,local_3c + 1);
|
|
|
|
local_28 = 0;
|
|
|
|
LVar1 = InterlockedDecrement((LONG *)(local_18 + -0x10));
|
|
|
|
if ((LVar1 == 0) && ((undefined4 *)(local_18 + -0x14) != (undefined4 *)0x0)) {
|
|
|
|
(*(code *)**(undefined4 **)(local_18 + -0x14))(1);
|
|
|
|
}
|
|
|
|
if (((uStack_2c & 0x80000000) == 0x80000000) && (local_3c[3] != 0)) {
|
|
|
|
FUN_00407920(3);
|
|
|
|
}
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|