Actor SpecOpsRailgunner 17564
{
//$Category Monsters/DUST
//$Sprite SPE3A1
//$Title "Spec-Ops Railgunner"
  Health 125
  Height 56
  Radius 20
  Speed 8
  PainChance 96
  Monster
  +FloorClip
  +NoTarget
  +NoInfighting
  Species "SpecOps"
  SeeSound "SpecOpsZombie/Sight"
  ActiveSound "SpecOpsZombie/Active"
  PainSound "SpecOpsZombie/Pain"
  DeathSound "SpecOpsZombie/Death"
  Obituary "%o was seared by a Spec Ops Zombie."
  Decal RailScorch
  DropItem "Railgun " 5
  DropItem "StimKit" 80
  DropItem "ArmorBooster" 80
  DropItem "AmmoPack" 60
  DropItem "HandGrenadeAmmo" 100 1
  DropItem "MineAmmo" 50 1
  DropItem "NewCell" 100 20
  DropItem "NewCell" 100 20
  States
  {
  Spawn:
    SPE3 A 1 A_Look
    Loop

  //Switching
  See:
    SPE3 A 0 A_JumpIfTargetInLOS("See2")
	SPE3 ABCD 4 A_Chase
	Loop
	
  See2:
    SPE3 A 0 A_TakeInventory("ZSpecOpSnipe", 1)
    SPE3 A 0 A_TakeInventory("ZSpecOpWander", 1)
    SPE3 A 0 A_TakeInventory("ZSpecOpCreep", 1)
    SPE3 A 0 A_TakeInventory("ZSpecOpFlee", 1)
    SPE3 A 0 A_ChangeFlag("MissileMore", 0)
    SPE3 A 0 A_ChangeFlag("MissileEvenMore", 0)
    SPE3 A 0 A_ChangeFlag("AvoidMelee", 0)
    SPE3 A 0 A_ChangeFlag("Frightened", 0)
    SPE3 A 0 A_GiveInventory("ZSpecOpsRGSitRep", 1)
    SPE3 A 0 A_JumpIfInventory("ZSpecOpSnipe", 1, "SnipeSwitch")
    SPE3 A 0 A_JumpIfInventory("ZSpecOpWander", 1, "WanderSwitch")
    SPE3 A 0 A_JumpIfInventory("ZSpecOpCreep", 1, "CreepSwitch")
    SPE3 A 0 A_JumpIfInventory("ZSpecOpFlee", 1, "FleeSwitch")

  //Snipe Mode
  SnipeSwitch:
    SPE3 A 0 A_ChangeFlag("MissileMore", 1)
    SPE3 A 0 A_ChangeFlag("MissileEvenMore", 1)
    Goto SnipeSee
  SnipeSee:
    SPE3 E 0 A_Chase("", "SnipeMissile", 17)
    SPE3 EEEE 2 A_FaceTarget
    SPE3 E 0 A_JumpIfCloser(384, "See")
    SPE3 E 0 A_CheckSight("SnipeIdle")
    Loop
  SnipeIdle:
    SPE3 E 0 A_ClearTarget
    SPE3 E 1 A_LookEx(10, 0, 0, 0, 360, "SnipeSee")
    Goto SnipeIdle+1
  SnipeMissile:
    SPE3 E 0 A_Jump(128, 2)
    SPE3 E 2 A_FaceTarget
    SPE3 E 0 A_Jump(128, 2)
    SPE3 E 2 A_FaceTarget
    SPE3 E 0 A_Jump(128, 2)
    SPE3 E 2 A_FaceTarget
    SPE3 E 0 A_Jump(128, 2)
    SPE3 E 2 A_FaceTarget
    SPE3 E 0 A_Jump(128, 2)
    SPE3 E 2 A_FaceTarget
    SPE3 E 0 A_Jump(128, 2)
    SPE3 E 2 A_FaceTarget
    SPE3 E 0 A_Jump(128, 2)
    SPE3 E 2 A_FaceTarget
    SPE3 E 0 A_Jump(128, 2)
    SPE3 E 2 A_FaceTarget
    SPE3 E 0 A_Jump(128, 2)
    SPE3 E 2 A_FaceTarget
    SPE3 E 0 A_Jump(128, 2)
    SPE3 E 2 A_FaceTarget
    SPE3 E 0 A_Jump(128, 2)
    SPE3 E 2 A_FaceTarget
    SPE3 E 0 A_Jump(128, 2)
    SPE3 E 2 A_FaceTarget
    SPE3 E 0 A_Jump(128, 2)
    SPE3 E 2 A_FaceTarget
    SPE3 E 0 A_Jump(128, 2)
    SPE3 E 2 A_FaceTarget
    SPE3 E 0 A_Jump(128, 2)
    SPE3 E 2 A_FaceTarget
    SPE3 E 0 A_Jump(128, 2)
    SPE3 E 2 A_FaceTarget
	TNT1 A 0 Bright A_PlaySound("monsters/fusionfire")
    SPE3 F 2 Bright A_CustomMissile("SpecOpsLaser",30,0,0)
    SPE3 F 2 Bright A_FaceTarget
    SPE3 EEEEE 2 A_FaceTarget
    SPE3 E 0 A_Jump(192, "SnipeSee")
    SPE3 E 0 A_MonsterRefire(40, "SnipeSee")
    Loop

  //Wander Mode
  WanderSwitch:
    SPE3 A 0 A_ClearTarget
    Goto WanderSee
  WanderSee:
    SPE3 A 4 A_Wander
    SPE3 A 0 A_LookEx(10, 0, 0, 0, 360, "See")
    SPE3 A 4 A_Wander
    SPE3 A 0 A_LookEx(10, 0, 0, 0, 360, "See")
    SPE3 B 4 A_Wander
    SPE3 A 0 A_LookEx(10, 0, 0, 0, 360, "See")
    SPE3 B 4 A_Wander
    SPE3 A 0 A_LookEx(10, 0, 0, 0, 360, "See")
    TNT1 A 0 A_SpawnItem("FootStep",0,0,0,0)
    SPE3 C 4 A_Wander
    SPE3 A 0 A_LookEx(10, 0, 0, 0, 360, "See")
    SPE3 C 4 A_Wander
    SPE3 A 0 A_LookEx(10, 0, 0, 0, 360, "See")
    SPE3 D 4 A_Wander
    SPE3 A 0 A_LookEx(10, 0, 0, 0, 360, "See")
    SPE3 D 4 A_Wander
    SPE3 A 0 A_LookEx(10, 0, 0, 0, 360, "See")
    TNT1 A 0 A_SpawnItem("FootStep",0,0,0,0)
    Loop

  //Creep Mode
  CreepSwitch:
    SPE3 A 0 A_ChangeFlag("MissileMore", 1)
    SPE3 A 0 A_ChangeFlag("AvoidMelee", 1)
    Goto CreepSee
  CreepSee:
    SPE3 A 0 A_CheckSight("CreepCheck")
    SPE3 A 0 A_JumpIfHealthLower(50, "See")
    SPE3 AABB 5 A_Chase("", "CreepMissile", 2)
    TNT1 A 0 A_SpawnItem("FootStep",0,0,0,0)
	SPE3 CCDD 5 A_Chase("", "CreepMissile", 2)
    TNT1 A 0 A_SpawnItem("FootStep",0,0,0,0)
    Loop
  CreepCheck:
    SPE3 A 0 A_Jump(32, "See")
    Goto CreepSee+1
  CreepMissile:
    SPE3 EEE 4 A_FaceTarget
	TNT1 A 0 Bright A_PlaySound("monsters/fusionfire")
    SPE3 F 2 Bright A_CustomMissile("SpecOpsLaser",30,0,0)
    SPE3 F 2 Bright A_FaceTarget
    SPE3 EEE 2 A_FaceTarget
    Goto CreepSee

  //Flee Mode
  FleeSwitch:
    SPE3 A 0 A_ChangeFlag("Frightened", 1)
    Goto FleeSee
  FleeSee:
    SPE3 AABB 2 A_Chase("", "FleeMissile")
    TNT1 A 0 A_SpawnItem("FootStep",0,0,0,0)
	SPE3 CCDD 2 A_Chase("", "FleeMissile")
    TNT1 A 0 A_SpawnItem("FootStep",0,0,0,0)
    SPE3 A 0 A_Jump(128, 2)
    SPE3 A 0 A_JumpIfCloser(768, 1)
    Goto See
    SPE3 A 0
    Loop
  FleeMissile:
    SPE3 EEE 4 A_FaceTarget
	TNT1 A 0 Bright A_PlaySound("monsters/fusionfire")
    SPE3 F 2 Bright A_CustomMissile("SpecOpsLaser",30,0,0)
    SPE3 F 2 Bright A_FaceTarget
    SPE3 EE 2 A_FaceTarget
    Goto FleeSee

  //Misc hurting states
  Pain:
    SPE3 G 4
    SPE3 G 4 A_Pain
    SPE3 G 0 A_Jump(96, "See")
    Goto WhatPainState
  WhatPainState:
    SPE3 G 0 A_JumpIfInventory("ZSpecOpSnipe", 1, "SnipeSee")
    SPE3 G 0 A_JumpIfInventory("ZSpecOpWander", 1, "WanderSee")
    SPE3 G 0 A_JumpIfInventory("ZSpecOpCreep", 1, "CreepSee")
    SPE3 G 0 A_JumpIfInventory("ZSpecOpFlee", 1, "FleeSee")
    Goto FleeSee
  Death:
    SPE3 H 5
    SPE3 I 5 A_Scream
    SPE3 J 5
    SPE3 K 5 A_NoBlocking
    SPE3 L -1
  Raise:
	TNT1 A 0
	TNT1 A 0 A_SpawnItemEx("VileHealEffect",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION)
    SPE3 LKJIH 5
    Goto See
  }
}

Actor ZSpecOpsRGSitRep : CustomInventory
{
  Inventory.MaxAmount 0
  +Inventory.AutoActivate
  States
  {
  Spawn:
    TNT1 A 1
    Fail

  Use:
    TNT1 A 0 A_JumpIfHealthLower(50, "LowHealth")
    TNT1 A 0 A_CheckSight("OutOfSight")
    TNT1 A 0 A_JumpIfCloser(384, "Close")
  ChecksFailed:
    TNT1 A 0 A_Jump(256, "SnipeMode")

  LowHealth:
    TNT1 A 0 A_CheckSight("LowHealthOutOfSight")
    TNT1 A 0 A_JumpIfCloser(768, "LowHealthClose")
    TNT1 A 0 A_Jump(256, "SnipeMode")
  LowHealthOutOfSight:
    TNT1 A 0 A_JumpIfCloser(768, "LowHealthOutOfSightClose")
    TNT1 A 0 A_Jump(256, "SnipeMode")
  LowHealthOutOfSightClose:
    TNT1 A 0 A_Jump(256, "FleeMode", "SnipeMode")
  LowHealthClose:
    TNT1 A 0 A_Jump(256, "FleeMode")

  OutOfSight:
    TNT1 A 0 A_JumpIfCloser(384, "OutOfSightClose")
    TNT1 A 0 A_Jump(256, "SnipeMode", "WanderMode", "CreepMode")
  OutOfSightClose:
    TNT1 A 0 A_Jump(256, "FleeMode", "CreepMode")

  Close:
    TNT1 A 0 A_Jump(256, "FleeMode", "CreepMode")

  SnipeMode:
    TNT1 A 0 A_GiveInventory("ZSpecOpSnipe", 1)
    Stop
  WanderMode:
    TNT1 A 0 A_GiveInventory("ZSpecOpWander", 1)
    Stop
  CreepMode:
    TNT1 A 0 A_GiveInventory("ZSpecOpCreep", 1)
    Stop
  FleeMode:
    TNT1 A 0 A_GiveInventory("ZSpecOpFlee", 1)
    Stop
  }
}

Actor ZSpecOpSnipe : Inventory { Inventory.MaxAmount 1 }
Actor ZSpecOpWander : Inventory { Inventory.MaxAmount 1 }
Actor ZSpecOpCreep : Inventory { Inventory.MaxAmount 1 }
Actor ZSpecOpFlee : Inventory { Inventory.MaxAmount 1 }




ACTOR SpecOpsLaser : FastProjectile
{
  Radius 6
  Speed 70
  Height 6
  damage 5
  RenderStyle Add
  Projectile
  +FORCEXYBILLBOARD
  Missiletype "SpecOpsLaserTrail"
  MissileHeight 8
  SeeSound "monsters/fusionfire"
  DeathSound "weapons/demontechex"
  States
  {
  Spawn:
	TNT1 A 1
    Loop
  Death:
	TNT1 A 0
	TNT1 A 0 A_SpawnItem("RailgunImpactEffectRed")
	TNT1 A 0 A_SpawnItem("BruiserRailPuff")
    TNT1 A 8 Bright
    Stop
  }
}

ACTOR SpecOpsLaserTrail
{
  RenderStyle Add
  Alpha 0.75
  YScale 0.04
  XScale 0.08
  +NOGRAVITY
  +NOINTERACTION
  +CLIENTSIDEONLY
  States
  {
  Spawn:
    RDLS A 0
    RDLS A 1 bright A_FadeOut(0.15)
    Loop
  }
}