Healing changes:
- Refresher heals 100 points on activation, regen gives another 100 spread out for 50 seconds. - Refresher ONLY activates on critical damage. - The other health items don't autoactivate if the player dies. - Overhealing above 200 points will gradually lower (faster if above 500). Other changes: - Used DTA_WindowRightF where possible for smoother UI bars.
This commit is contained in:
parent
9b52cb9307
commit
c5c8a85abf
9 changed files with 68 additions and 35 deletions
|
|
@ -30,7 +30,7 @@ Class RefresherHealth : Health
|
|||
{
|
||||
Default
|
||||
{
|
||||
Inventory.Amount 200;
|
||||
Inventory.Amount 100;
|
||||
Inventory.MaxAmount 500;
|
||||
}
|
||||
override bool TryPickup( in out Actor other )
|
||||
|
|
@ -52,7 +52,7 @@ Class RefresherRegen : Powerup
|
|||
Default
|
||||
{
|
||||
Inventory.Icon "graphics/HUD/Icons/I_Refresher.png";
|
||||
Powerup.Duration -60;
|
||||
Powerup.Duration -50;
|
||||
Powerup.Strength 10;
|
||||
}
|
||||
|
||||
|
|
@ -65,7 +65,7 @@ Class RefresherRegen : Powerup
|
|||
override void DoEffect()
|
||||
{
|
||||
Super.DoEffect();
|
||||
if ( Owner && (Owner.health > 0) && !(EffectTics%175) )
|
||||
if ( Owner && (Owner.health > 0) && !((EffectTics-5)%175) )
|
||||
{
|
||||
if ( Owner.GiveBody(int(Strength),500) )
|
||||
{
|
||||
|
|
|
|||
|
|
@ -736,28 +736,28 @@ Class SWWMStatusBar : BaseStatusBar
|
|||
if ( targettag.GetBool() || targ.myplayer && (tag != "") )
|
||||
Screen.DrawText(fnt,Font.CR_WHITE,(barpos.x+barsiz.x/2.-(fnt.StringWidth(tag)*hsb.x)/2.)/hsb.x,(barpos.y-fnt.GetHeight()*hsb.y)/hsb.y,tag,DTA_VirtualWidthF,ssb.x,DTA_VirtualHeightF,ssb.y,DTA_KeepRatio,true,DTA_Alpha,alph);
|
||||
Screen.DrawTexture(EnemyBTex,false,barpos.x/hsb.x,barpos.y/hsb.y,DTA_VirtualWidthF,ssb.x,DTA_VirtualHeightF,ssb.y,DTA_KeepRatio,true,DTA_Alpha,alph);
|
||||
int ht = clamp(targ.intp.GetValue(),0,targ.maxhealth*10);
|
||||
int hw = int((min(ht,targ.maxhealth)*50.)/targ.maxhealth);
|
||||
double ht = clamp(targ.intp.GetValue(),0,targ.maxhealth*10);
|
||||
double hw = (min(ht,targ.maxhealth)*50.)/targ.maxhealth;
|
||||
if ( targ.mytarget && (targ.mytarget.bInvulnerable || (targ.myplayer && (targ.myplayer.cheats&(CF_GODMODE|CF_GODMODE2))) || targ.mytarget.FindInventory("InvinciballPower")) )
|
||||
{
|
||||
Screen.DrawTexture(EnemyHTex[4],false,(barpos.x+2*hsb.x)/hsb.x,(barpos.y+2*hsb.y)/hsb.y,DTA_VirtualWidthF,ssb.x,DTA_VirtualHeightF,ssb.y,DTA_KeepRatio,true,DTA_Alpha,alph,DTA_WindowRight,hw);
|
||||
Screen.DrawTexture(EnemyHTex[4],false,(barpos.x+2*hsb.x)/hsb.x,(barpos.y+2*hsb.y)/hsb.y,DTA_VirtualWidthF,ssb.x,DTA_VirtualHeightF,ssb.y,DTA_KeepRatio,true,DTA_Alpha,alph,DTA_WindowRightF,hw);
|
||||
continue;
|
||||
}
|
||||
Screen.DrawTexture(EnemyHTex[0],false,(barpos.x+2*hsb.x)/hsb.x,(barpos.y+2*hsb.y)/hsb.y,DTA_VirtualWidthF,ssb.x,DTA_VirtualHeightF,ssb.y,DTA_KeepRatio,true,DTA_Alpha,alph,DTA_WindowRight,hw);
|
||||
Screen.DrawTexture(EnemyHTex[0],false,(barpos.x+2*hsb.x)/hsb.x,(barpos.y+2*hsb.y)/hsb.y,DTA_VirtualWidthF,ssb.x,DTA_VirtualHeightF,ssb.y,DTA_KeepRatio,true,DTA_Alpha,alph,DTA_WindowRightF,hw);
|
||||
if ( ht > targ.maxhealth )
|
||||
{
|
||||
hw = int((min(ht-targ.maxhealth,targ.maxhealth)*50.)/targ.maxhealth);
|
||||
Screen.DrawTexture(EnemyHTex[1],false,(barpos.x+2*hsb.x)/hsb.x,(barpos.y+2*hsb.y)/hsb.y,DTA_VirtualWidthF,ssb.x,DTA_VirtualHeightF,ssb.y,DTA_KeepRatio,true,DTA_Alpha,alph,DTA_WindowRight,hw);
|
||||
hw = (min(ht-targ.maxhealth,targ.maxhealth)*50.)/targ.maxhealth;
|
||||
Screen.DrawTexture(EnemyHTex[1],false,(barpos.x+2*hsb.x)/hsb.x,(barpos.y+2*hsb.y)/hsb.y,DTA_VirtualWidthF,ssb.x,DTA_VirtualHeightF,ssb.y,DTA_KeepRatio,true,DTA_Alpha,alph,DTA_WindowRightF,hw);
|
||||
}
|
||||
if ( ht > targ.maxhealth*2 )
|
||||
{
|
||||
hw = int((min(ht-targ.maxhealth*2,targ.maxhealth*3)*50.)/(targ.maxhealth*3));
|
||||
Screen.DrawTexture(EnemyHTex[2],false,(barpos.x+2*hsb.x)/hsb.x,(barpos.y+2*hsb.y)/hsb.y,DTA_VirtualWidthF,ssb.x,DTA_VirtualHeightF,ssb.y,DTA_KeepRatio,true,DTA_Alpha,alph,DTA_WindowRight,hw);
|
||||
hw = (min(ht-targ.maxhealth*2,targ.maxhealth*3)*50.)/(targ.maxhealth*3);
|
||||
Screen.DrawTexture(EnemyHTex[2],false,(barpos.x+2*hsb.x)/hsb.x,(barpos.y+2*hsb.y)/hsb.y,DTA_VirtualWidthF,ssb.x,DTA_VirtualHeightF,ssb.y,DTA_KeepRatio,true,DTA_Alpha,alph,DTA_WindowRightF,hw);
|
||||
}
|
||||
if ( ht > targ.maxhealth*5 )
|
||||
{
|
||||
hw = int((min(ht-targ.maxhealth*5,targ.maxhealth*5)*50.)/(targ.maxhealth*5));
|
||||
Screen.DrawTexture(EnemyHTex[3],false,(barpos.x+2*hsb.x)/hsb.x,(barpos.y+2*hsb.y)/hsb.y,DTA_VirtualWidthF,ssb.x,DTA_VirtualHeightF,ssb.y,DTA_KeepRatio,true,DTA_Alpha,alph,DTA_WindowRight,hw);
|
||||
hw = (min(ht-targ.maxhealth*5,targ.maxhealth*5)*50.)/(targ.maxhealth*5);
|
||||
Screen.DrawTexture(EnemyHTex[3],false,(barpos.x+2*hsb.x)/hsb.x,(barpos.y+2*hsb.y)/hsb.y,DTA_VirtualWidthF,ssb.x,DTA_VirtualHeightF,ssb.y,DTA_KeepRatio,true,DTA_Alpha,alph,DTA_WindowRightF,hw);
|
||||
}
|
||||
}
|
||||
if ( !scorebonus ) scorebonus = CVar.GetCVar('swwm_scorebonus',players[consoleplayer]);
|
||||
|
|
@ -1106,35 +1106,35 @@ Class SWWMStatusBar : BaseStatusBar
|
|||
{
|
||||
Screen.DrawTexture(StatusTex,false,margin,ss.y-(margin+26),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true);
|
||||
let d = Demolitionist(CPlayer.mo);
|
||||
int dw = DashInter.GetValue();
|
||||
double dw = DashInter.GetValue();
|
||||
double alph = .6;
|
||||
if ( !d || (d.dashfuel > 20) || ((gametic%10) < 5) ) alph = 1.;
|
||||
Screen.DrawTexture(DashTex,false,margin+2,ss.y-(margin+20),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_WindowRight,dw,DTA_Alpha,alph);
|
||||
int fw = FuelInter.GetValue()/2;
|
||||
Screen.DrawTexture(FuelTex,false,margin+2,ss.y-(margin+24),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_WindowRight,fw);
|
||||
int ht = clamp(HealthInter.GetValue(),0,10000);
|
||||
int hw = min(ht,100);
|
||||
Screen.DrawTexture(DashTex,false,margin+2,ss.y-(margin+20),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_WindowRightF,dw,DTA_Alpha,alph);
|
||||
double fw = FuelInter.GetValue()/2.;
|
||||
Screen.DrawTexture(FuelTex,false,margin+2,ss.y-(margin+24),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_WindowRightF,fw);
|
||||
double ht = clamp(HealthInter.GetValue(),0,10000);
|
||||
double hw = min(ht,100);
|
||||
if ( isInvulnerable() || CPlayer.mo.FindInventory("InvinciballPower") )
|
||||
{
|
||||
Screen.DrawTexture(HealthTex[4],false,margin+2,ss.y-(margin+14),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_WindowRight,hw);
|
||||
Screen.DrawTexture(HealthTex[4],false,margin+2,ss.y-(margin+14),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_WindowRightF,hw);
|
||||
Screen.DrawText(mTewiFont.mFont,Font.CR_WHITE,margin+108,ss.y-(margin+15),String.Format("%03d",Random[HudStuff](0,999)),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true);
|
||||
return;
|
||||
}
|
||||
Screen.DrawTexture(HealthTex[0],false,margin+2,ss.y-(margin+14),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_WindowRight,hw);
|
||||
Screen.DrawTexture(HealthTex[0],false,margin+2,ss.y-(margin+14),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+14),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_WindowRight,hw);
|
||||
Screen.DrawTexture(HealthTex[1],false,margin+2,ss.y-(margin+14),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_WindowRightF,hw);
|
||||
}
|
||||
if ( ht > 200 )
|
||||
{
|
||||
hw = int(min(ht-200,300)/3.);
|
||||
Screen.DrawTexture(HealthTex[2],false,margin+2,ss.y-(margin+14),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_WindowRight,hw);
|
||||
hw = min(ht-200,300)/3.;
|
||||
Screen.DrawTexture(HealthTex[2],false,margin+2,ss.y-(margin+14),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_WindowRightF,hw);
|
||||
}
|
||||
if ( ht > 500 )
|
||||
{
|
||||
hw = int(min(ht-500,500)/5.);
|
||||
Screen.DrawTexture(HealthTex[3],false,margin+2,ss.y-(margin+14),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_WindowRight,hw);
|
||||
hw = min(ht-500,500)/5.;
|
||||
Screen.DrawTexture(HealthTex[3],false,margin+2,ss.y-(margin+14),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_WindowRightF,hw);
|
||||
}
|
||||
int hcolor = Font.CR_RED;
|
||||
if ( ht > 500 ) hcolor = Font.CR_GOLD;
|
||||
|
|
|
|||
|
|
@ -310,6 +310,12 @@ Class SWWMHealth : Inventory abstract
|
|||
if ( (Owner.Health-damage <= (GetDefaultByType(giveme).MaxAmount-GetDefaultByType(giveme).Amount)) )
|
||||
{
|
||||
newdamage = damage;
|
||||
// lesser healing items can't prevent lethal damage
|
||||
// bigger healing items only autoactivate on lethal damage
|
||||
if ( !bBIGPOWERUP && (Owner.Health-damage <= 0) )
|
||||
return;
|
||||
else if ( bBIGPOWERUP && (Owner.Health-damage > 0) )
|
||||
return;
|
||||
if ( ((Owner.player == players[consoleplayer]) || bBigPowerup) ) Owner.A_StartSound(UseSound,CHAN_ITEMEXTRA);
|
||||
int tgive = 0;
|
||||
bool acc = CVar.GetCVar('swwm_accdamage',players[consoleplayer]).GetBool();
|
||||
|
|
|
|||
|
|
@ -346,8 +346,8 @@ Class PusherWeapon : SWWMWeapon
|
|||
if ( !ChargeBar ) ChargeBar = TexMan.CheckForTexture("graphics/HUD/PusherBar.png",TexMan.Type_Any);
|
||||
Screen.DrawTexture(WeaponBox,false,bx-60,by-9,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true);
|
||||
int chg = clamp(ChargeInter?ChargeInter.GetValue():int(chargelevel*100),0,100);
|
||||
int cw = int(chg*56./100.);
|
||||
Screen.DrawTexture(ChargeBar,false,bx-58,by-7,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_WindowRight,cw);
|
||||
double cw = chg*56./100.;
|
||||
Screen.DrawTexture(ChargeBar,false,bx-58,by-7,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_WindowRightF,cw);
|
||||
}
|
||||
|
||||
override void HudTick()
|
||||
|
|
|
|||
|
|
@ -57,6 +57,8 @@ Class Demolitionist : PlayerPawn
|
|||
SWWMItemSense itemsense;
|
||||
int itemsense_cnt;
|
||||
|
||||
int healcooldown, healtimer, oldhealth;
|
||||
|
||||
Property DashFuel : dashfuel;
|
||||
|
||||
Default
|
||||
|
|
@ -507,6 +509,31 @@ Class Demolitionist : PlayerPawn
|
|||
selflight.Tick();
|
||||
}
|
||||
if ( player.mo != self ) return; // no voodoo dolls past this point
|
||||
// overheal fading
|
||||
if ( (health <= 200) || (health > oldhealth) )
|
||||
{
|
||||
healtimer = 0;
|
||||
healcooldown = 80;
|
||||
}
|
||||
else if ( health > 200 )
|
||||
{
|
||||
if ( healcooldown > 0 ) healcooldown--;
|
||||
else
|
||||
{
|
||||
if ( health > 500 )
|
||||
{
|
||||
if ( !FindInventory("GrilledCheeseSafeguard") && !(healtimer%5) )
|
||||
A_SetHealth(health-1);
|
||||
}
|
||||
else if ( health > 200 )
|
||||
{
|
||||
if ( !FindInventory("RefresherRegen") && !(healtimer%15) )
|
||||
A_SetHealth(health-1);
|
||||
}
|
||||
healtimer++;
|
||||
}
|
||||
}
|
||||
oldhealth = health;
|
||||
oldlagvel = lagvel;
|
||||
oldlagready = lagready;
|
||||
if ( player.weaponstate&WF_WEAPONBOBBING ) lagready = lagready*.9+.1;
|
||||
|
|
|
|||
|
|
@ -1942,7 +1942,7 @@ Class Sparkster : SWWMWeapon
|
|||
Screen.DrawText(TewiFont,Font.CR_FIRE,bx-26,by-26,String.Format("%2d",Ammo1.Amount),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true);
|
||||
Screen.DrawTexture(AmmoBar[2],false,bx-26,by-8,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true);
|
||||
bool blinking = (failtime>gametic)&&((failtime-gametic)%16>=8);
|
||||
Screen.DrawTexture(AmmoBar[clipcount<4],false,bx-26,by-8,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_WindowRight,iclip?(iclip.GetValue()/10):0,DTA_ColorOverlay,blinking?Color(128,0,0,0):Color(0,0,0,0));
|
||||
Screen.DrawTexture(AmmoBar[clipcount<4],false,bx-26,by-8,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_WindowRightF,iclip?(iclip.GetValue()/10.):0.,DTA_ColorOverlay,blinking?Color(128,0,0,0):Color(0,0,0,0));
|
||||
}
|
||||
|
||||
override void HudTick()
|
||||
|
|
|
|||
|
|
@ -588,8 +588,8 @@ Class SilverBullet : SWWMWeapon
|
|||
if ( zl >= 10 )
|
||||
{
|
||||
Screen.DrawTexture(WeaponBox[1],false,bx-35,by-56,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true);
|
||||
int zw = int(zl*31./160.);
|
||||
Screen.DrawTexture(ZoomBar,false,bx-33,by-54,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_WindowRight,zw);
|
||||
double zw = zl*31./160.;
|
||||
Screen.DrawTexture(ZoomBar,false,bx-33,by-54,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_WindowRightF,zw);
|
||||
}
|
||||
Screen.DrawTexture(WeaponBox[0],false,bx-55,by-44,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true);
|
||||
if ( chambered ) Screen.DrawTexture(BulletIcon[fcbchambered],false,bx-53,by-30,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_ColorOverlay,fired?Color(128,0,0,0):Color(0,0,0,0));
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue