ACTOR Evangelizer : Weapon 25017
{
  Radius 24
  Height 16
  Obituary "%o was nailed by %k's Evangelizer Mk.3 Gauss Cannon"
  Tag "Evangelizer A.G.P. Mk.3"
  Inventory.PickupMessage "You got the Evangelizer Mk.3 Accelerated Gauss Platform! Warning, point away from face."
  Weapon.SelectionOrder 100
  Weapon.SlotNumber 9
  Weapon.Kickback 500
  Weapon.AmmoType1 "RailClip"
  Weapon.AmmoType2 "GaussCharge"
  Weapon.AmmoUse1 1
  Weapon.AmmoGive1 6
  Weapon.UpSound "Railgun/Select"
  weapon.bobstyle inversesmooth
  weapon.bobrangeX 0.4
  weapon.bobrangeY 0.6
  weapon.bobspeed 2.5
  +WEAPON.AMMO_OPTIONAL
  +WEAPON.ALT_AMMO_OPTIONAL
  +WEAPON.Alt_Uses_Both
  +EXTREMEDEATH
  +NOALERT
  +NOAUTOAIM
  States
  {
  Spawn:
    GAUP A -1
    Stop
  Ready:
    GCSI A 1 A_WeaponReady
    Loop
  Deselect:
    TNT1 A 0 SetPlayerProperty(0,1,2)
	TNT1 A 0 A_SetCrosshair(1)
	GCSS ABCDE 1
	Goto DeselectLoop
  DeselectLoop:
    TNT1 A 1 A_Lower
    Loop
  Select:
    TNT1 A 0 SetPlayerProperty(0,0,2)
	TNT1 A 0 A_SetCrosshair(18)
    GCSS EDCBA 1
    Goto SelectLoop
  SelectLoop:
    GCSI A 1 A_Raise
	loop
  Fire:
	TNT1 A 0 A_JumpIfInventory("RailClip", 1, 1)
    Goto DryFire
	TNT1 A 0 A_AlertMonsters
	TNT1 A 0 A_ChangeVelocity(-cos(-pitch)*2,0,sin(pitch)*2,CVF_RELATIVE) //this recoil applies always
	TNT1 A 0 A_CheckFloor(2)
	TNT1 A 0 A_ChangeVelocity(-cos(-pitch)*12,0,sin(pitch)*12,CVF_RELATIVE) //only when in air
	TNT1 A 0 A_FireCustomMissile("GaussSiegeDamageAndPuff",0,0,0)
	TNT1 A 0 A_RailAttack(0,5,1,"None","None",RGF_SILENT|RGF_FULLBRIGHT|RGF_NOPIERCING,0,None,0,0,8192,0,15,1.0,"GaussTrailMain") //to spawn the trail
	TNT1 A 0 A_RailAttack(0,5,1,"None","None",RGF_SILENT|RGF_FULLBRIGHT|RGF_NOPIERCING,0,None,0,0,8192,0,64,1.0,"SP_GaussTrailSiegeAOE") //to spawn the trail
	TNT1 A 0 A_RailAttack(0,5,1,"none","none",RGF_SILENT|RGF_FULLBRIGHT|RGF_NOPIERCING,0,None,0,0,8192,0,1,1.0,"gausssmoke_spawner_gc")
	TNT1 A 0 A_PlaySound("Railgun/AltFire",123,1.0,0,1)
	TNT1 A 0 A_PlaySound("Railgun/Fire",120,1.0,0,1)
	TNT1 A 0 A_PlaySound("Railgun/Add",125,1.0,0,1)
	GCSF A 1 Bright Offset(15,42)
	GCSF B 2 Bright Offset(27,50)
	GCSF CD 2 Bright
	GCSF E 1 Offset(24,48)
	GCSF E 1 Offset(21,46)
	GCSF E 1 Offset(18,44)
	GCSF F 1 Offset(15,42)
	GCSF F 1 Offset(12,40)
	GCSF F 1 Offset(9,38)
	GCSF G 1 Offset(6,36)
	GCSF G 1 Offset(3,34)
	GCSF G 1 Offset(1,32)
	GCSF HH 2 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)
	GCSF II 2 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)
	GCSF JJJJJJJJJJJJJJ 2 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)
	GCSF KLMNO 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)
	goto Ready
  AltFire:
	TNT1 A 0 A_JumpIfInventory("RailClip", 1, 1)
    Goto DryFire
    TNT1 A 0 A_PlaySound("Railgun/ChargeStart",121,1.0,0,1)
	GCSI AA 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)
	GCSI AA 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)
	GCSC AB 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)
	GCSC CD 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)
	GCSC DD 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)
	GCSC EF 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)
	GCSC GH 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)
	GCSC II 5 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)
	GCSC JK 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)
	GCSC LM 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)
	GCSC M 10 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)
	TNT1 A 0 A_PlaySound("Railgun/ChargeFinish",122,1.0,0,1)
  AltHold:
	TNT1 A 0 A_PlaySound("Railgun/ChargeLoop",123,1.0,1,1)
	GCSL A 1 bright A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)
	TNT1 A 0 A_GiveInventory("GaussCharge",1)
	GCSL B 1 bright A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)
	TNT1 A 0 A_GiveInventory("GaussCharge",1)
	GCSL C 1 bright A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)
	TNT1 A 0 A_GiveInventory("GaussCharge",1)
	GCSL D 1 bright A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)
	TNT1 A 0 A_GiveInventory("GaussCharge",1)
	TNT1 A 0 A_Refire
	TNT1 A 0 A_JumpIfInventory("GaussCharge",100,"Release")
	Goto Nope
  Release:
    TNT1 A 0 A_AlertMonsters
	TNT1 A 0 A_ChangeVelocity(-cos(-pitch)*2,0,sin(pitch)*2,CVF_RELATIVE) //this recoil applies always
	TNT1 A 0 A_CheckFloor(2)
	TNT1 A 0 A_ChangeVelocity(-cos(-pitch)*12,0,sin(pitch)*12,CVF_RELATIVE) //only when in air
	TNT1 A 0 A_FireCustomMissile("GaussUberSiegeDamageAndPuff",0,1,0)
	TNT1 A 0 A_RailAttack(0,5,1,"None","None",RGF_SILENT|RGF_FULLBRIGHT,0,None,0,0,8192,0,15,1.0,"GaussTrailUber") //to spawn the trail
	TNT1 A 0 A_RailAttack(0,5,1,"None","None",RGF_SILENT|RGF_FULLBRIGHT,0,None,0,0,8192,0,64,1.0,"SP_GaussTrailUberSiegeAOE") //to spawn the trail
	TNT1 A 0 A_RailAttack(0,5,1,"none","none",RGF_SILENT|RGF_FULLBRIGHT,0,None,0,0,8192,0,1,1.0,"gausssmoke_spawner_ubersiege")
	TNT1 A 0 A_PlaySound("Railgun/AltFire",123,1.0,0,1)
	TNT1 A 0 A_PlaySound("Railgun/Fire",120,1.0,0,1)
	TNT1 A 0 A_PlaySound("Railgun/Add",125,1.0,0,1)
	TNT1 A 0 A_TakeInventory("RailClip",6)
	GCSM A 1 Bright Offset(15,42)
	GCSM B 2 Bright Offset(27,50)
	GCSM CD 2 Bright 
	GCSC I 1 Offset(24,48)
	GCSC H 1 Offset(21,46)
	GCSC G 1 Offset(18,44)
	GCSC F 1 Offset(15,42)
	GCSC E 1 Offset(12,40)
	GCSC D 1 Offset(9,38)
	GCSC D 1 Offset(6,36)
	GCSC D 1 Offset(3,34)
	GCSC D 1 Offset(1,32)
	Goto Compress
  Compress:
	TNT1 A 0 A_TakeInventory("GaussCharge",999)
	GCSC DDDDDDDDDDDDDD 2 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)
	GCSC CBAA 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)
	GCSI A 20 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)
    Goto Ready
  DryFire:
	TNT1 A 0 A_TakeInventory("GaussCharge",999)
	TNT1 A 0 A_PlaySound("Plasma/Empty",199,1.0,0,1)
	GCSI A 10 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)
	Goto Ready
  Nope:
	TNT1 A 0 A_TakeInventory("GaussCharge",999)
	TNT1 A 0 A_PlaySound("Railgun/Powerdown",123,1.0,0,1)
	GCSC I 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)
	GCSC H 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)
	GCSC G 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)
	GCSC F 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)
	GCSC E 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)
	GCSC D 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)
	GCSC D 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)
	GCSC D 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)
	GCSC D 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)
	GCSC DDDDDDD 2 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)
	TNT1 A 0 A_PlaySound("Railgun/Compressor",124,0.75,0,1)
	GCSC DDDDDDD 2 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)
	GCSC CBAA 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)
	GCSI A 10 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)
	Goto Ready
  }
}

Actor GaussCharge : Ammo
{
+INVENTORY.IGNORESKILL
Inventory.MaxAmount 100 
}

ACTOR RailClip : Ammo 26208
{
	Inventory.PickupMessage "you picked up a magazine of 5 LM68 H.D.A.P. Slugs."
	radius 16
    height 8
    scale 0.35
	Inventory.Amount 5
	Inventory.MaxAmount 30
	Ammo.BackpackAmount 2
	Ammo.BackpackMaxAmount 60
	States
	{
	spawn:
	GLSU ABCDEFGHIJKLM 2
	loop
	}
}

actor gauss_smoke_gc {
	scale 0.055
	alpha 0.8
	Translation "0:255=%[0,0,0]:[0.9,2.0,2.0]"
	renderstyle add
	+NOINTERACTION
	+NOGRAVITY
	+FORCEXYBILLBOARD
	+NOTELEPORT
	+CLIENTSIDEONLY
	states {
		spawn:
			TNT1 A 0
			TNT1 A 0 A_Jump(255, "Smok1","Smok2","Smok3","Smok4")
		Smok1:
			SMO1 A 2 A_FadeOut(0.05)
			TNT1 A 0 A_ScaleVelocity(0.9)
			loop
		Smok2:
			SMO1 B 2 A_FadeOut(0.05)
			TNT1 A 0 A_ScaleVelocity(0.9)
			loop
		Smok3:
			SMO1 C 2 A_FadeOut(0.05)
			TNT1 A 0 A_ScaleVelocity(0.9)
			loop
		Smok4:
			SMO1 D 2 A_FadeOut(0.05)
			TNT1 A 0 A_ScaleVelocity(0.9)
			loop

	}
}

actor gauss_smoke_uber {
	scale 0.25
	alpha 0.8
	Translation "0:255=%[0,0,0]:[0.9,2.0,2.0]"
	renderstyle add
	+NOINTERACTION
	+NOGRAVITY
	+FORCEXYBILLBOARD
	+NOTELEPORT
	+CLIENTSIDEONLY
	states {
		spawn:
			TNT1 A 0
			TNT1 A 0 A_Jump(255, "Smok1","Smok2","Smok3","Smok4")
		Smok1:
			SMO1 A 2 A_FadeOut(0.05)
			TNT1 A 0 A_ScaleVelocity(0.9)
			loop
		Smok2:
			SMO1 B 2 A_FadeOut(0.05)
			TNT1 A 0 A_ScaleVelocity(0.9)
			loop
		Smok3:
			SMO1 C 2 A_FadeOut(0.05)
			TNT1 A 0 A_ScaleVelocity(0.9)
			loop
		Smok4:
			SMO1 D 2 A_FadeOut(0.05)
			TNT1 A 0 A_ScaleVelocity(0.9)
			loop

	}
}

actor gausssmoke_spawner_gc {
	+NOINTERACTION
	+NOGRAVITY
	+NOTELEPORT
	+NOCLIP
	states{
		spawn:
			NULL A 0
			NULL A 0 A_SpawnItemEx("gauss_smoke_gc", 20, 0, -2, 0, frandom(-0.5,0.5), frandom(0.1,0.6), 0, SXF_TRANSFERPOINTERS, SXF_CLIENTSIDE)
			stop
	}

}

actor gausssmoke_spawner_ubersiege {
	+NOINTERACTION
	+NOGRAVITY
	+NOTELEPORT
	+NOCLIP
	states{
		spawn:
			NULL A 0
			NULL A 0 A_SpawnItemEx("gauss_smoke_uber", 20, 0, -2, 0, frandom(-0.5,0.5), frandom(0.1,0.6), 0, SXF_TRANSFERPOINTERS, SXF_CLIENTSIDE)
			stop
	}

}

Actor GaussTrailMain
{
	+NOINTERACTION
	+FORCEXYBILLBOARD
	+CLIENTSIDEONLY
	Scale 0.15
	RenderStyle Add
	Translation "0:255=%[0,0,0]:[0.9,2.0,2.0]"
	States
	{
	Spawn:
		HSPL A 0 NODELAY A_Jump(256,1,2,3,4,5,6,7,8)
		HSPL ABCDEFGH 0 A_Jump(256,"Play")
	Play:
		//"####" "#" 4 BRIGHT 
	Looper:
		"####" "#" 1 BRIGHT A_FadeOut(0.05)
		"####" "#" 0 BRIGHT A_SetScale(scalex-0.007)
		Loop
	}
}

Actor GaussTrailUber
{
	+NOINTERACTION
	+FORCEXYBILLBOARD
	+CLIENTSIDEONLY
	Scale 0.45
	RenderStyle Add
	Translation "0:255=%[0,0,0]:[0.9,2.0,2.0]"
	States
	{
	Spawn:
		HSPL A 0 NODELAY A_Jump(256,1,2,3,4,5,6,7,8)
		HSPL ABCDEFGH 0 A_Jump(256,"Play")
	Play:
		//"####" "#" 4 BRIGHT 
	Looper:
		"####" "#" 1 BRIGHT A_FadeOut(0.05)
		"####" "#" 0 BRIGHT A_SetScale(scalex-0.007)
		Loop
	}
}

Actor GaussCannonPuffNormal //main puff, shockwave fast
{
	+NOINTERACTION
	Translation "0:255=%[0,0,0]:[0.9,2.0,2.0]"
	Scale 0.3
	RenderStyle Add
	Decal "D4GaussPrimary"
	+ALWAYSPUFF
	+PUFFONACTORS
	+FORCEXYBILLBOARD
	+PUFFGETSOWNER
	DamageType "GaussExplosion"
	States
	{
	Spawn:
		TNT1 A 0 NODELAY A_Warp(AAPTR_DEFAULT,5,0,0,WARPF_NOCHECKPOSITION) //moves it 5MU towards the player, to get it unstuck from walls
		TNT1 A 0 A_PlaySound("Railgun/Impact")
		TNT1 A 0 A_Quake(1,20,0,768,"None")
		TNT1 AAAA 0 A_SpawnItemEx("GaussCannonParticle",3,0,0,frandom(0.3,3.5),frandom(-3.5,3.5),frandom(0.6,5),0,SXF_NOCHECKPOSITION)
		TNT1 AA 0 A_SpawnItemEx("GaussCannonPuffGas",0,0,0,frandom(0,1),frandom(1,-1),frandom(1,-1),0,SXF_NOCHECKPOSITION)
		TNT1 A 0 A_SetScale(scalex*1.2)
		TNT1 A 0 A_Jump(256, "Idle")
		Goto Idle
		
	Idle:
		TNT1 AA 0 A_SpawnItemEx("GaussParticlesFew",0,0,0,0,0,0,0,32)
		X060 A 1 Bright 
		TNT1 A 0 A_Explode(128,160)	//explodes after 1 tic
		Goto PreLooper
		
	PreLooper:
		X060 A 0 A_SpawnItemEx("GaussCannonShockwave2",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION)
		X060 A 1 Bright A_SetScale(scalex*1.2)	//grows a bit before fading out
	Looper:
		X060 A 1 Bright  A_SetScale(scalex*1.2)
		X060 A 0 A_FadeOut(0.1)
		Loop
	}
}

Actor GaussCannonPuffSiege : GaussCannonPuffNormal //main puff, shockwave fast
{
	Obituary "%o fell to %k's siege."
	States
	{
	Idle:
		TNT1 A 0 A_SpawnItemEx("GaussParticlesManyBig",0,0,0,0,0,0,0,32)
		TNT1 A 0 A_SpawnItemEx("GaussParticlesFewBig",0,0,0,0,0,0,0,32)
		X060 A 1 Bright 
		TNT1 A 0 A_Explode(64,160)	//explodes after 1 tic
		Goto PreLooper
	}
}

Actor GaussCannonPuffUberSiege : GaussCannonPuffNormal //main puff, shockwave fast
{
	Obituary "%o fell to %k's siege."
	States
	{
	Idle:
		TNT1 A 0 A_SpawnItemEx("GaussParticlesManyUber",0,0,0,0,0,0,0,32)
		TNT1 A 0 A_SpawnItemEx("GaussParticlesFewUber",0,0,0,0,0,0,0,32)
		X060 A 1 Bright 
		TNT1 A 0 A_Explode(64,160)	//explodes after 1 tic
		Goto PreLooper
	}
}

Actor GaussCannonShockwave2 //secondary shockwave, slow
{
	+NOINTERACTION
	Translation "0:255=%[0,0,0]:[0.9,2.0,2.0]"
	Scale 0.3
	RenderStyle Add
	+FORCEXYBILLBOARD
	+CLIENTSIDEONLY
	States
	{
	Spawn:
		X060 B 1 Bright NODELAY A_SetScale(scalex*1.2)	//grows a bit before fading out
	Looper:
		X060 B 1 Bright  A_SetScale(scalex*1.2)
		X060 B 0 A_FadeOut(0.1)
		Loop
	}
}

Actor GaussCannonParticle
{
	Projectile
	Speed 10
	-NOGRAVITY
	+THRUACTORS
	+PAINLESS
	+DOOMBOUNCE
	+FORCEXYBILLBOARD
	+CLIENTSIDEONLY
	Alpha 0.5
	Radius 2
	Height 5
	Gravity 0.2
	BounceFactor 0.2
	WallBounceFactor 1.0
	RenderStyle Add
	Translation "0:255=%[0,0,0]:[0.9,2.0,2.0]"
	Scale 0.05
	states
	{
	Spawn:
		FX01 A 20 Bright
		FX01 A 1 Bright A_FadeOut(0.14)
		Wait
	}
}

Actor GaussCannonPuffGas
{
	+NOINTERACTION
	+FORCEXYBILLBOARD
	+CLIENTSIDEONLY
	Translation "0:255=%[0,0,0]:[0.9,2.0,2.0]"
	Scale 0.15
	Alpha 0.99
	RenderStyle Add
	States
	{
	Spawn:
		TNT1 A 0 NODELAY A_Jump(240,4,8,12,16,20,24,28,32,26,40,44,48,52,56,60,64,68,72,76,80)
	Looper:
		X102 A 1 Bright A_SetScale(scalex+0.07)		TNT1 A 0 A_FadeOut(0.035)
		X102 A 1 Bright A_SetScale(scalex+0.07)		TNT1 A 0 A_FadeOut(0.035)
		X102 B 1 Bright A_SetScale(scalex+0.07)		TNT1 A 0 A_FadeOut(0.035)
		X102 B 1 Bright A_SetScale(scalex+0.07)		TNT1 A 0 A_FadeOut(0.035)
		X102 C 1 Bright A_SetScale(scalex+0.07)		TNT1 A 0 A_FadeOut(0.035)
		X102 C 1 Bright A_SetScale(scalex+0.07)		TNT1 A 0 A_FadeOut(0.035)
		X102 D 1 Bright A_SetScale(scalex+0.07)		TNT1 A 0 A_FadeOut(0.035)
		X102 D 1 Bright A_SetScale(scalex+0.07)		TNT1 A 0 A_FadeOut(0.035)
		X102 E 1 Bright A_SetScale(scalex+0.07)		TNT1 A 0 A_FadeOut(0.035)
		X102 E 1 Bright A_SetScale(scalex+0.07)		TNT1 A 0 A_FadeOut(0.035)
		X102 F 1 Bright A_SetScale(scalex+0.07)		TNT1 A 0 A_FadeOut(0.035)
		X102 F 1 Bright A_SetScale(scalex+0.07)		TNT1 A 0 A_FadeOut(0.035)
		X102 G 1 Bright A_SetScale(scalex+0.07)		TNT1 A 0 A_FadeOut(0.035)
		X102 G 1 Bright A_SetScale(scalex+0.07)		TNT1 A 0 A_FadeOut(0.035)
		X102 H 1 Bright A_SetScale(scalex+0.07)		TNT1 A 0 A_FadeOut(0.035)
		X102 H 1 Bright A_SetScale(scalex+0.07)		TNT1 A 0 A_FadeOut(0.035)
		X102 I 1 Bright A_SetScale(scalex+0.07)		TNT1 A 0 A_FadeOut(0.035)
		X102 I 1 Bright A_SetScale(scalex+0.07)		TNT1 A 0 A_FadeOut(0.035)
		X102 J 1 Bright A_SetScale(scalex+0.07)		TNT1 A 0 A_FadeOut(0.035)
		X102 J 1 Bright A_SetScale(scalex+0.07)		TNT1 A 0 A_FadeOut(0.035)
		X102 K 1 Bright A_SetScale(scalex+0.07)		TNT1 A 0 A_FadeOut(0.035)
		X102 K 1 Bright A_SetScale(scalex+0.07)		TNT1 A 0 A_FadeOut(0.035)
		X102 L 1 Bright A_SetScale(scalex+0.07)		TNT1 A 0 A_FadeOut(0.035)
		X102 L 1 Bright A_SetScale(scalex+0.07)		TNT1 A 0 A_FadeOut(0.035)
		X102 M 1 Bright A_SetScale(scalex+0.07)		TNT1 A 0 A_FadeOut(0.035)
		X102 M 1 Bright A_SetScale(scalex+0.07)		TNT1 A 0 A_FadeOut(0.035)
		X102 N 1 Bright A_SetScale(scalex+0.07)		TNT1 A 0 A_FadeOut(0.035)
		X102 N 1 Bright A_SetScale(scalex+0.07)		TNT1 A 0 A_FadeOut(0.035)
		X102 O 1 Bright A_SetScale(scalex+0.07)		TNT1 A 0 A_FadeOut(0.035)
		X102 O 1 Bright A_SetScale(scalex+0.07)		TNT1 A 0 A_FadeOut(0.035)
		X102 P 1 Bright A_SetScale(scalex+0.07)		TNT1 A 0 A_FadeOut(0.035)
		X102 P 1 Bright A_SetScale(scalex+0.07)		TNT1 A 0 A_FadeOut(0.035)
		X102 Q 1 Bright A_SetScale(scalex+0.07)		TNT1 A 0 A_FadeOut(0.035)
		X102 Q 1 Bright A_SetScale(scalex+0.07)		TNT1 A 0 A_FadeOut(0.035)
		X102 R 1 Bright A_SetScale(scalex+0.07)		TNT1 A 0 A_FadeOut(0.035)
		X102 R 1 Bright A_SetScale(scalex+0.07)		TNT1 A 0 A_FadeOut(0.035)
		X102 S 1 Bright A_SetScale(scalex+0.03)		TNT1 A 0 A_FadeOut(0.021)
		X102 S 1 Bright A_SetScale(scalex+0.07)		TNT1 A 0 A_FadeOut(0.035)
		X102 T 1 Bright A_SetScale(scalex+0.07)		TNT1 A 0 A_FadeOut(0.035)
		X102 T 1 Bright A_SetScale(scalex+0.07)		TNT1 A 0 A_FadeOut(0.035)
		X102 U 1 Bright A_SetScale(scalex+0.07)		TNT1 A 0 A_FadeOut(0.035)
		X102 U 1 Bright A_SetScale(scalex+0.07)		TNT1 A 0 A_FadeOut(0.035)
		X102 V 1 Bright A_SetScale(scalex+0.07)		TNT1 A 0 A_FadeOut(0.035)
		X102 V 1 Bright A_SetScale(scalex+0.07)		TNT1 A 0 A_FadeOut(0.035)
		Loop
	}
}

Actor GaussParticlesMany
{
	+NOINTERACTION
	+FORCEXYBILLBOARD
	+CLIENTSIDEONLY
	RenderStyle Add
	Translation "0:255=%[0,0,0]:[0.9,2.0,2.0]"
	Scale 1.2
	Alpha 0.99
	States
	{
	Spawn:
		TNT1 A 0 NODELAY A_Jump(256,"Type1","Type2","Type3","Type4","Type5","Type6","Type7","Type8")
	Type1:
		DB37 A 0
		Goto EndAnimation
	Type2:
		DB38 A 0
		Goto EndAnimation
	Type3:
		DB39 A 0
		Goto EndAnimation
	Type4:
		DB40 A 0
		Goto EndAnimation
	Type5:
		DB41 A 0
		Goto EndAnimation
	Type6:
		DB42 A 0
		Goto EndAnimation
	Type7:
		DB43 A 0
		Goto EndAnimation
	Type8:
		DB44 A 0
		Goto EndAnimation
		
	EndAnimation:
		"####" ABCDE 2 Bright
		"####" FGHIJK 2 Bright
		"####" LMNOPQRSTUVWXYZ 2 Bright A_FadeOut(0.066)
		Stop
	}
}

Actor GaussParticlesFew : GaussParticlesMany
{
	States
	{
	Spawn:
		TNT1 A 0 NODELAY A_Jump(256,"Type1","Type2","Type3","Type4","Type5","Type6","Type7","Type8")
	Type1:
		DB29 A 0
		Goto EndAnimation
	Type2:
		DB30 A 0
		Goto EndAnimation
	Type3:
		DB31 A 0
		Goto EndAnimation
	Type4:
		DB32 A 0
		Goto EndAnimation
	Type5:
		DB33 A 0
		Goto EndAnimation
	Type6:
		DB34 A 0
		Goto EndAnimation
	Type7:
		DB35 A 0
		Goto EndAnimation
	Type8:
		DB36 A 0
		Goto EndAnimation
		
	EndAnimation:
		"####" ABCDE 2 Bright
		"####" FGHIJK 2 Bright
		"####" LMNOPQRSTUVWXYZ 2 Bright A_FadeOut(0.066)
		Stop
	}
}

Actor GaussParticlesManyBig : GaussParticlesMany
{	Scale 2.2	}
Actor GaussParticlesFewBig : GaussParticlesFew
{	Scale 2.2	}

Actor GaussParticlesManyUber : GaussParticlesMany
{	Scale 4.4	}
Actor GaussParticlesFewUber : GaussParticlesFew
{	Scale 4.4	}

Actor GaussSiegeDamageAndPuff : FastProjectile
{
	Speed 4000	//holy crap, im amazed it still works
	Radius 2
	Height 2
	RenderStyle None
	Decal "D4GaussPrimary"
	Damage (random(850,1500))
	//+RIPPER
	Obituary "%o was besieged by %k."
	States
	{
	Spawn:
		TNT1 A 1
		Loop
	Death:
		TNT1 AA 0 A_PlaySound("sfx/sboom")
		TNT1 A 0 A_Explode (255 ,128) //sv_crowdcontrollweap 0
		TNT1 A 0 A_SpawnItemEx("gaussshot_impactspawner",0,0,0,0,0,0)
		TNT1 A 2 A_SpawnItemEx("GaussCannonPuffSiege",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION)
		Stop
	}
}

Actor GaussUberSiegeDamageAndPuff : FastProjectile
{
	Speed 4000	//holy crap, im amazed it still works
	Radius 2
	Height 2
	RenderStyle None
	Decal "D4GaussPrimary"
	Damage (random(1700,3000))
	+RIPPER
	Obituary "%o was besieged by %k."
	States
	{
	Spawn:
		TNT1 A 1
		Loop
	Death:
		TNT1 AA 0 A_PlaySound("sfx/sboom")
		TNT1 A 0 A_Explode (255 ,128) //sv_crowdcontrollweap 0
		TNT1 A 0 A_SpawnItemEx("gaussshot_uberimpactspawner",0,0,0,0,0,0)
		TNT1 A 2 A_SpawnItemEx("GaussCannonPuffUberSiege",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION)
		Stop
	}
}

Actor SP_GaussTrailSiegeAOE
{
	+NOINTERACTION
	+FORCEXYBILLBOARD
	+FORCERADIUSDMG
	+PUFFGETSOWNER
	+NODAMAGETHRUST
	Scale 0.08
	RenderStyle Add
	Alpha 0.7
	Translation "0:255=%[0,0,0]:[0.9,2.0,2.0]"
	DamageType "GaussExplosion"
	Obituary "%o was besieged by %k."
	States
	{
	Spawn:
		X060 B 0
		X060 B 5 Bright A_Explode(128,128,0,0,96)
	Looper:
		X060 B 1 Bright  A_SetScale(scalex*1.2)
		X060 B 0 A_FadeOut(0.07)
		Loop
	}
}

Actor SP_GaussTrailUberSiegeAOE
{
	+NOINTERACTION
	+FORCEXYBILLBOARD
	+FORCERADIUSDMG
	+PUFFGETSOWNER
	+NODAMAGETHRUST
	Scale 0.32
	RenderStyle Add
	Alpha 0.7
	Translation "0:255=%[0,0,0]:[0.9,2.0,2.0]"
	DamageType "GaussExplosion"
	Obituary "%o was besieged by %k."
	States
	{
	Spawn:
		X060 B 0
		X060 B 5 Bright A_Explode(128,128,0,0,96)
	Looper:
		X060 B 1 Bright  A_SetScale(scalex*1.2)
		X060 B 0 A_FadeOut(0.07)
		Loop
	}
}

actor gaussshot_impactspawner {
	+NOINTERACTION
	+NOTIMEFREEZE
	states{
		spawn:
		    TNT1 AA 0 A_PlaySound("sfx/sboom")
			TNT1 AA 0 A_SpawnItemEx("gaussshot_puff",0,0,0, 0,frandom(-0.6,0.6),frandom(-0.6,0.6))
			TNT1 AAAAAAAAAA 0 A_SpawnItemEx ("gaussshot_spark", 0, 0, 0, random(1,3), random(4,6) , random(0,6) , random(180,360), 0)
			TNT1 AAAAAAAAAA 0 A_SpawnItemEx ("gaussshot_spark2", 0, 0, 0, random(1,3), random(4,6) , random(0,6) , random(180,360), 0)
			TNT1 AAAAAAAAAA 0 A_SpawnItemEx ("gaussshot_firespark", 0, 0, 0, random(6,8), random(6,8) , random(1,6) , random(180,360), 0)
			TNT1 A 1 A_SpawnItemEx("gaussshot_flash",0,0,0, 0,0,0)
			stop
	}
}

actor gaussshot_uberimpactspawner {
	+NOINTERACTION
	+NOTIMEFREEZE
	states{
		spawn:
		    TNT1 AA 0 A_PlaySound("sfx/sboom")
			TNT1 AA 0 A_SpawnItemEx("gaussshot_puff",0,0,0, 0,frandom(-0.6,0.6),frandom(-0.6,0.6))
			TNT1 AAAAAAAAAA 0 A_SpawnItemEx ("gaussshot_spark", 0, 0, 0, random(1,3), random(4,6) , random(0,6) , random(180,360), 0)
			TNT1 AAAAAAAAAA 0 A_SpawnItemEx ("gaussshot_spark2", 0, 0, 0, random(1,3), random(4,6) , random(0,6) , random(180,360), 0)
			TNT1 AAAAAAAAAA 0 A_SpawnItemEx ("gaussshot_firespark", 0, 0, 0, random(6,8), random(6,8) , random(1,6) , random(180,360), 0)
			TNT1 A 1 A_SpawnItemEx("gaussshot_uberflash",0,0,0, 0,0,0)
			stop
	}
}

actor GaussShot_Puff {
	radius 1
	height 1
	alpha 1
	renderstyle add
	scale 0.85
	Translation "0:255=%[0,0,0]:[0.9,2.0,2.0]"
	+FORCEXYBILLBOARD
	+NOTIMEFREEZE
	+NOINTERACTION
	states{
		spawn:
			TNT1 A 0 A_PlaySound("sfx/sboom")
			TNT1 A 0 A_Jump(255, "puff1","puff2","puff3","puff4","puff5")
		puff1:
			SX02 AAAABBBCDEFGHIJK 1 bright
			SX02 LMNOPQRSTU 1 bright A_Fadeout(0.1)
			stop
		puff2:
			SX03 AAAABBBCDEFGHIJKLMNOP 1 bright
			SX03 QRSTUVWXYZ 1 bright A_Fadeout(0.1)
			stop
		puff3:
			SX04 AAAABBBCDEFG 1 bright
			SX04 HIJKLMNOPQ 1 bright A_Fadeout(0.1)
			stop
		puff4:
			SX06 AAAABBBCDEFGHIJKLMN 1 bright
			SX06 OPQRSTUVWX 1 bright A_Fadeout(0.1)
			stop
		puff5:
			SX07 AAAABBBCDEF 1 bright
			SX07 GHIJKLMNOP 1 bright A_Fadeout(0.1)
			stop
			
	}
}


actor GaussShot_Spark {
	radius 2
	height 2
	scale 0.05
	gravity 0.3
	renderstyle add
	+NOTELEPORT
	+NOTIMEFREEZE
	+FLOORCLIP
	+FORCEXYBILLBOARD
	+DONTSPLASH
	+CLIENTSIDEONLY
	Translation "0:255=%[0,0,0]:[0.9,2.0,2.0]"
	bouncetype "doom"
	bouncefactor 0.2
	states{
		spawn:
			SPKO A 40 bright
		spawnloop:
			SPKO A 1 bright A_FadeOut(0.1)
			loop
	}
}

actor GaussShot_Spark2 : GaussShot_Spark {
	scale 0.07
	gravity 0.32
	+CLIENTSIDEONLY
	+NOTIMEFREEZE
	Translation "0:255=%[0,0,0]:[0.9,2.0,2.0]"
	states{
		spawn:
			SPKO C 50 bright
		spawnloop:
			SPKO C 1 bright A_FadeOut(0.1)
			loop
	}
}

actor GaussShot_Flash {
	renderstyle add
	alpha 0.64
	scale 0.99
	+FORCEXYBILLBOARD
	+NOINTERACTION
	+NOTIMEFREEZE
	+CLIENTSIDEONLY
	Translation "0:255=%[0,0,0]:[0.9,2.0,2.0]"
	states{
		spawn:
			GXP1 ABCDEFGHIJ 1 bright
			GXP1 KLMNOPQRS 1 bright A_Fadeout(0.1)
			wait
	}
}

actor GaussShot_UberFlash {
	renderstyle add
	alpha 0.64
	scale 2.0
	+FORCEXYBILLBOARD
	+NOINTERACTION
	+NOTIMEFREEZE
	+CLIENTSIDEONLY
	Translation "0:255=%[0,0,0]:[0.9,2.0,2.0]"
	states{
		spawn:
			GXP1 ABCDEFGHIJ 1 bright
			GXP1 KLMNOPQRS 1 bright A_Fadeout(0.1)
			wait
	}
}

actor GaussShot_Firespark {
	radius 1
	height 1
	speed  4
	damage 0
	RenderStyle add
	Alpha 1
	Scale 0.3
	Mass 0
	+MISSILE
	+FLOORCLIP
	+DONTSPLASH
	+NOTELEPORT
	+FORCEXYBILLBOARD
	+CLIENTSIDEONLY
	+NOTIMEFREEZE
	Translation "0:255=%[0,0,0]:[0.9,2.0,2.0]"
	BounceType "doom"
	gravity 0.45
	BounceFactor 0.2
	var int user_i;
	States
	{
		spawn:
			TNT1 A 0
			TNT1 A 0 A_SetUserVar("user_i", 1)
		sploop:	
			TNT1 A 0 A_JumpIf(user_i>=70, "death")
			SPRK A 1 A_SpawnItemEx ("GaussSpark_Trail", 0, 0, 2, 0 , 0 , 0 , 0)
			TNT1 A 0 A_SpawnItemEx ("GaussSpark_Smoke1", 0, 0, 0, frandom(-0.1,0.1) , frandom(-0.1,0.1) , frandom(0.1,0.3) , 0)
			TNT1 A 0 A_SetUserVar("user_i",user_i+1)
			loop
		death:
			TNT1 A 0
			stop
	}
}
 
actor GaussSpark_Trail {
	radius 1
	height 1
	alpha 1.0
	+FLOORCLIP
	+NOTELEPORT
	+FORCEXYBILLBOARD
	+NOTIMEFREEZE
	+CLIENTSIDEONLY
	Translation "0:255=%[0,0,0]:[0.9,2.0,2.0]"
	renderstyle add
	scale 0.35
	gravity 0
	states {
		spawn:
			TNT1 A 0
			TNT1 A 0 A_Jump (255,"trail1","trail2","trail3","trail4","trail5")
		trail1:
			EXP6 AABCDEFGH 2 bright
			stop
		trail2:
			EXP7 AABCDEFGH 2 bright
			stop
		trail3:
			EXP8 AABCDEFGH 2 bright
			stop
		trail4:
			EXP9 AABCDEFGH 2 bright
			stop
		trail5:
			EXP0 AABCDEFGH 2 bright
			stop
	}
}

actor GaussSpark_Smoke1 {
	scale 0.15
	alpha 1.0
	renderstyle add
	+NOINTERACTION
	+NOGRAVITY
	+FORCEXYBILLBOARD
	+NOTIMEFREEZE
	+NOTELEPORT
	+CLIENTSIDEONLY
	states {
		spawn:
			TNT1 A 4
			TNT1 A 0 A_Jump(255, "Smok1","Smok2","Smok3","Smok4")
		Smok1:
			SMO1 A 2 A_FadeOut(0.04)
			TNT1 A 0 A_ScaleVelocity(0.9)
			loop
		Smok2:
			SMO1 B 2 A_FadeOut(0.04)
			TNT1 A 0 A_ScaleVelocity(0.9)
			loop
		Smok3:
			SMO1 C 2 A_FadeOut(0.04)
			TNT1 A 0 A_ScaleVelocity(0.9)
			loop
		Smok4:
			SMO1 D 2 A_FadeOut(0.04)
			TNT1 A 0 A_ScaleVelocity(0.9)
			loop

	}
}