actor CryptCloakWep_NormalBar : NormalBar { args 7, 227 }
actor CryptCloakWep_ScriptBar : ScriptBar {}

actor CryptCloakWep : BaseMM8BDMWep 
{
    //$Category MM8BDM-Weapons
    //$Title Crypt Cloak
    Weapon.AmmoUse 1
    Weapon.AmmoGive 112
    Weapon.SlotNumber 7
    Inventory.Pickupmessage "$PU_CRYPTCLOAK"
    Obituary "$OB_CRYPTCLOAK"
    Tag "$TAG_CRYPTCLOAK"
    weapon.ammotype "CryptCloakAmmo"
    inventory.icon "CRYPTI"
    States
    {
		SpawnLoop:
			CRCL A -1
			loop
			
		Ready:
			CRCL E 0 ACS_NamedExecuteWithResult("core_weaponcolor", CLR_CRYPTCLOAK)
			CRCL E 1 A_WeaponReady
			Goto Ready+1
			
		Deselect:
			CRCL E 0
			goto DeselectSwap
		Select:
			CRCL E 0
			goto SelectSwap
			
		Fire:
			SKLA A 0 A_JumpIfInventory("IsBot", 1, "BotFire")
			SKLA A 0 A_JumpIfInventory("CryptCloakedCheck", 1, "Uncloak")
			SKLA A 0 A_JumpIfNoAmmo("NoAmmo")
			goto Cloak
		Cloak:
			CRCL J 0 A_GiveInventory("CryptCloakedCheck", 1)
			CRCL J 0 A_GiveInventory("ShieldCheck", 1)
			CRCL J 0 ACS_NamedExecuteWithResult("core_chargecolor", CLR_CRYPTCLOAKED, CLR_CRYPTCLOAKED)
			CRCL J 0 A_GunFlash("CloakEffect")
			CRCL J 0 A_TakeInventory("CryptCloakAmmo", 2, TIF_NOTAKEINFINITE)
			CRCL J 0 A_PlaySoundEx("weapon/cloakon", "weapon")
			CRCL J 0 ACS_NamedExecuteWithResult("core_SetActorProperty", APROP_RenderStyle, STYLE_Add, 65536)
			CRCL L 0 ACS_NamedExecuteWithResult("mmrf_cloakplayer", 0, true)
			CRCL I 2
			CRCL J 2 A_GiveInventory("CentaurFlashHalfAlphaGiver", 1)
			CRCL K 2 A_GiveInventory("CentaurFlashQuarterAlphaGiver", 1)
		CloakActivate:
			CRCL L 2
			CRCL L 0 A_GiveInventory("CentaurFlashNoAlphaGiver", 1)
			CRCL L 0 ACS_NamedExecuteWithResult("core_cantseekplayer", 0, true)
			CRCL L 0 ACS_NamedExecuteWithResult("core_notargetplayer", 0, true)
			CRCL L 0 ACS_NamedExecuteWithResult("core_dontidentifytargetplayer", 0, true)
		CloakActive:
			CRCL L 0 A_JumpIfInventory("IsBot", 1, "YesBot")
			CRCL L 0 A_JumpIfNoAmmo("Uncloak")
			CRCL L 1 A_WeaponReady(WRF_NOSWITCH)
			CRCL L 0 A_JumpIfInventory("CryptCloakAmmo", 1, "CloakActive")
			goto Uncloak
		YesBot:
			CRCL L 0 A_JumpIfNoAmmo("UncloakBot")
			CRCL L 1 //A_WeaponReady(WRF_NOSWITCH)
			CRCL L 0 A_JumpIfInventory("CryptCloakAmmo", 1, "CloakActive")
		UncloakBot:
			CRCL L 0 A_GiveInventory("CryptCloakAmmo", 112)
			CRCL L 0 A_GiveInventory("CryptCloakBotDelay", 1)
		Uncloak:
			CRCL L 0 A_PlaySoundEx("weapon/cloakoff", "weapon")
			CRCL L 0 A_TakeInventory("ShieldCheck", 1)
			CRCL L 0 A_TakeInventory("CryptCloakedCheck", 1)
			CRCL L 2 A_TakeInventory("CentaurFlashNoAlpha", 1)
			CRCL K 2 A_TakeInventory("CentaurFlashHalfAlpha", 1)
			CRCL J 2 A_TakeInventory("CentaurFlashQuarterAlpha", 1)
			CRCL J 0 ACS_NamedExecuteWithResult("mmrf_cloakplayer", 0, false)
			CRCL J 0 ACS_NamedExecuteWithResult("core_cantseekplayer", 0, false)
			CRCL J 0 ACS_NamedExecuteWithResult("core_notargetplayer", 0, false)
			CRCL I 2 ACS_NamedExecuteWithResult("core_dontidentifytargetplayer", 0, false)
			CRCL J 0 ACS_NamedExecuteWithResult("core_SetActorProperty", APROP_RenderStyle, STYLE_Translucent, 65536)
			CRCL L 0 ACS_NamedExecuteWithResult("core_chargecolor", CLR_CRYPTCLOAK, TCLR_NONE)
			Goto Ready+1
			
		NoAmmo:
			CRCL E 1 ACS_NamedExecuteAlways("core_noammo",0)
			Goto Ready+1
			
		BotFire:
			BHOL I 0 A_JumpIfInventory("CryptCloakBotDelay", 1, "BotFireBuster")
			goto Fire+1
		BotFireBuster:
			BUST B 0 ACS_NamedExecuteWithResult("core_weaponcolor",CLR_MEGABUSTER)
			BUST B 0 A_PlaySoundEx("weapons/busters/megabusterfire","SoundSlot6")
			BUST B 0 A_FireCustomMissile("MegaShot",0,0,8,0)
			BUST CD 3
			BUST B 2
			BUST B 0 A_JumpIfInventory("CryptCloakBotDelay", 1, 2)
			BUST B 0 ACS_NamedExecuteWithResult("core_weaponcolor",CLR_CRYPTCLOAK)
			BUST B 0 A_Refire
			goto Ready+1
			
		CloakEffect:
			TNT1 A 1 A_GiveInventory("CryptCloakTaker", 1)
			TNT1 A 0 A_JumpIf(floorz != z, "CloakAir")
			TNT1 A 0 A_JumpIfInventory("IsBot", 1, "BotEffect")
			TNT1 A 0 A_JumpIfInventory("CryptCloakedCheck", 1, "CloakEffect")
			stop
		BotEffect:
			TNT1 A 0 A_Jump(192, 2)
			TNT1 A 0 A_ChangeVelocity(momx, momy, CallACS("core_getactorproperty", 0, APROP_JumpZ, DATATYPE_RAW) / 65536.0, CVF_REPLACE)
			TNT1 A 0 A_JumpIfInventory("CryptCloakedCheck", 1, "CloakEffect")
			stop
		CloakAir:
			TNT1 A 1 A_GiveInventory("CryptCloakTaker", 1)
			TNT1 A 0 A_JumpIf(floorz == z, "Stomp")
			TNT1 A 0 A_JumpIfInventory("CryptCloakedCheck", 1, "CloakAir")
			stop
		Stomp:
			TNT1 A 0 A_PlaySoundEx("misc/mm3explosion", "SoundSlot7")
			TNT1 A 0 A_SpawnItemEx("CloakWave",0,0,0,35,0,0,0)
			TNT1 A 0 A_SpawnItemEx("CloakWave",0,0,0,35,0,0,45)
			TNT1 A 0 A_SpawnItemEx("CloakWave",0,0,0,35,0,0,90)
			TNT1 A 0 A_SpawnItemEx("CloakWave",0,0,0,35,0,0,135)
			TNT1 A 0 A_SpawnItemEx("CloakWave",0,0,0,35,0,0,180)
			TNT1 A 0 A_SpawnItemEx("CloakWave",0,0,0,35,0,0,-45)
			TNT1 A 0 A_SpawnItemEx("CloakWave",0,0,0,35,0,0,-90)
			TNT1 A 0 A_SpawnItemEx("CloakWave",0,0,0,35,0,0,-135)
			TNT1 A 0 A_JumpIfInventory("CryptCloakedCheck", 1, "CloakEffect")
			stop
    }
}

actor CryptCloakTaker : CustomInventory
{
    States
    {
		Pickup:
			TNT1 A 0 A_JumpIfInventory("CryptCloakTakeDelay", 1, "End")
			TNT1 A 0 A_TakeInventory("CryptCloakAmmo", 1, TIF_NOTAKEINFINITE)
			TNT1 A 0 A_GiveInventory("CryptCloakTakeDelay", 1)
		End:
			TNT1 A 0 
			stop
    }
}

actor CryptCloakTakeDelay : Powerup { powerup.duration 2 }

actor CryptCloakBotDelay : Powerup { powerup.duration -5 }

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

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

actor CloakWave : BasicProjectile
{
	-NOGRAVITY
	Damage (CallACS("mmrf_cbm_damage", 20))
	damagetype "CryptCloak"
	Obituary "$OB_CRYPTCLOAK"
	Height 40
	Radius 6
	Scale 2.5
	gravity 900.0
	speed 35
	var int user_TranslateWhiteColors;
	States
	{
		Spawn:
			TNT1 A 1
			CRCL A 0 A_GiveInventory("Clip",1)
			CRCL BCD 3 A_SpawnItemEx("CloakTrail",-1,0,0,0,0,0,0,SXF_WEPFXCOLOR)
			Goto Spawn+2
		Crash:
		XDeath:
			TNT1 A 0
			stop
		Death:
			TNT1 A 0 A_JumpIfInventory("Clip",1,"Continue")
			TNT1 A 1
			stop
		Continue:
			TNT1 A 0 A_CustomMissile("CloakWave",0,0,0,2,0)
			TNT1 A 1
			stop
	}
}

actor CloakTrail : BasicGraphicEffect
{
	var int user_TranslateWhiteColors;
	States
	{
		SpawnFrame:
			TNT1 A 0
			CRCL DCB 3
			stop
	}
}