Esempio n. 1
0
/*
============
W_Attack

An attack impulse can be triggered now
============
*/
void W_Attack()
{
	float           r;

	if ( !W_CheckNoAmmo() )
		return;

	makevectors( self->s.v.v_angle );	// calculate forward angle for velocity
	self->show_hostile = g_globalvars.time + 1;	// wake monsters up

	switch ( ( int ) self->s.v.weapon )
	{
	case IT_AXE:
		self->attack_finished = g_globalvars.time + 0.5;
		sound( self, CHAN_WEAPON, "weapons/ax1.wav", 1, ATTN_NORM );
		r = g_random();
		if ( r < 0.25 )
			player_axe1();
		else if ( r < 0.5 )
			player_axeb1();
		else if ( r < 0.75 )
			player_axec1();
		else
			player_axed1();
		break;

	case IT_SHOTGUN:
		player_shot1();
		self->attack_finished = g_globalvars.time + 0.5;
		W_FireShotgun();
		break;

	case IT_SUPER_SHOTGUN:
		player_shot1();
		self->attack_finished = g_globalvars.time + 0.7;
		W_FireSuperShotgun();
		break;

	case IT_NAILGUN:
		player_nail1();
		break;

	case IT_SUPER_NAILGUN:
		player_nail1();
		break;

	case IT_GRENADE_LAUNCHER:
		player_rocket1();
		self->attack_finished = g_globalvars.time + 0.6;
		W_FireGrenade();
		break;

	case IT_ROCKET_LAUNCHER:
		player_rocket1();
		self->attack_finished = g_globalvars.time + 0.8;
		W_FireRocket();
		break;

	case IT_LIGHTNING:
		self->attack_finished = g_globalvars.time + 0.1;
		sound( self, CHAN_AUTO, "weapons/lstart.wav", 1, ATTN_NORM );
		player_light1();
		break;
	}
}
//===============================================================================
// PLAYER WEAPON USE
//===============================================================================
void CBasePlayer::W_Attack(int iQuadSound)
{
	// Out of ammo?
	if(!W_CheckNoAmmo())
		return;

	if(m_iQuakeWeapon != IT_LIGHTNING)
		((CBasePlayerWeapon *)m_pActiveItem)->SendWeaponAnim(1, 1);

	if(m_iQuakeWeapon == IT_AXE)
	{
#ifdef THREEWAVE
		if(m_iRuneStatus == ITEM_RUNE3_FLAG)
			m_flNextAttack = UTIL_WeaponTimeBase() + 0.3;
		else
#endif
			m_flNextAttack = UTIL_WeaponTimeBase() + 0.5;

		PLAYBACK_EVENT_FULL(FEV_NOTHOST, edict(), m_usAxeSwing, 0, (float *)&g_vecZero, (float *)&g_vecZero, 0.0, 0.0, iQuadSound, 0, 0, 0);

		// Delay attack for 0.3
		m_flAxeFire = gpGlobals->time + 0.3;

		PLAYBACK_EVENT_FULL(FEV_NOTHOST, edict(), m_usAxe, 0.3, (float *)&g_vecZero, (float *)&g_vecZero, 0.0, 0.0, iQuadSound, 0, 0, 0);
	}
	else if(m_iQuakeWeapon == IT_SHOTGUN)
	{
#ifdef THREEWAVE
		if(m_iRuneStatus == ITEM_RUNE3_FLAG)
			m_flNextAttack = UTIL_WeaponTimeBase() + 0.3;
		else
#endif
			m_flNextAttack = UTIL_WeaponTimeBase() + 0.5;

		W_FireShotgun(iQuadSound);
	}
	else if(m_iQuakeWeapon == IT_SUPER_SHOTGUN)
	{
#ifdef THREEWAVE
		if(m_iRuneStatus == ITEM_RUNE3_FLAG)
			m_flNextAttack = UTIL_WeaponTimeBase() + 0.4;
		else
#endif
			m_flNextAttack = UTIL_WeaponTimeBase() + 0.7;

		W_FireSuperShotgun(iQuadSound);
	}
	else if(m_iQuakeWeapon == IT_NAILGUN)
	{
		m_flNextAttack = UTIL_WeaponTimeBase() + 0.1;

		W_FireSpikes(iQuadSound);
	}
	else if(m_iQuakeWeapon == IT_SUPER_NAILGUN)
	{
		m_flNextAttack = UTIL_WeaponTimeBase() + 0.1;
		W_FireSpikes(iQuadSound);
	}
	else if(m_iQuakeWeapon == IT_GRENADE_LAUNCHER)
	{
#ifdef THREEWAVE
		if(m_iRuneStatus == ITEM_RUNE3_FLAG)
			m_flNextAttack = UTIL_WeaponTimeBase() + 0.3;
		else
#endif
			m_flNextAttack = UTIL_WeaponTimeBase() + 0.6;

		W_FireGrenade(iQuadSound);
	}
	else if(m_iQuakeWeapon == IT_ROCKET_LAUNCHER)
	{
#ifdef THREEWAVE
		if(m_iRuneStatus == ITEM_RUNE3_FLAG)
			m_flNextAttack = UTIL_WeaponTimeBase() + 0.4;
		else
#endif
			m_flNextAttack = UTIL_WeaponTimeBase() + 0.8;

		W_FireRocket(iQuadSound);
	}
	else if(m_iQuakeWeapon == IT_LIGHTNING)
	{
		m_flNextAttack = UTIL_WeaponTimeBase() + 0.1;

		// Play the lightning start sound if gun just started firing
		if(m_afButtonPressed & IN_ATTACK)
			EMIT_SOUND(ENT(pev), CHAN_AUTO, "weapons/lstart.wav", 1, ATTN_NORM);

		W_FireLightning(iQuadSound);
	}

#ifdef THREEWAVE
	else if(m_iQuakeWeapon == IT_EXTRA_WEAPON)
	{
		if(!m_bHook_Out)
			W_FireHook();

		m_flNextAttack = UTIL_WeaponTimeBase() + 0.1;
	}
#endif

	// Make player attack
	if(pev->health >= 0)
		SetAnimation(PLAYER_ATTACK1);
}