
actor Thrusting : Inventory
{
  inventory.amount 0
  inventory.maxamount 1
}

actor DukeAlien : ZBaseActor 19122
{
  hitobituary "%o was ripped apart by an alien protector drone."
  obituary "%o was ripped apart by an alien protector drone."
  health 350
  radius 20
  height 63
  mass 1000
  speed 14
  seesound "alienz/sight"
  attacksound "alienz/melee"
  painsound "alienz/pain"
  deathsound "alienz/death"
  activesound "alienz/active"
  dropitem "ShrinkerAmmo" 64 20
  dropitem "ExpanderAmmo" 64 20
  dropitem "Shrinker" 32
  dropitem "Expander" 32
  dropitem "BootsPickup" 8
  MONSTER
  +FLOORCLIP
  scale 0.7
  damagefactor "Shrinker", 0.0
  damagefactor "Expander", 1.5
  damagefactor "AlienzShrinker", 0.0
  damagefactor "Shrinkerhit", 0.0
  damagefactor "Explosion", 0.65
  damagefactor "RocketExplosion", 0.65
  damagefactor "ShellExplosion", 0.80
  bloodcolor "AA D1 5C"
  painchance 85
  painchance "FireBurning", 200
  painchance "MightyBoot", 128
  painchance "BootStun", 256
  painchance "MicrowaveBlast", 256
  Damage (22)
  meleethreshold 512
  maxtargetrange 1024
  meleerange 56
  Species "AlienQueenDrones"
  +DOHARMSPECIES
  +NOINFIGHTSPECIES
  +DONTHARMCLASS
  WoundHealth 10
  states
  {
  Spawn:
    ENE4 B 0
    "####" "#" 0 Thing_ChangeTID(0,1000)
    ENE4 BB 10 A_Look
    loop
  See:
    "####" "#" 0 A_SetHeightOffset(0)
    ENE4 B 1
    "####" "#" 0 A_Gravity
    ENE4 BB 2 A_ExtChase(0,0,0,0)
    "####" "#" 0 A_Jump(64,7)
    ENE4 CCDDEE 2 A_Chase("Melee","")
    loop
    ENE4 CCDDEE 2 A_Chase
    loop
  Missile:
    "####" "#" 0 A_Jump(128,"Jump")
    "####" "#" 0 A_JumpIfInTargetInventory("DukeShrinkCounter",1,"Lunge")
    "####" "#" 0 A_JumpIfInTargetInventory("ShrinkTime",1,"Lunge")
    "####" "#" 0 A_FaceTarget
    ENE4 I 21 A_PlayWeaponSound("alienz/attack")
    "####" "#" 0 A_FaceTarget
    "####" "#" 0 A_CustomMissile("MuzzleFlashShrinker",32,0,0)
    "####" "#" 0 A_CustomMissile("AlienMorpherAttack",32,0,0)
    "####" "#" 0 A_SetHeightOffset(-19)
    ENE4 J 10 bright A_CustomMissile("AlienShrinkerAttack",32,0,0)
    ENE4 A 35
    goto See
  Lunge:
    "####" "#" 0 A_PlayVoiceSoundPitch("","alienz/active",4)
    "####" "#" 0 A_SetHeightOffset(-19)
    ENE4 A 20 A_FaceTarget
    "####" "#" 0 A_SetHeightOffset(0)
    "####" "#" 0 A_LowGravity
    "####" "#" 0 ThrustThingZ(0,10,0,0)
    ENE4 BCDEBCDEBCDEBCDEBCDEBCDEBCDEBCDEBCDEBCDEBCDEBCDEBCDEBCDEBCDE 2 A_SkullAttack
    ENE4 FG 7 A_FaceTarget
    ENE4 H 7 A_CustomMeleeAttack(random[RIDMONSTERAT](20,40),"alienz/melee","alienz/melee")
    "####" "#" 0 A_Stop
    goto See
  Jump:
    "####" "#" 0 A_JumpIfCloser(200,"See")
    "####" "#" 0 A_PlayVoiceSoundPitch("","alienz/active",4)
    ENE4 A 7 A_FaceTarget
    "####" "#" 0 A_SetGravity(0.5)
    ENE4 U 3 ThrustThingZ(0,30,0,0)
    ENE4 V 8 ThrustThing(angle*256/360, 10, 0, 0)
    ENE4 W 12
    "####" "#" 0 A_SetHeightOffset(-19)
    ENE4 A 7 A_Gravity
    goto See
  Melee:
    "####" "#" 0 A_GiveInventory("Thrusting",1)
  Melee2:
    ENE4 FG 7 A_FaceTarget
    ENE4 H 7 A_CustomMeleeAttack(random[RIDMONSTERAT](20,30),"alienz/melee","alienz/melee")
    "####" "#" 0 A_JumpIfHealthLower(1,"See",AAPTR_TARGET)
    "####" "#" 0 A_JumpIfCloser(70,"Melee")
    "####" "#" 0 A_JumpIfInventory("Thrusting", 1, "Thrust")
    goto See
  Thrust:
    "####" "#" 0 A_TakeInventory("Thrusting",1)
    "####" "#" 0 A_PlayVoiceSoundPitch("","alienz/active",4)
    "####" "#" 0 A_SetHeightOffset(-19)
    ENE4 A 20 A_FaceTarget
    "####" "#" 0 A_SetHeightOffset(0)
    ENE4 BCDE 2 A_SkullAttack
    "####" "#" 0 A_Recoil(15)
    ENE4 FG 7 A_FaceTarget
    ENE4 H 7 A_CustomMeleeAttack(random[RIDMONSTERAT](20,30),"alienz/melee","alienz/melee")
    "####" "#" 0 A_Stop
    goto See
  Pain.BootStun:
    "####" "#" 0 A_SetHeightOffset(0)
    "####" "#" 0 A_Jump(128,"Pain2BootStun")
    ENE4 L 9 A_PlayVoiceSoundPitch("Pain")
    ENE4 L 9
    goto See
  Pain2BootStun:
    ENE4 X 9 A_PlayVoiceSoundPitch("Pain")
    ENE4 X 9
    goto See
  Pain:
    "####" "#" 0 A_SetHeightOffset(0)
    "####" "#" 0 A_Jump(128,"Pain2")
    ENE4 L 3
    ENE4 L 3 A_PlayVoiceSoundPitch("Pain")
    goto See
  Pain2:
    ENE4 X 3
    ENE4 X 3 A_PlayVoiceSoundPitch("Pain")
    goto See
  Pain.MicrowaveBlast:
    "####" "#" 0 A_SetHeightOffset(0)
    ENE4 L 1
    "####" "#" 0 A_CheckThump("Pain.BootStun")
    loop
  Death:
    ENE4 L 5 A_PlayVoiceSoundPitch("Death")
    ENE4 M 5
    ENE4 N 5 A_NoBlocking
    ENE4 OPQRS 5
    ENE4 T 1 A_SpawnItemEx("DeadDukeAlien", 0,0,0,0,0,0,0, SXF_TRANSFERTRANSLATION|SXF_TRANSFERSTENCILCOL|SXF_SETMASTER)
    "####" "#" 0 A_SpawnItemEx("DukeGreenBloodPool")
    TNT1 A -1
    stop
  XDeath:
  Death.BossStomp:
    "####" "#" 0 A_XScream
    "####" "#" 0 A_NoBlocking
    "####" "#" 0 A_SpawnDebris("AlienDukeGibs1NF", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("AlienDukeGibs2NF", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("AlienDukeGibs3NF", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("AlienDukeGibs4NF", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("AlienDukeGibs5NF", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("AlienDroneHead1", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("AlienDroneArm1", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("AlienDroneLeg1", 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_XScream
    "####" "#" 0 A_NoBlocking
    "####" "#" 0 A_SpawnDebris("AlienDukeGibs1NFP", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("AlienDukeGibs2NFP", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("AlienDukeGibs3NFP", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("AlienDukeGibs4NFP", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("AlienDukeGibs5NFP", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("AlienDroneHead1", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("AlienDroneArm1", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("AlienDroneLeg1", TRUE, 1.0, 1.0)
    "####" "#" 0 A_Jump(256,"Gib1","Gib2","Gib3","Gib4","Gib5")
    TNT1 A 1
    Stop
  Death.Explosion:
  Death.RocketExplosion:
    "####" "#" 0 A_XScream
    "####" "#" 0 A_NoBlocking
    "####" "#" 0 A_SpawnDebris("AlienDukeGibs1", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("AlienDukeGibs2", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("AlienDukeGibs3", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("AlienDukeGibs4", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("AlienDukeGibs5", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("AlienDroneHead1", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("AlienDroneArm1", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("AlienDroneLeg1", TRUE, 1.0, 1.0)
    "####" "#" 0 A_Jump(256,"Gib1","Gib2","Gib3","Gib4","Gib5")
    TNT1 A 1
    Stop
  Death.ExplosiveShotgun:
  Death.ShellExplosion:
    "####" "#" 0 A_XScream
    "####" "#" 0 A_NoBlocking
    "####" "#" 0 A_Jump(FAS_AltShotgunGibFireProb,3)
    "####" "#" 0 A_SpawnDebris("AlienDukeGibs1NF", TRUE, 1.0, 1.0)
    "####" "#" 0 A_Jump(256,2)
    "####" "#" 0 A_SpawnDebris("AlienDukeGibs1", TRUE, 1.0, 1.0)
    "####" "#" 0 A_Jump(FAS_AltShotgunGibFireProb,3)
    "####" "#" 0 A_SpawnDebris("AlienDukeGibs2NF", TRUE, 1.0, 1.0)
    "####" "#" 0 A_Jump(256,2)
    "####" "#" 0 A_SpawnDebris("AlienDukeGibs2", TRUE, 1.0, 1.0)
    "####" "#" 0 A_Jump(FAS_AltShotgunGibFireProb,3)
    "####" "#" 0 A_SpawnDebris("AlienDukeGibs3NF", TRUE, 1.0, 1.0)
    "####" "#" 0 A_Jump(256,2)
    "####" "#" 0 A_SpawnDebris("AlienDukeGibs3", TRUE, 1.0, 1.0)
    "####" "#" 0 A_Jump(FAS_AltShotgunGibFireProb,3)
    "####" "#" 0 A_SpawnDebris("AlienDukeGibs4NF", TRUE, 1.0, 1.0)
    "####" "#" 0 A_Jump(256,2)
    "####" "#" 0 A_SpawnDebris("AlienDukeGibs4", TRUE, 1.0, 1.0)
    "####" "#" 0 A_Jump(FAS_AltShotgunGibFireProb,3)
    "####" "#" 0 A_SpawnDebris("AlienDukeGibs5NF", TRUE, 1.0, 1.0)
    "####" "#" 0 A_Jump(256,2)
    "####" "#" 0 A_SpawnDebris("AlienDukeGibs5", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("AlienDroneHead1", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("AlienDroneArm1", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("AlienDroneLeg1", TRUE, 1.0, 1.0)
    "####" "#" 0 A_Jump(256,"Gib1","Gib2","Gib3","Gib4","Gib5")
    TNT1 A 1
    Stop
  Gib1:
    "####" "#" 0 A_SpawnDebris("AlienDukeGibs6", FALSE, 1.0, 1.0)
    2IB1 EEEEEEEEEEEEEEEEEEEEEEEEEEEEEE 35 A_Gravity
    2IB1 EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE 1 A_FadeOut(0.1)
    Stop
  Gib2:
    "####" "#" 0 A_SpawnDebris("AlienDukeGibs6", FALSE, 1.0, 1.0)
    2IB2 EEEEEEEEEEEEEEEEEEEEEEEEEEEEEE 35 A_Gravity
    2IB2 EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE 1 A_FadeOut(0.1)
    Stop
  Gib3:
    "####" "#" 0 A_SpawnDebris("AlienDukeGibs6", FALSE, 1.0, 1.0)
    2IB3 EEEEEEEEEEEEEEEEEEEEEEEEEEEEEE 35 A_Gravity
    2IB3 EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE 1 A_FadeOut(0.1)
    Stop
  Gib4:
    "####" "#" 0 A_SpawnDebris("AlienDukeGibs6", FALSE, 1.0, 1.0)
    2IB4 EEEEEEEEEEEEEEEEEEEEEEEEEEEEEE 35 A_Gravity
    2IB4 EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE 1 A_FadeOut(0.1)
    Stop
  Gib5:
    "####" "#" 0 A_SpawnDebris("AlienDukeGibs6", FALSE, 1.0, 1.0)
    2IB5 EEEEEEEEEEEEEEEEEEEEEEEEEEEEEE 35 A_Gravity
    2IB5 EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE 1 A_FadeOut(0.1)
    stop
  Wound.Expander:
   "####" "#" 0 A_Die("Expander")
  Death.Expander:
    "####" "#" 0 A_ChangeFlag("DONTCORPSE",1)
    "####" "#" 0 A_PlaySound("expander/expand")
    "####" "#" 0 {A_UnsetShootable; A_UnsetSolid;}
  Expand:
    ENE4 L 1 A_SetScale(ScaleX + 0.01, ScaleY + 0.01)
    "####" "#" 0 A_JumpIf(ScaleX < 1.15 && ScaleY < 1.15, "Expand")
    ENE4 LLLLL 1
    "####" "#" 0 A_SetScale(0.7, 0.7)
    "####" "#" 0 A_PlayVoiceSoundPitch("Death","",4)
    "####" "#" 0 A_SpawnItemEx("ExpanderExplosion",0,0,32,0,0,0,0,1,0)
    "####" "#" 0 A_SpawnDebris("AlienDukeGibs1", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("AlienDukeGibs2", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("AlienDukeGibs3", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("AlienDukeGibs4", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("AlienDukeGibs5", TRUE, 1.0, 1.0)
    goto Death.Explosion
  Wound.Ice:
    "####" "#" 0 A_Freeze("See")
    "####" "#" 0 A_Remove(AAPTR_DEFAULT)
    TNT1 A 1
    stop
  Death.MonsterSlimer:
    ENE4 L 10 {A_PlayVoiceSoundPitch("Death"); A_SpawnItemEx("SlimerEatingMonster");}
    ENE4 LL 10
    stop
  Death.Headshot:
    "####" "#" 0 A_XScream
    "####" "#" 0 A_SpawnDebris("AlienDukeGibs2NF", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("AlienDukeGibs2NF", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("AlienDukeGibs5NF", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("AlienDukeGibs6", FALSE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("AlienDukeGibs6", FALSE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("AlienDukeGibs6", FALSE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("AlienDroneHead1", TRUE, 1.0, 1.0)
    3NE4 N 15 A_NoBlocking
    3NE4 O 10
    3NE4 PQRS 5
    3NE4 T 1 A_SpawnItemEx("DeadDukeAlienBehead", 0,0,0,0,0,0,0, SXF_TRANSFERTRANSLATION|SXF_TRANSFERSTENCILCOL)
    "####" "#" 0 A_SpawnItemEx("DukeGreenBloodPool")
    stop
  Possessed:
    "####" "#" 0 A_ChangeFlag("NOPAIN", 1)
    ENE4 T 5 {A_XScream; A_AdjustTics(1.0,1.0);}
    ENE4 S 5 {A_XScream; A_AdjustTics(1.0,1.0);}
    ENE4 RQPO 5 A_AdjustTics(1.0,1.0)
    ENE4 N 5 A_AdjustTics(1.0,1.0)
    ENE4 M 5 A_AdjustTics(1.0,1.0)
    ENE4 L 5 A_AdjustTics(0,1.0)
    "####" "#" 0 A_ChangeFlag("NOPAIN", 0)
    goto See
  }
}

actor queendrone : DukeAlien
{
  states
  {
  Spawn:
    ENE4 K 0
    ENE4 KK 50
    ENE4 KK 4 A_Look
    goto see
  Idle:
    ENE4 BB 10 A_Look
    goto see
  }
}

actor DeadDukeAlien : DeadDukeNukemGreenP 19123
{
  Radius 20
  Height 14
  scale 0.7
  States
  {
  Spawn:
    ENE4 T -1
    Stop
  Death.Fire:
    "####" "#" 0 A_SetTranslation("Burned")
    "####" "#" 0 A_NoBlocking
    "####" "#" 0 A_SpawnItemEx("DeadDukeAlien", 0,0,0,0,0,0,0, SXF_TRANSFERTRANSLATION|SXF_TRANSFERSTENCILCOL)
    TNT1 A 1
    Stop
  Ice:
    "####" "#" 0 Thing_ChangeTID(0,3500)
    ENE4 T 5 A_GenericFreezeDeath
    ENE4 T 1 A_FreezeDeathChunks
    wait
  }
}

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