ACTOR MolochDemonPlayer : PlayerPawn
{
  Health 1000
  Radius 48
  Height 116
  Speed 0.75
  mass 2000
  Player.ColorRange 0, 0
  Player.JumpZ 6
  Player.MaxHealth 16000
  Player.ViewHeight 112
  Player.DisplayName "Moloch"
  Player.SoundClass "Moloch"
  Player.MorphWeapon "MolochWeapon0"
  Player.StartItem "Mana", 100
  DamageFactor "Player", 0.8
  limitedtoteam 1
seesound "moloch/sight"
painsound "moloch/pain"
deathsound "moloch/death"
activesound "moloch/active"
DAMAGEFACTOR "boss", 0
Species "Boss"
	+NOSKIN
	-PICKUP
  states
{
  See:
	Spawn:
		MOLO AB 10
		Loop
	See:
        	MOLO AA 4 
            MOLO B 0 A_PlaySound("moloch/step")
			MOLO B 0 A_SpawnItemEx("UniversalStomp")
            MOLO BB 4 
        	MOLO CC 4 
        	MOLO D 0 A_PlaySound("moloch/step")
			MOLO D 0 A_SpawnItemEx("UniversalStomp")
        	MOLO DD 4 
		Loop
	Missile:
        	MOLO E 5 bright
        	MOLO F 8 bright
		Goto Spawn
	Death:
		TNT1 A 0 A_Scream
		TNT1 A 0 a_givetotarget("BOSSKILLEDSTAT", 1)
		TNT1 A 0 a_givetotarget("reward", 1)
		TNT1 A 0 A_SpawnItem("MolochDeath")
		TNT1 A 1
		BLAN A -1
		Stop
}
}

Actor MolochDeath
{
	+NOINTERACTION
	
	States
	{
		Spawn:
				MOLO J 14
		MOLO K 14 
		MOLO L 14
		MOLO MNONMNONMNO 7
		MOLO P 6
                MOLO Q 6
  //              MOLO Q 0 A_CustomMissile ("MolochDeathFire",0,0,0,0)
                MOLO Q 0 Radius_Quake(40,60,0,40,0)
                MOLO Q 0 A_PlaySound ("moloch/thud")
                MOLO Q 0 A_CustomMissile("MolochQuake", 0, -48, 0)
        	MOLO Q 0 A_CustomMissile("MolochQuake", 0, -48, 10)
        	MOLO Q 0 A_CustomMissile("MolochQuake", 0, -48, 20)
        	MOLO Q 0 A_CustomMissile("MolochQuake", 0, -48, 30)
        	MOLO Q 0 A_CustomMissile("MolochQuake", 0, -48, 40)
        	MOLO Q 0 A_CustomMissile("MolochQuake", 0, -48, 50)
        	MOLO Q 0 A_CustomMissile("MolochQuake", 0, -48, 60)
        	MOLO Q 0 A_CustomMissile("MolochQuake", 0, -48, 70)
        	MOLO Q 0 A_CustomMissile("MolochQuake", 0, -48, 80)
        	MOLO Q 0 A_CustomMissile("MolochQuake", 0, -48, 90)
        	MOLO Q 0 A_CustomMissile("MolochQuake", 0, -48, 100)
        	MOLO Q 0 A_CustomMissile("MolochQuake", 0, -48, 110)
        	MOLO Q 0 A_CustomMissile("MolochQuake", 0, -48, 120)
        	MOLO Q 0 A_CustomMissile("MolochQuake", 0, -48, 130)
        	MOLO Q 0 A_CustomMissile("MolochQuake", 0, -48, 140)
        	MOLO Q 0 A_CustomMissile("MolochQuake", 0, -48, 150)
        	MOLO Q 0 A_CustomMissile("MolochQuake", 0, -48, 160)
        	MOLO Q 0 A_CustomMissile("MolochQuake", 0, -48, 180)
        	MOLO Q 0 A_CustomMissile("MolochQuake", 0, -48, 190)
        	MOLO Q 0 A_CustomMissile("MolochQuake", 0, -48, 200)
        	MOLO Q 0 A_CustomMissile("MolochQuake", 0, -48, 210)
        	MOLO Q 0 A_CustomMissile("MolochQuake", 0, -48, 220)
        	MOLO Q 0 A_CustomMissile("MolochQuake", 0, -48, 230)
        	MOLO Q 0 A_CustomMissile("MolochQuake", 0, -48, 240)
        	MOLO Q 0 A_CustomMissile("MolochQuake", 0, -48, 250)
        	MOLO Q 0 A_CustomMissile("MolochQuake", 0, -48, 260)
        	MOLO Q 0 A_CustomMissile("MolochQuake", 0, -48, 270)
        	MOLO Q 0 A_CustomMissile("MolochQuake", 0, -48, 280)
        	MOLO Q 0 A_CustomMissile("MolochQuake", 0, -48, 290)
        	MOLO Q 0 A_CustomMissile("MolochQuake", 0, -48, 300)
        	MOLO Q 0 A_CustomMissile("MolochQuake", 0, -48, 310)
        	MOLO Q 0 A_CustomMissile("MolochQuake", 0, -48, 320)
        	MOLO Q 0 A_CustomMissile("MolochQuake", 0, -48, 330)
        	MOLO Q 0 A_CustomMissile("MolochQuake", 0, -48, 340)
        	MOLO Q 0 A_CustomMissile("MolochQuake", 0, -48, 350)
		MOLO R -1  
		Stop
	}
}

actor Molochattackmode4 : Inventory
{
Inventory.Amount 1
Inventory.MaxAmount 1
  States
  {
  Spawn:
    TNT1 A -1
    Stop
  }
}

actor Molochattackmode5 : Inventory
{
Inventory.Amount 1
Inventory.MaxAmount 1
  States
  {
  Spawn:
    TNT1 A -1
    Stop
  }
}

ACTOR MolochWeapon : Weapon 
{
 Weapon.SelectionOrder 800
 Obituary "%o was demolished by %k"
 Inventory.PickupMessage ""
 Inventory.PickupSound "misc/pk_up"
 Weapon.AmmoUse 0
 Weapon.AmmoGive 0
 Weapon.AmmoType "Mana"
 +WEAPON.NOAUTOAIM
 +INVENTORY.UNDROPPABLE
  States
 {
  Spawn:
       TNT1 A -1
       Loop
  Ready:
       CLA2 A 1 A_WeaponReady
       goto ready
  Deselect:
       CLA2 A 1 A_Lower
       Loop
  Select:
       CLA2 A 0 A_Raise
       Loop
  Fire:
       CLA2 A 0 A_jumpIfinventory("Molochattackmode1", 1, "NailAttackcheck")
       CLA2 A 0 A_jumpIfinventory("Molochattackmode2", 1, "LightningAttackcheck")
       CLA2 A 0 A_jumpIfinventory("Molochattackmode3", 1, "FlameAttackcheck")
	   CLA2 A 0 A_jumpIfinventory("Molochattackmode4", 1, "GrenadeAttackcheck")
	   CLA2 A 0 A_jumpIfinventory("Molochattackmode5", 1, "GhostAttackcheck")
	   Goto ready
  AltFire:
  	   CLA2 A 1 ACS_execute(812, 0, 10)
       CLA2 A 1
       CLA2 A 23
       goto ready
  NailAttack:
       CLA2 A 0 A_Takeinventory("mana", 2)
	   CLA2 B 0 Bright A_FireCustomMissile("MolochNail",random(-1,1),0,random(-10,10),0)   
	   CLA2 B 0 Bright A_PlaySound("moloch/nail")
       CLA2 B 2 Bright
  goto ready
  LightningAttack:
       CLA2 A 0 A_Takeinventory("mana", 33)
	   CLA2 A 0 Bright A_PlaySound("moloch/attack") 
       CLA2 A 0 Bright A_FireCustomMissile("MolochThunderbolt",0,0,0,0)         
	   CLA2 B 4 Bright
  goto ready
  FlameAttack:
       CLA2 A 0 A_Takeinventory("mana", 40)
       CLA2 B 0 A_FireCustomMissile("MolochScorch",0,0,0,0)
       CLA2 B 0 A_FireCustomMissile("MolochScorch",30,0,0,0)
       CLA2 B 0 A_FireCustomMissile("MolochScorch",60,0,0,0)
       CLA2 B 0 A_FireCustomMissile("MolochScorch",90,0,0,0)
       CLA2 B 0 A_FireCustomMissile("MolochScorch",120,0,0,0)
       CLA2 B 0 A_FireCustomMissile("MolochScorch",150,0,0,0)
       CLA2 B 0 A_FireCustomMissile("MolochScorch",180,0,0,0)
       CLA2 B 0 A_FireCustomMissile("MolochScorch",210,0,0,0)
       CLA2 B 0 A_FireCustomMissile("MolochScorch",240,0,0,0)
       CLA2 B 0 A_FireCustomMissile("MolochScorch",270,0,0,0)
       CLA2 B 0 A_FireCustomMissile("MolochScorch",300,0,0,0)
       CLA2 B 15
  goto ready
  GrenadeAttack:
       CLA2 A 0 A_Takeinventory("mana", 20)
	   CLA2 B 0 Bright A_FireCustomMissile("HellGrenade",random(-10,10),0,0,0)   
	   CLA2 B 0 Bright A_PlaySound("moloch/nail")
       CLA2 B 8 Bright
       goto ready
  GhostAttack:
		TNT1 A 0 A_TakeInventory("mana", 5)
		CLA3 B 11 Bright
		TNT1 A 0 A_SpawnItemEx("MolochWraith", 128, 0, 64, random(5,15))
		CLA3 A 11
        goto ready
  NailAttackcheck:
       TNT1 A 0 A_jumpIfinventory("mana", 2, "NailAttack")
  goto ready
  LightningAttackcheck:
       TNT1 A 0 A_jumpIfinventory("mana", 33, "LightningAttack")  
  goto ready
  FlameAttackcheck:
       TNT1 A 0 A_jumpIfinventory("mana", 40, "FlameAttack")  
  goto ready
  GrenadeAttackcheck:
       TNT1 A 0 A_jumpIfinventory("mana", 20, "GrenadeAttack")  
  goto ready
  GhostAttackcheck:
       TNT1 A 0 A_jumpIfinventory("mana", 5, "GhostAttack")  
  goto ready
  Flash:
       SNIF F 3 Bright A_Light2
       SNIF F 3 Bright A_Light1
       SNIF F 0 Bright A_Light0
       Goto LightDone     
       }
}

ACTOR HellGrenade
{
   Radius 10
   Height 10
   Speed 35
   Damage 20
   RENDERSTYLE Normal
   Damagetype "Boss"
   Scale 1.2
   PROJECTILE
   +EXTREMEDEATH
   -NOGRAVITY
   +BOUNCEAUTOOFF
   +BOUNCEONWALLS
   +BOUNCEONFLOORS
   DONTHURTSHOOTER
   Seesound "moloch/grenade"
   DeathSound "moloch/grenexp"
   States
   {
   Spawn:
      MOGR AB 3 Bright A_SpawnItemEX("HellSmoke",0,0,0,0,0,0,0,2)
      loop
   Death:
      XPL1 A 0 Bright A_SetTranslucent (0.75,1)
      XPL1 A 2 Bright A_Explode(128,196)
      XPL1 A 0 Bright A_CustomMissile("HellGrenadeEmber",random(3,10),0,random(1,90),2,random(1,75))
      XPL1 A 0 Bright A_CustomMissile("HellGrenadeEmber",random(3,10),0,random(1,90),2,random(1,75))
      XPL1 A 0 Bright A_CustomMissile("HellGrenadeEmber",random(3,10),0,random(91,180),2,random(1,75))
      XPL1 A 0 Bright A_CustomMissile("HellGrenadeEmber",random(3,10),0,random(91,180),2,random(1,75))
      XPL1 A 0 Bright A_CustomMissile("HellGrenadeEmber",random(3,10),0,random(181,270),2,random(1,75))
      XPL1 A 0 Bright A_CustomMissile("HellGrenadeEmber",random(3,10),0,random(181,270),2,random(1,75))
      XPL1 A 0 Bright A_CustomMissile("HellGrenadeEmber",random(3,10),0,random(271,359),2,random(1,75))
      XPL1 A 0 Bright A_CustomMissile("HellGrenadeEmber",random(3,10),0,random(271,359),2,random(1,75))
      XPL1 BCDEF 2 Bright
      stop
}
}

ACTOR HellGrenadeEmber
{
   Radius 5
   Height 5
   Speed 15
   Damage 5
   PROJECTILE
   RENDERSTYLE Add
   Alpha 0.90
   Decal DoomImpScorch
   Damagetype "Boss"
   DONTHURTSHOOTER
   +THRUGHOST
   -NOGRAVITY
   DeathSound "moloch/emberexp"
   States
   {
   Spawn:
      BAL3 AB 2 Bright A_SpawnItemEX("RedSmoke",0,0,0,0,0,0,0,2)
      loop
   Death:
      BAL3 CDE 4 Bright 
      stop
   }
}

//Moloch's counterattack.  It shoots 12 of these whenever it's stunned.  An effective way of retaliating against groups of smaller targets.
actor MolochScorch
{
radius 16
height 14
damage (100)
speed 20
Damagetype "Boss"
RenderStyle Add
alpha 0.90
Scale 0.90
Decal RocketScorch
seesound "moloch/scorch"
deathsound "moloch/scorchhit"
PROJECTILE
+DROPOFF
+FLOORHUGGER
+EXTREMEDEATH
+STRIFEDAMAGE
states
{
Spawn:
HBFR A 1 A_CStaffMissileSlither
HBFR B 1 A_CStaffMissileSlither
HBFR C 1 A_CStaffMissileSlither
Loop
Death:
HBFR DEFGH 5 bright
stop
}
}

//Moloch's wraith attack.  They are actually monsters that will charge at you and slash you.
ACTOR MolochWraith
{ 
Health 5
Radius 12
Height 28 
Mass 10 
Speed 15
Damage 5
Damagetype "Boss"
Damagefactor "Moloch", 0.01
Damagefactor "Boss", 0.01
Species "Boss"
RENDERSTYLE ADD
Obituary "%o fell to an unlucky victim of a sacrifice."
HitObituary "%o was slashed by a red wraith."
PAINCHANCE 200 
MONSTER
+DONTHARMSPECIES
+NOGRAVITY 
+FLOAT
+DONTFALL
+DONTHURTSPECIES
+NOBLOOD
+NOEXPLODEFLOOR
+MISSILEMORE
AttackSound "moloch/wraithattack"
SeeSound "moloch/wraith"
PainSound "skull/melee" 
DeathSound "moloch/wraithdie"
States 
   { 
   Spawn: 
       UNHE AA 0 A_ChangeFlag("FRIENDLY",0)
       UNHE AB 10 A_Look 
       Loop 
   See: 
       UNHE A 0 A_ChangeFlag("FRIENDLY",0)
       UNHE AB 3 A_Chase 
       Loop 
   Missile: 
       TNT1 A 0 A_JumpIfInTargetInventory("MolochWeapon", 1, "Clear")
       UNHE A 10 A_FaceTarget 
       UNHE B 4 A_SkullAttack(25)
       UNHE AB 4 
       Goto Missile+2
   Melee:
       TNT1 A 0 A_JumpIfInTargetInventory("MolochWeapon", 1, "Clear")
       UNHE A 5 A_FaceTarget 
       UNHE B 5 A_CustomMeleeAttack(10,"moloch/wraithmelee","none","Moloch")
       Goto See
   Pain: 
       UNHE A 3  
       UNHE A 3 A_Pain 
       Goto See 
   Death: 
       UNHE H 4 A_ScreamAndUnblock
       UNHE IJKLM 5
       Stop 
	  Clear:
		TNT1 A 0 A_ClearTarget
        UNHE ABABAB 5 A_Wander
		goto See	
	   
   } 
}

actor MolochNail
{
radius 3
height 3
damage (10)
speed 75
Scale 0.65
Decal BulletChip
attacksound "moloch/nailhitbleed"
PROJECTILE
+PIERCEARMOR
+RIPPER
+SPAWNSOUNDSOURCE
+EXTREMEDEATH
+BLOODSPLATTER
+STRIFEDAMAGE
states
{
Spawn:
BLAD A 1 bright
loop
XDeath:
SMK2 A 0 A_PlaySound("moloch/nailhitbleed")
SMK2 ABCDE 2 A_SetTranslucent (0.10,1)
Stop
Crash:
6PUF A 0 A_PlaySound("moloch/nailhit")
6PUF ABCDEF 2 bright
Stop
Death:
6PUF A 0 A_PlaySound("moloch/nailhit")
6PUF ABCDEF 2 bright
Stop
}
}
