ACTOR LegendaryZombie 16500
{ 
//$Category Monsters/LCA
//$Sprite LPOSA1
//$Title "Legendary Zombie"
Health 999
Radius 20
Height 56
Speed 10
Mass 100
PainChance 15
PainChance "ZombieDemonTech", 0
BloodColor "Blue"
DropItem "LegendaryArmor" 85 1
DropItem "LegAmmoSphere" 88 1
DropItem "LegendaryPowerShard" 35 1
DropItem "HandGrenadeAmmo" 235 2
DropItem "MineAmmo" 235 2
DropItem "Backpack" 198 1
DropItem "Armorplate" 205 1
DropItem "Portablemedkit" 210 1
DropItem "LDemonAmmoBox" 200 
DropItem "LDemonAmmo" 250 
DropItem "LegendaryRune" 30 1
DropItem "Legendary Plasmatic Rifle" 155 1
DamageFactor "LegendaryZombie", 0.0
DamageFactor "PDTBFG", 0.25
DamageFactor "PDTBFGTracer", 0.25
DamageFactor "PlayerDevBall", 0.125
DamageFactor "PlayerDevBall2", 0.125
DamageFactor "PlayerDTBFGRailgunSlug", 0.125
DamageFactor "PlayerDevTracer", 0.125
DamageFactor 0.75
DamageFactor "Legendary", 0.0
DamageFactor "LegendaryPlayer", 0.0
DamageFactor "LegendaryGuru", 0.0
DamageFactor "LegendaryGuruPlayer", 0.1
DamageFactor "DBFG10K2", 0.65
DamageFactor "PlayerDBFG10K2", 0.65
DamageFactor "DBFG2", 0.65
DamageFactor "PlayerDBFG2", 0.65
DamageFactor "PlayerDTRG", 0.5
MONSTER 
+NOTIMEFREEZE
+BOSS
+BOSSDEATH
+FLOORCLIP
+MISSILEMORE
+MISSILEEVENMORE
+QUICKTORETALIATE
+NOICEDEATH
+NODROPOFF
+DONTGIB
+NOTARGET
+NORADIUSDMG
+FORCERADIUSDMG
+NOFEAR
SeeSound "legzom/sight"
AttackSound "Null"
PainSound "legzom/pain"
DeathSound "legzom/death"
ActiveSound "legzom/active"
Obituary "%o was obliterated by a Legendary Zombie."
var int user_music;
var int user_protection;
var int user_protected;
States
{
Spawn:
    TNT1 A 0 A_SpawnItem("LHellionSmokeSpawner",0,0,0,0)
    LPOS A 10 Bright A_Look
	TNT1 A 0 A_SpawnItem("LHellionSmokeSpawner",0,0,0,0)
	LPOS Q 10 Bright A_Look
	TNT1 A 0 A_SpawnItem("LHellionSmokeSpawner",0,0,0,0)
    Loop
See:
    TNT1 A 0 A_JumpIf(user_music == 1,3)
    TNT1 A 0 ACS_NamedExecuteAlways("StartMonsterMusic",0,1)
	TNT1 A 0 A_SetUserVar("user_music",1)
    TNT1 A 0 A_SpawnItem("LHellionSmokeSpawner",0,0,0,0)
    LPOS A 0 A_JumpIfTargetInLOS("Strafing")
    LPOS AA 3 Bright A_Chase
	TNT1 A 0 A_SpawnItem("LHellionSmokeSpawner",0,0,0,0)
	LPOS BB 3 Bright A_Chase
	TNT1 A 0 A_SpawnItem("LHellionSmokeSpawner",0,0,0,0)
	TNT1 A 0 A_SpawnItem("FootStep",0,0,0,0)
	LPOS A 0 A_JumpIfTargetInLOS("Strafing")
	LPOS CC 3 Bright A_Chase
	TNT1 A 0 A_SpawnItem("LHellionSmokeSpawner",0,0,0,0)
	LPOS DD 3 Bright A_Chase
	LPOS A 0 A_Jump(80,"Rush")
    TNT1 A 0 A_SpawnItem("LHellionSmokeSpawner",0,0,0,0)
	TNT1 A 0 A_SpawnItem("FootStep",0,0,0,0)
	TNT1 A 0 A_SpawnItem("LHellionSmokeSpawner",0,0,0,0)
    Loop
Rush:
    LPOS A 0 A_JumpIfTargetInLOS("Strafing")
	TNT1 A 0 A_SpawnItem("FootStep",0,0,0,0)
	TNT1 A 0 A_SpawnItem("LHellionSmokeSpawner",0,0,0,0)
	TNT1 A 0 A_SpawnItemEx("LegZombieGhostA",0,0,0,0,0,0,0,SXF_CLIENTSIDE|SXF_NOCHECKPOSITION)
	LPOS A 1 Bright A_Chase
	TNT1 A 0 A_SpawnItemEx("LegZombieGhostA",0,0,0,0,0,0,0,SXF_CLIENTSIDE|SXF_NOCHECKPOSITION)
	LPOS A 1 Bright A_Chase
	TNT1 A 0 A_SpawnItemEx("LegendaryZombieGhostB",0,0,0,0,0,0,0,SXF_CLIENTSIDE|SXF_NOCHECKPOSITION)
	LPOS B 1 Bright A_Chase
	TNT1 A 0 A_SpawnItemEx("LegendaryZombieGhostB",0,0,0,0,0,0,0,SXF_CLIENTSIDE|SXF_NOCHECKPOSITION)
	LPOS B 1 Bright A_Chase
	TNT1 A 0 A_SpawnItem("FootStep",0,0,0,0)
    TNT1 A 0 A_SpawnItem("LHellionSmokeSpawner",0,0,0,0)
	TNT1 A 0 A_SpawnItemEx("LegZombieGhostC",0,0,0,0,0,0,0,SXF_CLIENTSIDE|SXF_NOCHECKPOSITION)
	LPOS C 1 Bright A_Chase
	TNT1 A 0 A_SpawnItemEx("LegZombieGhostC",0,0,0,0,0,0,0,SXF_CLIENTSIDE|SXF_NOCHECKPOSITION)
	LPOS C 1 Bright A_Chase
	TNT1 A 0 A_SpawnItemEx("LegendaryZombieGhostD",0,0,0,0,0,0,0,SXF_CLIENTSIDE|SXF_NOCHECKPOSITION)
	LPOS D 1 Bright A_Chase
	TNT1 A 0 A_SpawnItemEx("LegendaryZombieGhostD",0,0,0,0,0,0,0,SXF_CLIENTSIDE|SXF_NOCHECKPOSITION)
	LPOS D 1 Bright A_Chase
	TNT1 A 0 A_SpawnItem("FootStep",0,0,0,0)
	TNT1 A 0 A_SpawnItem("LHellionSmokeSpawner",0,0,0,0)
	TNT1 A 0 A_Jump(84,"See")
	TNT1 A 0 A_SpawnItem("LHellionSmokeSpawner",0,0,0,0)
	Loop
Strafing:
	TNT1 A 0 A_SpawnItem("FootStep",0,0,0,0)
	TNT1 A 0 A_Chase("","Missile",CHF_DONTMOVE)
	LPOS AA 3 Bright A_GiveInventory("LegZombieStrafing",1)
	TNT1 A 0 A_Chase("","Missile",CHF_DONTMOVE)
	LPOS BB 3 Bright A_GiveInventory("LegZombieStrafing",1)
	TNT1 A 0 A_SpawnItem("FootStep",0,0,0,0)
	TNT1 A 0 A_Chase("","Missile",CHF_DONTMOVE)
    LPOS CC 3 Bright A_GiveInventory("LegZombieStrafing",1)	
	TNT1 A 0 A_Chase("","Missile",CHF_DONTMOVE)
	LPOS DD 3 Bright A_GiveInventory("LegZombieStrafing",1)
	Goto See
Pause:
	LPOS E 0 A_PlaySound("weapons/demontechsteam")
	LPOS EEEEE 3 Bright A_GiveInventory("LegZombieStrafing",1)
	Goto See	
Missile:
    TNT1 A 0 A_SetShootable
    TNT1 A 0 A_UnsetInvulnerable
    TNT1 A 0 A_SetTranslucent(1)
	LPOS EEE 3 Bright A_GiveInventory("LegZombieStrafing",1)
	TNT1 A 0 A_GiveInventory("LegZombieStrafing",1)
	TNT1 A 0 A_CustomMissile("LegendaryProjectile",32,0,random(-2,2),0)
	LPOS F 3 Bright A_PlaySoundEx("weapons/DemonTechRifle","Weapon")
	TNT1 A 0 A_Jump(24,"Pause")
	TNT1 A 0 A_SpidRefire
    TNT1 A 0 A_PlayWeaponSound("BlueDTRFire")
	Goto Missile+5
Pain:
    TNT1 A 0 A_Jump(10,"Protection")
	TNT1 A 0 A_Jump(192,"PainMissile")
    LPOS G 3 Bright A_GiveInventory("LegZombieStrafing",1)
    LPOS G 0 A_Pain
	LPOS G 3 Bright A_GiveInventory("LegZombieStrafing",1)
    Goto See
PainMissile: 
    LPOS G 3 Bright A_GiveInventory("LegZombieStrafing",1)
    LPOS G 0 A_Pain
	LPOS G 3 Bright A_GiveInventory("LegZombieStrafing",1)
    Goto Missile	
Protection:
    TNT1 A 0 A_JumpIf(user_protection >= 3,"Pain")
	TNT1 A 0 A_JumpIf(user_protected == 1,"Pain")
	TNT1 A 0 A_PlaySound("legendary/defense")
	TNT1 A 0 A_FaceTarget
	LPOS E 2 Bright ACS_NamedExecuteAlways("LegendaryProtection",0,0,0,0)
	TNT1 A 0 A_SpawnItem("LHellionSmokeSpawner",0,0,0,0)
	Goto See	
Death:
    TNT1 A 0 A_Jump(36,"LegendarySoul")
    TNT1 A 0 A_StopSound(6)
	LPOS H 5 A_Scream
    LPOS I 5 A_Fall
    LPOS J 5 A_SpawnItem("BodyCrash",0,0,0,0)
    LPOS K 5 
    LPOS L -1 
	Stop
LegendarySoul:
    TNT1 A 0 A_StopSound(6)
	TNT1 A 0 A_SpawnItem("BHellionSmokeSpawner",0,0,0,0)
	LPOS H 5 A_Scream
	TNT1 A 0 A_SpawnItem("BHellionSmokeSpawner",0,0,0,0)
    LPOS I 5 A_Fall
	TNT1 A 0 A_SpawnItem("BHellionSmokeSpawner",0,0,0,0)
    LPOS J 5 A_SpawnItem("BodyCrash",0,0,0,0)
	TNT1 A 0 A_SpawnItem("BHellionSmokeSpawner",0,0,0,0)
    LPOS K 5 
	TNT1 A 0 A_SpawnItem("BHellionSmokeSpawner",0,0,0,0)
    LPOS L 140
	LPOS L 0 A_PlaySoundEx("brain/spit","Voice",0,2)
	LPOS LLLLLLLLLLLLLLLLL 2 Bright A_GiveInventory("LegSoulEvent",1)
	LPOS LLLLLLLLLLLLLLLLL 2 Bright A_GiveInventory("LegSoulEvent",1)
	LPOS LLLLLLLLLLLLLLLLL 2 Bright A_GiveInventory("LegSoulEvent",1)
	TNT1 A 0 A_SpawnItemEx("LegendarySoul",0,0,16,0,0,0,0,32)
	TNT1 A 0 A_SpawnItemEx("TeleportFog",0,0,16,0,0,0,0,32)
	LPOS L -1
	Stop
XDeath:
    TNT1 A 0 A_StopSound(6)
	LPOS O 3 A_SpawnItemEx("BlueGibbedGenerator",0,0,0,0,0,0,0,128,0)
    LPOS P 3 A_XScream
    LPOS R 3 A_Fall
    LPOS STUV 3 
    LPOS W -1 
    Stop
    }
}

ACTOR LegZombieGhostA
{
Scale 1.1
Radius 20
Height 56
Speed 0
Alpha 0.7
PROJECTILE
RENDERSTYLE Translucent
+CLIENTSIDEONLY
+NOTIMEFREEZE
States
{
Spawn:
    TNT1 A 0
    TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(304) == 1, "Toaster")
Fade:
    TNT1 A 1
    LPOS A 2 A_FadeOut(0.10)
    Goto Fade+1
Toaster:
    TNT1 A 0
    Stop
    }
}

ACTOR LegendaryZombieGhostB : LegZombieGhostA
{   
States
{
Spawn:
    TNT1 A 0
    TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(304) == 1, "Toaster")
Fade:
    TNT1 A 1
    LPOS B 2 A_FadeOut(0.10)
    Goto Fade+1
Toaster:
    TNT1 A 0
    Stop
    }
}

ACTOR LegZombieGhostC : LegZombieGhostA
{   
States
{
Spawn:
    TNT1 A 0
    TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(304) == 1, "Toaster")
Fade:
    TNT1 A 1
    LPOS C 2 A_FadeOut(0.10)
    Goto Fade+1
Toaster:
    TNT1 A 0
    Stop
    }
}

ACTOR LegendaryZombieGhostD : LegZombieGhostA
{   
States
{
Spawn:
    TNT1 A 0
    TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(304) == 1, "Toaster")
Fade:
    TNT1 A 1
    LPOS D 2 A_FadeOut(0.10)
    Goto Fade+1
Toaster:
    TNT1 A 0
    Stop
    }
}

ACTOR LegendaryZombieGhostE : LegZombieGhostA
{   
States
{
Spawn:
    TNT1 A 0
    TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(304) == 1, "Toaster")
Fade:
    TNT1 A 1
    LPOS E 2 A_FadeOut(0.10)
    Goto Fade+1
Toaster:
    TNT1 A 0
    Stop
    }
}

ACTOR LegendaryZombieGhostF : LegZombieGhostA
{   
States
{
Spawn:
    TNT1 A 0
    TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(304) == 1, "Toaster")
Fade:
    TNT1 A 1
    LPOS F 2 A_FadeOut(0.10)
    Goto Fade+1
Toaster:
    TNT1 A 0
    Stop
    }
}

ACTOR AHellionSmoke
{
+MISSILE
+DONTSPLASH
+NOBLOCKMAP
+NOGRAVITY
+NOTELEPORT
+FORCEXYBILLBOARD
+THRUACTORS
+NOTIMEFREEZE
Scale 0.4
RenderStyle Normal
States
  {
  Spawn:
    TNT1 A 0
    TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(304) == 1, "Toaster")
    LMKE ABCDEFGHIJKL 2 Bright A_FadeOut
    Stop
  Toaster:
    TNT1 A 0
    Stop
  }
}

ACTOR LegHellionSmoke2 : AHellionSmoke
{
Scale 0.6
}

ACTOR LegSoulSmoke : AHellionSmoke
{
Scale 0.12
}

ACTOR LHellionSmokeSpawner : RedParticleSpawner
{
  +NOTIMEFREEZE
  States
  {
  Spawn:
    TNT1 A 0
    TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(304) == 1, "Toaster")
    TNT1 AAA 0 A_SpawnItemEx("AHellionSmoke",random(12,-12),random(12,-12),random(12,64),0,0,random(1,3),0,128,0)
    TNT1 A 1
    Stop
  Toaster:
    TNT1 A 0
	Stop		
  }
}

ACTOR LHellionSmokeAttackSpawner : RedParticleSpawner
{
  +NOTIMEFREEZE
  States
  {
  Spawn:
    TNT1 A 0
    TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(304) == 1, "Toaster")
    TNT1 A 0 A_SpawnItemEx("LegHellionSmoke2",random(12,-12),random(12,-12),random(12,18),0,0,random(6,9),0,128,0)
	TNT1 A 0 A_SpawnItemEx("LegHellionSmoke2",random(22,-22),random(22,-22),random(6,12),0,0,random(3,6),0,128,0)
    TNT1 A 1
    Stop
  Toaster:
    TNT1 A 0
	Stop		
  }
}

Actor LegZombieStrafing : CustomInventory
{
  +INVENTORY.QUIET
  +INVENTORY.UNDROPPABLE
  +INVENTORY.ALWAYSPICKUP
  +INVENTORY.AUTOACTIVATE       
  +COUNTITEM
  Inventory.Amount 1
  Inventory.MaxAmount 0
  +NOTIMEFREEZE
  States
  {
  Pickup:
    NULL A 1 
	NULL A 1 A_SpawnItem("LHellionSmokeSpawner",0,0,0,0)
	NULL A 1 A_Jump(188,2)
	NULL A 1 A_GiveInventory("LegZombieJumping",1)
	NULL A 1 A_JumpIf(velx != 0 || vely != 0,2)
	NULL A 1 A_Jump(256,2)
	NULL A 1 A_Jump(235,5)
	NULL A 1 A_JumpIfInventory("LegZombieStrafeSens",1,3)
	NULL A 1 A_GiveInventory("LegZombieStrafeSens",1)
	NULL A 1 A_Jump(256,2)	
	NULL A 1 A_TakeInventory("LegZombieStrafeSens",1)
	NULL A 1 A_JumpIfInventory("LegZombieStrafeSens",1,3)
	NULL A 1 ThrustThing(angle*256/360+38.7,3,0,0)
	NULL A 1 A_Jump(256,2)	
	NULL A 1 ThrustThing(angle*256/360+38.7,-3,0,0)
    NULL A 1 A_FaceTarget
	NULL A 1 A_Jump(24,2)
	NULL A 1 A_JumpIfCloser(300,2)
	NULL A 1 A_Recoil(-1)
    Stop
	NULL A 1 A_Recoil(1)
    Stop	
  }
}

Actor LegZombieJumping : LegZombieStrafing
{
  +NOTIMEFREEZE
  States
  {
  Pickup:
    NULL A 1 
    NULL A 1 A_CheckFloor(1)
    Stop
	NULL A 1 A_Jump(242,2)
	NULL A 1 ThrustThingZ(0,25,0,1)
    Stop
	NULL A 1
    Stop
  }
}

ACTOR LegZombieStrafeSens : Inventory{Inventory.MaxAmount 1}