Rejoice, "hold to reload" is now optional and disabled by default.
This commit is contained in:
parent
884ad51aa4
commit
13ed4dee44
8 changed files with 52 additions and 5 deletions
|
|
@ -12,6 +12,12 @@ Class Quadravol : SWWMWeapon
|
|||
|
||||
int wastecycle; // for easter egg
|
||||
|
||||
override void DoEffect()
|
||||
{
|
||||
Super.DoEffect();
|
||||
CheckStopReload('ReloadHold','LoadOverlay');
|
||||
}
|
||||
|
||||
override bool ReportHUDAmmo()
|
||||
{
|
||||
return (chargelevel>0)||(chambered&&!charged)||(clipcount>0)||(Ammo1.Amount > 0);
|
||||
|
|
@ -526,6 +532,7 @@ Class Quadravol : SWWMWeapon
|
|||
Reload:
|
||||
XZW2 A 2
|
||||
{
|
||||
invoker.stopreload = false;
|
||||
if ( (invoker.clipcount >= invoker.default.clipcount) || ((invoker.Ammo1.Amount <= 0) && !sv_infiniteammo && !FindInventory('PowerInfiniteAmmo',true)) )
|
||||
return invoker.onehand?ResolveState('Idle1H'):ResolveState('Idle');
|
||||
if ( invoker.onehand ) return ResolveState('Reload1H');
|
||||
|
|
@ -551,7 +558,9 @@ Class Quadravol : SWWMWeapon
|
|||
if ( invoker.fromfire && (player.cmd.buttons&BT_ATTACK) )
|
||||
return ResolveState('ReloadHold');
|
||||
invoker.fromfire = false;
|
||||
if ( player.cmd.buttons&BT_RELOAD ) return ResolveState('ReloadHold');
|
||||
bool holdreload = CVar.GetCVar('swwm_holdreload',player).GetBool();
|
||||
if ( (!holdreload && !invoker.stopreload) || (holdreload && (player.cmd.buttons&BT_RELOAD)) )
|
||||
return ResolveState('ReloadHold');
|
||||
return A_JumpIf(invoker.onehand,'ReloadEnd1H');
|
||||
}
|
||||
XZW6 B 2 A_StartSound("quadshot/twohand",CHAN_WEAPON,CHANF_OVERLAP);
|
||||
|
|
|
|||
|
|
@ -31,6 +31,8 @@ Class SWWMWeapon : Weapon abstract
|
|||
Vector3 bvdir;
|
||||
int bvtics, batics;
|
||||
|
||||
transient bool stopreload;
|
||||
|
||||
bool IsSwapWeapon( Inventory i ) const
|
||||
{
|
||||
if ( bNoSwapWeapon || (i.GetClass() == GetClass()) ) return false;
|
||||
|
|
@ -234,6 +236,32 @@ Class SWWMWeapon : Weapon abstract
|
|||
}
|
||||
}
|
||||
|
||||
// check if the player has tapped any of the weapon buttons (not just reload)
|
||||
// (used to cancel reloads when not in hold mode)
|
||||
private bool TapOutReload()
|
||||
{
|
||||
if ( !Owner || !Owner.player ) return false;
|
||||
bool rslt = (Owner.player.cmd.buttons&BT_RELOAD)&&!(Owner.player.oldbuttons&BT_RELOAD);
|
||||
rslt |= (Owner.player.cmd.buttons&BT_ATTACK)&&!(Owner.player.oldbuttons&BT_ATTACK);
|
||||
rslt |= (Owner.player.cmd.buttons&BT_ALTATTACK)&&!(Owner.player.oldbuttons&BT_ALTATTACK);
|
||||
rslt |= (Owner.player.cmd.buttons&BT_ZOOM)&&!(Owner.player.oldbuttons&BT_ZOOM);
|
||||
rslt |= (Owner.player.cmd.buttons&BT_USER1)&&!(Owner.player.oldbuttons&BT_USER1);
|
||||
return rslt;
|
||||
}
|
||||
// check for the button tap within two specific states
|
||||
// to be called inside DoEffect()
|
||||
protected void CheckStopReload( StateLabel first, StateLabel last )
|
||||
{
|
||||
if ( !stopreload && Owner && Owner.player && (Owner.player.ReadyWeapon == self) && !(CVar.GetCVar('swwm_holdreload',Owner.player).GetBool()) )
|
||||
{
|
||||
let firststate = FindState(first);
|
||||
let laststate = FindState(last);
|
||||
let psp = Owner.player.FindPSprite(PSP_WEAPON);
|
||||
if ( psp && psp.curstate && (firststate.DistanceTo(psp.curstate) > 0) && (laststate.DistanceTo(psp.curstate) < 0) )
|
||||
stopreload |= TapOutReload();
|
||||
}
|
||||
}
|
||||
|
||||
// subtracts given ammo from price, drops excess
|
||||
virtual bool PickupForAmmoSWWM( SWWMWeapon ownedWeapon )
|
||||
{
|
||||
|
|
|
|||
|
|
@ -11,6 +11,7 @@ Class Wallbuster : SWWMWeapon
|
|||
override void DoEffect()
|
||||
{
|
||||
Super.DoEffect();
|
||||
CheckStopReload('Detach','EndReload');
|
||||
// push back selection order if weapon is unloaded
|
||||
if ( !bInitialized )
|
||||
{
|
||||
|
|
@ -576,6 +577,7 @@ Class Wallbuster : SWWMWeapon
|
|||
Detach:
|
||||
XZW4 W 0
|
||||
{
|
||||
invoker.stopreload = false;
|
||||
int rnum = GetShellsToLoad();
|
||||
// if it's a full rotation, don't hand-spin
|
||||
if ( rnum > 20 ) return ResolveState(null);
|
||||
|
|
@ -650,8 +652,10 @@ Class Wallbuster : SWWMWeapon
|
|||
XZW6 C 2 A_LoadShell();
|
||||
XZW6 E 0
|
||||
{
|
||||
int rnum = (player.cmd.buttons&BT_RELOAD)?GetShellsToLoad():0;
|
||||
player.SetPSprite(-9999,null);
|
||||
int rnum = 0;
|
||||
bool holdreload = CVar.GetCVar('swwm_holdreload',player).GetBool();
|
||||
if ( (!holdreload && !invoker.stopreload) || (holdreload && (player.cmd.buttons&BT_RELOAD)) )
|
||||
rnum = GetShellsToLoad();
|
||||
return A_JumpIf(rnum,'AttachSpin');
|
||||
}
|
||||
Goto Attach;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue