1.0.3 release:

- Add option for vanilla style Power Shield to not drain over time (defaults to true).
 - Fix various weapons being able to fire after player dies while charging (Biorifle, Flamethrower).
 - Fix Minigun not firing bullets immediately at start of fire loop or on refire.
 - Fix Minigun playing unwind animation on death, this time for real.
 - Added interpolation to some Teleport Capsule states and made refire a bit quicker.
This commit is contained in:
Marisa the Magician 2019-10-29 13:32:11 +01:00
commit 8061ce28b2
9 changed files with 47 additions and 10 deletions

View file

@ -73,7 +73,7 @@ This mod requires GZDoom 4.2.3 or later, and runs on top of Doom Tournament.
## In progress ## In progress
- N/A, this is the 1.0.2 release. - N/A, this is the 1.0.3 release.
## Planned ## Planned

View file

@ -56,6 +56,11 @@ server bool sting_pshield = false; // p.shield absorbs damage instead of
// note that this will make it less // note that this will make it less
// useful as an invulnerability // useful as an invulnerability
// replacement // replacement
server bool sting_pshield2 = true; // p.shield does not drain over time
// when in vanilla mode, this was in
// fact a bug that never got fixed, but
// everyone is used to it so I made it
// toggleable
server bool sting_nopstart = false; // players start only with the server bool sting_nopstart = false; // players start only with the
// dispersion pistol, otherwise they // dispersion pistol, otherwise they
// also get an automag for the sake // also get an automag for the sake

View file

@ -242,6 +242,7 @@ STING_PROTODUAL = "Protomags";
STING_UOPTS = "Compatibility options"; STING_UOPTS = "Compatibility options";
STING_DPISTOL = "Dispersion Pistol altfire isn't upgraded"; STING_DPISTOL = "Dispersion Pistol altfire isn't upgraded";
STING_PSHIELD = "Power Shield works like in Unreal"; STING_PSHIELD = "Power Shield works like in Unreal";
STING_PSHIELD2 = "Unreal style Power Shield does not drain over time";
STING_NOPSTART = "Players don't start up with an Automag"; STING_NOPSTART = "Players don't start up with an Automag";
STING_OLSMP = "Enable SMP 7243 from Oldskool Amp'd"; STING_OLSMP = "Enable SMP 7243 from Oldskool Amp'd";
STING_MSENTRY = "Enable new Minigun Sentry"; STING_MSENTRY = "Enable new Minigun Sentry";
@ -487,6 +488,7 @@ STING_PROTODUAL = "Protoarmas";
STING_UOPTS = "Opciones de compatibilidad"; STING_UOPTS = "Opciones de compatibilidad";
STING_DPISTOL = "El fuego alternativo de la Pistola de Dispersión no es mejorado"; STING_DPISTOL = "El fuego alternativo de la Pistola de Dispersión no es mejorado";
STING_PSHIELD = "El Escudo de Fuerza funciona como en Unreal"; STING_PSHIELD = "El Escudo de Fuerza funciona como en Unreal";
STING_PSHIELD2 = "El Escudo de Fuerza en modo Unreal no se gasta con el tiempo";
STING_NOPSTART = "Los jugadores no empiezan la partida con un Automag"; STING_NOPSTART = "Los jugadores no empiezan la partida con un Automag";
STING_OLSMP = "Habilitar SMP 7243 de Oldskool Amp'd"; STING_OLSMP = "Habilitar SMP 7243 de Oldskool Amp'd";
STING_MSENTRY = "Habilitar nueva Torreta"; STING_MSENTRY = "Habilitar nueva Torreta";

View file

@ -42,6 +42,7 @@ OptionMenu "UnrealOptionMenu"
StaticText "$STING_UOPTS", "Gold" StaticText "$STING_UOPTS", "Gold"
Option "$STING_DPISTOL", "sting_dpistol", "YesNo" Option "$STING_DPISTOL", "sting_dpistol", "YesNo"
Option "$STING_PSHIELD", "sting_pshield", "YesNo" Option "$STING_PSHIELD", "sting_pshield", "YesNo"
Option "$STING_PSHIELD2", "sting_pshield2", "YesNo", "sting_pshield"
Option "$STING_NOPSTART", "sting_nopstart", "YesNo" Option "$STING_NOPSTART", "sting_nopstart", "YesNo"
Option "$STING_OLSMP", "sting_olsmp", "YesNo" Option "$STING_OLSMP", "sting_olsmp", "YesNo"
Option "$STING_MSENTRY", "sting_msentry", "YesNo" Option "$STING_MSENTRY", "sting_msentry", "YesNo"

View file

@ -858,10 +858,15 @@ Class UFlamethrower : UnrealWeapon
} }
action void A_FireFlame() action void A_FireFlame()
{ {
if ( Health <= 0 )
{
player.SetPSprite(-9999,ResolveState("Null"));
return;
}
let weap = Weapon(invoker); let weap = Weapon(invoker);
if ( (weap.Ammo1.Amount <= 0) || !(player.cmd.buttons&BT_ATTACK) ) if ( (weap.Ammo1.Amount <= 0) || !(player.cmd.buttons&BT_ATTACK) )
{ {
player.SetPSPrite(PSP_WEAPON,invoker.FindState("Release")); player.SetPSprite(PSP_WEAPON,invoker.FindState("Release"));
return; return;
} }
invoker.count += 10./TICRATE; invoker.count += 10./TICRATE;
@ -921,6 +926,12 @@ Class UFlamethrower : UnrealWeapon
} }
action void A_ChargeUp() action void A_ChargeUp()
{ {
if ( Health <= 0 )
{
invoker.bCharging = false;
player.SetPSprite(-9999,ResolveState("Null"));
return;
}
let weap = Weapon(invoker); let weap = Weapon(invoker);
if ( (invoker.chargesize < 4.9) && (weap.Ammo1.Amount > 0) ) if ( (invoker.chargesize < 4.9) && (weap.Ammo1.Amount > 0) )
{ {

View file

@ -209,6 +209,7 @@ Class PowerShield : UnrealArmor
override void Tick() override void Tick()
{ {
Super.Tick(); Super.Tick();
if ( sting_pshield && sting_pshield2 ) return;
if ( !Owner || !Owner.player || (amount <= 0) ) return; if ( !Owner || !Owner.player || (amount <= 0) ) return;
if ( gothit ) if ( gothit )
{ {

View file

@ -640,6 +640,12 @@ Class UBioRifle : UnrealWeapon
} }
action void A_ChargeUp() action void A_ChargeUp()
{ {
if ( Health <= 0 )
{
invoker.bCharging = false;
player.SetPSprite(-9999,ResolveState("Null"));
return;
}
let weap = Weapon(invoker); let weap = Weapon(invoker);
if ( (invoker.chargesize < 4.9) && (weap.Ammo1.Amount > 0) ) if ( (invoker.chargesize < 4.9) && (weap.Ammo1.Amount > 0) )
{ {

View file

@ -143,6 +143,7 @@ Class UMinigun : UnrealWeapon
return; return;
} }
weap.bAltFire = !!(player.cmd.buttons&BT_ALTATTACK); weap.bAltFire = !!(player.cmd.buttons&BT_ALTATTACK);
invoker.bcnt = 5;
A_Refire("Hold"); A_Refire("Hold");
} }
@ -183,11 +184,12 @@ Class UMinigun : UnrealWeapon
FireDummy: FireDummy:
TNT1 A 1 TNT1 A 1
{ {
if ( Health <= 0 ) return ResolveState("Null");
let weap = Weapon(invoker); let weap = Weapon(invoker);
if ( !(player.cmd.buttons&(BT_ATTACK|BT_ALTATTACK)) || (weap.Ammo1.Amount <= 0) ) if ( !(player.cmd.buttons&(BT_ATTACK|BT_ALTATTACK)) || (weap.Ammo1.Amount <= 0) )
{ {
A_StopSound(CHAN_WEAPON); A_StopSound(CHAN_WEAPON);
if ( Health > 0 ) player.SetPSprite(PSP_WEAPON,invoker.FindState("Release")); player.SetPSprite(PSP_WEAPON,invoker.FindState("Release"));
return ResolveState("Null"); return ResolveState("Null");
} }
return ResolveState(null); return ResolveState(null);
@ -197,7 +199,11 @@ Class UMinigun : UnrealWeapon
AltFire: AltFire:
MGNW A 0 A_PlaySound("umini/wind",CHAN_WEAPON,Dampener.Active(self)?.1:1.); MGNW A 0 A_PlaySound("umini/wind",CHAN_WEAPON,Dampener.Active(self)?.1:1.);
MGNW ABCDEFGHIJKLMNO 1; MGNW ABCDEFGHIJKLMNO 1;
MGNW O 0 A_Refire(1); MGNW O 0
{
invoker.bcnt = 5;
A_Refire(1);
}
Goto Release; Goto Release;
Hold: Hold:
MGNF A 0 MGNF A 0

View file

@ -291,26 +291,31 @@ Class UTranslocator : UnrealWeapon
TLCT ABCDEFGHI 5; TLCT ABCDEFGHI 5;
Goto Idle+1; Goto Idle+1;
Fire: Fire:
TLCF A 0 A_Overlay(-9999,"Null"); #### # 0 A_Overlay(-9999,"Null");
TLCF A 0 A_JumpIf(invoker.module,"Recall"); #### # 0 A_JumpIf(invoker.module,"Recall");
#### # 2;
TLCF ABCDEF 2; TLCF ABCDEF 2;
TLCF G 0 A_ThrowModule(); TLCF G 0 A_ThrowModule();
TLCF GHIJKLMNOPQRSTUVWXY 2; TLCF GHIJKLMNOPQRSTUV 2;
TLCF WXY 2 A_WeaponReady();
Goto Idle; Goto Idle;
Recall: Recall:
#### # 2;
TLCR ABCDEF 2; TLCR ABCDEF 2;
TLCR G 0 A_ReturnModule(); TLCR G 0 A_ReturnModule();
TLCR GHIJKLM 2; TLCR GHIJKLM 2;
Goto Idle; Goto Idle;
AltFire: AltFire:
TLCA A 0 A_Overlay(-9999,"Null"); #### # 0 A_Overlay(-9999,"Null");
TLCA A 0 A_JumpIf(!invoker.module,"Reload"); #### # 0 A_JumpIf(!invoker.module,"Reload");
#### # 2;
TLCA ABCDE 2; TLCA ABCDE 2;
TLCA A 0 A_Translocate(); TLCA A 0 A_Translocate();
TLCA FGHIJKL 2; TLCA FGHIJKL 2;
Goto Idle; Goto Idle;
Reload: Reload:
TLCB A 0 A_Overlay(-9999,"Null"); #### # 0 A_Overlay(-9999,"Null");
#### # 2;
TLCB ABCDEFGHIJKLMNOPQRSTUVWXYZ[\] 2; TLCB ABCDEFGHIJKLMNOPQRSTUVWXYZ[\] 2;
TLB2 AB 2; TLB2 AB 2;
Goto Idle; Goto Idle;