// Change the death state and attributes of this projectile around to get cool
// variations on the choke hold! Check out force.acs for more info.

Actor KD_ForceDamage
{
	Projectile
	
	Obituary "%k sent sergeant shivers down %o's spine." //Lel
	Damage (5)
	DamageType "Ice"
	RenderStyle Add
	Alpha 0.8
	Scale 0.1
	+FORCERADIUSDMG
	var int User_ExpandDong;
	var int User_Buttsauce;
	States
	{
		Spawn:
			 TNT1 A 0
		Death:
			 TNT1 AAAA 0 A_SpawnItemEx("ChillgraspWave",frandom(-5.0,5.0),frandom(-5.0,5.0),frandom(-5.0,5.0),frandom(6.0,5.0),frandom(0.8,-0.8),frandom(1.8,-1.8),frandom(0,359),SXF_CLIENTSIDE,40)
			 TNT1 AA 0 A_SpawnItemEx("ChillgraspMist",frandom(-5.0,5.0),frandom(-5.0,5.0),frandom(-5.0,5.0),0,0,0,frandom(0.0,360.0),SXF_CLIENTSIDE,0)
			 TNT1 AAA 0 A_SpawnItemEx("ChillgraspSnow",frandom(-25.0,25.0),frandom(-25.0,25.0),frandom(-5.0,25.0),0,0,0,frandom(0.0,360.0),SXF_CLIENTSIDE,40)
			 TNT1 A 0 A_SpawnItemEx("ChillyPulse", 0, 0, 0, 0, 0, 0, 0, SXF_CLIENTSIDE, 0)
		Looplet:
			ICIC L 0 A_SetUserVar("User_ExpandDong", User_ExpandDong + 16)
			ICIC L 0 A_SetUserVar("User_Buttsauce", User_Buttsauce + 1)
			ICIC L 0 A_Explode(16 - User_Buttsauce, 64 + User_ExpandDong,0,0)
			ICIC L 0 A_JumpIfInTargetInventory("PowerTomeEffect",1,3)
			ICIC L 0 A_RadiusGive("ChillItMate", 16, RGF_MONSTERS|RGF_CORPSES, 1)
			ICIC L 0 A_Jump(256,2)
			ICIC L 0 A_RadiusGive("ChillItMate", 64 + User_ExpandDong, RGF_MONSTERS|RGF_CORPSES, 1)
			ICIC L 0 A_FadeOut(0.12)
			ICIC L 1 Bright A_SetScale(ScaleX+0.1)
			Loop
	}
}

Actor ChillgraspTrigger : GenericToken {}
Actor ChillgraspCaught : GenericToken {}
Actor ChillyFishCatch : GenericToken {}

Actor ChillItMate : CustomInventory
{
	Inventory.Amount 1
	Inventory.MaxAmount 1
	+INVENTORY.AUTOACTIVATE
	+INVENTORY.ALWAYSPICKUP
	States
	{
	Spawn:
	TNT1 A -1
	Stop
	Pickup:
	Use:
	TNT1 A 0 A_GiveInventory("ChillgraspTrigger",1)
	Stop
	}
}

ACTOR ChillgraspBlast
{
  Radius 1
  Height 1
  Speed 20
  Damage 0
  DamageType "Ice"
  Projectile
  +RIPPER
  +FORCERADIUSDMG
  +NOTONAUTOMAP
  Obituary "%o was served with an explosive ice statue, thus becoming a one as well."
  var int User_ExpandDong;
  var int User_Buttsauce;
  var int User_Counter;
  States
  {
  Spawn:
    TNT1 A 0 NoDelay A_PlaySound("Chillgrasp/Blast",4,0.8)
    TNT1 A 0 A_SetUserVar("User_Counter", 10)
    TNT1 A 0 A_SpawnItemEx("ChillgraspSpawnerMist", 0, 0, 20, 0, 0, 0, 0, SXF_CLIENTSIDE, 0)
    TNT1 A 0 A_SpawnItemEx("ChillgraspSpawnerShockwave", 0, 0, 15, 0, 0, 0, 0, SXF_CLIENTSIDE, 0)
    TNT1 A 0 A_SpawnItemEx("ChillgraspAurora1", 0, 0, 20, 0, 0, 0, 0, SXF_CLIENTSIDE, 0)
    TNT1 A 0 A_SpawnItemEx("ChillgraspAurora2", 0, 0, 20, 0, 0, 0, 0, SXF_CLIENTSIDE, 0)
    TNT1 A 0 A_SpawnItemEx("ChillgraspAurora3", 0, 0, 20, 0, 0, 0, 0, SXF_CLIENTSIDE, 0)
    TNT1 A 0 A_SpawnItemEx("ChillgraspSpawnerSnow", 0, 0, 20, 0, 0, 0, 0, SXF_CLIENTSIDE, 0)
    TNT1 A 0 A_SpawnItemEx("ChillgraspCloud", 0, 0, 20, 0, 0, 0, 0, SXF_CLIENTSIDE, 0)
    TNT1 A 0 A_SpawnItemEx("ChillgraspPulse", 0, 0, 20, 0, 0, 0, 0, SXF_CLIENTSIDE, 0) //Required for light to work
    //TNT1 A 0 A_Blast(BF_DONTWARN|BF_AFFECTBOSSES, 255, 192, 55, "BlastEffect", None)
  Looplet:
    TNT1 A 0 A_JumpIf(User_Counter <= 0, "NULL")
    TNT1 A 0 A_SetUserVar("User_Counter", User_Counter - 1)
    TNT1 A 0 A_SetUserVar("User_ExpandDong", User_ExpandDong + 16)
    TNT1 A 0 A_SetUserVar("User_Buttsauce", User_Buttsauce + 4)
	TNT1 A 0 A_JumpIfInTargetInventory("PowerTomeEffect",1,2)
	TNT1 A 0 A_Jump(256,2)
	TNT1 A 0 A_RadiusGive("ChillItMate", 96 + User_ExpandDong, RGF_MONSTERS|RGF_CORPSES, 1)
    TNT1 A 1 A_Explode(60 - User_Buttsauce, 96 + User_ExpandDong, 0,0)
    Loop
  }
}

ACTOR ChillgraspSnow
{
  Radius 0
  Height 0
  PROJECTILE
  +BOUNCEONWALLS
  +BOUNCEONCEILINGS
  +BOUNCEONACTORS
  +ALLOWBOUNCEONACTORS
  +NOTONAUTOMAP
  +FORCEXYBILLBOARD
  -NOGRAVITY
  Renderstyle Add
  Scale 0.01
  Gravity 0.035
  States
  {
  Spawn:
  TNT1 A 0
  SNOW Z 1 A_ChangeVelocity (frandom(-0.2, 0.2), frandom(-0.2, 0.2), frandom(-0.035,-0.015), 0)
  Loop
  Death:
  SNOW Z 90
  SNOW Z 1 A_FadeOut(0.01)
  Wait
  }
}

ACTOR ChillgraspCloud
{
  +NOGRAVITY
  +NOINTERACTION
  +FORCEXYBILLBOARD
  Renderstyle Add
  Scale 0.75
  States
  {
  Spawn:
  TNT1 A 0
  CLDH A 1 A_FadeOut(0.02)
  Loop
  }
}


ACTOR ChillgraspBase
{
  +NOGRAVITY
  +NOINTERACTION
  +NOTONAUTOMAP
  +FORCEXYBILLBOARD
  Renderstyle Add
  Alpha 0.99
  States
  {
  Spawn:
  Stop
  }
}

//EFFECTS


ACTOR ChillgraspMist : ChillgraspBase
{
  Alpha 0.45
  Scale 0.65
  States
  {
  Spawn:
  TNT1 A 0
  TNT1 A 0 A_Jump(255,"Spawn1","Spawn2","Spawn3","Spawn4")
  Spawn1:
  TNT1 A 0 A_ChangeVelocity (frandom(-0.05, 0.05), frandom(-0.05, 0.05), frandom(-0.05, 0.05), 0)
  TNT1 A 0 A_SetScale(ScaleX +0.01+random(+0.02,-0.01), ScaleY +0.01+random(+0.02,-0.01))
  TNT1 A 0 A_FadeOut(0.003)
  NSMK A 1
  Loop
  Spawn2:
  TNT1 A 0 A_ChangeVelocity (frandom(-0.05, 0.05), frandom(-0.05, 0.05), frandom(-0.05, 0.05), 0)
  TNT1 A 0 A_SetScale(ScaleX +0.01+random(+0.02,-0.01), ScaleY +0.01+random(+0.02,-0.01))
  TNT1 A 0 A_FadeOut(0.003)
  NSMK B 1
  Loop
  Spawn3:
  TNT1 A 0 A_ChangeVelocity (frandom(-0.05, 0.05), frandom(-0.05, 0.05), frandom(-0.05, 0.05), 0)
  TNT1 A 0 A_SetScale(ScaleX +0.01+random(+0.02,-0.01), ScaleY +0.01+random(+0.02,-0.01))
  TNT1 A 0 A_FadeOut(0.003)
  NSMK C 1
  Loop
  Spawn4:
  TNT1 A 0 A_ChangeVelocity (frandom(-0.05, 0.05), frandom(-0.05, 0.05), frandom(-0.05, 0.05), 0)
  TNT1 A 0 A_SetScale(ScaleX +0.01+random(+0.02,-0.01), ScaleY +0.01+random(+0.02,-0.01))
  TNT1 A 0 A_FadeOut(0.003)
  NSMK D 1
  Loop
  }
}

ACTOR ChillgraspWave : ChillgraspBase
{
  Alpha 0.45
  Scale 1
  DamageType Ice
  +FORCERADIUSDMG
  +BLOODLESSIMPACT
  States
  {
  Spawn:
  TNT1 A 0
  TNT1 A 0 A_Jump(255,"Spawn1","Spawn2","Spawn3","Spawn4")
  Spawn1:
  TNT1 A 0 A_ChangeVelocity (frandom(-0.5, 0.5), frandom(-0.5, 0.5), frandom(-0.1, 0.1), 0)
  TNT1 A 0 A_SetScale(ScaleX +0.01+random(+0.02,-0.01), ScaleY +0.01+random(+0.02,-0.01))
  //TNT1 A 0 A_Explode(1,128)
  TNT1 A 0 A_FadeOut(0.01)
  NSMK A 1
  Loop
  Spawn2:
  TNT1 A 0 A_ChangeVelocity (frandom(-0.1, 0.1), frandom(-0.1, 0.1), frandom(-0.1, 0.1), 0)
  TNT1 A 0 A_SetScale(ScaleX +0.01+random(+0.02,-0.01), ScaleY +0.01+random(+0.02,-0.01))
  //TNT1 A 0 A_Explode(1,128)
  TNT1 A 0 A_FadeOut(0.01)
  NSMK B 1
  Loop
  Spawn3:
  TNT1 A 0 A_ChangeVelocity (frandom(-0.1, 0.1), frandom(-0.1, 0.1), frandom(-0.1, 0.1), 0)
  TNT1 A 0 A_SetScale(ScaleX +0.01+random(+0.02,-0.01), ScaleY +0.01+random(+0.02,-0.01))
  //TNT1 A 0 A_Explode(1,128)
  TNT1 A 0 A_FadeOut(0.01)
  NSMK C 1
  Loop
  Spawn4:
  TNT1 A 0 A_ChangeVelocity (frandom(-0.1, 0.1), frandom(-0.1, 0.1), frandom(-0.1, 0.1), 0)
  TNT1 A 0 A_SetScale(ScaleX +0.01+random(+0.02,-0.01), ScaleY +0.01+random(+0.02,-0.01))
  //TNT1 A 0 A_Explode(1,128)
  TNT1 A 0 A_FadeOut(0.01)
  NSMK D 1
  Loop
  }
}

ACTOR ChillgraspAurora1 : ChillgraspBase
{
  Scale 0.5
  States
  {
  Spawn:
  TNT1 A 0
  TNT1 A 0 A_SetScale(ScaleX +0.05, ScaleY +0.05)
  TNT1 A 0 A_FadeOut(0.08)
  ICIC L 1 Bright
  Loop
  }
}

ACTOR ChillgraspAurora2 : ChillgraspBase
{
  Scale 0.75
  Alpha 0.9
  States
  {
  Spawn:
  TNT1 A 0
  TNT1 A 0 A_SetScale(ScaleX +0.06, ScaleY +0.06)
  TNT1 A 0 A_FadeOut(0.08)
  ICIC L 1 Bright
  Loop
  }
}

ACTOR ChillgraspAurora3 : ChillgraspBase
{
  Scale 0.9
  Alpha 0.7
  States
  {
  Spawn:
  TNT1 A 0
  TNT1 A 0 A_SetScale(ScaleX +0.07, ScaleY +0.07)
  TNT1 A 0 A_FadeOut(0.08)
  ICIC L 1 Bright
  Loop
  }
}


//HIT SPAWNERS


ACTOR ChillgraspSpawnerMist : ChillgraspBase
{
  ReactionTime 6
  States
  {
  Spawn:
  TNT1 A 0
  TNT1 A 0 A_Countdown
  TNT1 A 0 A_SpawnItemEx("ChillgraspMist",random(-65,65),random(-65,65),random(-35,35),0,0,0,0,SXF_CLIENTSIDE,0)
  Loop
  Death:
  TNT1 AAAAA random(1,3) A_SpawnItemEx("ChillgraspMist",random(-65,65),random(-65,65),random(-35,35),0,0,0,0,SXF_CLIENTSIDE,0)
  Stop
  }
}

ACTOR ChillgraspSpawnerShockwave : ChillgraspBase
{
  ReactionTime 65
  States
  {
  Spawn:
  TNT1 A 0
  TNT1 A 0 A_Countdown
  TNT1 A 0 A_SpawnItemEx("ChillgraspWave",frandom(3.0,-3.0),frandom(3.0,-3.0),frandom(3.0,-3.0),frandom(6.0,5.0),frandom(0.8,-0.8),frandom(1.8,-1.8),frandom(0.0,360.0),SXF_CLIENTSIDE,0)
  Loop
  Death:
  TNT1 A 1
  Stop
  }
}

ACTOR ChillgraspSpawnerSnow : ChillgraspBase
{
  ReactionTime 10
  States
  {
  Spawn:
  TNT1 A 0
  TNT1 A 0 A_Countdown
  TNT1 A 0 A_SpawnItemEx("ChillgraspSnow",random(-75,95),random(-75,75),random(-30,30),0,0,0,0,SXF_CLIENTSIDE,0)
  Loop
  Death:
  TNT1 AAAAAAA random(1,3) A_SpawnItemEx("ChillgraspSnow",random(-75,75),random(-75,75),random(-30,30),0,0,0,0,SXF_CLIENTSIDE,0)
  Stop
  }
}


//LIGHT ACTORS

ACTOR ChillyPulse : ChillgraspBase
{
	+NOTIMEFREEZE
	States
	{
	Spawn:
	TNT1 A 17
	Stop
	}
}


ACTOR ChillgraspPulse : ChillgraspBase
{
	+NOTIMEFREEZE
	States
	{
	Spawn:
	TNT1 A 20
	Stop
	}
}
