//Bullets
Actor HBulletPuff : BulletPuff
{
    VSpeed 0
	Renderstyle None
	-RANDOMIZE
	+THRUGHOST
	+NOTONAUTOMAP
	+MTHRUSPECIES
	+PUFFGETSOWNER
	Decal "BulletChip"
	States
	{
	Spawn:
		TNT1 AAA 0 A_SpawnItemEx("BuellerPuff_Main", 0, 0, 0, 0, 0, 0, 0, SXF_CLIENTSIDE, 0)
		TNT1 AA 0 A_SpawnItemEx("BuellerPuff_Flash", 0, 0, 0, 0, 0, 0, 0, SXF_CLIENTSIDE, 0)
		TNT1 A 0 A_SpawnItemEx("BuellerPuff_Spark1", 0, 0, 0, 0, 0, 0, 0, SXF_CLIENTSIDE, 0)
		TNT1 A 0 A_SpawnItemEx("BuellerPuff_Spark2", 0, 0, 0, 0, 0, 0, 0, SXF_CLIENTSIDE, 0)
		TNT1 A 1
		TNT1 AAA 1 A_SpawnItemEx("BuellerPuff_Smoke", 0, 0, 0, frandom(0.15,0.25), 0, frandom(-0.1,0.45), 0, SXF_CLIENTSIDE, 0)
		Stop
	}
}

Actor BulletPuff2 : HBulletPuff replaces BulletPuff
{
    DamageType "Bueller" //Monster bullets
    -MTHRUSPECIES
}
Actor BuellerPuff_Shared
{
	+NoInteraction
	+ForceXYBillboard
	+NotOnAutomap
}

Actor BuellerPuff_Flash : BuellerPuff_Shared
{
	RenderStyle Normal
	Alpha 0.3
	States
	{
		Spawn:
			TNT1 AA 0 A_SetScale(FRandom(0.075, 0.085))
			TNT1 A 0 A_Jump(255,"SpriteA","SpriteB","SpriteC","SpriteD")
			Goto Spawn
		SpriteA:
			2PUF A 0 A_Jump(255,"Idle")
			Loop
		SpriteB:
			2PUF B 0 A_Jump(255,"Idle")
			Loop
		SpriteC:
			2PUF C 0 A_Jump(255,"Idle")
			Loop
		SpriteD:
			2PUF D 0 A_Jump(255,"Idle")
			Loop
		Idle:
			"####" "#" 1 Bright
			"####" "#" 0 A_FadeOut(0.125)
			//"####" "#" 0 A_SetScale(ScaleX + FRandom(0.04, 0.065))
			"####" "#" 0 A_JumpIf(ScaleX <= 0.0, "NULL")
			Loop
	}
}

Actor BuellerPuff_Main : BuellerPuff_Shared
{
	RenderStyle Add
	Alpha 0.99
	States
	{
		Spawn:
			TNT1 AA 0 A_Jump(255,"SpriteA","SpriteB","SpriteC","SpriteD")
			Goto Spawn
		SpriteA:
			1PUF A 0 A_Jump(255,"FadeIn")
			Loop
		SpriteB:
			1PUF B 0 A_Jump(255,"FadeIn")
			Loop
		SpriteC:
			1PUF C 0 A_Jump(255,"FadeIn")
			Loop
		SpriteD:
			1PUF D 0 A_Jump(255,"FadeIn")
			Loop
		FadeIn:
			"####" "#" 0 Bright A_SetScale(FRandom(0.05, 0.035))
			Goto Idle
		Idle:
			"####" "#" 1 Bright A_Jump(192,"FadeOut")
			Loop
		FadeOut:
			"####" "#" 1 Bright A_FadeOut(0.2)
			"####" "#" 0 A_SetScale(ScaleX + FRandom(0.01, 0.005))
			Loop
	}
}

Actor BuellerPuff_Spark1 : BuellerPuff_Shared
{
	RenderStyle Add
	Alpha 0.99
	States
	{
		Spawn:
			TNT1 AA 0 A_Jump(255,"SpriteA","SpriteB","SpriteC","SpriteD")
			Goto Spawn
		SpriteA:
			1SPK A 0 A_Jump(255,"FadeIn")
			Loop
		SpriteB:
			1SPK B 0 A_Jump(255,"FadeIn")
			Loop
		SpriteC:
			1SPK C 0 A_Jump(255,"FadeIn")
			Loop
		SpriteD:
			1SPK D 0 A_Jump(255,"FadeIn")
			Loop
		SpriteE:
			1SPK E 0 A_Jump(255,"FadeIn")
			Loop
		SpriteF:
			1SPK F 0 A_Jump(255,"FadeIn")
			Loop
		SpriteG:
			1SPK G 0 A_Jump(255,"FadeIn")
			Loop
		SpriteH:
			1SPK H 0 A_Jump(255,"FadeIn")
			Loop
		FadeIn:
			"####" "#" 0 Bright A_SetScale(FRandom(0.05, 0.045))
			Goto Idle
		Idle:
			"####" "#" 1 Bright A_Jump(192,"FadeOut")
			Loop
		FadeOut:
			"####" "#" 1 Bright A_FadeOut(0.2)
			"####" "#" 0 A_SetScale(ScaleX + FRandom(0.0075, 0.005))
			Loop
	}
}

Actor BuellerPuff_Spark2 : BuellerPuff_Shared
{
	RenderStyle Add
	Alpha 0.99
	States
	{
		Spawn:
			TNT1 AA 0 A_Jump(255,"SpriteA","SpriteB","SpriteC","SpriteD")
			Goto Spawn
		SpriteA:
			2SPK A 0 A_Jump(255,"FadeIn")
			Loop
		SpriteB:
			2SPK B 0 A_Jump(255,"FadeIn")
			Loop
		SpriteC:
			2SPK C 0 A_Jump(255,"FadeIn")
			Loop
		SpriteD:
			2SPK D 0 A_Jump(255,"FadeIn")
			Loop
		SpriteE:
			2SPK E 0 A_Jump(255,"FadeIn")
			Loop
		SpriteF:
			2SPK F 0 A_Jump(255,"FadeIn")
			Loop
		SpriteG:
			2SPK G 0 A_Jump(255,"FadeIn")
			Loop
		SpriteH:
			2SPK H 0 A_Jump(255,"FadeIn")
			Loop
		FadeIn:
			"####" "#" 0 Bright A_SetScale(FRandom(0.05, 0.045))
			Goto Idle
		Idle:
			"####" "#" 1 Bright A_Jump(192,"FadeOut")
			Loop
		FadeOut:
			"####" "#" 1 Bright A_FadeOut(0.2)
			"####" "#" 0 A_SetScale(ScaleX + FRandom(0.0075, 0.005))
			Loop
	}
}

Actor BuellerPuff_Smoke : BuellerPuff_Shared
{
	Alpha 0.0
	RenderStyle Translucent
	States
	{
		Spawn:
		    TNT1 A 3
			TNT1 AA 0 A_Jump(255, "SpriteA", "SpriteB", "SpriteC", "SpriteD")
		SpriteA:
			DYMI A 0 A_Jump(255, "FadeIn")
			Goto SpriteA
		SpriteB:
			DYMI B 0 A_Jump(255, "FadeIn")
			Goto SpriteB
		SpriteC:
			DYMI C 0 A_Jump(255, "FadeIn")
			Goto SpriteC
		SpriteD:
			DYMI D 0 A_Jump(255, "FadeIn")
			Goto SpriteD
		FadeIn:
			"####" "#" 0 A_SetScale(FRandom(0.01, 0.015))
			Goto RealFadeIn
		RealFadeIn:
			"####" "#" 1 A_FadeIn(FRandom(0.06, 0.08))
			"####" "#" 0 A_JumpIf(Alpha >= 0.25, "Idle")
			Loop
		Idle:
			"####" "#" 5 A_Jump(200, "FadeOut")
			Loop
		FadeOut:
			"####" "#" 1 A_FadeOut(FRandom(0.01,0.02))
			"####" "#" 0 A_SetScale(ScaleX + FRandom(0.015, 0.005))
			Loop
	}
}

//Longhorn
Actor InvisPuff : HBulletPuff
{
	ProjectileKickback 800
	//+EXTREMEDEATH
	Decal None
	States
	{
	Spawn:
		TNT1 A 0
		Stop
	}
}

Actor HuegPuff : HBulletPuff
{
	//+EXTREMEDEATH
	//Projectile
	ProjectileKickback 800
	Decal LonghornChip
	States
	{
	Spawn:
		TNT1 AAA 0 A_SpawnItemEx("HuegPuff_Main", 0, 0, 0, 0, 0, 0, 0, SXF_CLIENTSIDE, 0)
		TNT1 AA 0 A_SpawnItemEx("HuegPuff_Flash", 0, 0, 0, 0, 0, 0, 0, SXF_CLIENTSIDE, 0)
		TNT1 A 0 A_SpawnItemEx("HuegPuff_Spark1", 0, 0, 0, 0, 0, 0, 0, SXF_CLIENTSIDE, 0)
		TNT1 A 0 A_SpawnItemEx("HuegPuff_Spark2", 0, 0, 0, 0, 0, 0, 0, SXF_CLIENTSIDE, 0)
		TNT1 A 0 A_SpawnItemEx("HuegPuff_Shock", 0, 0, 0, 0, 0, 0, 0, SXF_CLIENTSIDE, 0)
		TNT1 A 1
		TNT1 AAAAAA 0 A_SpawnItemEx("HuegPuff_Smoke", 0, 0, 0, frandom(0.15,0.25), 0, frandom(-0.1,0.45), 0, SXF_CLIENTSIDE, 0)
		TNT1 AAAAAA 1 A_SpawnItemEx("HuegPuff_Smoke", 0, 0, 0, frandom(0.15,0.25), 0, frandom(-0.1,0.45), 0, SXF_CLIENTSIDE, 0)
		Stop
	}
}

Actor HuegPuff_Shock : BuellerPuff_Shared
{
	RenderStyle Add
	Scale 0.035
	States
	{
		Spawn:
			SHCK C 0
			SHCK C 0 A_SetScale(ScaleX + FRandom(0.045, 0.035))
			SHCK C 1 Bright A_FadeOut(0.15)
			Loop
	}
}

Actor HuegPuff_Flash : BuellerPuff_Shared
{
	RenderStyle Normal
	Alpha 0.3
	States
	{
		Spawn:
			TNT1 AA 0 A_SetScale(FRandom(0.175, 0.2))
			TNT1 A 0 A_Jump(255,"SpriteA","SpriteB","SpriteC","SpriteD")
			Goto Spawn
		SpriteA:
			2PUF A 0 A_Jump(255,"Idle")
			Loop
		SpriteB:
			2PUF B 0 A_Jump(255,"Idle")
			Loop
		SpriteC:
			2PUF C 0 A_Jump(255,"Idle")
			Loop
		SpriteD:
			2PUF D 0 A_Jump(255,"Idle")
			Loop
		Idle:
			"####" "#" 1 Bright
			"####" "#" 0 A_FadeOut(0.125)
			//"####" "#" 0 A_SetScale(ScaleX + FRandom(0.04, 0.065))
			"####" "#" 0 A_JumpIf(ScaleX <= 0.0, "NULL")
			Loop
	}
}

Actor HuegPuff_Main : BuellerPuff_Shared
{
	RenderStyle Add
	Alpha 0.99
	States
	{
		Spawn:
			TNT1 AA 0 A_Jump(255,"SpriteA","SpriteB","SpriteC","SpriteD")
			Goto Spawn
		SpriteA:
			1PUF A 0 A_Jump(255,"FadeIn")
			Loop
		SpriteB:
			1PUF B 0 A_Jump(255,"FadeIn")
			Loop
		SpriteC:
			1PUF C 0 A_Jump(255,"FadeIn")
			Loop
		SpriteD:
			1PUF D 0 A_Jump(255,"FadeIn")
			Loop
		FadeIn:
			"####" "#" 0 Bright A_SetScale(FRandom(0.15, 0.125))
			Goto Idle
		Idle:
			"####" "#" 1 Bright A_Jump(192,"FadeOut")
			Loop
		FadeOut:
			"####" "#" 1 Bright A_FadeOut(0.2)
			"####" "#" 0 A_SetScale(ScaleX + FRandom(0.01, 0.005))
			Loop
	}
}

Actor HuegPuff_Spark1 : BuellerPuff_Shared
{
	RenderStyle Add
	Alpha 0.99
	States
	{
		Spawn:
			TNT1 AA 0 A_Jump(255,"SpriteA","SpriteB","SpriteC","SpriteD")
			Goto Spawn
		SpriteA:
			1SPK A 0 A_Jump(255,"FadeIn")
			Loop
		SpriteB:
			1SPK B 0 A_Jump(255,"FadeIn")
			Loop
		SpriteC:
			1SPK C 0 A_Jump(255,"FadeIn")
			Loop
		SpriteD:
			1SPK D 0 A_Jump(255,"FadeIn")
			Loop
		SpriteE:
			1SPK E 0 A_Jump(255,"FadeIn")
			Loop
		SpriteF:
			1SPK F 0 A_Jump(255,"FadeIn")
			Loop
		SpriteG:
			1SPK G 0 A_Jump(255,"FadeIn")
			Loop
		SpriteH:
			1SPK H 0 A_Jump(255,"FadeIn")
			Loop
		FadeIn:
			"####" "#" 0 Bright A_SetScale(FRandom(0.15, 0.125))
			Goto Idle
		Idle:
			"####" "#" 1 Bright A_Jump(192,"FadeOut")
			Loop
		FadeOut:
			"####" "#" 1 Bright A_FadeOut(0.2)
			"####" "#" 0 A_SetScale(ScaleX + FRandom(0.01, 0.0125))
			Loop
	}
}

Actor HuegPuff_Spark2 : BuellerPuff_Shared
{
	RenderStyle Add
	Alpha 0.99
	States
	{
		Spawn:
			TNT1 AA 0 A_Jump(255,"SpriteA","SpriteB","SpriteC","SpriteD")
			Goto Spawn
		SpriteA:
			2SPK A 0 A_Jump(255,"FadeIn")
			Loop
		SpriteB:
			2SPK B 0 A_Jump(255,"FadeIn")
			Loop
		SpriteC:
			2SPK C 0 A_Jump(255,"FadeIn")
			Loop
		SpriteD:
			2SPK D 0 A_Jump(255,"FadeIn")
			Loop
		SpriteE:
			2SPK E 0 A_Jump(255,"FadeIn")
			Loop
		SpriteF:
			2SPK F 0 A_Jump(255,"FadeIn")
			Loop
		SpriteG:
			2SPK G 0 A_Jump(255,"FadeIn")
			Loop
		SpriteH:
			2SPK H 0 A_Jump(255,"FadeIn")
			Loop
		FadeIn:
			"####" "#" 0 Bright A_SetScale(FRandom(0.15, 0.125))
			Goto Idle
		Idle:
			"####" "#" 1 Bright A_Jump(192,"FadeOut")
			Loop
		FadeOut:
			"####" "#" 1 Bright A_FadeOut(0.2)
			"####" "#" 0 A_SetScale(ScaleX + FRandom(0.01, 0.0125))
			Loop
	}
}

Actor HuegPuff_Smoke : BuellerPuff_Shared
{
	Alpha 0.0
	RenderStyle Translucent
	States
	{
		Spawn:
		    TNT1 A 3
			TNT1 AA 0 A_Jump(255, "SpriteA", "SpriteB", "SpriteC", "SpriteD")
		SpriteA:
			DYMI A 0 A_Jump(255, "FadeIn")
			Goto SpriteA
		SpriteB:
			DYMI B 0 A_Jump(255, "FadeIn")
			Goto SpriteB
		SpriteC:
			DYMI C 0 A_Jump(255, "FadeIn")
			Goto SpriteC
		SpriteD:
			DYMI D 0 A_Jump(255, "FadeIn")
			Goto SpriteD
		FadeIn:
			"####" "#" 0 A_SetScale(FRandom(0.025, 0.03))
			Goto RealFadeIn
		RealFadeIn:
			"####" "#" 1 A_FadeIn(FRandom(0.06, 0.08))
			"####" "#" 0 A_JumpIf(Alpha >= 0.25, "Idle")
			Loop
		Idle:
			"####" "#" 5 A_Jump(200, "FadeOut")
			Loop
		FadeOut:
			"####" "#" 1 A_FadeOut(FRandom(0.01,0.02))
			"####" "#" 0 A_SetScale(ScaleX + FRandom(0.03, 0.0025))
			Loop
	}
}

//[DoomKrakken]: DreadPuff...
ACTOR DreadPuff : HBulletPuff
{
	+BLOODLESSIMPACT
	DamageType "Tiberium"
	States
	{
	Spawn:
	TNT1 A 0 A_SpawnItemEx("MiniDreadfulLightning",0,0,0,0,0,0,0,SXF_CLIENTSIDE,0)
	Stop
	}
}