// --------------------------------------------------------------------------
//
//	BFG 9000
//
// --------------------------------------------------------------------------

ACTOR U_BFG9000 : BaseWeapon
{
	Weapon.AmmoUse 40
	Weapon.AmmoGive 40
	Weapon.AmmoType "AmmoCell"
	Weapon.SelectionOrder 2800
	-WEAPON.CHEATNOTWEAPON
	Inventory.PickupSound "BFGREADY"
	Inventory.PickupMessage "You got the BFG 9000!"
	tag "BFG 9000"
	States
	{
	Spawn:
		BFUG A -1
		Stop

	Select:
		TNT1 A 0 A_JumpIfInventory("IsPlayingAsPurist",1,"PuristGun")
		TNT1 A 0 A_Giveinventory("BFGSelected",1)
		TNT1 A 0 A_Giveinventory("GoSpecial",1)
		TNT1 A 0 A_Takeinventory("Unloading",1)
		TNT1 A 0 A_Takeinventory("Reloading",1)
		TNT1 A 0 A_TakeInventory("TossGrenade",1)
		TNT1 A 0 A_Takeinventory("WeapSpecial",1)
		TNT1 A 0 A_Takeinventory("SwitchFlashlight",1)
		TNT1 A 0 A_Takeinventory("Taunting",1)
		TNT1 A 0 A_Takeinventory("IdleCounter",200)
		TNT1 A 4
		TNT1 A 0 A_Raise
		Wait

	Deselect:
		BFGS ABCDEF 1
		TNT1 A 0 A_TakeInventory("BFGSelected",1)
		TNT1 A 0 A_Lower
		Wait

	Ready:
		TNT1 A 0 A_JumpIfInventory("GoFatality",1,"Steady")
		TNT1 A 0 A_PlaySound("BFGREADY")
	Ready1:
		BFGS FEDCBA 1
	Ready2:
		TNT1 A 0 //A_GunFlash
	Ready3:
		TNT1 A 0 A_JumpIfInventory("Kicking",1,"DoKick")
		TNT1 A 0 A_JumpIfInventory("Taunting",1,"TauntR")
		TNT1 A 0 A_JumpIfInventory("Salute1",1,"Salute")
		TNT1 A 0 A_JumpIfInventory("Salute2",1,"Salute")
		TNT1 A 0 A_JumpIfInventory("TossGrenade",1,"TossGrenade")
		BFGI AB 2 A_WeaponReady
		TNT1 A 0 A_JumpIfInventory("Kicking",1,"DoKick")
		TNT1 A 0 A_JumpIfInventory("Taunting",1,"TauntR")
		TNT1 A 0 A_JumpIfInventory("Salute1",1,"Salute")
		TNT1 A 0 A_JumpIfInventory("Salute2",1,"Salute")
		TNT1 A 0 A_JumpIfInventory("TossGrenade",1,"TossGrenade")
		BFGI CD 2 A_WeaponReady
		TNT1 A 0 A_JumpIfInventory("Kicking",1,"DoKick")
		TNT1 A 0 A_JumpIfInventory("Taunting",1,"TauntR")
		TNT1 A 0 A_JumpIfInventory("Salute1",1,"Salute")
		TNT1 A 0 A_JumpIfInventory("Salute2",1,"Salute")
		TNT1 A 0 A_JumpIfInventory("TossGrenade",1,"TossGrenade")
		TNT1 A 0 A_JumpIfInventory("IdleCounter",200,"PlayerIsIdle")
		BFGI EF 2 A_WeaponReady
		Goto Ready2

// --------------------------------------------------------------------------
//
//	Fire
//
// --------------------------------------------------------------------------
		
	Fire:
		TNT1 A 0 A_PlaySound("BFGCHARGE",1)
		TNT1 A 0 A_GunFlash("FireFlash")
		TNT1 A 0 Radius_Quake(1,4,0,2,0)
		//Start charging
		BFGC AB 2 A_FireCustomMissile("GreenFlareSpawn",0,0,0,0)
		TNT1 A 0 Radius_Quake(1,4,0,2,0)
		BFGC CD 2 A_FireCustomMissile("GreenFlareSpawn",0,0,0,0)
		TNT1 A 0 Radius_Quake(1,4,0,2,0)
		BFGC EF 2 A_FireCustomMissile("GreenFlareSpawn",0,0,0,0)
		TNT1 A 0 Radius_Quake(2,4,0,2,0)
		BFGC GH 2 A_FireCustomMissile("GreenFlareSpawn",0,0,0,0)
		TNT1 A 0 Radius_Quake(2,4,0,2,0)
		BFGC IJ 2 A_FireCustomMissile("GreenFlareSpawn",0,0,0,0)
		TNT1 A 0 Radius_Quake(2,4,0,2,0)
		BFGC KF 2 A_FireCustomMissile("GreenFlareSpawn",0,0,0,0)
		TNT1 A 0 Radius_Quake(3,4,0,2,0)
		BFGC GH 2 A_FireCustomMissile("GreenFlareSpawn",0,0,0,0)
		TNT1 A 0 Radius_Quake(3,6,0,2,0)
		BFGC IJK 2 A_FireCustomMissile("GreenFlareSpawn",0,0,0,0)
		//FIRE!
		TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(1023,2)==0,2)
		TNT1 A 0 A_Firebullets(10,0,6,80,"BfgPuff",0,120)//Kills smaller enemies at point blank so the projectile gets a chanse to fly.
		BFGF A 1 A_FireCustomMissile("GreenFlareSpawn",0,0,0,0)
		BFGF A 1 A_PlaySound("BFGFIRE",1)
		TNT1 A 0 A_AlertMonsters
		TNT1 AAA 0 A_FireCustomMissile("GreenFlareSpawn",0,0,0,0)
		TNT1 A 0 A_Recoil(8)
		TNT1 A 0 Radius_Quake(2,2,0,2,0)
		TNT1 A 0 A_FireCustomMissile("Alerter",0,0,-1,0)
		TNT1 A 0 A_FireCustomMissile("ShakeYourAssDouble",0,0,0,0)
		TNT1 A 0 A_SetPitch(-1.0 + pitch)
		BFGF B 1 A_FireCustomMissile("GreenFlareSpawn",0,0,0,0)
		TNT1 A 0 A_SetPitch(-1.0 + pitch)
		BFGF B 1 Radius_Quake(1,4,0,2,0)
		TNT1 A 0 A_SetPitch(+2.0 + pitch)
		TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(1023,2)==0,3)
		TNT1 A 0 A_FireCustomMissile("U_BFGBall")
		TNT1 A 0 A_Jump(256,2)
		TNT1 A 0 A_FireCustomMissile("BFGBall")
		TNT1 A 0 A_SetPitch(-4.0 + pitch)
		BFGF CCDDEEFF 1 A_SetPitch(+0.5 + pitch)
		BFGF G 2
		BFGI ABCDEF 2
		TNT1 A 0 A_Refire
		Goto Ready2

	FireFlash:
		TNT1 A 22
		TNT1 A 1 A_ZoomFactor(0.99)
		TNT1 A 1 A_ZoomFactor(0.99)
		TNT1 A 1 A_ZoomFactor(0.98)
		TNT1 A 1 A_ZoomFactor(0.98)
		TNT1 A 1 A_ZoomFactor(0.97)
		TNT1 A 1 A_ZoomFactor(0.96)
		TNT1 A 1 A_ZoomFactor(0.95)
		TNT1 A 1 A_ZoomFactor(0.93)
		TNT1 A 1 A_ZoomFactor(0.91)
		TNT1 A 1 A_ZoomFactor(0.89)
		TNT1 A 1 A_ZoomFactor(0.86)
		TNT1 A 1 A_ZoomFactor(0.83)
		TNT1 A 0 //Fire!
		TNT1 A 1 A_ZoomFactor(0.81)
		TNT1 A 1 A_ZoomFactor(0.80)
		TNT1 A 1 A_ZoomFactor(0.80)
		TNT1 A 1 A_ZoomFactor(0.81)
		TNT1 A 1 A_ZoomFactor(0.81)
		TNT1 A 1 A_ZoomFactor(0.82)
		TNT1 A 1 A_ZoomFactor(0.83)
		TNT1 A 1 A_ZoomFactor(0.94)
		TNT1 A 1 A_ZoomFactor(0.85)
		TNT1 A 1 A_ZoomFactor(0.96)
		TNT1 A 1 A_ZoomFactor(0.88)
		TNT1 A 1 A_ZoomFactor(1.00)
		Stop

// --------------------------------------------------------------------------
//
//	Misc.
//
// --------------------------------------------------------------------------

	PuristGun:
		TNT1 A 0 A_GiveInventory("VanillaBFG9000",1)
		TNT1 A 0 A_TakeInventory("BIG_FUCKING_GUN",1)
		Goto Ready

// --------------------------------------------------------------------------
//
//	End Stuff
//
// --------------------------------------------------------------------------

	TauntFlash:
		BFGK ABCD 1
		BFGK E 35
		BFGK DCBA 1
		BFGI A 1
		Stop

	KickFlash:
		BFGK ABCD 1
		BFGK E 8
		BFGK DCBA 1
		BFGI A 1
		Stop

	AirKickFlash:
		BFGK ABCD 1
		BFGK E 10
		BFGK DCBA 1
		BFGI A 1
		Stop

	SlideKickStartFlash:
		BFGK ABCD 1
		BFGK E 17
		Stop

	SlideKickEndFlash:
		BFGK EDCBA 2
		BFGI A 1
		Stop

	GrenadeFlash:
		BFGS ABCDE 1
		Stop
	}
}

Actor U_BFGBall //Updated ball
{
	Radius 5
	Height 5
	Projectile
	Speed 40
	Damage (random(400,600))
	DamageType Desintegrate
	RenderStyle Add
	Alpha 0.9
	Scale 0.7
	Decal BFGLightning
	DeathSound "BFGEXPLO"
	Obituary "$OB_MPBFG_BOOM"
	Species "Marines"
	+RANDOMIZE
	+EXTREMEDEATH
	+THRUSPECIES
	+MTHRUSPECIES
	States
	{
	Spawn:
		TNT1 A 0
		TNT1 A 0 ACS_NamedExecuteAlways("CheckIfDM")
	Spawn1:
		BFGP A 1 Bright A_SpawnItem("U_GreenFlare",0,0)
		TNT1 A 0 A_Explode(90,160,0,0,5,0,0,"SuperBFGExtra")
		TNT1 A 0 A_SpawnItem("BFGLightning",0,0)
		TNT1 AA 0 A_SpawnItemEx("BFGTrailParticle",Random(-13,13),Random(-13,13),Random(0,18),fRandom(1,3),0,(0.1)*Random(-10,10),Random(-20,20),128)
		BFGP B 1 Bright A_SpawnItem("U_GreenFlare",0,0)
		TNT1 A 0 A_Explode(90,160,0,0,5,0,0,"SuperBFGExtra")
		TNT1 A 0 A_SpawnItem("BFGLightning",0,0)
		TNT1 AA 0 A_SpawnItemEx("BFGTrailParticle",Random(-13,13),Random(-13,13),Random(0,18),fRandom(1,3),0,(0.1)*Random(-10,10),Random(-20,20),128)
		BFGP C 1 Bright A_SpawnItem("U_GreenFlare",0,0)
		TNT1 A 0 A_Explode(90,160,0,0,5,0,0,"SuperBFGExtra")
		TNT1 A 0 A_SpawnItem("BFGLightning",0,0)
		TNT1 AA 0 A_SpawnItemEx("BFGTrailParticle",Random(-13,13),Random(-13,13),Random(0,18),fRandom(1,3),0,(0.1)*Random(-10,10),Random(-20,20),128)
		BFGP D 1 Bright A_SpawnItem("U_GreenFlare",0,0)
		TNT1 A 0 A_Explode(90,160,0,0,5,0,0,"SuperBFGExtra")
		TNT1 A 0 A_SpawnItem("BFGLightning",0,0)
		TNT1 AA 0 A_SpawnItemEx("BFGTrailParticle",Random(-13,13),Random(-13,13),Random(0,18),fRandom(1,3),0,(0.1)*Random(-10,10),Random(-20,20),128)
		BFGP E 1 Bright A_SpawnItem("U_GreenFlare",0,0)
		TNT1 A 0 A_Explode(90,160,0,0,5,0,0,"SuperBFGExtra")
		TNT1 A 0 A_SpawnItem("BFGLightning",0,0)
		TNT1 AA 0 A_SpawnItemEx("BFGTrailParticle",Random(-13,13),Random(-13,13),Random(0,18),Random(1,3),0,(0.1)*Random(-10,10),Random(-20,20),128)
		Loop
	DM:
		TNT1 A 0 A_ChangeFlag("THRUSPECIES",0)
		TNT1 A 0 A_ChangeFlag("MTHRUSPECIES",0)
		Goto Spawn1
	Death:
		TNT1 A 0 Radius_Quake(4,34,0,12,0)
		TNT1 A 0 Radius_Quake(1,34,0,32,0)
		TNT1 A 0 A_SpawnItemEx("ExplosionSplashSpawner",0,0,-20)
		TNT1 A 0 A_SpawnItemEx("UnderwaterExplosion",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION,0)
		TNT1 A 0 A_SpawnItemEx("DetectFloorCrater",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION,0)
		TNT1 A 0 A_SpawnItemEx("DetectCeilCrater",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION,0)
		//TNT1 A 0 A_SpawnItem("GreenShockWave",0,0,0)
		TNT1 A 0 A_SpawnItemEx("BFGDeathParticleSpawner",0,0,0,0,0,0,0,128)
		TNT1 A 0 A_SpawnItemEx("BFGSuperParticleSpawner",0,0,0,0,0,0,0,128)
		TNT1 A 0 A_SpawnItem("BFGSplashFX")
		TNT1 A 0 A_Explode(180,500,0,1,5,0,0,"SuperBFGExtra")
		BFGB AAABBBCCC 1 Bright A_SpawnItem("U_GreenFlare",0,0)
		TNT1 A 0 A_Explode(180,500,0,1,5,0,0,"SuperBFGExtra")
		BFGB DDDEEEFFF 1 Bright A_SpawnItem("U_GreenFlare",0,0)
		TNT1 A 0 A_Explode(180,500,0,1,5,0,0,"SuperBFGExtra")
		BFGB GGGHHHIIIJJJKKKLLL 1 Bright A_SpawnItem("U_GreenFlare",0,0)
		Stop
	}
}

ACTOR BfgPuff
{
	renderstyle Translucent
	alpha 0.4
	Scale 1.5
	radius 0
	height 0
	Gravity 0.01
	DamageType Desintegrate
	Decal BFGLightning
	+NOBLOCKMAP
	+NOGRAVITY
	+NOEXTREMEDEATH
	+FORCEXYBILLBOARD
	+DONTSPLASH
	-EXPLODEONWATER
	states
	{
	Spawn:
		TNT1 A 0
	Melee:
		TNT1 A 1
		stop
	}
}

Actor U_GreenFlare : Flare_General
{
	alpha 0.4
	scale 0.3
	states
	{
	Spawn:
		TNT1 A 0
		TNT1 A 0 A_Jump(128,"Spawn2")
	Spawn1:
		LENG A 1 Bright
		TNT1 A 0 A_FadeOut(0.15)
		loop
	Spawn2:
		LENG B 1 Bright
		TNT1 A 0 A_FadeOut(0.15)
		loop
	}
}

Actor U_GreenFlare2 : U_GreenFlare
{
	alpha 0.4
	scale 0.6
	states
	{
	Spawn:
		TNT1 A 0
		TNT1 A 0 A_Jump(128,"Spawn2")
	Spawn1:
		LENG A 1 Bright
		TNT1 A 0 A_FadeOut(0.07)
		loop
	Spawn2:
		LENG B 1 Bright
		TNT1 A 0 A_FadeOut(0.07)
		loop
	}
}

Actor BFGLightning : Flare_General
{
	alpha 1.0
	Scale 0.8
	states
	{
	Spawn:
		TNT1 A 0
		TNT1 A 0 A_SetScale(0.8*random(-1,1),0.8*random(-1,1))
		TNT1 A 0 A_Jump(128,"Spawn1","Spawn2","Spawn3","Spawn4","Spawn5","Spawn6","Spawn7","Spawn8","Spawn9","Spawn0")
		Stop
	Spawn1:
		BFGL A 1 Bright
		Stop
	Spawn2:
		BFGL B 1 Bright
		Stop
	Spawn3:
		BFGL C 1 Bright
		Stop
	Spawn4:
		BFGL D 1 Bright
		Stop
	Spawn5:
		BFGL E 1 Bright
		Stop
	Spawn6:
		BFGL F 1 Bright
		Stop
	Spawn7:
		BFGL G 1 Bright
		Stop
	Spawn8:
		BFGL H 1 Bright
		Stop
	Spawn9:
		BFGL I 1 Bright
		Stop
	Spawn0:
		BFGL J 1 Bright
		Stop
	}
}

Actor BFGSplashFX
{
	+NoBlockMap
	+NoGravity
	RenderStyle Add
	+FORCERADIUSDMG
	+THRUGHOST
	Alpha 0.9
	Damage 0
	Scale 2.5
	Radius 1
	Height 1
	DamageType "Desintegrate"
	States
	{
	Spawn:
	TNT1 A 0
	TNT1 AAA 0 A_SpawnItemEx("BFGExtraParticle",0,0,14,(0.1)*Random(10,40),0,(0.1)*Random(-40,40),Random(0,360),128)
	BFGB ABCD 2 Bright A_SpawnItem("U_GreenFlare2",0,0)
	TNT1 AAA 0 A_SpawnItemEx("BFGExtraParticle",0,0,14,(0.1)*Random(10,40),0,(0.1)*Random(-40,40),Random(0,360),128)
	BFGB EFGH 2 Bright A_SpawnItem("U_GreenFlare2",0,0)
	TNT1 AAA 0 A_SpawnItemEx("BFGExtraParticle",0,0,14,(0.1)*Random(10,40),0,(0.1)*Random(-40,40),Random(0,360),128)
	BFGB IJKL 2 Bright A_SpawnItem("U_GreenFlare2",0,0)
	Stop
	}
}

