//Invisible
actor InvisPuff
{
  +NOBLOCKMAP
  +NOGRAVITY
  //+PUFFONACTORS
  //+BLOODLESSIMPACT
  states
  {
  Spawn:
    TNT1 A 1
    stop
  }
} 

//Bullets
Actor BuellerPuff : BulletPuff replaces BulletPuff
{
    VSpeed 0
	Renderstyle None
	-RANDOMIZE
	+NOEXTREMEDEATH
	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 BuellerPuff_Flash
{
	+NoInteraction
	+ForceXYBillboard
	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
{
	+NoInteraction
	+ForceXYBillboard
	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
{
	+NoInteraction
	+ForceXYBillboard
	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
{
	+NoInteraction
	+ForceXYBillboard
	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
{
	+NoInteraction
	+ForceXYBillboard
	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
	}
}

//Fist
actor PunchCracker
{
  activesound ""
  attacksound "Punch/Solid"
  seesound "Punch/Meatbag"
  +NOBLOCKMAP
  +NOGRAVITY
  +PUFFONACTORS
  states
  {
  Spawn:
    TNT1 A 1
    stop
  }
} 

actor FlamePunchCracker : PunchCracker
{
  attacksound ""
  seesound ""
  +PUFFGETSOWNER
  Decal "Scorch"
  states
  {
  Spawn:
	TNT1 A 0 NoDelay A_SpawnItemEx("FirePunch_Main",0,0,0,0,0,0,0,SXF_CLIENTSIDE)
	TNT1 A 0 A_Explode(60,96,0)
	TNT1 A 0 A_AlertMonsters(256)
	TNT1 A 0 A_Quake(3,15,0,128,"none")
	TNT1 A 15
	stop
  }
} 

//Machete
actor MacheteSharedPuff
{
  +NOBLOCKMAP
  +NOGRAVITY
  +PUFFONACTORS
}
actor MacheteInvisPuff : MacheteSharedPuff
{
  Decal "None"
  activesound ""
  attacksound "Machete/Solid"
  seesound "Machete/Yum"
  states
  {
  Spawn:
    TNT1 A 1
    stop
  }
} 

actor MacheteImpactRight : MacheteSharedPuff
{
  Decal "SlashRight"
  /*activesound ""
  attacksound "Machete/Solid"
  seesound "Machete/Yum"*/
  states
  {
  Spawn:
	TNT1 AA 0 A_SpawnItemEx("MachetePuff_SparkRight", 0, 0, 0, 0, 0, 0, 0, SXF_CLIENTSIDE, 0)
	TNT1 A 0 A_SpawnItemEx("MachetePuff_Flash", 0, 0, 0, 0, 0, 0, 0, SXF_CLIENTSIDE, 0)
	TNT1 A 1
	stop
  XDeath:
	TNT1 A 1
	stop
  }
} 

actor MacheteImpactLeft : MacheteSharedPuff
{
  Decal "SlashLeft"
  states
  {
  Spawn:
  	TNT1 AA 0 A_SpawnItemEx("MachetePuff_SparkLeft", 0, 0, 0, 0, 0, 0, 0, SXF_CLIENTSIDE, 0)
	TNT1 A 0 A_SpawnItemEx("MachetePuff_Flash", 0, 0, 0, 0, 0, 0, 0, SXF_CLIENTSIDE, 0)
	TNT1 A 1
	Stop
  XDeath:
	TNT1 A 1
	stop
  }
}

Actor MachetePuff_SparkRight
{
	+NoInteraction
	+ForceXYBillboard
	RenderStyle Normal
	Alpha 0.99
	States
	{
		Spawn:
			TNT1 A 0 NoDelay A_SetScale(0.1, 0.2)
		Idle:
			3SPK A 1 Bright
			"####" "#" 0 A_FadeOut(0.2)
			//"####" "#" 0 A_SetScale(ScaleX + FRandom(0.01, 0.005))
			"####" "#" 0 A_JumpIf(ScaleX <= 0.0, "NULL")
			Loop
	}
}

Actor MachetePuff_SparkLeft : MachetePuff_SparkRight
{
	States
	{
		Spawn:
			TNT1 A 0 NoDelay A_SetScale(0.1, 0.2)
		Idle:
			3SPK B 1 Bright
			"####" "#" 0 A_FadeOut(0.2)
			//"####" "#" 0 A_SetScale(ScaleX + FRandom(0.005, 0.01))
			"####" "#" 0 A_JumpIf(ScaleX <= 0.0, "NULL")
			Loop
	}
}

Actor MachetePuff_Flash
{
	+NoInteraction
	+ForceXYBillboard
	RenderStyle Normal
	Alpha 0.9
	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.2)
			//"####" "#" 0 A_SetScale(ScaleX + FRandom(0.005, 0.01))
			"####" "#" 0 A_JumpIf(ScaleX <= 0.0, "NULL")
			Loop
	}
}

//Berserk Machete
actor MacheteBerserkImpactRight : MacheteSharedPuff
{
  Decal "SlashRight"
  /*activesound ""
  attacksound "Machete/Solid"
  seesound "Machete/Yum"*/
  states
  {
  Spawn:
	TNT1 AA 0 A_SpawnItemEx("MachetePuff_BerserkSparkRight", 0, 0, 0, 0, 0, 0, 0, SXF_CLIENTSIDE, 0)
	TNT1 A 0 A_SpawnItemEx("MachetePuff_BerserkFlash", 0, 0, 0, 0, 0, 0, 0, SXF_CLIENTSIDE, 0)
	TNT1 A 1
	stop
  XDeath:
	TNT1 A 1
	stop
  }
} 

actor MacheteBerserkImpactLeft : MacheteBerserkImpactRight
{
  Decal "SlashLeft"
  states
  {
  Spawn:
  	TNT1 AA 0 A_SpawnItemEx("MachetePuff_BerserkSparkLeft", 0, 0, 0, 0, 0, 0, 0, SXF_CLIENTSIDE, 0)
	TNT1 A 0 A_SpawnItemEx("MachetePuff_BerserkFlash", 0, 0, 0, 0, 0, 0, 0, SXF_CLIENTSIDE, 0)
	TNT1 A 1
	Stop
  XDeath:
	TNT1 A 1
	stop
  }
}

Actor MachetePuff_BerserkSparkRight
{
	+NoInteraction
	+ForceXYBillboard
	RenderStyle Normal
	Alpha 0.99
	States
	{
		Spawn:
			TNT1 A 0 NoDelay A_SetScale(0.1, 0.2)
		Idle:
			4SPK A 1 Bright
			"####" "#" 0 A_FadeOut(0.2)
			//"####" "#" 0 A_SetScale(ScaleX + FRandom(0.01, 0.005))
			"####" "#" 0 A_JumpIf(ScaleX <= 0.0, "NULL")
			Loop
	}
}

Actor MachetePuff_BerserkSparkLeft : MachetePuff_BerserkSparkRight
{
	States
	{
		Spawn:
			TNT1 A 0 NoDelay A_SetScale(0.1, 0.2)
		Idle:
			4SPK B 1 Bright
			"####" "#" 0 A_FadeOut(0.2)
			//"####" "#" 0 A_SetScale(ScaleX + FRandom(0.005, 0.01))
			"####" "#" 0 A_JumpIf(ScaleX <= 0.0, "NULL")
			Loop
	}
}

Actor MachetePuff_BerserkFlash
{
	+NoInteraction
	+ForceXYBillboard
	RenderStyle Normal
	Alpha 0.9
	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:
			3PUF A 0 A_Jump(255,"Idle")
			Loop
		SpriteB:
			3PUF B 0 A_Jump(255,"Idle")
			Loop
		SpriteC:
			3PUF C 0 A_Jump(255,"Idle")
			Loop
		SpriteD:
			3PUF D 0 A_Jump(255,"Idle")
			Loop
		Idle:
			"####" "#" 1 Bright
			"####" "#" 0 A_FadeOut(0.2)
			//"####" "#" 0 A_SetScale(ScaleX + FRandom(0.005, 0.01))
			"####" "#" 0 A_JumpIf(ScaleX <= 0.0, "NULL")
			Loop
	}
}


//Nutcracker
Actor NutcrackerPuff : BulletPuff
{
    VSpeed 0
	Renderstyle None
	-RANDOMIZE
	States
	{
	Spawn:
				TNT1 AAA 0 A_SpawnItemEx("NutcrackerPuff_Main", 0, 0, 0, 0, 0, 0, 0, SXF_CLIENTSIDE, 0)
				TNT1 AA 0 A_SpawnItemEx("NutcrackerPuff_Flash", 0, 0, 0, 0, 0, 0, 0, SXF_CLIENTSIDE, 0)
				TNT1 A 0 A_SpawnItemEx("NutcrackerPuff_Spark1", 0, 0, 0, 0, 0, 0, 0, SXF_CLIENTSIDE, 0)
				TNT1 A 0 A_SpawnItemEx("NutcrackerPuff_Spark2", 0, 0, 0, 0, 0, 0, 0, SXF_CLIENTSIDE, 0)
				TNT1 A 5
				TNT1 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 1 A_SpawnItemEx("NutcrackerPuff_Smoke", 0, 0, 0, frandom(0.15,0.25), 0, frandom(-0.1,0.45), 0, SXF_CLIENTSIDE, 0)
				Stop
	}
}

Actor NutcrackerPuff_Flash
{
	+NoInteraction
	+ForceXYBillboard
	RenderStyle Normal
	Alpha 0.3
	States
	{
		Spawn:
			TNT1 AA 0 A_SetScale(FRandom(0.3, 0.385))
			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.08, 0.065))
			"####" "#" 0 A_JumpIf(ScaleX <= 0.0, "NULL")
			Loop
	}
}

Actor NutcrackerPuff_Main
{
	+NoInteraction
	+ForceXYBillboard
	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.2, 0.175))
			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.02))
			Loop
	}
}

Actor NutcrackerPuff_Spark1
{
	+NoInteraction
	+ForceXYBillboard
	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.2, 0.175))
			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 NutcrackerPuff_Spark2
{
	+NoInteraction
	+ForceXYBillboard
	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.2))
			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.01))
			Loop
	}
}

Actor NutcrackerPuff_Smoke
{
	+NoInteraction
	+ForceXYBillboard
	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.05, 0.045))
			Goto RealFadeIn
		RealFadeIn:
			"####" "#" 1 A_FadeIn(FRandom(0.09, 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.025, 0.01))
			Loop
	}
}