class HereticWeapon : Weapon { Default { Weapon.Kickback 150; } } // The mace itself ---------------------------------------------------------- class Mace : HereticWeapon { Default { Weapon.SelectionOrder 1400; Weapon.AmmoUse 1; Weapon.AmmoGive1 50; Weapon.YAdjust 15; Weapon.AmmoType "MaceAmmo"; Weapon.SisterWeapon "MacePowered"; Inventory.PickupMessage "$TXT_WPNMACE"; Tag "$TAG_MACE"; } action native void A_FireMacePL1(); States { Spawn: WMCE A -1; Stop; Ready: MACE A 1 A_WeaponReady; Loop; Deselect: MACE A 1 A_Lower; Loop; Select: MACE A 1 A_Raise; Loop; Fire: MACE B 4; Hold: MACE CDEF 3 A_FireMacePL1; MACE C 4 A_ReFire; MACE DEFB 4; Goto Ready; } } class MacePowered : Mace { Default { +WEAPON.POWERED_UP Weapon.AmmoUse 5; Weapon.AmmoGive 0; Weapon.SisterWeapon "Mace"; Tag "$TAG_MACEP"; } action native void A_FireMacePL2(); States { Fire: Hold: MACE B 4; MACE D 4 A_FireMacePL2; MACE B 4; MACE A 8 A_ReFire; Goto Ready; } } // Mace FX1 ----------------------------------------------------------------- class MaceFX1 : Actor { Default { Radius 8; Height 6; Speed 20; Damage 2; Projectile; +THRUGHOST BounceType "HereticCompat"; SeeSound "weapons/maceshoot"; Obituary "$OB_MPMACE"; } native void A_MacePL1Check(); native void A_MaceBallImpact(); States { Spawn: FX02 AB 4 A_MacePL1Check; Loop; Death: FX02 F 4 BRIGHT A_MaceBallImpact; FX02 GHIJ 4 BRIGHT; Stop; } } // Mace FX2 ----------------------------------------------------------------- class MaceFX2 : MaceFX1 { Default { Speed 10; Damage 6; Gravity 0.125; -NOGRAVITY SeeSound ""; } native void A_MaceBallImpact2(); States { Spawn: FX02 CD 4; Loop; Death: FX02 F 4 A_MaceBallImpact2; goto Super::Death+1; } } // Mace FX3 ----------------------------------------------------------------- class MaceFX3 : MaceFX1 { Default { Speed 7; Damage 4; -NOGRAVITY; Gravity 0.125; } States { Spawn: FX02 AB 4; Loop; } } // Mace FX4 ----------------------------------------------------------------- class MaceFX4 : Actor native { Default { Radius 8; Height 6; Speed 7; Damage 18; Gravity 0.125; Projectile; -NOGRAVITY +TELESTOMP +THRUGHOST -NOTELEPORT BounceType "HereticCompat"; SeeSound ""; Obituary "$OB_MPPMACE"; } native void A_DeathBallImpact(); States { Spawn: FX02 E 99; Loop; Death: FX02 C 4 A_DeathBallImpact; FX02 GHIJ 4 BRIGHT; Stop; } } // Mace spawn spot ---------------------------------------------------------- class MaceSpawner : SpecialSpot { Default { +NOSECTOR +NOBLOCKMAP } States { Spawn: TNT1 A 1; TNT1 A -1 A_SpawnSingleItem("Mace", 64, 64, 0); Stop; } } // Blaster ------------------------------------------------------------------ class Blaster : HereticWeapon { Default { +BLOODSPLATTER Weapon.SelectionOrder 500; Weapon.AmmoUse 1; Weapon.AmmoGive 30; Weapon.YAdjust 15; Weapon.AmmoType "BlasterAmmo"; Weapon.SisterWeapon "BlasterPowered"; Inventory.PickupMessage "$TXT_WPNBLASTER"; Tag "$TAG_BLASTER"; Obituary "$OB_MPBLASTER"; } action native void A_FireBlasterPL1(); States { Spawn: WBLS A -1; Stop; Ready: BLSR A 1 A_WeaponReady; Loop; Deselect: BLSR A 1 A_Lower; Loop; Select: BLSR A 1 A_Raise; Loop; Fire: BLSR BC 3; Hold: BLSR D 2 A_FireBlasterPL1; BLSR CB 2; BLSR A 0 A_ReFire; Goto Ready; } } class BlasterPowered : Blaster { Default { +WEAPON.POWERED_UP Weapon.AmmoUse 5; Weapon.AmmoGive 0; Weapon.SisterWeapon "Blaster"; Tag "$TAG_BLASTERP"; } States { Fire: BLSR BC 0; Hold: BLSR D 3 A_FireCustomMissile("BlasterFX1"); BLSR CB 4; BLSR A 0 A_ReFire; Goto Ready; } } // Blaster FX 1 ------------------------------------------------------------- class BlasterFX1 : FastProjectile native { Default { Radius 12; Height 8; Speed 184; Damage 2; SeeSound "weapons/blastershoot"; DeathSound "weapons/blasterhit"; +SPAWNSOUNDSOURCE Obituary "$OB_MPPBLASTER"; } native void A_SpawnRippers(); States { Spawn: ACLO E 200; Loop; Death: FX18 A 3 BRIGHT A_SpawnRippers; FX18 B 3 BRIGHT; FX18 CDEFG 4 BRIGHT; Stop; } } // Blaster smoke ------------------------------------------------------------ class BlasterSmoke : Actor { Default { +NOBLOCKMAP +NOGRAVITY +NOTELEPORT +CANNOTPUSH RenderStyle "Translucent"; Alpha 0.4; } States { Spawn: FX18 HIJKL 4; Stop; } } // Ripper ------------------------------------------------------------------- class Ripper : Actor native { Default { Radius 8; Height 6; Speed 14; Damage 1; Projectile; +RIPPER DeathSound "weapons/blasterpowhit"; Obituary "$OB_MPPBLASTER"; } States { Spawn: FX18 M 4; FX18 N 5; Loop; Death: FX18 OPQRS 4 BRIGHT; Stop; } } // Blaster Puff ------------------------------------------------------------- class BlasterPuff : Actor { Default { +NOBLOCKMAP +NOGRAVITY +PUFFONACTORS RenderStyle "Add"; SeeSound "weapons/blasterhit"; } States { Crash: FX17 ABCDE 4 BRIGHT; Stop; Spawn: FX17 FG 3 BRIGHT; FX17 HIJKL 4 BRIGHT; Stop; } } // Skull (Horn) Rod --------------------------------------------------------- class SkullRod : HereticWeapon { Default { Weapon.SelectionOrder 200; Weapon.AmmoUse1 1; Weapon.AmmoGive1 50; Weapon.YAdjust 15; Weapon.AmmoType1 "SkullRodAmmo"; Weapon.SisterWeapon "SkullRodPowered"; Inventory.PickupMessage "$TXT_WPNSKULLROD"; Tag "$TAG_SKULLROD"; } action native void A_FireSkullRodPL1(); States { Spawn: WSKL A -1; Stop; Ready: HROD A 1 A_WeaponReady; Loop; Deselect: HROD A 1 A_Lower; Loop; Select: HROD A 1 A_Raise; Loop; Fire: HROD AB 4 A_FireSkullRodPL1; HROD B 0 A_ReFire; Goto Ready; } } class SkullRodPowered : SkullRod { Default { +WEAPON.POWERED_UP Weapon.AmmoUse1 5; Weapon.AmmoGive1 0; Weapon.SisterWeapon "SkullRod"; Tag "$TAG_SKULLRODP"; } action native void A_FireSkullRodPL2(); States { Fire: HROD C 2; HROD D 3; HROD E 2; HROD F 3; HROD G 4 A_FireSkullRodPL2; HROD F 2; HROD E 3; HROD D 2; HROD C 2 A_ReFire; Goto Ready; } } // Horn Rod FX 1 ------------------------------------------------------------ class HornRodFX1 : Actor { Default { Radius 12; Height 8; Speed 22; Damage 3; Projectile; +WINDTHRUST -NOBLOCKMAP RenderStyle "Add"; SeeSound "weapons/hornrodshoot"; DeathSound "weapons/hornrodhit"; Obituary "$OB_MPSKULLROD"; } States { Spawn: FX00 AB 6 BRIGHT; Loop; Death: FX00 HI 5 BRIGHT; FX00 JK 4 BRIGHT; FX00 LM 3 BRIGHT; Stop; } } // Horn Rod FX 2 ------------------------------------------------------------ class HornRodFX2 : Actor { Default { Radius 12; Height 8; Speed 22; Damage 10; Health 140; Projectile; RenderStyle "Add"; SeeSound "weapons/hornrodpowshoot"; DeathSound "weapons/hornrodpowhit"; Obituary "$OB_MPPSKULLROD"; } native void A_AddPlayerRain(); native void A_HideInCeiling(); native void A_SkullRodStorm(); States { Spawn: FX00 C 3 BRIGHT; FX00 D 3 BRIGHT A_SeekerMissile(10, 30); FX00 E 3 BRIGHT; FX00 F 3 BRIGHT A_SeekerMissile(10, 30); Loop; Death: FX00 H 5 BRIGHT A_AddPlayerRain; FX00 I 5 BRIGHT; FX00 J 4 BRIGHT; FX00 KLM 3 BRIGHT; FX00 G 1 A_HideInCeiling; FX00 G 1 A_SkullRodStorm; Wait; } override int DoSpecialDamage (Actor target, int damage, Name damagetype) { Sorcerer2 s2 = Sorcerer2(target); if (s2 != null && random[HornRodFX2]() < 96) { // D'Sparil teleports away s2.DSparilTeleport (); return -1; } return damage; } } // Rain pillar 1 ------------------------------------------------------------ class RainPillar : Actor native { Default { Radius 5; Height 12; Speed 12; Damage 5; Mass 5; Projectile; -ACTIVATEPCROSS -ACTIVATEIMPACT RenderStyle "Add"; Obituary "$OB_MPPSKULLROD"; } native void A_RainImpact(); States { Spawn: FX22 A -1 BRIGHT; Stop; Death: FX22 B 4 BRIGHT A_RainImpact; FX22 CDEF 4 BRIGHT; Stop; NotFloor: FX22 GHI 4 BRIGHT; Stop; } } // Rain tracker "inventory" item -------------------------------------------- class RainTracker : Inventory native { Default { +INVENTORY.UNDROPPABLE } } // Phoenix Rod -------------------------------------------------------------- class PhoenixRod : Weapon native { Default { +WEAPON.NOAUTOFIRE Weapon.SelectionOrder 2600; Weapon.Kickback 150; Weapon.YAdjust 15; Weapon.AmmoUse 1; Weapon.AmmoGive 2; Weapon.AmmoType "PhoenixRodAmmo"; Weapon.Sisterweapon "PhoenixRodPowered"; Inventory.PickupMessage "$TXT_WPNPHOENIXROD"; Tag "$TAG_PHOENIXROD"; } action native void A_FirePhoenixPL1(); States { Spawn: WPHX A -1; Stop; Ready: PHNX A 1 A_WeaponReady; Loop; Deselect: PHNX A 1 A_Lower; Loop; Select: PHNX A 1 A_Raise; Loop; Fire: PHNX B 5; PHNX C 7 A_FirePhoenixPL1; PHNX DB 4; PHNX B 0 A_ReFire; Goto Ready; } } class PhoenixRodPowered : PhoenixRod native { Default { +WEAPON.POWERED_UP +WEAPON.MELEEWEAPON Weapon.SisterWeapon "PhoenixRod"; Weapon.AmmoGive 0; Tag "$TAG_PHOENIXRODP"; } action native void A_InitPhoenixPL2(); action native void A_FirePhoenixPL2(); action native void A_ShutdownPhoenixPL2(); States { Fire: PHNX B 3 A_InitPhoenixPL2; Hold: PHNX C 1 A_FirePhoenixPL2; PHNX B 4 A_ReFire; Powerdown: PHNX B 4 A_ShutdownPhoenixPL2; Goto Ready; } } // Phoenix FX 1 ------------------------------------------------------------- class PhoenixFX1 : Actor { Default { Radius 11; Height 8; Speed 20; Damage 20; DamageType "Fire"; Projectile; +THRUGHOST +SPECIALFIREDAMAGE SeeSound "weapons/phoenixshoot"; DeathSound "weapons/phoenixhit"; Obituary "$OB_MPPHOENIXROD"; } native void A_PhoenixPuff(); States { Spawn: FX04 A 4 BRIGHT A_PhoenixPuff; Loop; Death: FX08 A 6 BRIGHT A_Explode; FX08 BC 5 BRIGHT; FX08 DEFGH 4 BRIGHT; Stop; } override int DoSpecialDamage (Actor target, int damage, Name damagetype) { Sorcerer2 s2 = Sorcerer2(target); if (s2 != null && random[HornRodFX2]() < 96) { // D'Sparil teleports away s2.DSparilTeleport (); return -1; } return damage; } } // Phoenix puff ------------------------------------------------------------- class PhoenixPuff : Actor { Default { +NOBLOCKMAP +NOGRAVITY +NOTELEPORT +CANNOTPUSH RenderStyle "Translucent"; Alpha 0.4; } States { Spawn: FX04 BCDEF 4; Stop; } } // Phoenix FX 2 ------------------------------------------------------------- class PhoenixFX2 : Actor native { Default { Radius 6; Height 8; Speed 10; Damage 2; DamageType "Fire"; Projectile; RenderStyle "Add"; Obituary "$OB_MPPPHOENIXROD"; } native void A_FlameEnd(); native void A_FloatPuff(); States { Spawn: FX09 ABABA 2 BRIGHT; FX09 B 2 BRIGHT A_FlameEnd; FX09 CDEF 2 BRIGHT; Stop; Death: FX09 G 3 BRIGHT; FX09 H 3 BRIGHT A_FloatPuff; FX09 I 4 BRIGHT; FX09 JK 5 BRIGHT; Stop; } }