actor BlizzardAttackBoss : Weapon
{
Weapon.AmmoUse1 2
Weapon.AmmoUse2 100
Weapon.AmmoGive 0
Weapon.SlotNumber 1
Obituary "%o was frozen by %k's Blizzard Attack."
weapon.ammotype1 "BallAmmo"
weapon.ammotype2 "BallAmmo"
inventory.pickupsound "weapon/weaponup"
+WEAPON.AMMO_OPTIONAL
+DONTBOB
+WEAPON.ALT_AMMO_OPTIONAL
Scale 2.0
States
{
Spawn:
TNT1 A 0
stop
Ready:
BSKI A 0 ACS_ExecuteAlways(998,0,33)
BSKI A 0 A_JumpIfInventory ("BallAmmo",88,"Ready2")
BSKI A 5 A_WeaponReady(WRF_NOSECONDARY|WRF_NOSWITCH)
BSKI A 0 A_GiveInventory ("BallAmmo",1) //slow recharge here,
Goto Ready+1
Ready2:
BSKI A 1 A_WeaponReady(WRF_NOSWITCH)
loop
Deselect:
TNT1 AAAAAAAAAAAAAAAAAAAAAA 0 A_Lower
BSKI A 1 A_Lower
Loop
Select:
TNT1 AAAAAAAAAAAAAAAAAAAAAA 0 A_Raise
BSKI A 1 A_Raise
Loop
Fire:
/*TNT1 A 0 A_JumpIfInventory ("BallAmmo",2,"Blizzard")
goto Ready+1
Blizzard:
BSKI A 0 A_JumpIfNoAmmo("NoAmmo")*/
BSKI A 0 A_PlaySoundEx("weapon/blizzboss","Weapon")
/*BSKI A 0 A_FireCustomMissile("BlizzardAttackAim",random (12,-12),0,random(-52,52),random(-1,10))
BSKI A 0 A_FireCustomMissile("BlizzardAttackAim",random (12,-12),0,random(-52,52),random(-1,10))
BSKI A 0 A_FireCustomMissile("BlizzardAttackAim",random (12,-12),0,random(-52,52),random(-1,10))
BSKI A 0 A_FireCustomMissile("BlizzardAttackAim",random (12,-12),0,random(-52,52),random(-1,10))*/
BSKI A 0 A_FireCustomMissile("BlizzardAttackAim",random (-6,-12),0,random(26,52),random(-1,6))
BSKI A 0 A_FireCustomMissile("BlizzardAttackAim",random (0,-6),0,random(0,26),random(-1,6))
BSKI A 0 A_FireCustomMissile("BlizzardAttackAim",random (6,0),0,random(-26,0),random(-1,6))
BSKI A 0 A_FireCustomMissile("BlizzardAttackAim",random (12,6),0,random(-52,-26),random(-1,6))
BSKI BCDE 3
BSKI A 16
BSKI A 0 A_GiveInventory ("BallAmmo",3)
Goto Ready+1
NoAmmo:
BSKI A 0
//BSKI A 1 ACS_Execute(979,0)
Goto Ready+1
Altfire:
TNT1 A 0 A_JumpIfInventory ("BallAmmo",88,"Checking")
goto Ready+1
Checking:
TNT1 A 0 A_PlaySoundEx("weapon/blizzstyle","Weapon")
TNT1 A 0 SetPlayerProperty(0,1,4)
TNT1 A 0 A_GiveInventory("StayLocked",1)
BSKI A 1 OffSet(0,40)
BSKI A 1 OffSet(0,50)
BSKI A 1 OffSet(0,60)
BSKI A 1 OffSet(0,70)
BSKI A 1 OffSet(0,80)
BSKI A 1 OffSet(0,90)
BSKI A 1 OffSet(0,100)
BSKI A 1 OffSet(0,110)
BSKI A 1 OffSet(0,120)
TNT1 A 1 A_GiveInventory ("Crack",1)
TNT1 A 1 A_TakeInventory ("BallAmmo",88)
Rolling:
TNT1 A 0 A_ChangeFlag("DONTRIP",1)
TNT1 A 0 A_ChangeFlag("SHOOTABLE",0)
TNT1 A 0 A_PlaySoundEx("weapon/blizzbowl","Weapon")
TNT1 A 3 A_SpawnItemEX("BlizzardBallFX",5,1,30,momx,momy,momz)
//TNT1 A 0 A_PlaySoundEx("misc/wilystart","Weapon")
TNT1 A 0 A_GiveInventory ("BallTimer",1)
TNT1 A 0 A_Recoil(-30)
TNT1 A 0 A_GunFlash
TNT1 A 0 A_JumpIfInventory ("BallTimer",35*2,"Catch")
TNT1 A 0 A_GiveInventory ("BallTimer",1)
TNT1 A 0 A_JumpIfInventory ("Crack",1,"Rolling")// restarts if there still is a rolling item in inventory.
Goto Catch
Catch:
TNT1 A 0 SetPlayerProperty(0,0,4)
TNT1 A 0 A_TakeInventory("StayLocked",999)
TNT1 A 0 A_ChangeFlag("DONTRIP",0)
TNT1 A 0 A_ChangeFlag("SHOOTABLE",1)
TNT1 A 1 A_TakeInventory ("BallTimer",999)
Goto Ready+1
Flash:
TNT1 A 0 A_SpawnItemEX("MotionCheck")
TNT1 AAAAAAAAAAAA 2 A_FireBullets (0, 0, 1, 0, "BounceChecker", 0, 43) //checks to see if you hit a wall, only a direct impact works.
stop
NoAmmo:
//BSKI A 1
Goto Ready+1
}
}

actor BallAmmo : Ammo
{
inventory.amount 1
inventory.maxamount 88
}

actor BlizzardAttackAim : MageStaffFX2
{
Translation "196:200=192:192"
PROJECTILE
+SEEKERMISSILE
-EXTREMEDEATH
Radius 8
Height 8
scale 2.5
damage (6)
damagetype "Blizzard"
speed 32
States
{
Spawn:
BLIZ AAAAA 1 A_MStaffTrack
BLIZ A 5
BLIZ B 10
Fly:
BLIZ C 1
loop
Death:
TNT1 A 0
stop
}
}

actor BounceChecker : BulletPuff
{
+PUFFGETSOWNER
States
{
Spawn:
TNT1 A 1
stop
Crash:
TNT1 A 1
TNT1 A 0 A_GiveToTarget("Bounce",1)
stop
}
}

actor Bounce : CustomInventory
{
+INVENTORY.AUTOACTIVATE
states
{
Pickup:
TNT1 A 0
TNT1 A 0 ThrustThingZ(0,70,0,0)
TNT1 A 0 ThrustThing (angle*256/360+128,70,0,0)
TNT1 A 0 A_PlaySoundEx("weapon/blizzstrike","Weapon")
TNT1 A 0 A_TakeInventory("Crack",999)
stop
}
}

actor Crack : Ammo
{
inventory.maxamount 1
inventory.amount 0
}

actor BallTimer : Inventory
{
inventory.maxamount 999
inventory.amount 0
}

actor BlizzardBallFX
{
PROJECTILE
-CLIENTSIDEONLY
+NOGRAVITY
Radius 75
Height 75
scale 5.5
damage (40)
Obituary "%o was Blizzard Bowled by %k."
States
{
Spawn:
BALL ABC 1
stop
XDeath:
Crash:
TNT1 A 0 A_GiveToTarget("Bounce",1)
Stop
Death:
TNT1 A 0
Stop
}
}

actor MotionCheck
{
Height 0
Radius 0
+NOINTERACTION
-SOLID
+NOGRAVITY
+MISSILE
States
{
Spawn:
TNT1 A 0
TNT1 A 2
TNT1 A 1 A_JumpIfCloser(30,"Stopped")
stop
Stopped:
TNT1 A 1 A_TakeFromTarget("Crack",999)
stop
}
}