Toggling RPG Guidance

From Valve Developer Community
Revision as of 14:59, 8 October 2005 by Aionaever (talk | contribs) (Category tag :))
Jump to: navigation, search

Based on tutorial found here.

Basically what we're going to be doing is allowing a player to switch the RPG's guiding laser on and off using the weapon's secondary fire. Along with this, we will allow a player who has fired a dumb (non-guided) rocket that hasn't yet exploded to change weapons.


Files affected:

  • weapon_rpg.cpp


In CWeaponRPG::ItemPostFrame() (about line 1539), add the following code:

if ( pPlayer->m_afButtonPressed & IN_ATTACK2 )
{
	ToggleGuiding();
}

at the end of the method, after:

if ( pPlayer->GetAmmoCount(m_iPrimaryAmmoType) <= 0 && m_hMissile == NULL )
{
	StopGuiding();
}

This says, in effect, "If the player hits the secondary attack, toggle rocket guidance on or off."

Then in CWeaponRPG::SuppressGuiding() (about line 1497), find the following code:

if ( m_hLaserDot == NULL )
{
	StartGuiding();

	//STILL!?
	if ( m_hLaserDot == NULL )
		return;
}

and comment it out, so that it looks like this:

//if ( m_hLaserDot == NULL )
//{
	//StartGuiding();

	//STILL!?
	//if ( m_hLaserDot == NULL )
		// return;
//}

This stops the code from automatically starting up rocket guidance again.

That's it for the guidance toggling code. Now to allow the player to lower the RPG after firing a dumb rocket but before it explodes.

In CWeaponRPG::Lower() (about line 1528), find the following code:

if ( m_hMissile != NULL )
	return false;

and change it to read:

if ( m_hMissile != NULL && IsGuiding() )
	return false;

This prevents the code from automatically telling us that we can't lower the RPG if we're not guiding. You will then need to make the same change in CWeaponRPG::CanHolster() (about line 1641).

Then in CWeaponRPG::Reload() (about line 1827), add this code:

if ( pOwner->GetActiveWeapon() != this )
	return false;

after:

if ( pOwner->GetAmmoCount(m_iPrimaryAmmoType) <= 0 )
	return false;

If we changed weapons after firing, this will prevent the RPG from getting kicked back up to us for a reload after the dumb rocket explodes.

And that's it! You're done.