ACTOR MuzzleSmokeFX
{
	+NOBLOCKMAP
	+CLIENTSIDEONLY
	Speed 40
	States
	{
	Spawn:
	TNT1 A 1
	TNT1 A 0 A_Stop
	TNT1 AA 0 A_SpawnItemEx("QExplosionSmoke",0,random(-2,2),random(-2,2),0,random(-3,3),random(-3,3))
	Stop
	}
}

ACTOR MuzzleSmokeFXFaint : MuzzleSmokeFX
{
	States
	{
	Spawn:
	TNT1 A 1
	TNT1 A 0 A_Stop
	TNT1 AA 0 A_SpawnItemEx("QExplosionSmokeFaint",0,random(-2,2),random(-2,2),0,random(-3,3),random(-3,3))
	Stop
	}
}

ACTOR QExplosionSmoke
{
	+NOGRAVITY
	+NOBLOCKMAP
	-SOLID
	+NOCLIP
	+CLIENTSIDEONLY
	RenderStyle Add
	Scale 0.35
	States
	{
	Spawn:
	SMKP KGD 1
	SMKP A 0 A_ScaleVelocity(0.8)
	SMKP ABC 2 A_FadeOut(0.15)
	SMKP A 0 A_ScaleVelocity(0.8)
	SMKP DEF 2 A_FadeOut(0.15)
	SMKP A 0 A_ScaleVelocity(0.8)
	SMKP GHI 2 A_FadeOut(0.15)
	SMKP A 0 A_ScaleVelocity(0.8)
	SMKP JK 2 A_FadeOut(0.15)
	Stop
	}
}

ACTOR ShellTrailSmoke : QExplosionSmoke
{
	Scale 0.1
	Alpha 0.5
	States
	{
	Spawn:
	SMKP KGD 2
	SMKP A 0 A_ScaleVelocity(0.8)
	SMKP ABC 2 A_FadeOut(0.15)
	SMKP A 0 A_ScaleVelocity(0.8)
	SMKP DEF 2 A_FadeOut(0.15)
	SMKP A 0 A_ScaleVelocity(0.8)
	SMKP GHI 2 A_FadeOut(0.15)
	SMKP A 0 A_ScaleVelocity(0.8)
	SMKP JK 2 A_FadeOut(0.15)
	Stop
	}
}

ACTOR ShellTrailSmokeFaint : ShellTrailSmoke {Alpha 0.25}

ACTOR QExplosionSmokeFaint : QExplosionSmoke {Alpha 0.5}

ACTOR QGrenadeSmoke
{
	+NOGRAVITY
	+NOBLOCKMAP
	-SOLID
	+NOCLIP
	+CLIENTSIDEONLY
	RenderStyle "Add"
	Scale 0.10
	States
	{
	Spawn:
	SMKP KGD 1
	SMKP ABCDEFGHIJK 1 A_FadeOut(0.08)
	Stop
	}
}

ACTOR QM79Smoke : QGrenadeSmoke
{
	Scale 0.25
	Alpha 0.4
	
	States
	{
	Spawn:
	SMOK A 0 A_Jump(128, "Spawn2")
	SMOK A 1 A_SetScale(0.27)
	SMOK B 1 A_SetScale(0.29)
	SMOK C 1 A_SetScale(0.31)
	SMOK DEFG 1 A_FadeOut(0.03)
	SMOK H 0 A_SetScale(0.35)
	SMOK HIJK 1 A_FadeOut(0.03)
	SMOK L 0 A_SetScale(0.40)
	SMOK LMMN 1 A_FadeOut(0.03)
	SMOK N 0 A_SetScale(0.45)
	SMOK NOOP 1 A_FadeOut(0.03)
	SMOK P 0 A_SetScale(0.50)
	SMOK PQQRR 1 A_FadeOut(0.03)
	Stop
	
	Spawn2:
	SMOK A 1 A_SetScale(0.27)
	SMOK C 1 A_SetScale(0.29)
	SMOK E 1 A_SetScale(0.31)
	SMOK FG 1 A_FadeOut(0.03)
	SMOK H 0 A_SetScale(0.35)
	SMOK HIJK 1 A_FadeOut(0.03)
	SMOK L 0 A_SetScale(0.40)
	SMOK LMMN 1 A_FadeOut(0.03)
	SMOK N 0 A_SetScale(0.45)
	SMOK NOOP 1 A_FadeOut(0.03)
	SMOK P 0 A_SetScale(0.50)
	SMOK PQQRR 1 A_FadeOut(0.03)
	Stop
	}
}

ACTOR QExplosionSmokeBig : QExplosionSmoke
{
	Scale 0.55
}

ACTOR GunTracer : FastProjectile
{
  Radius 2
  Height 4
  Speed 150
  Damage 0
  Projectile
  RenderStyle Add
  +CLIENTSIDEONLY
  States
  {
  Spawn:
	TNT1 A 0
    TRAC A 1 Bright
    Loop
  Death:
    TNT1 A 0
	Stop
  }
}

Actor PuntPuff
{
	renderstyle Add
	alpha 0.4
	Scale 0.7
	+NOBLOCKMAP
	+NOEXTREMEDEATH
	+NOGRAVITY
	+PUFFONACTORS
	+PUFFGETSOWNER
	+NOCLIP
	states
	{
	Spawn:
		TNT1 A 0 BRIGHT A_Stop
		TNT1 A 0 A_PlaySoundEx("melee/punt",CHAN_WEAPON)
		SMK1 BDFHJLN 1 BRIGHT
		stop
	}
}

ACTOR PulverizerPuff
{
	Projectile
	Speed 20
	Radius 4
	Height 8
	Damage 100
	+NOGRAVITY
	Gravity 0
	-ACTIVATEPCROSS
	DamageType "PulverizerBoom"
	States
	{
	Spawn:
		TNT1 A 3
		Stop
	
	// Hit a monster
	XDeath:
		TNT1 A 0
		TNT1 A 0 A_Stop
		TNT1 A 0 A_AlertMonsters
		TNT1 A 0 A_GiveToTarget("HitSomething",1)
		TNT1 A 0 A_SpawnItemEx("PulvExplosion",0,0,0)
		EXP1 A 0 A_PlayWeaponSound("pulv/boom")
		EXP1 A 0 A_PlaySoundEx("grenade/farboom","SoundSlot6")
		TNT1 A 0 A_Explode(200,64)
		TNT1 A 3
		Stop
	
	Crash:
	Death:
		TNT1 A 0
		Stop
	}
}


ACTOR BlockPuff
{
  +NOBLOCKMAP
  +NOGRAVITY
  -ALLOWPARTICLES
  +PUFFONACTORS
  +RANDOMIZE
  RenderStyle Translucent
  SeeSound "fist/smack"
  Damagetype "QuickMelee"
  Alpha 0.2
  VSpeed 1
  Mass 5
  States
  {
  Melee:
  Spawn:
	PUFF AAA 0
	Stop
  Crash:
    PUFF AAAABBBBCCCCDDDD 1 A_FadeOut(0.1)
    Stop
  }
}

ACTOR FistPuff : BlockPuff
{
	+NOBLOCKMAP
	+NOGRAVITY
	-ALLOWPARTICLES
	+PUFFONACTORS
	+RANDOMIZE
	RenderStyle Translucent
	SeeSound "fist/smack"
	AttackSound "fist/wall"
	Alpha 0.2
	VSpeed 1
	Mass 5
	States
	{
		Melee:
		Spawn:
			PUFF AAA 0
			Stop
		Crash:
			SMK1 AAAABBBBCCCCDDDD 1 A_FadeOut(0.1)
			Stop
	}
}

Actor BulletPuff2
{
	renderstyle Add
	alpha 0.3
	Scale 0.7
	Damagetype "Firearm"
	Decal "Bullet"
	+NOBLOCKMAP
	+NOGRAVITY
	+FLOAT
	+NOCLIP
	+CLIENTSIDEONLY
	states
	{
	Spawn:
		TNT1 A 0 BRIGHT A_Stop
		TNT1 A 0 A_Jump(128,"Ricochet")
		Goto SpawnMain
	Ricochet:
		TNT1 A 0 A_PlaySoundEx("bullet/ricochet",CHAN_WEAPON)
		Goto SpawnMain
    SpawnMain:
		TNT1 A 0 BRIGHT A_Jump(128,"Spawn2","Spawn3","Spawn4")
		TNT1 A 0 A_Jump(128,2)
		SMK1 BCDEFGHIJKLMNO 1 BRIGHT
		stop
	Spawn2:
		TNT1 A 0 A_SetScale(0.5)
		TNT1 A 0 A_FadeOut(0.1)
		TNT1 A 0 A_Jump(128,2)
		TNT1 A 0 BRIGHT A_Stop
		TNT1 A 0 BRIGHT A_Stop
		SMK2 BCDEFGHIJKLMNOP 1 BRIGHT
		stop
	Spawn3:
	    TNT1 A 0 A_SetScale(0.3)
		TNT1 A 0 A_Jump(128,2)
		TNT1 A 0 BRIGHT A_Stop
		TNT1 A 0 BRIGHT A_Stop
		SMK3 BCDEFGHIJKLMNOP 1 BRIGHT
		stop
	Spawn4:
	    TNT1 A 0 A_SetScale(0.6)
	    TNT1 A 0 A_FadeOut(0.2)
		TNT1 A 0 A_Jump(128,2)
		TNT1 A 0 BRIGHT A_Stop
		TNT1 A 0 BRIGHT A_Stop
		SMK4 BCDEFGHIJKLMNOP 1 BRIGHT
		stop
  }
}

ACTOR VenomPuff : BulletPuff2 { }

ACTOR BP_Shotgun : BulletPuff2
{
	Damagetype "Shotgun"
	Decal "Bullet"
}

ACTOR IncendiaryPuff : BulletPuff2
{
	Damagetype "Fire"
	Decal "Bullet"
	+HITTARGET
	+PUFFONACTORS
	States
	{
		Spawn:
			TNT1 A 3
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("FlamePuff",0) == 0, "DoAnim")
			TNT1 A 4
			Stop
			
		DoAnim:
			TNT1 A 0
			Goto Super::Spawn
	}
}

ACTOR BP_TorsoGib : BulletPuff2
{
	Damagetype "PointBlank"
	Decal "Bullet"
	States
	{
		Spawn:
		TNT1 A 0
		Stop
	}
}

Actor PuffSpark
{
 Scale 0.02
 +FORCEXYBILLBOARD
 +NoInteraction
 RenderStyle Add
 States
 {
  Spawn:
   TNT1 A 0 A_Stop
   TNT1 A 0 A_Jump(128,"Spawn2","Spawn3","Spawn4","Spawn5","Spawn6")
   MUZZ A 1 Bright A_FadeOut(0.04)
   Wait
  Spawn2:
   TNT1 A 0 A_Stop
   MUZZ B 1 Bright A_FadeOut(0.04)
   Wait
  Spawn3:
   TNT1 A 0 A_Stop
   MUZZ C 1 Bright A_FadeOut(0.04)
   Wait
  Spawn4:
   TNT1 A 0 A_Stop
   MUZZ D 1 Bright A_FadeOut(0.04)
   Wait
  Spawn5:
   TNT1 A 0 A_Stop
   MUZZ E 1 Bright A_FadeOut(0.04)
   Wait
  Spawn6:
   TNT1 A 0 A_Stop
   MUZZ F 1 Bright A_FadeOut(0.04)
   Wait
 }
}

actor FlightSmokePuff
{
  RenderStyle Add
  alpha 0.95
  -RANDOMIZE
  +NOCLIP
  PROJECTILE
  Speed 0
  Damage 0
  Scale 0.5
  +CLIENTSIDEONLY
  +NOINTERACTION
  +FORCEXYBILLBOARD
  states
  {
  Spawn:
    TNT1 A 0
    TNT1 A 0 A_Jump(256,"Spawn1","Spawn2","Spawn3","Spawn4","Spawn5","Spawn6")
  Spawn1:
    SMK1 ABCDEFGHIJKLMNOP 2 bright A_FadeOut(0.05)
    stop
  Spawn2:
    SMK2 ABCDEFGHIJKLMNOP 2 bright A_FadeOut(0.05)
    stop
  Spawn3:
    SMK3 ABCDEFGHIJKLMNOP 2 bright A_FadeOut(0.05)
    stop
  Spawn4:
    SMK4 ABCDEFGHIJKLMNOP 2 bright A_FadeOut(0.05)
    stop
  Spawn5:
    SMK5 ABCDEFGHIJKLMNOP 2 bright A_FadeOut(0.05)
    stop
  Spawn6:
    SMK6 ABCDEFGHIJKLMNOP 2 bright A_FadeOut(0.05)
    stop
  }
}

Actor PulverizerImpacter
{
	renderstyle Add
	alpha 0.4
	Scale 0.7
	+NOBLOCKMAP
	+NOEXTREMEDEATH
	+NOGRAVITY
	+PUFFONACTORS
	+PUFFGETSOWNER
	+NOCLIP
	DamageType Blunt
	AttackSound "hammer/wall"
	states
	{
	Spawn:
		TNT1 A 0 BRIGHT A_Stop
		TNT1 A 0 A_PlaySoundEx("hammer/flesh",CHAN_WEAPON)
		stop
	Crash:
		TNT1 A 0 BRIGHT A_Stop
		TNT1 A 0 BRIGHT A_Jump(128,"Spawn2","Spawn3","Spawn4")
		TNT1 A 0 A_Jump(128,2)
		SMK1 BCDEFGHIJKLMNO 1 BRIGHT
		stop
	Spawn2:
		TNT1 A 0 A_Jump(128,2)
		TNT1 A 0 BRIGHT A_Stop
		TNT1 A 0 BRIGHT A_Stop
		SMK2 BCDEFGHIJKLMNOP 1 BRIGHT
		stop
	Spawn3:
		TNT1 A 0 A_Jump(128,2)
		TNT1 A 0 BRIGHT A_Stop
		TNT1 A 0 BRIGHT A_Stop
		SMK3 BCDEFGHIJKLMNOP 1 BRIGHT
		stop
	Spawn4:
		TNT1 A 0 A_Jump(128,2)
		TNT1 A 0 BRIGHT A_Stop
		TNT1 A 0 BRIGHT A_Stop
		SMK4 BCDEFGHIJKLMNOP 1 BRIGHT
		stop
  }
}

Actor ZTMeleePuff
{
	renderstyle Add
	alpha 0.4
	Scale 0.7
	Damagetype "MeleeDecap"
	+NOBLOCKMAP
	+NOEXTREMEDEATH
	+NOGRAVITY
	+PUFFONACTORS
	+PUFFGETSOWNER
	+NOCLIP
	states
	{
	Spawn:
		TNT1 A 0 BRIGHT A_Stop
		TNT1 A 0 A_PlaySoundEx("katana/flesh",CHAN_WEAPON)
		TNT1 A 0 A_GiveToTarget("HitSomething",1)
		stop
	Crash:
		TNT1 A 0 BRIGHT A_Stop
		TNT1 A 0 BRIGHT A_Jump(128,"Spawn2","Spawn3","Spawn4")
		TNT1 A 0 A_PlaySoundEx("katana/concrete",CHAN_WEAPON)
		TNT1 A 0 A_Jump(128,2)
		SMK1 BCDEFGHIJKLMNO 1 BRIGHT
		stop
	Spawn2:
		TNT1 A 0 A_PlaySoundEx("katana/concrete",CHAN_WEAPON)
		TNT1 A 0 A_Jump(128,2)
		TNT1 A 0 BRIGHT A_Stop
		TNT1 A 0 BRIGHT A_Stop
		SMK2 BCDEFGHIJKLMNOP 1 BRIGHT
		stop
	Spawn3:
		TNT1 A 0 A_PlaySoundEx("katana/concrete",CHAN_WEAPON)
		TNT1 A 0 A_Jump(128,2)
		TNT1 A 0 BRIGHT A_Stop
		TNT1 A 0 BRIGHT A_Stop
		SMK3 BCDEFGHIJKLMNOP 1 BRIGHT
		stop
	Spawn4:
		TNT1 A 0 A_PlaySoundEx("katana/concrete",CHAN_WEAPON)
		TNT1 A 0 A_Jump(128,2)
		TNT1 A 0 BRIGHT A_Stop
		TNT1 A 0 BRIGHT A_Stop
		SMK4 BCDEFGHIJKLMNOP 1 BRIGHT
		stop
  }
}

ACTOR ZTRightPuff : ZTMeleePuff
{
	Damagetype "MeleeRight"
}

ACTOR ZTLeftPuff : ZTMeleePuff
{
	Damagetype "MeleeLeft"
}

ACTOR ZTVertPuff : ZTMeleePuff
{
	Damagetype "MeleeVert"
}

ACTOR LargeSmokePuff : FlightSmokePuff
{
Scale 2.0
}

actor ImpactSpark
{
  RenderStyle Add
  alpha 0.95
  -RANDOMIZE
  +NOCLIP
  PROJECTILE
  Speed 2
  Damage 0
  Scale 0.05
  +FORCEXYBILLBOARD
  +CLIENTSIDEONLY
  +NOINTERACTION
  -NOGRAVITY
  Gravity 1.2
  states
  {
  Spawn:
    SPRK A 0
    SPRK A 1 bright A_FadeOut(0.075)
    loop
  }
}

actor ImpactSpark2
{
  RenderStyle Add
  alpha 0.95
  -RANDOMIZE
  +NOCLIP
  PROJECTILE
  Speed 2
  Damage 0
  Scale 0.08
  +FORCEXYBILLBOARD
  +CLIENTSIDEONLY
  +NOINTERACTION
  -NOGRAVITY
  Gravity 1.2
  states
  {
  Spawn:
    SPRK A 0
    SPRK A 1 bright A_FadeOut(0.05)
    loop
  }
}

// -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

actor TeleportSteam : ZTFX
{
	+NOGRAVITY
	RenderStyle Add
	Alpha 0.2
	Scale 2.0
	
	States
	{
		Spawn:
		TPUF ABCDEFGHIJKLMNOPQR 2 bright A_ScaleVelocity(0.9)
		Stop
	}
}