ACTOR DynamiteProjectile
{
	Health 60
	Radius 16
	Height 20
	Speed 3
	Damage 0
	ProjectileKickback 150
	PROJECTILE
	+ISMONSTER
	+FRIENDLY
	+BOUNCEONWALLS
	+BOUNCEONCEILINGS
	+BOUNCEONFLOORS
	+ALLOWBOUNCEONACTORS
	+BOUNCEONACTORS
	-NOGRAVITY
	+SHOOTABLE
	+NOBLOOD
	+THRUGHOST
	+BLOODLESSIMPACT
	+NOICEDEATH
	+CANBOUNCEWATER
	+FORCERADIUSDMG
	+EXTREMEDEATH
	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 "Matriarch"
	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)
			TNT1 A 0 A_JumpIfInTargetInventory("DynamiteBounceCounter",1,"BounceTake")
			Goto SetCycle
		BounceTake:
			TNT1 A 0 A_ChangeFlag("ALLOWBOUNCEONACTORS",0)
			TNT1 A 0 A_ChangeFlag("BOUNCEONACTORS",0)
		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("PowerSuitToken",1,"SlightSuperThrow") //In case of strength increase, let's make it fly at lightning speed, heh.
			TNT1 A 0 A_JumpIfInTargetInventory("PowerBerserkDamage",1,"SuperThrow")
			Goto ApplyPower
		SlightSuperThrow:
			TNT1 A 0 A_SetUserVar("User_ThrowPower",User_ThrowPower + 10)
			TNT1 A 0 A_JumpIfInTargetInventory("PowerBerserkDamage",1,"SuperThrow")
			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_JumpIfInTargetInventory("PowerBerserkDamage",1,2)
			//TNT1 A 0 A_JumpIfInTargetInventory("PowerSuitToken",1,3)
			TNT1 A 0 A_JumpIf(User_ThrowPower > 36,"ImpactBlast")
			//TNT1 A 0 A_Jump(256,2)
			//TNT1 A 0 A_JumpIf(User_ThrowPower > 48,"ImpactBlast")
			TNT1 A 0
			Goto Main
		ImpactBlast:
			TNT1 A 0 A_ChangeFlag("BOUNCEONWALLS",0)
			TNT1 A 0 A_ChangeFlag("BOUNCEONCEILINGS",0)
			TNT1 A 0 A_ChangeFlag("BOUNCEONFLOORS",0)
			TNT1 A 0 A_ChangeFlag("ALLOWBOUNCEONACTORS",0)
			TNT1 A 0 A_ChangeFlag("BOUNCEONACTORS",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(CallACS("DynamiteCheck"), 2)
			TNTP A 0 A_ChangeFlag("NOBLOCKMAP",0)
			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_ChangeFlag("BOUNCEONFLOORS",1)
			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(200,364,0,1)
			TNT1 A 0 A_Explode(200,364,1,1)
			TNT1 A 0 A_ChangeFlag("EXTREMEDEATH",0)
			TNT1 A 0 A_SetDamageType("Fire")
			TNT1 A 1 A_JumpIfInTargetInventory("DynamiteStrat",1,"Strat")
			Goto DeathLoop
		Strat:
			TNT1 A 0 A_PlaySound("Skullfire/Whizz",6)
			TNT1 A 0 A_SpawnItemEx("FirePillarBurner",0,0,0,0,0,0,0,SXF_TRANSFERPOINTERS,0)
		DeathLoop:
			TNT1 A 0 A_SetUserVar("User_Lifespan",User_Lifespan - 1)
			TNT1 A 4 A_Explode(30,364,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("PowerSuitToken",1,"SlightSuperThrow") //In case of strength increase, let's make it fly at lightning speed, heh.
			TNT1 A 0 A_JumpIfInTargetInventory("PowerBerserkDamage",1,"SuperThrow")
			Goto ApplyPower
		SlightSuperThrow:
			TNT1 A 0 A_SetUserVar("User_ThrowPower",User_ThrowPower + 10)
			TNT1 A 0 A_JumpIfInTargetInventory("PowerBerserkDamage",1,"SuperThrow")
			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_JumpIfInTargetInventory("PowerBerserkDamage",1,2)
			//TNT1 A 0 A_JumpIfInTargetInventory("PowerSuitToken",1,3)
			TNT1 A 0 A_JumpIf(User_ThrowPower > 36,"ImpactBlast")
			//TNT1 A 0 A_Jump(256,2)
			//TNT1 A 0 A_JumpIf(User_ThrowPower > 48,"ImpactBlast")
			TNT1 A 0
			Goto Main
		ImpactBlast:
			TNT1 A 0 A_ChangeFlag("BOUNCEONWALLS",0)
			TNT1 A 0 A_ChangeFlag("BOUNCEONCEILINGS",0)
			TNT1 A 0 A_ChangeFlag("BOUNCEONFLOORS",0)
			TNT1 A 0 A_ChangeFlag("ALLOWBOUNCEONACTORS",0)
			TNT1 A 0 A_ChangeFlag("BOUNCEONACTORS",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
	DamageType "Matriarch"
	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)
			TNT1 A 0 A_SetDamageType("Fire")
			TNT1 A 1 A_JumpIfInTargetInventory("DynamiteStrat",1,"Strat")
			Goto DeathLoop
		Strat:
			TNT1 A 0 A_PlaySound("Skullfire/Whizz",6)
			TNT1 A 0 A_SpawnItemEx("FirePillarBurner",0,0,0,0,0,0,0,SXF_TRANSFERPOINTERS,0)
		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
	}
}

//[DoomKrakken]: Custom Stratocaster Enhancement, courtesy of Russian Overkill!

ACTOR FirePillarBurner
{
	+NOGRAVITY
	+NOINTERACTION
	ReactionTime 60
	States
	{
	Spawn:
	TNT1 AA 0 A_Countdown
	TNT1 AA 0 A_SpawnItemEx("FirePillarUpward",random(20,-20),random(20,-20),0,0,0,0,0,SXF_TRANSFERPOINTERS)
	TNT1 A 0 A_SpawnItemEx("Derpflame",random(20,-20),random(20,-20),6,frandom(30.0,25.0),0,0,frandom(0.0,360.0),SXF_TRANSFERPOINTERS)
	TNT1 A 1
	TNT1 A 0 A_Countdown
	TNT1 AA 0 A_SpawnItemEx("FirePillarUpward",random(20,-20),random(20,-20),0,0,0,0,0,SXF_TRANSFERPOINTERS)
	TNT1 A 0 A_SpawnItemEx("Derpflame",random(20,-20),random(20,-20),6,frandom(30.0,25.0),0,0,frandom(0.0,360.0),SXF_TRANSFERPOINTERS)
	TNT1 A 1
	Loop
	Death:
	Stop
	}
}

ACTOR FirePillarUpward
{
	Damage (10)
	Radius 16
	Height 12
	Projectile
	Renderstyle Add
	DamageType Fire
	+SKYEXPLODE
	+FORCEXYBILLBOARD
    Obituary "%o was toasted by %k's zip zop zoobity combustion blast."
	ProjectileKickBack 0
	States
	{
	Spawn:
	TNT1 AA 0 ThrustThingZ(0,10,0,1)
	FPIL ABC 2 Bright A_SpawnItemEx("FirePillarTrail")
	Loop
	Death:
	TNT1 A 0 A_Explode((40),56,0)
	TNT1 A 0 A_PlaySound("Skullchunk/Impact",0,0.9)
	TNT1 AAAAAA 0 A_SpawnItemEx("FirePillarEmber",random(10,-10),random(10,-10),frandom(0.0,10.0),frandom(1.0,15.0),frandom(1.0,15.0),frandom(-5.0,-10.0),frandom(0.0,360.0),SXF_TRANSFERPOINTERS)
	TNT1 AAAAAA 0 A_SpawnItemEx("FirePillarEmber",random(5,-5),random(5,-5),frandom(0.0,5.0),frandom(0.5,7.5),frandom(0.5,7.5),frandom(-2.5,-5.0),frandom(0.0,360.0),SXF_TRANSFERPOINTERS)
	FPIL DEFG 3 Bright
	Stop
	}
}

ACTOR FirePillarTrail
{
	+NOINTERACTION
	+NOGRAVITY
	+FORCEXYBILLBOARD
	Renderstyle Add
	States
	{
	Spawn:
	FPIL A 1 Bright A_FadeOut(0.05)
	FPIL A 0 A_SetScale(ScaleX-0.05,ScaleY-0.05)
	FPIL B 1 Bright A_FadeOut(0.05)
	FPIL A 0 A_SetScale(ScaleX-0.05,ScaleY-0.05)
	FPIL C 1 Bright A_FadeOut(0.05)
	FPIL A 0 A_SetScale(ScaleX-0.05,ScaleY-0.05)
	Loop
	}
}

ACTOR FirePillarEmber
{
	Damage (10)
	Radius 10
	Height 8
	Projectile
	DamageType Fire
	-NOGRAVITY
	+FORCEXYBILLBOARD
	Gravity 0.6
	Renderstyle Add
	ProjectileKickBack 0
	States
	{
	Spawn:
	SNFX JK 2 Bright A_SpawnItemEx("FirePillarEmberTrail")
	Loop
	Death:
	TNT1 A 0 A_PlaySound("Skullfire/Hit",0,0.6)
	TNT1 A 0 A_Explode((20),32,0)
	SNFX LMNO 3 Bright
	Stop
	}
}

ACTOR FirePillarEmberTrail
{
	+NOINTERACTION
	+NOGRAVITY
	+FORCEXYBILLBOARD
	Renderstyle Add
	States
	{
	Spawn:
	SNFX LLMMNNOO 1 Bright A_FadeOut(0.1)
	Stop
	}
}

Actor Derpflame : FastProjectile
{
  Speed 20
  Radius 18
  Height 10
  Damage (10)
  Obituary "%o was incinerated by %k's homing flame."
  DamageType Fire
  +DONTBLAST
  +MISSILE
  +STEPMISSILE
  +DROPOFF
  +NOEXPLODEFLOOR
  +BLOODLESSIMPACT
  +THRUGHOST
  +EXPLODEONWATER
  +SEEKERMISSILE
  +FORCEXYBILLBOARD
  Renderstyle Add
  Alpha 0.99
  MaxStepHeight 36
  Gravity 0.5
  MissileType "DerpflameTrail"
  states
  {
  Spawn:
    TNT1 A 0
	TNT1 A 0 A_PlaySound("Skullfire/Fly",5,1,1)
  Looplet:
    TNT1 A 0 A_Quake(3,2,0,164)
    TNT1 A 0 A_ChangeVelocity (frandom(-4, 4), frandom(-4, 4), frandom(-1.5, 1.5), 0)
	TNT1 A 0 A_SeekerMissile (3, 15, SMF_LOOK,80,10)
    TNT1 A 2
    TNT1 A 0 A_Quake(3,2,0,164)
    TNT1 A 0 A_ChangeVelocity (frandom(-4, 4), frandom(-4, 4), frandom(-1.5, 1.5), 0)
	TNT1 A 0 A_SeekerMissile (3, 15, SMF_LOOK,80,10)
    TNT1 A 2
    Loop
  Crash:
  Death:
    TNT1 A 0 A_Explode((40),92,0,0)
	TNT1 A 0 A_PlaySound("Skullchunk/Impact")
	ERFL IJKLM 3 Bright
    stop
  }
}

ACTOR DerpflameTrail
{
  +NOINTERACTION
  +FORCEXYBILLBOARD
  Renderstyle Add
  Alpha 0.9
  States
  {
  Spawn:
  ERFL AABBCCDDEEFFGGHH 1 Bright A_FadeOut(0.05)
  Stop
  }
}
