Reduce performance impact of MR overpressure shot.
This commit is contained in:
parent
e571fccc4d
commit
144d076f75
3 changed files with 57 additions and 44 deletions
|
|
@ -1,3 +1,3 @@
|
|||
[default]
|
||||
SWWM_MODVER="\cyDEMOLITIONIST \cw1.3pre r524 \cu(Wed 28 Sep 21:00:24 CEST 2022)\c-";
|
||||
SWWM_SHORTVER="\cw1.3pre r524 \cu(2022-09-28 21:00:24)\c-";
|
||||
SWWM_MODVER="\cyDEMOLITIONIST \cw1.3pre r526 \cu(Wed 28 Sep 21:42:26 CEST 2022)\c-";
|
||||
SWWM_SHORTVER="\cw1.3pre r526 \cu(2022-09-28 21:42:26)\c-";
|
||||
|
|
|
|||
|
|
@ -913,8 +913,28 @@ Class MisterRifle : SWWMWeapon
|
|||
b.A_CheckTerrain();
|
||||
}
|
||||
Array<MisterBulletImpact> bi; // so we can ignite them all at once after main contact damage
|
||||
bool bskipme = false;
|
||||
for ( int i=0; i<mrt.hitlist.Size(); i++ )
|
||||
{
|
||||
if ( mrt.HitList[i].HitActor && !mrt.HitList[i].bExit )
|
||||
{
|
||||
SWWMUtility.DoKnockback(mrt.HitList[i].HitActor,mrt.HitList[i].x+(0,0,0.025),80000);
|
||||
let p = SWWMPuff.Setup(mrt.HitList[i].HitLocation,mrt.HitList[i].x,invoker,self,mrt.HitList[i].HitActor);
|
||||
mrt.HitList[i].HitActor.DamageMobj(p,self,4444,'Mortal',DMG_FOILINVUL|DMG_THRUSTLESS|DMG_INFLICTOR_IS_PUFF);
|
||||
if ( !mrt.HitList[i].HitActor || (mrt.HitList[i].HitActor.Health <= 0) )
|
||||
mrc.nkill++;
|
||||
}
|
||||
if ( mrt.HitList[i].bExit && (i < mrt.hitlist.Size()-1)
|
||||
&& (level.Vec3Diff(mrt.HitList[i].HitLocation,mrt.HitList[i+1].HitLocation).length() < 100) )
|
||||
{
|
||||
bskipme = true;
|
||||
continue;
|
||||
}
|
||||
if ( bskipme )
|
||||
{
|
||||
bskipme = false;
|
||||
continue;
|
||||
}
|
||||
if ( mrt.HitList[i].bExit )
|
||||
{
|
||||
let b = MisterBulletImpact(Spawn("MisterRailExitImpact",mrt.hitlist[i].HitLocation-mrt.hitlist[i].x*4.));
|
||||
|
|
@ -924,37 +944,19 @@ Class MisterRifle : SWWMWeapon
|
|||
b.mrc = mrc;
|
||||
mrc.effectors.Push(b);
|
||||
bi.Push(b);
|
||||
continue;
|
||||
}
|
||||
else
|
||||
{
|
||||
let b = MisterBulletImpact(Spawn("MisterRailEntryImpact",mrt.hitlist[i].HitLocation+mrt.hitlist[i].x*4.));
|
||||
b.angle = atan2(mrt.HitList[i].x.y,mrt.HitList[i].x.x)+180;
|
||||
b.pitch = asin(mrt.HitList[i].x.z);
|
||||
b.target = self;
|
||||
b.mrc = mrc;
|
||||
mrc.effectors.Push(b);
|
||||
bi.Push(b);
|
||||
}
|
||||
if ( !mrt.HitList[i].HitActor || mrt.HitList[i].bExit ) continue;
|
||||
SWWMUtility.DoKnockback(mrt.HitList[i].HitActor,mrt.HitList[i].x+(0,0,0.025),80000);
|
||||
let p = SWWMPuff.Setup(mrt.HitList[i].HitLocation,mrt.HitList[i].x,invoker,self,mrt.HitList[i].HitActor);
|
||||
mrt.HitList[i].HitActor.DamageMobj(p,self,4444,'Mortal',DMG_FOILINVUL|DMG_THRUSTLESS|DMG_INFLICTOR_IS_PUFF);
|
||||
if ( !mrt.HitList[i].HitActor || (mrt.HitList[i].HitActor.Health <= 0) )
|
||||
mrc.nkill++;
|
||||
}
|
||||
LineTracer faketracer = new("LineTracer");
|
||||
for ( int i=0; i<mrt.wallpenetratelist.Size(); i++ )
|
||||
{
|
||||
bool bExit = !!(i%2); // odd-numbered entries are exit points
|
||||
Vector3 hitpos = mrt.WallPenetrateList[i].hitpos;
|
||||
Vector3 hitnormal = mrt.WallPenetrateList[i].hitnormal;
|
||||
let b = MisterBulletImpact(Spawn(bExit?"MisterRailExitImpact":"MisterRailEntryImpact",hitpos+hitnormal*4.));
|
||||
b.angle = atan2(hitnormal.y,hitnormal.x);
|
||||
b.pitch = asin(-hitnormal.z);
|
||||
let b = MisterBulletImpact(Spawn("MisterRailEntryImpact",mrt.hitlist[i].HitLocation+mrt.hitlist[i].x*4.));
|
||||
b.angle = atan2(mrt.HitList[i].x.y,mrt.HitList[i].x.x)+180;
|
||||
b.pitch = asin(mrt.HitList[i].x.z);
|
||||
b.target = self;
|
||||
b.mrc = mrc;
|
||||
mrc.effectors.Push(b);
|
||||
bi.Push(b);
|
||||
}
|
||||
LineTracer faketracer = new("LineTracer");
|
||||
for ( int i=0; i<mrt.wallpenetratelist.Size(); i++ )
|
||||
{
|
||||
if ( mrt.WallPenetrateList[i].hittype == TRACE_HitWall )
|
||||
mrt.WallPenetrateList[i].hitline.Activate(self,mrt.WallPenetrateList[i].hitside,SPAC_Impact);
|
||||
if ( swwm_omnibust )
|
||||
|
|
@ -967,6 +969,27 @@ Class MisterRifle : SWWMWeapon
|
|||
faketracer.Results.Tier = mrt.WallPenetrateList[i].HitTier;
|
||||
BusterWall.Bust(faketracer.Results,444,self,mrt.WallPenetrateList[i].BustDir,mrt.WallPenetrateList[i].HitPos.z);
|
||||
}
|
||||
bool bExit = !!(i%2); // odd-numbered entries are exit points
|
||||
if ( bExit && (i < mrt.wallpenetratelist.Size()-1)
|
||||
&& (level.Vec3Diff(mrt.wallpenetratelist[i].HitPos,mrt.wallpenetratelist[i+1].HitPos).length() < 100) )
|
||||
{
|
||||
bskipme = true;
|
||||
continue;
|
||||
}
|
||||
if ( bskipme )
|
||||
{
|
||||
bskipme = false;
|
||||
continue;
|
||||
}
|
||||
Vector3 hitpos = mrt.WallPenetrateList[i].hitpos;
|
||||
Vector3 hitnormal = mrt.WallPenetrateList[i].hitnormal;
|
||||
let b = MisterBulletImpact(Spawn(bExit?"MisterRailExitImpact":"MisterRailEntryImpact",hitpos+hitnormal*4.));
|
||||
b.angle = atan2(hitnormal.y,hitnormal.x);
|
||||
b.pitch = asin(-hitnormal.z);
|
||||
b.target = self;
|
||||
b.mrc = mrc;
|
||||
mrc.effectors.Push(b);
|
||||
bi.Push(b);
|
||||
}
|
||||
if ( (mrt.Results.HitType != TRACE_HitNone) && (mrt.Results.HitType != TRACE_HasHitSky) && (mrt.Results.HitType != TRACE_HitActor) )
|
||||
{
|
||||
|
|
@ -998,24 +1021,12 @@ Class MisterRifle : SWWMWeapon
|
|||
}
|
||||
for ( int i=0; i<bi.Size(); i++ ) bi[i].A_BulletExplode();
|
||||
double dist = level.Vec3Diff(origin,mrt.Results.HitPos).length();
|
||||
for ( double d=0.; d<=dist; d+=200. )
|
||||
for ( double d=0.; d<=dist; d+=250. )
|
||||
{
|
||||
Vector3 p = level.Vec3Offset(origin,startdir*d);
|
||||
if ( !level.IsPointInlevel(p) ) continue;
|
||||
Spawn("MisterRailLight",p);
|
||||
}
|
||||
int numpt = Random[ExploS](50,100);
|
||||
double dv = max(16.,dist/numpt);
|
||||
for ( double d=32.; d<=dist; d+=dv )
|
||||
{
|
||||
Vector3 np = level.Vec3Offset(origin,startdir*d);
|
||||
np = level.Vec3Offset(np,SWWMUtility.Vec3FromAngles(FRandom[ExploS](0,360),FRandom[ExploS](-90,90))*FRandom[ExploS](4,12));
|
||||
if ( !level.IsPointInLevel(np) ) continue;
|
||||
let p = Spawn("MisterPop",np);
|
||||
p.target = self;
|
||||
MisterPop(p).mrc = mrc;
|
||||
mrc.effectors.Push(p);
|
||||
}
|
||||
if ( mrt.wallpenetratelist.Size() > 0 )
|
||||
{
|
||||
Vector3 start = origin;
|
||||
|
|
|
|||
|
|
@ -666,7 +666,7 @@ Class MisterRailEntryImpact : MisterBulletImpact
|
|||
}
|
||||
override void A_BulletExplode()
|
||||
{
|
||||
A_AlertMonsters(swwm_uncapalert?0:4000);
|
||||
A_AlertMonsters(swwm_uncapalert?0:2000);
|
||||
int nhit, nkill;
|
||||
[nhit, nkill] = SWWMUtility.DoExplosion(self,444,200000,100,100,DE_EXTRAZTHRUST|DE_COUNTENEMIES);
|
||||
if ( mrc ) mrc.nkill += nkill;
|
||||
|
|
@ -701,7 +701,7 @@ Class MisterRailEntryImpact : MisterBulletImpact
|
|||
let s = Spawn("SWWMChip",pos);
|
||||
s.vel = pvel;
|
||||
}
|
||||
numpt = Random[ExploS](4,6);
|
||||
numpt = Random[ExploS](4,8);
|
||||
for ( int i=0; i<numpt; i++ )
|
||||
{
|
||||
let s = Spawn("MisterFuzzy",pos);
|
||||
|
|
@ -790,7 +790,7 @@ Class MisterRailExitImpact : MisterBulletImpact
|
|||
let s = Spawn("SWWMChip",pos);
|
||||
s.vel = pvel;
|
||||
}
|
||||
numpt = Random[ExploS](10,15);
|
||||
numpt = Random[ExploS](8,12);
|
||||
for ( int i=0; i<numpt; i++ )
|
||||
{
|
||||
let s = Spawn("MisterFuzzy",pos);
|
||||
|
|
@ -1169,6 +1169,7 @@ Class MisterGrenade : Actor
|
|||
A_QuakeEx(8,8,8,20,0,900,"",QF_RELATIVE|QF_SCALEDOWN|QF_3D,falloff:300,rollintensity:1.5);
|
||||
A_StartSound("mister/hitgrenade",CHAN_VOICE,attenuation:.3);
|
||||
A_StartSound("mister/hitgrenade",CHAN_WEAPON,attenuation:.2);
|
||||
A_AlertMonsters(swwm_uncapalert?0:3500);
|
||||
SetOrigin(Vec3Offset(0,0,Height/2),false);
|
||||
int numpt = Random[ExploS](30,50);
|
||||
for ( int i=0; i<numpt; i++ )
|
||||
|
|
@ -1370,6 +1371,7 @@ Class MisterSubGrenade : MisterGrenade
|
|||
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);
|
||||
A_AlertMonsters(swwm_uncapalert?0:1500);
|
||||
SetOrigin(Vec3Offset(0,0,Height/2),false);
|
||||
int numpt = Random[ExploS](15,25);
|
||||
for ( int i=0; i<numpt; i++ )
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue