Actor Glaucoma
{
Painchance "Mine", 128
Painchance "Goreling", 256
Species "Ghoul"
Damagefactor "Acid", 3.5
Health 800
Speed 4
FloatSpeed 4
Radius 30
Height 56
+NoFear
+NoTarget
+DontHurtSpecies
+ACTLIKEBRIDGE
PainChance 22
Mass 500
Meleedamage 7
DamageFactor "SoulToxic", 0.0
DamageFactor "Cacolich", 0.0
DamageFactor "HelementalComet", 0.0
Damagefactor Glaucoma, 0
Damagefactor GlaucomaGas, 0
BloodColor "Red"
SeeSound "glauco/sight"
PainSound "glauco/pain"
ActiveSound "glauco/active"
MeleeSound "caco/melee"
DeathSound "glauco/death"
HitObituary "A Glaucoma fed upon %o's flesh."
Obituary "%o couldn't hit the Glaucoma." 
DropItem "LifeEssence" 190 20
DropItem "HEMArmorBonusMax5" 160
MONSTER
+NOGRAVITY
+FLOAT
+MISSILEMORE
 States
  {
  Pain.Cacobribe:
	TNT1 A 0 HealThing(1)
	TNT1 A 0
	GoTo Missile
  Pain.CacoBribe2:
	TNT1 A 0 A_ClearTarget
	TNT1 A 0 HealThing(8)
	GoTo See
  Spawn:
	TNT1 A 0 A_GiveInventory("GHOULS",1)
  Spawn.Real:
  Idle:
	GLCA A 1
	GLCA A 1 A_Look
	 Loop
  See:
	TNT1 A 0 A_JumpIfHealthLower(100,"GetFear")
	TNT1 A 0 A_ChangeFlag(Frightened,0)
	GLCA A 1 A_Chase
	GLCA AAA 1 A_Chase("","")
	TNT1 A 0 HealThing(2)
	Loop
  See.Fear:
	GLCA A 1 A_Chase
	GLCA AAAA 1 A_Chase("","")
	TNT1 A 0 HealThing(2)
	TNT1 A 0 A_JumpIfHealthLower(200,"See.Fear")
	GoTo See
  GetFear:
	TNT1 A 0 A_ChangeFlag(Frightened,1)
	GoTo See.Fear
  Missile:
	//TNT1 A 0 A_Jump(35,"CastGhouls")
	TNT1 A 0 A_Jump(133,"HealGhouls")
	GLCA BC 6 A_FaceTarget
	TNT1 A 0 A_FaceTarget
	GLCA DDD 1 Bright
	TNT1 A 0 A_ChangeFlag(NoPain,1)
	TNT1 A 0 DamageThing(30)
	GLCA DDD 0 Bright A_CustomMissile("GlaucomaGas",24,0,random(-4,4),0,random(-3,3))
	TNT1 A 0 A_ChangeFlag(NoPain,0)
	End:
	GLCA D 4 Bright
	GLCA CBA 3 A_FaceTarget
	Goto See
  HealGhouls:
	GLCA BC 8
	GLCA DDDDDD 1 Bright A_SpawnItemEx("GlaucomaHealFX",0,0,0)
	TNT1 A 0 A_RadiusGive("GlaucomaHeal",400,RGF_MONSTERS,1)
	TNT1 A 0 A_RadiusGive("GlaucomaDebuff2",400,RGF_PLAYERS,1)
	TNT1 A 0 A_RadiusGive("GlaucomaBuff2",400,RGF_MONSTERS,1)
	GLCA DDDD 1 Bright A_SpawnItemEx("GlaucomaHealFX",0,0,0)
	GLCA CBA 4
	GoTo See
  Melee:
	GLCA BC 5 A_FaceTarget
	GLCA D 5 A_MeleeAttack
	GLCA CB 5 A_FaceTarget
	Goto See
  Pain:
	GLCA E 3
	GLCA E 6 A_Pain
	Goto See
  Death:
    TNT1 A 0 A_TakeInventory("Ghouls",1)
	TNT1 A 0
	GLCA G 6 A_Scream
	GLCA H 6 A_NoBlocking	  	 
	GLCA IJ 4
	GLCA K 7
	GLCA L -1
	Stop
  XDeath:
    TNT1 A 0 A_TakeInventory("Ghouls",1)
	TNT1 A 0
	GLCA E 4 A_GiveInventory("XDeathCheck",1)
	GLCA G 4 A_NoBlocking
	GLCX A 4 A_SpawnItemEx("GibbedGenerator",0,0,0,0,0,0,0,128,0)
	GLCX B 3 A_PlaySound("Gore/Splat")
	GLCX C 3 
	GLCX D 3 
	GLCX E 3
	GLCX F -1
	Stop	
  Raise:
	TNT1 A 0 A_JumpIfInVENTORY("XDeathCheck",1,"XRaise")
	GLCA KJIHG 4
	GLCA A 3
    TNT1 A 0 A_GiveInventory("Ghouls",1)
	Goto See
  XRaise:
	TNT1 A 0 A_TakeInventory("XDeathCheck",1)
	GLCX DCBA 4
	GLCA GA 3
    TNT1 A 0 A_GiveInventory("Ghouls",1)
	Goto See
  Pain.Goreling:
	TNT1 A 0 A_JumpIfInventory("Ghouls",1,"See")
    TNT1 A 0 A_SpawnItemEx("BloodConsumeFX",0,0,32,0,0,0,0,SXF_NOCHECKPOSITION)
	TNT1 A 0
	TNT1 A 1
	Stop
  }
}

Actor GlaucomaHeal : CustomInventory
{
 +INVENTORY.ALWAYSPICKUP
 States
  {
  PickUp:
	"####" "#" 0 A_JumpIfInventory("Ghoul",1,"PickUp.Yes")
	GoTo PickUp.No
  PickUp.Yes:
	"####" "#" 0 HealThing(84)
	Stop
  PickUp.No:
	"####" "#" 0
	Stop
  }
}
Actor GlaucomaBuff : CustomInventory
{
 +INVENTORY.ALWAYSPICKUP
 States
  {
  PickUp:
	"####" "#" 0 
	"####" "#" 0 A_GiveInventory("GlaucomaDamageUp")
	"####" "#" 0 HealThing(4)
	Stop
  PickUp.No:
	"####" "#" 0
	Stop
  }
}
Actor GlaucomaDebuff : CustomInventory
{
 +INVENTORY.ALWAYSPICKUP
 States
  {
  PickUp:
	"####" "#" 0 A_GiveInventory("GlaucomaDamageDown")
	"####" "#" 0 A_JumpIfInventory("MeltCount",1,2)
	"####" "#" 0 ACS_NAMEDEXECUTEALWAYS("Melt")
	"####" "#" 0 A_GiveInventory("MeltCount",6)
	Stop
  PickUp.No:
	"####" "#" 0
	Stop
  }
}

Actor GlaucomaBuff2 : CustomInventory
{
 +INVENTORY.ALWAYSPICKUP
 States
  {
  PickUp:
	"####" "#" 0 
	"####" "#" 0 A_GiveInventory("GlaucomaDamageUp2")
	"####" "#" 0 HealThing(25)
	"####" "#" 0 A_JumpIfInventory("Ghoul",1,"PickUp.Yes")
	Stop
  PickUp.Yes:
	"####" "#" 0 A_GiveInventory("GlaucomaDamageUp")
	Stop
  PickUp.No:
	"####" "#" 0
	Stop
  }
}
Actor GlaucomaDebuff2 : CustomInventory
{
 +INVENTORY.ALWAYSPICKUP
 States
  {
  PickUp:
	"####" "#" 0 A_GiveInventory("GlaucomaDamageDown2")
	"####" "#" 0 A_JumpIfInventory("MeltCount",1,2)
	"####" "#" 0 ACS_NAMEDEXECUTEALWAYS("Melt")
	"####" "#" 0 A_GiveInventory("MeltCount",8)
	Stop
  PickUp.No:
	"####" "#" 0
	Stop
  }
}

Actor Meltcount : Inventory { Inventory.MaxAmount 100 }

Actor PowerDamageUp : PowerDamage
{ Inventory.Icon "DAMGUPG" }
Actor PowerDamageDown : PowerDamage
{ Inventory.Icon "DAMGDWN" }

Actor GlaucomaDamageUp : PowerDamageUp
{ Damagefactor Normal, 1.3 
  PowerUp.Duration -4 }
Actor GlaucomaDamageUp2 : PowerDamageUp
{ Damagefactor Normal, 1.7 
  PowerUp.Duration -17 }
Actor GlaucomaDamageDown : PowerDamageDown
{ Damagefactor Normal, 0.75
  PowerUp.Duration -4 }
Actor GlaucomaDamageDown2 : PowerDamageDown
{ Damagefactor Normal, 0.4 
  PowerUp.Duration -17 }

Actor GlaucomaHealFX : BaseFlare
{
 Scale 1.5
 Alpha 1.0
 States
{
Spawn:
	TNT1 A 0
	L5NR A 6 Bright
	L5NR AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 1 Bright A_FadeOut(0.04)
	Stop
	}
}
Actor GlaucomaGas
{
 Speed 20
 Height 8.5
 Radius 8.5
 Damage (random(14,26))
 Renderstyle Add
 Damagetype Glaucoma
 Projectile
 +MThruSpecies
 SeeSound "GlaucoShot"
 DeathSound "GlaucoHit"
  States
  {
	Spawn:
	 "####" "#" 0
	 "####" "#" 0 A_PlaySound("GlaucoIdle",1,0.75,0)
	 "####" "#" 0 A_Jump(256,"Flight")
	 Flight:
	 FGO2 AAABBBCCCDDDEEEFFF 1 Bright A_SpawnItem("GlaucomaGasTrace")
	 Loop
	Death:
	 FGO2 G 3 Bright
	 TNT1 A 0 A_SpawnItemEx("GlaucomaDFX",0,0,0)
	 TNT1 A 0 A_Explode(30,180,0,0,70)
	 TNT1 A 0 A_SetDamagetype("GlaucomaGas")
	 TNT1 A 0 A_RadiusGive("GlaucomaDebuff",165,RGF_PLAYERS,1)
	 TNT1 A 0 A_RadiusGive("GlaucomaBuff",165,RGF_MONSTERS,1)
	 FGO2 HIJKL 3 Bright
	 FGO2 L 1 Bright A_FadeOut
	 Wait
  }
}



Actor GlaucomaGasTrace 
{
 +ClientsideOnly
 +ForceXYBillboard
 +NoBlockMap
 +NoInteraction
 +NoGravity
 +DONTSPLASH
 +ExplodeOnWater
 +NoTelestomp
 Radius 2
 Height 2
 Renderstyle Add
 Alpha 0.9
 Scale 0.85
  States
  {
	Spawn:
	 TNT1 A 1
	 TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(304) == 1, "Toaster")
	 FGO2 A 1 Bright
	 TNT1 A 0 A_SetTranslucent(0.8,1)
	 FGO2 B 1 Bright A_SetScale(0.8,0.8)
	 TNT1 A 0 A_SetTranslucent(0.7,1)
	 FGO2 C 1 Bright A_SetScale(0.7,0.7)
	 TNT1 A 0 A_SetTranslucent(0.6,1)
	 FGO2 D 1 Bright A_SetScale(0.6,0.6)
	 TNT1 A 0 A_SetTranslucent(0.5,1)
	 FGO2 E 1 Bright A_SetScale(0.5,0.5)
	 TNT1 A 0 A_SetTranslucent(0.4,1)
	 FGO2 F 1 Bright A_SetScale(0.4,0.4)
	 TNT1 A 0 A_SetTranslucent(0.3,1)
	 FGO2 A 1 Bright A_SetScale(0.3,0.3)
	 TNT1 A 0 A_SetTranslucent(0.2,1)
	 FGO2 B 1 Bright A_SetScale(0.2,0.2)
	 TNT1 A 0 A_SetTranslucent(0.1,1)
	 FGO2 C 1 Bright A_SetScale(0.1,0.1)
	 Stop
	Toaster:
	 TNT1 A 0
	 Stop
  }
}


Actor MeltingFX : ImpBallTrail
{
  States
  {
	Spawn:
	 TNT1 A 0
	 TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(304) == 1, "Toaster")
	 TNT1 AAAA 0 A_SpawnItemEx("AcidStain",random(-35,35),random(-35,35),random(25,40),0,0,random(1,7),0,SXF_NOCHECKPOSITION|SXF_CLIENTSIDE,100)
	 TNT1 A 1
	 Stop
	 Toaster:
	 TNT1 A 0
	 TNT1 A 0 A_SpawnItemEx("AcidStainToaster",0,0,30,0,0,3,0,SXF_CLIENTSIDE)
	 TNT1 A 1
	 Stop
  }
}
Actor AcidStain : ImpBallTrail
{
 Renderstyle Add
 Scale 0.3
  States
  {
	Spawn:
	 TNT1 A 0
	 TNT1 A 0 A_Jump(128,"SpawnB","SpawnC","SpawnD")
	 AMCG Z 7 Bright
	 AMCG Z 1 Bright A_FadeOut
	 Wait
	 SpawnB:
	 AMCG Y 7 Bright
	 AMCG Y 1 Bright A_FadeOut
	 Wait
	 SpawnC:
	 AMCG V 7 Bright
	 AMCG V 1 Bright A_FadeOut
	 Wait
	 SpawnD:
	 AMCG T 7 Bright
	 AMCG T 1 Bright A_FadeOut
	 Wait
  }
}
Actor AcidStainToaster : AcidStain
{
 Scale 0.9
}
