

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

//Heretic variant.

actor Doosk_WoodParticle
{
PROJECTILE
	+missile
//+NOCLIP
-NOGRAVITY
+DONTSPLASH
 -ALWAYSRESPAWN
Height 4
Radius 4
Speed 3
Gravity 0.3

  Scale 0.4
   BounceFactor 0.3

	States
	{
	Spawn:
		TNT1 AA 0 ThrustThingZ(0,random(2,6),0,1)
	Choose:	
		TNT1 A 0 A_Jump(255,"Break01","Break02","Break03","Break04","Break05","Break06","Break07","Break08","Break09","Break00")
		Break01:
		BRWD AAAA 5
		Loop
		Break02:
		BRWD BBBB 5 
		Loop
		Break03:
		BRWD CCCC 5 
		Loop
		Break04:
		BRWD DDDD 5 
		Loop
		Break05:
		BRWD EEEE 5 
		Loop
		Break06:
		BRWD FFFF 5 
		Loop
		Break07:
		BRWD GGGG 5 
		Loop
		Break08:
		BRWD HHHH 5 
		Loop
		Break09:
		BRWD IIII 5 
		Loop
		Break00:
		BRWD JJJJ 5 
		Loop

		BreakLoop:
		BRWD "#" 10 
		Loop


		Death:
		BRWD "#" 35 A_Stop
		BRWD "#" 35 
		BRWD "#" 2  A_FadeOut(0.03)
		Wait




	}
}




Actor Doosk_HereticBarrel : SwitchableDecoration replaces Barrel
{
	Activation THINGSPEC_Activate | THINGSPEC_Switch | THINGSPEC_Default | THINGSPEC_ThingTargets
	+USESPECIAL
	Health 20
	Radius 12
	Height 32
	-SOLID
	-SHOOTABLE
	+NOBLOOD
	+ACTIVATEMCROSS
	+DONTGIB
	+NOICEDEATH
	+OLDRADIUSDMG
	DeathSound "Projectile/explosive"
	Obituary "$BARRELCTCH_OB" // "%o went boom."
Scale 0.315
	States
	{
	NoPickup:
		WBRL A 6 A_ChangeFlag("SOLID", true)
		Goto Spawn
	Spawn:
		TNT1 A 0 Nodelay A_JumpIfCloser(39, "TooClose")
		WBRL A 6 A_ChangeFlag("SOLID", true)
		Goto Spawn+1

	TooClose:
		WBRL A 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_HereticBarrelWeapon")
				TNT1 A 1 A_SelectWeapon("Doosk_HereticBarrelWeapon")
		TNT1 A 35 A_ChangeFlag("NOINTERACTION", true)
		Stop
	Death:
		TNT1 A 2 Bright A_ChangeFlag("USESPECIAL", false) // Don't pick up barrel already exploding
		TNT1 AAAAAAAAAA 0 A_CustomMissile("Doosk_WoodParticle",32,0,random(0,359))
		TNT1 A 2 Bright A_PlaySound("wood/break")

		BEXP E 0 Bright
		Wait
	}
}

Actor Doosk_HereticBarrelWeapon : DuskWeapon
{
	+WEAPON.AMMO_OPTIONAL
	+NOINTERACTION
	+NOALERT
	+CHEATNOTWEAPON
	Inventory.Pickupmessage ""
	Weapon.UpSound "pistol/raise"
	Tag "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:

		BARL B 1 A_WeaponReady(WRF_NOSWITCH)
		Loop
		
		
/*
	Ready_Throw:		
		TNT1 A 1 A_WeaponReady(WRF_NOFIRE)
		Wait
*/
	Deselect:	
//		TNT1 A 0 A_SpawnItemEx("Doosk_HereticBarrel", 32,0,0, 2,0,1, 0)
//		TNT1 A 8 A_GunFlash("PreviousWeapon")
		TNT1 A 35 A_TakeInventory("Doosk_HereticBarrelWeapon")
		Wait
	Select:		
		BARL B 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_HereticBarrelThrown", 0, false)
		TNT1 A 8 A_GunFlash("PreviousWeapon")
		TNT1 A 2 A_TakeInventory("Doosk_HereticBarrelWeapon")
		Goto Ready

	AltFire:	
		TNT1 A 0 A_SpawnItemEx("Doosk_HereticBarrel", 32,0,0, 2,0,1, 0)
		TNT1 A 8 A_GunFlash("PreviousWeapon")
		TNT1 A 2 A_TakeInventory("Doosk_HereticBarrelWeapon")
		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_HereticBarrelThrown
{
	Projectile
	Gravity 0.25 -NOGRAVITY
	Damage (325) +FORCEPAIN
	Speed 33
	health 2
	-SHOOTABLE
	+NOBLOOD
	+NOICEDEATH
	+OLDRADIUSDMG
	Obituary "$BARRELTHRW_OB"
Scale 0.315
//	-NOBLOCKMAP//makes projectile shootable midair
	States
	{
	Spawn:
		WBRL A 3 NoDelay
		WBRL A 3 A_ChangeFlag("NoBlockmap", false)
		WBRL A 6 
		Loop
	Death:
		TNT1 AAAAAAAAAA 0 A_CustomMissile("Doosk_WoodParticle",32,0,random(0,359))
		TNT1 A 2 Bright A_PlaySound("wood/break")
		TNT1 A 2 Bright
		TNT1 A 0 Bright
		Stop

	Crash:
	Xdeath:	//Direct hit
		TNT1 A 0 A_Jump(78,"Death")

		TNT1 A 0 A_PlaySound("wood/impact")
		TNT1 A 35 A_SpawnItemEx("Doosk_HereticBarrel")
		Stop

	}
}

