Toggling RPG Guidance

From Valve Developer Community
Revision as of 18:57, 18 August 2018 by Avanate (talk | contribs)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
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 "StartGuiding();" 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.


As soon as we run out of rockets, the RPG is forced to lower, causing a constant toggle sound to play forever, we clearly don't want that, and there is a very simple fix for this sort of issue, in void CWeaponRPG::StopGuiding() change this code :

m_bGuiding = false;

WeaponSound( SPECIAL2 );

StopLaserEffects();

// Kill the dot completely
if (m_hLaserDot != NULL)
{
	m_hLaserDot->TurnOff();
	UTIL_Remove(m_hLaserDot);
	m_hLaserDot = NULL;
}

To this :

m_bGuiding = false;

StopLaserEffects();

// Kill the dot completely
if (m_hLaserDot != NULL)
{
	m_hLaserDot->TurnOff();
	UTIL_Remove(m_hLaserDot);
	m_hLaserDot = NULL;

	WeaponSound(SPECIAL2);
}

What we did here, was simply change the position of the WeaponSound(SPECIAL2);, putting it inside of the if statement of which is designated to kill the guidance dot.

Note:This still retains the Toggling sound when you Disable or Enable guidance, so there is nothing to worry about :)


And that's it! You're done!


If any issues arise, ensure that you've done the steps above correctly, and that you didn't misplace (or create a typo within) the code.