More Quadravol progress. Document charge levels in library.
This commit is contained in:
parent
4230b3b062
commit
c80c2f0e1b
14 changed files with 143 additions and 18 deletions
|
|
@ -5,7 +5,7 @@ Class Quadravol : SWWMWeapon
|
|||
{
|
||||
int clipcount;
|
||||
int chargelevel;
|
||||
bool chambered, charged, waschambered, wascharged;
|
||||
bool chambered, charged, waschambered, wascharged, fromfire;
|
||||
bool onehand;
|
||||
bool initialized;
|
||||
|
||||
|
|
@ -76,6 +76,37 @@ Class Quadravol : SWWMWeapon
|
|||
else origin.A_StartSound(UpSound,CHAN_WEAPON,CHANF_OVERLAP);
|
||||
}
|
||||
|
||||
action State A_QuadFire()
|
||||
{
|
||||
static const String BaseNum[] = {"one","two","three","four","five"};
|
||||
static const StateLabel FireStates[] = {"FireOne","FireTwo","FireThree","FireFour","FireFive"};
|
||||
int idx = clamp(invoker.chargelevel-1,0,4);
|
||||
A_StartSound("quadshot/fire"..BaseNum[idx],CHAN_WEAPON,CHANF_OVERLAP);
|
||||
A_PlayerFire();
|
||||
switch ( idx )
|
||||
{
|
||||
case 0:
|
||||
A_Log("\cg// TODO - Fire Level 1\c-");
|
||||
break;
|
||||
case 1:
|
||||
A_Log("\cg// TODO - Fire Level 2\c-");
|
||||
break;
|
||||
case 2:
|
||||
A_Log("\cg// TODO - Fire Level 3\c-");
|
||||
break;
|
||||
case 3:
|
||||
A_Log("\cg// TODO - Fire Level 4\c-");
|
||||
break;
|
||||
case 4:
|
||||
if ( !invoker.charged ) A_Log("\cg// TODO - Fire Level 5+\c-");
|
||||
else A_Log("\cg// TODO - Fire Level 5\c-");
|
||||
break;
|
||||
}
|
||||
invoker.chargelevel = 0;
|
||||
invoker.charged = true; // eat it up
|
||||
return ResolveState(FireStates[idx]);
|
||||
}
|
||||
|
||||
action void A_Eject()
|
||||
{
|
||||
invoker.waschambered = invoker.chambered;
|
||||
|
|
@ -182,7 +213,6 @@ Class Quadravol : SWWMWeapon
|
|||
Super.AttachToOwner(other);
|
||||
}
|
||||
|
||||
|
||||
Default
|
||||
{
|
||||
Tag "$T_QUADRAVOL";
|
||||
|
|
@ -220,23 +250,50 @@ Class Quadravol : SWWMWeapon
|
|||
XZW2 A 1
|
||||
{
|
||||
A_Fill(); // just in case
|
||||
int flg = WRF_ALLOWUSER1|WRF_ALLOWZOOM;
|
||||
if ( invoker.clipcount < invoker.default.clipcount ) flg |= WRF_ALLOWRELOAD;
|
||||
int flg = WRF_ALLOWRELOAD|WRF_ALLOWUSER1|WRF_ALLOWZOOM;
|
||||
if ( (invoker.chargelevel <= 0) && (invoker.Ammo1.Amount <= 0) && (invoker.clipcount <= 0) && !sv_infiniteammo && !FindInventory('PowerInfiniteAmmo',true) ) flg |= WRF_NOPRIMARY;
|
||||
invoker.fromfire = false;
|
||||
A_WeaponReady(flg);
|
||||
if ( player.cmd.buttons&BT_ATTACK )
|
||||
invoker.CheckAmmo(EitherFire,true);
|
||||
}
|
||||
Wait;
|
||||
Fire:
|
||||
// TODO firing
|
||||
XZW2 A 1
|
||||
{
|
||||
if ( invoker.chargelevel <= 0 )
|
||||
{
|
||||
if ( invoker.clipcount > 0 ) return ResolveState("AltFire");
|
||||
invoker.fromfire = true;
|
||||
return ResolveState("Reload");
|
||||
}
|
||||
return ResolveState(null);
|
||||
return A_QuadFire();
|
||||
}
|
||||
FireOne:
|
||||
XZW2 A 1;
|
||||
XZW3 OPQR 2;
|
||||
XZW3 STUV 3;
|
||||
Goto Ready;
|
||||
FireTwo:
|
||||
XZW2 A 1;
|
||||
XZW3 WXYZ 2;
|
||||
XZW4 ABCD 3;
|
||||
Goto Ready;
|
||||
FireThree:
|
||||
XZW2 A 1;
|
||||
XZW4 EFGH 2;
|
||||
XZW4 IJKL 3;
|
||||
Goto Ready;
|
||||
FireFour:
|
||||
XZW2 A 1;
|
||||
XZW4 MNOP 2;
|
||||
XZW4 QRST 3;
|
||||
Goto Ready;
|
||||
FireFive:
|
||||
XZW2 A 1;
|
||||
XZW4 UVWX 2;
|
||||
XZW4 YZ 3;
|
||||
XZW5 AB 3;
|
||||
Goto Ready;
|
||||
AltFire:
|
||||
XZW2 A 2 A_PlayerCheckGun();
|
||||
|
|
@ -256,8 +313,13 @@ Class Quadravol : SWWMWeapon
|
|||
TNT1 A 1 A_DropCasing();
|
||||
Stop;
|
||||
Reload:
|
||||
// TODO idle animation on full load
|
||||
XZW2 A 2 A_StartSound("quadshot/onehand",CHAN_WEAPON,CHANF_OVERLAP);
|
||||
XZW2 A 2
|
||||
{
|
||||
if ( (invoker.clipcount >= invoker.default.clipcount) || ((invoker.Ammo1.Amount <= 0) && !sv_infiniteammo && !FindInventory('PowerInfiniteAmmo',true)) )
|
||||
return ResolveState("Idle");
|
||||
A_StartSound("quadshot/onehand",CHAN_WEAPON,CHANF_OVERLAP);
|
||||
return ResolveState(null);
|
||||
}
|
||||
XZW5 MNO 3;
|
||||
Goto ReloadHold;
|
||||
ReloadHold:
|
||||
|
|
@ -272,6 +334,9 @@ Class Quadravol : SWWMWeapon
|
|||
{
|
||||
if ( (invoker.clipcount >= invoker.default.clipcount) || ((invoker.Ammo1.Amount <= 0) && !sv_infiniteammo && !FindInventory('PowerInfiniteAmmo',true)) )
|
||||
return ResolveState(null);
|
||||
if ( invoker.fromfire && (player.cmd.buttons&BT_ATTACK) )
|
||||
return ResolveState("ReloadHold");
|
||||
invoker.fromfire = false;
|
||||
return A_JumpIf(player.cmd.buttons&BT_RELOAD,"ReloadHold");
|
||||
}
|
||||
XZW6 B 2 A_StartSound("quadshot/twohand",CHAN_WEAPON,CHANF_OVERLAP);
|
||||
|
|
@ -282,18 +347,26 @@ Class Quadravol : SWWMWeapon
|
|||
XZWZ HIJKLMN 2;
|
||||
XZWZ O 0;
|
||||
Stop;
|
||||
Idle:
|
||||
// TODO idle
|
||||
XZW2 A 1 A_Log("\cg// TODO - Idle Animation\c-");
|
||||
XZW2 A 1 A_JumpIf(!(player.cmd.buttons&BT_RELOAD),"Ready");
|
||||
Wait;
|
||||
Zoom:
|
||||
// TODO stance switch
|
||||
XZW2 A 1;
|
||||
Goto Ready;
|
||||
XZW2 A 1 A_Log("\cg// TODO - Stance Switch\c-");
|
||||
XZW2 A 1 A_JumpIf(!(player.cmd.buttons&BT_ZOOM),"Ready");
|
||||
Wait;
|
||||
User1:
|
||||
// TODO melee
|
||||
XZW2 A 1;
|
||||
Goto Ready;
|
||||
XZW2 A 1 A_Log("\cg// TODO - Quick Melee\c-");
|
||||
XZW2 A 1 A_JumpIf(!(player.cmd.buttons&BT_USER1),"Ready");
|
||||
Wait;
|
||||
Deselect:
|
||||
XZW2 A 1 A_StartSound("quadshot/deselect",CHAN_WEAPON,CHANF_OVERLAP);
|
||||
XZW2 BCDEFGHIJKLMNOPQR 1;
|
||||
XZW2 R -1 A_FullLower();
|
||||
Stop;
|
||||
// TODO one-handed states
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -104,9 +104,7 @@ Class mkBloodSpray : Actor
|
|||
return;
|
||||
}
|
||||
if ( isFrozen() ) return;
|
||||
Vector3 setofs;
|
||||
setofs.xy = RotateVector(attachofs.xy,target.angle);
|
||||
setofs.z = attachofs.z;
|
||||
Vector3 setofs = SWWMUtility.RotateVector3(attachofs,target.angle);
|
||||
SetOrigin(level.Vec3Offset(target.pos,setofs),false);
|
||||
int sz = max(1,args[0]/2);
|
||||
double ang, pt;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue