

//An explosive barrel you can pick up and throw.
//Code 95% made by Michaelis, with some alphaent's minor tweaks.


Actor Doosk_ExplosiveBarrel : SwitchableDecoration replaces ExplosiveBarrel
{
	Activation THINGSPEC_Activate | THINGSPEC_Switch | THINGSPEC_Default | THINGSPEC_ThingTargets
	+USESPECIAL
	Health 20
	Radius 10
	Height 42
	-SOLID
	+SHOOTABLE
	+NOBLOOD
	+ACTIVATEMCROSS
	+DONTGIB
	+NOICEDEATH
	+OLDRADIUSDMG
 -ALWAYSRESPAWN
 DeathSound "Projectile/explosive"
	Obituary "$OB_BARREL" // "%o went boom."
Scale 0.325
	States
	{
	NoPickup:
		BRL2 AA 6 A_ChangeFlag("SOLID", true)
		Goto Spawn+1
	Spawn:
		TNT1 A 0 Nodelay A_JumpIfCloser(37, "TooClose")
		BRL2 AA 6 A_ChangeFlag("SOLID", true)
		Goto Spawn+1

	TooClose:
		BRL2 AA 6 A_ChangeFlag("SOLID", false)
		Goto Spawn

	Active:
	Inactive:
		TNT1 A 0 A_JumpIfInTargetInventory("Doosk_ExplosiveBarrelWeapon",1,"NoPickup")
		TNT1 A 0 A_JumpIfInTargetInventory("Doosk_HereticBarrelWeapon",1,"NoPickup")
		TNT1 A 0 A_JumpIfInTargetInventory("Doosk_SoapWeapon",1,"NoPickup")
		TNT1 A 0 A_GiveToTarget("Doosk_ExplosiveBarrelWeapon")
				TNT1 A 1 A_SelectWeapon("Doosk_ExplosiveBarrelWeapon")
		TNT1 A 35 A_ChangeFlag("NOINTERACTION", true)
		Stop
	Death:
		BRL2 A 5 Bright A_ChangeFlag("USESPECIAL", false) // Don't pick up barrel already exploding
		BRL2 A 5 Bright A_Scream
		BRL2 A 5 Bright
		BEXP D 0 Bright A_Explode
		TNT1 A 0 A_Explode(50,128,0,0,96)	//Additional 50 dmg for monsters only.
MISL B 0 A_SpawnItemEx("Dusk_RocketExplodeVisualAir",0,0,0,0,0,0,0,32)
		BEXP E 0 Bright
		TNT1 A 1065 Bright A_BarrelDestroy
		TNT1 A 5 A_Respawn
		Wait
	}
}

Actor Doosk_ExplosiveBarrelWeapon : DuskWeapon
{
	+WEAPON.AMMO_OPTIONAL
	+NOINTERACTION
	+NOALERT
	+CHEATNOTWEAPON
	+NOAUTOAIM
	Inventory.Pickupmessage ""
	Weapon.UpSound "pistol/raise"
	Tag "Explosive Barrel"
	Obituary "$BARRELCTCH_OB"
	States
	{
	Ready:
//		TNT1 A 0 ACS_NamedExecuteWithResult("CrossbowRecoil", 0, 10125)//4.25 ; 10.125
//		TNT1 A 0 SetPlayerProperty(0,1,PROP_INSTANTWEAPONSWITCH) //Insta Weapon switch
//	ReadyCont:

		BAR1 CCCCCCDDDDDD 1 A_WeaponReady(WRF_NOSWITCH)
		Loop
		
		
/*
	Ready_Throw:		
		TNT1 A 1 A_WeaponReady(WRF_NOFIRE)
		Wait
*/
	Deselect:	
//		TNT1 A 0 A_SpawnItemEx("Doosk_ExplosiveBarrel", 32,0,0, 2,0,1, 0)
//		TNT1 A 8 A_GunFlash("PreviousWeapon")
		TNT1 A 35 A_TakeInventory("Doosk_ExplosiveBarrelWeapon")
		Wait
	Select:		
		BAR1 C 0 A_Raise
		Wait
	Fire:
//		TNT1 A 0 A_JumpIfCloser(72, "AltFire")
		TNT1 A 0 A_PlaySound("sickles/fire", CHAN_WEAPON)
		TNT1 A 0 A_FireCustomMissile("Doosk_ExplosiveBarrelThrown", 0, false)
		TNT1 A 8 A_GunFlash("PreviousWeapon")
		TNT1 A 2 A_TakeInventory("Doosk_ExplosiveBarrelWeapon")
		Goto Ready

	AltFire:	
		TNT1 A 0 A_SpawnItemEx("Doosk_ExplosiveBarrel", 32,0,0, 2,0,1, 0)
		TNT1 A 8 A_GunFlash("PreviousWeapon")
		TNT1 A 2 A_TakeInventory("Doosk_ExplosiveBarrelWeapon")
		Goto Ready



	PreviousWeapon:
TNT1 A 0 A_JumpIfInventory("SetWeaponMemory",13,"ChangeW13")
TNT1 A 0 A_JumpIfInventory("SetWeaponMemory",12,"ChangeW12")
TNT1 A 0 A_JumpIfInventory("SetWeaponMemory",11,"ChangeW11")
TNT1 A 0 A_JumpIfInventory("SetWeaponMemory",10,"ChangeW10")
TNT1 A 0 A_JumpIfInventory("SetWeaponMemory",9,"ChangeW09")
TNT1 A 0 A_JumpIfInventory("SetWeaponMemory",8,"ChangeW08")
TNT1 A 0 A_JumpIfInventory("SetWeaponMemory",7,"ChangeW07")
TNT1 A 0 A_JumpIfInventory("SetWeaponMemory",6,"ChangeW06")
TNT1 A 0 A_JumpIfInventory("SetWeaponMemory",5,"ChangeW05")
TNT1 A 0 A_JumpIfInventory("SetWeaponMemory",4,"ChangeW04")
TNT1 A 0 A_JumpIfInventory("SetWeaponMemory",3,"ChangeW03")
TNT1 A 0 A_JumpIfInventory("SetWeaponMemory",2,"ChangeW02")
		Goto ChangeW01

	ChangeW01:	TNT1 A 0 A_SelectWeapon("Dusk_Sickles")				Goto LightAlmostDone
	ChangeW02:	TNT1 A 0 A_SelectWeapon("Dusk_Sword")				Goto LightAlmostDone
	ChangeW03:	TNT1 A 0 A_SelectWeapon("Dusk_Pistol")				Goto LightAlmostDone
	ChangeW04:	TNT1 A 0 A_SelectWeapon("Dusk_Pistol2")				Goto LightAlmostDone
	ChangeW05:	TNT1 A 0 A_SelectWeapon("Dusk_Winchester")				Goto LightAlmostDone
	ChangeW06:	TNT1 A 0 A_SelectWeapon("Dusk_Winchester2")				Goto LightAlmostDone	
	ChangeW07:	TNT1 A 0 A_SelectWeapon("Dusk_SuperShotgun")			Goto LightAlmostDone
	ChangeW08:	TNT1 A 0 A_SelectWeapon("Dusk_AssRifle")			Goto LightAlmostDone
	ChangeW09:	TNT1 A 0 A_SelectWeapon("Dusk_Sniper")				Goto LightAlmostDone
	ChangeW10:	TNT1 A 0 A_SelectWeapon("Dusk_Crossbow")			Goto LightAlmostDone
	ChangeW11:	TNT1 A 0 A_SelectWeapon("Dusk_Mortar")		Goto LightAlmostDone
	ChangeW12:	TNT1 A 0 A_SelectWeapon("Dusk_Riveter")		Goto LightAlmostDone
	ChangeW13:	TNT1 A 0 A_SelectWeapon("Dusk_Cigar")			Goto LightAlmostDone

	LightAlmostDone:
		TNT1 A 2 Bright
//		TNT1 A 0 SetPlayerProperty(0,0,PROP_INSTANTWEAPONSWITCH) //Insta Weapon switch
		Goto LightDone

	Spawn:
		TNT1 A 0
		Stop
	}
}

Actor Doosk_ExplosiveBarrelThrown
{
	Projectile
	Gravity 0.25 -NOGRAVITY
	Damage (325) +FORCEPAIN
	Speed 33
	health 2
	+SHOOTABLE
	+NOBLOOD
	+NOICEDEATH
	+OLDRADIUSDMG
	Obituary "$BARRELTHRX_OB"
Scale 0.325
//	-NOBLOCKMAP//makes projectile shootable midair
	States
	{
	Spawn:
		BRL2 A 3 NoDelay
		BRL2 A 3 A_ChangeFlag("NoBlockmap", false)
		BRL2 A 6 
		Loop
	Death:
		BRL2 A 2 Bright A_NoGravity
		BRL2 A 2 Bright A_PlaySound("Projectile/explosive")
		BRL2 A 2 Bright
		BEXP D 0 Bright A_Explode
		TNT1 A 0 A_Explode(50,128,0,0,96)	//Additional 50 dmg for monsters only.
MISL B 0 A_SpawnItemEx("Dusk_RocketExplodeVisualAir",0,0,0,0,0,0,0,32)
		BEXP E 0 Bright
		Stop

	Crash:
	Xdeath:	//Direct hit
		TNT1 A 0 A_Jump(78,"Death")
		TNT1 A 0 A_PlaySound("barrel/impact")
		TNT1 A 35 A_SpawnItemEx("Doosk_ExplosiveBarrel")
		Stop

	}
}

