ACTOR DynamiteProjectile
{
	Health 30
	Radius 16
	Height 20
	Speed 3
	Damage 0
	PROJECTILE
	+ISMONSTER
	//-NOBLOCKMAP
	//don't enable this, unless you want to start throwing backwards
	//while you're doing a backpedal throw. Albeit that would make it 
	//actually shootable!
	+BOUNCEONWALLS
	+BOUNCEONCEILINGS
	+BOUNCEONFLOORS
	-NOGRAVITY
	+SHOOTABLE
	+NOBLOOD
	+THRUGHOST
	+BLOODLESSIMPACT
	+NOICEDEATH
	+PUSHABLE
	+FORCERADIUSDMG
	BounceSound "TNT/Bounce"
	BounceFactor 0.5
	WallBounceFactor 0.8
	Gravity 0.6
	Var Int User_ThrowPower;
	Var Int User_Lifespan;
	Var Int User_Cycle;
	DamageType "Sovereign"
	Scale 0.4
	States
	{
		Spawn:
			TNT1 A 0 NoDelay A_SetUserVar("User_Lifespan",28) //Total lifespan of the projectile.
			TNT1 A 0 A_SetUserVar("User_ThrowPower",0) //Initial, additional power.
			TNT1 A 0 A_PlaySound("TNT/Burn",5,0.7,1)
		SetCycle:
			TNT1 A 0 A_TakeFromTarget("TossPower",1) //Takes the token it generated during the hold.
			TNT1 A 0 A_SetUserVar("User_ThrowPower",User_ThrowPower + random(2,3)) //Add the throwing power.
			TNT1 A 0 A_SetUserVar("User_Lifespan",User_Lifespan - 1) //And decrease its general lifespan.
			TNT1 A 0 A_JumpIfInTargetInventory("TossPower",1,"SetCycle") //Do we still have any tokens? If so, repeat the process!
			TNT1 A 0 A_JumpIfInTargetInventory("PowerBerserkDamage",1,"SuperThrow") //In case of strength increase, let's make it fly at lightning speed, heh.
			Goto ApplyPower
		SuperThrow:
			TNT1 A 0 A_SetUserVar("User_ThrowPower",User_ThrowPower + 30)
		ApplyPower: //Let's add the extra speed to it
			TNT1 A 0 //A_ScaleVelocity(Speed+(User_ThrowPower/2))
			TNT1 A 0 A_JumpIf(User_ThrowPower > 32,"ImpactBlast")
			Goto Main
		ImpactBlast:
			TNT1 A 0 A_ChangeFlag("BOUNCEONWALLS",0)
			TNT1 A 0 A_ChangeFlag("BOUNCEONCEILINGS",0)
			TNT1 A 0 A_ChangeFlag("BOUNCEONCEILINGS",0)
		Main:
			TNT1 A 0 A_SetUserVar("User_Cycle",4)
		MainLoop:
			TNTP A 1
			TNTP A 0 A_JumpIf(sqrt((velX * velX) + (velY * velY) + (velZ * velZ)) < 0.4, "HoldStill")
			TNTP AA 0 A_SpawnItemEx("DynamiteTrail",18,0,0,0,0,0,0,SXF_CLIENTSIDE,40)
			TNTP A 1
			TNTP A 0 A_JumpIf(sqrt((velX * velX) + (velY * velY) + (velZ * velZ)) < 0.4, "HoldStill")
			TNTP AA 0 A_SpawnItemEx("DynamiteTrail",18,0,0,0,0,0,0,SXF_CLIENTSIDE,40)
			TNTP A 0 A_SetAngle(Angle + 45)
			
			TNT1 A 0 A_SetUserVar("User_Cycle",User_Cycle - 1)
			TNT1 A 0 A_JumpIf(User_Cycle <= 0,"Reset")
			Loop
		Reset:
			TNT1 A 0 A_SetUserVar("User_Lifespan",User_Lifespan - 1) //Let's make use of the time that's still left...
			TNT1 A 0 A_JumpIf(User_Lifespan <= 0, "XDeath") //...else it's gonna hurt, heh.
			Goto Main
		HoldStill: //Death:
			TNTP A 0 A_ChangeFlag("NOGRAVITY",1)
			TNTP A 0 A_ChangeFlag("FLOORCLIP",1)
			TNTP A 0 A_Stop
			TNT1 A 0 A_SetUserVar("User_Cycle",2)
		Main2:
			TNTP AA 0 A_SpawnItemEx("DynamiteTrail",18,0,0,0,0,0,0,SXF_CLIENTSIDE,40)
			TNTP B 1 A_JumpIfCloser(40, "KickDatShite")
			TNTP AA 0 A_SpawnItemEx("DynamiteTrail",18,0,0,0,0,0,0,SXF_CLIENTSIDE,40)
			TNTP B 1 A_JumpIfCloser(40, "KickDatShite")
			
			TNTP AA 0 A_SpawnItemEx("DynamiteTrail",18,0,0,0,0,0,0,SXF_CLIENTSIDE,40)
			TNTP C 1 A_JumpIfCloser(40, "KickDatShite")
			TNTP AA 0 A_SpawnItemEx("DynamiteTrail",18,0,0,0,0,0,0,SXF_CLIENTSIDE,40)
			TNTP C 1 A_JumpIfCloser(40, "KickDatShite")
			
			TNTP AA 0 A_SpawnItemEx("DynamiteTrail",18,0,0,0,0,0,0,SXF_CLIENTSIDE,40)
			TNTP D 1 A_JumpIfCloser(40, "KickDatShite")
			TNTP AA 0 A_SpawnItemEx("DynamiteTrail",18,0,0,0,0,0,0,SXF_CLIENTSIDE,40)
			TNTP D 1 A_JumpIfCloser(40, "KickDatShite")


			TNT1 A 0 A_SetUserVar("User_Cycle",User_Cycle - 1)
			TNT1 A 0 A_JumpIf(User_Cycle <= 0,"Reset2")
			Loop
		Reset2:
			TNT1 A 0 A_SetUserVar("User_Lifespan",User_Lifespan - 1)
			TNT1 A 0 A_JumpIf(User_Lifespan <= 0, "XDeath")
			Goto Main2
		KickDatShite:
			TNTP A 0 A_ChangeFlag("NOGRAVITY",0)
			TNTP A 0 A_ChangeFlag("FLOORCLIP",0)
			TNT1 A 0 A_FaceTarget
			TNT1 A 0 ACS_NamedExecuteAlways("It's a Football, Luigi") //A_ChangeVelocity(frandom(20.0,-25.0),0,frandom(6.0,10.0),CVF_RELATIVE)
			TNTP AAAA 2
			TNT1 A 0 A_SetUserVar("User_Lifespan",User_Lifespan - 1)
			TNT1 A 0 A_JumpIf(User_Lifespan <= 0, "XDeath") 
			Goto Main
		Death:
		XDeath:
			TNT1 A 0 A_Stop
			TNT1 A 0 A_SetUserVar("User_Lifespan",14)
			TNT1 A 0 A_PlaySound("TNT/Explosion",5,0.9)
			TNT1 A 0 A_PlaySound("TNT/Add",7)
			TNT1 A 0 A_PlaySound("TNT/Far",6,0.8)
			TNT1 A 0 A_SpawnItemEx("TNTMain",0,0,0,0,0,0,0,SXF_CLIENTSIDE,0)
			TNT1 A 0 A_Quake(3,55,0,768,"none")
			TNT1 A 0 A_Quake(7,55,0,384,"none")
			TNT1 A 0 A_Explode(250,364,0,1)
			TNT1 A 0 A_Explode(150,256,1,1)
		DeathLoop:
			TNT1 A 0 A_SetUserVar("User_Lifespan",User_Lifespan - 1)
			TNT1 A 4 A_Explode(20,364,0,1)
			TNT1 A 0 A_Explode(10,256,1,1)
			TNT1 A 0 A_JumpIf(User_Lifespan <= 0, 1)
			Loop
			TNT1 A 6
			Stop
	}
}

ACTOR DynamiteProjectile2 : DynamiteProjectile
{
	States
	{
		Spawn:
			TNT1 A 0 NoDelay A_SetUserVar("User_Lifespan",28) //Total lifespan of the projectile.
			TNT1 A 0 A_SetUserVar("User_ThrowPower",0) //Initial, additional power.
			TNT1 A 0 A_PlaySound("TNT/Burn",5,0.7,1)
		SetCycle:
			TNT1 A 0 A_TakeFromTarget("TossPower2",1) //Takes the token it generated during the hold.
			TNT1 A 0 A_SetUserVar("User_ThrowPower",User_ThrowPower + random(2,3)) //Add the throwing power.
			TNT1 A 0 A_SetUserVar("User_Lifespan",User_Lifespan - 1) //And decrease its general lifespan.
			TNT1 A 0 A_JumpIfInTargetInventory("TossPower2",1,"SetCycle") //Do we still have any tokens? If so, repeat the process!
			TNT1 A 0 A_JumpIfInTargetInventory("PowerBerserkDamage",1,"SuperThrow") //In case of strength increase, let's make it fly at lightning speed, heh.
			Goto ApplyPower
		SuperThrow:
			TNT1 A 0 A_SetUserVar("User_ThrowPower",User_ThrowPower + 30)
		ApplyPower: //Let's add the extra speed to it
			TNT1 A 0 //A_ScaleVelocity(Speed+(User_ThrowPower/2))
			TNT1 A 0 A_JumpIf(User_ThrowPower > 32,"ImpactBlast")
			Goto Main
		ImpactBlast:
			TNT1 A 0 A_ChangeFlag("BOUNCEONWALLS",0)
			TNT1 A 0 A_ChangeFlag("BOUNCEONCEILINGS",0)
			TNT1 A 0 A_ChangeFlag("BOUNCEONCEILINGS",0)
		Main:
			TNT1 A 0 A_SetUserVar("User_Cycle",4)
		MainLoop:
			TNTP A 1
			TNTP A 0 A_JumpIf(sqrt((velX * velX) + (velY * velY) + (velZ * velZ)) < 0.4, "HoldStill")
			TNTP AA 0 A_SpawnItemEx("DynamiteTrail",18,0,0,0,0,0,0,SXF_CLIENTSIDE,40)
			TNTP A 1
			TNTP A 0 A_JumpIf(sqrt((velX * velX) + (velY * velY) + (velZ * velZ)) < 0.4, "HoldStill")
			TNTP AA 0 A_SpawnItemEx("DynamiteTrail",18,0,0,0,0,0,0,SXF_CLIENTSIDE,40)
			TNTP A 0 A_SetAngle(Angle - 45)
			
			TNT1 A 0 A_SetUserVar("User_Cycle",User_Cycle - 1)
			TNT1 A 0 A_JumpIf(User_Cycle <= 0,"Reset")
			Loop
	}
}

ACTOR DynamiteTooLate
{
	+NOINTERACTION
	var int User_Lifespan;
	States
	{
		Spawn:
			TNT1 A 0 NoDelay A_SetUserVar("User_Lifespan",14)
			TNT1 A 0 A_PlaySound("TNT/Explosion",5,0.9)
			TNT1 A 0 A_PlaySound("TNT/Add",7)
			TNT1 A 0 A_PlaySound("TNT/Far",6,0.8)
			TNT1 A 0 A_SpawnItemEx("TNTMain",0,0,0,0,0,0,0,SXF_CLIENTSIDE,0)
			TNT1 A 0 A_Quake(3,55,0,768,"none")
			TNT1 A 0 A_Quake(7,55,0,384,"none")
			TNT1 A 0 A_Explode(250,364,0,1)
			TNT1 A 0 A_Explode(150,256,1,1)
		DeathLoop:
			TNT1 A 0 A_SetUserVar("User_Lifespan",User_Lifespan - 1)
			TNT1 A 4 A_Explode(20,364,0,1)
			TNT1 A 0 A_Explode(10,256,1,1)
			TNT1 A 0 A_JumpIf(User_Lifespan <= 0, 1)
			Loop
			TNT1 A 6
			Stop
	}
}
ACTOR DynamiteTrail : IgnitionSmoke
{
	States
	{
		Spawn:
			TNT1 A 0 NoDelay A_ScaleVelocity(frandom(0.7,1.1))
			Goto SetupSprite
		SetupScale:
			"####" "#" 0 A_SetScale(frandom(0.03, 0.05))
		FadeIn:
			"####" "#" 1 A_FadeIn(FRandom(0.01, 0.03))
			"####" "#" 0 A_ChangeVelocity(frandom(-0.03, 0.03), frandom(-0.03, 0.03), frandom(-0.01, 0.03), 0)
			"####" "#" 0 A_SetScale(ScaleX + FRandom(0.0005, 0.00025))
			"####" "#" 0 A_JumpIf(Alpha >= 0.3, "FadeOut")
			Loop
		FadeOut:
			"####" "#" 1 A_FadeOut(FRandom(0.01,0.005))
			"####" "#" 0 A_ChangeVelocity(frandom(-0.03, 0.03), frandom(-0.03, 0.03), frandom(-0.01, 0.03), 0)
			"####" "#" 0 A_SetScale(ScaleX + FRandom(0.0005, 0.00025))
			Loop
	}
}