actor WishingShieldWep_NormalBar : NormalBar{args 216, 75}
actor WishingShieldWep_ScriptBar : ScriptBar{}
actor WishingShieldWep : BaseMM8BDMWep
{
Weapon.AmmoUse 7
Weapon.AmmoGive 28
Weapon.SlotNumber 7
Inventory.Pickupmessage "$PU_WISHINGSHIELD"
Obituary "$OB_WISHINGSHIELD"
Tag "$TAG_WISHINGSHIELD"
weapon.ammotype "WishingShieldAmmo"
inventory.icon "WSHBICON"
States
{
SpawnLoop:
WSHB Z 1
loop
Ready:
WSHB A 0 ACS_NamedExecuteWithResult("core_weaponcolor",COLOR_WISHINGSHIELD)
WSHB A 0 A_ClearRefire
WSHB A 1 A_WeaponReady
Goto Ready+2
ReadyC: Goto Ready+2
Deselect:
WSHB A 0 A_TakeInventory("ShieldCheck",1)
WSHB G 0 A_TakeInventory("WishingShieldCharge",99)
goto DeselectSwap
Select:
WSHB A 0
goto SelectSwap
Fire:
WSHB A 0 A_JumpIfInventory("ShieldCheck",1,"ShieldThrow")
WSHB A 0 A_JumpIfNoAmmo("NoAmmo")
WSHB A 0 A_TakeInventory("WishingShieldAmmo",7,TIF_NOTAKEINFINITE)
WSHB A 0 A_PlaySoundEx("weapons/mm9/jewelsatelliteactivate", "Weapon")
WSHB A 1 A_GiveInventory("ShieldCheck",1)
WSHB BCDEF 1 A_GiveInventory("WishingShieldCharge",10)
WSHB A 0 A_SpawnItemEx("WishingShieldWarper")
WSHB A 0 A_SpawnItemEx("WishingShieldMobilize")
WSHB GH 2
Shield:
WSHB I 2 A_WeaponReady
WSHB G 0 A_TakeInventory("WishingShieldCharge",1)
WSHB G 0 A_JumpIfInventory("WishingShieldCharge",1,"Shield")
ShieldThrow:
WSHB G 0 A_TakeInventory("WishingShieldCharge",99)
WSHB A 0 A_TakeInventory("ShieldCheck",999)
WSHB I 0 A_PlaySoundEx("misc/sharktorpedo","Weapon")
WSHB J 2 A_SpawnItemEx("WishingShieldThrow",0,0,16)
WSHB JK 2
WSHB K 22
WSHB J 2
goto Ready+1
Altfire:
WSHB A 0 A_JumpIfInventory("ShieldCheck",1,"ShieldThrow")
goto Super::Altfire
NoAmmo:
WSHB A 1 ACS_NamedExecute("core_noammo",0)
WSHB A 0 A_TakeInventory("ShieldCheck",999)
WSHB A 0 A_Refire
goto Ready+1
}
}

actor WishingShieldAmmo : Ammo
{
inventory.amount 1
inventory.maxamount 28
+INVENTORY.IGNORESKILL
}

actor WishingShieldCharge : WeaponCharge
{
	inventory.maxamount 48
}

actor WishingShieldWarper : BasicWatcher
{
var int user_range;
States
{
Spawn:
TNT1 A 0 A_JumpIf(user_range == 80, 2)
TNT1 A 0 A_SetUserVar(user_range, user_range+8)
TNT1 A 0 A_SpawnItemEx("WishingShieldStarFX_1",cos(pitch)    *user_range,0,(-sin(pitch)    *user_range)+32,0,0,0,0)
TNT1 A 0 A_SpawnItemEx("WishingShieldStarFX_1",cos(pitch+45) *user_range,0,(-sin(pitch+45) *user_range)+32,0,0,0,0)
TNT1 A 0 A_SpawnItemEx("WishingShieldStarFX_1",cos(pitch+90) *user_range,0,(-sin(pitch+90) *user_range)+32,0,0,0,0)
TNT1 A 0 A_SpawnItemEx("WishingShieldStarFX_1",cos(pitch+135) *user_range,0,(-sin(pitch+135) *user_range)+32,0,0,0,0)
TNT1 A 0 A_SpawnItemEx("WishingShieldStarFX_1",cos(pitch+180)*user_range,0,(-sin(pitch+180)*user_range)+32,0,0,0,0)
TNT1 A 0 A_SpawnItemEx("WishingShieldStarFX_1",cos(pitch+225)*user_range,0,(-sin(pitch+225)*user_range)+32,0,0,0,0)
TNT1 A 0 A_SpawnItemEx("WishingShieldStarFX_1",cos(pitch+270)*user_range,0,(-sin(pitch+270)*user_range)+32,0,0,0,0)
TNT1 A 0 A_SpawnItemEx("WishingShieldStarFX_1",cos(pitch+315)*user_range,0,(-sin(pitch+315)*user_range)+32,0,0,0,0)
TNT1 A 0 A_Warp(AAPTR_TARGET, 0, 0, 0, 0, WARPF_INTERPOLATE|WARPF_NOCHECKPOSITION)
TNT1 A 1 A_SetPitch(pitch%360+10)
TNT1 A 0 A_JumpIf(user_range == 80, 2)
TNT1 A 0 A_SetUserVar(user_range, user_range+8)
TNT1 A 0 A_SpawnItemEx("WishingShieldStarFX_1",cos(pitch)    *user_range,0,(-sin(pitch)    *user_range)+32,0,0,0,0)
TNT1 A 0 A_SpawnItemEx("WishingShieldStarFX_1",cos(pitch+45) *user_range,0,(-sin(pitch+45) *user_range)+32,0,0,0,0)
TNT1 A 0 A_SpawnItemEx("WishingShieldStarFX_1",cos(pitch+90) *user_range,0,(-sin(pitch+90) *user_range)+32,0,0,0,0)
TNT1 A 0 A_SpawnItemEx("WishingShieldStarFX_1",cos(pitch+135) *user_range,0,(-sin(pitch+135) *user_range)+32,0,0,0,0)
TNT1 A 0 A_SpawnItemEx("WishingShieldStarFX_1",cos(pitch+180)*user_range,0,(-sin(pitch+180)*user_range)+32,0,0,0,0)
TNT1 A 0 A_SpawnItemEx("WishingShieldStarFX_1",cos(pitch+225)*user_range,0,(-sin(pitch+225)*user_range)+32,0,0,0,0)
TNT1 A 0 A_SpawnItemEx("WishingShieldStarFX_1",cos(pitch+270)*user_range,0,(-sin(pitch+270)*user_range)+32,0,0,0,0)
TNT1 A 0 A_SpawnItemEx("WishingShieldStarFX_1",cos(pitch+315)*user_range,0,(-sin(pitch+315)*user_range)+32,0,0,0,0)
TNT1 A 0 A_Warp(AAPTR_TARGET, 0, 0, 0, 0, WARPF_INTERPOLATE|WARPF_NOCHECKPOSITION)
TNT1 A 1 A_SetPitch(pitch%360+10)
TNT1 A 0 A_JumpIfInTargetInventory("WishingShieldCharge",1,2)
goto Death
TNT1 A 0

TNT1 A 0 A_JumpIf(user_range == 80, 2)
TNT1 A 0 A_SetUserVar(user_range, user_range+8)
TNT1 A 0 A_SpawnItemEx("WishingShieldStarFX_2",cos(pitch)    *user_range,0,(-sin(pitch)    *user_range)+32,0,0,0,0)
TNT1 A 0 A_SpawnItemEx("WishingShieldStarFX_2",cos(pitch+45) *user_range,0,(-sin(pitch+45) *user_range)+32,0,0,0,0)
TNT1 A 0 A_SpawnItemEx("WishingShieldStarFX_2",cos(pitch+90) *user_range,0,(-sin(pitch+90) *user_range)+32,0,0,0,0)
TNT1 A 0 A_SpawnItemEx("WishingShieldStarFX_2",cos(pitch+135) *user_range,0,(-sin(pitch+135) *user_range)+32,0,0,0,0)
TNT1 A 0 A_SpawnItemEx("WishingShieldStarFX_2",cos(pitch+180)*user_range,0,(-sin(pitch+180)*user_range)+32,0,0,0,0)
TNT1 A 0 A_SpawnItemEx("WishingShieldStarFX_2",cos(pitch+225)*user_range,0,(-sin(pitch+225)*user_range)+32,0,0,0,0)
TNT1 A 0 A_SpawnItemEx("WishingShieldStarFX_2",cos(pitch+270)*user_range,0,(-sin(pitch+270)*user_range)+32,0,0,0,0)
TNT1 A 0 A_SpawnItemEx("WishingShieldStarFX_2",cos(pitch+315)*user_range,0,(-sin(pitch+315)*user_range)+32,0,0,0,0)
TNT1 A 0 A_Warp(AAPTR_TARGET, 0, 0, 0, 0, WARPF_INTERPOLATE|WARPF_NOCHECKPOSITION)
TNT1 A 1 A_SetPitch(pitch%360+10)
TNT1 A 0 A_JumpIf(user_range == 80, 2)
TNT1 A 0 A_SetUserVar(user_range, user_range+8)
TNT1 A 0 A_SpawnItemEx("WishingShieldStarFX_2",cos(pitch)    *user_range,0,(-sin(pitch)    *user_range)+32,0,0,0,0)
TNT1 A 0 A_SpawnItemEx("WishingShieldStarFX_2",cos(pitch+45) *user_range,0,(-sin(pitch+45) *user_range)+32,0,0,0,0)
TNT1 A 0 A_SpawnItemEx("WishingShieldStarFX_2",cos(pitch+90) *user_range,0,(-sin(pitch+90) *user_range)+32,0,0,0,0)
TNT1 A 0 A_SpawnItemEx("WishingShieldStarFX_2",cos(pitch+135) *user_range,0,(-sin(pitch+135) *user_range)+32,0,0,0,0)
TNT1 A 0 A_SpawnItemEx("WishingShieldStarFX_2",cos(pitch+180)*user_range,0,(-sin(pitch+180)*user_range)+32,0,0,0,0)
TNT1 A 0 A_SpawnItemEx("WishingShieldStarFX_2",cos(pitch+225)*user_range,0,(-sin(pitch+225)*user_range)+32,0,0,0,0)
TNT1 A 0 A_SpawnItemEx("WishingShieldStarFX_2",cos(pitch+270)*user_range,0,(-sin(pitch+270)*user_range)+32,0,0,0,0)
TNT1 A 0 A_SpawnItemEx("WishingShieldStarFX_2",cos(pitch+315)*user_range,0,(-sin(pitch+315)*user_range)+32,0,0,0,0)
TNT1 A 0 A_Warp(AAPTR_TARGET, 0, 0, 0, 0, WARPF_INTERPOLATE|WARPF_NOCHECKPOSITION)
TNT1 A 1 A_SetPitch(pitch%360+10)
TNT1 A 0 A_JumpIfInTargetInventory("WishingShieldCharge",1,2)
goto Death
TNT1 A 0

TNT1 A 0 A_JumpIf(user_range == 80, 2)
TNT1 A 0 A_SetUserVar(user_range, user_range+8)
TNT1 A 0 A_SpawnItemEx("WishingShieldStarFX_3",cos(pitch)    *user_range,0,(-sin(pitch)    *user_range)+32,0,0,0,0)
TNT1 A 0 A_SpawnItemEx("WishingShieldStarFX_3",cos(pitch+45) *user_range,0,(-sin(pitch+45) *user_range)+32,0,0,0,0)
TNT1 A 0 A_SpawnItemEx("WishingShieldStarFX_3",cos(pitch+90) *user_range,0,(-sin(pitch+90) *user_range)+32,0,0,0,0)
TNT1 A 0 A_SpawnItemEx("WishingShieldStarFX_3",cos(pitch+135) *user_range,0,(-sin(pitch+135) *user_range)+32,0,0,0,0)
TNT1 A 0 A_SpawnItemEx("WishingShieldStarFX_3",cos(pitch+180)*user_range,0,(-sin(pitch+180)*user_range)+32,0,0,0,0)
TNT1 A 0 A_SpawnItemEx("WishingShieldStarFX_3",cos(pitch+225)*user_range,0,(-sin(pitch+225)*user_range)+32,0,0,0,0)
TNT1 A 0 A_SpawnItemEx("WishingShieldStarFX_3",cos(pitch+270)*user_range,0,(-sin(pitch+270)*user_range)+32,0,0,0,0)
TNT1 A 0 A_SpawnItemEx("WishingShieldStarFX_3",cos(pitch+315)*user_range,0,(-sin(pitch+315)*user_range)+32,0,0,0,0)
TNT1 A 0 A_Warp(AAPTR_TARGET, 0, 0, 0, 0, WARPF_INTERPOLATE|WARPF_NOCHECKPOSITION)
TNT1 A 1 A_SetPitch(pitch%360+10)
TNT1 A 0 A_JumpIf(user_range == 80, 2)
TNT1 A 0 A_SetUserVar(user_range, user_range+8)
TNT1 A 0 A_SpawnItemEx("WishingShieldStarFX_3",cos(pitch)    *user_range,0,(-sin(pitch)    *user_range)+32,0,0,0,0)
TNT1 A 0 A_SpawnItemEx("WishingShieldStarFX_3",cos(pitch+45) *user_range,0,(-sin(pitch+45) *user_range)+32,0,0,0,0)
TNT1 A 0 A_SpawnItemEx("WishingShieldStarFX_3",cos(pitch+90) *user_range,0,(-sin(pitch+90) *user_range)+32,0,0,0,0)
TNT1 A 0 A_SpawnItemEx("WishingShieldStarFX_3",cos(pitch+135) *user_range,0,(-sin(pitch+135) *user_range)+32,0,0,0,0)
TNT1 A 0 A_SpawnItemEx("WishingShieldStarFX_3",cos(pitch+180)*user_range,0,(-sin(pitch+180)*user_range)+32,0,0,0,0)
TNT1 A 0 A_SpawnItemEx("WishingShieldStarFX_3",cos(pitch+225)*user_range,0,(-sin(pitch+225)*user_range)+32,0,0,0,0)
TNT1 A 0 A_SpawnItemEx("WishingShieldStarFX_3",cos(pitch+270)*user_range,0,(-sin(pitch+270)*user_range)+32,0,0,0,0)
TNT1 A 0 A_SpawnItemEx("WishingShieldStarFX_3",cos(pitch+315)*user_range,0,(-sin(pitch+315)*user_range)+32,0,0,0,0)
TNT1 A 0 A_Warp(AAPTR_TARGET, 0, 0, 0, 0, WARPF_INTERPOLATE|WARPF_NOCHECKPOSITION)
TNT1 A 1 A_SetPitch(pitch%360+10)
TNT1 A 0 A_JumpIfInTargetInventory("WishingShieldCharge",1,2)
goto Death
TNT1 A 0

TNT1 A 0 A_JumpIf(user_range == 80, 2)
TNT1 A 0 A_SetUserVar(user_range, user_range+8)
TNT1 A 0 A_SpawnItemEx("WishingShieldStarFX_4",cos(pitch)    *user_range,0,(-sin(pitch)    *user_range)+32,0,0,0,0)
TNT1 A 0 A_SpawnItemEx("WishingShieldStarFX_4",cos(pitch+45) *user_range,0,(-sin(pitch+45) *user_range)+32,0,0,0,0)
TNT1 A 0 A_SpawnItemEx("WishingShieldStarFX_4",cos(pitch+90) *user_range,0,(-sin(pitch+90) *user_range)+32,0,0,0,0)
TNT1 A 0 A_SpawnItemEx("WishingShieldStarFX_4",cos(pitch+135) *user_range,0,(-sin(pitch+135) *user_range)+32,0,0,0,0)
TNT1 A 0 A_SpawnItemEx("WishingShieldStarFX_4",cos(pitch+180)*user_range,0,(-sin(pitch+180)*user_range)+32,0,0,0,0)
TNT1 A 0 A_SpawnItemEx("WishingShieldStarFX_4",cos(pitch+225)*user_range,0,(-sin(pitch+225)*user_range)+32,0,0,0,0)
TNT1 A 0 A_SpawnItemEx("WishingShieldStarFX_4",cos(pitch+270)*user_range,0,(-sin(pitch+270)*user_range)+32,0,0,0,0)
TNT1 A 0 A_SpawnItemEx("WishingShieldStarFX_4",cos(pitch+315)*user_range,0,(-sin(pitch+315)*user_range)+32,0,0,0,0)
TNT1 A 0 A_Warp(AAPTR_TARGET, 0, 0, 0, 0, WARPF_INTERPOLATE|WARPF_NOCHECKPOSITION)
TNT1 A 1 A_SetPitch(pitch%360+10)
TNT1 A 0 A_JumpIf(user_range == 80, 2)
TNT1 A 0 A_SetUserVar(user_range, user_range+8)
TNT1 A 0 A_SpawnItemEx("WishingShieldStarFX_4",cos(pitch)    *user_range,0,(-sin(pitch)    *user_range)+32,0,0,0,0)
TNT1 A 0 A_SpawnItemEx("WishingShieldStarFX_4",cos(pitch+45) *user_range,0,(-sin(pitch+45) *user_range)+32,0,0,0,0)
TNT1 A 0 A_SpawnItemEx("WishingShieldStarFX_4",cos(pitch+90) *user_range,0,(-sin(pitch+90) *user_range)+32,0,0,0,0)
TNT1 A 0 A_SpawnItemEx("WishingShieldStarFX_4",cos(pitch+135) *user_range,0,(-sin(pitch+135) *user_range)+32,0,0,0,0)
TNT1 A 0 A_SpawnItemEx("WishingShieldStarFX_4",cos(pitch+180)*user_range,0,(-sin(pitch+180)*user_range)+32,0,0,0,0)
TNT1 A 0 A_SpawnItemEx("WishingShieldStarFX_4",cos(pitch+225)*user_range,0,(-sin(pitch+225)*user_range)+32,0,0,0,0)
TNT1 A 0 A_SpawnItemEx("WishingShieldStarFX_4",cos(pitch+270)*user_range,0,(-sin(pitch+270)*user_range)+32,0,0,0,0)
TNT1 A 0 A_SpawnItemEx("WishingShieldStarFX_4",cos(pitch+315)*user_range,0,(-sin(pitch+315)*user_range)+32,0,0,0,0)
TNT1 A 0 A_Warp(AAPTR_TARGET, 0, 0, 0, 0, WARPF_INTERPOLATE|WARPF_NOCHECKPOSITION)
TNT1 A 1 A_SetPitch(pitch%360+10)
TNT1 A 0 A_JumpIfInTargetInventory("WishingShieldCharge",1,2)
goto Death
TNT1 A 0

TNT1 A 0 A_JumpIf(user_range == 80, 2)
TNT1 A 0 A_SetUserVar(user_range, user_range+8)
TNT1 A 0 A_SpawnItemEx("WishingShieldStarFX_5",cos(pitch)    *user_range,0,(-sin(pitch)    *user_range)+32,0,0,0,0)
TNT1 A 0 A_SpawnItemEx("WishingShieldStarFX_5",cos(pitch+45) *user_range,0,(-sin(pitch+45) *user_range)+32,0,0,0,0)
TNT1 A 0 A_SpawnItemEx("WishingShieldStarFX_5",cos(pitch+90) *user_range,0,(-sin(pitch+90) *user_range)+32,0,0,0,0)
TNT1 A 0 A_SpawnItemEx("WishingShieldStarFX_5",cos(pitch+135) *user_range,0,(-sin(pitch+135) *user_range)+32,0,0,0,0)
TNT1 A 0 A_SpawnItemEx("WishingShieldStarFX_5",cos(pitch+180)*user_range,0,(-sin(pitch+180)*user_range)+32,0,0,0,0)
TNT1 A 0 A_SpawnItemEx("WishingShieldStarFX_5",cos(pitch+225)*user_range,0,(-sin(pitch+225)*user_range)+32,0,0,0,0)
TNT1 A 0 A_SpawnItemEx("WishingShieldStarFX_5",cos(pitch+270)*user_range,0,(-sin(pitch+270)*user_range)+32,0,0,0,0)
TNT1 A 0 A_SpawnItemEx("WishingShieldStarFX_5",cos(pitch+315)*user_range,0,(-sin(pitch+315)*user_range)+32,0,0,0,0)
TNT1 A 0 A_Warp(AAPTR_TARGET, 0, 0, 0, 0, WARPF_INTERPOLATE|WARPF_NOCHECKPOSITION)
TNT1 A 1 A_SetPitch(pitch%360+10)
TNT1 A 0 A_JumpIf(user_range == 80, 2)
TNT1 A 0 A_SetUserVar(user_range, user_range+8)
TNT1 A 0 A_SpawnItemEx("WishingShieldStarFX_5",cos(pitch)    *user_range,0,(-sin(pitch)    *user_range)+32,0,0,0,0)
TNT1 A 0 A_SpawnItemEx("WishingShieldStarFX_5",cos(pitch+45) *user_range,0,(-sin(pitch+45) *user_range)+32,0,0,0,0)
TNT1 A 0 A_SpawnItemEx("WishingShieldStarFX_5",cos(pitch+90) *user_range,0,(-sin(pitch+90) *user_range)+32,0,0,0,0)
TNT1 A 0 A_SpawnItemEx("WishingShieldStarFX_5",cos(pitch+135) *user_range,0,(-sin(pitch+135) *user_range)+32,0,0,0,0)
TNT1 A 0 A_SpawnItemEx("WishingShieldStarFX_5",cos(pitch+180)*user_range,0,(-sin(pitch+180)*user_range)+32,0,0,0,0)
TNT1 A 0 A_SpawnItemEx("WishingShieldStarFX_5",cos(pitch+225)*user_range,0,(-sin(pitch+225)*user_range)+32,0,0,0,0)
TNT1 A 0 A_SpawnItemEx("WishingShieldStarFX_5",cos(pitch+270)*user_range,0,(-sin(pitch+270)*user_range)+32,0,0,0,0)
TNT1 A 0 A_SpawnItemEx("WishingShieldStarFX_5",cos(pitch+315)*user_range,0,(-sin(pitch+315)*user_range)+32,0,0,0,0)
TNT1 A 0 A_Warp(AAPTR_TARGET, 0, 0, 0, 0, WARPF_INTERPOLATE|WARPF_NOCHECKPOSITION)
TNT1 A 1 A_SetPitch(pitch%360+10)
TNT1 A 0 A_JumpIfInTargetInventory("WishingShieldCharge",1,2)
goto Death
TNT1 A 0

TNT1 A 0 A_JumpIf(user_range == 80, 2)
TNT1 A 0 A_SetUserVar(user_range, user_range+8)
TNT1 A 0 A_SpawnItemEx("WishingShieldStarFX_6",cos(pitch)    *user_range,0,(-sin(pitch)    *user_range)+32,0,0,0,0)
TNT1 A 0 A_SpawnItemEx("WishingShieldStarFX_6",cos(pitch+45) *user_range,0,(-sin(pitch+45) *user_range)+32,0,0,0,0)
TNT1 A 0 A_SpawnItemEx("WishingShieldStarFX_6",cos(pitch+90) *user_range,0,(-sin(pitch+90) *user_range)+32,0,0,0,0)
TNT1 A 0 A_SpawnItemEx("WishingShieldStarFX_6",cos(pitch+135) *user_range,0,(-sin(pitch+135) *user_range)+32,0,0,0,0)
TNT1 A 0 A_SpawnItemEx("WishingShieldStarFX_6",cos(pitch+180)*user_range,0,(-sin(pitch+180)*user_range)+32,0,0,0,0)
TNT1 A 0 A_SpawnItemEx("WishingShieldStarFX_6",cos(pitch+225)*user_range,0,(-sin(pitch+225)*user_range)+32,0,0,0,0)
TNT1 A 0 A_SpawnItemEx("WishingShieldStarFX_6",cos(pitch+270)*user_range,0,(-sin(pitch+270)*user_range)+32,0,0,0,0)
TNT1 A 0 A_SpawnItemEx("WishingShieldStarFX_6",cos(pitch+315)*user_range,0,(-sin(pitch+315)*user_range)+32,0,0,0,0)
TNT1 A 0 A_Warp(AAPTR_TARGET, 0, 0, 0, 0, WARPF_INTERPOLATE|WARPF_NOCHECKPOSITION)
TNT1 A 1 A_SetPitch(pitch%360+10)
TNT1 A 0 A_JumpIf(user_range == 80, 2)
TNT1 A 0 A_SetUserVar(user_range, user_range+8)
TNT1 A 0 A_SpawnItemEx("WishingShieldStarFX_6",cos(pitch)    *user_range,0,(-sin(pitch)    *user_range)+32,0,0,0,0)
TNT1 A 0 A_SpawnItemEx("WishingShieldStarFX_6",cos(pitch+45) *user_range,0,(-sin(pitch+45) *user_range)+32,0,0,0,0)
TNT1 A 0 A_SpawnItemEx("WishingShieldStarFX_6",cos(pitch+90) *user_range,0,(-sin(pitch+90) *user_range)+32,0,0,0,0)
TNT1 A 0 A_SpawnItemEx("WishingShieldStarFX_6",cos(pitch+135) *user_range,0,(-sin(pitch+135) *user_range)+32,0,0,0,0)
TNT1 A 0 A_SpawnItemEx("WishingShieldStarFX_6",cos(pitch+180)*user_range,0,(-sin(pitch+180)*user_range)+32,0,0,0,0)
TNT1 A 0 A_SpawnItemEx("WishingShieldStarFX_6",cos(pitch+225)*user_range,0,(-sin(pitch+225)*user_range)+32,0,0,0,0)
TNT1 A 0 A_SpawnItemEx("WishingShieldStarFX_6",cos(pitch+270)*user_range,0,(-sin(pitch+270)*user_range)+32,0,0,0,0)
TNT1 A 0 A_SpawnItemEx("WishingShieldStarFX_6",cos(pitch+315)*user_range,0,(-sin(pitch+315)*user_range)+32,0,0,0,0)
TNT1 A 0 A_Warp(AAPTR_TARGET, 0, 0, 0, 0, WARPF_INTERPOLATE|WARPF_NOCHECKPOSITION)
TNT1 A 1 A_SetPitch(pitch%360+10)
TNT1 A 0 A_JumpIfInTargetInventory("WishingShieldCharge",1,2)
goto Death
TNT1 A 0

TNT1 A 0 A_JumpIf(user_range == 80, 2)
TNT1 A 0 A_SetUserVar(user_range, user_range+8)
TNT1 A 0 A_SpawnItemEx("WishingShieldStarFX_7",cos(pitch)    *user_range,0,(-sin(pitch)    *user_range)+32,0,0,0,0)
TNT1 A 0 A_SpawnItemEx("WishingShieldStarFX_7",cos(pitch+45) *user_range,0,(-sin(pitch+45) *user_range)+32,0,0,0,0)
TNT1 A 0 A_SpawnItemEx("WishingShieldStarFX_7",cos(pitch+90) *user_range,0,(-sin(pitch+90) *user_range)+32,0,0,0,0)
TNT1 A 0 A_SpawnItemEx("WishingShieldStarFX_7",cos(pitch+135) *user_range,0,(-sin(pitch+135) *user_range)+32,0,0,0,0)
TNT1 A 0 A_SpawnItemEx("WishingShieldStarFX_7",cos(pitch+180)*user_range,0,(-sin(pitch+180)*user_range)+32,0,0,0,0)
TNT1 A 0 A_SpawnItemEx("WishingShieldStarFX_7",cos(pitch+225)*user_range,0,(-sin(pitch+225)*user_range)+32,0,0,0,0)
TNT1 A 0 A_SpawnItemEx("WishingShieldStarFX_7",cos(pitch+270)*user_range,0,(-sin(pitch+270)*user_range)+32,0,0,0,0)
TNT1 A 0 A_SpawnItemEx("WishingShieldStarFX_7",cos(pitch+315)*user_range,0,(-sin(pitch+315)*user_range)+32,0,0,0,0)
TNT1 A 0 A_Warp(AAPTR_TARGET, 0, 0, 0, 0, WARPF_INTERPOLATE|WARPF_NOCHECKPOSITION)
TNT1 A 1 A_SetPitch(pitch%360+10)
TNT1 A 0 A_JumpIf(user_range == 80, 2)
TNT1 A 0 A_SetUserVar(user_range, user_range+8)
TNT1 A 0 A_SpawnItemEx("WishingShieldStarFX_7",cos(pitch)    *user_range,0,(-sin(pitch)    *user_range)+32,0,0,0,0)
TNT1 A 0 A_SpawnItemEx("WishingShieldStarFX_7",cos(pitch+45) *user_range,0,(-sin(pitch+45) *user_range)+32,0,0,0,0)
TNT1 A 0 A_SpawnItemEx("WishingShieldStarFX_7",cos(pitch+90) *user_range,0,(-sin(pitch+90) *user_range)+32,0,0,0,0)
TNT1 A 0 A_SpawnItemEx("WishingShieldStarFX_7",cos(pitch+135) *user_range,0,(-sin(pitch+135) *user_range)+32,0,0,0,0)
TNT1 A 0 A_SpawnItemEx("WishingShieldStarFX_7",cos(pitch+180)*user_range,0,(-sin(pitch+180)*user_range)+32,0,0,0,0)
TNT1 A 0 A_SpawnItemEx("WishingShieldStarFX_7",cos(pitch+225)*user_range,0,(-sin(pitch+225)*user_range)+32,0,0,0,0)
TNT1 A 0 A_SpawnItemEx("WishingShieldStarFX_7",cos(pitch+270)*user_range,0,(-sin(pitch+270)*user_range)+32,0,0,0,0)
TNT1 A 0 A_SpawnItemEx("WishingShieldStarFX_7",cos(pitch+315)*user_range,0,(-sin(pitch+315)*user_range)+32,0,0,0,0)
TNT1 A 0 A_Warp(AAPTR_TARGET, 0, 0, 0, 0, WARPF_INTERPOLATE|WARPF_NOCHECKPOSITION)
TNT1 A 1 A_SetPitch(pitch%360+10)
TNT1 A 0 A_JumpIfInTargetInventory("WishingShieldCharge",1,2)
goto Death
TNT1 A 0

TNT1 A 0 A_JumpIf(user_range == 80, 2)
TNT1 A 0 A_SetUserVar(user_range, user_range+8)
TNT1 A 0 A_SpawnItemEx("WishingShieldStarFX_8",cos(pitch)    *user_range,0,(-sin(pitch)    *user_range)+32,0,0,0,0)
TNT1 A 0 A_SpawnItemEx("WishingShieldStarFX_8",cos(pitch+45) *user_range,0,(-sin(pitch+45) *user_range)+32,0,0,0,0)
TNT1 A 0 A_SpawnItemEx("WishingShieldStarFX_8",cos(pitch+90) *user_range,0,(-sin(pitch+90) *user_range)+32,0,0,0,0)
TNT1 A 0 A_SpawnItemEx("WishingShieldStarFX_8",cos(pitch+135) *user_range,0,(-sin(pitch+135) *user_range)+32,0,0,0,0)
TNT1 A 0 A_SpawnItemEx("WishingShieldStarFX_8",cos(pitch+180)*user_range,0,(-sin(pitch+180)*user_range)+32,0,0,0,0)
TNT1 A 0 A_SpawnItemEx("WishingShieldStarFX_8",cos(pitch+225)*user_range,0,(-sin(pitch+225)*user_range)+32,0,0,0,0)
TNT1 A 0 A_SpawnItemEx("WishingShieldStarFX_8",cos(pitch+270)*user_range,0,(-sin(pitch+270)*user_range)+32,0,0,0,0)
TNT1 A 0 A_SpawnItemEx("WishingShieldStarFX_8",cos(pitch+315)*user_range,0,(-sin(pitch+315)*user_range)+32,0,0,0,0)
TNT1 A 0 A_Warp(AAPTR_TARGET, 0, 0, 0, 0, WARPF_INTERPOLATE|WARPF_NOCHECKPOSITION)
TNT1 A 1 A_SetPitch(pitch%360+10)
TNT1 A 0 A_JumpIf(user_range == 80, 2)
TNT1 A 0 A_SetUserVar(user_range, user_range+8)
TNT1 A 0 A_SpawnItemEx("WishingShieldStarFX_8",cos(pitch)    *user_range,0,(-sin(pitch)    *user_range)+32,0,0,0,0)
TNT1 A 0 A_SpawnItemEx("WishingShieldStarFX_8",cos(pitch+45) *user_range,0,(-sin(pitch+45) *user_range)+32,0,0,0,0)
TNT1 A 0 A_SpawnItemEx("WishingShieldStarFX_8",cos(pitch+90) *user_range,0,(-sin(pitch+90) *user_range)+32,0,0,0,0)
TNT1 A 0 A_SpawnItemEx("WishingShieldStarFX_8",cos(pitch+135) *user_range,0,(-sin(pitch+135) *user_range)+32,0,0,0,0)
TNT1 A 0 A_SpawnItemEx("WishingShieldStarFX_8",cos(pitch+180)*user_range,0,(-sin(pitch+180)*user_range)+32,0,0,0,0)
TNT1 A 0 A_SpawnItemEx("WishingShieldStarFX_8",cos(pitch+225)*user_range,0,(-sin(pitch+225)*user_range)+32,0,0,0,0)
TNT1 A 0 A_SpawnItemEx("WishingShieldStarFX_8",cos(pitch+270)*user_range,0,(-sin(pitch+270)*user_range)+32,0,0,0,0)
TNT1 A 0 A_SpawnItemEx("WishingShieldStarFX_8",cos(pitch+315)*user_range,0,(-sin(pitch+315)*user_range)+32,0,0,0,0)
TNT1 A 0 A_Warp(AAPTR_TARGET, 0, 0, 0, 0, WARPF_INTERPOLATE|WARPF_NOCHECKPOSITION)
TNT1 A 1 A_SetPitch(pitch%360+10)
TNT1 A 0 A_JumpIfInTargetInventory("WishingShieldCharge",1,1)
goto Death
TNT1 A 0
loop
Death:
TNT1 A 0
stop
}
}

actor WishingShieldProtect : PowerProtection
{
Powerup.Duration 4
damagefactor "WishingShield", 0.0
}

actor WishingShieldRecoil : CustomInventory 
{
states
{
Pickup:
TNT1 A 0 A_PlaySoundEx("weapons/mmv/breakdashimpact", "body")
TNT1 A 0 A_ChangeVelocity(-15*cos(pitch), 0, -8*sin(-pitch)+5, CVF_RELATIVE|CVF_REPLACE)
stop
}
}

actor WishingShieldStarFX_1 : BasicExplosion
{
damagetype "WishingShield"
Obituary "$OB_WISHINGSHIELD"
    States
    {
    Spawn:
        TNT1 A 0
		TNT1 L 0 A_Explode(CallACS("vile_cbm_damage",13),32,0,0,32)
		WSHB L 1
        stop
    }
}
actor WishingShieldStarFX_2 : WishingShieldStarFX_1
{
    States
    {
    Spawn:
        TNT1 A 0
		TNT1 L 0 A_Explode(CallACS("vile_cbm_damage",13),32,0,0,32)
        WSHB M 1 
        stop
    }
}
actor WishingShieldStarFX_3 : WishingShieldStarFX_1
{
    States
    {
    Spawn:
        TNT1 A 0
		TNT1 L 0 A_Explode(CallACS("vile_cbm_damage",13),32,0,0,32)
        WSHB N 1 
        stop
    }
}
actor WishingShieldStarFX_4 : WishingShieldStarFX_1
{
    States
    {
    Spawn:
        TNT1 A 0
		TNT1 L 0 A_Explode(CallACS("vile_cbm_damage",13),32,0,0,32)
        WSHB O 1 
        stop
    }
}
actor WishingShieldStarFX_5 : WishingShieldStarFX_1
{
    States
    {
    Spawn:
        TNT1 A 0
		TNT1 L 0 A_Explode(CallACS("vile_cbm_damage",13),32,0,0,32)
        WSHB P 1 
        stop
    }
}
actor WishingShieldStarFX_6 : WishingShieldStarFX_1
{
    States
    {
    Spawn:
        TNT1 A 0
		TNT1 L 0 A_Explode(CallACS("vile_cbm_damage",13),32,0,0,32)
        WSHB Q 1 
        stop
    }
}
actor WishingShieldStarFX_7 : WishingShieldStarFX_1
{
    States
    {
    Spawn:
        TNT1 A 0
		TNT1 L 0 A_Explode(CallACS("vile_cbm_damage",13),32,0,0,32)
        WSHB R 1 
        stop
    }
}
actor WishingShieldStarFX_8 : WishingShieldStarFX_1
{
    States
    {
    Spawn:
        TNT1 A 0
		TNT1 L 0 A_Explode(CallACS("vile_cbm_damage",13),32,0,0,32)
        WSHB S 1 
        stop
    }
}


//Code borrowed from Ice Circle to mimic wall collision.
actor WishingShieldBounce : BasicProjectile
{
	BounceSound "weapon/freezecrackerhit"
	Bouncetype Doom
	-BOUNCEONFLOORS
	+MOVEWITHSECTOR
	+CANBOUNCEWATER
	+DONTSPLASH
	+NOEXPLODEFLOOR
	+STEPMISSILE
	//Maxstepheight 7
	Maxstepheight 24
	+BOUNCEONACTORS
	+SKYEXPLODE
	Bouncefactor 1.0
	Wallbouncefactor 1.0
}

const int WISHINGSHIELD_GROUND_NUM = 9;
const int WISHINGSHIELD_GROUND_DIV = 5;
const int WISHINGSHIELD_AIR_NUM = 3;
const int WISHINGSHIELD_AIR_DIV = 5;

actor WishingShieldSpeed : PowerSpeed
{
	+POWERSPEED.NOTRAIL
	Speed 0.75
	Powerup.Duration 5
}

actor WishingShieldMobilize : WishingShieldBounce
{
	+SERVERSIDEONLY

	+NOBOUNCESOUND
	+USEBOUNCESTATE

	+DONTBLAST
	+DONTREFLECT
	+THRUGHOST

	+RIPPER

	Radius 15
	Height 54
	damage (0)

	var int user_owner;
	var int user_ground;
	var int user_air;
	States
	{
		Spawn:
			TNT1 A 0
			TNT1 A 0 A_SetUserVar("user_owner", ACS_NamedExecuteWithResult("core_gettarget",0))
			TNT1 A 0 A_TakeFromTarget("WishingShieldStoppedFlag",999)
		Spawn2:
			TNT1 A 0 A_JumpIfInTargetInventory("ShieldCheck",1,"Spawn3")
			goto TheEnd
		Spawn3:
			TNT1 A 0 A_Warp(AAPTR_TARGET, 0, 0, 0, 0, WARPF_INTERPOLATE|WARPF_NOCHECKPOSITION|WARPF_USECALLERANGLE)
			TNT1 A 0 A_ChangeVelocity(30,0,0,CVF_RELATIVE|CVF_REPLACE)
			//TNT1 A 0 A_LogInt(angle)
			TNT1 A 0 A_SpawnItemEx("WishingShieldMoveCheck")
			TNT1 A 0 A_JumpIfInTargetInventory("WishingShieldStoppedFlag",6,"EndIt")
			goto Spawn4
		EndIt:
			//TNT1 A 0 A_Log("turn around")
			TNT1 A 0 A_PlaySound("weapon/freezecrackerhit")
			TNT1 A 0 A_TakeFromTarget("WishingShieldCharge",999)
			TNT1 A 0
			goto Death
		Spawn4:
			TNT1 A 0 A_GiveToTarget("WishingShieldSpeed",1)
			TNT1 A 0 A_CheckFloor("Spawn4B")
			//TNT1 A 0 A_Log(air)
			//TNT1 A 0 A_LogInt((user_air+WISHINGSHIELD_AIR_NUM)/WISHINGSHIELD_AIR_DIV)
			TNT1 A 0 ThrustThing(angle*256/360,(user_air+WISHINGSHIELD_AIR_NUM)/WISHINGSHIELD_AIR_DIV,1,user_owner)
			TNT1 A 0 A_SetUserVar("user_air",(user_air+WISHINGSHIELD_AIR_NUM)%WISHINGSHIELD_AIR_DIV)
			goto SpawnEnd
		Spawn4B:
			//TNT1 A 0 A_Log(ground)
			//TNT1 A 0 A_LogInt(user_ground+WISHINGSHIELD_GROUND_NUM)/WISHINGSHIELD_GROUND_DIV)
			TNT1 A 0 ThrustThing(angle*256/360,(user_ground+WISHINGSHIELD_GROUND_NUM)/WISHINGSHIELD_GROUND_DIV,1,user_owner)
			TNT1 A 0 A_SetUserVar("user_ground",(user_ground+WISHINGSHIELD_GROUND_NUM)%WISHINGSHIELD_GROUND_DIV)
			goto SpawnEnd
		SpawnEnd:
			TNT1 A 1
			//PLAY A 1
			TNT1 A 0 A_ChangeFlag("USEBOUNCESTATE",1)
			goto Spawn2
		Bounce:
			TNT1 A 0 A_ChangeFlag("USEBOUNCESTATE",0)
			TNT1 A 0 A_TakeFromTarget("WishingShieldCharge",999)
			TNT1 A 0 A_GiveToTarget("WishingShieldRecoil",1)
			goto Death
		Death:
		TheEnd:
			TNT1 A 0
			stop
	}
}

actor WishingShieldStoppedFlag : Inventory
{
	inventory.amount 1
	inventory.maxamount 6
}

actor WishingShieldMoveCheck
{
	PROJECTILE
	+SERVERSIDEONLY
	+NOINTERACTION
	+NOCLIP
	+DONTBLAST
	damage (0)
	radius 1
	height 1
	speed 0
	States
	{
		Spawn:
			TNT1 A 0
			TNT1 A 1
			TNT1 A 0 A_JumpIfCloser(2,"Stopped")
			//TNT1 A 0 A_JumpIfCloser(3,"Stopped")
			//TNT1 A 0 A_JumpIfCloser(5,"Stopped")
			//TNT1 A 0 A_Log("Going")
			TNT1 A 0 A_TakeFromTarget("WishingShieldStoppedFlag",1)
			stop
		Stopped:
			//TNT1 A 0 A_Log("Stopped")
			TNT1 A 1 A_GiveToTarget("WishingShieldStoppedFlag",1)
			stop
	}
}

actor WishingShieldThrow : BasicWatcher
{
    var int user_shockwave;
    States
    {
    Spawn:
        TNT1 A 0
        TNT1 A 0 A_SetUserVar(user_shockwave, 8)
        TNT1 A 0 A_JumpIf(true, "ExplodeLoop")
        TNT1 A 10
        stop
    ExplodeLoop:
        TNT1 A 0 A_SpawnItemEx("WishingShieldSpiral", 10, 0, 10, 1.0, 0, 0, user_shockwave*(360/8), SXF_MULTIPLYSPEED)
        TNT1 A 0 A_SetUserVar(user_shockwave, user_shockwave-1)
        TNT1 A 0 A_JumpIf(user_shockwave > 0, "ExplodeLoop")
        stop
    End:
        TNT1 A 0
        stop
    }
}

actor WishingShieldSpiral : BasicProjectile
{
+FORCEXYBILLBOARD
+NOINTERACTION
Radius 24
Height 24
damage (0)
damagetype "WishingShield"
Obituary "$OB_WISHINGSHIELD"
speed 0
args 20, 5000, 16, 36
reactiontime 65
var int user_PierceRipper;
States
{
Spawn:
WSHB L 0
WSHB L 0 A_Setangle(angle+args[ARGC_MAXTURN]/args[ARGC_TURNDIVISOR])
Spawn2:
WSHB LLMMNNOOPPQQRRSS 1 A_GiveInventory("WishingShieldFunc", 1)
loop
Death:
TNT1 A 2
stop
}
}

actor WishingShieldFunc : CustomInventory
{
    States
    {
    Pickup:
        TNT1 A 0 A_CountDown
        TNT1 A 0 A_Explode(CallACS("vile_cbm_damage",11), 32, 0, 0, 32)
        TNT1 A 0 A_GiveInventory("RotateFunc", 1)
        stop
    }
}