

//A bar of soap you can pick up and throw. Just like barrels, but with minor tweaks.
//Code 95% made by Michaelis, with some alphaent's minor tweaks.


ACTOR SoapFX
{
	+NOBLOCKMAP
+NOINTERACTION
+NOGRAVITY
//	Gravity 0.125
	RenderStyle Add
	Scale 0.1
	States
	{
	Spawn:
		BUBB L 2 BRIGHT A_Fadeout(0.03)
		Loop
	}
}


ACTOR LoveSoapFX : SoapFX
{
	alpha 0.5
	States
	{
	Spawn:
		BUBB H 2 BRIGHT A_Fadeout(0.03)
		Loop
	}
}







Actor SoapTypeCheck 
{
	Monster
	+NONSHOOTABLE
	-SHOOTABLE
	+NOINTERACTION
	-COUNTKILL
	States
	{
	Spawn:
		TNT1 A 1

	  TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("MultiplayerCheck",0,0,0,0) == 2,"Soap")
		TNT1 A 0
TNT1 A 0 A_JumpIf(CallACS("lovesoap") == 1,"Love")

	soap:	TNT1 A 0 A_SpawnItemEx("Doosk_Soap",0,0,0,0,0,0,0,SXF_SETMASTER|SXF_NOCHECKPOSITION|SXF_TRANSFERAMBUSHFLAG)	Goto End
	love:	TNT1 A 0 A_SpawnItemEx("Doosk_LoveSoap",0,0,0,0,0,0,0,SXF_SETMASTER|SXF_NOCHECKPOSITION|SXF_TRANSFERAMBUSHFLAG)	Goto End
	
	//-------------------------------------------------------------------------------------------------------
	//	Special / End of spawner states
	//-------------------------------------------------------------------------------------------------------
	End:
		TNT1 A 1 A_Die
		Wait
	Death:
		TNT1 A 1
		Stop
	}
}



Actor Doosk_Soap : SwitchableDecoration //replaces ExplosiveBarrel
{
	Activation THINGSPEC_Activate | THINGSPEC_Switch | THINGSPEC_Default | THINGSPEC_ThingTargets
	+USESPECIAL
//	Health 200
	Radius 6
	Height 10
	-SOLID
	-SHOOTABLE
	+NOBLOOD
	+ACTIVATEMCROSS
	+DONTGIB
	+NOICEDEATH
	+OLDRADIUSDMG
	DeathSound "world/barrelx"
	Obituary "$SOAPCTCH_OB" // "%o went boom."
	Scale 0.175
	States
	{
	NoPickup:
	Spawn:
//		TNT1 A 0 Nodelay A_JumpIfCloser(13, "TooClose")
//	  TNT1 A 2
		TNT1 A 0 NoDelay ACS_NamedExecuteWithResult("ZA_RemoveIfDuel")
		SOAP B 12 A_SpawnItemEx("SoapFX", random2[BoltSpark]()*0.015625, random2[BoltSpark]()*0.015625, 3, 0,0,0,0,SXF_ABSOLUTEPOSITION, 50)//A_ChangeFlag("SOLID", true)
		Loop//Goto Spawn+1


	Active:
	Inactive:
		TNT1 A 0 A_JumpIfInTargetInventory("Doosk_SoapWeapon",1,"NoPickup")
		TNT1 A 0 A_JumpIfInTargetInventory("Doosk_ExplosiveBarrelWeapon",1,"NoPickup")
		TNT1 A 0 A_JumpIfInTargetInventory("Doosk_HereticBarrelWeapon",1,"NoPickup")
		TNT1 A 0 A_GiveToTarget("Doosk_SoapWeapon")
		TNT1 A 35 A_ChangeFlag("NOINTERACTION", true)
		Stop
	}
}


Actor Doosk_LoveSoap : Doosk_Soap //replaces ExplosiveBarrel
{
	States
	{
	NoPickup:
	Spawn:
//		TNT1 A 0 Nodelay A_JumpIfCloser(13, "TooClose")
		SOAP D 12 A_SpawnItemEx("LoveSoapFX", random2[BoltSpark]()*0.015625, random2[BoltSpark]()*0.015625, 3, 0,0,0,0,SXF_ABSOLUTEPOSITION, 50)//A_ChangeFlag("SOLID", true)
		Loop//Goto Spawn+1

	}
}



Actor Doosk_SoapWeapon : DuskWeapon
{
//	Weapon.AmmoUse 0
//	Weapon.AmmoGive 0
//	Weapon.AmmoType "Clip"
	Obituary "$SOAPCTCH_OB"
	+WEAPON.AMMO_OPTIONAL
	+NOINTERACTION
	+NOALERT
	+CHEATNOTWEAPON
	+NOAUTOAIM
	Inventory.Pickupmessage ""
	Weapon.UpSound "pistol/raise"
	Tag "Soap"
	States
	{
	Ready:
//		TNT1 A 0 SetPlayerProperty(0,1,PROP_INSTANTWEAPONSWITCH) //Insta Weapon switch

TNT1 A 0 A_JumpIf(CallACS("Lovesoap")==1, "LoveReady")
		SOAP A 6 A_WeaponReady(WRF_NOSWITCH)
	TNT1 A 0 A_SpawnItemEx("SoapFX", random2[BoltSpark]()*0.015625, random2[BoltSpark]()*0.015625, 32, 0,0,0,0,SXF_ABSOLUTEPOSITION, 50)
		Loop
		

	LoveReady:
		SOAP C 6 A_WeaponReady(WRF_NOSWITCH)
	TNT1 A 0 A_SpawnItemEx("LoveSoapFX", random2[BoltSpark]()*0.015625, random2[BoltSpark]()*0.015625, 32, 0,0,0,0,SXF_ABSOLUTEPOSITION, 50)
		Loop

		
/*
	Ready_Throw:		
		TNT1 A 1 A_WeaponReady(WRF_NOFIRE)
		Wait
*/
	Deselect:	
//		TNT1 A 0 A_SpawnItemEx("Doosk_Soap", 32,0,0, 2,0,1, 0)
//		TNT1 A 8 A_GunFlash("PreviousWeapon")
		TNT1 A 35 A_TakeInventory("Doosk_SoapWeapon")
		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_JumpIf(CallACS("Lovesoap")==1, "LoveFire")
		TNT1 A 0 A_FireCustomMissile("Doosk_SoapThrown", 0, false)
		TNT1 A 8 A_GunFlash("PreviousWeapon")
		TNT1 A 2 A_TakeInventory("Doosk_SoapWeapon")
		Goto Ready

	LoveFire:
		TNT1 A 0 A_FireCustomMissile("Doosk_LoveSoapThrown", 0, false)
		TNT1 A 8 A_GunFlash("PreviousWeapon")
		TNT1 A 2 A_TakeInventory("Doosk_SoapWeapon")
		Goto Ready


	AltFire:	
TNT1 A 0 A_JumpIf(CallACS("Lovesoap")==1, "LoveAltFire")
		TNT1 A 0 A_SpawnItemEx("Doosk_Soap", 32,0,0, 2,0,1, 0)
		TNT1 A 8 A_GunFlash("PreviousWeapon")
		TNT1 A 2 A_TakeInventory("Doosk_SoapWeapon")
		Goto Ready

	LoveAltFire:	
		TNT1 A 0 A_SpawnItemEx("Doosk_LoveSoap", 32,0,0, 2,0,1, 0)
		TNT1 A 8 A_GunFlash("PreviousWeapon")
		TNT1 A 2 A_TakeInventory("Doosk_SoapWeapon")
		Goto Ready



//This will most likely be transformed into acs on next update.

	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_SoapThrown
{
	Projectile
	Gravity 0.25 -NOGRAVITY
	Damage (1000000) +FORCEPAIN
	Speed 40
	Radius 6
	Height 10
//	health 200
	-SHOOTABLE
	+NOBLOOD
	+THRUGHOST//Added for testing purposes, it might be taken down on june's update.
	+NOICEDEATH
	+OLDRADIUSDMG
	Scale 0.175
	Obituary "$SOAPTHRW_OB"
//	-NOBLOCKMAP//makes projectile shootable midair
	States
	{
	Spawn:
		SOAP BBB 1 NoDelay A_SpawnItemEx("SoapFX", random2[BoltSpark]()*0.015625, random2[BoltSpark]()*0.015625, 0, 0,0,0,0,SXF_ABSOLUTEPOSITION, 50)

		SOAP B 0 A_ChangeFlag("NoBlockmap", false)
		SOAP BBBBBBBBB 1 A_SpawnItemEx("SoapFX", random2[BoltSpark]()*0.015625, random2[BoltSpark]()*0.015625, 0, 0,0,0,0,SXF_ABSOLUTEPOSITION, 50)
//		SOAP B 6 //NoDelay
		Loop//Goto Spawn+1

	Death:
	Crash:
	XDeath:
		TNT1 A 0 A_PlaySound("soap/impact")
		TNT1 A 35 A_SpawnItemEx("Doosk_Soap")
		Stop

	}
}



Actor Doosk_LoveSoapThrown : Doosk_SoapThrown
{
	Obituary "$LOVESOAP_OB"
//	-NOBLOCKMAP//makes projectile shootable midair
	States
	{
	Spawn:
		SOAP DDD 1 NoDelay A_SpawnItemEx("LoveSoapFX", random2[BoltSpark]()*0.015625, random2[BoltSpark]()*0.015625, 0, 0,0,0,0,SXF_ABSOLUTEPOSITION, 50)

		SOAP D 0 A_ChangeFlag("NoBlockmap", false)
		SOAP DDDDDDDDD 1 A_SpawnItemEx("LoveSoapFX", random2[BoltSpark]()*0.015625, random2[BoltSpark]()*0.015625, 0, 0,0,0,0,SXF_ABSOLUTEPOSITION, 50)
//		SOAP B 6 //NoDelay
		Loop
	Death:
	Crash:
	XDeath:
		TNT1 A 0 A_PlaySound("soap/impact")
		TNT1 A 35 A_SpawnItemEx("Doosk_LoveSoap")
		Stop


	}
}
