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 "RailCharge"
  Weapon.AmmoType2 "RailClip"
  Weapon.AmmoUse2 1
  Weapon.AmmoGive2 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.Primary_Uses_Both
  +EXTREMEDEATH
  +NOALERT
  States
  {
  Spawn:
    GAUP A -1
    Stop
  Ready:
    GAUG A 1 A_WeaponReady
    Loop
  Deselect:
    TNT1 A 0 SetPlayerProperty(0,1,2)
	TNT1 A 0 A_SetCrosshair(1)
	GAUS EDCBA 1
	Goto DeselectLoop
  DeselectLoop:
    TNT1 A 1 A_Lower
    Loop
  Select:
    TNT1 A 0 SetPlayerProperty(0,0,2)
	TNT1 A 0 A_SetCrosshair(18)
    GAUS ABCDE 1
    Goto SelectLoop
  SelectLoop:
    GAUG A 1 A_Raise
	loop
  Fire:
	TNT1 A 0 A_JumpIfInventory("RailClip", 1, 1)
    Goto DryFire
    TNT1 A 0 A_PlaySound("Railgun/Charge",250,1.0,0,1)
	GAUF ABCD 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)
  Hold:
	TNT1 A 0 A_PlaySound("Railgun/ChargeLoop",230,1.0,1,1)
	GAUF D 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)
	TNT1 A 0 A_GiveInventory("RailCharge",1)
	TNT1 A 0 A_Refire
	TNT1 A 0 A_JumpIfInventory("RailCharge",100,"Release")
	Goto Nope
  Release:
    TNT1 A 0 A_AlertMonsters
	TNT1 A 0 A_RailAttack(0,4,0,none,none,RGF_FULLBRIGHT|RGF_SILENT|RGF_NOPIERCING,0,None,0,0,32767,0,1.0,0,"railgunsmoke_spawner")
	TNT1 A 0 A_FireCustomMissile("Rail_Shot", 0, 1, 0, 4)
	TNT1 A 0 A_PlaySound("Railgun/Fire",230,0.99,0,1)
	TNT1 A 0 A_PlaySound("Railgun/Add",220,0.55,0,1)
	GAUF EF 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)
	GAUF G 15 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)
	Goto Compress
  Compress:
	TNT1 A 0 A_TakeInventory("RailCharge",999)
	TNT1 A 0 A_PlayWeaponSound("Railgun/Compressor")
	GAUF GHIJK 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)
	GAUF LMNOP 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)
	GAUF QRST 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)
	GAUG A 20 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)
    Goto Ready
  DryFire:
	TNT1 A 0 A_TakeInventory("RailCharge",999)
	TNT1 A 0 A_PlaySoundEx("Plasma/Empty","SoundSlot5")
	GAUG A 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)
	GAUF ABCDDDDDCBA 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)
	GAUG A 10 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)
	Goto Ready
  Nope:
	TNT1 A 0 A_TakeInventory("RailCharge",999)
	TNT1 A 0 A_PlaySound("Railgun/Powerdown",230,1.0,0,1)
	GAUF DCBA 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)
	GAUG A 10 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)
	Goto Ready
  }
}

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

ACTOR RailClip : Ammo
{
	Inventory.PickupMessage "you picked up a LM68 H.D.A.P. Slug."
	radius 16
    height 8
    scale 0.35
	Inventory.Amount 1
	Inventory.MaxAmount 6
	Ammo.BackpackAmount 2
	Ammo.BackpackMaxAmount 12
	States
	{
	spawn:
	SCEL ABCDEFGFEDCBA 2
	loop
	}
}


actor railgun_xtrail {
	scale 0.05
	alpha 1.0
	renderstyle add
	+NOINTERACTION
	+NOGRAVITY
	+FORCEXYBILLBOARD
	+NOTELEPORT
	+CLIENTSIDEONLY
	states {
		spawn:
			PPST ONMLK 2 bright
		tofade:
			PPST JIHGFEDDCCBBAAAA 2 bright A_Fadeout(0.1)
			stop
	}
}

actor railgun_smoke {
	scale 0.10
	alpha 0.8
	renderstyle add
	Translation "0:255=%[0.0,0.0,0.0]:[0.0,0.5,1.0]"
	+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 railgun_smoke2 : railgun_smoke {
	scale 0.22
	Translation "0:255=%[0.0,0.0,0.0]:[0.0,0.5,1.0]"
	alpha 1.0
}


actor railgunsmoke_spawner {
	+NOINTERACTION
	+NOGRAVITY
	+NOTELEPORT
	+NOCLIP
	+CLIENTSIDEONLY
	states{
		spawn:
			NULL A 0 A_SpawnItemEx("railgun_smoke", 15, 0, 3, 0, frandom(-0.5,0.5), frandom(0.1,0.6), 0, SXF_TRANSFERPOINTERS, SXF_CLIENTSIDE)
			NULL A 0 A_SpawnItemEx("railgun_xtrail", 20, 0, 5, 0, 0, 0, 0, SXF_TRANSFERPOINTERS, SXF_CLIENTSIDE)
			NULL A 0 A_SpawnItemEx("railgun_smoke", 15, 0, 3, 0, frandom(-0.25,0.25), frandom(0.1,0.6), 0, SXF_TRANSFERPOINTERS, SXF_CLIENTSIDE)
			stop
	}

}

actor railgunsmoke_spawner2 : railgunsmoke_spawner {
	states{
		spawn:
			NULL A 0
			NULL A 0 A_SpawnItemEx("railgun_smoke2", 20, 0, 0, frandom(0.8,1.6), frandom(-0.9,0.9), frandom(0.2,0.7), 0, SXF_TRANSFERPOINTERS)
			stop
	}
}

actor Rail_Shot : fastprojectile{
	radius 2
	height 2
	scale 0.22
	mass 20
	PROJECTILE
	speed 4000 //practically hitscan...
	Damage (250+(10*random(0,10)))
	+EXTREMEDEATH
	+NOTIMEFREEZE
	renderstyle add
	damagetype "Boss"
	MissileHeight 8
	deathsound "sfx/sboom1"
	decal "Scorch"
	
	states {
		spawn:
			LENB A 1
			loop
		death:
		    TNT1 AA 0 A_PlaySound("sfx/sboom")
			TNT1 A 0 A_Explode(255,300)
			TNT1 A 1 A_SpawnItemEx("rshot_impactspawner",0,0,0, 0,0,0)
			stop					 
	}
}

actor rshot_impactspawner {
	+NOINTERACTION
	+NOTIMEFREEZE
	states{
		spawn:
			TNT1 A 0 A_SpawnItemEx("rshot_flash",0,0,0, 0,0,0)
			TNT1 A 0 A_SpawnItemEx("rshot_shockwave",0,0,0, 0,0,0)
			TNT1 AA 0 A_SpawnItemEx("rshot_puff",0,0,0, 0,frandom(-0.6,0.6),frandom(-0.6,0.6))
			TNT1 AAAAAAAAAA 0 A_SpawnItemEx ("rshot_spark", 0, 0, 0, random(1,3), random(4,6) , random(0,6) , random(180,360), 0)
			TNT1 AAAAAAAAAA 0 A_SpawnItemEx ("rshot_spark2", 0, 0, 0, random(1,3), random(4,6) , random(0,6) , random(180,360), 0)
			TNT1 AAA 0 A_SpawnItemEx ("rpuff_smoke", 0, 0, 0, 0, random(1,1) , random(-1,1) , random(180,360), 0)
			TNT1 AAAAAAAAAA 0 A_SpawnItemEx ("rshot_firespark", 0, 0, 0, random(6,8), random(6,8) , random(1,6) , random(180,360), 0)
			stop
	}
}

actor rshot_puff {
	radius 1
	height 1
	alpha 1
	renderstyle add
	scale 0.85
	+FORCEXYBILLBOARD
	+NOTIMEFREEZE
	+NOINTERACTION
	states{
		spawn:
			TNT1 A 0 A_PlaySound("sfx/sboom")
			TNT1 A 0 A_Jump(255, "puff1","puff2","puff3")
		puff1:
			PBE1 AAAABBBCDEFGHIJKLM 1 bright
			PBE1 NOPQRSTUVW 1 bright A_Fadeout(0.1)
			stop
		puff2:
			PBE2 AAAABBBCDEF 1 bright
			PBE2 GHIJKLMNOP 1 bright A_Fadeout(0.1)
			stop
		puff3:
			PBE3 AAAABBBCDEFGHIJKLM 1 bright
			PBE3 NOPQRSTUVW 1 bright A_Fadeout(0.1)
			stop	
	}
}


actor rshot_spark {
	radius 2
	height 2
	scale 0.05
	gravity 0.3
	renderstyle add
	+NOTELEPORT
	+NOTIMEFREEZE
	+FLOORCLIP
	+FORCEXYBILLBOARD
	+DONTSPLASH
	+CLIENTSIDEONLY
	bouncetype "doom"
	bouncefactor 0.2
	states{
		spawn:
			SPKB A 40 bright
		spawnloop:
			SPKB A 1 bright A_FadeOut(0.1)
			loop
	}
}

actor rshot_spark2 : rshot_spark {
	scale 0.07
	gravity 0.32
	+CLIENTSIDEONLY
	+NOTIMEFREEZE
	states{
		spawn:
			SPKB C 50 bright
		spawnloop:
			SPKB C 1 bright A_FadeOut(0.1)
			loop
	}
}

actor rshot_flash {
	renderstyle add
	alpha 0.64
	scale 0.54
	Translation "0:255=%[0.0,0.0,0.0]:[0.0,0.5,1.0]"
	+FORCEXYBILLBOARD
	+NOINTERACTION
	+NOTIMEFREEZE
	+CLIENTSIDEONLY
	states{
		spawn:
			BFSH A 6 bright
			stop
	}
}

actor rshot_firespark {
	radius 1
	height 1
	speed  4
	damage 0
	Translation "0:255=%[0.0,0.0,0.0]:[0.0,0.5,1.0]"
	RenderStyle add
	Alpha 1
	Scale 0.3
	Mass 0
	+MISSILE
	+FLOORCLIP
	+DONTSPLASH
	+NOTELEPORT
	+FORCEXYBILLBOARD
	+CLIENTSIDEONLY
	+NOTIMEFREEZE
	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 ("RailSpark_trail", 0, 0, 2, 0 , 0 , 0 , 0)
			TNT1 A 0 A_SpawnItemEx ("RSpark_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 RailSpark_trail {
	radius 1
	height 1
	alpha 1.0
	+FLOORCLIP
	+NOTELEPORT
	+FORCEXYBILLBOARD
	+NOTIMEFREEZE
	+CLIENTSIDEONLY
	Translation "0:255=%[0.0,0.0,0.0]:[0.0,0.5,1.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 RSpark_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

	}
}


actor rshot_shockwave {
	//scale 0.27
	var int user_scale;
	renderstyle add
	+NOTELEPORT
	+NOCLIP
	+FLOORCLIP
	+NOGRAVITY
	+FORCEXYBILLBOARD
	+NOTIMEFREEZE
	+NOINTERACTION
	+CLIENTSIDEONLY
	alpha 0.75
	states{
		spawn:
			TNT1 A 0
			TNT1 A 0 A_SetUserVar("user_scale",1) 
		scaledown:			   
			TNT1 A 0 A_SetScale((user_scale*0.02)) //Start scale
			TNT1 A 0 A_JumpIf(user_scale>=40,"LoopEnd") //Maximum Scale
			BSW0 B 1 bright A_FadeOut(0.05)
			TNT1 A 0 A_SetUserVar("user_scale",user_scale+4) //Speed
			loop
		loopend:
			BSW0 B 1 Bright A_FadeOut(0.05)
			wait
	}
}