ACTOR HierophantMorpher : PowerupGiver 
{
Scale 2
radius 48
height 128
powerup.type Hierophant
inventory.pickupmessage ""
powerup.duration 99999999999999
states
{
Spawn:
TNT1 A 6
loop
 }
 }


actor PowerHierophant : PowerMorph
{
powerup.duration 99999999999999
PowerMorph.PlayerClass "HierophantPlayer"
}

ACTOR HierophantPlayer : PlayerPawn
{
  Health 1000
  Radius 24
  Height 60
  Speed 0.9
  mass 2000
  Player.ColorRange 0, 0
  Player.JumpZ 6
  Player.MaxHealth 16000
  Player.DisplayName "Hierophant"
  Player.SoundClass "Hierophant"
  Player.MorphWeapon "HierophantWeapon0"
  Player.StartItem "Mana", 100
	Damagefactor "Slime", 0
	Damagefactor "Lava", 0
  limitedtoteam 1
  damagefactor "boss", 0
  SeeSound "monster/Hiesit"
  PainSound "monster/Hiepai"
  DeathSound "monster/Hiedth"
  ActiveSound "monster/Hieact"
  bloodcolor Yellow
  +NOSKIN
  -PICKUP
  states
{
	Spawn:
	    TNT1 AA 0 SetPlayerProperty(0, 1, 1)
	    TNT1 AA 0 SetPlayerProperty (0, 1, 3)
		HIER AC 10 
		Loop
	See:
	    TNT1 AA 0 SetPlayerProperty(0, 1, 1)
	    TNT1 AA 0 SetPlayerProperty (0, 1, 3)
		HIER AABBAACCDDCC 3
		Loop
	Missile:
		HIER EF 8 Bright  
		HIER G 7 Bright 
		Goto Spawn
	Death:
		TNT1 A 0 a_givetotarget("BOSSKILLEDSTAT", 1)
		TNT1 A 0 a_givetotarget("reward", 1)
		HIER Q 6
        HIER R 6 A_Scream
        HIER S 6 A_NoBlocking
        HIER TUVW 6
        HIER X -1 A_SetFloorClip
		Stop
}
}

ACTOR HierophantWeapon0 : Weapon 
{
 Weapon.SelectionOrder 800
 Obituary "%o was engulfed in flames by %k"
 Inventory.PickupMessage ""
 Inventory.PickupSound "misc/pk_up"
 Weapon.AmmoUse 5
 Weapon.AmmoGive 0
 Weapon.AmmoType "Mana"
 +WEAPON.NOAUTOAIM
  States
 {
  Spawn:
       TNT1 A -1
       Loop
  Ready:
       TNT1 A 1 A_WeaponReady
       goto AltFire
  Fire:
  TNT1 A 1
  goto AltFire
  Deselect:
       TNT1 A 1 A_Lower
       Loop
  Select:
       TNT1 A 0 A_Raise
       Loop
  AltFire:
       TNT1 A 0 A_GiveInventory("HierophantWeapon")
       TNT1 A 0 A_SelectWeapon("HierophantWeapon")
       TNT1 A 0 
       goto deselect
  Flash:
       SNIF F 3 Bright A_Light2
       SNIF F 3 Bright A_Light1
       SNIF F 0 Bright A_Light0
       Goto LightDone     
       }
}


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

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

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

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

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

ACTOR HierophantWeapon : Weapon 
{
 Weapon.SelectionOrder 800
 Obituary "%o was engulfed in flames 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(WRF_ALLOWRELOAD)
       goto ready
  Deselect:
       CLA2 A 1 A_Lower
       Loop
  Select:
       CLA2 A 0 A_Raise
       Loop
  Fire:
       CLA2 A 0 A_jumpIfinventory("Hierophantattackmode1", 1, "MagicAttackcheck")
       CLA2 A 0 A_jumpIfinventory("Hierophantattackmode2", 1, "CurseAttackcheck")
       CLA2 A 0 A_jumpIfinventory("Hierophantattackmode3", 1, "PathAttackcheck")
	   CLA2 A 0 A_jumpIfinventory("Hierophantattackmode4", 1, "MeleeAttack")
	   CLA2 A 0 A_jumpIfinventory("Hierophantattackmode5", 1, "MirrorAttackCheck")
	   Goto ready
  AltFire:
  	   CLA2 A 1 ACS_execute(812)
       CLA2 A 1
       CLA2 A 15
       goto ready
  MagicAttack:
       CLA2 A 0 A_Takeinventory("mana", 15)
       CLA2 A 0 A_PlayWeaponSound("imp/attack")
       CLA2 A 0 A_GunFlash
	   CLA2 B 0 A_FireCustomMissile ("HieroBall1",Random(-6, -1),0,0,0,0)
	   CLA2 B 0 A_FireCustomMissile ("HieroBall1",Random(1, 6),0,0,0,0)
       CLA2 BA 8
	   CLA2 B 0 A_FireCustomMissile ("HieroBall1",Random(-6, -1),0,0,0,0)
	   CLA2 B 0 A_FireCustomMissile ("HieroBall1",Random(1, 6),0,0,0,0)
       CLA2 BA 8
  goto ready
  CurseAttack:
       CLA2 A 0 A_Takeinventory("mana", 25)
       CLA2 A 14 A_GunFlash
	   CLA2 B 0 A_FireCustomMissile ("CurseBall",0,0,0,0,0)
       CLA2 B 10
	   Goto Ready
  PathAttack:
       CLA2 A 0 A_Takeinventory("mana", 4)
       CLA2 A 0 A_GunFlash
       CLA2 B 0 A_FireCustomMissile("HieroBall2",0,0,0,0)
       CLA2 B 2
  goto ready
  MeleeAttack:
       TNT1 A 0 A_PlayWeaponSound("Centaur/Melee")
	   CLA2 BBBBBB 1 Bright A_CustomPunch(30 , 1 , 0, "BulletPuffCent", 108)
	   CLA2 A 17 Bright
	   Goto Ready
  MirrorAttack:
	   TNT1 A 0 A_TakeInventory("mana", 100)
	   TNT1 A 0 A_GiveInventory("HieroShadowsCooldown", 1)
	   CLA2 B 3 Bright
	   TNT1 A 0 A_SetTranslucent(0.0, 0)
	   TNT1 A 0 ACS_ExecuteAlways(612, 0)
	   CLA2 B 3 Bright
	   TNT1 A 0 A_SpawnItemEx("NosferatuSplit", 64, 64)
	   TNT1 A 0 A_SpawnItemEx("HierophantShadow", 64, 64)
	   TNT1 A 0 A_SpawnItemEx("NosferatuSplit", -64, -64)
	   TNT1 A 0 A_SpawnItemEx("HierophantShadow", -64, -64)  
	   TNT1 A 0 A_SpawnItemEx("NosferatuSplit", -64, 64)
	   TNT1 A 0 A_SpawnItemEx("HierophantShadow", -64, 64)
	   TNT1 A 0 ThrustThing((angle-45)*256/360, 32, 0, 0)
	   CLA2 A 17
	   TNT1 A 0 A_SetTranslucent(1.0, 0)
       Goto Ready
  MagicAttackcheck:
       TNT1 A 0 A_jumpIfinventory("mana", 15, "MagicAttack")
  goto ready
  CurseAttackcheck:
       TNT1 A 0 A_jumpIfinventory("mana", 50, "CurseAttack")  
  goto ready
  PathAttackcheck:
       TNT1 A 0 A_jumpIfinventory("mana", 4, "PathAttack")  
  goto ready
  MirrorAttackcheck:
       TNT1 A 0 A_jumpIfinventory("HieroShadowsCooldown", 1, "Ready")  
       TNT1 A 0 A_jumpIfinventory("mana", 100, "MirrorAttack")  
  goto ready
  Reload:
       TNT1 A 0 A_jumpIfinventory("HieroDashCooldown", 1, "Ready")
	   TNT1 A 0 A_Giveinventory("HieroDashCooldown", 1)
	   CLA3 B 0 Bright A_Recoil(-8)
	   CLA3 BBB 1 A_SpawnItemEx("HieroFX", 0, 0, 0, 0, 0, 0, 0, SXF_CLIENTSIDE)
	   CLA3 B 0 Bright A_Recoil(-8)
	   CLA3 BBB 1 A_SpawnItemEx("HieroFX", 0, 0, 0, 0, 0, 0, 0, SXF_CLIENTSIDE)
	   CLA3 B 0 Bright A_Recoil(-8)
	   CLA3 BBB 1 A_SpawnItemEx("HieroFX", 0, 0, 0, 0, 0, 0, 0, SXF_CLIENTSIDE)
	   CLA3 B 0 Bright A_Recoil(-8)
	   CLA3 BBB 1 A_SpawnItemEx("HieroFX", 0, 0, 0, 0, 0, 0, 0, SXF_CLIENTSIDE)
	   CLA3 B 10
	   Goto Ready
  Flash:
       SNIF F 3 Bright A_Light2
       SNIF F 3 Bright A_Light1
       SNIF F 0 Bright A_Light0
       Goto LightDone     
       }
}

// ------------------------------------------------------------------------------------------------
//
//   Hierophant
//       - Original code by Eriance.
//       - Code improvements by Blue Shadow.
//
// ------------------------------------------------------------------------------------------------

Actor HierophantShadow
{
    Health 400
    Radius 24
    Height 60
    Mass 1000
    Speed 10
    PainChance 24
    Monster
    Obituary "%o was hexed by a Hierophant."
    HitObituary "%o got shredded by a Hierophant."
    SeeSound "monster/Hiesit"
    PainSound "monster/Hiepai"
    DeathSound "monster/Hiedth"
    ActiveSound "monster/Hieact"
	Alpha 0.65
    Renderstyle Translucent
	+LookAllAround
    +NoTarget
    +FloorClip
    +MissileMore
    +NoRadiusDmg
    +Boss
    +Float
    +NoGravity
    +DontHurtSpecies
	+Noinfighting
    var int user_i;
    States
    {
    Spawn:
	    HIER AA 0 A_ChangeFlag("FRIENDLY",0)
        HIER AC 10 A_Look
        Loop

    See:
        HIER AABBAACCDDCC 4 A_Chase
        HIER A 0 A_Jump(64, "Blur")
        Loop
        Blur:
            HIER A 1 A_PlaySound("monster/blur")
            HIER A 0 A_SpawnItemEx("HieroFX",0,0,0,0,0,0,0,128,0)
            HIER A 1 A_Chase
            HIER A 0 A_SpawnItemEx("HieroFX",0,0,0,0,0,0,0,128,0)
            HIER A 1 A_Chase
            HIER A 0 A_SpawnItemEx("HieroFX",0,0,0,0,0,0,0,128,0)
            HIER A 1 A_Chase
            HIER A 0 A_SpawnItemEx("HieroFX",0,0,0,0,0,0,0,128,0)
            HIER A 1 A_Chase
            HIER A 0 A_SpawnItemEx("HieroFX",0,0,0,0,0,0,0,128,0)
            HIER A 1 A_Chase
            HIER A 0 A_SpawnItemEx("HieroFX",0,0,0,0,0,0,0,128,0)
            HIER A 1 A_Chase
            HIER A 0 A_SpawnItemEx("HieroFX",0,0,0,0,0,0,0,128,0)
            HIER A 1 A_Chase
            HIER A 0 A_SpawnItemEx("HieroFX",0,0,0,0,0,0,0,128,0)
            HIER A 1 A_Chase
            HIER A 0 A_SpawnItemEx("HieroFX",0,0,0,0,0,0,0,128,0)
            HIER A 1 A_Chase
            HIER A 0 A_SpawnItemEx("HieroFX",0,0,0,0,0,0,0,128,0)
            HIER A 1 A_Chase
            HIER A 0 A_SpawnItemEx("HieroFX",0,0,0,0,0,0,0,128,0)
            HIER A 1 A_Chase
            HIER A 0 A_SpawnItemEx("HieroFX",0,0,0,0,0,0,0,128,0)
            HIER A 1 A_Chase
            HIER A 0 A_SpawnItemEx("HieroFX",0,0,0,0,0,0,0,128,0)
            HIER A 1 A_Chase
            HIER A 0 A_SpawnItemEx("HieroFX",0,0,0,0,0,0,0,128,0)
            HIER A 1 A_Chase
            HIER A 0 A_SpawnItemEx("HieroFX",0,0,0,0,0,0,0,128,0)
            HIER A 1 A_Chase
            HIER A 0 A_SpawnItemEx("HieroFX",0,0,0,0,0,0,0,128,0)
            HIER A 1 A_Chase
            HIER A 0 A_SpawnItemEx("HieroFX",0,0,0,0,0,0,0,128,0)
            HIER A 1 A_Chase
            HIER A 0 A_SpawnItemEx("HieroFX",0,0,0,0,0,0,0,128,0)
            HIER A 1 A_Chase
            HIER A 0 A_SpawnItemEx("HieroFX",0,0,0,0,0,0,0,128,0)
            HIER A 1 A_Chase
            HIER A 0 A_SpawnItemEx("HieroFX",0,0,0,0,0,0,0,128,0)
            HIER A 1 A_Chase
            HIER A 0 A_SpawnItemEx("HieroFX",0,0,0,0,0,0,0,128,0)
            HIER A 1 A_Chase
            HIER A 0 A_SpawnItemEx("HieroFX",0,0,0,0,0,0,0,128,0)
            HIER A 1 A_Chase
            HIER A 0 A_SpawnItemEx("HieroFX",0,0,0,0,0,0,0,128,0)
            HIER A 1 A_Chase
            HIER A 0 A_SpawnItemEx("HieroFX",0,0,0,0,0,0,0,128,0)
            HIER A 1 A_Chase
            Goto See
	Clear:
		TNT1 A 0 A_ClearTarget
        HIER AABBAACCDDCC 4 A_Wander
        Goto See
    Missile:
        MissileDecide:
		    TNT1 A 0 A_JumpIfInTargetInventory("HierophantWeapon", 1, "Clear")
            HIER A 0 A_Jump(256, "Missile1", "Missile2", "Missile3")
        Missile1:
            HIER EF 7 Bright A_FaceTarget
            HIER G 0 Bright A_CustomMissile("HieroBall1Clone", 26.0, 0, Random(-6, -1))
            HIER G 7 Bright A_CustomMissile("HieroBall1Clone", 26.0, 0, Random(1, 6))
            HIER A 3 Bright
            HIER HI 7 Bright A_FaceTarget
            HIER J 0 Bright A_CustomMissile("HieroBall1Clone", 26.0, 0, Random(-6, -1))
            HIER J 7 Bright A_CustomMissile("HieroBall1Clone", 26.0, 0, Random(1, 6))
            HIER A 3 A_SpidRefire
            HIER A 0 A_Jump(64, "Missile1")
            Goto See
        Missile2:
            HIER EF 7 Bright A_FaceTarget
            HIER G 7 Bright A_CustomMissile("CurseBall", 26.0)
            HIER A 3 A_SpidRefire
            HIER A 0 A_Jump(128, "Missile1", "Missile3")
            Goto See
        Missile3:
            HIER KLM 5 Bright A_FaceTarget
            Missile3LoopPrep:
                HIER A 0 A_SetUserVar("user_i", 0)
            Missile3Loop:
                HIER N 1 Bright A_CustomMissile("HieroBall2Clone")
                HIER O 1 Bright A_FaceTarget
                HIER A 0 A_SetUserVar("user_i", user_i + 1)
                HIER A 0 A_JumpIf(user_i < 15, "Missile3Loop")
                HIER L 5
                Goto See
    Melee:
        LeftSlash:
		    TNT1 A 0 A_JumpIfInTargetInventory("HierophantWeapon", 1, "Clear")
            HIER EF 8 A_FaceTarget
            HIER G 3 A_CustomMeleeAttack(10 * Random(1, 8), "baron/melee")
            HIER A 3
            HIER A 0 A_Jump(128, "RightSlash")
            Goto See
        RightSlash:
            HIER HI 8 A_FaceTarget
            HIER J 3 A_CustomMeleeAttack(10 * Random(1, 8), "baron/melee")
            HIER A 3
            Goto See
    Pain:
        HIER P 2
        HIER P 2 A_Pain
        Goto See
    Death:
        HIER Q 6
        HIER R 6 A_Scream
        HIER S 6 A_NoBlocking
        HIER TUVW 6
        HIER X -1 A_SetFloorClip
        Stop
    }
}

Actor HieroFX // Blur effect.
{
    RenderStyle "Translucent"
    Alpha 0.8

    +NoInteraction

    States
    {
    Spawn:
        TNT1 A 3
        HIER A 5 A_FadeOut
        Wait
    }
}

// -------------------------------------------------------------------------------------------
//
//   Hierophant -- Fireballs
//
// -------------------------------------------------------------------------------------------

Actor HieroBall1 : BaronBall
{
    Speed 30
    Damage 12
    DamageType "Boss"
    Decal "RevenantScorch"

    +ThruGhost
    +ForceXYBillBoard

    States
    {
    Spawn:
        HIB1 AB 4 Bright
        Loop

    Death:
        HIB1 C 0 Bright A_SetTranslucent(0.75, 1)
        HIB1 C 3 Bright
        HIB1 D 3 Bright A_Explode(32, 64, 0)
        HIB1 EFG 3 Bright
        Stop
    }
}

Actor HieroBall1Clone : HieroBall1
{
    Damage 4
	States
	{
	Death:
        HIB1 C 0 Bright A_SetTranslucent(0.75, 1)
        HIB1 CDEFG 3 Bright
        Stop
    }
}

Actor HieroBall2 : BishopFX
{
    Speed 16
    Damage 5
    DamageType "Boss"
    Seesound "weapons/firmfi"
    DeathSound "weapons/firex5"
    Decal "PlasmaScorchLower"
	+SEEKERMISSILE
    +LOOKALLAROUND
    +ForceXYBillBoard
    States
    {
	Spawn:
        TNT1 A 0
        TNT1 A 0 A_RearrangePointers(AAPTR_NULL,AAPTR_TARGET,AAPTR_TRACER)
        TNT1 A 0 A_LookEx(0,0,0,0,0,"Acquired")
        TNT1 A 0 A_RearrangePointers(AAPTR_MASTER,AAPTR_MASTER,AAPTR_TRACER)
        Goto Idle
    Acquired:
        TNT1 A 0 A_RearrangePointers(AAPTR_MASTER,AAPTR_MASTER,AAPTR_TARGET)
        Goto Idle
    Idle:
        HIB2 ABCD 1 Bright A_Weave(3, 3, 1.0, 1.0)
        HIB2 A 0 Bright A_SeekerMissile(25,10)
        Loop

    Death:
        HIB2 E 0 Bright A_SetTranslucent(0.75, 1)
        HIB2 EFGHIJ 3 Bright
        Stop
    }
}

Actor HieroBall2Clone : HieroBall2
{
    Damage 1
}

Actor CurseBall : BaronBall
{
    Speed 20
    Damage (20)
    Alpha 0.9
    SeeSound "monster/curse1"
    DeathSound "monster/curse2"
    Decal "MummyScorch"
    +LOOKALLAROUND
    +ThruGhost
    +ForceXYBillBoard
    +NoDamageThrust
    +SeekerMissile
    +HitMaster

    States
    {
	Spawn:
        TNT1 A 0
        TNT1 A 0 A_RearrangePointers(AAPTR_NULL,AAPTR_TARGET,AAPTR_TRACER)
        TNT1 A 0 A_LookEx(0,0,0,0,0,"Acquired")
        TNT1 A 0 A_RearrangePointers(AAPTR_MASTER,AAPTR_MASTER,AAPTR_TRACER)
        Goto Idle
    Acquired:
        TNT1 A 0 A_RearrangePointers(AAPTR_MASTER,AAPTR_MASTER,AAPTR_TARGET)
        Goto Idle
    Idle:
        CURS A 2 Bright A_SpawnItemEx("CurseTrail", 0, 0, 0, 0, 0, 0, 0, SXF_CLIENTSIDE)
        CURS A 0 Bright A_SeekerMissile(6, 7)
        CURS B 2 Bright A_SpawnItemEx("CurseTrail", 0, 0, 0, 0, 0, 0, 0, SXF_CLIENTSIDE)
        CURS B 0 Bright A_SeekerMissile(6, 7)
        CURS C 2 Bright A_SpawnItemEx("CurseTrail", 0, 0, 0, 0, 0, 0, 0, SXF_CLIENTSIDE)
        CURS C 0 Bright A_SeekerMissile(6, 7)
        CURS D 2 Bright A_SpawnItemEx("CurseTrail", 0, 0, 0, 0, 0, 0, 0, SXF_CLIENTSIDE)
        CURS D 0 Bright A_SeekerMissile(6, 7)
        Loop
    Death:
        CURS E 0 Bright A_SetTranslucent(0.8, 1)
        CURS E 3 ACS_NamedExecuteWithResult("Hiero_InflictCurse")
        CURS FGHI 3 Bright
        Stop
    }
}

Actor CurseTrail
{
    RenderStyle "Add"
    Alpha 0.8

    +ForceXYBillBoard
    +NoInteraction

    States
    {
    Spawn:
        TNT1 A 3
        CURS JLMNOPR 3 Bright
        Stop
    }
}

// -------------------------------------------------------------------------------------------
//
//   Hierophant -- The Deadly Curses!
//
// -------------------------------------------------------------------------------------------

Actor PowerWeaken : PowerDamage
{
    DamageFactor "Normal", 0.5
}

Actor PowerAmpDMG : PowerProtection
{
    DamageFactor "Normal", 2.0
}

Actor PowerSlow : PowerSpeed
{
    Speed 0.5
}

// --------------------------------------------------------------------------------------

Actor HieroCurseGiver : PowerupGiver // Base class for the following actors.
{
    Inventory.MaxAmount 0
    Powerup.Duration -10
    +Inventory.AutoActivate
    +Inventory.AlwaysPickup
}

Actor HieroWeaken : HieroCurseGiver
{
    Powerup.Color "Cyan" 0.33
    Powerup.Type "Weaken"
}

Actor HieroAmpDMG : HieroCurseGiver
{
    Powerup.Color "Red" 0.33
    Powerup.Type "AmpDMG"
}

Actor HieroSlow : HieroCurseGiver
{
    Powerup.Color "Yellow" 0.33
    Powerup.Type "Slow"
}

Actor HieroShadowsCooldown : PowerProtection
{
	powerup.duration -20
	damagefactor "normal", 1.0
}

Actor HieroDashCooldown : PowerProtection
{
	powerup.duration -10
	damagefactor "normal", 1.0
}