Major Black Shell rebalance.

This commit is contained in:
Mari the Deer 2021-01-23 12:45:15 +01:00
commit bd300ebdf4
6 changed files with 40 additions and 20 deletions

View file

@ -1,2 +1,2 @@
[default]
SWWM_MODVER="\chSWWM \czGZ\c- \cw0.9.11b-pre r783 \cu(Fri 22 Jan 20:18:02 CET 2021)";
SWWM_MODVER="\chSWWM \czGZ\c- \cw0.9.11b-pre r784 \cu(Sat 23 Jan 12:45:15 CET 2021)";

View file

@ -587,6 +587,10 @@ spreadgun/slugf1 sounds/spreadgun/spread_slugf1.ogg
spreadgun/slugf2 sounds/spreadgun/spread_slugf2.ogg
$random spreadgun/slugf { spreadgun/slugf1 spreadgun/slugf2 }
spreadgun/corrode sounds/spreadgun/spread_poison.ogg
spreadgun/corrodepuff1 sounds/spreadgun/spread_poisonpuff1.ogg
spreadgun/corrodepuff2 sounds/spreadgun/spread_poisonpuff2.ogg
$random spreadgun/corrodepuff { spreadgun/corrodepuff1 spreadgun/corrodepuff2 }
$limit spreadgun/corrodepuff 32
spreadgun/ball1 sounds/spreadgun/spread_ball1.ogg
spreadgun/ball2 sounds/spreadgun/spread_ball2.ogg
spreadgun/ball3 sounds/spreadgun/spread_ball3.ogg

Binary file not shown.

Binary file not shown.

Binary file not shown.

View file

@ -854,7 +854,7 @@ Class CorrodeSmoke : SWWMHalfSmoke
Class CorrodeDebuff : Inventory
{
int cnt, cnt2;
int cnt, cnt2, cnt3;
Actor instigator;
bool wasalive;
@ -866,7 +866,6 @@ Class CorrodeDebuff : Inventory
Inventory.InterHubAmount 0;
+INVENTORY.UNDROPPABLE;
+INVENTORY.UNTOSSABLE;
+NOEXTREMEDEATH;
}
override int DoSpecialDamage( Actor target, int Damage, Name DamageType )
{
@ -878,12 +877,25 @@ Class CorrodeDebuff : Inventory
c = CorrodeDebuff(Spawn("CorrodeDebuff",target.pos));
c.AttachToOwner(target);
c.cnt = 5; // slight delay
c.A_StartSound("spreadgun/corrode",CHAN_VOICE,CHANF_DEFAULT);
c.Amount = min(Damage*8,int(Amount*.6)); // prevent "escalating" spread
c.A_StartSound("spreadgun/corrode",CHAN_VOICE,CHANF_DEFAULT,min(c.Amount/100.,1.));
}
if ( c.Amount < int(Amount*.6) ) c.Amount = clamp(c.Amount+Damage*8,0,int(Amount*.6)); // prevent "escalating" spread
else if ( c.Amount < int(Amount*.6) ) c.Amount = min(c.Amount+Damage*8,int(Amount*.6)); // prevent "escalating" spread
c.instigator = instigator;
return 0; // no direct damage
}
override void AttachToOwner( Actor other )
{
Super.AttachToOwner(other);
cnt3 = Random[Corrode](0,19); // randomize puff sound offset
}
override void OwnerDied()
{
Super.OwnerDied();
// forcibly update
wasalive = true;
cnt = -1;
}
override void DoEffect()
{
Super.DoEffect();
@ -902,38 +914,42 @@ Class CorrodeDebuff : Inventory
cnt--;
if ( cnt < 0 )
{
cnt = clamp((100-Amount)/10,5,15);
if ( !Random[Corrode](0,3) ) Owner.Howl();
double maxrad = max(Owner.radius,Owner.height);
int defh = Owner.GetSpawnHealth();
Owner.DamageMobj(self,instigator?instigator:Actor(self),clamp(Amount/8,1,50),'Corroded',DMG_THRUSTLESS);
bool justdied = (wasalive && (!Owner || Owner.Health <= 0));
bool justdied = (wasalive && (!Owner || (Owner.Health <= 0)));
if ( justdied )
{
maxrad += 50;
Amount = max(100,Amount);
maxrad += 60;
Amount = min(Amount+int(defh**.5),MaxAmount);
A_StartSound("spreadgun/corrode",CHAN_VOICE,CHANF_DEFAULT);
}
if ( !wasalive ) maxrad += 20;
if ( !wasalive ) maxrad += 25;
SWWMUtility.DoExplosion(self,clamp(Amount/8,1,50),0,maxrad*1.2,maxrad*.9,DE_NOBLEED|DE_NOSPLASH|DE_HOWL,'Corroded',Owner);
int smokefact = int(clamp(maxrad/32.,1,8));
int numpt = Random[Corrode](-1,1*smokefact);
if ( justdied ) numpt = Random[Corrode](4,6)*smokefact;
int numpt = Random[Corrode](0,2*smokefact);
if ( justdied ) numpt = Random[Corrode](8,12)*smokefact;
for ( int i=0; i<numpt; i++ )
{
let s = Spawn("CorrodeSmoke",level.Vec3Offset(Owner.pos,(.8*FRandom[Corrode](-Owner.radius,Owner.radius),.8*FRandom[Corrode](-Owner.radius,Owner.radius),FRandom[Corrode](.1*Owner.Height,.9*Owner.Height))));
s.vel = Owner.vel*.5;
if ( justdied ) s.vel += (FRandom[Corrode](-1,1),FRandom[Corrode](-1,1),FRandom[Corrode](-1,1))*FRandom[Corrode](2.,4.);
if ( justdied ) s.vel += (FRandom[Corrode](-1,1),FRandom[Corrode](-1,1),FRandom[Corrode](-1,1))*FRandom[Corrode](2.,8.);
else if ( !wasalive ) s.vel += (FRandom[Corrode](-1,1),FRandom[Corrode](-1,1),FRandom[Corrode](-1,1))*FRandom[Corrode](.2,2.);
else s.vel += (FRandom[Corrode](-1,1),FRandom[Corrode](-1,1),FRandom[Corrode](-1,1))*FRandom[Corrode](.1,1.);
s.scale *= FRandom[Corrode](2.,3.);
s.alpha *= Clamp(Amount/10.,0.,.6);
if ( justdied ) s.special1 = Random[Corrode](0,1);
if ( justdied ) s.special1 = Random[Corrode](0,2);
else if ( !wasalive ) s.special1 = Random[Corrode](0,1);
}
cnt = clamp((100-Amount)/10,5,15);
}
wasalive = (Owner && Owner.Health > 0);
cnt3++;
if ( !(cnt3%20) ) A_StartSound("spreadgun/corrodepuff",CHAN_BODY,CHANF_OVERLAP,min(Amount/200.,1.),2.,FRandom[Corrode](.8,1.2)-min(Amount/200.,.4));
cnt2++;
if ( cnt2 < 4 ) return;
cnt2 = 0;
if ( cnt2 < 3 ) return;
cnt2 = (!Owner||(Owner.Health<=Owner.GetGibHealth()))?-2:0; // slower decay when gibbed
Amount -= 1;
if ( Amount > 100 ) Amount -= max(0,Amount/50-1);
if ( !Owner ) return;
@ -1002,9 +1018,9 @@ Class CorrosiveSplash : Actor
c = CorrodeDebuff(Spawn("CorrodeDebuff",target.pos));
c.AttachToOwner(target);
c.cnt = 5; // slight delay
c.A_StartSound("spreadgun/corrode",CHAN_VOICE,CHANF_DEFAULT);
}
c.Amount = clamp(c.Amount+Damage,100,c.MaxAmount);
c.Amount = min(c.Amount+Damage,c.MaxAmount);
c.A_StartSound("spreadgun/corrode",CHAN_VOICE,CHANF_DEFAULT,min(c.Amount/100.,1.));
c.instigator = self.target;
return 0; // no direct damage
}
@ -1106,10 +1122,10 @@ Class CorrosiveFlechette : Actor
c = CorrodeDebuff(Spawn("CorrodeDebuff",a.pos));
c.AttachToOwner(a);
}
c.Amount = clamp(c.Amount+25,100,c.MaxAmount);
c.Amount = min(c.Amount+25,c.MaxAmount);
c.cnt = 0;
c.instigator = target;
c.A_StartSound("spreadgun/corrode",CHAN_VOICE,CHANF_DEFAULT);
c.A_StartSound("spreadgun/corrode",CHAN_VOICE,CHANF_DEFAULT,min(c.Amount/100.,1.));
}
int dmg = 3;
int amt = 3;