Mortal Rifle idle and melee added.

This commit is contained in:
Mari the Deer 2022-09-11 15:05:20 +02:00
commit d0805c2760
3 changed files with 109 additions and 18 deletions

View file

@ -163,7 +163,7 @@ extend Class MisterRifle
for ( int i=0; i<clipcount; i++ )
Screen.DrawTexture(BulletTex[0],false,bx-((i%2)?12:13),(by-24)+(2*(i/2))+(i%2),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true);
if ( gchambered ) Screen.DrawTexture(BulletTex[1+gfired],false,bx-22,by-10,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_ColorOverlay,gfired?0x80000000:0x00000000);
String str = "THIS WEAPON IS NOT YET FUNCTIONAL";
String str = "THIS WEAPON IS NOT YET FULLY IMPLEMENTED";
Screen.DrawText(NewSmallFont,Font.CR_RED,(Screen.GetWidth()-NewSmallFont.StringWidth(str)*CleanXFac_1)/2,Screen.GetHeight()-(NewSmallFont.GetHeight()*CleanYFac_1+clamp(swwm_hudmargin,0,20)*hs),str,DTA_CleanNoMove_1,true);
}
}

View file

@ -7,7 +7,10 @@ Class MisterRifle : SWWMWeapon
bool chambered, fired;
bool gchambered, gfired;
bool boltlock, initialized;
bool waschambered, wasfired;
bool wasgchambered, wasgfired;
int firemode;
ui int lastfiremode;
String serialnum;
Property ClipCount : clipcount;
@ -29,6 +32,22 @@ Class MisterRifle : SWWMWeapon
Super.AttachToOwner(other);
}
override void HudTick()
{
Super.HudTick();
if ( lastfiremode && (lastfiremode != firemode+1) && (Owner.player == players[consoleplayer]) )
{
let bar = SWWMStatusBar(statusbar);
if ( bar )
{
bar.ntagstr = StringTable.Localize("$SWWM_MRMODE"..(firemode+1));
bar.ntagtic = level.totaltime;
bar.ntagcol = nametagcolor;
}
}
lastfiremode = firemode+1;
}
override bool ReportHUDAmmo()
{
return (chambered&&!fired)||(clipcount>0)||(Ammo1.Amount>0)||(gchambered&&!gfired)||(Ammo2.Amount>0);
@ -92,6 +111,41 @@ Class MisterRifle : SWWMWeapon
else origin.A_StartSound(UpSound,CHAN_WEAPON,CHANF_OVERLAP);
}
action void A_BoltBack( bool bCasing = false )
{
A_StartSound("mister/boltback",CHAN_WEAPON,CHANF_OVERLAP);
if ( bCasing )
{
invoker.waschambered = invoker.chambered;
invoker.wasfired = invoker.fired;
A_ChangeModel("",1,"","",8,"models",invoker.wasfired?"MortalRound_Used.png":"MortalRound.png",CMDL_USESURFACESKIN,-1);
}
invoker.chambered = invoker.fired = false;
}
action void A_BoltForward()
{
A_StartSound("mister/boltforward",CHAN_WEAPON,CHANF_OVERLAP);
if ( invoker.ClipCount > 0 )
{
invoker.clipcount--;
invoker.chambered = true;
invoker.fired = false;
}
}
action void A_DropCasing()
{
// TODO
A_ChangeModel("",1,"","",8,"models","",CMDL_USESURFACESKIN,-1);
}
action void A_FireSelect()
{
A_StartSound("mister/fireselect",CHAN_WEAPON,CHANF_OVERLAP);
invoker.firemode = (invoker.firemode+1)%4;
}
Default
{
Tag "$T_MORTALRIFLE";
@ -132,41 +186,78 @@ Class MisterRifle : SWWMWeapon
Goto Ready;
SelectCycle:
XZWI RSTUVWXYZ 2;
XZWJ A 2
{
A_StartSound("mister/boltback",CHAN_WEAPON,CHANF_OVERLAP);
invoker.chambered = invoker.fired = false;
}
XZWJ A 2 A_BoltBack();
XZWJ B 2;
XZWJ C 4;
XZWJ D 2
{
A_StartSound("mister/boltforward",CHAN_WEAPON,CHANF_OVERLAP);
invoker.clipcount--;
invoker.chambered = true;
A_StartSound("mister/meleeend",CHAN_WEAPON,CHANF_OVERLAP);
A_BoltForward();
A_StartSound("mister/meleeend",CHAN_WEAPON,CHANF_OVERLAP,starttime:.15);
}
XZWJ EFG 2;
XZWJ HIJK 1;
XZWJ LMNO 2;
Goto Ready;
Ready:
XZW2 A 1 A_WeaponReady();
XZW2 A 1 A_WeaponReady(WRF_ALLOWRELOAD|WRF_ALLOWZOOM|WRF_ALLOWUSER1);
Wait;
Fire:
XZW2 A 1;
XZW2 A 2;
Goto Ready;
AltFire:
XZW2 A 1;
XZW2 A 2;
Goto Ready;
Reload:
XZW2 A 1;
XZW2 A 2 A_Jump(256,"Idle"); // for now, directly jump to idle until reloading is implemented
Goto Ready;
Idle:
XZW2 A 2
{
A_StartSound("mister/deselect",CHAN_WEAPON,CHANF_OVERLAP);
A_PlayerCheckGun();
}
XZW7 JKLMNO 2;
XZW7 PQR 3;
XZW7 STU 4;
XZW7 V 2 A_StartSound("mister/meleestart",CHAN_WEAPON,CHANF_OVERLAP);
XZW7 WXY 2;
XZW7 Z 3;
XZW8 AB 3;
XZW8 CDEF 4;
XZW8 G 2 A_StartSound("mister/meleeend",CHAN_WEAPON,CHANF_OVERLAP,starttime:.2);
XZW8 HIJK 2;
XZW8 L 3;
Goto Ready;
Zoom:
XZW2 A 1;
XZW2 A 2 A_StartSound("mister/meleestart",CHAN_WEAPON,CHANF_OVERLAP);
XZW6 PQRSTUVW 2;
XZW6 X 2 A_FireSelect();
XZW6 YZ 2;
XZW7 A 2;
XZW7 B 2 A_JumpIf(player.cmd.buttons&BT_ZOOM,"ReZoom");
XZW7 CD 2;
XZW7 E 2 A_StartSound("mister/meleeend",CHAN_WEAPON,CHANF_OVERLAP,starttime:.35);
XZW7 FGHI 2;
Goto Ready;
ReZoom:
XZW7 B 4; // smoother tween
Goto Zoom+6;
User1:
XZW2 A 1;
XZW2 A 2 A_StartSound("mister/meleestart",CHAN_WEAPON,CHANF_OVERLAP);
XZW8 MN 2;
XZW8 O 2
{
A_StartSound("demolitionist/wswing",CHAN_WEAPON,CHANF_OVERLAP);
A_PlayerMelee();
}
XZW8 PQ 2;
XZW8 R 1;
XZW8 S 1 A_Parry(8);
XZW8 T 1;
XZW8 U 1 A_Melee(50,"demolitionist/whitm",1.1,1.2,1.2);
XZW8 VWXYZ 2;
XZW9 A 2 A_StartSound("mister/meleeend",CHAN_WEAPON,CHANF_OVERLAP);
XZW9 BCDEFGHIJ 2;
Goto Ready;
Deselect:
XZW2 A 2 A_StartSound("mister/deselect",CHAN_WEAPON,CHANF_OVERLAP);