0.9.8b release:
- Crouched gesture animations. - Proper crouch-jumping (now always enabled). - New fanart by Endie. - Swimming animations (also used by flight). - Hexen-style startup screen. - More model cleanup. - Prevent Wallbuster reload menu from opening on intermissions. - Intermissions now only handle fire and use for advance, to prevent some lil' accidents. - Holding altfire on intermissions hides ui elements, so the bg is fully visible. - Begin writing lore for collectibles (these will come in a couple updates). - Fix fuzz shader being affected by texture upscaling. - Enemies with >=1000 starting hp also can drop golden shells. - Explodium Gun no longer shows with a "1x" prefix on menus when single. - Player animation transition tweaks.
This commit is contained in:
parent
5e60973d1b
commit
65db7e8367
73 changed files with 561 additions and 76 deletions
|
|
@ -54,7 +54,7 @@ Class WallbusterReloadMenu : GenericMenu
|
|||
if ( !pauseme ) pauseme = CVar.GetCVar('swwm_cbtpause',players[consoleplayer]);
|
||||
if ( pauseme.GetBool() ) menuactive = Menu.On;
|
||||
else menuactive = Menu.OnNoPause;
|
||||
if ( (players[consoleplayer].Health > 0) && (players[consoleplayer].ReadyWeapon is 'Wallbuster') ) return;
|
||||
if ( (players[consoleplayer].Health > 0) && (players[consoleplayer].ReadyWeapon is 'Wallbuster') && (gamestate == GS_LEVEL) ) return;
|
||||
MenuEvent(MKEY_BACK,false);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -80,7 +80,6 @@ Class FroggyChair : SWWMCollectable
|
|||
}
|
||||
|
||||
// The other collectables, which will be implemented eventually
|
||||
/*
|
||||
Class MMiaSRVol1 : SWWMCollectable
|
||||
{
|
||||
Default
|
||||
|
|
@ -328,7 +327,6 @@ Class KirinManga : SWWMCollectable
|
|||
Stamina 1600;
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
// yay!
|
||||
Class FancyConfetti : Actor
|
||||
|
|
|
|||
|
|
@ -835,7 +835,7 @@ Class SWWMHandler : EventHandler
|
|||
|
||||
override void WorldThingDied( WorldEvent e )
|
||||
{
|
||||
if ( e.Thing.default.bBOSS && !Random[GoldDrop](0,2) )
|
||||
if ( ((e.Thing.default.bBOSS) || (e.Thing.default.Health >= 1000)) && !Random[GoldDrop](0,2) )
|
||||
{
|
||||
let g = Actor.Spawn("GoldShell",e.Thing.Vec3Offset(0,0,e.Thing.Height/2));
|
||||
double ang = FRandom[SpareShells](0,360);
|
||||
|
|
@ -1202,6 +1202,8 @@ Class SWWMHandler : EventHandler
|
|||
}
|
||||
}
|
||||
}
|
||||
if ( (kcode > 2) || (lcode > 2) )
|
||||
return true; // eat keypresses from this point
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -13,6 +13,7 @@ Class SWWMStatScreen : StatusScreen abstract
|
|||
transient CVar intertype, lang, origmus;
|
||||
double hs, hs2;
|
||||
Vector2 ss, ss2, origin, origin2;
|
||||
double bgfade;
|
||||
|
||||
// returns MPlus if we're playing in Japanese, otherwise returns the requested font
|
||||
Font LangFont( Font req )
|
||||
|
|
@ -247,6 +248,75 @@ Class SWWMStatScreen : StatusScreen abstract
|
|||
drawNoState();
|
||||
break;
|
||||
}
|
||||
if ( bgfade <= 0. ) return;
|
||||
// redraw bgs on top, hiding the rest of the ui
|
||||
if ( intertype.GetInt() == 1 )
|
||||
{
|
||||
double ar = Screen.GetAspectRatio();
|
||||
Vector2 tsize = TexMan.GetScaledSize(arttex);
|
||||
double sar = tsize.x/tsize.y;
|
||||
Vector2 vsize;
|
||||
if ( sar > ar ) vsize = (tsize.y*ar,tsize.y);
|
||||
else if ( sar < ar ) vsize = (tsize.x,tsize.x/ar);
|
||||
else vsize = tsize;
|
||||
Screen.DrawTexture(arttex,false,(vsize.x-tsize.x)/2,(vsize.y-tsize.y)/2,DTA_VirtualWidthF,vsize.x,DTA_VirtualHeightF,vsize.y,DTA_KeepRatio,true,DTA_Alpha,bgfade);
|
||||
}
|
||||
/*else if ( intertype.GetInt() == 2 )
|
||||
{
|
||||
// TBD when there's art
|
||||
}*/
|
||||
else
|
||||
{
|
||||
double ar = Screen.GetAspectRatio();
|
||||
Vector2 tsize = TexMan.GetScaledSize(bgtex);
|
||||
double sar = tsize.x/tsize.y;
|
||||
Vector2 vsize;
|
||||
if ( sar > ar ) vsize = (tsize.y*ar,tsize.y);
|
||||
else if ( sar < ar ) vsize = (tsize.x,tsize.x/ar);
|
||||
else vsize = tsize;
|
||||
Screen.DrawTexture(bgtex,false,(vsize.x-tsize.x)/2,(vsize.y-tsize.y)/2,DTA_VirtualWidthF,vsize.x,DTA_VirtualHeightF,vsize.y,DTA_KeepRatio,true,DTA_Alpha,bgfade);
|
||||
}
|
||||
}
|
||||
protected void checkForAccelerateNew( void )
|
||||
{
|
||||
// check for button presses to skip delays (but only recognize fire/use buttons)
|
||||
for ( int i=0; i < MAXPLAYERS; i++ )
|
||||
{
|
||||
if ( !playeringame[i] ) continue;
|
||||
{
|
||||
PlayerInfo p = players[i];
|
||||
if ( (p.cmd.buttons^p.oldbuttons) && ((p.cmd.buttons&p.oldbuttons) == p.oldbuttons) && !p.Bot && (p.cmd.buttons&(BT_ATTACK|BT_USE)) )
|
||||
{
|
||||
acceleratestage = 1;
|
||||
playerready[i] = true;
|
||||
}
|
||||
p.oldbuttons = p.buttons;
|
||||
}
|
||||
}
|
||||
}
|
||||
override void Ticker( void )
|
||||
{
|
||||
bcnt++;
|
||||
if ( bcnt == 1 ) StartMusic();
|
||||
checkForAccelerateNew();
|
||||
switch (CurState)
|
||||
{
|
||||
case StatCount:
|
||||
updateStats();
|
||||
break;
|
||||
case ShowNextLoc:
|
||||
updateShowNextLoc();
|
||||
break;
|
||||
case NoState:
|
||||
updateNoState();
|
||||
break;
|
||||
case LeavingIntermission:
|
||||
// sorry nothing
|
||||
break;
|
||||
}
|
||||
// check fade
|
||||
if ( players[consoleplayer].cmd.buttons&BT_ALTATTACK ) bgfade = min(1.,bgfade+3./Thinker.TICRATE);
|
||||
else bgfade = max(0.,bgfade-4./Thinker.TICRATE);
|
||||
}
|
||||
protected String TimeStr( int secs )
|
||||
{
|
||||
|
|
|
|||
|
|
@ -809,7 +809,7 @@ Class SWWMKnowledgeBaseMenu : GenericMenu
|
|||
{
|
||||
if ( !invlist[i] ) continue;
|
||||
if ( invlist[i] is 'Ammo' ) str = String.Format("(%d/%d) %s",invlist[i].Amount,invlist[i].MaxAmount,invlist[i].GetTag());
|
||||
else if ( (invlist[i].Amount > 1) || (!(invlist[i] is 'PuzzleItem') && (invlist[i].MaxAmount > 1)) ) str = String.Format("%dx %s",invlist[i].Amount,invlist[i].GetTag());
|
||||
else if ( (invlist[i].Amount > 1) || (!(invlist[i] is 'PuzzleItem') && !(invlist[i] is 'Weapon') && (invlist[i].MaxAmount > 1)) ) str = String.Format("%dx %s",invlist[i].Amount,invlist[i].GetTag());
|
||||
else str = invlist[i].GetTag();
|
||||
len = fnt.StringWidth(str);
|
||||
if ( len > longest ) longest = len;
|
||||
|
|
@ -854,7 +854,7 @@ Class SWWMKnowledgeBaseMenu : GenericMenu
|
|||
{
|
||||
if ( !invlist[i] ) continue;
|
||||
if ( invlist[i] is 'Ammo' ) str = String.Format("(%d/%d) %s",invlist[i].Amount,invlist[i].MaxAmount,invlist[i].GetTag());
|
||||
else if ( (invlist[i].Amount > 1) || (!(invlist[i] is 'PuzzleItem') && (invlist[i].MaxAmount > 1)) ) str = String.Format("%dx %s",invlist[i].Amount,invlist[i].GetTag());
|
||||
else if ( (invlist[i].Amount > 1) || (!(invlist[i] is 'PuzzleItem') && !(invlist[i] is 'Weapon') && (invlist[i].MaxAmount > 1)) ) str = String.Format("%dx %s",invlist[i].Amount,invlist[i].GetTag());
|
||||
else str = invlist[i].GetTag();
|
||||
len = fnt.StringWidth(str);
|
||||
if ( len > longest ) longest = len;
|
||||
|
|
@ -883,7 +883,7 @@ Class SWWMKnowledgeBaseMenu : GenericMenu
|
|||
{
|
||||
if ( !invlist[i] ) continue;
|
||||
if ( invlist[i] is 'Ammo' ) str = String.Format("(%d/%d) %s",invlist[i].Amount,invlist[i].MaxAmount,invlist[i].GetTag());
|
||||
else if ( (invlist[i].Amount > 1) || (!(invlist[i] is 'PuzzleItem') && (invlist[i].MaxAmount > 1)) ) str = String.Format("%dx %s",invlist[i].Amount,invlist[i].GetTag());
|
||||
else if ( (invlist[i].Amount > 1) || (!(invlist[i] is 'PuzzleItem') && !(invlist[i] is 'Weapon') && (invlist[i].MaxAmount > 1)) ) str = String.Format("%dx %s",invlist[i].Amount,invlist[i].GetTag());
|
||||
else str = invlist[i].GetTag();
|
||||
len = fnt.StringWidth(str);
|
||||
if ( len > longest ) longest = len;
|
||||
|
|
@ -928,7 +928,7 @@ Class SWWMKnowledgeBaseMenu : GenericMenu
|
|||
{
|
||||
if ( !invlist[i] ) continue;
|
||||
if ( invlist[i] is 'Ammo' ) str = String.Format("(%d/%d) %s",invlist[i].Amount,invlist[i].MaxAmount,invlist[i].GetTag());
|
||||
else if ( (invlist[i].Amount > 1) || (!(invlist[i] is 'PuzzleItem') && (invlist[i].MaxAmount > 1)) ) str = String.Format("%dx %s",invlist[i].Amount,invlist[i].GetTag());
|
||||
else if ( (invlist[i].Amount > 1) || (!(invlist[i] is 'PuzzleItem') && !(invlist[i] is 'Weapon') && (invlist[i].MaxAmount > 1)) ) str = String.Format("%dx %s",invlist[i].Amount,invlist[i].GetTag());
|
||||
else str = invlist[i].GetTag();
|
||||
len = fnt.StringWidth(str);
|
||||
if ( len > longest ) longest = len;
|
||||
|
|
@ -1338,7 +1338,7 @@ Class SWWMKnowledgeBaseMenu : GenericMenu
|
|||
{
|
||||
if ( !invlist[i] ) continue;
|
||||
if ( invlist[i] is 'Ammo' ) str = String.Format("(%d/%d) %s",invlist[i].Amount,invlist[i].MaxAmount,invlist[i].GetTag());
|
||||
else if ( (invlist[i].Amount > 1) || (!(invlist[i] is 'PuzzleItem') && (invlist[i].MaxAmount > 1)) ) str = String.Format("%dx %s",invlist[i].Amount,invlist[i].GetTag());
|
||||
else if ( (invlist[i].Amount > 1) || (!(invlist[i] is 'PuzzleItem') && !(invlist[i] is 'Weapon') && (invlist[i].MaxAmount > 1)) ) str = String.Format("%dx %s",invlist[i].Amount,invlist[i].GetTag());
|
||||
else str = invlist[i].GetTag();
|
||||
len = fnt.StringWidth(str);
|
||||
if ( len > longest ) longest = len;
|
||||
|
|
@ -2384,7 +2384,7 @@ Class SWWMKnowledgeBaseMenu : GenericMenu
|
|||
{
|
||||
if ( !invlist[i] ) continue;
|
||||
if ( invlist[i] is 'Ammo' ) str = String.Format("(%d/%d) %s",invlist[i].Amount,invlist[i].MaxAmount,invlist[i].GetTag());
|
||||
else if ( (invlist[i].Amount > 1) || (!(invlist[i] is 'PuzzleItem') && (invlist[i].MaxAmount > 1)) ) str = String.Format("%dx %s",invlist[i].Amount,invlist[i].GetTag());
|
||||
else if ( (invlist[i].Amount > 1) || (!(invlist[i] is 'PuzzleItem') && !(invlist[i] is 'Weapon') && (invlist[i].MaxAmount > 1)) ) str = String.Format("%dx %s",invlist[i].Amount,invlist[i].GetTag());
|
||||
else str = invlist[i].GetTag();
|
||||
len = fnt.StringWidth(str);
|
||||
if ( len > longest ) longest = len;
|
||||
|
|
@ -2396,7 +2396,7 @@ Class SWWMKnowledgeBaseMenu : GenericMenu
|
|||
{
|
||||
if ( !invlist[i] ) continue;
|
||||
if ( invlist[i] is 'Ammo' ) str = String.Format("(%d/%d) %s",invlist[i].Amount,invlist[i].MaxAmount,invlist[i].GetTag());
|
||||
else if ( (invlist[i].Amount > 1) || (!(invlist[i] is 'PuzzleItem') && (invlist[i].MaxAmount > 1)) ) str = String.Format("%dx %s",invlist[i].Amount,invlist[i].GetTag());
|
||||
else if ( (invlist[i].Amount > 1) || (!(invlist[i] is 'PuzzleItem') && !(invlist[i] is 'Weapon') && (invlist[i].MaxAmount > 1)) ) str = String.Format("%dx %s",invlist[i].Amount,invlist[i].GetTag());
|
||||
else str = invlist[i].GetTag();
|
||||
int clscol = Font.CR_WHITE;
|
||||
if ( invlist[i] is 'Weapon' ) clscol = Font.CR_GOLD;
|
||||
|
|
|
|||
|
|
@ -1398,7 +1398,8 @@ Class Demolitionist : PlayerPawn
|
|||
|| InStateSequence(CurState,FindState("SeeFastLoop"))
|
||||
|| InStateSequence(CurState,FindState("SeeFastEnd"))
|
||||
|| InStateSequence(CurState,FindState("Float"))
|
||||
|| InStateSequence(CurState,FindState("FloatLoop")) )
|
||||
|| InStateSequence(CurState,FindState("Swim"))
|
||||
|| InStateSequence(CurState,FindState("SwimLoop")) )
|
||||
SetStateLabel("StartCrouch");
|
||||
}
|
||||
else
|
||||
|
|
@ -1407,8 +1408,7 @@ Class Demolitionist : PlayerPawn
|
|||
|| InStateSequence(CurState,FindState("CrouchMove")) )
|
||||
SetStateLabel("EndCrouch");
|
||||
else if ( InStateSequence(CurState,FindState("See"))
|
||||
|| InStateSequence(CurState,FindState("Float"))
|
||||
|| InStateSequence(CurState,FindState("FloatLoop")) )
|
||||
|| InStateSequence(CurState,FindState("Float")) )
|
||||
{
|
||||
SetStateLabel("Spawn");
|
||||
A_StartSound("demolitionist/runstop",CHAN_FOOTSTEP,CHANF_OVERLAP,.2);
|
||||
|
|
@ -1416,26 +1416,17 @@ Class Demolitionist : PlayerPawn
|
|||
else if ( InStateSequence(CurState,FindState("SeeFast"))
|
||||
|| InStateSequence(CurState,FindState("SeeFastLoop")) )
|
||||
SetStateLabel("SeeFastEnd");
|
||||
else if ( InStateSequence(CurState,FindState("Swim"))
|
||||
|| InStateSequence(CurState,FindState("SwimLoop")) )
|
||||
SetStateLabel("SwimEnd");
|
||||
}
|
||||
}
|
||||
else if ( !bNoGravity && (waterlevel < 1) )
|
||||
{
|
||||
// Falling
|
||||
if ( (InStateSequence(CurState,FindState("Spawn"))
|
||||
|| InStateSequence(CurState,FindState("Turn"))
|
||||
|| InStateSequence(CurState,FindState("See"))
|
||||
|| InStateSequence(CurState,FindState("SeeFast"))
|
||||
|| InStateSequence(CurState,FindState("SeeFastLoop"))
|
||||
|| InStateSequence(CurState,FindState("SeeFastEnd"))
|
||||
|| InStateSequence(CurState,FindState("Float"))
|
||||
|| InStateSequence(CurState,FindState("FloatLoop")))
|
||||
&& (abs(pos.z-floorz) > maxstepheight) )
|
||||
SetStateLabel("Fall");
|
||||
}
|
||||
else
|
||||
{
|
||||
// Floating
|
||||
if ( InStateSequence(CurState,FindState("Spawn"))
|
||||
if ( player.crouchdir == -1 )
|
||||
{
|
||||
if ( InStateSequence(CurState,FindState("Spawn"))
|
||||
|| InStateSequence(CurState,FindState("Turn"))
|
||||
|| InStateSequence(CurState,FindState("See"))
|
||||
|| InStateSequence(CurState,FindState("SeeFast"))
|
||||
|
|
@ -1443,8 +1434,70 @@ Class Demolitionist : PlayerPawn
|
|||
|| InStateSequence(CurState,FindState("SeeFastEnd"))
|
||||
|| InStateSequence(CurState,FindState("Jump"))
|
||||
|| InStateSequence(CurState,FindState("Float"))
|
||||
|| InStateSequence(CurState,FindState("FloatLoop")) )
|
||||
SetStateLabel("Fall");
|
||||
|| InStateSequence(CurState,FindState("Fall"))
|
||||
|| InStateSequence(CurState,FindState("FallLoop"))
|
||||
|| InStateSequence(CurState,FindState("Swim"))
|
||||
|| InStateSequence(CurState,FindState("SwimLoop")) )
|
||||
SetStateLabel("StartCrouch");
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( (InStateSequence(CurState,FindState("Spawn"))
|
||||
|| InStateSequence(CurState,FindState("Turn"))
|
||||
|| InStateSequence(CurState,FindState("See"))
|
||||
|| InStateSequence(CurState,FindState("SeeFast"))
|
||||
|| InStateSequence(CurState,FindState("SeeFastLoop"))
|
||||
|| InStateSequence(CurState,FindState("SeeFastEnd"))
|
||||
|| InStateSequence(CurState,FindState("Float")))
|
||||
&& (abs(pos.z-floorz) > maxstepheight) )
|
||||
SetStateLabel("Fall");
|
||||
else if ( InStateSequence(CurState,FindState("Crouch"))
|
||||
|| InStateSequence(CurState,FindState("CrouchMove")) )
|
||||
SetStateLabel("EndCrouch");
|
||||
else if ( InStateSequence(CurState,FindState("Swim"))
|
||||
|| InStateSequence(CurState,FindState("SwimLoop")) )
|
||||
SetStateLabel("SwimEnd");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// Swimming
|
||||
if ( player.crouchdir == -1 )
|
||||
{
|
||||
// Crouching
|
||||
if ( InStateSequence(CurState,FindState("Spawn"))
|
||||
|| InStateSequence(CurState,FindState("Turn"))
|
||||
|| InStateSequence(CurState,FindState("See"))
|
||||
|| InStateSequence(CurState,FindState("SeeFast"))
|
||||
|| InStateSequence(CurState,FindState("SeeFastLoop"))
|
||||
|| InStateSequence(CurState,FindState("SeeFastEnd"))
|
||||
|| InStateSequence(CurState,FindState("Jump"))
|
||||
|| InStateSequence(CurState,FindState("Float"))
|
||||
|| InStateSequence(CurState,FindState("Fall"))
|
||||
|| InStateSequence(CurState,FindState("FallLoop"))
|
||||
|| InStateSequence(CurState,FindState("Swim"))
|
||||
|| InStateSequence(CurState,FindState("SwimLoop")) )
|
||||
SetStateLabel("StartCrouch");
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( InStateSequence(CurState,FindState("Spawn"))
|
||||
|| InStateSequence(CurState,FindState("Turn"))
|
||||
|| InStateSequence(CurState,FindState("See"))
|
||||
|| InStateSequence(CurState,FindState("SeeFast"))
|
||||
|| InStateSequence(CurState,FindState("SeeFastLoop"))
|
||||
|| InStateSequence(CurState,FindState("SeeFastEnd"))
|
||||
|| InStateSequence(CurState,FindState("Jump"))
|
||||
|| InStateSequence(CurState,FindState("Fall"))
|
||||
|| InStateSequence(CurState,FindState("FallLoop")) )
|
||||
SetStateLabel("Float");
|
||||
else if ( InStateSequence(CurState,FindState("Swim"))
|
||||
|| InStateSequence(CurState,FindState("SwimLoop")) )
|
||||
SetStateLabel("SwimEnd");
|
||||
else if ( InStateSequence(CurState,FindState("Crouch"))
|
||||
|| InStateSequence(CurState,FindState("CrouchMove")) )
|
||||
SetStateLabel("EndCrouch");
|
||||
}
|
||||
}
|
||||
}
|
||||
override void PlayRunning()
|
||||
|
|
@ -1467,7 +1520,12 @@ Class Demolitionist : PlayerPawn
|
|||
|| InStateSequence(CurState,FindState("See"))
|
||||
|| InStateSequence(CurState,FindState("SeeFast"))
|
||||
|| InStateSequence(CurState,FindState("SeeFastLoop"))
|
||||
|| InStateSequence(CurState,FindState("SeeFastEnd")) )
|
||||
|| InStateSequence(CurState,FindState("SeeFastEnd"))
|
||||
|| InStateSequence(CurState,FindState("Fall"))
|
||||
|| InStateSequence(CurState,FindState("FallLoop"))
|
||||
|| InStateSequence(CurState,FindState("Float"))
|
||||
|| InStateSequence(CurState,FindState("Swim"))
|
||||
|| InStateSequence(CurState,FindState("SwimLoop")) )
|
||||
SetStateLabel("StartCrouch");
|
||||
else if ( InStateSequence(CurState,FindState("Crouch")) )
|
||||
SetStateLabel("CrouchMove");
|
||||
|
|
@ -1477,6 +1535,9 @@ Class Demolitionist : PlayerPawn
|
|||
if ( InStateSequence(CurState,FindState("Crouch"))
|
||||
|| InStateSequence(CurState,FindState("CrouchMove")) )
|
||||
SetStateLabel("EndCrouch");
|
||||
else if ( InStateSequence(CurState,FindState("Swim"))
|
||||
|| InStateSequence(CurState,FindState("SwimLoop")) )
|
||||
SetStateLabel("SwimEnd");
|
||||
else if ( FastCheck()
|
||||
&& (InStateSequence(CurState,FindState("Spawn"))
|
||||
|| InStateSequence(CurState,FindState("Turn"))
|
||||
|
|
@ -1497,8 +1558,11 @@ Class Demolitionist : PlayerPawn
|
|||
}
|
||||
else
|
||||
{
|
||||
// Floating
|
||||
if ( InStateSequence(CurState,FindState("Spawn"))
|
||||
// Swimming
|
||||
if ( player.crouchdir == -1 )
|
||||
{
|
||||
// Crouching
|
||||
if ( InStateSequence(CurState,FindState("Spawn"))
|
||||
|| InStateSequence(CurState,FindState("Turn"))
|
||||
|| InStateSequence(CurState,FindState("See"))
|
||||
|| InStateSequence(CurState,FindState("SeeFast"))
|
||||
|
|
@ -1506,8 +1570,31 @@ Class Demolitionist : PlayerPawn
|
|||
|| InStateSequence(CurState,FindState("SeeFastEnd"))
|
||||
|| InStateSequence(CurState,FindState("Jump"))
|
||||
|| InStateSequence(CurState,FindState("Fall"))
|
||||
|| InStateSequence(CurState,FindState("FallLoop")) )
|
||||
SetStateLabel("Float");
|
||||
|| InStateSequence(CurState,FindState("FallLoop"))
|
||||
|| InStateSequence(CurState,FindState("Float"))
|
||||
|| InStateSequence(CurState,FindState("Swim"))
|
||||
|| InStateSequence(CurState,FindState("SwimLoop")) )
|
||||
SetStateLabel("StartCrouch");
|
||||
else if ( InStateSequence(CurState,FindState("Crouch")) )
|
||||
SetStateLabel("CrouchMove");
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( InStateSequence(CurState,FindState("Spawn"))
|
||||
|| InStateSequence(CurState,FindState("Turn"))
|
||||
|| InStateSequence(CurState,FindState("See"))
|
||||
|| InStateSequence(CurState,FindState("SeeFast"))
|
||||
|| InStateSequence(CurState,FindState("SeeFastLoop"))
|
||||
|| InStateSequence(CurState,FindState("SeeFastEnd"))
|
||||
|| InStateSequence(CurState,FindState("Jump"))
|
||||
|| InStateSequence(CurState,FindState("Fall"))
|
||||
|| InStateSequence(CurState,FindState("FallLoop"))
|
||||
|| InStateSequence(CurState,FindState("Float")) )
|
||||
SetStateLabel("Swim");
|
||||
else if ( InStateSequence(CurState,FindState("Crouch"))
|
||||
|| InStateSequence(CurState,FindState("CrouchMove")) )
|
||||
SetStateLabel("EndCrouch");
|
||||
}
|
||||
}
|
||||
}
|
||||
override void PlayAttacking()
|
||||
|
|
@ -1716,9 +1803,6 @@ Class Demolitionist : PlayerPawn
|
|||
{
|
||||
if ( player.cmd.buttons&BT_JUMP ) return false;
|
||||
if ( InStateSequence(CurState,FindState("Dash")) ) return false; // no crouch during dash
|
||||
if ( swwm_crouchjump ) return true; // allowed
|
||||
if ( (waterlevel > 2) || bNOGRAVITY ) return false; // no crouch while swimming/floating
|
||||
if ( !player.onground ) return false; // no crouch while in air
|
||||
return true;
|
||||
}
|
||||
// Imagine having to duplicate two functions only to change a couple values in both
|
||||
|
|
@ -1946,18 +2030,6 @@ Class Demolitionist : PlayerPawn
|
|||
// landing
|
||||
XZW4 CIJKLMN 2;
|
||||
Goto Spawn+1;
|
||||
Float:
|
||||
// start
|
||||
#### # 2;
|
||||
XZW4 O 3;
|
||||
Goto FloatLoop;
|
||||
FloatLoop:
|
||||
XZW4 PQRS 6;
|
||||
Loop;
|
||||
FloatEnd:
|
||||
#### # 2;
|
||||
XZW4 TUVWX 3;
|
||||
Goto Spawn+1;
|
||||
Dash:
|
||||
#### # 2;
|
||||
XZW4 O 2 A_Dash();
|
||||
|
|
@ -2031,6 +2103,25 @@ Class Demolitionist : PlayerPawn
|
|||
XZW7 T 0 A_StartSound("demolitionist/runstop",CHAN_FOOTSTEP,CHANF_OVERLAP,.2);
|
||||
XZW7 TUV 2;
|
||||
Loop;
|
||||
CrouchWave:
|
||||
#### # 3;
|
||||
XZWE Z 3;
|
||||
XZWF ABCDEFGHIJKLMN 3;
|
||||
Goto Crouch+1;
|
||||
CrouchApprove:
|
||||
#### # 3;
|
||||
XZWF OPQRSTUVWXYZ 3;
|
||||
XZWG ABCDE 3;
|
||||
Goto Crouch+1;
|
||||
CrouchVictory:
|
||||
#### # 3;
|
||||
XZWG FGHIJKLMNOPQRSTUVWX 3;
|
||||
Goto Crouch+1;
|
||||
CrouchBlowKiss:
|
||||
#### # 3;
|
||||
XZWG YZ 3;
|
||||
XZWH ABCDEFGHIJKLMNOPQ 3;
|
||||
Goto Crouch+1;
|
||||
CrouchMissile:
|
||||
XZW7 M 2;
|
||||
XZW7 WXYZ 2;
|
||||
|
|
@ -2075,6 +2166,26 @@ Class Demolitionist : PlayerPawn
|
|||
#### # 2 A_StartSound("demolitionist/runstop",CHAN_FOOTSTEP,CHANF_OVERLAP,.45);
|
||||
XZW8 MNOPQRS 2;
|
||||
Goto Spawn+1;
|
||||
Float:
|
||||
#### # 3;
|
||||
XZWD WXYZ 3;
|
||||
XZWE ABCDEFGH 3;
|
||||
Goto Float+1;
|
||||
Swim:
|
||||
#### # 2;
|
||||
XZWE IJK 2;
|
||||
Goto SwimLoop;
|
||||
SwimLoop:
|
||||
XZWE LMN 2;
|
||||
XZWE O 0 A_StartSound("demolitionist/runstart",CHAN_FOOTSTEP,CHANF_OVERLAP,.2);
|
||||
XZWE OPQRST 2;
|
||||
XZWE U 0 A_StartSound("demolitionist/runstop",CHAN_FOOTSTEP,CHANF_OVERLAP,.2);
|
||||
XZWE UVW 2;
|
||||
Loop;
|
||||
SwimEnd:
|
||||
#### # 2;
|
||||
XZWE LXY 2;
|
||||
Goto Float+1;
|
||||
VoodooSpawn:
|
||||
XZWZ A -1;
|
||||
Loop;
|
||||
|
|
@ -2731,10 +2842,9 @@ Class SWWMGesture : SWWMWeapon
|
|||
action void A_CallPlayerGesture( statelabel st, statelabel cst )
|
||||
{
|
||||
if ( invoker.Owner.Health <= 0 ) return;
|
||||
// crouched gestures not yet added
|
||||
/*if ( (player.crouchdir == -1) && invoker.Owner.FindState(cst) )
|
||||
if ( (player.crouchdir == -1) && invoker.Owner.FindState(cst) )
|
||||
invoker.Owner.SetStateLabel(cst);
|
||||
else */if ( invoker.Owner.FindState(st) )
|
||||
else if ( invoker.Owner.FindState(st) )
|
||||
invoker.Owner.SetStateLabel(st);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue