[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