Overhaul to how reloading works, not much else has happened.
Addition to HUD for showing clip counts (kinda cheap-looking, but still better than what Oldskool did). Charge for some weapons and loaded rockets for eightball also use the clipcount display, like in Doom Tournament. Small fixups for dual wielding logic.
This commit is contained in:
parent
fae4f6d50b
commit
225ffcc1e9
28 changed files with 307 additions and 123 deletions
|
|
@ -31,28 +31,49 @@ Class ImpalerAmmo2 : ImpalerAmmo
|
|||
}
|
||||
}
|
||||
|
||||
Class ImpalerCharge : Ammo
|
||||
{
|
||||
Default
|
||||
{
|
||||
Inventory.Amount 100;
|
||||
Inventory.MaxAmount 100;
|
||||
Ammo.BackpackAmount 0;
|
||||
Ammo.BackpackMaxAmount 100;
|
||||
+INVENTORY.IGNORESKILL;
|
||||
}
|
||||
}
|
||||
|
||||
Class Impaler : UnrealWeapon
|
||||
{
|
||||
int ClipCount;
|
||||
bool HasGem;
|
||||
Actor beam;
|
||||
|
||||
property ClipCount : ClipCount;
|
||||
|
||||
override int, int, bool, bool GetClipAmount()
|
||||
{
|
||||
return ClipCount, -1, (ClipCount<10), false;
|
||||
}
|
||||
action void A_ImpalerFire()
|
||||
{
|
||||
A_Overlay(-9999,"Null");
|
||||
A_Overlay(-3,"Null");
|
||||
A_Overlay(-2,"Null");
|
||||
A_PlaySound("impaler/fire",CHAN_WEAPON);
|
||||
invoker.HasGem = false;
|
||||
invoker.ClipCount = -1;
|
||||
}
|
||||
action void A_StartBeam()
|
||||
{
|
||||
}
|
||||
action void A_DrainAmmo()
|
||||
{
|
||||
}
|
||||
action void A_StopBeam()
|
||||
{
|
||||
}
|
||||
override void DoEffect()
|
||||
{
|
||||
Super.DoEffect();
|
||||
if ( Owner.player.ReadyWeapon != self ) return;
|
||||
if ( (Owner.waterlevel > 2) && !(level.maptime%5) )
|
||||
ClipCount = max(0,ClipCount-1);
|
||||
let psp = Owner.player.FindPSprite(-2);
|
||||
if ( psp ) psp.alpha = clamp(Ammo2.Amount/double(Ammo2.MaxAmount),0.,1.);
|
||||
if ( psp ) psp.alpha = clamp(ClipCount/double(default.ClipCount),0.,1.);
|
||||
}
|
||||
override bool CheckAmmo( int fireMode, bool autoSwitch, bool requireAmmo, int ammocount )
|
||||
{
|
||||
if ( ClipCount > 0 ) return true;
|
||||
return Super.CheckAmmo(firemode,autoswitch,requireammo,ammocount);
|
||||
}
|
||||
Default
|
||||
{
|
||||
|
|
@ -64,13 +85,11 @@ Class Impaler : UnrealWeapon
|
|||
Weapon.SlotPriority 0.9;
|
||||
Weapon.AmmoType "ImpalerAmmo";
|
||||
Weapon.AmmoUse 1;
|
||||
Weapon.AmmoType2 "ImpalerCharge";
|
||||
Weapon.AmmoType2 "ImpalerAmmo";
|
||||
Weapon.AmmoUse2 1;
|
||||
Weapon.AmmoGive1 60;
|
||||
Weapon.AmmoGive2 0;
|
||||
UTWeapon.DropAmmo 30;
|
||||
+WEAPON.AMMO_OPTIONAL;
|
||||
+WEAPON.ALT_AMMO_OPTIONAL;
|
||||
Weapon.AmmoGive 6;
|
||||
UTWeapon.DropAmmo 3;
|
||||
Impaler.ClipCount 30;
|
||||
}
|
||||
States
|
||||
{
|
||||
|
|
@ -84,15 +103,21 @@ Class Impaler : UnrealWeapon
|
|||
Wait;
|
||||
Ready:
|
||||
IMPS ABCDEF 3 A_WeaponReady(WRF_NOFIRE);
|
||||
IMPI A 0 A_JumpIfNoAmmo("Idle");
|
||||
Goto Reload;
|
||||
IMPI A 0
|
||||
{
|
||||
let weap = Weapon(invoker);
|
||||
if ( (invoker.ClipCount>=0) || (weap.Ammo1.Amount > 0) )
|
||||
return ResolveState("Reload");
|
||||
return ResolveState("Idle");
|
||||
}
|
||||
Goto Idle;
|
||||
Dummy:
|
||||
TNT1 A 1
|
||||
{
|
||||
let weap = Weapon(invoker);
|
||||
int flags = 0;
|
||||
if ( weap.Ammo1.Amount > 0 ) flags |= WRF_ALLOWRELOAD;
|
||||
if ( weap.Ammo2.Amount <= 0 ) flags |= WRF_NOSECONDARY;
|
||||
if ( invoker.HasGem && (invoker.ClipCount <= 0) ) flags |= WRF_NOSECONDARY;
|
||||
A_WeaponReady(flags);
|
||||
}
|
||||
Wait;
|
||||
|
|
@ -109,11 +134,7 @@ Class Impaler : UnrealWeapon
|
|||
{
|
||||
if ( !invoker.HasGem )
|
||||
return ResolveState("Melee");
|
||||
A_Overlay(-9999,"Null");
|
||||
A_Overlay(-3,"Null");
|
||||
A_Overlay(-2,"Null");
|
||||
A_PlaySound("impaler/fire",CHAN_WEAPON);
|
||||
invoker.HasGem = false;
|
||||
A_ImpalerFire();
|
||||
return ResolveState(null);
|
||||
}
|
||||
IMPF ABCDEFGHI 2;
|
||||
|
|
@ -151,6 +172,12 @@ Class Impaler : UnrealWeapon
|
|||
invoker.HasGem = !invoker.HasGem;
|
||||
if ( invoker.HasGem )
|
||||
{
|
||||
let weap = Weapon(invoker);
|
||||
if ( invoker.ClipCount < 0 )
|
||||
{
|
||||
weap.DepleteAmmo(false,true,1);
|
||||
invoker.ClipCount = invoker.default.ClipCount;
|
||||
}
|
||||
A_Overlay(-3,"GemUp");
|
||||
A_Overlay(-2,"ZapUp");
|
||||
A_OverlayFlags(-2,PSPF_RenderStyle|PSPF_Alpha,true);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue