Rejoice, "hold to reload" is now optional and disabled by default.

This commit is contained in:
Mari the Deer 2025-03-16 20:21:09 +01:00
commit 13ed4dee44
8 changed files with 52 additions and 5 deletions

View file

@ -83,6 +83,7 @@ nosave int swwm_hudscale1 = 0; // force the "one minus" scale of the HUD (used
nosave int swwm_hudscale2 = 0; // force the "two minus" scale of the HUD (used by interest points)
server bool swwm_altclear = false; // use an alternate, less graphically demanding "All Clear" effect
user bool swwm_analogmove = false; // for gamepad users, player movement is adapted for analog sticks
user bool swwm_holdreload = false; // hold the reload key to top up hand-loaded weapons, otherwise tap to start then tap again to stop
// minimap settings
nosave bool swwm_mm_enable = true; // show a minimap on the top right corner of the hud

View file

@ -193,6 +193,7 @@ SWWM_HS_AUTOL = "Auto Loose";
SWWM_HS_AUTOT = "Auto Tight";
SWWM_ALTCLEAR = "Alternate 100% FX";
SWWM_ANALOGMOVE = "Analog Movement";
SWWM_HOLDRELOAD = "Hold To Reload";
SWWM_MM_ENABLE = "Show Minimap";
SWWM_MM_MISSILES = "Projectiles In Minimap";
SWWM_MM_USECANVAS = "Fixed Scale Minimap";
@ -285,6 +286,7 @@ TOOLTIP_SWWM_HUDSCALE1 = "If higher than zero, manually set the scale of Healthb
TOOLTIP_SWWM_HUDSCALE2 = "If higher than zero, manually set the scale of Interest Points. Usually, this is two less than the primary HUD scale.";
TOOLTIP_SWWM_ALTCLEAR = "Use an alternate, less visually intense effect for getting 100% completion on a level.";
TOOLTIP_SWWM_ANALOGMOVE = "For gamepad users, this is a must. For keyboard and mouse users, this should be disabled.";
TOOLTIP_SWWM_HOLDRELOAD = "If enabled, you must keep the reload button held load multiple rounds in the Wallbuster, Quadravol and Sparkster Rifle. Some people actually like it that way.";
TOOLTIP_SWWMACHIEVEMENTMENU = "View your achievements.";
TOOLTIP_SWWM_MM_ENABLE = "Displays a minimap on the top right corner of the screen.";
TOOLTIP_SWWM_MM_MISSILES = "Displays projectiles in the minimap. Can be toggled if this clutters too much.";

View file

@ -187,6 +187,7 @@ SWWM_HS_AUTOL = "Auto. Holgado";
SWWM_HS_AUTOT = "Auto. Ceñido";
SWWM_ALTCLEAR = "Efecto Alternativo de 100%";
SWWM_ANALOGMOVE = "Movimiento Analógico";
SWWM_HOLDRELOAD = "Mantener Para Recarga";
SWWM_MM_ENABLE = "Mostrar Minimapa";
SWWM_MM_MISSILES = "Proyectiles en Minimapa";
SWWM_MM_USECANVAS = "Minimapa a Escala Fija";
@ -280,6 +281,7 @@ TOOLTIP_SWWM_HUDSCALE1 = "Si es mayor que cero, especifica manualmente la escala
TOOLTIP_SWWM_HUDSCALE2 = "Si es mayor que cero, especifica manualmente la escala de los Puntos de Interés. Normalmente, es igual a tres menos que la escala primaria del HUD.";
TOOLTIP_SWWM_ALTCLEAR = "Usa un efecto alternativo de menor intensidad visual al completar un nivel al 100%.";
TOOLTIP_SWWM_ANALOGMOVE = "Para usuarios de mando, esto es esencial. Para usuarios de teclado y ratón, esto debería estar desactivado.";
TOOLTIP_SWWM_HOLDRELOAD = "Al activar, debes mantener el boton de recarga para cargar múltiples cartuchos en la Wallbuster, Quadravol o el Rifle Sparkster. Algunas personas lo prefieren así.";
TOOLTIP_SWWMACHIEVEMENTMENU = "Revisa tus logros.";
TOOLTIP_SWWM_MM_ENABLE = "Muestra un minimapa en la esquina superior derecha de la pantalla.";
TOOLTIP_SWWM_MM_MISSILES = "Muestra proyectiles en el minimapa. Puede ser desactivado si causa problemas de visibilidad.";

View file

@ -1,3 +1,3 @@
[default]
SWWM_MODVER="\cyDEMOLITIONIST \cw1.3pre r1203 \cu(dom 16 mar 2025 16:14:34 CET)\c-";
SWWM_SHORTVER="\cw1.3pre r1203 \cu(2025-03-16 16:14:34)\c-";
SWWM_MODVER="\cyDEMOLITIONIST \cw1.3pre r1204 \cu(dom 16 mar 2025 20:21:10 CET)\c-";
SWWM_SHORTVER="\cw1.3pre r1204 \cu(2025-03-16 20:21:10)\c-";

View file

@ -205,6 +205,7 @@ OptionMenu "SWWMOptionMenu"
Option "$SWWM_USEWEAPONBAR", "swwm_useweaponbar", "YesNo"
Option "$SWWM_USETOPICKUP", "swwm_usetopickup", "YesNo"
Option "$SWWM_SINGLEFIRST", "swwm_singlefirst", "YesNo"
Option "$SWWM_HOLDRELOAD", "swwm_holdreload", "YesNo"
Option "$SWWM_COLLECTANIM", "swwm_collectanim", "YesNo"
Option "$SWWM_WEAPONTOOLTIPS", "swwm_weapontooltips", "YesNo"
SafeCommand "$SWWM_RESETTOOLTIPS", "event swwmresettooltips"

View file

@ -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);

View file

@ -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 )
{

View file

@ -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;