

ACTOR SpreadGun : Weapon
{
	Weapon.SelectionOrder 300
	Weapon.AmmoType "Shell"
	Weapon.AmmoGive 4
	Weapon.SlotNumber 3
	weapon.bobstyle smooth
	weapon.bobrangex 0.1
	weapon.bobrangey 0.6
	weapon.bobspeed 2
	Inventory.PickupMessage "You picked up the Spread Gun!"
	Obituary "%k had a red ball-induced seizure thanks to %o."
	Inventory.RestrictedTo "Artificer"
	+WEAPON.AMMO_OPTIONAL
	+undroppable
	+cheatnotweapon
	+noautofire	
	Tag "Spread Gun"
	states
	{
	Select:
		TNT1 A 0
		TNT1 A 0
	Riseup:
		D3UP AA 0 a_raise
		D3UP AAAAA 0 a_raise
		TNT1 A 0 a_takeinventory ("SpreadStack",9999)
		CTRA A 1
		loop
	
	Ready:
		TNT1 A 0
		CTRA A 1 a_weaponready
		loop
	Deselect:
		TNT1 A 0
		TNT1 A 0 a_jumpifhealthlower (1, "deadlower")
		TNT1 A 0 a_takeinventory ("SpreadStack",9999)
	holster:
		TNT1 A 0
		CTRA A 1 a_lower
		TNT1 AAA 0 a_lower
		CTRA A 1 a_lower
		loop
	deadlower:
		TNT1 A 0
		TNT1 A 0
		TNT1 AAAAAAAAAAAAA 0 a_lower
		TNT1 A 1 a_lower
		wait
	Fire:
		TNT1 A 0
		CTRA A 1 a_jumpifinventory ("Shell", 1, "FirstShot")
		TNT1 A 0 a_takeinventory ("SpreadStack",9999)
		MSDI C 0 Bright A_FireCustomMissile("WeakPellet",0)
		TNT1 A 0 A_Quake(1, 4, 0, 32,"ArtiSilence")
		TNT1 A 0 a_playsound ("SpreadGun/WeakShot",CHAN_WEAPON)
		TNT1 A 0 a_firebullets (0,0,1,0,"flickpuff",FBF_NOFLASH)
		CTRA BC 1 bright
		CTRA D 1 bright
		MSDI C 0 Bright A_FireCustomMissile("WeakPellet",random(-4,4))
		TNT1 A 0 A_Quake(1, 4, 0, 32,"ArtiSilence")
		TNT1 A 0 a_playsound ("SpreadGun/WeakShot",CHAN_WEAPON)
		TNT1 A 0 a_firebullets (0,0,1,0,"flickpuff",FBF_NOFLASH)
		CTRA BC 1 bright
		CTRA D 1 bright
		MSDI C 0 Bright A_FireCustomMissile("WeakPellet",random(-4,4))
		TNT1 A 0 A_Quake(1, 4, 0, 32,"ArtiSilence")
		TNT1 A 0 a_playsound ("SpreadGun/WeakShot",CHAN_WEAPON)
		TNT1 A 0 a_firebullets (0,0,1,0,"flickpuff",FBF_NOFLASH)
		CTRA BC 1 bright
		CTRA D 1 bright
		MSDI C 0 Bright A_FireCustomMissile("WeakPellet",random(-4,4))
		TNT1 A 0 A_Quake(1, 4, 0, 32,"ArtiSilence")
		TNT1 A 0 a_playsound ("SpreadGun/WeakShot",CHAN_WEAPON)
		TNT1 A 0 a_firebullets (0,0,1,0,"flickpuff",FBF_NOFLASH)
		CTRA BC 1 bright
		CTRA D 1 bright
		CTRA A 6
		CTRA A 7 a_weaponready (WRF_NOBOB)
		TNT1 A 0 a_takeinventory ("SpreadStack",9999)
		TNT1 A 0 a_refire
		goto ready
	FirstShot:
		TNT1 A 0
		TNT1 A 0 a_jumpifinventory ("SpreadStack",2,"TightShot")
		MSDI C 0 Bright A_FireCustomMissile("RubyPellet",-10)
		MSDI C 0 Bright A_FireCustomMissile("RubyPellet",10)
		MSDI C 0 Bright A_FireCustomMissile("RubyPellet",-5)
		MSDI C 0 Bright A_FireCustomMissile("RubyPellet",5)
		MSDI C 0 Bright A_FireCustomMissile("RubyPellet",0)
		TNT1 A 0 a_takeinventory ("shell",1)
		TNT1 A 0 A_Quake(2, 4, 0, 32,"ArtiSilence")
		TNT1 A 0 a_playsound ("SpreadGun/Shot",CHAN_WEAPON)
		TNT1 A 0 a_giveinventory ("SpreadStack",1)
		TNT1 A 0 a_firebullets (0,0,1,0,"flickpuff",FBF_NOFLASH)
		CTRA BC 1 bright
		CTRA DE 2 bright a_weaponready (WRF_NOBOB)
		CTRA A 7 a_weaponready (WRF_NOBOB)
		TNT1 A 0 a_takeinventory ("SpreadStack",9999)
		TNT1 A 0 a_refire ("SteadyShotCheck")
		goto ready
	SteadyShotCheck:
		TNT1 A 0
		TNT1 A 0 a_takeinventory ("SpreadStack",9999)
		CTRA A 1 a_jumpifinventory ("Shell",1,"SteadyShot")
		goto ready
	SteadyShot:
		MSDI C 0 Bright A_FireCustomMissile("RubyPellet",-10)
		MSDI C 0 Bright A_FireCustomMissile("RubyPellet",10)
		MSDI C 0 Bright A_FireCustomMissile("RubyPellet",-5)
		MSDI C 0 Bright A_FireCustomMissile("RubyPellet",5)
		MSDI C 0 Bright A_FireCustomMissile("RubyPellet",0)
		TNT1 A 0 A_Quake(2, 4, 0, 32,"ArtiSilence")
		TNT1 A 0 a_playsound ("SpreadGun/Shot",CHAN_WEAPON)
		TNT1 A 0 a_takeinventory ("shell",1)
		TNT1 A 0 a_firebullets (0,0,1,0,"flickpuff",FBF_NOFLASH)
		CTRA BC 1 bright
		CTRA DE 2 bright
		CTRA A 7
		TNT1 A 0 a_refire ("SteadyShotCheck")
		goto ready
	TightShot:
		MSDI C 0 Bright A_FireCustomMissile("RubyPellet",random(-1,-3))
		MSDI C 0 Bright A_FireCustomMissile("RubyPellet",random(1,3))
		MSDI C 0 Bright A_FireCustomMissile("WeakestPellet",random(-5,5))
		MSDI C 0 Bright A_FireCustomMissile("WeakestPellet",random(-4,4))
		MSDI C 0 Bright A_FireCustomMissile("RubyPellet",0)
		TNT1 A 0 a_takeinventory ("shell",1)
		TNT1 A 0 A_Quake(2, 4, 0, 32,"ArtiSilence")
		TNT1 A 0 a_playsound ("SpreadGun/Shot",CHAN_WEAPON)
		TNT1 A 0 a_giveinventory ("SpreadStack",1)
		TNT1 A 0 a_firebullets (0,0,1,0,"flickpuff",FBF_NOFLASH)
		CTRA BC 1 bright
		CTRA DE 2 bright a_weaponready (WRF_NOBOB)
		CTRA A 10 a_weaponready (WRF_NOBOB)
		TNT1 A 0 a_takeinventory ("SpreadStack",999)
		TNT1 A 0 a_refire ("SteadyShotCheck")
		goto ready
		
		
	Altfire:
		TNT1 A 0
		CTRA A 1 a_jumpifinventory ("Shell", 2, "SuperSpread")
		Goto ready
	SuperSpread:
		TNT1 A 0
		TNT1 A 0
		PSPM AAAAAAAAAAAA 0 A_FireCustomMissile("FastRubypellet", Frandom(-6,7),0,0,0,0,Frandom(-4,4))
		PSPM AAAAA 0 A_FireCustomMissile("FastRubypellet", Frandom(-10,10),0,0,0,0,Frandom(-5,6))
		TNT1 A 0 a_takeinventory ("shell",2)
		TNT1 A 0 a_takeinventory ("SpreadStack",999)
		TNT1 A 0 A_Quake(3, 7, 0, 32,"ArtiSilence")
		TNT1 A 0 a_playsound ("SpreadGun/BIGShot",CHAN_WEAPON)
		TNT1 A 0 a_firebullets (0,0,1,0,"flickpuff",FBF_NOFLASH)
		CTRA FFE 1 bright
		TNT1 A 0 offset (0,40)
		CTRA HI 2 bright
		TNT1 A 0 offset (0,35)
		CTRA A 2
		TNT1 A 0 offset (0,32)
		TNT1 A 0 a_jumpifinventory ("Shell",2,"ReloadSpread")
		TNT1 A 0 
		goto ready
	ReloadSpread:
		TNT1 A 0 
		TNT1 A 0 a_playsound ("SpreadGun/Open",0)
		CTR1 ABCDEF 1
		CTR1 F 4
		CTR1 GHIJ 2
		TNT1 A 0 a_playsound ("SpreadGun/Reload",0)		
		CTR1 K 2 offset (-8,36)
		CTR1 K 2 offset (-3,34)
		CTR1 L 2 a_weaponready (WRF_NOFIRE)
		CTR1 MNOPQR 2
		TNT1 A 0 a_playsound ("SpreadGun/Close",0)		
		CTR1 STU 1 a_weaponready (WRF_NOBOB)
		TNT1 A 0 a_refire ("SuperSpreadCheck")
		CTRA A 1 a_weaponready (WRF_NOBOB)
		goto ready
	SuperSpreadCheck:
		TNT1 A 0
		CTRA A 1 a_jumpifinventory ("Shell", 2, "SuperSpread")
		Goto ready
	}
}


actor Rubypellet
{
	+notimefreeze
	+FORCEXYBILLBOARD	
	+thruspecies	
	+dontblast
	+bright
	Projectile
	damage (14)
	species "Player"
	speed 40
	height 12
	radius 12
    Scale 2
	alpha 0.95
	+BLOODSPLATTER
	+NOEXTREMEDEATH
	+HITTRACER
	Decal ArtiDecal
	states
	{
	Spawn:
		RBPT A 1
		TNT1 A 1
		RBPT A 1
		TNT1 A 1
		RBPT A 1
		TNT1 A 1
		RBPT B 1
		TNT1 A 1
		RBPT B 1
		TNT1 A 1
		RBPT B 1
		TNT1 A 1
		RBPT B 1
		TNT1 A 1
		TNT1 A 0 a_setscale (3,3)
	flying:
		RBPT C 1
		TNT1 A 1
		loop
	Death:
		TNT1 A 0
		RBPT DHI 2
		stop
	XDeath:
		TNT1 A 0
		TNT1 A 0
		TNT1 A 0 a_jumpifinventory ("HitTimer",1,"NoSound",AAPTR_TRACER)
		RBPT D random(1,2)
		TNT1 A 0 a_giveinventory ("HitTimer",1,AAPTR_TRACER)
		TNT1 A 0 a_playsound ("SpreadGun/Hit",0)
		RBPT EFG 2
		stop
	NoSound:
		TNT1 A 0
		RBPT EFG 2
		stop
		
	}
}

actor weakpellet : rubypellet
{
	damage (8)
    Scale 2
	Decal ArtiDecal
	states
	{
	Spawn:
		RBPT J 1
		TNT1 A 1
		RBPT K 1
		TNT1 A 1
		RBPT J 1
		TNT1 A 1
		TNT1 K 1
		loop
	}
}

actor WeakestPellet : WeakPellet
{
	+painless
}


actor FastRubypellet : FastProjectile
{
	+notimefreeze
	+FORCEXYBILLBOARD	
	+thruspecies	
	+dontblast
	+bright
	Projectile
	damage (14)
	species "Player"
	speed 80
	height 12
	radius 12
    Scale 2
	alpha 0.95
	+BLOODSPLATTER
	+NOEXTREMEDEATH
	+hittracer
	Decal ArtiDecal
	projectilekickback 500
	states
	{
	Spawn:
		TNT1 A 0
		RBPT A 1
		TNT1 A 1 
		RBPT B 1
		TNT1 A 1
		RBPT B 1
		TNT1 A 1
		TNT1 A 0 a_setscale (3,3)
	flying:
		RBPT C 1
		TNT1 A 1
		loop
	Death:
		TNT1 A 0
		RBPT DHI 2
		stop
	XDeath:
		TNT1 A 0
		TNT1 A 0
		RBPT D 1 a_jumpifinventory ("HitTimer",1,"NoSound",AAPTR_TRACER)
		RBPT D random(2,3)
		TNT1 A 0 a_jump (120,"NoSound")
		TNT1 A 0 a_giveinventory ("HitTimer",1,AAPTR_TRACER)
		TNT1 A 0 a_playsound ("SpreadGun/Hit",0)
		RBPT EFG 2
		stop
	NoSound:
		TNT1 A 0
		RBPT EFG 2
		stop	
	}
}




//Tokens
actor SpreadStack : inventory
{inventory.maxamount 4}

Actor HitTimer : Powerup
{
  Powerup.Duration 3
}

