actor FireGiver : CustomInventory
{
  states
  {
  Pickup:
    TNT1 A 0 A_JumpIfInventory("FireGiver",1,"FailPickup")
    TNT1 A 0 A_SpawnItemEX("ChargedShotFlame",0,0,0,0,0,0,0,SXF_SETTRACER|SXF_TRANSFERPOINTERS)
    stop
  FailPickup:
    TNT1 A 0
	fail
  }
}

ACTOR ChargedShotFlame
{
  +NoDamageThrust
  +ThruGhost
  +THRUSPECIES
  +PIERCEARMOR
  +NOEXTREMEDEATH
  +FORCEXYBILLBOARD
  Renderstyle Add
  Species "Fire"
  DamageType "Fire"
  Gravity 0.4
  Alpha 0.7
  Scale 0.5
  Obituary "%k incinerated %o."
  States
  {
  Death:
	TNT1 A 0
	Stop
  Spawn:
    TNT1 A 0 A_SetScale(1.2)
	TNT1 A 0 A_SetTranslucent(0.7, 1)
	TNT1 A 0 A_CheckFlag("NOBLOOD","Death",AAPTR_TRACER)
    TNT1 A 0 A_CheckFlag("BOSS","Death",AAPTR_TRACER)
	TNT1 A 0 A_JumpIfInventory ("DisasterDOTActive", 875, "DOTStop", AAPTR_TRACER)
	TNT1 A 0 A_JumpIfInventory ("DisasterDOTActive", 1, "DOTStack", AAPTR_TRACER)
	TNT1 A 0 A_JumpIfHealthLower (1, "DeathEnd", AAPTR_TRACER)
	TNT1 AAAAA 0 A_GiveInventory ("DisasterDOTActive", 1, AAPTR_TRACER)
	TNT1 A 0  A_PlaySound("FIRLUP",CHAN_7|CHAN_LOOP|CHAN_NOSTOP,1)
  FlameLoop:
   	TNT1 A 0 A_CheckFlag("COUNTKILL","FlameLoop2",AAPTR_TRACER)
	Goto DeathEnd
  FlameLoop2:
	TNT1 A 0 A_SpawnItemEx("BurningSmoke2", 0, 0, Random(5, 40), FRandom(-0.125,0.125),FRandom(-0.125,0.125),FRandom(0.45,1.5), 0, 128)
	STME AA 1 bright
	{
	A_SpawnItemEx("DisasterShotSmoke", Random(-15, 15), Random(-15, 15), Random(5, 30), FRandom(-0.125,0.125),FRandom(-0.125,0.125),FRandom(0.45,1.5), 0, 128);
	A_SpawnItemEx("BurningSmoke1", Random(-30, 30), Random(-20, 20), Random(5, 40), FRandom(-0.125,0.125),FRandom(-0.125,0.125),FRandom(0.45,1.5), 0, 128);
	A_Warp(AAPTR_TRACER,2, 0, -5, 0, WARPF_NOCHECKPOSITION|WARPF_INTERPOLATE|WARPF_STOP,"",0.2);
	A_Explode((4), 10, 0, True, 10, 0);
	A_SpawnItemEx("DisasterShotSmoke", Random(-15, 15), Random(-15, 15), Random(5, 30), FRandom(-0.125,0.125),FRandom(-0.125,0.125),FRandom(0.45,1.5), 0, 128);
	A_SpawnItemEx("BurningSmoke1", Random(-30, 30), Random(-20, 20), Random(5, 40), FRandom(-0.125,0.125),FRandom(-0.125,0.125),FRandom(0.45,1.5), 0, 128);
	}
	TNT1 A 0 A_JumpIfInventory ("HQInvulnerability", 1, "DeathEnd", AAPTR_TRACER)
	TNT1 A 0 A_JumpIfHealthLower (1, "DeathEnd", AAPTR_TRACER)
	TNT1 A 0 A_JumpIfInventory ("DisasterDOTActive", 1, "FlameLoop", AAPTR_TRACER)
	TNT1 A 0 A_CheckFloor("DeathEnd")
    DeathEnd:
	TNT1 A 0 A_SpawnItemEx("BurningSmoke1", 0, 0, Random(5, 40), FRandom(-0.125,0.125),FRandom(-0.125,0.125),FRandom(0.45,1.5), 0, 128)
	TNT1 AAA 2 A_SetSpeed(0) 
	TNT1 A 0 A_StopSound(CHAN_7)
	TNT1 A 0 A_PlaySound("FIROUT", CHAN_7)
	Stop
    DOTStack:
	TNT1 A 0 A_SpawnItemEx("BurningSmoke2", 0, 0, Random(5, 40), FRandom(-0.125,0.125),FRandom(-0.125,0.125),FRandom(0.45,1.5), 0, 128)
	TNT1 A 0 A_JumpIfInventory ("DisasterDOTActive", 875, "DOTStop", AAPTR_TRACER)
	TNT1 AAAAAAAAAA 0 A_GiveInventory ("DisasterDOTActive", 1, AAPTR_TRACER)
    Stop
	DOTStop:
	TNT1 A 0 A_SpawnItemEx("BurningSmoke2", 0, 0, Random(5, 40), FRandom(-0.125,0.125),FRandom(-0.125,0.125),FRandom(0.45,1.5), 0, 128)
	Stop
	}
}

ACTOR DisasterDOTActive : Powerup
{
	+ADDITIVETIME
	Powerup.Duration -1
}

ACTOR DisasterTaserDOTActive : Powerup
{
	+ADDITIVETIME
	Powerup.Duration -1
}

ACTOR BurningSmoke1
{
	+NOGRAVITY
	+NOBLOCKMAP
	+FLOORCLIP
	+FORCEXYBILLBOARD
	+CLIENTSIDEONLY
	+NOINTERACTION
	-SPRITEFLIP
	+ROLLSPRITE
	+INTERPOLATEANGLES
	+MISSILE
	RenderStyle Add
	Scale	0.8
	Alpha	0.5
	Radius 	0
	Height 	0
	VSpeed	2
	States
	{
	Spawn:
        FGFR D 1 bright NoDelay A_ChangeFlag("SPRITEFLIP", random(0,1))
	    FGFR EFGHIJKLMNOPQRS 1 bright { A_FadeOut(0.01,1); A_SetRoll(Roll+frandom(1,8),SPF_INTERPOLATE);}
		Stop
		}
}

ACTOR FlamethrowerSticky
{
  +NoDamageThrust
  +ThruGhost
  +HITTRACER
  +THRUSPECIES
  +PIERCEARMOR
  +NOEXTREMEDEATH
  +FORCEXYBILLBOARD
  Projectile
  Renderstyle Add
  Species "Fire"
  DamageType "Fire"
  Speed 30
  Damage (0)
  Gravity 0.4
  Alpha 0.7
  Scale 0.5
  Obituary "%k incinerated %o with the Molotov."
  States
  {
  Spawn:
    TNT1 A 2 bright
	Stop
  Death:
  Crash:
    TNT1 A 0 bright
	Stop
   XDeath:
    TNT1 A 0 A_SetScale(1.2)
	TNT1 A 0 A_SetTranslucent(0.7, 1)
	TNT1 A 0 A_CheckFlag("NOBLOOD","Crash",AAPTR_TRACER)
    TNT1 A 0 A_CheckFlag("BOSS","Crash",AAPTR_TRACER)
	TNT1 A 0 A_JumpIfInventory ("DisasterDOTActive", 1750, "DOTStop", AAPTR_TRACER)
	TNT1 A 0 A_JumpIfInventory ("DisasterDOTActive", 1, "DOTStack", AAPTR_TRACER)
	TNT1 A 0 A_JumpIfHealthLower (1, "DeathEnd", AAPTR_TRACER)
	TNT1 AAAAA 0 A_GiveInventory ("DisasterDOTActive", 1, AAPTR_TRACER)
  FlameLoop:
   	TNT1 A 0 A_CheckFlag("COUNTKILL","FlameLoop2",AAPTR_TRACER)
	Goto DeathEnd
  FlameLoop2:
	TNT1 A 0 A_SpawnItemEx("BurningSmoke2", 0, 0, Random(5, 40), FRandom(-0.125,0.125),FRandom(-0.125,0.125),FRandom(0.45,1.5), 0, 128)
	STME AA 1 bright
	{
	A_SpawnItemEx("DisasterShotSmoke", Random(-15, 15), Random(-15, 15), Random(5, 30), FRandom(-0.125,0.125),FRandom(-0.125,0.125),FRandom(0.45,1.5), 0, 128);
	A_SpawnItemEx("BurningSmoke2", Random(-30, 30), Random(-20, 20), Random(5, 40), FRandom(-0.125,0.125),FRandom(-0.125,0.125),FRandom(0.45,1.5), 0, 128);
	A_Warp(AAPTR_TRACER,2, 0, -5, 0, WARPF_NOCHECKPOSITION|WARPF_INTERPOLATE|WARPF_STOP,"",0.2);
	A_Explode((1), 10, 0, True, 10, 0);
	A_SpawnItemEx("DisasterShotSmoke", Random(-15, 15), Random(-15, 15), Random(5, 30), FRandom(-0.125,0.125),FRandom(-0.125,0.125),FRandom(0.45,1.5), 0, 128);
	A_SpawnItemEx("BurningSmoke2", Random(-30, 30), Random(-20, 20), Random(5, 40), FRandom(-0.125,0.125),FRandom(-0.125,0.125),FRandom(0.45,1.5), 0, 128);
	}
	TNT1 A 0 A_JumpIfInventory ("HQInvulnerability", 1, "DeathEnd", AAPTR_TRACER)
	TNT1 A 0 A_JumpIfHealthLower (1, "DeathEnd", AAPTR_TRACER)
	TNT1 A 0 A_JumpIfInventory ("DisasterDOTActive", 1, "FlameLoop", AAPTR_TRACER)
	TNT1 A 0 A_CheckFloor("DeathEnd")
    DeathEnd:
	TNT1 A 0 A_SpawnItemEx("BurningSmoke2", 0, 0, Random(5, 40), FRandom(-0.125,0.125),FRandom(-0.125,0.125),FRandom(0.45,1.5), 0, 128)
	TNT1 AAA 2 A_SetSpeed(0) 
	TNT1 A 0 A_StopSound(CHAN_7)
	TNT1 A 0 A_PlaySound("FIROUT", CHAN_7)
	Stop
    DOTStack:
	TNT1 A 0 A_SpawnItemEx("BurningSmoke2", 0, 0, Random(5, 40), FRandom(-0.125,0.125),FRandom(-0.125,0.125),FRandom(0.45,1.5), 0, 128)
	TNT1 A 0 A_JumpIfInventory ("DisasterDOTActive", 1750, "DOTStop", AAPTR_TRACER)
	TNT1 AAAAAAAAAA 0 A_GiveInventory ("DisasterDOTActive", 1, AAPTR_TRACER)
    Stop
	DOTStop:
	TNT1 A 0 A_SpawnItemEx("BurningSmoke2", 0, 0, Random(5, 40), FRandom(-0.125,0.125),FRandom(-0.125,0.125),FRandom(0.45,1.5), 0, 128)
	Stop
	}
}

ACTOR BurningSmoke2
{
	+NOGRAVITY
	+NOBLOCKMAP
	+FLOORCLIP
	+FORCEXYBILLBOARD
	+CLIENTSIDEONLY
	+NOINTERACTION
	-SPRITEFLIP
	+ROLLSPRITE
	+INTERPOLATEANGLES
	+MISSILE
	RenderStyle Add
	Scale	0.8
	Alpha	0.5
	Radius 	0
	Height 	0
	VSpeed	2
	States
	{
	Spawn:
        FLFR D 1 bright NoDelay A_ChangeFlag("SPRITEFLIP", random(0,1))
	    FLFR EFGHIJKLMNO 1 bright { A_FadeOut(0.01,1); A_SetRoll(Roll+frandom(1,8),SPF_INTERPOLATE);}
		Stop
		}
}

ACTOR BurningSmoke3
{
	+NOGRAVITY
	+NOBLOCKMAP
	+FLOORCLIP
	+FORCEXYBILLBOARD
	+CLIENTSIDEONLY
	+NOINTERACTION
	-SPRITEFLIP
	+ROLLSPRITE
	+INTERPOLATEANGLES
	+MISSILE
	RenderStyle Add
	Scale	0.8
	Alpha	0.5
	Radius 	0
	Height 	0
	VSpeed	2
	States
	{
	Spawn:
	    TNT1 A 2
        FLFR D 1 bright A_ChangeFlag("SPRITEFLIP", random(0,1))
	    FLFR EFGHIJKLMNO 1 bright { A_FadeOut(0.01,1); A_SetRoll(Roll+frandom(1,8),SPF_INTERPOLATE);}
		Stop
		}
}

ACTOR TaserShotPuff
{
    Radius 5
    Height 1
    Damagetype "Electro"
    Renderstyle Add
	Scale 0.40
    Damage (0)
	Speed 30
    Projectile
    +NOGRAVITY
    +DontSplash
    +ForceRadiusDmg
    +DontFall
    +FORCEPAIN
    +CAUSEPAIN
    +DONTTHRUST
    +PUFFONACTORS
    +HITTRACER
    +PUFFGETSOWNER
    +BLOODLESSIMPACT
    States
    {
  Spawn:
        TNT1 A 2 bright
	    Stop
  Death:
     Crash:
        TNT1 A 0 bright
	    Stop
     XDeath:
        TNT1 AAAAA 0 A_SpawnItemEx("DisasterShotSmoke",0,0,0,frandom(-0.5,0.5),frandom(-0.5,0.5),frandom(-0.5,0.5),0,160)
        TNT1 A 0 A_playsound("SLDHIT",0)
        TNT1 A 0 A_CheckFlag("BOSS","Crash",AAPTR_TRACER)
    	TNT1 A 0 A_JumpIfInventory ("DisasterTaserDOTActive", 2000, "DOTStop", AAPTR_TRACER)
    	TNT1 A 0 A_JumpIfInventory ("DisasterTaserDOTActive", 1, "DOTStack", AAPTR_TRACER)
	    TNT1 A 0 A_JumpIfHealthLower (1, "Crash", AAPTR_TRACER)
	    TNT1 AAAAA 0 A_GiveInventory ("DisasterTaserDOTActive", 1, AAPTR_TRACER)
	    XDeathLoop:
     	TNT1 A 0 A_CheckFlag("COUNTKILL","XDeathLoop2",AAPTR_TRACER)
	    Goto CrashStop
       XDeathLoop2:
        TNT1 A 1 		
		{ 
		A_warp(AAPTR_TRACER,0,0,32,0,WARPF_NOCHECKPOSITION|WARPF_INTERPOLATE);
		A_SpawnProjectile("TaserStun",0,0,0,CMF_TRACKOWNER|CMF_CHECKTARGETDEAD,0,AAPTR_TRACER);
		A_SpawnItemEx("TaserDebris",random(-15,15),random(-15,15),random(-15,15),random(-1,1),random(-3,3),random(0,1));
		Return A_JumpIfHealthLower (1, "CrashStop", AAPTR_TRACER);
		}
 	    TNT1 A 0 A_JumpIfInventory ("DisasterTaserDOTActive", 1, "XDeathLoop", AAPTR_TRACER)
	    TNT1 A 0 A_CheckFloor("CrashStop")
	    Goto CrashStop
		CrashStop:
		TNT1 A 0
		Stop
        DOTStack:
	    TNT1 A 0 A_SpawnItemEx("TaserDebris",frandom(-0.5,0.5),frandom(-0.5,0.5),frandom(-0.5,0.5),frandom(-0.5,0.5),random(-3,3),random(0,1))
	    TNT1 A 0 A_JumpIfInventory ("DisasterTaserDOTActive", 500, "DOTStop", AAPTR_TRACER)
	    TNT1 AAAAAAAAAA 0 A_GiveInventory ("DisasterTaserDOTActive", 1, AAPTR_TRACER)
        Stop
	    DOTStop:
	    TNT1 A 0 A_SpawnItemEx("TaserDebris",frandom(-0.5,0.5),frandom(-0.5,0.5),frandom(-0.5,0.5),frandom(-0.5,0.5),random(-3,3),random(0,1))
	    Stop
}
}

Actor TaserStun
{
  Radius 8
  Height 8
  Speed 60
  Damage 0
  Projectile
  +FORCEPAIN
  +CAUSEPAIN
  +BLOODLESSIMPACT
  DamageType "Electro"
  States
  {
  Spawn:
    TNT1 A 1
    Loop
  Death:
    TNT1 A 1
    Stop
  }
}