/*

==LINKED BOW==
A finely tuned short bow designed to be easily carried
and fired, launching hard hitting arrows that always fly
straight. The bow also comes with a supply of special arrows
offering more utility, such as ladder arrows to climb and
reach high places, or blistering fire arrows that scatter flames.

*/


actor LinkedBow : weapon
{
	Weapon.SelectionOrder 200
	Inventory.RestrictedTo "PastLinked"
	weapon.bobstyle smooth
	weapon.bobrangex 0.1
	weapon.bobrangey 0.6
	weapon.bobspeed 2
	Weapon.AmmoUse 1
	Weapon.AmmoType "Shell"
	+WEAPON.AMMO_OPTIONAL
	+NOAUTOAIM
	Tag "Bow"
	states
	{
	select:
		TNT1 A 0
		TNT1 A 0
	draw:
		TNT1 A 0
		HBID AAAAAAAA 0 a_raise
		TNT1 A 1 a_raise
		loop
	Ready:
		TNT1 A 0
		TNT1 A 0 a_jumpifinventory ("Shell",1,"RealReady")
		TNT1 A 0
		goto EmptyBow
	RealReady:
		LBOW A 1 a_weaponready
		Loop
	EmptyBow:
		LBOW C 1 a_weaponready (WRF_NOFIRE)
		TNT1 A 0 a_jumpifinventory ("Shell",1,"Restring")
		loop
	deselect:
		TNT1 A 0
		TNT1 A 0 a_jumpifhealthlower (1, "deadlower")
		TNT1 A 0 a_playsound ("PastLinked/WeaponSwitch",6)
	holster:
        TNT1 AAAAAAAAAAAAAAAAAAAA 0 A_lower
        TNT1 A 1 A_lower
		loop
	deadlower:
		TNT1 A 0
		TNT1 A 0
		TNT1 AAAAAAAAAAAAA 0 a_lower
		TNT1 A 1 a_lower
		wait
	Fire:
		LBOW B 2
		TNT1 A 0 a_playsound ("PastLinked/ArrowShot",0)
		TNT1 A 0 a_firebullets (0,0,1,0,"flickpuff",FBF_NOFLASH)
		LBOW C 1 a_firecustommissile ("LinkedArrow")
		LBOW DEFF 1
		TNT1 A 0 a_jumpifinventory ("Shell",1, "Restring")
		goto EmptyBow
	Restring:
		LBOW GGHHIJKLMN 1
		TNT1 A 0 A_Quake(1, 3, 0, 20,"silence")
		TNT1 A 0 a_playsound ("PastLinked/BowString",0)
		LBOW OPQQR 1
		LBOW A 1
		goto realready
	
//Altfire stuff
	Altfire:
		TNT1 A 0
		TNT1 A 0 a_jumpifinventory ("BoomerangActive",1,"BoomerangCheck")
		TNT1 A 0 a_jumpifinventory ("CandleActive",1,"CandleCheck")
		TNT1 A 0 a_jumpifinventory ("BombBagActive",1,"BombCheck")
		LBOW A 1 a_weaponready
		goto realready

//Ladder arrows (Boomerang)
	BoomerangCheck:
		TNT1 A 0
		TNT1 A 0 a_jumpifinventory ("BoomerangCooldown",1, "RealReady")
		TNT1 A 0 a_jumpifinventory ("FireBoomerangToken",1, "FireLadderLoad")
		TNT1 A 0 a_jumpifinventory ("MagicalBoomerangToken",1, "MagicalLadderLoad")
		Goto LadderLoad
	LadderLoad:
		LBSW AAABCDEFF 1
		LBSW G 3
		LBSW H 2
		LBW1 ABCDEF 1
		TNT1 A 0 A_Quake(1, 3, 0, 20,"silence")
		TNT1 A 0 a_playsound ("PastLinked/BowString",0)
		LBW1 GGHIIJ 1
		LBW1 K 1 
		goto LadderArrow
	LadderArrow:
		LBW1 K 1
		TNT1 A 0 a_refire ("LadderArrow")
		LBW1 L 2
		TNT1 A 0 a_playsound ("Pastlinked/LadderArrow",0)
		TNT1 A 0 a_playsound ("Pastlinked/Crissword",0)
		TNT1 A 0 a_giveinventory ("BoomerangCoolDown",120)
		TNT1 A 0 ACS_NamedExecuteAlways("BoomerangCharge", 0, 0, 0, 0)
		TNT1 A 0 a_takeinventory ("Shell",1)
		TNT1 A 0 a_firebullets (0,0,1,0,"flickpuff",FBF_NOFLASH)
		LBOW C 1 a_firecustommissile ("LadderArrow")
		LBOW DEFFFF 1
		TNT1 A 0 a_jumpifinventory ("Shell",1, "Restring")
		goto EmptyBow
		
	MagicalLadderLoad:
		LBSW AAABCDEFF 1
		LBSW G 3
		LBSW H 2
		LBW4 ABCDEF 1
		TNT1 A 0 A_Quake(1, 3, 0, 20,"silence")
		TNT1 A 0 a_playsound ("PastLinked/BowString",0)
		LBW4 GGHIIJ 1
		LBW4 K 1 
		goto MagicalLadderArrow
	MagicalLadderArrow:
		LBW4 K 1
		TNT1 A 0 a_refire ("MagicalLadderArrow")
		LBW4 L 2
		TNT1 A 0 a_playsound ("Pastlinked/LadderArrow",0)
		TNT1 A 0 a_playsound ("Pastlinked/Crissword",0)
		TNT1 A 0 a_giveinventory ("BoomerangCoolDown",120)
		TNT1 A 0 ACS_NamedExecuteAlways("BoomerangCharge", 0, 0, 0, 0)
		TNT1 A 0 a_takeinventory ("Shell",1)
		TNT1 A 0 a_firebullets (0,0,1,0,"flickpuff",FBF_NOFLASH)
		LBOW C 1 a_firecustommissile ("MagicalLadderArrow")
		LBOW DEFFFF 1
		TNT1 A 0 a_jumpifinventory ("Shell",1, "Restring")
		goto EmptyBow

	FireLadderLoad:
		LBSW AAABCDEFF 1
		LBSW G 3
		LBSW H 2
		LBW5 ABCDEF 1
		TNT1 A 0 A_Quake(1, 3, 0, 20,"silence")
		TNT1 A 0 a_playsound ("PastLinked/BowString",0)
		LBW5 GGHIIJ 1
		LBW5 K 1 
		goto FireLadderArrow
	FireLadderArrow:
		LBW5 K 1
		TNT1 A 0 a_refire ("FireLadderArrow")
		LBW5 L 2
		TNT1 A 0 a_playsound ("Pastlinked/LadderArrow",0)
		TNT1 A 0 a_playsound ("Pastlinked/Crissword",0)
		TNT1 A 0 a_giveinventory ("BoomerangCoolDown",120)
		TNT1 A 0 ACS_NamedExecuteAlways("BoomerangCharge", 0, 0, 0, 0)
		TNT1 A 0 a_takeinventory ("Shell",1)
		TNT1 A 0 a_firebullets (0,0,1,0,"flickpuff",FBF_NOFLASH)
		LBOW C 1 a_firecustommissile ("FireLadderArrow")
		LBOW DEFFFF 1
		TNT1 A 0 a_jumpifinventory ("Shell",1, "Restring")
		goto EmptyBow
		

		
//Fire arrows (Candle)
	CandleCheck:
		TNT1 A 0
		TNT1 A 0 a_jumpifinventory ("CandleCooldown",1, "RealReady")
		TNT1 A 0 a_jumpifinventory ("RedCandle",1, "RedFireArrowStart")
		Goto BlueFireArrowStart
	BlueFireArrowStart:
		LBSW AAABCDEFF 1
		LBSW G 3
		LBSW H 2
		LBW2 ABCDEF 1
		TNT1 A 0 A_Quake(1, 3, 0, 20,"silence")
		TNT1 A 0 a_playsound ("PastLinked/BowString",0)
		LBW2 GGHIIJ 1
		LBW2 K 1 
		goto BlueFireArrow
	BlueFireArrow:
		LBW2 K 1
		TNT1 A 0 a_refire ("BlueFireArrow")
		LBW2 L 2
		TNT1 A 0 a_giveinventory ("CandleCoolDown",60)
		TNT1 A 0 ACS_NamedExecuteAlways("CandleCharge", 0, 0, 0, 0)
		TNT1 A 0 a_takeinventory ("Shell",1)
		TNT1 AAAAA 0 A_FireCustomMissile("BlueFireBall", Frandom(-14,14),0,0,0,0,Frandom(-5,5))
		TNT1 AAAAAAAA 0 A_FireCustomMissile("BlueFireBall", Frandom(-28,28),0,0,0,0,Frandom(-8,8))
		TNT1 A 0 a_playsound ("PastLinked/FireArrow",0)
		TNT1 A 0 a_firebullets (0,0,1,0,"flickpuff",FBF_NOFLASH)
		LBOW C 1 a_firecustommissile ("BlueFireArrow")
		LBOW DEFFFF 1
		TNT1 A 0 a_jumpifinventory ("Shell",1, "Restring")
		goto EmptyBow
		
	RedFireArrowStart:
		LBSW AAABCDEFF 1
		LBSW G 3
		LBSW H 2
		LBW6 ABCDEF 1
		TNT1 A 0 A_Quake(1, 3, 0, 20,"silence")
		TNT1 A 0 a_playsound ("PastLinked/BowString",0)
		LBW6 GGHIIJ 1
		LBW6 K 1 
		goto RedFireArrow
	RedFireArrow:
		LBW6 K 1
		TNT1 A 0 a_refire ("RedFireArrow")
		LBW6 L 2
		TNT1 A 0 a_giveinventory ("CandleCoolDown",60)
		TNT1 A 0 ACS_NamedExecuteAlways("CandleCharge", 0, 0, 0, 0)
		TNT1 A 0 a_takeinventory ("Shell",1)
		TNT1 AAAAAAA 0 A_FireCustomMissile("RedFireBall", Frandom(-14,14),0,0,0,0,Frandom(-5,5))
		TNT1 AAAAAAAAAAAA 0 A_FireCustomMissile("RedFireBall", Frandom(-28,28),0,0,0,0,Frandom(-8,8))
		TNT1 A 0 a_playsound ("PastLinked/FireArrow",0)
		TNT1 A 0 a_firebullets (0,0,1,0,"flickpuff",FBF_NOFLASH)
		LBOW C 1 a_firecustommissile ("RedFireArrow")
		LBOW DEFFFF 1
		TNT1 A 0 a_jumpifinventory ("Shell",1, "Restring")
		goto EmptyBow




//Bomb Arrows (Bombs)
	BombCheck:
		TNT1 A 0
		TNT1 A 0 a_jumpifinventory ("RocketAmmo",1, "BombArrowString")
		Goto RealReady
	BombArrowString:
		LBSW AAABCDEFF 1
		LBSW G 3
		LBSW H 2
	DrawBombArrow:	
		LBW3 ABCDEF 1
		TNT1 A 0 A_Quake(1, 3, 0, 20,"silence")
		TNT1 A 0 a_playsound ("PastLinked/BowString",0)
		LBW3 GGHIIJ 1
		LBW3 K 1 
		goto BombArrow
	BombArrow:
		LBW3 K 1
		TNT1 A 0 a_refire ("BombArrow")
		LBW3 L 2
		TNT1 A 0 a_takeinventory ("Shell",1)
		TNT1 A 0 a_takeinventory ("RocketAmmo",1)
		TNT1 A 0 a_playsound ("PastLinked/BombArrow",0)
		TNT1 A 0 a_firebullets (0,0,1,0,"flickpuff",FBF_NOFLASH)
		LBOW C 1 a_firecustommissile ("LinkedBombArrow")
		LBOW DEFFFF 1
		TNT1 A 0 A_refire ("ShellCheck")
		TNT1 A 0 a_jumpifinventory ("Shell",1, "Restring")
		goto EmptyBow
	ShellCheck:
		TNT1 A 0
		TNT1 A 0 a_jumpifinventory ("Shell",1, "RocketCheck")
		goto EmptyBow
	RocketCheck:
		TNT1 A 0
		TNT1 A 0 a_jumpifinventory ("RocketAmmo",1, "DrawBombArrow")
		goto Restring
	}
}



actor LinkedArrow : fastprojectile
{
	scale 2
	Damage (65)
	Speed 55
	Radius 6
	Height 4
	+bright
	+NOEXTREMEDEATH
	DamageType "CALinked"
	+thruspecies
	species "Player"
	Decal SmallCANESDecal
	States
	{
	Spawn:
		LKRW A 1
		loop
	Death:
		TNT1 A 0
		TNT1 A 0 A_PlaySound("PastLinked/Shield", CHAN_AUTO)
		ZDTH A 3
		ZDTH B 3
		ZDTH A 3
		Stop
	xdeath:
		STBE B 1
		TNT1 A 0 A_PlaySound("PastLinked/Hitsound", CHAN_AUTO)
		TNT1 A 0 A_PlaySound("PastLinked/ArrowHit", 0)
		STBE B 2 a_setscale (1.30,1.30)
		stop
	}
}

