// --------------------------------------------------------------------------
//
//	RailGun
//
// --------------------------------------------------------------------------

ACTOR Rail_Gun : BaseWeapon Replaces RailGun
{
	Weapon.AmmoUse1 0
	Weapon.AmmoUse2 0
	Weapon.AmmoGive1 8
	Weapon.AmmoGive2 0
	Weapon.AmmoType1 "RailCore"
	Weapon.AmmoType2 "RailAmmo"
	Weapon.SelectionOrder 6000
	-WEAPON.CHEATNOTWEAPON
	Inventory.PickupSound "PLSDRAW"
	Inventory.PickupMessage "You got the RailGun!"
	Obituary "%o was shot down by %k's RailGun"
	Tag "RailGun"
	States
	{
	Spawn:
		RGNW ABCACBACABAC 1
		Loop

	Ready:
        TNT1 A 0 A_JumpIfInventory("GoFatality", 1, "Steady")
		TNT1 A 0 A_PlaySound("PLSDRAW")
	Ready1:
        RGNS FEDCBA 1
		Goto Ready2

	Ready2:
		TNT1 A 0 A_JumpIfInventory("RailAmmo",1,1)
		Goto ReadyEmpty
		TNT1 A 0 A_PlaySound("RailIdle",5,1,1)
		TNT1 A 0 A_Takeinventory("WeapSpecial",1)
		TNT1 A 0 A_JumpIfInventory("Zoomed",1,"ScopedReady")
	Ready3:
		TNT1 A 0 A_JumpIfInventory("Reloading",1,"Reload")
        TNT1 A 0 A_JumpIfInventory("Kicking",1,"DoKick")
		TNT1 A 0 A_JumpIfInventory("Salute1",1,"Salute")
		TNT1 A 0 A_JumpIfInventory("Salute2",1,"Salute")
        TNT1 A 0 A_JumpIfInventory("Taunting",1,"TauntR")
		TNT1 A 0 A_JumpIfInventory("TossGrenade",1,"TossGrenade")
		RGNI ABCD 1 A_WeaponReady
		TNT1 A 0 A_JumpIfInventory("Reloading",1,"Reload")
		TNT1 A 0 A_JumpIfInventory("Kicking",1,"DoKick")
		TNT1 A 0 A_JumpIfInventory("Salute1",1,"Salute")
		TNT1 A 0 A_JumpIfInventory("Salute2",1,"Salute")
        TNT1 A 0 A_JumpIfInventory("Taunting",1,"TauntR")
		TNT1 A 0 A_JumpIfInventory("TossGrenade",1,"TossGrenade")
		RGNI ACBD 1 A_WeaponReady
		TNT1 A 0 A_JumpIfInventory("Reloading",1,"Reload")
		TNT1 A 0 A_JumpIfInventory("Kicking",1,"DoKick")
		TNT1 A 0 A_JumpIfInventory("Salute1",1,"Salute")
		TNT1 A 0 A_JumpIfInventory("Salute2",1,"Salute")
        TNT1 A 0 A_JumpIfInventory("Taunting",1,"TauntR")
		TNT1 A 0 A_JumpIfInventory("TossGrenade",1,"TossGrenade")
		RGNI BADC 1 A_WeaponReady
		Loop
		
	ReadyEmpty:
		TNT1 A 0 A_JumpIfInventory("Reloading",1,"Reload")
		TNT1 A 0 A_JumpIfInventory("Kicking",1,"DoKick")
		TNT1 A 0 A_JumpIfInventory("Salute1",1,"Salute")
		TNT1 A 0 A_JumpIfInventory("Salute2",1,"Salute")
        TNT1 A 0 A_JumpIfInventory("Taunting",1,"TauntR")
		TNT1 A 0 A_JumpIfInventory("TossGrenade",1,"TossGrenade")
		RGNF L 4 A_WeaponReady(WRF_NOSECONDARY)
		Loop
		
	ScopedReady:
		TNT1 A 0 A_JumpIfInventory("Reloading",1,"Reload")
		TNT1 A 0 A_JumpIfInventory("WeapSpecial",1,"NightvisionToggle")
		TNT1 A 0 A_JumpIfInventory("Kicking",1,"ZoomOut")
		TNT1 A 0 A_JumpIfInventory("Salute1",1,"ZoomOut")
		TNT1 A 0 A_JumpIfInventory("Salute2",1,"ZoomOut")
        TNT1 A 0 A_JumpIfInventory("Taunting",1,"ZoomOut")
		TNT1 A 0 A_JumpIfInventory("TossGrenade",1,"ZoomOut")
		RGNZ D 1 BRIGHT A_WeaponReady
		Loop

	Deselect:
		TNT1 A 0 A_StopSound(5)
        TNT1 A 0 A_ZoomFactor(1.0,ZOOM_INSTANT)
		TNT1 A 0 A_Takeinventory("ADSmode",1)
		TNT1 A 0 A_JumpIfInventory("Zoomed", 1, 2)
		TNT1 A 0 A_Jump(256, 4)
		RGNZ CBA 1
		TNT1 A 0 A_TakeInventory("Zoomed", 1)
		TNT1 A 0 A_Takeinventory("PowerLightAmp",1)
		TNT1 A 0 A_SetCrosshair(0)
		RGNS ABCDEF 1
		TNT1 A 0 A_Takeinventory("WeapSpecial",1)
		TNT1 A 0 A_Takeinventory("TossGrenade",1)
		TNT1 A 0 A_Takeinventory("Unloading",1)
		TNT1 A 0 A_Lower
		Wait

	Select:
		TNT1 A 0 A_JumpIfInventory("IsPlayingAsPurist",1,"PuristGun")
		TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(1005)==0, "PuristGun")
		TNT1 A 0 A_Takeinventory("FistsSelected",1)
		TNT1 A 0 A_Takeinventory("SawSelected",1)
		TNT1 A 0 A_Takeinventory("ShotgunSelected",1)
		TNT1 A 0 A_Takeinventory("SSGSelected",1)
		TNT1 A 0 A_Takeinventory("MinigunSelected",1)
		TNT1 A 0 A_Takeinventory("PlasmaGunSelected",1)
		TNT1 A 0 A_Takeinventory("RocketLauncherSelected",1)
		TNT1 A 0 A_Takeinventory("GrenadeLauncherSelected",1)
		TNT1 A 0 A_Takeinventory("BFGSelected",1)
		TNT1 A 0 A_Takeinventory("BFG10kSelected",1)
		TNT1 A 0 A_Giveinventory("RailGunSelected",1)
		TNT1 A 0 A_Takeinventory("SubMachineGunSelected",1)
		TNT1 A 0 A_Takeinventory("RevenantLauncherSelected",1)
		TNT1 A 0 A_Takeinventory("LostSoulSelected",1)
		TNT1 A 0 A_Takeinventory("FlameCannonSelected",1)
		TNT1 A 0 A_Takeinventory("HasBarrel",1)
		TNT1 A 0 A_TakeInventory("TossGrenade", 1)
		TNT1 A 5
		TNT1 A 0 A_Raise
		Wait

	PuristGun:
		TNT1 A 0 A_TakeInventory("Rail_Gun", 1)
		TNT1 A 1
		Goto Ready

	Fire:
		TNT1 A 0 A_JumpIfInventory("RailAmmo",1,1)
		Goto Reload
		TNT1 A 0 A_StopSound(5)
		TNT1 A 0 A_PlaySound("RailCharge", 5)
		TNT1 A 0 A_JumpIfInventory("Zoomed", 1, "ScopedFire")
		
		//RGNF A 6
		RGNF ABCDEF 1
		TNT1 A 0 A_PlaySound("plsm4", 5)
		TNT1 A 0 A_PlaySound("RailFire", 1)
		TNT1 A 0 A_FireBullets(0, 0, -1, 25, "PlasmaRailPuff1")
		TNT1 A 0 A_FireBullets(0, 0, -1, 25, "PlasmaRailPuff1")
		TNT1 A 0 A_FireBullets(0, 0, -1, 25, "PlasmaRailPuff1")
		TNT1 A 0 A_FireBullets(0, 0, -1, 25, "PlasmaRailPuff1")
		TNT1 A 0 A_SetPitch(-0.5 + pitch)
		TNT1 A 0 A_RailAttack(1,0,0, "0 FF FF", "0 FF FF")//Zandronum
		//TNT1 A 0 A_RailAttack(1,0,0,none,none,RGF_NOPIERCING | RGF_CENTERZ,0,"none",0,0,0,0,0,0,"PlasmaRailBall")//gzdoom
		TNT1 A 0 A_SetPitch(0.5 + pitch)
		TNT1 A 0 A_FireBullets(0, 0, -1, 25, "PlasmaRailPuff2")
		RGNF G 1 A_SetPitch(-6.0 + pitch)
		TNT1 A 0 A_Takeinventory("RailAmmo",1)
		TNT1 A 0 A_AlertMonsters
		RGNF HIJKL 1 A_SetPitch(1.2 + pitch)
		RGNF LLLLL 3 A_FireCustomMissile("SmokeSpawner",0,0,0,2)
		TNT1 A 0 A_ReFire
		Goto Ready2
		
	ScopedFire:
		//RGNZ D 6 BRIGHT
		RGNZ D 6 BRIGHT
		TNT1 A 0 A_PlaySound("plsm4", 5)
		TNT1 A 0 A_PlaySound("RailFire", 1)
		TNT1 A 0 A_FireBullets(0, 0, -1, 25, "PlasmaRailPuff1")
		TNT1 A 0 A_FireBullets(0, 0, -1, 25, "PlasmaRailPuff1")
		TNT1 A 0 A_FireBullets(0, 0, -1, 25, "PlasmaRailPuff1")
		TNT1 A 0 A_FireBullets(0, 0, -1, 25, "PlasmaRailPuff1")
		TNT1 A 0 A_SetPitch(-0.5 + pitch)
		TNT1 A 0 A_RailAttack(1,0,0, "0 FF FF", "0 FF FF")//Zandronum
		//TNT1 A 0 A_RailAttack(1,12,0,none,none,RGF_NOPIERCING | RGF_CENTERZ,0,"none",0,0,0,0,0,0,"PlasmaRailBall")//gzdoom
		TNT1 A 0 A_SetPitch(0.5 + pitch)
		TNT1 A 0 A_FireBullets(0, 0, -1, 25, "PlasmaRailPuff2")
		RGNZ D 1 BRIGHT A_SetPitch(-4.0 + pitch)
		TNT1 A 0 A_Takeinventory("RailAmmo",1)
		TNT1 A 0 A_AlertMonsters
		RGNZ DDDDD 1 BRIGHT A_SetPitch(0.8 + pitch)
		RGNZ D 15 BRIGHT
		TNT1 A 0 A_JumpIfInventory("RailAmmo",1,1)
		Goto ZoomOut
		TNT1 A 0 A_ReFire
		Goto Ready2
		
	AltFire:
		TNT1 A 0 A_JumpIfInventory("Zoomed", 1, "ZoomOut")
		TNT1 A 0 A_GiveInventory("Zoomed", 1)
		TNT1 A 0 A_Giveinventory("ADSmode",1)
		RGNZ ABC 1
		
		TNT1 A 0 A_JumpIfInventory("RailgunNightvisionOn", 1, 2)
		TNT1 A 0 A_Jump(256,2)
		TNT1 A 0 A_Giveinventory("PowerLightAmp",1)
		
		TNT1 A 0 A_SetCrosshair(99)
		RGNZ D 2 BRIGHT A_ZoomFactor(2.0,ZOOM_INSTANT)
		Goto Ready2
		
	ZoomOut:
		TNT1 A 0 A_TakeInventory("Zoomed", 1)
		TNT1 A 0 A_Takeinventory("ADSmode",1)
		RGNZ D 1 BRIGHT A_ZoomFactor(1.0,ZOOM_INSTANT)
		TNT1 A 0 A_SetCrosshair(0)
		TNT1 A 0 A_Takeinventory("PowerLightAmp",1)
		RGNZ CBA 1
		Goto Ready2

	NightvisionToggle:
		TNT1 A 0 A_Takeinventory("WeapSpecial",1)
		//TNT1 A 0 A_PlayWeaponSound("BEP")
		TNT1 A 0 A_PlayWeaponSound("RailClick")
		TNT1 A 0 A_JumpIfInventory("RailgunNightvisionOn", 1, 3)
		TNT1 A 0 A_Giveinventory("RailgunNightvisionOn",1)
		TNT1 A 0 A_Giveinventory("PowerLightAmp",1)
		Goto Ready2
		TNT1 A 0 A_Takeinventory("RailgunNightvisionOn",1)
		TNT1 A 0 A_Takeinventory("PowerLightAmp",1)
		Goto Ready2

    Reload:
		TNT1 A 0 A_Takeinventory("Reloading",1)
		TNT1 A 0 A_JumpIfInventory("RailAmmo",8,"Ready2")
		TNT1 A 0 A_JumpIfInventory("RailCore",1,1)
        Goto Ready2
		TNT1 A 0 A_StopSound(5)
		TNT1 A 0 A_JumpIfInventory("Zoomed", 1, 2)
		TNT1 A 0 A_Jump(256,8)
		TNT1 A 0 A_TakeInventory("Zoomed", 1)
		TNT1 A 0 A_Takeinventory("ADSmode",1)
		RGNZ D 1 BRIGHT A_ZoomFactor(1.0,ZOOM_INSTANT)
		RGNZ CBA 1
		
		RGNR ABC 2
		TNT1 A 0 A_PlaySound("PLREADY",1)
		RGNR D 3
		TNT1 A 0 A_FireCustomMissile("EmptyCore",-210,0,20,-20)
		RGNR D 13
		RGNR EFFE 1
		RGNR D 10
		RGNR CBA 2
		TNT1 A 0 A_Takeinventory("Reloading",1)
		TNT1 A 0 A_StopSound(1)

	ReloadingSequence:
		TNT1 A 0 A_JumpIfInventory("RailAmmo",8,"Ready2")
		TNT1 A 0 A_JumpIfInventory("RailCore",1,1)
		Goto Ready2
		TNT1 A 0 A_Giveinventory("RailAmmo",1)
		TNT1 A 0 A_Takeinventory("RailCore",1)
		Goto ReloadingSequence

	KickFlash:
		TNT1 A 0 A_JumpIfInventory("RailAmmo",1,1)
		Goto KickFlash2
		RGNK ABCD 1
		RGNK EFGHEFGH 1
		RGNK DCBA 1
		Stop
		
	KickFlash2:
		RGNK IJKL 1
		RGNK M 8
		RGNK LKJI 1
		Stop
		
	AirKickFlash:
		TNT1 A 0 A_JumpIfInventory("RailAmmo",1,1)
		Goto AirKickFlash2
		RGNK ABCD 1
		RGNK EFGHEFGHEF 1
		RGNK DCBA 1
		Stop
		
	AirKickFlash2:
		RGNK IJKL 1
		RGNK M 10
		RGNK LKJI 1
		Stop
		
	TauntFlash:
		TNT1 A 0 A_JumpIfInventory("RailAmmo",1,1)
		Goto TauntFlash2
		RGNK ABCD 1
		RGNK EFGHEGFEHFHGEFHGFEGHEGHFGEFHFGEHGFH 1						
		RGNK DCBA 1
		Stop
		
	TauntFlash2:
		RGNK IJKL 1
		RGNK M 35
		RGNK LKJI 1
		Stop
		
	GrenadeFlash:
		RGNS ABCDEF 1
		Stop
	}
}

ACTOR RailgunNightvisionOn : Inventory { Inventory.MaxAmount 1 }

ACTOR RailAmmo : Ammo
{
	+INVENTORY.IGNORESKILL
	Inventory.Amount 0
	Inventory.MaxAmount 8
	Ammo.BackpackAmount 0
	Ammo.BackpackMaxAmount 8
   	Inventory.Icon "RGNWA0"
}

Actor PlasmaRailPuff1
{
	Renderstyle Translucent
	Alpha 0.4
	Scale 1.5
	Radius 0
	Height 0
	Gravity 0.01
	DamageType Blast
	//Decal "Scorch"
	+NOBLOCKMAP
	+NOGRAVITY
	+NOEXTREMEDEATH
	+FORCEXYBILLBOARD
	+DONTSPLASH
	+PUFFONACTORS
	-EXPLODEONWATER
	States
	{
	Spawn:
		TNT1 A 0
	Melee:
		//TNT1 A 0 A_SpawnItemEx ("DetectFloorCraterSmall",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION,0)
		//TNT1 A 0 A_SpawnItemEx ("DetectCeilCraterSmall",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION,0)
		//TNT1 A 0 A_CustomMissile ("BluePlasmaFire", 0, 0, random (0, 360), 2, random (0, 360))
		TNT1 AAAAAAAAAAAAA 0 A_CustomMissile ("BluePlasmaParticle", 0, 0, random (0, 360), 2, random (0, 360))
		TNT1 A 1 A_Explode(6,90,0)
		TNT1 A 2
		TNT1 AAAAAA 7 A_CustomMissile ("PlasmaSmoke", 1, 0, random (0, 360), 2, random (0, 160))
		stop
	}
}

Actor PlasmaRailPuff2
{
	Renderstyle Translucent
	Alpha 0.4
	Scale 1.5
	Radius 0
	Height 0
	Gravity 0.01
	DamageType Plasma
	Decal "Scorch"
	+NOBLOCKMAP
	+NOGRAVITY
	+NOEXTREMEDEATH
	+FORCEXYBILLBOARD
	+DONTSPLASH
	+PUFFONACTORS
	+EXPLODEONWATER
	states
	{
	Spawn:
		TNT1 A 0
	Melee:
		TNT1 A 0 A_SpawnItemEx ("DetectFloorCraterSmall",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION,0)
		TNT1 A 0 A_SpawnItemEx ("DetectCeilCraterSmall",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION,0)
		TNT1 A 0 A_CustomMissile ("BluePlasmaFire", 0, 0, random (0, 360), 2, random (0, 360))
		TNT1 AAAAAAAAAAAAA 0 A_CustomMissile ("BluePlasmaParticle", 0, 0, random (0, 360), 2, random (0, 360))
		TNT1 A 0 A_CustomMissile ("PlamaRailBoom", 0, 0, random (0, 360), 2, random (0, 360))
		TNT1 A 1 A_Explode(6,90,0)
		TNT1 A 4
		TNT1 AAAAAAAAAAAA 9 A_CustomMissile ("PlasmaSmoke", 1, 0, random (0, 360), 2, random (0, 160))
		stop
	}
}

Actor PlasmaRailBall
{
	Renderstyle Add
	Radius 1
	Height 1
	Mass 1
	Damage 0
	Alpha 0.8
	Scale 0.05
	+NOBLOCKMAP
	+MOVEWITHSECTOR
	+NOGRAVITY
	+DROPOFF
	+NOTELEPORT
	+FORCEXYBILLBOARD
	+NOTDMATCH
	+GHOST
	states
	{
	Spawn:
		TNT1 A 0
		TNT1 A 0 A_SpawnItem("PlamaRailFlare")
		FIR5 ABC 1 bright A_FadeOut(0.01)
		FIR5 DDEE 1 bright A_FadeOut(0.04)
		FIR5 FFGGHHIIJJKKLLMMNNOOPPPPPPPPPPPPPPPP 1 bright A_FadeOut(0.05)
		TNT1 A 1
		stop
	}
}

Actor PlamaRailFlare : PlasmaRailBall
{
	alpha 0.7
	scale 0.03
	+NOINTERACTION
	+NOCLIP
	states
	{
	Spawn:
		TNT1 A 0
		LENB AAAAAAAAAAAA 1 bright A_FadeOut(0.05)
		LENB AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 1 bright A_FadeOut(0.007)
	Death:
		TNT1 A 0
		stop
	}
}

Actor PlamaRailBoom : PlamaRailFlare
{
	alpha 0.3
	scale 2.0
	translation "112:127=192:207"
	states
	{
	Spawn:
		TNT1 A 1
		SHOK CEGIKMOQ 1 bright A_FadeOut(0.04)
	Death:
		TNT1 A 0
		stop
	}
}