This is how I found it. (Using IDA)
Look for a referenced string: "cg_friendlyNameFadeIn"
You may also try to find it using any of the following also:
Code:
[B]
LODWORD(dword_8FAB74) = sub_4A5CF0((int)"cg_overheadNamesSize", 0.6499999761581421, 0.0, 100.0, 4);
dword_8FAA80 = sub_4A5CF0((int)"cg_overheadNamesNearDist", 64.0, 0.0, 3.402823466385289e38, 4);
dword_8FAB4C = sub_4A5CF0((int)"cg_overheadNamesFarDist", 512.0, 0.0, 3.402823466385289e38, 4);
dword_B0A7E4 = sub_4A5CF0((int)"cg_overheadIconSize", 1.100000023841858, 0.0, 100.0, 4);
dword_8FAB24 = sub_4A5CF0((int)"cg_overheadNamesFarScale", 0.699999988079071, 0.0, 3.402823466385289e38, 4);
dword_8FF0F8 = sub_4A5CF0((int)"cg_overheadRankSize", 0.5, 0.0, 3.402823466385289e38, 4);
dword_B04640 = sub_4A5CF0((int)"cg_overheadTitleSize", 0.5, 0.0, 3.402823466385289e38, 4);
dword_B04684 = sub_44EB50((int)"cg_overheadNamesGlow", 0.0, 0.0, 0.0, 1.0, 4);
dword_8FAB98 = sub_50C760((unsigned int)"cg_overheadNamesFont", 2, 0, 10, 4);
dword_8FAAA4 = sub_50C760((unsigned int)"cg_friendlyNameFadeOut", 1500, 0, 2147483647, 4);
[B]
Which will lead you to this:
Code:
dword_8FAB48 = sub_50C760((unsigned int)"cg_friendlyNameFadeIn", 0, 0, 2147483647, 4);
Now if you cross-reference 0x8FAB48, you should get only one other function:
Code:
void __usercall sub_5891B0(int a1<eax>, char a2<cl>, int a3, int a4)
{
char v4; // bl@1
int v5; // ebp@1
int v6; // esi@6
int v7; // edi@8
char v8; // cl@13
int *v9; // edx@18
int v10; // eax@21
int v11; // edx@21
signed int v12; // ecx@21
int v13; // edi@21
int v14; // esi@21
double v15; // st7@22
int v16; // [sp+1Ch] [bp-18h]@1
int v17; // [sp+20h] [bp-14h]@1
int v18; // [sp+24h] [bp-10h]@1
int v19; // [sp+28h] [bp-Ch]@1
int v20; // [sp+2Ch] [bp-8h]@1
int v21; // [sp+30h] [bp-4h]@1
char v22; // [sp+38h] [bp+4h]@4
int v23; // [sp+38h] [bp+4h]@23
float v24; // [sp+38h] [bp+4h]@26
v4 = a2;
v16 = *(_DWORD *)(dword_8FAAB0 + 12);
v17 = *(_DWORD *)(dword_B0466C + 12);
v5 = a3;
v18 = *(_DWORD *)(dword_8FAB48 + 12); //This is our cross-referenced function.
v19 = *(_DWORD *)(dword_8FAAA4 + 12);
v20 = 250;
v21 = 250;
v22 = a1 == 3 || a1 && a1 == dword_9FC764[344 * a4];
v6 = LODWORD(dword_96A25C);
if ( (unsigned __int8)sub_4A5CA0(v5) )
v6 = sub_4BB3E0();
v7 = sub_481FA0(v5);
if ( (unsigned __int8)sub_489F70(v5) )
v7 = 0;
if ( v7 >= *(_DWORD *)(dword_8FAAB0 + 12) )
v4 = 0;
if ( v4 )
{
v8 = LOBYTE(dword_8F3980[3 * (a4 + 18 * v5) + 2]);
if ( !(v8 & 1) )
{
LOBYTE(dword_8F3980[3 * (a4 + 18 * v5) + 2]) = v8 | 1;
dword_8F3980[3 * (a4 + 18 * v5) + 1] = v6;
}
dword_8F3980[3 * (a4 + 18 * v5)] = v6;
}
else
{
LOBYTE(dword_8F3980[3 * (a4 + 18 * v5) + 2]) &= 0xFEu;
}
if ( v7 <= 0 )
{
v9 = &v18;
if ( !v22 )
v9 = &v20;
}
else
{
v9 = &v16;
}
v12 = v9[1];
v13 = *v9;
v11 = dword_8F3980[3 * (a4 + 18 * v5)];
v10 = dword_8F3980[3 * (a4 + 18 * v5) + 1];
v14 = v6 - v11;
if ( v14 < v12 )
{
v23 = v11 - v10;
if ( v11 - v10 >= v13 )
v15 = (double)(v12 - v14) / (double)v12;
else
v15 = (double)v23 / (double)v13;
}
else
{
v15 = 0.0;
}
v24 = v15;
sub_588A10(v13, v5, (int)((char *)&unk_A08630 + 504 * a4), v24);
}
Good shit eh?
Looking at the bottom, you'll see that sub_588A10 is what takes the parameters. Therefore 0x588A10 is our function.
For the parameters:
Code:
void __usercall sub_588A10(char a1<dil>, int a2, int a3, float a4)
So we get our typedef:
Code:
typedef (__cdecl* sub_588A10)(int a2, int a3, float a4);
Voila.