Skip to content

Commit

Permalink
cgame: don't allow weaponlastused when mounting/unmounting alt weapon…
Browse files Browse the repository at this point in the history
… refs #1063 + cleanup CG_AltWeapon_f
  • Loading branch information
Aranud committed Dec 5, 2017
1 parent 25dfbdd commit 1b5aecc
Show file tree
Hide file tree
Showing 2 changed files with 49 additions and 67 deletions.
112 changes: 47 additions & 65 deletions src/cgame/cg_weapons.c
Original file line number Diff line number Diff line change
Expand Up @@ -3825,6 +3825,16 @@ void CG_AltWeapon_f(void)
return;
}

if (cg.snap->ps.pm_flags & PMF_RESPAWNED)
{
return;
}

if (BG_PlayerMounted(cg.snap->ps.eFlags))
{
return;
}

if (cg.snap->ps.pm_type == PM_FREEZE)
{
return;
Expand Down Expand Up @@ -3913,21 +3923,11 @@ void CG_AltWeapon_f(void)
}
}

if (cg.snap->ps.pm_flags & PMF_RESPAWNED)
{
return;
}

if (cg.snap->ps.eFlags & EF_PRONE_MOVING)
{
return;
}

if (BG_PlayerMounted(cg.snap->ps.eFlags))
{
return;
}

if (cg.time - cg.weaponSelectTime < cg_weaponCycleDelay.integer)
{
return; // force pause so holding it down won't go too fast
Expand All @@ -3944,6 +3944,12 @@ void CG_AltWeapon_f(void)
return;
}

// don't allow another weapon switch when we're still swapping to prevent animation breaking
if (cg.snap->ps.weaponstate == WEAPON_RAISING || cg.snap->ps.weaponstate == WEAPON_DROPPING)
{
return;
}

// need ground for this
if (GetWeaponTableData(cg.weaponSelect)->isMortar)
{
Expand Down Expand Up @@ -3994,17 +4000,7 @@ void CG_AltWeapon_f(void)
return;
}
}

original = cg.weaponSelect;
num = GetWeaponTableData(original)->weapAlts;

// if no alternative weapon, keep the original
if (!num)
{
num = original;
}

if (original == WP_BINOCULARS)
else if (cg.weaponSelect == WP_BINOCULARS)
{
/*if(cg.snap->ps.eFlags & EF_ZOOMING) {
trap_SendConsoleCommand( "-zoom\n" );
Expand All @@ -4023,49 +4019,13 @@ void CG_AltWeapon_f(void)
cg.binocZoomTime = cg.time;
}
}
}

// don't allow another weapon switch when we're still swapping the gpg40, to prevent animation breaking
if (cg.snap->ps.weaponstate == WEAPON_RAISING || cg.snap->ps.weaponstate == WEAPON_DROPPING)
{
if (GetWeaponTableData(original)->isRiflenade
|| GetWeaponTableData(original)->isSilencedPistol
|| GetWeaponTableData(original)->isAkimbo
|| GetWeaponTableData(original)->isSetWeapon
|| GetWeaponTableData(original)->isScoped)
{
return;
}

if (GetWeaponTableData(num)->isRiflenade
|| GetWeaponTableData(num)->isSilencedPistol
|| GetWeaponTableData(num)->isAkimbo
|| GetWeaponTableData(num)->isSetWeapon
|| GetWeaponTableData(num)->isScoped)
{
return;
}
}

if (CG_WeaponSelectable(num)) // new weapon is valid
{
CG_FinishWeaponChange(original, num);

if (original == num)
{
reload = qtrue;
}
}
else
{
reload = qtrue;
return;
}

if (reload && cg_weapaltReloads.integer)
if (CG_WeaponSelectable(GetWeaponTableData(cg.weaponSelect)->weapAlts)) // new weapon is valid
{
// FIXME: This is a horrible way of doing it but theres not other way atm.
trap_SendConsoleCommand("+reload\n");
trap_SendConsoleCommand("-reload\n");
CG_FinishWeaponChange(cg.weaponSelect, GetWeaponTableData(cg.weaponSelect)->weapAlts);
}
}

Expand All @@ -4075,7 +4035,7 @@ void CG_AltWeapon_f(void)
*/
void CG_NextWeap(qboolean switchBanks)
{
int bank = 0, cycle = 0, newbank = 0, newcycle = 0;
int bank = 0, cycle = 0, newbank = 0, newcycle = 0;
int num = cg.weaponSelect;
int curweap = cg.weaponSelect;
qboolean nextbank = qfalse; // need to switch to the next bank of weapons?
Expand Down Expand Up @@ -4232,7 +4192,7 @@ void CG_NextWeap(qboolean switchBanks)
*/
void CG_PrevWeap(qboolean switchBanks)
{
int bank = 0, cycle = 0, newbank = 0, newcycle = 0;
int bank = 0, cycle = 0, newbank = 0, newcycle = 0;
int num = cg.weaponSelect;
int curweap = cg.weaponSelect;
qboolean prevbank = qfalse; // need to switch to the next bank of weapons?
Expand Down Expand Up @@ -4514,6 +4474,28 @@ void CG_LastWeaponUsed_f(void)
return;
}

// don't allow another weapon switch when we're still swapping alt weap, to prevent animation breaking
if (cg.snap->ps.weaponstate == WEAPON_RAISING || cg.snap->ps.weaponstate == WEAPON_DROPPING)
{
if (GetWeaponTableData(cg.weaponSelect)->isRiflenade
|| GetWeaponTableData(cg.weaponSelect)->isSilencedPistol
|| GetWeaponTableData(cg.weaponSelect)->isAkimbo
|| GetWeaponTableData(cg.weaponSelect)->isSetWeapon
|| GetWeaponTableData(cg.weaponSelect)->isScoped)
{
return;
}

if (GetWeaponTableData(cg.switchbackWeapon)->isRiflenade
|| GetWeaponTableData(cg.switchbackWeapon)->isSilencedPistol
|| GetWeaponTableData(cg.switchbackWeapon)->isAkimbo
|| GetWeaponTableData(cg.switchbackWeapon)->isSetWeapon
|| GetWeaponTableData(cg.switchbackWeapon)->isScoped)
{
return;
}
}

if (CG_WeaponSelectable(cg.switchbackWeapon))
{
CG_FinishWeaponChange(cg.weaponSelect, cg.switchbackWeapon);
Expand Down Expand Up @@ -5570,13 +5552,13 @@ void CG_WaterRipple(qhandle_t shader, vec3_t loc, vec3_t dir, int size, int life
*/
void CG_MissileHitWall(int weapon, int missileEffect, vec3_t origin, vec3_t dir, int surfFlags) // modified to send missilehitwall surface parameters
{
qhandle_t mod = 0, mark = 0, shader = 0;
sfxHandle_t sfx = 0, sfx2 = 0;
qhandle_t mod = 0, mark = 0, shader = 0;
sfxHandle_t sfx = 0, sfx2 = 0;
qboolean isSprite = qfalse;
int duration = 600, i, j, markDuration = -1, volume = 127; // keep -1 markDuration for temporary marks
trace_t trace;
vec3_t lightColor = { 1, 1, 0 }, tmpv, tmpv2, sprOrg, sprVel;
float radius = 32, light = 0, sfx2range = 0;
float radius = 32, light = 0, sfx2range = 0;
vec4_t projection;

if (surfFlags & SURF_SKY)
Expand Down
4 changes: 2 additions & 2 deletions src/game/bg_pmove.c
Original file line number Diff line number Diff line change
Expand Up @@ -3453,8 +3453,8 @@ static void PM_Weapon(void)
{
if (pm->ps->weapon != pm->cmd.weapon)
{
// don't change weapon while unmounting alt weapon
if ((GetWeaponTableData(pm->ps->weapon)->isMG || GetWeaponTableData(pm->ps->weapon)->isMortar || GetWeaponTableData(pm->ps->weapon)->isMortarSet || GetWeaponTableData(pm->ps->weapon)->isRifle || GetWeaponTableData(pm->ps->weapon)->isSilencedPistol) && pm->ps->weaponTime > 250)
// don't change weapon while mounting/unmounting alt weapon
if (GetWeaponTableData(pm->ps->weapon)->weapAlts && pm->ps->weaponTime > 250)
{
return;
}
Expand Down

0 comments on commit 1b5aecc

Please sign in to comment.