// base for all spectral monsters which hurt when being touched-------------- class SpectralMonster : Actor native { Default { Monster; +SPECIAL +SPECTRAL +NOICEDEATH } //============================================================================ void A_SpectreChunkSmall () { Actor foo = Spawn("AlienChunkSmall", pos + (0, 0, 10), ALLOW_REPLACE); if (foo != null) { int t; t = random[SpectreChunk]() & 15; foo.Vel.X = (t - (random[SpectreChunk]() & 7)); t = random[SpectreChunk]() & 15; foo.Vel.Y = (t - (random[SpectreChunk]() & 7)); foo.Vel.Z = (random[SpectreChunk]() & 15); } } void A_SpectreChunkLarge () { Actor foo = Spawn("AlienChunkLarge", pos + (0, 0, 10), ALLOW_REPLACE); if (foo != null) { int t; t = random[SpectreChunk]() & 7; foo.Vel.X = (t - (random[SpectreChunk]() & 15)); t = random[SpectreChunk]() & 7; foo.Vel.Y = (t - (random[SpectreChunk]() & 15)); foo.Vel.Z = (random[SpectreChunk]() & 7); } } void A_Spectre3Attack () { if (target == null) return; Actor foo = Spawn("SpectralLightningV2", Pos + (0, 0, 32), ALLOW_REPLACE); foo.Vel.Z = -12; foo.target = self; foo.FriendPlayer = 0; foo.tracer = target; Angle -= 90.; for (int i = 0; i < 20; ++i) { Angle += 9.; SpawnSubMissile ("SpectralLightningBall2", self); } Angle -= 90.; } native void A_SpotLightning (); } // Container for all spectral lightning deaths ------------------------------ class SpectralLightningBase : Actor { Default { +NOTELEPORT +ACTIVATEIMPACT +ACTIVATEPCROSS +STRIFEDAMAGE MaxStepHeight 4; RenderStyle "Add"; SeeSound "weapons/sigil"; DeathSound "weapons/sigilhit"; } States { Death: ZAP1 B 3 A_Explode(32,32); ZAP1 A 3 A_AlertMonsters; ZAP1 BCDEFE 3; ZAP1 DCB 2; ZAP1 A 1; Stop; } } // Spectral Lightning death that does not explode --------------------------- class SpectralLightningDeath1 : SpectralLightningBase { States { Death: Goto Super::Death+1; } } // Spectral Lightning death that does not alert monsters -------------------- class SpectralLightningDeath2 : SpectralLightningBase { States { Death: Goto Super::Death+2; } } // Spectral Lightning death that is shorter than the rest ------------------- class SpectralLightningDeathShort : SpectralLightningBase { States { Death: Goto Super::Death+6; } } // Spectral Lightning (Ball Shaped #1) -------------------------------------- class SpectralLightningBall1 : SpectralLightningBase { Default { Speed 30; Radius 8; Height 16; Damage 70; Projectile; +SPECTRAL } States { Spawn: ZOT3 ABCDE 4 Bright; Loop; } } // Spectral Lightning (Ball Shaped #2) -------------------------------------- class SpectralLightningBall2 : SpectralLightningBall1 { Default { Damage 20; } } // Spectral Lightning (Horizontal #1) --------------------------------------- class SpectralLightningH1 : SpectralLightningBase { Default { Speed 30; Radius 8; Height 16; Damage 70; Projectile; +SPECTRAL } native void A_SpectralLightningTail (); States { Spawn: ZAP6 A 4 Bright; ZAP6 BC 4 Bright A_SpectralLightningTail; Loop; } } // Spectral Lightning (Horizontal #2) ------------------------------------- class SpectralLightningH2 : SpectralLightningH1 { Default { Damage 20; } } // Spectral Lightning (Horizontal #3) ------------------------------------- class SpectralLightningH3 : SpectralLightningH1 { Default { Damage 10; } } // ASpectralLightningHTail -------------------------------------------------- class SpectralLightningHTail : Actor { Default { +NOBLOCKMAP +NOGRAVITY +DROPOFF RenderStyle "Add"; } States { Spawn: ZAP6 ABC 5 Bright; Stop; } } // Spectral Lightning (Big Ball #1) ----------------------------------------- class SpectralLightningBigBall1 : SpectralLightningDeath2 { Default { Speed 18; Radius 20; Height 40; Damage 130; Projectile; +SPECTRAL } native void A_SpectralBigBallLightning (); States { Spawn: ZAP7 AB 4 Bright A_SpectralBigBallLightning; ZAP7 CDE 6 Bright A_SpectralBigBallLightning; Loop; } } // Spectral Lightning (Big Ball #2 - less damaging) ------------------------- class SpectralLightningBigBall2 : SpectralLightningBigBall1 { Default { Damage 30; } } // Sigil Lightning (Vertical #1) -------------------------------------------- class SpectralLightningV1 : SpectralLightningDeathShort { Default { Speed 22; Radius 8; Height 24; Damage 100; Projectile; DamageType "SpectralLow"; +SPECTRAL } States { Spawn: ZOT1 AB 4 Bright; ZOT1 CDE 6 Bright; Loop; } } // Sigil Lightning (Vertical #2 - less damaging) ---------------------------- class SpectralLightningV2 : SpectralLightningV1 { Default { Damage 50; } } // Sigil Lightning Spot (roams around dropping lightning from above) -------- class SpectralLightningSpot : SpectralLightningDeath1 { Default { Speed 18; ReactionTime 70; +NOBLOCKMAP +NOBLOCKMONST +NODROPOFF RenderStyle "Translucent"; Alpha 0.6; } native void A_SpectralLightning (); States { Spawn: ZAP5 A 4 Bright A_Countdown; ZAP5 B 4 Bright A_SpectralLightning; ZAP5 CD 4 Bright A_Countdown; Loop; } } // Sigil Lightning (Big Vertical #1) ---------------------------------------- class SpectralLightningBigV1 : SpectralLightningDeath1 { Default { Speed 28; Radius 8; Height 16; Damage 120; Projectile; +SPECTRAL } States { Spawn: ZOT2 ABCDE 4 Bright A_Tracer2; Loop; } } // Actor 90 ----------------------------------------------------------------- class SpectralLightningBigV2 : SpectralLightningBigV1 { Default { Damage 60; } }