Quadravol reload functionality.
This commit is contained in:
parent
ad51db971b
commit
311b06f2d6
6 changed files with 122 additions and 8 deletions
|
|
@ -1,3 +1,3 @@
|
|||
[default]
|
||||
SWWM_MODVER="\cyDEMOLITIONIST \cw1.3pre r330 \cu(Tue 16 Aug 21:31:38 CEST 2022)\c-";
|
||||
SWWM_SHORTVER="\cw1.3pre r330 \cu(2022-08-16 21:31:38)\c-";
|
||||
SWWM_MODVER="\cyDEMOLITIONIST \cw1.3pre r331 \cu(Tue 16 Aug 23:17:12 CEST 2022)\c-";
|
||||
SWWM_SHORTVER="\cw1.3pre r331 \cu(2022-08-16 23:17:12)\c-";
|
||||
|
|
|
|||
|
|
@ -30,6 +30,15 @@ Model "Quadravol"
|
|||
FrameIndex XZWZ E 2 91
|
||||
FrameIndex XZWZ F 2 92
|
||||
FrameIndex XZWZ G 2 93 // Drop
|
||||
// Load
|
||||
FrameIndex XZWZ H 2 100
|
||||
FrameIndex XZWZ I 2 101
|
||||
FrameIndex XZWZ J 2 102
|
||||
FrameIndex XZWZ K 2 103
|
||||
FrameIndex XZWZ L 2 104
|
||||
FrameIndex XZWZ M 2 105
|
||||
FrameIndex XZWZ N 2 106
|
||||
FrameIndex XZWZ O 2 107
|
||||
}
|
||||
|
||||
Model "Quadravol"
|
||||
|
|
@ -143,4 +152,32 @@ Model "Quadravol"
|
|||
FrameIndex XZW5 J 1 93 // Chamber
|
||||
FrameIndex XZW5 K 1 94
|
||||
FrameIndex XZW5 L 1 95
|
||||
// LoadStart
|
||||
FrameIndex XZW5 M 1 97
|
||||
FrameIndex XZW5 N 1 98
|
||||
FrameIndex XZW5 O 1 99
|
||||
// LoadLoop
|
||||
FrameIndex XZW5 P 1 100 // LoadOverlay
|
||||
FrameIndex XZW5 Q 1 101
|
||||
FrameIndex XZW5 R 1 102
|
||||
FrameIndex XZW5 S 1 103 // LoadSnd
|
||||
FrameIndex XZW5 T 1 104
|
||||
FrameIndex XZW5 U 1 105
|
||||
FrameIndex XZW5 V 1 106
|
||||
FrameIndex XZW5 W 1 107 // LoadCell
|
||||
FrameIndex XZW5 X 1 108
|
||||
FrameIndex XZW5 Y 1 109
|
||||
FrameIndex XZW5 Z 1 110
|
||||
FrameIndex XZW6 A 1 111
|
||||
// LoadEnd
|
||||
FrameIndex XZW6 B 1 113
|
||||
FrameIndex XZW6 C 1 114
|
||||
FrameIndex XZW6 D 1 115
|
||||
FrameIndex XZW6 E 1 116
|
||||
FrameIndex XZW6 F 1 117
|
||||
FrameIndex XZW6 G 1 118
|
||||
FrameIndex XZW6 H 1 119
|
||||
FrameIndex XZW6 I 1 120
|
||||
FrameIndex XZW6 J 1 121
|
||||
FrameIndex XZW6 K 1 122
|
||||
}
|
||||
|
|
|
|||
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
|
@ -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