Code:
How to find GetAnimOverlays & GetNumAnimOverlays Offset:
string search "animset_version" and goto to any of its xrefs
now you're in CCSGOPlayerAnimState::CacheSequences and xref that too (only has 1)
now you're in CCSGOPlayerAnimState::Update, create pseudo.
void __userpurge CCSGOPlayerAnimState::Update(int a1@<ecx>, int a2@<xmm1>, float a3@<xmm2>, int a4)
{
int v4; // edi
int v5; // ecx
float *v6; // esi
float v7; // xmm0_4
float v8; // xmm1_4
float v9; // xmm0_4
long double v10; // st7
float v11; // xmm0_4
_DWORD *v12; // eax
int v13; // eax
signed int v14; // ecx
int v15; // eax
_DWORD *v16; // eax
bool v17; // zf
int v18; // eax
float v19; // xmm3_4
float v20; // xmm1_4
float v21; // xmm0_4
float v22; // xmm2_4
float v23; // xmm1_4
float v24; // xmm1_4
float v25; // xmm2_4
float v26; // xmm2_4
float v27; // xmm1_4
float v28; // xmm4_4
float v29; // xmm1_4
int v30; // esi
float *v31; // ecx
char v32; // fl
int v33; // eax
int v34; // eax
int v35; // eax
int v36; // eax
signed int v37; // eax
int v38; // esi
int v39; // esi
_DWORD *v40; // ecx
int v41; // xmm0_4
float *v42; // ecx
int v43; // ecx
int v44; // eax
float v45; // [esp+Ch] [ebp-14h]
signed int v46; // [esp+Ch] [ebp-14h]
int v47; // [esp+10h] [ebp-10h]
float v48; // [esp+10h] [ebp-10h]
int v49; // [esp+14h] [ebp-Ch]
int v50; // [esp+18h] [ebp-8h]
int v51; // [esp+1Ch] [ebp-4h]
v4 = a1;
v47 = a2;
v5 = *(a1 + 96);
if ( v5 && ((*(*v5 + 612))() || *(*(v4 + 96) + 14973)) && CCSGOPlayerAnimState::CacheSequences(v4) )
{
v6 = *(v4 + 96);
v45 = fmod((v6[11854] + a3), 360.0);
v7 = v45;
if ( v45 > 180.0 )
{
v7 = v45 - 360.0;
v45 = v45 - 360.0;
}
if ( v7 < -180.0 )
v45 = v7 + 360.0;
v8 = *(v4 + 108);
v9 = *(g_pGlobals + 16);
if ( v8 != v9 && *(v4 + 112) != *(g_pGlobals + 4) )
{
byte_10CAC0C8 = 0;
*(v4 + 116) = fmaxf(v9 - v8, 0.0);
sub_10796D70();
*(v4 + 120) = v47;
v10 = fmod(v45, 360.0);
v48 = v10;
v11 = v48;
if ( v48 > 180.0 )
v11 = v48 - 360.0;
if ( v11 < -180.0 )
v11 = v11 + 360.0;
*(v4 + 124) = v11;
v12 = (*(*v6 + 40))(v6);
*(v4 + 176) = *v12;
*(v4 + 180) = v12[1];
*(v4 + 184) = v12[2];
v13 = (*(**(v4 + 96) + 1060))();
*(v4 + 100) = v13;
if ( v13 != *(v4 + 104) || *(v4 + 4) )
{
v14 = 0;
*(*(v4 + 96) + 2608) = 0;
do
{
v15 = *(v4 + 96);
if ( *(v15 + 10636) ) <--------------------- 10636 in hex is 0x298C so its the current GetAnimOverlays offset
{
v16 = (v14 + *(v15 + 10624)); <--------------------- 10624 in hex is 0x2980 so its the current GetNumAnimOverlays offset
if ( v16 )
{
v16[2] = 0;
v16[3] = -1;
v16[4] = -1;
}
}
v14 += 56;
}
while ( v14 < 728 );
}
v17 = sub_103BFE00() == 0;
v18 = *(v4 + 96);
if ( v17 )
{
v25 = *(v18 + 12204) + *(v4 + 168);
if ( v25 >= 0.0 )
v26 = fminf(v25, 1.0);
else
v26 = 0.0;
v27 = *(v4 + 164);
v28 = *(v4 + 116) * 6.0;
if ( (v26 - v27) <= v28 )
{
if ( COERCE_FLOAT(LODWORD(v28) ^ xmmword_10C35030) <= (v26 - v27) )
v29 = v26;
else
v29 = v27 - v28;
}
else
{
v29 = v27 + v28;
}
if ( v29 >= 0.0 )
v24 = fminf(v29, 1.0);
else
v24 = 0.0;
}
else
{
if ( *(v18 + 260) & 4 )
v19 = 1.0;
else
v19 = *(v4 + 168);
v20 = *(v4 + 164);
if ( v19 <= v20 )
v21 = 6.0;
else
v21 = 3.0999999;
v22 = *(v4 + 116) * v21;
if ( (v19 - v20) <= v22 )
{
if ( COERCE_FLOAT(LODWORD(v22) ^ xmmword_10C35030) <= (v19 - v20) )
v23 = v19;
else
v23 = v20 - v22;
}
else
{
v23 = v20 + v22;
}
*(v4 + 164) = v23;
if ( v23 >= 0.0 )
v24 = fminf(v23, 1.0);
else
v24 = 0.0;
}
*(v4 + 164) = v24;
v30 = mdlcache;
(*(*mdlcache + 132))(mdlcache);
(*(**(v4 + 96) + 864))(0);
*(*(v4 + 96) + 2584) = 0;
v31 = *(v4 + 96);
if ( v31[645] != 0.0 )
{
v31[645] = 0.0;
sub_101902C0(v31, 8);
}
(*(*v30 + 136))(v30);
CCSGOPlayerAnimState::SetUpVelocity(v4, v10);
CCSGOPlayerAnimState::SetUpAimMatrix(v4);
CCSGOPlayerAnimState::SetUpWeaponAction(v4, v4);
CCSGOPlayerAnimState::SetUpMovement(v4);
sub_103EBFA0(v4, v32);
v33 = *(v4 + 96);
if ( *(v33 + 10636) )
{
v34 = *(v33 + 10624) + 448;
if ( v34 )
{
if ( *(v34 + 32) > 0.0 )
{
sub_103ED930(8, 0);
sub_103EDA10(8);
}
}
}
v35 = *(v4 + 96);
if ( *(v35 + 10636) )
{
if ( *(v35 + 10624) != -504 && *(*(v35 + 10624) + 536) > 0.0 )
{
if ( *(v35 + 10636) )
{
v36 = *(v35 + 10624) + 504;
if ( v36 )
{
if ( *(v36 + 36) < 0.0 )
sub_103EDA10(9);
}
}
}
}
sub_103EBEE0(v4);
sub_103EBB90(v4);
v37 = 0;
v46 = 0;
do
{
v38 = *(v4 + 96);
if ( *(v38 + 10636) )
{
v39 = v37 + *(v38 + 10624);
if ( v39 )
{
if ( !*(v39 + 24) )
{
v40 = *(v39 + 48);
if ( v40 )
{
if ( *(v39 + 32) != 0.0 )
sub_101902C0(v40, 16);
v37 = v46;
}
*(v39 + 32) = 0;
}
}
}
v37 += 56;
v46 = v37;
}
while ( v37 < 728 );
v41 = *(v4 + 128);
v42 = *(v4 + 96);
v49 = 0;
v50 = v41;
v51 = 0;
C_BaseEntity::SetAbsAngles(v42, &v49);
v43 = g_pGlobals;
*(v4 + 104) = *(v4 + 100);
*(v4 + 188) = *(v4 + 176);
*(v4 + 192) = *(v4 + 180);
*(v4 + 196) = *(v4 + 184);
*(v4 + 4) = 0;
*(v4 + 108) = *(v43 + 16);
v44 = *(v43 + 4);
byte_10CAC0C8 = 1;
*(v4 + 112) = v44;
}
}
}