ACTOR ThunderSpawner : FastProjectile
{
	Radius 3
	Height 3
	Projectile
	Damage 0
	Speed 300
	+EXPLODEONWATER
	+NOGRAVITY
	//+THRUACTORS
	+SKYEXPLODE
	+DONTREFLECT
	+DONTBLAST
	States
	{
	Spawn:
	TNT1 A 1
	Loop
	Death:
	TNT1 A 0 A_PlaySound("Thunderstruck/Bolt")
	TNT1 A 1 A_CustomMissile("ThunderFromSky",0,0,0,CMF_AIMDIRECTION|CMF_TRACKOWNER) //Each time I use custommissile to spawn anything makes me feel like I am slaughtering poor code... it just ain't right, but if I want to make this thing spawn properly on goddamn ceiling... I have no other choice, I guess.
	Stop
	}
}

ACTOR ThunderFromSky
{
	Radius 2
	Height 2
	Projectile
	Damage 0
	Speed 0
	+SPAWNCEILING
	+CEILINGHUGGER //Just in case.
	+NOINTERACTION
	+NOCLIP
	+DONTBLAST
	States
	{
	Spawn:
	TNT1 A 0
	TNT1 A 1 A_CustomMissile("LightningFall",0,0,0,CMF_AIMDIRECTION|CMF_TRACKOWNER) //I'd use spawnitemex here, but I don't trust the transferpointers in concjuction with custommissiles...
	Stop
	}
}

ACTOR LightningFall
{
	Radius 2
	Height 2
	Projectile
	ProjectileKickback 300
	Obituary "%o was violently zapped by %k's call for thunder."
	Damage 90
	-NOGRAVITY
	+RIPPER
	+BLOODLESSIMPACT
	+DONTREFLECT
	+FORCERADIUSDMG
	+DONTBLAST
	Gravity 12
	DamageType Lightning
	States
	{
	Spawn:
	TNT1 AAA 0 A_SpawnItemEx("LightningEffect1",random(6,-6),random(6,-6),random(20,-20),frandom(0.025,0.05),frandom(0.025,0.05),frandom(-1.0,0.0),frandom(0.0,360.0),SXF_CLIENTSIDE,20)
	TNT1 AA 0 A_SpawnItemEx("LightningEffect2",random(6,-6),random(6,-6),random(20,-20),frandom(0.025,0.05),frandom(0.025,0.05),frandom(-1.0,0.0),frandom(0.0,360.0),SXF_CLIENTSIDE,20)
	TNT1 A 1
	Loop
	Death:
	TNT1 A 0 A_CheckFloor("Watercheck")
	TNT1 A 0 A_Explode(250,192,0)
	TNT1 AAAAA 0 A_SpawnItemEx("TheLightning2",0,0,0,0,0,0,0,SXF_CLIENTSIDE)
	TNT1 AAAA 0 A_SpawnItemEx("LightningEffect1",random(4,-4),random(4,-4),random(15,-15),frandom(0.025,0.05),frandom(0.025,0.05),frandom(-1.0,0.0),frandom(0.0,360.0),SXF_CLIENTSIDE,20)
	TNT1 AAAA 0 A_SpawnItemEx("LightningEffect2",random(4,-4),random(4,-4),random(15,-15),frandom(0.025,0.05),frandom(0.025,0.05),frandom(-1.0,0.0),frandom(0.0,360.0),SXF_CLIENTSIDE,20)
	TNT1 A 0 A_SpawnItemEx("LightningCloudSpawner",0,0,0,0,0,0,0,SXF_CLIENTSIDE)
	TNT1 A 0 A_SpawnItemEx("LightningParticleSpawner",0,0,0,0,0,0,0,SXF_CLIENTSIDE)
	TNT1 A 0 A_SpawnItemEx("LightningBlast1",0,0,0,0,0,0,0,SXF_CLIENTSIDE)
	TNT1 A 0 A_SpawnItemEx("LightningBlast2",0,0,0,0,0,0,0,SXF_CLIENTSIDE)
	Stop
	Watercheck:
	TNT1 A 0 A_JumpIf(CallACS("WaterBollocks") == true, "Supercharge")
	Goto Death+1
	Supercharge:
	TNT1 A 0 A_Explode(400,256,0)
	TNT1 AAAAAAAA 0 A_SpawnItemEx("TheLightning",random(25,-25),random(25,-25),random(25,-25),0,0,0,0,SXF_CLIENTSIDE)
	TNT1 AAA 0 A_SpawnItemEx("LightningEffect1",random(4,-4),random(4,-4),random(15,-15),frandom(0.025,0.05),frandom(0.025,0.05),frandom(-1.0,0.0),frandom(0.0,360.0),SXF_CLIENTSIDE,20)
	TNT1 AAA 0 A_SpawnItemEx("LightningEffect2",random(4,-4),random(4,-4),random(15,-15),frandom(0.025,0.05),frandom(0.025,0.05),frandom(-1.0,0.0),frandom(0.0,360.0),SXF_CLIENTSIDE,20)
	TNT1 A 0 A_SpawnItemEx("LightningCloudSpawnerSupercharged",0,0,0,0,0,0,0,SXF_CLIENTSIDE)
	TNT1 A 0 A_SpawnItemEx("LightningParticleSpawnerSupercharged",0,0,0,0,0,0,0,SXF_CLIENTSIDE)
	TNT1 A 0 A_SpawnItemEx("LightningBlast1",0,0,0,0,0,0,0,SXF_CLIENTSIDE)
	TNT1 A 0 A_SpawnItemEx("LightningBlast2",0,0,0,0,0,0,0,SXF_CLIENTSIDE)
	TNT1 AAAA 2 A_SpawnItemEx("LightningBlast3",0,0,0,0,0,0,0,SXF_CLIENTSIDE)
	Stop
	}
}

ACTOR LightningEffect1
{
	+NOINTERACTION
	+NOGRAVITY
	+FORCEYBILLBOARD
	+NOTONAUTOMAP
	+DONTBLAST
	Scale 0
	Alpha 0.9
	Renderstyle Add
	States
	{
	Spawn:
	TNT1 A 0 NoDelay A_SetScale(frandom(0.6,1.0))
	TNT1 A 0 A_Jump(256,"SpriteA","SpriteB","SpriteC","SpriteD")
	SpriteA:
	LITA A 0 A_Jump(256,"Main")
	SpriteB:
	LITA B 0 A_Jump(256,"Main")
	SpriteC:
	LITA C 0 A_Jump(256,"Main")
	SpriteD:
	LITA D 0 A_Jump(256,"Main")
	Main:
	"####" "#" 0 A_JumpIf(ScaleX <= 0 , "Null")
	"####" "#" 0 A_SetScale(ScaleX - frandom(0.05,0.02), ScaleY + frandom(0.1,0.2))
	"####" "#" 1 Bright A_FadeOut(frandom(0.08,0.05))
	Loop
	}
}

ACTOR LightningEffect2
{
	+NOINTERACTION
	+NOGRAVITY
	+FORCEYBILLBOARD
	+NOTONAUTOMAP
	+DONTBLAST
	Scale 0
	Alpha 0.9
	Renderstyle Add
	States
	{
	Spawn:
	TNT1 A 0 NoDelay A_SetScale(frandom(0.6,1.0))
	Main:
	"####" "#" 0 A_JumpIf(ScaleX <= 0 , "Null")
	"####" "#" 0 A_SetScale(ScaleX - frandom(0.05,0.02), ScaleY + frandom(0.1,0.2))
	LITA A 2 Bright A_FadeOut(frandom(0.08,0.05))
	
	"####" "#" 0 A_JumpIf(ScaleX <= 0 , "Null")
	"####" "#" 0 A_SetScale(ScaleX - frandom(0.05,0.02), ScaleY + frandom(0.1,0.2))
	LITA B 2 Bright A_FadeOut(frandom(0.08,0.05))
	
	"####" "#" 0 A_JumpIf(ScaleX <= 0 , "Null")
	"####" "#" 0 A_SetScale(ScaleX - frandom(0.05,0.02), ScaleY + frandom(0.1,0.2))
	LITA C 2 Bright A_FadeOut(frandom(0.08,0.05))
	
	"####" "#" 0 A_JumpIf(ScaleX <= 0 , "Null")
	"####" "#" 0 A_SetScale(ScaleX - frandom(0.05,0.02), ScaleY + frandom(0.1,0.2))
	LITA D 2 Bright A_FadeOut(frandom(0.08,0.05))
	Loop
	}
}

ACTOR LightningBlast1
{
	+NOINTERACTION
	+NOGRAVITY
	+NOTONAUTOMAP
	+DONTBLAST
	var int user_count;
	States
	{
	Spawn:
	TNT1 BB 0 A_SetUserVar("user_count",10)
	Main:
	TNT1 B 0 A_SetUserVar("user_count", user_count - 1)
	TNT1 B 0 A_JumpIf(user_count <= 0,"Dopefish")
	TNT1 B 0 A_SpawnItemEx("LightningEffect3",random(30,-30),random(30,-30),random(45,0),frandom(0.5,0.7),frandom(0.5,0.7),frandom(0.5,0.7),random(0,359),SXF_CLIENTSIDE)
	Loop
	Dopefish:
	TNT1 A 15
	Stop
	}
}

ACTOR LightningBlast2
{
	+NOINTERACTION
	+NOGRAVITY
	+NOTONAUTOMAP
	+DONTBLAST
	var int user_count;
	States
	{
	Spawn:
	TNT1 AA 0 A_SetUserVar("user_count",15)
	Main:
	TNT1 A 0 A_SetUserVar("user_count", user_count - 1)
	TNT1 A 0 A_JumpIf(user_count <= 0,"NULL")
	TNT1 A 1 A_SpawnItemEx("LightningEffect3",random(15,-15),random(15,-15),random(25,0),frandom(0.5,0.7),frandom(0.5,0.7),frandom(0.5,0.7),random(0,359),SXF_CLIENTSIDE)
	Loop
	}
}

ACTOR LightningBlast3
{
	+NOINTERACTION
	+NOGRAVITY
	+NOTONAUTOMAP
	+DONTBLAST
	var int user_count;
	States
	{
	Spawn:
	TNT1 BB 0 A_SetUserVar("user_count",50)
	Main:
	TNT1 B 0 A_SetUserVar("user_count", user_count - 1)
	TNT1 B 0 A_JumpIf(user_count <= 0,"Dopefish")
	TNT1 B 0 A_SpawnItemEx("LightningEffect3",random(40,-40),random(40,-40),random(25,0),frandom(6.5,7.0),frandom(6.5,7.0),frandom(2.5,1.7),random(0,359),SXF_CLIENTSIDE)
	Loop
	Dopefish:
	TNT1 A 1
	Stop
	}
}

ACTOR LightningEffect3
{
	+NOINTERACTION
	+NOGRAVITY
	+NOTONAUTOMAP
	+FORCEXYBILLBOARD
	+DONTBLAST
	Scale 0
	Alpha 0.8
	Renderstyle Add
	States
	{
	Spawn:
	TNT1 A 0 NoDelay A_SetScale(frandom(1.5,1.0))
	Main:
	LITP AABBCCDDEEFF 1 Bright A_FadeOut(frandom(0.025,0.075))
	Stop
	}
}

ACTOR ThunderSpawner2
{
	Radius 6
	Height 6
	Projectile
	Damage 0
	Speed 300
	+EXPLODEONWATER
	+NOGRAVITY
	+DONTBLAST
	States
	{
	Spawn:
	TNT1 A 1
	Loop
	Death:
	TNT1 A 0 A_PlaySound("Thunderstruck/Bolt")
	TNT1 AAAAAA random(1,3) A_CustomMissile("ThunderizerFromSky",0,0,random(0,360),CMF_AIMDIRECTION|CMF_TRACKOWNER) //Each time I use custommissile to spawn anything makes me feel like I am slaughtering poor code... it just ain't right, but if I want to make this thing spawn properly on goddamn ceiling... I have no other choice, I guess.
	Stop
	}
}

ACTOR ThunderizerFromSky
{
	Radius 4
	Height 4
	Projectile
	Damage 0
	Speed 15
	+SPAWNCEILING
	+CEILINGHUGGER //Just in case.
	+NOINTERACTION
	+NOCLIP
	+DONTBLAST
	States
	{
	Spawn:
	TNT1 A random(3,6)
	TNT1 A 1 A_CustomMissile("LightningFall",0,0,0,CMF_AIMDIRECTION|CMF_TRACKOWNER) //I'd use spawnitemex here, but I don't trust the transferpointers in concjuction with custommissiles...
	Stop
	}
}

//Supercharge stuff

ACTOR TheLightning
{
	+NOTONAUTOMAP
	+NOINTERACTION
	+NOGRAVITY
	+FORCEXYBILLBOARD
	+DONTBLAST
	Renderstyle Add
	Alpha 0.99
	Scale 0.0
	States
	{
	Spawn:
	TNT1 A 0 NoDelay A_SetScale(frandom(1.2,1.6))
	TNT1 A 0 A_Jump(256,"SpriteA","SpriteB","SpriteC","SpriteD","SpriteE","SpriteF","SpriteG","SpriteH")
	SpriteA:
	BLIT I 0 A_Jump(256,"Main")
	SpriteB:
	BLIT J 0 A_Jump(256,"Main")
	SpriteC:
	BLIT K 0 A_Jump(256,"Main")
	SpriteD:
	BLIT L 0 A_Jump(256,"Main")
	SpriteE:
	BLIT M 0 A_Jump(256,"Main")
	SpriteF:
	BLIT N 0 A_Jump(256,"Main")
	SpriteG:
	BLIT O 0 A_Jump(256,"Main")
	SpriteH:
	BLIT P 0 A_Jump(256,"Main")
	Main:
	"####" "#" 0 A_SetScale(ScaleX + frandom(0.01,0.02))
	"####" "#" 1 Bright A_FadeOut(frandom(0.05,0.1))
	Loop
	}
}

ACTOR TheLightning2 : TheLightning
{
	States
	{
	Spawn:
	TNT1 A 0 NoDelay A_SetScale(frandom(1.1,0.7))
	TNT1 A 0 A_Jump(256,"SpriteA","SpriteB","SpriteC","SpriteD","SpriteE","SpriteF","SpriteG","SpriteH")
	Loop
	}
}

ACTOR LightningCloud : TheLightning
{
	Alpha 0.0
	States
	{
	Spawn:
	TNT1 A 0 NoDelay A_SetScale(frandom(1.7,2.1))
	TNT1 A 0 A_FadeIn(frandom(0.7,0.5))
	Sprite:
	YPRT A 0 //BPRT C 0
	Main:
	"####" "#" 0 A_JumpIf(ScaleX <= 0,"NULL")
	"####" "#" 0 A_SetScale(ScaleX - frandom(0.005,0.003))
	"####" "#" 0 A_Jump(64,"Main")
	"####" "#" 1 Bright A_FadeOut(frandom(0.03,0.02))
	Loop
	}
}

ACTOR LightningCloudSpawner
{
	+NOINTERACTION
	+NOGRAVITY
	+NOTONAUTOMAP
	+DONTBLAST
	var int user_count;
	States
	{
	Spawn:
	TNT1 BB 0 A_SetUserVar("user_count",20)
	Main:
	TNT1 B 0 A_SetUserVar("user_count", user_count - 1)
	TNT1 B 0 A_JumpIf(user_count <= 0,"Dopefish")
	TNT1 A 0 A_SpawnItemEx("LightningCloud",random(40,-40),random(40,-40),random(45,0),frandom(-1.0,1.0),frandom(1.0,1.0),frandom(0.3,1.0),random(0,359),SXF_CLIENTSIDE,40)
	Loop
	Dopefish:
	TNT1 A 15
	Stop
	}
}

ACTOR LightningCloudSpawnerSupercharged
{
	+NOINTERACTION
	+NOGRAVITY
	+NOTONAUTOMAP
	+DONTBLAST
	var int user_count;
	States
	{
	Spawn:
	TNT1 BB 0 A_SetUserVar("user_count",70)
	Main:
	TNT1 B 0 A_SetUserVar("user_count", user_count - 1)
	TNT1 B 0 A_JumpIf(user_count <= 0,"Dopefish")
	TNT1 B 0 A_SpawnItemEx("LightningCloud",random(70,-70),random(70,-70),random(55,-15),frandom(-1.7,1.7),frandom(1.7,1.7),frandom(0.3,1.5),random(0,359),SXF_CLIENTSIDE,40)
	Loop
	Dopefish:
	TNT1 A 15
	Stop
	}
}

ACTOR LightningParticle : TheLightning
{
	var int user_count;
	Scale 0
	States
	{
	Spawn:
	TNT1 AA 0 A_SetScale(ScaleX + frandom(0.1,0.08))
	TNT1 A 0 A_SetUserVar("user_count",70)
	Sprite:
	YPRT A 0 //BPRT C 0
	Main:
	"####" "#" 0 A_JumpIf(ScaleX <= 0,"NULL")
	"####" "#" 0 A_Jump(128,2)
	"####" "#" 0 A_SetUserVar("user_count",user_count - 1)
	"####" "#" 0 A_ChangeVelocity(0,0,frandom(-0.1,-0.15),0)
	"####" "#" 0 A_SetScale(ScaleX - frandom(0.001,0.002))
	"####" "#" 0 A_JumpIf(user_count <= 0, "Sparta")
	"####" "#" 1 Bright
	Loop
	Sparta:
	"####" "#" 1 Bright A_FadeOut(frandom(0.02,0.05))
	Loop
	}
}

ACTOR LightningParticleSpawner
{
	+NOINTERACTION
	+NOGRAVITY
	+NOTONAUTOMAP
	+DONTBLAST
	var int user_count;
	States
	{
	Spawn:
	TNT1 BB 0 A_SetUserVar("user_count",20)
	Main:
	TNT1 B 0 A_SetUserVar("user_count", user_count - 1)
	TNT1 B 0 A_JumpIf(user_count <= 0,"Dopefish")
	TNT1 B 0 A_SpawnItemEx("LightningParticle",random(10,-10),random(10,-10),random(10,-30),frandom(2.2,2.0),frandom(2.2,2.0),frandom(2.2,5.0),random(0,359),SXF_CLIENTSIDE,40)
	Loop
	Dopefish:
	TNT1 A 1
	Stop
	}
}

ACTOR LightningParticleSpawnerSupercharged
{
	+NOINTERACTION
	+NOGRAVITY
	+NOTONAUTOMAP
	+DONTBLAST
	var int user_count;
	States
	{
	Spawn:
	TNT1 BB 0 A_SetUserVar("user_count",60)
	Main:
	TNT1 B 0 A_SetUserVar("user_count", user_count - 1)
	TNT1 B 0 A_JumpIf(user_count <= 0,"Dopefish")
	TNT1 B 0 A_SpawnItemEx("LightningParticle",random(20,-20),random(20,-20),random(10,-30),frandom(2.7,2.7),frandom(2.7,2.7),frandom(2.9,5.7),random(0,359),SXF_CLIENTSIDE,40)
	Loop
	Dopefish:
	TNT1 A 1
	Stop
	}
}

//Tomed

ACTOR TomedThunderSpawner : ThunderSpawner
{
	States
	{
	Spawn:
	TNT1 A 1
	Loop
	Death:
	TNT1 A 0 A_PlaySound("Thunderstruck/Bolt")
	TNT1 A 1 A_CustomMissile("TomedThunderFromSky",0,0,0,CMF_AIMDIRECTION|CMF_TRACKOWNER) //Each time I use custommissile to spawn anything makes me feel like I am slaughtering poor code... it just ain't right, but if I want to make this thing spawn properly on goddamn ceiling... I have no other choice, I guess.
	Stop
	}
}

ACTOR TomedThunderFromSky : ThunderFromSky
{
	States
	{
	Spawn:
	TNT1 A 0
	TNT1 A 1 A_CustomMissile("TomedLightningFall",0,0,0,CMF_AIMDIRECTION|CMF_TRACKOWNER) //I'd use spawnitemex here, but I don't trust the transferpointers in concjuction with custommissiles...
	Stop
	}
}

ACTOR TomedLightningFall : LightningFall
{
	Damage 80 //Being ultra-precise, it's actually advised to make it deal LESS damage than stock one.
	Gravity 9
	States
	{
	Spawn:
	TNT1 AAA 0 A_SpawnItemEx("LightningEffect1",40,0,0,frandom(0.025,0.05),frandom(0.025,0.05),frandom(-1.0,0.0),240,SXF_CLIENTSIDE,0)
	TNT1 AA 0 A_SpawnItemEx("LightningEffect1",40,0,0,frandom(0.025,0.05),frandom(0.025,0.05),frandom(-1.0,0.0),120,SXF_CLIENTSIDE,0)
	TNT1 AA 0 A_SpawnItemEx("LightningEffect1",40,0,0,frandom(0.025,0.05),frandom(0.025,0.05),frandom(-1.0,0.0),0,SXF_CLIENTSIDE,0)
	TNT1 AA 0 A_SpawnItemEx("LightningEffect2",40,0,0,frandom(0.025,0.05),frandom(0.025,0.05),frandom(-1.0,0.0),240,SXF_CLIENTSIDE,0)
	TNT1 AA 0 A_SpawnItemEx("LightningEffect2",40,0,0,frandom(0.025,0.05),frandom(0.025,0.05),frandom(-1.0,0.0),120,SXF_CLIENTSIDE,0)
	TNT1 AA 0 A_SpawnItemEx("LightningEffect2",40,0,0,frandom(0.025,0.05),frandom(0.025,0.05),frandom(-1.0,0.0),0,SXF_CLIENTSIDE,0)
	TNT1 A 0 A_SetAngle(20 + angle)
	TNT1 A 1 A_SpawnItemEx("TheLightning3",random(5,-5),random(5,-5),random(5,-5),frandom(0.05,0.075),frandom(0.05,0.075),frandom(0.05,0.075),frandom(0.0,360.0),SXF_CLIENTSIDE,0)
	Loop
	Death:
	TNT1 A 0 A_CheckFloor("Watercheck")
	TNT1 A 0 A_Explode(500,256,0)
	TNT1 AAAAAAA 0 A_SpawnItemEx("TheLightning",random(25,-25),random(25,-25),random(25,-25),0,0,0,0,SXF_CLIENTSIDE)
	TNT1 A 0 A_SpawnItemEx("LightningCloudSpawnerSupercharged",0,0,0,0,0,0,0,SXF_CLIENTSIDE)
	TNT1 A 0 A_SpawnItemEx("LightningParticleSpawnerSupercharged",0,0,0,0,0,0,0,SXF_CLIENTSIDE)
	TNT1 AA 0 A_SpawnItemEx("LightningBlast1",0,0,0,0,0,0,0,SXF_CLIENTSIDE)
	TNT1 AA 0 A_SpawnItemEx("LightningBlast2",0,0,0,0,0,0,0,SXF_CLIENTSIDE)
	TNT1 AAAA 2 A_SpawnItemEx("LightningBlast3",0,0,0,0,0,0,0,SXF_CLIENTSIDE)
	Stop
	Watercheck:
	TNT1 A 0 A_JumpIf(CallACS("WaterBollocks") == true, "Ultracharge")
	Goto Death+1
	Ultracharge:
	TNT1 A 0 A_Explode(800,384,0)
	TNT1 AAAAAAAAAAA 0 A_SpawnItemEx("TheLightning",random(55,-45),random(55,-55),random(55,-55),0,0,0,0,SXF_CLIENTSIDE)
	TNT1 A 0 A_SpawnItemEx("LightningCloudSpawnerUltracharged",0,0,0,0,0,0,0,SXF_CLIENTSIDE)
	TNT1 A 0 A_SpawnItemEx("LightningParticleSpawnerUltracharged",0,0,0,0,0,0,0,SXF_CLIENTSIDE)
	TNT1 AA 0 A_SpawnItemEx("LightningBlast1",0,0,0,0,0,0,0,SXF_CLIENTSIDE)
	TNT1 AA 0 A_SpawnItemEx("LightningBlast2",0,0,0,0,0,0,0,SXF_CLIENTSIDE)
	TNT1 AAAA 2 A_SpawnItemEx("LightningBlast3",0,0,0,0,0,0,0,SXF_CLIENTSIDE)
	Stop
	}
}

ACTOR TheLightning3 : TheLightning
{
	States
	{
	Spawn:
	TNT1 A 0 A_SetScale(frandom(1.3,1.4))
	TNT1 A 0 A_Jump(256,"SpriteA","SpriteB","SpriteC","SpriteD","SpriteE","SpriteF","SpriteG","SpriteH")
	Goto SpriteA
	Main:
	"####" "#" 2 Bright A_Jump(92,"Fade")
	Loop
	Fade:
	"####" "#" 0 A_SetScale(ScaleX - 0.05, ScaleX)
	"####" "#" 1 Bright A_FadeOut(frandom(0.1,0.15))
	"####" "#" 0 A_JumpIf(ScaleX <= 0, "NULL")
	Loop
	}
}

ACTOR LightningCloudSpawnerUltracharged
{
	+NOINTERACTION
	+NOGRAVITY
	+DONTBLAST
	var int user_count;
	States
	{
	Spawn:
	TNT1 BB 0 A_SetUserVar("user_count",130)
	Main:
	TNT1 B 0 A_SetUserVar("user_count", user_count - 1)
	TNT1 B 0 A_JumpIf(user_count <= 0,"Dopefish")
	TNT1 B 0 A_SpawnItemEx("LightningCloud",random(110,-110),random(110,-110),random(75,-15),frandom(-1.7,1.7),frandom(1.7,1.7),frandom(0.3,1.5),random(0,359),SXF_CLIENTSIDE,40)
	Loop
	Dopefish:
	TNT1 A 15
	Stop
	}
}

ACTOR LightningParticleSpawnerUltracharged
{
	+NOINTERACTION
	+NOGRAVITY
	+DONTBLAST
	var int user_count;
	States
	{
	Spawn:
	TNT1 BB 0 A_SetUserVar("user_count",80)
	Main:
	TNT1 B 0 A_SetUserVar("user_count", user_count - 1)
	TNT1 B 0 A_JumpIf(user_count <= 0,"Dopefish")
	TNT1 B 0 A_SpawnItemEx("LightningParticle",random(35,-35),random(35,-35),random(20,-30),frandom(2.7,2.7),frandom(2.7,2.7),frandom(2.9,5.7),random(0,359),SXF_CLIENTSIDE,40)
	Loop
	Dopefish:
	TNT1 A 1
	Stop
	}
}

ACTOR RajtninguStormuru
{
	Speed 0
	var int User_Cycle;
	var int User_Shotspan;
	var int User_NoisyCricket;
	PROJECTILE
	+NOINTERACTION
	+NOGRAVITY
	+SEEKERMISSILE
	+FORCEXYBILLBOARD
	+NOTIMEFREEZE
	+DONTBLAST
	Renderstyle Add
	Scale 0.5
	Alpha 0.7
	States
	{
	Spawn:
		"####" "#" 0 NoDelay A_GiveToTarget("StormEngaged")
		//"####" "#" 0 A_SetUserVar("User_Shotspan",8)
		"####" "#" 0 A_PlaySound("Thunderstorm/Loop",5,0.8,1)
	Cycle:
		"####" "#" 0 A_SetUserVar("User_Cycle", random(110,140))
	Main:
		//"####" "#" 0 A_JumpIfInTargetInventory("PowerTomeEffect",1,1)
		//Goto Death
		TFLR A 1 Bright A_Warp(AAPTR_TARGET,0,0,85,0,WARPF_INTERPOLATE|WARPF_NOCHECKPOSITION)
		"####" "#" 0 A_JumpIfInTargetInventory("StormTrigger",1,"Death")
		"####" "#" 0 A_SpawnItemEx("RajtninguLajtningu",frandom(5.0,-5.0),frandom(5.0,-5.0),frandom(5.0,-5.0),0,0,0,0,SXF_CLIENTSIDE|SXF_ORIGINATOR|SXF_SETMASTER,60)
		"####" "#" 0 A_JumpIf(User_Cycle <= 0, "CheckForTarget")
		"####" "#" 0 A_SetUserVar("User_Cycle", User_Cycle - 1)
		"####" "#" 0 A_SetUserVar("User_NoisyCricket", User_NoisyCricket + 1)
		"####" "#" 0 A_JumpIf(User_NoisyCricket <= 420, "DoANoisePeggy")
		Loop
	DoANoisePeggy:
		"####" "#" 0 A_PlaySound("Thunderstorm/Idle",7,0.9)
		"####" "#" 0 A_SetUserVar("User_NoisyCricket",0)
		Goto Main
	CheckForTarget:
		"####" "#" 0 A_JumpIfInTargetInventory("Mana",75,2)
		"####" "#" 0 A_JumpIf(CallACS("TracerDeathCheck"), "ClearTracer")
		Goto Main
		//"####" "#" 0 A_JumpIfInTargetInventory("PowerTomeEffect",1,1)
		//Goto Death
		"####" "#" 0 A_SeekerMissile(0,0,SMF_LOOK|SMF_CURSPEED,256,6)
		"####" "#" 0 A_JumpIfInTargetInventory("StormTrigger",1,"Death")
		"####" "#" 0 A_SpawnItemEx("RajtninguLajtningu",frandom(5.0,-5.0),frandom(5.0,-5.0),frandom(5.0,-5.0),0,0,0,0,SXF_CLIENTSIDE|SXF_ORIGINATOR|SXF_SETMASTER,60)
		TFLR A 1 Bright A_Warp(AAPTR_TRACER,0,0,85,0,WARPF_INTERPOLATE|WARPF_NOCHECKPOSITION,"DropTheHammer",1)
		Goto Main
	DropTheHammer:
		"####" "#" 0 A_TakeFromTarget("Mana",75,TIF_NOTAKEINFINITE)
		"####" "#" 0 A_AlertMonsters
		"####" "#" 0 A_PlaySound("Thunderstruck/Use",6,0.9)
		"####" "#" 0 A_PlaySound("Thunderstruck/Bolt",4)
		//"####" "#" 0 A_SetUserVar("User_Shotspan", User_Shotspan - 1)
		"####" "#" 1 A_JumpIfInTargetInventory("PowerTomeEffect",1,3)
		"####" "#" 1 Bright A_CustomMissile("ThunderFromSky",0,0,0,CMF_AIMDIRECTION|CMF_TRACKOWNER) 		
		"####" "#" 1 A_Jump(256,5)
		"####" "###" 0 A_CustomMissile("ThunderSpawner3",0,0,frandom(0.0,360.0),CMF_AIMDIRECTION|CMF_TRACKOWNER)
		"####" "#" 1 Bright A_CustomMissile("TomedThunderFromSky",0,0,0,CMF_AIMDIRECTION|CMF_TRACKOWNER) //A_SpawnItemEx("TomedLightningFall",0,0,0,10,0,0,0,SXF_TRANSFERPOINTERS)
		//"####" "#" 0 A_JumpIf(User_Shotspan <= 0, "Death")
		"####" "#" 0 A_JumpIf(CallACS("TracerDeathCheck"), "ClearTracer")
		//"####" "#" 4 //Space for inside delay
		//"####" "#" 1 A_Warp(AAPTR_TRACER,0,0,64,0,WARPF_INTERPOLATE|WARPF_NOCHECKPOSITION,"DropTheHammer",1)
	ClearTracer:
		"####" "#" 0 A_RearrangePointers(AAPTR_DEFAULT,AAPTR_DEFAULT,AAPTR_NULL)
		Goto Cycle
	Death:
		"####" "#" 0 A_TakeFromTarget("StormEngaged")
		"####" "#" 0 A_StopSound(5)
	DeathLoop:
		"####" "#" 0 A_Warp(AAPTR_TARGET,0,0,85,0,WARPF_INTERPOLATE|WARPF_NOCHECKPOSITION)
		"####" "#" 0 A_SetScale(ScaleX - 0.01)
		"####" "#" 0 A_JumpIf(ScaleX <= 0, "Null")
		TFLR A 1 Bright A_FadeOut(0.05)
		Loop
	}
}

ACTOR RajtninguLajtningu : TheLightning
{
	Alpha 0.0
	States
	{
	Spawn:
	TNT1 A 0 NoDelay A_SetScale(frandom(0.12,0.1))
	TNT1 A 0 A_FadeIn(frandom(0.7,0.99))
	TNT1 A 0 A_Jump(256,"SpriteA","SpriteB","SpriteC","SpriteD","SpriteE","SpriteF","SpriteG","SpriteH")
	SpriteA:
	BLIT I 0 A_Jump(256,"Main")
	SpriteB:
	BLIT J 0 A_Jump(256,"Main")
	SpriteC:
	BLIT K 0 A_Jump(256,"Main")
	SpriteD:
	BLIT L 0 A_Jump(256,"Main")
	SpriteE:
	BLIT M 0 A_Jump(256,"Main")
	SpriteF:
	BLIT N 0 A_Jump(256,"Main")
	SpriteG:
	BLIT O 0 A_Jump(256,"Main")
	SpriteH:
	BLIT P 0 A_Jump(256,"Main")
	Main:
	"####" "#" 0 A_SetScale(ScaleX - 0.002)
	"####" "#" 0 A_JumpIf(ScaleX <= 0, "Null")
	"####" "#" 0 A_Warp(AAPTR_MASTER,frandom(7.0,-7.0),frandom(7.0,-7.0),frandom(7.0,-7.0),angle,WARPF_INTERPOLATE|WARPF_NOCHECKPOSITION)
	"####" "#" 1 Bright A_FadeOut(frandom(0.05,0.075))
	Loop
	}
}

ACTOR ThunderSpawner3 : FastProjectile
{
	Radius 3
	Height 3
	Projectile
	Damage 0
	Speed 50
	+EXPLODEONWATER
	+NOGRAVITY
	//+THRUACTORS
	+SKYEXPLODE
	+DONTREFLECT
	+DONTBLAST
	States
	{
	Spawn:
	TNT1 A random(2,5) NoDelay A_ScaleVelocity(frandom(0.3,1.4))
	Goto Death
	Death:
	TNT1 A 1 A_CustomMissile("ThunderFromSky",0,0,0,CMF_AIMDIRECTION|CMF_TRACKOWNER) //Each time I use custommissile to spawn anything makes me feel like I am slaughtering poor code... it just ain't right, but if I want to make this thing spawn properly on goddamn ceiling... I have no other choice, I guess.
	Stop
	}
}
