//==================================
// Shield RepeaterZombie
//==================================

Actor ShieldZombie
{
Health 150
Radius 20
Height 56
Speed 8
Mass 120
PainChance 130
MONSTER
+NoFear
+NOTARGET
+FLOORCLIP
+MISSILEMORE
+MISSILEEVENMORE
+NORADIUSDMG
+DONTHARMSPECIES
Species "Hell"
DamageFactor "Hell", 0.0
DamageFactor "Legendary", 0.6
DamageFactor "BFGSplash", 0.75
DamageFactor "PDTBFG", 0.2
DamageFactor "PDTBFGTracer", 0.2
DamageFactor "PlayerDevBall", 0.35
DamageFactor "PlayerDevTracer", 0.25
DamageFactor "MechStep", 0.0
DropItem "BonusCrateDrop" 1
MaxStepHeight 32
MaxDropOffHeight 32
Obituary "%o was vapourized by a zombie with a plasma repeater."
SeeSound "grunt/sight"
PainSound "grunt/pain"
DeathSound "grunt/death"
ActiveSound "grunt/active"
Tag "\c[C1]Shield \c[B5]Repeater Zombie\c-"
MeleeThreshold 300
MeleeRange 160
MaxTargetRange 500
var int user_shieldup;
var int user_ballsfired;
States
{
  Spawn:
    RPZM A 10 A_Look
    Loop
  See:
  	TNT1 A 0 A_JumpIfInventory("CounterToShieldAgain",10,"PrepareToReshield")
	TNT1 A 0 A_JumpIf(user_shieldup==0,"SummonShield")
    RPZM AABB 3 A_Chase
    TNT1 A 0 A_SpawnItem("FootStep",0,0,0,0)
	TNT1 A 0 A_JumpIfInventory("CounterToShieldAgain",10,"PrepareToReshield")
	TNT1 A 0 A_JumpIf(user_shieldup==0,"SummonShield")
    RPZM CCDD 3 A_Chase
    TNT1 A 0 A_SpawnItem("FootStep",0,0,0,0)
    Loop
	PrepareToReshield:
	RPZM A 0 A_TakeInventory("CounterToShieldAgain",32767)
	RPZM A 0 A_SetUserVar(user_shieldup,0)
	Goto See
	SummonShield:
	RPZM E 20
	RPZM E 0 A_SetUserVar(user_shieldup,1)
	RPZM A 0 A_SpawnItemEx("ShieldguyShield",0,0,0, 0,0,0, 0,SXF_NOCHECKPOSITION)
	Goto See
  Missile:
    RPZM EEE 5 A_FaceTarget
	RPZM F 2 Bright A_CustomMissile("FusionShotShield",32,5,random(-2,2))
	RPZM E 2 A_FaceTarget
	RPZM F 2 Bright A_CustomMissile("FusionShotShield",32,5,random(-2,2))
    TNT1 A 0 A_Jump(86,"Pause")
    TNT1 A 0 A_SpidRefire
    Goto Missile+4
  Pause:
	RPZM E 20
	Goto See
  Pain:
    RPZM G 6 A_Pain
    Goto See
  Death:
    TNT1 A 0 A_KillChildren("Removed")
    RPZM H 5
	TNT1 A 0 A_GiveToTarget("WeakCrateGiver",1)
    RPZM I 5 A_Scream
    RPZM J 5 A_Fall
    RPZM K 5 A_SpawnItem("BodyCrash",0,0,0,0)
    RPZM LM 5
    RPZM N -1
    Stop
  XDeath:
    TNT1 A 0 A_KillChildren("Removed")
    ZMAY O 3
	TNT1 A 0 A_GiveToTarget("WeakCrateGiver",1)
    ZMAY P 3 A_XScream
    ZMAY Q 3 A_SpawnItemEx("GibbedGenerator",0,0,0,0,0,0,0,128,0)
    ZMAY R 3 A_Fall
    ZMAY STU 3
    ZMAY V -1
    Stop
  Raise:
	TNT1 A 0
	TNT1 A 0 A_SpawnItemEx("VileHealEffect",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION)
    RPZM NMLKJI 5
    Goto See
  }
}

ACTOR FusionShotShield
{
  Radius 13
  Height 8
  Speed 25
  FastSpeed 30
  Damage 5  
  Scale 0.75  
  RENDERSTYLE ADD
  SeeSound "monsters/fusionfire" 
  DeathSound "weapons/hrballexplode"
  Species "Hell"
  DamageFactor "Hell", 0.0
  +MTHRUSPECIES
  +RIPPER
  PROJECTILE
  States
  {
  Spawn:
    FS03 AB 1 Bright A_SpawnItemEx("FusionTrail",0,0,0,0,0,0,0,128,0)
    Loop
  Death:
	TNT1 A 0
    TNT1 A 0 A_SpawnItemEx("PurpleParticleSpawner", 0, 0, 0, 0, 0, 0, 0, 128)
	TNT1 AAA 0 A_CustomMissile("Kaboom8", 0, 0, random(0,360), 2, random(0,360))
	TNT1 AAA 0 A_CustomMissile("SmokeFX4", 0, 0, random(0,360), 2, random(0,360))	
    FS03 HIJ 3 Bright
    Stop
  }
}

Actor ShieldguyShield
{
	var int user_damage;
	+NOGRAVITY
	+NEVERTARGET
	+SHOOTABLE
	+NOTONAUTOMAP
	-SOLID
	+QUICKTORETALIATE
	+GHOST
	-COUNTKILL
	+NOTARGETSWITCH
	DamageFactor "Legendary", 0.6
    DamageFactor "BFGSplash", 0.85
    DamageFactor "PDTBFG", 0.5
    DamageFactor "PDTBFGTracer", 0.5
    DamageFactor "PlayerDevBall", 0.45
    DamageFactor "PlayerDevTracer", 0.45
    DamageFactor "MechStep", 0.0
	RadiusDamageFactor 0.25
	Health 555
	Radius 18
	Height 56
	Species "Hell"
    DamageFactor "Hell", 0.0
	RenderStyle Add
	Scale 0.9
	Mass 0x7FFFFFFF
	BloodType "ShieldPuff"
	PainChance 255
	States
	{
	Spawn:
		RPZM O 0 NODELAY A_RearrangePointers(AAPTR_DEFAULT,AAPTR_TARGET,AAPTR_TARGET)
	Looper:
		RPZM O 0 A_RearrangePointers(AAPTR_TRACER,AAPTR_TARGET,AAPTR_DEFAULT) 
		RPZM O 1 BRIGHT A_Warp(AAPTR_TARGET,10,-5,0,0,WARPF_NOCHECKPOSITION|WARPF_INTERPOLATE)
		RPZM O 0 A_JumpIfInTargetInventory("ImDead",1,"Death.Removed") //failsafe to remove this shield
		Loop
	Pain:
		RPZM O 0 A_RearrangePointers(AAPTR_TRACER,AAPTR_TARGET,AAPTR_DEFAULT) 
		RPZM O 0 A_PlaySound("weapons/rocklx",7,0.5,false,1.2)
		RPZM O 1 BRIGHT A_Warp(AAPTR_TARGET,10,-5,0,0,WARPF_NOCHECKPOSITION|WARPF_INTERPOLATE)
		RPZM O 0 A_RearrangePointers(AAPTR_TRACER,AAPTR_TARGET,AAPTR_DEFAULT) 
		RPZM O 1 BRIGHT A_Warp(AAPTR_TARGET,10,-5,0,0,WARPF_NOCHECKPOSITION|WARPF_INTERPOLATE)
		RPZM O 0 A_RearrangePointers(AAPTR_TRACER,AAPTR_TARGET,AAPTR_DEFAULT) 
		RPZM O 1 BRIGHT A_Warp(AAPTR_TARGET,10,-5,0,0,WARPF_NOCHECKPOSITION|WARPF_INTERPOLATE)
		RPZM O 0 A_RearrangePointers(AAPTR_TRACER,AAPTR_TARGET,AAPTR_DEFAULT) 
		RPZM O 1 BRIGHT A_Warp(AAPTR_TARGET,10,-5,0,0,WARPF_NOCHECKPOSITION|WARPF_INTERPOLATE)
		Goto Looper
	Death:
		TNT1 A 3 
		TNT1 A 17
		TNT1 A 0 A_GiveInventory("CounterToShieldAgain",1,AAPTR_MASTER)
		TNT1 A 17
		TNT1 A 0 A_GiveInventory("CounterToShieldAgain",1,AAPTR_MASTER)
		TNT1 A 17
		TNT1 A 0 A_GiveInventory("CounterToShieldAgain",1,AAPTR_MASTER)
		TNT1 A 17
		TNT1 A 0 A_GiveInventory("CounterToShieldAgain",1,AAPTR_MASTER)
		TNT1 A 17
		TNT1 A 0 A_GiveInventory("CounterToShieldAgain",1,AAPTR_MASTER)
		TNT1 A 17
		TNT1 A 0 A_GiveInventory("CounterToShieldAgain",1,AAPTR_MASTER)
		TNT1 A 17
		TNT1 A 0 A_GiveInventory("CounterToShieldAgain",1,AAPTR_MASTER)
		TNT1 A 17
		TNT1 A 0 A_GiveInventory("CounterToShieldAgain",1,AAPTR_MASTER)
		TNT1 A 17
		TNT1 A 0 A_GiveInventory("CounterToShieldAgain",1,AAPTR_MASTER)
		TNT1 A 17
		TNT1 A 0 A_GiveInventory("CounterToShieldAgain",1,AAPTR_MASTER)
		TNT1 A 5
		Stop
	Death.Removed:
		TNT1 A 10 A_PlaySound("weapons/rocklx",CHAN_AUTO,1.0,false,1.2)
		Stop
	}
}

Actor ShieldPuff
{
	+NOINTERACTION
	RenderStyle Add
	Scale 0.4
	States
	{
	Spawn:
		RPZM P 1 Bright A_Stop
		RPZM Q 1 Bright A_Stop
		RPZM R 1 Bright 
		RPZM S 1 Bright 
		RPZM T 1 Bright A_FadeOut(0.2)
		Wait
	}
}

Actor CounterToShieldAgain : Inventory { Inventory.MaxAmount 10 }