actor PipebombAmmo : Ammo
{
  inventory.pickupmessage "$D3D_PIPEBOMB"
  inventory.amount 1
  inventory.maxamount 10
  inventory.icon "TNT1A0"
  ammo.backpackamount 2
  ammo.backpackmaxamount 10
  scale 0.17
  +INVENTORY.IGNORESKILL
  states
  {
  Spawn:
    PBMX A -1
    stop
  }
}

ACTOR PipebombAmmoPickup : ZCustomInventoryWeapon 19324
{
  Inventory.PickupMessage "$D3D_PIPEBOMB"
  Inventory.MaxAmount 10
  Inventory.Amount 1
  scale 0.17
  +INVENTORY.AUTOACTIVATE
  Inventory.PickupSound "misc/backpack"
  States
  {
  Spawn:
    PBMX A -1
    Stop
  Pickup:
    SHTP A 0 ACS_ExecuteWithResult(506,5)
    TNT1 A 1
    stop
  Use:
    SHTP A 0
    TNT1 A 0 A_PlaySound("misc/backpack",15)
    TNT1 A 0 A_SetBlend ("Green", 0.10, 5)
    SHTP A 0 ACS_ExecuteAlways(506,0,6,0,0)
    TNT1 A 1
    Stop
  }
}

actor Detonating : Inventory
{
  inventory.maxamount 1
}

ACTOR DetonateCheck : Inventory
{
  Inventory.MaxAmount 1
}

ACTOR PipebombThrowForce : Inventory
{
  Inventory.MaxAmount 20
}

Actor TossPipeBomb : Inventory
{
  inventory.maxamount 1
}

Actor PipeBombTime : Inventory
{
  inventory.maxamount 6
}

actor "Pipebomb" : DefaultDukeWeapon 19325
{
  Weapon.SelectionOrder 22
  Weapon.AmmoUse 1
  Weapon.AmmoGive 1
  Weapon.AmmoType "PipebombAmmo"
  Obituary "%o tripped over %k's pipebomb."
  Inventory.Pickupmessage "$D3D_PIPEBOMB"
  Inventory.PickupSound "misc/backpack"
  scale 0.5
  +NOALERT
  Tag " "
  States
  {
  Detonator:
    TNT1 A 0 A_JumpIfHealthLower(1,3)
    TNT1 A 0 A_JumpIfInventory("Detonating",1,"DetonatorFire")
    PBMG D 1
    Loop
    TNT1 A 1
    Stop
  DetonatorFire:
    PBMG DE 2   
    TNT1 A 0 A_GiveInventory("DetonateCheck",1)
    PBMG F 2
    TNT1 A 0 A_FireCustomMissile("MonsterAlert",0,0,0)
    PBMG ED 2
    PBMG D 15
    TNT1 A 0 A_TakeInventory("DetonateCheck",1)
    TNT1 A 0 A_TakeInventory("Detonating",1)
    goto Detonator
  RReady2:
    TNT1 A 0 A_OverlayFlags(-4,PSPF_ADDWEAPON,false)
    TNT1 A 0 A_OverlayOffset(-4,0,40)
    TNT1 A 0 A_JumpIfInventory("PipebombAmmo",1,2)
    PBNG A 1 A_WeaponReady
    goto RReady
    PBMG A 1 A_WeaponReady
    goto RReady
  Select:
    TNT1 A 0 A_Overlay (-4, "Detonator", TRUE)
    TNT1 A 0 A_JumpIfInventory("PipebombAmmo",1,2)
    PBNG A 0
    goto Super::Select
    PBMG A 0
    goto Super::Select
  Deselect:
    TNT1 A 0 A_OverlayFlags(-4,PSPF_ADDWEAPON,true)
    TNT1 A 0 A_OverlayOffset(-4,0,10)
    TNT1 A 0 A_JumpIfInventory("PipebombAmmo",1,2)	
    PBNG A 0
    goto Super::Deselect	
    PBMG A 0
    goto Super::Deselect
  Fire:
    PBMG A 1 offset(1,31)
    PBMG A 1 offset(4,34)
    PBMG A 1 offset(8,38)
    PBMG A 1 offset(12,42)
    PBMG A 1 offset(16,46)
    PBMG A 1 offset(20,50)
    PBMG A 1 offset(24,54)
    PBMG A 1 offset(28,58)
    PBMG A 1 offset(36,66)
    PBMG B 1 offset(44,74)
    PBMG B 1 offset(52,82)
    PBMG B 1 offset(62,92)
  Hold:
    TNT1 A 0 A_GiveInventory("PipebombThrowForce",1)
    TNT1 A 1
    TNT1 A 0 A_ReFire
    PBMG B 1 offset(60,90)
    PBMG B 1 offset(40,70)
    TNT1 A 0 A_FireCustomMissile("ThrownPipebomb",0,1,0,-10)
    PBMG C 1 offset(30,60)
    PBMG C 1 offset(10,40)
    PBMG C 1 offset(0,40)
    PBMG C 1 offset(0,60)
    PBMG C 1 offset(0,80)
    PBMG C 1 offset(0,100)
    PBMG C 1 offset(0,110)
    TNT1 A 0 A_TakeInventory("Waiting",10)
    Goto RReady
  AltFire:
    TNT1 A 0 A_GiveInventory("Detonating",1)
    Goto RReady
  Spawn:
    PBMP A -1
    Stop
  }
}

ACTOR PipebombNade
{
}

ACTOR ThrownPipebomb
{
  +FOILINVUL
  Projectile
  Radius 6
  Height 6
  Speed 13
  Damage 0
  SeeSound "pipebomb/bounce"
//  DeathSound "pipebomb/bounce"
  scale 0.17
  DamageType "Explosion"
  Alpha 256
  Obituary "%o tripped over the pipebomb."
  BounceType "Doom"
  +BOUNCEONCEILINGS
  -NOGRAVITY
  +INVULNERABLE
  +NODAMAGE
  +CANBOUNCEWATER
  -BOUNCEAUTOOFF
  +BOUNCEAUTOOFFFLOORONLY
  +THRUSPECIES
  Species "Dukes"

  var int user_pipebombexploded;
  var int user_consumedthrowforce;

  States
  {
  Spawn:
    TNT1 A 0 NoDelay
    TNT1 A 0 A_ChangeVelocity(1.0, 0, 0.5,CVF_RELATIVE)
    TNT1 A 0 A_TakeFromTarget("PipebombThrowForce",1)
    TNT1 A 0 A_JumpIfInTargetInventory("PipebombThrowForce",1,"Spawn")
    TNT1 A 0 A_SetUserVar( "user_consumedthrowforce", 1)
  Spawn2:
    TNT1 A 0 A_JumpIfInTargetInventory("DetonateCheck",1,"PBExplosion")
    PBMX A 1
    Loop
  Death:
    TNT1 A 0 A_JumpIf(user_pipebombexploded==1,5)
    TNT1 A 0 A_JumpIf(user_consumedthrowforce==1,2)
    TNT1 A 0 A_TakeFromTarget("PipebombThrowForce")
    TNT1 A 0 A_PlaySound("pipebomb/bounce")
    TNT1 A 0 A_SpawnItemEx("ThrownPipebombShootable")
    TNT1 A 1
    Stop
  PBExplosion:
    TNT1 A 0 A_SetUserVar( "user_pipebombexploded", 1)
    TNT1 AAAAAAAAA 0 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 ("RPGExplosion", 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(100,180,XF_EXPLICITDAMAGETYPE,0,0,0,0,"None","Explosion")
    TNT1 A 0 A_Explode(100,180,XF_EXPLICITDAMAGETYPE|XF_HURTSOURCE,0,0,0,0,"None","Explosion")
    TNT1 A 10
    Stop
  }
}

ACTOR ThrownPipebombShootable : ZThrownPipebombShootable 19326
{
  +FOILINVUL
  Radius 6
  Height 6
  Speed 20
  Damage 0
  scale 0.17
  DamageType "Explosion"
  Alpha 256
  Obituary "%o tripped over the pipebomb."
  -NOGRAVITY
  +NOTAUTOAIMED
  +SHOOTABLE
  +NOBLOOD
  Health 1
  Mass 1000

  var int user_pipebombpickup;

  States
  {
  Spawn:
    PBMX A 1
    TNT1 A 0 A_JumpIfInTargetInventory("DetonateCheck",1,3)
    TNT1 A 0 A_SetUserVar( "user_pipebombpickup", A_RadiusGive("PipebombAmmoPickup", 35, RGF_PLAYERS, 1, "DukePlayer", "Dukes", 0, 1) )
    TNT1 A 0 A_JumpIf(user_pipebombpickup==1,"PickupPB")
    Loop
    TNT1 A 1 A_Die("PBExplosion")
    Stop
  Death:
  Death.PBExplosion:
    TNT1 A 0 A_ChangeFlag("INVULNERABLE",1)
    TNT1 A 0 A_ChangeFlag("NODAMAGE",1)
    TNT1 AAAAAAAAA 0 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 ("RPGExplosion", 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(100,180,XF_EXPLICITDAMAGETYPE,0,0,0,0,"None","Explosion")
    TNT1 A 0 A_Explode(100,180,XF_EXPLICITDAMAGETYPE|XF_HURTSOURCE,0,0,0,0,"None","Explosion")
    TNT1 A 10
    Stop
  PickupPB:
    TNT1 A 0 A_Remove(AAPTR_DEFAULT)
    TNT1 A 1
    Stop
  }
}

ACTOR TimedPipebomb : ZTimedPipebomb
{
  +FOILINVUL
  Projectile
  Radius 6
  Height 6
  Speed 30
  Damage 0
  Gravity 0.7
  Health 5
  SeeSound "pipebomb/bounce"
  DeathSound "none"
  scale 0.17
  DamageType "Explosion"
  Alpha 256
  Obituary "%o tripped over the pipebomb."
  +BOUNCEONFLOORS
  +BOUNCEONWALLS
  +BOUNCEONCEILINGS
  -NOGRAVITY
  -NOTELEPORT
  +SKYEXPLODE
  +CANBOUNCEWATER
  +THRUSPECIES
  Species "Dukes"
  BounceFactor 0.5
  WallBounceFactor 0.25
  States
  {
  Spawn:
    PBMX A 2 A_SpawnItem("WhiteFlare1",0,0)
    PBMX B 14
    TNT1 A 0 A_GiveInventory("PipeBombTime", 1)
    TNT1 A 0 A_JumpIfInventory("PipeBombTime", 3, "PBExplosion")
    Loop
  Death:
    TNT1 A 0 A_CustomMissile("MonsterAlert",0,0,0)
    PBMX A 2 A_SpawnItem("WhiteFlare1",0,0)
    PBMX B 14
    TNT1 A 0 A_GiveInventory("PipeBombTime", 1)
    TNT1 A 0 A_JumpIfInventory("PipeBombTime", 3, "PBExplosion")
    Loop
  PBExplosion:
    TNT1 A 0 A_NoBlocking
    TNT1 AAAAAAAAA 0 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 ("RPGExplosion", 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(100,180,XF_EXPLICITDAMAGETYPE,0,0,0,0,"None","Explosion")
    TNT1 A 0 A_Explode(100,180,XF_EXPLICITDAMAGETYPE|XF_HURTSOURCE,0,0,0,0,"None","Explosion")
    TNT1 A 10
    Stop
  }
}

ACTOR PipebombBarActive : PuzzleItem
{  
  Inventory.InterHubAmount 0
  Inventory.MaxAmount 1    
  -INVENTORY.INVBAR  
}

ACTOR PipebombBar : Ammo
{
  +IGNORESKILL
  Inventory.Amount 1
  Inventory.MaxAmount 100
}