Skip to content

Instantly share code, notes, and snippets.

@lukaville
Last active April 3, 2018 20:41
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save lukaville/15669aea0d577791505aa2fd915e4460 to your computer and use it in GitHub Desktop.
Save lukaville/15669aea0d577791505aa2fd915e4460 to your computer and use it in GitHub Desktop.
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;
}
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