ACTOR StickyPrimary : Ammo
{
  Inventory.Amount 1
  Inventory.MaxAmount 5
  Ammo.BackpackAmount 1
  Inventory.Icon "ROCKA0"
  +INVENTORY.IGNORESKILL
}

// Bounces around
ACTOR StickyMineRoll
{
	Radius 11
	Height 8
	Speed 30
	Mass 50
	Damage 0
	-NOGRAVITY
	-FLOAT
	-NOBLOCKMAP
	-NOTELEPORT
	-LOWGRAVITY
	Obituary "%o blew %k up with a Sticky Bomb."
	Renderstyle Normal
	Scale 0.5
	BounceSound "type97/bounce"
	Gravity 1.0
	+MISSILE
	
	BounceType "Doom"
	BounceCount 3
	BounceFactor 0.75
	WallBounceFactor 0.75
	
	DamageType ExplosiveDamage
	States
	{
		Spawn:
		STKP H 1
		Loop
		
		Death:
			TNT1 A 0 A_CustomMissile("RealStickyMine",0,0,0,CMF_AIMDIRECTION)
			TNT1 A 1
			Stop
		XDeath:
		TNT1 A 0 A_AlertMonsters
		TNT1 A 0 Radius_Quake(4,12,0,16,0)
		TNT1 AA 0 A_Explode(75,170)
		TNT1 A 0 A_SpawnItemEx("UltraExplosion")
		TNT1 AAAAAAAAAA 0 A_SpawnItemEx("ImpactSpark2", random(-32,32), random(-32,32), random(-32,32), random(-5,5), random(-5,5), random(-1,5), 0, 128, 0)
		TNT1 AAAAAAAAAA 0 A_SpawnItemEx("ImpactSpark2", random(-32,32), random(-32,32), random(-32,32), random(-5,5), random(-5,5), random(-1,5), 0, 128, 0)
		TNT1 A 1

		stop
	}
}

// Blows up when enemies touch it
Actor RealStickyMine
{
  Radius 15
  Height 10
  Damage (0)
  Speed 0
  
  Scale 0.5
  Obituary "%o got too close to %k's Sticky Bomb."
  Projectile
  DamageType "ExplosiveDamage"
  +CanBounceWater
  +MoveWithSector
  +NoGravity
  +HexenBounce
  +ThruGhost
  +NoTarget
  -SlidesOnWalls
  States
  {
  Spawn:
    PROX A 0
    PROX A 0 A_Stop
    STKP F 1
    Goto Spawn+2
  Death:
	STKP F 1
	Loop
  XDeath:
    TNT1 A 0 A_AlertMonsters
    TNT1 A 0 Radius_Quake(4,12,0,16,0)
    TNT1 AA 0 A_Explode(75,170)
    TNT1 A 0 A_SpawnItemEx("UltraExplosion")
    TNT1 AAAAAAAAAA 0 A_SpawnItemEx("ImpactSpark2", random(-32,32), random(-32,32), random(-32,32), random(-5,5), random(-5,5), random(-1,5), 0, 128, 0)
    TNT1 AAAAAAAAAA 0 A_SpawnItemEx("ImpactSpark2", random(-32,32), random(-32,32), random(-32,32), random(-5,5), random(-5,5), random(-1,5), 0, 128, 0)
    TNT1 A 1
    stop
  }
}

ACTOR FallingStickyMine : RealStickyMine
{
	-NOGRAVITY
}

// Sticks to walls and all that fun shit
ACTOR StickyMine
{
  Radius 11
  Height 8
  Speed 30
  Mass 50
  Damage 0
  -NOGRAVITY
  -FLOAT
  -NOBLOCKMAP
  -NOTELEPORT
  -LOWGRAVITY
  +MISSILE
  Obituary "$OB_MPROCKET" // "%o rode %k's rocket."
  DeathSound "type97/bounce"
  Scale 0.5
  Renderstyle Normal
  DamageType ExplosiveDamage
  Alpha 1.0
  States
  {
  Spawn:
	C4SP D 0
  Spawning:
    STKP FFFF 1 A_ScaleVelocity(0.95)
	STKP GGGG 1 A_ScaleVelocity(0.95)
    Loop
  // Stick to walls
  Death:
	// C4SP D 0 ACS_ExecuteAlways(556,0,0,0,0)
	MISL B 0 A_Scream
	PROX A 0 A_CustomMissile("RealStickyMine", 0, 0, 0, 4)
	Stop
	
  XDeath:
	MISL B 0 A_Scream
	PROX A 0 A_CustomMissile("FallingStickyMine", 0, 0, 0, 4)
	Stop
	
  // -- ACTUALLY DETONATE --
  ReallyDetonate:
    TNT1 A 0 A_AlertMonsters
    TNT1 A 0 Radius_Quake(4,12,0,16,0)
    TNT1 AA 0 A_Explode(75,170)
    TNT1 A 0 A_SpawnItemEx("UltraExplosion")
    TNT1 AAAAAAAAAA 0 A_SpawnItemEx("ImpactSpark2", random(-32,32), random(-32,32), random(-32,32), random(-5,5), random(-5,5), random(-1,5), 0, 128, 0)
    TNT1 AAAAAAAAAA 0 A_SpawnItemEx("ImpactSpark2", random(-32,32), random(-32,32), random(-32,32), random(-5,5), random(-5,5), random(-1,5), 0, 128, 0)
    TNT1 A 1
    stop
  }
}

ACTOR SpikesOut : Inventory { Inventory.MaxAmount 1 }

ACTOR "Sticky Bomb" : Weapon
{
  Weapon.AmmoUse 1
  Weapon.AmmoGive 1
  Weapon.AmmoType "StickyPrimary"
  Obituary "\cJ%k \cG> \cKC4 \cG> \cJ%o"
  Inventory.Pickupmessage "You picked up a Sticky Bomb."
  Inventory.PickupSound "m79/open"
  Tag "Sticky Bomb"
  Scale 0.75
  +WEAPON.NOAUTOFIRE
  +WEAPON.AMMO_OPTIONAL
  States
  {
  Ready:
	PPSS A 0 A_JumpIfInventory("DoBlocking",1,"QuickMelee")
	PPSS A 0 A_JumpIfInventory("QuickGrenading",1,"ToGrenade")
	PPSS A 0 A_JumpIfInventory("StickyPrimary",1,1)
	Goto ReadyEmpty
	//-- We have ammo --
	TNT1 A 0 A_JumpIfInventory("SpikesOut",1,"ReadySpikes")
    STKI A 1 A_WeaponReady
    Goto Ready
  ReadySpikes:
	STKI B 1 A_WeaponReady
	Goto Ready
  ReadyEmpty:
	STNA A 1 A_WeaponReady
	STNA A 0 A_JumpIfInventory("StickyPrimary",1,"GetNew")
	Goto Ready
  // We got ammo, get a new bomb from our belt
  GetNew:
	STNA BCD 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)
	TNT1 A 2 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)
	Goto SelectAnim
  ToGrenade:
	PPSS A 0
	Goto Fire
  QuickMelee:
	PPBL A 1
	PPBL B 0 A_PlaySoundEx("fist/swing","Weapon")
	PPBL BC 1
	PPBL D 0 A_CustomPunch (random(4,5),1,0,"BlockPuff")
	PPBL D 2
	PPBL E 4
	PPBL DCBA 2
	PPBL A 0 A_TakeInventory("DoBlocking",1)
	Goto Ready
  ToReady:
	NULL A 0
	Goto Ready
	NULL AAA 0
	NULL A 0 A_PlaySoundEx("dryfire/smg","SoundSlot6")
	Goto Ready
  Deselect:
	 ZC4S A 0 A_JumpIfInventory("StickyPrimary",1,1)
	 Goto DeselectEmpty
	 ZC4S A 0 A_JumpIfInventory("SpikesOut",1,"DeselectSpikes")
	 STS2 ABCD 1
	 Goto Deselecting
  DeselectSpikes:
	 STS1 ABCD 1
	 Goto Deselecting
  DeselectEmpty:
	 STNA BCD 1
	 Goto Deselecting
  Deselecting:
     TNT1 AAAAAAAAAA 0 A_Lower
	 TNT1 A 1 A_Lower
     Loop
  Select:
	 TNT1 A 0 A_SetCrosshair(16)
	 TNT1 AA 0 A_Raise
	 TNT1 A 1 A_WeaponReady
	 TNT1 A 0 A_PlaySoundEx("sticky/deploy","SoundSlot6")
	 TNT1 A 3
	 Goto SelectAnim
  SelectAnim:
	 ZC4S A 0 A_JumpIfInventory("StickyPrimary",1,1)
	 Goto SelectAnimEmpty
	 STS2 D 0 A_JumpIfInventory("SpikesOut",1,"SelectSpikes")
	 STS2 DCBA 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	 Goto Ready
  SelectSpikes:
	 STS1 DCBA 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	 Goto Ready
  SelectAnimEmpty:
	 STNA DCB 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	 Goto Ready
  Fire:
	 PPFI A 0 A_JumpIfInventory("StickyPrimary",1,1)
	 Goto Ready
	 ZC4F A 0 A_TakeInventory("QuickGrenading",1)
	 ZC4F A 0 A_JumpIfInventory("SpikesOut",1,"FireSpikes")
	 STS2 ABCD 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	 
	 TNT1 A 2 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	 
	 STST ABC 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	 PPBL B 0 A_PlaySoundEx("fist/swing","Weapon")
	 PPFI A 0 A_FireCustomMissile("StickyMineRoll",0,1)
	 STST DEF 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	 TNT1 A 4 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	 Goto SelectAnim
  FireSpikes:
	 STS1 ABCD 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	 
	 TNT1 A 2 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	 
	 STST ABC 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	 PPBL B 0 A_PlaySoundEx("fist/swing","Weapon")
	 PPFI A 0 A_FireCustomMissile("StickyMine",0,1)
	 STST DEF 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	 TNT1 A 4 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	 Goto SelectAnim
  AltFire:
	 TNT1 A 0 A_JumpIfInventory("StickyPrimary",1,1)
	 Goto Ready
	 TNT1 A 0 A_JumpIfInventory("SpikesOut",1,"SpikeIn")
	 Goto SpikeOut
	 
  SpikeOut:
	TNT1 A 0 A_GiveInventory("SpikesOut",1)
	STKI C 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	STKI C 0 A_PlaySoundEx("sticky/spikeout","SoundSlot5")
	STKI DEFGH 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	Goto Ready
	
  SpikeIn:
	TNT1 A 0 A_TakeInventory("SpikesOut",1)
	STKI I 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	STKI C 0 A_PlaySoundEx("sticky/spikein","SoundSlot5")
	STKI JKLMN 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	Goto Ready
	 
  Spawn:
    C4SP G -1
    Stop
  }
}