

//==============================================================================
//============================ Crossbow Projectiles ============================
//==============================================================================


ACTOR EtherealCrossbowBolt : FastProjectile
{
	Speed 70
	Damage (random(1,5)+(CountInv("Stat_Magicalstrength",AAPTR_PLAYER1)/5))
	SeeSound ""
	Radius 2
	Height 2
	Projectile
	RenderStyle Add
	DeathSound "BOWHIT1"
	Obituary "$OB_MPCROSSBOW"
	+WINDTHRUST
	+SPECTRAL
	+BLOODSPLATTER
	+CANNOTPUSH
	//MissileType "CrossbowBoltTrail"
	//Missiletype "FairyDustTrail"
	MissileHeight 8
	Decal "CrossbowScorch"
	DamageType "Crossbow"
	
	States
	{
		Spawn:
			TNT1 A 0 NoDelay A_JumpIf(GetCVAR("LightShow"),"Fancy")
		Launched:
			FXA3 AA 1 Bright A_SpawnItemEX("FairyDustTrail",random(3,-3),random(3,-3),0,0,random(1,-1),-3)
			TNT1 A 0 A_GiveInventory("PointBlancToken",1)
			Loop
		Fancy:
			FX03 A 1 Bright A_SpawnItem("EtherealFlare1")
			Loop
		Death:
			FX03 CDE 2 Bright A_SpawnItem("EtherealFlare2")
			Stop
	}
}

ACTOR WimpyEtherealCrossbowBolt : EtherealCrossbowBolt
{
	Damage (Random(1,8) * 2)
}

ACTOR EtherealCrossbowBoltStrong : EtherealCrossbowBolt
{
	Damage (random(1,10)+(CountInv("Stat_Magicalstrength",AAPTR_PLAYER1)/5))
}

ACTOR WimpyEtherealCrossbowBoltStrong : EtherealCrossbowBoltStrong
{
	//Damage (Random(8,16) * 2)
	//Damage (Random(1,4) * 4)
	Damage (random(18,24) - (CountInv("PointBlancToken")* 2))
}

ACTOR EtherealCrossbowBolt2 : EtherealCrossbowBoltStrong
{
	DeathSound "BOWHIT2"
}

ACTOR WimpyEtherealCrossbowBolt2 : EtherealCrossbowBoltStrong
{
	DeathSound "BOWHIT2"
	Damage (Random(8,16) * 2)
}

ACTOR EtherealCrossbowBoltC : FastProjectile
{
	Speed 90
	Damage (random(1,10)+(CountInv("Stat_Magicalstrength",AAPTR_PLAYER1)/5))
	SeeSound ""
	Radius 2
	Height 2
	Projectile
	RenderStyle Add
	DeathSound "BOWHIT2"
	Obituary "$OB_MPCROSSBOW"
	//+SEEKERMISSILE
	+SPECTRAL
	+BLOODSPLATTER
	+CANNOTPUSH
	MissileType "CrossbowBoltTrail"
	MissileHeight 8
	Decal "CrossbowScorch"
	DamageType "Crossbow"
	
	States
	{
		Spawn:
			FX99 AB 1 Bright A_SpawnItem("EtherealFlare1")
			Loop
		Death:
			FX03 CDE 2 Bright A_SpawnItem("EtherealFlare2")
			Stop
	}
}

ACTOR WimpyEtherealCrossbowBoltC : EtherealCrossbowBoltC
{
	Damage (Random(1,8) * 2)
}

ACTOR JumboBolt : FastProjectile
{
	Speed 150
	Damage (random(25,75)+(CountInv("Stat_Magicalstrength",AAPTR_PLAYER1)))
	SeeSound ""
	Radius 6
	Height 6
	Projectile
	//RenderStyle Add
	DeathSound "BOWHIT2"
	Obituary "$OB_MPCROSSBOW"
	+WINDTHRUST
	+SPECTRAL
	+CANNOTPUSH
	//MissileType "CrossbowBoltTrail"
	MissileHeight 8
	Scale 1.5
	Decal "CrossbowScorch"
	DamageType "CrossbowBig"
	
	States
	{
		Spawn:
			FX03 B 1 Bright A_SpawnItemEX("FairyDustTrail",random(8,-8),random(5,-5),random(2,-2),0,random(1,-1),-2)
			TNT1 AAAAAA 0 Bright A_SpawnItemEX("FairyDustTrailYellow",random(8,-8),random(5,-5),random(2,-2),0,random(1,-1),-2)
			TNT1 AAAAA 0 Bright A_SpawnItemEX("FairyDustTrail",random(8,-8),random(5,-5),random(2,-2),0,random(1,-1),-2)
			Loop
		Death:
			TNT1 A 0 A_SetScale(1)
			FX03 FG 3 Bright A_SpawnItem("EtherealFlare2")
			//TNT1 A 0 A_FadeOut(0.10)
			FX03 HI 3
			//TNT1 A 0 A_FadeOut(0.10)
			FX03 J 3 Bright A_SpawnItem("EtherealFlare2")
			Stop
	}
}

ACTOR WimpyJumboBolt : JumboBolt
{
	Damage (Random(40,75) * 2)
}

ACTOR PoweredJumboBolt
{
	Damage 1
	Radius 6
	Height 6
	Projectile
	Obituary "$OB_MPCROSSBOW"
	MissileHeight 8
	Decal "CrossbowScorch"
	DamageType "CrossbowSpecial"
	renderstyle Add
	Speed 40
	Scale 1
	DeathSound ""
	+SEEKERMISSILE
	+SPECTRAL
	+FORCEPAIN
	+FORCERADIUSDMG
	+ROLLSPRITE
	+BLOODSPLATTER
	+EXTREMEDEATH
	-BLOODLESSIMPACT
	//+RIPPER //THIS WILL TURN IT INTO AN UNHOLY PIRANHA GUN APPARENTLY
	
	States
	{
		Spawn:
			FX03 KKKKKKKKKK 1 Bright 
			{
				A_SeekerMissile(5,10,SMF_LOOK|SMF_PRECISE,256,3);
				A_SpawnItemEX("FairyDustTrailYellow",random(8,-8),random(5,-5),random(2,-2),0,random(1,-1),-2);
				A_SpawnItemEX("FairyDustTrailYellow",random(8,-8),random(5,-5),random(2,-2),0,random(1,-1),-2);
				A_SpawnItemEX("FairyDustTrailYellow",random(8,-8),random(5,-5),random(2,-2),0,random(1,-1),-2);
				A_SpawnItemEX("FairyDustTrailRed",random(8,-8),random(5,-5),random(2,-2),0,random(1,-1),-2);
				A_SpawnItemEX("FairyDustTrailRed",random(8,-8),random(5,-5),random(2,-2),0,random(1,-1),-2);
				A_SpawnItemEX("FairyDustTrailRed",random(8,-8),random(5,-5),random(2,-2),0,random(1,-1),-2);
				A_SpawnItemEX("FairyDustTrailRed",random(8,-8),random(5,-5),random(2,-2),0,random(1,-1),-2);
				A_SpawnItemEX("FairyDustTrailRed",random(8,-8),random(5,-5),random(2,-2),0,random(1,-1),-2);
			}
		Tracking:
			FX03 KKKKKKKKKK 1 Bright 
			{
				A_SeekerMissile(10,20,SMF_LOOK|SMF_PRECISE,256,3);
				A_SpawnItemEX("FairyDustTrailYellow",random(8,-8),random(5,-5),random(2,-2),0,random(1,-1),-2);
				A_SpawnItemEX("FairyDustTrailYellow",random(8,-8),random(5,-5),random(2,-2),0,random(1,-1),-2);
				A_SpawnItemEX("FairyDustTrailYellow",random(8,-8),random(5,-5),random(2,-2),0,random(1,-1),-2);
				A_SpawnItemEX("FairyDustTrailRed",random(8,-8),random(5,-5),random(2,-2),0,random(1,-1),-2);
				A_SpawnItemEX("FairyDustTrailRed",random(8,-8),random(5,-5),random(2,-2),0,random(1,-1),-2);
				A_SpawnItemEX("FairyDustTrailRed",random(8,-8),random(5,-5),random(2,-2),0,random(1,-1),-2);
				A_SpawnItemEX("FairyDustTrailRed",random(8,-8),random(5,-5),random(2,-2),0,random(1,-1),-2);
				A_SpawnItemEX("FairyDustTrailRed",random(8,-8),random(5,-5),random(2,-2),0,random(1,-1),-2);
			}
		FullTrack:
			FX03 K 1 Bright 
			{
				A_SeekerMissile(360,360,SMF_LOOK|SMF_PRECISE,256,3);
				A_SpawnItemEX("FairyDustTrailRed",random(8,-8),random(5,-5),random(2,-2),0,random(1,-1),-2);
			}
			TNT1 AAA 0 A_SpawnItemEX("FairyDustTrailYellow",random(8,-8),random(5,-5),random(2,-2),0,random(1,-1),-2)
			TNT1 AAAAA 0 A_SpawnItemEX("FairyDustTrailRed",random(8,-8),random(5,-5),random(2,-2),0,random(1,-1),-2)
			Loop
		XDeath:
			TNT1 A 0 A_Warp(AAPTR_TRACER,0,frandom(0.0,1.0),frandom(0.0,5.0),90,WARPF_NOCHECKPOSITION | WARPF_COPYVELOCITY | WARPF_COPYINTERPOLATION,0,1,1)
			FX03 YZYZYZYZYZYZYZYZYZYZYZYZYZYZYZ 1
			{
				A_Warp(AAPTR_TRACER,-1,frandom(-20.0,-15.0),frandom(-10.0,5.0),0,WARPF_NOCHECKPOSITION | WARPF_COPYVELOCITY  | WARPF_COPYINTERPOLATION,0,1,0);
				A_Explode(1,20,XF_NOSPLASH,FALSE,20);
				A_PlaySound("SLFLESH",7);
				A_SpawnItemEX("FairyDustTrail",random(8,-8),random(3,-3),random(2,-2),random(3,-3),random(3,-3),random(3,-3));
				A_SpawnItemEX("FairyDustTrail",random(8,-8),random(3,-3),random(2,-2),random(3,-3),random(3,-3),random(3,-3));
				A_SpawnItemEX("FairyDustTrail",random(8,-8),random(3,-3),random(2,-2),random(3,-3),random(3,-3),random(3,-3));
				A_SpawnItemEX("FairyDustTrailYellow",random(8,-8),random(3,-3),random(2,-2),random(3,-3),random(3,-3),random(3,-3));
				A_SpawnItemEX("FairyDustTrailYellow",random(8,-8),random(3,-3),random(2,-2),random(3,-3),random(3,-3),random(3,-3));
				A_SpawnItemEX("FairyDustTrailYellow",random(8,-8),random(3,-3),random(2,-2),random(3,-3),random(3,-3),random(3,-3));
				A_SpawnItemEX("FairyDustTrailRed",random(8,-8),random(3,-3),random(2,-2),random(3,-3),random(3,-3),random(3,-3));
				A_SpawnItemEX("FairyDustTrailRed",random(8,-8),random(3,-3),random(2,-2),random(3,-3),random(3,-3),random(3,-3));
				A_SpawnItemEX("FairyDustTrailRed",random(8,-8),random(3,-3),random(2,-2),random(3,-3),random(3,-3),random(3,-3));
				A_SpawnItemEx("Blood",0,0,0,random(-5,5),random(-5,5),random(-5,5),0,SXF_NOCHECKPOSITION);
				A_SpawnItemEx("Blood",0,0,0,random(-5,5),random(-5,5),random(-5,5),0,SXF_NOCHECKPOSITION);
				A_SpawnItemEx("Blood",0,0,0,random(-5,5),random(-5,5),random(-5,5),0,SXF_NOCHECKPOSITION);
				A_SpawnItemEx("Blood",0,0,0,random(-5,5),random(-5,5),random(-5,5),0,SXF_NOCHECKPOSITION);
				A_SpawnItemEx("Blood",0,0,0,random(-5,5),random(-5,5),random(-5,5),0,SXF_NOCHECKPOSITION);
				
				If (A_JumpIfHealthLower(1,"Finisher",AAPTR_TRACER))
				{
					Return State("Finisher");
				}
				Else
				{
					Return State("");
				}
				
			}
		Finisher:
			TNT1 AAAAAAAAAAAAA 0 A_SpawnItemEx("Blood",0,0,0,random(-10,10),random(-10,10),random(-10,10),0,SXF_NOCHECKPOSITION)
		Death:
			TNT1 A 0 A_SetScale(3)
			TNT1 A 0 A_Explode((100 + (CountInv("Stat_Magicalstrength",AAPTR_PLAYER1))), 256, 0, True, 64)
			TNT1 A 0 A_QuakeEx (2,2,2,36,0,440,"world/quake",QF_SCALEDOWN,0,0,0,144)
			TNT1 AAAA 0 A_CustomMissile ("PlasmaSmoke", 3, 0, random (0, 360), 2, random (0, 360))
			TNT1 A 0 A_PlaySound("DSBAREXP", 1)
			FX03 O 3 Bright A_SpawnItem("HellStaffFlare")
			FX03 P 3 Bright A_SpawnItem("EtherealFlare2")
			FX03 Q 3 Bright A_SpawnItem("HellStaffFlare")
			FX03 R 3 Bright A_SpawnItem("EtherealFlare2")
			FX03 S 3 Bright A_SpawnItem("HellStaffFlare")
			TNT1 A 0 A_Remove(0)
			Stop
	}
}

ACTOR WimpyPoweredJumboBolt : PoweredJumboBolt
{
	//Damage (Random(20,50) * 2)
	
	States
	{
		XDeath:
			TNT1 A 0 A_Warp(AAPTR_TRACER,-1,10,10,90,WARPF_NOCHECKPOSITION | WARPF_COPYVELOCITY | WARPF_COPYINTERPOLATION,0,1,1)
			FX03 YZYZYZYZYZYZYZYZYZYZYZYZYZYZYZ 1
			{
				A_Warp(AAPTR_TRACER,-1,frandom(-20.0,-15.0),frandom(-10.0,5.0),0,WARPF_NOCHECKPOSITION | WARPF_COPYVELOCITY  | WARPF_COPYINTERPOLATION,0,1,0);
				A_Explode(1,20,XF_NOSPLASH,FALSE,20);
				A_PlaySound("SLFLESH",7);
				A_SpawnItemEX("FairyDustTrail",random(8,-8),random(3,-3),random(2,-2),random(3,-3),random(3,-3),random(3,-3));
				A_SpawnItemEX("FairyDustTrail",random(8,-8),random(3,-3),random(2,-2),random(3,-3),random(3,-3),random(3,-3));
				A_SpawnItemEX("FairyDustTrail",random(8,-8),random(3,-3),random(2,-2),random(3,-3),random(3,-3),random(3,-3));
				A_SpawnItemEX("FairyDustTrailYellow",random(8,-8),random(3,-3),random(2,-2),random(3,-3),random(3,-3),random(3,-3));
				A_SpawnItemEX("FairyDustTrailYellow",random(8,-8),random(3,-3),random(2,-2),random(3,-3),random(3,-3),random(3,-3));
				A_SpawnItemEX("FairyDustTrailYellow",random(8,-8),random(3,-3),random(2,-2),random(3,-3),random(3,-3),random(3,-3));
				A_SpawnItemEX("FairyDustTrailRed",random(8,-8),random(3,-3),random(2,-2),random(3,-3),random(3,-3),random(3,-3));
				A_SpawnItemEX("FairyDustTrailRed",random(8,-8),random(3,-3),random(2,-2),random(3,-3),random(3,-3),random(3,-3));
				A_SpawnItemEX("FairyDustTrailRed",random(8,-8),random(3,-3),random(2,-2),random(3,-3),random(3,-3),random(3,-3));
				A_SpawnItemEx("Blood",0,0,0,random(-5,5),random(-5,5),random(-5,5),0,SXF_NOCHECKPOSITION);
				A_SpawnItemEx("Blood",0,0,0,random(-5,5),random(-5,5),random(-5,5),0,SXF_NOCHECKPOSITION);
				A_SpawnItemEx("Blood",0,0,0,random(-5,5),random(-5,5),random(-5,5),0,SXF_NOCHECKPOSITION);
				A_SpawnItemEx("Blood",0,0,0,random(-5,5),random(-5,5),random(-5,5),0,SXF_NOCHECKPOSITION);
				A_SpawnItemEx("Blood",0,0,0,random(-5,5),random(-5,5),random(-5,5),0,SXF_NOCHECKPOSITION);
				
				If (A_JumpIfHealthLower(1,"Finisher",AAPTR_TRACER))
				{
					Return State("Finisher");
				}
				Else
				{
					Return State("");
				}
				
			}
		Finisher:
			TNT1 AAAAAAAAAAAAA 0 A_SpawnItemEx("Blood",0,0,0,random(-10,10),random(-10,10),random(-10,10),0,SXF_NOCHECKPOSITION)
		Death:
			TNT1 A 0 A_SetScale(3)
			TNT1 A 0 A_Explode(random(300,500), 256, 0, True, 64)
			TNT1 A 0 A_QuakeEx (2,2,2,36,0,440,"world/quake",QF_SCALEDOWN,0,0,0,144)
			TNT1 AAAA 0 A_CustomMissile ("PlasmaSmoke", 3, 0, random (0, 360), 2, random (0, 360))
			TNT1 A 0 A_PlaySound("DSBAREXP", 1)
			//BFE1 ABDCEF 4 Bright A_SpawnItem("EtherealFlare2")
			FX03 O 3 Bright A_SpawnItem("HellStaffFlare")
			FX03 P 3 Bright A_SpawnItem("EtherealFlare2")
			FX03 Q 3 Bright A_SpawnItem("HellStaffFlare")
			FX03 R 3 Bright A_SpawnItem("EtherealFlare2")
			FX03 S 3 Bright A_SpawnItem("HellStaffFlare")
			TNT1 A 0 A_Remove(0)
			Stop
	}
}

ACTOR CrossbowBoltTrail
{
	Scale 0.026
	Gravity 0.02
	Radius 0
	Height 0
	Damage 0
	Renderstyle Add
	Alpha 0.95
	+DOOMBOUNCE
	+MISSILE
	+CLIENTSIDEONLY
	+NOTELEPORT
	+NOBLOCKMAP
	+CORPSE
	+BLOODLESSIMPACT 
	+FORCEXYBILLBOARD
	+NODAMAGETHRUST
	+MOVEWITHSECTOR
	+NOBLOCKMONST
	-SOLID
	+THRUACTORS
	+DONTSPLASH
	-NOGRAVITY
	+DONTBLAST
	+CANNOTPUSH
	Speed 0
	
    States
    {
		Spawn:
			TNT1 A 0 NoDelay A_Jump(192,"Stopped")
			TNT1 A 0 A_ChangeVelocity(frandom(-0.4,0.4),frandom(-0.4,0.4),frandom(-0.4,0.4), CVF_REPLACE)
			SPKG AAAAAAAA 1 Bright A_SetScale(scalex*0.94)
		Stopped:
			TNT1 A 0
			Stop
    }
}

ACTOR PoweredCrossbowBolt : FastProjectile
{
	Speed 50
	Damage 1
	SeeSound ""
	Radius 2
	Height 2
	Projectile
	RenderStyle Add
	DeathSound "BOWHIT1"
	Obituary "$OB_MPCROSSBOW"
	MissileType "PoweredCrossbowBoltTrail"
	MissileHeight 8
	Decal "CrossbowScorch"
	DamageType "Crossbow"
	+RIPPER
	+NODAMAGETHRUST
	
	States
	{
		Spawn:
			TNT1 A 0 NoDelay A_JumpIf(GetCVAR("LightShow"),"Fancy")
		Launched:
			FXR3 A 1 Bright A_SpawnItemEX("FairyDustTrailRed",random(3,-3),random(3,-3),0,0,random(1,-1),-3)
			TNT1 A 0 A_CustomMissile("PoweredCrossbowExplosions",1,0,0,CMF_AIMDIRECTION|CMF_TRACKOWNER)
			Loop
		Fancy:
			FX03 A 1 Bright A_SpawnItem("PEtherealFlare1")
			TNT1 A 0 A_CustomMissile("PoweredCrossbowExplosions",1,0,0,CMF_AIMDIRECTION|CMF_TRACKOWNER)
			Loop
		Death:
			TNT1 AAAAAAA 0 A_CustomMissile("PoweredCrossbowExplosions",1,0,0,CMF_AIMDIRECTION|CMF_TRACKOWNER)
			PXBM CDE 2 Bright A_SpawnItem("PEtherealFlare2")
			Stop
	}
}

ACTOR PoweredCrossbowBoltTrail
{
	Scale 0.05
	Radius 0
	Height 0
	Damage 0
	Renderstyle Add
	Alpha 0.95
	+DOOMBOUNCE
	+MISSILE
	+CLIENTSIDEONLY
	+NOTELEPORT
	+NOBLOCKMAP
	+CORPSE
	+BLOODLESSIMPACT 
	+FORCEXYBILLBOARD
	+NODAMAGETHRUST
	+MOVEWITHSECTOR
	+NOBLOCKMONST
	-SOLID
	+THRUACTORS
	+DONTSPLASH
	+NOGRAVITY
	+DONTBLAST
	+CANNOTPUSH
	Speed 0
	Obituary "$OB_MPCROSSBOW"
	
    States
    {
		Spawn:
			TNT1 A 0 NoDelay A_Jump(192,"Stopped")
			TNT1 A 0 A_ChangeVelocity(frandom(-0.6,0.6),frandom(-0.6,0.6),frandom(-0.6,0.6), CVF_REPLACE)
			TELS AAAAAAAA 1 Bright A_SetScale(scalex*0.94)
			Stop
		Stopped:
			TNT1 A 0
			Stop
    }
}

ACTOR PoweredCrossbowExplosions
{
	Radius 0
	Height 0
	+NOTELEPORT
	+NODAMAGETHRUST
	+THRUACTORS
	+DONTSPLASH
	+NOGRAVITY
	+DONTBLAST
	//+FORCERADIUSDMG
	Obituary "$OB_MPCROSSBOW"
	
    States
    {
		Spawn:
			TNT1 A 0 NoDelay A_Jump(160,"Stopped")
			TNT1 A 0 A_ChangeVelocity(frandom(-0.6,0.6),frandom(-0.6,0.6),frandom(-0.6,0.6), CVF_REPLACE)
			TNT1 A 17
			TNT1 A 0 A_QuakeEx (4,4,0,24,0,300,"world/quake",QF_SCALEDOWN,0,0,0,100)
			TNT1 A 0 A_PlaySound("DSBAREXQ",1)
			TNT1 A 0 A_SpawnItemEx("RedCrossbowExplosionGlow",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION)
			//TNT1 A 0 A_SpawnItemEx("SkullRainExplosion",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION)
			TNT1 A 0 A_SpawnItemEx("CrossbowExplosionSpawner",0,random(-40,40),random(-20,20),0,0,0,0,SXF_NOCHECKPOSITION)
			TNT1 AAAAAAAAAAAAAAAAAAAAAAAA 0 A_SpawnItemEX("FairyDusttrailRed",frandom(-2,2),frandom(-2,2),frandom(-2,2),frandom(-5,5),frandom(-10,10),frandom(-5,5))
			//TNT1 AAAAAAAAAA 0 A_CustomMissile ("RedExplosionParticle2", 3, 0, random (0, 360), 2, random (0, 360))
			TNT1 A 2 Thing_Stop(0)
			TNT1 A 2 A_Explode(60,128,0)
			Stop
		Stopped:
			TNT1 A 0
			Stop
    }
}
