/* This file was generated by the Hex-Rays decompiler. Copyright (c) 2007-2020 Hex-Rays Detected compiler: GNU C++ */ #include //------------------------------------------------------------------------- // Function declarations unsigned int __fastcall sub_80001C4(unsigned __int16 *a1); int __fastcall sub_80001DA(unsigned __int16 *a1); int __fastcall sub_80001F4(int result); unsigned __int16 *__fastcall sub_80001FA(unsigned __int16 *result, int a2); int __fastcall sub_800022C(unsigned __int16 *a1, int a2, signed int a3); int __fastcall sub_8000298(unsigned __int16 *a1, int a2, signed int a3); int __fastcall sub_8000304(int *a1, int a2, signed int a3); int __fastcall sub_800037E(int result, int a2, __int16 a3); _DWORD *__fastcall sub_800038A(unsigned int *a1); int __fastcall sub_80003C4(int result, char *a2, unsigned int a3); _DWORD *__fastcall sub_80003E4(_DWORD *result, int *a2, unsigned int a3); int sub_800046C(); void __noreturn sub_800051C(); void __noreturn sub_8000670(); void sub_8000680(); int __fastcall sub_8000688(int a1); unsigned int __fastcall sub_80009EC(unsigned int a1); int __fastcall sub_8000A18(int a1); int __fastcall sub_8000A32(int result, int a2, int a3); void __noreturn sub_8000A8C(); int __fastcall sub_8000AA6(int a1); int __fastcall sub_8000AE0(int *a1, unsigned int a2); int sub_8000BFC(); unsigned int sub_8000C14(); int __fastcall sub_8000C74(int result, char *a2, int a3); BOOL sub_8000CA4(); int sub_8000CE0(); int sub_8000D18(); int sub_8000D6C(); int sub_8000D72(void); // weak int sub_8000D76(); _DWORD *sub_8000D88(); int __fastcall sub_8000E28(int a1, int a2, int a3); unsigned int sub_8000E68(); unsigned int __fastcall sub_8000FE4(int a1, unsigned int a2); int sub_8001084(); int __fastcall sub_8001118(unsigned __int8 *a1, int a2); unsigned int sub_80011AE(); int sub_8001256(); int sub_8001282(); int __fastcall sub_80012BE(int result); int sub_80012C8(); unsigned int __fastcall sub_8001606(char *a1, unsigned int a2); int __fastcall sub_80016A4(char *a1, unsigned int a2); unsigned int sub_8002C58(); int __fastcall sub_8002CC0(unsigned __int16 *a1, int a2); int __fastcall sub_8002D8E(char *a1, unsigned int a2); int sub_8002E34(); int sub_8002E6E(); int __fastcall sub_8002E84(int a1); int sub_8002E98(); int __fastcall sub_8002F10(int a1, int a2, int a3, int a4, unsigned int a5); int __fastcall sub_8002FA4(int a1, int a2); int __fastcall sub_800301A(int a1, _DWORD *a2); int __fastcall sub_8003060(int a1); char *__fastcall sub_8003088(int a1, int a2); int __fastcall sub_800309A(int a1, int a2); int __fastcall sub_80031B4(int a1, int a2); int __fastcall sub_80031E8(int *a1, int a2); int __fastcall sub_8003290(int *a1); char *__fastcall sub_800336C(int *a1); char *__fastcall sub_8003390(int *a1); char *__fastcall sub_80033B4(int *a1); int __fastcall nullsub_1(_DWORD); // weak int __fastcall nullsub_2(_DWORD); // weak int __fastcall nullsub_3(_DWORD); // weak int __fastcall sub_80033DE(int *a1); int __fastcall sub_80033E2(int *a1); int __fastcall nullsub_4(_DWORD, _DWORD); // weak int __fastcall nullsub_5(_DWORD); // weak int __fastcall nullsub_6(_DWORD); // weak int __fastcall nullsub_7(_DWORD); // weak int __fastcall sub_80033EE(_DWORD *a1); int __fastcall sub_80034C8(int a1); int __fastcall sub_800357E(int result); int sub_80035B8(); int sub_80035D0(); int sub_80035DE(); int __fastcall sub_800362C(unsigned int a1); int sub_8003678(); int *__fastcall sub_80036F0(int *result, unsigned int a2, unsigned __int8 a3); int sub_800372C(); int __fastcall sub_8003738(unsigned int a1); int __fastcall sub_8003780(unsigned __int64 a1, unsigned __int64 a2); __int64 sub_80039B0(); _DWORD *__fastcall sub_80039E8(int *a1, _DWORD *a2); int __fastcall sub_8003BC4(int *a1); int __fastcall sub_8003C28(int a1); int __fastcall sub_8003C34(int a1, int a2); int __fastcall sub_8003C48(int a1, int a2); int __fastcall sub_8003C5A(int a1); int __fastcall sub_8003C62(int a1); int __fastcall sub_8003C92(_DWORD *a1); int __fastcall sub_8003CBC(int a1); int sub_8003CC4(); int sub_8003CCC(); int sub_8003CD4(); int __fastcall sub_8003CDC(int a1); int __fastcall sub_8003CE4(int a1); int __fastcall sub_8003D74(int a1); int __fastcall sub_8003D92(int a1, char a2, int a3, int a4); int __fastcall sub_8003DB4(int a1, char a2); int __fastcall sub_8003DD2(int a1, char a2); int __fastcall sub_8003DF0(int a1, int a2); int __fastcall sub_8003E0E(int a1, char a2); int __fastcall sub_8003E2C(int a1, char a2); int __fastcall sub_8003E4C(int a1, int a2); int __fastcall sub_8003E6A(int a1, char a2, int a3, int a4); int __fastcall sub_8003E88(int a1, char a2, int a3, int a4); int __fastcall sub_8003EA6(int a1, char a2); int __fastcall sub_8003EB0(unsigned int a1, char *a2, unsigned int a3, char *a4); int __fastcall sub_8003F48(_DWORD *a1); int __fastcall sub_8003FBC(int a1); int __fastcall sub_8004040(int result, _BYTE *a2, _BYTE *a3); int __fastcall sub_800408C(__int16 a1, unsigned int a2, int a3); int __fastcall sub_80040B2(__int16 a1, unsigned int a2, char *a3); int __fastcall sub_80040D8(_DWORD *a1); int __fastcall sub_8004142(int a1); int __fastcall sub_800423C(int a1, int a2, char a3); int __fastcall sub_8004266(int a1, int a2); int __fastcall sub_8004276(int a1); int __fastcall sub_8004284(int a1); int __fastcall sub_800429A(int a1); int __fastcall sub_80042AC(int a1, _BYTE *a2); int __fastcall sub_8004310(int a1, int a2, int a3); int __fastcall sub_800439C(int a1, int a2, int a3); int __fastcall sub_8004468(int a1); int __fastcall sub_80044BE(int a1, char a2); int __fastcall sub_80044C4(int a1); int __fastcall sub_80044E2(int a1); int __fastcall sub_800450A(int a1); int __fastcall sub_8004528(int *a1); int __fastcall sub_80046D4(int a1); int __fastcall sub_8004714(int a1); int __fastcall sub_8004CE0(int a1, int a2); int __fastcall sub_8004D08(int a1, char a2, int a3, int a4); int __fastcall sub_8004D66(int a1, char a2); int __fastcall sub_8004DAE(int *a1, char a2, int a3, int a4); int __fastcall sub_8004E10(int *a1, char a2, int a3, int a4); int __fastcall sub_8004E5E(int a1, int a2); int __fastcall sub_8004ED6(int a1, char a2); int __fastcall sub_8004F2C(int a1, char a2); int __fastcall sub_8004F64(int *a1); int __fastcall sub_8005074(int a1, int a2); int __fastcall sub_800515E(int a1); int __fastcall sub_80051BA(int a1); int __fastcall sub_8005224(int *a1, int a2, unsigned __int8 *a3, _DWORD *a4); int __fastcall sub_8005300(int a1, char a2); int __fastcall sub_8005346(unsigned __int8 *a1, int a2); int __fastcall sub_8005368(int *a1, int a2, unsigned int *a3, int a4); int __fastcall sub_800547C(int a1, int a2); int __fastcall sub_80054A0(int *a1); int __fastcall sub_800569E(int a1); int __fastcall sub_80056A2(int a1); int __fastcall sub_80056C2(int a1, unsigned __int8 a2, unsigned int a3); int __fastcall sub_80056DC(int *a1, int a2, int a3); int __fastcall sub_800576A(int a1, int a2); int __fastcall nullsub_8(_DWORD); // weak int __fastcall sub_8005774(_DWORD *a1, _DWORD *a2, _DWORD *a3, _DWORD *a4); int __fastcall sub_80058D0(int a1, unsigned __int8 *a2); int __fastcall sub_80058F4(int a1, int *a2, int a3); int __fastcall sub_8005A6C(int a1, int a2); int __fastcall sub_8005D20(int a1, int a2); int __fastcall sub_8005D80(int a1, int a2); int __fastcall sub_8005EF2(int result, _BYTE *a2); unsigned __int8 *__fastcall sub_8005F1E(unsigned __int8 *result, _BYTE *a2, _WORD *a3); int __fastcall sub_8005FB4(_DWORD *a1, int a2, int a3); int __fastcall sub_8005FD2(int a1, int a2, int a3); int __fastcall sub_8005FE6(int a1, int a2, int a3); int __fastcall sub_8005FFA(int a1); int __fastcall sub_8006014(int a1); int __fastcall sub_8006030(_DWORD *a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9, int a10, int a11, int a12, int a13, int a14); int __fastcall sub_80060EA(int a1, int a2, int a3); int __fastcall sub_80061B6(int a1); int __fastcall sub_80061C2(int a1); int __fastcall sub_80061CE(int a1, int a2); int __fastcall sub_8006204(_DWORD *a1, unsigned int a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9, int a10, int a11, int a12); int __fastcall sub_800643E(int a1, int a2); int __fastcall sub_800645C(int a1); int __fastcall sub_8006476(int a1); int __fastcall sub_8006492(int a1, unsigned __int8 *a2); int __fastcall sub_8006508(int a1, unsigned __int8 *a2); int __fastcall sub_8006580(int a1, unsigned __int8 *a2, int a3); int __fastcall sub_800670A(int a1, unsigned __int8 *a2, int a3); int __fastcall sub_80067E0(int a1, int *a2, int a3, int a4, int a5); _DWORD *__fastcall sub_800680C(int a1, _DWORD *a2, int a3); int __fastcall sub_8006824(int a1, unsigned __int8 *a2); int __fastcall sub_8006854(int a1, unsigned __int8 *a2); int __fastcall sub_8006888(int a1, int a2); int __fastcall sub_80068A4(int a1); int __fastcall sub_80068C0(int a1); int __fastcall sub_80068DC(int a1); unsigned int __fastcall sub_80068E6(int a1); int __fastcall sub_80068F4(int a1); int __fastcall sub_8006902(int a1, int a2); int __fastcall sub_8006918(int a1, int a2); int __fastcall sub_800693E(int a1); int __fastcall sub_8006946(int a1); int __fastcall sub_8006974(int a1, int a2, int a3); int __fastcall sub_8006A28(int a1, unsigned int a2, unsigned __int8 a3); unsigned __int8 *sub_8006AA0(); int sub_8006AB0(); int __fastcall sub_8006AD4(int a1); int __fastcall sub_8006AE4(int a1, _WORD *a2); int __fastcall sub_8006AEC(int a1, _WORD *a2); int __fastcall sub_8006B00(int a1, _WORD *a2); int __fastcall sub_8006B88(int a1, _WORD *a2); int __fastcall sub_8006B9C(int a1, _WORD *a2); int __fastcall sub_8006BE0(int a1, int a2, int a3); int __fastcall sub_8006C84(int a1); int sub_8006CEE(); int sub_8006CF2(); int __fastcall sub_8006CF6(_DWORD *a1, int a2); int __fastcall sub_8006D46(int a1, int a2); void *__fastcall sub_8006DA6(_WORD *a1); void *__fastcall sub_8006DAE(_WORD *a1); void *__fastcall sub_8006DB6(_WORD *a1); void *__fastcall sub_8006DC4(_WORD *a1); int __fastcall sub_8006DCC(int a1); int sub_8006DF8(); void __noreturn sub_8006E1C(); int sub_8006E3A(); int *sub_8006E40(); void __noreturn sub_8006E68(); void __noreturn sub_8006E78(); void __noreturn sub_8006F9C(); void __noreturn sub_8006FA4(); void __noreturn start(); //------------------------------------------------------------------------- // Data declarations _UNKNOWN unk_8000000; // weak int dword_8006ACC[2] = { 0, 0 }; // weak _UNKNOWN loc_8006D3C; // weak _UNKNOWN unk_8006DEC; // weak int dword_8007068 = -27869; // weak int dword_8007078[9] = { -135, 12, 2958, 536870912, 16777539, 268963874, 16000006, 134245085, 51381477 }; // weak unsigned __int8 byte_20000000[4]; // weak _UNKNOWN unk_20000004; // weak _UNKNOWN unk_20000008; // weak _UNKNOWN unk_2000000C; // weak _UNKNOWN unk_20000060; // weak unsigned __int8 byte_2000006D[9]; // weak _UNKNOWN unk_20000076; // weak _UNKNOWN unk_20000098; // weak char byte_200000B0[68]; // weak char byte_200000F4[120]; // weak _UNKNOWN unk_2000016C; // weak _UNKNOWN unk_2000040C; // weak void (__fastcall *dword_20000414)(_DWORD); // weak _UNKNOWN unk_20000418; // weak _UNKNOWN unk_200006B8; // weak int (__fastcall *dword_200006C0)(_DWORD); // weak _UNKNOWN unk_200006C4; // weak int dword_200006C8[20]; // weak _UNKNOWN unk_20000718; // weak _UNKNOWN unk_2000071C; // weak _DWORD dword_20000720[16]; // weak _DWORD dword_20000760[3]; // weak _UNKNOWN unk_2000076C; // weak _DWORD dword_20000770[8]; // weak __int16 word_20000790[]; // weak _DWORD dword_20000794[2]; // weak _UNKNOWN unk_2000079C; // weak _DWORD dword_200007A0; // weak _UNKNOWN unk_200007A4; // weak _UNKNOWN unk_200007A8; // weak _UNKNOWN unk_200007AC; // weak _UNKNOWN unk_200007B0; // weak _UNKNOWN unk_200007B4; // weak _UNKNOWN unk_200007B8; // weak _UNKNOWN unk_200007BC; // weak _UNKNOWN unk_200007C0; // weak _UNKNOWN unk_200007C4; // weak _UNKNOWN unk_200007C8; // weak _UNKNOWN unk_200007CC; // weak _UNKNOWN unk_200007D0; // weak _UNKNOWN unk_200007D4; // weak _UNKNOWN unk_200007D8; // weak _UNKNOWN unk_200007EC; // weak _UNKNOWN unk_20000B90; // weak _UNKNOWN unk_20000B94; // weak _UNKNOWN unk_20000B98; // weak _UNKNOWN unk_20000B9C; // weak _UNKNOWN unk_20000BA4; // weak _UNKNOWN unk_20000BB0; // weak _UNKNOWN unk_20000BC4; // weak _UNKNOWN unk_20000BC8; // weak _UNKNOWN unk_20000BCC; // weak _UNKNOWN unk_20000BD8; // weak _UNKNOWN unk_20000BFC; // weak _UNKNOWN unk_20000C00; // weak unsigned __int16 word_20000C18; // weak _UNKNOWN unk_20000C1A; // weak _UNKNOWN unk_20000C1C; // weak _DWORD dword_20000C20; // weak _UNKNOWN unk_20000C24; // weak __int16 word_20000C25; // weak _UNKNOWN unk_20000C28; // weak _UNKNOWN unk_20000C2C; // weak _UNKNOWN unk_20000C30; // weak _UNKNOWN unk_20000C34; // weak _UNKNOWN unk_20000C38; // weak _UNKNOWN unk_20000C3C; // weak _UNKNOWN unk_20000C40; // weak _UNKNOWN unk_20000C44; // weak _DWORD dword_20000C48; // weak _UNKNOWN unk_20000C4C; // weak _DWORD dword_20000D18; // weak _UNKNOWN unk_20000D1C; // weak _UNKNOWN unk_20000D1E; // weak _UNKNOWN unk_20000D20; // weak _UNKNOWN unk_20000D24; // weak _UNKNOWN unk_20000D28; // weak _UNKNOWN unk_20000D2C; // weak _UNKNOWN unk_20000D30; // weak _UNKNOWN unk_20000D34; // weak unsigned int word_20000D38; // weak _UNKNOWN unk_20000D3C; // weak _UNKNOWN unk_20000D44; // weak _DWORD dword_20001138; // weak _UNKNOWN unk_2000113C; // weak _UNKNOWN unk_2000113E; // weak _UNKNOWN unk_20001144; // weak unsigned __int16 word_2000114C[2]; // weak int dword_20001150; // weak _UNKNOWN unk_20001154; // weak _UNKNOWN unk_20001158; // weak _UNKNOWN unk_2000115C; // weak _UNKNOWN unk_20001160; // weak _UNKNOWN unk_20001164; // weak _UNKNOWN unk_20001168; // weak _UNKNOWN unk_20001568; // weak _UNKNOWN unk_20001968; // weak _UNKNOWN unk_20009968; // weak _UNKNOWN unk_20009B68; // weak _UNKNOWN unk_2000DB68; // weak _UNKNOWN unk_20011B68; // weak int dword_20011F68[33]; // weak _UNKNOWN unk_20011FEC; // weak _UNKNOWN unk_20011FED; // weak _UNKNOWN unk_20011FEE; // weak _UNKNOWN unk_20011FFA; // weak unsigned __int8 byte_2001206C[5648]; // weak _UNKNOWN unk_2001367C; // weak _UNKNOWN unk_2001367E; // weak _UNKNOWN unk_20013680; // weak unsigned __int16 word_2001467C; // weak unsigned __int8 byte_2001467E[2]; // weak int dword_20014680; // weak _UNKNOWN unk_20014684; // weak _UNKNOWN unk_2001468C; // weak _UNKNOWN unk_20014690; // weak _UNKNOWN unk_20014698; // weak _UNKNOWN unk_2001469C; // weak _UNKNOWN unk_200146A0; // weak _UNKNOWN unk_200146A4; // weak _UNKNOWN unk_200146AC; // weak _UNKNOWN unk_200146B0; // weak _UNKNOWN unk_200146B4; // weak _UNKNOWN unk_20014A84; // weak _BYTE byte_20015524[1024]; // weak _UNKNOWN unk_20015924; // weak _UNKNOWN unk_20015974; // weak unsigned __int8 byte_2001598C[4]; // weak _UNKNOWN unk_20015990; // weak __int16 word_40000000; // weak _UNKNOWN unk_40000014; // weak _UNKNOWN unk_40000024; // weak _UNKNOWN unk_40000028; // weak _UNKNOWN unk_40006600; // weak _UNKNOWN unk_40006604; // weak _UNKNOWN unk_4000660C; // weak _UNKNOWN unk_40006614; // weak _UNKNOWN unk_4000661C; // weak _DWORD dword_40006640[111]; // weak __int16 word_40007000; // weak _DWORD dword_40013808[253]; // weak _DWORD dword_40013C00; // weak _UNKNOWN unk_40013C04; // weak _UNKNOWN unk_40013C08; // weak _UNKNOWN unk_40013C0C; // weak _DWORD dword_40020000[6]; // weak _UNKNOWN unk_40020018; // weak _DWORD dword_40020400[255]; // weak _DWORD dword_40021000[255]; // weak //----- (080001C4) -------------------------------------------------------- unsigned int __fastcall sub_80001C4(unsigned __int16 *a1) { unsigned int result; // r0 unsigned int v3; // r2 result = a1[2]; v3 = a1[3]; if ( v3 >= result ) LOWORD(result) = v3 - result; else LOWORD(result) = v3 + a1[4] - result; return result; } //----- (080001DA) -------------------------------------------------------- int __fastcall sub_80001DA(unsigned __int16 *a1) { unsigned __int16 v1; // r1 unsigned int v2; // r3 unsigned int v3; // r0 unsigned __int16 v4; // r2 __int16 v5; // r1 v1 = a1[4]; v2 = a1[2]; v3 = a1[3]; v4 = v1; if ( v3 >= v2 ) v5 = v3 - v2; else v5 = v3 + v1 - v2; return (v4 - v5 - 1); } //----- (080001F4) -------------------------------------------------------- int __fastcall sub_80001F4(int result) { *(result + 4) = *(result + 6); return result; } //----- (080001FA) -------------------------------------------------------- unsigned __int16 *__fastcall sub_80001FA(unsigned __int16 *result, int a2) { unsigned int v2; // r5 unsigned int v3; // r6 int v4; // r4 int v5; // r2 int v6; // r3 v2 = result[2]; v3 = result[3]; v4 = result[4]; if ( v3 >= v2 ) LOWORD(v5) = v3 - v2; else LOWORD(v5) = v3 + result[4] - v2; v5 = v5; if ( a2 < v5 ) v5 = a2; if ( v5 ) { v6 = (v5 + result[2]); if ( v6 >= v4 ) LOWORD(v6) = v6 - v4; result[2] = v6; } return result; } //----- (0800022C) -------------------------------------------------------- int __fastcall sub_800022C(unsigned __int16 *a1, int a2, signed int a3) { int v3; // r6 int v4; // r10 int v5; // r5 signed int v8; // r4 int v10; // r9 signed int v11; // r7 v3 = a1[2]; v4 = a1[4]; v5 = *a1; v8 = sub_80001C4(a1); if ( a3 < v8 ) v8 = a3; if ( !v8 ) return 0; v10 = 0; do { v11 = (v4 - v3); if ( v8 < v11 ) v11 = v8; if ( v11 == 1 ) *(a2 + v10) = *(v5 + v3); else sub_80003C4(a2 + v10, (v5 + v3), v11); v3 = (v11 + v3); v8 = (v8 - v11); if ( v3 >= v4 ) v3 = 0; v10 = (v10 + v11); } while ( v8 ); return v10; } //----- (08000298) -------------------------------------------------------- int __fastcall sub_8000298(unsigned __int16 *a1, int a2, signed int a3) { int v4; // r6 int v5; // r9 int v6; // r10 signed int v9; // r4 unsigned __int16 v11; // r7 signed int v12; // r11 v4 = a1[2]; v5 = a1[4]; v6 = *a1; v9 = sub_80001C4(a1); if ( a3 < v9 ) v9 = a3; if ( !v9 ) return 0; v11 = 0; do { v12 = (v5 - v4); if ( v9 < v12 ) v12 = v9; sub_80003C4(v11 + a2, (v6 + v4), v12); v4 = (v4 + v12); v9 = (v9 - v12); if ( v4 >= v5 ) v4 = 0; v11 += v12; } while ( v9 ); a1[2] = v4; return v11; } //----- (08000304) -------------------------------------------------------- int __fastcall sub_8000304(int *a1, int a2, signed int a3) { int v4; // r5 int v5; // r10 int v6; // r0 unsigned int v7; // r4 unsigned int v8; // r7 int v9; // r9 __int16 v10; // r3 __int16 v11; // r0 signed int v12; // r4 unsigned __int16 v14; // r7 signed int v16; // r11 v4 = *(a1 + 3); v5 = *a1; v6 = *(a1 + 4); v7 = *(a1 + 2); v8 = *(a1 + 3); v9 = v6; v10 = v6; if ( v8 >= v7 ) v11 = v8 - v7; else v11 = v8 + v6 - v7; v12 = (v10 - v11 - 1); if ( a3 < v12 ) v12 = a3; if ( !v12 ) return 0; v14 = 0; do { v16 = (v9 - v4); if ( v12 < v16 ) v16 = v12; sub_80003C4(v5 + v4, (a2 + v14), v16); v4 = (v4 + v16); v12 = (v12 - v16); if ( v4 >= v9 ) v4 = 0; v14 += v16; } while ( v12 ); *(a1 + 3) = v4; return v14; } //----- (0800037E) -------------------------------------------------------- int __fastcall sub_800037E(int result, int a2, __int16 a3) { *result = a2; *(result + 4) = 0; *(result + 6) = 0; *(result + 8) = a3; return result; } //----- (0800038A) -------------------------------------------------------- _DWORD *__fastcall sub_800038A(unsigned int *a1) { int v1; // r9 _DWORD *v2; // r2 _DWORD *v3; // t1 unsigned int v4; // r1 _BYTE *v5; // r3 _DWORD *result; // r0 unsigned int v7; // t1 while ( 1 ) { v7 = *a1; result = a1 + 1; v4 = v7; if ( !v7 ) break; v3 = *result; a1 = result + 1; v2 = v3; if ( (v3 & 1) != 0 ) v2 = (v2 + v1 - 1); do { v4 -= 4; *v2++ = 0; } while ( v4 >= 4 ); v5 = v2; if ( (v4 & 2) != 0 ) { *v2 = 0; v5 = v2 + 2; } if ( (v4 & 1) != 0 ) *v5 = 0; } return result; } // 8000398: variable 'v1' is possibly undefined //----- (080003C4) -------------------------------------------------------- int __fastcall sub_80003C4(int result, char *a2, unsigned int a3) { char v3; // t1 unsigned int v4; // r2 unsigned int v5; // t1 _WORD *v6; // r0 unsigned int v7; // t1 _WORD *v8; // r0 unsigned int v9; // r2 bool v10; // cf char v11; // t1 if ( !a3 ) goto LABEL_18; if ( a2 << 30 ) { while ( 1 ) { --a3; v3 = *a2++; *result++ = v3; if ( !a3 ) break; if ( !(a2 << 30) ) goto LABEL_5; } LABEL_18: JUMPOUT(0x8000420); } LABEL_5: if ( !(result << 30) ) return sub_80003E4(); v10 = a3 >= 4; v4 = a3 - 4; if ( v10 ) { if ( result << 31 ) { do { v7 = *a2; a2 += 4; *result = v7; v8 = (result + 1); *v8++ = v7 >> 8; v10 = v4 >= 4; v4 -= 4; *v8 = HIBYTE(v7); result = v8 + 1; } while ( v10 ); } else { do { v5 = *a2; a2 += 4; *result = v5; v6 = (result + 2); v10 = v4 >= 4; v4 -= 4; *v6 = HIWORD(v5); result = (v6 + 1); } while ( v10 ); } } v9 = v4 + 4; do { v10 = v9-- != 0; if ( v10 ) { v11 = *a2++; *result++ = v11; } } while ( v9 != 0 && v10 ); return result; } // 80003D4: control flows out of bounds to 8000420 // 8000456: conditional instruction was optimized away because cf.1==0 // 80003E4: using guessed type int sub_80003E4(void); //----- (080003E4) -------------------------------------------------------- _DWORD *__fastcall sub_80003E4(_DWORD *result, int *a2, unsigned int a3) { bool v3; // cf unsigned int i; // r2 int v5; // r3 int v6; // r4 int v7; // r5 int v8; // r12 int v9; // r3 int v10; // r12 int v11; // t1 __int16 v12; // t1 v3 = a3 >= 0x10; for ( i = a3 - 16; v3; result += 4 ) { v5 = *a2; v6 = a2[1]; v7 = a2[2]; v8 = a2[3]; a2 += 4; v3 = i >= 0x10; i -= 16; *result = v5; result[1] = v6; result[2] = v7; result[3] = v8; } if ( __CFSHL__(i, 0x1D) ) { v9 = *a2; v10 = a2[1]; a2 += 2; *result = v9; result[1] = v10; result += 2; } if ( (i & 4) != 0 ) { v11 = *a2++; *result++ = v11; } if ( __CFSHL__(i, 0x1F) ) { v12 = *a2; a2 = (a2 + 2); *result = v12; result = (result + 2); } if ( (i & 1) != 0 ) *result = *a2; return result; } //----- (0800046C) -------------------------------------------------------- int sub_800046C() { int result; // r0 int v1; // [sp+4h] [bp-4Ch] BYREF int v2; // [sp+8h] [bp-48h] int v3; // [sp+Ch] [bp-44h] int v4; // [sp+10h] [bp-40h] int v5; // [sp+14h] [bp-3Ch] int v6[14]; // [sp+18h] [bp-38h] BYREF sub_8000680(); v1 = 0; v2 = 0; v3 = 0; v4 = 0; v5 = 0; MEMORY[0x40023840] |= 0x10000000u; *&word_40007000 |= 0x4000u; v6[0] = 1; v6[6] = 2; v6[7] = 0x400000; v6[8] = 4; v6[9] = 168; v6[1] = 0x10000; v6[10] = 2; v6[11] = 7; if ( sub_8000688(v6) ) { sub_80009EC(0xFAu); sub_8000A8C(); } v2 = 2; v3 = 0; v1 = 15; v4 = 5120; v5 = 4096; result = sub_8000AE0(&v1, 5u); if ( result ) { sub_80009EC(0xFAu); sub_8000A8C(); } return result; } // 40007000: using guessed type __int16 word_40007000; //----- (0800051C) -------------------------------------------------------- void __noreturn sub_800051C() { BOOL v0; // r4 int v1[4]; // [sp+0h] [bp-28h] BYREF int v2; // [sp+10h] [bp-18h] int v3; // [sp+14h] [bp-14h] int v4; // [sp+18h] [bp-10h] v0 = sub_8000CA4(); sub_8000CE0(); sub_800046C(); MEMORY[0x40023830] |= 1u; MEMORY[0x40023830] |= 2u; MEMORY[0x40023830] |= 4u; MEMORY[0x40023830] |= 8u; MEMORY[0x40023830] |= 0x10u; MEMORY[0x40023830] |= 0x20u; MEMORY[0x40023830] |= 0x80u; sub_8000D18(); sub_8000D88(); sub_8001084(); sub_8002E34(); sub_800309A(0, 500000); sub_8002F10(0, 0, 0, 0, 0u); sub_800309A(1, 500000); sub_8002F10(1, 0, 0, 0, 0u); sub_8000E28(4, 200, 0); memset(v1, 0, sizeof(v1)); v2 = 0; v3 = 0; v4 = 0; sub_800357E(v1); if ( v2 == 170 ) { v1[0] = 2; v2 = 85; sub_80035B8(); sub_80034C8(v1); sub_80035DE(); sub_80035D0(); } while ( 1 ) { sub_8002E6E(); if ( v0 ) { sub_8001256(); sub_8002C58(); sub_80012C8(); } sub_8000E68(); sub_8002E98(); } } //----- (08000670) -------------------------------------------------------- void __noreturn sub_8000670() { sub_80009EC(0xFAu); sub_8000A8C(); } //----- (08000680) -------------------------------------------------------- void sub_8000680() { JUMPOUT(0x80036F8); } // 8000682: control flows out of bounds to 80036F8 //----- (08000688) -------------------------------------------------------- int __fastcall sub_8000688(int a1) { int v2; // r5 int v3; // r0 int v4; // r0 unsigned int v5; // r1 int v6; // r5 int v7; // r5 int v8; // r5 int v9; // r5 int v10; // r5 int v11; // r5 int v12; // r8 int v13; // r0 unsigned int v14; // r0 int v15; // r0 int v16; // r8 int v17; // r8 int v18; // r0 int v19; // r7 int v20; // r4 int v21; // r4 int v23; // r2 bool v24; // zf int v25; // r2 bool v26; // zf if ( !a1 ) return 1; if ( (*a1 & 1) != 0 ) { if ( (MEMORY[0x40023808] & 0xC) == 4 || (MEMORY[0x40023808] & 0xC) == 8 && (MEMORY[0x40023804] & 0x400000) != 0 ) { if ( (MEMORY[0x40023800] & 0x20000) != 0 && !*(a1 + 4) ) return 1; } else { v3 = *(a1 + 4); if ( v3 == 0x10000 ) { MEMORY[0x40023800] |= 0x10000u; } else { v24 = v3 == 327680; v4 = MEMORY[0x40023800]; if ( v24 ) { MEMORY[0x40023800] |= 0x40000u; v5 = v4 | 0x50000; } else { MEMORY[0x40023800] &= ~0x10000u; v5 = v4 & 0xFFFAFFFF; } MEMORY[0x40023800] = v5; } if ( *(a1 + 4) ) { v6 = sub_800372C(); while ( (MEMORY[0x40023800] & 0x20000) == 0 ) { if ( (sub_800372C() - v6) >= 0x65 ) return 3; } } else { v7 = sub_800372C(); while ( (MEMORY[0x40023800] & 0x20000) != 0 ) { if ( (sub_800372C() - v7) >= 0x65 ) return 3; } } } } if ( (*a1 & 2) != 0 ) { if ( (MEMORY[0x40023808] & 0xC) != 0 && ((MEMORY[0x40023808] & 0xC) != 8 || (MEMORY[0x40023804] & 0x400000) != 0) ) { if ( *(a1 + 12) ) { MEMORY[0x42470000] = 1; v8 = sub_800372C(); while ( (MEMORY[0x40023800] & 2) == 0 ) { if ( (sub_800372C() - v8) > 2 ) return 3; } MEMORY[0x40023800] = MEMORY[0x40023800] & 0xFFFFFF07 | (8 * *(a1 + 16)); } else { MEMORY[0x42470000] = 0; v9 = sub_800372C(); while ( (MEMORY[0x40023800] & 2) != 0 ) { if ( (sub_800372C() - v9) > 2 ) return 3; } } } else { if ( (MEMORY[0x40023800] & 2) != 0 && *(a1 + 12) != 1 ) return 1; MEMORY[0x40023800] = MEMORY[0x40023800] & 0xFFFFFF07 | (8 * *(a1 + 16)); } } if ( (*a1 & 8) != 0 ) { if ( *(a1 + 20) ) { MEMORY[0x42470E80] = 1; v2 = sub_800372C(); while ( (MEMORY[0x40023874] & 2) == 0 ) { if ( (sub_800372C() - v2) > 2 ) return 3; } } else { MEMORY[0x42470E80] = 0; v10 = sub_800372C(); while ( (MEMORY[0x40023874] & 2) != 0 ) { if ( (sub_800372C() - v10) > 2 ) return 3; } } } if ( (*a1 & 4) != 0 ) { v11 = 0; if ( (MEMORY[0x40023840] & 0x10000000) == 0 ) { v11 = 1; MEMORY[0x40023840] |= 0x10000000u; } if ( (word_40007000 & 0x100) == 0 ) { *&word_40007000 |= 0x100u; v12 = sub_800372C(); while ( (word_40007000 & 0x100) == 0 ) { if ( (sub_800372C() - v12) > 2 ) return 3; } } v13 = *(a1 + 8); if ( v13 == 1 ) { v14 = MEMORY[0x40023870] | 1; } else { v24 = v13 == 5; v15 = MEMORY[0x40023870]; if ( v24 ) { MEMORY[0x40023870] |= 4u; v14 = v15 | 5; } else { MEMORY[0x40023870] = 2 * (MEMORY[0x40023870] >> 1); v14 = MEMORY[0x40023870] & 0xFFFFFFFB; } } MEMORY[0x40023870] = v14; if ( *(a1 + 8) ) { v16 = sub_800372C(); while ( (MEMORY[0x40023870] & 2) == 0 ) { if ( (sub_800372C() - v16) >= 0x1389 ) return 3; } } else { v17 = sub_800372C(); while ( (MEMORY[0x40023870] & 2) != 0 ) { if ( (sub_800372C() - v17) >= 0x1389 ) return 3; } } if ( v11 ) MEMORY[0x40023840] &= ~0x10000000u; } v18 = *(a1 + 24); if ( !v18 ) return 0; if ( (MEMORY[0x40023808] & 0xC) != 8 ) { if ( v18 == 2 ) { MEMORY[0x42470060] = 0; v19 = sub_800372C(); while ( (MEMORY[0x40023800] & 0x2000000) != 0 ) { if ( (sub_800372C() - v19) > 2 ) return 3; } MEMORY[0x40023804] = *(a1 + 28) | *(a1 + 32) | (*(a1 + 36) << 6) | (((*(a1 + 40) >> 1) - 1) << 16) | (*(a1 + 44) << 24); MEMORY[0x42470060] = 1; v20 = sub_800372C(); while ( (MEMORY[0x40023800] & 0x2000000) == 0 ) { if ( (sub_800372C() - v20) > 2 ) return 3; } } else { MEMORY[0x42470060] = 0; v21 = sub_800372C(); while ( (MEMORY[0x40023800] & 0x2000000) != 0 ) { if ( (sub_800372C() - v21) > 2 ) return 3; } } return 0; } if ( v18 == 1 ) return 1; v23 = *(a1 + 28); v24 = (MEMORY[0x40023808] & 0x400000) == v23; if ( (MEMORY[0x40023808] & 0x400000) == v23 ) v24 = (MEMORY[0x40023808] & 0x3F) == *(a1 + 32); if ( !v24 ) return 1; v25 = *(a1 + 36); v26 = (MEMORY[0x40023808] & 0x7FC0) == v25; if ( (MEMORY[0x40023808] & 0x7FC0) == v25 ) v26 = (MEMORY[0x40023808] & 0x30000) == *(a1 + 40); return !v26 || (MEMORY[0x40023808] & 0xF000000) != *(a1 + 44); } // 40007000: using guessed type __int16 word_40007000; //----- (080009EC) -------------------------------------------------------- unsigned int __fastcall sub_80009EC(unsigned int a1) { int v2; // r5 unsigned int result; // r0 v2 = sub_800372C(); if ( a1 != -1 ) a1 += byte_20000000[0]; do result = sub_800372C() - v2; while ( result < a1 ); return result; } // 20000000: using guessed type unsigned __int8 byte_20000000[4]; //----- (08000A18) -------------------------------------------------------- int __fastcall sub_8000A18(int a1) { int result; // r0 result = (a1 << 8) & 0x700 | MEMORY[0xE000ED0C] & 0xF8FF | 0x5FA0000; MEMORY[0xE000ED0C] = result; return result; } //----- (08000A32) -------------------------------------------------------- int __fastcall sub_8000A32(int result, int a2, int a3) { int v3; // r3 int v4; // r4 char v5; // r3 int v6; // r1 int v7; // r2 v3 = (MEMORY[0xE000ED0C] >> 8) & 7; if ( (7 - v3) < 5 ) v4 = (1 << (7 - v3)) - 1; else v4 = 15; if ( (v3 + 4) >= 7 ) v5 = v3 - 3; else v5 = 0; v6 = 16 * (((a2 & v4) << v5) | a3 & ((1 << v5) - 1)); v7 = result; if ( result < 0 ) { *((result & 0xF) - 536810220) = v6; } else { result = -536812544; *(v7 - 536812544) = v6; } return result; } //----- (08000A8C) -------------------------------------------------------- void __noreturn sub_8000A8C() { __dsb(0xFu); MEMORY[0xE000ED0C] = MEMORY[0xE000ED0C] & 0x700 | 0x5FA0004; __dsb(0xFu); while ( 1 ) ; } //----- (08000AA6) -------------------------------------------------------- int __fastcall sub_8000AA6(int a1) { unsigned int v1; // r0 v1 = a1 - 1; if ( v1 >= 0x1000000 ) return 1; MEMORY[0xE000E014] = v1; MEMORY[0xE000ED23] = -16; MEMORY[0xE000E018] = 0; MEMORY[0xE000E010] = 7; return 0; } //----- (08000AE0) -------------------------------------------------------- int __fastcall sub_8000AE0(int *a1, unsigned int a2) { int v4; // r0 int v5; // r0 bool v6; // nf bool v7; // zf int v9; // r7 if ( !a1 ) return 1; if ( (MEMORY[0x40023C00] & 0xFu) < a2 ) { MEMORY[0x40023C00] = a2; if ( (a2 & 0xF) != a2 ) return 1; } v4 = *a1; if ( (*a1 & 2) != 0 ) { if ( (v4 & 4) != 0 ) MEMORY[0x40023808] |= 0x1C00u; if ( (*a1 & 8) != 0 ) MEMORY[0x40023808] |= 0xE000u; MEMORY[0x40023808] = MEMORY[0x40023808] & 0xFFFFFF0F | a1[2]; } if ( (*a1 & 1) != 0 ) { v5 = a1[1]; if ( v5 == 1 ) { v6 = (MEMORY[0x40023800] & 0x20000) != 0; } else { v7 = v5 == 2; if ( v5 != 2 ) v7 = v5 == 3; if ( !v7 ) { if ( (MEMORY[0x40023800] & 2) == 0 ) return 1; LABEL_21: MEMORY[0x40023808] = v5 | (4 * (MEMORY[0x40023808] >> 2)); v9 = sub_800372C(); while ( (MEMORY[0x40023808] & 0xC) != 4 * a1[1] ) { if ( (sub_800372C() - v9) >= 0x1389 ) return 3; } goto LABEL_25; } v6 = (MEMORY[0x40023800] & 0x2000000) != 0; } if ( !v6 ) return 1; goto LABEL_21; } LABEL_25: if ( a2 < (MEMORY[0x40023C00] & 0xFu) ) { MEMORY[0x40023C00] = a2; if ( (a2 & 0xF) != a2 ) return 1; } if ( (*a1 & 4) != 0 ) MEMORY[0x40023808] = MEMORY[0x40023808] & 0xFFFFE3FF | a1[3]; if ( (*a1 & 8) != 0 ) MEMORY[0x40023808] = MEMORY[0x40023808] & 0xFFFF1FFF | (8 * a1[4]); unk_2000000C = sub_8000C14() >> *(dword_8006ACC + (MEMORY[0x40023808] >> 4)); sub_8003738(unk_20000008); return 0; } // 8006ACC: using guessed type int dword_8006ACC[2]; //----- (08000BFC) -------------------------------------------------------- int sub_8000BFC() { return unk_2000000C; } //----- (08000C14) -------------------------------------------------------- unsigned int sub_8000C14() { int v1; // r1 if ( (MEMORY[0x40023808] & 0xC) == 4 ) return 8000000; if ( (MEMORY[0x40023808] & 0xC) != 8 ) return 16000000; if ( (MEMORY[0x40023804] & 0x400000) != 0 ) v1 = 8000000; else v1 = 16000000; return sub_8003780(v1 * ((MEMORY[0x40023804] >> 6) & 0x1FF), MEMORY[0x40023804] & 0x3F) / (2 * ((HIWORD(MEMORY[0x40023804]) & 3u) + 1)); } //----- (08000C74) -------------------------------------------------------- int __fastcall sub_8000C74(int result, char *a2, int a3) { char v3; // r5 char v4; // t1 int v5; // r3 __int16 v6; // r6 while ( a3 ) { v4 = *a2++; v3 = v4; --a3; v5 = 8; do { v6 = result; result *= 2; if ( (v3 & 0x80) != 0 ) result |= 1u; if ( (v6 & 0x8000) != 0 ) result ^= 0x1021u; v3 *= 2; --v5; } while ( v5 ); } return result; } //----- (08000CA4) -------------------------------------------------------- BOOL sub_8000CA4() { int v0; // r0 __int16 v2; // [sp+0h] [bp-8h] BYREF v0 = sub_8000C74(0, &unk_8000000, 0x65D1); v2 = 0; return sub_8000C74(v0, &v2, 2) == 7969; } //----- (08000CE0) -------------------------------------------------------- int sub_8000CE0() { MEMORY[0x40023C00] |= 0x200u; MEMORY[0x40023C00] |= 0x400u; MEMORY[0x40023C00] |= 0x100u; sub_8000A18(3); sub_8003738(0u); sub_80039B0(); return 0; } //----- (08000D18) -------------------------------------------------------- int sub_8000D18() { int result; // r0 MEMORY[0x40023840] |= 1u; MEMORY[0x40023820] |= 1u; MEMORY[0x40023820] = 2 * (MEMORY[0x40023820] >> 1); unk_40000028 = 83; *&word_40000000 = word_40000000 & 0xFCFF; unk_40000014 |= 1u; result = *&word_40000000 | 1; *&word_40000000 |= 1u; return result; } // 40000000: using guessed type __int16; //----- (08000D6C) -------------------------------------------------------- int sub_8000D6C() { return unk_40000024; } //----- (08000D76) -------------------------------------------------------- int sub_8000D76() { return unk_40000024 << 6; } //----- (08000D88) -------------------------------------------------------- _DWORD *sub_8000D88() { _DWORD v1[5]; // [sp+4h] [bp-7Ch] BYREF _DWORD v2[5]; // [sp+18h] [bp-68h] BYREF _DWORD v3[5]; // [sp+2Ch] [bp-54h] BYREF _DWORD v4[5]; // [sp+40h] [bp-40h] BYREF _DWORD v5[11]; // [sp+54h] [bp-2Ch] BYREF MEMORY[0x40023830] |= 1u; MEMORY[0x40023830] |= 4u; MEMORY[0x40023830] |= 4u; v5[0] = 1024; v5[1] = 1; v5[2] = 0; v5[3] = 1; v5[4] = 0; sub_80039E8(0x40020800, v5); v4[0] = 4; v4[1] = 1; v4[2] = 0; v4[3] = 1; v4[4] = 0; sub_80039E8(dword_40020000, v4); v3[0] = 8; v3[1] = 1; v3[2] = 0; v3[3] = 1; v3[4] = 0; sub_80039E8(dword_40020000, v3); v2[0] = 64; v2[1] = 1; v2[2] = 0; v2[3] = 1; v2[4] = 0; sub_80039E8(0x40020800, v2); v1[0] = 128; v1[1] = 1; v1[2] = 0; v1[3] = 1; v1[4] = 0; return sub_80039E8(0x40020800, v1); } // 40020000: using guessed type _DWORD dword_40020000[6]; // 8000D88: using guessed type _DWORD var_2C[11]; // 8000D88: using guessed type _DWORD var_40[5]; // 8000D88: using guessed type _DWORD var_54[5]; // 8000D88: using guessed type _DWORD var_68[5]; // 8000D88: using guessed type _DWORD var_7C[5]; //----- (08000E28) -------------------------------------------------------- int __fastcall sub_8000E28(int a1, int a2, int a3) { char *v5; // r6 int result; // r0 bool v7; // zf if ( a1 > 4 ) { while ( 1 ) ; } v5 = &unk_20015924 + 16 * a1; result = *(v5 + 6); if ( result != a2 ) { *(v5 + 6) = a2; *(v5 + 2) = sub_8000D72() | 1; result = 0; *(v5 + 1) = 0; if ( a3 ) { v7 = a2 == 50; if ( a2 != 50 ) v7 = a2 == 200; if ( v7 ) { result = *(v5 + 2); a3 = (result + a3) | 1; } } *v5 = a3; } return result; } // 8000D72: using guessed type int sub_8000D72(void); //----- (08000E68) -------------------------------------------------------- unsigned int sub_8000E68() { unsigned int v0; // r9 int v1; // r5 unsigned int *v2; // r7 unsigned int result; // r0 int v4; // r0 bool v5; // zf bool v6; // zf v0 = sub_8000D72(); v1 = 0; v2 = &unk_20015924; do { result = v2[2]; if ( result ) { result = v0 - result; if ( result >= v2[1] ) { v4 = *(v2 + 6); v5 = v4 == 1; if ( v4 != 1 ) v5 = v4 == 2; if ( v5 ) { if ( v4 != 1 ) LOBYTE(v4) = 0; *(v2 + 14) = v4; v2[2] = 0; } else { v6 = v4 == 50; if ( v4 != 50 ) v6 = v4 == 200; if ( v6 ) { *(v2 + 14) ^= 1u; v2[2] = v0 | 1; v2[1] = *(v2 + 6); if ( *v2 && v0 >= *v2 && *(v2 + 6) != 2 ) { *(v2 + 6) = 2; v2[2] = sub_8000D72() | 1; v2[1] = 0; *v2 = 0; } } else { v2[2] = 0; } } result = *(v2 + 14); switch ( v1 ) { case 0: if ( *(v2 + 14) ) { result = 4; unk_40020018 = 4; } else { unk_40020018 = 0x40000; } break; case 1: if ( *(v2 + 14) ) { result = 8; unk_40020018 = 8; } else { unk_40020018 = 0x80000; } break; case 2: if ( *(v2 + 14) ) { result = 64; MEMORY[0x40020818] = 64; } else { MEMORY[0x40020818] = 0x400000; } break; case 3: if ( *(v2 + 14) ) { result = 128; MEMORY[0x40020818] = 128; } else { MEMORY[0x40020818] = 0x800000; } break; case 4: if ( *(v2 + 14) ) { result = 1024; MEMORY[0x40020818] = 1024; } else { MEMORY[0x40020818] = 0x4000000; } break; default: break; } } } ++v1; v2 += 4; } while ( v1 <= 4 ); return result; } // 8000EDC: conditional instruction was optimized away because r5.4<5 // 8000D72: using guessed type int sub_8000D72(void); //----- (08000FE4) -------------------------------------------------------- unsigned int __fastcall sub_8000FE4(int a1, unsigned int a2) { int v3; // r0 unsigned int result; // r0 *&word_20000C18 = 67633180; unk_20000C1C = 0; dword_20000C20 = 0; unk_20000C24 = 1; unk_20000C28 = 0; unk_20000C2C = 0; unk_20000C30 = 0; word_20000C25 = a1 != 0; unk_20000C2C = sub_8000D76(); unk_20000C28 = unk_20000C2C; LOWORD(dword_20000C20) = 240; v3 = (a2 & 1) != 0; if ( (a2 & 2) != 0 ) v3 = 2; if ( (a2 & 4) != 0 ) v3 = 3; unk_20000C30 = (a2 << 8 >> 0x18 << 8) | (v3 << 16) | HIBYTE(a2); result = sub_80001DA(dword_20011F68); if ( result >= word_20000C18 ) { result = sub_8000304(dword_20011F68, &word_20000C18, word_20000C18); if ( result != word_20000C18 ) { while ( 1 ) ; } } return result; } // 20000C18: using guessed type unsigned __int16 word_20000C18; // 20000C20: using guessed type _DWORD dword_20000C20; // 20000C25: using guessed type __int16 word_20000C25; // 20011F68: using guessed type int[33]; //----- (08001084) -------------------------------------------------------- int sub_8001084() { sub_800037E(dword_20011F68, &unk_20001968, 0x8000); sub_800037E(&dword_20011F68[3], &unk_20001568, 1024); sub_800037E(&dword_20011F68[6], &unk_20009968, 512); sub_800037E(&dword_20011F68[9], &unk_20011B68, 1024); sub_800037E(&dword_20011F68[12], &unk_20009B68, 0x4000); sub_800037E(&dword_20011F68[15], &unk_2000DB68, 0x4000); sub_8003088(0, sub_8000FE4); sub_8003088(1, sub_8000FE4); return 0; } // 20011F68: using guessed type int dword_20011F68[33]; //----- (08001118) -------------------------------------------------------- int __fastcall sub_8001118(unsigned __int8 *a1, int a2) { int v3; // r4 int v5; // r0 unsigned int v7; // r5 unsigned int v8; // r0 v3 = *(a2 + 656); if ( v3 ) { v5 = *a1; if ( *a1 ) { if ( v5 == 1 && !*(v3 + 4 + (a1[1] & 0xF)) ) { *a1 = 0; return 1; } } else { if ( *(v3 + 4 + (a1[1] & 0xF)) ) { while ( 1 ) ; } v7 = sub_80001C4(*(a1 + 1)); if ( v7 ) { v8 = *(a1 + 4); if ( v8 < v7 ) v7 = v8; if ( sub_8000298(*(a1 + 1), *(a1 + 2), v7) != v7 ) { while ( 1 ) ; } *(v3 + 4 + (a1[1] & 0xF)) = 1; *(a2 + 20 * (a1[1] & 0xF) + 28) = v7; sub_8003E6A(a2, a1[1], *(a1 + 2), v7); *(a1 + 3) += v7; *a1 = 1; } } } return 0; } //----- (080011AE) -------------------------------------------------------- unsigned int sub_80011AE() { bool v0; // cf unsigned int result; // r0 v0 = (unk_20000BC8 - unk_20000BC4) >= 0x7FF; if ( (unk_20000BC8 - unk_20000BC4) < 0x7FF ) v0 = (unk_20000C00 - unk_20000BFC) >= 0x7FF; if ( v0 || (result = sub_80001C4(&dword_20011F68[6])) == 0 && (result = sub_8000D72() - unk_20001154, result >= 0x1389) ) { unk_20001154 = sub_8000D72(); dword_20000D18 = 32; unk_20000D1C = 66; unk_20000D1E = 2; unk_20000D2C = unk_20000BC8; unk_20000BC4 = unk_20000BC8; unk_20000D20 = 0; unk_20000D30 = 1; unk_20000D24 = 0; unk_20000D28 = 0; unk_20000D34 = unk_20000C00; unk_20000BFC = unk_20000C00; result = sub_8000304(&dword_20011F68[6], &dword_20000D18, 32); if ( result != dword_20000D18 ) { while ( 1 ) ; } } return result; } // 8000D72: using guessed type int sub_8000D72(void); // 20000D18: using guessed type _DWORD dword_20000D18; // 20011F68: using guessed type int dword_20011F68[33]; //----- (08001256) -------------------------------------------------------- int sub_8001256() { sub_8001118(&dword_20011F68[28], 536957576); sub_8001118(&dword_20011F68[18], 536957576); return sub_8001118(&dword_20011F68[23], 536957576); } // 20011F68: using guessed type int dword_20011F68[33]; //----- (08001282) -------------------------------------------------------- int sub_8001282() { int result; // r0 dword_20001138 = 20; unk_2000113E = 1; unk_2000113C = -32704; unk_20001144 = 0; result = sub_8000304(&dword_20011F68[3], &dword_20001138, 20); if ( result != dword_20001138 ) { while ( 1 ) ; } return result; } // 20001138: using guessed type _DWORD dword_20001138; // 20011F68: using guessed type int dword_20011F68[33]; //----- (080012BE) -------------------------------------------------------- int __fastcall sub_80012BE(int result) { unk_20000BA4 = result; return result; } //----- (080012C8) -------------------------------------------------------- int sub_80012C8() { int v0; // r5 int v1; // r4 bool v2; // zf int v3; // r0 int v4; // r6 _DWORD *v5; // r7 int v6; // r0 int v7; // r4 _DWORD *v8; // r6 int i; // r7 int result; // r0 int v11; // r5 int v12; // r0 v0 = sub_8000D6C(); v1 = sub_8000D72(); v2 = unk_20000B9C == 0; if ( unk_20000B9C ) v2 = unk_20000B90 == 0; if ( !v2 && (v0 - unk_2000115C) >= unk_20000B9C ) { *&word_20000C18 = 524312; unk_20000C1C = 0; dword_20000C20 = 0; unk_20000C24 = 1; unk_20000C28 = 0; unk_20000C2C = 0; unk_20000C2C = sub_8000D76(); unk_20000C28 = unk_20000C2C; if ( sub_8000304(dword_20011F68, &word_20000C18, word_20000C18) != word_20000C18 ) { while ( 1 ) ; } unk_2000115C = v0; } if ( v1 == unk_20001158 ) goto LABEL_34; unk_20001158 = v1; if ( dword_20001150 <= 0 ) { if ( !dword_20001150 ) { dword_20001150 = -1; sub_8001282(); } } else { --dword_20001150; } if ( unk_20000B98 ) { if ( !unk_20000B90 ) goto LABEL_36; if ( unk_20001160 ) { v3 = unk_20001160 - 1; } else { sub_8000680(); word_20000C18 = 36; unk_20000C24 = 6; unk_20000C1A = 49; LOBYTE(word_20000C25) = 0; unk_20000C2C = sub_8000D76(); unk_20000C28 = unk_20000C2C; unk_20000C30 = 1; unk_20000C34 = unk_20000BA4; unk_20000C38 = unk_20000C2C; if ( sub_8000304(dword_20011F68, &word_20000C18, word_20000C18) != word_20000C18 ) { while ( 1 ) ; } v3 = 1000; } unk_20001160 = v3; } if ( unk_20000B90 ) { if ( unk_20001164 ) { v6 = unk_20001164 - 1; } else { v4 = 0; v5 = &unk_20000BB0; do { if ( *(v5 - 2) ) { if ( v4 >= 7u ) { while ( 1 ) ; } sub_8000680(); word_20000C18 = 56; unk_20000C24 = 1; unk_20000C1A = 1031; LOBYTE(word_20000C25) = v4; unk_20000C2C = sub_8000D76(); unk_20000C28 = unk_20000C2C; unk_20000C30 = 3200001; unk_20000C34 = 1000 * (0xF4240 / (*v5 / (v5[8] + v5[7]))) / 0xF; unk_20000C38 = 0; unk_20000C3C = v5[9]; unk_20000C40 = 0; unk_20000C44 = 0; dword_20000C48 = 0; unk_20000C4C = 0; if ( sub_8000304(dword_20011F68, &word_20000C18, word_20000C18) != word_20000C18 ) { while ( 1 ) ; } v5[7] = 0; v5[8] = 0; v5[9] = 0; } ++v4; v5 += 14; } while ( v4 <= 1 ); v6 = 50; } unk_20001164 = v6; LABEL_34: if ( unk_20000B90 ) { sub_8002CC0(&dword_20011F68[12], 0); sub_8002CC0(&dword_20011F68[15], 1); sub_80011AE(); } } LABEL_36: v7 = 0; v8 = &unk_20000BCC; for ( i = 0; ; i = v7 != 0 ) { while ( 1 ) { if ( !*(v8 - 9) ) { result = sub_800301A(i, 0u); break; } result = sub_8003060(i); v11 = result; if ( !result ) break; if ( v7 ) v12 = 3; else v12 = 1; sub_8000E28(v12, 50, 200); *v8 += sub_8002E84(v11); ++v8[2]; if ( v7 >= 7u ) { while ( 1 ) ; } sub_8000680(); word_20000C18 = 56; unk_20000C24 = 1; unk_20000C1A = 1024; unk_20000C1C = 0; LOBYTE(word_20000C25) = v7; unk_20000C2C = sub_8000D76(); unk_20000C28 = unk_20000C2C; LOWORD(dword_20000C20) = 240; unk_20000C30 = 7405568; unk_20000C34 = *v11; unk_20000C38 = unk_20000C38 & 0xFFFFFFF0 | *(v11 + 9) & 0xF; if ( (*(v11 + 8) & 1) != 0 ) unk_20000C3C |= 0x80000000; if ( (*(v11 + 8) & 2) != 0 ) unk_20000C38 |= 0x2000000u; unk_20000C3C = unk_20000C3C & 0xE0000000 | *(v11 + 4) & 0x1FFFFFFF; sub_80003C4(&dword_20000C48, (v11 + 0xA), *(v11 + 9)); if ( sub_8000304(dword_20011F68, &word_20000C18, word_20000C18) != word_20000C18 ) { while ( 1 ) ; } sub_800301A(i, 0u); } ++v7; v8 += 14; if ( v7 > 1 ) break; } return result; } // 8000D72: using guessed type int sub_8000D72(void); // 20000C18: using guessed type unsigned __int16 word_20000C18; // 20000C20: using guessed type _DWORD dword_20000C20; // 20000C25: using guessed type __int16 word_20000C25; // 20000C48: using guessed type _DWORD dword_20000C48; // 20001150: using guessed type int dword_20001150; // 20011F68: using guessed type int dword_20011F68[33]; //----- (08001606) -------------------------------------------------------- unsigned int __fastcall sub_8001606(char *a1, unsigned int a2) { unsigned __int16 v2; // r6 int v4; // r7 char *v5; // r3 unsigned __int16 v6; // r6 v2 = word_2000114C[0]; if ( a2 + word_2000114C[0] >= 0x400 ) { while ( 1 ) ; } sub_80003C4(&unk_20001168 + word_2000114C[0], a1, a2); word_2000114C[0] = a2 + v2; v4 = unk_20001168; if ( (a2 + v2) >= unk_20001168 ) { if ( sub_8000304(&dword_20011F68[9], &unk_20001168, unk_20001168) != v4 ) { while ( 1 ) ; } v6 = word_2000114C[0]; sub_8003EB0(&unk_20001168, &unk_20001168 + v4, word_2000114C[0] - v4, v5); word_2000114C[0] = v6 - v4; } return a2; } // 800165A: variable 'v5' is possibly undefined // 2000114C: using guessed type unsigned __int16 word_2000114C[2]; // 20011F68: using guessed type int dword_20011F68[33]; //----- (080016A4) -------------------------------------------------------- int __fastcall sub_80016A4(char *a1, unsigned int a2) { int v3; // r1 int v4; // r5 unsigned int v5; // r1 int v7; // r0 __int16 *v8; // r1 int v9; // r0 int v10; // r0 unsigned int v11; // r1 int v12; // r1 int v13; // r0 int v14; // r1 int v15; // r2 int v16; // r3 int v17; // r1 int v18; // r2 int v19; // r3 int v20; // r0 int v21; // r0 int v22; // r0 int v23; // r0 int v24; // r0 int v25; // r0 int v26; // r0 int v27; // r0 int v28; // r0 int v29; // r0 int v30; // r0 int v31; // r0 int v32; // r0 int v33; // r0 int v34; // r0 int v35; // r0 int v36; // r0 int v37; // r0 int v38; // r0 int v39; // r0 int v40; // r0 int v41; // r0 int v42; // r0 int v43; // r0 int v44; // r0 int v45; // r0 int v46; // r0 int v47; // r0 int v48; // r0 int v49; // r0 int v50; // r0 int v51; // r0 int v52; // r0 int v53; // r0 int v54; // r0 int v55; // r1 int v56; // r2 int v57; // r3 int v58; // r1 int v59; // r2 int v60; // r3 unsigned int v61; // r6 int v62; // r2 int v63; // r3 int v64; // r7 int v65; // r0 unsigned int v66; // r6 int v67; // r2 int v68; // r3 int v69; // r7 int v70; // r1 int v71; // r2 int v72; // r3 int v73; // r0 int v74; // r1 int v75; // r2 int v76; // r3 int v77; // r1 int v78; // r2 int v79; // r3 int v80; // r1 int v81; // r2 int v82; // r3 int v83; // r1 int v84; // r2 int v85; // r3 int v86; // r0 int v87; // r3 int v88; // r6 int v89; // r7 unsigned int v90; // r6 int v91; // r2 int v92; // r3 int v93; // r7 int v94; // r0 unsigned int v95; // r6 int v96; // r2 int v97; // r3 int v98; // r7 int v99; // r1 int v100; // r2 int v101; // r3 int v102; // r0 int v103; // r1 int v104; // r2 int v105; // r3 int v106; // r1 int v107; // r2 int v108; // r3 int v109; // r1 int v110; // r2 int v111; // r3 int v112; // r1 int v113; // r2 int v114; // r3 int v115; // r1 int v116; // r2 int v117; // r3 int v118; // r1 int v119; // r2 int v120; // r3 int v121; // r1 int v122; // r2 int v123; // r3 int v124; // r1 int v125; // r2 int v126; // r3 int v127; // r1 int v128; // r2 int v129; // r3 int v130; // r1 int v131; // r2 int v132; // r3 int v133; // r1 int v134; // r2 int v135; // r3 int v136; // r1 int v137; // r2 int v138; // r3 unsigned int v139; // r6 __int16 *v140; // r7 unsigned int v141; // r6 int v142; // r1 int v143; // r2 int v144; // r3 int v145; // r0 __int16 *v146; // r1 int v147; // r1 int v148; // r2 int v149; // r3 int v150; // r0 int v151; // r1 int v152; // r2 int v153; // r3 int v154; // r0 int *v155; // r1 int v156; // r1 int v157; // r2 int v158; // r3 int v159; // r1 int v160; // r2 int v161; // r3 int v162; // r1 int v163; // r2 int v164; // r3 int v165; // r1 int v166; // r2 int v167; // r3 int v168; // r1 int v169; // r2 int v170; // r3 int v171; // r1 int v172; // r2 int v173; // r3 int v174; // r1 int v175; // r2 int v176; // r3 int v177; // r0 int v178; // r1 int v179; // r2 int v180; // r3 int v181; // r0 int v182; // r0 int v183; // r1 int v184; // r1 int v185; // r2 int v186; // r3 int v187; // r1 int v188; // r2 int v189; // r3 int v190; // r1 int v191; // r2 int v192; // r3 int v193; // r1 int v194; // r2 int v195; // r3 int v196; // [sp+0h] [bp-28h] BYREF int v197; // [sp+4h] [bp-24h] char v198[32]; // [sp+8h] [bp-20h] BYREF if ( a2 < 0x10 ) return -1; switch ( *(a1 + 3) ) { case 0: v3 = *(a1 + 2); if ( v3 != 1088 ) { if ( v3 != 1089 ) { while ( 1 ) ; } return 0; } v4 = *(a1 + 3); v196 = 0; v197 = 0; memset(v198, 0, 0xC); v197 = *(a1 + 5) & 0x1FFFFFFF; v5 = *(a1 + 5) >> 0x1F; v198[0] = *(a1 + 5) < 0; if ( ((*(a1 + 4) >> 4) & 1) != 0 ) v198[0] = v5 | 2; v198[1] = a1[16] & 0xF; if ( v198[1] >= 9u ) v198[1] = 8; sub_80003C4(&v198[2], a1 + 0x1C, v198[1]); if ( v4 >= 2 ) { while ( 1 ) ; } if ( sub_8002FA4(v4 != 0, &v196) < 0 ) return -1; v7 = sub_8002E84(&v196); v8 = &word_20000790[28 * v4]; *(v8 + 272) += v7; ++*(v8 + 273); if ( v4 ) v9 = 2; else v9 = 0; sub_8000E28(v9, 50, 200); if ( v4 > 6u ) { while ( 1 ) ; } sub_8000680(); word_20000C18 = 56; unk_20000C1A = 1028; unk_20000C24 = 1; LOBYTE(word_20000C25) = v4; unk_20000C1C = *(a1 + 2); v10 = sub_8000D76(); LOWORD(dword_20000C20) = 240; unk_20000C2C = v10; unk_20000C28 = v10; unk_20000C34 = v10; unk_20000C30 = 0; v11 = *(a1 + 4); if ( ((v11 >> 4) & 1) != 0 ) *(a1 + 4) = v11 & 0xFDFFFFEF | 0x2000000; unk_20000C38 = *(a1 + 4); v12 = *(a1 + 5); unk_20000C40 = 0; unk_20000C44 = 0; unk_20000C3C = v12; unk_20000C48 = *(a1 + 7); unk_20000C4C = *(a1 + 8); if ( sub_8000304(dword_20011F68, &word_20000C18, word_20000C18) != word_20000C18 ) { while ( 1 ) ; } return 0; case 1: v13 = *(a1 + 2); if ( v13 != 64 ) { if ( v13 != 65 ) { while ( 1 ) ; } if ( *a1 != 136 ) { while ( 1 ) ; } if ( a1 ) { v17 = *(a1 + 1); v18 = *(a1 + 2); v19 = *(a1 + 3); *word_20000790 = *a1; dword_20000794[0] = v17; dword_20000794[1] = v18; unk_2000079C = v19; LOWORD(dword_20000794[0]) = v17 | 0x8000; } else { *word_20000790 = 0; dword_20000794[0] = 0; dword_20000794[1] = 0; unk_2000079C = 0; } *word_20000790 = 136; unk_2000079C = 0; sub_8000680(); dword_200007A0 = 151322638; unk_200007B8 = 3; unk_200007B4 = 0; unk_200007C0 = -1; unk_200007C4 = -1; unk_200007BC = 6; unk_200007C8 = 3352002; if ( sub_8000304(&dword_20011F68[3], word_20000790, word_20000790[0]) != *word_20000790 ) { while ( 1 ) ; } unk_20001150 = 1500; sub_8000E28(4, 1, 0); v20 = 0; goto LABEL_40; } unk_20001150 = -1; if ( a1 ) { v14 = *(a1 + 1); v15 = *(a1 + 2); v16 = *(a1 + 3); *word_20000790 = *a1; dword_20000794[0] = v14; dword_20000794[1] = v15; unk_2000079C = v16; LOWORD(dword_20000794[0]) = v14 | 0x8000; } else { *word_20000790 = 0; dword_20000794[0] = 0; dword_20000794[1] = 0; unk_2000079C = 0; } *word_20000790 = 16; unk_2000079C = 0; sub_8000680(); if ( sub_8000304(&dword_20011F68[3], word_20000790, word_20000790[0]) != *word_20000790 ) { while ( 1 ) ; } break; case 2: v21 = *(a1 + 2) - 1; if ( *(a1 + 2) == 1 ) { if ( a1 ) { v55 = *(a1 + 1); v56 = *(a1 + 2); v57 = *(a1 + 3); *word_20000790 = *a1; dword_20000794[0] = v55; dword_20000794[1] = v56; unk_2000079C = v57; LOWORD(dword_20000794[0]) = v55 | 0x8000; } else { *word_20000790 = 0; dword_20000794[0] = 0; dword_20000794[1] = 0; unk_2000079C = 0; } *word_20000790 = 16; unk_2000079C = 0; sub_8000680(); if ( sub_8000304(&dword_20011F68[3], word_20000790, word_20000790[0]) != *word_20000790 ) { while ( 1 ) ; } } else { v22 = v21 - 1; if ( v22 ) { v23 = v22 - 1; if ( v23 ) { v24 = v23 - 1; if ( v24 ) { v25 = v24 - 2; if ( !v25 ) { while ( 1 ) ; } v26 = v25 - 1; if ( v26 ) { v27 = v26 - 35; if ( v27 ) { v28 = v27 - 1; if ( v28 ) { v29 = v28 - 1; if ( v29 ) { v30 = v29 - 2; if ( v30 ) { v31 = v30 - 59; if ( v31 ) { v32 = v31 - 7; if ( v32 ) { v33 = v32 - 1; if ( v33 ) { v34 = v33 - 1; if ( v34 ) { v35 = v34 - 2; if ( !v35 ) { while ( 1 ) ; } v36 = v35 - 1; if ( v36 ) { v37 = v36 - 1; if ( v37 ) { v38 = v37 - 1; if ( v38 ) { v39 = v38 - 1; if ( v39 ) { v40 = v39 - 1; if ( !v40 ) { while ( 1 ) ; } v41 = v40 - 9; if ( v41 ) { v42 = v41 - 3; if ( v42 ) { v43 = v42 - 1; if ( v43 ) { v44 = v43 - 1; if ( v44 ) { v45 = v44 - 9; if ( !v45 ) { while ( 1 ) ; } v46 = v45 - 1; if ( v46 ) { v47 = v46 - 2; if ( !v47 ) { while ( 1 ) ; } v48 = v47 - 1; if ( !v48 ) { while ( 1 ) ; } v49 = v48 - 1; if ( !v49 ) { while ( 1 ) ; } v50 = v49 - 1; if ( !v50 ) { while ( 1 ) ; } v51 = v50 - 1; if ( !v51 ) { while ( 1 ) ; } v52 = v51 - 1; if ( v52 ) { v53 = v52 - 1; if ( v53 ) { v54 = v53 - 103; if ( v54 ) { if ( v54 != 1 ) { while ( 1 ) ; } if ( *a1 != 20 ) { while ( 1 ) ; } if ( a1 ) { v136 = *(a1 + 1); v137 = *(a1 + 2); v138 = *(a1 + 3); *word_20000790 = *a1; dword_20000794[0] = v136; dword_20000794[1] = v137; unk_2000079C = v138; LOWORD(dword_20000794[0]) = v136 | 0x8000; } else { *word_20000790 = 0; dword_20000794[0] = 0; dword_20000794[1] = 0; unk_2000079C = 0; } *word_20000790 = 20; unk_2000079C = 0; dword_200007A0 = 0; if ( sub_8000304(&dword_20011F68[3], word_20000790, 20) != 20 ) { while ( 1 ) ; } } else { if ( *a1 != 24 ) { while ( 1 ) ; } if ( a1 ) { v133 = *(a1 + 1); v134 = *(a1 + 2); v135 = *(a1 + 3); *word_20000790 = *a1; dword_20000794[0] = v133; dword_20000794[1] = v134; unk_2000079C = v135; LOWORD(dword_20000794[0]) = v133 | 0x8000; } else { *word_20000790 = 0; dword_20000794[0] = 0; dword_20000794[1] = 0; unk_2000079C = 0; } *word_20000790 = 24; unk_2000079C = 0; dword_200007A0 = 0; unk_200007A4 = 0; if ( sub_8000304(&dword_20011F68[3], word_20000790, 24) != 24 ) { while ( 1 ) ; } } } else { if ( *a1 != 20 ) { while ( 1 ) ; } if ( a1 ) { v130 = *(a1 + 1); v131 = *(a1 + 2); v132 = *(a1 + 3); *word_20000790 = *a1; dword_20000794[0] = v130; dword_20000794[1] = v131; unk_2000079C = v132; LOWORD(dword_20000794[0]) = v130 | 0x8000; } else { *word_20000790 = 0; dword_20000794[0] = 0; dword_20000794[1] = 0; unk_2000079C = 0; } *word_20000790 = 20; unk_2000079C = 0; dword_200007A0 = 128; if ( sub_8000304(&dword_20011F68[3], word_20000790, 20) != 20 ) { while ( 1 ) ; } } } else { if ( *a1 != 32 ) { while ( 1 ) ; } if ( a1 ) { v127 = *(a1 + 1); v128 = *(a1 + 2); v129 = *(a1 + 3); *word_20000790 = *a1; dword_20000794[0] = v127; dword_20000794[1] = v128; unk_2000079C = v129; LOWORD(dword_20000794[0]) = v127 | 0x8000; } else { *word_20000790 = 0; dword_20000794[0] = 0; dword_20000794[1] = 0; unk_2000079C = 0; } *word_20000790 = 32; dword_200007A0 = 0; unk_200007A4 = 0; unk_200007A8 = 0; unk_200007AC = 0; unk_2000079C = 0; if ( sub_8000304(&dword_20011F68[3], word_20000790, 32) != 32 ) { while ( 1 ) ; } } } else { if ( *a1 != 16 ) { while ( 1 ) ; } if ( a1 ) { v124 = *(a1 + 1); v125 = *(a1 + 2); v126 = *(a1 + 3); *word_20000790 = *a1; dword_20000794[0] = v124; dword_20000794[1] = v125; unk_2000079C = v126; LOWORD(dword_20000794[0]) = v124 | 0x8000; } else { *word_20000790 = 0; dword_20000794[0] = 0; dword_20000794[1] = 0; unk_2000079C = 0; } *word_20000790 = 16; unk_2000079C = 0; sub_8000680(); if ( sub_8000304(&dword_20011F68[3], word_20000790, word_20000790[0]) != *word_20000790 ) { while ( 1 ) ; } } } else { if ( *a1 != 20 ) { while ( 1 ) ; } if ( a1 ) { v121 = *(a1 + 1); v122 = *(a1 + 2); v123 = *(a1 + 3); *word_20000790 = *a1; dword_20000794[0] = v121; dword_20000794[1] = v122; unk_2000079C = v123; LOWORD(dword_20000794[0]) = v121 | 0x8000; } else { *word_20000790 = 0; dword_20000794[0] = 0; dword_20000794[1] = 0; unk_2000079C = 0; } *word_20000790 = 20; unk_2000079C = 0; dword_200007A0 = 0; if ( sub_8000304(&dword_20011F68[3], word_20000790, 20) != 20 ) { while ( 1 ) ; } } } else { if ( *a1 != 24 ) { while ( 1 ) ; } if ( a1 ) { v118 = *(a1 + 1); v119 = *(a1 + 2); v120 = *(a1 + 3); *word_20000790 = *a1; dword_20000794[0] = v118; dword_20000794[1] = v119; unk_2000079C = v120; LOWORD(dword_20000794[0]) = v118 | 0x8000; } else { *word_20000790 = 0; dword_20000794[0] = 0; dword_20000794[1] = 0; unk_2000079C = 0; } *word_20000790 = 24; unk_2000079C = 0; dword_200007A0 = 0; unk_200007A4 = 0; if ( sub_8000304(&dword_20011F68[3], word_20000790, 24) != 24 ) { while ( 1 ) ; } } } else { if ( a1 ) { v115 = *(a1 + 1); v116 = *(a1 + 2); v117 = *(a1 + 3); *word_20000790 = *a1; dword_20000794[0] = v115; dword_20000794[1] = v116; unk_2000079C = v117; LOWORD(dword_20000794[0]) = v115 | 0x8000; } else { *word_20000790 = 0; dword_20000794[0] = 0; dword_20000794[1] = 0; unk_2000079C = 0; } *word_20000790 = 16; unk_2000079C = 0; sub_8000680(); if ( sub_8000304(&dword_20011F68[3], word_20000790, word_20000790[0]) != *word_20000790 ) { while ( 1 ) ; } } } } else { if ( a1 ) { v112 = *(a1 + 1); v113 = *(a1 + 2); v114 = *(a1 + 3); *word_20000790 = *a1; dword_20000794[0] = v112; dword_20000794[1] = v113; unk_2000079C = v114; LOWORD(dword_20000794[0]) = v112 | 0x8000; } else { *word_20000790 = 0; dword_20000794[0] = 0; dword_20000794[1] = 0; unk_2000079C = 0; } *word_20000790 = 20; unk_2000079C = 0; dword_200007A0 = 0; if ( sub_8000304(&dword_20011F68[3], word_20000790, 20) != 20 ) { while ( 1 ) ; } } } else { if ( a1 ) { v109 = *(a1 + 1); v110 = *(a1 + 2); v111 = *(a1 + 3); *word_20000790 = *a1; dword_20000794[0] = v109; dword_20000794[1] = v110; unk_2000079C = v111; LOWORD(dword_20000794[0]) = v109 | 0x8000; } else { *word_20000790 = 0; dword_20000794[0] = 0; dword_20000794[1] = 0; unk_2000079C = 0; } *word_20000790 = 24; unk_2000079C = 0; dword_200007A0 = 0; unk_200007A4 = 0; if ( sub_8000304(&dword_20011F68[3], word_20000790, 24) != 24 ) { while ( 1 ) ; } } } else { if ( a1 ) { v106 = *(a1 + 1); v107 = *(a1 + 2); v108 = *(a1 + 3); *word_20000790 = *a1; dword_20000794[0] = v106; dword_20000794[1] = v107; unk_2000079C = v108; LOWORD(dword_20000794[0]) = v106 | 0x8000; } else { *word_20000790 = 0; dword_20000794[0] = 0; dword_20000794[1] = 0; unk_2000079C = 0; } *word_20000790 = 20; unk_2000079C = 0; dword_200007A0 = 0; if ( sub_8000304(&dword_20011F68[3], word_20000790, 20) != 20 ) { while ( 1 ) ; } } } else { v102 = *(a1 + 4); if ( v102 >= 2 ) { while ( 1 ) ; } sub_80001F4(&word_20000790[6 * v102 + 35844]); if ( a1 ) { v103 = *(a1 + 1); v104 = *(a1 + 2); v105 = *(a1 + 3); *word_20000790 = *a1; dword_20000794[0] = v103; dword_20000794[1] = v104; unk_2000079C = v105; LOWORD(dword_20000794[0]) = v103 | 0x8000; } else { *word_20000790 = 0; dword_20000794[0] = 0; dword_20000794[1] = 0; unk_2000079C = 0; } *word_20000790 = 16; unk_2000079C = 0; sub_8000680(); if ( sub_8000304(&dword_20011F68[3], word_20000790, word_20000790[0]) != *word_20000790 ) { while ( 1 ) ; } } } else { *&word_20000C18 = 720920; unk_20000C1C = 0; dword_20000C20 = 0; unk_20000C24 = 1; unk_20000C28 = 0; unk_20000C2C = 0; unk_20000C2C = sub_8000D76(); unk_20000C28 = unk_20000C2C; if ( sub_8000304(dword_20011F68, &word_20000C18, word_20000C18) != word_20000C18 ) { while ( 1 ) ; } *&word_20000C18 = 720920; unk_20000C1C = 0; dword_20000C20 = 0; unk_20000C24 = 6; unk_20000C28 = 0; unk_20000C2C = 0; unk_20000C2C = sub_8000D76(); unk_20000C28 = unk_20000C2C; if ( sub_8000304(dword_20011F68, &word_20000C18, word_20000C18) != word_20000C18 ) { while ( 1 ) ; } if ( a1 ) { v99 = *(a1 + 1); v100 = *(a1 + 2); v101 = *(a1 + 3); *word_20000790 = *a1; dword_20000794[0] = v99; dword_20000794[1] = v100; unk_2000079C = v101; LOWORD(dword_20000794[0]) = v99 | 0x8000; } else { *word_20000790 = 0; dword_20000794[0] = 0; dword_20000794[1] = 0; unk_2000079C = 0; } *word_20000790 = 16; unk_2000079C = 0; sub_8000680(); if ( sub_8000304(&dword_20011F68[3], word_20000790, word_20000790[0]) != *word_20000790 ) { while ( 1 ) ; } } } else { if ( *a1 <= 0x10u ) { while ( 1 ) ; } v95 = *a1 - 16; if ( *a1 >= 0x400u ) { while ( 1 ) ; } if ( a1 ) { v96 = *(a1 + 1); v97 = *(a1 + 2); v98 = *(a1 + 3); *word_20000790 = *a1; dword_20000794[0] = v96; dword_20000794[1] = v97; unk_2000079C = v98; LOWORD(dword_20000794[0]) = v96 | 0x8000; } else { *word_20000790 = 0; dword_20000794[0] = 0; dword_20000794[1] = 0; unk_2000079C = 0; } *word_20000790 = v95 + 0x10; unk_2000079C = 0; sub_8000680(); sub_80003C4(&dword_200007A0, a1 + 0x10, v95); sub_8004142(&dword_200007A0); if ( sub_8000304(&dword_20011F68[3], word_20000790, word_20000790[0]) != *word_20000790 ) { while ( 1 ) ; } } } else { if ( *a1 <= 0x10u ) { while ( 1 ) ; } v90 = *a1 - 16; if ( *a1 >= 0x400u ) { while ( 1 ) ; } if ( a1 ) { v91 = *(a1 + 1); v92 = *(a1 + 2); v93 = *(a1 + 3); *word_20000790 = *a1; dword_20000794[0] = v91; dword_20000794[1] = v92; unk_2000079C = v93; LOWORD(dword_20000794[0]) = v91 | 0x8000; } else { *word_20000790 = 0; dword_20000794[0] = 0; dword_20000794[1] = 0; unk_2000079C = 0; } *word_20000790 = v90 + 0x10; unk_2000079C = 0; sub_8000680(); sub_80003C4(&dword_200007A0, a1 + 0x10, v90); if ( sub_80040D8(&dword_200007A0) < 0 ) v94 = -1073741824; else v94 = 0; unk_2000079C = v94; if ( sub_8000304(&dword_20011F68[3], word_20000790, word_20000790[0]) != *word_20000790 ) { while ( 1 ) ; } } } else { if ( *a1 < 0x14u ) { while ( 1 ) ; } unk_20000B98 = *(a1 + 4); v86 = *a1; if ( *a1 >= 0x400u ) { while ( 1 ) ; } if ( a1 ) { v87 = *(a1 + 1); v88 = *(a1 + 2); v89 = *(a1 + 3); *word_20000790 = *a1; dword_20000794[0] = v87; dword_20000794[1] = v88; unk_2000079C = v89; LOWORD(dword_20000794[0]) = v87 | 0x8000; } else { *word_20000790 = 0; dword_20000794[0] = 0; dword_20000794[1] = 0; unk_2000079C = 0; } *word_20000790 = v86; unk_2000079C = 0; sub_8000680(); dword_200007A0 = *(a1 + 4); if ( sub_8000304(&dword_20011F68[3], word_20000790, word_20000790[0]) != *word_20000790 ) { while ( 1 ) ; } } } else { if ( *a1 != 16 ) { while ( 1 ) ; } if ( a1 ) { v83 = *(a1 + 1); v84 = *(a1 + 2); v85 = *(a1 + 3); *word_20000790 = *a1; dword_20000794[0] = v83; dword_20000794[1] = v84; unk_2000079C = v85; LOWORD(dword_20000794[0]) = v83 | 0x8000; } else { *word_20000790 = 0; dword_20000794[0] = 0; dword_20000794[1] = 0; unk_2000079C = 0; } *word_20000790 = 16; unk_2000079C = 0; sub_8000680(); if ( sub_8000304(&dword_20011F68[3], word_20000790, word_20000790[0]) != *word_20000790 ) { while ( 1 ) ; } sub_8000680(); unk_20000C24 = 6; unk_20000C1A = 6; word_20000C18 = 48; LOBYTE(word_20000C25) = 0; unk_20000C38 = 0; unk_20000C3C = 0; unk_20000C34 = 1; unk_20000C40 = 9; unk_20000C30 = 316; unk_20000C44 = 65534; if ( sub_8000304(dword_20011F68, &word_20000C18, 48) != 48 ) { while ( 1 ) ; } sub_8000680(); unk_20000C24 = 6; unk_20000C1A = 6; LOBYTE(word_20000C25) = 1; unk_20000C34 = 1; word_20000C18 = 48; unk_20000C38 = 0; unk_20000C3C = 0; unk_20000C30 = 316; unk_20000C40 = 9; unk_20000C44 = 65534; if ( sub_8000304(dword_20011F68, &word_20000C18, 48) != 48 ) { while ( 1 ) ; } sub_8000680(); word_20000C18 = 48; unk_20000C24 = 6; unk_20000C1A = 6; unk_20000C30 = 0; LOBYTE(word_20000C25) = 2; unk_20000C38 = 10; unk_20000C34 = 0; unk_20000C3C = 0; unk_20000C40 = 9; unk_20000C44 = 65534; if ( sub_8000304(dword_20011F68, &word_20000C18, 48) != 48 ) { while ( 1 ) ; } sub_8000680(); word_20000C18 = 48; unk_20000C24 = 6; unk_20000C1A = 6; unk_20000C30 = 0; LOBYTE(word_20000C25) = 3; unk_20000C38 = 10; unk_20000C34 = 0; unk_20000C3C = 0; unk_20000C40 = 9; unk_20000C44 = 65534; if ( sub_8000304(dword_20011F68, &word_20000C18, 48) != 48 ) { while ( 1 ) ; } sub_8000680(); word_20000C18 = 48; unk_20000C24 = 6; unk_20000C1A = 6; unk_20000C30 = 0; LOBYTE(word_20000C25) = 4; unk_20000C38 = 10; unk_20000C34 = 0; unk_20000C3C = 0; unk_20000C40 = 9; unk_20000C44 = 65534; if ( sub_8000304(dword_20011F68, &word_20000C18, 48) != 48 ) { while ( 1 ) ; } *&word_20000C18 = 3276824; unk_20000C1C = 0; dword_20000C20 = 0; unk_20000C24 = 6; unk_20000C28 = 0; unk_20000C2C = 0; if ( sub_8000304(dword_20011F68, &word_20000C18, 24) != 24 ) { while ( 1 ) ; } } } else { if ( *a1 != 16 ) { while ( 1 ) ; } if ( a1 ) { v80 = *(a1 + 1); v81 = *(a1 + 2); v82 = *(a1 + 3); *word_20000790 = *a1; dword_20000794[0] = v80; dword_20000794[1] = v81; unk_2000079C = v82; LOWORD(dword_20000794[0]) = v80 | 0x8000; } else { *word_20000790 = 0; dword_20000794[0] = 0; dword_20000794[1] = 0; unk_2000079C = 0; } *word_20000790 = 16; unk_2000079C = 0; sub_8000680(); if ( sub_8000304(&dword_20011F68[3], word_20000790, word_20000790[0]) != *word_20000790 ) { while ( 1 ) ; } } } else { if ( *a1 != 16 ) { while ( 1 ) ; } if ( a1 ) { v77 = *(a1 + 1); v78 = *(a1 + 2); v79 = *(a1 + 3); *word_20000790 = *a1; dword_20000794[0] = v77; dword_20000794[1] = v78; unk_2000079C = v79; LOWORD(dword_20000794[0]) = v77 | 0x8000; } else { *word_20000790 = 0; dword_20000794[0] = 0; dword_20000794[1] = 0; unk_2000079C = 0; } *word_20000790 = 16; unk_2000079C = 0; sub_8000680(); if ( sub_8000304(&dword_20011F68[3], word_20000790, word_20000790[0]) != *word_20000790 ) { while ( 1 ) ; } *&word_20000C18 = 3276824; unk_20000C1C = 0; dword_20000C20 = 0; unk_20000C24 = 6; unk_20000C28 = 0; unk_20000C2C = 0; if ( sub_8000304(dword_20011F68, &word_20000C18, 24) != 24 ) { while ( 1 ) ; } sub_8000E28(4, 2, 0); v20 = 1; LABEL_40: unk_20000B90 = v20; } } else { if ( *(a1 + 4) == 1 ) v73 = *(a1 + 5); else v73 = 0; unk_20000B9C = v73; if ( a1 ) { v74 = *(a1 + 1); v75 = *(a1 + 2); v76 = *(a1 + 3); *word_20000790 = *a1; dword_20000794[0] = v74; dword_20000794[1] = v75; unk_2000079C = v76; LOWORD(dword_20000794[0]) = v74 | 0x8000; } else { *word_20000790 = 0; dword_20000794[0] = 0; dword_20000794[1] = 0; unk_2000079C = 0; } *word_20000790 = 16; unk_2000079C = 0; sub_8000680(); if ( sub_8000304(&dword_20011F68[3], word_20000790, word_20000790[0]) != *word_20000790 ) { while ( 1 ) ; } } } else { if ( *a1 != 24 ) { while ( 1 ) ; } if ( a1 ) { v70 = *(a1 + 1); v71 = *(a1 + 2); v72 = *(a1 + 3); *word_20000790 = *a1; dword_20000794[0] = v70; dword_20000794[1] = v71; unk_2000079C = v72; LOWORD(dword_20000794[0]) = v70 | 0x8000; } else { *word_20000790 = 0; dword_20000794[0] = 0; dword_20000794[1] = 0; unk_2000079C = 0; } *word_20000790 = 16; unk_2000079C = 0; sub_8000680(); if ( sub_8000304(&dword_20011F68[3], word_20000790, word_20000790[0]) != *word_20000790 ) { while ( 1 ) ; } } } else { if ( *a1 <= 0x10u ) { while ( 1 ) ; } v66 = *a1 - 16; if ( *a1 >= 0x400u ) { while ( 1 ) ; } if ( a1 ) { v67 = *(a1 + 1); v68 = *(a1 + 2); v69 = *(a1 + 3); *word_20000790 = *a1; dword_20000794[0] = v67; dword_20000794[1] = v68; unk_2000079C = v69; LOWORD(dword_20000794[0]) = v67 | 0x8000; } else { *word_20000790 = 0; dword_20000794[0] = 0; dword_20000794[1] = 0; unk_2000079C = 0; } *word_20000790 = v66 + 0x10; unk_2000079C = 0; sub_8000680(); sub_80003C4(&dword_200007A0, a1 + 0x10, v66); if ( sub_8003FBC(&dword_200007A0) < 0 ) { unk_2000079C = -1073741824; *word_20000790 = 16; } if ( sub_8000304(&dword_20011F68[3], word_20000790, word_20000790[0]) != *word_20000790 ) { while ( 1 ) ; } } } else { if ( *a1 <= 0x10u ) { while ( 1 ) ; } v61 = *a1 - 16; if ( *a1 >= 0x400u ) { while ( 1 ) ; } if ( a1 ) { v62 = *(a1 + 1); v63 = *(a1 + 2); v64 = *(a1 + 3); *word_20000790 = *a1; dword_20000794[0] = v62; dword_20000794[1] = v63; unk_2000079C = v64; LOWORD(dword_20000794[0]) = v62 | 0x8000; } else { *word_20000790 = 0; dword_20000794[0] = 0; dword_20000794[1] = 0; unk_2000079C = 0; } *word_20000790 = v61 + 0x10; unk_2000079C = 0; sub_8000680(); sub_80003C4(&dword_200007A0, a1 + 0x10, v61); v65 = sub_8003F48(&dword_200007A0); if ( v65 < 0 ) { unk_2000079C = -1073741824; *word_20000790 = 16; } else { unk_2000079C = 0; *word_20000790 = v65 + 16; } if ( sub_8000304(&dword_20011F68[3], word_20000790, word_20000790[0]) != *word_20000790 ) { while ( 1 ) ; } } } else { if ( *a1 != 156 ) { while ( 1 ) ; } if ( a1 ) { v58 = *(a1 + 1); v59 = *(a1 + 2); v60 = *(a1 + 3); *word_20000790 = *a1; dword_20000794[0] = v58; dword_20000794[1] = v59; unk_2000079C = v60; LOWORD(dword_20000794[0]) = v58 | 0x8000; } else { *word_20000790 = 0; dword_20000794[0] = 0; dword_20000794[1] = 0; unk_2000079C = 0; } *word_20000790 = 156; unk_2000079C = 0; sub_8000680(); unk_200007A4 = 17434892; unk_200007B8 = 4176; unk_200007CC = 9; unk_200007BC = -1; unk_200007C0 = -1; unk_200007C8 = 10; unk_200007D0 = 12; unk_200007D4 = 151322638; unk_200007D8 = 6; dword_200007A0 = 0; unk_200007A8 = 0; unk_200007AC = 0; unk_200007B0 = 0; unk_200007B4 = 0; unk_200007C4 = 0; unk_200007EC = 0; if ( sub_8000304(&dword_20011F68[3], word_20000790, word_20000790[0]) != *word_20000790 ) { while ( 1 ) ; } } } break; case 3: switch ( *(a1 + 2) ) { case 1: v139 = *(a1 + 4); if ( v139 >= 2 ) { while ( 1 ) ; } v140 = &word_20000790[28 * v139]; *(v140 + 274) = 0; *(v140 + 262) = 1; if ( v139 > 6u ) { while ( 1 ) ; } *&word_20000C18 = 67895320; unk_20000C1C = 0; dword_20000C20 = 0; unk_20000C24 = 1; unk_20000C28 = 0; unk_20000C2C = 0; LOBYTE(word_20000C25) = v139; unk_20000C2C = sub_8000D76(); unk_20000C28 = unk_20000C2C; if ( sub_8000304(dword_20011F68, &word_20000C18, word_20000C18) != word_20000C18 ) { while ( 1 ) ; } v141 = -(v139 != 0); sub_800309A(v141 >> 0x1F, *(v140 + 264)); sub_8002F10(v141 >> 0x1F, 0, 0, 0, 0u); sub_80031B4(v141 >> 0x1F, 1); if ( a1 ) { v142 = *(a1 + 1); v143 = *(a1 + 2); v144 = *(a1 + 3); *word_20000790 = *a1; dword_20000794[0] = v142; dword_20000794[1] = v143; unk_2000079C = v144; LOWORD(dword_20000794[0]) = v142 | 0x8000; } else { *word_20000790 = 0; dword_20000794[0] = 0; dword_20000794[1] = 0; unk_2000079C = 0; } *word_20000790 = 16; unk_2000079C = 0; sub_8000680(); if ( sub_8000304(&dword_20011F68[3], word_20000790, word_20000790[0]) != *word_20000790 ) { while ( 1 ) ; } break; case 2: v145 = *(a1 + 4); if ( v145 >= 2 ) { while ( 1 ) ; } v146 = &word_20000790[28 * v145]; *(v146 + 262) = 0; *(v146 + 269) = 0; *(v146 + 270) = 0; sub_80031B4(v145 != 0, 0); if ( a1 ) { v147 = *(a1 + 1); v148 = *(a1 + 2); v149 = *(a1 + 3); *word_20000790 = *a1; dword_20000794[0] = v147; dword_20000794[1] = v148; unk_2000079C = v149; LOWORD(dword_20000794[0]) = v147 | 0x8000; } else { *word_20000790 = 0; dword_20000794[0] = 0; dword_20000794[1] = 0; unk_2000079C = 0; } *word_20000790 = 16; unk_2000079C = 0; sub_8000680(); if ( sub_8000304(&dword_20011F68[3], word_20000790, word_20000790[0]) != *word_20000790 ) { while ( 1 ) ; } break; case 3: v150 = *(a1 + 4); if ( v150 >= 2 ) { while ( 1 ) ; } *&word_20000790[28 * v150 + 526] = *(a1 + 5); if ( a1 ) { v151 = *(a1 + 1); v152 = *(a1 + 2); v153 = *(a1 + 3); *word_20000790 = *a1; dword_20000794[0] = v151; dword_20000794[1] = v152; unk_2000079C = v153; LOWORD(dword_20000794[0]) = v151 | 0x8000; } else { *word_20000790 = 0; dword_20000794[0] = 0; dword_20000794[1] = 0; unk_2000079C = 0; } *word_20000790 = 16; unk_2000079C = 0; sub_8000680(); if ( sub_8000304(&dword_20011F68[3], word_20000790, word_20000790[0]) != *word_20000790 ) { while ( 1 ) ; } break; case 4: v154 = *(a1 + 4); if ( v154 >= 2 ) { while ( 1 ) ; } v155 = &word_20000790[28 * v154]; v155[264] = *(a1 + 5); v155[265] = *(a1 + 6); v155[266] = *(a1 + 7); v155[267] = *(a1 + 8); v155[268] = *(a1 + 9); sub_800309A(v154 != 0, v155[264]); if ( a1 ) { v156 = *(a1 + 1); v157 = *(a1 + 2); v158 = *(a1 + 3); *word_20000790 = *a1; dword_20000794[0] = v156; dword_20000794[1] = v157; unk_2000079C = v158; LOWORD(dword_20000794[0]) = v156 | 0x8000; } else { *word_20000790 = 0; dword_20000794[0] = 0; dword_20000794[1] = 0; unk_2000079C = 0; } *word_20000790 = 16; unk_2000079C = 0; sub_8000680(); if ( sub_8000304(&dword_20011F68[3], word_20000790, word_20000790[0]) != *word_20000790 ) { while ( 1 ) ; } break; case 5: if ( a1 ) { v159 = *(a1 + 1); v160 = *(a1 + 2); v161 = *(a1 + 3); *word_20000790 = *a1; dword_20000794[0] = v159; dword_20000794[1] = v160; unk_2000079C = v161; LOWORD(dword_20000794[0]) = v159 | 0x8000; } else { *word_20000790 = 0; dword_20000794[0] = 0; dword_20000794[1] = 0; unk_2000079C = 0; } *word_20000790 = 16; unk_2000079C = 0; sub_8000680(); if ( sub_8000304(&dword_20011F68[3], word_20000790, word_20000790[0]) != *word_20000790 ) { while ( 1 ) ; } break; case 9: if ( a1 ) { v162 = *(a1 + 1); v163 = *(a1 + 2); v164 = *(a1 + 3); *word_20000790 = *a1; dword_20000794[0] = v162; dword_20000794[1] = v163; unk_2000079C = v164; LOWORD(dword_20000794[0]) = v162 | 0x8000; } else { *word_20000790 = 0; dword_20000794[0] = 0; dword_20000794[1] = 0; unk_2000079C = 0; } *word_20000790 = 16; unk_2000079C = 0; sub_8000680(); if ( sub_8000304(&dword_20011F68[3], word_20000790, word_20000790[0]) != *word_20000790 ) { while ( 1 ) ; } break; case 0xB: if ( a1 ) { v165 = *(a1 + 1); v166 = *(a1 + 2); v167 = *(a1 + 3); *word_20000790 = *a1; dword_20000794[0] = v165; dword_20000794[1] = v166; unk_2000079C = v167; LOWORD(dword_20000794[0]) = v165 | 0x8000; } else { *word_20000790 = 0; dword_20000794[0] = 0; dword_20000794[1] = 0; unk_2000079C = 0; } *word_20000790 = 16; unk_2000079C = 0; sub_8000680(); if ( sub_8000304(&dword_20011F68[3], word_20000790, word_20000790[0]) != *word_20000790 ) { while ( 1 ) ; } break; case 0xC: if ( a1 ) { v168 = *(a1 + 1); v169 = *(a1 + 2); v170 = *(a1 + 3); *word_20000790 = *a1; dword_20000794[0] = v168; dword_20000794[1] = v169; unk_2000079C = v170; LOWORD(dword_20000794[0]) = v168 | 0x8000; } else { *word_20000790 = 0; dword_20000794[0] = 0; dword_20000794[1] = 0; unk_2000079C = 0; } *word_20000790 = 16; unk_2000079C = 0; sub_8000680(); if ( sub_8000304(&dword_20011F68[3], word_20000790, word_20000790[0]) != *word_20000790 ) { while ( 1 ) ; } break; case 0xD: if ( *a1 != 16 ) { while ( 1 ) ; } if ( a1 ) { v171 = *(a1 + 1); v172 = *(a1 + 2); v173 = *(a1 + 3); *word_20000790 = *a1; dword_20000794[0] = v171; dword_20000794[1] = v172; unk_2000079C = v173; LOWORD(dword_20000794[0]) = v171 | 0x8000; } else { *word_20000790 = 0; dword_20000794[0] = 0; dword_20000794[1] = 0; unk_2000079C = 0; } *word_20000790 = 16; unk_2000079C = 0; sub_8000680(); if ( sub_8000304(&dword_20011F68[3], word_20000790, word_20000790[0]) != *word_20000790 ) { while ( 1 ) ; } *&word_20000C18 = 3145752; unk_20000C1C = 0; dword_20000C20 = 0; unk_20000C24 = 1; unk_20000C28 = 0; unk_20000C2C = 0; unk_20000C2C = sub_8000D76(); unk_20000C28 = unk_20000C2C; if ( sub_8000304(dword_20011F68, &word_20000C18, word_20000C18) != word_20000C18 ) { while ( 1 ) ; } break; case 0xE: if ( a1 ) { v174 = *(a1 + 1); v175 = *(a1 + 2); v176 = *(a1 + 3); *word_20000790 = *a1; dword_20000794[0] = v174; dword_20000794[1] = v175; unk_2000079C = v176; LOWORD(dword_20000794[0]) = v174 | 0x8000; } else { *word_20000790 = 0; dword_20000794[0] = 0; dword_20000794[1] = 0; unk_2000079C = 0; } *word_20000790 = 16; unk_2000079C = 0; sub_8000680(); v177 = *(a1 + 4); if ( v177 >= 2 ) { while ( 1 ) ; } *(&unk_20000BD8 + 14 * v177) = *(a1 + 8) >> 6; if ( sub_8000304(&dword_20011F68[3], word_20000790, word_20000790[0]) != *word_20000790 ) { while ( 1 ) ; } break; case 0xF: if ( a1 ) { v178 = *(a1 + 1); v179 = *(a1 + 2); v180 = *(a1 + 3); *word_20000790 = *a1; dword_20000794[0] = v178; dword_20000794[1] = v179; unk_2000079C = v180; LOWORD(dword_20000794[0]) = v178 | 0x8000; } else { *word_20000790 = 0; dword_20000794[0] = 0; dword_20000794[1] = 0; unk_2000079C = 0; } *word_20000790 = 16; unk_2000079C = 0; sub_8000680(); v181 = *(a1 + 4); if ( v181 >= 2 ) { while ( 1 ) ; } *(&unk_20000BD8 + 14 * v181) = 0; if ( sub_8000304(&dword_20011F68[3], word_20000790, word_20000790[0]) != *word_20000790 ) { while ( 1 ) ; } break; case 0x10: v182 = *(a1 + 4); if ( v182 >= 2 ) { while ( 1 ) ; } v183 = *(a1 + 5); *&word_20000790[28 * v182 + 528] = v183; sub_800309A(v182 != 0, v183); if ( a1 ) { v184 = *(a1 + 1); v185 = *(a1 + 2); v186 = *(a1 + 3); *word_20000790 = *a1; dword_20000794[0] = v184; dword_20000794[1] = v185; unk_2000079C = v186; LOWORD(dword_20000794[0]) = v184 | 0x8000; } else { *word_20000790 = 0; dword_20000794[0] = 0; dword_20000794[1] = 0; unk_2000079C = 0; } *word_20000790 = 16; unk_2000079C = 0; sub_8000680(); if ( sub_8000304(&dword_20011F68[3], word_20000790, word_20000790[0]) != *word_20000790 ) { while ( 1 ) ; } break; case 0x11: if ( a1 ) { v187 = *(a1 + 1); v188 = *(a1 + 2); v189 = *(a1 + 3); *word_20000790 = *a1; dword_20000794[0] = v187; dword_20000794[1] = v188; unk_2000079C = v189; LOWORD(dword_20000794[0]) = v187 | 0x8000; } else { *word_20000790 = 0; dword_20000794[0] = 0; dword_20000794[1] = 0; unk_2000079C = 0; } *word_20000790 = 16; unk_2000079C = 0; sub_8000680(); if ( sub_8000304(&dword_20011F68[3], word_20000790, word_20000790[0]) != *word_20000790 ) { while ( 1 ) ; } break; case 0x12: if ( a1 ) { v190 = *(a1 + 1); v191 = *(a1 + 2); v192 = *(a1 + 3); *word_20000790 = *a1; dword_20000794[0] = v190; dword_20000794[1] = v191; unk_2000079C = v192; LOWORD(dword_20000794[0]) = v190 | 0x8000; } else { *word_20000790 = 0; dword_20000794[0] = 0; dword_20000794[1] = 0; unk_2000079C = 0; } *word_20000790 = 16; unk_2000079C = 0; sub_8000680(); if ( sub_8000304(&dword_20011F68[3], word_20000790, word_20000790[0]) != *word_20000790 ) { while ( 1 ) ; } break; case 0x13: if ( *a1 != 20 ) { while ( 1 ) ; } if ( a1 ) { v193 = *(a1 + 1); v194 = *(a1 + 2); v195 = *(a1 + 3); *word_20000790 = *a1; dword_20000794[0] = v193; dword_20000794[1] = v194; unk_2000079C = v195; LOWORD(dword_20000794[0]) = v193 | 0x8000; } else { *word_20000790 = 0; dword_20000794[0] = 0; dword_20000794[1] = 0; unk_2000079C = 0; } *word_20000790 = 20; unk_2000079C = 0; dword_200007A0 = unk_20000B94; if ( sub_8000304(&dword_20011F68[3], word_20000790, 20) != 20 ) { while ( 1 ) ; } break; default: while ( 1 ) ; } return 0; default: while ( 1 ) ; } return 0; } // 20000790: using guessed type __int16 word_20000790[]; // 20000794: using guessed type _DWORD dword_20000794[2]; // 200007A0: using guessed type _DWORD dword_200007A0; // 20000C18: using guessed type unsigned __int16 word_20000C18; // 20000C20: using guessed type _DWORD dword_20000C20; // 20000C25: using guessed type __int16 word_20000C25; // 20011F68: using guessed type int dword_20011F68[33]; //----- (08002C58) -------------------------------------------------------- unsigned int sub_8002C58() { unsigned int result; // r0 result = sub_80001C4(&dword_20011F68[9]); if ( result >= 0x10 ) { if ( sub_800022C(&dword_20011F68[9], &word_20000D38, 16) != 16 ) { while ( 1 ) ; } result = sub_80001C4(&dword_20011F68[9]); if ( result >= word_20000D38 ) { if ( word_20000D38 >= 0x401 ) { while ( 1 ) ; } if ( sub_8000298(&dword_20011F68[9], &word_20000D38, word_20000D38) != word_20000D38 ) { while ( 1 ) ; } return sub_80016A4(&word_20000D38, word_20000D38); } } return result; } // 20000D38: using guessed type unsigned int word_20000D38; // 20011F68: using guessed type int dword_20011F68[33]; //----- (08002CC0) -------------------------------------------------------- int __fastcall sub_8002CC0(unsigned __int16 *a1, int a2) { int v4; // r7 __int16 *v5; // r5 int v6; // r0 v4 = 1; v5 = &word_20000790[28 * a2]; while ( sub_80001C4(a1) >= 0x10 ) { if ( !v4-- ) break; if ( sub_800022C(a1, &word_20000D38, 16) != 16 ) { while ( 1 ) ; } if ( sub_80001C4(a1) < word_20000D38 ) return -1; if ( word_20000D38 >= 0x401 ) { while ( 1 ) ; } if ( sub_800022C(a1, &word_20000D38, word_20000D38) != word_20000D38 ) { while ( 1 ) ; } unk_20000D44 = a2; if ( unk_20000D3C == 1088 && *(v5 + 274) ) { v6 = sub_8000D6C(); if ( (v6 - *(v5 + 275)) < *(v5 + 274) ) return 0; *(v5 + 275) = v6; } if ( sub_80016A4(&word_20000D38, word_20000D38) < 0 ) break; *(v5 + 270) += word_20000D38; sub_80001FA(a1, word_20000D38); } return 0; } // 20000790: using guessed type __int16 word_20000790[]; // 20000D38: using guessed type unsigned int word_20000D38; //----- (08002D8E) -------------------------------------------------------- int __fastcall sub_8002D8E(char *a1, unsigned int a2) { __int16 v2; // r4 unsigned __int16 v4; // r5 int v5; // r5 int v6; // r4 char *v7; // r3 unsigned __int16 v8; // r5 v2 = a2; if ( (MEMORY[0xE000EDF0] & 1) != 0 ) return -1; v4 = word_2001467C; if ( a2 + word_2001467C >= 0x1000 ) { while ( 1 ) ; } sub_80003C4(&unk_2001367C + word_2001467C, a1, a2); word_2001467C = v2 + v4; do { v5 = unk_2001367C; v6 = (unk_2001367C + 4); if ( unk_2001367E >= 2u ) { while ( 1 ) ; } if ( v6 >= 0x1000 ) { while ( 1 ) ; } if ( word_2001467C < v6 ) break; if ( sub_8000304(&unk_20000790 + 3 * unk_2001367E + 17922, &unk_20013680, unk_2001367C) != v5 ) { while ( 1 ) ; } v8 = word_2001467C; sub_8003EB0(&unk_2001367C, &unk_2001367C + v6, word_2001467C - v6, v7); word_2001467C = v8 - v6; } while ( v8 != v6 ); return 0; } // 8002DFE: variable 'v7' is possibly undefined // 2001467C: using guessed type unsigned __int16 word_2001467C; //----- (08002E34) -------------------------------------------------------- int sub_8002E34() { int result; // r0 if ( sub_800423C(536957576, 536870928, 1) ) sub_8000670(); if ( sub_8004266(536957576, 536871220) ) sub_8000670(); sub_80009EC(0x64u); result = sub_8004276(536957576); if ( result ) sub_8000670(); return result; } //----- (08002E6E) -------------------------------------------------------- int sub_8002E6E() { return sub_8004714(536954496); } //----- (08002E84) -------------------------------------------------------- int __fastcall sub_8002E84(int a1) { char v1; // r1 int v2; // r0 v1 = *(a1 + 8); v2 = 8 * *(a1 + 9); if ( (v1 & 1) != 0 ) return v2 + 67; else return v2 + 47; } //----- (08002E98) -------------------------------------------------------- int sub_8002E98() { int v0; // r5 int result; // r0 v0 = sub_8000D72(); sub_80054A0(dword_200006C8); sub_80054A0(&dword_200006C8[10]); result = unk_200006C4 - v0; if ( (unk_200006C4 - v0) >= 0xFB ) { unk_200006C4 = v0; if ( dword_20000414 && unk_2000040C != *(*unk_2000016C + 24) ) { unk_2000040C = *(*unk_2000016C + 24); dword_20000414(0); } result = dword_200006C0; if ( dword_200006C0 ) { result = *unk_20000418; if ( unk_200006B8 != *(*unk_20000418 + 24) ) { unk_200006B8 = *(result + 24); return dword_200006C0(1); } } } return result; } // 8000D72: using guessed type int sub_8000D72(void); // 20000414: using guessed type void (__fastcall *dword_20000414)(_DWORD); // 200006C0: using guessed type int (__fastcall *dword_200006C0)(_DWORD); // 200006C8: using guessed type int[20]; //----- (08002F10) -------------------------------------------------------- int __fastcall sub_8002F10(int a1, int a2, int a3, int a4, unsigned int a5) { _DWORD *v9; // r0 int result; // r0 int v11; // [sp+0h] [bp-40h] BYREF int v12; // [sp+4h] [bp-3Ch] unsigned int v13; // [sp+8h] [bp-38h] int v14; // [sp+Ch] [bp-34h] int v15; // [sp+10h] [bp-30h] int v16; // [sp+14h] [bp-2Ch] int v17; // [sp+18h] [bp-28h] int v18; // [sp+1Ch] [bp-24h] int v19; // [sp+20h] [bp-20h] int v20; // [sp+24h] [bp-1Ch] sub_80056C2(&v11, 0u, 0x28u); v9 = *(&unk_2000016C + 171 * a1); if ( a2 >= 14 ) return -1; if ( *v9 == 1073768448 ) a2 += 14; v17 = 0; v18 = 1; if ( a3 == 1 ) { v11 = (a4 & 0x1FFFFFFF) >> 13; v12 = (8 * a4) | 4; v13 = a5 >> 13; v14 = (8 * a5) | 4; } else { v11 = (32 * a4) & 0xFFE0; v12 = 0; v13 = 32 * a5; v14 = 0; } v19 = 1; v15 = 0; v20 = 14; v16 = a2; result = sub_8005074(v9, &v11); if ( result ) return -1; return result; } //----- (08002FA4) -------------------------------------------------------- int __fastcall sub_8002FA4(int a1, int a2) { unsigned __int8 *v3; // r5 char v4; // r0 int v5; // r1 int v6; // r0 int v8; // [sp+0h] [bp-30h] BYREF int v9; // [sp+4h] [bp-2Ch] BYREF int v10; // [sp+8h] [bp-28h] int v11; // [sp+Ch] [bp-24h] int v12; // [sp+10h] [bp-20h] int v13; // [sp+14h] [bp-1Ch] int v14; // [sp+18h] [bp-18h] v9 = 0; v10 = 0; v11 = 0; v12 = 0; v13 = 0; v14 = 0; v3 = *(&unk_2000016C + 171 * a1); v8 = 0; v4 = *(a2 + 8); v5 = *(a2 + 4); if ( (v4 & 1) != 0 ) { v10 = v5; v11 = 4; } else { v9 = v5; v11 = 0; } v13 = *(a2 + 9); if ( (*(a2 + 8) & 2) != 0 ) v6 = 2; else v6 = 0; v12 = v6; if ( sub_8005346(v3, 1) && sub_8005346(v3, 2) || sub_8005224(v3, &v9, (a2 + 0xA), &v8) ) return -1; else return v8; } //----- (0800301A) -------------------------------------------------------- int __fastcall sub_800301A(int a1, _DWORD *a2) { char *v2; // r0 int v3; // r2 char *v5; // r2 int v6; // r6 int v7; // r7 int v8; // r12 int v9; // lr v2 = &unk_2000016C + 684 * a1; v3 = *(v2 + 167); if ( *(v2 + 166) == v3 ) return 0; if ( a2 ) { v5 = &v2[20 * v3]; v6 = *(v5 + 7); v7 = *(v5 + 8); v8 = *(v5 + 9); v9 = *(v5 + 10); *a2 = *(v5 + 6); a2[1] = v6; a2[2] = v7; a2[3] = v8; a2[4] = v9; } *(v2 + 167) = (*(v2 + 167) + 1) & 0x1F; return 1; } //----- (08003060) -------------------------------------------------------- int __fastcall sub_8003060(int a1) { char *v1; // r0 int v2; // r1 v1 = &unk_2000016C + 684 * a1; v2 = *(v1 + 167); if ( *(v1 + 166) == v2 ) return 0; else return &v1[20 * v2 + 24]; } //----- (08003088) -------------------------------------------------------- char *__fastcall sub_8003088(int a1, int a2) { char *result; // r0 result = &unk_2000016C + 684 * a1; *(result + 170) = a2; return result; } //----- (0800309A) -------------------------------------------------------- int __fastcall sub_800309A(int a1, int a2) { int v2; // r4 int v3; // r0 int result; // r0 v2 = *(&unk_2000016C + 171 * a1); *(v2 + 8) = 0; *(v2 + 12) = 0; *(v2 + 24) = 0; *(v2 + 25) = 1; *(v2 + 26) = 1; *(v2 + 27) = 1; *(v2 + 28) = 0; *(v2 + 29) = 1; switch ( a2 ) { case 20000: *(v2 + 16) = 655360; *(v2 + 20) = 0x100000; *(v2 + 4) = 150; goto LABEL_20; case 33333: *(v2 + 16) = 655360; *(v2 + 20) = 0x100000; v3 = 90; LABEL_19: *(v2 + 4) = v3; goto LABEL_20; case 50000: *(v2 + 16) = 655360; *(v2 + 20) = 0x100000; *(v2 + 4) = 60; goto LABEL_20; case 100000: *(v2 + 16) = 655360; *(v2 + 20) = 0x100000; v3 = 30; goto LABEL_19; case 125000: *(v2 + 16) = 655360; *(v2 + 20) = 0x100000; *(v2 + 4) = 24; goto LABEL_20; case 250000: *(v2 + 16) = 655360; *(v2 + 20) = 0x100000; v3 = 12; goto LABEL_19; } if ( a2 != 500000 ) { if ( a2 == 800000 ) return -1; *(v2 + 16) = 655360; *(v2 + 20) = 0x100000; if ( a2 == 1000000 ) v3 = 3; else v3 = 300; goto LABEL_19; } *(v2 + 16) = 655360; *(v2 + 20) = 0x100000; *(v2 + 4) = 6; LABEL_20: if ( sub_8004F64(v2) ) return -1; if ( sub_800547C(v2, 35603) ) return -1; result = sub_800515E(v2); if ( result ) return -1; return result; } //----- (080031B4) -------------------------------------------------------- int __fastcall sub_80031B4(int a1, int a2) { int v2; // r0 int v3; // r4 v2 = 684 * a1; v3 = *(&unk_2000016C + v2); if ( a2 ) { sub_800515E(*(&unk_2000016C + v2)); return sub_8005300(v3, 7); } else { sub_8005300(*(&unk_2000016C + v2), 7); return sub_80051BA(v3); } } //----- (080031E8) -------------------------------------------------------- int __fastcall sub_80031E8(int *a1, int a2) { BOOL v2; // r4 _DWORD *v3; // r5 _DWORD *v4; // r7 int *v5; // r6 int result; // r0 int v7; // r7 unsigned int v8; // r0 int (__fastcall *v9)(BOOL); // r1 unsigned int v10[4]; // [sp+0h] [bp-30h] BYREF unsigned int v11; // [sp+10h] [bp-20h] v2 = *a1 != 1073767424 && *a1 == 1073768448; v3 = (&unk_2000016C + 684 * v2); v4 = &v3[5 * v3[166]]; v5 = v4 + 6; result = sub_8005368(a1, a2, v10, v4 + 34); if ( !result ) { result = v3[167]; v7 = (v3[166] + 1) & 0x1F; if ( v7 == result ) { ++v3[5]; } else { result = v11; if ( v11 < 9 ) { *(v5 + 8) = 0; if ( v10[2] ) { v8 = v10[1]; *(v5 + 8) = 1; } else { v8 = v10[0]; } v5[1] = v8; if ( v10[3] ) *(v5 + 8) |= 2u; *(v5 + 9) = v11; *v5 = sub_8000D76(); v3[166] = v7; v9 = v3[169]; result = v3[3] + 1; v3[3] = result; if ( v9 ) return v9(v2); } } } return result; } //----- (08003290) -------------------------------------------------------- int __fastcall sub_8003290(int *a1) { int v1; // r1 int result; // r0 int v3; // [sp+4h] [bp-3Ch] BYREF int v4; // [sp+8h] [bp-38h] int v5; // [sp+Ch] [bp-34h] int v6; // [sp+10h] [bp-30h] int v7; // [sp+14h] [bp-2Ch] int v8; // [sp+18h] [bp-28h] BYREF int v9; // [sp+1Ch] [bp-24h] int v10; // [sp+20h] [bp-20h] int v11; // [sp+24h] [bp-1Ch] int v12; // [sp+28h] [bp-18h] v1 = *a1; result = 1073887280; if ( v1 == 1073767424 ) { if ( (MEMORY[0x40023840] & 0x2000000) == 0 ) MEMORY[0x40023840] |= 0x2000000u; MEMORY[0x40023830] |= 2u; v8 = 256; v9 = 18; v10 = 1; v11 = 3; v12 = 9; sub_80039E8(dword_40020400, &v8); v3 = 512; v4 = 2; v5 = 0; v6 = 3; v7 = 9; } else { if ( v1 != 1073768448 ) return result; if ( (MEMORY[0x40023840] & 0x2000000) == 0 ) MEMORY[0x40023840] |= 0x2000000u; if ( (MEMORY[0x40023840] & 0x4000000) == 0 ) MEMORY[0x40023840] |= 0x4000000u; MEMORY[0x40023830] |= 2u; v8 = 32; v9 = 18; v10 = 1; v11 = 3; v12 = 9; sub_80039E8(dword_40020400, &v8); v3 = 64; v4 = 2; v5 = 0; v6 = 3; v7 = 9; } return sub_80039E8(dword_40020400, &v3); } // 40020400: using guessed type _DWORD dword_40020400[255]; //----- (0800336C) -------------------------------------------------------- char *__fastcall sub_800336C(int *a1) { int v1; // r0 int v2; // r0 char *result; // r0 v1 = *a1; if ( v1 == 1073767424 || v1 != 1073768448 ) v2 = 0; else v2 = 684; result = &unk_2000016C + v2; ++*(result + 1); return result; } //----- (08003390) -------------------------------------------------------- char *__fastcall sub_8003390(int *a1) { int v1; // r0 int v2; // r0 char *result; // r0 v1 = *a1; if ( v1 == 1073767424 || v1 != 1073768448 ) v2 = 0; else v2 = 684; result = &unk_2000016C + v2; ++*(result + 1); return result; } //----- (080033B4) -------------------------------------------------------- char *__fastcall sub_80033B4(int *a1) { int v1; // r0 int v2; // r0 char *result; // r0 v1 = *a1; if ( v1 == 1073767424 || v1 != 1073768448 ) v2 = 0; else v2 = 684; result = &unk_2000016C + v2; ++*(result + 1); return result; } //----- (080033DE) -------------------------------------------------------- int __fastcall sub_80033DE(int *a1) { return sub_80031E8(a1, 0); } //----- (080033E2) -------------------------------------------------------- int __fastcall sub_80033E2(int *a1) { return sub_80031E8(a1, 1); } //----- (080033EE) -------------------------------------------------------- int __fastcall sub_80033EE(_DWORD *a1) { int v2; // r0 int v3; // r1 v2 = sub_800569E(a1); if ( *a1 == 1073767424 || *a1 != 1073768448 ) v3 = 0; else v3 = 684; if ( (v2 & 0x1000) != 0 ) ++*(&unk_2000016C + v3 + 8); if ( (v2 & 0x4000) != 0 ) ++*(&unk_2000016C + v3 + 8); if ( (v2 & 0x10000) != 0 ) ++*(&unk_2000016C + v3 + 8); return sub_80056A2(a1); } //----- (080034C8) -------------------------------------------------------- int __fastcall sub_80034C8(int a1) { int result; // r0 int v3; // r6 __int16 v4; // r6 int v5; // r6 char v6; // r7 char v7; // r6 char v8; // r8 char v9; // r7 result = 1; if ( byte_2001598C[0] == 1 ) return 2; byte_2001598C[0] = 1; if ( (*a1 & 1) != 0 ) { v3 = *(a1 + 8); if ( *(a1 + 4) == 1 ) { result = sub_800362C(0xC350u); if ( result ) goto LABEL_10; v4 = MEMORY[0x40023C16] & ~v3; } else { result = sub_800362C(0xC350u); if ( result ) goto LABEL_10; v4 = v3 | MEMORY[0x40023C16]; } MEMORY[0x40023C16] = v4; } LABEL_10: if ( (*a1 & 2) != 0 ) { v5 = *(a1 + 16); result = sub_800362C(0xC350u); if ( !result ) MEMORY[0x40023C15] = v5; } if ( (*a1 & 4) != 0 ) { v6 = *(a1 + 24); result = sub_800362C(0xC350u); v7 = v6 & 0x80; v8 = v6 & 0x40; v9 = v6 & 0x20; if ( !result ) MEMORY[0x40023C14] = v8 | v7 | v9 | MEMORY[0x40023C14] & 0x1F; } if ( (*a1 & 8) != 0 ) { MEMORY[0x40023C14] = *(a1 + 20) | MEMORY[0x40023C14] & 0xF3; result = 0; } byte_2001598C[0] = 0; return result; } // 2001598C: using guessed type unsigned __int8 byte_2001598C[4]; //----- (0800357E) -------------------------------------------------------- int __fastcall sub_800357E(int result) { int v1; // r2 *result = 15; *(result + 8) = MEMORY[0x40023C16]; v1 = 170; if ( MEMORY[0x40023C15] == 204 ) { v1 = 204; } else if ( MEMORY[0x40023C15] != 170 ) { v1 = 85; } *(result + 16) = v1; *(result + 24) = MEMORY[0x40023C14] & 0xE0; *(result + 20) = MEMORY[0x40023C14] & 0xC; return result; } //----- (080035B8) -------------------------------------------------------- int sub_80035B8() { if ( (MEMORY[0x40023C14] & 1) == 0 ) return 1; MEMORY[0x40023C08] = 1281191551; return 0; } //----- (080035D0) -------------------------------------------------------- int sub_80035D0() { MEMORY[0x40023C14] |= 1u; return 0; } //----- (080035DE) -------------------------------------------------------- int sub_80035DE() { int v0; // r5 MEMORY[0x40023C14] |= 2u; unk_20015990 = 0; v0 = sub_800372C(); while ( (MEMORY[0x40023C0C] & 0x10000) != 0 ) { if ( (sub_800372C() - v0) >= 0xC351 ) return 3; } if ( (MEMORY[0x40023C0C] & 1) != 0 ) MEMORY[0x40023C0C] = 1; if ( (MEMORY[0x40023C0C] & 0xF2) == 0 ) return 0; sub_8003678(); return 1; } //----- (0800362C) -------------------------------------------------------- int __fastcall sub_800362C(unsigned int a1) { int v2; // r5 unk_20015990 = 0; v2 = sub_800372C(); while ( (MEMORY[0x40023C0C] & 0x10000) != 0 ) { if ( a1 != -1 && (!a1 || a1 < sub_800372C() - v2) ) return 3; } if ( (MEMORY[0x40023C0C] & 1) != 0 ) MEMORY[0x40023C0C] = 1; if ( (MEMORY[0x40023C0C] & 0xF2) == 0 ) return 0; sub_8003678(); return 1; } //----- (08003678) -------------------------------------------------------- int sub_8003678() { int result; // r0 result = &unk_20015974; if ( (MEMORY[0x40023C0C] & 0x10) != 0 ) { unk_20015990 |= 0x10u; MEMORY[0x40023C0C] = 16; } if ( (MEMORY[0x40023C0C] & 0x20) != 0 ) { unk_20015990 |= 8u; MEMORY[0x40023C0C] = 32; } if ( (MEMORY[0x40023C0C] & 0x40) != 0 ) { unk_20015990 |= 4u; MEMORY[0x40023C0C] = 64; } if ( (MEMORY[0x40023C0C] & 0x80) != 0 ) { unk_20015990 |= 2u; MEMORY[0x40023C0C] = 128; } if ( (MEMORY[0x40023C0C] & 2) != 0 ) { unk_20015990 |= 0x20u; result = 2; MEMORY[0x40023C0C] = 2; } return result; } //----- (080036F0) -------------------------------------------------------- int *__fastcall sub_80036F0(int *result, unsigned int a2, unsigned __int8 a3) { int v3; // r2 bool v4; // cf int v5; // r1 v3 = (a3 | (a3 << 8)) | ((a3 | (a3 << 8)) << 16); do { v4 = a2 >= 0x10; a2 -= 16; if ( v4 ) { *result = v3; result[1] = v3; result[2] = v3; result[3] = v3; result += 4; } } while ( a2 != 0 && v4 ); if ( __CFSHL__(a2, 29) ) { *result = v3; result[1] = v3; result += 2; } if ( (a2 & 4) != 0 ) *result++ = v3; v4 = __CFSHL__(a2, 0x1F); v5 = a2 << 31; if ( v4 ) { *result = v3; result = (result + 2); } if ( v5 < 0 ) { *result = v3; return (result + 1); } return result; } //----- (0800372C) -------------------------------------------------------- int sub_800372C() { return unk_20000004; } //----- (08003738) -------------------------------------------------------- int __fastcall sub_8003738(unsigned int a1) { if ( sub_8000AA6(unk_2000000C / (0x3E8u / byte_20000000[0])) || a1 >= 0x10 ) return 1; sub_8000A32(-1, a1, 0); unk_20000008 = a1; return 0; } // 20000000: using guessed type unsigned __int8 byte_20000000[4]; //----- (08003780) -------------------------------------------------------- int __fastcall sub_8003780(unsigned __int64 a1, unsigned __int64 a2) { bool v2; // zf unsigned int v3; // r7 unsigned int v4; // r4 unsigned int v5; // r5 __int64 v6; // r2 bool v7; // cf unsigned int v8; // r7 char v9; // r4 int v10; // r6 int v11; // r12 unsigned int v12; // r7 int v13; // r12 unsigned __int64 v14; // r4 signed __int64 v15; // r0 bool v16; // off int v17; // r6 unsigned __int64 v18; // r4 bool v19; // off int v20; // r6 unsigned int v21; // r0 unsigned int v22; // r0 if ( !HIDWORD(a2) ) { if ( !HIDWORD(a1) ) { v2 = a2 == 2; if ( a2 > 2 ) return a1; LABEL_7: if ( a2 && v2 ) a1 >>= 1; return a1; } if ( a2 < 0x10000 ) { v2 = a2 == 2; if ( a2 > 2 ) { LODWORD(a1) = ((a1 | (((((HIDWORD(a1) % a2) << 16) | WORD1(a1)) % a2) << 16)) / a2) | (((((HIDWORD(a1) % a2) << 16) | WORD1(a1)) / a2) << 16); return a1; } goto LABEL_7; } if ( a2 < 0x1000000 ) { HIDWORD(a2) = ((HIDWORD(a1) % a2) << 8) | BYTE3(a1); v21 = (HIDWORD(a2) / a2) | (a1 << 8); HIDWORD(a2) = ((HIDWORD(a2) % a2) << 8) | HIBYTE(v21); v22 = (HIDWORD(a2) / a2) | (v21 << 8); LODWORD(a1) = (((((((HIDWORD(a2) % a2) << 8) | HIBYTE(v22)) % a2) << 8) | ((((((HIDWORD(a2) % a2) << 8) | HIBYTE(v22)) / a2) | (v22 << 8)) >> 0x18)) / a2) | ((((((HIDWORD(a2) % a2) << 8) | HIBYTE(v22)) / a2) | (v22 << 8)) << 8); return a1; } v12 = __clz(a2); v4 = __clz(HIDWORD(a1)); HIDWORD(a2) = a2 >> (0xF - v12); v5 = v12 - v4 + 32; LODWORD(v6) = __ROR4__(a2, 0xF - v12) ^ HIDWORD(a2); v8 = v12 - v4 + 17; if ( v8 == 0 || v5 < 0xF ) goto LABEL_16; LABEL_25: HIDWORD(a1) ^= a1; LODWORD(a1) = a1 << v4; HIDWORD(a1) = __ROR4__(HIDWORD(a1), 0x20 - v4) ^ a1; v13 = HIDWORD(a1) / HIDWORD(v6); HIDWORD(a1) %= HIDWORD(v6); v14 = v6 * v13; v7 = a1 >= v14; LODWORD(a1) = a1 - v14; v16 = v7; v7 = __CFSUB__(HIDWORD(a1), HIDWORD(v14), v7); HIDWORD(v15) = HIDWORD(a1) - (HIDWORD(v14) + !v16); if ( !v7 ) { --v13; v15 += v6; } if ( v8 >= 0xF ) { v8 -= 15; HIDWORD(v15) = v15 >> 17; v17 = HIDWORD(v15) / HIDWORD(v6); HIDWORD(v15) %= HIDWORD(v6); v18 = v6 * v17; v7 = v15 << 15 >= v18; LODWORD(v15) = (v15 << 15) - v18; v19 = v7; v7 = __CFSUB__(HIDWORD(v15), HIDWORD(v18), v7); HIDWORD(v15) -= HIDWORD(v18) + !v19; if ( !v7 ) { --v17; v15 += v6; } v13 = v17 | (v13 << 15); } if ( v8 ) { HIDWORD(v15) ^= v15; LODWORD(v15) = v15 << v8; HIDWORD(v15) = __ROR4__(HIDWORD(v15), 0x20 - v8) ^ v15; v20 = HIDWORD(v15) / HIDWORD(v6); HIDWORD(v15) %= HIDWORD(v6); if ( v15 < v6 * v20 ) --v20; LODWORD(a1) = (v13 << v8) | v20; } else { LODWORD(a1) = v13; } return a1; } if ( a1 < a2 ) { LODWORD(a1) = 0; return a1; } if ( HIDWORD(a2) < 0x10000 ) { v3 = __clz(HIDWORD(a2)); v4 = __clz(HIDWORD(a1)); LOBYTE(v5) = v3 - v4; HIDWORD(a2) ^= a2; LODWORD(a2) = a2 << (v3 - 0xF); HIDWORD(v6) = __ROR4__(HIDWORD(a2), 47 - v3) ^ a2; v7 = v3 - v4 >= 0xF; v8 = v3 - v4 - 0xF; if ( v8 == 0 || !v7 ) { LABEL_16: v9 = v4 - 15 + v5; HIDWORD(a1) ^= a1; LODWORD(a1) = a1 << v9; HIDWORD(a1) = __ROR4__(HIDWORD(a1), 0x20 - v9) ^ a1; v10 = HIDWORD(a1) / HIDWORD(v6); HIDWORD(a1) %= HIDWORD(v6); if ( a1 < v6 * v10 ) --v10; LODWORD(a1) = v10; return a1; } goto LABEL_25; } v11 = HIDWORD(a1) / HIDWORD(a2); HIDWORD(a1) %= HIDWORD(a2); if ( a1 < a2 * v11 ) --v11; LODWORD(a1) = v11; return a1; } //----- (080039B0) -------------------------------------------------------- __int64 sub_80039B0() { MEMORY[0x40023840] |= 0x400010000000uLL; return MEMORY[0x40023840] & 0x400010000000LL; } //----- (080039E8) -------------------------------------------------------- _DWORD *__fastcall sub_80039E8(int *a1, _DWORD *a2) { unsigned int v3; // r8 char v4; // r9 char v5; // r10 _DWORD *result; // r0 int v7; // lr int v8; // r12 int v9; // r6 bool v10; // zf bool v11; // zf int v12; // r5 bool v13; // zf int v14; // r7 int v15; // r12 int v16; // r5 int v17; // r5 int v18; // r5 int v19; // r5 v3 = 0; v4 = 0; v5 = 0; result = &dword_40013C00; do { v7 = (1 << v3) & *a2; if ( v7 == 1 << v3 ) { v8 = ~(3 << v4); v9 = a2[1]; v10 = v9 == 1; if ( v9 != 1 ) v10 = v9 == 2; if ( v10 ) goto LABEL_10; v11 = v9 == 17; if ( v9 != 17 ) v11 = v9 == 18; if ( v11 ) { LABEL_10: a1[2] = v8 & a1[2] | (a2[3] << v4); a1[1] = a1[1] & ~(1 << v3) | (((a2[1] >> 4) & 1) << v3); } a1[3] = v8 & a1[3] | (a2[2] << v4); v12 = a2[1]; v13 = v12 == 2; if ( v12 != 2 ) v13 = v12 == 18; if ( v13 ) a1[(v3 >> 3) + 8] = (a2[4] << (v5 & 0x1C)) | a1[(v3 >> 3) + 8] & ~(15 << (v5 & 0x1C)); *a1 = ((a2[1] & 3) << v4) | v8 & *a1; if ( (a2[1] & 0x10000000) != 0 ) { MEMORY[0x40023844] |= 0x4000u; if ( a1 == dword_40020000 ) { v14 = 0; } else if ( a1 == dword_40020400 ) { v14 = 1; } else if ( a1 == 1073874944 ) { v14 = 2; } else if ( a1 == 1073875968 ) { v14 = 3; } else if ( a1 == dword_40021000 ) { v14 = 4; } else if ( a1 == 1073878016 ) { v14 = 5; } else if ( a1 == 1073879040 ) { v14 = 6; } else if ( a1 == 1073880064 ) { v14 = 7; } else { v14 = 8; } dword_40013808[v3 >> 2] = (v14 << (v5 & 0xC)) | dword_40013808[v3 >> 2] & ~(15 << (v5 & 0xC)); v15 = ~v7; v16 = ~v7 & dword_40013C00; if ( (a2[1] & 0x10000) != 0 ) v16 |= v7; dword_40013C00 = v16; v17 = v15 & unk_40013C04; if ( (a2[1] & 0x20000) != 0 ) v17 |= v7; unk_40013C04 = v17; v18 = v15 & unk_40013C08; if ( (a2[1] & 0x100000) != 0 ) v18 |= v7; unk_40013C08 = v18; v19 = v15 & unk_40013C0C; if ( (a2[1] & 0x200000) != 0 ) v19 |= v7; unk_40013C0C = v19; } } ++v3; v5 += 4; v4 += 2; } while ( v3 <= 0xF ); return result; } // 40013808: using guessed type _DWORD[253]; // 40013C00: using guessed type _DWORD dword_40013C00; // 40020000: using guessed type _DWORD[6]; // 40020400: using guessed type _DWORD[255]; // 40021000: using guessed type _DWORD[255]; //----- (08003BC4) -------------------------------------------------------- int __fastcall sub_8003BC4(int *a1) { int result; // r0 int v2; // [sp+4h] [bp-1Ch] BYREF int v3; // [sp+8h] [bp-18h] int v4; // [sp+Ch] [bp-14h] int v5; // [sp+10h] [bp-10h] int v6; // [sp+14h] [bp-Ch] v2 = 0; v3 = 0; v4 = 0; v5 = 0; v6 = 0; result = *a1; if ( result == 1074003968 ) { MEMORY[0x40023830] |= 2u; v3 = 2; v4 = 0; v2 = 49152; v5 = 3; v6 = 12; sub_80039E8(dword_40020400, &v2); MEMORY[0x40023830] |= 0x20000000u; return MEMORY[0x40023830] & 0x20000000; } return result; } // 40020400: using guessed type _DWORD dword_40020400[255]; //----- (08003C28) -------------------------------------------------------- int __fastcall sub_8003C28(int a1) { return sub_80042AC(*(a1 + 1028), (a1 + 0x3C4)); } //----- (08003C34) -------------------------------------------------------- int __fastcall sub_8003C34(int a1, int a2) { return sub_8004310(*(a1 + 1028), a2, *(a1 + 28 * a2 + 520)); } //----- (08003C48) -------------------------------------------------------- int __fastcall sub_8003C48(int a1, int a2) { return sub_800439C(*(a1 + 1028), a2, *(a1 + 28 * a2 + 72)); } //----- (08003C5A) -------------------------------------------------------- int __fastcall sub_8003C5A(int a1) { return sub_80044E2(*(a1 + 1028)); } //----- (08003C62) -------------------------------------------------------- int __fastcall sub_8003C62(int a1) { int v2; // r0 char v3; // r5 v2 = *(a1 + 12); v3 = 1; if ( v2 ) { if ( v2 != 2 ) sub_8000670(); } else { v3 = 0; } sub_80044BE(*(a1 + 1028), v3); return sub_8004468(*(a1 + 1028)); } //----- (08003C92) -------------------------------------------------------- int __fastcall sub_8003C92(_DWORD *a1) { int result; // r0 sub_80044C4(a1[257]); *(*a1 + 0xE00) |= 1u; result = a1[8]; if ( result ) { result = -536810224; MEMORY[0xE000ED10] |= 6u; } return result; } //----- (08003CBC) -------------------------------------------------------- int __fastcall sub_8003CBC(int a1) { *(*(a1 + 1028) + 628) = *(*(a1 + 1028) + 629); return 0; } //----- (08003CC4) -------------------------------------------------------- int sub_8003CC4() { return 0; } //----- (08003CCC) -------------------------------------------------------- int sub_8003CCC() { return 0; } //----- (08003CD4) -------------------------------------------------------- int sub_8003CD4() { return 0; } //----- (08003CDC) -------------------------------------------------------- int __fastcall sub_8003CDC(int a1) { return sub_800450A(*(a1 + 1028)); } //----- (08003CE4) -------------------------------------------------------- int __fastcall sub_8003CE4(int a1) { if ( *a1 == 1 ) { unk_20014A84 = a1; *(a1 + 664) = &dword_20014680; dword_20014680 = 1074003968; unk_20014684 = 6; unk_20014690 = 1; unk_2001469C = 1; unk_2001468C = 2; unk_20014698 = 2; unk_200146A0 = 0; unk_200146A4 = 0; unk_200146AC = 0; unk_200146B0 = 0; unk_200146B4 = 0; if ( sub_8004528(&dword_20014680) ) sub_8000670(); sub_800576A(&dword_20014680, 257); sub_80056DC(&dword_20014680, 0, 65); sub_80056DC(&dword_20014680, 2, 65); sub_80056DC(&dword_20014680, 4, 65); sub_80056DC(&dword_20014680, 5, 257); } return 0; } // 20014680: using guessed type int dword_20014680; //----- (08003D74) -------------------------------------------------------- int __fastcall sub_8003D74(int a1) { int v1; // r1 int result; // r0 v1 = sub_80046D4(*(a1 + 664)); result = 0; if ( v1 ) { if ( v1 == 2 ) return 1; else return 2; } return result; } //----- (08003D92) -------------------------------------------------------- int __fastcall sub_8003D92(int a1, char a2, int a3, int a4) { int v4; // r1 int result; // r0 v4 = sub_8004D08(*(a1 + 664), a2, a4, a3); result = 0; if ( v4 ) { if ( v4 == 2 ) return 1; else return 2; } return result; } //----- (08003DB4) -------------------------------------------------------- int __fastcall sub_8003DB4(int a1, char a2) { int v2; // r1 int result; // r0 v2 = sub_8004D66(*(a1 + 664), a2); result = 0; if ( v2 ) { if ( v2 == 2 ) return 1; else return 2; } return result; } //----- (08003DD2) -------------------------------------------------------- int __fastcall sub_8003DD2(int a1, char a2) { int v2; // r1 int result; // r0 v2 = sub_8004F2C(*(a1 + 664), a2); result = 0; if ( v2 ) { if ( v2 == 2 ) return 1; else return 2; } return result; } //----- (08003DF0) -------------------------------------------------------- int __fastcall sub_8003DF0(int a1, int a2) { int v2; // r1 int result; // r0 v2 = sub_8004E5E(*(a1 + 664), a2); result = 0; if ( v2 ) { if ( v2 == 2 ) return 1; else return 2; } return result; } //----- (08003E0E) -------------------------------------------------------- int __fastcall sub_8003E0E(int a1, char a2) { int v2; // r1 int result; // r0 v2 = sub_8004ED6(*(a1 + 664), a2); result = 0; if ( v2 ) { if ( v2 == 2 ) return 1; else return 2; } return result; } //----- (08003E2C) -------------------------------------------------------- int __fastcall sub_8003E2C(int a1, char a2) { int v2; // r0 v2 = *(a1 + 664) + 28 * (a2 & 0x7F); if ( (a2 & 0x80) != 0 ) return *(v2 + 62); else return *(v2 + 510); } //----- (08003E4C) -------------------------------------------------------- int __fastcall sub_8003E4C(int a1, int a2) { int v2; // r1 int result; // r0 v2 = sub_8004CE0(*(a1 + 664), a2); result = 0; if ( v2 ) { if ( v2 == 2 ) return 1; else return 2; } return result; } //----- (08003E6A) -------------------------------------------------------- int __fastcall sub_8003E6A(int a1, char a2, int a3, int a4) { int v4; // r1 int result; // r0 v4 = sub_8004E10(*(a1 + 664), a2, a3, a4); result = 0; if ( v4 ) { if ( v4 == 2 ) return 1; else return 2; } return result; } //----- (08003E88) -------------------------------------------------------- int __fastcall sub_8003E88(int a1, char a2, int a3, int a4) { int v4; // r1 int result; // r0 v4 = sub_8004DAE(*(a1 + 664), a2, a3, a4); result = 0; if ( v4 ) { if ( v4 == 2 ) return 1; else return 2; } return result; } //----- (08003EA6) -------------------------------------------------------- int __fastcall sub_8003EA6(int a1, char a2) { return *(*(a1 + 664) + 28 * (a2 & 0xF) + 532); } //----- (08003EB0) -------------------------------------------------------- int __fastcall sub_8003EB0(unsigned int a1, char *a2, unsigned int a3, char *a4) { bool v4; // cf int result; // r0 bool v6; // cf char v7; // t1 unsigned int i; // r2 int v9; // r1 int v10; // r4 int v11; // r5 int v12; // r12 unsigned int v13; // r2 bool v14; // cf int v15; // t1 bool v16; // cf char v17; // t1 int v18; // t1 int v19; // t1 int v20; // t2 v4 = a2 >= a1; if ( a2 < a1 ) { a4 = &a2[a3]; v4 = a1 >= &a2[a3]; } if ( v4 ) return sub_80003C4(a1, a2, a3); result = a1 + a3; while ( a4 << 30 ) { v6 = a3-- != 0; if ( v6 ) { v7 = *--a4; *--result = v7; } if ( a3 == 0 || !v6 ) return result; } if ( result << 30 ) { v14 = a3 >= 4; v13 = a3 - 4; if ( v14 ) { if ( result << 31 ) { do { v19 = *(a4 - 1); a4 -= 4; v14 = v13 >= 4; v13 -= 4; *(result - 4) = v19; result -= 4; v20 = __ROR4__(v19, 8); *(result + 1) = v20; *(result + 3) = __ROR4__(v20, 16); } while ( v14 ); } else { do { v18 = *(a4 - 1); a4 -= 4; v14 = v13 >= 4; v13 -= 4; *(result - 4) = v18; result -= 4; *(result + 2) = __ROR4__(v18, 16); } while ( v14 ); } } } else { v4 = a3 >= 0x10; for ( i = a3 - 16; v4; result -= 16 ) { v9 = *(a4 - 4); v10 = *(a4 - 3); v11 = *(a4 - 2); v12 = *(a4 - 1); a4 -= 16; v4 = i >= 0x10; i -= 16; *(result - 16) = v9; *(result - 12) = v10; *(result - 8) = v11; *(result - 4) = v12; } v13 = i + 16; do { v14 = v13 >= 4; v13 -= 4; if ( v14 ) { v15 = *(a4 - 1); a4 -= 4; *(result - 4) = v15; result -= 4; } } while ( v13 != 0 && v14 ); } if ( !v14 ) v13 += 4; do { v16 = v13-- != 0; if ( v16 ) { v17 = *--a4; *--result = v17; } } while ( v13 != 0 && v16 ); return result; } //----- (08003F48) -------------------------------------------------------- int __fastcall sub_8003F48(_DWORD *a1) { unsigned int v2; // r1 int v3; // r0 int v4; // r2 switch ( a1[2] ) { case 4: v2 = 212; v3 = 536949700; break; case 6: case 0x11: v2 = 184; v3 = 536950212; break; case 7: v2 = 242; v3 = 536949912; break; case 0x18: case 0x19: case 0x1A: v2 = 56; v3 = 536950156; break; case 0x1B: v2 = 84; v3 = 536949616; break; default: while ( 1 ) ; } v4 = a1[3]; a1[4] = v2; if ( v2 < v4 + *a1 ) return 20; sub_80003C4((a1 + 5), (v3 + *a1), 4 * ((v4 + 39) >> 2) - 32); return a1[3] + 20; } // 8003F8E: conditional instruction was optimized away because r0.4 is in (==20013370|==200133C4|==20013498|==2001358C|==200135C4) //----- (08003FBC) -------------------------------------------------------- int __fastcall sub_8003FBC(int a1) { unsigned int v1; // r1 int v2; // r3 int v3; // r2 switch ( *(a1 + 8) ) { case 4: v1 = 212; v2 = 536949700; break; case 6: case 0x11: v1 = 184; v2 = 536950212; break; case 7: v1 = 242; v2 = 536949912; break; case 0x18: case 0x19: case 0x1A: v1 = 56; v2 = 536950156; break; case 0x1B: v1 = 84; v2 = 536949616; break; default: while ( 1 ) ; } v3 = *(a1 + 12); if ( v1 < v3 + *a1 ) return -1; sub_80003C4(v2 + *a1, (a1 + 0x14), 4 * ((v3 + 39) >> 2) - 32); return 0; } // 8004000: conditional instruction was optimized away because r3.4 is in (==20013370|==200133C4|==20013498|==2001358C|==200135C4) //----- (08004040) -------------------------------------------------------- int __fastcall sub_8004040(int result, _BYTE *a2, _BYTE *a3) { int v3; // r3 int i; // r4 unsigned int v5; // r5 unsigned int v6; // r7 unsigned int v7; // r12 v3 = 0; for ( i = 0; result; --result ) { v5 = 128; do { v6 = (i << 24) >> 0x1F; v7 = (v3 << 24) >> 31; v3 *= 2; i = v7 | (2 * i); if ( v6 != ((*a2 & v5) != 0) ) { v3 ^= 5u; i ^= 0x80u; } v5 >>= 1; } while ( v5 ); ++a2; } *a3 = i; a3[1] = v3; return result; } //----- (0800408C) -------------------------------------------------------- int __fastcall sub_800408C(__int16 a1, unsigned int a2, int a3) { int v3; // r0 v3 = (a1 + 0x1000); if ( v3 >= 768 ) { while ( 1 ) ; } sub_80003C4(a3, (v3 + 536948848), a2); return 0; } //----- (080040B2) -------------------------------------------------------- int __fastcall sub_80040B2(__int16 a1, unsigned int a2, char *a3) { int v3; // r0 v3 = (a1 + 0x1000); if ( v3 >= 768 ) { while ( 1 ) ; } sub_80003C4(v3 + 536948848, a3, a2); return 0; } //----- (080040D8) -------------------------------------------------------- int __fastcall sub_80040D8(_DWORD *a1) { unsigned int v2; // r0 unsigned __int8 v4; // r6 if ( !a1[2] ) { while ( 1 ) ; } v2 = a1[1]; if ( v2 == 65024 ) { v4 = byte_2001206C[0]; sub_80003C4((a1 + 5), &unk_20011FEC + byte_2001206C[0], a1[3]); byte_2001206C[0] = a1[3] + v4; return 0; } else if ( v2 == 65520 ) { *(a1 + 20) = 64; return 0; } else { if ( v2 >= 0x1000 ) { while ( 1 ) ; } sub_80003C4((a1 + 5), &unk_20011FEC + v2 + 0x84, a1[3]); sub_80058F4(a1[1], a1 + 5, a1[3]); return 0; } } // 2001206C: using guessed type unsigned __int8 byte_2001206C[5648]; //----- (08004142) -------------------------------------------------------- int __fastcall sub_8004142(int a1) { int v2; // r5 unsigned int v3; // r0 unsigned int v5; // r0 int v6; // r1 __int16 v7; // r0 int v8; // r1 unsigned __int8 v9; // r4 _BYTE *v10; // r2 int v11; // r0 bool v12; // zf v2 = 0; if ( !*(a1 + 8) ) { v2 = 2; if ( *(a1 + 4) ) { while ( 1 ) ; } v3 = *(a1 + 12); if ( v3 < 2 ) return -1; *(a1 + 12) = v3 - 2; *(a1 + 4) = *(a1 + 21) | (*(a1 + 20) << 8); } v5 = *(a1 + 4); if ( v5 != 65024 ) { if ( v5 == 65504 ) { byte_2001206C[0] = 0; } else if ( v5 < 0xF000 ) { if ( v5 >= 0x1000 ) { while ( 1 ) ; } v12 = v5 == 169; if ( v5 == 169 ) v12 = *(a1 + 12) == 9; if ( v12 ) sub_80058D0(v5, (a1 + v2 + 20)); sub_80003C4(&unk_20011FEC + *(a1 + 4) + 132, (a1 + v2 + 0x14), *(a1 + 12)); } else { sub_80040B2(v5, *(a1 + 12), (a1 + v2 + 0x14)); } return 0; } byte_2001206C[0] = 0; v6 = *(a1 + 21); if ( v6 == 1 ) { sub_80036F0(&unk_20011FEC, 0x20u, 0xAAu); unk_20011FEC = 16; unk_20011FED = 0; v10 = &unk_20011FFA; v11 = 14; goto LABEL_14; } if ( v6 == 16 ) { v7 = _byteswap_ushort(*(a1 + 23)); v8 = *(a1 + 26) | (*(a1 + 25) << 8); v9 = v8 + 4; unk_20011FEC = (v8 + 4); sub_800408C(v7, v8, &unk_20011FEE); v10 = &unk_20011FEC + v9 - 2; v11 = (v9 - 2); LABEL_14: sub_8004040(v11, &unk_20011FEC, v10); } return 0; } // 2001206C: using guessed type unsigned __int8 byte_2001206C[5648]; //----- (0800423C) -------------------------------------------------------- int __fastcall sub_800423C(int a1, int a2, char a3) { if ( !a1 ) return 2; if ( *(a1 + 652) ) *(a1 + 652) = 0; if ( a2 ) *(a1 + 648) = a2; *(a1 + 628) = 1; *a1 = a3; sub_8003CE4(a1); return 0; } //----- (08004266) -------------------------------------------------------- int __fastcall sub_8004266(int a1, int a2) { int result; // r0 result = 0; if ( !a2 ) return 2; *(a1 + 652) = a2; return result; } //----- (08004276) -------------------------------------------------------- int __fastcall sub_8004276(int a1) { sub_8003D74(a1); return 0; } //----- (08004284) -------------------------------------------------------- int __fastcall sub_8004284(int a1) { int (**v1)(void); // r2 int v2; // r4 v1 = *(a1 + 652); v2 = 2; if ( v1 && !(*v1)() ) return 0; return v2; } //----- (0800429A) -------------------------------------------------------- int __fastcall sub_800429A(int a1) { (*(*(a1 + 652) + 4))(); return 0; } //----- (080042AC) -------------------------------------------------------- int __fastcall sub_80042AC(int a1, _BYTE *a2) { char v3; // r1 unsigned int v4; // r2 sub_8005EF2(a1 + 0x280, a2); *(a1 + 620) = 1; v3 = *(a1 + 640); *(a1 + 624) = *(a1 + 646); v4 = v3 & 0x1F; if ( (v3 & 0x1F) != 0 ) { if ( v4 == 2 ) { sub_8005D80(a1, a1 + 0x280); return 0; } else { if ( v4 >= 2 ) sub_8003DF0(a1, v3 & 0x80); else sub_8005D20(a1, a1 + 0x280); return 0; } } else { sub_8005A6C(a1, a1 + 0x280); return 0; } } //----- (08004310) -------------------------------------------------------- int __fastcall sub_8004310(int a1, int a2, int a3) { int v5; // r1 unsigned int v6; // r2 unsigned int v7; // r1 unsigned int v8; // r2 int v10; // r1 int v11; // r2 if ( a2 ) { v11 = *(a1 + 652); if ( *(v11 + 24) && *(a1 + 628) == 3 ) { (*(v11 + 24))(a1); return 0; } else { return 2; } } else { v5 = *(a1 + 620); if ( v5 == 3 ) { v6 = *(a1 + 332); v7 = *(a1 + 336); if ( v7 < v6 ) { v8 = v6 - v7; *(a1 + 332) = v8; if ( v8 >= v7 ) LOWORD(v8) = v7; sub_8005FE6(a1, a3, v8); return 0; } v10 = *(a1 + 652); if ( *(v10 + 16) && *(a1 + 628) == 3 ) (*(v10 + 16))(a1); sub_8005FFA(a1); return 0; } else { if ( v5 != 5 ) return 0; *(a1 + 620) = 0; sub_8003DF0(a1, 0); return 0; } } } //----- (0800439C) -------------------------------------------------------- int __fastcall sub_800439C(int a1, int a2, int a3) { int v5; // r0 unsigned int v6; // r2 unsigned int v7; // r1 unsigned int v8; // r2 unsigned int v9; // r2 int v10; // r1 bool v11; // zf int v13; // r2 if ( !a2 ) { v5 = *(a1 + 620); if ( v5 != 2 ) { v11 = v5 == 4; if ( v5 != 4 ) v11 = v5 == 0; if ( v11 ) sub_8003DF0(a1, 128); goto LABEL_19; } v6 = *(a1 + 32); v7 = *(a1 + 36); if ( v7 >= v6 ) { v9 = *(a1 + 28); if ( v9 % v7 || v9 < v7 || v9 >= *(a1 + 624) ) { v10 = *(a1 + 652); if ( *(v10 + 12) && *(a1 + 628) == 3 ) (*(v10 + 12))(a1); sub_8003DF0(a1, 128); sub_8006014(a1); goto LABEL_19; } sub_8005FD2(a1, 0, 0); *(a1 + 624) = 0; } else { v8 = v6 - v7; *(a1 + 32) = v8; sub_8005FD2(a1, a3, v8); } sub_8003E88(a1, 0, 0, 0); LABEL_19: if ( *(a1 + 632) == 1 ) *(a1 + 632) = 0; return 0; } v13 = *(a1 + 652); if ( !*(v13 + 20) || *(a1 + 628) != 3 ) return 2; (*(v13 + 20))(a1); return 0; } //----- (08004468) -------------------------------------------------------- int __fastcall sub_8004468(int a1) { int v2; // r0 sub_8003D92(a1, 0, 0, 64); *(a1 + 324) = 1; *(a1 + 336) = 64; sub_8003D92(a1, 128, 0, 64); *(a1 + 24) = 1; *(a1 + 36) = 64; *(a1 + 628) = 1; v2 = *(a1 + 656); *(a1 + 620) = 0; *(a1 + 4) = 0; *(a1 + 636) = 0; if ( v2 ) (*(*(a1 + 652) + 4))(a1, *(a1 + 4)); return 0; } //----- (080044BE) -------------------------------------------------------- int __fastcall sub_80044BE(int a1, char a2) { *(a1 + 16) = a2; return 0; } //----- (080044C4) -------------------------------------------------------- int __fastcall sub_80044C4(int a1) { *(a1 + 629) = *(a1 + 628); *(a1 + 628) = 4; return 0; } //----- (080044E2) -------------------------------------------------------- int __fastcall sub_80044E2(int a1) { void (*v1)(void); // r1 if ( *(a1 + 628) == 3 ) { v1 = *(*(a1 + 652) + 28); if ( v1 ) v1(); } return 0; } //----- (0800450A) -------------------------------------------------------- int __fastcall sub_800450A(int a1) { *(a1 + 628) = 1; (*(*(a1 + 652) + 4))(a1, *(a1 + 4)); return 0; } //----- (08004528) -------------------------------------------------------- int __fastcall sub_8004528(int *a1) { int v2; // r5 unsigned int i; // r1 int *v4; // r0 unsigned int v5; // r1 int *v6; // r0 unsigned int v7; // r1 int *v8; // r0 unsigned int j; // r1 int *v10; // r0 unsigned int v11; // r1 int *v12; // r0 unsigned int v13; // r1 int *v14; // r0 unsigned int v16; // [sp-Ch] [bp-44h] BYREF int v17; // [sp-8h] [bp-40h] int v18; // [sp-4h] [bp-3Ch] int v19; // [sp+0h] [bp-38h] int v20; // [sp+4h] [bp-34h] int v21; // [sp+8h] [bp-30h] int v22; // [sp+Ch] [bp-2Ch] int v23; // [sp+10h] [bp-28h] int v24; // [sp+14h] [bp-24h] int v25; // [sp+18h] [bp-20h] int v26; // [sp+1Ch] [bp-1Ch] int v27; // [sp+20h] [bp-18h] int v28; // [sp+24h] [bp-14h] if ( !a1 ) return 1; v2 = *a1; if ( !*(a1 + 957) ) { *(a1 + 956) = 0; sub_8003BC4(a1); } *(a1 + 957) = 3; if ( (*(v2 + 60) & 0x100) == 0 ) a1[4] = 0; sub_80061C2(*a1); sub_80003E4(&v16, a1 + 1, 0x34u); if ( sub_8006030(*a1, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28) ) goto LABEL_16; sub_80061CE(*a1, 0); for ( i = 0; i < a1[1]; i = (v7 + 1) ) { v4 = &a1[7 * i]; *(v4 + 61) = 1; *(v4 + 60) = i; *(v4 + 33) = i; *(v4 + 63) = 0; v4[17] = 0; v4[18] = 0; v4[20] = 0; v5 = (i + 1); if ( v5 >= a1[1] ) break; v6 = &a1[7 * v5]; *(v6 + 61) = 1; *(v6 + 60) = v5; *(v6 + 33) = v5; *(v6 + 63) = 0; v6[17] = 0; v6[18] = 0; v6[20] = 0; v7 = (v5 + 1); if ( v7 >= a1[1] ) break; v8 = &a1[7 * v7]; *(v8 + 61) = 1; *(v8 + 60) = v7; *(v8 + 33) = v7; *(v8 + 63) = 0; v8[17] = 0; v8[18] = 0; v8[20] = 0; } for ( j = 0; j < a1[1]; j = (v13 + 1) ) { v10 = &a1[7 * j]; *(v10 + 508) = j; *(v10 + 509) = 0; *(v10 + 511) = 0; v10[129] = 0; v10[130] = 0; v10[132] = 0; v11 = (j + 1); if ( v11 >= a1[1] ) break; v12 = &a1[7 * v11]; *(v12 + 508) = v11; *(v12 + 509) = 0; *(v12 + 511) = 0; v12[129] = 0; v12[130] = 0; v12[132] = 0; v13 = (v11 + 1); if ( v13 >= a1[1] ) break; v14 = &a1[7 * v13]; *(v14 + 508) = v13; *(v14 + 509) = 0; *(v14 + 511) = 0; v14[129] = 0; v14[130] = 0; v14[132] = 0; } sub_80003E4(&v16, a1 + 1, 0x34u); if ( sub_8006204(*a1, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26) ) { LABEL_16: *(a1 + 957) = 2; return 1; } *(a1 + 56) = 0; *(a1 + 957) = 1; sub_80068C0(*a1); return 0; } //----- (080046D4) -------------------------------------------------------- int __fastcall sub_80046D4(int a1) { int v2; // r2 int v3; // r0 int result; // r0 int v5; // r3 v2 = *(a1 + 956); v3 = *a1; if ( v2 == 1 ) return 2; v5 = *(a1 + 40); *(a1 + 956) = 1; if ( v5 == 1 && *(a1 + 24) != 1 ) *(v3 + 56) |= 0x10000u; sub_80068A4(v3); sub_80061B6(*a1); result = 0; *(a1 + 956) = 0; return result; } //----- (08004714) -------------------------------------------------------- int __fastcall sub_8004714(int a1) { int result; // r0 int v3; // r4 unsigned int v4; // r5 _DWORD *v5; // r11 _DWORD *v6; // r8 __int16 v7; // r9 unsigned int v8; // r0 int v9; // r7 int v10; // r1 int v11; // r0 bool v12; // zf unsigned int v13; // r7 unsigned int v14; // r11 int v15; // r9 int v16; // r8 char v17; // r4 int v18; // r0 bool v19; // zf int v20; // r5 unsigned int v21; // r0 unsigned int v22; // r1 unsigned int v23; // r10 unsigned int v24; // r0 unsigned int v25; // r10 unsigned int v26; // r7 unsigned int v27; // r1 unsigned int v28; // r0 unsigned int v29; // r1 unsigned int i; // r2 _DWORD *v31; // r3 _DWORD *v32; // r5 unsigned int v33; // r2 _DWORD *v34; // r3 _DWORD *v35; // r5 int v36; // r0 unsigned int v37; // r4 int v38; // r0 int v39; // r0 int v40; // r1 int v41; // r0 int v42; // r4 _DWORD *v43; // [sp+4h] [bp-3Ch] int v44; // [sp+8h] [bp-38h] _DWORD *v45; // [sp+Ch] [bp-34h] int v46; // [sp+10h] [bp-30h] v44 = *a1; v43 = *a1; result = sub_800693E(*a1); if ( !result ) { result = sub_80068DC(*a1); if ( result ) { if ( (sub_80068DC(*a1) & 2) != 0 ) *(*a1 + 20) &= 2u; if ( (sub_80068DC(*a1) & 0x80000) != 0 ) { v3 = 0; v4 = sub_80068E6(*a1); v5 = (a1 + 0x210); v6 = v43 + 0x2C0; if ( v4 ) { while ( (v4 & 1) == 0 ) { LABEL_53: ++v3; v4 >>= 1; v6 += 8; v5 += 7; if ( !v4 ) goto LABEL_54; } v7 = sub_8006902(*a1, v3); if ( (v7 & 1) != 0 ) { v6[2] = 1; v8 = *(*a1 + 64); v9 = *a1 + 32 * v3 + 0xB00; v10 = *(*a1 + 32 * v3 + 2824); if ( *(a1 + 16) != 1 ) { if ( v8 == 1330917642 ) { if ( (v10 & 0x8000) != 0 ) goto LABEL_30; if ( (v10 & 0x20) != 0 ) *(*a1 + 32 * v3 + 2824) = 32; } sub_8003C34(a1, v3); goto LABEL_34; } if ( (v10 & 8) != 0 ) { if ( v8 >= 0x4F54300B && (v10 & 0x8000) != 0 ) *(*a1 + 32 * v3 + 2824) = 0x8000; sub_8003C28(a1); sub_8006974(*a1, 1, a1 + 0x3C4); *(v9 + 8) = 8; goto LABEL_34; } if ( (v10 & 0x20) != 0 ) { *(*a1 + 32 * v3 + 2824) = 32; goto LABEL_34; } if ( (v10 & 0x28) == 0 ) { if ( v8 < 0x4F54300B || (v10 & 0x8000) == 0 ) { if ( *v5 ) { v11 = *v5 - (*(*a1 + 32 * v3 + 2832) & 0x7FFFF); v5[1] = v11; *(v5 - 2) += v11; } else { v5[1] = 0; } sub_8003C34(a1, v3); v12 = v3 == 0; if ( !v3 ) v12 = *(a1 + 528) == 0; if ( v12 ) sub_8006974(*a1, 1, a1 + 0x3C4); goto LABEL_34; } LABEL_30: *(*a1 + 32 * v3 + 2824) = 0x8000; } } LABEL_34: if ( (v7 & 8) == 0 ) { LABEL_45: if ( (v7 & 0x10) != 0 ) v6[2] = 16; if ( (v7 & 0x20) != 0 ) { if ( *(a1 + 16) == 1 ) sub_8006974(*a1, 1, a1 + 0x3C4); v6[2] = 32; } if ( (v7 & 0x2000) != 0 ) v6[2] = 0x2000; goto LABEL_53; } v13 = *(*a1 + 64); if ( *(a1 + 16) == 1 ) { if ( v13 >= 0x4F54300B ) { LABEL_39: if ( (*(*a1 + 32 * v3 + 2824) & 0x8000) != 0 ) *(*a1 + 32 * v3 + 2824) = 0x8000; } } else if ( v13 == 1330917642 ) { goto LABEL_39; } sub_8003C28(a1); if ( v13 >= 0x4F54300B && *(a1 + 16) == 1 ) sub_8006974(*a1, 1, a1 + 0x3C4); v6[2] = 8; goto LABEL_45; } } LABEL_54: if ( (sub_80068DC(*a1) & 0x40000) != 0 ) { v14 = sub_80068F4(*a1); v15 = 0; v16 = a1 + 0x48; if ( v14 ) { v45 = v43 + 0x240; do { if ( (v14 & 1) != 0 ) { v17 = sub_8006918(*a1, v15); if ( (v17 & 1) != 0 ) { v43[525] &= ~(1 << (v15 & 0xF)); v45[2] = 1; if ( *(a1 + 16) == 1 ) *v16 += *(v16 - 4); sub_8003C48(a1, v15); v18 = *(a1 + 16); v19 = v18 == 1; if ( v18 == 1 ) v19 = v15 == 0; if ( v19 && !*(a1 + 80) ) sub_8006974(*a1, 1, a1 + 0x3C4); } if ( (v17 & 8) != 0 ) v45[2] = 8; if ( (v17 & 0x10) != 0 ) v45[2] = 16; if ( (v17 & 0x40) != 0 ) v45[2] = 64; if ( (v17 & 2) != 0 ) v45[2] = 2; if ( (v17 & 0x80) != 0 ) { v20 = *a1; v46 = *a1; v21 = *(v16 + 12); v22 = *(v16 + 8); if ( v22 >= v21 ) { v23 = *(v16 - 4); v24 = v22 - v21; if ( v23 > v24 ) v23 = v24; v25 = (v23 + 3) >> 2; while ( 1 ) { v28 = *(v16 + 8); v29 = *(v16 + 12); if ( *(v20 + 32 * v15 + 2328) < v25 || v29 >= v28 || !v28 ) break; v26 = *(v16 - 4); v27 = v28 - v29; if ( v26 > v27 ) v26 = v27; v25 = (v26 + 3) >> 2; sub_80067E0(v20, *v16, v15, v26, *(a1 + 16)); *v16 += v26; *(v16 + 12) += v26; } if ( v29 >= v28 ) *(v46 + 2100) &= ~(1 << (v15 & 0xF)); } } } v14 >>= 1; ++v15; v45 += 8; v16 += 0x1C; } while ( v14 ); } } if ( sub_80068DC(*a1) < 0 ) { v43[513] = 2 * (v43[513] >> 1); if ( *(a1 + 1012) == 1 ) { *(a1 + 1012) = 0; nullsub_8(a1); } else { sub_8003CBC(a1); } *(*a1 + 20) &= 0x80000000; } if ( (sub_80068DC(*a1) & 0x800) != 0 ) { if ( (v43[514] & 1) != 0 ) sub_8003C92(a1); *(*a1 + 20) &= 0x800u; } if ( (sub_80068DC(*a1) & 0x1000) != 0 ) { v43[513] = 2 * (v43[513] >> 1); sub_800643E(*a1, 16); for ( i = 0; i < *(a1 + 4); *v34 &= ~0x200000u ) { v31 = &v43[8 * i]; v32 = v31 + 0x240; v31 += 0x2C0; v32[2] = 64383; v33 = i + 1; *v32 &= ~0x200000u; v31[2] = 64383; *v31 &= ~0x200000u; if ( v33 >= *(a1 + 4) ) break; v34 = &v43[8 * v33]; v35 = v34 + 0x240; v34 += 0x2C0; v35[2] = 64383; i = v33 + 1; *v35 &= ~0x200000u; v34[2] = 64383; } v43[519] |= 0x10001u; if ( *(a1 + 48) ) { v43[545] |= 0xBu; v43[529] |= 0xBu; } else { v43[517] |= 0x202Bu; v43[516] |= 0xBu; } v43[0x200] &= 0xFFFFF80F; sub_8006974(*a1, *(a1 + 16), a1 + 0x3C4); *(*a1 + 20) &= 0x1000u; } if ( (sub_80068DC(*a1) & 0x2000) != 0 ) { sub_8006946(*a1); *(a1 + 12) = sub_8006476(*a1); v36 = sub_8000BFC(); sub_80060EA(*a1, v36, *(a1 + 12)); sub_8003C62(a1); *(*a1 + 20) &= 0x2000u; } if ( (sub_80068DC(*a1) & 0x10) != 0 ) { *(*a1 + 24) &= ~0x10u; v37 = *(v44 + 32); v38 = (v37 >> 17) & 0xF; if ( v38 == 2 ) { if ( (v37 & 0x7FF0) != 0 ) { sub_800680C(v44, *(a1 + 28 * (*(v44 + 32) & 0xF) + 520), (*(v44 + 32) >> 4) & 0x7FF); v39 = (v37 >> 4) & 0x7FF; v40 = *(a1 + 28 * (v37 & 0xF) + 520) + v39; v41 = v39 + *(a1 + 28 * (v37 & 0xF) + 532); *(a1 + 28 * (v37 & 0xF) + 520) = v40; *(a1 + 28 * (v37 & 0xF) + 532) = v41; } } else if ( v38 == 6 ) { sub_800680C(v44, (a1 + 0x3C4), 8); *(a1 + 28 * (v37 & 0xF) + 532) += (v37 >> 4) & 0x7FF; } *(*a1 + 24) |= 0x10u; } if ( (sub_80068DC(*a1) & 8) != 0 ) { sub_8003C5A(a1); *(*a1 + 20) &= 8u; } if ( (sub_80068DC(*a1) & 0x100000) != 0 ) { sub_8003CCC(); *(*a1 + 20) &= 0x100000u; } if ( (sub_80068DC(*a1) & 0x200000) != 0 ) { sub_8003CC4(); *(*a1 + 20) &= 0x200000u; } if ( (sub_80068DC(*a1) & 0x40000000) != 0 ) { sub_8003CD4(); *(*a1 + 20) &= 0x40000000u; } result = sub_80068DC(*a1) << 29; if ( result < 0 ) { v42 = *(*a1 + 4); if ( (v42 & 4) != 0 ) sub_8003CDC(a1); result = *a1; *(*a1 + 4) |= v42; } } } return result; } // 8005772: using guessed type int __fastcall nullsub_8(_DWORD); //----- (08004CE0) -------------------------------------------------------- int __fastcall sub_8004CE0(int a1, int a2) { int result; // r0 if ( *(a1 + 956) == 1 ) return 2; *(a1 + 956) = 1; *(a1 + 56) = a2; sub_8006888(*a1, a2); result = 0; *(a1 + 956) = 0; return result; } //----- (08004D08) -------------------------------------------------------- int __fastcall sub_8004D08(int a1, char a2, int a3, int a4) { int v5; // r0 unsigned __int8 *v6; // r4 char v7; // r0 int result; // r0 v5 = a1 + 28 * (a2 & 0xF); if ( (a2 & 0x80) != 0 ) { v6 = (v5 + 0x3C); v7 = 1; } else { v6 = (v5 + 0x1FC); v7 = 0; } v6[1] = v7; *v6 = a2 & 0xF; *(v6 + 2) = a3; v6[3] = a4; if ( v6[1] ) *(v6 + 3) = *v6; if ( a4 == 2 ) v6[4] = 0; if ( *(a1 + 956) == 1 ) return 2; *(a1 + 956) = 1; sub_8006492(*a1, v6); result = 0; *(a1 + 956) = 0; return result; } //----- (08004D66) -------------------------------------------------------- int __fastcall sub_8004D66(int a1, char a2) { int v3; // r0 unsigned __int8 *v4; // r0 char v5; // r2 int result; // r0 v3 = a1 + 28 * (a2 & 0xF); if ( (a2 & 0x80) != 0 ) { v4 = (v3 + 60); v5 = 1; } else { v4 = (v3 + 0x1FC); v5 = 0; } v4[1] = v5; *v4 = a2 & 0xF; if ( *(a1 + 956) == 1 ) return 2; *(a1 + 956) = 1; sub_8006508(*a1, v4); result = 0; *(a1 + 956) = 0; return result; } //----- (08004DAE) -------------------------------------------------------- int __fastcall sub_8004DAE(int *a1, char a2, int a3, int a4) { int v5; // r3 int v6; // r1 int v7; // r2 int v8; // r0 v5 = &a1[7 * (a2 & 0xF) + 0x7F]; *(v5 + 20) = a4; *(v5 + 24) = 0; v6 = a2 & 0xF; *(v5 + 12) = a3; *(v5 + 1) = 0; *v5 = v6; if ( a1[4] == 1 ) *(v5 + 16) = a3; v7 = a1[4]; v8 = *a1; if ( v6 ) sub_8006580(v8, v5, v7); else sub_800670A(v8, v5, v7); return 0; } //----- (08004E10) -------------------------------------------------------- int __fastcall sub_8004E10(int *a1, char a2, int a3, int a4) { int v5; // r3 int v6; // r1 int v7; // r2 int v8; // r0 v5 = &a1[7 * (a2 & 0xF) + 15]; *(v5 + 20) = a4; *(v5 + 24) = 0; v6 = a2 & 0xF; *(v5 + 12) = a3; *(v5 + 1) = 1; *v5 = v6; if ( a1[4] == 1 ) *(v5 + 16) = a3; v7 = a1[4]; v8 = *a1; if ( v6 ) sub_8006580(v8, v5, v7); else sub_800670A(v8, v5, v7); return 0; } //----- (08004E5E) -------------------------------------------------------- int __fastcall sub_8004E5E(int a1, int a2) { char v3; // r4 int result; // r0 int v5; // r0 unsigned __int8 *v6; // r1 int v7; // r0 int v8; // r4 v3 = a2; if ( *(a1 + 4) < (a2 & 0xFu) ) return 1; if ( (a2 & 0x80) != 0 ) { v5 = a1 + 28 * (a2 & 0xF); v6 = (v5 + 0x3C); *(v5 + 61) = 1; } else { v7 = a1 + 28 * a2; v6 = (v7 + 0x1FC); *(v7 + 509) = 0; } v6[2] = 1; v8 = v3 & 0xF; *v6 = v8; if ( *(a1 + 956) == 1 ) return 2; *(a1 + 956) = 1; sub_8006824(*a1, v6); if ( !v8 ) sub_8006974(*a1, *(a1 + 16), a1 + 0x3C4); result = 0; *(a1 + 956) = 0; return result; } //----- (08004ED6) -------------------------------------------------------- int __fastcall sub_8004ED6(int a1, char a2) { int result; // r0 int v4; // r0 unsigned __int8 *v5; // r0 char v6; // r2 if ( *(a1 + 4) < (a2 & 0xFu) ) return 1; v4 = a1 + 28 * (a2 & 0xF); if ( (a2 & 0x80) != 0 ) { v5 = (v4 + 60); v6 = 1; } else { v5 = (v4 + 0x1FC); v6 = 0; } v5[1] = v6; v5[2] = 0; *v5 = a2 & 0xF; if ( *(a1 + 956) == 1 ) return 2; *(a1 + 956) = 1; sub_8006854(*a1, v5); result = 0; *(a1 + 956) = 0; return result; } //----- (08004F2C) -------------------------------------------------------- int __fastcall sub_8004F2C(int a1, char a2) { int result; // r0 int v4; // r0 if ( *(a1 + 956) == 1 ) return 2; *(a1 + 956) = 1; v4 = *a1; if ( (a2 & 0x80) != 0 ) sub_800643E(v4, a2 & 0xF); else sub_800645C(v4); result = 0; *(a1 + 956) = 0; return result; } //----- (08004F64) -------------------------------------------------------- int __fastcall sub_8004F64(int *a1) { int v2; // r5 int v3; // r5 _DWORD *v4; // r0 int v6; // r1 unsigned int v7; // r1 int v8; // r1 unsigned int v9; // r1 int v10; // r1 unsigned int v11; // r1 int v12; // r1 unsigned int v13; // r1 int v14; // r1 unsigned int v15; // r1 if ( !a1 ) return 1; if ( !*(a1 + 32) ) sub_8003290(a1); **a1 &= ~2u; v2 = sub_800372C(); while ( (*(*a1 + 4) & 2) != 0 ) { if ( (sub_800372C() - v2) >= 0xB ) { LABEL_11: a1[9] |= 0x20000u; *(a1 + 32) = 5; return 1; } } **a1 |= 1u; v3 = sub_800372C(); while ( 1 ) { v4 = *a1; if ( (*(*a1 + 4) & 1) != 0 ) break; if ( (sub_800372C() - v3) >= 0xB ) goto LABEL_11; } if ( *(a1 + 24) == 1 ) *v4 |= 0x80u; else *v4 &= ~0x80u; v6 = **a1; if ( *(a1 + 25) == 1 ) v7 = v6 | 0x40; else v7 = v6 & 0xFFFFFFBF; **a1 = v7; v8 = **a1; if ( *(a1 + 26) == 1 ) v9 = v8 | 0x20; else v9 = v8 & 0xFFFFFFDF; **a1 = v9; v10 = **a1; if ( *(a1 + 27) == 1 ) v11 = v10 & 0xFFFFFFEF; else v11 = v10 | 0x10; **a1 = v11; v12 = **a1; if ( *(a1 + 28) == 1 ) v13 = v12 | 8; else v13 = v12 & 0xFFFFFFF7; **a1 = v13; v14 = **a1; if ( *(a1 + 29) == 1 ) v15 = v14 | 4; else v15 = v14 & 0xFFFFFFFB; **a1 = v15; *(*a1 + 28) = a1[2] | a1[3] | a1[4] | a1[5] | (a1[1] - 1); a1[9] = 0; *(a1 + 32) = 1; return 0; } //----- (08005074) -------------------------------------------------------- int __fastcall sub_8005074(int a1, int a2) { int v2; // r2 bool v3; // zf int v4; // r3 int v5; // r4 int v6; // r0 int result; // r0 v2 = *(a1 + 32); v3 = v2 == 1; if ( v2 != 1 ) v3 = v2 == 2; if ( v3 ) { unk_40006600 |= 1u; unk_40006600 &= 0xFFFFC0FF; unk_40006600 |= *(a2 + 36) << 8; v4 = 1 << (*(a2 + 20) & 0x1F); v5 = ~v4; unk_4000661C &= ~v4; if ( !*(a2 + 28) ) { unk_4000660C &= v5; dword_40006640[2 * *(a2 + 20)] = *(a2 + 4); dword_40006640[2 * *(a2 + 20) + 1] = *a2; } if ( *(a2 + 28) == 1 ) { unk_4000660C |= v4; dword_40006640[2 * *(a2 + 20)] = *(a2 + 4); dword_40006640[2 * *(a2 + 20) + 1] = *(a2 + 12); } if ( *(a2 + 24) ) v6 = unk_40006604 | v4; else v6 = unk_40006604 & v5; unk_40006604 = v6; if ( *(a2 + 16) ) unk_40006614 |= v4; else unk_40006614 &= v5; if ( *(a2 + 32) == 1 ) unk_4000661C |= v4; result = 0; unk_40006600 = 2 * (unk_40006600 >> 1); } else { *(a1 + 36) |= 0x40000u; return 1; } return result; } // 40006640: using guessed type _DWORD[111]; //----- (0800515E) -------------------------------------------------------- int __fastcall sub_800515E(int a1) { int v2; // r5 int result; // r0 if ( *(a1 + 32) == 1 ) { *(a1 + 32) = 2; **a1 = 2 * (**a1 >> 1); v2 = sub_800372C(); while ( (*(*a1 + 4) & 1) != 0 ) { if ( (sub_800372C() - v2) >= 0xB ) { *(a1 + 36) |= 0x20000u; *(a1 + 32) = 5; return 1; } } result = 0; *(a1 + 36) = 0; } else { *(a1 + 36) |= 0x80000u; return 1; } return result; } //----- (080051BA) -------------------------------------------------------- int __fastcall sub_80051BA(int a1) { int v2; // r5 if ( *(a1 + 32) == 2 ) { **a1 |= 1u; v2 = sub_800372C(); while ( (*(*a1 + 4) & 1) == 0 ) { if ( (sub_800372C() - v2) >= 0xB ) { *(a1 + 36) |= 0x20000u; *(a1 + 32) = 5; return 1; } } **a1 &= ~2u; *(a1 + 32) = 1; return 0; } else { *(a1 + 36) |= 0x100000u; return 1; } } //----- (08005224) -------------------------------------------------------- int __fastcall sub_8005224(int *a1, int a2, unsigned __int8 *a3, _DWORD *a4) { int v4; // r4 unsigned int v5; // r5 bool v6; // zf int v7; // r4 int v8; // r3 int v9; // r5 int v10; // r6 int v11; // r4 int v13; // r1 v4 = *(a1 + 32); v5 = *(*a1 + 8); v6 = v4 == 1; if ( v4 != 1 ) v6 = v4 == 2; if ( !v6 ) { v13 = a1[9] | 0x40000; LABEL_15: a1[9] = v13; return 1; } if ( (v5 & 0x1C000000) == 0 ) { v13 = a1[9] | 0x200000; goto LABEL_15; } v7 = HIBYTE(v5) & 3; if ( v7 == 3 ) { v13 = a1[9] | 0x800000; goto LABEL_15; } *a4 = 1 << v7; v8 = *(a2 + 8); v9 = *(a2 + 12); v10 = *a1; v11 = 16 * v7; if ( v8 ) *(v10 + 0x180 + v11) = v9 | v8 | (8 * *(a2 + 4)); else *(v10 + 0x180 + v11) = v9 | (*a2 << 21); *(*a1 + 0x184 + v11) = *(a2 + 16); if ( *(a2 + 20) == 1 ) *(*a1 + 0x184 + v11) |= 0x100u; *(*a1 + v11 + 396) = (a3[6] << 16) | (a3[7] << 24) | (a3[5] << 8) | a3[4]; *(*a1 + v11 + 392) = (a3[2] << 16) | (a3[3] << 24) | (a3[1] << 8) | *a3; *(*a1 + 0x180 + v11) |= 1u; return 0; } //----- (08005300) -------------------------------------------------------- int __fastcall sub_8005300(int a1, char a2) { int v2; // r2 bool v3; // zf v2 = *(a1 + 32); v3 = v2 == 1; if ( v2 != 1 ) v3 = v2 == 2; if ( v3 ) { if ( (a2 & 1) != 0 ) *(*a1 + 8) |= 0x80u; if ( (a2 & 2) != 0 ) *(*a1 + 8) |= 0x8000u; if ( (a2 & 4) != 0 ) *(*a1 + 8) |= 0x800000u; return 0; } else { *(a1 + 36) |= 0x40000u; return 1; } } //----- (08005346) -------------------------------------------------------- int __fastcall sub_8005346(unsigned __int8 *a1, int a2) { int result; // r0 int v4; // r3 bool v5; // zf result = 0; v4 = a1[32]; v5 = v4 == 1; if ( v4 != 1 ) v5 = v4 == 2; if ( v5 && (*(*a1 + 8) & (a2 << 26)) != a2 << 26 ) return 1; return result; } //----- (08005368) -------------------------------------------------------- int __fastcall sub_8005368(int *a1, int a2, unsigned int *a3, int a4) { int v4; // r4 bool v5; // zf int v6; // r4 int v7; // r5 int v8; // r4 unsigned int v9; // r6 int v10; // r0 int v12; // r1 v4 = *(a1 + 32); v5 = v4 == 1; if ( v4 != 1 ) v5 = v4 == 2; if ( !v5 ) { v12 = a1[9] | 0x40000; LABEL_17: a1[9] = v12; return 1; } v6 = *a1; if ( a2 ) { if ( (*(v6 + 16) & 3) == 0 ) { v12 = a1[9] | 0x200000; goto LABEL_17; } } else if ( (*(v6 + 12) & 3) == 0 ) { v12 = a1[9] | 0x200000; goto LABEL_17; } v7 = 16 * a2; v8 = *(v6 + 0x1B0 + 16 * a2) & 4; a3[2] = v8; v9 = *(*a1 + 0x1B0 + 16 * a2); if ( v8 ) a3[1] = v9 >> 3; else *a3 = v9 >> 0x15; a3[3] = *(*a1 + 0x1B0 + 16 * a2) & 2; a3[4] = *(*a1 + v7 + 436) & 0xF; a3[6] = BYTE1(*(*a1 + v7 + 436)); a3[5] = HIWORD(*(*a1 + v7 + 436)); *a4 = *(*a1 + v7 + 440); *(a4 + 2) = BYTE2(*(*a1 + v7 + 440)); *(a4 + 3) = HIBYTE(*(*a1 + v7 + 440)); *(a4 + 4) = *(*a1 + v7 + 444); *(a4 + 6) = BYTE2(*(*a1 + v7 + 444)); *(a4 + 7) = HIBYTE(*(*a1 + v7 + 444)); v10 = *a1; if ( a2 ) *(v10 + 16) |= 0x20u; else *(v10 + 12) |= 0x20u; return 0; } //----- (0800547C) -------------------------------------------------------- int __fastcall sub_800547C(int a1, int a2) { int v2; // r2 bool v3; // zf v2 = *(a1 + 32); v3 = v2 == 1; if ( v2 != 1 ) v3 = v2 == 2; if ( v3 ) { *(*a1 + 20) |= a2; return 0; } else { *(a1 + 36) |= 0x40000u; return 1; } } //----- (080054A0) -------------------------------------------------------- int __fastcall sub_80054A0(int *a1) { _DWORD *v2; // r0 int v3; // r6 int v4; // r11 int v5; // r4 int v6; // r9 int v7; // r10 int v8; // r7 int v9; // r1 int v10; // r8 bool v11; // nf bool v12; // nf bool v13; // nf bool v14; // nf bool v15; // nf bool v16; // nf int result; // r0 int v18; // r7 v2 = *a1; v3 = v2[5]; v4 = v2[1]; v5 = v2[2]; v6 = v2[3]; v7 = v2[4]; v8 = v2[6]; v9 = v3 << 31; v10 = 0; if ( (v3 & 1) != 0 ) { if ( (v5 & 1) != 0 ) { v9 = 1; v2[2] = 1; if ( (v5 & 2) != 0 ) { sub_800336C(a1); } else if ( (v5 & 4) != 0 ) { v10 = 2048; } else if ( (v5 & 8) != 0 ) { v10 = 4096; } else { nullsub_1(a1); } } if ( (v5 & 0x100) != 0 ) { v9 = 256; *(*a1 + 8) = 256; if ( (v5 & 0x200) != 0 ) { sub_8003390(a1); } else if ( (v5 & 0x400) != 0 ) { v10 |= 0x2000u; } else if ( (v5 & 0x800) != 0 ) { v10 |= 0x4000u; } else { nullsub_2(a1); } } if ( (v5 & 0x10000) != 0 ) { v9 = 0x10000; *(*a1 + 8) = 0x10000; if ( (v5 & 0x20000) != 0 ) { sub_80033B4(a1); } else if ( (v5 & 0x40000) != 0 ) { v10 |= 0x8000u; } else if ( (v5 & 0x80000) != 0 ) { v10 |= 0x10000u; } else { nullsub_3(a1); } } } v11 = (v3 & 8) != 0; if ( (v3 & 8) != 0 ) { v9 = v6 << 27; v11 = (v6 & 0x10) != 0; } if ( v11 ) { v9 = *a1; v10 |= 0x200u; *(*a1 + 12) = 16; } v12 = (v3 & 4) != 0; if ( (v3 & 4) != 0 ) { v9 = v6 << 28; v12 = (v6 & 8) != 0; } if ( v12 ) { *(*a1 + 12) = 8; nullsub_4(a1, v9); } if ( (v3 & 2) != 0 && (*(*a1 + 12) & 3) != 0 ) sub_80033DE(a1); v13 = (v3 & 0x40) != 0; if ( (v3 & 0x40) != 0 ) v13 = (v7 & 0x10) != 0; if ( v13 ) { v10 |= 0x400u; *(*a1 + 16) = 16; } v14 = (v3 & 0x20) != 0; if ( (v3 & 0x20) != 0 ) v14 = (v7 & 8) != 0; if ( v14 ) { *(*a1 + 16) = 8; nullsub_5(a1); } if ( (v3 & 0x10) != 0 && (*(*a1 + 16) & 3) != 0 ) sub_80033E2(a1); v15 = (v3 & 0x20000) != 0; if ( (v3 & 0x20000) != 0 ) v15 = (v4 & 0x10) != 0; if ( v15 ) { *(*a1 + 4) = 16; nullsub_6(a1); } v16 = (v3 & 0x10000) != 0; if ( (v3 & 0x10000) != 0 ) v16 = (v4 & 8) != 0; if ( v16 ) { *(*a1 + 4) = 8; nullsub_7(a1); } result = v3 << 16; if ( (v3 & 0x8000) != 0 ) { if ( (v4 & 4) != 0 ) { if ( (v3 & 0x100) != 0 && (v8 & 1) != 0 ) v10 |= 1u; if ( (v3 & 0x200) != 0 && (v8 & 2) != 0 ) v10 |= 2u; if ( (v3 & 0x400) != 0 && (v8 & 4) != 0 ) v10 |= 4u; if ( (v3 & 0x800) != 0 && (v8 & 0x70) != 0 ) { v18 = v8 & 0x70; switch ( v18 ) { case 16: v10 |= 8u; break; case 32: v10 |= 0x10u; break; case 48: v10 |= 0x20u; break; case 64: v10 |= 0x40u; break; case 80: v10 |= 0x80u; break; case 96: v10 |= 0x100u; break; } *(*a1 + 24) &= 0xFFFFFF8F; } } result = 4; *(*a1 + 4) = 4; } if ( v10 ) { a1[9] |= v10; return sub_80033EE(a1); } return result; } // 8005576: variable 'v9' is possibly undefined // 80033D8: using guessed type int __fastcall nullsub_1(_DWORD); // 80033DA: using guessed type int __fastcall nullsub_2(_DWORD); // 80033DC: using guessed type int __fastcall nullsub_3(_DWORD); // 80033E6: using guessed type int __fastcall nullsub_4(_DWORD, _DWORD); // 80033E8: using guessed type int __fastcall nullsub_5(_DWORD); // 80033EA: using guessed type int __fastcall nullsub_6(_DWORD); // 80033EC: using guessed type int __fastcall nullsub_7(_DWORD); //----- (0800569E) -------------------------------------------------------- int __fastcall sub_800569E(int a1) { return *(a1 + 36); } //----- (080056A2) -------------------------------------------------------- int __fastcall sub_80056A2(int a1) { int result; // r0 int v3; // r2 bool v4; // zf result = 0; v3 = *(a1 + 32); v4 = v3 == 1; if ( v3 != 1 ) v4 = v3 == 2; if ( v4 ) { *(a1 + 36) = 0; } else { *(a1 + 36) |= 0x40000u; return 1; } return result; } //----- (080056C2) -------------------------------------------------------- int __fastcall sub_80056C2(int a1, unsigned __int8 a2, unsigned int a3) { sub_8006A28(a1, a3, a2); return a1; } //----- (080056DC) -------------------------------------------------------- int __fastcall sub_80056DC(int *a1, int a2, int a3) { int v3; // r4 int v4; // r5 int v7; // r5 int v8; // r6 unsigned int v9; // r0 int v10; // r1 unsigned int v11; // r7 unsigned int i; // r0 int v13; // r5 int v14; // r6 int v15; // r5 int v16; // r5 unsigned int v17; // r1 v3 = *a1; v4 = *(*a1 + 36); if ( a2 ) { v7 = v4 + HIWORD(*(v3 + 40)); v8 = 0; v9 = a2 - 1; if ( a2 != 1 ) { v10 = v9 & 3; if ( (v9 & 3) != 0 ) { do { v11 = *(v3 + 0x104 + 4 * v8++); --v10; v7 += HIWORD(v11); } while ( v10 ); } for ( i = v9 >> 2; i; v7 = v16 + HIWORD(v17) ) { v13 = v7 + HIWORD(*(v3 + 0x104 + 4 * v8)); v14 = v8 + 1; v15 = v13 + HIWORD(*(v3 + 0x104 + 4 * v14++)); v16 = v15 + HIWORD(*(v3 + 0x104 + 4 * v14++)); v17 = *(v3 + 0x104 + 4 * v14); v8 = v14 + 1; --i; } } *(v3 + 4 * a2 + 256) = v7 | (a3 << 16); return 0; } else { *(v3 + 40) = v4 | (a3 << 16); return 0; } } //----- (0800576A) -------------------------------------------------------- int __fastcall sub_800576A(int a1, int a2) { *(*a1 + 36) = a2; return 0; } //----- (08005774) -------------------------------------------------------- int __fastcall sub_8005774(_DWORD *a1, _DWORD *a2, _DWORD *a3, _DWORD *a4) { unsigned int v4; // r5 a1[14] = 0; a1[15] = 440; *a1 = __ROR4__((unk_20000718 >> 8) & 0xFF00FF | (unk_20000718 << 8) & 0xFF00FF00, 16); a1[12] = __ROR4__((unk_2000071C >> 8) & 0xFF00FF | (unk_2000071C << 8) & 0xFF00FF00, 16); v4 = (*a4 >> 8) & 0xFF00FF | (*a4 << 8); a1[10] = HIBYTE(v4) | (v4 << 8) & 0xFFFFFF | 0x40000000; a1[11] = *a4 & 0xFF000000 | (((a4[1] >> 8) & 0xFF00FF | (a4[1] << 8)) << 8) & 0xFFFFFF | (((a4[1] >> 8) & 0xFF00FFu | (a4[1] << 8)) >> 0x18); a1[1] = __ROR4__((*a2 >> 8) & 0xFF00FF | (*a2 << 8) & 0xFF00FF00, 16); a1[2] = __ROR4__((a2[1] >> 8) & 0xFF00FF | (a2[1] << 8) & 0xFF00FF00, 16); a1[3] = __ROR4__((a2[2] >> 8) & 0xFF00FF | (a2[2] << 8) & 0xFF00FF00, 16); a1[4] = __ROR4__((a2[3] >> 8) & 0xFF00FF | (a2[3] << 8) & 0xFF00FF00, 16); a1[5] = __ROR4__((a2[4] >> 8) & 0xFF00FF | (a2[4] << 8) & 0xFF00FF00, 16); a1[6] = __ROR4__((a2[5] >> 8) & 0xFF00FF | (a2[5] << 8) & 0xFF00FF00, 16); a1[7] = __ROR4__((a2[6] >> 8) & 0xFF00FF | (a2[6] << 8) & 0xFF00FF00, 16); a1[8] = __ROR4__((a2[7] >> 8) & 0xFF00FF | (a2[7] << 8) & 0xFF00FF00, 16); a1[9] = __ROR4__((*a3 >> 8) & 0xFF00FF | (*a3 << 8) & 0xFF00FF00, 16); a1[13] = __ROR4__(((a3[1] & 0xFFFFFFu) >> 8) & 0xFF00FF | (a3[1] << 8) & 0xFF00FF00, 16) | 0x80; return 0; } //----- (080058D0) -------------------------------------------------------- int __fastcall sub_80058D0(int a1, unsigned __int8 *a2) { int v2; // r0 _DWORD *v3; // r0 _DWORD *v4; // r1 if ( a1 == 169 ) { v2 = *a2; if ( v2 == 208 ) { v3 = a2 + 1; v4 = &unk_20000760; LABEL_6: *v4 = *v3; v4[1] = v3[1]; return 0; } if ( v2 == 160 ) { v3 = a2 + 1; v4 = &unk_20000718; goto LABEL_6; } } return 0; } //----- (080058F4) -------------------------------------------------------- int __fastcall sub_80058F4(int a1, int *a2, int a3) { int v5; // r3 int v6; // r2 int v7; // r1 int v8; // r0 int v9; // r10 unsigned int v10; // r12 int v11; // r6 int v12; // r5 int v13; // lr int v14; // r5 unsigned int v15; // r9 int v16; // r6 int v17; // r5 int v18; // [sp+0h] [bp-168h] _DWORD v19[89]; // [sp+4h] [bp-164h] BYREF if ( a1 == 160 ) { if ( a3 != 8 ) return 0; *a2 = dword_20000760[2]; a2[1] = unk_2000076C; return 0; } if ( a1 != 176 ) return 0; if ( a3 != 20 ) return 0; sub_8005774(dword_20000720, dword_20000770, dword_20000760, &dword_20000760[2]); sub_8000680(); v5 = 1732584193; v6 = -271733879; v7 = -1732584194; v8 = 271733878; v9 = -1009589776; v18 = -899497514; v10 = 0; do { if ( v10 >= 0x14 ) { if ( v10 - 0x28 >= 0x14 ) { v13 = v6 ^ v7 ^ v8; goto LABEL_14; } v11 = v7 & v8; v12 = (v7 | v8) & v6; } else { v11 = v6 & v7; v12 = v8 & ~v6; } v13 = v12 | v11; LABEL_14: if ( v10 >= 0x14 ) { if ( v10 < 0x28 ) { v14 = 1859775393; } else if ( v10 >= 0x3C ) { v14 = v18; } else { v14 = -1894007588; } } else { v14 = 1518500249; } v15 = v10; if ( v10 < 0x10 ) v16 = dword_20000720[v10]; else v16 = __ROR4__(v19[v10 - 3] ^ v19[v10 - 8] ^ v19[v10 - 14] ^ v19[v10 - 16], 31); v19[v10++] = v16; v17 = v14 + v9 + v13 + __ROR4__(v5, 0x1B); v9 = v8; v8 = v7; v7 = __ROR4__(v6, 2); v6 = v5; v5 = v17 + v19[v15]; } while ( v10 < 80 ); a2[4] = v5; a2[3] = v6; a2[2] = v7; a2[1] = v8; *a2 = v9; return 0; } // 20000720: using guessed type _DWORD[16]; // 20000760: using guessed type _DWORD dword_20000760[3]; // 20000770: using guessed type _DWORD[8]; // 80058F4: using guessed type _DWORD var_164[89]; //----- (08005A6C) -------------------------------------------------------- int __fastcall sub_8005A6C(int a1, int a2) { int v4; // r0 bool v5; // zf int result; // r0 unsigned int v7; // r0 int v8; // r0 int v9; // r1 unsigned __int16 v10; // r1 bool v11; // zf unsigned int v12; // r5 int v13; // r5 int v14; // r2 int v15; // r2 int v16; // r1 int v17; // r1 __int16 v18[12]; // [sp+0h] [bp-18h] BYREF v4 = *a2 & 0x60; if ( (*a2 & 0x60) != 0 ) { v5 = v4 == 32; if ( v4 != 32 ) v5 = v4 == 64; if ( v5 ) { (*(*(a1 + 652) + 8))(a1); return 0; } else { LABEL_49: sub_8003DF0(a1, 128); sub_8003DF0(a1, 0); return 0; } } else { switch ( *(a2 + 1) ) { case 0: if ( *(a1 + 628) - 1 > 2 ) goto LABEL_49; v15 = *(a2 + 6); if ( v15 != 2 ) goto LABEL_49; v17 = 1; if ( *(a1 + 636) ) v17 = 3; *(a1 + 12) = v17; v16 = a1 + 0xC; goto LABEL_64; case 1: if ( *(a1 + 628) - 1 > 2 ) goto LABEL_49; if ( *(a2 + 2) != 1 ) goto LABEL_71; *(a1 + 636) = 0; goto LABEL_70; case 3: if ( *(a2 + 2) != 1 ) goto LABEL_71; *(a1 + 636) = 1; goto LABEL_70; case 5: v11 = *(a2 + 4) == 0; if ( !*(a2 + 4) ) v11 = *(a2 + 6) == 0; if ( !v11 ) goto LABEL_49; v12 = *(a2 + 2); if ( v12 >= 0x80 ) goto LABEL_49; v13 = v12 & 0x7F; if ( *(a1 + 628) == 3 ) goto LABEL_49; *(a1 + 630) = v13; sub_8003E4C(a1, v13); sub_8005FFA(a1); if ( v13 ) *(a1 + 628) = 2; else *(a1 + 628) = 1; return 0; case 6: v7 = *(a2 + 2); switch ( v7 >> 8 ) { case 1u: v8 = (**(a1 + 648))(*(a1 + 16), v18); break; case 2u: v9 = *(a1 + 652); if ( *(a1 + 16) ) v8 = (*(v9 + 44))(v18); else v8 = (*(v9 + 40))(v18); *(v8 + 1) = 2; break; case 3u: switch ( v7 ) { case 0: v8 = (*(*(a1 + 648) + 4))(*(a1 + 16), v18); goto LABEL_25; case 1: v8 = (*(*(a1 + 648) + 8))(*(a1 + 16), v18); goto LABEL_25; case 2: v8 = (*(*(a1 + 648) + 12))(*(a1 + 16), v18); goto LABEL_25; case 3: v8 = (*(*(a1 + 648) + 16))(*(a1 + 16), v18); goto LABEL_25; case 4: v8 = (*(*(a1 + 648) + 20))(*(a1 + 16), v18); goto LABEL_25; case 5: v8 = (*(*(a1 + 648) + 24))(*(a1 + 16), v18); goto LABEL_25; default: goto LABEL_49; } case 6u: if ( *(a1 + 16) ) goto LABEL_49; v8 = (*(*(a1 + 652) + 52))(v18); break; case 7u: if ( *(a1 + 16) ) goto LABEL_49; v8 = (*(*(a1 + 652) + 48))(v18); *(v8 + 1) = 7; break; default: goto LABEL_49; } LABEL_25: if ( !v18[0] ) goto LABEL_30; if ( !*(a2 + 6) ) goto LABEL_70; v10 = v18[0]; if ( v18[0] > *(a2 + 6) ) v10 = *(a2 + 6); v18[0] = v10; sub_8005FB4(a1, v8, v10); LABEL_30: if ( !*(a2 + 6) ) goto LABEL_70; goto LABEL_71; case 8: if ( *(a2 + 6) != 1 ) goto LABEL_49; if ( *(a1 + 628) - 1 <= 1 ) { *(a1 + 8) = 0; v15 = 1; v16 = a1 + 8; } else { if ( *(a1 + 628) != 3 ) goto LABEL_49; v15 = 1; v16 = a1 + 4; } LABEL_64: sub_8005FB4(a1, v16, v15); return 0; case 9: byte_2001467E[0] = *(a2 + 2); if ( byte_2001467E[0] >= 2u ) goto LABEL_49; v14 = *(a1 + 628); if ( v14 == 2 ) { if ( byte_2001467E[0] ) { *(a1 + 4) = byte_2001467E[0]; *(a1 + 628) = 3; if ( sub_8004284(a1) == 2 ) goto LABEL_49; } } else { if ( v14 != 3 ) { sub_8003DF0(a1, 128); sub_8003DF0(a1, 0); sub_800429A(a1); return 0; } if ( byte_2001467E[0] ) { if ( byte_2001467E[0] != *(a1 + 4) ) { sub_800429A(a1); *(a1 + 4) = byte_2001467E[0]; if ( sub_8004284(a1) == 2 ) goto LABEL_49; } } else { *(a1 + 628) = 2; *(a1 + 4) = 0; sub_800429A(a1); } } LABEL_70: sub_8005FFA(a1); LABEL_71: result = 0; break; default: goto LABEL_49; } } return result; } // 2001467E: using guessed type unsigned __int8 byte_2001467E[2]; //----- (08005D20) -------------------------------------------------------- int __fastcall sub_8005D20(int a1, int a2) { bool v4; // zf int v5; // r0 int v6; // r1 bool v7; // zf v5 = *a2 & 0x60; v4 = v5 == 0; if ( (*a2 & 0x60) != 0 ) v4 = v5 == 32; if ( (v4 || v5 == 64) && *(a1 + 628) - 1 <= 2 && *(a2 + 4) < 2u ) { v6 = (*(*(a1 + 652) + 8))(a1); v7 = *(a2 + 6) == 0; if ( !*(a2 + 6) ) v7 = v6 == 0; if ( v7 ) { sub_8005FFA(a1); return 0; } } else { sub_8003DF0(a1, 128); sub_8003DF0(a1, 0); } return 0; } //----- (08005D80) -------------------------------------------------------- int __fastcall sub_8005D80(int a1, int a2) { int v3; // r0 int v4; // r3 bool v5; // zf int v7; // r3 bool v8; // zf int v9; // r2 bool v10; // zf int v11; // r1 int v12; // r1 bool v13; // zf int v14; // r1 _DWORD *v15; // r1 int v16; // r1 _DWORD *v17; // r5 bool v18; // zf v3 = *(a2 + 4); v4 = *a2 & 0x60; if ( (*a2 & 0x60) != 0 ) { v5 = v4 == 32; if ( v4 != 32 ) v5 = v4 == 64; if ( v5 ) { (*(*(a1 + 652) + 8))(a1); return 0; } goto LABEL_43; } if ( (*a2 & 0x60) == 32 ) return (*(*(a1 + 652) + 8))(a1); switch ( *(a2 + 1) ) { case 0: v12 = *(a1 + 628); if ( v12 == 2 ) { v13 = v3 == 0; if ( v3 ) v13 = v3 == 128; if ( v13 ) { v14 = a1 + 20 * (v3 & 0x7F); if ( (v3 & 0x80) != 0 ) v15 = (v14 + 20); else v15 = (v14 + 0x140); *v15 = 0; LABEL_40: sub_8005FB4(a1, v15, 2); return 0; } } else { if ( v12 != 3 ) goto LABEL_43; v16 = a1 + 20 * (v3 & 0xF); if ( (v3 & 0x80) != 0 ) { if ( !*(v16 + 24) ) goto LABEL_43; v17 = (a1 + 20 * (v3 & 0x7F) + 0x14); goto LABEL_48; } if ( *(v16 + 324) ) { v17 = (a1 + 20 * (v3 & 0x7F) + 0x140); LABEL_48: v18 = v3 == 0; if ( v3 ) v18 = v3 == 128; *v17 = !v18 && sub_8003E2C(a1, v3) != 0; v15 = v17; goto LABEL_40; } } LABEL_43: sub_8003DF0(a1, 128); v11 = 0; LABEL_44: sub_8003DF0(a1, v11); return 0; case 1: v9 = *(a1 + 628); if ( v9 == 2 ) goto LABEL_21; if ( v9 != 3 ) goto LABEL_43; if ( *(a2 + 2) ) return 0; if ( (v3 & 0x7F) != 0 ) sub_8003E0E(a1, v3); goto LABEL_28; case 3: v7 = *(a1 + 628); if ( v7 != 2 ) { if ( v7 != 3 ) goto LABEL_43; if ( !*(a2 + 2) ) { v8 = v3 == 0; if ( *(a2 + 4) ) v8 = v3 == 128; if ( !v8 && !*(a2 + 6) ) sub_8003DF0(a1, v3); } LABEL_28: sub_8005FFA(a1); return 0; } LABEL_21: v10 = v3 == 0; if ( *(a2 + 4) ) v10 = v3 == 128; if ( !v10 ) { sub_8003DF0(a1, *(a2 + 4)); v11 = 128; goto LABEL_44; } goto LABEL_43; default: goto LABEL_43; } } //----- (08005EF2) -------------------------------------------------------- int __fastcall sub_8005EF2(int result, _BYTE *a2) { *result = *a2; *(result + 1) = a2[1]; *(result + 2) = a2[2] + (a2[3] << 8); *(result + 4) = a2[4] + (a2[5] << 8); *(result + 6) = a2[6] + (a2[7] << 8); return result; } //----- (08005F1E) -------------------------------------------------------- unsigned __int8 *__fastcall sub_8005F1E(unsigned __int8 *result, _BYTE *a2, _WORD *a3) { unsigned __int8 *v3; // r3 int v4; // r4 int v5; // t1 int v6; // r2 int v7; // r5 int v8; // r2 int v9; // r2 int v10; // r4 int v11; // r2 int v12; // r2 int v13; // r4 int v14; // r2 int v15; // r2 int v16; // r4 int v17; // r2 unsigned __int8 *v18; // t1 v3 = result; if ( result ) { v4 = 0; if ( *result ) { do { ++v4; if ( !result[1] ) break; ++v4; if ( !result[2] ) break; ++v4; if ( !result[3] ) break; v5 = result[4]; result += 4; ++v4; } while ( v5 ); } *a3 = ((2 * v4) & 0x1FF) + 2; *a2 = *a3; a2[1] = 3; v6 = 2; result = *v3; if ( *v3 ) { do { v7 = v6; v8 = v6 + 1; a2[v7] = *v3; a2[v8] = 0; v9 = v8 + 1; result = v3[1]; if ( !v3[1] ) break; v10 = v9; v11 = v9 + 1; a2[v10] = result; a2[v11] = 0; v12 = v11 + 1; result = v3[2]; if ( !v3[2] ) break; v13 = v12; v14 = v12 + 1; a2[v13] = result; a2[v14] = 0; v15 = v14 + 1; result = v3[3]; if ( !v3[3] ) break; v16 = v15; v17 = v15 + 1; a2[v16] = result; a2[v17] = 0; v6 = v17 + 1; v18 = v3[4]; v3 += 4; result = v18; } while ( v18 ); } } return result; } //----- (08005FB4) -------------------------------------------------------- int __fastcall sub_8005FB4(_DWORD *a1, int a2, int a3) { a1[155] = 2; a1[7] = a3; a1[8] = a3; sub_8003E6A(a1, 0, a2, a3); return 0; } //----- (08005FD2) -------------------------------------------------------- int __fastcall sub_8005FD2(int a1, int a2, int a3) { sub_8003E6A(a1, 0, a2, a3); return 0; } //----- (08005FE6) -------------------------------------------------------- int __fastcall sub_8005FE6(int a1, int a2, int a3) { sub_8003E88(a1, 0, a2, a3); return 0; } //----- (08005FFA) -------------------------------------------------------- int __fastcall sub_8005FFA(int a1) { *(a1 + 620) = 4; sub_8003E6A(a1, 0, 0, 0); return 0; } //----- (08006014) -------------------------------------------------------- int __fastcall sub_8006014(int a1) { *(a1 + 620) = 5; sub_8003E88(a1, 0, 0, 0); return 0; } //----- (08006030) -------------------------------------------------------- int __fastcall sub_8006030( _DWORD *a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9, int a10, int a11, int a12, int a13, int a14) { int v14; // r2 int v15; // r1 int v16; // r1 int v17; // r2 int v18; // r1 int v19; // r2 unsigned int v20; // r2 if ( a7 == 1 ) { a1[14] &= ~0x10000u; a1[3] &= 0xFFBDFFBF; a1[3] &= 0xFFCFFFFF; if ( a14 == 1 ) a1[3] |= 0x100000u; v14 = 200001; v15 = 200001; while ( --v15 ) { if ( a1[4] < 0 ) { a1[4] |= 1u; while ( --v14 ) { if ( (a1[4] & 1) == 0 ) { v16 = 0; goto LABEL_24; } } break; } } v16 = 3; } else { v17 = 200001; a1[3] |= 0x40u; v18 = 200001; while ( --v18 ) { if ( a1[4] < 0 ) { a1[4] |= 1u; while ( --v17 ) { if ( (a1[4] & 1) == 0 ) { v16 = 0; goto LABEL_20; } } break; } } v16 = 3; LABEL_20: v19 = a1[14]; if ( a11 ) v20 = v19 & 0xFFFEFFFF; else v20 = v19 | 0x10000; a1[14] = v20; } LABEL_24: if ( a5 == 1 ) { a1[2] |= 6u; a1[2] |= 0x20u; } return v16; } //----- (080060EA) -------------------------------------------------------- int __fastcall sub_80060EA(int a1, int a2, int a3) { int v3; // r1 if ( a3 != 2 ) goto LABEL_20; if ( (a2 - 14200000) < 0xC3500 ) { v3 = 15360; goto LABEL_21; } if ( (a2 - 15000000) < 0xF4240 ) { v3 = 14336; goto LABEL_21; } if ( (a2 - 16000000) < 0x124F80 ) { v3 = 13312; goto LABEL_21; } if ( (a2 - 17200000) < 0x13D620 ) { v3 = 12288; goto LABEL_21; } if ( (a2 - 18500000) < 0x16E360 ) { v3 = 11264; goto LABEL_21; } if ( (a2 - 20000000) < 0x1B7740 ) { v3 = 10240; goto LABEL_21; } if ( (a2 - 21800000) < 0x2191C0 ) { LABEL_20: v3 = 9216; goto LABEL_21; } if ( (a2 - 24000000) >= 0x387520 ) { if ( (a2 - 27700000) < 0x419CE0 ) v3 = 7168; else v3 = 6144; } else { v3 = 0x2000; } LABEL_21: *(a1 + 12) &= 0xFFFFC3FF; *(a1 + 12) |= v3; return 0; } //----- (080061B6) -------------------------------------------------------- int __fastcall sub_80061B6(int a1) { *(a1 + 8) |= 1u; return 0; } //----- (080061C2) -------------------------------------------------------- int __fastcall sub_80061C2(int a1) { *(a1 + 8) = 2 * (*(a1 + 8) >> 1); return 0; } //----- (080061CE) -------------------------------------------------------- int __fastcall sub_80061CE(int a1, int a2) { int v2; // r1 *(a1 + 12) &= 0x9FFFFFFF; if ( a2 == 1 ) { v2 = *(a1 + 12) | 0x20000000; LABEL_3: *(a1 + 12) = v2; sub_80009EC(0x32u); return 0; } if ( !a2 ) { v2 = *(a1 + 12) | 0x40000000; goto LABEL_3; } return 1; } //----- (08006204) -------------------------------------------------------- int __fastcall sub_8006204( _DWORD *a1, unsigned int a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9, int a10, int a11, int a12) { int v13; // r3 _DWORD *v14; // r4 int v15; // r0 int *v16; // r5 int v17; // r1 int v18; // r0 int v19; // r1 int v20; // r0 int *v21; // r6 int *v22; // r9 unsigned int i; // r1 int v24; // r0 int *v25; // r8 int *v26; // r9 _DWORD *v27; // lr int v28; // r0 unsigned int j; // r1 _DWORD *v30; // lr int v31; // r0 v13 = 0; v14 = a1 + 0x41; v15 = 5; do { *v14 = 0; v14[1] = 0; v14[2] = 0; v14 += 3; --v15; } while ( v15 ); if ( a12 ) { *a1 &= ~0x200000u; a1[14] |= 0x80000u; } else { a1[14] |= 0x200000u; a1[14] &= ~0x80000u; a1[14] &= ~0x40000u; } a1[0x380] = 0; v16 = a1 + 0x200; a1[0x200] = a1[0x200]; if ( a7 != 1 ) { v17 = *v16 | 3; goto LABEL_11; } if ( !a4 ) { v17 = *v16; LABEL_11: *v16 = v17; goto LABEL_12; } *v16 |= 1u; LABEL_12: a1[4] = 1056; v18 = 200001; v19 = 200001; while ( --v19 ) { if ( (a1[4] & 0x20) == 0 ) goto LABEL_17; } v13 = 1; LABEL_17: a1[4] = 16; while ( --v18 ) { if ( (a1[4] & 0x10) == 0 ) goto LABEL_22; } v13 = 1; LABEL_22: v20 = 0; a1[516] = 0; a1[517] = 0; a1[519] = 0; if ( a2 ) { v21 = a1 + 0x240; v22 = a1 + 0x240; if ( (a2 & 1) != 0 ) { if ( *v22 >= 0 ) *v22 = 0; else *v22 = 0x8000000; a1[580] = 0; a1[578] = 64383; v20 = 1; v21 = a1 + 584; } for ( i = a2 >> 1; i; v21 += 0x10 ) { if ( *v21 >= 0 ) { *v21 = 0; } else if ( v20 ) { *v21 = 1207959552; } else { *v22 = 0x8000000; } v21[4] = 0; v27 = v21 + 8; v21[2] = 64383; v28 = v20 + 1; if ( v21[8] >= 0 ) { *v27 = 0; } else if ( v28 ) { *v27 = 1207959552; } else { *v22 = 0x8000000; } v20 = v28 + 1; v21[12] = 0; --i; v21[10] = 64383; } v24 = 0; v25 = a1 + 0x2C0; v26 = a1 + 0x2C0; if ( (a2 & 1) != 0 ) { if ( *v25 >= 0 ) *v25 = 0; else *v25 = 0x8000000; a1[708] = 0; a1[706] = 64383; v24 = 1; v26 = a1 + 712; } for ( j = a2 >> 1; j; v26 += 0x10 ) { if ( *v26 >= 0 ) { *v26 = 0; } else if ( v24 ) { *v26 = 1207959552; } else { *v25 = 0x8000000; } v26[4] = 0; v30 = v26 + 8; v26[2] = 64383; v31 = v24 + 1; if ( v26[8] >= 0 ) { *v30 = 0; } else if ( v31 ) { *v30 = 1207959552; } else { *v25 = 0x8000000; } v24 = v31 + 1; v26[12] = 0; --j; v26[10] = 64383; } } a1[516] &= ~0x100u; if ( a5 == 1 ) { a1[524] = 8388864; a1[524] |= 0x10003u; } a1[6] = 0; a1[5] = -1073741825; if ( !a5 ) a1[6] |= 0x10u; a1[6] |= 0x803C3800; if ( a8 ) a1[6] |= 8u; if ( a12 == 1 ) a1[6] |= 0x40000004u; return v13; } //----- (0800643E) -------------------------------------------------------- int __fastcall sub_800643E(int a1, int a2) { int v2; // r1 *(a1 + 16) = (a2 << 6) | 0x20; v2 = 200001; while ( --v2 ) { if ( (*(a1 + 16) & 0x20) == 0 ) return 0; } return 3; } //----- (0800645C) -------------------------------------------------------- int __fastcall sub_800645C(int a1) { int v1; // r1 *(a1 + 16) = 16; v1 = 200001; while ( --v1 ) { if ( (*(a1 + 16) & 0x10) == 0 ) return 0; } return 3; } //----- (08006476) -------------------------------------------------------- int __fastcall sub_8006476(int a1) { int result; // r0 bool v2; // zf result = *(a1 + 2056) & 6; if ( result ) { v2 = result == 2; if ( result != 2 ) v2 = result == 6; if ( v2 ) return 2; else return 15; } return result; } //----- (08006492) -------------------------------------------------------- int __fastcall sub_8006492(int a1, unsigned __int8 *a2) { int v2; // r4 int v3; // r3 int v4; // r2 int v5; // r0 int *v6; // r2 int v7; // r0 int v8; // r3 v2 = *a2; v3 = 1 << (v2 & 0xF); v4 = a1 + 32 * v2; v5 = a1 + 0x800; if ( a2[1] == 1 ) { v6 = (v4 + 0x900); *(v5 + 28) |= v3; if ( (*v6 & 0x8000) == 0 ) { v7 = *v6; v8 = *(a2 + 2) & 0x7FF | (a2[3] << 18) | (v2 << 22); LABEL_6: *v6 = v7 | v8 | 0x10008000; } } else { v6 = (v4 + 0xB00); *(v5 + 28) |= v3 << 16; if ( (*v6 & 0x8000) == 0 ) { v7 = *v6; v8 = *(a2 + 2) & 0x7FF | (a2[3] << 18); goto LABEL_6; } } return 0; } //----- (08006508) -------------------------------------------------------- int __fastcall sub_8006508(int a1, unsigned __int8 *a2) { int v2; // r3 int v3; // r2 int v4; // r0 int v5; // r5 int v6; // r3 v2 = *a2; v3 = a1 + 32 * v2; v4 = a1 + 0x800; v5 = *(v4 + 60); v6 = 1 << (v2 & 0xF); if ( a2[1] == 1 ) { *(v4 + 60) = v5 & ~v6; *(v4 + 28) &= ~(1 << (*a2 & 0xF)); *(v3 + 0x900) &= 0xEC337800; } else { *(v4 + 60) = v5 & ~(v6 << 16); *(v4 + 28) &= ~(1 << (*a2 & 0xF) << 16); *(v3 + 0xB00) &= 0xEFF37800; } return 0; } //----- (08006580) -------------------------------------------------------- int __fastcall sub_8006580(int a1, unsigned __int8 *a2, int a3) { int v5; // r5 _DWORD *v6; // r5 unsigned int v7; // r0 int v8; // r0 int v9; // r0 int *v11; // r5 unsigned int v12; // r0 _DWORD *v13; // r3 int v14; // t1 unsigned int v15; // r3 int v16; // r0 int v17; // r0 int v18; // r0 int v19; // r0 v5 = a1 + 32 * *a2; if ( a2[1] != 1 ) { v6 = (v5 + 0xB00); v6[4] = v6[4] >> 0x13 << 19; v6[4] &= 0xE007FFFF; v15 = *(a2 + 2); v16 = *(a2 + 5); if ( v16 ) { v18 = ((v15 + v16 - 1) / v15); v6[4] |= (v18 << 19) & 0x1FF80000; v17 = (v18 * *(a2 + 2)) & 0x7FFFF | v6[4]; } else { v6[4] |= v15 & 0x7FFFF; v17 = v6[4] | 0x80000; } v6[4] = v17; if ( a3 == 1 ) { v19 = *(a2 + 3); if ( v19 ) v6[5] = v19; } goto LABEL_27; } v6 = (v5 + 0x900); v7 = v6[4]; if ( *(a2 + 5) ) { v6[4] = v7 >> 0x13 << 19; v6[4] &= 0xE007FFFF; v6[4] |= (((*(a2 + 2) + *(a2 + 5) - 1) / *(a2 + 2)) << 19) & 0x1FF80000; v6[4] |= *(a2 + 5) & 0x7FFFF; if ( a2[3] != 1 ) goto LABEL_7; v6[4] &= 0x9FFFFFFF; v8 = v6[4] | 0x20000000; } else { v6[4] = v7 & 0xE007FFFF; v6[4] |= 0x80000u; v8 = v6[4] >> 0x13 << 19; } v6[4] = v8; LABEL_7: if ( a3 == 1 ) { v9 = *(a2 + 4); if ( v9 ) v6[5] = v9; LABEL_27: if ( a2[3] == 1 ) { if ( (*(a1 + 2056) & 0x100) != 0 ) *v6 |= 0x10000000u; else *v6 |= 0x20000000u; } *v6 |= 0x84000000; return 0; } *v6 |= 0x84000000; if ( a2[3] != 1 ) { if ( *(a2 + 5) ) { *(a1 + 2100) |= 1 << (*a2 & 0xF); return 0; } return 0; } if ( (*(a1 + 2056) & 0x100) != 0 ) *v6 |= 0x10000000u; else *v6 |= 0x20000000u; v11 = *(a2 + 3); if ( a3 ) return 0; v12 = (*(a2 + 10) + 3) >> 2; if ( !v12 ) return 0; v13 = (a1 + (*a2 << 12) + 0x1000); do { v14 = *v11++; *v13 = v14; --v12; } while ( v12 ); return 0; } //----- (0800670A) -------------------------------------------------------- int __fastcall sub_800670A(int a1, unsigned __int8 *a2, int a3) { int v3; // r4 _DWORD *v4; // r4 unsigned int v5; // r3 int v6; // r3 unsigned int v7; // r3 int v8; // r0 int v10; // r0 v3 = a1 + 32 * *a2; if ( a2[1] != 1 ) { v4 = (v3 + 0xB00); v4[4] = v4[4] >> 0x13 << 19; v4[4] &= 0xE007FFFF; if ( *(a2 + 5) ) *(a2 + 5) = *(a2 + 2); v4[4] |= 0x80000u; v4[4] |= *(a2 + 2) & 0x7FFFF; if ( a3 == 1 ) { v10 = *(a2 + 3); if ( v10 ) v4[5] = v10; } goto LABEL_17; } v4 = (v3 + 0x900); v5 = v4[4]; if ( *(a2 + 5) ) { v4[4] = v5 >> 0x13 << 19; v4[4] &= 0xE007FFFF; v7 = *(a2 + 2); if ( v7 > *(a2 + 5) ) v7 = *(a2 + 5); *(a2 + 5) = v7; v4[4] |= 0x80000u; v6 = v4[4] | *(a2 + 5) & 0x7FFFF; } else { v4[4] = v5 & 0xE007FFFF; v4[4] |= 0x80000u; v6 = v4[4] >> 0x13 << 19; } v4[4] = v6; if ( a3 == 1 ) { v8 = *(a2 + 4); if ( v8 ) v4[5] = v8; LABEL_17: *v4 |= 0x84000000; return 0; } *v4 |= 0x84000000; if ( *(a2 + 5) ) { *(a1 + 2100) |= 1 << (*a2 & 0xF); return 0; } return 0; } //----- (080067E0) -------------------------------------------------------- int __fastcall sub_80067E0(int a1, int *a2, int a3, int a4, int a5) { unsigned int v5; // r3 _DWORD *v6; // r0 int v7; // t1 if ( !a5 ) { v5 = (a4 + 3) >> 2; if ( v5 ) { v6 = (a1 + (a3 << 12) + 0x1000); do { v7 = *a2++; *v6 = v7; --v5; } while ( v5 ); } } return 0; } //----- (0800680C) -------------------------------------------------------- _DWORD *__fastcall sub_800680C(int a1, _DWORD *a2, int a3) { unsigned int v3; // r2 _DWORD *v4; // r0 v3 = (a3 + 3) >> 2; if ( v3 ) { v4 = (a1 + 0x1000); do { *a2++ = *v4; --v3; } while ( v3 ); } return a2; } //----- (08006824) -------------------------------------------------------- int __fastcall sub_8006824(int a1, unsigned __int8 *a2) { int v2; // r0 int *v3; // r0 v2 = a1 + 32 * *a2; if ( a2[1] == 1 ) v3 = (v2 + 0x900); else v3 = (v2 + 0xB00); if ( *v3 >= 0 && *a2 ) *v3 &= ~0x40000000u; *v3 |= 0x200000u; return 0; } //----- (08006854) -------------------------------------------------------- int __fastcall sub_8006854(int a1, unsigned __int8 *a2) { int v2; // r0 _DWORD *v3; // r0 int v4; // r1 bool v5; // zf v2 = a1 + 32 * *a2; if ( a2[1] == 1 ) v3 = (v2 + 0x900); else v3 = (v2 + 0xB00); *v3 &= ~0x200000u; v4 = a2[3]; v5 = v4 == 3; if ( v4 != 3 ) v5 = v4 == 2; if ( v5 ) *v3 |= 0x10000000u; return 0; } //----- (08006888) -------------------------------------------------------- int __fastcall sub_8006888(int a1, int a2) { _DWORD *v2; // r0 v2 = (a1 + 0x800); *v2 &= 0xFFFFF80F; *v2 |= (16 * a2) & 0x7F0; return 0; } //----- (080068A4) -------------------------------------------------------- int __fastcall sub_80068A4(int a1) { *(a1 + 2052) &= ~2u; sub_80009EC(3u); return 0; } //----- (080068C0) -------------------------------------------------------- int __fastcall sub_80068C0(int a1) { *(a1 + 2052) |= 2u; sub_80009EC(3u); return 0; } //----- (080068DC) -------------------------------------------------------- int __fastcall sub_80068DC(int a1) { return *(a1 + 20) & *(a1 + 24); } //----- (080068E6) -------------------------------------------------------- unsigned int __fastcall sub_80068E6(int a1) { return (*(a1 + 2072) & *(a1 + 2076)) >> 0x10; } //----- (080068F4) -------------------------------------------------------- int __fastcall sub_80068F4(int a1) { return *(a1 + 2072) & *(a1 + 2076); } //----- (08006902) -------------------------------------------------------- int __fastcall sub_8006902(int a1, int a2) { return *(a1 + 32 * a2 + 2824) & *(a1 + 2068); } //----- (08006918) -------------------------------------------------------- int __fastcall sub_8006918(int a1, int a2) { return (*(a1 + 2064) | (*(a1 + 2100) >> (a2 & 0xF) << 7) & 0x80) & *(a1 + 32 * a2 + 2312); } //----- (0800693E) -------------------------------------------------------- int __fastcall sub_800693E(int a1) { return *(a1 + 20) & 1; } //----- (08006946) -------------------------------------------------------- int __fastcall sub_8006946(int a1) { _DWORD *v1; // r1 int v2; // r0 v1 = (a1 + 0x900); v2 = a1 + 0x800; *v1 = *v1 >> 0xB << 11; if ( (*(v2 + 8) & 6) == 4 ) *v1 |= 3u; *(v2 + 4) |= 0x100u; return 0; } //----- (08006974) -------------------------------------------------------- int __fastcall sub_8006974(int a1, int a2, int a3) { unsigned int v3; // r3 int *v4; // r0 v3 = *(a1 + 64); v4 = (a1 + 0xB00); if ( v3 < 0x4F54300B || *v4 >= 0 ) { v4[4] = 0; v4[4] |= 0x80000u; v4[4] |= 0x18u; v4[4] |= 0x60000000u; if ( a2 == 1 ) { v4[5] = a3; *v4 |= 0x80008000; } } return 0; } //----- (08006A28) -------------------------------------------------------- int __fastcall sub_8006A28(int a1, unsigned int a2, unsigned __int8 a3) { int v3; // r2 int result; // r0 unsigned int v5; // r3 bool v6; // cf int v7; // r1 int v8; // r1 unsigned int v9; // r1 v3 = (a3 | (a3 << 8)) | ((a3 | (a3 << 8)) << 16); result = a1 + a2; v5 = result & 3; if ( (result & 3) != 0 ) { v6 = a2 >= v5; a2 -= v5; if ( !v6 ) { v9 = a2 + v5; if ( v9 ) *--result = v3; if ( __CFSHL__(v9, 0x1F) ) *--result = v3; return result; } if ( (result & 1) != 0 ) *--result = v3; if ( __CFSHL__(v5, 0x1F) ) { *(result - 2) = v3; result -= 2; } } do { v6 = a2 >= 0x10; a2 -= 16; if ( v6 ) { *(result - 16) = v3; *(result - 12) = v3; *(result - 8) = v3; *(result - 4) = v3; result -= 16; } } while ( a2 != 0 && v6 ); v6 = __CFSHL__(a2, 0x1D); v7 = a2 << 29; if ( v6 ) { *(result - 8) = v3; *(result - 4) = v3; result -= 8; } if ( v7 < 0 ) { *(result - 4) = v3; result -= 4; } v6 = __CFSHL__(v7, 2); v8 = 4 * v7; if ( v6 ) { *(result - 2) = v3; result -= 2; } if ( v8 < 0 ) *--result = v3; return result; } //----- (08006AA0) -------------------------------------------------------- unsigned __int8 *sub_8006AA0() { unsigned __int8 *result; // r0 result = byte_20000000; unk_20000004 += byte_20000000[0]; return result; } // 20000000: using guessed type unsigned __int8 byte_20000000[4]; //----- (08006AB0) -------------------------------------------------------- int sub_8006AB0() { int result; // r0 result = -536810232; MEMORY[0xE000ED88] |= 0xF00000u; MEMORY[0xE000ED08] = 0x8000000; return result; } //----- (08006AD4) -------------------------------------------------------- int __fastcall sub_8006AD4(int a1) { *(a1 << 8) = 18; return 536870956; } //----- (08006AE4) -------------------------------------------------------- int __fastcall sub_8006AE4(int a1, _WORD *a2) { *a2 = 4; return 536870976; } //----- (08006AEC) -------------------------------------------------------- int __fastcall sub_8006AEC(int a1, _WORD *a2) { sub_8005F1E("VN1610", byte_20015524, a2); return 536958244; } // 20015524: using guessed type _BYTE[1024]; //----- (08006B00) -------------------------------------------------------- int __fastcall sub_8006B00(int a1, _WORD *a2) { sub_8005F1E("Vector", byte_20015524, a2); return 536958244; } // 20015524: using guessed type _BYTE byte_20015524[1024]; //----- (08006B88) -------------------------------------------------------- int __fastcall sub_8006B88(int a1, _WORD *a2) { sub_8005F1E("VNConfig", byte_20015524, a2); return 536958244; } // 20015524: using guessed type _BYTE byte_20015524[1024]; //----- (08006B9C) -------------------------------------------------------- int __fastcall sub_8006B9C(int a1, _WORD *a2) { sub_8005F1E(sub_8006BE0, byte_20015524, a2); return 536958244; } // 20015524: using guessed type _BYTE byte_20015524[1024]; //----- (08006BE0) -------------------------------------------------------- int __fastcall sub_8006BE0(int a1, int a2, int a3) { int v3; // r4 int v4; // r1 int v6; // r7 _WORD *v7; // r6 int v8; // r0 char v9; // r9 v4 = *(a2 + 100); *(loc_8006D3C + 84) = v3; *(loc_8006D3C + 100) = a3; *(v3 + 52) = v4; v6 = 0; v7 = &unk_20000076; while ( v6 < unk_2000006D ) { v9 = *(v7 - 2); if ( *(v7 - 1) == 2 ) { if ( *(a1 + 16) == 1 ) { *v7 = 64; } else { if ( *(a1 + 16) ) { while ( 1 ) ; } *v7 = 512; } } sub_8003D92(a1, v9, *(v7 - 1), *v7); v8 = a1 + 20 * (v9 & 0xF); if ( (v9 & 0x80) != 0 ) *(v8 + 24) = 1; else *(v8 + 324) = 1; ++v6; v7 = (v7 + 7); } *(a1 + 656) = &unk_20000098; sub_8003E88(a1, 1, &unk_200000B0, 64); sub_8003E88(a1, 3, &unk_200000F4, 64); return 0; } // 8006BE0: could not find valid save-restore pair for r5 // 8006BE0: could not find valid save-restore pair for r6 // 8006BE4: variable 'v3' is possibly undefined //----- (08006C84) -------------------------------------------------------- int __fastcall sub_8006C84(int a1) { int v2; // r7 char *v3; // r6 char v4; // r4 int v5; // r0 int *v6; // r4 v2 = 0; v3 = &byte_2000006D[7]; if ( byte_2000006D[0] ) { do { v4 = *v3; sub_8003DD2(a1, *v3); sub_8003DB4(a1, v4); v5 = a1 + 20 * (v4 & 0xF); if ( (v4 & 0x80) != 0 ) *(v5 + 24) = 0; else *(v5 + 324) = 0; ++v2; v3 += 7; } while ( v2 < byte_2000006D[0] ); } v6 = *(a1 + 664); *(a1 + 656) = 0; sub_80068C0(*v6); sub_80009EC(0xFAu); sub_80068A4(*v6); return 0; } // 2000006D: using guessed type unsigned __int8 byte_2000006D[9]; //----- (08006CEE) -------------------------------------------------------- int sub_8006CEE() { return 0; } //----- (08006CF2) -------------------------------------------------------- int sub_8006CF2() { return 0; } //----- (08006CF6) -------------------------------------------------------- int __fastcall sub_8006CF6(_DWORD *a1, int a2) { int v2; // r2 unsigned int v4; // r1 v2 = a1[164]; if ( !v2 ) return 2; if ( a2 == 2 ) { v4 = a1[17]; if ( !v4 || v4 % *(a1[166] + 124) ) { *(v2 + 6) = 0; return 0; } else { a1[17] = 0; sub_8003E6A(a1, 2, 0, 0); return 0; } } else { a1[5 * a2 + 7] = 0; *(a2 + v2 + 4) = 0; return 0; } } //----- (08006D46) -------------------------------------------------------- int __fastcall sub_8006D46(int a1, int a2) { int v4; // r1 char *v5; // r2 char v6; // r1 if ( *(a1 + 656) ) { v4 = sub_8003EA6(a1, a2); if ( a2 == 1 ) { sub_8001606(byte_200000B0, v4); v5 = byte_200000B0; v6 = 1; LABEL_4: sub_8003E88(a1, v6, v5, 64); return 0; } if ( a2 == 3 ) { if ( v4 >= 1001 ) { while ( 1 ) ; } sub_8002D8E(byte_200000F4, v4); v5 = byte_200000F4; v6 = 3; goto LABEL_4; } } return 2; } //----- (08006DA6) -------------------------------------------------------- void *__fastcall sub_8006DA6(_WORD *a1) { *a1 = 53; return &unk_20000060; } //----- (08006DAE) -------------------------------------------------------- void *__fastcall sub_8006DAE(_WORD *a1) { *a1 = 53; return &unk_20000060; } //----- (08006DB6) -------------------------------------------------------- void *__fastcall sub_8006DB6(_WORD *a1) { *a1 = 53; return &unk_20000060; } //----- (08006DC4) -------------------------------------------------------- void *__fastcall sub_8006DC4(_WORD *a1) { *a1 = 10; return &unk_8006DEC; } //----- (08006DCC) -------------------------------------------------------- int __fastcall sub_8006DCC(int a1) { sub_80012BE((*(**(a1 + 664) + 2056) >> 8) & 0x3FFF); return 0; } //----- (08006DF8) -------------------------------------------------------- int sub_8006DF8() { int result; // r0 MEMORY[0xE000ED88] |= 0xF00000u; __dsb(0xFu); __isb(0xFu); result = 0x2000000; __asm { FMXR FPSCR, R0 } return result; } //----- (08006E1C) -------------------------------------------------------- void __noreturn sub_8006E1C() { if ( sub_8006E3A() ) sub_8006E40(); sub_800051C(); } //----- (08006E3A) -------------------------------------------------------- int sub_8006E3A() { return 1; } //----- (08006E40) -------------------------------------------------------- int *sub_8006E40() { int *i; // r1 int *result; // r0 for ( i = &dword_8007068; i != &dword_8007078[4]; i = result ) result = ((i + *i))(i + 1); return result; } // 8007068: using guessed type int dword_8007068; // 8007078: using guessed type int[9]; //----- (08006E68) -------------------------------------------------------- void __noreturn sub_8006E68() { sub_8006E78(); } //----- (08006E78) -------------------------------------------------------- void __noreturn sub_8006E78() { while ( 1 ) __breakpoint(171); } //----- (08006FE4) -------------------------------------------------------- void __noreturn start() { sub_8006DF8(); sub_8006E1C(); } // nfuncs=316 queued=217 decompiled=217 lumina nreq=0 worse=0 better=0 // ALL OK, 217 function(s) have been successfully decompiled