char __userpurge sub_D5ABE0(char a1, int a2, int a3, int a4, int a5, int a6) { int v6; // ebp@1 int v7; // edi@1 int v8; // esi@1 char v9; // bl@3 char v10; // al@4 int v11; // edi@14 int v12; // ST0C_4@14 int v13; // ST10_4@14 int v14; // eax@15 int v15; // eax@15 char v16; // bl@17 int v17; // esi@19 char result; // al@23 int v33; // ecx@24 char v34; // al@25 int v35; // esi@30 int v36; // eax@31 int v37; // eax@31 int v38; // ebx@34 int v39; // edi@34 int v40; // esi@34 int v41; // ST10_4@35 int v42; // eax@35 int v43; // eax@36 int v51; // esi@43 int v66; // [sp-8h] [bp-5Ch]@39 int v67; // [sp-4h] [bp-58h]@39 char v68; // [sp+10h] [bp-44h]@3 int v69; // [sp+14h] [bp-40h]@24 int v70; // [sp+18h] [bp-3Ch]@30 int v71; // [sp+1Ch] [bp-38h]@14 int v72; // [sp+20h] [bp-34h]@15 int v73; // [sp+24h] [bp-30h]@11 int v74; // [sp+28h] [bp-2Ch]@19 int v75; // [sp+2Ch] [bp-28h]@41 char v76; // [sp+34h] [bp-20h]@23 char v77; // [sp+40h] [bp-14h]@34 int v78; // [sp+44h] [bp-10h]@34 int v79; // [sp+48h] [bp-Ch]@34 int v80; // [sp+4Ch] [bp-8h]@34 v6 = a4; v8 = a3; v7 = a2; a4 = 0; LOBYTE(a4) = 1; if ( !(unsigned __int8)sub_D5AB40(a5, a1) ) LOBYTE(a4) = 0; sub_662250(&v68, (int)&unk_154AF3F); v9 = 1; if ( !(unsigned __int8)sub_662080(&v68) || (sub_662250(&a6, (int)"*"), v9 = 3, v10 = sub_662080(&a6), LOBYTE(a3) = 1, !v10) ) LOBYTE(a3) = 0; if ( v9 & 2 ) { v9 &= 0xFDu; sub_661600(&a6); } if ( v9 & 1 ) { v9 &= 0xFEu; sub_661600(&v68); } if ( (_BYTE)a3 ) { sub_72F400(*(_DWORD *)v6); sub_72F680((int)&v73, v7, 0); if ( v73 ) { if ( !(*(_BYTE *)(v73 + 4) & 2) ) { if ( !(unsigned __int8)sub_6989B0() ) { sub_65FC90(dword_1E19864, 0); v11 = v71; sub_706710(&v73); sub_523A40(v11, v12, v13); sub_65FCF0(&v71); } } v72 = (int)"..\\..\\..\\source\\Main\\System\\GameObjectTerrain.cpp"; v71 = 130; v15 = sub_660DA0(&a3, 0); v14 = sub_6600A0(104, &v71, *(_DWORD *)v15); if ( v14 ) sub_711A00(v14); sub_711670(&v73); sub_550600(v8 + 208); sub_47FC00(&v73); v16 = a4; } else { v16 = 0; } v17 = v74; if ( v74 ) { _EAX = v74 + 4; _ECX = -1; __asm { lock xadd [eax], ecx } if ( _ZF ) { (*(void (__thiscall **)(int))(*(_DWORD *)v17 + 4))(v17); _ECX = v17 + 8; _EDX = -1; __asm { lock xadd [ecx], edx } if ( _ZF ) (*(void (__thiscall **)(int))(*(_DWORD *)v17 + 8))(v17); } } sub_72F2F0(&v76); result = v16; } else { v33 = *(_DWORD *)(v8 + 232) - *(_DWORD *)(v8 + 228); v69 = v8 + 224; if ( v33 & 0xFFFFFFF8 || (sub_662250(&a6, (int)"*"), v9 |= 4u, v34 = sub_6620E0(&a6), LOBYTE(a3) = 1, !v34) ) LOBYTE(a3) = 0; if ( v9 & 4 ) sub_661600(&a6); if ( (_BYTE)a3 ) { v35 = v8 + 208; v70 = v35; if ( !*(_DWORD *)v35 ) { v74 = (int)"..\\..\\..\\source\\Main\\System\\GameObjectTerrain.cpp"; v73 = 146; v37 = sub_660DA0(&a3, 0); v36 = sub_6600A0(104, &v73, *(_DWORD *)v37); if ( v36 ) sub_711A00(v36); sub_550600(v35); } v78 = 0; v79 = 0; v80 = 0; sub_692DB0(&v77); sub_662250(&v68, (int)&unk_154AF4E); sub_662250(&a3, (int)"Mirage.terrain-group "); sub_733430(&a6, &a3, &v68); sub_661600(&a3); sub_661600(&v68); v40 = v79; v39 = v78; v71 = v79; v38 = sub_661560(&a6); sub_72F400(*(_DWORD *)v6); if ( v39 != v40 ) { do { v41 = v39; v39 += 4; sub_6621F0(v41); v42 = sub_661640(&a6); if ( !sub_662920(v42) ) { v43 = sub_661640(&a3); sub_662250(&v68, v38 + v43); sub_72F680((int)&v73, (int)&v68, 0); sub_661600(&v68); if ( v73 ) { if ( !(*(_BYTE *)(v73 + 4) & 2) ) { if ( !(unsigned __int8)sub_6989B0() ) { v66 = v73; v67 = v74; if ( v74 ) { _EAX = v74 + 4; _ECX = 1; __asm { lock xadd [eax], ecx } } sub_65FC90(dword_1E19864, 0); sub_523A40(v75, v66, v67); sub_65FCF0(&v75); } } sub_47FC00(&v73); sub_717D70(&v76); sub_711670(&v73); } v51 = v74; if ( v74 ) { _EDX = v74 + 4; _EAX = -1; __asm { lock xadd [edx], eax } if ( _ZF ) { (*(void (__thiscall **)(int))(*(_DWORD *)v51 + 4))(v51); _ECX = v51 + 8; _EDX = -1; __asm { lock xadd [ecx], edx } if ( _ZF ) (*(void (__thiscall **)(int))(*(_DWORD *)v51 + 8))(v51); } } } sub_661600(&a3); } while ( v39 != v71 ); } sub_72F2F0(&v76); sub_661600(&a6); sub_40E180(&v77); } result = a4; } return result; }