actor CharadeCloneWep_NormalBar : NormalBar { args 4, 198 }
actor CharadeCloneWep_ScriptBar : ScriptBar {}

actor CharadeCloneWep : BaseMM8BDMWep
{
	//$Category MM8BDM-Weapons
	//$Title Charade Clone
	Weapon.AmmoUse 7
	Weapon.AmmoGive 28
	Weapon.SlotNumber 7
	Inventory.Pickupmessage "$PU_CHARADECLONE"
	Obituary "$OB_CHARADECLONE"
	Tag "$TAG_CHARADECLONE"
	weapon.ammotype "CharadeCloneAmmo"
	inventory.icon "CHRDICO"
	States
	{
		SpawnLoop:
			CHRD A -1
			loop
			
		Ready:
			CHRD B 0 ACS_NamedExecuteWithResult("core_weaponcolor",CLR_CHARADECLONE)
			CHRD B 1 A_WeaponReady
			Goto Ready+1
			
		Deselect:
			CHRD B 0 A_JumpIfInventory("ShieldCheck",1,1)
			goto DeselectSwap
			TNT1 A 0 A_TakeInventory("ShieldCheck", 1)
			TNT1 A 0 A_GiveInventory("CharadeEnd", 1)
			TNT1 A 0 A_TakeInventory("CharadeCloneCharge",999)
			TNT1 A 0 A_GiveInventory("CharadeCloneCall", 1)
			TNT1 A 0 A_TakeInventory("CharadeCloneSpeed", 1)
			CHRD DDCCBB 1
			goto DeselectSwap
		Select:
			CHRD B 0
			goto SelectSwap

		Fire:
			TNT1 A 0 A_JumpIfInventory("ShieldCheck",1,"ShieldThrow")
			TNT1 A 0 A_JumpIfNoAmmo("NoAmmo")
			goto ShieldActivate
		ShieldActivate:
			CHRD B 1
			TNT1 A 0 A_GiveInventory("ShieldCheck",1)
			TNT1 A 0 A_GiveInventory("CharadeArmor_P",1)
			TNT1 A 0 A_GiveInventory("SetDynamicArmorDosage", 1)
			TNT1 A 0 A_GiveInventory("CharadeStart",1)
			TNT1 A 0 A_GiveInventory("CharadeCloneCharge",125)
			TNT1 A 0 A_TakeInventory("CharadeCloneCall", 1)
			TNT1 A 0 A_TakeInventory("CharadeCloneWarp", 1)
			TNT1 A 0 A_TakeInventory("CharadeCloneAmmo", 7)
			TNT1 A 0 A_GiveInventory("CharadeCloneSpeed", 1)
			TNT1 A 0 A_PlaySoundEx("weapon/charade","Weapon")
			TNT1 A 0 A_SpawnItemEx("CharadeClone",0,0,0,0,0,0,0,SXF_TRANSFERTRANSLATION,0)
			CHRD C 1

			TNT1 A 0 A_GiveInventory("CharadeContinue",1)
			TNT1 A 0 A_TakeInventory("CharadeCloneCharge",1)
			TNT1 A 0 A_JumpIfInventory("CharadeCloneCharge",1,1)
			goto ShieldThrow2
			TNT1 A 0 A_JumpIfInventory("BasicArmor",1,1)
			goto ShieldThrow

			CHRD C 1

			TNT1 A 0 A_GiveInventory("CharadeContinue",1)
			TNT1 A 0 A_TakeInventory("CharadeCloneCharge",1)
			TNT1 A 0 A_JumpIfInventory("CharadeCloneCharge",1,1)
			goto ShieldThrow2
			TNT1 A 0 A_JumpIfInventory("BasicArmor",1,1)
			goto ShieldThrow

			CHRD D 1

			TNT1 A 0 A_GiveInventory("CharadeContinue",1)
			TNT1 A 0 A_TakeInventory("CharadeCloneCharge",1)
			TNT1 A 0 A_JumpIfInventory("CharadeCloneCharge",1,1)
			goto ShieldThrow2
			TNT1 A 0 A_JumpIfInventory("BasicArmor",1,1)
			goto ShieldThrow

			CHRD D 1

			TNT1 A 0 A_GiveInventory("CharadeContinue",1)
			TNT1 A 0 A_TakeInventory("CharadeCloneCharge",1)
			TNT1 A 0 A_JumpIfInventory("CharadeCloneCharge",1,1)
			goto ShieldThrow2
			TNT1 A 0 A_JumpIfInventory("BasicArmor",1,1)
			goto ShieldThrow

		ShieldLoop:

			TNT1 A 0 A_GiveInventory("CharadeContinue",1)
			TNT1 A 0 A_TakeInventory("CharadeCloneCharge",1)
			TNT1 A 0 A_JumpIfInventory("CharadeCloneCharge",1,1)
			goto ShieldThrow2
			TNT1 A 0 A_JumpIfInventory("BasicArmor",1,1)
			goto ShieldThrow

			TNT1 A 0 A_JumpIfInventory("CharadeCloneCharge",110,2)
			TNT1 A 0 A_WeaponReady
			CHRD E 1
			goto ShieldLoop
		ShieldThrow:
			TNT1 A 0 A_TakeInventory("ShieldCheck", 1)
			TNT1 A 0 A_GiveInventory("CharadeEnd", 1)
			TNT1 A 0 A_TakeInventory("CharadeCloneCharge",999)
			TNT1 A 0 A_GiveInventory("CharadeCloneWarp", 1)
			TNT1 A 0 A_TakeInventory("CharadeCloneSpeed", 1)
			TNT1 A 0 A_ChangeFlag("SHOOTABLE", 0)
			TNT1 A 0 A_ChangeFlag("NONSHOOTABLE", 1)
			CHRD D 1
			TNT1 A 0 A_ChangeFlag("SHOOTABLE", 1)
			TNT1 A 0 A_ChangeFlag("NONSHOOTABLE", 0)
			CHRD DCCBB 1
			CHRD B 9
			Goto Ready+1
		ShieldThrow2:
			TNT1 A 0 A_TakeInventory("ShieldCheck", 1)
			TNT1 A 0 A_GiveInventory("CharadeEnd", 1)
			TNT1 A 0 A_TakeInventory("CharadeCloneCharge",999)
			TNT1 A 0 A_GiveInventory("CharadeCloneCall", 1)
			TNT1 A 0 A_TakeInventory("CharadeCloneSpeed", 1)
			CHRD DDCCBB 1
			CHRD B 1
			Goto Ready+1

		Altfire:
			TNT1 A 0 A_JumpIfInventory("ShieldCheck",1,"Altdeselect")
			goto Fire
		AltDeselect:
			TNT1 A 0 A_TakeInventory("ShieldCheck", 1)
			TNT1 A 0 A_GiveInventory("CharadeEnd", 1)
			TNT1 A 0 A_TakeInventory("CharadeCloneCharge",999)
			TNT1 A 0 A_GiveInventory("CharadeCloneCall", 1)
			TNT1 A 0 A_TakeInventory("CharadeCloneSpeed", 1)
			CHRD DDCCBB 1
			CHRD B 1
			goto Ready+1

		NoAmmo:
			CHRD B 1 ACS_NamedExecuteAlways("core_noammo",0)
			Goto Ready+1
	}
}

actor CharadeCloneSpeed : PowerSpeed
{
    +POWERSPEED.NOTRAIL
    speed 1.25
    powerup.duration 0x7fffffff
}

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

actor CharadeCloneCharge : WeaponCharge
{
	inventory.maxamount 125
}

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

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

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

actor CharadeClone
{
	-SOLID
	+NOGRAVITY
	+DONTBLAST
	+DONTREFLECT
	+THRUACTORS
	//+NOCLIP
	//+NOINTERACTION
	height 56
	radius 16
	scale 2.5
	renderstyle translucent
	alpha 0.9
	States
	{
		Spawn:
			CHRD F 0
		Spawn2:
			CHRD F 0 A_JumpIfInTargetInventory("CharadeCloneDisable",1,"TeleportOffFX")
			CHRD F 0 A_JumpIfInTargetInventory("CharadeCloneCall",1,"TeleportOff")
			CHRD F 0 A_JumpIfInTargetInventory("CharadeCloneWarp",1,"TeleportBack")
			CHRD F 0 A_JumpIfInventory("CutterFlag", 200, "Death")
			CHRD F 0 A_GiveInventory("CutterFlag", 1)
			CHRD F 1
			loop
		TeleportBack:
			TNT1 A 0 A_GiveToTarget("CharadeCloneExplodePickup",1)

			//TNT1 A 0 Thing_Move(ACS_NamedExecuteWithResult("core_gettarget"),0,1)

			TNT1 A 0 Thing_ChangeTID(0,5000)
			TNT1 A 0 Thing_Move(ACS_NamedExecuteWithResult("core_gettarget"),TID,1)
			TNT1 A 0 Thing_ChangeTID(0,0)

			TNT1 A 0 A_GiveToTarget("ResolidWarpResync",1)
			stop
		TeleportOff:
			TNT1 A 0 A_GiveToTarget("CharadeCloneBeamInPickup",1)
		TeleportOffFX:
			TNT1 A 1 A_SpawnItemEx("CharadeCloneTele",0,0,38,0,0,0,0,SXF_TRANSFERTRANSLATION|SXF_NOCHECKPOSITION)
			TNT1 A 1 A_SpawnItemEx("CharadeCloneTele",0,0,56,0,0,0,0,SXF_TRANSFERTRANSLATION|SXF_NOCHECKPOSITION)
			TNT1 A 1 A_SpawnItemEx("CharadeCloneTele",0,0,72,0,0,0,0,SXF_TRANSFERTRANSLATION|SXF_NOCHECKPOSITION)
			TNT1 A 1 A_SpawnItemEx("CharadeCloneTele",0,0,90,0,0,0,0,SXF_TRANSFERTRANSLATION|SXF_NOCHECKPOSITION)
			TNT1 A 1 A_SpawnItemEx("CharadeCloneTele",0,0,108,0,0,0,0,SXF_TRANSFERTRANSLATION|SXF_NOCHECKPOSITION)
			TNT1 A 1 A_SpawnItemEx("CharadeCloneTele",0,0,126,0,0,0,0,SXF_TRANSFERTRANSLATION|SXF_NOCHECKPOSITION)
			TNT1 A 1 A_SpawnItemEx("CharadeCloneTele",0,0,144,0,0,0,0,SXF_TRANSFERTRANSLATION|SXF_NOCHECKPOSITION)
			TNT1 A 1 A_SpawnItemEx("CharadeCloneTele",0,0,162,0,0,0,0,SXF_TRANSFERTRANSLATION|SXF_NOCHECKPOSITION)
			TNT1 A 1 A_SpawnItemEx("CharadeCloneTele",0,0,180,0,0,0,0,SXF_TRANSFERTRANSLATION|SXF_NOCHECKPOSITION)
			TNT1 A 1 A_SpawnItemEx("CharadeCloneTele",0,0,198,0,0,0,0,SXF_TRANSFERTRANSLATION|SXF_NOCHECKPOSITION)
			TNT1 A 1 A_SpawnItemEx("CharadeCloneTele",0,0,216,0,0,0,0,SXF_TRANSFERTRANSLATION|SXF_NOCHECKPOSITION)
			TNT1 A 1 A_SpawnItemEx("CharadeCloneTele",0,0,234,0,0,0,0,SXF_TRANSFERTRANSLATION|SXF_NOCHECKPOSITION)
			TNT1 A 1 A_SpawnItemEx("CharadeCloneTele",0,0,252,0,0,0,0,SXF_TRANSFERTRANSLATION|SXF_NOCHECKPOSITION)
			TNT1 A 1 A_SpawnItemEx("CharadeCloneTele",0,0,270,0,0,0,0,SXF_TRANSFERTRANSLATION|SXF_NOCHECKPOSITION)
			TNT1 A 1 A_SpawnItemEx("CharadeCloneTele",0,0,288,0,0,0,0,SXF_TRANSFERTRANSLATION|SXF_NOCHECKPOSITION)
			TNT1 A 1 A_SpawnItemEx("CharadeCloneTele",0,0,306,0,0,0,0,SXF_TRANSFERTRANSLATION|SXF_NOCHECKPOSITION)
			TNT1 A 1 A_SpawnItemEx("CharadeCloneTele",0,0,324,0,0,0,0,SXF_TRANSFERTRANSLATION|SXF_NOCHECKPOSITION)
			stop
		Death:
			TNT1 A 0
			stop
	}
}

actor CharadeCloneTele : BasicGraphicEffect
{
	+NOTIMEFREEZE
	States
	{
		SpawnFrame:
			TFOG A 1
			stop
	}
}

actor CharadeCloneExplodePickup : CustomInventory
{
	States
	{
		Pickup:
			TNT1 A 0 A_SpawnItemEX("CharadeCloneExplode",0,0,28)
			stop
	}
}

actor CharadeCloneBeamInPickup : CustomInventory
{
	States
	{
		Pickup:
			TNT1 A 0 A_SpawnItemEx("CharadeCloneBeamIn",0,0,28,0,0,0,0,SXF_TRANSFERTRANSLATION)
			stop
	}
}

actor CharadeCloneExplode : BasicExplosion
{
	damagetype "CharadeClone"
	Obituary "$OB_CHARADECLONE"
	States
	{
		Spawn:
			TNT1 A 0
			TNT1 A 0 A_Explode(CallACS("mmrf_cbm_damage", 53),128,0)
		Spawn2:
			TNT1 A 0 A_PlaySoundEx("misc/mm3explosion","Weapon")
			NAPA EFGHIJKLMNOPQRS 2
			stop
	}
}

actor CharadeCloneBeamIn : CharadeCloneExplode
{
	States
	{
		Spawn:
			TNT1 A 0
			TNT1 A 17
			TNT1 A 1 A_SpawnItemEx("CharadeCloneTele",0,0,324,0,0,0,0,SXF_TRANSFERTRANSLATION|SXF_NOCHECKPOSITION)
			TNT1 A 1 A_SpawnItemEx("CharadeCloneTele",0,0,306,0,0,0,0,SXF_TRANSFERTRANSLATION|SXF_NOCHECKPOSITION)
			TNT1 A 1 A_SpawnItemEx("CharadeCloneTele",0,0,288,0,0,0,0,SXF_TRANSFERTRANSLATION|SXF_NOCHECKPOSITION)
			TNT1 A 1 A_SpawnItemEx("CharadeCloneTele",0,0,270,0,0,0,0,SXF_TRANSFERTRANSLATION|SXF_NOCHECKPOSITION)
			TNT1 A 1 A_SpawnItemEx("CharadeCloneTele",0,0,252,0,0,0,0,SXF_TRANSFERTRANSLATION|SXF_NOCHECKPOSITION)
			TNT1 A 1 A_SpawnItemEx("CharadeCloneTele",0,0,234,0,0,0,0,SXF_TRANSFERTRANSLATION|SXF_NOCHECKPOSITION)
			TNT1 A 1 A_SpawnItemEx("CharadeCloneTele",0,0,216,0,0,0,0,SXF_TRANSFERTRANSLATION|SXF_NOCHECKPOSITION)
			TNT1 A 1 A_SpawnItemEx("CharadeCloneTele",0,0,198,0,0,0,0,SXF_TRANSFERTRANSLATION|SXF_NOCHECKPOSITION)
			TNT1 A 1 A_SpawnItemEx("CharadeCloneTele",0,0,180,0,0,0,0,SXF_TRANSFERTRANSLATION|SXF_NOCHECKPOSITION)
			TNT1 A 1 A_SpawnItemEx("CharadeCloneTele",0,0,162,0,0,0,0,SXF_TRANSFERTRANSLATION|SXF_NOCHECKPOSITION)
			TNT1 A 1 A_SpawnItemEx("CharadeCloneTele",0,0,144,0,0,0,0,SXF_TRANSFERTRANSLATION|SXF_NOCHECKPOSITION)
			TNT1 A 1 A_SpawnItemEx("CharadeCloneTele",0,0,126,0,0,0,0,SXF_TRANSFERTRANSLATION|SXF_NOCHECKPOSITION)
			TNT1 A 1 A_SpawnItemEx("CharadeCloneTele",0,0,108,0,0,0,0,SXF_TRANSFERTRANSLATION|SXF_NOCHECKPOSITION)
			TNT1 A 1 A_SpawnItemEx("CharadeCloneTele",0,0,90,0,0,0,0,SXF_TRANSFERTRANSLATION|SXF_NOCHECKPOSITION)
			TNT1 A 1 A_SpawnItemEx("CharadeCloneTele",0,0,72,0,0,0,0,SXF_TRANSFERTRANSLATION|SXF_NOCHECKPOSITION)
			TNT1 A 1 A_SpawnItemEx("CharadeCloneTele",0,0,56,0,0,0,0,SXF_TRANSFERTRANSLATION|SXF_NOCHECKPOSITION)
			TNT1 A 1 A_SpawnItemEx("CharadeCloneTele",0,0,38,0,0,0,0,SXF_TRANSFERTRANSLATION|SXF_NOCHECKPOSITION)
			TNT1 A 0 A_Explode(CallACS("mmrf_cbm_damage", 80),180,0)
			goto Spawn2
	}
}

const int CONST_CLONEHP = 20;

actor CharadeArmor_P : CustomInventory
{
	States
	{
		Pickup:
			TNT1 A 0 A_JumpIf(CallACS("mmrf_cbm_damage", 1) > 1, 2)
			TNT1 A 0 A_GiveInventory("CharadeArmor", 1)
			stop
			TNT1 A 0 A_GiveInventory("Beef_CharadeArmor", 1)
			stop
	}
}

actor CharadeArmor : BasicArmorPickup
{
	Armor.Savepercent 0
	Armor.Saveamount 20
}

actor Beef_CharadeArmor : CharadeArmor
{
	Armor.Saveamount 200
}

actor CharadeStart : CustomInventory
{
	States
	{
		Pickup:
			TNT1 A 0 A_JumpIf(health > 0 && health < CallACS("mmrf_cbm_damage", CONST_CLONEHP) + 1,"HealthLoan")
			TNT1 A 0 A_SetUserVar("user_loanhp",0)
			goto Pickup2
		HealthLoan:
			TNT1 A 0 A_SetUserVar("user_loanhp",CallACS("mmrf_cbm_damage", CONST_CLONEHP) + 1 - health)
			TNT1 A 0 HealThing(CallACS("mmrf_cbm_damage", CONST_CLONEHP) + 1 - health)
			goto Pickup2
		Pickup2:
			TNT1 A 0 A_SetUserVar("user_hp",health)
			//TNT1 A 0 A_GiveInventory("CharadeArmor",1)
			TNT1 A 0 ACS_NamedExecuteWithResult("core_buddhaplayer",0,1)
			stop
	}
}

actor CharadeContinue : CustomInventory
{
	States
	{
		Pickup:
			TNT1 A 0 A_JumpIf(health<CallACS("mmrf_charadeclone",CONST_VAR_HP),"GotHit")
			TNT1 A 0 A_JumpIf(health>CallACS("mmrf_charadeclone",CONST_VAR_HP),"Healed")
			stop
		GotHit:
			//TNT1 A 0 A_LogInt(user_hp-health)
			TNT1 A 0 A_TakeInventory("BasicArmor",CallACS("mmrf_charadeclone",CONST_VAR_HP)-health)
			TNT1 A 0 HealThing(CallACS("mmrf_charadeclone",CONST_VAR_HP)-health)
			stop
		Healed:
			TNT1 A 0 A_JumpIf(CallACS("mmrf_charadeclone",CONST_VAR_LOANHP)>0,"TakeLoanCheck")
			TNT1 A 0 A_SetUserVar("user_hp",health)
			stop
		TakeLoanCheck:
			TNT1 A 0 A_JumpIf(health >= CallACS("mmrf_charadeclone", CONST_VAR_LOANHP) + CallACS("mmrf_cbm_damage", CONST_CLONEHP) + 1, "TakeLoanfull")
			goto TakeLoanPartial
		TakeLoanFull:
			TNT1 A 0 A_ChangeFlag("NOPAIN",1)
			TNT1 A 0 DamageThing(CallACS("mmrf_charadeclone",CONST_VAR_LOANHP))
			TNT1 A 0 A_ChangeFlag("NOPAIN",0)
			TNT1 A 0 A_SetUserVar("user_loanhp",0)
			TNT1 A 0 A_SetUserVar("user_hp",health)
			stop
		TakeLoanPartial:
			TNT1 A 0 A_SetUserVar("user_loanhp",CallACS("mmrf_charadeclone",CONST_VAR_LOANHP)-(health-CallACS("mmrf_charadeclone",CONST_VAR_HP)))
			TNT1 A 0 A_ChangeFlag("NOPAIN",1)
			TNT1 A 0 DamageThing(health-CallACS("mmrf_charadeclone",CONST_VAR_HP))
			TNT1 A 0 A_ChangeFlag("NOPAIN",0)
			stop
	}
}

actor CharadeEnd : CustomInventory
{
	States
	{
		Pickup:
			TNT1 A 0 A_JumpIf(CallACS("mmrf_charadeclone",CONST_VAR_LOANHP)>0,"TakeLoan")
			goto Pickup2
		TakeLoan:
			TNT1 A 0 A_ChangeFlag("NOPAIN",1)
			TNT1 A 0 DamageThing(CallACS("mmrf_charadeclone",CONST_VAR_LOANHP))
			TNT1 A 0 A_ChangeFlag("NOPAIN",0)
			goto Pickup2
		Pickup2:
			TNT1 A 0 A_TakeInventory("BasicArmor",9999)
			TNT1 A 0 A_TakeInventory("DynamicArmorDosage", 9999)
			TNT1 A 0 ACS_NamedExecuteWithResult("core_buddhaplayer",0,0)
			stop
	}
}
