Clean, self-contained extraction of the BattleTech-specific work from the
reverse-engineering workspace -- engine + game + content + build, with nothing
from Red Planet or the raw archive dumps. Builds green (Win32) and runs the
single-player drive->animate->target->fire->damage->destroy loop out of the box.
Layout:
engine/ MUNGA + MUNGA_L4 shared 2007 engine, carrying our BT render/loader
work (bgfload/L4D3D/L4VIDEO: BSL bit-slice decode, LOD/ground/shadow
models) + image codec; the minimal rp/ headers the audio HAL needs
game/ reconstructed BT logic + surviving-original BT source + fwd shims
+ WinMain launcher
content/ full runtime tree (BTL4.RES, VIDEO/, GAUGE/, AUDIO/, eggs, BTDPL.INI)
docs/ format specs + reconstruction ledgers
reference/ raw Ghidra pseudocode (recon source-of-truth) + decomp exporter
tools/ MP console emulator + map/resource scanners
One top-level CMake builds munga_engine lib + bt410_l4 game lib + btl4.exe.
All paths relativized (186 fwd shims + ~437 CMake abs paths -> repo-relative);
DXSDK is the one external, overridable via -DDXSDK. Verified: builds to a
byte-identical 2.27MB exe and runs combat (TARGET DESTROYED, 0 crashes) against
the bundled content.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
772 lines
24 KiB
C
772 lines
24 KiB
C
// 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;
|
|
}
|
|
|
|
|
|
|