actor GyroBoomerangWep_NormalBar : NormalBar{args 100, 110}
actor GyroBoomerangWep_ScriptBar : ScriptBar {}
actor GyroBoomerangWep : BaseMM8BDMWep 
{
Weapon.AmmoUse 4
Weapon.AmmoGive 28
Weapon.SlotNumber 4
Inventory.Pickupmessage "$PU_GYROBOOMERANG"
Obituary "$OB_GYROBOOMERANG"
Tag "$TAG_GYROBOOMERANG"
weapon.ammotype "GyroBoomerangAmmo"
inventory.icon "GBMRICON"
States
{
SpawnLoop:
GBMR Z -1
loop
Ready:
GYBH A 0 ACS_NamedExecuteWithResult("core_weaponcolor",COLOR_GYROBOOMERANG)
GYBH A 1 A_WeaponReady
Goto Ready+1
ReadyC: Goto Ready+1
Deselect:
GYBH A 0
goto DeselectSwap
Select:
GYBH A 0
goto SelectSwap
Fire:
GYBH A 0 A_JumpIfNoAmmo("NoAmmo")
GYBH A 2 
GYBH A 0 A_PlaySoundEx("weapons/mm5/gyroattackfire","Weapon")
GYBH J 3
GYBH J 0 A_SpawnItemEx("GyroBoomerangWarper")
GYBH J 0 A_SpawnItemEx("GyroBoomerangWarper2")
GYBH J 0 A_GiveInventory("WeaponCharge", 28)
GYBH J 0 A_JumpIfInventory("IsBot", 1, "BotCheck")
Goto Hold
Hold:
GYBH K 0 A_JumpIfInventory("WeaponCharge", 1, "HoldLoop")
goto AltHold
HoldLoop:
GYBH K 1 A_RailWait
GYBH K 0 A_TakeInventory("WeaponCharge", 1)
GYBH K 1 A_SpawnItemEx("GyroBoomerangDamager",0,0,0,0,0,0)
GYBH K 0 A_PlaySoundEx("weapon/gyroattack","Body")
GYBH K 1 A_GiveInventory("GyroBlowThrust",1)
GYBH K 0 A_Refire("Hold")
AltHold:
GYBH J 0 A_ClearRefire
GYBH K 0 A_TakeInventory("WeaponCharge",999)
GYBH J 2 A_GiveInventory("GyroFlag",2)
GYBH J 0 A_TakeInventory("GyroFlag",999)
goto Altfire+3
Altfire:
GYBH A 0 A_JumpIfInventory("Vile_ClassAltfire", 1, "ClassAltfire")
GYBH A 0 A_JumpIf(CallACS("Vile_class_altfire"), "ClassAltfire")
GYBH A 1 A_JumpIfInventory("MM8BDMPlayer", 1, 1)
wait
GYBH A 0 A_JumpIfNoAmmo("NoAmmo")
GYBH A 0 A_FireCustomMissile("GyroBoomerang",0,0,8,0)
GYBH A 0 A_TakeInventory("GyroBoomerangAmmo",4)
GYBH BCDEFG 2
GYBH A 20
Goto Ready+1
ClassAltfire:
GYBH A 0 
goto Super::Altfire
BotCheck:
GYBH A 5 A_RailWait
GYBH A 0 A_Jump(128, "BotCheck")
Goto Hold+2

NoAmmo:
GYBH A 1 ACS_NamedExecute("core_noammo",0)
Goto Ready+1
}
}

actor GyroBoomerangWarper : BasicGraphicEffect
{
xScale 4.5
yScale 3.0
	States
	{
	SpawnFrame:
	GYBO A 0 
	goto Spawn1
	Spawn1:
	GYBO AA 1 A_Warp(AAPTR_TARGET, -2, 0, 64, 0, WARPF_INTERPOLATE|WARPF_NOCHECKPOSITION)
	GYBO A 0 A_JumpIfInventory("WeaponCharge",1,"Spawn2",AAPTR_TARGET)
	TNT1 A 2
	goto Death
	Spawn2:
	GYBO BB 1 A_Warp(AAPTR_TARGET, -2, 0, 64, 0, WARPF_INTERPOLATE|WARPF_NOCHECKPOSITION)
	GYBO A 0 A_JumpIfInventory("WeaponCharge",1,"Spawn3",AAPTR_TARGET)
	TNT1 A 2
	goto Death
	Spawn3:
	GYBO CC 1 A_Warp(AAPTR_TARGET, -2, 0, 64, 0, WARPF_INTERPOLATE|WARPF_NOCHECKPOSITION)
	GYBO A 0 A_JumpIfInventory("WeaponCharge",1,"Spawn4",AAPTR_TARGET)
	TNT1 A 2
	goto Death
	Spawn4:
	GYBO DD 1 A_Warp(AAPTR_TARGET, -2, 0, 64, 0, WARPF_INTERPOLATE|WARPF_NOCHECKPOSITION)
	GYBO A 0 A_JumpIfInventory("WeaponCharge",1,"Spawn1",AAPTR_TARGET)
	TNT1 A 2
	goto Death
	}
}
actor GyroBoomerangWarper2 : GyroBoomerangWarper
{
	States
	{
	SpawnFrame:
	GYBO A 0 
	goto Spawn3
	}
}

actor GyroBoomerangDamager : BasicProjectile
{
PROJECTILE
damagetype "GyroBoomerangMelee"
Obituary "$OB_GYROBOOMERANG"
+RIPPER
+DONTBLAST
damage (CallACS("vile_cbm_damage",4))
radius 64
height 32
States
{
Spawn:
TNT1 A 1 
stop
}
}

actor GyroBoomerangDamager2 : BasicProjectile
{
PROJECTILE
damagetype "GyroBoomerang"
Obituary "$OB_GYROBOOMERANG"
+RIPPER
+DONTBLAST
damage (CallACS("vile_cbm_damage",6))
Radius 20
Height 16
States
{
Spawn:
TNT1 A 1 
stop
}
}

actor GyroBoomerang : BasicProjectile
{
PROJECTILE
Radius 20
Height 16
scale 3.5
damage (CallACS("vile_cbm_damage",6))
damagetype "GyroBoomerang"
Obituary "$OB_GYROBOOMERANG"
speed 30
+NOEXPLODEFLOOR
+RIPPER
States
{
Spawn:
GYBO A 0
GYBO A 0 A_PlaySoundEx("weapon/gyroattack","Auto")
GYBO AABBCCDDAABBCCDD 1 ThrustThingZ(0,2,0,1)
loop
Death:
GYBO A 1 A_CustomMissile("GyroBoomerangReturner",0,0,0,0)
stop
}
}

actor GyroBoomerang2 : GyroBoomerang
{
+SEEKERMISSILE
+NOINTERACTION
States
{
Spawn:
GYBO A 0 A_FaceTarget
GYBO A 0 A_SeekerMissile(90,90,SMF_PRECISE)
GYBO A 0 A_PlaySoundEx("weapon/gyroattack","Auto")
GYBO A 1 A_SpawnItemEx("GyroBoomerangDamager2",0,0,0,2,0,0)
GYBO A 1 A_JumpIfCloser(64,"Death")
GYBO B 1 A_SpawnItemEx("GyroBoomerangDamager2",0,0,0,2,0,0)
GYBO B 1 A_JumpIfCloser(64,"Death")
GYBO C 1 A_SpawnItemEx("GyroBoomerangDamager2",0,0,0,2,0,0)
GYBO C 1 A_JumpIfCloser(64,"Death")
GYBO D 1 A_SpawnItemEx("GyroBoomerangDamager2",0,0,0,2,0,0)
GYBO D 1 A_JumpIfCloser(64,"Death")
GYBO A 1 A_SpawnItemEx("GyroBoomerangDamager2",0,0,0,2,0,0)
GYBO A 1 A_JumpIfCloser(64,"Death")
GYBO B 1 A_SpawnItemEx("GyroBoomerangDamager2",0,0,0,2,0,0)
GYBO B 1 A_JumpIfCloser(64,"Death")
GYBO C 1 A_SpawnItemEx("GyroBoomerangDamager2",0,0,0,2,0,0)
GYBO C 1 A_JumpIfCloser(64,"Death")
GYBO D 1 A_SpawnItemEx("GyroBoomerangDamager2",0,0,0,2,0,0)
GYBO D 1 A_JumpIfCloser(64,"Death")
loop
Death:
GYBO A 1 
stop
XDeath:
GYBO A 1
stop
}
}

actor GyroBoomerangReturner : GyroBoomerang2
{
+SEEKERMISSILE
States
{
Spawn:
GYBO A 0
TNT1 A 0
SpawnLOOP:
GYBO A 0 A_RearrangePointers(0,0,2)
GYBO A 0 A_FaceTarget(0,0)
GYBO A 0 A_ChangeVelocity(Cos(pitch)*40,0,sin(pitch)*40,3)
GYBO AA 0 A_SeekerMissile(90,90,SMF_PRECISE)
goto Super::Spawn
Death:
goto XDeath
}
}

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

actor GyroBlowThrust : CustomInventory
{
States
{
Pickup:
TNT1 A 0
TNT1 A 0 A_JumpIf(z-floorz<5, "End")
TNT1 A 0 ThrustThingZ(0, 21, 0, 0)
stop
End:
TNT1 A 0
stop
}
}