/*

==DREADBOLT==
That strange guy took what was left of that terrible pistol
you've carried after you broke it across the face of one of those
tall demons that set you on fire, and managed to turn into something
half decent. It's now a nasty hand cannon that fires bladed mini rockets!
The little engines ignite after flying far enough, and they'll explode on
impact if they manage to ignite. So you'll want some space to get the most
out of this one.
*/

//Note: I put all of the casing code for Doomslayer's weapons at the bottom
//of this weapon here!

actor DreadBolt : Rend
{
	Weapon.SelectionOrder 900
	Weapon.AmmoType "SlayerMettle"
	Weapon.AmmoUse 12
	Inventory.RestrictedTo "DoomSlayer"
	+CHEATNOTWEAPON
	+UNDROPPABLE
	Tag "DreadBolt"
	Inventory.PickupMessage "You've picked up your pistol, keep a better grip on that you dummy."
	states
	{
	Spawn:
		BAL1 A 1 
		loop
	Select:
		TNT1 A 0
		TNT1 A 1 A_GunFlash ("GadgetStarter",GFF_NOEXTCHANGE)
		TNT1 A 0 A_PlaySound ("DoomSlayer/PistolSelect",0)
	Draw:
		TNT1 AAAAAA 0 A_Raise
		TNT1 A 0 A_JumpIfInventory ("BarrelToken",1, "BarrelGet")
		TNT1 A 0 A_JumpIfInventory ("GoldenBarrelToken",1, "GoldenBarrelGet")
		TNT1 A 1 A_Raise
		loop
	Ready:
		TNT1 A 0
		SLB2 ACDE 1 A_WeaponReady
		Goto RealReady
	RealReady:
		TNT1 A 0
		TNT1 A 0 A_JumpIfInventory ("BarrelToken",1, "BarrelGet")
		TNT1 A 0 A_JumpIfInventory ("GoldenBarrelToken",1, "GoldenBarrelGet")
		TNT1 A 0 A_JumpIfInventory ("BFGReady", 1, "DrawBFG")
		SLB1 A 1 A_WeaponReady
		TNT1 A 0 A_JumpIfInventory ("BFGReady", 1, "DrawBFG")
		loop
	Deselect:
		TNT1 A 0
		TNT1 A 0 A_Jumpifhealthlower (1, "DeadLower")
		TNT1 A 0 A_PlaySound ("doomslayer/holster",0)
		SLB3 ABCD 1
		SLB1 AAAAAA 0 A_Lower
	Holster:
		TNT1 A 0
		TNT1 AAAAAAAA 0 A_Lower
		TNT1 A 1 A_Lower
		loop
	
	Fire:
		TNT1 A 0
		TNT1 A 0 A_JumpIfInventory ("BarrelToken", 1, "BarrelToss")
		TNT1 A 0 A_JumpIfInventory ("GoldenBarrelToken",1, "GoldenBarrelToss")
		TNT1 A 0 A_JumpIfInventory ("BFGArmed", 1, "FireBFG")
		SLB1 A 1
		TNT1 A 0 A_JumpIfInventory ("BarrelToken",1,"BarrelGet")
		TNT1 A 0 A_JumpIfInventory ("GoldenBarrelToken",1, "GoldenBarrelGet")
		TNT1 A 0 A_JumpIfInventory ("BFGReady", 1, "DrawBFG")
		TNT1 A 0 A_JumpIfInventory ("SlayerMettle",12,"RealFire")
		TNT1 A 0 A_JumpIfInventory ("SlayerGrit",12,"RealBackupFire")
		TNT1 A 0 A_PlaySound ("DoomSlayer/click",0)
		SLB1 I 2
		SLB1 A 15 A_WeaponReady (WRF_NOPRIMARY|WRF_NOBOB)
		Goto RealReady
	RealFire:
		TNT1 A 0 A_Quake(2, 6, 0, 10)
		TNT1 A 0 A_PlaySound ("DoomSlayer/PistolShot",0)
		SLB1 B 1 bright
		TNT1 A 0 A_FireCustomMissile ("DreadBoltShot",0,1)
		SLB1 BC 1 bright
		TNT1 A 0 A_FireCustomMissile ("GMOTASlayerCasingSpawner1",0,0,0,-2)
		SLB1 D 1
		SLB1 EDE 1
		SLB1 F 4
		SLB1 GH 2
		SLB1 I 1
		goto RealReady
	RealBackupFire:
		TNT1 A 0 A_Quake(2, 6, 0, 10)
		TNT1 A 0 A_PlaySound ("DoomSlayer/PistolShot",0)
		SLB1 B 1 bright
		TNT1 A 0 A_TakeInventory ("SlayerGrit",12)
		TNT1 A 0 A_FireCustomMissile ("DreadBoltShot",0,0)
		SLB1 BC 1 bright
		TNT1 A 0 A_FireCustomMissile ("GMOTASlayerCasingSpawner4",0,0,0,-2)
		SLB1 D 1
		SLB1 EDE 1
		SLB1 F 4
		SLB1 GH 2
		SLB1 I 1
		goto RealReady


	Altfire:
		TNT1 A 0
		TNT1 A 0 A_JumpIfInventory ("BarrelToken", 1, "BarrelCancel")
		TNT1 A 0 A_JumpIfInventory ("GoldenBarrelToken",1, "GoldenBarrelCancel")
		TNT1 A 0 A_JumpIfInventory ("BFGArmed", 1, "HolsterBFG")
		SLB3 ABCD 1
		TNT1 A 0 A_PlaySound ("doomslayer/SwordUp")
		TNT1 A 0 A_Jump (256, "StartSlash")
		Goto AltfireEnd
	BarrelGet:
		TNT1 A 0
		TNT1 A 0 A_ClearReFire
		SLB1 A 1
		TNT1 A 0 A_PlaySound ("doomslayer/holster",0)
		TNT1 A 0 A_TakeInventory ("UsingSlayerGun",99)
		TNT1 A 2
		TNT1 A 0 A_Jump (256, "BarrelStart")
		Goto ToolEnd


	AltfireEnd:
		TNT1 A 0 A_PlaySound ("doomslayer/SwordDown")
		TNT1 A 4 A_WeaponReady
		goto Ready
	ToolEnd:
		TNT1 A 1 A_ClearReFire
		TNT1 A 4 A_WeaponReady
		goto Ready
		
	GadgetStarter:
		TNT1 A 0
		TNT1 A 1
		TNT1 A 0 A_Jump (256, "GadgetReady")
		goto RealReady

	}
}

//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


//======================
//=Dreadbolt Projectile=
//======================



actor DreadBoltShot : fastprojectile
{
	Projectile
	+notimefreeze
	+BLOODSPLATTER
	+FORCEXYBILLBOARD
	+FORCERADIUSDMG
	+NOEXTREMEDEATH
	+thruspecies
	+bright
	species "friendly"
	Radius 10
	Height 8
	Speed 70
	Damage (40)
	scale 1.50
	
	states
	{
	spawn: 
		2LT1 A 2
		TNT1 A 0 A_ScaleVelocity (1.50)
		2LT1 B 1 A_PlaySound ("DoomSlayer/wrathshot",0,1,0,0.70)
		Goto RocketLance
	RocketLance:
		2LT1 BCD 2 
		loop
	Death:
		TNT1 A 0
		TNT1 A 0 A_FadeOut (0.20)
		TNT1 A 0 A_SetScale (0.80)
		TNT1 A 0 A_PlaySound ("DoomSlayer/wrathnormal",0,1,0,0.6)
		TNT1 A 0 A_Explode (15,100,1,1,100)
		WRML B 2 bright A_Explode (15,100,0,1,100)
		TNT1 A 0 Radius_Quake (2,6,0,10,0)
		TNT1 AAAAAAAA 0 Bright A_SpawnItemEx("LavaLazerTrail",frandom(-21,21),frandom(-21,21),frandom(10,31),frandom(-6,6),frandom(-4,8),frandom(2,3))
		TNT1 AAAAAAAA 0 Bright A_SpawnItemEx("LavaLazerEmber2",frandom(-16,16),frandom(-16,16),frandom(16,26),frandom(-1,1),frandom(-7,6),frandom(3,5))
		TNT1 AAAAAAAA 0 Bright A_SpawnItemEx("LavaLazerSmoke2",frandom(-4,4),frandom(-4,4),frandom(4,8),frandom(-4,6),frandom(-5,6),frandom(2,5))
		TNT1 AAAAAAA 0 Bright A_SpawnItemEx("LavaLazerSmoke",frandom(-4,4),frandom(-4,4),frandom(4,8),frandom(-4,6),frandom(-5,6),frandom(2,6))
		WRML C 1 bright
		WRML EFGH 1 bright
		Stop
	Xdeath:
		TNT1 A 0
		TNT1 AAA 0 A_GiveInventory ("SlayerToolCharger",1, AAPTR_TARGET)
		TNT1 A 1 
		Goto Death
	}
}


//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


//=================
//=====Casings=====
//=================


//------------------------------------------------------------------------------------------------------
//------------------------------------------------------------------------------------------------------
//======================
//Dreadbolt Casings
//======================

ACTOR GMOTASlayerCasingSpawner1
{
	Speed 13
	PROJECTILE
	+NOCLIP
	States
	{
	Spawn:
		TNT1 A 0
		TNT1 A 0 A_CustomMissile("SlayerMettleCasing1",0,0,random(-100,-80),CMF_AIMDIRECTION,random(-15,15))
		Stop
	}
}

ACTOR SlayerMettleCasing1
{
	Radius 2
	Height 4
	Speed 8
	Xscale 0.15
	Yscale 0.15
	PROJECTILE
	-NOGRAVITY
	+BOUNCEONACTORS
	+DONTSPLASH
	+DOOMBOUNCE
	+clientsideonly
	+NOTELEPORT
	Gravity 0.75
	BounceCount 6
	BounceFactor 0.6  
	//SeeSound "Casing/Bullet"
	//DeathSound "Casing/Bullet"
	States
	{
	Spawn:
		TNT1 A 0
		TNT1 A 0 A_PlaySound("silence", CHAN_VOICE)
		MTC1 ABCDEFGH 1 bright
		Goto RollingLoop
	RollingLoop:
		MTC1 ABCDEFGH 1 bright
		Loop
	Death:
		TNT1 A 0 A_Jump (256, "Dead1","Dead2")
		loop
	Dead1:
		MTC1 C Random(45,60) bright
		MTC1 C 1 bright A_FadeOut (0.01)
		wait
 	Dead2:
		MTC1 G Random(45,60) bright
		MTC1 G 1 bright A_FadeOut (0.01)
		wait
	}
}

//------------------------------------------------------------------------------------------------------
//------------------------------------------------------------------------------------------------------
//Mourning Star Casings


ACTOR GMOTASlayerCasingSpawner2 : GMOTASlayerCasingSpawner1
{
	States
	{
	Spawn:
		TNT1 A 0
		TNT1 A 0 A_CustomMissile("SlayerMettleCasing2",0,0,random(-100,-80),CMF_AIMDIRECTION,random(-15,15))
		Stop
	}
}

ACTOR SlayerMettleCasing2 : SlayerMettleCasing1
{
	Xscale 0.25
	Yscale 0.25
}


//------------------------------------------------------------------------------------------------------
//------------------------------------------------------------------------------------------------------
//Thunderbuss Casings


ACTOR GMOTASlayerCasingSpawner3 : GMOTASlayerCasingSpawner1
{
	States
	{
	Spawn:
		TNT1 A 0
		TNT1 A 1 A_CustomMissile("SlayerMettleCasing3",Random(5,10),0,random(100,80),CMF_AIMDIRECTION,random(15,25))
		TNT1 A 1 A_CustomMissile("SlayerMettleCasing3",Random(8,14),0,random(100,80),CMF_AIMDIRECTION,random(18,29))
		Stop
	}
}

ACTOR SlayerMettleCasing3 : SlayerMettleCasing1
{
	Xscale 0.30
	Yscale 0.30
	States
	{
	Spawn:
		TNT1 A 0
		TNT1 A 0 A_PlaySound("silence", CHAN_VOICE)
		TNT1 A 0 ThrustThingZ (0,Random(4,8),0,1)
		MTC2 ABCDEFGH 1 bright
		Goto RollingLoop
	RollingLoop:
		MTC2 ABCDEFGH 1 bright
		Loop
	Death:
		TNT1 A 0 A_Jump (256, "Dead1","Dead2")
		loop
	Dead1:
		MTC2 C Random(45,60) bright
		MTC2 C 1 bright A_FadeOut (0.01)
		wait
 	Dead2:
		MTC2 G Random(45,60) bright
		MTC2 G 1 bright A_FadeOut (0.01)
		wait
	}
}

//------------------------------------------------------------------------------------------------------
//------------------------------------------------------------------------------------------------------


//======================
//Backup Dreadbolt Casings
//======================

ACTOR GMOTASlayerCasingSpawner4
{
	Speed 13
	PROJECTILE
	+NOCLIP
	States
	{
	Spawn:
		TNT1 A 0
		TNT1 A 0 A_CustomMissile("SlayerMettleCasing4",0,0,random(-100,-80),CMF_AIMDIRECTION,random(-15,15))
		Stop
	}
}

ACTOR SlayerMettleCasing4
{
	Radius 2
	Height 4
	Speed 8
	Xscale 0.15
	Yscale 0.15
	PROJECTILE
	-NOGRAVITY
	+BOUNCEONACTORS
	+DONTSPLASH
	+DOOMBOUNCE
	+clientsideonly
	+NOTELEPORT
	Gravity 0.75
	BounceCount 6
	BounceFactor 0.6  
	//SeeSound "Casing/Bullet"
	//DeathSound "Casing/Bullet"
	States
	{
	Spawn:
		TNT1 A 0
		TNT1 A 0 A_PlaySound("silence", CHAN_VOICE)
		MTC2 ABCDEFGH 1 bright
		Goto RollingLoop
	RollingLoop:
		MTC2 ABCDEFGH 1 bright
		Loop
	Death:
		TNT1 A 0 A_Jump (256, "Dead1","Dead2")
		loop
	Dead1:
		MTC2 C Random(45,60) bright
		MTC2 C 1 bright A_FadeOut (0.01)
		wait
 	Dead2:
		MTC2 G Random(45,60) bright
		MTC2 G 1 bright A_FadeOut (0.01)
		wait
	}
}
