mirror of
https://github.com/YGGverse/hlsdk-portable.git
synced 2025-02-06 20:14:44 +00:00
Fix monster_houndeye.
This commit is contained in:
parent
a285b6b533
commit
b606972fa9
@ -32,8 +32,9 @@ extern CGraph WorldGraph;
|
|||||||
// houndeye does 20 points of damage spread over a sphere 384 units in diameter, and each additional
|
// houndeye does 20 points of damage spread over a sphere 384 units in diameter, and each additional
|
||||||
// squad member increases the BASE damage by 110%, per the spec.
|
// squad member increases the BASE damage by 110%, per the spec.
|
||||||
#define HOUNDEYE_MAX_SQUAD_SIZE 4
|
#define HOUNDEYE_MAX_SQUAD_SIZE 4
|
||||||
#define HOUNDEYE_MAX_ATTACK_RADIUS 144
|
#define HOUNDEYE_MAX_ATTACK_RADIUS 120
|
||||||
#define HOUNDEYE_SQUAD_BONUS (float)1.1
|
#define HOUNDEYE_SQUAD_BONUS (float)1.1
|
||||||
|
#define HOUNDEYE_MELEE_DAMAGE 7
|
||||||
|
|
||||||
#define HOUNDEYE_EYE_FRAMES 4 // how many different switchable maps for the eye
|
#define HOUNDEYE_EYE_FRAMES 4 // how many different switchable maps for the eye
|
||||||
|
|
||||||
@ -291,17 +292,8 @@ void CHoundeye::HandleAnimEvent( MonsterEvent_t *pEvent )
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case HOUND_AE_THUMP:
|
case HOUND_AE_THUMP:
|
||||||
{
|
// emit the shockwaves
|
||||||
// SOUND HERE!
|
SonicAttack();
|
||||||
CBaseEntity *pHurt = CheckTraceHullAttack( 70, gSkillData.bullsquidDmgBite, DMG_SLASH );
|
|
||||||
|
|
||||||
if( pHurt )
|
|
||||||
{
|
|
||||||
pHurt->pev->punchangle.x = 5;
|
|
||||||
pHurt->pev->velocity = pHurt->pev->velocity - gpGlobals->v_forward * 16;
|
|
||||||
pHurt->pev->velocity = pHurt->pev->velocity + gpGlobals->v_up * 2;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case HOUND_AE_ANGERSOUND1:
|
case HOUND_AE_ANGERSOUND1:
|
||||||
EMIT_SOUND( ENT( pev ), CHAN_VOICE, "houndeye/he_pain3.wav", 1, ATTN_NORM );
|
EMIT_SOUND( ENT( pev ), CHAN_VOICE, "houndeye/he_pain3.wav", 1, ATTN_NORM );
|
||||||
@ -570,99 +562,18 @@ void CHoundeye::SonicAttack( void )
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
// blast circles
|
|
||||||
MESSAGE_BEGIN( MSG_PAS, SVC_TEMPENTITY, pev->origin );
|
|
||||||
WRITE_BYTE( TE_BEAMCYLINDER );
|
|
||||||
WRITE_COORD( pev->origin.x );
|
|
||||||
WRITE_COORD( pev->origin.y );
|
|
||||||
WRITE_COORD( pev->origin.z + 16 );
|
|
||||||
WRITE_COORD( pev->origin.x );
|
|
||||||
WRITE_COORD( pev->origin.y );
|
|
||||||
WRITE_COORD( pev->origin.z + 16 + HOUNDEYE_MAX_ATTACK_RADIUS / .2 ); // reach damage radius over .3 seconds
|
|
||||||
WRITE_SHORT( m_iSpriteTexture );
|
|
||||||
WRITE_BYTE( 0 ); // startframe
|
|
||||||
WRITE_BYTE( 0 ); // framerate
|
|
||||||
WRITE_BYTE( 2 ); // life
|
|
||||||
WRITE_BYTE( 16 ); // width
|
|
||||||
WRITE_BYTE( 0 ); // noise
|
|
||||||
|
|
||||||
WriteBeamColor();
|
|
||||||
|
|
||||||
WRITE_BYTE( 255 ); //brightness
|
|
||||||
WRITE_BYTE( 0 ); // speed
|
|
||||||
MESSAGE_END();
|
|
||||||
|
|
||||||
MESSAGE_BEGIN( MSG_PAS, SVC_TEMPENTITY, pev->origin );
|
|
||||||
WRITE_BYTE( TE_BEAMCYLINDER );
|
|
||||||
WRITE_COORD( pev->origin.x );
|
|
||||||
WRITE_COORD( pev->origin.y );
|
|
||||||
WRITE_COORD( pev->origin.z + 16 );
|
|
||||||
WRITE_COORD( pev->origin.x );
|
|
||||||
WRITE_COORD( pev->origin.y );
|
|
||||||
WRITE_COORD( pev->origin.z + 16 + ( HOUNDEYE_MAX_ATTACK_RADIUS / 2 ) / .2 ); // reach damage radius over .3 seconds
|
|
||||||
WRITE_SHORT( m_iSpriteTexture );
|
|
||||||
WRITE_BYTE( 0 ); // startframe
|
|
||||||
WRITE_BYTE( 0 ); // framerate
|
|
||||||
WRITE_BYTE( 2 ); // life
|
|
||||||
WRITE_BYTE( 16 ); // width
|
|
||||||
WRITE_BYTE( 0 ); // noise
|
|
||||||
|
|
||||||
WriteBeamColor();
|
|
||||||
|
|
||||||
WRITE_BYTE( 255 ); //brightness
|
|
||||||
WRITE_BYTE( 0 ); // speed
|
|
||||||
MESSAGE_END();
|
|
||||||
|
|
||||||
CBaseEntity *pEntity = NULL;
|
CBaseEntity *pEntity = NULL;
|
||||||
// iterate on all entities in the vicinity.
|
// iterate on all entities in the vicinity.
|
||||||
while( ( pEntity = UTIL_FindEntityInSphere( pEntity, pev->origin, HOUNDEYE_MAX_ATTACK_RADIUS ) ) != NULL )
|
while( ( pEntity = UTIL_FindEntityInSphere( pEntity, pev->origin, HOUNDEYE_MAX_ATTACK_RADIUS ) ) != NULL )
|
||||||
{
|
{
|
||||||
if( pEntity->pev->takedamage != DAMAGE_NO )
|
if( pEntity->pev->takedamage == DAMAGE_NO )
|
||||||
{
|
|
||||||
if( !FClassnameIs( pEntity->pev, "monster_houndeye" ) )
|
|
||||||
{
|
|
||||||
// houndeyes don't hurt other houndeyes with their attack
|
|
||||||
// houndeyes do FULL damage if the ent in question is visible. Half damage otherwise.
|
|
||||||
// This means that you must get out of the houndeye's attack range entirely to avoid damage.
|
|
||||||
// Calculate full damage first
|
|
||||||
|
|
||||||
if( SquadCount() > 1 )
|
|
||||||
{
|
|
||||||
// squad gets attack bonus.
|
|
||||||
flAdjustedDamage = gSkillData.houndeyeDmgBlast + gSkillData.houndeyeDmgBlast * ( HOUNDEYE_SQUAD_BONUS * ( SquadCount() - 1 ) );
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// solo
|
|
||||||
flAdjustedDamage = gSkillData.houndeyeDmgBlast;
|
|
||||||
}
|
|
||||||
|
|
||||||
flDist = ( pEntity->Center() - pev->origin ).Length();
|
|
||||||
|
|
||||||
flAdjustedDamage -= ( flDist / HOUNDEYE_MAX_ATTACK_RADIUS ) * flAdjustedDamage;
|
|
||||||
|
|
||||||
if( !FVisible( pEntity ) )
|
|
||||||
{
|
{
|
||||||
if( pEntity->IsPlayer() )
|
if( pEntity->IsPlayer() )
|
||||||
{
|
{
|
||||||
// if this entity is a client, and is not in full view, inflict half damage. We do this so that players still
|
if( FVisible( pEntity ) )
|
||||||
// take the residual damage if they don't totally leave the houndeye's effective radius. We restrict it to clients
|
pEntity->TakeDamage( pev, pev, HOUNDEYE_MELEE_DAMAGE, DMG_SONIC | DMG_ALWAYSGIB );
|
||||||
// so that monsters in other parts of the level don't take the damage and get pissed.
|
else
|
||||||
flAdjustedDamage *= 0.5;
|
pEntity->TakeDamage( pev, pev, HOUNDEYE_MELEE_DAMAGE / 2, DMG_SONIC | DMG_ALWAYSGIB );
|
||||||
}
|
|
||||||
else if( !FClassnameIs( pEntity->pev, "func_breakable" ) && !FClassnameIs( pEntity->pev, "func_pushable" ) )
|
|
||||||
{
|
|
||||||
// do not hurt nonclients through walls, but allow damage to be done to breakables
|
|
||||||
flAdjustedDamage = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//ALERT ( at_aiconsole, "Damage: %f\n", flAdjustedDamage );
|
|
||||||
|
|
||||||
if( flAdjustedDamage > 0 )
|
|
||||||
{
|
|
||||||
pEntity->TakeDamage( pev, pev, flAdjustedDamage, DMG_SONIC | DMG_ALWAYSGIB );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user