actor FrostbiteProjectile
{
  Radius 12
  Height 14
  Speed 10
  Damage 0
  Projectile
  +DONTSPLASH
  +EXPLODEONWATER
  +RIPPER
  +BOUNCEONWALLS
  +BOUNCEONFLOORS
  +BOUNCEONCEILINGS
  +BLOODLESSIMPACT
  -NOGRAVITY
  Gravity 0.35
  BounceFactor 1.0
  BounceCount 8
  Renderstyle Add
  DamageType Ice
  DeathSound ""
  ProjectileKickBack 0
  Obituary "%o was directly hit by %k's thingamajib frosty, spikey ball."
  Scale 1.1
  var int user_loopz;
  var int user_eatme;
  var int user_spr;
  States
  {
  Spawn:
    TNT1 AA 0 A_PlaySound("Frostbite/Fly",5,0.8,1)
    TNT1 A 0 A_ChangeVelocity(0,0,3,CVF_RELATIVE)
	TNT1 A 0 A_SetUserVar("user_loopz", 3)
	TNT1 A 0 A_SetUserVar("user_spr", -1)
  Looplet:
    TNT1 A 0 A_SpawnItemEx("FrostbiteTrail",random(2,-2),0,random(2,-2))
	TNT1 A 0 A_SetUserVar("user_eatme", user_loopz/2)
  InnerLoopBegin:
	TNT1 A 0 A_SpawnItemEx("FrostbiteShard",random(4,-4),random(4,-4),random(4,-4),user_loopz+frandom(-3.0,10.0),0,user_loopz+frandom(-2.5,1.2),random(0,359))
	TNT1 A 0 A_SetUserVar("user_eatme", user_eatme-1)
	TNT1 A 0 A_JumpIf(user_eatme>0, "InnerLoopBegin")
	TNT1 A 0 A_CheckFloor("FloorChecks")
  Sprite:
	TNT1 A 0 A_SetUserVar("user_spr", (user_spr+1)%9)
	TNT1 A 0 A_JumpIf(user_spr<3, "SpriteA")
	TNT1 A 0 A_JumpIf(user_spr<6, "SpriteB")
    ICEB C 1 Bright
	goto Looplet
  SpriteB:
	ICEB B 1 Bright
	goto Looplet
  SpriteA:
	ICEB A 1 Bright
	goto Looplet
  FloorChecks:
	TNT1 A 0 A_SetUserVar("user_eatme", CallACS("FrostbiteBollocks"))
	TNT1 A 0 A_JumpIf(user_eatme==1, "Cornblast")
	TNT1 A 0 A_JumpIf(user_eatme==2, "IcePlus")
	goto Sprite
  IcePlus:
    TNT1 A 0 A_SetScale(ScaleX+0.2)
	TNT1 A 0 A_SetUserVar("user_loopz", user_loopz+1)
	goto Sprite
  Cornblast:
  	TNT1 A 0 A_SetUserVar("user_loopz",user_loopz*2)
  Death:
	TNT1 A 0 A_SetUserVar("user_loopz",35*user_loopz)
    TNT1 A 0 A_Quake (3, 23, 0, 256, none)
    TNT1 A 0 A_Quake (2, 23, 0, 384, none)
    TNT1 A 0 A_PlaySound("Frostbite/Blast",5,1.0)
    TNT1 A 0 A_AlertMonsters
  Derp:
	TNT1 A 0 A_SpawnItemEx("FrostbiteShard",random(4,-4),random(4,-4),random(4,-4),frandom(4.0,8.0),frandom(4.0,8.0),frandom(4.0,12.0),random(0,359))
	TNT1 A 0 A_SetUserVar("user_loopz", user_loopz-1)
	TNT1 A 0 A_JumpIf(user_loopz>0,"Derp")

	SHEX ABCDE 3 Bright
    stop
  }
}

ACTOR FrostbiteTrail
{
  +NOGRAVITY
  +NOINTERACTION
  +NOTONAUTOMAP
  Renderstyle Add
  Scale 0.8
  States
  {
  Spawn:
  SHEX AAABBBCCCDDDEEE 1 Bright A_FadeOut(frandom(0.05,0.06))
  Stop
  }
}

ACTOR FrostbiteShard
{
  Radius 6
  Height 9
  Damage 4
  Projectile
  +DONTSPLASH
  +EXPLODEONWATER
  -NOGRAVITY
  +BLOODLESSIMPACT
  Gravity 0.6
  Renderstyle Add
  DamageType Ice
  DeathSound "Frostbite/Hit"
  ProjectileKickBack 80
  Obituary "%o was rained upon %k's Frostbite ball."
  Scale 0.9
  States
  {
  Spawn:
  ICEB A 0
  ICPR AAABBBCCC 1 Bright A_SpawnItemEx("FrostbiteShardTrail",random(2,-2),0,random(2,-2))
  Loop
  Death:
  TNT1 A 0 A_SpawnItemEx("FrozenShardExploder",0,0,0,0,0,0,0,SXF_TRANSFERPOINTERS) //to shatter the frozen enemies
  ICPR DEFGH 2 Bright
  Stop
  }
}

ACTOR FrostbiteShardTrail
{
  +NOGRAVITY
  +NOINTERACTION
  +NOTONAUTOMAP
  Renderstyle Add
  Scale 0.8
  States
  {
  Spawn:
  ICPR ABBCC 1 Bright A_FadeOut(0.15)
  Stop
  }
}

//Tomed Spell

actor FrozenOrbProjectile
{
  Radius 14
  Height 16
  Speed 6
  Damage 0
  Projectile
  +DONTSPLASH
  +EXPLODEONWATER
  +RIPPER
  +BLOODLESSIMPACT
  Renderstyle Add
  DamageType Ice
  DeathSound ""
  ProjectileKickBack 0
  Obituary "%o was ran over by %k's oversized frost ball of doom."
  Scale 1.2
  ReactionTime 11
  var int user_count;
  States
  {
  Spawn:
    SBLL AA 0 A_PlaySound("FrozenOrb/Fly",5,0.9,1)
  Looplet:
    TNT1 A 0 A_Countdown
    TNT1 A 0 A_AlertMonsters //it's pretty damn loud and visible, you know
	SBLL AAA 0 A_SpawnItemEx("FrozenOrbShard",random(12,-12),random(12,-12),random(12,-12),frandom(11.0,9.0),frandom(11.0,9.0),frandom(0.25,-0.25),frandom(0.0,360.0))
    SBLL A 1 Bright
	SBLL AAA 0 A_SpawnItemEx("FrozenOrbShard",random(12,-12),random(12,-12),random(12,-12),frandom(11.0,9.0),frandom(11.0,9.0),frandom(0.25,-0.25),frandom(0.0,360.0))
    SBLL B 1 Bright
	SBLL AAA 0 A_SpawnItemEx("FrozenOrbShard",random(12,-12),random(12,-12),random(12,-12),frandom(11.0,9.0),frandom(11.0,9.0),frandom(0.25,-0.25),frandom(0.0,360.0))
    SBLL C 1 Bright
    TNT1 A 0 A_AlertMonsters
	SBLL AAA 0 A_SpawnItemEx("FrozenOrbShard",random(12,-12),random(12,-12),random(12,-12),frandom(11.0,9.0),frandom(11.0,9.0),frandom(0.25,-0.25),frandom(0.0,360.0))
    SBLL D 1 Bright
	SBLL AAA 0 A_SpawnItemEx("FrozenOrbShard",random(12,-12),random(12,-12),random(12,-12),frandom(11.0,9.0),frandom(11.0,9.0),frandom(0.25,-0.25),frandom(0.0,360.0))
    SBLL E 1 Bright
	SBLL AAA 0 A_SpawnItemEx("FrozenOrbShard",random(12,-12),random(12,-12),random(12,-12),frandom(11.0,9.0),frandom(11.0,9.0),frandom(0.25,-0.25),frandom(0.0,360.0))
    SBLL F 1 Bright
	TNT1 A 0 A_AlertMonsters
	SBLL AAA 0 A_SpawnItemEx("FrozenOrbShard",random(12,-12),random(12,-12),random(12,-12),frandom(11.0,9.0),frandom(11.0,9.0),frandom(0.25,-0.25),frandom(0.0,360.0))
    SBLL G 1 Bright
	SBLL AAA 0 A_SpawnItemEx("FrozenOrbShard",random(12,-12),random(12,-12),random(12,-12),frandom(11.0,9.0),frandom(11.0,9.0),frandom(0.25,-0.25),frandom(0.0,360.0))
    SBLL H 1 Bright
	SBLL AAA 0 A_SpawnItemEx("FrozenOrbShard",random(12,-12),random(12,-12),random(12,-12),frandom(11.0,9.0),frandom(11.0,9.0),frandom(0.25,-0.25),frandom(0.0,360.0))
    SBLL I 1 Bright
	Loop
  Death:
	TNT1 A 0 A_SetUserVar("User_Count", 100)
    TNT1 A 0 A_PlaySound("Frostbite/Launch",5,0.9)
    TNT1 A 0 A_Quake (4, 25, 0, 256, none)
    TNT1 A 0 A_Quake (3, 25, 0, 384, none)
	TNT1 A 0 A_AlertMonsters
  Looplet2:
	TNT1 A 0 A_JumpIf(User_Count <= 0,"TheEnd")
	TNT1 A 0 A_SpawnItemEx("FrostbiteShard",random(4,-4),random(4,-4),random(4,-4),frandom(6.0,12.0),frandom(6.0,12.0),frandom(8.0,16.0),random(0,359),SXF_TRANSFERPOINTERS)
	TNT1 A 0 A_SetUserVar("User_Count", User_Count - 1)
	Loop
  TheEnd:
	TNT1 A 0 A_SpawnItemEx("FrozenOrbShardNova",0,0,0,0,0,0,0,SXF_TRANSFERPOINTERS)
    stop
  }
}

ACTOR FrozenOrbShardNova
{
   +NOGRAVITY
   +NOINTERACTION
   ReactionTime 91
   States
   {
   Spawn:
   TNT1 A 0
   Looplet:
   TNT1 A 0 A_Countdown
   TNT1 A 0 A_SpawnItemEx("FrozenOrbShardNoGrav",0,0,0,frandom(9.0,12.0),0,0,0,SXF_TRANSFERPOINTERS)
   TNT1 A 0 A_SetAngle(Angle+4)
   Loop
   Death:
   Stop
   }
}

ACTOR FrozenOrbProjectileFade1
{
   Radius 14
   Height 16
   Speed 6
   Damage 0
   Projectile
   +NOGRAVITY
   +RIPPER
   +BLOODLESSIMPACT
   +NOTONAUTOMAP
   Renderstyle Add
   Scale 1.4
   Alpha 0.9
   ReactionTime 24
   States
   {
   Spawn:
   SBLL AA 0 A_Countdown
   SBLL ABCDEFGI 1
   Loop
   Death:
   Stop
   }
}

ACTOR FrozenOrbProjectileFade2 : FrozenOrbProjectileFade1
{
   Scale 1.6
   Alpha 0.7
}

ACTOR FrozenOrbShard
{
  Radius 6
  Height 9
  Damage 3
  Projectile
  +DONTSPLASH
  +EXPLODEONWATER
  -NOGRAVITY
  +BLOODLESSIMPACT
  Gravity 0.1
  Renderstyle Add
  DamageType Ice
  DeathSound ""
  ProjectileKickBack 80
  Obituary "%o was shredded'n'frozen by %k's frozen orb shards."
  Scale 1.1
  States
  {
  Spawn:
  SHRD AA 0 ThrustThingZ(0,frandom(8.0,10.0),0,1)
  Looplet:
  SHRD AAABBBCCC 1 Bright A_SpawnItemEx("FrozenOrbShardTrail",-16,random(2,-2),3+random(2,-2))
  Loop
  Death:
  TNT1 A 0 A_PlaySound("FrozenOrb/Hit",4,0.6)
  TNT1 A 0 A_SpawnItemEx("FrozenShardExploder",0,0,0,0,0,0,0,SXF_TRANSFERPOINTERS) //to shatter the frozen enemies
  ICPR DEFGH 2 Bright
  Stop
  }
}

ACTOR FrozenShardExploder
{
  +NOINTERACTION
  +NOGRAVITY
  +FORCERADIUSDMG
  States
  {
  Spawn:
  TNT1 AA 0 A_Explode(1,16,0,0,16)
  Stop
  }
}

ACTOR FrozenOrbShardNoGrav : FrozenOrbShard
{
  +NOGRAVITY
  States
  {
  Spawn:
  SHRD A 0
  SHRD AAABBBCCC 1 Bright A_SpawnItemEx("FrozenOrbShardTrail",-16,random(2,-2),3+random(2,-2))
  Loop
  }
}

ACTOR FrozenOrbShardTrail
{
  +NOGRAVITY
  +NOINTERACTION
  +NOTONAUTOMAP
  Renderstyle Add
  Scale 1.3
  States
  {
  Spawn:
  SHRD DEFGH 1 Bright A_FadeOut(0.15)
  Stop
  }
}
