Increase Mortal Rifle grenade intelligence.

This commit is contained in:
Mari the Deer 2022-09-15 01:02:47 +02:00
commit d7d5c16b46
2 changed files with 21 additions and 11 deletions

View file

@ -1,3 +1,3 @@
[default]
SWWM_MODVER="\cyDEMOLITIONIST \cw1.3pre r454 \cu(Wed 14 Sep 20:51:05 CEST 2022)\c-";
SWWM_SHORTVER="\cw1.3pre r454 \cu(2022-09-14 20:51:05)\c-";
SWWM_MODVER="\cyDEMOLITIONIST \cw1.3pre r457 \cu(Thu 15 Sep 01:02:47 CEST 2022)\c-";
SWWM_SHORTVER="\cw1.3pre r457 \cu(2022-09-15 01:02:47)\c-";

View file

@ -438,7 +438,7 @@ Class MisterBulletImpact : Actor
{
if ( special1 && (special1 <= 10) )
{
SWWMUtility.DoExplosion(self,44,20000+special1*1000,50+special1*15,50+special1*15,DE_EXTRAZTHRUST);
SWWMUtility.DoExplosion(self,44,5000+special1*300,50+special1*15,50+special1*15,DE_EXTRAZTHRUST);
int numpt = Random[ExploS](0,special1);
for ( int i=0; i<numpt; i++ )
{
@ -744,7 +744,7 @@ Class MisterGrenade : Actor
}
// gather seekable targets
Array<Actor> candidates;
let bt = BlockThingsIterator.Create(self,10000);
let bt = BlockThingsIterator.Create(self,2000);
let tt = new("TargetTracer");
tt.target = target;
while ( bt.Next() )
@ -752,7 +752,7 @@ Class MisterGrenade : Actor
let t = bt.Thing;
if ( !t || (t == tracer) || !t.bSHOOTABLE || (!t.bISMONSTER && !(t is 'BossBrain')) || (t.Health <= 0) || (target && t.IsFriend(target)) || !CheckSight(t,SF_IGNOREVISIBILITY|SF_IGNOREWATERBOUNDARY) ) continue;
// don't seek if enemy is too close to shooter
if ( target && SWWMUtility.SphereIntersect(t,target.pos,200) ) continue;
if ( target && SWWMUtility.SphereIntersect(t,target.pos,250) ) continue;
// don't seek if shooter is between us and the enemy
if ( target )
{
@ -764,6 +764,16 @@ Class MisterGrenade : Actor
if ( tt.Trace(pos,CurSector,dirto,distto,0) ) continue;
}
}
// don't seek if enemy is too close to another candidate
// this would cause some of the splash damage potential to go to waste
bool tooclose = false;
for ( int i=0; i<candidates.Size(); i++ )
{
if ( !SWWMUtility.SphereIntersect(t,candidates[i].pos,150) ) continue;
tooclose = true;
break;
}
if ( tooclose ) continue;
candidates.Push(t);
}
// sort by distance
@ -796,7 +806,7 @@ Class MisterGrenade : Actor
{
if ( special2 && (special2 <= 20) )
{
if ( special2 <= 10 ) SWWMUtility.DoExplosion(self,44,25000+special2*500,100+special2*20,100+special2*20,DE_EXTRAZTHRUST);
SWWMUtility.DoExplosion(self,44,5000+special2*500,100+special2*10,100+special2*10,DE_EXTRAZTHRUST);
int numpt = Random[ExploS](special2/2,special2);
for ( int i=0; i<numpt; i++ )
{
@ -855,7 +865,7 @@ Class MisterSubGrenade : MisterGrenade
vel /= spd;
vel = (vel*.2+dirto*.8)*spd;
// extra oomph
if ( spd < speed ) vel += dirto*max(10,speed-spd);
if ( spd < speed ) vel += dirto*max(20,speed-spd);
}
override void A_GrenadeTick( bool bRest, bool bNoProx )
{
@ -881,7 +891,7 @@ Class MisterSubGrenade : MisterGrenade
vel /= spd;
vel = (vel*.7+dirto*.3)*spd;
// extra oomph
if ( spd < speed ) vel += dirto*max(2,speed-spd);
if ( spd < speed ) vel += dirto*max(.5,speed-spd);
}
override void A_GrenadeExplode()
{
@ -895,7 +905,7 @@ Class MisterSubGrenade : MisterGrenade
Scale *= FRandom[ExploS](0.8,1.1);
Scale.x *= RandomPick[ExploS](-1,1);
Scale.y *= RandomPick[ExploS](-1,1);
SWWMUtility.DoExplosion(self,444,120000,150,150,DE_EXTRAZTHRUST);
SWWMUtility.DoExplosion(self,444,80000,150,150,DE_EXTRAZTHRUST);
A_QuakeEx(5,5,5,10,0,500,"",QF_RELATIVE|QF_SCALEDOWN|QF_3D,falloff:150,rollintensity:.8);
A_StartSound("mister/hitgrenadesub",CHAN_VOICE,attenuation:.5);
A_StartSound("mister/hitgrenadesub",CHAN_WEAPON,attenuation:.4);
@ -940,8 +950,8 @@ Class MisterSubGrenade : MisterGrenade
{
if ( special2 && (special2 <= 10) )
{
if ( special2 <= 5 ) SWWMUtility.DoExplosion(self,44,15000+special2*500,100+special2*20,100+special2*20,DE_EXTRAZTHRUST);
int numpt = Random[ExploS](0,special2);
SWWMUtility.DoExplosion(self,44,5000+special2*500,100+special2*10,100+special2*10,DE_EXTRAZTHRUST);
int numpt = Random[ExploS](special2/2,special2);
for ( int i=0; i<numpt; i++ )
{
Vector3 np = level.Vec3Offset(pos,SWWMUtility.Vec3FromAngles(FRandom[ExploS](0,360),FRandom[ExploS](-90,90))*FRandom[ExploS](2,10)*special2);