//=====================================================
//=====================================================
//DRAIN BEAM
//=====================================================
//=====================================================


ACTOR DrainBeamCore
{   
	+NOINTERACTION
	+NOGRAVITY
	+FORCEXYBILLBOARD
	+bright
	RenderStyle Add
	Alpha 0.20
	Scale 0.45
	States
	{
	Spawn:
		TNT1 A 0
		TNT1 A 0 A_CheckRange (40,"Emit")
		TNT1 A 1
		Stop
	Emit:
		DRS1 A 1 
		TNT1 A 0 A_FadeIn (0.75)
		DRS1 A 1 A_SetScale (0.40,0.40) 
		DRS1 A 1 A_SetScale (0.35,0.35) 
		DRS1 A 1 A_SetScale (0.30,0.30) 
		DRS1 A 1 A_SetScale (0.25,0.25) 
		DRS1 A 1 A_SetScale (0.20,0.20) 
		DRS1 A 1 A_SetScale (0.15,0.15) 
		DRS1 A 1 A_SetScale (0.10,0.10) 
		DRS1 A 1 A_SetScale (0.05,0.05) 
		Stop
	}
}





ACTOR DrainBeamTip
{
	+NOBLOCKMAP
	+NOGRAVITY
	+ALLOWPARTICLES
	+RANDOMIZE
	+thruspecies
	+MTHRUSPECIES
	+PUFFGETSOWNER
	+puffonactors
	+bright
	+NOEXTREMEDEATH
	+ALWAYSPUFF
	+RANDOMIZE
	+FORCEPAIN
	species "Friendly"
	RenderStyle Translucent
	Alpha 0.7
	scale 0.80
	Mass 5
	VSpeed 0
	Decal SmallArtiDecal
	ProjectileKickback 500
	States
	{
	Spawn:
        TNT1 A 0
		SSP1 A 2
		Stop
	Death:
	Crash:
		DRS2 B random(1,2)
		TNT1 A 0 A_PlaySound("Kustam/DrainBeamMiss", 5)
		DRS2 CDEF 2
		Stop
	Xdeath:
		TNT1 A 0
		DRS2 A random(1,2)
		TNT1 A 0 A_PlaySound("Kustam/DrainBeamHit", 5)
		TNT1 A 0 A_GiveToTarget ("SentinelCharge",3)
		TNT1 A 0 A_GiveToTarget ("KustamAuxCharge", 35)
		TNT1 A 0 A_SpawnItemEx ("DrainHitParticle",0,0,0,0,0,5,0,SXF_NOCHECKPOSITION|SXF_TRANSFERPOINTERS)
		TNT1 A 0 A_SpawnItemEx ("DrainHitParticle",0,0,0,0,5,3.5,0,SXF_NOCHECKPOSITION|SXF_TRANSFERPOINTERS)
		TNT1 A 0 A_SpawnItemEx ("DrainHitParticle",0,0,0,0,5,0,0,SXF_NOCHECKPOSITION|SXF_TRANSFERPOINTERS)
		TNT1 A 0 A_SpawnItemEx ("DrainHitParticle",0,0,0,0,5,-3.5,0,SXF_NOCHECKPOSITION|SXF_TRANSFERPOINTERS)
		TNT1 A 0 A_SpawnItemEx ("DrainHitParticle",0,0,0,0,0,-5,0,SXF_NOCHECKPOSITION|SXF_TRANSFERPOINTERS)
		TNT1 A 0 A_SpawnItemEx ("DrainHitParticle",0,0,0,0,-5,-3.5,0,SXF_NOCHECKPOSITION|SXF_TRANSFERPOINTERS)
		TNT1 A 0 A_SpawnItemEx ("DrainHitParticle",0,0,0,0,-5,0,0,SXF_NOCHECKPOSITION|SXF_TRANSFERPOINTERS)
		TNT1 A 0 A_SpawnItemEx ("DrainHitParticle",0,0,0,0,-5,3.5,0,SXF_NOCHECKPOSITION|SXF_TRANSFERPOINTERS)
		//TNT1 A 0 A_SpawnItemEx ("DrainBeamReturn",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION|SXF_TRANSFERPOINTERS)
		DRS2 GHIJK 2
		Stop
	}
}


Actor DrainHitParticle
{
	projectile
	+dontblast
	+notimefreeze
	+THRUACTORS
    +FORCEXYBILLBOARD	
	+LOOKALLAROUND
	+Bright
	+NOCLIP
	+thruspecies
	+hexenbounce
	species "Friendly"
	radius 2
	speed 3
    Scale 1
	states
	{
	Spawn:
		SSP1 ACBCA 1
		SSP1 ACBCA 1
		//TNT1 A 0 a_countdown
		Goto Death
	death:
		TNT1 A 0
		TNT1 A 1 A_SpawnItemEx ("DrainBeamReturn",0,0,0,0,-5,5,0,SXF_NOCHECKPOSITION|SXF_TRANSFERPOINTERS)
		Stop
	}
}


actor DrainBeamReturn : FastProjectile
{
	projectile
    -SOLID
	+notimefreeze
	+skyexplode
	+BRIGHT
	+THRUSPECIES
	species "friendly"
	+FORCEXYBILLBOARD
	+SEEINVISIBLE
	+PAINLESS
	+DONTREFLECT
    +NOCLIP
    +NOTIMEFREEZE
	+SEEINVISIBLE
	radius 12
	height 10
	damage (0)
	speed 30
	Alpha 0.20
	Scale 0.25
	
    missileheight 8
	missiletype "DrainBeamReturnTrail"
	states
	{
	spawn:
		TNT1 A 0
		DRS2 A 1 A_JumpIfCloser (50,"catch")
		TNT1 A 0 A_FaceTarget
		TNT1 A 1 A_CustomMissile ("DrainBeamReturn",0,0,0,CMF_TRACKOWNER)
		Stop
	death:
		TNT1 A 0		
		TNT1 A 0 A_CustomMissile ("DrainBeamReturn",0,0,0,CMF_TRACKOWNER)
		TNT1 A 1
		Stop
	crash:
		TNT1 A 0
		TNT1 A 0		
		TNT1 A 0 A_CustomMissile ("DrainBeamReturn",0,0,0,CMF_TRACKOWNER)
		TNT1 A 1
		Stop
	catch:
		TNT1 A 0
        TNT1 A 1 
		Stop
	}
}

ACTOR DrainBeamReturnTrail
{
	projectile
	+clientsideonly
	speed 10
	+NOINTERACTION
	+NOTELEPORT
	+FORCEXYBILLBOARD
	+bright
	RenderStyle Add
	Alpha 0.20
	Scale 0.25
	States
	{
	Spawn:
		TNT1 A 0
		DRS1 A 1 
		TNT1 A 0 A_FadeIn (0.75)
		DRS1 A 1 A_SetScale (0.20,0.20) 
		DRS1 A 1 A_SetScale (0.10,0.10) 
		DRS1 A 1 A_SetScale (0.05,0.05) 
		Stop
	Death:
		TNT1 A 1
		Stop
	}
}


//===========================================================================================
//===========================================================================================
//===========================================================================================
//===========================================================================================

actor StunPellet
{
	projectile
	+notimefreeze
	+THRUSPECIES
	+FORCEXYBILLBOARD	
	+forcepain
	+SKYEXPLODE
	+bright
	species "friendly"
	height 12
	radius 5
	speed 45
	damage (1)
	scale 2
	deathsound "Kustam/TurretShatter"
	DamageType "Dazer"
	states
	{
	spawn:
		STP1 A 2 
		STP1 B 2 
		loop
	Death:
		TNT1 A 0
		TNT1 A 1
		TNT1 A 0 A_SetScale (0.25)
		FLS1 C 1
		TNT1 AAAAA 0 A_SpawnItemEx ("KustamParticle",random(-8,8),random(-8,8),random(-10,10),random(-120,120)/15.0,random(-130,130)/12.0,random(-110,110)/17.0,0,160)
		FLS1 D 2
		FLS1 EF 3
		Stop
	}
}


//===========================================================================================
//===========================================================================================
//===========================================================================================
//===========================================================================================


//Flash Bolt

actor FlashBolt
{
	projectile
	+notimefreeze
	+THRUSPECIES
	+FORCEXYBILLBOARD	
	+forcepain
	+SKYEXPLODE
	+bright
	species "friendly"
	height 12
	radius 5
	speed 65
	damage (90)
	scale 2
	deathsound "kustam/HVolleyHit"
	DamageType "Dazer"
	states
	{
	spawn:
		FLS1 A 2 A_SpawnItemEx ("FlashBoltTrail",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION)
		FLS1 B 1 A_SpawnItemEx ("FlashBoltTrail",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION)
		FLS1 A 2 A_SpawnItemEx ("FlashBoltTrail",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION)
		FLS1 B 1 A_SpawnItemEx ("FlashBoltTrail",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION)
		loop
	Death:
		TNT1 A 0
		TNT1 A 1 
		FLS1 C 1 A_Explode (1,300,0,1,300)
		TNT1 A 0 A_PlaySound ("Kustam/FlashBoltExplode",0,1,0,0.60)		
		TNT1 AAAAAAAAAAAAAAAAAAAAAAA 0 A_SpawnItemEx ("FlashBoltParticle", frandom(-150,150),frandom(-150,150),frandom(-65,65), 0,0,0, 0, SXF_NOCHECKPOSITION)
		TNT1 AAAAAAA 0 A_SpawnItemEx ("KustamParticle",random(-8,8),random(-8,8),random(-10,10),random(-120,120)/15.0,random(-130,130)/12.0,random(-110,110)/17.0,0,160)
		FLS1 D 2
		TNT1 A 0 A_PlaySound ("Kustam/FlashBoltParticles",0,1,0,0.60)
		FLS1 EF 3
		Stop
	}
}


actor FlashBoltParticle
{
	projectile
	+clientsideonly
	speed 10
	+NOINTERACTION
	+NOCLIP
	+DONTBLAST
	+bright
	scale 1
	states
	{
	Spawn:
		TNT1 A 0
		TNT1 A random (2,5)
		FLS1 H 2
		FLS1 IJIJIJ 1
		FLS1 KL 2
		Stop
	death:
		TNT1 A 1
		Stop
	}
}


actor FlashBoltTrail
{
	+dontblast
	+notimefreeze
	+nointeraction
	+clientsideonly
	projectile
    +FORCEXYBILLBOARD	
	+BRIGHT
	radius 2
	speed 3
    Scale 1
	renderstyle add
	states
	{
	spawn:
		TNT1 A 1
		FLS1 G 3
		Goto Death
	death:
		TNT1 A 0
		FLS1 G 1 A_SetScale (scalex * 0.80,scaley * 0.80)
		FLS1 G 1 A_SetScale (scalex * 0.80,scaley * 0.80)
		FLS1 G 1 A_SetScale (scalex * 0.80,scaley * 0.80)
		FLS1 G 1 A_SetScale (scalex * 0.80,scaley * 0.80)
		FLS1 G 1 A_SetScale (scalex * 0.80,scaley * 0.80)
		FLS1 G 1 A_SetScale (scalex * 0.80,scaley * 0.80)
		FLS1 G 1 A_SetScale (scalex * 0.80,scaley * 0.80)
		Stop
	}
}


//===========================================================================================
//===========================================================================================
//===========================================================================================
//===========================================================================================



ACTOR RailBeamCore
{   
	+NOINTERACTION
	+NOGRAVITY
	+FORCEXYBILLBOARD
	+CLIENTSIDEONLY
	+PUFFGETSOWNER
	+THRUSPECIES
	+bright
	Species "Friendly"
	RenderStyle Add
	Alpha 0.20
	Scale 2
	States
	{
	Spawn:
		TNT1 A 0
		TNT1 A 0 A_CheckRange (40,"Emit")
		TNT1 A 1
		Stop
	Emit:
		RLBM A 1 A_SetScale (2,2) 
		TNT1 A 0 A_FadeIn (0.75)
		RLBM A 1 A_SetScale (1.60,1.60) 
		RLBM A 1 A_SetScale (1.20,1.20) 
		RLBM A 1 A_SetScale (0.80,0.80) 
		RLBM A 1 A_SetScale (0.40,0.40) 
		RLBM A 2 A_SetScale (0.20,0.20) 
		RLBM A 2 A_SetScale (0.10,0.10) 
		RLBM A 2 A_SetScale (0.05,0.05) 
		Stop
	}
}


actor RailPlasmaChain
{
	PROJECTILE
	Speed 10
	Radius 6
	Height 8
	+bright
	+thruactors
	+THRUSPECIES
	+DONTREFLECT
	species "friendly"
	damage (0)
	scale 0.20
	ReactionTime 15
	states
	{
	spawn:
		TNT1 A 0
		TNT1 A 0 A_SetScale (scalex * frandom(1.15,1.35),scaley * frandom(1.45,1.65))
		TNT1 A 1 A_ChangeVelocity (Frandom(-0.20,0.20),Frandom(-0.20,0.20),Frandom(-0.20,0.20))
	flight:
		RLBM C 6
		RLBM D 6
		TNT1 A 0 A_Explode (5,40,0,0,40)
		TNT1 A 0 A_Countdown
		Loop
	death:
		RLBM C 2 A_Explode (5,40,0,0,40)
		Stop
	}
}


Actor RailHitParticle
{
	radius 3
	height 6
	speed .1
	Scale 1.5
	+nogravity
	+FLOORCLIP
	+bright
	+THRUSPECIES
	+DONTSPLASH
	+NOTELEPORT
	+ALWAYSPUFF
	+PUFFONACTORS
	+PUFFGETSOWNER
	+DONTREFLECT
	species "friendly"
	states
	{
	spawn:
		RLBM CDCDCD 2
		Stop
	Xdeath:
		TNT1 A 0 A_PlaySound ("Kustam/HVolleyHit",0)
		TNT1 A 0 A_SetScale (3)
		TNT1 A random(1,2)
		TNT1 A 0 A_Jump (100,"Flip1","Flip2","Flip3")
		SSP3 ABCDE 2 A_SpawnItemEx ("RailPlasmaChain",0,0,0,0,Random(-1,1),random(-1,1),0,SXF_NOCHECKPOSITION|SXF_TRANSFERPOINTERS,90)
		Stop
	Flip1:
		TNT1 A 0 
		TNT1 A 0 A_SetScale (ScaleX * -1, ScaleY)
		SSP3 ABCDE 2 A_SpawnItemEx ("RailPlasmaChain",0,0,0,0,Random(-1,1),random(-1,1),0,SXF_NOCHECKPOSITION|SXF_TRANSFERPOINTERS,90)
		Stop
	Flip2:
		TNT1 A 0 
		TNT1 A 0 A_SetScale (ScaleX, ScaleY * -1)
		SSP3 ABCDE 2 A_SpawnItemEx ("RailPlasmaChain",0,0,0,0,Random(-1,1),random(-1,1),0,SXF_NOCHECKPOSITION|SXF_TRANSFERPOINTERS,90)
		Stop
	Flip3:
		TNT1 A 0 
		TNT1 A 0 A_SetScale (ScaleX * -1, ScaleY * -1)
		SSP3 ABCDE 2 A_SpawnItemEx ("RailPlasmaChain",0,0,0,0,Random(-1,1),random(-1,1),0,SXF_NOCHECKPOSITION|SXF_TRANSFERPOINTERS,90)
		Stop
	}
}


ACTOR RailBeamParticleSpawner : Fastprojectile
{
	Projectile
	-BLOODSPLATTER
	+THRUSPECIES
	+DONTBLAST
	+FORCEPAIN
	+NOBLOOD
	+NOEXTREMEDEATH
	+RIPPER
	+DONTREFLECT
	+PAINLESS
	+FORCERADIUSDMG
	+HITTRACER
	+BRIGHT
	Species "Friendly"
	Radius 2
	Height 2
	RenderStyle Add
	Alpha 0.40
	Scale 1.20
	Speed 40
	states
	{
	Spawn:
		TNT1 A 1
		TNT1 AAA 0 A_SpawnItemEx ("RailPlasmaChain",Random (-5,5), Random (-5,5), Random (-5,5), 0,FRandom (-0.05,0.05),FRandom (-0.05,0.05), 0, SXF_TRANSFERPOINTERS,20)
		Loop
	XDeath:
	Crash:
	Death:
		TNT1 A 1
		Stop
	}
}


//===========================================================================================
//===========================================================================================
//===========================================================================================
//===========================================================================================

Actor TurretDeployer
{
	projectile
	+notimefreeze
	+THRUSPECIES
	+forcepain
	+SKYEXPLODE
	+bright
	species "friendly"
	height 5
	radius 5
	speed 45
	damage (30)
	scale 2
	//deathsound "kustam/HVolleyHit"
	states
	{
	Spawn:
		SVT1 A 2
		SVT1 B 2
		loop
	Death:
		TNT1 A 0
		TNT1 A 0 A_PlaySound ("Kustam/TurretLatch",0)
		TNT1 A 0 A_CheckCeiling ("CeilingCling")
		TNT1 A 0 A_CheckFloor ("FloorCling")
		//TNT1 0 A_JumpIf(floorz == z, "land") (keeping this on hand, I'm not sure which is better to use)
		SVT1 A 2 A_SetScale (1.60)
		SVT1 A 2 A_SetScale (1.50)
		TNT1 A 0 A_SpawnItemEx ("SvenPrecursor",-3,0,-1,-5,0,0,0,SXF_NOCHECKPOSITION)
		SVT1 C 3 A_SetScale (2.20)
		SVT1 C 1 A_SetScale (2)
		SVT1 C 330
		TNT1 A 0 A_PlaySound ("Kustam/HVolleyHit",0)
		RSPK ABCDE 3
		Stop
	Xdeath:
		TNT1 A 0 A_PlaySound ("Kustam/HVolleyHit",0)
		TNT1 A 0 A_SpawnItemEx ("SvenPrecursor",0,1,2,0,0,1,0,SXF_NOCHECKPOSITION)
		RSPK ABCDE 3
		Stop
	FloorCling:
		SVT2 A 2 A_SetScale (2,1.60)
		SVT2 A 2 A_SetScale (2,1.50)
		TNT1 A 0 A_SpawnItemEx ("SvenPrecursor",0,1,7,0,0,5,0,SXF_NOCHECKPOSITION)
		SVT2 B 3 A_SetScale (2,2.20)
		SVT2 B 1 A_SetScale (2,2)
		SVT2 B 330
		TNT1 A 0 A_PlaySound ("Kustam/HVolleyHit",0)
		RSPK ABCDE 3
		Stop
	CeilingCling:
		SVT3 A 2 A_SetScale (2,1.60)
		SVT3 A 2 A_SetScale (2,1.50)
		TNT1 A 0 A_SpawnItemEx ("SvenPrecursor",0,1,-7,0,0,-5,0,SXF_NOCHECKPOSITION)
		SVT3 B 3 A_SetScale (2,2.20)
		SVT3 B 1 A_SetScale (2,2)
		SVT3 B 330
		TNT1 A 0 A_PlaySound ("Kustam/HVolleyHit",0)
		RSPK ABCDE 3
		Stop
	}
}

actor SvenPrecursor
{
	monster
	+DONTBLAST
	+bright
	+friendly
	+nevertarget
	+thruactors
	-SOLID
	+nogravity
	Speed 0
	Radius 4
	Height 4
	Damage (0)
	scale 2
	Mass 9999999

	var int user_FallTimer;
	States
	{
	Spawn:
		TNT1 A 0
		SVT4 A 1 ACS_NamedExecuteAlways("TurretDeleter", 0, 0, 0, 0)		
		SVT4 A 2
		TNT1 A 0 A_ScaleVelocity (0.30)
		SVT4 A 2
		TNT1 A 0 A_ScaleVelocity (0.30)
		SVT4 A 2
		TNT1 A 0 A_Stop
		Goto Searching
	Searching:
		SVT4 A 1 A_Look
		loop
	see:
		SVT4 A 1
		SVT4 A 2
		TNT1 A 0 A_JumpIfTargetInLOS ("Missile",360,0,1024,128)
		goto Searching
	Missile:
		SVT4 A 2
		SVT4 A 1 A_SetScale (1.50)
		TNT1 A 0 A_FaceTarget
		TNT1 A 0 A_PlaySound ("Kustam/TurretAttack",0)
		TNT1 A 0 A_CustomMissile ("RubyPellet",-1)
		SVT4 C 1 A_SetScale (3.00)
		SVT4 C 1 A_SetScale (1.20)
		SVT4 C 1 A_SetScale (2.30)
		SVT4 C 1 A_SetScale (2.00)
		SVT4 A 1 A_SetScale (1.50)
		TNT1 A 0 A_FaceTarget
		TNT1 A 0 A_PlaySound ("Kustam/TurretAttack",0)
		TNT1 A 0 A_CustomMissile ("RubyPellet",-1)
		SVT4 C 1 A_SetScale (3.00)
		SVT4 C 1 A_SetScale (1.20)
		SVT4 C 1 A_SetScale (2.30)
		SVT4 C 1 A_SetScale (2.00)
		SVT4 A 1 A_SetScale (1.50)
		TNT1 A 0 A_FaceTarget
		TNT1 A 0 A_PlaySound ("Kustam/TurretAttack",0)
		TNT1 A 0 A_CustomMissile ("RubyPellet",-1)
		SVT4 C 1 A_SetScale (3.00)
		SVT4 C 1 A_SetScale (1.20)
		SVT4 C 2 A_SetScale (2.30)
		SVT4 C 1 A_SetScale (2.00)
		SVT4 C 1
	
		SVT4 B random (1,2)
		TNT1 A 0 A_ClearTarget
		goto Searching
	death:
		TNT1 A 0
		TNT1 A 0 A_PlaySound ("Kustam/TurretFall",0)
		SVT4 A 1 ThrustThingZ (0,8,0,0)
	FallLoop:
		SVT4 A 1 A_CheckFloor ("Shatter")
		TNT1 A 0 A_SetUserVar ("user_FallTimer", user_FallTimer+1)
		TNT1 A 0 A_JumpIf (user_FallTimer >= 60, "Shatter") //Sanity check in case this thing gets stuck on actors.
		loop
	Shatter:
		TNT1 A 0 A_PlaySound ("Kustam/TurretShatter",0)
		RSPK ACFG 3
		Stop
	}
}

actor RubyPellet
{
	+notimefreeze
	+FORCEXYBILLBOARD	
	+thruspecies	
	+bright
	Projectile
	damage (20)
	species "Friendly"
	speed 45
	height 8
	radius 8
    Scale 2
	alpha 0.95
	+BLOODSPLATTER
	+NOEXTREMEDEATH
	Decal DoomImpScorch
	states
	{
	Spawn:
		RBPT AA 1
		TNT1 A 1
		RBPT AA 1
		TNT1 A 1
		RBPT BB 1
		TNT1 A 1
		RBPT BB 1
		TNT1 A 1
	flying:
		RBPT CC 1
		TNT1 A 1
		loop
	Death:
		TNT1 A 0
		RBPT DEFG 2
		Stop
	XDeath:
		TNT1 A 0
		TNT1 A 0
		TNT1 A 0 A_PlaySound ("Kustam/marked",0,1,0,0.8)
		TNT1 A 0 A_SetScale (3)
		RBPT DEFG 2
		Stop
	}
}


//===========================================================================================
//===========================================================================================
//===========================================================================================
//===========================================================================================


ACTOR ThunderBeamTip : BulletPuff
{
	+PUFFGETSOWNER
	+NOBLOCKMAP
	+NOGRAVITY
	+RANDOMIZE
	+MTHRUSPECIES
	+THRUSPECIES
	+bright
	+ALWAYSPUFF
	+PUFFONACTORS
	+BLOODLESSIMPACT
	+FORCERADIUSDMG
	//+HITTRACER
	VSpeed 0
	Species "Friendly"
	-ALLOWPARTICLES
	States
	{
	Spawn:
		TZP5 A 2
		TNT1 AAAAAA 0 A_SpawnItemEx ("PulseTendril",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION)
		TNT1 A 0 A_SetTranslucent (0.80,1)
		TNT1 A 0 A_Explode (200,190,0,1,190)
		TNT1 A 0 radius_quake (4,30,0,20,0)
		TNT1 A 0 A_SpawnItemEx ("LashAOESpawner",0,0,0,0,0,0,0,SXF_TRANSFERPOINTERS|SXF_NOCHECKPOSITION)
		TZP5 BCDEFFGG 2  A_SpawnItemEx ("PulseTendril",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION,60)
		TNT1 A random (1,3)
		TNT1 AAA 0 A_SpawnItemEx ("PulseTendril",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION)
		TNT1 A random (1,3)
		TNT1 AA 0 A_SpawnItemEx ("PulseTendril",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION)
		Stop
	}
}


ACTOR ThunderBeamCore
{   
	//+NOINTERACTION
	+NOGRAVITY
	+FORCEXYBILLBOARD
	+bright
	RenderStyle Add
	Alpha 0.20
	Scale 0.25
	States
	{
	Spawn:
		TNT1 A 0
		TNT1 A 0 A_CheckRange (40,"Emit")
		TNT1 A 1
		Stop
	Emit:
		TZP1 B 1 A_SetScale (0.85,0.85) 
		TZP1 B 1 A_SetScale (0.75,0.75) 
		TNT1 A 0 A_FadeIn (0.75)
		TZP1 C 1 A_SetScale (0.35,0.35)
		TZP1 C 1 A_SetScale (0.10,0.10)
		TZP1 C 1 A_SetScale (0.05,0.05)
		TNT1 A 0 A_Jump (60,"LastZap","LastZap2")
		Stop
	LastZap:
		TNT1 A random (8,14)
		TNT1 A 0 A_SetScale (0.15)
		TNT1 A 0 A_Jump (100,2)
		TNT1 A 0 A_SetScale (ScaleX, ScaleY * -1)
		TZP1 FGF 1
		Stop
	LastZap2:
		TNT1 A random (6,9)
		TNT1 A 0 A_SetScale (0.15)
		TNT1 A 0 A_Jump (100,2)
		TNT1 A 0 A_SetScale (ScaleX * -1, ScaleY)
		TZP1 GFG 1
		Stop
		
	}
}


Actor SparkRailFX
{
	RenderStyle add
	Alpha 0.99
	Scale 0.30
	+NOBLOCKMAP
	+NOGRAVITY
	+NOCLIP
	+DONTSPLASH
	+NOTELEPORT
	+clientsideonly
	+bright
	States
	{
	spawn:
		TNT1 A 0 
		TNT1 A 0 A_CheckRange (40,"Flight")
		TNT1 A 2 
		goto death
	Flight:
		TNT1 A 0
		TZP1 ABCDECABE 1
		TNT1 A 0 A_Jump (80,"LingeringZap","LingeringZap2")
		Stop
	death:
		TNT1 A 1
		Stop
	LingeringZap:
		TNT1 A random (3,7)
		TZP1 FGF 1
		TNT1 A random (3,7)
		TNT1 A 0 A_SetScale (ScaleX * -1, ScaleY)
		TNT1 A 0 A_Jump (20,"LingeringZap2")
		Stop
	LingeringZap2:
		TNT1 A random (1,3)
		TZP1 GFG 1
		TNT1 A random (1,3)
		TNT1 A 0 A_SetScale (ScaleX, ScaleY * -1)
		TNT1 A 0 A_Jump (10,"LingeringZap")
		Stop
	}
}


actor LashAOESpawner
{
	Projectile
	+NOBLOCKMAP
	+NOGRAVITY
	+ALLOWPARTICLES
	+RANDOMIZE
	+NOTELEPORT
	+NOCLIP
	+FORCEPAIN
	+bright
	Alpha 0.90
	Scale 1
	Mass 5
	reactiontime 4
	
	var int user_LashPulseTimer;
	states
	{
	Spawn:
		TNT1 A 0
		TZP2 A 1 A_SetScale (0.80)
		TZP2 B 1 A_SetScale (2.40)
		TNT1 A 0 A_RadiusGive ("LashZapper", 250,RGF_MONSTERS,1)
		TNT1 A 0 A_SetUserVar ("User_LashPulseTimer",0)
		TNT1 AA 0 A_SpawnItemEx ("PulseTendril",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION)
		TZP2 CC 1 A_SetScale (2.30)
		TZP2 CC 1 A_SetScale (1.60)
		TZP2 A 1 A_SetScale (1.10)
		goto Waiting
	Waiting:
		TZP2 AA 1 A_SetScale (1.05)
		TNT1 AAAA 0 A_SpawnItemEx("LashZapFX",frandom(-20,20),frandom(-20,20),frandom(-15,15),frandom(-1,1),frandom(-1,1),0,0,SXF_NOCHECKPOSITION)
		TZP2 AA 1 A_SetScale (0.95)
		TNT1 AAAAA 0 A_SpawnItemEx("LashZapFX",frandom(-20,20),frandom(-20,20),frandom(-15,15),frandom(-1,1),frandom(-1,1),0,0,SXF_NOCHECKPOSITION)
		TZP2 A 1 A_SetScale (1)
		TZP2 A 1 A_SetUserVar ("User_LashPulseTimer", User_LashPulseTimer+1)
		TNT1 A 0 A_JumpIf (user_LashPulseTimer >= 9, "Pulse")
		loop
	Pulse:
		TZP2 A 1 A_SetScale (0.80)
		TZP2 B 1 A_SetScale (2.40)
		TNT1 A 0 A_PlaySound ("ThunderLash/Zap",0)
		TNT1 A 0 A_RadiusGive ("LashZapper", 250,RGF_MONSTERS,1)
		TNT1 AA 0 A_SpawnItemEx ("PulseTendril",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION)
		TNT1 A 0 A_SetUserVar ("User_LashPulseTimer",0)
		TZP2 CC 1 A_SetScale (2.30)
		TZP2 CC 1 A_SetScale (1.60)
		TZP2 A 1 A_SetScale (1.10)
		TNT1 A 0 A_Countdown
		Goto Waiting
	Death:
		TNT1 A 0
		TNT1 A 1
		Stop
	}
}



actor LashChain
{
	Projectile
	+THRUSPECIES
	+RIPPER
	+BLOODLESSIMPACT
	+NOBLOOD
	+BRIGHT
	+FORCEPAIN
	+FORCERADIUSDMG
	+NODAMAGETHRUST
	species "Player"
	damage (1)
	scale 0.80
	Radius 4
	Height 5
	states
	{
	spawn:
		TNT1 A 0
		TNT1 A random (1,3)
		TNT1 A 0 A_FadeOut (0.20)
		goto ZapChoice
	ZapChoice:
		TNT1 A 0
		TNT1 A 0
		TNT1 A 0 A_Jump (100,"Flip1","Flip2","Flip3")
		TNT1 A 0 A_Jump (60,"Zapping2")
		TZP1 FGF 2 A_explode (1,60,0,1,60)
		Goto Death
	Flip1:
		TNT1 A 0 
		TNT1 A 0 A_SetScale (ScaleX * -1, ScaleY)
		TNT1 A 0 A_Jump (60,"Zapping2")
		TZP1 FGF 2 A_explode (1,60,0,1,60)
		Goto Death
	Flip2:
		TNT1 A 0 
		TNT1 A 0 A_SetScale (ScaleX, ScaleY * -1)
		TNT1 A 0 A_Jump (60,"Zapping2")
		TZP1 FGF 2 A_explode (1,60,0,1,60)
		Goto Death
	Flip3:
		TNT1 A 0 
		TNT1 A 0 A_SetScale (ScaleX * -1, ScaleY * -1)
		TNT1 A 0 A_Jump (60,"Zapping2")
		TZP1 FGF 2 A_explode (1,60,0,1,60)
		Goto Death
	
	Zapping2:
		TZP1 GFG 2
		Goto Death		
	Death:
		TNT1 A 0
		TNT1 A 1
		Stop
	}
}



actor LashZapFX
{
	+NOBLOCKMAP
	+NOGRAVITY
	+BRIGHT
	+CLIENTSIDEONLY
	scale 0.80
	Mass 5
	states
	{
	spawn:
		TNT1 A 0
		TNT1 A random (1,3)
		TNT1 A 0 A_FadeOut (0.20)
		goto ZapChoice
	ZapChoice:
		TNT1 A 0
		TNT1 A 0
		TNT1 A 0 A_PlaySound ("ThunderLash/IdleZaps",CHAN_VOICE)
		TNT1 A 0 A_Jump (100,"Flip1","Flip2","Flip3")
		TNT1 A 0 A_Jump (60,"Zapping2")
		TZP1 FGF 2
		Goto Death
	Flip1:
		TNT1 A 0 
		TNT1 A 0 A_SetScale (ScaleX * -1, ScaleY)
		TNT1 A 0 A_Jump (60,"Zapping2")
		TZP1 FGF 2 
		Goto Death
	Flip2:
		TNT1 A 0 
		TNT1 A 0 A_SetScale (ScaleX, ScaleY * -1)
		TNT1 A 0 A_Jump (60,"Zapping2")
		TZP1 FGF 2
		Goto Death
	Flip3:
		TNT1 A 0 
		TNT1 A 0 A_SetScale (ScaleX * -1, ScaleY * -1)
		TNT1 A 0 A_Jump (60,"Zapping2")
		TZP1 FGF 2 
		Goto Death
	
	Zapping2:
		TZP1 GFG 2
		Goto Death
	Death:
		TNT1 A 0
		TNT1 A 1
		Stop
	}
}

actor PulseTendril
{
	+NOBLOCKMAP
	+NOGRAVITY
	+BRIGHT
	+NOCLIP
	+CLIENTSIDEONLY
	scale 0.60
	Mass 5
	states
	{
	Spawn:
		TNT1 A 0
		TNT1 A random (1,2)
		TNT1 A 0 A_jump (160,"Tendril2","Tendril3","Tendril4")
		TZP3 A 1 A_SetScale (0.70)
		TZP3 A 1 A_SetScale (0.60)
		goto death
	Tendril2:
		TZP3 B 1 A_SetScale (0.70)
		TZP3 B 1 A_SetScale (0.60)
		goto death
	Tendril3:
		TZP3 C 1 A_SetScale (0.70)
		TZP3 C 1 A_SetScale (0.60)
		TZP3 C 1
		goto death
	Tendril4:
		TZP3 D 1 A_SetScale (0.70)
		TZP3 D 1 A_SetScale (0.60)
		goto death
	Death:
		TNT1 A 0
		TNT1 A 1
		Stop
	}
}


Actor LashZapSpawner : CustomInventory
{ 
	+INVENTORY.AUTOACTIVATE
	+INVENTORY.ALWAYSPICKUP
	States 
	{ 
	Pickup: 
		TNT1 A 0 
		TNT1 A 1
		TNT1 A 0 a_throwgrenade ("LashZapEffect",-15,0,0)
		Stop
	}
}

actor LashZapEffect
{
	projectile
	+nointeraction
	speed 10
	+BRIGHT
	scale 2
	states
	{
	spawn:	
		TNT1 A 0
		TNT1 AAAA 0 A_SpawnItemEx ("LashZapFX",frandom(-16,16),frandom(-16,16),frandom(-20,25),frandom(-1,1),frandom(-1,1),0,0,SXF_NOCHECKPOSITION)
		TNT1 AAA 0 A_SpawnItemEx("LashZapFX",frandom(-16,16),frandom(-16,16),frandom(-20,24),frandom(-1,1),frandom(-1,1),0,0,SXF_NOCHECKPOSITION)
		TNT1 AA 0 A_SpawnItemEx("LashZapFX",frandom(-16,16),frandom(-16,16),frandom(-20,24),frandom(-1,1),frandom(-1,1),0,0,SXF_NOCHECKPOSITION) 
		TNT1 A 2
		Stop
	}
}

ACTOR ThunderLashHitFX
{
	+NOBLOCKMAP
	+NOGRAVITY
	+NOCLIP
	+NOTELEPORT
	+bright
	renderstyle add
	alpha 0.70
	scale 1
	States
	{
	Spawn:
		TNT1 A 0
		TNT1 A 0 A_SetScale (1,1)
		TNT1 A random (1,2)
		TNT1 A 0 A_PlaySound("BionicRifle/WireMelee", CHAN_AUTO)
		TZP4 ABCDEF 2
		Stop
	Death:
		TNT1 A 0
		TNT1 A 1
		Stop
	}
}



actor LashZapper : custominventory
{
	+inventory.alwayspickup
	+INVENTORY.AUTOACTIVATE
	states
	{
	pickup:
		TNT1 A 0
		TNT1 A 0 A_JumpIfInventory ("LashZapTimer",1,"NoHit")
		TNT1 A 1 A_checkflag ("Friendly", "NoHit")
		TNT1 A 0 A_FaceTarget
		TNT1 A 0 A_GiveInventory ("LashZapTimer",1)
		TNT1 A 0 ACS_NamedExecuteAlways("LashZapSpinner", 0, 0, 0, 0)		
		TNT1 A 0 A_RadiusGive ("LashZapper2",250,RGF_MONSTERS,1)
		TNT1 A 1 A_SpawnItemEx ("ThunderLashHitFX",0,0,34,0,0,0,0,SXF_NOCHECKPOSITION)
		Stop
	NoHit:
		TNT1 A 0
		TNT1 A 1
		Stop
	}
}

actor LashZapper2 : LashZapper
{
	states
	{
	pickup:
		TNT1 A 0
		TNT1 A 0 A_JumpIfInventory ("LashZapTimer",1,"NoHit")
		TNT1 A 1 A_checkflag ("Friendly", "NoHit")
		TNT1 A 0 A_FaceTarget
		TNT1 A 0 A_GiveInventory ("LashZapTimer",1)
		TNT1 A 0 ACS_NamedExecuteAlways("LashZapSpinner", 0, 0, 0, 0)		
		TNT1 A 0 A_RadiusGive ("LashZapper3",150,RGF_MONSTERS,1)
		TNT1 A 1 A_SpawnItemEx ("ThunderLashHitFX",0,0,34,0,0,0,0,SXF_NOCHECKPOSITION)
		Stop
	}
}


actor LashZapper3 : LashZapper
{
	states
	{
	pickup:
		TNT1 A 0
		TNT1 A 0 A_JumpIfInventory ("LashZapTimer",1,"NoHit")
		TNT1 A 1 A_checkflag ("Friendly", "NoHit")
		TNT1 A 0 A_FaceTarget
		TNT1 A 0 A_GiveInventory ("LashZapTimer",1)
		TNT1 A 0 ACS_NamedExecuteAlways("LashZapSpinner", 0, 0, 0, 0)		
		TNT1 A 0 A_RadiusGive ("LashZapper4",80,RGF_MONSTERS,1)
		TNT1 A 1 A_SpawnItemEx ("ThunderLashHitFX",0,0,34,0,0,0,0,SXF_NOCHECKPOSITION)
		Stop
	}
}

actor LashZapper4 : LashZapper
{
	states
	{
	pickup:
		TNT1 A 0
		TNT1 A 0 A_JumpIfInventory ("LashZapTimer",1,"NoHit")
		TNT1 A 1 A_checkflag ("Friendly", "NoHit")
		TNT1 A 0 A_FaceTarget
		TNT1 A 0 A_GiveInventory ("LashZapTimer",1)
		TNT1 A 0 ACS_NamedExecuteAlways("LashZapSpinner", 0, 0, 0, 0)		
		TNT1 A 1 A_SpawnItemEx ("ThunderLashHitFX",0,0,34,0,0,0,0,SXF_NOCHECKPOSITION)
		Stop
	}
}



Actor LashZapTimer : Powerup
{
  Powerup.Duration -1
}

