[iortcw] 94/497: Client enhancement, feature added: - cg_noAmmoAutoSwitch

Simon McVittie smcv at debian.org
Fri Sep 8 10:36:31 UTC 2017


This is an automated email from the git hooks/post-receive script.

smcv pushed a commit to annotated tag 1.42d
in repository iortcw.

commit 7ecb1b5d05ac729f3b2285be868a6c3b414cf323
Author: nate.afk at gmail.com <nate.afk at gmail.com@e65d2741-a53d-b2dc-ae96-bb75fa5e4c4a>
Date:   Mon Apr 28 02:06:19 2014 +0000

    Client enhancement, feature added:
    - cg_noAmmoAutoSwitch
---
 MP/code/cgame/cg_event.c   | 10 ++++--
 MP/code/cgame/cg_local.h   |  4 ++-
 MP/code/cgame/cg_main.c    |  4 ++-
 MP/code/cgame/cg_weapons.c | 90 ++++++++++++++++++++++++----------------------
 4 files changed, 60 insertions(+), 48 deletions(-)

diff --git a/MP/code/cgame/cg_event.c b/MP/code/cgame/cg_event.c
index 7560683..3fedcbd 100644
--- a/MP/code/cgame/cg_event.c
+++ b/MP/code/cgame/cg_event.c
@@ -1924,9 +1924,13 @@ void CG_EntityEvent( centity_t *cent, vec3_t position ) {
 		if ( ( es->weapon != WP_GRENADE_LAUNCHER ) && ( es->weapon != WP_GRENADE_PINEAPPLE ) && ( es->weapon != WP_DYNAMITE )  && ( es->weapon != WP_DYNAMITE2 ) ) {
 			trap_S_StartSound( NULL, es->number, CHAN_AUTO, cgs.media.noAmmoSound );
 		}
-		if ( es->number == cg.snap->ps.clientNum ) {
-			CG_OutOfAmmoChange();
-		}
+		// L0 - noAmmoAutoSwitch (patched)
+		if (es->number == cg.snap->ps.clientNum 
+			&& (cg_noAmmoAutoSwitch.integer > 0 
+			&& !CG_WeaponSelectable(cg.weaponSelect))) 
+		{
+			CG_OutOfAmmoChange(event == EV_NOAMMO ? qfalse : qtrue);
+		} // ~
 		break;
 	case EV_CHANGE_WEAPON:
 	{
diff --git a/MP/code/cgame/cg_local.h b/MP/code/cgame/cg_local.h
index 1208f4b..fc1cb87 100644
--- a/MP/code/cgame/cg_local.h
+++ b/MP/code/cgame/cg_local.h
@@ -1777,6 +1777,7 @@ extern vmCvar_t cg_drawWeaponIconFlash;
 extern vmCvar_t cg_bloodFlash;
 extern vmCvar_t cg_muzzleFlash;
 extern vmCvar_t cg_complaintPopUp;
+extern vmCvar_t cg_noAmmoAutoSwitch;
 
 //
 // cg_main.c
@@ -1991,6 +1992,7 @@ void CG_NextWeapon_f( void );
 void CG_PrevWeapon_f( void );
 void CG_Weapon_f( void );
 void CG_WeaponBank_f( void );
+qboolean CG_WeaponSelectable(int i);
 
 void CG_FinishWeaponChange( int lastweap, int newweap );
 
@@ -2031,7 +2033,7 @@ void CG_AddPlayerWeapon( refEntity_t *parent, playerState_t *ps, centity_t *cent
 void CG_DrawWeaponSelect( void );
 void CG_DrawHoldableSelect( void );
 
-void CG_OutOfAmmoChange( void );
+void CG_OutOfAmmoChange( qboolean allowForceSwitch );
 void CG_HoldableUsedupChange( void ); //----(SA)	added
 
 //----(SA) added to header to access from outside cg_weapons.c
diff --git a/MP/code/cgame/cg_main.c b/MP/code/cgame/cg_main.c
index e4f6294..0457ab0 100644
--- a/MP/code/cgame/cg_main.c
+++ b/MP/code/cgame/cg_main.c
@@ -286,6 +286,7 @@ vmCvar_t cg_bloodDamageBlend;
 vmCvar_t cg_bloodFlash;
 vmCvar_t cg_muzzleFlash;
 vmCvar_t cg_complaintPopUp;
+vmCvar_t cg_noAmmoAutoSwitch;
 // ~L0
 
 typedef struct {
@@ -495,7 +496,8 @@ cvarTable_t cvarTable[] = {
 	{ &cg_bloodDamageBlend, "cg_bloodDamageBlend", "1.0", CVAR_ARCHIVE },
 	{ &cg_bloodFlash, "cg_bloodFlash", "1.0", CVAR_ARCHIVE },
 	{ &cg_muzzleFlash, "cg_muzzleFlash", "1", CVAR_ARCHIVE },
-	{ &cg_complaintPopUp, "cg_complaintPopUp", "1", CVAR_ARCHIVE }
+	{ &cg_complaintPopUp, "cg_complaintPopUp", "1", CVAR_ARCHIVE },
+	{ &cg_noAmmoAutoSwitch, "cg_noAmmoAutoSwitch", "1", CVAR_ARCHIVE }
 	// ~L0
 };
 
diff --git a/MP/code/cgame/cg_weapons.c b/MP/code/cgame/cg_weapons.c
index 6337c21..b286bed 100644
--- a/MP/code/cgame/cg_weapons.c
+++ b/MP/code/cgame/cg_weapons.c
@@ -3110,7 +3110,7 @@ static qboolean CG_WeaponHasAmmo( int i ) {
 CG_WeaponSelectable
 ===============
 */
-static qboolean CG_WeaponSelectable( int i ) {
+qboolean CG_WeaponSelectable( int i ) {
 
 	// allow the player to unselect all weapons
 //	if(i == WP_NONE)
@@ -4156,7 +4156,7 @@ CG_OutOfAmmoChange
 The current weapon has just run out of ammo
 ===================
 */
-void CG_OutOfAmmoChange( void ) {
+void CG_OutOfAmmoChange( qboolean allowForceSwitch ) {
 	int i;
 	int bank = 0, cycle = 0;
 	int equiv = WP_NONE;
@@ -4175,47 +4175,51 @@ void CG_OutOfAmmoChange( void ) {
 	}
 // jpw
 
-// JPW NERVE -- early out if we just fired Panzerfaust, go to pistola, then grenades
-	if ( cg.weaponSelect == WP_PANZERFAUST ) {
-		for ( i = 0; i < MAX_WEAPS_IN_BANK_MP; i++ )
-			if ( CG_WeaponSelectable( weapBanksMultiPlayer[2][i] ) ) { // find a pistol
-				cg.weaponSelect = weapBanksMultiPlayer[2][i];
-				CG_FinishWeaponChange( cg.predictedPlayerState.weapon, cg.weaponSelect );
-				return;
-			}
-		for ( i = 0; i < MAX_WEAPS_IN_BANK_MP; i++ )
-			if ( CG_WeaponSelectable( weapBanksMultiPlayer[4][i] ) ) { // find a grenade
-				cg.weaponSelect = weapBanksMultiPlayer[4][i];
-				CG_FinishWeaponChange( cg.predictedPlayerState.weapon, cg.weaponSelect );
-				return;
-			}
-	}
-// jpw
-
-	// never switch weapon if auto-reload is disabled
-	if ( !cg.pmext.bAutoReload && IS_AUTORELOAD_WEAPON( cg.weaponSelect ) ) {
-		return;
-	}
-
-	// if you're using an alt mode weapon, try switching back to the parent
-	// otherwise, switch to the equivalent if you've got it
-	if ( cg.weaponSelect >= WP_BEGINSECONDARY && cg.weaponSelect <= WP_LASTSECONDARY ) {
-		cg.weaponSelect = equiv = getAltWeapon( cg.weaponSelect );    // base any further changes on the parent
-		if ( CG_WeaponSelectable( equiv ) ) {    // the parent was selectable, drop back to that
-			CG_FinishWeaponChange( cg.predictedPlayerState.weapon, cg.weaponSelect ); //----(SA)
-			return;
-		}
-	}
-
-
-	// now try the opposite team's equivalent weap
-	equiv = getEquivWeapon( cg.weaponSelect );
-
-	if ( equiv != cg.weaponSelect && CG_WeaponSelectable( equiv ) ) {
-		cg.weaponSelect = equiv;
-		CG_FinishWeaponChange( cg.predictedPlayerState.weapon, cg.weaponSelect ); //----(SA)
-		return;
-	}
+	// L0 - wrapped for noAmmoAutoSwitch
+	if ( allowForceSwitch )
+	{
+		// JPW NERVE -- early out if we just fired Panzerfaust, go to pistola, then grenades
+		if (cg.weaponSelect == WP_PANZERFAUST) {
+			for (i = 0; i < MAX_WEAPS_IN_BANK_MP; i++)
+			if (CG_WeaponSelectable(weapBanksMultiPlayer[2][i])) { // find a pistol
+				cg.weaponSelect = weapBanksMultiPlayer[2][i];
+				CG_FinishWeaponChange(cg.predictedPlayerState.weapon, cg.weaponSelect);
+				return;
+			}
+			for (i = 0; i < MAX_WEAPS_IN_BANK_MP; i++)
+			if (CG_WeaponSelectable(weapBanksMultiPlayer[4][i])) { // find a grenade
+				cg.weaponSelect = weapBanksMultiPlayer[4][i];
+				CG_FinishWeaponChange(cg.predictedPlayerState.weapon, cg.weaponSelect);
+				return;
+			}
+		}
+		// jpw
+
+		// never switch weapon if auto-reload is disabled
+		if (!cg.pmext.bAutoReload && IS_AUTORELOAD_WEAPON(cg.weaponSelect)) {
+			return;
+		}
+
+		// if you're using an alt mode weapon, try switching back to the parent
+		// otherwise, switch to the equivalent if you've got it
+		if (cg.weaponSelect >= WP_BEGINSECONDARY && cg.weaponSelect <= WP_LASTSECONDARY) {
+			cg.weaponSelect = equiv = getAltWeapon(cg.weaponSelect);    // base any further changes on the parent
+			if (CG_WeaponSelectable(equiv)) {    // the parent was selectable, drop back to that
+				CG_FinishWeaponChange(cg.predictedPlayerState.weapon, cg.weaponSelect); //----(SA)
+				return;
+			}
+		}
+
+
+		// now try the opposite team's equivalent weap
+		equiv = getEquivWeapon(cg.weaponSelect);
+
+		if (equiv != cg.weaponSelect && CG_WeaponSelectable(equiv)) {
+			cg.weaponSelect = equiv;
+			CG_FinishWeaponChange(cg.predictedPlayerState.weapon, cg.weaponSelect); //----(SA)
+			return;
+		}
+	} // ~L0 - Wrapper ends here..
 
 	//
 	// more complicated selection

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-games/iortcw.git



More information about the Pkg-games-commits mailing list