swwmgz_m/zscript/weapons/swwm_thiccboolet_fx.zsc

167 lines
3.6 KiB
Text

// Silver Bullet projectiles and effects
Class SilverBulletCasing : SWWMCasing
{
Default
{
BounceSound "silverbullet/casing";
}
}
Class SilverBulletMag : SWWMCasing
{
Default
{
Mass 10;
BounceFactor 0.4;
WallBounceFactor 0.4;
BounceSound "silverbullet/mag";
}
override void PostBeginPlay()
{
Super.PostBeginPlay();
heat = 0;
}
States
{
Death:
XZW1 BC -1
{
bINTERPOLATEANGLES = false;
pitch = roll = 0;
angle = FRandom[Junk](0,360);
frame = RandomPick[Junk](1,2);
}
Stop;
}
}
Class SilverAirRip : Actor
{
Default
{
Obituary "$O_SILVERBULLET";
DamageType 'Sniped';
Radius 0.1;
Height 0;
+NOGRAVITY;
+NOCLIP;
+DONTSPLASH;
+NOTELEPORT;
+FORCERADIUSDMG;
+NODAMAGETHRUST;
+NOINTERACTION;
}
virtual void Explode( bool thruwall = false )
{
int nhit, nkill;
[nhit, nkill] = SWWMUtility.DoExplosion(self,40,2000,40,flags:DE_COUNTENEMIES|DE_NONEXPLOSIVE,ignoreme:target);
if ( SilverBullet(master) )
{
Silverbullet(master).nkills += nkill;
SWWMUtility.AchievementProgress("conga",Silverbullet(master).nkills,target.player);
if ( thruwall ) SWWMUtility.AchievementProgressInc("thruwall",nkill,target.player);
}
}
override void Tick()
{
if ( isFrozen() ) return;
if ( !CheckNoDelay() || (tics == -1) ) return;
if ( tics > 0 ) tics--;
while ( !tics )
{
if ( !SetState(CurState.NextState) )
return;
}
}
States
{
Spawn:
TNT1 A 5;
Stop;
}
}
Class SilverImpact : Actor
{
Default
{
Obituary "$O_SILVERBULLET";
DamageType 'Sniped';
Radius 0.1;
Height 0;
+NOGRAVITY;
+NOCLIP;
+DONTSPLASH;
+NOTELEPORT;
+FORCERADIUSDMG;
+NODAMAGETHRUST;
+NOINTERACTION;
}
override void PostBeginPlay()
{
Super.PostBeginPlay();
int nhit, nkill;
[nhit, nkill] = SWWMUtility.DoExplosion(self,100,8000,100,20,DE_COUNTENEMIES|DE_NONEXPLOSIVE);
if ( SilverBullet(master) )
{
Silverbullet(master).nkills += nkill;
SWWMUtility.AchievementProgress("conga",Silverbullet(master).nkills,target.player);
if ( bAMBUSH ) SWWMUtility.AchievementProgressInc("thruwall",nkill,target.player);
}
A_AlertMonsters(swwm_uncapalert?0:2500);
A_QuakeEx(4,4,4,20,0,400,"",QF_RELATIVE|QF_SCALEDOWN|QF_3D,falloff:100,rollIntensity:.9);
if ( special1 )
{
Destroy();
return;
}
A_StartSound("silverbullet/hit",CHAN_VOICE,CHANF_DEFAULT,1.,.7);
A_SprayDecal("BigPock",-64);
A_SprayDecal("HugeWallCrack",-64);
int numpt = Random[Silverbullet](15,25);
Vector3 x = SWWMUtility.Vec3FromAngles(angle,pitch);
for ( int i=0; i<numpt; i++ )
{
Vector3 pvel = (x+SWWMUtility.Vec3FromAngles(FRandom[Silverbullet](0,360),FRandom[Silverbullet](-90,90))*.4).unit()*FRandom[Silverbullet](.4,2.);
let s = Spawn("SWWMSmoke",pos);
s.vel = pvel;
s.scale *= 1.8;
s.special1 = Random[Silverbullet](1,3);
s.SetShade(Color(1,1,1)*Random[Silverbullet](96,192));
}
numpt = Random[Silverbullet](6,9);
for ( int i=0; i<numpt; i++ )
{
Vector3 pvel = SWWMUtility.Vec3FromAngles(FRandom[Silverbullet](0,360),FRandom[Silverbullet](-90,90))*FRandom[Silverbullet](2,8);
let s = Spawn("SWWMSpark",pos);
s.scale *= 1.3;
s.vel = pvel;
}
numpt = Random[Silverbullet](10,15);
for ( int i=0; i<numpt; i++ )
{
Vector3 pvel = (x+SWWMUtility.Vec3FromAngles(FRandom[Silverbullet](0,360),FRandom[Silverbullet](-90,90))*.6).unit()*FRandom[Silverbullet](6,20);
let s = Spawn("SWWMChip",pos);
s.scale *= 1.6;
s.vel = pvel;
}
}
override void Tick()
{
if ( isFrozen() ) return;
if ( !CheckNoDelay() || (tics == -1) ) return;
if ( tics > 0 ) tics--;
while ( !tics )
{
if ( !SetState(CurState.NextState) )
return;
}
}
States
{
Spawn:
TNT1 A 20;
Stop;
}
}