MR damage tweaks + Stream Shot implemented.
This commit is contained in:
parent
5c19c6fe50
commit
38499740c3
|
@ -375,6 +375,15 @@ decal YnykronBlast
|
|||
lowerdecal YnykronBlast2
|
||||
}
|
||||
|
||||
decal SmallRocketBlast
|
||||
{
|
||||
pic rktblast
|
||||
shade "00 00 00"
|
||||
x-scale 0.25
|
||||
y-scale 0.25
|
||||
randomflipx
|
||||
randomflipy
|
||||
}
|
||||
decal RocketBlast
|
||||
{
|
||||
pic rktblast
|
||||
|
|
|
@ -1,3 +1,3 @@
|
|||
[default]
|
||||
SWWM_MODVER="\cyDEMOLITIONIST \cw1.3pre r486 \cu(Tue 20 Sep 16:01:57 CEST 2022)\c-";
|
||||
SWWM_SHORTVER="\cw1.3pre r486 \cu(2022-09-20 16:01:57)\c-";
|
||||
SWWM_MODVER="\cyDEMOLITIONIST \cw1.3pre r487 \cu(Tue 20 Sep 21:08:07 CEST 2022)\c-";
|
||||
SWWM_SHORTVER="\cw1.3pre r487 \cu(2022-09-20 21:08:07)\c-";
|
||||
|
|
|
@ -447,35 +447,21 @@ Class MisterRifle : SWWMWeapon
|
|||
[x2, y2, z2] = swwm_CoordUtil.GetAxes(BulletSlope(),angle,roll);
|
||||
double a, s;
|
||||
Vector3 dir;
|
||||
for ( int i=0; i<15; i++ )
|
||||
for ( int i=0; i<8; i++ )
|
||||
{
|
||||
// initial shot
|
||||
if ( i == 0 )
|
||||
// initial shot, triangle
|
||||
if ( i < 3 )
|
||||
{
|
||||
a = FRandom[Mister](0,360);
|
||||
s = .01;
|
||||
dir = SWWMUtility.ConeSpread(x2,y2,z2,a,s);
|
||||
}
|
||||
// next three shots, triangle
|
||||
else if ( i < 4 )
|
||||
{
|
||||
a = 90+120*(i-1)+FRandom[Mister](-15,15);
|
||||
a = 90+120*i+FRandom[Mister](-15,15);
|
||||
s = .04+FRandom[Mister](-.01,.01);
|
||||
dir = SWWMUtility.ConeSpread(x2,y2,z2,a,s);
|
||||
dir = SWWMUtility.ConeSpread(x2,y2*1.5,z2,a,s);
|
||||
}
|
||||
// next five shots, pentagon
|
||||
else if ( i < 9 )
|
||||
{
|
||||
a = -90+72*(i-4)+FRandom[Mister](-20,20);
|
||||
s = .08+FRandom[Mister](-.02,.02);
|
||||
dir = SWWMUtility.ConeSpread(x2,y2*1.2,z2,a,s);
|
||||
}
|
||||
// final six shots, wide hexagon
|
||||
else
|
||||
{
|
||||
a = 60*(i-9)+FRandom[Mister](-25,25);
|
||||
s = .12+FRandom[Mister](-.03,.03);
|
||||
dir = SWWMUtility.ConeSpread(x2,y2*1.6,z2,a,s);
|
||||
a = -90+72*(i-3)+FRandom[Mister](-9,9);
|
||||
s = .08+FRandom[Mister](-.02,.02);
|
||||
dir = SWWMUtility.ConeSpread(x2,y2*2.,z2,a,s);
|
||||
}
|
||||
FLineTraceData d;
|
||||
LineTrace(atan2(dir.y,dir.x),10000,asin(-dir.z),TRF_ABSPOSITION|TRF_NOSKY,origin.z,origin.x,origin.y,d);
|
||||
|
@ -523,7 +509,7 @@ Class MisterRifle : SWWMWeapon
|
|||
b.pitch = asin(-hitnormal.z);
|
||||
b.target = self;
|
||||
MisterBulletImpact(b).A_BulletExplode();
|
||||
if ( swwm_omnibust ) BusterWall.BustLinetrace(d,44,self,d.HitDir,d.HitLocation.z);
|
||||
if ( swwm_omnibust ) BusterWall.BustLinetrace(d,444,self,d.HitDir,d.HitLocation.z);
|
||||
}
|
||||
}
|
||||
return ResolveState("FireCluster");
|
||||
|
@ -610,6 +596,69 @@ Class MisterRifle : SWWMWeapon
|
|||
SWWMUtility.DoKnockback(self,-x,5000.);
|
||||
A_QuakeEx(3,3,3,5,0,10,"",QF_RELATIVE|QF_SCALEDOWN|QF_3D,rollIntensity:.4);
|
||||
A_BumpFOV(.97);
|
||||
if ( index == 0 ) A_AlertMonsters(swwm_uncapalert?0:5000);
|
||||
for ( int i=0; i<3; i++ )
|
||||
{
|
||||
let s = Spawn("SWWMSmoke",origin);
|
||||
s.scale *= .4;
|
||||
s.alpha *= .1;
|
||||
s.speed *= .5;
|
||||
s.vel += vel*.5+x*FRandom[Mister](1.,2.);
|
||||
s.SetShade(Color(0,3,4)*Random[ExploS](48,63));
|
||||
}
|
||||
Vector3 x2, y2, z2;
|
||||
[x2, y2, z2] = swwm_CoordUtil.GetAxes(BulletSlope(),angle,roll);
|
||||
static const double spd[] = {.00,.01,.03,.06,.10};
|
||||
double a = FRandom[Mister](0,360), s = FRandom[Mister](spd[index],spd[index+1]);
|
||||
Vector3 dir = SWWMUtility.ConeSpread(x2,y2,z2,a,s);
|
||||
FLineTraceData d;
|
||||
LineTrace(atan2(dir.y,dir.x),10000,asin(-dir.z),TRF_ABSPOSITION|TRF_NOSKY,origin.z,origin.x,origin.y,d);
|
||||
SWWMBulletTrail.DoTrail(self,origin,dir,10000,2);
|
||||
if ( d.HitType == TRACE_HitActor )
|
||||
{
|
||||
if ( d.HitActor.bNOBLOOD || d.HitActor.bDORMANT )
|
||||
{
|
||||
let p = Spawn("SWWMBulletImpact",d.HitLocation);
|
||||
p.angle = atan2(d.HitDir.y,d.HitDir.x)+180;
|
||||
p.pitch = asin(d.HitDir.z);
|
||||
p.target = self;
|
||||
}
|
||||
let b = Spawn("MisterStreamImpact",d.HitLocation-d.HitDir*4.);
|
||||
b.angle = atan2(d.HitDir.y,d.HitDir.x)+180;
|
||||
b.pitch = asin(d.HitDir.z);
|
||||
b.target = self;
|
||||
MisterBulletImpact(b).A_BulletExplode();
|
||||
}
|
||||
else if ( d.HitType != TRACE_HitNone )
|
||||
{
|
||||
Vector3 hitnormal = -d.HitDir;
|
||||
if ( d.HitType == TRACE_HitFloor )
|
||||
{
|
||||
if ( d.Hit3DFloor ) hitnormal = -d.Hit3DFloor.top.Normal;
|
||||
else hitnormal = d.HitSector.floorplane.Normal;
|
||||
}
|
||||
else if ( d.HitType == TRACE_HitCeiling )
|
||||
{
|
||||
if ( d.Hit3DFloor ) hitnormal = -d.Hit3DFloor.bottom.Normal;
|
||||
else hitnormal = d.HitSector.ceilingplane.Normal;
|
||||
}
|
||||
else if ( d.HitType == TRACE_HitWall )
|
||||
{
|
||||
hitnormal = (-d.HitLine.delta.y,d.HitLine.delta.x,0).unit();
|
||||
if ( !d.LineSide ) hitnormal *= -1;
|
||||
}
|
||||
let p = Spawn("SWWMBulletImpact",d.HitLocation+hitnormal*0.01);
|
||||
p.angle = atan2(hitnormal.y,hitnormal.x);
|
||||
p.pitch = asin(-hitnormal.z);
|
||||
p.target = self;
|
||||
if ( d.HitLine ) d.HitLine.RemoteActivate(self,d.LineSide,SPAC_Impact,d.HitLocation);
|
||||
let b = Spawn("MisterStreamImpact",d.HitLocation+hitnormal*4.);
|
||||
b.angle = atan2(hitnormal.y,hitnormal.x);
|
||||
b.pitch = asin(-hitnormal.z);
|
||||
b.target = self;
|
||||
MisterBulletImpact(b).A_BulletExplode();
|
||||
if ( swwm_omnibust ) BusterWall.BustLinetrace(d,444,self,d.HitDir,d.HitLocation.z);
|
||||
}
|
||||
}
|
||||
|
||||
action void A_MisterStartRail()
|
||||
|
|
|
@ -115,8 +115,8 @@ Class MisterExLight : PaletteLight
|
|||
Default
|
||||
{
|
||||
Tag "Cyanblu";
|
||||
ReactionTime 30;
|
||||
Args 0,0,0,200;
|
||||
ReactionTime 35;
|
||||
Args 0,0,0,250;
|
||||
}
|
||||
}
|
||||
Class MisterExLightBig : MisterExLight
|
||||
|
@ -139,7 +139,7 @@ Class MisterExLightTiny : MisterExLight
|
|||
{
|
||||
Default
|
||||
{
|
||||
ReactionTime 20;
|
||||
ReactionTime 15;
|
||||
Args 0,0,0,80;
|
||||
}
|
||||
}
|
||||
|
@ -208,14 +208,14 @@ Class MisterFuzzy : Actor
|
|||
}
|
||||
override void PostBeginPlay()
|
||||
{
|
||||
special1 += Random[ExploS](4,8);
|
||||
special1 += Random[ExploS](4,10);
|
||||
specialf1 = special1;
|
||||
vel = SWWMUtility.Vec3FromAngles(angle,pitch)*FRandom[ExploS](8,24);
|
||||
}
|
||||
override void Tick()
|
||||
{
|
||||
if ( isFrozen() ) return;
|
||||
SWWMUtility.DoExplosion(self,(special2==1)?444:(special2==0)?44:4,3000,80,80,DE_EXTRAZTHRUST);
|
||||
SWWMUtility.DoExplosion(self,(special2<0)?4:44,3000,80,80,DE_EXTRAZTHRUST);
|
||||
special1--;
|
||||
if ( special1 <= 0 )
|
||||
{
|
||||
|
@ -440,7 +440,7 @@ Class MisterBulletImpact : Actor
|
|||
let s = Spawn("SWWMChip",pos);
|
||||
s.vel = pvel;
|
||||
}
|
||||
numpt = Random[ExploS](10,12);
|
||||
numpt = Random[ExploS](15,20);
|
||||
for ( int i=0; i<numpt; i++ )
|
||||
{
|
||||
let s = Spawn("MisterFuzzy",pos);
|
||||
|
@ -453,9 +453,9 @@ Class MisterBulletImpact : Actor
|
|||
}
|
||||
virtual void A_BulletSubExplode()
|
||||
{
|
||||
if ( special1 && (special1 <= 10) )
|
||||
if ( special1 && (special1 <= 15) )
|
||||
{
|
||||
SWWMUtility.DoExplosion(self,44,5000+special1*300,50+special1*15,50+special1*15,DE_EXTRAZTHRUST);
|
||||
SWWMUtility.DoExplosion(self,44,5000+special1*200,50+special1*10,50+special1*10,DE_EXTRAZTHRUST);
|
||||
int numpt = Random[ExploS](0,special1);
|
||||
for ( int i=0; i<numpt; i++ )
|
||||
{
|
||||
|
@ -483,7 +483,7 @@ Class MisterBulletImpact : Actor
|
|||
{
|
||||
Spawn:
|
||||
TNT1 A 0;
|
||||
XEX7 ACEGIKMOQSUWY[] 1 Bright A_BulletSubExplode();
|
||||
XEX7 ABDEGHJKMNPQSTVWYZ\] 1 Bright A_BulletSubExplode();
|
||||
Stop;
|
||||
}
|
||||
}
|
||||
|
@ -497,14 +497,14 @@ Class MisterBuckshotImpact : MisterBulletImpact
|
|||
override void A_BulletExplode()
|
||||
{
|
||||
A_AlertMonsters(swwm_uncapalert?0:1000);
|
||||
SWWMUtility.DoExplosion(self,44,4000,100,100,DE_EXTRAZTHRUST);
|
||||
SWWMUtility.DoExplosion(self,444,8000,80,80,DE_EXTRAZTHRUST);
|
||||
A_QuakeEx(2,2,2,5,0,200,"",QF_RELATIVE|QF_SCALEDOWN|QF_3D,falloff:60,rollintensity:.2);
|
||||
A_StartSound("mister/hitscatter",CHAN_VOICE,attenuation:.35);
|
||||
A_SprayDecal("ShockMark",-172);
|
||||
Scale *= FRandom[ExploS](0.8,1.1);
|
||||
Scale.x *= RandomPick[ExploS](-1,1);
|
||||
Scale.y *= RandomPick[ExploS](-1,1);
|
||||
int numpt = Random[ExploS](5,10);
|
||||
int 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](1,4);
|
||||
|
@ -529,14 +529,14 @@ Class MisterBuckshotImpact : MisterBulletImpact
|
|||
let s = Spawn("SWWMChip",pos);
|
||||
s.vel = pvel;
|
||||
}
|
||||
numpt = Random[ExploS](6,8);
|
||||
numpt = Random[ExploS](-2,4);
|
||||
for ( int i=0; i<numpt; i++ )
|
||||
{
|
||||
let s = Spawn("MisterFuzzy",pos);
|
||||
s.angle = FRandom[ExploS](0,360);
|
||||
s.pitch = FRandom[ExploS](-90,90);
|
||||
s.target = target;
|
||||
s.special1 -= 2;
|
||||
s.special1 -= 3;
|
||||
s.special2 = -1;
|
||||
}
|
||||
Spawn("MisterExLightTiny",pos);
|
||||
|
@ -544,10 +544,90 @@ Class MisterBuckshotImpact : MisterBulletImpact
|
|||
p.A_SetScale(1.5);
|
||||
}
|
||||
override void A_BulletSubExplode()
|
||||
{
|
||||
if ( special1 && (special1 <= 5) )
|
||||
{
|
||||
SWWMUtility.DoExplosion(self,44,600+special1*80,40+special1*12,40+special1*12,DE_EXTRAZTHRUST);
|
||||
int numpt = Random[ExploS](0,special1/3);
|
||||
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,16)*special1);
|
||||
if ( !level.IsPointInLevel(np) ) continue;
|
||||
let p = Spawn("MisterPop",np);
|
||||
p.target = target;
|
||||
}
|
||||
}
|
||||
special1++;
|
||||
}
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
TNT1 A 0;
|
||||
XEX7 ADGJMPSVY\ 1 Bright A_BulletSubExplode();
|
||||
Stop;
|
||||
}
|
||||
}
|
||||
|
||||
Class MisterStreamImpact : MisterBulletImpact
|
||||
{
|
||||
Default
|
||||
{
|
||||
Scale 1.;
|
||||
}
|
||||
override void A_BulletExplode()
|
||||
{
|
||||
A_AlertMonsters(swwm_uncapalert?0:4000);
|
||||
SWWMUtility.DoExplosion(self,444,150000,120,120,DE_EXTRAZTHRUST);
|
||||
A_QuakeEx(5,5,5,5,0,300,"",QF_RELATIVE|QF_SCALEDOWN|QF_3D,falloff:100,rollintensity:.5);
|
||||
A_StartSound("mister/hitstream",CHAN_VOICE,attenuation:.35);
|
||||
A_StartSound("mister/hitstream",CHAN_WEAPON,attenuation:.25);
|
||||
A_SprayDecal("SmallRocketBlast",-172);
|
||||
Scale *= FRandom[ExploS](0.8,1.1);
|
||||
Scale.x *= RandomPick[ExploS](-1,1);
|
||||
Scale.y *= RandomPick[ExploS](-1,1);
|
||||
int numpt = Random[ExploS](8,12);
|
||||
for ( int i=0; i<numpt; i++ )
|
||||
{
|
||||
Vector3 pvel = SWWMUtility.Vec3FromAngles(FRandom[ExploS](0,360),FRandom[ExploS](-90,90))*FRandom[ExploS](1,8);
|
||||
let s = Spawn("SWWMSmoke",pos);
|
||||
s.vel = pvel;
|
||||
s.SetShade(Color(0,3,4)*Random[ExploS](48,63));
|
||||
s.special1 = Random[ExploS](0,2);
|
||||
s.scale *= 3.5;
|
||||
s.alpha *= .4;
|
||||
}
|
||||
numpt = Random[ExploS](4,6);
|
||||
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);
|
||||
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);
|
||||
for ( int i=0; i<numpt; i++ )
|
||||
{
|
||||
let s = Spawn("MisterFuzzy",pos);
|
||||
s.angle = FRandom[ExploS](0,360);
|
||||
s.pitch = FRandom[ExploS](-90,90);
|
||||
s.target = target;
|
||||
s.special1 -= 2;
|
||||
}
|
||||
Spawn("MisterExLightSmall",pos);
|
||||
let p = Spawn("MisterBulletImpactPop",pos);
|
||||
p.A_SetScale(3.);
|
||||
}
|
||||
override void A_BulletSubExplode()
|
||||
{
|
||||
if ( special1 && (special1 <= 10) )
|
||||
{
|
||||
SWWMUtility.DoExplosion(self,4,300+special1*20,50+special1*10,50+special1*10,DE_EXTRAZTHRUST);
|
||||
SWWMUtility.DoExplosion(self,44,2000+special1*50,80+special1*8,80+special1*8,DE_EXTRAZTHRUST);
|
||||
int numpt = Random[ExploS](0,special1/2);
|
||||
for ( int i=0; i<numpt; i++ )
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue