Add mugshot to HUD.
This commit is contained in:
parent
4661d0f2f3
commit
93891b2ccf
32 changed files with 249 additions and 67 deletions
|
|
@ -65,11 +65,21 @@ Enum EMiniHUDFontColor
|
|||
NUM_MINIHUD_COLOR
|
||||
};
|
||||
|
||||
Enum EDemoFaceState
|
||||
{
|
||||
FS_DEFAULT,
|
||||
FS_EVIL,
|
||||
FS_GRIN,
|
||||
FS_PAIN,
|
||||
FS_OUCH,
|
||||
FS_DEAD // UNUSED
|
||||
};
|
||||
|
||||
Class SWWMStatusBar : BaseStatusBar
|
||||
{
|
||||
TextureID StatusTex, WeaponTex, ScoreTex, InventoryTex, ChatTex[6],
|
||||
HealthTex[9], FuelTex[2], DashTex, EnemyBTex, EnemyHTex[6],
|
||||
GenericAmmoTex[3], AmmoTex[3], MiniBox, bgtex;
|
||||
GenericAmmoTex[3], AmmoTex[3], MiniBox, bgtex, FaceTex[17];
|
||||
|
||||
Font mSmallFont, mBigFont, mTinyFont, MiniHUDFont, MiniHUDFontOutline;
|
||||
int mhudfontcol[NUM_MINIHUD_COLOR];
|
||||
|
|
@ -113,7 +123,7 @@ Class SWWMStatusBar : BaseStatusBar
|
|||
// projection data cache
|
||||
SWWMProjectionData projdata;
|
||||
|
||||
SmoothDynamicValueInterpolator ScoreInter;
|
||||
DynamicValueInterpolator ScoreInter;
|
||||
|
||||
Inventory lastsel;
|
||||
Weapon lastwep;
|
||||
|
|
@ -175,6 +185,12 @@ Class SWWMStatusBar : BaseStatusBar
|
|||
SmoothDynamicValueInterpolator HealthInter, FuelInter, DashInter;
|
||||
SmoothLinearValueInterpolator LagHealthInter;
|
||||
|
||||
EDemoFaceState facestate;
|
||||
int paindir;
|
||||
int facetimer;
|
||||
int blinktime;
|
||||
transient ui int rss;
|
||||
|
||||
override void FlushNotify()
|
||||
{
|
||||
// flush interpolators (useful since this virtual gets called
|
||||
|
|
@ -1024,9 +1040,75 @@ Class SWWMStatusBar : BaseStatusBar
|
|||
qsort_playerscore(a,p+1,h);
|
||||
}
|
||||
|
||||
private void UpdateMugState()
|
||||
{
|
||||
let d = Demolitionist(CPlayer.mo);
|
||||
if ( !d ) return;
|
||||
// damage handling
|
||||
if ( d.lastdamagetic && (d.lastdamagetic == gametic) )
|
||||
{
|
||||
if ( d.lastdamage > 70 )
|
||||
{
|
||||
facestate = FS_OUCH;
|
||||
facetimer = (d.lastdamagetimer-gametic)+10;
|
||||
}
|
||||
else if ( facestate < FS_OUCH )
|
||||
{
|
||||
facestate = FS_PAIN;
|
||||
facetimer = (d.lastdamagetimer-gametic)+10;
|
||||
paindir = 0;
|
||||
// paraphrased from vanilla, with some tweaks
|
||||
if ( CPlayer.attacker && (CPlayer.attacker != d) && d )
|
||||
{
|
||||
double atkang = d.AngleTo(CPlayer.attacker);
|
||||
double angdiff = Actor.deltaangle(CPlayer.mo.angle,atkang);
|
||||
if ( abs(angdiff) < 135 )
|
||||
{
|
||||
if ( angdiff > 45 ) paindir = -1;
|
||||
else if ( angdiff < -45 ) paindir = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// grin timer
|
||||
if ( d.lastgrin && (d.lastgrin == gametic) && (facestate <= FS_GRIN) )
|
||||
{
|
||||
facestate = FS_GRIN;
|
||||
facetimer = 50;
|
||||
}
|
||||
if ( CPlayer.mo.FindInventory("RagekitPower") && (facestate < FS_PAIN) )
|
||||
{
|
||||
facestate = FS_EVIL;
|
||||
facetimer = 10;
|
||||
}
|
||||
if ( facetimer > 0 )
|
||||
{
|
||||
facetimer--;
|
||||
if ( facetimer <= 0 )
|
||||
{
|
||||
facestate = FS_DEFAULT;
|
||||
blinktime = 30;
|
||||
}
|
||||
}
|
||||
if ( !(gametic&1) )
|
||||
{
|
||||
if ( blinktime <= 0 )
|
||||
{
|
||||
blinktime--;
|
||||
if ( blinktime < -3 )
|
||||
{
|
||||
rss = int(MSTimeF());
|
||||
blinktime = (abs(GetRandom())%10)?(40+abs(GetRandom())%40):6;
|
||||
}
|
||||
}
|
||||
else blinktime--;
|
||||
}
|
||||
}
|
||||
|
||||
// separated so they can be auto-ticked by the demolitionist menu
|
||||
void TickInterpolators()
|
||||
{
|
||||
UpdateMugState();
|
||||
ScoreInter.Update(SWWMCredits.Get(CPlayer));
|
||||
int hp = CPlayer.Health;
|
||||
HealthInter.Update(hp);
|
||||
|
|
@ -1434,6 +1516,25 @@ Class SWWMStatusBar : BaseStatusBar
|
|||
AmmoTex[2] = TexMan.CheckForTexture("graphics/HUD/AmmoBoxB.png",TexMan.Type_Any);
|
||||
MiniBox = TexMan.CheckForTexture("graphics/HUD/MinimapBox.png",TexMan.Type_Any);
|
||||
bgtex = TexMan.CheckForTexture("graphics/tempbg.png",TexMan.Type_Any);
|
||||
FaceTex[0] = TexMan.CheckForTexture("graphics/HUD/DemoFace_Head.png",TexMan.Type_Any);
|
||||
FaceTex[1] = TexMan.CheckForTexture("graphics/HUD/DemoFace_Flash.png",TexMan.Type_Any);
|
||||
FaceTex[2] = TexMan.CheckForTexture("graphics/HUD/DemoFace_Default.png",TexMan.Type_Any);
|
||||
FaceTex[3] = TexMan.CheckForTexture("graphics/HUD/DemoFace_Unamused.png",TexMan.Type_Any);
|
||||
FaceTex[4] = TexMan.CheckForTexture("graphics/HUD/DemoFace_Blink.png",TexMan.Type_Any);
|
||||
FaceTex[5] = TexMan.CheckForTexture("graphics/HUD/DemoFace_Grin.png",TexMan.Type_Any);
|
||||
FaceTex[6] = TexMan.CheckForTexture("graphics/HUD/DemoFace_Evil.png",TexMan.Type_Any);
|
||||
FaceTex[7] = TexMan.CheckForTexture("graphics/HUD/DemoFace_Hurt.png",TexMan.Type_Any);
|
||||
FaceTex[8] = TexMan.CheckForTexture("graphics/HUD/DemoFace_HurtLeft.png",TexMan.Type_Any);
|
||||
FaceTex[9] = TexMan.CheckForTexture("graphics/HUD/DemoFace_HurtRight.png",TexMan.Type_Any);
|
||||
FaceTex[10] = TexMan.CheckForTexture("graphics/HUD/DemoFace_Ouch.png",TexMan.Type_Any);
|
||||
FaceTex[11] = TexMan.CheckForTexture("graphics/HUD/DemoFace_Dead.png",TexMan.Type_Any);
|
||||
FaceTex[12] = TexMan.CheckForTexture("graphics/HUD/DemoFace_Smug.png",TexMan.Type_Any);
|
||||
FaceTex[13] = TexMan.CheckForTexture("graphics/HUD/DemoFace_Angery.png",TexMan.Type_Any);
|
||||
FaceTex[14] = TexMan.CheckForTexture("graphics/HUD/DemoFace_Barrier.png",TexMan.Type_Any);
|
||||
FaceTex[15] = TexMan.CheckForTexture("graphics/HUD/DemoFace_Rage.png",TexMan.Type_Any);
|
||||
FaceTex[16] = TexMan.CheckForTexture("graphics/HUD/DemoFace_Angerage.png",TexMan.Type_Any);
|
||||
// other expressions will be added when needed
|
||||
blinktime = 30;
|
||||
mSmallFont = Font.GetFont('TewiFont');
|
||||
mBigFont = Font.GetFont('TewiFontOutline');
|
||||
mTinyFont = Font.GetFont('MiniwiFont');
|
||||
|
|
@ -1539,7 +1640,7 @@ Class SWWMStatusBar : BaseStatusBar
|
|||
AmmoMaxFlash[i] = 0;
|
||||
AmmoOldMaxAmounts[i] = int.min;
|
||||
}
|
||||
ScoreInter = SmoothDynamicValueInterpolator.Create(0,.1,1,999999999);
|
||||
ScoreInter = DynamicValueInterpolator.Create(0,.1,1,999999999);
|
||||
hnd = SWWMHandler(EventHandler.Find("SWWMHandler"));
|
||||
PrevFrame = MSTimeF();
|
||||
}
|
||||
|
|
@ -2722,12 +2823,14 @@ Class SWWMStatusBar : BaseStatusBar
|
|||
return true;
|
||||
}
|
||||
|
||||
private void DrawInventory( int invy = 56 )
|
||||
private void DrawInventory( bool drawmug = false )
|
||||
{
|
||||
int invy = drawmug?61:56;
|
||||
// active items (armor / powerups)
|
||||
double xx = margin+2;
|
||||
double yy = ss.y-(margin+invy);
|
||||
if ( CPlayer.mo.InvSel && !isInventoryBarVisible() ) yy -= 34;
|
||||
if ( drawmug ) yy -= 9;
|
||||
if ( CPlayer.mo.InvSel && !isInventoryBarVisible() && !drawmug ) yy -= 34;
|
||||
bool drewarmor = false;
|
||||
for ( Inventory i=CPlayer.mo.Inv; i; i=i.Inv )
|
||||
{
|
||||
|
|
@ -2737,8 +2840,13 @@ Class SWWMStatusBar : BaseStatusBar
|
|||
drewarmor = true;
|
||||
}
|
||||
yy = ss.y-(margin+invy);
|
||||
if ( drewarmor ) xx += 40;
|
||||
else if ( CPlayer.mo.InvSel && !isInventoryBarVisible() ) yy -= 34;
|
||||
if ( drawmug ) yy -= 9;
|
||||
if ( drewarmor )
|
||||
{
|
||||
xx += 36;
|
||||
if ( drawmug && CPlayer.mo.InvSel && !isInventoryBarVisible() ) yy -= 34;
|
||||
}
|
||||
else if ( CPlayer.mo.InvSel && !isInventoryBarVisible() && !drawmug ) yy -= 34;
|
||||
for ( Inventory i=CPlayer.mo.Inv; i; i=i.Inv )
|
||||
{
|
||||
if ( (i is 'SWWMLamp') && SWWMLamp(i).bActivated )
|
||||
|
|
@ -2790,8 +2898,8 @@ Class SWWMStatusBar : BaseStatusBar
|
|||
DrawInvIcon(next[1],xx+70,yy+2,1./3.);
|
||||
return;
|
||||
}
|
||||
Screen.DrawTexture(InventoryTex,false,margin,ss.y-(margin+invy+2),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true);
|
||||
DrawInvIcon(CPlayer.mo.InvSel,margin+2,ss.y-(margin+invy),selected:true);
|
||||
Screen.DrawTexture(InventoryTex,false,margin+(drawmug?36:0),ss.y-(margin+invy+2),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true);
|
||||
DrawInvIcon(CPlayer.mo.InvSel,margin+2+(drawmug?36:0),ss.y-(margin+invy),selected:true);
|
||||
}
|
||||
|
||||
private void DrawWeapons()
|
||||
|
|
@ -2967,7 +3075,7 @@ Class SWWMStatusBar : BaseStatusBar
|
|||
Screen.DrawTexture(AmmoTex[0],false,xx,yy,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true);
|
||||
}
|
||||
// score
|
||||
String sstr = String.Format("%09d",int(ScoreInter.GetValue(fractic)));
|
||||
String sstr = String.Format("%09d",int(ScoreInter.GetValue()));
|
||||
xx = ss.x-(margin+48);
|
||||
if ( bDrewAmmo ) yy -= 12;
|
||||
else yy = ss.y-(margin+22);
|
||||
|
|
@ -3016,9 +3124,77 @@ Class SWWMStatusBar : BaseStatusBar
|
|||
}
|
||||
}
|
||||
|
||||
private void DrawStatus()
|
||||
private int GetRandom()
|
||||
{
|
||||
Screen.DrawTexture(StatusTex,false,margin,ss.y-(margin+22),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true);
|
||||
return (rss = (rss<<1)*35447+(rss/87));
|
||||
}
|
||||
|
||||
private double RandomShiver()
|
||||
{
|
||||
int sd = GetRandom();
|
||||
return ((abs(sd)%11)-5)*.1;
|
||||
}
|
||||
|
||||
private int GetFaceTex()
|
||||
{
|
||||
if ( CPlayer.Health <= 0 ) return 11;
|
||||
if ( facestate == FS_GRIN ) return 5;
|
||||
if ( facestate == FS_EVIL ) return 6;
|
||||
if ( isInvulnerable() || CPlayer.mo.FindInventory("InvinciballPower") ) return (blinktime<-1)?4:12;
|
||||
if ( facestate == FS_OUCH ) return 10;
|
||||
if ( facestate == FS_PAIN ) return (paindir==1)?8:(paindir==-1)?9:7;
|
||||
switch ( blinktime )
|
||||
{
|
||||
case -1:
|
||||
case -3:
|
||||
return 3;
|
||||
break;
|
||||
case -2:
|
||||
return 4;
|
||||
break;
|
||||
}
|
||||
return 2;
|
||||
}
|
||||
|
||||
private void DrawMugshot()
|
||||
{
|
||||
rss = int(MSTimeF())*128;
|
||||
let demo = Demolitionist(CPlayer.mo);
|
||||
double paintime = clamp((demo.lastdamagetimer-(gametic+Fractic))/35.,0.,1.);
|
||||
double noiz = min(demo.lastdamage*.5*paintime,3.);
|
||||
Vector2 shake = (RandomShiver(),RandomShiver())*noiz;
|
||||
if ( !CPlayer.mo.FindInventory("GhostPower") )
|
||||
{
|
||||
Screen.DrawTexture(FaceTex[0],false,margin+shake.x,ss.y-(margin+32)+shake.y,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true);
|
||||
bool raging = CPlayer.mo.FindInventory("RagekitPower");
|
||||
bool angy = CPlayer.mo.FindInventory("AngeryPower");
|
||||
if ( raging && angy ) Screen.DrawTexture(FaceTex[16],false,margin+shake.x,ss.y-(margin+32)+shake.y,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true);
|
||||
else if ( raging ) Screen.DrawTexture(FaceTex[15],false,margin+shake.x,ss.y-(margin+32)+shake.y,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true);
|
||||
else if ( angy ) Screen.DrawTexture(FaceTex[13],false,margin+shake.x,ss.y-(margin+32)+shake.y,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true);
|
||||
Screen.DrawTexture(FaceTex[1],false,margin+shake.x,ss.y-(margin+32)+shake.y,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_Color,Color(255,255,0,0),DTA_Alpha,min(1.,noiz));
|
||||
if ( (CPlayer.Health > 0) && (isInvulnerable() || CPlayer.mo.FindInventory("InvinciballPower")) )
|
||||
Screen.DrawTexture(FaceTex[1],false,margin+shake.x,ss.y-(margin+32)+shake.y,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_Alpha,.8+.1*sin(gametic+fractic));
|
||||
}
|
||||
else
|
||||
{
|
||||
Screen.DrawTexture(FaceTex[0],false,margin+shake.x,ss.y-(margin+32)+shake.y,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_FillColor,Color(0,0,0),DTA_Alpha,.25*(1.-min(1.,noiz)));
|
||||
Screen.DrawTexture(FaceTex[1],false,margin+shake.x,ss.y-(margin+32)+shake.y,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_FillColor,Color(255,0,0),DTA_Alpha,.25*min(1.,noiz));
|
||||
}
|
||||
Screen.DrawTexture(FaceTex[GetFaceTex()],false,margin+shake.x,ss.y-(margin+32)+shake.y,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true);
|
||||
if ( CPlayer.mo.FindInventory("BarrierPower") ) Screen.DrawTexture(FaceTex[14],false,margin+shake.x,ss.y-(margin+32)+shake.y,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_Alpha,.5,DTA_LegacyRenderStyle,STYLE_Add);
|
||||
}
|
||||
|
||||
private void DrawStatus( bool drawmug = false )
|
||||
{
|
||||
int ox = 0;
|
||||
int oy = 0;
|
||||
if ( drawmug )
|
||||
{
|
||||
DrawMugshot();
|
||||
ox = 36;
|
||||
oy = 5;
|
||||
}
|
||||
Screen.DrawTexture(StatusTex,false,margin+ox,ss.y-(margin+22+oy),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true);
|
||||
String str;
|
||||
double ht = clamp(HealthInter.GetValue(fractic),0,10000);
|
||||
str = String.Format("%3d",clamp(round(ht),0,999));
|
||||
|
|
@ -3030,34 +3206,34 @@ Class SWWMStatusBar : BaseStatusBar
|
|||
else if ( round(ht) > 100 ) hcolor = MCR_CYAN;
|
||||
if ( isInvulnerable() || CPlayer.mo.FindInventory("InvinciballPower") )
|
||||
{
|
||||
Screen.DrawTexture(HealthTex[0],false,margin+3,ss.y-(margin+19),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_WindowRightF,hw,DTA_ColorOverlay,Color(255,0,0,0));
|
||||
Screen.DrawTexture(HealthTex[4],false,margin+2,ss.y-(margin+20),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_WindowRightF,hw);
|
||||
Screen.DrawTexture(HealthTex[0],false,margin+3+ox,ss.y-(margin+19+oy),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_WindowRightF,hw,DTA_ColorOverlay,Color(255,0,0,0));
|
||||
Screen.DrawTexture(HealthTex[4],false,margin+2+ox,ss.y-(margin+20+oy),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_WindowRightF,hw);
|
||||
hcolor = MCR_WHITE;
|
||||
}
|
||||
else
|
||||
{
|
||||
Screen.DrawTexture(HealthTex[0],false,margin+3,ss.y-(margin+19),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_WindowRightF,hw,DTA_ColorOverlay,Color(255,0,0,0));
|
||||
Screen.DrawTexture(HealthTex[0],false,margin+2,ss.y-(margin+20),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_WindowRightF,hw);
|
||||
Screen.DrawTexture(HealthTex[0],false,margin+3+ox,ss.y-(margin+19+oy),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_WindowRightF,hw,DTA_ColorOverlay,Color(255,0,0,0));
|
||||
Screen.DrawTexture(HealthTex[0],false,margin+2+ox,ss.y-(margin+20+oy),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_WindowRightF,hw);
|
||||
if ( ht > 100 )
|
||||
{
|
||||
hw = min(ht-100,100);
|
||||
Screen.DrawTexture(HealthTex[1],false,margin+2,ss.y-(margin+20),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_WindowRightF,hw);
|
||||
Screen.DrawTexture(HealthTex[1],false,margin+2+ox,ss.y-(margin+20+oy),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_WindowRightF,hw);
|
||||
}
|
||||
if ( ht > 200 )
|
||||
{
|
||||
hw = min(ht-200,300)/3.;
|
||||
Screen.DrawTexture(HealthTex[2],false,margin+2,ss.y-(margin+20),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_WindowRightF,hw);
|
||||
Screen.DrawTexture(HealthTex[2],false,margin+2+ox,ss.y-(margin+20+oy),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_WindowRightF,hw);
|
||||
}
|
||||
if ( ht > 500 )
|
||||
{
|
||||
hw = min(ht-500,500)/5.;
|
||||
Screen.DrawTexture(HealthTex[3],false,margin+2,ss.y-(margin+20),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_WindowRightF,hw);
|
||||
Screen.DrawTexture(HealthTex[3],false,margin+2+ox,ss.y-(margin+20+oy),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_WindowRightF,hw);
|
||||
}
|
||||
}
|
||||
if ( CPlayer.mo.FindInventory("DivineSpriteEffect") )
|
||||
{
|
||||
double falph = clamp((ht-1000)/6000.,0.,1.);
|
||||
Screen.DrawTexture(HealthTex[5],false,margin+2,ss.y-(margin+20),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_Alpha,falph,DTA_LegacyRenderStyle,STYLE_Add);
|
||||
Screen.DrawTexture(HealthTex[5],false,margin+2+ox,ss.y-(margin+20+oy),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_Alpha,falph,DTA_LegacyRenderStyle,STYLE_Add);
|
||||
String tst;
|
||||
double alph = .1;
|
||||
int trl = 9;
|
||||
|
|
@ -3066,42 +3242,42 @@ Class SWWMStatusBar : BaseStatusBar
|
|||
tst = "AAA";
|
||||
SWWMUtility.ObscureText(tst,(gametic-trl)/3,true);
|
||||
trl--;
|
||||
Screen.DrawText(MiniHUDFont,mhudfontcol[MCR_WHITE],margin+107,ss.y-(margin+20),tst,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_Alpha,falph*alph,DTA_LegacyRenderStyle,STYLE_Add);
|
||||
Screen.DrawText(MiniHUDFont,mhudfontcol[MCR_WHITE],margin+107+ox,ss.y-(margin+20+oy),tst,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_Alpha,falph*alph,DTA_LegacyRenderStyle,STYLE_Add);
|
||||
}
|
||||
Screen.DrawText(MiniHUDFont,mhudfontcol[hcolor],margin+107,ss.y-(margin+20),String.Format("%3d",clamp(round(ht),0,999)),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_Alpha,1.-falph);
|
||||
Screen.DrawText(MiniHUDFont,mhudfontcol[hcolor],margin+107+ox,ss.y-(margin+20+oy),String.Format("%3d",clamp(round(ht),0,999)),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_Alpha,1.-falph);
|
||||
}
|
||||
else
|
||||
{
|
||||
Screen.DrawText(MiniHUDFont,mhudfontcol[hcolor],margin+107,ss.y-(margin+20),String.Format("%3d",clamp(round(ht),0,999)),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true);
|
||||
Screen.DrawText(MiniHUDFont,mhudfontcol[hcolor],margin+107+ox,ss.y-(margin+20+oy),String.Format("%3d",clamp(round(ht),0,999)),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true);
|
||||
int f = HealthFlash;
|
||||
if ( f && (gametic < f) )
|
||||
{
|
||||
double alph = max((f-(gametic+FracTic))/25.,0.)**1.5;
|
||||
Screen.DrawTexture(HealthTex[7],false,margin+2,ss.y-(margin+20),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_WindowRightF,bhw,DTA_LegacyRenderStyle,STYLE_Add,DTA_Alpha,alph);
|
||||
Screen.DrawText(MiniHUDFont,mhudfontcol[MCR_FLASH],margin+107,ss.y-(margin+20),str,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_LegacyRenderStyle,STYLE_Add,DTA_Alpha,alph);
|
||||
Screen.DrawTexture(HealthTex[7],false,margin+2+ox,ss.y-(margin+20+oy),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_WindowRightF,bhw,DTA_LegacyRenderStyle,STYLE_Add,DTA_Alpha,alph);
|
||||
Screen.DrawText(MiniHUDFont,mhudfontcol[MCR_FLASH],margin+107+ox,ss.y-(margin+20+oy),str,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_LegacyRenderStyle,STYLE_Add,DTA_Alpha,alph);
|
||||
}
|
||||
if ( (CPlayer.health > 0) && (CPlayer.health <= 25) && (PulsePhase <= 15) )
|
||||
{
|
||||
double alph = clamp(sin((PulsePhase-FracTic)*12.),0.,1.);
|
||||
Screen.DrawTexture(HealthTex[6],false,margin+2,ss.y-(margin+20),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_WindowRightF,hw,DTA_Alpha,alph);
|
||||
Screen.DrawText(MiniHUDFont,mhudfontcol[MCR_REDFLASH],margin+107,ss.y-(margin+20),str,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_Alpha,alph);
|
||||
Screen.DrawTexture(HealthTex[6],false,margin+2+ox,ss.y-(margin+20+oy),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_WindowRightF,hw,DTA_Alpha,alph);
|
||||
Screen.DrawText(MiniHUDFont,mhudfontcol[MCR_REDFLASH],margin+107,ss.y-(margin+20+oy),str,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_Alpha,alph);
|
||||
}
|
||||
ht = clamp(LagHealthInter.GetValue(fractic),0,1000);
|
||||
double hwl = min(ht,100);
|
||||
if ( hwl > bhw )
|
||||
{
|
||||
Screen.DrawTexture(HealthTex[8],false,margin+3,ss.y-(margin+19),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_WindowLeftF,bhw,DTA_WindowRightF,hwl,DTA_ColorOverlay,Color(255,0,0,0));
|
||||
Screen.DrawTexture(HealthTex[8],false,margin+2,ss.y-(margin+20),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_WindowLeftF,bhw,DTA_WindowRightF,hwl);
|
||||
Screen.DrawTexture(HealthTex[8],false,margin+3+ox,ss.y-(margin+19+oy),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_WindowLeftF,bhw,DTA_WindowRightF,hwl,DTA_ColorOverlay,Color(255,0,0,0));
|
||||
Screen.DrawTexture(HealthTex[8],false,margin+2+ox,ss.y-(margin+20+oy),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_WindowLeftF,bhw,DTA_WindowRightF,hwl);
|
||||
}
|
||||
}
|
||||
double ft = clamp(FuelInter.GetValue(fractic),0,120);
|
||||
Screen.DrawTexture(FuelTex[swwm_superfuel],false,margin+3,ss.y-(margin+7),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_WindowRightF,ft,DTA_ColorOverlay,Color(255,0,0,0));
|
||||
Screen.DrawTexture(FuelTex[swwm_superfuel],false,margin+2,ss.y-(margin+8),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_WindowRightF,ft);
|
||||
Screen.DrawTexture(FuelTex[swwm_superfuel],false,margin+3+ox,ss.y-(margin+7+oy),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_WindowRightF,ft,DTA_ColorOverlay,Color(255,0,0,0));
|
||||
Screen.DrawTexture(FuelTex[swwm_superfuel],false,margin+2+ox,ss.y-(margin+8+oy),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_WindowRightF,ft);
|
||||
let d = Demolitionist(CPlayer.mo);
|
||||
bool blink = (!d || (d.dashfuel > 20) || ((gametic%10) < 5));
|
||||
double dt = clamp(DashInter.GetValue(fractic),0,120);
|
||||
Screen.DrawTexture(DashTex,false,margin+3,ss.y-(margin+4),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_WindowRightF,dt,DTA_ColorOverlay,Color(255,0,0,0));
|
||||
Screen.DrawTexture(DashTex,false,margin+2,ss.y-(margin+5),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_WindowRightF,dt,DTA_ColorOverlay,Color(blink?0:96,0,0,0));
|
||||
Screen.DrawTexture(DashTex,false,margin+3+ox,ss.y-(margin+4+oy),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_WindowRightF,dt,DTA_ColorOverlay,Color(255,0,0,0));
|
||||
Screen.DrawTexture(DashTex,false,margin+2+ox,ss.y-(margin+5+oy),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_WindowRightF,dt,DTA_ColorOverlay,Color(blink?0:96,0,0,0));
|
||||
}
|
||||
|
||||
private void DrawPickups()
|
||||
|
|
@ -3401,8 +3577,9 @@ Class SWWMStatusBar : BaseStatusBar
|
|||
{
|
||||
DrawTarget();
|
||||
DrawTopStuff();
|
||||
DrawInventory();
|
||||
DrawStatus();
|
||||
bool drawmug = swwm_hudmugshot;
|
||||
DrawInventory(drawmug);
|
||||
DrawStatus(drawmug);
|
||||
DrawWeapons();
|
||||
if ( hnd ) hnd.DrawBossBar(self);
|
||||
DrawPickups();
|
||||
|
|
|
|||
|
|
@ -88,7 +88,7 @@ Class Demolitionist : PlayerPawn
|
|||
|
||||
int invwipe; // inventory wipe flags for next level
|
||||
|
||||
transient int lastbang;
|
||||
transient int lastbang, lastgrin;
|
||||
|
||||
transient bool ingivecheat;
|
||||
|
||||
|
|
@ -2816,6 +2816,7 @@ Class Demolitionist : PlayerPawn
|
|||
SWWMHandler.AddOneliner("getweapon",2);
|
||||
}
|
||||
else SWWMHandler.AddOneliner("getweapon",2);
|
||||
lastgrin = gametic;
|
||||
}
|
||||
}
|
||||
if ( (item is 'Key') && !key_reentrant && !deathmatch && !bInDefaultInventory )
|
||||
|
|
@ -2836,6 +2837,7 @@ Class Demolitionist : PlayerPawn
|
|||
SWWMHandler.AddOneliner("keyget",2);
|
||||
}
|
||||
else SWWMHandler.AddOneliner("keyget",2);
|
||||
lastgrin = gametic;
|
||||
}
|
||||
// share all keys in mp
|
||||
for ( int i=0; i<MAXPLAYERS; i++ )
|
||||
|
|
@ -2852,7 +2854,11 @@ Class Demolitionist : PlayerPawn
|
|||
// add collectible to stats
|
||||
if ( item is 'SWWMCollectible' )
|
||||
{
|
||||
if ( !ingivecheat ) SWWMHandler.AddOneliner(SWWMCollectible(item).GetLine,2);
|
||||
if ( !ingivecheat )
|
||||
{
|
||||
SWWMHandler.AddOneliner(SWWMCollectible(item).GetLine,2);
|
||||
lastgrin = gametic;
|
||||
}
|
||||
if ( !mystats ) return;
|
||||
let cls = item.GetClass();
|
||||
if ( (mystats.ownedcollectibles.Size() > 0) && (mystats.ownedcollectibles.Find(cls) < mystats.ownedcollectibles.Size()) ) return;
|
||||
|
|
@ -2863,6 +2869,7 @@ Class Demolitionist : PlayerPawn
|
|||
{
|
||||
mystats.gotyorick = true;
|
||||
SWWMHandler.AddOneliner("skullget",2);
|
||||
lastgrin = gametic;
|
||||
}
|
||||
// notify key obtained to flash icon
|
||||
if ( item is 'Key' )
|
||||
|
|
|
|||
|
|
@ -61,7 +61,10 @@ Class ExplodiumGun : SWWMWeapon
|
|||
// add the oneliner
|
||||
let demo = Demolitionist(Owner);
|
||||
if ( demo && demo.mystats && !demo.mystats.GotWeapon(SisterWeapon.GetClass()) && (Owner.player == players[consoleplayer]) && !demo.ingivecheat )
|
||||
{
|
||||
SWWMHandler.AddOneliner(SWWMWeapon(SisterWeapon).GetLine,2);
|
||||
demo.lastgrin = gametic;
|
||||
}
|
||||
item.bPickupGood = true;
|
||||
}
|
||||
return true;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue