actor Plugman : VCBaseClass
{
Player.ScoreIcon "PLUGMUGS"
player.startitem "BaseFlagPack", 1
player.soundclass "plugmanc"
Player.ViewHeight 64
player.displayname "Plugman"
player.startitem "PlugBallBoss"
player.startitem "Base28Ammo", 28
player.startitem "UltimateAttackItem3", 1
player.startitem "UltSoundWatcherSpawn3"
player.startitem "IsFromMM9"
States
{
Spawn:
PLUM A 0
PLUM B 1 A_JumpIf(z-floorz>0, "Jumping")
PLUM A 1 A_JumpIf(z-floorz>0, "Jumping")
PLUM A 0 A_JumpIfInventory("IsUsingAltSkin2",1,1)
Goto Spawn+2
PLUM A 1
PLUM P 2
Goto Spawn+2

See:
PLUM BBBBBCCCCCDDDDDEEEEE 1 A_JumpIf(z-floorz>0, "Jumping")
Goto Spawn

Jumping:
PLUM I 1 A_JumpIf(z-floorz<=0, "Spawn")
wait

Missile:
PLUM FFFF 1 A_JumpIf(z-floorz>0, "JumpShoot")
PLUM GGGGG 1 A_JumpIf(z-floorz>0, "JumpShoot")
Goto Spawn+1

Animation1:
PLUM GGGGGGGGGGGG 1 A_JumpIf(z-floorz>0, "JumpingA1")
goto Spawn+1

JumpingA1:
PLUM KKKKKKKKKKKK 1 A_JumpIf(z-floorz<=0, "Animation1")
goto Jumping

Animation2:
PLUM A 0
goto Spawn+2

Animation3:
PLUM LLLLLLLLLL 1 A_JumpIf(z-floorz>0, "JumpingA3")
goto Spawn+2

JumpingA3:
PLUM MMMMMMMMMM 1 A_JumpIf(z-floorz<=0, "Animation1")
goto Jumping

JumpShoot:
PLUM JJJJ 1 A_JumpIf(z-floorz<=0, "Missile")
Goto JumpShoot2

JumpShoot2:
PLUM KKKKK 1 A_JumpIf(z-floorz<=0, "Missile")
goto Jumping

ClassTimeStop:
PLAY A 0 SetPlayerProperty(0,1,4)
//PLAY A 0 A_GiveInventory("TimeStoppedFlag",1)
PLAY A 0 ACS_Execute(528,0)
PLUM AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 1 A_Stop
//PLAY A 0 A_TakeInventory("TimeStoppedFlag",999)
PLAY A 0 SetPlayerProperty(0,0,4)
Goto pain+1
ClassPain:
//PLUM H 0 A_TakeInventory("TimeStoppedFlag",999)
PLUM HHHHHHHHHH 2 A_SpawnItem("PainFX",0,3)
Goto Spawn+1
ClassDeath:
PLUM H 20 ACS_ExecuteAlways(999,0,0)
PLUM H 0 A_PlayerScream
NOFX A 0 A_SpawnItemEx("FakeDeathFXMM9",0,0,32)
NOFX A 1 A_CheckPlayerDone
wait
ClassIceDeath:
PLUM A 35
NOFX A 0 A_SpawnItemEx("FrozenDeathFX",0,0,16)
NOFX A 1 A_CheckPlayerDone
wait
WeaponGetM:
CUTM H 0 A_JumpIfInTargetInventory("PlugBallWepM",1,2)
CUTM H 0 A_GiveToTarget("WeaponGetter")
CUTM H 0 A_GiveToTarget("PlugBallWepM")
goto ClassDeath
}
}

actor PlugBallBoss : VCBaseWeapon
{
	weapon.ammotype "Base28Ammo"
	weapon.ammouse 3
	Obituary "$OB_PLUGMAN1"
	States
	{
		Spawn:
		PLGH A 1
		loop
		
		
		ShadowHandle:
		PL9H A 0 A_JumpIfInventory("IsUsingAltSkin1",1,"AltSkinFrame1Shadow")
		PL9H A 0 A_JumpIfInventory("IsUsingAltSkin2",1,"AltSkinFrame2Shadow")
		PL9H A 0
		goto Ready2

		AltSkinFrame1:
		PLG_ A 0
		goto Ready2
		AltSkinFrame1Shadow:
		PL9_ A 0
		goto Ready2
		AltSkinFrame2:
		PLG2 A 0
		goto Ready2
		AltSkinFrame2Shadow:
		PL92 A 0
		goto Ready2
		
		Ready:
		PLGH A 0 A_JumpIfInventory("BaseCustomFlag1",1,"ShadowHandle")
		PLGH A 0 A_JumpIfInventory("IsUsingAltSkin1",1,"AltSkinFrame1")
		PLGH A 0 A_JumpIfInventory("IsUsingAltSkin2",1,"AltSkinFrame2")
		Ready2:
		"####" A 0 A_JumpIfInventory("Base28Ammo",9,"Ready.TF")
		"####" A 1 A_WeaponReady(WRF_NOPRIMARY*CallACS("VC_AmmoCheck",0,3)|WRF_NOSECONDARY*CallACS("VC_AmmoCheck",0,5)) "####" A 0 A_JumpIfInventory("UltAttackFlag",1,"UltimateAttack")
		"####" A 1 A_WeaponReady(WRF_NOPRIMARY*CallACS("VC_AmmoCheck",0,3)|WRF_NOSECONDARY*CallACS("VC_AmmoCheck",0,5)) "####" A 0 A_JumpIfInventory("UltAttackFlag",1,"UltimateAttack")
		"####" A 1 A_WeaponReady(WRF_NOPRIMARY*CallACS("VC_AmmoCheck",0,3)|WRF_NOSECONDARY*CallACS("VC_AmmoCheck",0,5)) "####" A 0 A_JumpIfInventory("UltAttackFlag",1,"UltimateAttack")
		"####" A 0 A_GiveInventory("Base28Ammo",1)
		Goto Ready
		Ready.TF:
		"####" A 1 A_WeaponReady(WRF_NOPRIMARY*CallACS("VC_AmmoCheck",0,3)|WRF_NOSECONDARY*CallACS("VC_AmmoCheck",0,5)) "####" A 0 A_JumpIfInventory("UltAttackFlag",1,"UltimateAttack") "####" A 0 A_JumpIf(ACS_NamedExecuteWithResult("VC_CheckBtn",3)*ACS_NamedExecuteWithResult("VC_PlugUser1Check")==3,"User1")
		"####" A 1 A_WeaponReady(WRF_NOPRIMARY*CallACS("VC_AmmoCheck",0,3)|WRF_NOSECONDARY*CallACS("VC_AmmoCheck",0,5)) "####" A 0 A_JumpIfInventory("UltAttackFlag",1,"UltimateAttack") "####" A 0 A_JumpIf(ACS_NamedExecuteWithResult("VC_CheckBtn",3)*ACS_NamedExecuteWithResult("VC_PlugUser1Check")==3,"User1")
		"####" A 1 A_WeaponReady(WRF_NOPRIMARY*CallACS("VC_AmmoCheck",0,3)|WRF_NOSECONDARY*CallACS("VC_AmmoCheck",0,5)) "####" A 0 A_JumpIfInventory("UltAttackFlag",1,"UltimateAttack") "####" A 0 A_JumpIf(ACS_NamedExecuteWithResult("VC_CheckBtn",3)*ACS_NamedExecuteWithResult("VC_PlugUser1Check")==3,"User1")
		"####" A 0 A_GiveInventory("Base28Ammo",1)
		Goto Ready
		Deselect:
		TNT1 AAAAAAAAAAAAAAAAAAAAAA 0 A_Lower
		"####" A 1 A_Lower
		Loop
		Select:
		TNT1 A 0 A_SpawnItemEx("PlugManSkinWatcher")
		TNT1 A 0 ACS_ExecuteAlways(991,0,9883)
		TNT1 AAAAAAAAAAAAAAAAAAAAAA 0 A_Raise
		TNT1 A 1 A_Raise
		Loop
		User1:
		"####" A 1 Offset(-9,24)
		"####" A 0 A_GiveInventory("PlugTFHandler",1)
		U1.Loop:
		"####" B 1 Offset(-18,16) A_SpawnItemEx("PlugGrabCheck",8,0,0,momx,momy,momz,0,8) "####" A 0 A_JumpIfInventory("SuplexID",1,"U1.Lift")
		"####" A 1 Offset(-18,16) A_SpawnItemEx("PlugGrabCheck",8,0,0,momx,momy,momz,0,8) "####" A 0 A_JumpIfInventory("SuplexID",1,"U1.Lift")
		"####" D 1 Offset(-18,16) A_SpawnItemEx("PlugGrabCheck",8,0,0,momx,momy,momz,0,8) "####" A 0 A_JumpIfInventory("SuplexID",1,"U1.Lift")
		"####" A 1 Offset(-18,16) A_SpawnItemEx("PlugGrabCheck",8,0,0,momx,momy,momz,0,8) "####" A 0 A_JumpIfInventory("SuplexID",1,"U1.Lift")
		"####" C 1 Offset(-18,16) A_SpawnItemEx("PlugGrabCheck",8,0,0,momx,momy,momz,0,8) "####" A 0 A_JumpIfInventory("SuplexID",1,"U1.Lift")
		"####" A 1 Offset(-18,16) A_SpawnItemEx("PlugGrabCheck",8,0,0,momx,momy,momz,0,8) "####" A 0 A_JumpIfInventory("SuplexID",1,"U1.Lift")
		"####" B 1 Offset(-18,16) A_SpawnItemEx("PlugGrabCheck",8,0,0,momx,momy,momz,0,8) "####" A 0 A_JumpIfInventory("SuplexID",1,"U1.Lift")
		"####" A 1 Offset(-18,16) A_SpawnItemEx("PlugGrabCheck",8,0,0,momx,momy,momz,0,8) "####" A 0 A_JumpIfInventory("SuplexID",1,"U1.Lift")
		"####" D 1 Offset(-18,16) A_SpawnItemEx("PlugGrabCheck",8,0,0,momx,momy,momz,0,8) "####" A 0 A_JumpIfInventory("SuplexID",1,"U1.Lift")
		"####" A 1 Offset(-18,16) A_SpawnItemEx("PlugGrabCheck",8,0,0,momx,momy,momz,0,8) "####" A 0 A_JumpIfInventory("SuplexID",1,"U1.Lift")
		"####" C 1 Offset(-18,16) A_SpawnItemEx("PlugGrabCheck",8,0,0,momx,momy,momz,0,8) "####" A 0 A_JumpIfInventory("SuplexID",1,"U1.Lift")
		"####" A 1 Offset(-18,16) A_SpawnItemEx("PlugGrabCheck",8,0,0,momx,momy,momz,0,8) "####" A 0 A_JumpIfInventory("SuplexID",1,"U1.Lift")
		"####" A 1 Offset(-9,24)
		"####" A 1 A_WeaponReady(WRF_NOFIRE)
		"####" A 0 ACS_NamedExecuteWithResult("VC_SetState",2)
		"####" A 9 A_TakeInventory("Base28Ammo",9)
		"####" A 0 A_GiveInventory("PlugDashCooldown",175)
		"####" A 0 A_SpawnItemEx("PlugCooldownWatcher")
		"####" A 0 SetPlayerProperty(0,0,0)
		goto Ready
		U1.Lift:
		//"####" A 0 A_GunFlash("NoFlash")
		"####" A 0 A_JumpIfInventory("PowerUltBuildCooldown",1,"U1.LiftUlt")
		goto U1.Lift2
		U1.LiftUlt:
		"####" A 0
		U1.Lift2:
		"####" F 0 A_Stop
		"####" F 0 A_PlaySoundEx("weapon/plugplug","Body")
		"####" F 0 ACS_Execute(191,0,APROP_JumpZ,0,1)
		"####" F 0 A_GiveInventory("UranusGrabHandler",1)
		"####" F 1 A_Jumpif(CallACS("cbm_ZangiefGrab",137,angle*256/360,75)==0,"SuplexEscape")
		"####" F 0 ACS_NamedExecuteWithResult("VC_SetState",3)
		"####" GGGGGGG 1 A_JumpIf(CallACS("cbm_ZangiefGrab",275,angle*256/360,75)==0,"SuplexEscape")
		U1.ShockLoop:
		"####" H 0 A_PlaySoundEx("weapon/plugzap","Weapon")
		"####" H 0 A_GiveInventory("PlugTFHandler2",1)
		"####" H 1 Offset(4,30)A_JumpIf(CallACS("cbm_ZangiefGrab",275,angle*256/360,75)==0,"SuplexEscape")
		"####" I 1 Offset(1,33)A_JumpIf(CallACS("cbm_ZangiefGrab",275,angle*256/360,75)==0,"SuplexEscape")
		"####" I 0 A_JumpIfInventory("Base28Ammo",1,1)
		goto U1.End
		"####" J 0 A_GiveInventory("PlugTFHandler2",1)
		"####" J 1 Offset(2,31)A_JumpIf(CallACS("cbm_ZangiefGrab",275,angle*256/360,75)==0,"SuplexEscape")
		"####" I 1 Offset(3,32)A_JumpIf(CallACS("cbm_ZangiefGrab",275,angle*256/360,75)==0,"SuplexEscape")
		"####" I 0 A_JumpIfInventory("Base28Ammo",1,1)
		goto U1.End
		"####" H 0 A_GiveInventory("PlugTFHandler2",1)
		"####" H 1 Offset(4,30)A_JumpIf(CallACS("cbm_ZangiefGrab",275,angle*256/360,75)==0,"SuplexEscape")
		"####" I 1 Offset(1,33)A_JumpIf(CallACS("cbm_ZangiefGrab",275,angle*256/360,75)==0,"SuplexEscape")
		"####" I 0 A_JumpIfInventory("Base28Ammo",1,1)
		goto U1.End
		"####" J 0 A_GiveInventory("PlugTFHandler2",1)
		"####" J 1 Offset(2,31)A_JumpIf(CallACS("cbm_ZangiefGrab",275,angle*256/360,75)==0,"SuplexEscape")
		"####" I 1 Offset(3,32)A_JumpIf(CallACS("cbm_ZangiefGrab",275,angle*256/360,75)==0,"SuplexEscape")
		"####" I 0 A_JumpIfInventory("Base28Ammo",1,1)
		goto U1.End
		"####" I 0
		goto U1.ShockLoop
		SuplexEscape:
		"####" F 0 A_GiveInventory("UranusThrowCancelHandler",1)
		goto U1.End+8
		U1.End:
		"####" GGGGGGGG 1 A_JumpIf(CallACS("cbm_ZangiefGrab",275,angle*256/360,75)==0,"SuplexEscape")
		"####" F 0 A_GiveInventory("UranusThrowEndHandler",1)
		"####" F 0 A_GiveInventory("PlugTFHandler3",1)
		"####" F 0 SetPlayerProperty(0,0,0)
		"####" F 1
		"####" A 1 //A_GunFlash
		goto Ready
		Fire:
		"####" B 0 A_PlaySoundEx("weapon/PLugball","Weapon")
		"####" B 0 A_GiveInventory("PlugBallBStartVC_CI",1)//PLGH B 0 A_FireCustomMissile("PlugBallBStartVC",0,1,8,0)
		"####" B 1 offset(-4,30)
		"####" C 1 offset(-7,26)
		"####" CDCDC 1 offset(-19,19)
		"####" D 1 offset(-7,26)
		"####" C 1 offset(-4,30)
		"####" CDD 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)
		"####" A 2
		Goto Ready
		Altfire:
		"####" A 0 A_JumpIfInventory("NoAltfire",1,"NoAmmo")
		"####" B 0 A_PlaySoundEx("weapon/smaplarshoot","Weapon")
		"####" B 0 A_GiveInventory("PlugSmaplar_CI",1)//PLGH B 0 A_FireCustomMissile("PlugSmaplar",0,0,8,0)
		"####" A 0 A_TakeInventory("Base28Ammo",5)
		"####" B 1 offset(-4,30)
		"####" C 1 offset(-7,26)
		"####" CDCDC 1 offset(-19,19)
		"####" D 1 offset(-7,26)
		"####" C 1 offset(-4,30)
		"####" CDD 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)
		"####" A 5
		Goto Ready
		NoAmmo:
		"####" A 3 A_GiveInventory("Base28Ammo",1)
		Goto Ready
		UltimateAttack:
		"####" A 0 A_GiveInventory("PlugUltHandler")
		"####" A 0 A_GiveInventory("UltBuildCooldownGiver",1)
		"####" A 0 A_PlaySoundEx("classes/ultimateactivation","Auto")
		"####" A 0 A_GiveInventory("PlugShadowColor")
		"####" A 0 A_GiveInventory("BaseCustomFlag1")
		"####" A 0 A_TakeInventory("MediumUltimateAmmo",999)
		"####" A 1 //A_GunFlash
		"####" A 0 A_SpawnItemEx("PlugShadowWatcher")
		"####" A 0 A_TakeInventory("UltAttackFlag",1)
		goto Ready
		/*Flash:
		TNT1 A 1 A_JumpIfInventory("BaseCustomFlag1",1,"FlashBlack")
		loop
		FlashBlack:
		PLGH E 1 A_JumpIfInventory("IsDead",1,"NoFlash")
		PLGH E 0 A_JumpIfInventory("BaseCustomFlag1",1,"FlashBlack")
		stop*/
	}
}

actor PlugShadowWatcher
{
Height 0
Radius 0
+NOINTERACTION
-SOLID
+NOGRAVITY
+MISSILE
reactiontime 10
States
{
Spawn:
TNT1 A 0
TNT1 A 0 A_GiveToTarget("PharaohUltCooldown",1)
TNT1 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 1 A_JumpIf(ACS_NamedExecuteWithResult("core_targetexists",0) == 0, "Death")
TNT1 A 0 A_JumpIfInTargetInventory("IsTheTerminator",1,"Death")
TNT1 A 0 A_GiveToTarget("PlugShadowSpawner")
TNT1 A 0 A_CountDown
loop
Death:
TNT1 A 0 A_GiveToTarget("PlugNormalColor")
TNT1 A 0 A_TakeFromTarget("BaseCustomFlag1")
TNT1 A 0 A_TakeFromTarget("MediumUltimateAmmo",999) //Failsafe
stop
}
}

actor PlugShadowSpawner: CustomInventory
{
states
{
Pickup:
TNT1 A 0 A_JumpIfInventory("IsUsingAltSkin2",1,"Pickup2")
TNT1 A 0 A_SpawnItemEx("ShadowPlugMan",0,0,0,0,0,0,0,1)
stop

Pickup2:
TNT1 A 0 A_SpawnItemEx("ShadowPlasmaMan",0,0,0,0,0,0,0,1)
stop
}
}

actor PlugShadowColor : CustomInventory
{
inventory.amount 1
inventory.maxamount 1
+INVENTORY.AUTOACTIVATE
+COUNTITEM
+INVBAR
states
{
Pickup:
TNT1 A 1 ACS_ExecuteAlways(991,0,10905,0)
stop
}
}

actor PlugNormalColor : CustomInventory
{
inventory.amount 1
inventory.maxamount 1
+INVENTORY.AUTOACTIVATE
+COUNTITEM
+INVBAR
states
{
Pickup:
TNT1 A 0 A_JumpIfInventory("IsTheTerminator",1,"Nope")
TNT1 A 1 ACS_ExecuteAlways(991,0,9883,0)
stop

Nope:
TNT1 A 0
stop
}
}

Actor PlugBallBStartVC_CI : CustomInventory
{
States
{
Pickup:
BUST B 0 A_JumpIfInventory("IsUsingAltSkin2",1,"AltSkinFrame2")
PLGH B 0 A_FireCustomMissile("PlugBallBStartVC",0,1,8,0)
stop
AltSkinFrame2:
PLGH B 0 A_FireCustomMissile("PlugBallBStartVCAltSkin2",0,1,8,0)
stop
}
}


ACTOR PlugBallAStartVC
{
	PROJECTILE
	+FORCEXYBILLBOARD
	Obituary "$OB_PLUGMAN1"
	Damage (14)
	damagetype "PlugMan"
	Height 10
	+NOGRAVITY
	Radius 10
	Scale 2.5
	speed 40
	reactiontime 25
	States
	{
		Spawn:
		TNT1 AA 0 A_GiveInventory("ProjectileCode",1)
		OtherSpawn:
		PBL2 BCDE 1
		TNT1 A 0 A_CountDown
		loop
		Death:
		TNT1 A 0 A_CustomMissile("PlugBallBStartVC",0,0,0,2,0)
		stop
	}
}

actor PlugBallBStartVC : PlugBallAStartVC
{
	-NOGRAVITY
	+HEXENBOUNCE
	-BOUNCEONFLOORS	 
	speed 50
	states
	{
		Spawn:
		TNT1 AA 0 A_GiveInventory("ProjectileCode",1)
		OtherSpawn:
		PBL2 BCDE 1 A_CheckFloor("Death")
		loop
		XDeath:
		TNT1 A 0
		stop
		Death:
		TNT1 A 0 A_CheckFloor(1)
		stop
		TNT1 A 0 A_JumpIfInTargetInventory("IsUsingAltSkin2",1,"AltSkinFrame2")
		TNT1 A 0 A_CustomMissile("PlugBallCStartVC",0,0,0,2,0)
		stop
		
		//Alt skin bloat
		AltSkinFrame2:
		TNT1 A 0 A_CustomMissile("PlugBallCStartVCAltSkin2",0,0,0,2,0)
		stop
	}
}

actor PlugBallCStartVC
{
	PROJECTILE
	+FORCEXYBILLBOARD
	Obituary "$OB_PLUGMAN1"
	Damage (14)
	damagetype "PlugMan"
	Height 10
	Radius 10
	Scale 2.5
	speed 0
	States
	{
		Spawn:
		TNT1 AA 0 A_GiveInventory("ProjectileCode",1)
		OtherSpawn:
		PBL2 B 0
		PBL2 B 0 ThrustThingZ(0, 24*4, 1, 0)
		SpawnLoop:
		PBL2 BCDE 1
		loop
		Death:
		TNT1 A 0 A_JumpIfInTargetInventory("IsUsingAltSkin2",1,"AltSkinFrame2")
		TNT1 A 0 A_CustomMissile("PlugBallDVC",0,0,0,2,0)//A_SpawnItemEx("PLGHBall", 0, 0, floorz-z, 24, 0, 0, 0, SXF_NOCHECKPOSITION)
		stop
		AltSkinFrame2:
		TNT1 A 0 A_CustomMissile("PlugBallDVCAltSkin2",0,0,0,2,0)
		stop
	}
}

actor PlugBallDVC
{
	Obituary "$OB_PLUGMAN1"
	PROJECTILE
	+BOUNCEONWALLS
	+DONTREFLECT
	+FORCEXYBILLBOARD
	+STEPMISSILE
	+NOEXPLODEFLOOR
	maxstepheight 15
	bouncecount 30
	bouncefactor 0.99999
	Damage (14)
	damagetype "PlugMan"
	Height 32
	Radius 16
	Scale 2.5
	Speed 24
	reactiontime 140
	gravity 4.0
	var int user_x;
	var int user_y;
	States
	{
		Spawn:
		TNT1 AA 0 A_GiveInventory("ProjectileCode",1)
		OtherSpawn:
		PBL2 B 0
		PBL2 B 0 A_SetUserVar(user_x, x)
		PBL2 B 0 A_SetUserVar(user_y, y)
		PBL2 B 0 A_GiveInventory("Once", 1)
		PBL2 B 0 ACS_ExecuteAlways(206, 0)
		PBL2 B 0 A_ChangeVelocity(0, 0, -24, CVF_RELATIVE|CVF_REPLACE)
		SpawnLoop:
		PBL2 B 0 A_ChangeVelocity(24, 0, -24, CVF_RELATIVE|CVF_REPLACE)
		PBL2 B 1 A_CountDown
		PBL2 C 0 A_CheckFloor("SpawnLoopC")
		goto Fall
		SpawnLoopC:
		PBL2 C 1 A_CountDown
		PBL2 D 0 A_CheckFloor("SpawnLoopD")
		goto Fall
		SpawnLoopD:
		PBL2 D 1 //A_CountDown
		PBL2 E 0 A_CheckFloor("SpawnLoopE")
		goto Fall
		SpawnLoopE:
		PBL2 B 0 A_JumpIf((user_x-x < 2 && user_x-x > -2) && (user_y-y < 2 && user_y-y > -2) /*|| (z > user_z)*/, "Death")
		PBL2 B 0 A_SetUserVar(user_x, x)
		PBL2 B 0 A_SetUserVar(user_y, y)
		PBL2 E 1 A_CountDown
		PBL2 B 0 A_CheckFloor("SpawnLoop")
		goto Fall
		Fall:
		PBL2 B 0 A_JumpIf(z-floorz < 32, "FallLoop")
		PBL2 B 0 A_Warp(AAPTR_DEFAULT) // Forces PLGH Ball to resync
		FallLoop:
		PBL2 B 0 A_ChangeVelocity(0, 0, -24, CVF_RELATIVE|CVF_REPLACE)
		PBL2 BCDE 1 A_CheckFloor("Continue")
		PBL2 A 0 A_CountDown
		loop
		Continue:
		PBL2 B 0 A_ChangeVelocity(24, 0, 0, CVF_RELATIVE|CVF_REPLACE)
		goto SpawnLoop
		Death:
		TNT1 A 0 A_TakeInventory("Once", 1)
		stop
	}
}

Actor PlugSmaplar_CI : CustomInventory
{
States
{
Pickup:
BUST B 0 A_JumpIfInventory("IsUsingAltSkin2",1,"AltSkinFrame2")
PLGH B 0 A_FireCustomMissile("PlugSmaplar",0,0,8,0)
stop
AltSkinFrame2:
PLGH B 0 A_FireCustomMissile("PlugSmaplarAltSkin2",0,0,8,0)
stop
}
}

actor PlugSmaplar
{
PROJECTILE
+NOGRAVITY
+FORCEXYBILLBOARD
+RIPPER
Obituary "$OB_PLUGMAN2"
Damage (5)
damagetype "PlugmanStun"
Height 24
Radius 12
Scale 2.5
speed 75
States
{
Spawn:
TNT1 AA 0 A_GiveInventory("ProjectileCode",1)
SMAP A 0 A_PlaySoundEx("weapon/smaplar","Body")
SMAP ABCDEFGH 1
Goto Spawn+2
Death:
TNT1 A 0 A_CheckFloor("Death.Floor")
TNT1 A 0 A_CheckFloor("Death.Ceiling")
BUST B 0 A_JumpIfInTargetInventory("IsUsingAltSkin2",1,"AltSkinFrame2")
TNT1 A 0 A_CustomMissile("PlugSmaplar2",0,0,180,2,0)
stop
Death.Floor:
BUST B 0 A_JumpIfInTargetInventory("IsUsingAltSkin2",1,"AltSkinFrame2.Floor")
TNT1 A 0 A_CustomMissile("PlugSmaplar2",0,0,0,2,0)
stop

//Alt Skin Bloat
AltSkinFrame2:
TNT1 A 0 A_CustomMissile("PlugSmaplar2AltSkin2",0,0,180,2,0)
stop
AltSkinFrame2.Floor:
TNT1 A 0 A_CustomMissile("PlugSmaplar2AltSkin2",0,0,0,2,0)
stop
}
}

actor PlugSmaplar2
{
Obituary "$OB_PLUGMAN2"
PROJECTILE
+BOUNCEONWALLS
+DONTREFLECT
+PIERCEARMOR
+FORCEXYBILLBOARD
+STEPMISSILE
+NOEXPLODEFLOOR
-NOGRAVITY
+RIPPER
-NOGRAVITY
maxstepheight 15
bouncecount 30
bouncefactor 1.0
wallbouncefactor 1.0
Damage (5)
damagetype "PlugmanStun"
Height 24
Radius 12//16
Scale 2.5
Speed 16
reactiontime 200
gravity 4.0
var int user_x;
var int user_y;
var int user_z;
States
{
Spawn:
SMAP AA 0 A_GiveInventory("ProjectileCode",1)
SMAP A 0 A_SetUserVar(user_x, x)
SMAP A 0 A_SetUserVar(user_y, y)
SMAP A 0 A_GiveInventory("Once", 1)
SMAP A 0 ACS_ExecuteAlways(206, 0)
SpawnLoop:
SMAP B 0 A_CountDown
SMAP A 0 A_PlaySoundEx("weapon/smaplar","Body")
SMAP A 1 A_JumpIf(z-floorz>0, "Fall")
SMAP B 0 A_CountDown
SMAP B 1 A_JumpIf(z-floorz>0, "Fall")
SMAP B 0 A_CountDown
SMAP C 1 A_JumpIf(z-floorz>0, "Fall")
SMAP B 0 A_CountDown
SMAP D 1 A_JumpIf(z-floorz>0, "Fall")
SMAP B 0 A_CountDown
SMAP E 1 A_JumpIf(z-floorz>0, "Fall")
SMAP B 0 A_CountDown
SMAP F 1 A_JumpIf(z-floorz>0, "Fall")
SMAP B 0 A_CountDown
SMAP G 1 A_JumpIf(z-floorz>0, "Fall")
SMAP B 0 A_CountDown
SMAP H 1 A_JumpIf(z-floorz>0, "Fall")
SMAP B 0 A_JumpIf((user_x-x < 2 && user_x-x > -2) && (user_y-y < 2 && user_y-y > -2) /*|| (z > user_z)*/, "Death")
SMAP B 0 A_SetUserVar(user_x, x)
SMAP B 0 A_SetUserVar(user_y, y)
SMAP B 0 A_SetUserVar(user_z, z)
SMAP B 0 A_CountDown
loop
Fall:
SMAP B 0 //A_ChangeFlag(HEXENBOUNCE, false)
SMAP B 0 //A_ChangeFlag(NOEXPLODEFLOOR, true)
FallLoop:
SMAP A 0 A_PlaySoundEx("weapon/smaplar","Body")
SMAP ABCDEFGH 1 A_CheckFloor("Continue")
SMAP A 0 A_CountDown
loop
Continue:
SMAP A 1 A_Jump(256, "SpawnLoop")
wait
Death:
TNT1 A 0 A_TakeInventory("Once", 1)
stop
}
}

actor PlugSmaplarProtect : PowerProtection
{
powerup.duration 4
DamageFactor "PlugmanStun", 0.0
}

actor ShadowPlugMan
{
Obituary "$OB_PLUGMAN3"
-SOLID
+MISSILE
+NOBLOOD
Bouncetype Hexen
-ALLOWBOUNCEONACTORS
+CANBOUNCEWATER
+FORCEXYBILLBOARD
+NOEXPLODEFLOOR
-BOUNCEONFLOORS
+NOGRAVITY
bouncefactor 1.0
wallbouncefactor 1.0
maxstepheight 32
maxdropoffheight 32
Height 56
damagetype "PlugMan"
//translation "198:198=0:0", "192:192=95:95"
scale 2.5
damage (25)
reactiontime 25
radius 16
speed 0
states
{
Spawn:
PLUM A 0 //A_GiveInventory("ProjectileCode",1)
PLUM A 0 A_PlaySoundEx("Weapon/ShadowCloneAppear","Auto")
PLUM A 0 A_JumpIfInTargetInventory("IsUsingAltSkin1",1,"AltSkinFrame")
PLUM A 0
PLUM A 0 A_Jump(256,"SpawnNext")
goto SpawnNext
SpawnNext:
"####" NONONONONONONONONONONONONONO 1
"####" A 0 A_ChangeFLag("NOGRAVITY",0)
"####" A 0 A_ChangeFlag("THRUACTORS",0)
"####" A 0 A_Recoil(-10)
OtherSpawn:
"####" A 0 A_Countdown
"####" A 0 A_GiveToTarget("PharaohUltCooldown",1)
"####" BBBBBCCCCCDDDDDEEEEEBBBBBCCCCCDDDDDEEEEE 1 A_JumpIf(z-floorz>0, "JumpLoop")
"####" A 1 A_Stop
"####" AAA 3 A_Chase
"####" B 0 A_Recoil(-10)
"####" B 0 A_Jump(52,"Jump")
goto OtherSpawn
Melee:
XDeath:
Death:
See:
"####" A 0 A_ChangeFLag("NOGRAVITY",1)
"####" A 0 A_ChangeFlag("THRUACTORS",1)
"####" NONONONONONONONONONONONONONO 1 A_GiveToTarget("PharaohUltCooldown",1)
stop
Jump:
"####" A 0 A_Jump(12,"JumpBack")
"####" I 2 ThrustThingZ(0,60,0,0)
JumpLoop:
"####" I 1 A_JumpIf(z-floorz<=0, "OtherSpawn")
goto JumpLoop
JumpBack:
"####" I 1 ThrustThingZ(0,60,0,0)
"####" I 1 A_ChangeVelocity(-7,0,0)
goto JumpLoop
AltSkinFrame:
BPLU A 0
goto SpawnNext
}
}

actor PlugDashFX : BaseDecorativeActor
{
-NOGRAVITY
translation "228:228=4:4", "61:61=213:213"
renderstyle add
States
{
Spawn:
TNT1 AA 0 A_GiveInventory("ProjectileCode")
TNT1 A 0 A_Jump(256,"S_1","S_2","S_3")
S_1:
CLOT SZSZSZSZSZSZSZSZSZSZ 1 A_FadeOut(0.05)
stop
S_2:
CLOT TZTZTZTZTZTZTZTZTZTZ 1 A_FadeOut(0.05)
stop
S_3:
CLOT UZUZUZUZUZUZUZUZUZUZ 1 A_FadeOut(0.05)
stop
}
}

actor PlugZapFX : PlugDashFX
{
renderstyle normal
States
{
Spawn:
TNT1 AA 0 A_GiveInventory("ProjectileCode")
TNT1 A 0 A_Jump(256,"S_1","S_2","S_3")
S_1:
CLOT SZSZSZ 1
CLOT SZSZSZSZS 1 A_FadeOut(0.1)
stop
S_2:
CLOT TZTZTZ 1
CLOT TZTZTZTZT 1 A_FadeOut(0.1)
stop
S_3:
CLOT UZUZUZ 1
CLOT UZUZUZUZU 1 A_FadeOut(0.1)
stop
}
}

actor PlugTFHandler : CustomInventory
{
States
{
Pickup:
TNT1 AAA 0 A_SpawnItemEx("PlugDashFX",0,random(-32,32),random(0,64))
TNT1 A 0 SetPlayerProperty(0,1,0)
TNT1 A 0 A_ChangeVelocity(CallACS("VC_XYMob",40),0,momz,CVF_REPLACE|CVF_RELATIVE)
TNT1 A 0 A_PlaySoundEx("weapon/plugdash","Weapon")
TNT1 A 0 A_PlaySoundEx("weapon/chargekick","Body")
TNT1 A 0 A_TakeInventory("SuplexID",999)
TNT1 A 0 ACS_NamedExecuteWithResult("VC_SetState",1)
stop
}
}

actor PlugTFHandler2 : CustomInventory
{
States
{
Pickup:
TNT1 A 0 A_GiveInventory("VC_Timer",1)
TNT1 A 0 A_TakeInventory("Base28Ammo",2)
TNT1 A 0 A_SpawnItemEx("PlugShockHitbox",10,0,90)
TNT1 A 0 ACS_NamedExecuteWithResult("VC_SetState",3)
TNT1 A 0 SetPlayerProperty(0,1,0)
stop
}
}

actor PlugTFHandler3 : CustomInventory
{
States
{
Pickup:
TNT1 A 0 A_GiveInventory("PlugDashCooldown",175)
TNT1 A 0 A_SpawnItemEx("PlugCooldownWatcher")
TNT1 A 0 A_PlaySoundEx("misc/itemthrow","Auto")
TNT1 A 0 ACS_NamedExecuteWithResult("VC_SetState",1)
TNT1 A 0 ACS_Execute(191,0,APROP_JumpZ,10,1)
TNT1 A 0 A_JumpIfInventory("VC_Timer",14,"Pickup2")
TNT1 A 0 A_TakeInventory("VC_Timer",99)
TNT1 A 0 A_SpawnItemEx("PlugYeetHitbox",10,0,90)
stop

Pickup2:
TNT1 A 0 A_PlaySoundEx("weapon/thunderbeam","Auto")
TNT1 A 0 A_TakeInventory("VC_Timer",99)
TNT1 A 0 A_SpawnItemEx("PlugYeetHitbox2",10,0,90)
stop
}
}

actor PlugShockHitbox : BasicExplosion
{
Obituary "$OB_PLUGMAN4"
damagetype "PlugShock"
+PIERCEARMOR
States
{
Spawn:
TNT1 A 0
TNT1 AAAA 0 A_SpawnItemEx("PlugZapFX",0,0,0,random(6,9),0,random(-5,5),random(0,359))
TNT1 A 1 A_Explode(2,16,0,0,16)
stop
}
}


actor PlugYeetHitbox : BasicExplosion
{
Obituary "$OB_PLUGMAN4"
damagetype "PlugManToss"
States
{
Spawn:
TNT1 A 0
TNT1 A 1 A_Explode(12,16,0,0,16)
stop
}
}

actor PlugYeetHitbox2 : PlugYeetHitbox
{
damagetype "PlugManToss2"
}

actor PlugGrabCheck
{
+MISSILE
+NOBLOCKMAP
+NOGRAVITY
+NOEXPLODEFLOOR
+DONTBLAST
+DONTREFLECT
+HITTRACER
+THRUGHOST
height 64
radius 64
scale 1.0
renderstyle none
states
{
Spawn:
TNT1 A 0
TNT1 AAA 0 A_SpawnItemEx("PlugDashFX",0,random(-32,32),random(0,64))
GUTS A 1
stop
Crash:
XDeath:
TNT1 A 0 A_ChangeFlag("THRUACTORS",1)
TNT1 A 0 A_CheckFlag("FLOORHUGGER","DeathK",8)
TNT1 A 0 A_CheckFlag("INVULNERABLE","DeathK",8)
TNT1 A 0 A_JumpIfInventory("AntiPlugGrabTimer",1,"DeathK",8)
TNT1 A 0 A_JumpIfInventory("NoPushFlag",1,"DeathK",8)
TNT1 A 0 A_JumpIfInventory("HSHSuctionFlag",1,"DeathK",8)
TNT1 A 0 A_JumpIfInTargetInventory("SuplexID",1,"DeathI")
TNT1 A 0 A_JumpIfInventory("IsPerformingSuplex",1,"DeathJ",8)
TERR A 1 A_JumpIf(ACS_NamedExecuteWithResult("cbm_istracerplayer")==1,"DeathCheck2")
stop
DeathCheck2:
TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(975,1)==1,"DeathCheck3")
goto GiveSuplex
DeathCheck3:
TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(143,ACS_ExecuteWithResult(147,0),1) == ACS_ExecuteWithResult(143,ACS_ExecuteWithResult(147,1),1),"DeathL")
goto GiveSuplex
GiveSuplex:
TNT1 A 0 A_ChangeFlag("THRUACTORS",1)
TNT1 A 0 A_CheckFlag("FLOORHUGGER","DeathK",8)
TNT1 A 0 A_JumpIfInTargetInventory("SuplexID",1,"DeathI")
TNT1 A 0 A_JumpIfInventory("IsPerformingSuplex",1,"DeathJ",8)
TNT1 A 0 A_CheckFlag("INVULNERABLE","DeathK",8)
TNT1 A 0 A_GiveToTarget("IsPerformingSuplex",1)
TNT1 A 0 A_GiveToTarget("UranusIsGrabbing",1)
TNT1 A 0 A_GiveToTarget("SuplexID",(ACS_ExecuteWithResult(147,1)-1000)+1)
TNT1 A 0 A_GiveToTarget("NoPushFlag",1)
TNT1 A 0 A_GiveInventory("MovementFrozenGrab",1,8)
TNT1 A 0 A_GiveInventory("PlugmanGrabProtector",1,8)
VENU A 1 A_GiveInventory("TempPitProtect_P",1,8)
Carry:
TNT1 A 0 A_GiveInventory("TempPitProtect_P",1,8)
TNT1 A 0 A_GiveInventory("MovementFrozenGrab",1,8)
TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("core_targetexists",0) == 0, "Death")
ICEM B 1 A_GiveInventory("TempPitProtect_P",1,8)
ICEM B 0 A_JumpIfInTargetInventory("UranusThrowConfirm",1,"StopCarry2")
ICEM B 0 A_JumpIfInTargetInventory("UranusGrabCancel",1,"StopCarryTerrain")
ICEM B 1 A_JumpIfInTargetInventory("UranusIsGrabbing",1,"Carry")
StopCarry:
ICEM B 1 A_JumpIfInTargetInventory("UranusThrowConfirm",1,"StopCarry2")
ICEM B 1 A_JumpIfInTargetInventory("UranusThrowConfirm",1,"StopCarry2")
ICEM B 1 A_JumpIfInTargetInventory("UranusThrowConfirm",1,"StopCarry2")
ICEM B 1 A_JumpIfInTargetInventory("UranusThrowConfirm",1,"StopCarry2")
goto StopCarryTerrain
StopCarry2:
TNT1 A 0 A_TakeInventory("PlugmanGrabProtector",1,0,8)
TNT1 A 0 A_TakeFromTarget("IsPerformingSuplex",999)
HSHZ A 0 A_GiveInventory("UranusMovementReturnWatcherSpawn",1,8)
HSHZ A 1 A_GiveInventory("TempPitProtect_P",1,8)
stop
StopCarryTerrain:
TNT1 A 0 A_TakeInventory("PlugmanGrabProtector",1,0,8)
TNT1 A 0 A_TakeFromTarget("IsPerformingSuplex",999)
HSHZ A 0 A_GiveInventory("TempPitProtect_P",1,8)
TOAM AAAAAA 1 A_GiveInventory("MovementReturnFailSafe",1,8)
stop
DeathI:
GEMI A 1 //A_LOG("FAILED, CAN'T GRAB SOMEONE BEING GRABBED!")
stop
DeathJ:
MERC A 1 //A_LOG("FAILED, CAN'T GRAB SOMEONE GRABBING!")
stop
DeathK:
MERC A 1 //A_LOG("FAILED, CAN'T GRAB SOMEONE DIGGING!")
stop
DeathL:
MERC A 1 //A_LOG("FAILED, CAN'T GRAB ALLIES!")
stop
Death:
TNT1 A 0 A_TakeInventory("PlugmanGrabProtector",1,0,8)
TOAM AAAAAA 1 A_GiveInventory("MovementReturnFailSafe",1,8)
stop
}
}

actor PlugDebuffWatcher
{
Height 0
Radius 0
+NOINTERACTION
-SOLID
+NOGRAVITY
+MISSILE
Renderstyle none
States
{
Spawn:
TNT1 A 0
TNT1 A 0 A_JumpIfInTargetInventory("PlugDebuffCount",1,"Death")
TNT1 A 0 A_GiveToTarget("PlugDebuffCount",175)
loopit:
TNT1 A 0 A_PlaySoundEx("weapon/smaplar","Body")
TNT1 A 0 A_GiveToTarget("PlugGravity",1)
TNT1 A 1 A_Warp(AAPTR_TARGET, 0.0,0.0,0.0,0.0,WARPF_NOCHECKPOSITION)
TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("core_targetexists",0) == 0, "Death")
TNT1 A 0 A_SpawnItemEx("PlugZapFX", random(8, 64), 0, random(0, 64), 0, 0, 0, random(0, 359),0,128)
TNT1 A 0 A_TakeFromTarget("PlugDebuffCount",1)
TNT1 AA 1 A_JumpIfInTargetInventory("PlugDebuffCount",1,"loopit")
TNT1 A 0 A_Jump(256,"Death")
loop
Death:
TNT1 A 0
stop
}
}

actor PlugGravity : CustomInventory
{
States
{
Pickup:
TNT1 A 0 A_JumpIf(z-floorz<5, "Nope")
TNT1 A 0 ThrustThingZ(0,8,1,1)
stop
Nope:
TNT1 A 0
stop
}
}

actor PlugDebuffCount : Inventory
{
inventory.amount 1
inventory.maxamount 700
}

actor PlugCooldownWatcher
{
PROJECTILE
+NOINTERACTION
-DONTBLAST
reactiontime 175
states
{
Spawn:
TNT1 A 0
TNT1 A 1 A_TakeFromTarget("PlugDashCooldown",1)
TNT1 A 0 A_Countdown
loop
Death:
TNT1 A 0
stop
}
}

actor PlugDashCooldown : Inventory
{
inventory.amount 1
inventory.maxamount 175
}


actor PlugManSkinWatcher
{
Height 0
Radius 0
+NOINTERACTION
+MISSILE
States
{
Spawn:
TNT1 A 0
TNT1 AAA 1 A_GiveToTarget("PlugManSkinCheck")
TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("core_targetexists",0) == 0, "Death")
loop
Death:
TNT1 A 0
stop
}
}
actor PlugManSkinCheck : SkinChecker
{
States
{
Pickup:
TNT1 A 0 A_JumpIf(CallACS("GC_GetSkinNum")==268,"AltSkin1")
TNT1 A 0 A_JumpIf(CallACS("GC_GetSkinNum")==275,"AltSkin2")
goto NormalSkin
}
}

actor PlugBallBStartVCAltSkin2 : PlugBallBStartVC
{
Obituary "$OB_PLASMAMAN1"
translation "213:213=251:251"
}
actor PlugBallCStartVCAltSkin2 : PlugBallCStartVC
{
Obituary "$OB_PLASMAMAN1"
translation "213:213=251:251"
}
actor PlugBallDVCAltSkin2 : PlugBallDVC
{
Obituary "$OB_PLASMAMAN1"
translation "213:213=251:251"
}

actor PlugSmaplarAltSkin2 : PlugSmaplar
{
translation "248:248=250:250"
}
actor PlugSmaplar2AltSkin2 : PlugSmaplar2
{
translation "248:248=250:250"
}
//"248:248=250:250"

actor PlugUltHandler : CustomInventory
{
States
{
Pickup:
TNT1 A 0 A_JumpIfInventory("IsUsingAltSkin2",1,"Pickup2")
TNT1 A 0 ACS_NamedExecuteAlways("VC_UltimateText",0,83)
stop

Pickup2:
TNT1 A 0 ACS_NamedExecuteAlways("VC_UltimateText",0,141)
stop
}
}

actor ShadowPlasmaMan : ShadowPlugMan
{
Obituary "$OB_PLASMAMAN3"
states
{
Spawn:
TNT1 A 0
TNT1 A 0 A_PlaySoundEx("Weapon/ShadowCloneAppear","Auto")
TNT1 A 0 A_JumpIfInTargetInventory("IsUsingAltSkin2",1,"AltSkinFrame")
PL9S A 0
PL9S A 1 A_Jump(256,"SpawnNext")
wait
AltSkinFrame:
PL9S A 1 A_Jump(256,"SpawnNext")
wait
}
}

actor AntiPlugGrabTimer : Powerup
{
powerup.duration 175
}

actor PlugmanGrabProtector : GrabProtectionBase
{
	DamageFactor "PlugShock", 1.0
	DamageFactor "PlugManToss", 1.0
	DamageFactor "PlugManToss2", 1.0
}