actor FrostbiteProjectile
{
  Radius 12
  Height 14
  Speed 18
  Damage 0
  Projectile
  ProjectileKickback 20
  +DONTSPLASH
  +EXPLODEONWATER
  +RIPPER
  +BOUNCEONWALLS
  +BOUNCEONFLOORS
  +BOUNCEONCEILINGS
  +THRUACTORS //+BOUNCEONACTORS
  +BLOODLESSIMPACT
  -NOGRAVITY
  +FORCEXYBILLBOARD
  +USEBOUNCESTATE
  +SEEKERMISSILE
  +ICESHATTER
  Gravity 0.25
  BounceType Doom
  BounceFactor 1.0
  WallBounceFactor 1.0
  BounceCount 10
  //ReactionTime 25
  Renderstyle Add
  DamageType Ice
  DeathSound ""
  ProjectileKickBack 0
  Obituary "%o was directly hit by %k's thingamajib frosty, spikey ball."
  Scale 1.1
  BounceSound "FrozenOrb/Hit"
  var int user_loopz;
  var int user_eatme;
  var int user_spr;
  States
  {
  Spawn:
    TNT1 A 0 NoDelay A_PlaySound("Frostbite/Fly",5,0.8,1)
    TNT1 A 0 A_ChangeVelocity(0,0,2,CVF_RELATIVE)
	TNT1 A 0 A_SetUserVar("user_loopz", 4)
	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 - 3)
  InnerLoopBegin:
	TNT1 A 0 A_SpawnItemEx("FrostbiteShard",random(4,-4),random(4,-4),random(4,-4),user_loopz+frandom(2.0,12.0),0,(user_loopz*0.5)+frandom(-3.5,1.5),frandom(0.0,360.0))
	TNT1 A 0 A_SetUserVar("user_eatme", user_eatme - 3)
	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:
	goto Looplet
	ICEB A 1 Bright
  Bounce:
	TNT1 AAA 0 A_SeekerMissile(90,90,SMF_LOOK|SMF_CURSPEED|SMF_PRECISE,64,2)
	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
  +FORCEXYBILLBOARD
  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 (random(1,3)*7)
  Projectile
  +DONTSPLASH
  +EXPLODEONWATER
  -NOGRAVITY
  +BLOODLESSIMPACT
  +FORCEXYBILLBOARD
  +ICESHATTER
  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
  +FORCEXYBILLBOARD
  Renderstyle Add
  Scale 0.8
  States
  {
  Spawn:
  ICPR ABBCC 1 Bright A_FadeOut(0.15)
  Stop
  }
}

//[DoomKrakken]: Alternate Mode...

actor FrozenOrbProjectile
{
  Radius 14
  Height 16
  Speed 6
  Damage 0
  Projectile
  ProjectileKickback 0
  +DONTSPLASH
  +EXPLODEONWATER
  +RIPPER
  +BLOODLESSIMPACT
  +FORCEXYBILLBOARD
  +BOUNCEONWALLS
  +BOUNCEONCEILINGS
  +BOUNCEONFLOORS
  //+SEEKERMISSILE
  +ICESHATTER
  BounceFactor 1.0
  WallBounceFactor 1.0
  Renderstyle Add
  DamageType Ice
  DeathSound ""
  Obituary "%o was ran over by %k's oversized frost ball of doom."
  Scale 1.3
  ReactionTime 22
  var int user_count;
  States
  {
  Spawn:
    SBLL A 0 NoDelay A_PlaySound("FrozenOrb/Fly",5,0.9,1)
	SBLL A 0 A_SpawnItemEx("FrozenOrbProjectileFade1",0,0,0,0,0,0,0,SXF_SETTARGET|SXF_ORIGINATOR)
	SBLL A 0 A_SpawnItemEx("FrozenOrbProjectileFade2",0,0,0,0,0,0,0,SXF_SETTARGET|SXF_ORIGINATOR)
  Looplet:
    TNT1 A 0 A_Countdown
	//TNT1 AAA 0 A_SeekerMissile(90,90,SMF_LOOK|SMF_CURSPEED|SMF_PRECISE,256,2)
    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
   +FORCEXYBILLBOARD
   +BOUNCEONWALLS
   +BOUNCEONCEILINGS
   +BOUNCEONFLOORS
   BounceFactor 1.0
   WallBounceFactor 1.0
   Renderstyle Add
   Scale 1.4
   Alpha 0.9
   ReactionTime 48
   States
   {
   Spawn:
   SBLL AA 0 A_Countdown
   SBLL ABCDEFGI 1 A_Warp(AAPTR_TARGET,0,0,0,0,WARPF_NOCHECKPOSITION|WARPF_COPYPITCH)
   Loop
   Death:
   Stop
   }
}

ACTOR FrozenOrbProjectileFade2 : FrozenOrbProjectileFade1
{
   Scale 1.6
   Alpha 0.7
}

ACTOR FrozenOrbShard
{
  Radius 6
  Height 9
  Damage 5
  Projectile
  +DONTSPLASH
  +EXPLODEONWATER
  -NOGRAVITY
  +BLOODLESSIMPACT
  +FORCEXYBILLBOARD
  +ICESHATTER
  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
  +ICESHATTER
  Damagetype Ice
  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
  +FORCEXYBILLBOARD
  Renderstyle Add
  Scale 1.3
  States
  {
  Spawn:
  SHRD DEFGH 1 Bright A_FadeOut(0.15)
  Stop
  }
}

//[DoomKrakken]: New Tomed modes...

ACTOR TomedFrostbiteProjectile : FrostbiteProjectile
{
  BounceCount 16
  Damage 4
  States
  {
  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("TomedFrostbiteShard",random(4,-4),random(4,-4),random(4,-4),user_loopz+frandom(2.0,12.0),0,user_loopz+frandom(-3.5,1.5),frandom(0.0,300.0))
	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
  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 AA 0 A_RadiusGive("ChillItMate",33,RGF_MONSTERS|RGF_CORPSES,1)
	TNT1 A 0 A_SpawnItemEx("TomedFrostbiteShard",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 TomedFrostbiteShard : FrostbiteShard
{
  Damage (random(1,3)*10)
  States
  {
  Death:
  TNT1 A 0 A_SpawnItemEx("TomedFrozenShardExploder",0,0,0,0,0,0,0,SXF_TRANSFERPOINTERS) //to shatter the frozen enemies
  ICPR DEFGH 2 Bright
  Stop
  }
}

ACTOR TomedFrozenShardExploder : FrozenShardExploder
{
  States
  {
  Spawn:
  TNT1 AA 0 A_Explode(10,16,0,0,16)
  Stop
  }
}

//[DoomKrakken]: Tomed Alternate Mode

actor TomedFrozenOrbProjectile : FrozenOrbProjectile
{
  ReactionTime 33
  Speed 6
  Damage 8
  DamageType Ice
  Obituary "%o was killed by %k's frozen orb."
  +SEEKERMISSILE
  States
  {
  Spawn:
	SBLL A 0 NoDelay A_PlaySound("FrozenOrb/Fly",5,0.9,1)
	SBLL A 0 A_SpawnItemEx("TomedFrozenOrbProjectileFade1",0,0,0,0,0,0,0,SXF_SETTARGET|SXF_ORIGINATOR)
	SBLL A 0 A_SpawnItemEx("TomedFrozenOrbProjectileFade2",0,0,0,0,0,0,0,SXF_SETTARGET|SXF_ORIGINATOR)
  Looplet:
    TNT1 A 0 A_Countdown
	TNT1 AAA 0 A_SeekerMissile(90,90,SMF_LOOK|SMF_CURSPEED|SMF_PRECISE,256,2)
    TNT1 A 0 A_AlertMonsters //it's still pretty damn loud and visible, you know
	SBLL AAA 0 A_SpawnItemEx("TomedFrozenOrbShard",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("TomedFrozenOrbShard",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("TomedFrozenOrbShard",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("TomedFrozenOrbShard",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("TomedFrozenOrbShard",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("TomedFrozenOrbShard",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("TomedFrozenOrbShard",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("TomedFrozenOrbShard",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("TomedFrozenOrbShard",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
  Looplet2:
	TNT1 A 0 A_JumpIf(User_Count <= 0,"TheEnd")
	TNT1 A 0 A_SpawnItemEx("TomedFrostbiteShard",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("TomedFrozenOrbShardNova",0,0,0,0,0,0,0,SXF_TRANSFERPOINTERS)
    stop
  }
}

ACTOR TomedFrozenOrbShardNova : FrozenOrbShardNova
{
   States
   {
   Looplet:
   TNT1 A 0 A_Countdown
   TNT1 A 0 A_SpawnItemEx("TomedFrozenOrbShardNoGrav",0,0,0,frandom(9.0,12.0),0,0,0,SXF_TRANSFERPOINTERS)
   TNT1 A 0 A_SetAngle(Angle+4)
   Loop
   Death:
   Stop
   }
}

ACTOR TomedFrozenOrbProjectileFade1 : FrozenOrbProjectileFade1
{
	Speed 6
	ReactionTime 72
}

ACTOR TomedFrozenOrbProjectileFade2 : TomedFrozenOrbProjectileFade1
{
   Scale 1.6
   Alpha 0.7
}

ACTOR TomedFrozenOrbShard : FrozenOrbShard
{
  Damage 10
  States
  {
  Death:
  TNT1 A 0 A_PlaySound("FrozenOrb/Hit",4,0.6)
  TNT1 A 0 A_SpawnItemEx("TomedFrozenShardExploder",0,0,0,0,0,0,0,SXF_TRANSFERPOINTERS) //to shatter the frozen enemies
  ICPR DEFGH 2 Bright
  Stop
  }
}

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