swwmgz_m/zscript/dlc/swwm_hammertime_fx.zsc
Marisa the Magician 80db58b0d0 Bump zscript ver to 4.14.1, plus a whole lot of stuff.
- 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.
2025-03-13 14:50:58 +01:00

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);
}
}