actor VirusOutbreakWep_NormalBar : NormalBar { args 4, 104 }
actor VirusOutbreakWep_ScriptBar : ScriptBar {}

actor VirusOutbreakWep : BaseMM8BDMWep 
{
	//$Category MM8BDM-Weapons
	//$Title Virus Outbreak
	Weapon.AmmoUse 1
	Weapon.AmmoGive 112
	Weapon.SlotNumber 7
	Inventory.Pickupmessage "$PU_VIRUSOUTBREAK"
	Obituary "$OB_VIRUSOUTBREAK"
	Tag "$TAG_VIRUSOUTBREAK"
	weapon.ammotype "VirusOutbreakAmmo"
	inventory.icon "VIRUOI"
	States
	{
		SpawnLoop:
			VIRU Z -1
			loop
			
		Ready:
			SWHE G 0 ACS_NamedExecuteWithResult("core_weaponcolor",CLR_VIRUSOUTBREAK)
			VIRU B 0 A_JumpIfInventory("VirusOutbreakAmmo",1,"Ready2")
			VIRU B 0 A_TakeInventory("ReadyToGiveExtends",999)
			VIRU B 1 A_WeaponReady
			Goto Ready+1
		Ready2:
			VIRU B 0 A_JumpIfInventory("VirusExtend",1,"Ready3")
			VIRU B 1 A_WeaponReady
			Goto Ready+1
		Ready3:
			VIRU B 0 A_GiveInventory("AmmoTake",1)
			VIRU B 0 A_JumpIfInventory("AmmoTake",5,"ReadyTake")
			VIRU B 1 A_WeaponReady
			Goto Ready+1
		ReadyTake:
			VIRU B 0 A_TakeInventory("AmmoTake",999)
			VIRU B 0 A_TakeInventory("VirusExtend",2)
			VIRU B 1 A_WeaponReady
			Goto Ready+1
		ReadyBuffer:
			TNT1 A 0
			goto Ready+1 //agh why is there no better way of doing this
			
		Deselect:
			VIRU B 0 A_GiveInventory("VirusCancel",1)
			goto DeselectSwap
		Select:
			VIRU B 0 A_TakeInventory("VirusCancel",999)
			goto SelectSwap
			
		Fire:
			VIRU B 0 A_JumpIfNoAmmo("NoAmmo")
			TNT1 A 0 A_JumpIfInventory("VirusExtend",28,"ReadyBuffer")
			TNT1 A 0 A_JumpIfInventory("ReadyToGiveExtends",1,"HoldSkipStart")
			VIRU B 0 A_SpawnItemEX("VirusOutbreakShieldHandler")
			VIRU B 0 A_SpawnItemEX("VirusAmmoWatcher")
			VIRU B 0 A_PlaySoundEx("weapon/virus","Weapon")
			VIRU CDEFG 2
			Goto Hold
		Althold:
		Hold:
			TNT1 A 0 A_JumpIfInventory("ReadyToGiveExtends",1,"HoldSkip")
			TNT1 A 0 A_GiveInventory("ReadyToGiveExtends",1)
			TNT1 A 0 A_Refire
			Goto ThrowNormal
		HoldSkipStart:
			VIRU CDEFG 2
			goto HoldSkip
		HoldSkip:
			TNT1 A 0 A_JumpIfInventory("VirusOutbreakAmmo",1,"HoldStart")
			Goto Throw
		HoldStart:
			VIRU B 0 A_PlaySoundEx("weapon/virus","Weapon")
			TNT1 A 5 A_GiveInventory("VirusExtend",4)
			TNT1 A 0 A_Refire
			Goto Throw
		Throw:
			VIRU HI 2 A_ClearRefire
			Goto Ready+1
		ThrowNormal:
			TNT1 A 5
			VIRU HI 2 A_ClearRefire
			Goto Ready+1
			
		NoAmmo:
			VIRU B 1 ACS_NamedExecuteAlways("core_noammo",0)
			Goto Ready+1
	}
}

actor VirusOutbreakAmmo : Ammo
{
	inventory.amount 1
	inventory.maxamount 112
	+INVENTORY.IGNORESKILL
}

actor VirusExtend : Inventory
{
	inventory.amount 1
	inventory.maxamount 28
	+INVENTORY.IGNORESKILL
}

actor AmmoTake : Inventory
{
	inventory.amount 1
	inventory.maxamount 175
	+INVENTORY.IGNORESKILL
}

actor ReadyToGiveExtends : Inventory
{
	inventory.amount 1
	inventory.maxamount 1
	+INVENTORY.IGNORESKILL
}

actor VirusCancel : Inventory
{
	inventory.amount 1
	inventory.maxamount 1
	+INVENTORY.IGNORESKILL
}

const int WEPC_RFVO_DAMAGE = 3;

actor VirusOutbreakShieldHandler : BasicExplosion
{
	damagetype "VirusOutbreak"
	Obituary "$OB_VIRUSOUTBREAK"
	var int user_owner;
	States
	{
		Spawn:
			TNT1 A 0
			TNT1 A 3 A_SetUserVar("user_owner",ACS_NamedExecuteWithResult("core_gettarget"))
			TNT1 A 0 A_JumpIf(user_owner<=0, "Death")
		OkPerfect:
			TNT1 A 0 A_JumpIfInTargetInventory("VirusCancel",1,"Death")
			TNT1 A 0 A_JumpIfInTargetInventory("VirusExtend",27,"OkPerfect8")
			TNT1 A 0 A_JumpIfInTargetInventory("VirusExtend",23,"OkPerfect7")
			TNT1 A 0 A_JumpIfInTargetInventory("VirusExtend",29,"OkPerfect6")
			TNT1 A 0 A_JumpIfInTargetInventory("VirusExtend",15,"OkPerfect5")
			TNT1 A 0 A_JumpIfInTargetInventory("VirusExtend",11,"OkPerfect4")
			TNT1 A 0 A_JumpIfInTargetInventory("VirusExtend",7,"OkPerfect3")
			TNT1 A 0 A_JumpIfInTargetInventory("VirusExtend",3,"OkPerfect2")
			TNT1 A 1 Thing_Move(0,user_owner,1)
			TNT1 A 0 A_SpawnItemEx("VirusOutbreakSpawn",0,0,0,0,0,0,0,SXF_WEPFXCOLOR)
			TNT1 A 0 A_Explode(CallACS("mmrf_cbm_damage", WEPC_RFVO_DAMAGE),54,0,0,54)
			TNT1 A 0 A_SetAngle(angle+12)
			TNT1 A 0 
			TNT1 A 0 A_JumpIfInTargetInventory("VirusOutbreakAmmo",1,"OkPerfect")
			goto Death
		OkPerfect2:
			TNT1 A 1 Thing_Move(0,user_owner,1)
			TNT1 A 0 A_SpawnItemEx("VirusOutbreakSpawn2",0,0,0,0,0,0,0,SXF_WEPFXCOLOR)
			TNT1 A 0 A_Explode(CallACS("mmrf_cbm_damage", WEPC_RFVO_DAMAGE),64,0,0,64)
			TNT1 A 0 A_SetAngle(angle+12)
			TNT1 A 0 
			TNT1 A 0 A_JumpIfInTargetInventory("VirusOutbreakAmmo",1,"OkPerfect")
			goto Death
		OkPerfect3:
			TNT1 A 1 Thing_Move(0,user_owner,1)
			TNT1 A 0 A_SpawnItemEx("VirusOutbreakSpawn3",0,0,0,0,0,0,0,SXF_WEPFXCOLOR)
			TNT1 A 0 A_Explode(CallACS("mmrf_cbm_damage", WEPC_RFVO_DAMAGE),76,0,0,76)
			TNT1 A 0 A_SetAngle(angle+12)
			TNT1 A 0 
			TNT1 A 0 A_JumpIfInTargetInventory("VirusOutbreakAmmo",1,"OkPerfect")
			goto Death
		OkPerfect4:
			TNT1 A 1 Thing_Move(0,user_owner,1)
			TNT1 A 0 A_SpawnItemEx("VirusOutbreakSpawn4",0,0,0,0,0,0,0,SXF_WEPFXCOLOR)
			TNT1 A 0 A_Explode(CallACS("mmrf_cbm_damage", WEPC_RFVO_DAMAGE),88,0,0,88)
			TNT1 A 0 A_SetAngle(angle+12)
			TNT1 A 0 
			TNT1 A 0 A_JumpIfInTargetInventory("VirusOutbreakAmmo",1,"OkPerfect")
			goto Death
		OkPerfect5:
			TNT1 A 1 Thing_Move(0,user_owner,1)
			TNT1 A 0 A_SpawnItemEx("VirusOutbreakSpawn5",0,0,0,0,0,0,0,SXF_WEPFXCOLOR)
			TNT1 A 0 A_Explode(CallACS("mmrf_cbm_damage", WEPC_RFVO_DAMAGE),100,0,0,100)
			TNT1 A 0 A_SetAngle(angle+12)
			TNT1 A 0 
			TNT1 A 0 A_JumpIfInTargetInventory("VirusOutbreakAmmo",1,"OkPerfect")
			goto Death
		OkPerfect6:
			TNT1 A 1 Thing_Move(0,user_owner,1)
			TNT1 A 0 A_SpawnItemEx("VirusOutbreakSpawn6",0,0,0,0,0,0,0,SXF_WEPFXCOLOR)
			TNT1 A 0 A_Explode(CallACS("mmrf_cbm_damage", WEPC_RFVO_DAMAGE),112,0,0,112)
			TNT1 A 0 A_SetAngle(angle+12)
			TNT1 A 0 
			TNT1 A 0 A_JumpIfInTargetInventory("VirusOutbreakAmmo",1,"OkPerfect")
			goto Death
		OkPerfect7:
			TNT1 A 1 Thing_Move(0,user_owner,1)
			TNT1 A 0 A_SpawnItemEx("VirusOutbreakSpawn7",0,0,0,0,0,0,0,SXF_WEPFXCOLOR)
			TNT1 A 0 A_Explode(CallACS("mmrf_cbm_damage", WEPC_RFVO_DAMAGE),124,0,0,124)
			TNT1 A 0 A_SetAngle(angle+12)
			TNT1 A 0 
			TNT1 A 0 A_JumpIfInTargetInventory("VirusOutbreakAmmo",1,"OkPerfect")
			goto Death
		OkPerfect8:
			TNT1 A 1 Thing_Move(0,user_owner,1)
			TNT1 A 0 A_SpawnItemEx("VirusOutbreakSpawn8",0,0,0,0,0,0,0,SXF_WEPFXCOLOR)
			TNT1 A 0 A_Explode(CallACS("mmrf_cbm_damage", WEPC_RFVO_DAMAGE),136,0,0,136)
			TNT1 A 0 A_SetAngle(angle+12)
			TNT1 A 0 
			TNT1 A 0 A_JumpIfInTargetInventory("VirusOutbreakAmmo",1,"OkPerfect")
			goto Death
		Death:
			TNT1 A 0
			stop
	}
}

actor VirusOutbreakSpawn : VirusOutbreakShieldHandler
{
	States
	{
		Spawn:
			TNT1 A 0
			TNT1 A 0 A_SpawnItemEx("VirusOutbreak",50,0,32,0,0,0,0,SXF_WEPFXCOLOR)
			TNT1 A 0 A_SpawnItemEx("VirusOutbreak",50,0,32,0,0,0,45,SXF_WEPFXCOLOR)
			TNT1 A 0 A_SpawnItemEx("VirusOutbreak",50,0,32,0,0,0,90,SXF_WEPFXCOLOR)
			TNT1 A 0 A_SpawnItemEx("VirusOutbreak",50,0,32,0,0,0,135,SXF_WEPFXCOLOR)
			TNT1 A 0 A_SpawnItemEx("VirusOutbreak",50,0,32,0,0,0,180,SXF_WEPFXCOLOR)
			TNT1 A 0 A_SpawnItemEx("VirusOutbreak",50,0,32,0,0,0,-45,SXF_WEPFXCOLOR)
			TNT1 A 0 A_SpawnItemEx("VirusOutbreak",50,0,32,0,0,0,-90,SXF_WEPFXCOLOR)
			TNT1 A 0 A_SpawnItemEx("VirusOutbreak",50,0,32,0,0,0,-135,SXF_WEPFXCOLOR)
			stop
	}
}

actor VirusOutbreakSpawn2 : VirusOutbreakSpawn
{
	States
	{
		Spawn:
			TNT1 A 0
			TNT1 A 0 A_SpawnItemEx("VirusOutbreak",60,0,32,0,0,0,0,SXF_WEPFXCOLOR)
			TNT1 A 0 A_SpawnItemEx("VirusOutbreak",60,0,32,0,0,0,45,SXF_WEPFXCOLOR)
			TNT1 A 0 A_SpawnItemEx("VirusOutbreak",60,0,32,0,0,0,90,SXF_WEPFXCOLOR)
			TNT1 A 0 A_SpawnItemEx("VirusOutbreak",60,0,32,0,0,0,135,SXF_WEPFXCOLOR)
			TNT1 A 0 A_SpawnItemEx("VirusOutbreak",60,0,32,0,0,0,180,SXF_WEPFXCOLOR)
			TNT1 A 0 A_SpawnItemEx("VirusOutbreak",60,0,32,0,0,0,-45,SXF_WEPFXCOLOR)
			TNT1 A 0 A_SpawnItemEx("VirusOutbreak",60,0,32,0,0,0,-90,SXF_WEPFXCOLOR)
			TNT1 A 0 A_SpawnItemEx("VirusOutbreak",60,0,32,0,0,0,-135,SXF_WEPFXCOLOR)
			stop
	}
}

actor VirusOutbreakSpawn3 : VirusOutbreakSpawn
{
	States
	{
		Spawn:
			TNT1 A 0
			TNT1 A 0 A_SpawnItemEx("VirusOutbreak",70,0,32,0,0,0,0,SXF_WEPFXCOLOR)
			TNT1 A 0 A_SpawnItemEx("VirusOutbreak",70,0,32,0,0,0,45,SXF_WEPFXCOLOR)
			TNT1 A 0 A_SpawnItemEx("VirusOutbreak",70,0,32,0,0,0,90,SXF_WEPFXCOLOR)
			TNT1 A 0 A_SpawnItemEx("VirusOutbreak",70,0,32,0,0,0,135,SXF_WEPFXCOLOR)
			TNT1 A 0 A_SpawnItemEx("VirusOutbreak",70,0,32,0,0,0,180,SXF_WEPFXCOLOR)
			TNT1 A 0 A_SpawnItemEx("VirusOutbreak",70,0,32,0,0,0,-45,SXF_WEPFXCOLOR)
			TNT1 A 0 A_SpawnItemEx("VirusOutbreak",70,0,32,0,0,0,-90,SXF_WEPFXCOLOR)
			TNT1 A 0 A_SpawnItemEx("VirusOutbreak",70,0,32,0,0,0,-135,SXF_WEPFXCOLOR)
			stop
	}
}

actor VirusOutbreakSpawn4 : VirusOutbreakSpawn
{
	States
	{
		Spawn:
			TNT1 A 0
			TNT1 A 0 A_SpawnItemEx("VirusOutbreak",80,0,32,0,0,0,0,SXF_WEPFXCOLOR)
			TNT1 A 0 A_SpawnItemEx("VirusOutbreak",80,0,32,0,0,0,45,SXF_WEPFXCOLOR)
			TNT1 A 0 A_SpawnItemEx("VirusOutbreak",80,0,32,0,0,0,90,SXF_WEPFXCOLOR)
			TNT1 A 0 A_SpawnItemEx("VirusOutbreak",80,0,32,0,0,0,135,SXF_WEPFXCOLOR)
			TNT1 A 0 A_SpawnItemEx("VirusOutbreak",80,0,32,0,0,0,180,SXF_WEPFXCOLOR)
			TNT1 A 0 A_SpawnItemEx("VirusOutbreak",80,0,32,0,0,0,-45,SXF_WEPFXCOLOR)
			TNT1 A 0 A_SpawnItemEx("VirusOutbreak",80,0,32,0,0,0,-90,SXF_WEPFXCOLOR)
			TNT1 A 0 A_SpawnItemEx("VirusOutbreak",80,0,32,0,0,0,-135,SXF_WEPFXCOLOR)
			stop
	}
}

actor VirusOutbreakSpawn5 : VirusOutbreakSpawn
{
	States
	{
		Spawn:
			TNT1 A 0
			TNT1 A 0 A_SpawnItemEx("VirusOutbreak",90,0,32,0,0,0,0,SXF_WEPFXCOLOR)
			TNT1 A 0 A_SpawnItemEx("VirusOutbreak",90,0,32,0,0,0,45,SXF_WEPFXCOLOR)
			TNT1 A 0 A_SpawnItemEx("VirusOutbreak",90,0,32,0,0,0,90,SXF_WEPFXCOLOR)
			TNT1 A 0 A_SpawnItemEx("VirusOutbreak",90,0,32,0,0,0,135,SXF_WEPFXCOLOR)
			TNT1 A 0 A_SpawnItemEx("VirusOutbreak",90,0,32,0,0,0,180,SXF_WEPFXCOLOR)
			TNT1 A 0 A_SpawnItemEx("VirusOutbreak",90,0,32,0,0,0,-45,SXF_WEPFXCOLOR)
			TNT1 A 0 A_SpawnItemEx("VirusOutbreak",90,0,32,0,0,0,-90,SXF_WEPFXCOLOR)
			TNT1 A 0 A_SpawnItemEx("VirusOutbreak",90,0,32,0,0,0,-135,SXF_WEPFXCOLOR)
			stop
	}
}

actor VirusOutbreakSpawn6 : VirusOutbreakSpawn
{
	States
	{
		Spawn:
			TNT1 A 0
			TNT1 A 0 A_SpawnItemEx("VirusOutbreak",100,0,32,0,0,0,0,SXF_WEPFXCOLOR)
			TNT1 A 0 A_SpawnItemEx("VirusOutbreak",100,0,32,0,0,0,45,SXF_WEPFXCOLOR)
			TNT1 A 0 A_SpawnItemEx("VirusOutbreak",100,0,32,0,0,0,90,SXF_WEPFXCOLOR)
			TNT1 A 0 A_SpawnItemEx("VirusOutbreak",100,0,32,0,0,0,135,SXF_WEPFXCOLOR)
			TNT1 A 0 A_SpawnItemEx("VirusOutbreak",100,0,32,0,0,0,180,SXF_WEPFXCOLOR)
			TNT1 A 0 A_SpawnItemEx("VirusOutbreak",100,0,32,0,0,0,-45,SXF_WEPFXCOLOR)
			TNT1 A 0 A_SpawnItemEx("VirusOutbreak",100,0,32,0,0,0,-90,SXF_WEPFXCOLOR)
			TNT1 A 0 A_SpawnItemEx("VirusOutbreak",100,0,32,0,0,0,-135,SXF_WEPFXCOLOR)
			stop
	}
}

actor VirusOutbreakSpawn7 : VirusOutbreakSpawn
{
	States
	{
		Spawn:
			TNT1 A 0
			TNT1 A 0 A_SpawnItemEx("VirusOutbreak",110,0,32,0,0,0,0,SXF_WEPFXCOLOR)
			TNT1 A 0 A_SpawnItemEx("VirusOutbreak",110,0,32,0,0,0,45,SXF_WEPFXCOLOR)
			TNT1 A 0 A_SpawnItemEx("VirusOutbreak",110,0,32,0,0,0,90,SXF_WEPFXCOLOR)
			TNT1 A 0 A_SpawnItemEx("VirusOutbreak",110,0,32,0,0,0,135,SXF_WEPFXCOLOR)
			TNT1 A 0 A_SpawnItemEx("VirusOutbreak",110,0,32,0,0,0,180,SXF_WEPFXCOLOR)
			TNT1 A 0 A_SpawnItemEx("VirusOutbreak",110,0,32,0,0,0,-45,SXF_WEPFXCOLOR)
			TNT1 A 0 A_SpawnItemEx("VirusOutbreak",110,0,32,0,0,0,-90,SXF_WEPFXCOLOR)
			TNT1 A 0 A_SpawnItemEx("VirusOutbreak",110,0,32,0,0,0,-135,SXF_WEPFXCOLOR)
			stop
	}
}

actor VirusOutbreakSpawn8 : VirusOutbreakSpawn
{
	States
	{
		Spawn:
			TNT1 A 0
			TNT1 A 0 A_SpawnItemEx("VirusOutbreak",120,0,32,0,0,0,0,SXF_WEPFXCOLOR)
			TNT1 A 0 A_SpawnItemEx("VirusOutbreak",120,0,32,0,0,0,45,SXF_WEPFXCOLOR)
			TNT1 A 0 A_SpawnItemEx("VirusOutbreak",120,0,32,0,0,0,90,SXF_WEPFXCOLOR)
			TNT1 A 0 A_SpawnItemEx("VirusOutbreak",120,0,32,0,0,0,135,SXF_WEPFXCOLOR)
			TNT1 A 0 A_SpawnItemEx("VirusOutbreak",120,0,32,0,0,0,180,SXF_WEPFXCOLOR)
			TNT1 A 0 A_SpawnItemEx("VirusOutbreak",120,0,32,0,0,0,-45,SXF_WEPFXCOLOR)
			TNT1 A 0 A_SpawnItemEx("VirusOutbreak",120,0,32,0,0,0,-90,SXF_WEPFXCOLOR)
			TNT1 A 0 A_SpawnItemEx("VirusOutbreak",120,0,32,0,0,0,-135,SXF_WEPFXCOLOR)
			stop
	}
}

actor VirusOutbreak : BasicGraphicEffect
{
	+FORCEXYBILLBOARD
	Alpha 0.8
	States
	{
		SpawnFrame:
			TNT1 A 0
			VIRU A 1
			stop
	}
}

actor VirusAmmoWatcher : BasicWatcher
{
	States
	{
		Spawn:
			TNT1 A 0
			TNT1 A 0 A_JumpIfInTargetInventory("VirusCancel",1,"Death")
			TNT1 A 0 A_JumpIfInTargetInventory("VirusExtend",27,"OkPerfect8")
			TNT1 A 0 A_JumpIfInTargetInventory("VirusExtend",23,"OkPerfect7")
			TNT1 A 0 A_JumpIfInTargetInventory("VirusExtend",29,"OkPerfect6")
			TNT1 A 0 A_JumpIfInTargetInventory("VirusExtend",15,"OkPerfect5")
			TNT1 A 0 A_JumpIfInTargetInventory("VirusExtend",11,"OkPerfect4")
			TNT1 A 0 A_JumpIfInTargetInventory("VirusExtend",7,"OkPerfect3")
			TNT1 A 0 A_JumpIfInTargetInventory("VirusExtend",3,"OkPerfect2")
			TNT1 A 1 A_GiveInventory("AmmoTake",1)
			TNT1 A 0 A_JumpIfInventory("AmmoTake",8,1)
			goto Spawn
			TNT1 A 0 A_TakeInventory("AmmoTake",999)
			TNT1 A 0 A_TakeFromTarget("VirusOutbreakAmmo",1)
			TNT1 A 0 A_JumpIfInTargetInventory("VirusOutbreakAmmo",1,"Spawn")
			goto Death
		OkPerfect2:
			TNT1 A 1 A_GiveInventory("AmmoTake",1)
			TNT1 A 0 A_JumpIfInventory("AmmoTake",7,1)
			goto Spawn
			TNT1 A 0 A_TakeInventory("AmmoTake",999)
			TNT1 A 0 A_TakeFromTarget("VirusOutbreakAmmo",1)
			TNT1 A 0 A_JumpIfInTargetInventory("VirusOutbreakAmmo",1,"Spawn")
			goto Death
		OkPerfect3:
			TNT1 A 1 A_GiveInventory("AmmoTake",1)
			TNT1 A 0 A_JumpIfInventory("AmmoTake",6,1)
			goto Spawn
			TNT1 A 0 A_TakeInventory("AmmoTake",999)
			TNT1 A 0 A_TakeFromTarget("VirusOutbreakAmmo",1)
			TNT1 A 0 A_JumpIfInTargetInventory("VirusOutbreakAmmo",1,"Spawn")
			goto Death
		OkPerfect4:
			TNT1 A 1 A_GiveInventory("AmmoTake",1)
			TNT1 A 0 A_JumpIfInventory("AmmoTake",5,1)
			goto Spawn
			TNT1 A 0 A_TakeInventory("AmmoTake",999)
			TNT1 A 0 A_TakeFromTarget("VirusOutbreakAmmo",1)
			TNT1 A 0 A_JumpIfInTargetInventory("VirusOutbreakAmmo",1,"Spawn")
			goto Death
		OkPerfect5:
			TNT1 A 1 A_GiveInventory("AmmoTake",1)
			TNT1 A 0 A_JumpIfInventory("AmmoTake",4,1)
			goto Spawn
			TNT1 A 0 A_TakeInventory("AmmoTake",999)
			TNT1 A 0 A_TakeFromTarget("VirusOutbreakAmmo",1)
			TNT1 A 0 A_JumpIfInTargetInventory("VirusOutbreakAmmo",1,"Spawn")
			goto Death
		OkPerfect6:
			TNT1 A 1 A_GiveInventory("AmmoTake",1)
			TNT1 A 0 A_JumpIfInventory("AmmoTake",3,1)
			goto Spawn
			TNT1 A 0 A_TakeInventory("AmmoTake",999)
			TNT1 A 0 A_TakeFromTarget("VirusOutbreakAmmo",1)
			TNT1 A 0 A_JumpIfInTargetInventory("VirusOutbreakAmmo",1,"Spawn")
			goto Death
		OkPerfect7:
			TNT1 A 1 A_GiveInventory("AmmoTake",1)
			TNT1 A 0 A_JumpIfInventory("AmmoTake",2,1)
			goto Spawn
			TNT1 A 0 A_TakeInventory("AmmoTake",999)
			TNT1 A 0 A_TakeFromTarget("VirusOutbreakAmmo",1)
			TNT1 A 0 A_JumpIfInTargetInventory("VirusOutbreakAmmo",1,"Spawn")
			goto Death
		OkPerfect8:
			TNT1 A 1 A_GiveInventory("AmmoTake",1)
			TNT1 A 0 A_JumpIfInventory("AmmoTake",1,1)
			goto Spawn
			TNT1 A 0 A_TakeInventory("AmmoTake",999)
			TNT1 A 0 A_TakeFromTarget("VirusOutbreakAmmo",1)
			TNT1 A 0 A_JumpIfInTargetInventory("VirusOutbreakAmmo",1,"Spawn")
			goto Death
		Death:
			TNT1 A 0 A_TakeFromTarget("VirusExtend",999)
			VIRU B 0 A_TakeFromTarget("ReadyToGiveExtends",999)
			stop
	}
}

actor VirusWeakener : PowerProtection
{
	damagefactor "Normal", 1.5
	damagefactor "VirusOutbreak", 1.0
	powerup.duration 0x7FFFFFFD
}

actor VirusProtection : PowerProtection
{
	damagefactor "VirusOutbreak", 0.0
	powerup.duration 3
}

actor VirusPain : CustomInventory
{
	States
	{
		Pickup:
			TNT1 A 0 A_JumpIfInventory("VirusTime", 1, "VirusReset")
			TNT1 A 0 A_GiveInventory("VirusTime", 250)
			TNT1 A 0 A_GiveInventory("VirusWeakener", 1)
			TNT1 A 0 A_SpawnItemEx("VirusWatcher")
			stop
		VirusReset:
			TNT1 A 0 A_GiveInventory("VirusTime", 250)
			stop
	}
}

actor VirusTime : Inventory
{
	inventory.amount 1
	inventory.maxamount 250
}

actor VirusWatcher : BasicWatcher
{
	States
	{
		Spawn:
			TNT1 A 0
			TNT1 A 1 A_GiveToTarget("VirusDebuffFX",1)
			TNT1 A 0 A_TakeFromTarget("VirusTime", 1)
			TNT1 A 0 A_JumpIfInTargetInventory("VirusWeakener",1,1)
			goto Death
			TNT1 A 0 A_JumpIfInTargetInventory("VirusTime", 1, "Spawn")
		Death:
			TNT1 A 0 A_TakeFromTarget("VirusWeakener", 999)
			stop 
	}
}

actor VirusDebuffFX : CustomInventory
{
	States
	{
		Pickup:
			TNT1 A 0
			TNT1 A 0 A_SpawnItemEx("VirusOutbreakFX", random(-32, 32), random(-32, 32), random(0,64))
			stop
	}
}

actor VirusOutbreakFX : BasicGraphicEffect
{
	States
	{
		SpawnFrame:
			VIRU A 1 A_SetTranslucent(0.2)
			VIRU A 1 A_SetTranslucent(0.4)
			VIRU A 1 A_SetTranslucent(0.6)
			VIRU A 1 A_SetTranslucent(0.8)
			VIRU A 1 A_SetTranslucent(0.6)
			VIRU A 1 A_SetTranslucent(0.4)
			VIRU A 1 A_SetTranslucent(0.2)
			stop
	}
}