More Mortal Rifle tweaks.
This commit is contained in:
parent
144d076f75
commit
fcea7fa7ce
4 changed files with 21 additions and 22 deletions
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue