-
Notifications
You must be signed in to change notification settings - Fork 1
Decompiled : Decoding AID
iamkisly edited this page Dec 20, 2016
·
6 revisions
//----- (0046F8B0) --------------------------------------------------------
int __cdecl sub_46F8B0(int a1, char *a2)
{
unsigned int v3; // eax@3
unsigned int v4; // esi@3
unsigned int v5; // eax@3
int v6; // edi@19
int v7; // ebp@20
int v8; // eax@23
int v9; // ebp@23
char v10; // bl@23
int v11; // eax@26
int v12; // edi@26
int v13; // eax@26
char v14; // cl@27
int v15; // ebx@32
int v16; // eax@32
int v17; // ebp@32
int v18; // eax@34
int v19; // edi@34
int v20; // eax@34
char v21; // al@36
char v22; // bl@41
int v23; // eax@41
int v24; // edi@41
int v25; // eax@41
char v26; // al@43
int v27; // eax@53
int v28; // eax@62
char v29; // [sp+13h] [bp-Dh]@20
int v30; // [sp+14h] [bp-Ch]@24
int v31; // [sp+18h] [bp-8h]@13
int v32; // [sp+1Ch] [bp-4h]@14
char v33; // [sp+24h] [bp+4h]@26
char v34; // [sp+24h] [bp+4h]@34
char v35; // [sp+24h] [bp+4h]@41
if ( !dword_5AA2B8 )
return 13;
v3 = sub_46F2E0(a1);
v4 = v3;
v5 = sub_516C10(v3); // a1 >> 28
if ( !v5 )
{
if ( !sub_454AB0(v4, a2) ) // TILE
return 16;
return 0;
}
if ( v5 == 1 )
{
if ( !sub_4579A0(v4, a2) ) // WALL
return 16;
return 0;
}
if ( v5 == 3 )
{
if ( !sub_49FC50(v4, a2) ) // PORTAL
return 16;
return 0;
}
if ( v5 == 4 )
{
v31 = 1000 * sub_518810(v4);
v31 += sub_516C20(v4);
if ( sub_452240(dword_5AA2B4, &v31) )
{
sprintf(a2, aArtSceneryS, v32); // "art\\scenery\\%s"
return 0;
}
return 16;
}
if ( v5 == 7 )
{
v31 = 1000 * sub_518B70(v4);
v31 += sub_516C20(v4);
if ( sub_452240(dword_5AA29C, &v31) )
{
sprintf(a2, aArtContainerS, v32); // "art\\container\\%s"
return 0;
}
return 16;
}
if ( v5 == 2 )
{
v6 = sub_518540(v4);
if ( v6 < 9 )
{
v7 = sub_5183B0(v4);
v29 = byte_57DA80[sub_5184C0(v4)];
if ( v6 == 4 || v6 == 6 )
v29 = byte_57DA82;
v8 = sub_518330(v4);
v9 = (int)*(&off_57DA84 + v7);
v10 = v8;
if ( v8 == 24 )
{
v30 = (int)aXx;
v29 = byte_57DA82;
}
else
{
v30 = (int)*(&off_57DA98 + v6);
}
v11 = sub_518660(v4);
v12 = v11;
v33 = byte_57DA7C[v11];
v13 = sub_5185E0(v4);
if ( v13 != 7 || (v14 = byte_57DABF, v12 != 1) )
v14 = byte_57DABC[v13];
sprintf(a2, aArtCritterSCSC, v9, v29, v9, v29, v30, v33, v14, (char)(v10 + 97));
return 0;
}
return 16;
}
if ( v5 != 12 )
{
if ( v5 == 13 )
{
v31 = sub_516C20(v4);
if ( sub_452240(dword_5AA294, &v31) )
{
v22 = sub_518330(v4);
v23 = sub_518660(v4);
v24 = v23;
v35 = byte_57DA7C[v23];
v25 = sub_5185E0(v4);
if ( v25 != 7 || v24 != 1 )
v26 = byte_57DABC[v25];
else
v26 = byte_57DABF;
sprintf(a2, aArtUnique_npcS, v32, v32, v35, v26, (char)(v22 + 97));
return 0;
}
return 16;
}
if ( v5 == 5 )
{
v31 = sub_516C20(v4);
if ( sub_452240(dword_5AA2AC, &v31) )
{
sprintf(a2, aArtInterfaceS, v32);
return 0;
}
return 16;
}
if ( v5 == 9 )
{
if ( !sub_457D40(v4, a2) )
return 16;
return 0;
}
if ( v5 == 10 )
{
v27 = sub_4EA600(v4, a2);
}
else
{
if ( v5 != 6 )
{
if ( v5 == 11 )
{
sub_457E60(v4, a2);
return 0;
}
if ( v5 != 14 )
return 16;
v31 = sub_516C20(v4);
if ( !sub_452240(dword_5AA290, &v31) )
return 16;
v28 = sub_5190A0(v4);
sprintf(a2, aArtEye_candyS_, v32, byte_57DACC[v28]);
return 0;
}
v27 = sub_4FAD10(v4, a2);
}
if ( !v27 )
return 16;
return 0;
}
v31 = sub_518430(v4);
if ( !sub_452240(dword_5AA28C, &v31) )
return 16;
v15 = sub_518330(v4);
v16 = sub_518540(v4);
v17 = (int)aXx;
if ( v15 != 24 )
v17 = (int)*(&off_57DA98 + v16);
v18 = sub_518660(v4);
v19 = v18;
v34 = byte_57DA7C[v18];
v20 = sub_5185E0(v4);
if ( v20 != 7 || v19 != 1 )
v21 = byte_57DABC[v20];
else
v21 = byte_57DABF;
sprintf(a2, aArtMonsterSSSC, v32, v32, v17, v34, v21, (char)(v15 + 97));
return 0;
}
// 57DA82: using guessed type char byte_57DA82;
// 57DA84: using guessed type void *off_57DA84;
// 57DA98: using guessed type void *off_57DA98;
// 57DABF: using guessed type char byte_57DABF;
// 5AA2B8: using guessed type int dword_5AA2B8;
//----- (0046F2E0) --------------------------------------------------------
unsigned int __cdecl sub_46F2E0(unsigned int a1)
{
unsigned int result; // eax@2
int v2; // ebp@5
int v3; // esi@5
int v4; // ebx@5
int v5; // edi@5
signed int v6; // eax@15
int v7; // edi@28
int v8; // ebx@28
int v9; // esi@28
signed int v10; // eax@29
int v11; // edi@42
int v12; // esi@42
signed int v13; // eax@43
int v14; // eax@60
int v15; // ST18_4@63
int v16; // eax@63
int v17; // esi@64
int v18; // eax@64
int v19; // [sp+Ch] [bp-8h]@5
int v20; // [sp+10h] [bp-4h]@5
switch ( sub_516C10(a1) ) // a1 >> 28
{
case 0u:
a1 = sub_5172C0(a1, 0);
return sub_517240(a1, 0);
case 1u:
a1 = sub_5172C0(a1, 0);
return sub_517240(a1, 0);
case 3u:
a1 = sub_517150(a1, 0);
a1 = sub_516E40(a1, 0);
a1 = sub_5172C0(a1, 0);
return sub_517240(a1, 0);
case 2u:
v2 = sub_518540(a1);
v3 = sub_5183B0(a1);
v4 = sub_5184C0(a1);
v5 = sub_518660(a1);
v20 = sub_518330(a1);
v19 = sub_5185E0(a1);
if ( v3 == 4 && !v4 )
v3 = 0;
if ( v2 == 4 || v2 == 6 )
{
v4 = 1;
if ( v3 == 4 )
{
v3 = 0;
}
else if ( v3 == 2 )
{
v3 = 1;
}
}
sub_46F810(v4 + 2 * v3, dword_5AA288, (int)dword_5AA2A4, &v20, &v19);
if ( v20 == 24 )
{
v2 = 0;
v5 = 0;
v6 = 0;
v4 = 1;
v19 = 0;
goto LABEL_27;
}
if ( v20 == 23 )
{
v6 = 1;
v19 = 1;
}
else
{
v6 = v19;
if ( v19 == 1 && (v20 == 3 || v20 == 5) )
{
v6 = 0;
v19 = 0;
goto LABEL_27;
}
if ( v20 < 6 || v20 > 19 )
{
if ( v20 != 1 )
goto LABEL_27;
}
else
{
v6 = 0;
v19 = 0;
}
}
v5 = 0;
LABEL_27:
sub_518110(v4, v3, v2, v5, 0, 0, v20, v6, 0, (int)&a1);
return a1;
case 0xCu:
v7 = sub_518540(a1);
v8 = sub_518430(a1);
v9 = sub_518660(a1);
v20 = sub_518330(a1);
v19 = sub_5185E0(a1);
sub_46F810(v8, dword_5AA2B0, (int)dword_5AA2A0, &v20, &v19);
if ( v20 == 24 )
{
v7 = 0;
v9 = 0;
v10 = 0;
v19 = 0;
goto LABEL_41;
}
if ( v20 == 23 )
{
v10 = 1;
v19 = 1;
}
else
{
v10 = v19;
if ( v19 == 1 && (v20 == 3 || v20 == 5) )
{
v10 = 0;
v19 = 0;
goto LABEL_41;
}
if ( v20 < 6 || v20 > 19 )
{
if ( v20 != 1 )
goto LABEL_41;
}
else
{
v10 = 0;
v19 = 0;
}
}
v9 = 0;
LABEL_41:
sub_5181E0(v8, v7, v9, 0, 0, v20, v10, 0, (int)&a1);
return a1;
case 0xDu:
v11 = sub_516C20(a1);
v12 = sub_518660(a1);
v20 = sub_518330(a1);
v19 = sub_5185E0(a1);
sub_46F810(v11, dword_5AA298, (int)dword_5AA2A8, &v20, &v19);
if ( v20 == 24 )
{
v12 = 0;
v13 = 0;
v19 = 0;
goto LABEL_55;
}
if ( v20 == 23 )
{
v13 = 1;
v19 = 1;
}
else
{
v13 = v19;
if ( v19 == 1 && (v20 == 3 || v20 == 5) )
{
v13 = 0;
v19 = 0;
goto LABEL_55;
}
if ( v20 < 6 || v20 > 19 )
{
if ( v20 != 1 )
goto LABEL_55;
}
else
{
v13 = 0;
v19 = 0;
}
}
v12 = 0;
LABEL_55:
sub_518290(v11, v12, 0, 0, v20, v13, 0, (int)&a1);
return a1;
case 6u:
a1 = sub_5180C0(a1, 0);
return sub_5172C0(a1, 0);
case 4u:
case 7u:
a1 = sub_517150(a1, 0);
a1 = sub_516E40(a1, 0);
return sub_5172C0(a1, 0);
case 5u:
case 8u:
a1 = sub_517150(a1, 0);
return sub_5172C0(a1, 0);
case 9u:
a1 = sub_517150(a1, 0);
if ( sub_518CA0(a1) )
{
v14 = sub_518C10(a1);
result = sub_518C40(a1, v14 - v14 % 8);
}
else
{
result = sub_516E40(a1, 0);
}
return result;
case 0xAu:
a1 = sub_518D90(a1, 0);
a1 = sub_5172C0(a1, 0);
a1 = sub_518E10(a1, 0);
return sub_518E80(a1, 0);
case 0xBu:
v15 = sub_517DD0(a1);
v16 = sub_518F70(a1);
sub_518EC0(v16, 0, v15, 0, 0, 0, (int)&a1);
return a1;
case 0xEu:
v17 = sub_516C20(a1);
v18 = sub_5190A0(a1);
sub_518FF0(v17, 0, 0, 0, v18, 0, 4, (int)&a1);
return a1;
default:
return a1;
}
}