actor ExpanderAmmo : Ammo 19314
{
  inventory.pickupmessage "$D3D_EXPANDAMMO"
  inventory.amount 20
  inventory.maxamount 50
  inventory.icon "TNT1A0"
  ammo.backpackamount 20
  ammo.backpackmaxamount 100
  scale 0.5
  +INVENTORY.IGNORESKILL
  states
  {
  Spawn:
    EXPP B -1
    stop
  }
}

actor "Expander" : DefaultDukeWeapon 19315
{
  Weapon.SelectionOrder 26
  Weapon.AmmoUse 1
  Weapon.AmmoGive 10
  Weapon.AmmoType "ExpanderAmmo"
  Obituary "%o was inflated by %k's Expander."
  Inventory.Pickupmessage "$D3D_EXPAND"
  Inventory.PickupSound "misc/backpack"
  weapon.upsound "chaingun/select"
  weapon.kickback 0
  scale 0.55
  decal DukeSmallScorch
  +NOALERT
  Tag " "
  States
  {
  RReady2:
    EXPW AB 2 A_WeaponReady
    TNT1 A 0 A_JumpIfInventory("TossPipeBomb",1,"TossPipeBomb")
    TNT1 A 0 A_JumpIfInventory("TossTripBomb",1,"TossTripBomb")
    EXPW CD 2 A_WeaponReady
    TNT1 A 0 A_JumpIfInventory("TossPipeBomb",1,"TossPipeBomb")
    TNT1 A 0 A_JumpIfInventory("TossTripBomb",1,"TossTripBomb")
    EXPW EF 2 A_WeaponReady
    TNT1 A 0 A_JumpIfInventory("TossPipeBomb",1,"TossPipeBomb")
    TNT1 A 0 A_JumpIfInventory("TossTripBomb",1,"TossTripBomb")
    EXPW GH 2 A_WeaponReady
    TNT1 A 0 A_JumpIfInventory("TossPipeBomb",1,"TossPipeBomb")
    TNT1 A 0 A_JumpIfInventory("TossTripBomb",1,"TossTripBomb")
    EXPW IJ 2 A_WeaponReady
    TNT1 A 0 A_JumpIfInventory("TossPipeBomb",1,"TossPipeBomb")
    TNT1 A 0 A_JumpIfInventory("TossTripBomb",1,"TossTripBomb")
    EXPW JJ 2 A_WeaponReady
    TNT1 A 0 A_JumpIfInventory("TossPipeBomb",1,"TossPipeBomb")
    TNT1 A 0 A_JumpIfInventory("TossTripBomb",1,"TossTripBomb")
    EXPW JI 2 A_WeaponReady
    TNT1 A 0 A_JumpIfInventory("TossPipeBomb",1,"TossPipeBomb")
    TNT1 A 0 A_JumpIfInventory("TossTripBomb",1,"TossTripBomb")
    EXPW HG 2 A_WeaponReady
    TNT1 A 0 A_JumpIfInventory("TossPipeBomb",1,"TossPipeBomb")
    TNT1 A 0 A_JumpIfInventory("TossTripBomb",1,"TossTripBomb")
    EXPW FE 2 A_WeaponReady
    TNT1 A 0 A_JumpIfInventory("TossPipeBomb",1,"TossPipeBomb")
    TNT1 A 0 A_JumpIfInventory("TossTripBomb",1,"TossTripBomb")
    EXPW DC 2 A_WeaponReady
    TNT1 A 0 A_JumpIfInventory("TossPipeBomb",1,"TossPipeBomb")
    TNT1 A 0 A_JumpIfInventory("TossTripBomb",1,"TossTripBomb")
    EXPW BA 2 A_WeaponReady
    TNT1 A 0 A_JumpIfInventory("TossPipeBomb",1,"TossPipeBomb")
    TNT1 A 0 A_JumpIfInventory("TossTripBomb",1,"TossTripBomb")
    EXPW A 2 A_WeaponReady
    goto RReady
  NoAmmo:
    EXPW J 5 A_WeaponReady(WRF_NOFIRE)
    EXPW J 5 A_WeaponReady
    TNT1 A 0 A_JumpIfInventory("ExpanderAmmo",1,"RReady")
    loop
  Deselect:
    EXPW A 0
    goto Super::Deselect
  Select:
    EXPW A 0
    goto Super::Select
  Fire:
    TNT1 A 0
    TNT1 A 0 A_JumpIfInventory("ExpanderAmmo", 1, 2)
    EXPW J 10 A_PlaySound("DRYFIRE", 1)
    Goto NoAmmo
    EXPF A 0 A_GunFlash
    EXPF A 1 bright offset(0, 34) A_PlayWeaponSound("expander/shoot")
    EXPF B 1 bright offset(-2, 31) 
    EXPF C 1 bright offset(1, 32) A_FireCustomMissile("MonsterAlert",0,0,0)
    TNT1 A 0 A_ZoomFactorD3D("d3d_rexpander",0.99)
    EXPF A 1 bright offset(2, 27) A_FireBullets(2.6, 2.6, 1, 17, "ExpanderPuff")
    TNT1 A 0 A_ZoomFactor(1.0)
    EXPF B 1 bright offset(3, 31)
    EXPF C 1 bright offset(-2, 33)
    TNT1 A 0 A_TakeInventory("Waiting",10)
    EXPF C 1 bright A_Refire
    Goto RReady
  AltFire:
    TNT1 A 0
    TNT1 A 0 A_JumpIfInventory("ExpanderAmmo", 12, 2)
    EXPW J 10 A_PlaySound("DRYFIRE", 1)
    Goto NoAmmo
    EXPF A 0 A_GunFlash
    EXPF A 1 bright offset(0, 34) A_PlayWeaponSound("expander/mwblastshoot")
    EXPF B 1 bright offset(-2, 31) A_FireCustomMissile("MonsterAlert",0,0,0)
    EXPF C 1 bright offset(1, 32)
    EXPF A 1 bright offset(2, 27)
    EXPF B 1 bright offset(3, 31)
    EXPF C 1 bright offset(-2, 33)
    EXPF A 1 bright offset(-1, 31)
    EXPF B 1 bright offset(2, 27)
    EXPF C 1 bright offset(1, 35) A_TakeInventory("Waiting",10)
    TNT1 AA 0 A_FireCustomMissile("GunFireSmoke", 0, 0, 3, -4, 0, 0)
    TNT1 AA 0 A_FireCustomMissile("GunFireSmoke", 0, 0, 4, -4, 0, 0)
    TNT1 AA 0 A_FireCustomMissile("GunFireSmoke", 0, 0, 5, -4, 0, 0)
    TNT1 AA 0 A_FireCustomMissile("GunFireSmoke", 0, 0, 6, -4, 0, 0)
    TNT1 A 0 A_ZoomFactorD3D("d3d_rexpander",0.99)
    EXPF A 1 bright offset(-2, 31) A_FireCustomMissile("ExpanderMicrowaveBlastAttack",1,0,7,-5)
    TNT1 A 0 A_TakeInventory("ExpanderAmmo",12)
    TNT1 A 0 A_ZoomFactor(1.0)
    EXPF B 1 bright offset(4, 33)
    EXPF C 1 bright offset(2, 24)
    EXPF A 1 bright offset(0, 33)
    EXPF B 1 bright offset(5, 27)
    EXPF C 1 bright offset(0, 31)
    EXPF A 1 bright offset(0, 33)
    EXPF B 1 bright offset(5, 27)
    EXPF C 1 bright offset(0, 31)
    EXPF A 1 bright offset(0, 33)
    EXPF B 1 bright offset(5, 27)
    EXPF C 1 bright offset(0, 31)
    EXPF A 1 bright offset(0, 33)
    EXPF B 1 bright offset(5, 27)
    EXPF C 1 bright offset(0, 31)
    EXPF A 1 bright offset(0, 33)
    EXPF B 1 bright offset(5, 27)
    EXPF C 1 bright offset(0, 31)
    EXPF A 1 offset(0, 33)
    EXPF B 1 offset(5, 27)
    EXPF C 1 offset(0, 31)
    EXPF A 1 offset(0, 33)
    EXPF B 1 offset(5, 27)
    EXPF C 1 offset(0, 31)
    Goto RReady
  Flash:
  AltFlash:
    TNT1 AAAAAA 1 A_FireCustomMissile("MuzzleFlashExpander",0,0,random[RIDFX](-2,2))
    stop
  Spawn:
    EXPP A -1
    Stop
  }
}

actor ExpanderAttack : ZMissile
{
  Radius 11
  Height 8
  Speed 25
  Damage (60+(20*random[RIDPLAYERAT](1,2)))
  Projectile
  DeathSound "shrinker/hit"
  Obituary "%o was inflated by %k's Expander."
  scale 0.6
  decal DukeScorch
  RenderStyle Add
  damagetype "Expander"
  +THRUGHOST
  States
  {
  Spawn:
    EXP2 AABBCCDD 2 bright NoDelay A_SpawnItem("RedFlare22",0,0)
    loop
  Death:
    TNT1 A 0 A_CustomMissile ("RedPlasmaFire", 0, 0, random[RIDFX](0, 360), 2, random[RIDFX](0, 360))
    TNT1 AAAAA 0 A_CustomMissile ("RedPlasmaParticle", 0, 0, random[RIDFX](0, 360), 2, random[RIDFX](0, 360))
    TNT1 AAAAA 0 A_CustomMissile ("RedPlasmaParticle", 0, 0, random[RIDFX](0, 360), 2, random[RIDFX](0, 360))
    TNT1 AAAAA 0 A_CustomMissile ("RedPlasmaParticle", 0, 0, random[RIDFX](0, 360), 2, random[RIDFX](0, 360))
    EXP2 EEEE 1 bright A_SpawnItem("LensFlareTorchRed",0,0)
    EXP2 F 4 bright
    TNT1 A 0 A_CustomMissile ("ShrinkerAttackSmoke", 1, 0, random[RIDFX](0, 360), 2, random[RIDFX](0, 160)) 
    EXP2 G 4 bright
    EXP2 H 4 bright
    TNT2 AAAA 9 A_CustomMissile ("ShrinkerAttackSmoke", 1, 0, random[RIDFX](0, 360), 2, random[RIDFX](0, 160))
    stop
  }
}

actor AlienExpanderAttack : ExpanderAttack
{
  Damage (25)
  Obituary "none"
}

actor ExpanderExplosion
{
  +FOILINVUL
  radius 1
  height 1
  speed 0
  +NOCLIP
  PROJECTILE
  scale 1.0
  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))
    TNT1 A 0 A_CustomMissile ("ExpanderExplosionG", 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))
    TNT1 A 0 A_SpawnItem("BigRicoChet")
    TNT1 A 0 A_SPawnItem("ExplosionAirDisplacementEffect")
    TNT1 A 0 A_PlaySound("rpg/blowup")
    TNT1 A 0 A_PlayWeaponSound("rpg/blowup")
    TNT1 A 0 Radius_Quake(2, 8, 0, 12, 0)
    TNT1 A 2
    TNT1 A 0 A_Explode(150,200)
    TNT1 A 10
    stop
  }
}

actor ExpanderExplosionG : RPGExplosion
{
  scale 1.0
}

Actor ExpanderMicrowaveBlastAttack : ZMissileP
{
  +FOILINVUL
  PROJECTILE
  Damage (1)
  Radius 11
  Height 8
  Speed 50
  +FORCEXYBILLBOARD
  +BLOODLESSIMPACT
  scale 0.3
  Alpha 0.5
  RenderStyle Add
  DeathSound "expander/mwblastexp"
  decal DukeScorch
  damagetype "MicrowaveBlastHit"
  +THRUSPECIES
  Species "Dukes"
  +THRUGHOST
  reactiontime 1
  States
  {
  Spawn:
    D3D9 A 1 bright NoDelay A_SpawnItem("WhiteFlare1",0,0)
    "####" "#" 0 A_SpawnItemEx("Duke_Smoke", (10 *momx)/-35.0, -(10 *momy)/-35.0, (10 *momz)/-35.0, 0,0,0, 0, SXF_ABSOLUTEANGLE)
    "####" "#" 0 A_SpawnItemEx("Duke_Smoke", (20*momx)/-35.0, -(20*momy)/-35.0, (20*momz)/-35.0, 0,0,0, 0, SXF_ABSOLUTEANGLE)
    "####" "#" 0 A_SpawnItemEx("Duke_Smoke", (30*momx)/-35.0, -(30*momy)/-35.0, (30*momz)/-35.0, 0,0,0, 0, SXF_ABSOLUTEANGLE)
    "####" "#" 0 A_SpawnItemEx("ExpanderMicrowaveBlastGAlt", (5 *momx)/-35.0, -(5 *momy)/-35.0, (5 *momz)/-35.0, 0,0,0, 0, SXF_ABSOLUTEANGLE)
    "####" "#" 0 A_SpawnItemEx("ExpanderMicrowaveBlastGAlt", (15*momx)/-35.0, -(15*momy)/-35.0, (15*momz)/-35.0, 0,0,0, 0, SXF_ABSOLUTEANGLE)
    "####" "#" 0 A_SpawnItemEx("ExpanderMicrowaveBlastGAlt", (25*momx)/-35.0, -(25*momy)/-35.0, (25*momz)/-35.0, 0,0,0, 0, SXF_ABSOLUTEANGLE)
    D3D9 B 1 bright A_SpawnItem("WhiteFlare1",0,0)
    "####" "#" 0 A_SpawnItemEx("Duke_Smoke", (10 *momx)/-35.0, -(10 *momy)/-35.0, (10 *momz)/-35.0, 0,0,0, 0, SXF_ABSOLUTEANGLE)
    "####" "#" 0 A_SpawnItemEx("Duke_Smoke", (20*momx)/-35.0, -(20*momy)/-35.0, (20*momz)/-35.0, 0,0,0, 0, SXF_ABSOLUTEANGLE)
    "####" "#" 0 A_SpawnItemEx("Duke_Smoke", (30*momx)/-35.0, -(30*momy)/-35.0, (30*momz)/-35.0, 0,0,0, 0, SXF_ABSOLUTEANGLE)
    "####" "#" 0 A_SpawnItemEx("ExpanderMicrowaveBlastGAlt", (5 *momx)/-35.0, -(5 *momy)/-35.0, (5 *momz)/-35.0, 0,0,0, 0, SXF_ABSOLUTEANGLE)
    "####" "#" 0 A_SpawnItemEx("ExpanderMicrowaveBlastGAlt", (15*momx)/-35.0, -(15*momy)/-35.0, (15*momz)/-35.0, 0,0,0, 0, SXF_ABSOLUTEANGLE)
    "####" "#" 0 A_SpawnItemEx("ExpanderMicrowaveBlastGAlt", (25*momx)/-35.0, -(25*momy)/-35.0, (25*momz)/-35.0, 0,0,0, 0, SXF_ABSOLUTEANGLE)
    D3D9 C 1 bright A_SpawnItem("WhiteFlare1",0,0)
    "####" "#" 0 A_SpawnItemEx("Duke_Smoke", (10 *momx)/-35.0, -(10 *momy)/-35.0, (10 *momz)/-35.0, 0,0,0, 0, SXF_ABSOLUTEANGLE)
    "####" "#" 0 A_SpawnItemEx("Duke_Smoke", (20*momx)/-35.0, -(20*momy)/-35.0, (20*momz)/-35.0, 0,0,0, 0, SXF_ABSOLUTEANGLE)
    "####" "#" 0 A_SpawnItemEx("Duke_Smoke", (30*momx)/-35.0, -(30*momy)/-35.0, (30*momz)/-35.0, 0,0,0, 0, SXF_ABSOLUTEANGLE)
    "####" "#" 0 A_SpawnItemEx("ExpanderMicrowaveBlastGAlt", (5 *momx)/-35.0, -(5 *momy)/-35.0, (5 *momz)/-35.0, 0,0,0, 0, SXF_ABSOLUTEANGLE)
    "####" "#" 0 A_SpawnItemEx("ExpanderMicrowaveBlastGAlt", (15*momx)/-35.0, -(15*momy)/-35.0, (15*momz)/-35.0, 0,0,0, 0, SXF_ABSOLUTEANGLE)
    "####" "#" 0 A_SpawnItemEx("ExpanderMicrowaveBlastGAlt", (25*momx)/-35.0, -(25*momy)/-35.0, (25*momz)/-35.0, 0,0,0, 0, SXF_ABSOLUTEANGLE)
    D3D9 B 1 bright A_SpawnItem("WhiteFlare1",0,0)
    "####" "#" 0 A_SpawnItemEx("Duke_Smoke", (10 *momx)/-35.0, -(10 *momy)/-35.0, (10 *momz)/-35.0, 0,0,0, 0, SXF_ABSOLUTEANGLE)
    "####" "#" 0 A_SpawnItemEx("Duke_Smoke", (20*momx)/-35.0, -(20*momy)/-35.0, (20*momz)/-35.0, 0,0,0, 0, SXF_ABSOLUTEANGLE)
    "####" "#" 0 A_SpawnItemEx("Duke_Smoke", (30*momx)/-35.0, -(30*momy)/-35.0, (30*momz)/-35.0, 0,0,0, 0, SXF_ABSOLUTEANGLE)
    "####" "#" 0 A_SpawnItemEx("ExpanderMicrowaveBlastGAlt", (5 *momx)/-35.0, -(5 *momy)/-35.0, (5 *momz)/-35.0, 0,0,0, 0, SXF_ABSOLUTEANGLE)
    "####" "#" 0 A_SpawnItemEx("ExpanderMicrowaveBlastGAlt", (15*momx)/-35.0, -(15*momy)/-35.0, (15*momz)/-35.0, 0,0,0, 0, SXF_ABSOLUTEANGLE)
    "####" "#" 0 A_SpawnItemEx("ExpanderMicrowaveBlastGAlt", (25*momx)/-35.0, -(25*momy)/-35.0, (25*momz)/-35.0, 0,0,0, 0, SXF_ABSOLUTEANGLE)
    D3D9 A 1 bright A_SpawnItem("WhiteFlare1",0,0)
    "####" "#" 0 A_SpawnItemEx("Duke_Smoke", (10 *momx)/-35.0, -(10 *momy)/-35.0, (10 *momz)/-35.0, 0,0,0, 0, SXF_ABSOLUTEANGLE)
    "####" "#" 0 A_SpawnItemEx("Duke_Smoke", (20*momx)/-35.0, -(20*momy)/-35.0, (20*momz)/-35.0, 0,0,0, 0, SXF_ABSOLUTEANGLE)
    "####" "#" 0 A_SpawnItemEx("Duke_Smoke", (30*momx)/-35.0, -(30*momy)/-35.0, (30*momz)/-35.0, 0,0,0, 0, SXF_ABSOLUTEANGLE)
    "####" "#" 0 A_SpawnItemEx("ExpanderMicrowaveBlastGAlt", (5 *momx)/-35.0, -(5 *momy)/-35.0, (5 *momz)/-35.0, 0,0,0, 0, SXF_ABSOLUTEANGLE)
    "####" "#" 0 A_SpawnItemEx("ExpanderMicrowaveBlastGAlt", (15*momx)/-35.0, -(15*momy)/-35.0, (15*momz)/-35.0, 0,0,0, 0, SXF_ABSOLUTEANGLE)
    "####" "#" 0 A_SpawnItemEx("ExpanderMicrowaveBlastGAlt", (25*momx)/-35.0, -(25*momy)/-35.0, (25*momz)/-35.0, 0,0,0, 0, SXF_ABSOLUTEANGLE)
    D3D9 B 1 bright A_SpawnItem("WhiteFlare1",0,0)
    "####" "#" 0 A_SpawnItemEx("Duke_Smoke", (10 *momx)/-35.0, -(10 *momy)/-35.0, (10 *momz)/-35.0, 0,0,0, 0, SXF_ABSOLUTEANGLE)
    "####" "#" 0 A_SpawnItemEx("Duke_Smoke", (20*momx)/-35.0, -(20*momy)/-35.0, (20*momz)/-35.0, 0,0,0, 0, SXF_ABSOLUTEANGLE)
    "####" "#" 0 A_SpawnItemEx("Duke_Smoke", (30*momx)/-35.0, -(30*momy)/-35.0, (30*momz)/-35.0, 0,0,0, 0, SXF_ABSOLUTEANGLE)
    "####" "#" 0 A_SpawnItemEx("ExpanderMicrowaveBlastGAlt", (5 *momx)/-35.0, -(5 *momy)/-35.0, (5 *momz)/-35.0, 0,0,0, 0, SXF_ABSOLUTEANGLE)
    "####" "#" 0 A_SpawnItemEx("ExpanderMicrowaveBlastGAlt", (15*momx)/-35.0, -(15*momy)/-35.0, (15*momz)/-35.0, 0,0,0, 0, SXF_ABSOLUTEANGLE)
    "####" "#" 0 A_SpawnItemEx("ExpanderMicrowaveBlastGAlt", (25*momx)/-35.0, -(25*momy)/-35.0, (25*momz)/-35.0, 0,0,0, 0, SXF_ABSOLUTEANGLE)
    D3D9 C 1 bright A_SpawnItem("WhiteFlare1",0,0)
    "####" "#" 0 A_SpawnItemEx("Duke_Smoke", (10 *momx)/-35.0, -(10 *momy)/-35.0, (10 *momz)/-35.0, 0,0,0, 0, SXF_ABSOLUTEANGLE)
    "####" "#" 0 A_SpawnItemEx("Duke_Smoke", (20*momx)/-35.0, -(20*momy)/-35.0, (20*momz)/-35.0, 0,0,0, 0, SXF_ABSOLUTEANGLE)
    "####" "#" 0 A_SpawnItemEx("Duke_Smoke", (30*momx)/-35.0, -(30*momy)/-35.0, (30*momz)/-35.0, 0,0,0, 0, SXF_ABSOLUTEANGLE)
    "####" "#" 0 A_SpawnItemEx("ExpanderMicrowaveBlastGAlt", (5 *momx)/-35.0, -(5 *momy)/-35.0, (5 *momz)/-35.0, 0,0,0, 0, SXF_ABSOLUTEANGLE)
    "####" "#" 0 A_SpawnItemEx("ExpanderMicrowaveBlastGAlt", (15*momx)/-35.0, -(15*momy)/-35.0, (15*momz)/-35.0, 0,0,0, 0, SXF_ABSOLUTEANGLE)
    "####" "#" 0 A_SpawnItemEx("ExpanderMicrowaveBlastGAlt", (25*momx)/-35.0, -(25*momy)/-35.0, (25*momz)/-35.0, 0,0,0, 0, SXF_ABSOLUTEANGLE)
    D3D9 B 1 bright A_SpawnItem("WhiteFlare1",0,0)
    "####" "#" 0 A_SpawnItemEx("Duke_Smoke", (10 *momx)/-35.0, -(10 *momy)/-35.0, (10 *momz)/-35.0, 0,0,0, 0, SXF_ABSOLUTEANGLE)
    "####" "#" 0 A_SpawnItemEx("Duke_Smoke", (20*momx)/-35.0, -(20*momy)/-35.0, (20*momz)/-35.0, 0,0,0, 0, SXF_ABSOLUTEANGLE)
    "####" "#" 0 A_SpawnItemEx("Duke_Smoke", (30*momx)/-35.0, -(30*momy)/-35.0, (30*momz)/-35.0, 0,0,0, 0, SXF_ABSOLUTEANGLE)
    "####" "#" 0 A_SpawnItemEx("ExpanderMicrowaveBlastGAlt", (5 *momx)/-35.0, -(5 *momy)/-35.0, (5 *momz)/-35.0, 0,0,0, 0, SXF_ABSOLUTEANGLE)
    "####" "#" 0 A_SpawnItemEx("ExpanderMicrowaveBlastGAlt", (15*momx)/-35.0, -(15*momy)/-35.0, (15*momz)/-35.0, 0,0,0, 0, SXF_ABSOLUTEANGLE)
    "####" "#" 0 A_SpawnItemEx("ExpanderMicrowaveBlastGAlt", (25*momx)/-35.0, -(25*momy)/-35.0, (25*momz)/-35.0, 0,0,0, 0, SXF_ABSOLUTEANGLE)
    TNT1 A 0 A_Countdown
    loop
  Death:
    TNT1 AAA 0 A_CustomMissile ("ExplosionParticleWhiteHeavySmall", 0, 0, random[RIDFX](0, 360), 2, random[RIDFX](10, 70))
    TNT1 AAAAAAAAA 0 A_CustomMissile ("ExplosionParticleWhiteHeavySmall", 0, 0, random[RIDFX](0, 360), 2, random[RIDFX](20, 50))
    TNT1 AAAAA 0 A_CustomMissile ("ExplosionParticleWhiteVeryFast", 0, 0, random[RIDFX](0, 360), 2, random[RIDFX](20, 40))
    TNT1 AAAA 0 A_CustomMissile ("ExplosionParticleWhite", 0, 0, random[RIDFX](0, 360), 2, random[RIDFX](0, 360))
    TNT1 A 0 A_CustomMissile ("ExpanderMicrowaveBlastG", 0, 0, random[RIDFX](0, 360), 2, random[RIDFX](0, 360))
    TNT1 AAAAA 0 A_SpawnItemEx("Duke_Smoke", random[RIDFX](-8,8), random[RIDFX](-8,8), random[RIDFX](-8,8), random[RIDFX](-4,4), random[RIDFX](-4,4), random[RIDFX](-4,4), random[RIDFX](0, 360))
    TNT1 AAAAA 0 A_SpawnItemEx("Duke_Smoke", random[RIDFX](-8,8), random[RIDFX](-8,8), random[RIDFX](-8,8), random[RIDFX](-4,4), random[RIDFX](-4,4), random[RIDFX](-4,4), random[RIDFX](0, 360))
    TNT1 AAAAA 0 A_SpawnItemEx("Duke_Smoke", random[RIDFX](-8,8), random[RIDFX](-8,8), random[RIDFX](-8,8), random[RIDFX](-4,4), random[RIDFX](-4,4), random[RIDFX](-4,4), random[RIDFX](0, 360))
    TNT1 AAAAA 0 A_SpawnItemEx("Duke_Smoke", random[RIDFX](-8,8), random[RIDFX](-8,8), random[RIDFX](-8,8), random[RIDFX](-4,4), random[RIDFX](-4,4), random[RIDFX](-4,4), random[RIDFX](0, 360))
    TNT1 AAAAA 0 A_SpawnItemEx("Duke_Smoke", random[RIDFX](-8,8), random[RIDFX](-8,8), random[RIDFX](-8,8), random[RIDFX](-4,4), random[RIDFX](-4,4), random[RIDFX](-4,4), random[RIDFX](0, 360))
    TNT1 AAAAA 0 A_SpawnItemEx("Duke_Smoke", random[RIDFX](-8,8), random[RIDFX](-8,8), random[RIDFX](-8,8), random[RIDFX](-4,4), random[RIDFX](-4,4), random[RIDFX](-4,4), random[RIDFX](0, 360))
    TNT1 AAAAA 0 A_SpawnItemEx("Duke_Smoke", random[RIDFX](-8,8), random[RIDFX](-8,8), random[RIDFX](-8,8), random[RIDFX](-4,4), random[RIDFX](-4,4), random[RIDFX](-4,4), random[RIDFX](0, 360))
    TNT1 AAAAA 0 A_SpawnItemEx("Duke_Smoke", random[RIDFX](-8,8), random[RIDFX](-8,8), random[RIDFX](-8,8), random[RIDFX](-4,4), random[RIDFX](-4,4), random[RIDFX](-4,4), random[RIDFX](0, 360))
    TNT1 AAAAA 0 A_SpawnItemEx("Duke_Smoke", random[RIDFX](-8,8), random[RIDFX](-8,8), random[RIDFX](-8,8), random[RIDFX](-4,4), random[RIDFX](-4,4), random[RIDFX](-4,4), random[RIDFX](0, 360))
    TNT1 AAAAA 0 A_SpawnItemEx("Duke_Smoke", random[RIDFX](-8,8), random[RIDFX](-8,8), random[RIDFX](-8,8), random[RIDFX](-4,4), random[RIDFX](-4,4), random[RIDFX](-4,4), random[RIDFX](0, 360))
    TNT1 AAAAA 0 A_SpawnItemEx("Duke_Smoke", random[RIDFX](-8,8), random[RIDFX](-8,8), random[RIDFX](-8,8), random[RIDFX](-4,4), random[RIDFX](-4,4), random[RIDFX](-4,4), random[RIDFX](0, 360))
    TNT1 AAAAA 0 A_SpawnItemEx("Duke_Smoke", random[RIDFX](-8,8), random[RIDFX](-8,8), random[RIDFX](-8,8), random[RIDFX](-4,4), random[RIDFX](-4,4), random[RIDFX](-4,4), random[RIDFX](0, 360))
    TNT1 AAAAA 0 A_SpawnItemEx("Duke_Smoke", random[RIDFX](-16,16), random[RIDFX](-16,16), random[RIDFX](-16,16), random[RIDFX](-16,16), random[RIDFX](-16,16), random[RIDFX](-16,16), random[RIDFX](0, 360))
    TNT1 AAAAA 0 A_SpawnItemEx("Duke_Smoke", random[RIDFX](-16,16), random[RIDFX](-16,16), random[RIDFX](-16,16), random[RIDFX](-16,16), random[RIDFX](-16,16), random[RIDFX](-16,16), random[RIDFX](0, 360))
    TNT1 AAAAA 0 A_SpawnItemEx("Duke_Smoke", random[RIDFX](-16,16), random[RIDFX](-16,16), random[RIDFX](-16,16), random[RIDFX](-16,16), random[RIDFX](-16,16), random[RIDFX](-16,16), random[RIDFX](0, 360))
    TNT1 AAAAA 0 A_SpawnItemEx("Duke_Smoke", random[RIDFX](-16,16), random[RIDFX](-16,16), random[RIDFX](-16,16), random[RIDFX](-16,16), random[RIDFX](-16,16), random[RIDFX](-16,16), random[RIDFX](0, 360))
    TNT1 AAAAA 0 A_SpawnItemEx("Duke_Smoke", random[RIDFX](-16,16), random[RIDFX](-16,16), random[RIDFX](-16,16), random[RIDFX](-16,16), random[RIDFX](-16,16), random[RIDFX](-16,16), random[RIDFX](0, 360))
    TNT1 AAAAA 0 A_SpawnItemEx("Duke_Smoke", random[RIDFX](-16,16), random[RIDFX](-16,16), random[RIDFX](-16,16), random[RIDFX](-16,16), random[RIDFX](-16,16), random[RIDFX](-16,16), random[RIDFX](0, 360))
    TNT1 A 0 Radius_Quake(2, 8, 0, 12, 0)
    TNT1 A 2
    TNT1 A 0 A_Explode(40,256,XF_EXPLICITDAMAGETYPE,0,224,0,0,"none","MicrowaveBlast")
    TNT1 A 10
    stop
  }
}

Actor ExpanderMicrowaveBlastG
{
  Scale 0.6
  Renderstyle Add
  Alpha 0.7
  +FORCEXYBILLBOARD
  +NOCLIP
  +NOGRAVITY
  +NOINTERACTION
  +CLIENTSIDEONLY
  +THRUGHOST
  States
  {
  Spawn:
    TNT1 A 0
    TNT1 A 0 A_SpawnItemEx("ExpanderMicrowaveBlastFire",0,0)
    TNT1 A 0 A_SpawnItemEx("ExpanderMicrowaveBlastL1",-112,0)
    TNT1 A 0 A_SpawnItemEx("ExpanderMicrowaveBlastL1",0,0)
    TNT1 A 0 A_SpawnItemEx("ExpanderMicrowaveBlastL1",0,112)
    TNT1 A 0 A_SpawnItemEx("ExpanderMicrowaveBlastL1",-112,-112)
    TNT1 A 0 A_SpawnItemEx("ExpanderMicrowaveBlastL1",-112,112)
    TNT1 A 0 A_SpawnItemEx("ExpanderMicrowaveBlastL1",112,-112)
    TNT1 A 0 A_SpawnItemEx("ExpanderMicrowaveBlastL1",112,112)
    TNT1 A 0 A_SpawnItemEx("ExpanderMicrowaveBlastL1",0,-112)
    TNT1 A 0 A_SpawnItemEx("ExpanderMicrowaveBlastL1",112,0)
    D3D9 ABCDEFGHI 1 Bright {A_SpawnItem("WhiteFlare1",0,0); A_SetScale(scaleX+0.09,scaleY+0.05); A_SetTranslucent(alpha - 0.01);}
    Stop
  }
}

Actor ExpanderMicrowaveBlastGAlt : ExpanderMicrowaveBlastG
{
  Alpha 0.5
  Scale 0.10
  States
  {
  Spawn:
    TNT1 A 0
    D3D9 ABCDEFGHI 1 Bright {A_SetScale(scaleX+0.005,scaleY+0.005); A_SetTranslucent(alpha - 0.03);}
    Stop
  }
}

ACTOR ExpanderMicrowaveBlastFire : ExpanderMicrowaveBlastG
{
  Alpha 0.7
  Scale 0.9
  States
  {
  Spawn:
    TNT1 A 0
    TNT1 AAA 0 A_SpawnItemEx("ExpanderMicrowaveBlastL2")
    EFIR ABCDEFGHIJKLM 1
    Stop
  }
}

Actor ExpanderMicrowaveBlastL1 : ExpanderMicrowaveBlastG
{
  States
  {
  Spawn:
    TNT1 A 0
    TNT1 AAAAAAAAA 1
    TNT1 AAA 1
    Stop
  }
}

Actor ExpanderMicrowaveBlastL2 : ExpanderMicrowaveBlastG
{
  States
  {
  Spawn:
    TNT1 A 0
    TNT1 AAAAAAAAA 1
    TNT1 AAA 1
    Stop
  }
}