Quadravol reload functionality.
This commit is contained in:
parent
ad51db971b
commit
311b06f2d6
6 changed files with 122 additions and 8 deletions
|
|
@ -59,6 +59,7 @@ Class Quadravol : SWWMWeapon
|
|||
|
||||
override bool CheckAmmo( int firemode, bool autoswitch, bool requireammo, int ammocount )
|
||||
{
|
||||
if ( sv_infiniteammo || Owner.FindInventory('PowerInfiniteAmmo',true) ) return true;
|
||||
if ( (firemode == PrimaryFire) || (firemode == EitherFire) )
|
||||
{
|
||||
if ( (chargelevel > 0) || (chambered && !charged) || (clipcount > 0) || (Ammo1.Amount > 0) ) return true;
|
||||
|
|
@ -88,6 +89,21 @@ Class Quadravol : SWWMWeapon
|
|||
}
|
||||
}
|
||||
|
||||
action void A_LoadOverlay()
|
||||
{
|
||||
A_StartSound("demolitionist/handsdown",CHAN_WEAPON,CHANF_OVERLAP,.8);
|
||||
A_ChangeModel("",2,"","",5,"models","QuadCell.png",CMDL_USESURFACESKIN,-1);
|
||||
A_Overlay(PSP_WEAPON+1,"LoadOverlay");
|
||||
}
|
||||
|
||||
action void A_Load()
|
||||
{
|
||||
A_StartSound("demolitionist/handsup",CHAN_WEAPON,CHANF_OVERLAP,.3);
|
||||
invoker.clipcount = min(invoker.default.clipcount,invoker.clipcount+1);
|
||||
if ( !sv_infiniteammo && !FindInventory('PowerInfiniteAmmo',true) )
|
||||
invoker.Ammo1.Amount = max(0,invoker.Ammo1.Amount-1);
|
||||
}
|
||||
|
||||
action bool A_Fill()
|
||||
{
|
||||
if ( !invoker.chambered || invoker.charged || (invoker.chargelevel >= 5) ) return false;
|
||||
|
|
@ -98,8 +114,31 @@ Class Quadravol : SWWMWeapon
|
|||
|
||||
action void A_DropCasing()
|
||||
{
|
||||
if ( invoker.wascharged ) Console.Printf("\cg// TODO - Drop Casing\c-");
|
||||
else Console.Printf("\cg// TODO - Drop Ammo\c-");
|
||||
Vector3 x, y, z;
|
||||
[x, y, z] = swwm_CoordUtil.GetAxes(pitch,angle,roll);
|
||||
Vector3 origin = level.Vec3Offset(Vec2OffsetZ(0,0,player.viewz),-8*x+8*y-16*z);
|
||||
if ( invoker.wascharged )
|
||||
{
|
||||
Console.Printf("\cg// TODO - Drop Casing\c-");
|
||||
return;
|
||||
}
|
||||
if ( invoker.Ammo1.Amount >= invoker.Ammo1.MaxAmount )
|
||||
{
|
||||
let a = Inventory(Spawn("QuadravolAmmo",origin));
|
||||
a.bDROPPED = true;
|
||||
a.DropTime = 30;
|
||||
a.bSpecial = a.bSolid = false;
|
||||
a.Angle = Angle+190;
|
||||
a.VelFromAngle(5.);
|
||||
a.Vel.Z = -1.;
|
||||
a.Vel += Vel;
|
||||
a.bNoGravity = false;
|
||||
a.ClearCounters();
|
||||
a.OnDrop(self);
|
||||
a.vel += (RotateVector((FRandom[Junk](-1.5,.5),FRandom[Junk](-1.5,1.5)),a.angle),FRandom[Junk](-1.5,1.5));
|
||||
return;
|
||||
}
|
||||
invoker.Ammo1.Amount++;
|
||||
}
|
||||
|
||||
Default
|
||||
|
|
@ -139,11 +178,23 @@ Class Quadravol : SWWMWeapon
|
|||
XZW2 A 1
|
||||
{
|
||||
A_Fill(); // just in case
|
||||
A_WeaponReady();
|
||||
int flg = WRF_ALLOWUSER1|WRF_ALLOWZOOM;
|
||||
if ( invoker.clipcount < invoker.default.clipcount ) flg |= WRF_ALLOWRELOAD;
|
||||
if ( (invoker.chargelevel <= 0) && (invoker.Ammo1.Amount <= 0) && (invoker.clipcount <= 0) && !sv_infiniteammo && !FindInventory('PowerInfiniteAmmo',true) ) flg |= WRF_NOPRIMARY;
|
||||
A_WeaponReady(flg);
|
||||
}
|
||||
Wait;
|
||||
Fire:
|
||||
XZW2 A 1;
|
||||
// TODO firing
|
||||
XZW2 A 1
|
||||
{
|
||||
if ( invoker.chargelevel <= 0 )
|
||||
{
|
||||
if ( invoker.clipcount > 0 ) return ResolveState("AltFire");
|
||||
return ResolveState("Reload");
|
||||
}
|
||||
return ResolveState(null);
|
||||
}
|
||||
Goto Ready;
|
||||
AltFire:
|
||||
XZW2 A 2;
|
||||
|
|
@ -155,7 +206,7 @@ Class Quadravol : SWWMWeapon
|
|||
XZW5 I 2;
|
||||
XZW5 J 2 A_Fill();
|
||||
XZW5 K 2;
|
||||
XZW5 L 3;
|
||||
XZW5 L 2;
|
||||
Goto Ready;
|
||||
DropCasing:
|
||||
XZWZ ABCDEF 2;
|
||||
|
|
@ -163,12 +214,38 @@ Class Quadravol : SWWMWeapon
|
|||
TNT1 A 1 A_DropCasing();
|
||||
Stop;
|
||||
Reload:
|
||||
XZW2 A 1;
|
||||
// TODO idle animation on full load
|
||||
XZW2 A 2 A_StartSound("quadshot/onehand",CHAN_WEAPON,CHANF_OVERLAP);
|
||||
XZW5 MNO 3;
|
||||
Goto ReloadHold;
|
||||
ReloadHold:
|
||||
XZW5 P 2 A_LoadOverlay();
|
||||
XZW5 QRS 2;
|
||||
XZW5 T 2 A_StartSound("quadshot/load",CHAN_WEAPON,CHANF_OVERLAP);
|
||||
XZW5 UV 2;
|
||||
XZW5 W 2 A_Load();
|
||||
XZW5 XYZ 2;
|
||||
XZW6 A 2;
|
||||
XZW5 P 2
|
||||
{
|
||||
if ( (invoker.clipcount >= invoker.default.clipcount) || ((invoker.Ammo1.Amount <= 0) && !sv_infiniteammo && !FindInventory('PowerInfiniteAmmo',true)) )
|
||||
return ResolveState(null);
|
||||
return A_JumpIf(player.cmd.buttons&BT_RELOAD,"ReloadHold");
|
||||
}
|
||||
XZW6 B 2 A_StartSound("quadshot/twohand",CHAN_WEAPON,CHANF_OVERLAP);
|
||||
XZW6 CDEF 2;
|
||||
XZW6 GHIJK 3;
|
||||
Goto Ready;
|
||||
LoadOverlay:
|
||||
XZWZ HIJKLMN 2;
|
||||
XZWZ O 0;
|
||||
Stop;
|
||||
Zoom:
|
||||
// TODO stance switch
|
||||
XZW2 A 1;
|
||||
Goto Ready;
|
||||
User1:
|
||||
// TODO melee
|
||||
XZW2 A 1;
|
||||
Goto Ready;
|
||||
Deselect:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue