
//==============================================================================
//======================== VANILLA + MONSTER PROJECTILES =======================
//==============================================================================


/*ACTOR VisiBoolet : FastProjectile
{
	Radius 2
	Height 2
	Speed  200
	Damage (random(2,5))
	Decal "PlasmaScorchLower"
	Projectile
	+RANDOMIZE
	+FORCEXYBILLBOARD
	+BLOODSPLATTER
	+THRUGHOST
	//+THRUACTORS
	+RIPPER
	+NOBOSSRIP
	Renderstyle Add
	Alpha 0.90
	Scale 1
	DeathSound "GWANDHIT"
	DamageType "MonsterTracer"
	//MissileHeight 8
	
	var float user_velx;
	var float user_vely;
	var float user_velz;
	
	States
	{
		Spawn:
			FX98 A 1 Bright A_SpawnItem("GoldWandFlare",0,0)
			Loop
		Death:
			PUFF A 4 Bright
			PUFF BCD 4
			Stop
	}
}

ACTOR VisiBooletPrecise : VisiBoolet
{
}*/

ACTOR TuffImpBall : DoomImpBall
{
	Speed 15
	FastSpeed 25
	+CANNOTPUSH
}

ACTOR TuffBaronBall : BaronBall
{
	Damage (frandom(1.0,4.0) * 8)
	+CANNOTPUSH
}

ACTOR TuffBaronBallStronk : BaronBall
{
	Damage (frandom(5.0,8.0) * 8)
	+CANNOTPUSH
  
	States
	{
		Spawn:
			TNT1 A 0 NoDelay A_JumpIf(GetCVAR("ColorfulProjectiles"),"ColorSwap")
			Goto FlightLoop
		ColorSwap:
			TNT1 A 0 A_SetTranslation("Reddify")
		FlightLoop:
			BAL7 AB 4 Bright
			Loop
		Death:
			BAL7 CDE 6 Bright
			Stop
	}
}

ACTOR RevengeShot : BaronBall
{
	Damage (frandom(1.0,4.0) * 8)
	Damagetype "RevengeSkull"
	
	+FORCEPAIN
	+SEEKERMISSILE
	+CANNOTPUSH
	
	States
	{
		Spawn:
			TNT1 A 0 NoDelay A_JumpIf(GetCVAR("ColorfulProjectiles"),"ColorSwap")
			Goto FlightLoop
		ColorSwap:
			TNT1 A 0 A_SetTranslation("Bluify")
		FlightLoop:
			BAL7 AB 4 A_SeekerMissile(20,25,SMF_PRECISE)
			BAL7 AB 4 Bright A_SeekerMissile(20,25,SMF_PRECISE)
			Loop
		Death:
			//PSMM HIJKLM 3 Bright
			BAL7 CDE 6 Bright
			Stop
	}
}

ACTOR TuffCacoBall : CacoDemonBall
{
	Speed 15
	FastSpeed 25
	+CANNOTPUSH
}

ACTOR TuffRevenantHoming : RevenantTracer
{
	Damage 2
	
	+SEEKERMISSILE
	+NOGRAVITY
	+CANNOTPUSH
	
	States
	{
		Spawn:
			FATB AB 2 Bright 
			{
				A_SeekerMissile(10,20,SMF_PRECISE);
				A_FadeOut(0.2);
			}
			FATB AB 2
			{
				A_SeekerMissile(10,20,SMF_PRECISE);
				A_FadeOut(0.2);
			}
			FATB ABAB 2 
			{
				A_SeekerMissile(10,20,SMF_PRECISE);
				A_FadeIn(0.2);
			}
			Loop
		Death:
			TNT1 A 0 A_Explode(random(3,15),64,XF_HURTSOURCE,FALSE)
			FBXP A 8 Bright
			FBXP B 6 Bright
			FBXP C 4 Bright
			Stop
	}
}

ACTOR TuffRevenantTracer : RevenantTracer
{
	Damage 2
	Speed 20
	
	+NOGRAVITY
	+CANNOTPUSH
	
	States
	{
		Spawn:
			FATB AB 2 Bright
			Loop
		Death:
			TNT1 A 0 A_Explode(random(3,15),64,XF_HURTSOURCE,FALSE,64)
			FBXP A 8 Bright
			FBXP B 6 Bright
			FBXP C 4 Bright
			Stop
	}
}

ACTOR TuffPlasma : ArachnotronPlasma
{
	Speed 50
	Damage 1
	+CANNOTPUSH
	
	States
	{
		Spawn:
			TNT1 A 0 NoDelay A_Jump(128,"Reverse")
		Clockwise:
			APLS AAAAABBBBB 1 Bright A_Weave(10, 10, 1.0, 1.0)
			Loop
		Reverse:
			APLS AAAAABBBBB 1 Bright A_Weave(-10, -10, 1.0, 1.0)
			Loop
		Death:
			APBX ABCDE 5 Bright
			Stop
	}
}

ACTOR TuffFatShot : Fatshot
{
	Speed 20
	+CANNOTPUSH

	States
	{
		Spawn:
			MANF ABABABABAB 4 Bright A_ScaleVelocity(0.8)
			MANF A 1 A_FaceMovementDirection			
			TNT1 A 0 A_SpawnProjectile("TuffFatShotSmol",0,0,-45,CMF_ABSOLUTEPITCH | CMF_TRACKOWNER | CMF_AIMDIRECTION, pitch)
			TNT1 A 0 A_SpawnProjectile("TuffFatShotSmol",0,0,-35,CMF_ABSOLUTEPITCH | CMF_TRACKOWNER | CMF_AIMDIRECTION, pitch)
			TNT1 A 0 A_SpawnProjectile("TuffFatShotSmol",0,0,-25,CMF_ABSOLUTEPITCH | CMF_TRACKOWNER | CMF_AIMDIRECTION, pitch)
			TNT1 A 0 A_SpawnProjectile("TuffFatShotSmol",0,0,-15,CMF_ABSOLUTEPITCH | CMF_TRACKOWNER | CMF_AIMDIRECTION, pitch)
			TNT1 A 0 A_SpawnProjectile("TuffFatShotSmol",0,0,-5,CMF_ABSOLUTEPITCH | CMF_TRACKOWNER | CMF_AIMDIRECTION, pitch)
			TNT1 A 0 A_SpawnProjectile("TuffFatShotSmol",0,0,0,CMF_ABSOLUTEPITCH | CMF_TRACKOWNER | CMF_AIMDIRECTION, pitch)
			TNT1 A 0 A_SpawnProjectile("TuffFatShotSmol",0,0,5,CMF_ABSOLUTEPITCH | CMF_TRACKOWNER | CMF_AIMDIRECTION, pitch)
			TNT1 A 0 A_SpawnProjectile("TuffFatShotSmol",0,0,15,CMF_ABSOLUTEPITCH | CMF_TRACKOWNER | CMF_AIMDIRECTION, pitch)
			TNT1 A 0 A_SpawnProjectile("TuffFatShotSmol",0,0,25,CMF_ABSOLUTEPITCH | CMF_TRACKOWNER | CMF_AIMDIRECTION, pitch)
			TNT1 A 0 A_SpawnProjectile("TuffFatShotSmol",0,0,35,CMF_ABSOLUTEPITCH | CMF_TRACKOWNER | CMF_AIMDIRECTION, pitch)
			TNT1 A 0 A_SpawnProjectile("TuffFatShotSmol",0,0,45,CMF_ABSOLUTEPITCH | CMF_TRACKOWNER | CMF_AIMDIRECTION, pitch)
		Death:
			MISL B 8 Bright
			MISL C 6 Bright
			MISL D 4 Bright
			Stop
	}
}

ACTOR TuffFatShotSmol : Fatshot
{
	Speed 30
	Damage 3
	Scale 0.5
	+CANNOTPUSH

	States
	{
		Spawn:
			MANF AB 4 Bright
			Loop
		Death:
			MISL B 8 Bright
			MISL C 6 Bright
			MISL D 4 Bright
			Stop
	}
}

ACTOR BouncyBomb : Rocket
{
	Scale 0.5
	Gravity 0.7
	BounceType "Hexen"
	BounceFactor 0.6
	WallBounceFactor 0.75
	
	-NOGRAVITY
	+CANBOUNCEWATER
	+BOUNCEAUTOOFFFLOORONLY
	+ROLLSPRITE
	+USEBOUNCESTATE

	States
	{
		Spawn:
		MISL A 1 Bright 
			{
				A_FaceMovementDirection;
				A_SetRoll(Roll+15);
			}
			Loop
		Bounce:
			MISL A 1 ThrustThing(angle * 256 / 360 + random(0,192),(Velx-Vely),1,0)
			Goto Spawn
		Death:
			MISL B 8 Bright A_Explode
			MISL C 6 Bright
			MISL D 4 Bright
			Stop
	}
}

ACTOR VileFlameRunner //: MinotaurFX1
{
	Radius 5
	Height 12
	Speed 20
	FastSpeed 30
	Damage 0
	Scale 0.3
	Alpha 1
	Monster
	ExplosionDamage 24
	ReactionTime 175
	MeleeRange 10
	MaxStepHeight 128
	MaxDropoffHeight 128
	Translation "48:63=176:191", "128:143=32:47", "13:15=189:191", "144:151=184:191", "64:79=185:191", "0:3=188:191", "208:223=176:191", "5:8=188:191"
	//FIX THIS DeathSound "weapons/rocklx"
	
	//+FLOORHUGGER
	//+SEEKERMISSILE
	+THRUACTORS

	States
	{
		Spawn:
			TNT1 A 0 A_JumpIFInventory("VileTimerToken",5,"DeathFail")
			VILE AABBCCDDEEFF 2 Bright 
			{
				A_Chase("Latch","");
				A_SpawnItemEx("VileFlameTrail");
			}
			TNT1 A 0 A_GiveInventory("VileTimerToken",1)
			/*VILE AABBCCDDEEFF 2 Bright 
			{
				A_SeekerMissile(4,5,SMF_LOOK, SMF_PRECISE);
				A_SpawnItemEx("VileFlameTrail");
				//A_Weave(1,0,1.0,0.0);
				A_Countdown;
				
				If (A_CheckProximity("Death","PlayerPawn",10,1,CPXF_ANCESTOR))
				{
					Return State("Latch");
				}		
				Else If (A_JumpIfTargetInLOS(1,90,JLOSF_PROJECTILE))
				{
					Return State("");
				}
				Else
				{
					Return State("BreakTime");
				}
			}
			Loop
		BreakTime:
			TNT1 A 0 A_Stop
			VILE "[[[\\\]]]" 1 
			{
				If (A_JumpIfTargetInLOS("Spawn",90,JLOSF_PROJECTILE))
				{
					Return State("Spawn");
				}
				Else
				{
					A_SetAngle(15+Angle);
					A_Countdown;
					Return State("");
					
				}
			}*/
			Loop
		DeathFail:
			VILE GHIJKLMNGHIJKLMN 2 Bright A_SetAngle(15+Angle)
			Goto Death
		Latch:
			TNT1 A 0 A_SetScale(0.1,0.1)
			VILE GHIJKLMNGHIJKLMNGHIJKLMNGHIJKLMN 1 Bright A_Warp(AAPTR_TARGET,10,random(-5,5),random(37,39),0,WARPF_INTERPOLATE | WARPF_NOCHECKPOSITION)
		Death:
			TNT1 A 0 A_PlaySound("weapons/rocklx",0)
			VILE O 1 Bright A_Explode
			TNT1 A 0 A_QuakeEx(2,2,2,10,0,128)
			TNT1 AAAAA 0 A_SpawnItemEx("VileFlameTrail",random(-5,5),random(-5,5))
			VILE RSTUVWXYZ 1 A_FadeOut(0.1)
			TNT1 A 0 A_Remove(0)
			Stop
		}
}

ACTOR VileFlameTrail
{
	+NOINTERACTION
	+RANDOMIZE
	Scale 0.4
	Renderstyle Add
	Alpha 0.1
	
	States
	{
		Spawn:
			TNT1 A 2
			FIRE ABCDE 2 Bright
		Death:
			FIRE FGH 2 Bright
			Stop
	}
}
