rendered paste bodytagorientation_t tag;
vec3_t aimSpot;
VOID GetTag( centity_t *cent, tagorientation_t *tag, INT hModel, LPCSTR tagname )
{
int *getTag = (INT*) 0x3001D540;
_asm push [tag]
_asm push [cent]
_asm mov ecx, [hModel]
_asm mov eax, [tagname]
_asm call[getTag]
_asm pop eax
_asm pop eax;
}
int CheckFov( vec3_t origin )
{
vec3_t vec, ang;
VectorSubtract( origin, cg->refdef.vieworg, vec );
VectorAngles( vec, ang );
ANG_CLIP( ang[YAW] );
ANG_CLIP( ang[PITCH] );
ang[PITCH] = -ang[PITCH];
ang[0] -= cg->refdefViewAngles[0];
ang[1] -= cg->refdefViewAngles[1];
ANG_CLIP( ang[YAW] );
ANG_CLIP( ang[PITCH] );
if( ( ang[0] * ang[0] + ang[1] * ang[1] )<=( cod_fov.value * cod_fov.value ) )
{
return 1;
}
return 0;
}
VOID PingPredict( centity_t *ent, vec3_t origin, vec3_t predictedorigin )
{
vec3_t vel;
VectorCopy( ent->currentState.pos.trDelta, vel );
VectorMA( origin, ( cg->snap->ping/1000.0f )* cg->snap->ping, vel, predictedorigin );
}
INT NearestCHTarget( )
{
FLOAT CHDist = 0;
FLOAT lastCHDist = 9999;
FLOAT AngleX, AngleY;
INT iBestTargetCH = -1;
for ( INT i = 0; i < 64; i++ )
{
if( cg_entities[i].currentValid && cg_entities[i].currentState.clientNum != cg->clientNum )
{
if( clientInfo[ cg_entities[i].currentState.clientNum ].team != clientInfo[ cg->clientNum ].team || clientInfo[ cg_entities[i].currentState.clientNum ].team == TEAM_DEATHMATCH )
{
INT hModel = trap_GetEntityModelHandle( i );
if ( !hModel )
return NULL;
GetTag( &cg_entities[i], &tag, hModel, "Bip01 Head" );
VectorCopy( tag.origin, aimSpot );
aimSpot[0] += cod_aimvecX.value;
aimSpot[1] += cod_aimvecY.value;
aimSpot[2] += cod_aimvecZ.value;
if( IsVisible( aimSpot ) )
{
if( CheckFov( aimSpot ) )
{
VectorMA( aimSpot, cg->snap->ping, cg_entities[i].currentState.pos.trDelta, aimSpot );
PingPredict( &cg_entities[i], aimSpot, aimSpot );
GetAngleToOrigin( aimSpot, AngleX, AngleY );
CHDist = sqrt( AngleX*AngleX + AngleY*AngleY );
if ( (CHDist < lastCHDist) )
{
lastCHDist = CHDist;
iBestTargetCH = i;
}
}
}
}
}
}
return iBestTargetCH;
}
VOID DoAim( INT i )
{
FLOAT AngleX, AngleY;
if( i < 0 )
{
return;
}
INT hModel = trap_GetEntityModelHandle( i );
if ( !hModel )
return;
GetTag( &cg_entities[i], &tag, hModel, "Bip01 Head" );
VectorCopy( tag.origin, aimSpot );
GetAngleToOrigin( aimSpot, AngleX, AngleY );
*ViewAngleX += AngleX;
*ViewAngleY += AngleY;
}