actor FreezerAmmo : Ammo replaces ShellBox 19316
{
  inventory.pickupmessage "$D3D_FREEZEAMMO"
  inventory.amount 25
  inventory.maxamount 100
  inventory.icon "TNT1A0"
  ammo.backpackamount 25
  ammo.backpackmaxamount 200
  scale 0.5
  +INVENTORY.IGNORESKILL
  states
  {
  Spawn:
    FRZP BCD 1 BRIGHT
    loop
  }
}

actor "Freezethrower" : DefaultDukeWeapon replaces Chainsaw 19317
{
  Weapon.SelectionOrder 15
  Weapon.AmmoUse 1
  Weapon.AmmoGive 15
  Weapon.AmmoType "FreezerAmmo"
  Obituary "%o was chilled out by %k's Freezer."
  Inventory.Pickupmessage "$D3D_FREEZE"
  Inventory.PickupSound "misc/backpack"
  weapon.upsound "chaingun/select"
  weapon.kickback 0
  scale 0.75
  +NOALERT
  Tag " "
  States
  {
  RReady2:
    FRZG A 1 A_WeaponReady
    goto RReady
  NoAmmo:
    FRZG A 5 A_WeaponReady(WRF_NOFIRE)
    FRZG A 5 A_WeaponReady
    TNT1 A 0 A_JumpIfInventory("FreezerAmmo",1,"RReady")
    loop
  Deselect:
    FRZG A 0
    goto Super::Deselect
  Select:
    FRZG A 0
    goto Super::Select
  Fire:
    TNT1 A 0
    TNT1 A 0 A_JumpIfInventory("FreezerAmmo", 1, 2)
    FRZG A 10 A_PlaySound("DRYFIRE", 1)
    Goto NoAmmo
    FRZG A 0 A_GunFlash
    FRZG B 1 bright offset(0, 34) A_PlayWeaponSound("freezer/shoot")
    TNT1 A 0 A_ZoomFactorD3D("d3d_rfreezethrower",0.99)
    FRZG C 1 bright offset(-2, 31) A_FireCustomMissile("FreezerAttack",0.5,1,5,2)
    TNT1 A 0 A_ZoomFactor(1.0)
    FRZG D 1 bright offset(1, 32) A_FireCustomMissile("MonsterAlert",0,0,0)
    FRZG B 1 bright offset(2, 29)
    FRZG C 1 bright offset(0, 30)
    TNT1 A 0 A_TakeInventory("Waiting",10)
    FRZG A 1 bright A_Refire
    Goto RReady
  AltFire:
    TNT1 A 0
    TNT1 A 0 A_JumpIfInventory("FreezerAmmo", 20, 2)
    FRZG A 10 A_PlaySound("DRYFIRE", 1)
    Goto NoAmmo
    TNT1 A 0 A_PlaySound("freezer/charge")
    FRZG BCDBC 1
    FRZG BCDBC 1
    FRZG BCDBC 1
    FRZG BCDBC 1
    FRZG BCDBC 1
    FRZG BCDBC 1
    FRZG BCDBC 1
    FRZG A 0 A_GunFlash
    FRZG A 1 bright offset(0, 34) A_PlayWeaponSound("freezer/shootalt")
    TNT1 A 0 A_ZoomFactorD3D("d3d_rfreezethrower",0.90)
    FRZG B 1 bright A_Recoil(3)
    TNT1 A 0 A_ZoomFactor(1.0)
    FRZG C 1 bright offset(-2, 31) A_FireCustomMissile("FreezerAttackWave",0.5,1,5,2)
    TNT1 A 0 A_TakeInventory("FreezerAmmo",20)
    FRZG D 1 bright offset(1, 32) A_FireCustomMissile("MonsterAlert",0,0,0)
    FRZG B 1 bright offset(2, 29)
    FRZG C 1 bright offset(0, 30) A_PlaySound("freezer/shoot",6)
    TNT1 A 0 A_TakeInventory("Waiting",10)
    FRZG A 1 bright A_Refire
    Goto RReady
  Flash:
  AltFlash:
    TNT1 AAAAAA 1 A_FireCustomMissile("MuzzleFlashFreezer",0,0,random[RIDFX](-2,2))
    stop
  Spawn:
    FRZP A -1
    Stop
  }
}

actor FreezerAttack : ZMissileP
{
  Radius 11
  Height 8
  Speed 20
  Damage (30)
  Projectile
  Obituary "%o was chilled out by %k's Freezer."
  scale 0.1
  damagetype "Ice"
  BounceType "Hexen"
  bouncefactor 1.0
  bouncecount 6
  reactiontime 20
  RenderStyle Add
  +BLOODLESSIMPACT
  +THRUSPECIES
  Species "Dukes"
  +DONTBOUNCEONSHOOTABLES
  +THRUGHOST
  States
  {
  Spawn:
    FRZX AABBCC 1 bright NoDelay {A_SpawnItemEx("WhiteFlare2"); A_SpawnItemEx("Duke_Smoke",random[RIDFX](-4,4),random[RIDFX](-4,4),random[RIDFX](-4,4),frandom[RIDFX](-1,1),frandom[RIDFX](-1,1),frandom[RIDFX](-1,1),0);}
    TNT1 A 0 A_Countdown
    loop
  Death:
    TNT1 A 0
    FRZX A 1 A_SpawnItem("FreezerEffect",-1)
    stop
  }
}

ACTOR FreezerEffect
{
  +NOBLOCKMAP
  +NOTELEPORT
  +NOGRAVITY
  RenderStyle Add
  scale 0.5
  States
  {
  Spawn:
    TNT1 A 0 NoDelay
    DTEL AABBCC 1 Bright A_SpawnItem("WhiteFlare1",0,0)
    DTEL DDEEFF 1 Bright
    Stop
  }
}

actor FrozenTime : Inventory
{
  inventory.amount 0
  inventory.maxamount 5
}

ACTOR DukeIceDrop
{
  Radius 4
  Height 4
  Speed 0
  Projectile
  -NOGRAVITY
  -NOBLOCKMAP
  +CLIENTSIDEONLY
  Gravity 0.5
  scale 0.5
  translation "Ice"
  States
  {
  Spawn:
    GIB6 A 1
    GIB6 B 4
    loop
  Death:
    GIB6 CDEFGH 5
    stop
  }
}

actor FrozenEnemy : ZFrozenEnemy
{
  health 1
  mass 10000
  speed 0
  MONSTER
  +SOLID
  +NOBLOOD
  +FORCEXYBILLBOARD
  +FLOORCLIP
  meleerange 10
  species "frozenenemy"
  damagefactor "Ice", 0.0
  translation "Ice"
  states
  {
  Spawn:
    TNT1 A 0
    TNT1 AAAAAAAAAAAAAAAAAAAA 0 A_SpawnItemEx("Duke_Smoke",Random[RIDFX](-16,16),Random[RIDFX](-16,16),Random[RIDFX](5,56),frandom[RIDFX](-1,1),frandom[RIDFX](-1,1),frandom[RIDFX](-1,1),random[RIDFX](0,360))
    TNT1 AAAAAAAAAAAAAAAAAAAA 0 A_SpawnItemEx("Duke_Smoke",Random[RIDFX](-16,16),Random[RIDFX](-16,16),Random[RIDFX](5,56),frandom[RIDFX](-1,1),frandom[RIDFX](-1,1),frandom[RIDFX](-1,1),random[RIDFX](0,360))
    TNT1 AAAAAAAAAAAAAAAAAAAA 0 A_SpawnItemEx("Duke_Smoke",Random[RIDFX](-16,16),Random[RIDFX](-16,16),Random[RIDFX](5,56),frandom[RIDFX](-1,1),frandom[RIDFX](-1,1),frandom[RIDFX](-1,1),random[RIDFX](0,360))
  Idle:
    TNT1 A 0 A_JumpIf(z - floorz > 50, "FallDie")
    TNT1 A 0 A_ReplaceWithSourceEnemy(50)
    TNT1 A 0 A_SpawnItemEx("DukeIceDrop",Random[RIDFX](-(radius-4),(radius-4)),Random[RIDFX](-(radius-4),(radius-4)),Random[RIDFX](5,(height-6)),0,0,1,0,32)
    TNT1 A 0 A_JumpIfInventory("FrozenTime",5,"Unfreeze")
    TNT1 A 0 A_GiveInventory("FrozenTime",1)
    loop
  FallDie:
    TNT1 A 0 A_CheckFloor("Break")
    TNT1 A 0 A_JumpIf(velz==0,"Break")
    TNT1 A 0 A_ReplaceWithSourceEnemy(1)
    loop
  Break:
    TNT1 A 0
    TNT1 A 0 A_Die
  Death:
  XDeath:
    TNT1 AAAAAAAAAAAAAAAAAAAA 0 A_SpawnItemEx("Duke_Smoke",Random[RIDFX](-16,16),Random[RIDFX](-16,16),Random[RIDFX](5,56),frandom[RIDFX](-1,1),frandom[RIDFX](-1,1),frandom[RIDFX](-1,1),random[RIDFX](0,360))
    TNT1 AAAAAAAAAAAAAAAAAAAA 0 A_SpawnItemEx("Duke_Smoke",Random[RIDFX](-16,16),Random[RIDFX](-16,16),Random[RIDFX](5,56),frandom[RIDFX](-1,1),frandom[RIDFX](-1,1),frandom[RIDFX](-1,1),random[RIDFX](0,360))
    TNT1 AAAAAAAAAAAAAAAAAAAA 0 A_SpawnItemEx("Duke_Smoke",Random[RIDFX](-16,16),Random[RIDFX](-16,16),Random[RIDFX](5,56),frandom[RIDFX](-1,1),frandom[RIDFX](-1,1),frandom[RIDFX](-1,1),random[RIDFX](0,360))
    TNT1 AAAAAAAAAAAAAAAAAAAA 0 A_SpawnItemEx("Duke_Smoke",Random[RIDFX](-16,16),Random[RIDFX](-16,16),Random[RIDFX](5,56),frandom[RIDFX](-1,1),frandom[RIDFX](-1,1),frandom[RIDFX](-1,1),random[RIDFX](0,360))
    TNT1 AAAAAAAAAAAAAAAAAAAA 0 A_SpawnItemEx("Duke_Smoke",Random[RIDFX](-16,16),Random[RIDFX](-16,16),Random[RIDFX](5,56),frandom[RIDFX](-1,1),frandom[RIDFX](-1,1),frandom[RIDFX](-1,1),random[RIDFX](0,360))
    TNT1 A 0 A_DropItems
    TNT1 A 0 A_SpawnItemEx("DukeIceBloodPool")
    TNT1 A 1 A_IceGuyDie
    stop
  Unfreeze:
    TNT1 A 0 A_UnFreeze
    TNT1 A 0 A_Remove(AAPTR_DEFAULT)
    TNT1 A 1
    stop
  }
}

actor FreezerAttackWave : ZMissileP
{
  Radius 11
  Height 8
  Speed 20
  Damage (30)
  Projectile
  Obituary "%o was chilled out by %k's Freezer."
  scale 0.5
  damagetype "Ice"
  reactiontime 5
  RenderStyle Add
  +THRUSPECIES
  Species "Dukes"
  +THRUGHOST
  +BLOODLESSIMPACT
  -NOGRAVITY
  Gravity 0.2
  States
  {
  Spawn:
    FRZX AABBCC 1 bright NoDelay {A_SpawnItemEx("WhiteFlare2"); A_SpawnItemEx("Duke_Smoke",random[RIDFX](-4,4),random[RIDFX](-4,4),random[RIDFX](-4,4),frandom[RIDFX](-1,1),frandom[RIDFX](-1,1),frandom[RIDFX](-1,1),0);}
    TNT1 A 0 A_Countdown
    loop
  Death:
    TNT1 A 0 A_SpawnItem("FreezerEffect",-1)
    TNT1 A 0 A_Custommissile("IceWaveSpawner",  -1*min(z - floorz,64)  ,0,15,CMF_AIMDIRECTION,0)
    TNT1 A 0 A_Custommissile("IceWaveSpawner",  -1*min(z - floorz,64)  ,0,30,CMF_AIMDIRECTION,0)
    TNT1 A 0 A_Custommissile("IceWaveSpawner",  -1*min(z - floorz,64)  ,0,45,CMF_AIMDIRECTION,0)
    TNT1 A 0 A_Custommissile("IceWaveSpawner",  -1*min(z - floorz,64)  ,0,60,CMF_AIMDIRECTION,0)
    TNT1 A 0 A_Custommissile("IceWaveSpawner",  -1*min(z - floorz,64)  ,0,75,CMF_AIMDIRECTION,0)
    TNT1 A 0 A_Custommissile("IceWaveSpawner",  -1*min(z - floorz,64)  ,0,90,CMF_AIMDIRECTION,0)
    TNT1 A 0 A_Custommissile("IceWaveSpawner",  -1*min(z - floorz,64)  ,0,105,CMF_AIMDIRECTION,0)
    TNT1 A 0 A_Custommissile("IceWaveSpawner",  -1*min(z - floorz,64)  ,0,120,CMF_AIMDIRECTION,0)
    TNT1 A 0 A_Custommissile("IceWaveSpawner",  -1*min(z - floorz,64)  ,0,135,CMF_AIMDIRECTION,0)
    TNT1 A 0 A_Custommissile("IceWaveSpawner",  -1*min(z - floorz,64)  ,0,150,CMF_AIMDIRECTION,0)
    TNT1 A 0 A_Custommissile("IceWaveSpawner",  -1*min(z - floorz,64)  ,0,165,CMF_AIMDIRECTION,0)
    TNT1 A 0 A_Custommissile("IceWaveSpawner",  -1*min(z - floorz,64)  ,0,180,CMF_AIMDIRECTION,0)
    TNT1 A 0 A_Custommissile("IceWaveSpawner",  -1*min(z - floorz,64)  ,0,195,CMF_AIMDIRECTION,0)
    TNT1 A 0 A_Custommissile("IceWaveSpawner",  -1*min(z - floorz,64)  ,0,210,CMF_AIMDIRECTION,0)
    TNT1 A 0 A_Custommissile("IceWaveSpawner",  -1*min(z - floorz,64)  ,0,225,CMF_AIMDIRECTION,0)
    TNT1 A 0 A_Custommissile("IceWaveSpawner",  -1*min(z - floorz,64)  ,0,240,CMF_AIMDIRECTION,0)
    TNT1 A 0 A_Custommissile("IceWaveSpawner",  -1*min(z - floorz,64)  ,0,255,CMF_AIMDIRECTION,0)
    TNT1 A 0 A_Custommissile("IceWaveSpawner",  -1*min(z - floorz,64)  ,0,270,CMF_AIMDIRECTION,0)
    TNT1 A 0 A_Custommissile("IceWaveSpawner",  -1*min(z - floorz,64)  ,0,285,CMF_AIMDIRECTION,0)
    TNT1 A 0 A_Custommissile("IceWaveSpawner",  -1*min(z - floorz,64)  ,0,300,CMF_AIMDIRECTION,0)
    TNT1 A 0 A_Custommissile("IceWaveSpawner",  -1*min(z - floorz,64)  ,0,315,CMF_AIMDIRECTION,0)
    TNT1 A 0 A_Custommissile("IceWaveSpawner",  -1*min(z - floorz,64)  ,0,330,CMF_AIMDIRECTION,0)
    TNT1 A 0 A_Custommissile("IceWaveSpawner",  -1*min(z - floorz,64)  ,0,345,CMF_AIMDIRECTION,0)
    TNT1 A 0 A_Custommissile("IceWaveSpawner",  -1*min(z - floorz,64)  ,0,360,CMF_AIMDIRECTION,0)
    TNT1 A 1
    stop
  }
}

ACTOR IceWaveSpawner
{
  Radius 8
  Height 8
  Speed 12
  Damage 0
  Obituary "%o was chilled out by %k's Freezer."
  +RIPPER
  +THRUGHOST
  +STEPMISSILE
  +BLOODLESSIMPACT
  Projectile
  DamageType "Ice"
  reactiontime 10
  +THRUSPECIES
  Species "Dukes"
  States
  {
  Spawn: 
    TNT1 A 0
    TNT1 A 1 Bright A_Custommissile("IceWave")
    TNT1 A 1 A_CountDown
    Loop
  Death:
    TNT1 A 6
    Stop
  }
}

ACTOR IceWave
{
  +FOILINVUL
  Radius 1
  Height 1
  Speed 0
  Damage 1
  PROJECTILE
  XScale 1.0
  YScale 1.5
  Alpha 0.07
  RenderStyle "Add"
  +RIPPER
  +THRUGHOST
  +BLOODLESSIMPACT
  +NOCLIP
  +FORCEYBILLBOARD
  +THRUSPECIES
  Species "Dukes"
  SeeSound "misc/freeze"
  DamageType "Ice"
  States
  {
  Spawn:
    WICE B 2 Bright A_SpawnItem("WhiteFlare2")
    TNT1 A 0 Radius_Quake (1, random[RIDPLAYERAT](5,10), 0, 1, 0)
    WICE C 2 Bright A_SpawnItem("WhiteFlare2",0,0)
    TNT1 A 0 A_SpawnItemEx ("Duke_Smoke",0,0,0,0,0,0,0,160,0)
    TNT1 A 0 ThrustThingZ(0, random[RIDPLAYERAT](2,16), 0, 0)
    WICE D 2 Bright A_Explode(random[RIDPLAYERAT](9,12),128,0)
    TNT1 A 0 Bright A_CustomMissile("Duke_Smoke", 1, 0, random[RIDFX](0, 360), 2, random[RIDFX](50, 130))
    TNT1 A 0 A_SpawnItemEx("Duke_Smoke",random[RIDFX](-8,8),random[RIDFX](-8,8),random[RIDFX](-8,8),frandom[RIDFX](-1,1),frandom[RIDFX](-1,1),frandom[RIDFX](-1,1),0)
    WICE EEEEEEEE 1 Bright A_Fadeout(0.15)
    Stop       
  }
}