actor Astroman : SemiHighArmorClass //Sound effects by littlelamp aka LL
{
	Player.ScoreIcon "ASTRMUGS"
	player.startitem "BaseFlagPack", 1
	player.startitem "SemiHighArmor"
	player.soundclass "astromanc"
	Player.ViewHeight 83
	projectilepassheight 108
	Player.JumpZ 14
	player.displayname "Astroman"
	player.startitem "CanThirdFire"
	player.startitem "Base28Ammo",28
	player.forwardmove 0.75, 0.75
	player.sidemove 0.73, 0.73
	player.startitem "AstroCrushBoss"
	player.startitem "UltimateAttackItem4MM8"
	player.startitem "UltSoundWatcherSpawn4"
	player.startitem "IsFromMM8"
	player.startitem "AstroFlightAmmo",120
	player.startitem "NoHealthBar"
	States
	{
	Animation3:
	Spawn:
		ASTM A 0
		ASTM B 1
		ASTM A 1
		Goto Spawn+2
		See:
		ASTM BBBBBCCCCCDDDDDEEEEE 1
		Goto Spawn
		
		Animation1:
		Missile:
		ASTM F 0 A_JumpIfInventory("SatellitesAreOut",1,"Missile2")
		ASTM FFFFFGGGG 1 A_JumpIfInventory("SatellitesAreOut",1,"Missile2")
		Goto Spawn+1
		Missile2:
		ASTM G 1
		ASTM G 1 A_JumpIfInventory("SatellitesAreOut",1,"Missile2")
		ASTM G 2
		goto Spawn+1
		Animation2:
		ASTM IJKLMNOP 2
		loop
		ClassTimeStop:
		ASTM A 0 SetPlayerProperty(0,1,4)
		ASTM A 0 ACS_Execute(528,0)
		ASTM AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 1 A_Stop
		ASTM A 0 SetPlayerProperty(0,0,4)
		Goto pain+1
		ClassPain:
		ASTM HHHHHHHHHH 2 A_SpawnItem("PainFX",0,3)
		Goto Spawn+1
		
		Death.HomingSniper:
		Death.Searchman:
		Death.TrioHomingSniper:
		TNT1 A 0 A_SpawnItemEx("DeadSnipedAstroMan",0,0,0,0,0,0,0,1)
		NOFX Z 20 ACS_ExecuteAlways(999,0,0)
		NOFX A 1 A_CheckPlayerDone
		wait
		
		Death.MagicCard:
		Death.MagicManCard:
		Death.MagicManCardB:
		Death.MagicManCard2:
		Death.MagicManCard2B:
		TNT1 A 0 A_SpawnItemEx("DeadActAstroMan",0,0,0,0,0,0,0,1)
		NOFX Z 20 ACS_ExecuteAlways(999,0,0)
		NOFX A 1 A_CheckPlayerDone
		wait
		
		ClassDeath:
		TNT1 A 0 A_SpawnItemEx("DeadAstroMan",0,0,0,0,0,0,0,1)
		ASTM Z 20 ACS_ExecuteAlways(999,0,0)
		NOFX A 1 A_CheckPlayerDone
		wait
		ClassIceDeath:
		ASTM A 35
		NOFX A 0 A_SpawnItemEx("FrozenDeathFX",0,0,16)
		NOFX A 1 A_CheckPlayerDone
		wait
		WeaponGetM:
		CUTM H 0 A_JumpIfInTargetInventory("CopyVisionWepM",1,2)
		CUTM H 0 A_GiveToTarget("WeaponGetter")
		CUTM H 0 A_GiveToTarget("CopyVisionWepM")
		goto ClassDeath
	}
}


actor DeadAstroMan : DeadTenguMan
{
meleerange 861
States
{
Spawn:
AST2 H 0
"####" "#" 0
goto loopit

Death:
TNT1 A 0 A_PlaySoundEx("astroman/dead","Auto")
TNT1 A 0 A_PlaySoundEx("mm8/dead","Auto")
TNT1 A 2 A_SpawnItemEx("FakeDeathFXMM8",0,0,32)
stop
}
}

actor DeadSnipedAstroMan
{
PROJECTILE
+MISSILE
species "DeadBody"
+THRUSPECIES
+THRUACTORS
+NOGRAVITY
-NOEXPLODEFLOOR
+NOINTERACTION
scale 2.5
reactiontime 19
meleerange 839
mass 230
const int OFS = 48;
States
{
Spawn:
TNT1 AA 0 A_GiveInventory("ProjectileCode")
AST2 HHHH 6 A_SpawnItemEx("AstroManReticle",Random(-OFS,OFS),Random(-OFS,OFS),Random(0,80))
AST2 HHHHHHHHHHHHHHHH 2 A_SpawnItemEx("AstroManReticle",Random(-OFS,OFS),Random(-OFS,OFS),Random(0,80))
Death:
TNT1 A 0 A_PlaySoundEx("astroman/dead","Auto")
TNT1 A 0 A_PlaySoundEx("mm8/dead","Auto")
TNT1 A 2 A_SpawnItemEX("CriticalDeathSpawner",0,0,0,0,0,0,0,SXF_TRANSFERTRANSLATION)
Stop
}
}

actor AstroManReticle : BasicClientSide
{
States
{
Spawn:
TNT1 AA 0 A_GiveInventory("ProjectileCode")
TNT1 A 0 A_Jump(256,"A","B")
Goto A
A:
TNT1 A 0 A_PlaySoundEx("weapons/mm8/homingsniperlock", "Auto")
HSNI MMLLKKKKK 1
Goto C
B:
TNT1 A 0 A_PlaySoundEx("weapon/SearchHairCross","Auto")
HSNC ABCDEFGHI 1
Goto C
C:
TNT1 A 0 A_PlaySoundEx("mm8/deathfx","Auto")
8XPL ABCDEF 2
stop
}
}

actor DeadActAstroMan : DeadSnipedAstroMan
{
States
{
Spawn:
TNT1 AA 0 A_GiveInventory("ProjectileCode")
ASTM R 15
ASTM SSTTUSSTTUSSTTUSSTTUSSTTU 1
Death:
TNT1 A 0 A_PlaySoundEx("mm7/dead","Auto")
TNT1 A 2 A_SpawnItemEX("CriticalDeathSpawner",0,0,0,0,0,0,0,SXF_TRANSFERTRANSLATION)
Stop
}
}

actor AstroCrushBoss : VCBaseWeapon
{
	Obituary "$OB_ASTROMAN1"
	weapon.ammotype "Base56Ammo"
	weapon.ammouse 1
	weapon.ammotype2 "AstroFlightAmmo"
	weapon.ammouse2 1
	+WEAPON.NOAUTOAIM
	States
	{
		Ready:
		ASTH A 0 A_SpawnItemEx("AstromanSatelliteSpawner")
		Ready2:
		TNT1 A 0 A_TakeInventory("VC_Timer",999)
		ASTH A 1 A_WeaponReady ASTH A 0 A_JumpIfInventory("UltAttackFlag",1,"ReadyUltPrep") ASTH A 0 A_JumpIf(CallACS("VC_CheckBtn",3)==3,"User1")
		loop
		ReadyUltPrep:
		TNT1 A 0 ACS_NamedExecuteAlways("VC_UltimateText",0,72)
		TNT1 A 0 A_PlaySoundEx("classes/ultimateactivation","Auto")
		TNT1 A 0 A_TakeInventory("MediumLongUltimateAmmo",400)
		TNT1 A 0 A_GiveInventory("PharaohUltCooldown")
		TNT1 A 0 A_PlaySoundEx("weapon/astroteleport","Body")
		TNT1 A 1
		ReadyUlt:
		ASTH A 0
		ASTH A 0 A_GiveInventory("PharaohUltCooldown")
		ASTH A 0 A_GiveInventory("SatellitesAreOut",1)
		ASTH A 0 A_ChangeFlag(INVULNERABLE,true)
		ASTH A 0 A_GiveInventory("InvProtection",1)
		ASTH A 0 A_ChangeFlag(CANTSEEK,true)
		ASTH A 0 A_JumpIfInventory("Base112Ammo",112,"UltFire")
		ASTH A 0 A_SetTranslucent(0)
		ASTH A 1 A_WeaponReady(WRF_NOSECONDARY)
		ASTH A 0 A_GiveInventory("Base112Ammo",1)
		loop
		
		UltFire:
		ASTH A 1 A_PlaySoundEx("weapon/astroteleport","Body")
		ASTH A 0 A_TakeInventory("SatellitesAreOut",9)
		ASTH A 0 A_GiveInventory("WeaponCharge",12)
		ASTH A 0 A_SpawnItemEx("AstroUltSpawners")
		ASTH A 0 A_TakeInventory("Base112Ammo",9000)
		ASTH A 0 A_TakeInventory("UltAttackFlag",9000)
		ASTH A 0 A_ChangeFlag(INVULNERABLE,false)
		ASTH A 0 A_TakeInventory("InvProtection",1)
		ASTH A 0 A_ChangeFlag(CANTSEEK,false)
		ASTH A 2 A_SetTranslucent(1)
		ASTH A 2 A_SetTranslucent(0)
		ASTH A 2 A_SetTranslucent(1)
		ASTH A 2 A_SetTranslucent(0)
		ASTH A 2 A_SetTranslucent(1)
		ASTH A 34 A_GiveInventory("PharaohUltCooldown")
		goto Ready2
		
		Flash:
		TNT1 A 0 A_JumpIfInventory("AstroFlyFlag",1,"Flash.Fly")
		TNT1 A 1 A_GiveInventory("AstroFlightAmmoHandler",1)
		TNT1 A 0 A_JumpIfInventory("IsUnderwater",1,3)
		TNT1 A 0 A_SetGravity(0.5)
		TNT1 A 0 A_Jump(256,2)
		TNT1 A 0 A_SetGravity(0.25)
		TNT1 A 0 A_JumpIfInventory("IsDead",1,"NoFlash")
		loop
		
		Flash.Fly:
		TNT1 A 0 A_JumpIfInventory("IsDead",1,"NoFlash")
		TNT1 A 0 A_CheckFloor("Flash.FlyEnd")
		TNT1 A 1 SetPlayerProperty(0,1,3)
		TNT1 A 0 A_TakeInventory("AstroFlightAmmo",1)
		TNT1 A 0 A_JumpIfInventory("AstroFlightAmmo",1,"Flash.Fly")
		
		Flash.FlyEnd:
		TNT1 A 0 SetPlayerProperty(0,0,3)
		TNT1 A 0 A_TakeInventory("AstroFlyFlag",999)
		goto Flash
		
		User1:
		ASTH AA 1 A_JumpIfInventory("AstroFlyFlag",1,"User1.Fly")
		ASTH A 0 A_JumpIfInventory("AstroCancelCooldown",1,"Ready2")
		ASTH A 0 A_JumpIfInventory("CVisionCounter2",1,"User1.Cancel")
		goto Ready2
		
		User1.Cancel:
		ASTH AA 1 Offset(0,40) A_GiveInventory("AstroCloneDespawn",1)
		ASTH AA 1 Offset(0,48) A_GiveInventory("AstroCloneDespawn",1)
		ASTH AAAA 1 Offset(0,56) A_GiveInventory("AstroCloneDespawn",1)
		ASTH A 2 Offset(0,48) A_SpawnItemEx("AstroCooldownWatcher")
		ASTH A 2 Offset(0,40) 
		goto Ready2
		
		User1.Fly:
		ASTH A 0 ACS_NamedExecuteWithResult("VC_SetState",2)
		ASTH A 0 A_PlaySoundEx("misc/catcherdrop","Weapon")
		ASTH A 0 ThrustThingZ(0,60,1,0)
		ASTH A 1 Offset(0,44) SetPlayerProperty(0,0,3)
		ASTH A 0 A_GunFlash("Flash.FlyEnd")
		
		User1.FlyLoop:
		ASTH A 0 A_GiveInventory("BaseCustomFlag1")
		ASTH A 0 SetPlayerProperty(0,0,3)
		ASTH A 0 A_TakeInventory("JumpCancler",999)
		ASTH A 0 A_SpawnItemEx("AstroDropHitbox",0,0,-4,momx,momy,momz,0,SXF_ABSOLUTEMOMENTUM|SXF_NOCHECKPOSITION)
		ASTH A 0 A_JumpIfInventory("AstroBounceFlag",1,"User1.FlyLand")
		ASTH A 0 ThrustThingZ(0,60,1,0)
		ASTH A 1 Offset(0,52) A_CheckFloor("User1.FlyLand")
		loop
		
		User1.FlyLand:
		ASTH A 0 A_SpawnItemEx("AstroLandHitbox")
		ASTH A 0 ACS_NamedExecuteWithResult("VC_SetState",3)
		ASTH A 0 A_PlaySoundEx("weapon/astrobounce","Weapon")
		ASTH A 0 ThrustThingZ(0,50,0,0)
		ASTH A 0 A_TakeInventory("BaseCustomFlag1",999)
		ASTH AA 1 Offset(0,56) A_TakeInventory("JumpCancler",999)
		ASTH AA 1 Offset(0,52) A_TakeInventory("JumpCancler",999)
		ASTH AA 1 Offset(0,44) A_TakeInventory("JumpCancler",999)
		ASTH A 0 A_TakeInventory("BaseCustomFlag1",999)
		ASTH A 4 A_WeaponReady(WRF_NOFIRE)
		goto Ready2
		
		Altfire.Fly:
		ASTH B 0 ACS_NamedExecuteWithResult("VC_SetState",1)
		ASTH BCEEFGIJ 1
		ASTH C 0 A_SpawnItemEx("AstroSpawner")
		ASTH KLMN 1
		ASTH A 8
		goto Ready2
		
		AltFire:
		RATU A 0 A_JumpIfInventory("NoAltfire",1,"Ready2")
		ASTH A 1 A_JumpIfInventory("AstroFlyFlag",1,"Altfire.Fly")
		ASTH A 0 A_JumpIfInventory("AstroCancelCooldown",1,"Ready2")
		ASTH F 0 A_JumpIfInventory("CVisionCounter2",2,"Ready2")
		ASTH O 1 A_JumpIfTargetInLOS("AltFire.Homing",0,JLOSF_COMBATANTONLY)
		ASTH F 0 A_SpawnItemEx("AstroCopyVision")
		ASTH PQRSJJJJ 1
		ASTH A 4
		goto Ready2
		
		Altfire.Homing:
		ASTH O 1
		ASTH F 0 A_SpawnItemEx("AstroCopyVisionHoming",0,0,0,0,0,0,0,1)
		ASTH F 0 A_PlaySoundEx("weapon/noisecrush1","Weapon")
		ASTH PQRSJJJJ 1
		ASTH A 4
		goto Ready2
		
		Deselect:
		TNT1 AAAAAAAAAAAAAAAAAAAAAA 0 A_Lower
		ASTH A 1 A_Lower
		Loop
		
		Select:
		TNT1 A 0
		TNT1 A 0 A_GunFlash
		TNT1 A 0 ACS_ExecuteAlways(991,0,861)
		ASTH A 10 A_WeaponReady(14)
		TNT1 AAAAAAAAAAAAAAAAAAAAAA 0 A_Raise
		ASTH A 1 A_Raise
		Loop
		
		Fire:
		ASTH A 0 A_JumpIfInventory("UltAttackFlag",1,"UltFire")
		ASTH BC 1
		goto Charging
		
		Fire1:
		ASTH EFG 1
		ASTH C 0 A_PlaySoundEx("weapon/enemyweapon","Weapon")
		ASTH F 0 A_GiveInventory("SatellitesAreOut",1)
		TOAD A 0 A_GiveInventory("ToadChargeDamageTake")
		ASTH F 0 A_FireCustomMissile("AstromanSatelliteSpawner_F",0,0,0,24)
		ASTH HIJ 1
		goto FireWait
		
		Fire2:
		ASTH EFG 1 A_WeaponReady(WRF_NOFIRE)
		ASTH F 0 A_GiveInventory("SatelliteCharge",14)
		ASTH F 0 A_GiveInventory("SatellitesAreOut",1)
		ASTH B 0 A_PlaySoundEx("weapon/coilexplode","Body")
		ASTH C 0 A_PlaySoundEx("weapon/enemyweapon","Weapon")
		TOAD A 0 A_GiveInventory("ToadChargeDamageTake")
		ASTH F 0 A_FireCustomMissile("AstromanSatelliteSpawner_F",0,0,0,24)
		ASTH HIJ 1
		
		FireWait:
		ASTH J 1 A_GiveInventory("VC_Timer")
		ASTH J 0 A_JumpIfInventory("VC_Timer",140,"Ready2")
		ASTH J 0 A_JumpIfInventory("SatellitesAreOut",1,"FireWait")
		ASTH J 0 A_TakeInventory("AstroHoldFlag",100)
		ASTH J 0 A_TakeInventory("Base56Ammo",100)
		goto Ready2
		
		Charging:
		TOAD A 0 A_GiveInventory("ToadChargeDamageGive")
		ASTH D 1 A_GiveInventory("Base56Ammo",2)
		ASTH C 0 A_GiveInventory("AstroSt_Attack",1)
		ASTH C 0 A_JumpIfInventory("Base56Ammo",56,"HoldW")
		ASTH C 0 A_Refire("Charging")
		goto Fire+3
		
		HoldW:
		ASTH D 1 Offset(0,24)
		ASTH C 0 A_GiveInventory("AstroSt_Attack",1)
		ASTH C 0 A_Refire("HoldW")
		goto Fire2
	}
}

actor AstroSt_Attack : VCOnceP {powerup.duration 3}
actor AstroHoldFlag : VCOnce {inventory.maxamount 56}
actor SatellitesAreOut : VCOnce {}
actor SatelliteCharge : VCOnce {inventory.maxamount 30}
actor CVisionCounter2 : VCOnce {inventory.maxamount 2}
actor AstroCloneDespawn : VCOnceP {powerup.duration 3}
actor AstroBounceFlag : VCOnceP {powerup.duration 3}

actor AstromanSatelliteSpawner
{
	PROJECTILE
	+NOTARGETSWITCH
	+NOINTERACTION
	-DONTBLAST
	var int user_rs; // Rotation speed : Lesser denominator = faster
	var int user_z; // Up-Down offsets
	States
	{	
		Spawn:
		TNT1 AA 0 A_GiveInventory("ProjectileCode")
		TNT1 A 1 A_JumpIf(ACS_NamedExecuteWithResult("core_targetexists",0) == 0, "SDeath")
		TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("core_targetexists",0) == 0, "SDeath")
		TNT1 A 0 A_Warp(AAPTR_Target,0,0,28,0,WARPF_NOCHECKPOSITION|WARPF_USECALLERANGLE|WARPF_INTERPOLATE|WARPF_COPYINTERPOLATION)
		TNT1 A 0 A_JumpIfInTargetInventory("AstroSt_Attack",1,"GoUp")
		TNT1 A 0 A_SetUserVar("user_z",0)
		TNT1 A 1 A_JumpIfInTargetInventory("AstroCrushBoss",1,"Rotate")
		goto SDeath
		
		GoUp:
		TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("core_targetexists",0) == 0, "SDeath")
		TNT1 A 0 A_JumpIf(user_z >= 70,2)
		TNT1 A 0 A_SetUserVar("user_z",user_z+2)
		TNT1 A 0 A_SetUserVar("user_rs",user_rs+360/20)
		TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("core_targetexists",0) == 0, "SDeath")
		TNT1 A 1 A_JumpIfInTargetInventory("AstroCrushBoss",1,"Rotate")
		goto SDeath
		
		Rotate:
		TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("core_targetexists",0) == 0, "SDeath")
		TNT1 A 0 A_SetUserVar("user_rs",user_rs+360/36)
		TNT1 A 0 A_JumpIfInTargetInventory("SatellitesAreOut",1,3)
		TNT1 A 0 A_SpawnItemEx("AstromanSatellite",48,0,user_z,momx,momy,momz,user_rs,SXF_ABSOLUTEMOMENTUM|SXF_NOCHECKPOSITION|SXF_TRANSFERTRANSLATION|SXF_TRANSFERPOINTERS)
		TNT1 A 0 A_SpawnItemEx("AstromanSatellite",48,0,user_z,momx,momy,momz,user_rs+180,SXF_ABSOLUTEMOMENTUM|SXF_NOCHECKPOSITION|SXF_TRANSFERTRANSLATION|SXF_TRANSFERPOINTERS)
		TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("core_targetexists",0) == 0, "SDeath")
		TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("core_targetexists",0) == 0, "SDeath")
		TNT1 A 1 A_JumpIfInTargetInventory("AstroCrushBoss",1,"Spawn")
		goto SDeath
		
		SDeath:
		Death:
		TNT1 A 0 A_PlaySoundEx("mm8/deathfx","Voice")
		8XPL ABCDEF 2 A_ChangeFlag("NOINTERACTION",True)
		stop
	}
}

actor AstromanSatelliteSpawner_F : AstromanSatelliteSpawner
{
	+THRUACTORS
	+CANBOUNCEWATER
	//+DOOMBOUNCE
	+BOUNCEONWALLS
	+BOUNCEONCEILINGS
	+STEPMISSILE
	+NOEXPLODEFLOOR
	//BOUNCEONFLOORS
	//+ALLOWBOUNCEONACTORS
	//+BOUNCEAUTOOFF
	+SKYEXPLODE
	+MISSILE
	+SEEKERMISSILE
	-NOINTERACTION
	+DONTREFLECT
	BounceFactor 1.0
	WallBounceFactor 1.0
	Speed 70
	Radius 12
	Height 8
	Damage (0)
	States
	{
		Spawn:
		TNT1 AA 0 A_GiveInventory("ProjectileCode")
		TNT1 A 1
		TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("core_targetexists",0) == 0, "SDeath")
		TNT1 A 0 A_ScaleVelocity(0.925)
		TNT1 A 0 A_SetUserVar("user_z",0)
		TNT1 A 0 A_GiveInventory("CutterFlag",1)
		TNT1 A 0 A_JumpIfInventory("CutterFlag",35,"Check")
		TNT1 A 1 A_JumpIfInTargetInventory("AstroCrushBoss",1,"Rotate")
		TNT1 A 1
		TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("core_targetexists",0) == 0, "SDeath")
		TNT1 A 0 A_ScaleVelocity(0.925)
		TNT1 A 0 A_SetUserVar("user_z",0)
		TNT1 A 0 A_GiveInventory("CutterFlag",1)
		TNT1 A 0 A_JumpIfInventory("CutterFlag",35,"Check")
		TNT1 A 1
		TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("core_targetexists",0) == 0, "SDeath")
		TNT1 A 0 A_ScaleVelocity(0.925)
		TNT1 A 0 A_SetUserVar("user_z",0)
		TNT1 A 0 A_GiveInventory("CutterFlag",1)
		TNT1 A 0 A_JumpIfInventory("CutterFlag",35,"Check")
		goto SDeath
		
		Check:
		TNT1 A 0 A_SetUserVar("user_rs",user_rs+360/20)
		TNT1 A 0 A_SpawnItemEx("AstromanSatellite2",48,0,user_z,momx,momy,momz,user_rs,SXF_ABSOLUTEMOMENTUM|SXF_NOCHECKPOSITION|SXF_TRANSFERTRANSLATION|SXF_TRANSFERPOINTERS)
		TNT1 A 0 A_SpawnItemEx("AstromanSatellite2",48,0,user_z,momx,momy,momz,user_rs+180,SXF_ABSOLUTEMOMENTUM|SXF_NOCHECKPOSITION|SXF_TRANSFERTRANSLATION|SXF_TRANSFERPOINTERS)
		TNT1 A 1 A_JumpIfInTargetInventory("SatelliteCharge",1,"Shoot")
		TNT1 A 0 A_SetUserVar("user_rs",user_rs+360/20)
		TNT1 A 0 A_SpawnItemEx("AstromanSatellite2",48,0,user_z,momx,momy,momz,user_rs,SXF_ABSOLUTEMOMENTUM|SXF_NOCHECKPOSITION|SXF_TRANSFERTRANSLATION|SXF_TRANSFERPOINTERS)
		TNT1 A 0 A_SpawnItemEx("AstromanSatellite2",48,0,user_z,momx,momy,momz,user_rs+180,SXF_ABSOLUTEMOMENTUM|SXF_NOCHECKPOSITION|SXF_TRANSFERTRANSLATION|SXF_TRANSFERPOINTERS)
		TNT1 A 1 A_JumpIfInTargetInventory("SatelliteCharge",1,"Shoot")
		TNT1 A 0 A_SetUserVar("user_rs",user_rs+360/20)
		TNT1 A 0 A_SpawnItemEx("AstromanSatellite2",48,0,user_z,momx,momy,momz,user_rs,SXF_ABSOLUTEMOMENTUM|SXF_NOCHECKPOSITION|SXF_TRANSFERTRANSLATION|SXF_TRANSFERPOINTERS)
		TNT1 A 0 A_SpawnItemEx("AstromanSatellite2",48,0,user_z,momx,momy,momz,user_rs+180,SXF_ABSOLUTEMOMENTUM|SXF_NOCHECKPOSITION|SXF_TRANSFERTRANSLATION|SXF_TRANSFERPOINTERS)
		TNT1 A 1 A_JumpIfInTargetInventory("SatelliteCharge",1,"Shoot")
		TNT1 A 0 A_SetUserVar("user_rs",user_rs+360/20)
		TNT1 A 0 A_SpawnItemEx("AstromanSatellite2",48,0,user_z,momx,momy,momz,user_rs,SXF_ABSOLUTEMOMENTUM|SXF_NOCHECKPOSITION|SXF_TRANSFERTRANSLATION|SXF_TRANSFERPOINTERS)
		TNT1 A 0 A_SpawnItemEx("AstromanSatellite2",48,0,user_z,momx,momy,momz,user_rs+180,SXF_ABSOLUTEMOMENTUM|SXF_NOCHECKPOSITION|SXF_TRANSFERTRANSLATION|SXF_TRANSFERPOINTERS)
		TNT1 A 1 A_JumpIfInTargetInventory("SatelliteCharge",1,"Shoot")
		goto Homeback
		SDeath:
		Death:
		TNT1 A 0 A_PlaySoundEx("mm8/deathfx","Voice")
		8XPL ABCDEF 2 A_ChangeFlag("NOINTERACTION",True)
		stop
		HomeBack:
		TNT1 A 1
		TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("core_targetexists",0) == 0, "SDeath")
		TNT1 A 0 A_ChangeFlag(NOINTERACTION,true)
		TNT1 A 0 A_FaceTarget
		TNT1 A 0 A_JumpIfCloser(64,"StopH")
		TNT1 A 0 A_RearrangePointers(AAPTR_Target,AAPTR_Null,AAPTR_Target)
		TNT1 A 0 A_SeekerMissile(90,90,SMF_PRECISE|SMF_LOOK,0,8)
		TNT1 A 0 A_SetUserVar("user_rs",user_rs+360/16)
		TNT1 A 0 A_SpawnItemEx("AstromanSatellite2",48,0,user_z,momx,momy,momz,user_rs,SXF_ABSOLUTEMOMENTUM|SXF_NOCHECKPOSITION|SXF_TRANSFERTRANSLATION|SXF_TRANSFERPOINTERS)
		TNT1 A 0 A_SpawnItemEx("AstromanSatellite2",48,0,user_z,momx,momy,momz,user_rs+180,SXF_ABSOLUTEMOMENTUM|SXF_NOCHECKPOSITION|SXF_TRANSFERTRANSLATION|SXF_TRANSFERPOINTERS)
		TNT1 A 1 A_JumpIfInTargetInventory("AstroCrushBoss",1,"Homeback")
		goto SDeath
		
		StopH:
		TNT1 A 0 A_TakeFromTarget("SatellitesAreOut",999)
		stop
		
		Shoot:
		TNT1 A 1
		TNT1 A 0 A_SpawnItemEx("SatelliteShoot",48,0,0,25,0,0,user_rs)
		TNT1 A 0 A_SpawnItemEx("SatelliteShoot",48,0,0,25,0,0,user_rs+180)
		TNT1 A 0 A_PlaySoundEx("weapon/astroorbshot","Body")
		TNT1 A 0 A_SpawnItemEx("AstromanSatellite2",48,0,user_z,momx,momy,momz,user_rs,SXF_ABSOLUTEMOMENTUM|SXF_NOCHECKPOSITION|SXF_TRANSFERTRANSLATION|SXF_TRANSFERPOINTERS)
		TNT1 A 0 A_SpawnItemEx("AstromanSatellite2",48,0,user_z,momx,momy,momz,user_rs+180,SXF_ABSOLUTEMOMENTUM|SXF_NOCHECKPOSITION|SXF_TRANSFERTRANSLATION|SXF_TRANSFERPOINTERS)
		TNT1 A 0 A_SetUserVar("user_rs",user_rs+360/16)
		TNT1 A 0 A_TakeFromTarget("SatelliteCharge",1)
		TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("core_targetexists",0) == 0, "SDeath")
		TNT1 A 0 A_JumpIfInTargetInventory("SatelliteCharge",1,"Shoot")
		TNT1 A 1 A_JumpIfInTargetInventory("AstroCrushBoss",1,"Homeback")
		goto SDeath
		
		Rotate:
		TNT1 A 0 A_SetUserVar("user_rs",user_rs+360/16)
		TNT1 A 0 A_SpawnItemEx("AstromanSatellite2",48,0,user_z,momx,momy,momz,user_rs,SXF_ABSOLUTEMOMENTUM|SXF_NOCHECKPOSITION|SXF_TRANSFERTRANSLATION|SXF_TRANSFERPOINTERS)
		TNT1 A 0 A_SpawnItemEx("AstromanSatellite2",48,0,user_z,momx,momy,momz,user_rs+180,SXF_ABSOLUTEMOMENTUM|SXF_NOCHECKPOSITION|SXF_TRANSFERTRANSLATION|SXF_TRANSFERPOINTERS)
		TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("core_targetexists",0) == 0, "SDeath")
		TNT1 A 1 A_JumpIfInTargetInventory("AstroCrushBoss",1,"Spawn")
		goto SDeath
	}
}

actor AstroFlightAmmo : Ammo
{
	inventory.amount 1
	inventory.maxamount 120
	+INVENTORY.IGNORESKILL
}

actor AstromanSatellite
{
	+MISSILE
	+THRUSPECIES
	species "AstroOrbType"
	+SHOOTABLE
	+SKYEXPLODE
	-DONTBLAST
	+HITTRACER
	+CANTSEEK
	+FORCEXYBILLBOARD
	+GHOST
	+DONTREFLECT
	DamageType "AstroSatellite"
	Obituary "$OB_ASTROMAN1"
	Scale 2.5
	Health 1000
	mass 99999
	painchance 256
	Radius 10
	Height 10
	Damage (4)
	States
	{
		Spawn:
		TNT1 AA 0 A_GiveInventory("ProjectileCode")
		TNT1 A 0 A_JumpIfInTargetInventory("Base56Ammo",56,"SpawnX")
		ASTB A 1 A_JumpIf(ACS_NamedExecuteWithResult("core_targetexists",0) == 0, "SDeath")
		stop
		SpawnX:
		ASTB A 1 A_JumpIf(ACS_NamedExecuteWithResult("core_targetexists",0) == 0, "SDeath")
		TNT1 A 0 A_SpawnItemEx("SatelliteFX",0,0,12,momx,momy,0,0,SXF_ABSOLUTEMOMENTUM|SXF_NOCHECKPOSITION|SXF_TRANSFERTRANSLATION|SXF_TRANSFERPOINTERS)
		stop
		XDeath:
		TNT1 A 0 A_GiveInventory("AstroSatellitePP",1,AAPTR_Tracer)
		stop
		Pain:
		TNT1 A 0 A_PlaySoundEx("weapon/cshot","Body")
		goto Spawn
		SDeath:
		TNT1 A 0
		stop
	}
}

actor AstromanSatellite2 : AstromanSatellite
{
	Damage (16)
	Radius 16
	Height 16
}

actor AstroSatellitePP : PowerProtection
{
	DamageFactor "AstroSatellite", 0
	powerup.duration 5
}

actor SatelliteShoot
{
	PROJECTILE
	+HITTRACER
	+THRUSPECIES
	species "AstroOrbType"
	DamageType "AstromanSatShoot"
	Obituary "$OB_ASTROMAN2"
	Speed 1
	Radius 8
	Height 8
	Damage (8)
	Scale 2.5
	States
	{
		Spawn:
		TNT1 AA 0 A_GiveInventory("ProjectileCode")
		ASTS CDE 2 A_SpawnItemEx("SatelliteShootFX",0,0,0,0,0,0,0,1)
		goto Spawn+2
		XDeath:
		TNT1 A 0 A_GiveInventory("AstromanSatShootP",1,AAPTR_Target)
		stop
	}
}

actor SatelliteShootFX : BasicClientside
{
	Scale 2.5
	States
	{
		Spawn:
		TNT1 AA 0 A_GiveInventory("ProjectileFXCode")
		ASTS GF 4
		stop
	}
}

actor SatelliteFX : BasicClientside 
{
	Scale 2.5
	States
	{
		Spawn:
		TNT1 AA 0 A_GiveInventory("ProjectileFXCode")
		ASCB BB 1
		stop
	}
}

actor AstromanSatShootP : PowerProtection
{
	damagefactor "AstromanSatShoot", 0.5
	powerup.duration 10
}

// $ JC
actor AstroJumper
{
	Obituary "$OB_ASTROMAN3"
	+CANTSEEK
	+SHOOTABLE
	+NOBLOOD
	-DONTBLAST
	+NOTARGETSWITCH
	+NOEXTREMEDEATH
	+NOEXPLODEFLOOR
	-EXTREMEDEATH
	damagetype "Shururun"
	scale 2.5
	height 32
	Radius 32
	damagefactor "Shururun", 0.0
	damagefactor "Astroman", 0.0
	DamageFactor "AstroSatellite", 0 //$VC
	DamageFactor "AstromanSatShoot",0
	damagefactor "AstroDrop", 0.0
	damagefactor "AstroPitBeam", 0.0
	mass 0x7fffffff
	speed 0
	Health 25
	painchance 256
	reactiontime 32
	States
	{
		Spawn:
		TNT1 AA 0 A_GiveInventory("ProjectileCode")
		SHUR A 0 A_GiveToTarget("AstroNotAnotherEnemy",1)
		SHUR A 0 A_SpawnItemEx("AstroJumperHole")
		SHUR A 0 ThrustThingZ(0, 70, 0 ,0)
		SHUR AABB 2 A_Explode(4,64,0)
		loopit:
		SHUR A 0 A_Countdown
		SHUR A 0 A_SpawnItemEx("AstroJumperHole")
		SHUR A 0 A_Explode(4,48,0)
		SHUR A 0 A_JumpIfInTargetInventory("AstroNotAnotherEnemy",1,"Death")
		SHUR A 1 A_JumpIf(z-floorz <=32, "Stall")
		SHUR A 0 A_JumpIfInTargetInventory("AstroNotAnotherEnemy",1,"Death")
		SHUR A 0 A_Explode(4,48,0)
		SHUR A 0 A_JumpIfInTargetInventory("AstroNotAnotherEnemy",1,"Death")
		SHUR A 1 A_JumpIf(z-floorz <=32, "Stall")
		SHUR B 0 A_Explode(4,48,0)
		SHUR A 0 A_JumpIfInTargetInventory("AstroNotAnotherEnemy",1,"Death")
		SHUR B 1 A_JumpIf(z-floorz <=32, "Stall")
		SHUR B 0 A_Explode(4,48,0)
		SHUR A 0 A_JumpIfInTargetInventory("AstroNotAnotherEnemy",1,"Death")
		SHUR B 1 A_JumpIf(z-floorz <=32, "Stall")
		loop
		Stall:
		TNT1 A 0 A_ChangeFlag("SHOOTABLE",0)
		TNT1 AAAAA 1 A_JumpIfInTargetInventory("AstroNotAnotherEnemy",1,"Death")
		TNT1 A 0 A_ChangeFlag("SHOOTABLE",1)
		Goto Spawn
		Pain:
		TNT1 A 0 A_PlaySound("classes/clonepain")
		SHUR A 0 A_SpawnItemEx("PainFX")
		Goto loopit
		Death:
		TNT1 A 0 A_SpawnItemEx("MMFXDeath",0,0,0,0,0,0,0,1)
		TNT1 A 2
		stop
	}
}

actor AstroSpawner
{
	Translation "62:62=112:112", "56:56=108:108", "4:4=96:96"
	Obituary "$OB_ASTROMAN4"
	PROJECTILE
	+THRUACTORS
	-DONTBLAST
	Damage (0)
	speed 0
	height 1
	radius 1
	scale 3.0
	States
	{
		Spawn:
		TNT1 AA 0 A_GiveInventory("ProjectileCode")
		ASHO A 0 ThrustThingZ(0,120,1,0)
		TNT1 A 1 A_SpawnItemEx("AstroLaserDamager")
		goto Spawn+2
		Death:
		TNT1 A 0 A_SpawnItemEx("AstroJumper")
		TNT1 A 2 A_PlaySoundEx("misc/astroplatformraise","Body")
		stop
	}
}

actor AstroLaserDamager : AstroSpawner
{
	damage (0)//(3)
	damagetype "AstroPitBeam"
	height 1//128
	radius 1//48
	States
	{
		Spawn:
		TNT1 AA 0 A_GiveInventory("ProjectileCode")
		ASTH B 0 A_PlaySoundEx("weapon/coilexplode","Auto")
		TNT1 A 1 A_Explode(5,128,0)
		TNT1 A 0 A_SpawnItemEx("AstroLaserWave")
		stop
	}
}

actor AstroLaserWave
{
	-DONTBLAST
	damagetype "Shururun"
	Translation "192:192=105:105"
	PROJECTILE
	renderstyle translucent
	alpha 0.75
	Scale 2.0
	//+FLOORHUGGER
	+RIPPER
	+NOINTERACTION
	Speed 15
	Damage (0)
	Radius 1
	Height 1
	States
	{
		Spawn:
		TNT1 AA 0 A_GiveInventory("ProjectileCode")
		ASHO ABCDE 1 A_SpawnItemEx("SatelliteShootFX",random(0,32),0,0,0,0,0,random(0,359),1)
		ASHO A 0 A_SpawnItemEx("SatelliteShootFX",random(0,32),0,0,0,0,0,random(0,359),1)
		ASHO A 1 A_SetScale(scalex-0.18,2.0)
		ASHO B 0 A_SpawnItemEx("SatelliteShootFX",random(0,32),0,0,0,0,0,random(0,359),1)
		ASHO B 1 A_SetScale(scalex-0.18,2.0)
		ASHO C 0 A_SpawnItemEx("SatelliteShootFX",random(0,32),0,0,0,0,0,random(0,359),1)
		ASHO C 1 A_SetScale(scalex-0.18,2.0)
		ASHO D 0 A_SpawnItemEx("SatelliteShootFX",random(0,32),0,0,0,0,0,random(0,359),1)
		ASHO D 1 A_SetScale(scalex-0.18,2.0)
		ASHO E 0 A_SpawnItemEx("SatelliteShootFX",random(0,32),0,0,0,0,0,random(0,359),1)
		ASHO E 1 A_SetScale(scalex-0.18,2.0)
		ASHO A 1 A_SetScale(scalex-0.18,2.0)
		ASHO B 0 A_SpawnItemEx("SatelliteShootFX",random(0,32),0,0,0,0,0,random(0,359),1)
		ASHO B 1 A_SetScale(scalex-0.18,2.0)
		ASHO C 0 A_SpawnItemEx("SatelliteShootFX",random(0,32),0,0,0,0,0,random(0,359),1)
		ASHO C 1 A_SetScale(scalex-0.18,2.0)
		ASHO D 0 A_SpawnItemEx("SatelliteShootFX",random(0,32),0,0,0,0,0,random(0,359),1)
		ASHO D 1 A_SetScale(scalex-0.18,2.0)
		ASHO E 0 A_SpawnItemEx("SatelliteShootFX",random(0,32),0,0,0,0,0,random(0,359),1)
		ASHO E 1 A_SetScale(scalex-0.18,2.0)
		stop
	}
}

actor AstroJumperHole
{
	PROJECTILE
	height 1
	radius 1
	+FLOORHUGGER
	Damage (0)
	+RIPPER
	Translation "215:215=8:8"
	scale 2.6
	States
	{
		Spawn:
		TNT1 AA 0 A_GiveInventory("ProjectileCode")
		TNT1 A 2
		ASHO X 20
		stop
	}
}


actor AstroCopyLaser
{
	Translation "192:192=96:96", "198:198=113:113", "0:8=105:105", "247:247=106:106"
	PROJECTILE
	RenderStyle "Translucent"
	Alpha 0.75
	scale 2.5
	+THRUGHOST
	+RIPPER
	+NOCLIP
	-DONTBLAST
	health 9999
	Radius 32
	Height 32
	Damage (0)
	States
	{
		Spawn:
		TNT1 AA 0 A_GiveInventory("ProjectileCode")
		ASHO F 2
		TNT1 A 2
		ASHO F 2
		TNT1 A 2
		ASHO F 2
		ASHO G 32
		TNT1 A 2
		ASHO G 2
		TNT1 A 2
		ASHO G 2
		stop
	}
}

actor AstroCopyVision
{
	Translation "192:192=96:96", "198:198=113:113", "0:8=105:105", "247:247=106:106", "110:110=106:106", "201:201=96:96"
	PROJECTILE
	RenderStyle "Translucent"
	Alpha 0.75
	scale 2.5
	+THRUGHOST
	+RIPPER
	+NOCLIP
	+DONTBLAST
	+DONTREFLECT
	health 9999
	Radius 32
	Height 32
	Damage (0)
	reactiontime 30
	States
	{
		Spawn:
		TNT1 AA 0 A_GiveInventory("ProjectileCode")
		TNT1 A 0 A_PlaySoundEx("weapon/copyvision", "Auto")
		TNT1 A 0 A_GiveToTarget("CVisionCounter2",1)
		TNT1 A 0 A_TakeFromTarget("Base28Ammo",14)
		loopit:
		TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("core_targetexists",0) == 0, "Death")
		TNT1 A 0 A_CountDown
		ASTM G 0 A_JumpIfInTargetInventory("AstroCloneDespawn",1,"Death2")
		ASTM G 1 A_GiveToTarget("TargetMarker", 1)
		ASTM G 0 A_JumpIfInTargetInventory("AstroCloneDespawn",1,"Death2")
		ASTM G 1 A_GiveToTarget("TargetMarker", 1)
		ASTM G 0 ACS_ExecuteAlways(989, 0, ACS_ExecuteWithResult(257)+100, 32)
		ASTM G 0 A_CustomMissile("AstroCopyShot",32,0,0,2,-pitch)
		ASTM G 0 A_PlaySoundEx("weapon/astrocopyshot","Body")
		ASTM GG 1 A_JumpIfInTargetInventory("AstroCloneDespawn",1,"Death2")
		ASTM G 0 A_JumpIfInTargetInventory("CutterFlag",1,"Death")
		ASTM GGGGG 1 A_JumpIfInTargetInventory("AstroCloneDespawn",1,"Death2")
		loop
		Death:
		TNT1 A 1
		ASTM G 4
		TNT1 A 1
		ASTM G 2
		TNT1 A 1
		ASTM G 2
		ASTM A 0 A_GiveToTarget("Base28Ammo",14)
		ASTM G 0 A_TakeFromTarget("CVisionCounter2",1)
		stop
		Death2:
		ASTM A 0 A_GiveToTarget("Base28Ammo",14)
		ASTM G 0 A_TakeFromTarget("CVisionCounter2",1)
		COPY FGHIJK 1
		stop
	}
}

actor AstroCopyVisionHoming
{
	translation "110:110=229:229", "201:201=128:128"
	+NOCLIP
	PROJECTILE
	scale 2.5
	+SEEKERMISSILE
	-EXTREMEDEATH
	+SCREENSEEKER
	+DONTBLAST
	+DONTREFLECT
	speed 30
	Radius 32
	Height 32
	Damage (0)
	reactiontime 30
	States
	{
		Spawn:
		TNT1 AA 0 A_GiveInventory("ProjectileCode")
		TNT1 A 0 A_PlaySoundEx("weapon/copyvision", "Auto")
		TNT1 A 0 A_GiveToTarget("CVisionCounter2",1)
		TNT1 A 0 A_TakeFromTarget("Base28Ammo",14)
		TNT1 A 0 A_Stop
		loopit:
		TNT1 A 0 A_CountDown
		ASTM G 0 A_JumpIfInTargetInventory("AstroCloneDespawn",1,"Death2")
		ASTM G 1 A_SeekerMissile (89, 90, SMF_LOOK|SMF_CURSPEED, 256, 10)
		ASTM G 0 A_JumpIfInTargetInventory("AstroCloneDespawn",1,"Death2")
		ASTM G 1 A_SeekerMissile (89, 90, SMF_LOOK|SMF_CURSPEED, 256, 10)
		ASTM G 0 A_CustomMissile("AstroCopyShotHoming",32,0,0,2,-pitch)
		ASTM G 0 A_PlaySoundEx("weapon/astrocopyshot","Body")
		ASTM GG 1 A_JumpIfInTargetInventory("AstroCloneDespawn",1,"Death2")
		ASTM G 0 A_JumpIfInTargetInventory("CutterFlag",1,"Death")
		ASTM GGGGG 1 A_JumpIfInTargetInventory("AstroCloneDespawn",1,"Death2")
		loop
		Death:
		TNT1 A 1
		ASTM G 4
		TNT1 A 1
		ASTM G 2
		TNT1 A 1
		ASTM G 2
		ASTM A 0 A_GiveToTarget("Base28Ammo",14)
		ASTM G 0 A_TakeFromTarget("CVisionCounter2",1)
		stop
		Death2:
		ASTM A 0 A_GiveToTarget("Base28Ammo",14)
		ASTM G 0 A_TakeFromTarget("CVisionCounter2",1)
		COPY FGHIJK 1
		stop
	}
}

actor AstroCopyShot
{
	PROJECTILE
	+HITTRACER
	+THRUSPECIES
	species "AstroOrbType"
	DamageType "AstromanSatShoot"
	Obituary "$OB_ASTROMAN6"
	Speed 35
	Radius 12
	Height 12
	Damage (6)
	Scale 2.5
	States
	{
		Spawn:
		TNT1 AA 0 A_GiveInventory("ProjectileCode")
		ASTS HIJ 2 A_SpawnItemEx("SatelliteShootFX")
		loop
		Death:
		TNT1 A 0
		stop
	}
}

actor AstroCopyShotHoming : AstroCopyShot
{
	+SEEKERMISSILE
	+SCREENSEEKER
	-EXTREMEDEATH
	States
	{
		Spawn:
		TNT1 AA 0 A_GiveInventory("ProjectileCode")
		TNT1 AAAAA 0 A_SeekerMissile (89, 90, SMF_LOOK|SMF_CURSPEED, 256, 10)
		loopit:
		ASTS HIJ 2 A_SpawnItemEx("SatelliteShootFX")
		loop
	}
}

actor AstroUltSpawners
{
	+MISSILE
	+FLOORHUGGER
	var int user_r;
	States
	{
		Spawn:
		TNT1 A 0
		TNT1 A 1 A_SpawnItemEx("AstroCrushUltPrepare",user_r*4,0,0,0,0,0,user_r*12)
		TNT1 A 0 A_SetUserVar("user_r",user_r+2)
		TNT1 A 0 A_TakeFromTarget("WeaponCharge",1)
		TNT1 A 0 A_JumpIf(user_r < 360, "Spawn") //Give mediumlongultimateammo 5000
		stop
		Death:
		TNT1 A 0
		stop
	}
}

actor AstroCrushUltPrepare : AstroUltSpawners
{
	States
	{
		Spawn:
		TNT1 A 0
		TNT1 A 0 A_SpawnItemEx("AstroCrushUltIllusion",0,0,256)
		stop
	}
}

actor AstroCrushUltIllusion : AstroCopyVision
{
	ReactionTime 17
	States
	{
		Spawn:
		TNT1 AA 0 A_GiveInventory("ProjectileCode")
		ASTM A 2 A_GiveToTarget("PharaohUltCooldown")
		TNT1 A 2
		TNT1 A 0 A_Countdown
		loop
		Death:
		TNT1 A 0 A_SpawnItemEx("AstroUltCrush")
		stop
	}
}

actor AstroUltCrush
{
	Obituary "$OB_ASTROMAN5"
	PROJECTILE
	-NOGRAVITY
	-NOEXPLODEFLOOR
	-DONTBLAST
	Damagetype "AstroCrushUlt"
	damage (0)
	height 24
	radius 32
	Scale 2.5
	Reactiontime 10
	States
	{
		Spawn:
		TNT1 AA 0 A_GiveInventory("ProjectileCode")
		loopit:
		ASTD AAABBBCCC 1 A_CheckFloor("Death")
		loop
		Death:
		ASEX A 0 A_playSoundEx("weapon/astrocrush","Weapon")
		ASEX A 0 A_ChangeFlag(NOGRAVITY,1)
		ASEX A 0 A_Explode(60,128,0)
		ASEX ABCDEF 2 A_GiveToTarget("PharaohUltCooldown")
		stop
	}
}

actor AstroNotAnotherEnemy : Powerup
{
Powerup.Duration 6
}

actor AstroCooldownWatcher
{
Height 0
Radius 0
+NOINTERACTION
-SOLID
+NOGRAVITY
+MISSILE
reactiontime 140
States
{
Spawn:
TNT1 A 0
TNT1 A 0 A_GiveToTarget("AstroCancelCooldown",140)
Spawn2:
TNT1 A 1 A_TakeFromTarget("AstroCancelCooldown",1)
TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("core_targetexists")==0,"Death")
TNT1 A 0 A_Countdown
loop
Death:
TNT1 A 0 A_TakeFromTarget("AstroCancelCooldown",999)
stop
}
}

actor AstroCancelCooldown : Inventory
{
inventory.maxamount 140
}

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

actor AstroDropHitbox
{
species "DustManType"
+THRUGHOST
Obituary "$OB_ASTROMAN7"
PROJECTILE
+NOEXPLODEFLOOR
Radius 40
Height 40
scale 2.5
speed 0
damage (13)
Damagetype "AstroDrop"
States
{
Spawn:
TNT1 A 2
stop
Death:
TNT1 A 0
stop
XDeath:
TNT1 A 0 A_GiveToTarget("AstroBounceFlag",1)
stop
}
}

actor AstroDropProtect : PowerProtection
{
	damagefactor "AstroDrop", 0.0
	powerup.duration 10
}

actor AstroFlightAmmoHandler : CustomInventory
{
States
{
Pickup:
TNT1 A 0 A_JumpIfInventory("BaseCustomFlag1",1,"Nope")
TNT1 A 0 A_CheckFloor("Pickup2")
stop
Pickup2:
TNT1 A 0 A_GiveInventory("AstroFlightAmmo",1)
stop
Nope:
TNT1 A 0
stop
}
}

actor AstroLandHitbox : BasicExplosion
{
Obituary "$OB_ASTROMAN7"
damagetype "Shururun"
States
{
Spawn:
TNT1 AA 0 A_GiveInventory("ProjectileCode",1)
TNT1 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 0 A_SpawnItemEx("SatelliteShootFX",random(24,32),0,8,random(6,10),0,random(0,2),random(0,359),1)
TNT1 A 1 A_Explode(20,128,0,0,32)
stop
}
}