const int CDISTORTER_RADIUS = 250;
actor CyberDistorterWep_NormalBar : NormalBar{args 4, 103}
actor CyberDistorterWep_ScriptBar : ScriptBar{}
actor CyberDistorterWep : BaseMM8BDMWep
{
Weapon.AmmoUse 9
Weapon.AmmoGive 28
Weapon.SlotNumber 6
Inventory.Pickupmessage "$PU_CYBERDISTORTER"
Obituary "$OB_CYBERDISTORTER"
Tag "$TAG_CYBERDISTORTER"
weapon.ammotype "CyberDistorterAmmo"
inventory.icon "CDISICON"
States
{
SpawnLoop:
CDIS Z 1
loop
Flash:
TNT1 A 0
TNT1 A 1 A_TakeInventory("CyberDistorterFlag",1)
loop
CyberEnd:
CDIS A 0 A_GiveInventory("CyberDistorterCooldown",1)
goto Ready1
Ready:
CDIS A 0 ACS_NamedExecuteWithResult("core_weaponcolor",COLOR_CYBERDISTORTER)
Ready1:
CDIS A 0
CDIS A 0 A_JumpIfInventory("CyberDistorterCooldown",1,"Ready3")
CDIS A 1 A_JumpIfInventory("CyberDistorterFlag",1,"Ready2")
CDIS A 0 A_WeaponReady
Goto Ready1
ReadyC: Goto Ready1+1
Ready2:
CDIS A 0
CDIS A 1 A_WeaponReady(WRF_DISABLESWITCH)
CDIS A 0 A_JumpIfInventory("CyberDistorterFlag",1,"Ready2")
goto CyberEnd
Ready3:
CDIS X 0
CDIS X 1 A_WeaponReady
CDIS X 0 A_JumpIfInventory("CyberDistorterCooldown",1,"Ready3")
Goto Ready1
Deselect:
CDIS A 0 
goto DeselectSwap
Select:
CDIS A 0 
goto SelectSwap
Fire:
CDIS "#" 0 A_JumpIfInventory("CyberDistorterCooldown",1,"NoAmmo")
CDIS C 0 A_JumpIfInventory("CyberDistorterFlag",1,"FireRapid")
CDIS C 0 A_JumpIfNoAmmo("NoAmmo")
CDIS DEFG 2
CDIS G 0 A_JumpIFInventory("IsBot", 1 ,"BotFire")
FireFlash:
CDIS DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 0 A_SpawnItemEx("CyberDistortGFX", random(0,CDISTORTER_RADIUS), 0, random(0,CDISTORTER_RADIUS - 175), 0, 0, 0, random(0, 359))
CDIS G 1
CDIS DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 0 A_SpawnItemEx("CyberDistortGFX", random(0,CDISTORTER_RADIUS), 0, random(0,CDISTORTER_RADIUS - 175), 0, 0, 0, random(0, 359))
CDIS G 1
CDIS G 0 A_PlaySoundEx("weapon/CyberDistorter","Weapon")
CDIS G 0 A_GunFlash("Flash")
CDIS G 0 A_SpawnItemEx("CyberDistorterRadius")
CDIS G 1 A_GiveInventory("CyberDistorterFlag",127)
CDIS G 0 ACS_NamedExecuteAlways("core_whiteflash",0)
CDIS G 0 A_TakeInventory("CyberDistorterAmmo",9,TIF_NOTAKEINFINITE)
CDIS H 2
CDIS IJK 2
CDIS I 20
CDIS FED 3
CDIS E 0 A_JumpIFInventory("IsBot", 1 ,"BotCheck")
CDIS D 0 
Goto READY+2
FireRapid:
CDIS A 0 A_PlaySoundEx("weapon/mbuster","Weapon")
CDIS A 0 A_FireCustomMissile("CyberShot",0,0,8,0)
CDIS BBC 1
CDIS A 1
CDIS A 0 A_JumpIfInventory("CyberDistorterFlag",1,"Ready2")
goto CyberEnd
NoAmmo:
CDIS "#" 1 ACS_NamedExecuteAlways("core_noammo",0)
CDIS "#" 1 A_Refire
Goto READY+2
BotFire:
CDIS A 10 A_JumpIf(ACS_ExecuteWithResult(247, 0, CDISTORTER_RADIUS, 0)>0, "FireFlash") 
Goto READY+2
BotCheck:
CDIS A 1 A_GiveInventory("MegaBuster", 1)
CDIS A 1 A_TakeInventory("CyberDistorterWep", 1)
Goto Ready
}
}

actor CyberShot : BasicFastProjectile
{
PROJECTILE
damagetype "CyberBuster"
Obituary "$OB_CYBERDISTORTER"
Speed 64
Damage (CallACS("vile_cbm_damage",4))
radius 10
height 7
scale 2.5
States
{
Spawn:
TNT1 A 0
CBDS AB 4
Loop
}
}


actor CyberDistorterRadius : BasicExplosion
{
+NOINTERACTION
Obituary "$OB_CYBERDISTORTER"
PROJECTILE
radius 1
height 1
+PIERCEARMOR
+FOILINVUL
damagetype "CyberDistorter"
states
{
Spawn:
TNT1 A 0
TNT1 A 1 A_Explode(CallACS("vile_cbm_damage",5), CDISTORTER_RADIUS, 0, 0, CDISTORTER_RADIUS)
stop
}
}

actor CyberDistortGFX : BasicGraphicEffect
{
+NOINTERACTION
+NOGRAVITY
+CLIENTSIDEONLY
+FORCEXYBILLBOARD
-SOLID
scale 2.5
height 0
radius 0
states
{
SpawnFrame:
CBDS C 0
CBDS C 0 A_Jump(128,2)
CBDS C 4 
stop
CBDS D 4
stop
}
}

actor CyberDistortMonster : Inventory
{
inventory.amount 1
inventory.maxamount 1
}

actor CyberDistortActivator : CustomInventory
{
+INVENTORY.AUTOACTIVATE
States
{
Pickup:
TNT1 A 0
TNT1 A 0 A_JumpIfInventory("CyberDistortedCounter", 1, "No")
//TNT1 A 0 A_JumpIfInventory(ACS_NamedExecuteWithResult("core_getplayerteam", -1), "No")
TNT1 A 0 A_Stop
PLAY H 0 A_GiveInventory("CyberDistortedCounter",1)
PLAY H 0 A_GiveInventory("CyberDistorterGuard")
PLAY H 0 ACS_NamedExecuteAlways("core_flyplayer",0,0,1)
PLAY H 0 ACS_NamedExecuteAlways("core_freezeplayer",0,0,1)
TNT1 A 0 A_SpawnItemEx("CyberDistortedWatcher")
stop
No:
TNT1 A 0
stop
}
}

actor CyberDistortedWatcher : BasicWatcher
{
Height 0
Radius 0
+NOINTERACTION
-SOLID
+NOGRAVITY
+MISSILE
Renderstyle none
States
{
Spawn:
TNT1 A 0
TNT1 A 1 A_Warp(AAPTR_TARGET, 0.0,0.0,0.0,0.0,WARPF_NOCHECKPOSITION)
TNT1 AAAAAAAAAAAA 0 A_SpawnItemEx("CyberDistortGFX", random(8, 64), 0, random(0, 64), 0, 0, 0, random(0, 359))
TNT1 A 0 A_JumpIfInTargetInventory("CyberDistortedCounter", 1, "Spawn")
TNT1 A 0 A_GiveToTarget("AntiCyberDistorter")
TNT1 A 0 A_TakeFromTarget("CyberDistorterGuard",1)
TNT1 A 5 A_GiveToTarget("CyberUndistorted")
stop
}
}

actor CyberDistorterGFXSpawner : BasicGraphicEffect
{
+NOINTERACTION
-SOLID
+NOGRAVITY
states
{
SpawnFrame:
TNT1 AAAAAAAAAAAAAAAAAA 1 A_SpawnItemEx("CyberDistortGFX", random(8, 64), 0, random(0, 64), 0, 0, 0, random(0, 359))
stop
}
}

actor CyberDistortedCounter : Powerup
{
powerup.duration 127
}

actor CyberDistorterFlag : Inventory
{
inventory.amount 1
inventory.maxamount 127
}

actor CyberDistorterCooldown : Powerup
{
powerup.duration -2
}

actor CyberUndistorted : CustomInventory
{
+INVENTORY.AUTOACTIVATE
States
{
Use:
PLAY H 0 ACS_NamedExecuteAlways("core_flyplayer",0,0,0)
PLAY H 0 ACS_NamedExecuteAlways("core_freezeplayer",0,0,0)
stop
}
}

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

actor AntiCyberDistorter : PowerProtection
{
Powerup.Duration 70
damagefactor "CyberDistorter", 0.0
}

actor CyberDistorterGuard : PowerProtection
{
Powerup.Duration -5
damagefactor "Normal", 0.87
damagefactor "CBuster", 1.0
}