//==============================================================================
// Kriegsland Weapon Effects
//==============================================================================
// Smoke
//==============================================================================

ACTOR GunSmokeSpawner
{
	+NOCLIP
    Speed 20
	States
    {
	Spawn:
		TNT1 A 1
		TNT1 A 0 Thing_ChangeTID(0,390)
		NULL A 0 A_CustomMissile("ShotSmoke",0,0,random(0,360),2,random(0,180))
        Stop
    }
}

ACTOR ShotSmoke
{
	+NOGRAVITY
	+NOBLOCKMAP
	+FLOORCLIP
	+FORCEXYBILLBOARD
	+CLIENTSIDEONLY
	+NOINTERACTION
	+DONTSPLASH
	+MISSILE
	RenderStyle Add
	Scale  0.35
	Alpha  0.4
	Radius 0
	Height 0
	Speed  1
	States
	{
    Spawn:
		NULL A 1 A_SetTranslucent(0.25)
		TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("SmokeToggle")==0,19)
		SMKN ABCDEFGHI 2 A_FadeOut(0.005)
		SMKN JKLMNOPQR 1 A_FadeOut(0.005)
		TNT1 A 0
		Stop
    }
}

ACTOR DarkerSmokeSpawner : GunSmokeSpawner
{
	+NOCLIP
    Speed 20
	States
    {
	Spawn:
		TNT1 A 1
		TNT1 A 0 Thing_ChangeTID(0,390)
		NULL A 0 A_CustomMissile("DarkerSmoke",0,0,random(0,360),2,random(0,180))
        Stop
    }
}

ACTOR DarkerSmoke : ShotSmoke
{
	RenderStyle Add
	Scale  0.9
	Alpha  0.85
	Speed  0.5
	Height 0
}

ACTOR CasingSmokes : ShotSmoke
{
	XScale 0.035
	YScale 0.060
	RenderStyle Add
	States
	{
    Spawn:
		NULL A 1 A_SetTranslucent(0.25)
		TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("SmokeToggle")==0,19)
		SMKN ABCDEFGHIJKLMNOPQR 1 A_FadeOut(0.005)
		TNT1 A 0
		Stop
    }
}

ACTOR CasingSmokesEnd : CasingSmokes
{
	XScale 0.020
	YScale 0.095
	RenderStyle Add
	Speed 8
	States
	{
    Spawn:
		NULL A 1 A_SetTranslucent(0.25)
		TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("SmokeToggle")==0,20)
		TNT1 A 0 ThrustThingz(0,1,0,0)
		SMKN ABCDEFGHIJKLMNOPQR 1 A_FadeOut(0.005)
		TNT1 A 0
		Stop
	}
}

//==============================================================================
// Puffs
//==============================================================================
// General
//==============================================================================

ACTOR Bullet_Puff : BulletPuff
{
	+NOBLOCKMAP
	+NOGRAVITY
	+RANDOMIZE
	+FLOORCLIP
	+NOEXTREMEDEATH
	Decal BulletHole
	RenderStyle Add
	Alpha	1
	Radius	1
	Height	1
	Speed   0
	Mass	10
	States
	{
	Spawn:
		TNT1 A 0
	Crash:
		TNT1 A 0 A_Jump(94,"AltCrash")
		TNT1 A 0 A_SetScale(0.035)
		TNT1 A 0 A_SpawnDebris("BulletSparks")
		TNT1 A 0 A_SpawnItem("GunSmokeSpawner")
		TNT1 A 0 A_PlaySound("weapons/generic/ricochet",CHAN_BODY,0.55)
		FLER AAA 1 BRIGHT A_FadeOut(0.1)
		Stop
	AltCrash:
		TNT1 A 0 A_SetScale(0.045)
		TNT1 A 0 A_SpawnDebris("BulletSparks")
		TNT1 A 0 A_SpawnItem("GunSmokeSpawner")
		TNT1 A 0 A_PlaySound("weapons/generic/ricochet",CHAN_BODY,0.55)
		TNT1 A 0 A_JumpIf(waterlevel>1,"Crash")
		TNT1 A 0 A_JumpIf(waterlevel>2,"Crash")
		TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("RicochetToggle")==0,2)
		TNT1 A 0 A_CustomMissile("RicochetBullet",0,0,random(0,360),2,random(-40,40))
		FLER AAA 1 BRIGHT
		Stop
	}
}

ACTOR WunderflintePuff : Bullet_Puff
{
	-NOEXTREMEDEATH
	DamageType SSGgib
}

ACTOR BulletSparks
{
	+MISSILE
	+FLOORCLIP
	+DONTSPLASH
	+NOTELEPORT
	+BOUNCELIKEHERETIC
	RenderStyle Add
	Health	4
	Radius	2
	Height	3
	Speed	1
	Alpha	1
	Scale	.032
	Mass	1
	States
	{
	Spawn:
		BPUF A 1
		BPUF ABCDA 1		BRIGHT A_SetTranslucent(.8,1)
		BPUF BCDABC 1		BRIGHT A_SetTranslucent(.6,1)
		BPUF DABCDABC 1		BRIGHT A_SetTranslucent(.4,1)
		BPUF DABCDABCDA 1	BRIGHT A_SetTranslucent(.2,1)
		Stop
	}
}

ACTOR RicochetBullet : FastProjectile
{
	+GHOST
	+DROPOFF
	+MISSILE
	+NOGRAVITY		
	+NOTDMATCH
	+NOBLOCKMAP
	+NOTELEPORT
	+HEXENBOUNCE
	+DONTSPLASH
	+FORCEXYBILLBOARD
	Mass 1
	Damage 0
	Radius 1
	Height 3
	Speed 23
	SeeSound "weapons/generic/ricochet"
	Renderstyle Add
	Alpha 1.0
	Scale .025
	MissileType BulletTrail
	MissileHeight 8
	States
	{
	Spawn:
		TNT1 A 0
		TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("RicochetToggle")==0,2)
		BPUF A 1 BRIGHT A_FadeOut(0.35)
		TNT1 A 0
		Stop
	}
}

ACTOR BulletTrail
{
	+NOGRAVITY
	+NOINTERACTION
	+FORCEXYBILLBOARD
	Renderstyle Add
	Alpha 1.0
	Scale .025
	States
	{
	Spawn:
		BPUF A 1 BRIGHT A_FadeOut(0.06)
		loop
	Death:
		TNT1 A 0 A_SpawnItemEx("RicochetSpark")
		Stop
	}
}

ACTOR RicochetSpark : BulletSparks
{
	-NOGRAVITY
	+DONTSPLASH
	Bouncetype None
	Renderstyle Add
	Alpha 1.0
	Radius 3	
	Height 3
	Scale .03
	Gravity 1.0
	States
	{
	Spawn:
		BPUF A 1 BRIGHT A_FadeOut(0.05)
		Loop
	}
}

//==============================================================================
// Fist
//==============================================================================

ACTOR FightPuff
{
	+NOBLOCKMAP
	+NOGRAVITY
	+NOEXTREMEDEATH
	+PUFFONACTORS
	+STRIFEDAMAGE
	+ACTIVATEIMPACT
	Damagetype Melee
	ActiveSound "weapons/melee/move"
	VSpeed 1
	States
	{
	Spawn:
	XDeath:
		TNT1 A 0 A_PlaySound("weapons/melee/hit")
		TNT1 A 0 A_SpawnItem("WallShake",0,0,0,0)
		Stop
	Crash:
		TNT1 A 0 A_AlertMonsters
		TNT1 A 0 A_SpawnItem("WallShake",0,0,0,0)
		TNT1 A 0 A_PlaySound("weapons/melee/miss")
		TNT1 A 0 A_SpawnItem("GunSmokeSpawner",0,0,0,0)
		Stop
	}
}

//==============================================================================
// Knife
//==============================================================================

ACTOR KnifePuff
{
	-ALLOWPARTICLES
	+NOBLOCKMAP
	+NOGRAVITY
	+NOEXTREMEDEATH
	+PUFFONACTORS
	+STRIFEDAMAGE
    +PUFFGETSOWNER
    +RANDOMIZE
    +THRUGHOST
    +MTHRUSPECIES
	ActiveSound "Weapons/knisee"
	RenderStyle Add
	Decal None
	Alpha 1.5
	Radius	1
	Height	1
	Speed 0  
	States
  {
	Spawn:
	XDeath:
		TNT1 A 0 A_PlaySound("Weapons/knihit")
		Stop
	Crash:
		TNT1 A 0 A_PlaySound("Weapons/kniatk")
		TNT1 A 0 A_SetScale(0.40)
		DPRK ABCDEFGHIJ 2 BRIGHT
		Stop
  }
}

//==============================================================================
// Screen shake effect for fists
//==============================================================================

ACTOR WallShake
{
	+CLIENTSIDEONLY
	+ACTIVATEIMPACT
	+NOBLOCKMAP
	+NOGRAVITY
	+NOSECTOR
	+NOCLIP
	Height 8
	Radius 4
	States
	{
	Spawn:
		TNT1 A 0
		TNT1 A 3 Radius_Quake(2,3,0,1,0)
		Stop
	}
}

ACTOR BombenPuff : Bullet_Puff
{
	+NOBLOCKMAP
	+NOGRAVITY
	+RANDOMIZE
	+FLOORCLIP
	+PUFFONACTORS
	Decal Crater
	RenderStyle Add
	Alpha	1
	Radius	1
	Height	1
	Speed   0
	Mass	10
	States
	{
	Spawn:
		TNT1 A 0
	Death:
	Crash:
		TNT1 A 0 A_SetScale(0.1)
		TNT1 A 0 A_SpawnItemEx("Detonation3",0,0,0,0,0,0,0,SXF_TRANSFERPOINTERS,0)
		TNT1 A 0 A_SpawnItem("GunSmokeSpawner")
		TNT1 A 0 A_SpawnDebris("BulletSparks")
		FLER A 2 BRIGHT A_Fadeout(0.1)
		Stop
	}
}

ACTOR ShockPuff
{
	+NOBLOCKMAP
	+NOGRAVITY
	+NOEXTREMEDEATH
	+NOBLOOD
	+BLOODLESSIMPACT
	+FORCEPAIN
	+PUFFONACTORS
	+STRIFEDAMAGE
	Damagetype Shock
	PainType   Shock
	ActiveSound "weapons/ESK/spark"
	VSpeed 0
	Scale 0.55
	States
	{
	Spawn:
	Death:
	XDeath:
		TNT1 A 0 A_PlaySound("weapons/ESK/spark")
		TNT1 A 0 A_SpawnItem("WallShake",0,0,0,0)
		Stop
	Melee:
	Crash:
		TNT1 A 0 A_AlertMonsters
		TNT1 A 0 A_SpawnItem("GunSmokeSpawner",0,0,0,0)
		WPGZ ABCDEF 2 BRIGHT A_FadeOut(0.1)
		Stop
	}
} 

ACTOR MineBlastVisual //Aesthetic part comes from the Spring Mine by Mor'ladim.
{
   Speed 8
   Radius 8
   Height 5
   RenderStyle Add
   Alpha 0.45
   Scale 0.55
   PROJECTILE
   +BRIGHT
   +THRUACTORS
   +MOVEWITHSECTOR
   States
   {
   Spawn:
      MBLS TTTTT 1
      TNT1 A 0 A_SetTranslucent(0.1)
      MBLS TTT 2 A_SetScale(0.3)
	  MBLS TT 2 A_SetScale(0.2)
	  MBLS T 1 A_SetScale(0.1)
   Death:
      TNT1 A 0
      Stop
   }
}

ACTOR LMineExplosionVisuals  //Deals no damage.
{
   Projectile
   Radius 8
   Height 8
   Speed 0
   RenderStyle Add
   Alpha 0.55
   Scale 1.1
   +NOCLIP
   +THRUACTORS
   +BRIGHT
   +MOVEWITHSECTOR
   States
   {
   Spawn:
      TNT1 A 0
      Goto Death
   Death:
	  TNT1 A 0 A_SetTranslucent(0.55,1)
      BNG4 A 1 Bright
      TNT1 A 0 A_SetScale(1.15)
      BNG4 B 1 Bright
      TNT1 A 0 A_SetScale(1.2)
      BNG4 C 2 Bright
      TNT1 A 0 A_SetScale(1.25)
      BNG4 D 2 Bright
	  TNT1 A 0 A_SetScale(1.3)
	  BNG4 E 2 Bright
	  TNT1 A 0 A_SetScale(1.5)
	  BNG4 F 2 Bright
	  TNT1 A 0 A_SetScale(1.35)
	  BNG4 GHIJ 2 Bright
	  BNG4 K 2 Bright A_FadeOut(0.35)
	  BNG4 L 2 Bright A_FadeOut(0.35)
	  BNG4 M 2 Bright A_FadeOut(0.35)
	  BNG4 N 2 Bright A_FadeOut(0.35)
	  Stop
   }
}

ACTOR FirstOneExplosionSpawner //thanks to zirius1994
{
	+NOGRAVITY
	+NOINTERACTION
	+NOBLOCKMAP
	+NOTELEPORT
	Radius 0
	Height 0
	States
	{
	Spawn:
		NULL A 0
		NULL AAAA 1 A_SpawnItemEx("FirstOneExplosion",Random(-10,10),Random(-10,10),Random(-10,10),0,0,0,SXF_NOCHECKPOSITION,32)
		stop
	}
}

ACTOR FirstOneExplosion //thanks to zirius1994
{
	+NOGRAVITY
  	+NOINTERACTION
  	+NOBLOCKMAP
  	+NOTELEPORT
  	+FORCEXYBILLBOARD
  	+CLIENTSIDEONLY
	Radius 0
	Height 0
	RenderStyle Add
	Alpha 1
	Scale 0.65
	States
	{
	Spawn:
		NULL A 0
		TNT1 AAAAAAAAAAAA 0 A_CustomMissile("DarkerSmokeSpawner",0)
		X003 ABCDEFGHIJKLMNOPQRSTUVWXYZ 1 BRIGHT
		stop
	}
}