- Try to get rid of all implicit casts from string to name, color or class. - Use FindClass where needed. - Used a map in a case where a dictionary was unneeded. - Use new bounce flags where needed. - Replace Legacy of Rust weapons/ammo.
83 lines
2.3 KiB
Text
83 lines
2.3 KiB
Text
// Itamex Hammer projectiles and effects
|
|
|
|
// akin to the land shockwave, but with sliiiiightly different behavior
|
|
Class HammerShockwave : SWWMNonInteractiveActor
|
|
{
|
|
Default
|
|
{
|
|
Obituary "$O_HAMMER";
|
|
+NODAMAGETHRUST;
|
|
+FORCERADIUSDMG;
|
|
}
|
|
override void PostBeginPlay()
|
|
{
|
|
Super.PostBeginPlay();
|
|
A_QuakeEx(5.,5.,5.,20,0,300+special1*4,"",QF_RELATIVE|QF_SCALEDOWN|QF_3D,falloff:200,rollIntensity:.8);
|
|
SWWMUtility.DoExplosion(self,80+special1,100000+special1*2000,80+special1,40,DE_BLAST|DE_EXTRAZTHRUST|DE_NONEXPLOSIVE,'HammerShockwave',target);
|
|
for ( int i=0; i<360; i+=5 )
|
|
{
|
|
Vector3 pvel = SWWMUtility.Vec3FromAngles(FRandom[ExploS](0,360),FRandom[ExploS](-90,90))*FRandom[ExploS](1,3);
|
|
let s = Spawn('SWWMSmoke',Vec3Angle(4,i,8));
|
|
s.vel = pvel+SWWMUtility.AngleToVector3(i,7.);
|
|
s.SetShade(Color(1,1,1)*Random[ExploS](64,224));
|
|
s.special1 = Random[ExploS](1,4);
|
|
s.scale *= 1.5;
|
|
s.alpha *= .4;
|
|
}
|
|
for ( int i=0; i<360; i+=5 )
|
|
{
|
|
let r = Spawn('HammerRadiusShockwave',Vec3Angle(5,i));
|
|
r.target = target;
|
|
r.angle = i;
|
|
r.vel.xy = AngleToVector(i,r.speed+special1*.1);
|
|
r.alpha *= .3+special1*.0005;
|
|
}
|
|
int numpt = Random[ExploS](10,20);
|
|
for ( int i=0; i<numpt; i++ )
|
|
{
|
|
Vector3 pvel = SWWMUtility.Vec3FromAngles(FRandom[ExploS](0,360),FRandom[ExploS](-90,90))*FRandom[ExploS](2,12);
|
|
let s = Spawn('SWWMChip',pos);
|
|
s.vel = pvel;
|
|
}
|
|
let raging = RagekitPower(target.FindInventory('RagekitPower'));
|
|
// bust the floor
|
|
let tempme = new('LineTracer'); // gross hack to pass needed data
|
|
int dmg = 300+special1*4;
|
|
if ( raging ) dmg *= 8;
|
|
F3DFloor ff;
|
|
for ( int i=0; i<FloorSector.Get3DFloorCount(); i++ )
|
|
{
|
|
if ( !(FloorSector.Get3DFloor(i).top.ZAtPoint(pos.xy) ~== floorz) ) continue;
|
|
ff = FloorSector.Get3DFloor(i);
|
|
break;
|
|
}
|
|
if ( ff ) tempme.Results.ffloor = ff;
|
|
tempme.Results.HitSector = FloorSector;
|
|
tempme.Results.HitType = TRACE_HitFloor;
|
|
BusterWall.Bust(tempme.Results,dmg,target,(0,0,-1),pos.z);
|
|
if ( raging )
|
|
{
|
|
let ps = Spawn('BigPunchSplash',pos);
|
|
ps.damagetype = 'GroundPound';
|
|
ps.target = target;
|
|
ps.special1 = dmg;
|
|
raging.DoHitFX();
|
|
}
|
|
}
|
|
States
|
|
{
|
|
Spawn:
|
|
TNT1 A 140;
|
|
Stop;
|
|
}
|
|
}
|
|
|
|
Class HammerRadiusShockwave : DemolitionistRadiusShockwave
|
|
{
|
|
Default
|
|
{
|
|
Obituary "$O_HAMMER";
|
|
DamageType 'HammerShockwave';
|
|
DamageFunction int(150*alpha);
|
|
}
|
|
}
|