// Recovered decompilation of functions attributed to bt/mech.cpp // (from BTL4OPT.EXE via embedded assert paths). Pseudocode — reconstruct against the header. /* ---- @ 004a1674 ---- */ /* WARNING: Globals starting with '_' overlap smaller symbols at the same address */ int * __cdecl FUN_004a1674(int *param_1,int param_2,undefined4 param_3) { int *piVar1; char cVar2; int iVar3; undefined4 uVar4; int *piVar5; int iVar6; uint *puVar7; int iVar8; undefined4 *puVar9; uint uVar10; uint uVar11; char *pcVar12; char *pcVar13; int local_1f8 [6]; int local_1e0 [6]; int local_1c8 [6]; char local_1b0 [32]; int local_190 [3]; int local_184 [7]; undefined4 local_168 [2]; int *local_160; int *local_158; int local_154; int *local_150; int *local_14c; int *local_148; int *local_144; int *local_140; int *local_13c; undefined4 *local_138; undefined4 *local_134; int local_130; uint *local_12c; int local_128; int local_124; undefined4 local_120; uint *local_11c; char *local_118; int local_114; undefined4 local_110; int local_10c; float *local_108; float local_104; float local_100; float *local_fc; float local_f8; float local_f4; float local_f0; float local_ec; float local_e8; float local_e4; float local_e0; float local_dc; float local_d8; float local_d4; float local_d0; float local_cc; float local_c8; float local_c4; float local_c0; float local_bc; float local_b8; int *local_b4; undefined4 *local_b0; int local_ac; undefined4 *local_a8; undefined4 *local_a4; int *local_a0; int *local_9c; int *local_98; int *local_94; int *local_90; int *local_8c; int *local_88; int *local_84; int *local_80; int *local_7c; int *local_78; int *local_74; int *local_70; int *local_6c; int *local_68; int *local_64; int *local_60; int *local_5c; int local_58; int local_54; int local_50; int local_4c; int local_48; int *local_44; float *local_40; int *local_3c; int *local_38; int *local_34; int *local_30; int *local_2c; int *local_28; int *local_24; undefined4 *local_20; undefined4 *local_1c; undefined4 *local_18; int *local_14; int *local_10; int *local_c; int *local_8; FUN_00424e38(param_1,param_2,param_3); *param_1 = (int)&PTR_FUN_0050cfa8; local_8 = param_1 + 0xd8; FUN_00435a7c(param_1 + 0xdb); FUN_0041b9ec(param_1 + 0xe7,0x21); param_1[0xff] = 0; param_1[0x100] = DAT_005209d0; param_1[0x104] = 0; FUN_004a4d60(param_1 + 0x106,0); FUN_00420ea4(param_1 + 0x10f,param_1 + 0x61); FUN_0041b9ec(param_1 + 0x114,3); param_1[0x12a] = 0; param_1[299] = 0; param_1[300] = 0x3f800000; FUN_0041b9ec(param_1 + 0x131,2); local_c = param_1 + 0x163; local_10 = param_1 + 0x166; FUN_00427768(param_1 + 0x197,(int)param_1); FUN_00427768(param_1 + 0x1af,(int)param_1); FUN_0041b9ec(param_1 + 0x1c5,0x21); param_1[0x1e8] = 0; param_1[0x1e9] = 0; param_1[0x1ea] = 0; FUN_004a4dab(param_1 + 0x1eb,0); FUN_004a4df6(param_1 + 0x1ef,0); FUN_004a4e41(param_1 + 499,0); FUN_0043ad4f((uint *)(param_1 + 0x1f8),0xf,0); FUN_0043ad4f((uint *)(param_1 + 0x1fb),0xf,0); FUN_0043ad4f((uint *)(param_1 + 0x1fe),0xf,0); FUN_0043ad4f((uint *)(param_1 + 0x201),0xf,0); FUN_0043ad4f((uint *)(param_1 + 0x204),0xf,0); local_14 = param_1 + 0x20e; local_18 = (undefined4 *)FUN_00402298(0x10); if (local_18 == (undefined4 *)0x0) { iVar3 = 0; } else { iVar3 = FUN_004023f4(local_18); } param_1[0x211] = iVar3; piVar1 = (int *)(param_1[0x211] + 0xc); *piVar1 = *piVar1 + 1; local_1c = (undefined4 *)FUN_00402298(0x10); if (local_1c == (undefined4 *)0x0) { iVar3 = 0; } else { iVar3 = FUN_004023f4(local_1c); } param_1[0x212] = iVar3; piVar1 = (int *)(param_1[0x212] + 0xc); *piVar1 = *piVar1 + 1; local_20 = (undefined4 *)FUN_00402298(0x10); if (local_20 == (undefined4 *)0x0) { iVar3 = 0; } else { iVar3 = FUN_004023f4(local_20); } param_1[0x213] = iVar3; piVar1 = (int *)(param_1[0x213] + 0xc); *piVar1 = *piVar1 + 1; param_1[10] = param_1[10] | 0x10; param_1[0x14a] = 0; param_1[0x10e] = 0; param_1[0x16d] = 0; param_1[0xca] = 0; param_1[0xcb] = 0; param_1[0xcc] = 0; param_1[0xcd] = 0; param_1[0xce] = 0; param_1[0xcf] = 0; param_1[0x153] = 0; param_1[0x154] = 0; param_1[0x155] = 0; param_1[0x156] = 0; param_1[0x157] = 0; param_1[0x158] = 0; param_1[0xd0] = 0; local_24 = (int *)FUN_00414b60(); local_28 = param_1 + 0x1de; *local_28 = *local_24; param_1[0xd2] = 0; param_1[0x1ae] = 0; param_1[0x1ad] = 0; FUN_0040a938(param_1 + 0x98,param_1 + 0x40); FUN_0040a938(param_1 + 0x4b,param_1 + 0x40); local_2c = param_1 + 0x40; local_30 = param_1 + 0x163; FUN_00408440(local_30,local_2c); FUN_0040a7f4(param_1 + 0x71,(undefined4 *)&DAT_004e0fd4); FUN_0040a7f4(param_1 + 0xa6,(undefined4 *)&DAT_004e0fd4); FUN_0040a7f4(param_1 + 0xb2,(undefined4 *)&DAT_004e0fd4); FUN_0040a7f4(param_1 + 0x77,(undefined4 *)&DAT_004e0fd4); local_34 = param_1 + 0x7d; FUN_00408440(local_34,&DAT_004e0f74); local_38 = param_1 + 0x80; FUN_00408440(local_38,&DAT_004e0f74); local_3c = param_1 + 0x40; local_40 = (float *)(param_1 + 0x34); FUN_0040ab44(local_40,local_3c); local_44 = param_1 + 0x166; FUN_00408440(local_44,&DAT_004e0f74); param_1[0x169] = 0; param_1[0xe6] = 0; param_1[0x1df] = 0; param_1[0xfe] = 0; param_1[0xfc] = 0; param_1[0x105] = 0; FUN_00408e90(param_1 + 0xd8,&DAT_004e0f8c); param_1[0x160] = 0; param_1[0x15f] = 0; param_1[0x194] = 0; param_1[0x207] = 0; param_1[0x208] = 0; param_1[0x20a] = 0; FUN_0040a7f4(param_1 + 0x20b,(undefined4 *)&DAT_004e0fd4); param_1[0x1e7] = 0; param_1[0x1dd] = 0; param_1[0x209] = 0; param_1[0xd5] = 0; param_1[0xd6] = 0; param_1[0xd7] = 0; param_1[0x12d] = 0; param_1[0x129] = 2; param_1[0x1e0] = param_1[0x119]; FUN_0041bbd8((int)(param_1 + 0x131),1); FUN_0041bbd8((int)(param_1 + 0x131),param_1[0x136]); local_50 = param_1[0xbb]; param_1[0x146] = *(int *)(local_50 + 0xc); param_1[0x147] = (int)((float)_DAT_004a2d38 * (float)param_1[0x146]); param_1[0x16a] = 0x3f800000; param_1[0x16b] = 0x3f800000; local_54 = param_1[0x65]; local_4c = local_50; local_48 = FUN_00433ed4(*(int *)(DAT_004efc94 + 0x30) + 0x14); param_1[0x94] = *(int *)(local_48 + 0x34) + 0x2c; if ((param_1[10] & 0xcU) == 4) { param_1[7] = (int)PTR_LAB_0050c0e8; param_1[8] = DAT_0050c0ec; param_1[9] = DAT_0050c0f0; } else { param_1[7] = (int)PTR_LAB_0050c0f4; param_1[8] = DAT_0050c0f8; param_1[9] = DAT_0050c0fc; } param_1[0x101] = 0x447a0000; param_1[0x102] = 0; param_1[0x103] = (int)(param_1 + 0x43); local_58 = FUN_00407064(*(int *)(DAT_004efc94 + 0x68),param_1[0x6f],0x11); iVar3 = *(int *)(local_58 + 4); *(int *)(local_58 + 4) = *(int *)(local_58 + 4) + 1; if (iVar3 == 0) { FUN_00406cd0(local_58); } FUN_004030dc(local_168,*(undefined4 *)(local_58 + 0x3c),*(undefined4 *)(local_58 + 0x40),0); param_1[0x49] = *local_160 + 2; local_160 = local_160 + 1; iVar3 = FUN_004022b0(param_1[0x49] << 2); param_1[0x4a] = iVar3; *(undefined4 *)param_1[0x4a] = 0; uVar4 = FUN_00417ab4((int)(param_1 + 199)); *(undefined4 *)(param_1[0x4a] + 4) = uVar4; param_1[0x12e] = (int)((*(float *)(param_1[0xba] + 4) - *(float *)param_1[0xba]) * _DAT_004a2d40); *(float *)(param_1[0xbb] + 8) = (float)param_1[0x12e] + *(float *)(param_1[0xbb] + 8); param_1[0x112] = 0; param_1[0x10d] = 0; for (iVar3 = 2; piVar1 = local_160, iVar3 < param_1[0x49]; iVar3 = iVar3 + 1) { *(undefined4 *)(param_1[0x4a] + iVar3 * 4) = 0; if (((*(byte *)(local_160 + 0xb) & 4) == 0) || ((param_1[10] & 0xcU) != 4)) { switch(local_160[8]) { case 0xbbd: local_64 = (int *)FUN_00402298(0x230); if (local_64 == (int *)0x0) { piVar5 = (int *)0x0; } else { piVar5 = FUN_004ae568(local_64,(int)param_1,iVar3,(char *)piVar1); } *(int **)(param_1[0x4a] + iVar3 * 4) = piVar5; break; case 0xbbe: local_5c = (int *)FUN_00402298(0x1e4); if (local_5c == (int *)0x0) { piVar5 = (int *)0x0; } else { piVar5 = FUN_004ae8d0(local_5c,(int)param_1,iVar3,(char *)piVar1); } *(int **)(param_1[0x4a] + iVar3 * 4) = piVar5; param_1[0x1f7] = *(int *)(param_1[0x4a] + iVar3 * 4); break; default: FUN_0040385c(s_Unknown_subsystem_resource_>clas_0050c411,s_d__tesla_bt_bt_MECH_CPP_0050c436, 0x936); break; case 0xbc0: local_60 = (int *)FUN_00402298(0x230); if (local_60 == (int *)0x0) { piVar5 = (int *)0x0; } else { piVar5 = FUN_004af408(local_60,(int)param_1,iVar3,(char *)piVar1,&DAT_0050e640); } *(int **)(param_1[0x4a] + iVar3 * 4) = piVar5; break; case 0xbc1: local_70 = (int *)FUN_00402298(0x250); if (local_70 == (int *)0x0) { piVar5 = (int *)0x0; } else { piVar5 = FUN_004b225c(local_70,(int)param_1,iVar3,(char *)piVar1); } *(int **)(param_1[0x4a] + iVar3 * 4) = piVar5; break; case 0xbc2: local_68 = (int *)FUN_00402298(0x31c); if (local_68 == (int *)0x0) { piVar5 = (int *)0x0; } else { piVar5 = FUN_004b0f74(local_68,(int)param_1,iVar3,(char *)piVar1,&DAT_0050f4ac,0,0); } *(int **)(param_1[0x4a] + iVar3 * 4) = piVar5; break; case 0xbc3: local_80 = (int *)FUN_00402298(0x328); if (local_80 == (int *)0x0) { piVar5 = (int *)0x0; } else { piVar5 = FUN_004b1d18(local_80,(int)param_1,iVar3,(char *)piVar1); } *(int **)(param_1[0x4a] + iVar3 * 4) = piVar5; break; case 0xbc4: local_84 = (int *)FUN_00402298(0x3d0); if (local_84 == (int *)0x0) { piVar5 = (int *)0x0; } else { piVar5 = FUN_004b3778(local_84,(int)param_1,iVar3,(char *)piVar1); } *(int **)(param_1[0x4a] + iVar3 * 4) = piVar5; param_1[0x14a] = *(int *)(param_1[0x4a] + iVar3 * 4); break; case 0xbc5: local_88 = (int *)FUN_00402298(0x280); if (local_88 == (int *)0x0) { piVar5 = (int *)0x0; } else { piVar5 = FUN_004b6b0c(local_88,(int)param_1,iVar3,(char *)piVar1); } *(int **)(param_1[0x4a] + iVar3 * 4) = piVar5; param_1[0x10e] = *(int *)(param_1[0x4a] + iVar3 * 4); break; case 0xbc6: local_6c = (int *)FUN_00402298(0x358); if (local_6c == (int *)0x0) { piVar5 = (int *)0x0; } else { piVar5 = FUN_004b8fec(local_6c,(int)param_1,iVar3,(char *)piVar1); } *(int **)(param_1[0x4a] + iVar3 * 4) = piVar5; break; case 0xbc8: local_8c = (int *)FUN_00402298(0x478); if (local_8c == (int *)0x0) { piVar5 = (int *)0x0; } else { piVar5 = FUN_004bb120(local_8c,(int)param_1,iVar3,(char *)piVar1,&DAT_00511d78); } *(int **)(param_1[0x4a] + iVar3 * 4) = piVar5; param_1[0x112] = param_1[0x112] + 1; break; case 0xbcb: local_a0 = (int *)FUN_00402298(0x22c); if (local_a0 == (int *)0x0) { piVar5 = (int *)0x0; } else { piVar5 = FUN_004bd5c4(local_a0,(int)param_1,iVar3,(char *)piVar1); } *(int **)(param_1[0x4a] + iVar3 * 4) = piVar5; break; case 0xbcd: local_94 = (int *)FUN_00402298(0x448); if (local_94 == (int *)0x0) { piVar5 = (int *)0x0; } else { piVar5 = FUN_004bc3fc(local_94,(int)param_1,iVar3,(char *)piVar1,&DAT_00512198); } *(int **)(param_1[0x4a] + iVar3 * 4) = piVar5; param_1[0x112] = param_1[0x112] + 1; break; case 0xbce: local_9c = (int *)FUN_00402298(0x484); if (local_9c == (int *)0x0) { piVar5 = (int *)0x0; } else { piVar5 = FUN_004bdcb4(local_9c,(int)param_1,iVar3,(char *)piVar1,&DAT_005128a8); } *(int **)(param_1[0x4a] + iVar3 * 4) = piVar5; param_1[0x112] = param_1[0x112] + 1; break; case 0xbd0: local_98 = (int *)FUN_00402298(0x44c); if (local_98 == (int *)0x0) { piVar5 = (int *)0x0; } else { piVar5 = FUN_004bcff0(local_98,(int)param_1,iVar3,(char *)piVar1,&DAT_00512478); } *(int **)(param_1[0x4a] + iVar3 * 4) = piVar5; param_1[0x112] = param_1[0x112] + 1; break; case 0xbd3: local_a4 = (undefined4 *)FUN_00402298(0x130); if (local_a4 == (undefined4 *)0x0) { puVar9 = (undefined4 *)0x0; } else { puVar9 = FUN_0049bca4(local_a4,param_1,iVar3,(char *)piVar1,&DAT_0050b6bc); } *(undefined4 **)(param_1[0x4a] + iVar3 * 4) = puVar9; param_1[0x10d] = *(int *)(param_1[0x4a] + iVar3 * 4); break; case 0xbd4: local_90 = (int *)FUN_00402298(0x478); if (local_90 == (int *)0x0) { piVar5 = (int *)0x0; } else { piVar5 = FUN_004bb888(local_90,(int)param_1,iVar3,(char *)piVar1,&DAT_005120c4); } *(int **)(param_1[0x4a] + iVar3 * 4) = piVar5; param_1[0x112] = param_1[0x112] + 1; break; case 0xbd6: local_74 = (int *)FUN_00402298(0x2a4); if (local_74 == (int *)0x0) { piVar5 = (int *)0x0; } else { piVar5 = FUN_004b7f94(local_74,(int)param_1,iVar3,(char *)piVar1); } *(int **)(param_1[0x4a] + iVar3 * 4) = piVar5; param_1[0x16d] = *(int *)(param_1[0x4a] + iVar3 * 4); break; case 0xbd8: local_78 = (int *)FUN_00402298(0x238); if (local_78 == (int *)0x0) { piVar5 = (int *)0x0; } else { piVar5 = FUN_004b84dc(local_78,(int)param_1,iVar3,(char *)piVar1); } *(int **)(param_1[0x4a] + iVar3 * 4) = piVar5; break; case 0xbdc: local_a8 = (undefined4 *)FUN_00402298(0x104); if (local_a8 == (undefined4 *)0x0) { puVar9 = (undefined4 *)0x0; } else { puVar9 = FUN_004ad228(local_a8,(int)param_1,iVar3,(char *)piVar1,&DAT_0050e270); } *(undefined4 **)(param_1[0x4a] + iVar3 * 4) = puVar9; break; case 0xbde: local_7c = (int *)FUN_00402298(0x234); if (local_7c == (int *)0x0) { piVar5 = (int *)0x0; } else { piVar5 = FUN_004b8718(local_7c,(int)param_1,iVar3,(char *)piVar1); } *(int **)(param_1[0x4a] + iVar3 * 4) = piVar5; } } local_160 = (int *)((int)local_160 + piVar1[9]); } param_1[0x112] = 2; if ((param_1[0x10e] != 0) && (param_1[0x14a] != 0)) { local_ac = param_1[0x10e] + 0x1d8; *(int *)(param_1[0x14a] + 600) = local_ac; } for (iVar3 = 2; iVar3 < param_1[0x49]; iVar3 = iVar3 + 1) { piVar1 = *(int **)(param_1[0x4a] + iVar3 * 4); if ((piVar1 != (int *)0x0) && (iVar8 = FUN_0041a1a4(*(int *)piVar1[3],0x50e604), iVar8 != 0)) { (**(code **)(*piVar1 + 0x38))(piVar1); } } for (iVar3 = 2; iVar3 < param_1[0x49]; iVar3 = iVar3 + 1) { iVar8 = *(int *)(param_1[0x4a] + iVar3 * 4); if ((iVar8 != 0) && (iVar6 = FUN_0041a1a4(**(int **)(iVar8 + 0xc),0x51155c), iVar6 != 0)) { (**(code **)(param_1[0x1eb] + 4))(param_1 + 0x1eb,iVar8); } } for (iVar3 = 2; iVar3 < param_1[0x49]; iVar3 = iVar3 + 1) { iVar8 = *(int *)(param_1[0x4a] + iVar3 * 4); if ((iVar8 != 0) && (iVar6 = FUN_0041a1a4(**(int **)(iVar8 + 0xc),0x511830), iVar6 != 0)) { (**(code **)(param_1[0x1ef] + 4))(param_1 + 0x1ef,iVar8); param_1[0x104] = param_1[0x104] | *(uint *)(iVar8 + 0x334); } } for (iVar3 = 2; iVar3 < param_1[0x49]; iVar3 = iVar3 + 1) { iVar8 = *(int *)(param_1[0x4a] + iVar3 * 4); if ((iVar8 != 0) && (iVar6 = FUN_0041a1a4(**(int **)(iVar8 + 0xc),0x50e4fc), iVar6 != 0)) { (**(code **)(param_1[499] + 4))(param_1 + 499,iVar8); } } *(int *)(local_58 + 4) = *(int *)(local_58 + 4) + -1; local_58 = FUN_00407064(*(int *)(DAT_004efc94 + 0x68),param_1[0x6f],0xf); iVar3 = *(int *)(local_58 + 4); *(int *)(local_58 + 4) = *(int *)(local_58 + 4) + 1; if (iVar3 == 0) { FUN_00406cd0(local_58); } iVar3 = *(int *)(local_58 + 0x3c); local_b4 = param_1 + 0x68; local_b0 = (undefined4 *)(iVar3 + 0xa8); param_1[0x130] = *(int *)(iVar3 + 0x74); FUN_00408440(local_b4,local_b0); param_1[0x148] = *(int *)(iVar3 + 0x78); param_1[0x149] = *(int *)(iVar3 + 0x7c); param_1[0x195] = 0; param_1[0x196] = 0; param_1[0xfd] = 0; FUN_0041bbd8((int)(param_1 + 0xe7),0); FUN_0041bbd8((int)(param_1 + 0x1c5),0); param_1[0xd1] = *(int *)(iVar3 + 0x44); param_1[0x16c] = param_1[0xd1]; param_1[0x16e] = param_1[0xd1]; param_1[0x16f] = *(int *)(iVar3 + 0x48); param_1[0x170] = *(int *)(iVar3 + 0x4c); param_1[0x12f] = *(int *)(iVar3 + 0x70); param_1[0x1e1] = *(int *)(iVar3 + 0x80); param_1[0x1e2] = *(int *)(iVar3 + 0x84); param_1[0x1e3] = *(int *)(iVar3 + 0x88); param_1[0x1e4] = *(int *)(iVar3 + 0x8c); param_1[0x1e5] = *(int *)(iVar3 + 0x90); param_1[0x1e6] = *(int *)(iVar3 + 0x94); local_d0 = *(float *)(iVar3 + 0x50); local_bc = local_d0 * _DAT_004a2d44; param_1[0x159] = (int)local_bc; local_d8 = *(float *)(iVar3 + 0x54); local_b8 = local_d8 * _DAT_004a2d44; param_1[0x15a] = (int)local_b8; local_e0 = *(float *)(iVar3 + 0x58); local_c0 = local_e0 * _DAT_004a2d44; param_1[0x15b] = (int)local_c0; local_e8 = *(float *)(iVar3 + 0x5c); local_c4 = local_e8 * _DAT_004a2d44; param_1[0x15c] = (int)local_c4; local_f0 = *(float *)(iVar3 + 0xa0); local_c8 = local_f0 * _DAT_004a2d44; param_1[0x1dc] = (int)local_c8; param_1[0x1db] = *(int *)(iVar3 + 0x9c); param_1[0x1da] = *(int *)(iVar3 + 0x98); param_1[0x10c] = *(int *)(iVar3 + 0xa4); local_fc = (float *)(param_1 + 0x15d); local_f8 = *(float *)(iVar3 + 0x60); *local_fc = local_f8 * _DAT_004a2d44; local_104 = *(float *)(iVar3 + 100); local_108 = (float *)(param_1 + 0x15e); *local_108 = local_104 * _DAT_004a2d44; local_100 = local_104; local_f4 = local_f8; local_ec = local_f0; local_e4 = local_e8; local_dc = local_e0; local_d4 = local_d8; local_cc = local_d0; local_10c = FUN_00417ab4((int)(param_1 + 199)); local_118 = (char *)(iVar3 + 0xb4); local_11c = (uint *)FUN_00402298(0x10); if (local_11c == (uint *)0x0) { puVar7 = (uint *)0x0; } else { puVar7 = FUN_00402460(local_11c,local_118); } puVar7[3] = puVar7[3] + 1; local_114 = FUN_00424b60((int)param_1,(int *)puVar7); local_120 = *(undefined4 *)(local_114 + 0xc0); local_110 = local_120; FUN_0041d3b3(local_184,local_10c + 0xe4); iVar8 = (**(code **)(local_184[0] + 0x34))(local_184,local_120); FUN_0041d3d2(local_184,2); param_1[0x10b] = iVar8; local_124 = FUN_004dee74(s_L4VIEWEXT_0050c44e); if (local_124 == 0) { if ((param_1[10] & 0xcU) == 4) { FUN_004a80d4((int)param_1,iVar3); } else { FUN_004a86c8((int)param_1,iVar3); } } else { param_1[0x15f] = 1; FUN_004a80d4((int)param_1,iVar3); } FUN_004a4f9e(local_190,(int)(param_1 + 0x1eb)); while (iVar8 = (**(code **)(local_190[0] + 0x28))(local_190), iVar8 != 0) { FUN_004b8ef0(iVar8); param_1[0x1e9] = 1; } FUN_004283b8((int)(param_1 + 0x197),1); local_12c = (uint *)FUN_00402298(0x10); if (local_12c == (uint *)0x0) { puVar7 = (uint *)0x0; } else { puVar7 = FUN_00402460(local_12c,s_jointlocal_0050c458); } puVar7[3] = puVar7[3] + 1; local_128 = FUN_00424b60((int)param_1,(int *)puVar7); param_1[0x172] = *(int *)(local_128 + 0xc0); param_1[0xe5] = 0; param_1[0xdd] = 1; param_1[0xde] = 1; param_1[0xdb] = *(int *)(iVar3 + 0x68); param_1[0xdc] = *(int *)(iVar3 + 0x6c); *(int *)(local_58 + 4) = *(int *)(local_58 + 4) + -1; local_130 = FUN_00407064(*(int *)(DAT_004efc94 + 0x68),param_1[0x6f],0x14); iVar3 = *(int *)(local_130 + 4); *(int *)(local_130 + 4) = *(int *)(local_130 + 4) + 1; if (iVar3 == 0) { FUN_00406cd0(local_130); } uVar10 = 0xffffffff; pcVar12 = (char *)(local_130 + 0xc); do { pcVar13 = pcVar12; if (uVar10 == 0) break; uVar10 = uVar10 - 1; pcVar13 = pcVar12 + 1; cVar2 = *pcVar12; pcVar12 = pcVar13; } while (cVar2 != '\0'); uVar10 = ~uVar10; pcVar12 = pcVar13 + -uVar10; pcVar13 = local_1b0; for (uVar11 = uVar10 >> 2; uVar11 != 0; uVar11 = uVar11 - 1) { *(undefined4 *)pcVar13 = *(undefined4 *)pcVar12; pcVar12 = pcVar12 + 4; pcVar13 = pcVar13 + 4; } for (uVar10 = uVar10 & 3; uVar10 != 0; uVar10 = uVar10 - 1) { *pcVar13 = *pcVar12; pcVar12 = pcVar12 + 1; pcVar13 = pcVar13 + 1; } FUN_004032dc(local_1c8,*(undefined4 *)(local_130 + 0x3c),*(undefined4 *)(local_130 + 0x40),0); (**(code **)(local_1c8[0] + 0x14))(local_1c8,4); for (iVar3 = 0; iVar3 < param_1[0x47]; iVar3 = iVar3 + 1) { puVar9 = (undefined4 *)FUN_00402298(0x1b8); if (puVar9 == (undefined4 *)0x0) { puVar9 = (undefined4 *)0x0; } else { puVar9 = FUN_0049ce50(puVar9,(int)param_1,iVar3,local_1c8); } *(undefined4 **)(param_1[0x48] + iVar3 * 4) = puVar9; } for (iVar3 = 0; iVar3 < param_1[0x47]; iVar3 = iVar3 + 1) { FUN_0049d1d0(*(int *)(param_1[0x48] + iVar3 * 4)); } *(int *)(local_130 + 4) = *(int *)(local_130 + 4) + -1; iVar3 = FUN_00407064(*(int *)(DAT_004efc94 + 0x68),param_1[0x6f],0x1e); param_1[0x214] = 0; if (iVar3 != 0) { iVar8 = *(int *)(iVar3 + 4); *(int *)(iVar3 + 4) = *(int *)(iVar3 + 4) + 1; if (iVar8 == 0) { FUN_00406cd0(iVar3); } FUN_004032dc(local_1e0,*(undefined4 *)(iVar3 + 0x3c),*(undefined4 *)(iVar3 + 0x40),0); for (iVar8 = 0; iVar8 < param_1[0x47]; iVar8 = iVar8 + 1) { FUN_0041e4a8(*(int *)(param_1[0x48] + iVar8 * 4),local_1e0); } local_134 = (undefined4 *)FUN_00402298(0x18); if (local_134 == (undefined4 *)0x0) { puVar9 = (undefined4 *)0x0; } else { puVar9 = FUN_0042a984(local_134,(int)param_1); } param_1[0x214] = (int)puVar9; *(int *)(iVar3 + 4) = *(int *)(iVar3 + 4) + -1; FUN_00403310(local_1e0,2); } iVar8 = FUN_00406ff8(*(int *)(DAT_004efc94 + 0x68),local_1b0,0x1d,-1); iVar3 = *(int *)(iVar8 + 4); *(int *)(iVar8 + 4) = *(int *)(iVar8 + 4) + 1; if (iVar3 == 0) { FUN_00406cd0(iVar8); } FUN_004032dc(local_1f8,*(undefined4 *)(iVar8 + 0x3c),*(undefined4 *)(iVar8 + 0x40),0); local_138 = (undefined4 *)FUN_00402298(0x2c); if (local_138 == (undefined4 *)0x0) { puVar9 = (undefined4 *)0x0; } else { puVar9 = FUN_0049ea48(local_138,(int)param_1,local_1f8); } param_1[0x111] = (int)puVar9; *(int *)(iVar8 + 4) = *(int *)(iVar8 + 4) + -1; FUN_00402a98((int *)&local_13c,param_1 + 0x211,(char *)(param_2 + 0x7c)); local_140 = local_13c; piVar1 = local_13c + 3; *piVar1 = *piVar1 + -1; if (*piVar1 == 0) { FUN_004024d8(local_13c,3); } FUN_00402a98((int *)&local_144,param_1 + 0x212,(char *)(param_2 + 0x90)); local_148 = local_144; piVar1 = local_144 + 3; *piVar1 = *piVar1 + -1; if (*piVar1 == 0) { FUN_004024d8(local_144,3); } FUN_00402a98((int *)&local_14c,param_1 + 0x213,(char *)(param_2 + 0xa4)); local_150 = local_14c; piVar1 = local_14c + 3; *piVar1 = *piVar1 + -1; if (*piVar1 == 0) { FUN_004024d8(local_14c,3); } local_154 = *(int *)(DAT_004efc94 + 0x24); puVar9 = (undefined4 *)FUN_00403ad0(local_154 + 0x18,s_Mechs_0050c463); if (puVar9 == (undefined4 *)0x0) { puVar9 = FUN_004212b0(local_154,s_Mechs_0050c469); } local_158 = param_1; (**(code **)(puVar9[4] + 4))(puVar9 + 4,param_1); FUN_0049f788((int)param_1); FUN_00403310(local_1f8,2); FUN_00403310(local_1c8,2); FUN_004a4ffb(local_190,2); return param_1; }