167 lines
3.6 KiB
Text
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;
|
|
}
|
|
}
|