Last active
April 3, 2018 20:41
-
-
Save lukaville/15669aea0d577791505aa2fd915e4460 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
int __fastcall sub_6EB4(int a1, unsigned int a2, int a3, int a4, _DWORD *a5) | |
{ | |
int v5; // r4 | |
unsigned int v6; // r7 | |
int v7; // r5 | |
unsigned int *v8; // r8 | |
signed int v9; // r7 | |
unsigned int v10; // r4 | |
signed int v11; // r0 | |
signed int v12; // r7 | |
signed int v13; // r8 | |
unsigned int v14; // r4 | |
int v15; // r2 | |
signed int v16; // r3 | |
unsigned int v17; // r4 | |
int v18; // r1 | |
unsigned int someInputValue; // r8 | |
unsigned int v20; // r0 | |
unsigned int v21; // r9 | |
unsigned int v22; // r0 | |
v5 = a1; | |
v6 = a2; | |
v7 = a3; | |
v8 = (unsigned int *)a4; | |
sub_6B88(*(unsigned __int8 *)(a3 + 48), a3, a3, a4); | |
MEMORY[0x20000030] = v6; | |
v9 = (unsigned __int16)(v6 / 0xA); | |
if ( !MEMORY[0x20000068] ) | |
{ | |
MEMORY[0x20000068] = 10; | |
if ( v8 ) | |
{ | |
if ( a5 ) | |
sub_6A06(a5, v8, MEMORY[0x20001544]); | |
} | |
} | |
if ( v9 >= 31 ) | |
v9 = 30; | |
switch ( MEMORY[0x20000002] ) | |
{ | |
case 0u: | |
MEMORY[0x2000000C] = *(_WORD *)(v7 + 50); | |
MEMORY[0x20000002] = 1; | |
break; | |
case 1u: | |
v10 = 0; | |
v11 = 100; | |
do | |
{ | |
MEMORY[0x20000028] = 3; | |
while ( MEMORY[0x20000028] ) | |
; | |
v10 += MEMORY[0x20001544]; | |
--v11; | |
} | |
while ( v11 ); | |
MEMORY[0x2000000E] = v10 / 0x64; | |
MEMORY[0x20000028] = 1000; | |
v12 = 4095; | |
v13 = 0; | |
do | |
{ | |
v14 = MEMORY[0x20001544]; | |
sub_71A0((_DWORD *)0x20000B9C, MEMORY[0x20001544], 0x78u); | |
if ( v12 >= v14 ) | |
v12 = (unsigned __int16)v14; | |
if ( v14 >= v13 ) | |
v13 = (unsigned __int16)v14; | |
} | |
while ( MEMORY[0x20000028] ); | |
v15 = MEMORY[0x2000000E]; | |
v16 = *(unsigned __int16 *)(v7 + 50); | |
if ( v16 - 10 < MEMORY[0x2000000E] && v16 >= 200 ) | |
{ | |
if ( v12 >= v13 ) | |
v17 = 0; | |
else | |
v17 = v13 - v12; | |
if ( v17 < 0xA ) | |
{ | |
*(_WORD *)(v7 + 50) = MEMORY[0x2000000E]; | |
if ( v15 + 5 < MEMORY[0x2000000C] || MEMORY[0x2000000C] < v15 - 5 ) | |
*(_BYTE *)(v7 + 52) = 1; | |
} | |
} | |
else | |
{ | |
*(_WORD *)(v7 + 50) = MEMORY[0x2000000E]; | |
*(_BYTE *)(v7 + 52) = 1; | |
} | |
++MEMORY[0x20000002]; | |
break; | |
case 2u: | |
if ( (unsigned int)sub_6DA4(MEMORY[0x20000030], (unsigned __int16 *)v7) < MEMORY[0x2000001C] | |
&& MEMORY[0x20000038] | |
&& v5 ) | |
{ | |
MEMORY[0x20000002] = 4; | |
MEMORY[0x2000006C] = 3000; | |
} | |
else if ( !MEMORY[0x20000044] && MEMORY[0x20000018] & 1 && !MEMORY[0x2000170C] ) | |
{ | |
sub_49D8(); | |
v18 = *(unsigned __int16 *)(v7 + 50); | |
if ( (unsigned int)(v18 + 5) < MEMORY[0x20001924] || MEMORY[0x20001924] < (unsigned int)(v18 - 5) ) | |
*(_BYTE *)(v7 + 52) = 1; | |
MEMORY[0x20000018] = 2 * (MEMORY[0x20000018] >> 1); | |
MEMORY[0x20000044] = 60000; | |
} | |
break; | |
case 4u: | |
someInputValue = MEMORY[0x20000030]; | |
v20 = sub_6DA4(MEMORY[0x20000030], (unsigned __int16 *)v7); | |
v21 = MEMORY[0x2000001C]; | |
if ( v20 >= MEMORY[0x2000001C] ) | |
{ | |
MEMORY[0x20000024] = 0; | |
} | |
else | |
{ | |
MEMORY[0x20000024] = MEMORY[0x2000001C]; | |
MEMORY[0x2000006C] = 3000; | |
} | |
if ( v21 < sub_6DA4(someInputValue, (unsigned __int16 *)v7) - 5 && someInputValue < 35 ) | |
MEMORY[0x20000002] = 7; | |
MEMORY[0x20000004] = calculate_6DB8((unsigned __int8)v5, someInputValue, v7); | |
if ( MEMORY[0x20000020] < 0xFAu || MEMORY[0x20000020] < 0x15Eu && someInputValue < 100 ) | |
{ | |
v22 = (unsigned __int8)aAfkpuzDddddddd[v9]; | |
if ( v22 < MEMORY[0x20000004] ) | |
MEMORY[0x20000004] = (unsigned __int8)aAfkpuzDddddddd[v9]; | |
} | |
MEMORY[0x20000008] = MEMORY[0x20000024]; | |
MEMORY[0x20000024] = MEMORY[0x20000024] * (unsigned int)MEMORY[0x20000004] / 0x64 / 0xA; | |
if ( MEMORY[0x20000024] >= 0x2Eu ) | |
MEMORY[0x20000024] = 45; | |
MEMORY[0x20000006] = MEMORY[0x20000024]; | |
if ( !MEMORY[0x20000038] ) | |
MEMORY[0x20000002] = 6; | |
if ( !v5 ) | |
MEMORY[0x20000002] = 6; | |
MEMORY[0x20000034] = *(_DWORD *)(4 * (v9 + 31 * MEMORY[0x20000024]) + 0x8003120); | |
break; | |
case 6u: | |
sub_6AF2(v7); | |
goto LABEL_60; | |
case 7u: | |
LABEL_60: | |
MEMORY[0x20000034] = 0; | |
MEMORY[0x20000002] = 2; | |
break; | |
default: | |
break; | |
} | |
MEMORY[0x2000000A] = MEMORY[0x20000034]; | |
return MEMORY[0x20000034]; | |
} | |
int __fastcall sub_6DA4(signed int inputSpeedValue, unsigned __int16 *a2) | |
{ | |
if ( !inputSpeedValue ) | |
return a2[21]; | |
if ( inputSpeedValue >= 80 ) | |
return a2[23]; | |
return a2[22]; | |
} | |
int __fastcall calculate_6DB8(int a1, signed int a2, int a3) | |
{ | |
signed int v3; // r4 | |
signed int v4; // r3 | |
signed int i; // r6 | |
int v6; // r0 | |
int v7; // r2 | |
int v8; // r1 | |
int v9; // r1 | |
int v10; // r1 | |
int result; // r0 | |
int v12; // [sp+0h] [bp-30h] | |
int v13; // [sp+4h] [bp-2Ch] | |
int v14; // [sp+8h] [bp-28h] | |
int v15; // [sp+Ch] [bp-24h] | |
int v16; // [sp+10h] [bp-20h] | |
int v17; // [sp+14h] [bp-1Ch] | |
int v18; // [sp+18h] [bp-18h] | |
int v19; // [sp+1Ch] [bp-14h] | |
v3 = 0; | |
v4 = 50; | |
if ( a2 > 300 ) | |
a2 = 300; | |
for ( i = 0; i < 8; ++i ) | |
{ | |
if ( a1 == 1 ) | |
*(&v12 + i) = *(unsigned __int8 *)(i + a3 + 2); | |
if ( a1 == 2 ) | |
*(&v12 + i) = *(unsigned __int8 *)(i + a3 + 10); | |
if ( a1 == 3 ) | |
*(&v12 + i) = *(unsigned __int8 *)(i + a3 + 18); | |
if ( a1 == 4 ) | |
*(&v12 + i) = *(unsigned __int8 *)(i + a3 + 26); | |
if ( a1 == 5 ) | |
*(&v12 + i) = *(unsigned __int8 *)(i + a3 + 34); | |
} | |
if ( a2 >= 50 ) | |
{ | |
if ( a2 >= 100 ) | |
{ | |
if ( a2 >= 150 ) | |
{ | |
if ( a2 >= 180 ) | |
{ | |
if ( a2 >= 200 ) | |
{ | |
if ( a2 >= 250 ) | |
{ | |
v7 = v19; | |
if ( a2 >= 300 ) | |
{ | |
v3 = 300; | |
v6 = v19; | |
} | |
else | |
{ | |
v3 = 250; | |
v6 = v18; | |
} | |
} | |
else | |
{ | |
v3 = 200; | |
v6 = v17; | |
v7 = v18; | |
} | |
} | |
else | |
{ | |
v4 = 20; | |
v3 = 180; | |
v6 = v16; | |
v7 = v17; | |
} | |
} | |
else | |
{ | |
v4 = 30; | |
v3 = 150; | |
v6 = v15; | |
v7 = v16; | |
} | |
} | |
else | |
{ | |
v3 = 100; | |
v6 = v14; | |
v7 = v15; | |
} | |
} | |
else | |
{ | |
v3 = 50; | |
v6 = v13; | |
v7 = v14; | |
} | |
} | |
else | |
{ | |
v6 = v12; | |
v7 = v13; | |
} | |
v8 = a2 - v3; | |
if ( v6 >= v7 ) | |
v9 = v8 * (v6 - v7); | |
else | |
v9 = v8 * (v7 - v6); | |
v10 = v9 / v4; | |
if ( v6 >= v7 ) | |
result = v6 - v10; | |
else | |
result = v6 + v10; | |
return result; | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
void sub_entrypoint_87F4() | |
{ | |
int v0; // r0 | |
int v1; // r0 | |
int v2; // r0 | |
int v3; // r0 | |
int v4; // r0 | |
int v5; // r0 | |
int v6; // r0 | |
int v7; // r0 | |
int v8; // r0 | |
int v9; // r0 | |
int v10; // r0 | |
int v11; // r0 | |
int v12; // r0 | |
int v13; // r0 | |
int v14; // r0 | |
int v15; // r0 | |
int v16; // r0 | |
int v17; // r2 | |
_BYTE *v18; // r3 | |
__int16 v19; // r0 | |
signed int i; // r1 | |
MEMORY[0xE000E180] = -1; | |
MEMORY[0xE000E184] = -1; | |
MEMORY[0xE000E188] = -1; | |
v0 = sub_7F7E(0x8000000, 12288); | |
v1 = sub_411A(v0); | |
v2 = sub_8AD0(v1); | |
v3 = sub_8AD0(v2); | |
v4 = sub_8AD0(v3); | |
sub_7A30(v4); | |
sub_8B30(1024, 1); | |
sub_8B30(256, 1); | |
MEMORY[0x2000197C] = 15238; | |
v5 = sub_7AC8(); | |
v6 = sub_7DF0(v5); | |
v7 = sub_7BE6(v6); | |
v8 = sub_7CF0(v7); | |
v9 = sub_3130(v8); | |
v10 = sub_7DCE(v9); | |
v11 = sub_413C(v10); | |
v12 = sub_89A6(v11); | |
v13 = sub_8A26(v12); | |
v14 = sub_79F4(v13); | |
v15 = sub_8AD0(v14); | |
v16 = sub_8AD0(v15); | |
sub_8AD0(v16); | |
MEMORY[0x2000041C] = 0; | |
sub_49D8(); | |
MEMORY[0xE000E104] = -1; | |
MEMORY[0xE000E108] = -1; | |
MEMORY[0x20001702] = MEMORY[0x20001924]; | |
while ( !MEMORY[0x20001950] ) | |
{ | |
if ( MEMORY[0x20000354] < MEMORY[0x2000042C] ) | |
MEMORY[0x2000170C] = 45900 * MEMORY[0x2000042C] / 0xEA60u; | |
else | |
MEMORY[0x2000170C] = 45900 * MEMORY[0x20000354] / 0xEA60u; | |
MEMORY[0x200016D0] = 0; | |
for ( i = 0; i < 8; ++i ) | |
{ | |
v17 = i + 536876752; | |
*(_BYTE *)(v17 + 2) = *(_WORD *)(2 * i + 0x2000115A); | |
v18 = (_BYTE *)(i + 536876754); | |
v18[8] = *(_WORD *)(2 * i + 0x2000116A); | |
v18[16] = *(_WORD *)(2 * i + 0x2000117A); | |
v19 = *(_WORD *)(2 * i + 0x2000118A); | |
v18[24] = v19; | |
*(_BYTE *)(v17 + 34) = v19; | |
} | |
MEMORY[0x20001700] = 7; | |
MEMORY[0x200016FA] = MEMORY[0x20001154]; | |
MEMORY[0x200016FC] = MEMORY[0x20001156]; | |
MEMORY[0x200016FE] = MEMORY[0x20001158]; | |
if ( !MEMORY[0x20001A03] ) | |
MEMORY[0x2000170E] = 2 * sub_6EB4(MEMORY[0x2000049C], MEMORY[0x2000170C], 536876752, 536876824, 536876828); | |
if ( MEMORY[0x20001704] ) | |
{ | |
MEMORY[0x20001704] = 0; | |
MEMORY[0x20001884] = MEMORY[0x20001702]; | |
sub_4A44(); | |
} | |
if ( (signed int)MEMORY[0x2000170E] >= 151 ) | |
MEMORY[0x2000170E] = 150; | |
MEMORY[0x2000198C] = (unsigned int)MEMORY[0x2000170E] * MEMORY[0x20001570] / 0x96; | |
} | |
MEMORY[0xE000E180] = -1; | |
MEMORY[0xE000E184] = -1; | |
MEMORY[0xE000E188] = -1; | |
if ( (MEMORY[0x8000000] & 0x2FFE0000) == 0x20000000 ) | |
{ | |
sub_7824(); | |
sub_4662(1437226410, 134345728); | |
sub_4662(1437226410, 134227968); | |
MEMORY[0x20001714] = MEMORY[0x8000004]; | |
MEMORY[0x20001710] = MEMORY[0x8000004]; | |
_R0 = MEMORY[0x8000000]; | |
__asm { MSR.W MSP, R0 } | |
MEMORY[0x8000004](); | |
} | |
while ( 1 ) | |
; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment