actor Topman : SemiWeakArmorClass
{
	Player.ScoreIcon "TOPMMUGS"
	player.startitem "BaseFlagPack", 1
	player.startitem "SemiWeakArmor"
	player.soundclass "topmanc"
	Player.ViewHeight 50
	player.forwardmove 0.85, 0.85
	player.sidemove 0.83, 0.83
	player.displayname "Topman"
	player.startitem "TopSpinBoss"
	player.startitem "Base28Ammo", 28
	player.startitem "Base56Ammo", 56
	player.startitem "CanThirdFire", 1
	player.startitem "UltimateAttackItem2", 1
	player.startitem "UltSoundWatcherSpawn2"
	player.startitem "IsFromMM3"
	States
	{
		Spawn:
		TOPM A 0
		TOPM B 0 A_JumpIfInventory("BaseCustomFlag1",1,"Animation1")
		TOPM B 1 A_JumpIf(z-floorz>0, "Jumping")
		TOPM A 0 A_JumpIfInventory("BaseCustomFlag1",1,"Animation1")
		TOPM A 1 A_JumpIf(z-floorz>0, "Jumping")
		Goto Spawn+3
		
		See:
		TOPM B 0 A_JumpIfInventory("DrillFlag",1,"Animation1Loop")
		TOPM B 0 A_JumpIf(z-floorz>0, "Jumping")
		TOPM B 1 A_JumpIfInventory("BaseCustomFlag1",1,"Animation1")
		TOPM B 0 A_JumpIf(z-floorz>0, "Jumping")
		TOPM B 1 A_JumpIfInventory("BaseCustomFlag1",1,"Animation1")
		TOPM B 0 A_JumpIf(z-floorz>0, "Jumping")
		TOPM B 1 A_JumpIfInventory("BaseCustomFlag1",1,"Animation1")
		TOPM B 0 A_JumpIf(z-floorz>0, "Jumping")
		TOPM B 1 A_JumpIfInventory("BaseCustomFlag1",1,"Animation1")
		
		TOPM C 0 A_JumpIf(z-floorz>0, "Jumping")
		TOPM C 1 A_JumpIfInventory("BaseCustomFlag1",1,"Animation1")
		TOPM C 0 A_JumpIf(z-floorz>0, "Jumping")
		TOPM C 1 A_JumpIfInventory("BaseCustomFlag1",1,"Animation1")
		TOPM C 0 A_JumpIf(z-floorz>0, "Jumping")
		TOPM C 1 A_JumpIfInventory("BaseCustomFlag1",1,"Animation1")
		TOPM C 0 A_JumpIf(z-floorz>0, "Jumping")
		TOPM C 1 A_JumpIfInventory("BaseCustomFlag1",1,"Animation1")
		
		TOPM D 0 A_JumpIf(z-floorz>0, "Jumping")
		TOPM D 1 A_JumpIfInventory("BaseCustomFlag1",1,"Animation1")
		TOPM D 0 A_JumpIf(z-floorz>0, "Jumping")
		TOPM D 1 A_JumpIfInventory("BaseCustomFlag1",1,"Animation1")
		TOPM D 0 A_JumpIf(z-floorz>0, "Jumping")
		TOPM D 1 A_JumpIfInventory("BaseCustomFlag1",1,"Animation1")
		TOPM D 0 A_JumpIf(z-floorz>0, "Jumping")
		TOPM D 1 A_JumpIfInventory("BaseCustomFlag1",1,"Animation1")
		
		TOPM E 0 A_JumpIf(z-floorz>0, "Jumping")
		TOPM E 1 A_JumpIfInventory("BaseCustomFlag1",1,"Animation1")
		TOPM E 0 A_JumpIf(z-floorz>0, "Jumping")
		TOPM E 1 A_JumpIfInventory("BaseCustomFlag1",1,"Animation1")
		TOPM E 0 A_JumpIf(z-floorz>0, "Jumping")
		TOPM E 1 A_JumpIfInventory("BaseCustomFlag1",1,"Animation1")
		TOPM E 0 A_JumpIf(z-floorz>0, "Jumping")
		TOPM E 1 A_JumpIfInventory("BaseCustomFlag1",1,"Animation1")
		Goto Spawn+1
		
		Jumping:
		TOPM I 1 A_JumpIf(z-floorz<=0, "Spawn")
		wait
		
		Animation1:
		TOPM STUVWXYZ 2
		TOPM STUVWXYZ 1
		TOPM Z 0 A_JumpIfInventory("IsUsingAltSkin1",1,"Animation1LoopAlt")
		
		Animation1Loop:
		TOP1 ABC 1
		TOP1 A 0 A_JumpIfInventory("BaseCustomFlag1",1,"Animation1Loop")
		TOP1 ABC 1
		
		Animation1End:
		TOPM STUVWXYZ 3
		goto Spawn+2
		
		Animation1LoopAlt:
		CNT1 ABC 1
		CNT1 A 0 A_JumpIfInventory("BaseCustomFlag1",1,"Animation1LoopAlt")
		CNT1 ABC 1
		goto Animation1End
		
		Animation2:
		TOPM S 0 A_JumpIfInventory("TopParryAnim",1,"Animation2j")
		TOPM S 2 A_JumpIfInventory("TopSpinAnim",1,"Animation2i")
		
		Animation2b:
		TOPM T 0 A_JumpIfInventory("TopParryAnim",1,"Animation2j")
		TOPM T 2 A_JumpIfInventory("TopSpinAnim",1,"Animation2i")
		
		Animation2c:
		TOPM U 0 A_JumpIfInventory("TopParryAnim",1,"Animation2j")
		TOPM U 2 A_JumpIfInventory("TopSpinAnim",1,"Animation2i")
		
		Animation2d:
		TOPM V 0 A_JumpIfInventory("TopParryAnim",1,"Animation2j")
		TOPM V 2 A_JumpIfInventory("TopSpinAnim",1,"Animation2i")
		
		Animation2e:
		TOPM W 0 A_JumpIfInventory("TopParryAnim",1,"Animation2j")
		TOPM W 2 A_JumpIfInventory("TopSpinAnim",1,"Animation2i")
		
		Animation2f:
		TOPM X 0 A_JumpIfInventory("TopParryAnim",1,"Animation2j")
		TOPM X 2 A_JumpIfInventory("TopSpinAnim",1,"Animation2i")
		
		Animation2g:
		TOPM Y 0 A_JumpIfInventory("TopParryAnim",1,"Animation2j")
		TOPM Y 2 A_JumpIfInventory("TopSpinAnim",1,"Animation2i")
		
		Animation2h:
		TOPM Z 0 A_JumpIfInventory("TopParryAnim",1,"Animation2j")
		TOPM Z 2 A_JumpIfInventory("TopSpinAnim",1,"Animation2i")
		
		Animation2i:
		TOPM STUVWXYZSTUVWXYZSTUVWXYZSTUVWXYZ 1
		goto Spawn+2
		
		Animation2j:
		TOP1 ABCABC 1
		goto Animation2
		
		Animation3:
		Missile:
		TOPM B 0 A_JumpIfInventory("TopAnim1",1,"Animation2")
		TOPM B 0 A_JumpIfInventory("TopAnim2",1,"Animation2b")
		TOPM B 0 A_JumpIfInventory("TopAnim3",1,"Animation2c")
		TOPM B 0 A_JumpIfInventory("TopAnim4",1,"Animation2d")
		TOPM B 0 A_JumpIfInventory("TopAnim5",1,"Animation2e")
		TOPM B 0 A_JumpIfInventory("TopAnim6",1,"Animation2f")
		TOPM B 0 A_JumpIfInventory("TopAnim7",1,"Animation2g")
		TOPM B 0 A_JumpIfInventory("TopAnim8",1,"Animation2h")
		TOPM F 1
		TOPM B 0 A_JumpIfInventory("TopAnim1",1,"Animation2")
		TOPM B 0 A_JumpIfInventory("TopAnim2",1,"Animation2b")
		TOPM B 0 A_JumpIfInventory("TopAnim3",1,"Animation2c")
		TOPM B 0 A_JumpIfInventory("TopAnim4",1,"Animation2d")
		TOPM B 0 A_JumpIfInventory("TopAnim5",1,"Animation2e")
		TOPM B 0 A_JumpIfInventory("TopAnim6",1,"Animation2f")
		TOPM B 0 A_JumpIfInventory("TopAnim7",1,"Animation2g")
		TOPM B 0 A_JumpIfInventory("TopAnim8",1,"Animation2h")
		TOPM FJ 1
		TOPM GK 4
		Goto Spawn+1
		
		ClassTimeStop:
		PLAY A 0 SetPlayerProperty(0,1,4)
		PLAY A 0 ACS_Execute(528,0)
		TOPM AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 1 A_Stop
		PLAY A 0 SetPlayerProperty(0,0,4)
		Goto pain+1
		
		ClassPain:
		TOPM H 0 A_GiveInventory("TopPainFlag",1)
		TOPM HHHHHHHHHH 2 A_SpawnItem("PainFX",0,3)
		Goto Spawn+1
		
		ClassDeath:
		TOPM H 20 ACS_ExecuteAlways(999,0,0)
		TOPM H 0 A_PlayerScream
		NOFX A 0 A_SpawnItemEx("FakeDeathFXMM3",0,0,32)
		NOFX A 1 A_CheckPlayerDone
		wait
		
		ClassIceDeath:
		TOPM A 35
		NOFX A 0 A_SpawnItemEx("FrozenDeathFX",0,0,16)
		NOFX A 1 A_CheckPlayerDone
		wait
		WeaponGetM:
		CUTM H 0 A_JumpIfInTargetInventory("TopSpinWepM",1,2)
		CUTM H 0 A_GiveToTarget("WeaponGetter")
		CUTM H 0 A_GiveToTarget("TopSpinWepM")
		goto ClassDeath
	}
}

actor TopSpinBoss : VCBaseWeapon
{
	Weapon.AmmoUse 7
	Weapon.AmmoGive 28
	Weapon.Ammotype2 "Base56Ammo"
	Obituary "$OB_TOPMAN1"
	States
	{
		Ready:
		TNT1 A 0

		Ready2:
		XTOP J 0 A_JumpIfInventory("IsUsingAltSkin1",1,"AltSkinFrame")
		
		Ready3:
		"####" J 0 A_JumpIfInventory("Base56Ammo",42,"Ready.TF")
		"####" J 1 A_WeaponReady(WRF_NOPRIMARY*CallACS("VC_AmmoCheck",0,7)|WRF_NOSECONDARY*CallACS("VC_AmmoCheck",0,14)) "####" J 0 A_JumpIfInventory("UltAttackFlag",1,"UltimateAttack")
		"####" J 1 A_WeaponReady(WRF_NOPRIMARY*CallACS("VC_AmmoCheck",0,7)|WRF_NOSECONDARY*CallACS("VC_AmmoCheck",0,14)) "####" J 0 A_JumpIfInventory("UltAttackFlag",1,"UltimateAttack")
		"####" J 1 A_WeaponReady(WRF_NOPRIMARY*CallACS("VC_AmmoCheck",0,7)|WRF_NOSECONDARY*CallACS("VC_AmmoCheck",0,14)) "####" J 0 A_JumpIfInventory("UltAttackFlag",1,"UltimateAttack")
		"####" J 0 A_GiveInventory("Base28Ammo",1)
		"####" J 0 A_GiveInventory("Base56Ammo",1)
		Goto Ready2
		
		Ready.TF:
		"####" J 1 A_WeaponReady(WRF_NOPRIMARY*CallACS("VC_AmmoCheck",0,7)|WRF_NOSECONDARY*CallACS("VC_AmmoCheck",0,14)) "####" J 0 A_JumpIfInventory("UltAttackFlag",1,"UltimateAttack") "####" J 0 A_JumpIf(ACS_NamedExecuteWithResult("VC_CheckBtn",3)==3,"User1")
		"####" J 1 A_WeaponReady(WRF_NOPRIMARY*CallACS("VC_AmmoCheck",0,7)|WRF_NOSECONDARY*CallACS("VC_AmmoCheck",0,14)) "####" J 0 A_JumpIfInventory("UltAttackFlag",1,"UltimateAttack") "####" J 0 A_JumpIf(ACS_NamedExecuteWithResult("VC_CheckBtn",3)==3,"User1")
		"####" J 1 A_WeaponReady(WRF_NOPRIMARY*CallACS("VC_AmmoCheck",0,7)|WRF_NOSECONDARY*CallACS("VC_AmmoCheck",0,14)) "####" J 0 A_JumpIfInventory("UltAttackFlag",1,"UltimateAttack") "####" J 0 A_JumpIf(ACS_NamedExecuteWithResult("VC_CheckBtn",3)==3,"User1")
		"####" J 0 A_GiveInventory("Base28Ammo",1)
		"####" J 0 A_GiveInventory("Base56Ammo",1)
		Goto Ready2
		
		AltSkinFrame:
		T3_H J 0
		goto Ready3
		
		Deselect:
		TNT1 AAAAAAAAAAAAAAAAAAAAAA 0 A_Lower
		"####" A 1 A_Lower
		Loop
		
		User1:
		"####" A 0 ACS_NamedExecuteWithResult("VC_SetState",3)
		"####" KLM 1
		"####" F 0 A_FireCustomMissile("TopBigTop",0,0,8,0)
		"####" A 0 A_TakeInventory("Base56Ammo",42)
		"####" F 0 A_PlaySoundEx ("weapon/topspin","weapon")
		"####" NO 2
		"####" X 16
		"####" PQJJ 2
		Goto Ready2
		
		Select:
		XTOP A 0 A_SpawnItemEx("TopSkinWatcher")
		XTOP A 0 A_GunFlash
		SelectX:
		XTOP A 0 ACS_ExecuteAlways(991,0,764)
		XTOP AAAAAAAAAAAAAAAAAAAAAA 0 A_Raise
		XTOP A 1 A_Raise
		Loop
		
		Fire:
		"####" KLM 1
		"####" F 0 A_FireCustomMissile("TopManTop",0,1,8,0)
		"####" F 0 A_FireCustomMissile("TopManTop",-18,0,8,0)
		"####" F 0 A_FireCustomMissile("TopManTop",18,0,8,0)
		"####" F 0 A_PlaySoundEx ("weapon/topspin","weapon")
		"####" NO 2
		"####" X 16
		"####" PQJJ 2
		Goto Ready2
		
		Altfire:
		"####" A 0 A_JumpIfInventory("NoAltfire",1,"NoAmmo")
		"####" A 0 A_GiveInventory("TopParryHandler",1)
		
		Altfire.Charge1:
		"####" A 0 A_GiveInventory("ToadChargeDamageGive")
		"####" A 0 A_GiveInventory("TopManSlow")
		"####" A 0 A_GiveInventory("TopAnim1")
		"####" A 0 A_GiveInventory("TopManCharge",1)
		"####" A 0 A_PlaySoundEx("weapon/topspin","Weapon")
		"####" AA 1 A_JumpIfInventory("TopParryAnim",1,"AltRelease")
		"####" A 0 A_Refire("Altfire.Charge2")
		goto AltRelease
		
		Altfire.Charge2:
		"####" A 0 A_GiveInventory("TopManSlow")
		"####" A 0 A_GiveInventory("TopAnim2")
		"####" A 0 A_GiveInventory("TopManCharge",1)
		"####" BB 1 A_JumpIfInventory("TopParryAnim",1,"AltRelease")
		"####" A 0 A_Refire("Altfire.Charge3")
		goto AltRelease
		
		Altfire.Charge3:
		"####" A 0 A_GiveInventory("TopManSlow")
		"####" A 0 A_GiveInventory("TopAnim3")
		"####" A 0 A_GiveInventory("TopManCharge",1)
		"####" C 0 A_PlaySoundEx("weapon/topspin","Weapon")
		"####" CC 1 A_JumpIfInventory("TopParryAnim",1,"AltRelease")
		"####" A 0 A_Refire("Altfire.Charge4")
		goto AltRelease
		
		Altfire.Charge4:
		"####" A 0 A_GiveInventory("TopManSlow")
		"####" A 0 A_GiveInventory("TopAnim4")
		"####" A 0 A_GiveInventory("TopManCharge",1)
		"####" DD 1 A_JumpIfInventory("TopParryAnim",1,"AltRelease")
		"####" A 0 A_Refire("Altfire.Charge5")
		goto AltRelease
		
		Altfire.Charge5:
		"####" A 0 A_GiveInventory("TopManSlow")
		"####" A 0 A_GiveInventory("TopAnim5")
		"####" A 0 A_GiveInventory("TopManCharge",1)
		"####" E 0 A_PlaySoundEx("weapon/topspin","Weapon")
		"####" EE 1 A_JumpIfInventory("TopParryAnim",1,"AltRelease")
		"####" A 0 A_Refire("Altfire.Charge6")
		goto AltRelease
		
		Altfire.Charge6:
		"####" A 0 A_GiveInventory("TopManSlow")
		"####" A 0 A_GiveInventory("TopAnim6")
		"####" A 0 A_GiveInventory("TopManCharge",1)
		"####" FF 1 A_JumpIfInventory("TopParryAnim",1,"AltRelease")
		"####" A 0 A_Refire("Altfire.Charge7")
		goto AltRelease

		Altfire.Charge7:
		"####" A 0 A_GiveInventory("TopManSlow")
		"####" A 0 A_GiveInventory("TopAnim7")
		"####" A 0 A_GiveInventory("TopManCharge",1)
		"####" A 0 A_PlaySoundEx("weapon/topspin","Weapon")
		"####" XX 1 A_JumpIfInventory("TopParryAnim",1,"AltRelease")
		"####" A 0 A_Refire("Altfire.Charge8")
		goto AltRelease
		
		Altfire.Charge8:
		"####" A 0 A_GiveInventory("TopManSlow")
		"####" A 0 A_GiveInventory("TopAnim8")
		"####" A 0 A_GiveInventory("TopManCharge",1)
		"####" XX 1 A_JumpIfInventory("TopParryAnim",1,"AltRelease")
		"####" A 0 A_Refire("Altfire.Charge1")
		goto AltRelease
		
		AltRelease:
		"####" A 0 SetPlayerProperty(0,1,0)
		"####" D 0 A_TakeInventory("Base28Ammo",14)
		"####" D 0 A_TakeInventory("UnSolid",1)
		"####" D 0 A_ChangeFlag("SOLID",0)
		"####" A 0 A_GiveInventory("ToadChargeDamageTake")
		"####" A 0 A_GiveInventory("TopThrustHandler")
		"####" A 0 A_GiveInventory("TopSpinAnim")
		"####" A 0 A_JumpIfInventory("TopParryAnim",1,"AltLoop3")
		"####" A 0 A_JumpIfInventory("TopManCharge",25,"AltLoop2")
		
		AltLoop:
		"####" ABCDEF 1 A_SpawnItemEx("TopSpinHitbox", 0, 0, 0, momx, momy, momz, 0, SXF_ABSOLUTEMOMENTUM|SXF_NOCHECKPOSITION)
		"####" A 0 A_GiveInventory("CutterFlag")
		"####" A 0 A_JumpIfInventory("CutterFlag",5,"AltEnd")
		loop
		
		AltLoop2:
		"####" ABCDEF 1 A_SpawnItemEx("TopSpinHitbox2", 0, 0, 0, momx, momy, momz, 0, SXF_ABSOLUTEMOMENTUM|SXF_NOCHECKPOSITION)
		"####" A 0 A_GiveInventory("CutterFlag")
		"####" A 0 A_JumpIfInventory("CutterFlag",5,"AltEnd")
		loop
		
		AltLoop3:
		"####" A 0 A_PlaySoundEx("weapon/topdash","Body")
		"####" A 0 A_GiveInventory("VC_Timer",1)
		AltLoop3b:
		"####" ABCDEF 1 A_SpawnItemEx("TopSpinHitbox3",0,0,0,0,0,0,0,1)
		"####" A 0 A_GiveInventory("CutterFlag")
		"####" A 0 A_JumpIfInventory("CutterFlag",5,"AltEnd")
		loop
		
		AltEnd:
		"####" A 0 A_TakeInventory("CutterFlag",999)
		"####" A 0 SetPlayerProperty(0,0,0)
		"####" A 0 A_SpawnItemEx("ReSolidifier")
		"####" ABCDEF 3 A_TakeInventory("TopManCharge",999)
		"####" A 6 A_ClearRefire
		goto Ready2
		
		UltimateAttack:
		"####" A 0 ACS_NamedExecuteAlways("VC_UltimateText",0,22)
		"####" A 0 A_GiveInventory("UltBuildCooldownGiver",1)
		"####" K 0 A_GiveInventory("BaseCustomFlag1")
		"####" K 0 A_GiveInventory("DrillFlag")
		"####" D 0 A_TakeInventory("UnSolid",1)
		"####" D 0 A_ChangeFlag("SOLID",0)
		"####" A 0 A_PlaySoundEx("classes/ultimateactivation","Auto")
		"####" A 0 A_GiveInventory("HalfHalfDamageProtection")
		"####" D 0 A_ChangeFlag("NOPAIN",1)
		"####" A 0 A_GiveInventory("TopSpeedHandler",1)
		"####" ABCDEFABCDEFABCDEFABCDEF 1 A_PlaySoundEx("weapon/topspin","Weapon")
		
		UltimateLoop:
		"####" D 0 A_TakeInventory("MediumShortUltimateAmmo",4)
		"####" D 0 A_SpawnItemEx("TopUltHitbox")
		"####" D 0 A_Quake(1,3,0,256)
		"####" D 0 A_PlaySoundEx("weapon/topspin","Weapon")
		"####" D 0 A_PlaySoundEx("weapon/topsuper","Body")
		"####" DDDDD 0 A_SpawnItemEx("TopDust",0,0,0,random(-5,5),random(-5,5),random(5,10))
		"####" G 1 //A_Recoil(-2)
		"####" F 0 A_SpawnItemEx("TopUltHitbox")
		"####" D 0 A_PlaySoundEx("weapon/topspin","Weapon")
		"####" DDDDD 0 A_SpawnItemEx("TopDust",0,0,0,random(-5,5),random(-5,5),random(5,10))
		"####" H 1 //A_Recoil(-2)
		"####" H 0 A_SpawnItemEx("TopUltHitbox")
		"####" D 0 A_PlaySoundEx("weapon/topspin","Weapon")
		"####" DDDDD 0 A_SpawnItemEx("TopDust",0,0,0,random(-5,5),random(-5,5),random(5,10))
		"####" I 1 A_GiveInventory("TopSpikeCheck",1)
		"####" H 0 A_JumpIfInventory("MediumShortUltimateAmmo",4,"UltimateLoop")
		goto UltimateFinish
		
		UltimateFinish:
		"####" D 0 A_TakeInventory("HalfHalfDamageProtection")
		"####" D 0 A_ChangeFlag("NOPAIN",0)
		"####" K 0 A_TakeInventory("BaseCustomFlag1")
		"####" K 0 A_TakeInventory("DrillFlag")
		"####" A 0 A_SpawnItemEx("ReSolidifier")
		"####" ABCDEFABCDEF 2 A_PlaySoundEx("weapon/topspin","Weapon")
		"####" A 0 A_TakeInventory("PowerUltBuildCooldown",1)
		"####" A 0 A_TakeInventory("UltAttackFlag",1)
		goto Ready2
				
		NoAmmo:
		"####" A 0 A_GiveInventory("Base56Ammo",1)
		"####" A 3 A_GiveInventory("Base28Ammo",1)
		goto Ready2

		Flash:
		XTOP X 0 A_JumpIfInventory("IsUsingAltSkin1",1,"Flash.Alt")
		"####" X 1 A_JumpIfInventory("IsDead",1,"NoFlash")
		"####" X 0 A_JumpIfInventory("TopKickHud",1,"Flash2")
		Loop
		Flash.Alt:
		T3_H X 0
		goto Flash+1
		Flash2:
		"####" RSTUUTSR 1 A_JumpIfInventory("IsDead",1,"NoFlash")
		Goto Flash
	}
}

actor TopManCharge : Ammo
{
	inventory.amount 1
	inventory.maxamount 25
	+INVENTORY.IGNORESKILL
}

Actor TopKickHud : Powerup
{
	Powerup.Duration 4
}

actor TopManSlow : PowerSpeed
{
Powerup.Duration 4
+POWERSPEED.NOTRAIL
Speed 0.50
}

actor TopThrustHandler : BaseMovement//CustomInventory
{
States
{
itTimeGo://Pickup:
TNT1 A 0
TNT1 A 0 A_JumpIfInventory("TopManCharge",25,"Pickup2")
TNT1 A 0 A_Recoil(CallACS("VC_XYMob",-45))
stop
Pickup2:
TNT1 A 0 A_Recoil(CallACS("VC_XYMob",-90))
stop
}
}

actor TopManTop
{
Obituary "$OB_TOPMAN2"
PROJECTILE
+NOEXPLODEFLOOR
+SEEKERMISSILE
+SCREENSEEKER
+HEXENBOUNCE
Radius 16
Height 16
scale 2.5
speed 40
damage (10)
Damagetype "Topman"
States
{
Spawn:
TNT1 AA 0 A_GiveInventory("ProjectileCode",1)
TOPX A 0 A_JumpIfInTargetInventory("IsUsingAltSkin1",1,"AltSkinFrame")

Spawn2:
"####" IJKIJK 2
"####" IJKIJK 2 A_Stop
Start:
"####" AAAAA 0 A_SeekerMissile (70, 45, SMF_LOOK, 50, 10)
"####" A 0 A_Recoil(-10)
loopit:
"####" IJK 1 A_ChangeFlag("HEXENBOUNCE",0)
loop

AltSkinFrame:
T_PX A 0 A_Jump(90,"AltSkinFrameP2")
goto Spawn2

AltSkinFrameP2:
T_3S A 0
goto Spawn2

Death:
MMFX BCDE 2
stop
}
}

actor TopSpinHitbox : BasicExplosion
{
Obituary "$OB_TOPMAN1"
Damagetype "TopmanAlt"
mass 25
meleerange 32
States
{
Spawn:
TNT1 A 0
TNT1 A 1 A_Explode(mass,meleerange,0,0,meleerange)
stop
}
}

actor TopmanAltProtect : PowerProtection
{
	powerup.duration 35
	DamageFactor "TopmanAlt", 0.0
	DamageFactor "TopmanAlt2", 0.0
}

actor TopmanThirdProtect : PowerProtection
{
	powerup.duration 10
	DamageFactor "TopmanThird", 0.0
}

actor TopmanThird2Protect : PowerProtection
{
	powerup.duration 35
	DamageFactor "TopmanThird2", 0.0
}

actor TopSpinHitbox2 : TopSpinHitbox
{
mass 40
}

actor TopSpinHitbox3 : TopSpinHitbox
{
damagetype "TopmanAlt2"
States
{
Spawn:
TNT1 A 0
TNT1 A 2 A_Explode(45,32,0,0,32)
TNT1 A 0 A_SpawnItemEx("TopManEcho",0,0,0,0,0,0,0,1)
stop
}
}

actor TopReleaseEarly : CustomInventory
{
States
{
Pickup:
TNT1 A 0
TNT1 A 0 SetPlayerProperty(0,0,0)
stop
}
}

actor TopManEcho : BasicClientSide
{
renderstyle add
alpha 0.4
States
{
Spawn:
TOPM S 0
TOPM STUVWXYZ 1 A_FadeOut(0.05)
stop
}
}

actor TopUltHitbox : TopSpinHitbox
{
Obituary "$OB_TOPMAN3"
Damagetype "TopmanUltimate"
mass 22
meleerange 48
}

actor TopDust
{
speed 30
renderstyle translucent
alpha 1.0
scale 1.5
translation "8:253=160:160"
+NOINTERACTION
+MISSILE
states
{
Spawn:
MMFX E 0
MMFX EEEEE 1
MMFX EEEEE 1 A_FadeOut(0.2)
stop
}
}

actor TopSpinAnim : Powerup
{
+ADDITIVETIME
Powerup.Duration 5
}

actor TopAnim1 : Powerup
{
+ADDITIVETIME
Powerup.Duration 2
}

actor TopAnim2 : Powerup
{
+ADDITIVETIME
Powerup.Duration 2
}

actor TopAnim3 : Powerup
{
+ADDITIVETIME
Powerup.Duration 2
}

actor TopAnim4 : Powerup
{
+ADDITIVETIME
Powerup.Duration 2
}

actor TopAnim5 : Powerup
{
+ADDITIVETIME
Powerup.Duration 2
}

actor TopAnim6 : Powerup
{
+ADDITIVETIME
Powerup.Duration 2
}

actor TopAnim7 : Powerup
{
+ADDITIVETIME
Powerup.Duration 2
}

actor TopAnim8 : Powerup
{
+ADDITIVETIME
Powerup.Duration 2
}

actor TopBigTop
{
PROJECTILE
+RIPPER
radius 32
height 16
Obituary "$OB_TOPMAN4"
+NOEXPLODEFLOOR
-NOGRAVITY
+NOTARGETSWITCH
+STEPMISSILE
maxstepheight 12
gravity 1.2
scale 2.5
speed 30
damage (14)
Damagetype "TopmanThird"
+HEXENBOUNCE
+NOCLIP
States
{
Spawn:
TNT1 AA 0 A_GiveInventory("ProjectileCode")
TOPP D 1 A_CheckFloor("Death.Floor")
TOPP D 0 A_ChangeFlag("NOCLIP",0)
loopit:
TOPP DEEFFD 1 A_CheckFloor("Death.Floor")
loop
Death:
TNT1 A 0
stop
Death.Floor:
TNT1 A 0 A_SpawnItemEx("TopBigTop2",0,0,0,0,0,0,0,1)
stop
}
}

actor TopBigTop2 : TopBigTop
{
-BOUNCEONFLOORS
-NOCLIP
States
{
Spawn:
TNT1 AA 0 A_GiveInventory("ProjectileCode")
Spawn2:
TOPP I 0 A_PlaySoundEx("weapon/bigtopspin","Body",1)
TOPP I 0 ThrustThingZ(0,0,0,1)
loopit:
TOPP D 0 A_GiveInventory("CutterFlag",1)
TOPP D 0 A_JumpIfInventory("CutterFlag",200,"Death")
TOPP D 0 A_Weave(1,0,10,0)
TOPP D 0 A_JumpIfCloser(64,"Kick")
TOPP D 1 A_JumpIf(z-floorz>0, "Air")
TOPP E 0 A_GiveInventory("CutterFlag",1)
TOPP E 0 A_JumpIfInventory("CutterFlag",200,"Death")
TOPP E 0 A_Weave(1,0,10,0)
TOPP E 0 A_JumpIfCloser(64,"Kick")
TOPP E 1 A_JumpIf(z-floorz>0, "Air")
TOPP F 0 A_GiveInventory("CutterFlag",1)
TOPP F 0 A_JumpIfInventory("CutterFlag",200,"Death")
TOPP F 0 A_Weave(1,0,10,0)
TOPP F 0 A_JumpIfCloser(64,"Kick")
TOPP F 1 A_JumpIf(z-floorz>0, "Air")
loop
Kick:
TOPP E 0 A_StopSound(CHAN_BODY)
TOPP F 0 A_GiveToTarget("TopKick")
TOPP GHGH 1
stop
Air:
TOPP E 0 A_StopSound(CHAN_BODY)
TOPP DEF 1 A_JumpIf(z-floorz<=0, "Spawn2")
loop
Death:
TOPP E 0 A_StopSound(CHAN_BODY)
TOPP E 0 A_ChangeFlag("NOINTERACTION",1)
MMFX FGHI 2
stop
}
}

actor TopKick : CustomInventory
{
States
{
Pickup:
TNT1 A 0 A_PlaySoundEx("weapon/topkick","Auto")
TNT1 A 0 A_FireCustomMissile("KickedTop",0,0,0,-20)
TNT1 A 0 A_JumpIfInventory("BaseCustomFlag1",1,"Nope")
TNT1 A 0 A_JumpIfInventory("TopManSlow",1,"Nope")
TNT1 A 0 A_GiveInventory("TopKickHud",1)
stop
Nope:
TNT1 A 0
stop
}
}

actor KickedTop : TopBigTop2
{
bouncecount 3
bouncefactor 0.8
damage(25)
damagetype "TopmanThird2"
speed 50
reactiontime 175
States
{
Spawn:
TNT1 AA 0 A_GiveInventory("ProjectileCode")
TNT1 A 0 A_PlaySoundEx("weapon/toplaunch","Weapon")
Spawn2:
TOPP I 0 A_PlaySoundEx("weapon/bigtopspin","Body",1)
TOPP I 0 ThrustThingZ(0,0,0,1)
loopit:
TOPP DDD 0 A_Countdown
TOPP DD 0 A_SpawnItemEx("TopDust",0,0,0,random(-5,5),random(-5,5),random(5,10))
TOPP D 1 A_JumpIf(z-floorz>0, "Air")
TOPP EE 0 A_SpawnItemEx("TopDust",0,0,0,random(-5,5),random(-5,5),random(5,10))
TOPP E 1 A_JumpIf(z-floorz>0, "Air")
TOPP FF 0 A_SpawnItemEx("TopDust",0,0,0,random(-5,5),random(-5,5),random(5,10))
TOPP F 1 A_JumpIf(z-floorz>0, "Air")
loop
Air:
TOPP DDD 0 A_Countdown
TOPP E 0 A_StopSound(CHAN_BODY)
TOPP DEF 1 A_JumpIf(z-floorz<=0, "Spawn2")
loop
Death:
TOPP E 0 A_StopSound(CHAN_WEAPON)
TOPP E 0 A_StopSound(CHAN_BODY)
TOPP E 0 A_ChangeFlag("NOINTERACTION",1)
MMFX FGHI 2
stop
}
}

actor TopParryBox
{
+MISSILE
Speed 0
+DONTSPLASH
+NOEXPLODEFLOOR
+FLOORCLIP
+NOGRAVITY
Damage 0
Height 64
Radius 32
health 99999
scale 2.5
+SHOOTABLE
+NOBLOOD
-SOLID
painchance 256
bloodtype ""
species "TopParryType"
+THRUSPECIES
+CANTSEEK
+DONTRIP
+GHOST
+NORADIUSDMG
+NOTARGETSWITCH
States
{
Spawn:
TNT1 A 0
TNT1 A 0 A_JumpIfInTargetInventory("TopSpinAnim",1,"Death")
TNT1 AAAAA 1 A_Warp(AAPTR_TARGET, 0, 0, 0, 0, WARPF_NOCHECKPOSITION|WARPF_INTERPOLATE)
stop
Death:
TNT1 A 0 //A_PlaySound("item/protoreflect")
TNT1 A 1
stop
Pain:
TNT1 A 0 A_JumpIfInTargetInventory("TopSpinAnim",1,"Death")
TNT1 A 0 A_JumpIfInTargetInventory("TopPainFlag",1,"Death")
//TNT1 A 0 A_GiveToTarget("TopmanParrySelfProtect",1)
Pain.TopmanThird:
Pain.TopmanThird2:
TNT1 A 0 A_ChangeFlag("NOCLIP",1)
TNT1 A 0 A_SpawnItemEx("TopParryFX",0,0,0,0,0,2,0,1)
TNT1 A 0 A_GiveToTarget("TopParryAnim",1)
TNT1 A 0 A_PlaySound("item/protoreflect")
TNT1 A 2 A_GiveToTarget("TopManCharge",25)
stop
}
}

actor TopParryFX : BasicClientSide
{
renderstyle add
reactiontime 35
States
{
Spawn:
TOPS A 0 A_SetScale(scalex+0.1,scaley+0.1)
TOPS A 1 A_FadeOut(0.028)
TOPS A 0 A_Countdown
loop
}
}

actor TopParryHandler : CustomInventory
{
States
{
Pickup:
TNT1 A 0 //A_JumpIfInventory("TopPainFlag",1,"Nope")
TNT1 A 0 A_SpawnItemEx("TopParryBox",2,0,0,momx,momy,momz,0,SXF_ABSOLUTEMOMENTUM|SXF_NOCHECKPOSITION)
stop

Nope:
TNT1 A 0
stop
}
}

Actor TopPainFlag : Powerup
{
	Powerup.Duration 18
}

Actor TopParryAnim : Powerup
{
	Powerup.Duration 5
}

actor TopSpeedHandler : CustomInventory
{
States
{
Pickup:
TNT1 A 0 A_JumpIfInventory("VC_Timer",9,"Pickup9")
TNT1 A 0 A_JumpIfInventory("VC_Timer",8,"Pickup8")
TNT1 A 0 A_JumpIfInventory("VC_Timer",7,"Pickup7")
TNT1 A 0 A_JumpIfInventory("VC_Timer",6,"Pickup6")
TNT1 A 0 A_JumpIfInventory("VC_Timer",5,"Pickup5")
TNT1 A 0 A_JumpIfInventory("VC_Timer",4,"Pickup4")
TNT1 A 0 A_JumpIfInventory("VC_Timer",3,"Pickup3")
TNT1 A 0 A_JumpIfInventory("VC_Timer",2,"Pickup2")
TNT1 A 0 A_JumpIfInventory("VC_Timer",1,"Pickup1")
stop

Pickup1:
TNT1 A 0 A_GiveInventory("TopSpeed1",1)
stop

Pickup2:
TNT1 A 0 A_GiveInventory("TopSpeed2",1)
stop

Pickup3:
TNT1 A 0 A_GiveInventory("TopSpeed3",1)
stop

Pickup4:
TNT1 A 0 A_GiveInventory("TopSpeed4",1)
stop

Pickup5:
TNT1 A 0 A_GiveInventory("TopSpeed5",1)
stop

Pickup6:
TNT1 A 0 A_GiveInventory("TopSpeed6",1)
stop

Pickup7:
TNT1 A 0 A_GiveInventory("TopSpeed7",1)
stop

Pickup8:
TNT1 A 0 A_GiveInventory("TopSpeed8",1)
stop

Pickup9:
TNT1 A 0 A_GiveInventory("TopSpeed9",1)
stop
}
}

actor TopSpeed1 : PowerSpeed
{
	+POWERSPEED.NOTRAIL
	Powerup.Duration 174
	Speed  1.4
}

actor TopSpeed2 : TopSpeed1
{
	Speed  1.8
}

actor TopSpeed3 : TopSpeed1
{
	Speed  2.2
}

actor TopSpeed4 : TopSpeed1
{
	Speed  2.6
}

actor TopSpeed5 : TopSpeed1
{
	Speed  3.0
}

actor TopSpeed6 : TopSpeed1
{
	Speed  3.4
}

actor TopSpeed7 : TopSpeed1
{
	Speed  3.8
}

actor TopSpeed8 : TopSpeed1
{
	Speed  4.2
}

actor TopSpeed9 : TopSpeed1
{
	Speed  4.6
}

actor TopSARTop
{
Obituary "$OB_TOPMAN5"
PROJECTILE
-NOGRAVITY
+BOUNCEONCEILINGS
+BOUNCEONWALLS
+RIPPER
-BOUNCEONFLOORS
Radius 16
Height 16
scale 2.5
speed 40
damage (5)
WallBounceFactor 0.9
bouncecount 4
ReactionTime 88
damagetype "TopmanSpike"
translation "194:194=249:249"//specifically for the alt skin version
States
{
Spawn:
TNT1 AA 0 A_GiveInventory("ProjectileCode",1)
TO3S A 0 A_JumpIfInTargetInventory("IsUsingAltSkin1",1,"AltSkinFrame")

loopit:
"####" ABC 2 A_Countdown
loop

AltSkinFrame:
T_3S A 0
goto loopit
//goto Spawn+2
Death:
MMFX FGHI 2
stop
}
}

actor TopSpikeCheck : CustomInventory
{
States
{
Pickup:
TNT1 A 0 A_JumpIfInventory("VC_Timer",9,"Pickup2")
stop

Pickup2:
TNT1 A 0 A_JumpIfInventory("WeaponCharge",1,"Pickup3")
TNT1 A 0 A_GiveInventory("WeaponCharge",1)
stop

Pickup3:
TNT1 A 0 A_PlaySoundEx("weapon/grenadespray","Auto")
TNT1 A 0 A_SpawnItemEx("TopSARTop",0,0,0,20,0,0,random(0,359))
TNT1 A 0 A_TakeInventory("WeaponCharge",9)
stop
}
}

actor TopmanParrySelfProtect : PowerProtection
{
	powerup.duration 10
	DamageFactor "normal", 0.0
}

actor TopSkinWatcher
{
Height 0
Radius 0
+NOINTERACTION
+MISSILE
States
{
Spawn:
TNT1 A 0
TNT1 AAA 1 A_GiveToTarget("TopSkinCheck")
TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("core_targetexists",0) == 0, "Death")
loop
Death:
TNT1 A 0
stop
}
}

actor TopSkinCheck : SkinChecker
{
States
{
Pickup:
TNT1 A 0 A_JumpIf(CallACS("GC_GetSkinNum")==272,"AltSkin1")
goto NormalSkin
}
}

//"194:194=249:249"