// Bomb pack
actor BombPack : AOWWeapon {
	+WEAPON.CHEATNOTWEAPON
	Inventory.PickupMessage "Picked up the bomb pack... \cGwait what?!"
	Weapon.SelectionOrder 1
	Weapon.Kickback 0
	Weapon.AmmoType "Bomb-PackAmmo"
	Weapon.AmmoUse 1
	Weapon.AmmoGive 1
	Weapon.PreferredSkin "MarineBackpack"
	DropItem "Nothing"
	States {
	Ready:
		SBOM A 0 A_ChangeFlag ("PICKUP", 0)
		// [Dusk] The scream is not really an item sound but I don't want anything
		// to interrupt it. The above line disables +PICKUP, so the guy won't be
		// picking up any items.
		SBOM A 0 A_PlaySound ("terrorist/scream", CHAN_ITEM, 1.0, true)
		goto Idle
	Idle:
		SBOM A 1 A_WeaponReady (WRF_NOSWITCH)
		wait
	Deselect:
		TNT1 A 0 A_StopSound (CHAN_ITEM)
		TNT1 A 1 A_Lower
		wait
	Select:
		SBOM A 0 A_PlaySound ("terrorist/select", CHAN_WEAPON)
		SBOM A 1 A_Raise
		wait
	Fire:
		TNT1 A 0 A_JumpIfInventory ("IsInSpawnRoom", 1, "Idle")
		TNT1 A 0 A_JumpIfInventory ("InMenu", 1, "Idle")
		SBOM A 0 A_TakeInventory ("PowerInvulnerable", 1)
		SBOM A 0 A_FireCustomMissile ("DummyMissile")
		SBOM A 5 A_PlaySound ("terrorist/activate", CHAN_WEAPON)
		SBOM B 5
		SBOM C 25
		SBOM C 0 A_JumpIfInventory ("IsInSpawnRoom", 1, "Ready")
		SBOM C 1 A_GiveInventory ("IsTerrorist", 1)
		SBOM C 5 A_StopSound (CHAN_ITEM)
		SBOM C -1 DamageThing (1000000)
		stop
	Spawn:
		TNT1 A 0
		stop
	}
}

actor DummyMissile {
	PROJECTILE
	Speed 0
	Radius 0
	Height 0
	States {
	Spawn:
		TNT1 A 0
		stop
	}
}

actor Bomb-PackAmmo : Ammo {
	+INVENTORY.IGNORESKILL
	inventory.icon "TNT1A0"
	inventory.amount 1
	inventory.maxamount 1
	ammo.backpackamount 0
	ammo.backpackmaxamount 0
}

actor IsTerrorist : Inventory {}

// [Dusk] The big explosion. The bomb pack itself does not spawn this, it is
// actually spawned by the player body. The bomb pack gives a dummy item that
// instructs the player body to spawn this.
actor KamikazeExplosion {
	PROJECTILE
	+NOGRAVITY
	+NOINTERACTION
	Obituary "$OB_BOMBPACK" // "%o \cIwas wiped off the face of Earth by %k."
	Damage 100
	DamageType "Explosion"
	states {
	Spawn:
		TNT1 A 0
		TNT1 A 0 A_SpawnItemEx ("KamikazeExplosionFX")
		TNT1 A 0 A_Explode (7000, 128)
		TNT1 A 0 A_Explode (2000, 256)
		TNT1 A 10 A_Explode (400, 1536)
		stop
	}
}

// [Dusk] Explosion effect. Should check for aow_fx here...
actor KamikazeExplosionFX {
	+CLIENTSIDEONLY
	+NOINTERACTION
	+NOGRAVITY
	states {
	Spawn:
		TNT1 A 0
		TNT1 A 0 A_SpawnItemEx ("BombPackQuake")
		TNT1 A 0 A_SpawnItemEx ("NukeMushroom")
		TNT1 A 0 A_SpawnItemEx ("ExplosionMain", random (-48, 48), random(-48, 48), random (16, 32))
		TNT1 A 0 A_PlaySound ("weapons/rocklx", CHAN_BODY)
		TNT1 A 0 A_PlaySound ("weapons/rocklx", CHAN_WEAPON)
		TNT1 AA 0 A_SpawnItemEx ("BombPackSmoke", 0, 0, random (32, 64), random (-1.5, 1.5), random (-1.5, 1.5))
		TNT1 A 2
		TNT1 AAA 0 A_SpawnItemEx ("BombPackSmoke", 0, 0, random (64, 96), random (-1.5, 1.5), random (-1.5, 1.5))
		TNT1 A 2
		TNT1 AAAA 0 A_SpawnItemEx ("BombPackSmoke", 0, 0, random (96, 128), random (-1.5, 1.5), random (-1.5, 1.5))
		TNT1 A 2
		TNT1 AAAAA 0 A_SpawnItemEx ("BombPackSmoke", 0, 0, random (128, 144), random (-1.5, 1.5), random (-1.5, 1.5))
		TNT1 A 2
		TNT1 AAAAAA 0 A_SpawnItemEx ("BombPackSmoke", 0, 0, random (144, 160), random (-1.5, 1.5), random (-1.5, 1.5))
		TNT1 A 2
		TNT1 AAAAAAA 0 A_SpawnItemEx ("BombPackSmoke", 0, 0, random (160, 192), random (-1.5, 1.5), random (-1.5, 1.5))
		TNT1 A 2
		TNT1 AAAAAAAA 0 A_SpawnItemEx ("BombPackSmoke", 0, 0, random (192, 224), random (-1.5, 1.5), random (-1.5, 1.5))
		TNT1 A 2
		TNT1 AAAAAAAAAA 0 A_SpawnItemEx ("BombPackSmoke", 0, 0, random (224, 256), random (-1.5, 1.5), random (-1.5, 1.5))
		stop
	}
}

actor BombPackSmoke : NukeSmoke {
	+FORCEXYBILLBOARD
	scale 1.5
}

actor BombPackQuake {
	+CLIENTSIDEONLY +NOSECTOR +NOCLIP +NOINTERACTION
	states {
	Spawn:
		TNT1 A 0
		TNT1 A 10 Radius_Quake (9, 10, 0, 24, 0)
		TNT1 A 10 Radius_Quake (8, 10, 0, 20, 0)
		TNT1 A 10 Radius_Quake (7, 10, 0, 19, 0)
		TNT1 A 10 Radius_Quake (6, 10, 0, 18, 0)
		TNT1 A 10 Radius_Quake (5, 10, 0, 16, 0)
		TNT1 A 10 Radius_Quake (3, 10, 0, 12, 0)
		TNT1 A 10 Radius_Quake (1, 10, 0, 6, 0)
		stop
	}
}

// [Dusk] Given on resign to free the player of the effects of the bomb pack
actor NoMoreTerrorism : CustomInventory {
	+AUTOACTIVATE
	+ALWAYSPICKUP
	States {
	Spawn:
		TNT1 A 0
		stop
	Pickup:
		TNT1 A 0 A_ChangeFlag ("PICKUP", 1)
		TNT1 A 0 A_StopSound (CHAN_ITEM)
		stop
	}
}

// Inventory item for insta-suicidebomber switch.
actor BombPackItem : InventoryItem {
	Inventory.Icon "sbomicon"
	Tag "Bomb Pack"
	states {
	Spawn:
		TNT1 A 0
		stop
	Use:
		TNT1 A 0 A_JumpIfInventory ("IsInSpawnRoom", 1, "Failure")
		TNT1 A 0 A_JumpIfInventory ("IsMech", 1, "Use.Mech")
		TNT1 A 0 A_JumpIfInventory ("StealthMode", 1, "Destealth")
		TNT1 A 0 A_JumpIfInventory ("PowerBerserk", 1, "Failure")
		TNT1 A 0 ACS_ExecuteWithResult (807, 0)
		stop
	}
}

// old stuff
actor BombPackKamikaze
{
  radius 13
  height 8
  speed 0
  damage 0
  renderstyle Add
  alpha 0.75
  deathsound "weapons/rocklx"
  PROJECTILE
  -RANDOMIZE
  +STRIFEDAMAGE
  //+FULLVOLDEATH
  +NOEXTREMEDEATH
  +NODAMAGETHRUST
  DamageType "Terrorist"
  Scale 2.0
  states
  {
  Spawn:
    PLS1 A 0 bright
    goto Death
    PLS1 A 0 bright A_SetShootable
    PLS1 A 0 bright A_Die
    Stop
  Death:
    TNT1 A 0
    TNT1 A 0 A_SpawnItemEx("ExplosionMainLarge", 0, 0, 0, 0, 0, 0, 0, 128, 0)
    TNT1 A 0 A_PlaySound("weapons/rocklx")
    TNT1 A 0 A_PlayWeaponSound("weapons/rocklx")
    TNT1 A 0 bright A_Explode(100,512,0)
    TNT1 A 0 bright A_Explode(700,128,0)
    TNT1 A 1 bright A_Explode(700,256,0)
    TNT1 AAAAA 0 A_SpawnItemEx("FlameWallDecay", random(-48,48), random(-48,48), 4, 0, 0, 0, 0, 0, 0)
    TNT1 A 0 A_SpawnItemEx("BombPackKamikazeSuicide", -1, 0, 0, 0, 0, 0, 0, 0, 0)
    stop
  }
}

actor BombPackKamikazeSuicide
{
  RenderStyle None
  -RANDOMIZE
  +NOCLIP
  PROJECTILE
  Speed 1
  Damage 0
  Scale 0.7
  DamageType "Suicide"
  states
  {
  Spawn:
    TNT1 A 0
    TNT1 A 5 bright A_Explode(250,16,1)
    stop
  }  
}