
actor DukeSentryDrone : ZActorMetalDodgeMissile 19145
{
  obituary "%o couldn't hide from the Sentry Drone."
  health 120
  radius 30
  height 24
  mass 1000
  speed 8
  seesound "drone/sight"
  painsound "drone/pain"
  MONSTER
  +FLOORCLIP
  scale 0.65
  +FLOAT
  +FLOATBOB
  +NOGRAVITY
  +NOBLOOD
  +SPAWNFLOAT
  +NOICEDEATH
  FloatBobStrength 0.5
  meleerange 64
  maxtargetrange 512
  gravity 0.40
  damagefactor "Explosion", 0.75
  damagefactor "RocketExplosion", 0.75
  damagefactor "ShellExplosion", 0.86
  damagefactor "Fire", 0.5
  damagefactor "BulletFlame", 0.5
  damagefactor "Expander", 0.1
  damagefactor "Shrinker", 0.0
  damagefactor "AlienzShrinker", 0.0
  damagefactor "Shrinkerhit", 0.0
  damagefactor "Plasma", 1.3
  damagefactor "MicrowaveBlast", 1.3
  minmissilechance 1
  painchance 256
  painchance "Fire", 10
  painchance "BulletFlame", 10
  painchance "PlasmaSpark", 256
  painchance "MicrowaveBlast", 256
  +NOBLOCKMONST
  Species "SentryDrones"
  +DOHARMSPECIES
  +NOINFIGHTSPECIES
  +DONTHARMCLASS
  WoundHealth 10
  +FORCEXYBILLBOARD
  states
  {
  Spawn:
    XDRN A 0
    "####" "#" 0 ThrustThingZ(0, 50, 0, 1)
    "####" "#" 1
    "####" "#" 0 A_Stop
  Idle:
    XDRN AA 5 {A_Look; if (health > 30) {return;} A_CustomMissile("FlameTrailsSmall1", 0, 0, random[RIDFX](0, 360), CMF_AIMDIRECTION, random[RIDFX](60, 90));}
    loop
  See:
    XDRN A 1
    "####" "#" 0 A_PlaySound("drone/PlayEx",7,1,1)
    XDRN AA 5 {A_Chase; if (health > 30) {return;} A_CustomMissile("FlameTrailsSmall1", 0, 0, random[RIDFX](0, 360), CMF_AIMDIRECTION, random[RIDFX](60, 90));}
    loop
  Missile:
    "####" "#" 0 A_PlaySound("drone/attack1")
    "####" "#" 0 A_JumpIfTargetInLOS("Explode", 30, 0, 96)
    "####" "#" 0 A_SkullAttack
    "####" "#" 0 A_Recoil(12)
    XDRN AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 3 {if (health > 30) {return;} A_CustomMissile("FlameTrailsSmall1", 0, 0, random[RIDFX](0, 360), CMF_AIMDIRECTION, random[RIDFX](60, 90));}
    "####" "#" 0 A_Stop
  MissileEnd:
    XDRN A 5 {A_FaceTarget(10.0); if (health > 30) {return;} A_CustomMissile("FlameTrailsSmall1", 0, 0, random[RIDFX](0, 360), CMF_AIMDIRECTION, random[RIDFX](60, 90));}
    "####" A 0 A_JumpIfTargetInLOS(1, 5)
    loop
    "####" "#" 0
    goto Missile
  Pain:
    "####" "#" 0 A_SpawnDebris("DukeMechParticle", FALSE, 1.0, 1.0)
    "####" "#" 0
    "####" "#" 0 A_Pain
    Goto See
  Pain.MicrowaveBlast:
    "####" "#" 1
    "####" "#" 0 A_CheckThump("Pain")
    loop
  Melee:
  Explode:
    "####" "#" 0
    "####" "#" 0 A_PlayWeaponSound("drone/attack2")
    XDRN A 2 A_Die
    stop
  Death.Plasma:
    "####" "#" 0 A_SpawnItemEx("DukePlasmaExplosion",0,0,32,0,0,0,0,1,0)
  Death:
    "####" "#" 0 A_StopSound(7)
    "####" "#" 0 A_ChangeFlag("FLOATBOB",0)
    "####" "#" 0 A_SpawnDebris("MetalGibs1", FALSE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("MetalGibs2", FALSE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("MetalGibs3", FALSE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("MetalGibs4", FALSE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("MetalGibs5", FALSE, 1.0, 1.0)
    TNT1 A 5 A_SpawnItemEx("SentryDroneExplosion",0,0,32,0,0,0,0,1,0)
    stop
  Dodge1:
    "####" "#" 0 A_Stop
    "####" "#" 0 A_Jump(128,2)
    "####" "#" 0 A_SetAngle(angle + random[RIDMONSTER](-85,-60))
    goto DodgeEnd1
    "####" "#" 0 A_SetAngle(angle + random[RIDMONSTER](-90,-85))
    goto DodgeEnd2
  Dodge2:
    "####" "#" 0 A_Stop
    "####" "#" 0 A_Jump(128,2)
    "####" "#" 0 A_SetAngle(angle + random[RIDMONSTER](60,85))
    goto DodgeEnd1
    "####" "#" 0 A_SetAngle(angle + random[RIDMONSTER](85,90))
    goto DodgeEnd2
  DodgeEnd1:
    "####" "#" 0 A_JumpIfTracerCloser(150, "DodgeEnd3")
    XDRN AAAAAAAA 2 {A_ChangeVelocity(4, 0, 0, CVF_RELATIVE); if (health > 30) {return;} A_CustomMissile("FlameTrailsSmall1", 0, 0, random[RIDFX](0, 360), CMF_AIMDIRECTION, random[RIDFX](60, 90));}
    Goto Missile+1
  DodgeEnd2:
    "####" "#" 0 A_JumpIfTracerCloser(150, "DodgeEnd3")
    XDRN AAAAAAAA 2 {A_ChangeVelocity(3, 0, 0, CVF_RELATIVE); if (health > 30) {return;} A_CustomMissile("FlameTrailsSmall1", 0, 0, random[RIDFX](0, 360), CMF_AIMDIRECTION, random[RIDFX](60, 90));}
    Goto Missile+1
  DodgeEnd3:
    XDRN AAAAAA 2 {A_ChangeVelocity(5, 0, 0, CVF_RELATIVE); if (health > 30) {return;} A_CustomMissile("FlameTrailsSmall1", 0, 0, random[RIDFX](0, 360), CMF_AIMDIRECTION, random[RIDFX](60, 90));}
    Goto Missile+1
  }
}

actor SentryDroneExplosion
{
  +FOILINVUL
  radius 1
  height 1
  speed 0
  +NOCLIP
  PROJECTILE
  scale 0.75
  DamageType "Explosion"
  states
  {
  Spawn:
    TNT1 AAAAAAAAA 0 NoDelay A_CustomMissile ("ExplosionParticleHeavy", 0, 0, random[RIDFX](0, 360), 2, random[RIDFX](0, 180))
    TNT1 AAAAAAAAAAAAAAAAAA 0 A_CustomMissile ("ExplosionParticleHeavy", 0, 0, random[RIDFX](0, 360), 2, random[RIDFX](0, 360))
    TNT1 AAAAAAAAA 0 A_CustomMissile ("ExplosionParticleVeryFast", 0, 0, random[RIDFX](0, 360), 2, random[RIDFX](0, 360))
    "####" "#" 0 A_CustomMissile ("SentryDroneExplosionG", 0, 0, random[RIDFX](0, 360), 2, random[RIDFX](0, 360))
    TNT1 AAAAA 0 A_CustomMissile ("ExplosionSmokeFast22", 0, 0, random[RIDFX](0, 360), 2, random[RIDFX](0, 360))
    "####" "#" 0 A_SpawnItem("BigRicoChet")
    "####" "#" 0 A_SPawnItem("ExplosionAirDisplacementEffect")
    "####" "#" 0 A_PlaySound("rpg/blowup")
    "####" "#" 0 A_PlayWeaponSound("rpg/blowup")
    "####" "#" 0 Radius_Quake(2, 8, 0, 12, 0)
    TNT1 A 2
    "####" "#" 0 A_Explode(45,150)
    TNT1 A 10
    stop
  }
}

actor SentryDroneExplosionG : RPGExplosion
{
  states
  {
  Spawn:
    XPLO ABCDEFGHIJKLMNOPQRSTU 2 BRIGHT
    stop
  }
}