More Mortal Rifle tweaks.

This commit is contained in:
Mari the Deer 2022-09-28 22:26:56 +02:00
commit fcea7fa7ce
4 changed files with 21 additions and 22 deletions

View file

@ -23,7 +23,7 @@ Class MisterRailTracer : LineTracer
Array<WaterHit> waterhitlist;
Array<MRRailSeg> portalseg;
double maxdist;
int maxpen;
bool pastwall, fullstop;
Array<WallPenetrate> WallPenetrateList;
@ -66,10 +66,8 @@ Class MisterRailTracer : LineTracer
ent.pastwall = pastwall;
ent.bExit = false;
hitlist.Push(ent);
// also include exit point if we can reach it
// also include exit point
Vector3 exit = SWWMUtility.TraceExit(Results.HitActor,Results.HitPos,Results.HitVector);
if ( level.Vec3Diff(Results.HitPos,exit).length() > (maxdist-Results.Distance) )
return TRACE_Skip; // exit point is beyond our max distance
ent = new("MRHitListEntry");
ent.hitactor = Results.HitActor;
ent.hitlocation = exit;
@ -94,8 +92,7 @@ Class MisterRailTracer : LineTracer
if ( (Results.Tier == TIER_Middle) && Results.HitLine.sidedef[1] && !(Results.HitLine.Flags&(Line.ML_BlockHitscan|Line.ML_BlockEverything)) )
return TRACE_Skip;
}
int maxstep = int(maxdist-Results.Distance);
for ( int i=1; i<=maxstep; i++ )
for ( int i=1; i<=maxpen; i++ ) // originally meant to trace up to maxdist, but this destroyed performance
{
Vector3 ofs = Results.HitPos+Results.HitVector*i;
if ( level.IsPointInLevel(ofs) )
@ -794,6 +791,7 @@ Class MisterRifle : SWWMWeapon
mrt.wallpenetratelist.Clear();
mrt.ffloors.Clear();
mrt.portalseg.Clear();
mrt.maxpen = 400;
for ( int i=0; i<level.Sectors.Size(); i++ )
{
Sector s = level.Sectors[i];
@ -806,12 +804,13 @@ Class MisterRifle : SWWMWeapon
}
mrt.pastwall = false;
Vector3 norigin = origin;
mrt.maxdist = 10000.;
double maxdist = 10000.;
do
{
mrt.fullstop = true;
mrt.Trace(norigin,level.PointInSector(norigin.xy),dir,mrt.maxdist,TRACE_HitSky|TRACE_ReportPortals);
mrt.maxdist -= (mrt.exitpoint-norigin).length();
mrt.Trace(norigin,level.PointInSector(norigin.xy),dir,maxdist,TRACE_HitSky|TRACE_ReportPortals);
mrt.maxpen -= 100;
maxdist -= (mrt.exitpoint-norigin).length();
norigin = mrt.exitpoint;
dir = mrt.Results.HitVector;
}
@ -1034,7 +1033,7 @@ Class MisterRifle : SWWMWeapon
Vector3 tdir = level.Vec3Diff(start,end);
double dist = tdir.length();
tdir /= dist;
for ( double d=4.; d<=dist; d+=8. )
for ( double d=4.; d<=dist; d+=16. )
{
if ( !Random[ExploS](0,1) ) continue;
Vector3 ofs = level.Vec3Offset(start,tdir*d);
@ -1053,7 +1052,7 @@ Class MisterRifle : SWWMWeapon
tdir = level.Vec3Diff(start,end);
dist = tdir.length();
tdir /= dist;
for ( double d=4.; d<=dist; d+=8. )
for ( double d=4.; d<=dist; d+=16. )
{
if ( !Random[ExploS](0,1) ) continue;
Vector3 ofs = level.Vec3Offset(start,tdir*d);
@ -1068,7 +1067,7 @@ Class MisterRifle : SWWMWeapon
}
else
{
for ( double d=4.; d<=mrt.Results.Distance; d+=8. )
for ( double d=4.; d<=mrt.Results.Distance; d+=16. )
{
if ( !Random[ExploS](0,1) ) continue;
Vector3 ofs = level.Vec3Offset(origin,startdir*d);

View file

@ -687,21 +687,21 @@ Class MisterRailEntryImpact : MisterBulletImpact
s.scale *= 3.5;
s.alpha *= .4;
}
numpt = Random[ExploS](4,6);
numpt = Random[ExploS](3,5);
for ( int i=0; i<numpt; i++ )
{
Vector3 pvel = SWWMUtility.Vec3FromAngles(FRandom[ExploS](0,360),FRandom[ExploS](-90,90))*FRandom[ExploS](8,12);
let s = Spawn("SWWMSpark",pos);
s.vel = pvel;
}
numpt = Random[ExploS](3,6);
numpt = Random[ExploS](2,4);
for ( int i=0; i<numpt; i++ )
{
Vector3 pvel = SWWMUtility.Vec3FromAngles(FRandom[ExploS](0,360),FRandom[ExploS](-90,90))*FRandom[ExploS](4,16);
let s = Spawn("SWWMChip",pos);
s.vel = pvel;
}
numpt = Random[ExploS](4,8);
numpt = Random[ExploS](3,6);
for ( int i=0; i<numpt; i++ )
{
let s = Spawn("MisterFuzzy",pos);
@ -765,7 +765,7 @@ Class MisterRailExitImpact : MisterBulletImpact
Scale *= FRandom[ExploS](0.8,1.1);
Scale.x *= RandomPick[ExploS](-1,1);
Scale.y *= RandomPick[ExploS](-1,1);
int numpt = Random[ExploS](15,20);
int numpt = Random[ExploS](10,15);
for ( int i=0; i<numpt; i++ )
{
Vector3 pvel = SWWMUtility.Vec3FromAngles(FRandom[ExploS](0,360),FRandom[ExploS](-90,90))*FRandom[ExploS](1,12);
@ -776,21 +776,21 @@ Class MisterRailExitImpact : MisterBulletImpact
s.scale *= 3.5;
s.alpha *= .4;
}
numpt = Random[ExploS](8,12);
numpt = Random[ExploS](4,8);
for ( int i=0; i<numpt; i++ )
{
Vector3 pvel = SWWMUtility.Vec3FromAngles(FRandom[ExploS](0,360),FRandom[ExploS](-90,90))*FRandom[ExploS](8,12);
let s = Spawn("SWWMSpark",pos);
s.vel = pvel;
}
numpt = Random[ExploS](6,16);
numpt = Random[ExploS](4,12);
for ( int i=0; i<numpt; i++ )
{
Vector3 pvel = SWWMUtility.Vec3FromAngles(FRandom[ExploS](0,360),FRandom[ExploS](-90,90))*FRandom[ExploS](4,16);
let s = Spawn("SWWMChip",pos);
s.vel = pvel;
}
numpt = Random[ExploS](8,12);
numpt = Random[ExploS](4,8);
for ( int i=0; i<numpt; i++ )
{
let s = Spawn("MisterFuzzy",pos);

View file

@ -177,7 +177,7 @@ Class SWWMStats : SWWMStaticThinker
else if ( (inflictor is 'BigBiospark') || (inflictor is 'BiosparkBall') || (inflictor is 'BiosparkBeamImpact') || (inflictor is 'BiosparkComboImpact') || (inflictor is 'BiosparkComboImpactSub') || (inflictor is 'BiosparkBeam') || (inflictor is 'BiosparkArc') || (inflictor is 'BiosparkCore') ) which = 'Sparkster';
else if ( (inflictor is 'SilverAirRip') || (inflictor is 'SilverAirRip2') || (inflictor is 'SilverImpact') || (inflictor is 'FatChodeImpact') || (inflictor is 'FatChodeExplosionArm') ) which = 'SilverBullet';
else if ( (inflictor is 'CandyBeam') || (inflictor is 'CandyPop') || (inflictor is 'CandyMagArm') || (inflictor is 'CandyGunProj') || (inflictor is 'CandyMagProj') || (inflictor is 'CandyBulletImpact') ) which = 'CandyGun';
else if ( (inflictor is 'MisterBulletImpact') || (inflictor is 'MisterPop') || (inflictor is 'MisterFuzzy') || (inflictor is 'MisterGrenade') ) which = 'MisterRifle';
else if ( (inflictor is 'MisterBulletImpact') || (inflictor is 'MisterPop') || (inflictor is 'MisterFuzzy') || (inflictor is 'MisterGrenade') || (inflictor is 'MisterRailBeam') ) which = 'MisterRifle';
else if ( (inflictor is 'YnykronBeam') || (inflictor is 'YnykronImpact') || (inflictor is 'YnykronSingularity') || (inflictor is 'YnykronCloud') || (inflictor is 'YnykronVoidBeam') || (inflictor is 'YnykronLightningArc') || (inflictor is 'YnykronLightningImpact') ) which = 'Ynykron';
else if ( (inflictor is 'Demolitionist') || (inflictor is 'DemolitionistShockwave') || (inflictor is 'DemolitionistRadiusShockwave') || (inflictor is 'SWWMGesture')
|| (inflictor is 'SWWMItemGesture') ) which = 'SWWMWeapon'; // hack to assume Demolitionist as weapon