ACTOR AlienSniper : ZBaseActor 19347
{
  Obituary "%o was shot down by an Alien Sniper."
  Health 225
  Radius 20
  Height 58
  Mass 1000
  Speed 8
  SeeSound "aliensniper/sight"
  PainSound "aliensniper/pain"
  DeathSound "aliensniper/death"
  ActiveSound "aliensniper/roam"
  dropitem "PlasmaCannonAmmo" 96 20
  dropitem "Plasma Cannon" 32
  AttackSound ""
  PainChance 85
  painchance "FireBurning", 200
  painchance "MightyBoot", 128
  painchance "BootStun", 256
  painchance "MicrowaveBlast", 256
  MONSTER
  +FLOORCLIP
  WoundHealth 10
  Scale 0.70
  damagefactor "AlienzShrinker", 0.0
  damagefactor "Shrinkerhit", 0.0
  Species "AlienSnipers"
  +DOHARMSPECIES
  +NOINFIGHTSPECIES
  +DONTHARMCLASS
  +MISSILEMORE
  MeleeRange 50
  MaxTargetRange 1024
  States
  {
  Spawn:
    ASNI A 0
    "####" "#" 0 Thing_ChangeTID(0,1000)
    ASNI A 8 A_Look
    Loop
  See:
    "####" "#" 0 A_SetHeightOffset(0)
    ASNI A 2 A_ChaseD3D
    ASNI A 2 A_ChaseD3D
    ASNI B 2 A_ChaseD3D("", "", CHF_NOPLAYACTIVE)
    ASNI B 2 A_ChaseD3D
    ASNI C 2 A_ChaseD3D
    ASNI C 2 A_ChaseD3D("", "", CHF_NOPLAYACTIVE)      
    ASNI D 2 A_ChaseD3D
    ASNI D 2 A_ChaseD3D
    Loop
  Melee:
    ASNI III 3 A_FaceTarget
    "####" "#" 0 A_CustomMeleeAttack(15, "duke/kick", "duke/kick", "LowPush")
    "####" "#" 0 Radius_Quake (2, 6, 0, 5, 0)
    ASNI J 5
    ASNI I 3
    Goto See
  Missile:
    "####" "#" 0 A_Jump (80, "CrouchShot")
    ASNI EEE 7 A_Facetarget
    "####" "#" 0 A_CustomMissile("MuzzleFlashMedium",32,0,0)
    "####" "#" 0 A_PlaySound("aliensniper/fire", CHAN_WEAPON)
    ASNI F 9 Bright A_CustomMissile("AlienSniperBullet", 36, 0, frandom[RIDMONSTERAT](-2, 2), 8, frandom[RIDMONSTERAT](-0.75, 0.75))
    ASNI E 6 A_Facetarget 
    Goto See
  CrouchShot:
    "####" "#" 0 A_SetHeightOffset(-17)
    ASNI GGG 7 A_FaceTarget
    "####" "#" 0 A_CustomMissile("MuzzleFlashMedium",32,0,0)
    "####" "#" 0 A_PlaySound("aliensniper/fire", CHAN_WEAPON)
    ASNI H 5 Bright A_CustomMissile("AlienSniperBullet", 24, 0, frandom[RIDMONSTERAT](-1.25, 1.25), 8, frandom[RIDMONSTERAT](-0.25, 0.25))
    ASNI GG 5 A_FaceTarget
    "####" "#" 0 A_CustomMissile("MuzzleFlashMedium",32,0,0)
    "####" "#" 0 A_PlaySound("aliensniper/fire", CHAN_WEAPON)
    ASNI H 5 Bright A_CustomMissile("AlienSniperBullet", 24, 0, frandom[RIDMONSTERAT](-1.25, 1.25), 8, frandom[RIDMONSTERAT](-0.25, 0.25))
    ASNI GG 4 A_FaceTarget
    Goto See
  Pain.BootStun:
    "####" "#" 0 A_SetHeightOffset(0)
    "####" "#" 0 A_Jump(128,"Pain2BootStun")
    ASNI K 9 A_PlayVoiceSoundPitch("Pain")
    ASNI K 9
    goto See
  Pain2BootStun:
    ASNI P 9 A_PlayVoiceSoundPitch("Pain")
    ASNI P 9
    goto See
  Pain:
    "####" "#" 0 A_SetHeightOffset(0)
    "####" "#" 0 A_Jump(128,"Pain2")
    ASNI K 3
    ASNI K 3 A_PlayVoiceSoundPitch("Pain")
    Goto See
  Pain2:
    ASNI P 3
    ASNI P 3 A_PlayVoiceSoundPitch("Pain")
    Goto See
  Pain.MicrowaveBlast:
    "####" "#" 0 A_SetHeightOffset(0)
    ASNI K 1
    "####" "#" 0 A_CheckThump("Pain.BootStun")
    loop
  Death:
    "####" "#" 0 A_StopSound(CHAN_BODY)
    ASNI K 7 A_PlayVoiceSoundPitch("Death")
    ASNI L 7 A_NoBlocking
    ASNI M 7
    ASNI N 7
    ASNI O 1 A_SpawnItemEx("DeadAlienSniper", 0,0,0,0,0,0,0, SXF_TRANSFERTRANSLATION|SXF_TRANSFERSTENCILCOL|SXF_SETMASTER)
    "####" "#" 0 A_SpawnItemEx("DukeRedBloodPool")
    TNT1 A -1
    Stop
  Pain.Shrinker:
    "####" "#" 0 A_PlaySound("shrinker/shrink")
    "####" "#" 0 A_InvulnerablePlus(1)
    ASNI K 5 A_PlayVoiceSoundPitch("Pain")
    "####" "#" 0 A_CustomMissile("ShrinkEffect",8,0,0)
  Shrink:
    ASNI K 2 {A_SetScale(ScaleX - 0.04, ScaleY - 0.04); A_SpawnItemEx("ShrunkBlur",0,0,0,0,0,0,angle,SXF_TRANSFERSPRITEFRAME|SXF_TRANSFERSCALE|SXF_TRANSFERTRANSLATION|SXF_NOCHECKPOSITION|SXF_ABSOLUTEANGLE);}
    "####" "#" 0 A_JumpIf(ScaleX > 0.2 && ScaleY > 0.2, "Shrink")
    "####" "#" 0 A_Shrink
    "####" "#" 0 A_Remove(AAPTR_DEFAULT)
    stop
  XDeath:
  Death.BossStomp:
    "####" "#" 0 A_StopSound(CHAN_BODY)
    "####" "#" 0 A_XScream
    "####" "#" 0 A_NoBlocking
    "####" "#" 0 A_SpawnDebris("DukeGibs1NF", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("DukeGibs2NF", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("DukeGibs3NF", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("DukeGibs4NF", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("DukeGibs5NF", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("FireflyHead1",TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("FireflyArm1",TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("FireflyLeg1",TRUE, 1.0, 1.0)
    "####" "#" 0 A_Jump(256,"Gib1","Gib2","Gib3","Gib4","Gib5")
    TNT1 A 1
    Stop
  Death.PlasmaGib:
    "####" "#" 0 A_SpawnItemEx("DukePlasmaExplosion",0,0,32,0,0,0,0,1,0)
    "####" "#" 0 A_StopSound(CHAN_BODY)
    "####" "#" 0 A_XScream
    "####" "#" 0 A_NoBlocking
    "####" "#" 0 A_SpawnDebris("DukeGibs1NFP", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("DukeGibs2NFP", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("DukeGibs3NFP", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("DukeGibs4NFP", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("DukeGibs5NFP", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("FireflyHead1",TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("FireflyArm1",TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("FireflyLeg1",TRUE, 1.0, 1.0)
    "####" "#" 0 A_Jump(256,"Gib1","Gib2","Gib3","Gib4","Gib5")
    TNT1 A 1
    Stop
  Death.Explosion:
  Death.RocketExplosion:
    "####" "#" 0 A_StopSound(CHAN_BODY)
    "####" "#" 0 A_XScream
    "####" "#" 0 A_NoBlocking
    "####" "#" 0 A_SpawnDebris("DukeGibs1", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("DukeGibs2", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("DukeGibs3", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("DukeGibs4", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("DukeGibs5", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("FireflyHead1",TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("FireflyArm1",TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("FireflyLeg1",TRUE, 1.0, 1.0)
    "####" "#" 0 A_Jump(256,"Gib1","Gib2","Gib3","Gib4","Gib5")
    TNT1 A 1
     Stop
  Death.ExplosiveShotgun:
  Death.ShellExplosion:
    "####" "#" 0 A_StopSound(CHAN_BODY)
    "####" "#" 0 A_XScream
    "####" "#" 0 A_NoBlocking
    "####" "#" 0 A_Jump(FAS_AltShotgunGibFireProb,3)
    "####" "#" 0 A_SpawnDebris("DukeGibs1NF", TRUE, 1.0, 1.0)
    "####" "#" 0 A_Jump(256,2)
    "####" "#" 0 A_SpawnDebris("DukeGibs1", TRUE, 1.0, 1.0)
    "####" "#" 0 A_Jump(FAS_AltShotgunGibFireProb,3)
    "####" "#" 0 A_SpawnDebris("DukeGibs2NF", TRUE, 1.0, 1.0)
    "####" "#" 0 A_Jump(256,2)
    "####" "#" 0 A_SpawnDebris("DukeGibs2", TRUE, 1.0, 1.0)
    "####" "#" 0 A_Jump(FAS_AltShotgunGibFireProb,3)
    "####" "#" 0 A_SpawnDebris("DukeGibs3NF", TRUE, 1.0, 1.0)
    "####" "#" 0 A_Jump(256,2)
    "####" "#" 0 A_SpawnDebris("DukeGibs3", TRUE, 1.0, 1.0)
    "####" "#" 0 A_Jump(FAS_AltShotgunGibFireProb,3)
    "####" "#" 0 A_SpawnDebris("DukeGibs4NF", TRUE, 1.0, 1.0)
    "####" "#" 0 A_Jump(256,2)
    "####" "#" 0 A_SpawnDebris("DukeGibs4", TRUE, 1.0, 1.0)
    "####" "#" 0 A_Jump(FAS_AltShotgunGibFireProb,3)
    "####" "#" 0 A_SpawnDebris("DukeGibs5NF", TRUE, 1.0, 1.0)
    "####" "#" 0 A_Jump(256,2)
    "####" "#" 0 A_SpawnDebris("DukeGibs5", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("FireflyHead1",TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("FireflyArm1",TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("FireflyLeg1",TRUE, 1.0, 1.0)
    "####" "#" 0 A_Jump(256,"Gib1","Gib2","Gib3","Gib4","Gib5")
    TNT1 A 1
    Stop
  Gib1:
    "####" "#" 0 A_SpawnDebris("DukeGibs6", FALSE, 1.0, 1.0)
    GIB1 EEEEEEEEEEEEEEEEEEEEEEEEEEEEEE 35 A_Gravity
    GIB1 EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE 1 A_FadeOut(0.1)
    Stop
  Gib2:
    "####" "#" 0 A_SpawnDebris("DukeGibs6", FALSE, 1.0, 1.0)
    GIB2 EEEEEEEEEEEEEEEEEEEEEEEEEEEEEE 35 A_Gravity
    GIB2 EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE 1 A_FadeOut(0.1)
    Stop
  Gib3:
    "####" "#" 0 A_SpawnDebris("DukeGibs6", FALSE, 1.0, 1.0)
    GIB3 EEEEEEEEEEEEEEEEEEEEEEEEEEEEEE 35 A_Gravity
    GIB3 EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE 1 A_FadeOut(0.1)
    Stop
  Gib4:
    "####" "#" 0 A_SpawnDebris("DukeGibs6", FALSE, 1.0, 1.0)
    GIB4 EEEEEEEEEEEEEEEEEEEEEEEEEEEEEE 35 A_Gravity
    GIB4 EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE 1 A_FadeOut(0.1)
    Stop
  Gib5:
    "####" "#" 0 A_SpawnDebris("DukeGibs6", FALSE, 1.0, 1.0)
    GIB5 EEEEEEEEEEEEEEEEEEEEEEEEEEEEEE 35 A_Gravity
    GIB5 EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE 1 A_FadeOut(0.1)
    Stop
  Wound.Expander:
   "####" "#" 0 A_Die("Expander")
  Death.Expander:
    "####" "#" 0 A_StopSound(CHAN_BODY)
    "####" "#" 0 A_ChangeFlag("DONTCORPSE",1)
    "####" "#" 0 A_PlaySound("expander/expand")
    "####" "#" 0 {A_UnsetShootable; A_UnsetSolid;}
  Expand:
    ASNI K 1 A_SetScale(ScaleX + 0.01, ScaleY + 0.01)
    "####" "#" 0 A_JumpIf(ScaleX < 1.15 && ScaleY < 1.15, "Expand")
    ASNI KKKKK 1
    "####" "#" 0 A_SetScale(0.7, 0.7)
    "####" "#" 0 A_PlayVoiceSoundPitch("Death","",6)
    "####" "#" 0 A_SpawnItemEx("ExpanderExplosion",0,0,32,0,0,0,0,1,0)
    "####" "#" 0 A_SpawnDebris("DukeGibs1", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("DukeGibs2", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("DukeGibs3", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("DukeGibs4", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("DukeGibs5", TRUE, 1.0, 1.0)
    goto Death.Explosion
  Wound.Ice:
    "####" "#" 0 A_StopSound(CHAN_BODY)
    "####" "#" 0 A_Freeze("See")
    "####" "#" 0 A_Remove(AAPTR_DEFAULT)
    TNT1 A 1
    stop
  Death.MonsterSlimer:
    "####" "#" 0 A_StopSound(CHAN_BODY)
    ASNI K 10 {A_PlayVoiceSoundPitch("Death"); A_SpawnItemEx("SlimerEatingMonster");}
    ASNI KK 10
    stop
  Death.Headshot:
    "####" "#" 0 A_StopSound(CHAN_BODY)
    "####" "#" 0 A_XScream
    "####" "#" 0 A_SpawnDebris("DukeGibs2NF", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("DukeGibs2NF", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("DukeGibs5NF", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("DukeGibs6", FALSE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("DukeGibs6", FALSE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("DukeGibs6", FALSE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("FireflyHead1",TRUE, 1.0, 1.0)
    3SNI K 21 A_NoBlocking
    3SNI L 14
    3SNI M 7
    3SNI N 7
    3SNI O 1 A_SpawnItemEx("DeadAlienSniperBehead", 0,0,0,0,0,0,0, SXF_TRANSFERTRANSLATION|SXF_TRANSFERSTENCILCOL)
    "####" "#" 0 A_SpawnItemEx("DukeRedBloodPool")
    stop
  Possessed:
    "####" "#" 0 A_ChangeFlag("NOPAIN", 1)
    ASNI O 7 {A_XScream; A_AdjustTics(1.0,1.0);}
    ASNI N 7 {A_XScream; A_AdjustTics(1.0,1.0);}
    ASNI M 7 A_AdjustTics(1.0,1.0)
    ASNI L 7 A_AdjustTics(1.0,1.0)
    ASNI K 7 A_AdjustTics(0,1.0)
    "####" "#" 0 A_ChangeFlag("NOPAIN", 0)
    goto See
  }
}

actor DeadAlienSniper : DeadDukeNukemP
{
  Radius 20
  Height 12
  scale 0.7
  States
  {
  Spawn:
    ASNI O -1
    Stop
  Death.Fire:
    "####" "#" 0 A_SetTranslation("Burned")
    "####" "#" 0 A_NoBlocking
    "####" "#" 0 A_SpawnItemEx("DeadAlienSniper", 0,0,0,0,0,0,0, SXF_TRANSFERTRANSLATION|SXF_TRANSFERSTENCILCOL)
    TNT1 A 1
    Stop
  Ice:
    "####" "#" 0 Thing_ChangeTID(0,3500)
    ASNI O 5 A_GenericFreezeDeath
    ASNI O 1 A_FreezeDeathChunks
    wait
  }
}

actor DeadAlienSniperBehead : DeadDukeNukem
{
  Radius 20
  Height 12
  scale 0.7
  States
  {
  Spawn:
    3SNI O -1
    Stop
  Death.Fire:
    "####" "#" 0 A_SetTranslation("Burned")
    "####" "#" 0 A_NoBlocking
    "####" "#" 0 A_SpawnItemEx("DeadAlienSniperBehead", 0,0,0,0,0,0,0, SXF_TRANSFERTRANSLATION|SXF_TRANSFERSTENCILCOL)
    TNT1 A 1
    Stop
  Ice:
    "####" "#" 0 Thing_ChangeTID(0,3500)
    3SNI O 5 A_GenericFreezeDeath
    3SNI O 1 A_FreezeDeathChunks
    wait
  }
}

Actor AlienSniperBullet : ZMissileFast
{
  Radius 3
  Height 6
  Speed 60
  Damage (15)
  PROJECTILE
  +MISSILE
  +THRUGHOST
  decal DukeSmallScorch
  States
  {
  Spawn:
    TNT1 A 2 A_SpawnItem("AlienSniperFX")
    loop
  Death:
    TNT1 A 1 A_SpawnItem("AlienSniperPuffFX")
    Stop
  }
}

Actor AlienSniperFX
{
  Scale 0.125
  Renderstyle Add
  Alpha 0.875
  +NOINTERACTION
  +CLIENTSIDEONLY
  +THRUGHOST
  States
  {
  Spawn:
    D3D0 A 1 Bright {A_SpawnItem("PurpleFlare22Small",0,0); A_SetScale(scalex + 0.025, scaley + 0.025);}
    D3D0 A 1 Bright A_SetScale(scalex + 0.025, scaley + 0.025)
    TNT1 A 0 A_SetTranslucent(alpha - 0.075)
    D3D0 B 1 Bright {A_SpawnItem("PurpleFlare22Small",0,0); A_SetScale(scalex + 0.025, scaley + 0.025);}
    D3D0 B 1 Bright A_SetScale(scalex + 0.025, scaley + 0.025)
    TNT1 A 0 A_SetTranslucent(alpha - 0.075)
    D3D0 C 1 Bright {A_SpawnItem("PurpleFlare22Small",0,0); A_SetScale(scalex + 0.025, scaley + 0.025);}
    D3D0 C 1 Bright A_SetScale(scalex + 0.025, scaley + 0.025)
    TNT1 A 0 A_SetTranslucent(alpha - 0.075)
    D3D0 D 1 Bright {A_SpawnItem("PurpleFlare22Small",0,0); A_SetScale(scalex + 0.025, scaley + 0.025);}
    D3D0 D 1 Bright A_SetScale(scalex + 0.025, scaley + 0.025)
    TNT1 A 0 A_SetTranslucent(alpha - 0.075)
    D3D0 E 1 Bright {A_SpawnItem("PurpleFlare22Small",0,0); A_SetScale(scalex - 0.025, scaley - 0.025);}
    D3D0 E 1 Bright A_SetScale(scalex - 0.025, scaley - 0.025)
    TNT1 A 0 A_SetTranslucent(alpha - 0.075)
    D3D0 F 1 Bright {A_SpawnItem("PurpleFlare22Small",0,0); A_SetScale(scalex - 0.025, scaley - 0.025);}
    D3D0 F 1 Bright A_SetScale(scalex - 0.025, scaley - 0.025)
    TNT1 A 0 A_SetTranslucent(alpha - 0.075)
    D3D0 G 1 Bright {A_SpawnItem("PurpleFlare22Small",0,0); A_SetScale(scalex - 0.025, scaley - 0.025);}
    D3D0 G 1 Bright A_SetScale(scalex - 0.025, scaley - 0.025)
    TNT1 A 0 A_SetTranslucent(alpha - 0.075)
    D3D0 H 1 Bright {A_SpawnItem("PurpleFlare22Small",0,0); A_SetScale(scalex - 0.025, scaley - 0.025);}
    D3D0 H 1 Bright A_SetScale(scalex - 0.025, scaley - 0.025)
    Stop
  }
}

Actor AlienSniperPuffFX
{
  Scale 0.175
  Renderstyle Add
  +NOINTERACTION
  +CLIENTSIDEONLY
  +THRUGHOST
  States
  {
  Spawn:
    TNT1 AAAAA 0 NoDelay A_CustomMissile ("PurplePlasmaParticle", 0, 0, random[RIDFX](0, 360), 2, random[RIDFX](0, 360))
    D3D1 ABCD 2 Bright A_SpawnItem("PurpleFlare22",0,0)
    TNT1 AAA 0 A_CustomMissile ("OldschoolRocketSmokeTrail3", 2, 0, random[RIDFX](0, 360), 2, random[RIDFX](0, 360))
    D3D1 EFGH 2 Bright
    Stop
  }
}