actor AstroCrushBoss : BaseMM8BDMWep_CBM
{
Tag "$TAGC_8B2"
dropitem "CopyVisionWepCDropped"
Obituary "$OB_ASTROCRUSH"
Inventory.Pickupmessage "AAAAAAASTRO CRUSH"
weapon.ammotype "CopyAmmoC"
weapon.ammotype2 "AstroAmmoC"
//inventory.icon "ASTCLONE"
States
{
Spawn:
C_08 B 1
loop

Ready:
	8_AS A 0 ACS_ExecuteAlways(998,0,DYE_ASTROMAN)
	8_AS A 0 A_GunFlash
	8_AS A 0 //A_GiveInventory("CopyAmmoC",2)
	8_AS A 0 A_GiveInventory("AstroAmmoC",1)
	8_AS A 0 A_JumpIfInventory("CopyAmmoC",42,"Ready2")
	8_AS A 4 A_WeaponReady(WRF_NOSECONDARY|WRF_ALLOWRELOAD)
Goto Ready+2

Ready2:
	8_AS A 4 A_WeaponReady(WRF_ALLOWRELOAD)
Goto Ready+2

Deselect:
TNT1 AAAAAAAAAAAAAAAAAAAAAA 0 A_Lower
8_AS A 1 A_Lower
Loop

Select:
TNT1 AAAAAAAAAAAAAAAAAAAAAA 0 A_Raise
8_AS A 1 A_Raise
Loop

Fire:
	8_AS A 0 A_PlaySoundEx("weapon/astroshot","Weapon")
	8_AS B 0 A_GiveInventory("AstroAmmoC",1)
	8_AS B 0 //A_GiveInventory("CopyAmmoC",2)
	8_AS B 0 A_GiveInventory("AstroMain_CI",1)
	8_AS A 1 Offset(0,46)A_JumpIfInventory("PowerRage_ST",1,1)
	8_AS D 1
	8_AS H 1 A_JumpIfInventory("PowerRage_ST",1,1)
	8_AS E 1
	8_AS B 0 //A_GiveInventory("CopyAmmoC",2)
	//8_AS B 2// A_GiveInventory("TargetMarkerX",1)
	8_AS H 2
	8_AS B 0 A_GiveInventory("AstroAmmoC",1)
	8_AS F 2 A_JumpIfInventory("PowerRage_ST",1,2)
	8_AS B 0 //A_GiveInventory("CopyAmmoC",2)
	8_AS H 2
	8_AS G 2 A_JumpIfInventory("PowerRage_ST",1,1)
	8_AS B 0 //A_GiveInventory("CopyAmmoC",2)
	8_AS A 1 A_WeaponReady(14)
	//8_AS CC 4
	8_AS A 0
goto Ready+2

Altfire:
	8_AS A 0 A_JumpIfInventory("AstroEndlagDelay",1,"NoAmmo")
	8_AS A 0 A_JumpIfInventory("CopyAmmoC",42,"Fire2")
	goto Ready+2
	Fire2:
	8_AS A 0 A_GiveInventory("AstroAltFlag",1)
	8_AS A 0 A_TakeInventory("CopyAmmoC",42)
	8_AS I 2 Offset(0,46) A_GiveInventory("AstroMain2_CI",1)
	TNT1 A 0 A_PlaySound("weapon/astroclonethrow")
	TNT1 A 0 A_ChangeVelocity(-Cos(pitch)*12, 0, sin(pitch)*12,1)
	8_AS J 2 //A_GiveInventory("CBM_TargetMarker",1)
	8_AS KLM 4
	8_AS A 0 A_TakeInventory("AstroAltFlag",999)
	8_AS A 0 A_GiveInventory("AstroEndlagDelay",1)
	8_AS B 4 A_WeaponReady
	8_AS A 4
goto Ready+2

NoAmmo:
8_AS A 4
Goto Ready+2

Flash:
	TNT1 A 0 A_JumpIfInventory("IsDead",1,"NoFlash")
	FUSH A 0 A_GiveInventory("CopyAmmoC_RC",1)
	TNT1 A 0 A_JumpIfInventory("FlightDisableFlag",1,"NoFlight")
	TNT1 A 0 A_JumpIfInventory("SelfStoppedTFFlag",1,"YesFlightX")//StayLocked
	TNT1 A 0 A_JumpIfInventory("AstroFlight",1,"Flight")
goto NoFlight
YesFlightX:
	TNT1 A 0 A_Stop
	goto YesFlight
	Flight:
	TNT1 A 0 A_JumpIf(z-floorz>=180, "NoFlight")
	TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(107,0)==1, "MaybeFlight")
	YesFlight:
	TNT1 A 1 SetPlayerProperty(0, 1, 3)
	TNT1 A 0 A_JumpIfInventory("AstroMan_StaminaFlag",500,"Flash")
	TNT1 A 0 A_JumpIf(z-floorz==0, "Recharge")
	goto Flash
	MaybeFlight:
	TNT1 A 0 A_TakeInventory("AstroMan_StaminaFlag",20)
	TNT1 A 0 A_JumpIfInventory("AstroMan_StaminaFlag",1,"YesFlight")
	goto NoFlight
	NoFlight:
	TNT1 A 1 SetPlayerProperty(0, 0, 3)
	TNT1 A 0 A_JumpIfInventory("AstroMan_StaminaFlag",500,"Flash")
	TNT1 A 0 A_JumpIf(z-floorz==0, "Recharge")
	Goto Flash
	Recharge:
	TNT1 A 0 A_GiveInventory("AstroMan_StaminaFlag",4)
Goto Flash

Reload:
8_AS B 0 A_JumpIfInventory("AstroAmmoC",56,"Meteors")
goto NoAmmo
Meteors:
8_AS B 0
8_AS B 0 ACS_NamedExecute("BULL_SetState",0,1)
8_AS B 0 A_TakeInventory("AstroAmmoC",56)
8_AS B 0 A_GiveInventory("SelfStoppedTF",1)
8_AS B 0 A_GiveInventory("AstroAltFlag",1)
//8_AS BCDEF 3
//8_AS B 0 A_PlaySoundEx("weapon/astroclonemeteor","Weapon")
8_AS H 1 Offset(0, 38)
8_AS C 1 Offset(0, 48)
//8_AS C 1 Offset(-1, 48)//3
8_AS C 1 Offset(1, 48)
//8_AS C 1 Offset(-2, 48)
8_AS C 1 Offset(2, 48)//3
//8_AS C 1 Offset(-3, 48)
8_AS C 1 Offset(3, 48)
//8_AS C 1 Offset(-4, 48)//3
8_AS C 1 Offset(4, 48)
8_AS N 1 A_WeaponReady(14)
8_AS P 1 //3
//8_AS Q 1
8_AS R 1
//8_AS S 1 //3
TNT1 A 0 A_GiveInventory("AstroAlt_CI",1)
//8_AS O 30
TNT1 A 30 Offset(0,120)
8_AS B 0 A_GiveInventory("SelfStoppedUnfreeze",1)
8_AS B 0 A_TakeInventory("AstroAltFlag",99)
//8_AS AA 3
8_AS A 2 Offset(0,90)
8_AS A 2 Offset(0,60)
8_AS A 16 A_WeaponReady(14)
Goto Ready+2

}
}

actor CopyAmmoC : Ammo
{
inventory.amount 0
inventory.maxamount 84
+INVENTORY.IGNORESKILL
}

actor AstroAmmoC : Ammo
{
inventory.amount 1
inventory.maxamount 56
+INVENTORY.IGNORESKILL
}

actor AltfireAmmoDelay : Powerup
{
powerup.duration 4
}

actor AstroEndlagDelay : Powerup
{
powerup.duration 15
}

actor AstroMan_StaminaFlag : Ammo
{
inventory.amount 1
inventory.maxamount 500
+INVENTORY.IGNORESKILL
+INVENTORY.UNDROPPABLE
}

actor AstroFlight : OnceC{}
actor AstroAltFlag : OnceC{}

actor AstroFlightItem : CustomInventory
{
inventory.amount 1
inventory.maxamount 1
inventory.pickupmessage "Oh, how did you find me? I feel so embarrassed!"
Tag "$TAGC_FLOATTOGGLE"
inventory.icon "AstIcon"
scale 2.0
+INVBAR
states
{
Spawn:
ASTI X 1
loop
Use:
TNT1 A 0 A_PlaySoundEx("item/ItemUseMM9","SoundSlot6")
TNT1 A 0 A_JumpIfInventory("AstroFlight",1,"Take")
TNT1 A 0 A_GiveInventory("AstroFlight",1)
fail
Take:
TNT1 A 0 A_TakeInventory("AstroFlight",999)
fail
}
}

actor CopyAmmoC_RC : CustomInventory
{
States
{
Pickup:
TNT1 A 0 A_JumpIfInventory("AstroEndlagDelay",1,"No")
TNT1 A 0 A_JumpIfInventory("AltfireAmmoDelay",1,"No")
TNT1 A 0 A_JumpIfInventory("AstroAltFlag",1,"No")
TNT1 A 0 A_JumpIfInventory("PowerRage_ST",1,"Pickup2")
TNT1 A 0 A_GiveInventory("AltfireAmmoDelay",1)
TNT1 A 0 A_GiveInventory("CopyAmmoC",2)
stop
Pickup2:
TNT1 A 0 A_GiveInventory("AltfireAmmoDelay",1)
TNT1 A 0 A_GiveInventory("CopyAmmoC",4)
stop
No:
TNT1 A 0
stop
}
}

actor CopyVision_Astro
{
translation "192:192=229:229", "198:198=128:128", "247:247=128:128"
PROJECTILE
var int user_C;
var int user_S;
renderstyle translucent
painsound "misc/astroplatformappear"
damagetype "AstroM_Vision"
scale 2.5
alpha 0.85
+DONTBLAST
+RIPPER
+NOGRAVITY
+NOEXPLODEFLOOR
+SLIDESONWALLS
+STEPMISSILE
Radius 16
Height 48
//Radius 1
//Height 1
speed 40
+THRUGHOST
+THRUACTORS
+DONTREFLECT
damage(1)

-NOBLOCKMAP
-SHOOTABLE
-DONTRIP
+INVULNERABLE
mass 0x7ffffffff
painchance 256
Species "AstroM_CopyBlocker"
damagefactor "AstroM_Shot", 0.0
//reactiontime 12
States
{
Spawn:
ASTM G 0 
ASTM G 0
TNT1 A 1 //A_PlaySoundEx("weapon/copyvision", "weapon")
COPZ SRQPO 2 A_ScaleVelocity(.65)
COPZ N 0 A_ChangeFlag("THRUACTORS",0)
COPZ N 0 A_ChangeFlag("Shootable",1)
ASTM G 0 ACS_ExecuteAlways(259,0,1)
COPZ N 0 A_SetUserVar("user_C",cos(-pitch)*4)
TNT1 A 0 A_PlaySound("misc/astroplatformappear")
goto Shoot
Shooting:
ASTM G 0 A_JumpIfInTargetInventory("PowerRage_ST",1,4)
COPZ N 1 
ASTM G 1 
COPZ N 1 
ASTM G 1 
Shoot:
COPZ N 1 
COPZ N 1 
ASTM G 1 
ASTM G 1 
ASTM G 0 A_PlaySoundEx("weapon/astroclonefire","Weapon")
ASTM G 0 A_SpawnItemEx("CopyShotClone",user_C+sin(-pitch)*(0),0,32+cos(-pitch)*(4+0),cos(-pitch)*45,0,sin(-pitch)*45,0,1)
ASTM G 0 A_JumpIfInventory("CutterFlag",9,"Kill")
ASTM G 0 A_GiveInventory("CutterFlag",1)
ASTM G 0 A_JumpIf(ACS_ExecuteWithResult(C_CHECK_TARGET_OOC)==0,"Kill")
goto Shooting

Death:
Kill:
COPZ N 0 A_ChangeFlag("Shootable",0)
COPZ N 0 A_ChangeFlag("Nointeraction",1)
TNT1 A 0 A_PlaySound("misc/astroplatformappear")
COPZ OPQRS 2 //A_Stop
Stop
}
}

actor CopyVision_Astro2 : CopyVision_Astro
{
reactiontime 1
States
{
Spawn:
ASTM G 1
TNT1 A 1
ASTM G 1
TNT1 A 1
ASTM G 1
TNT1 A 1
goto Shoot
}
}

actor CopyVision_AstroB : CopyVision_Astro   { translation "192:192=205:205", "198:198=74:74", "0:0=74:74"}
actor CopyVision_Astro2B : CopyVision_Astro2 { translation "192:192=205:205", "198:198=74:74", "0:0=74:74"}
actor CopyVision_AstroR : CopyVision_Astro   { translation "192:192=171:171", "198:198=41:41", "0:0=41:41"}
actor CopyVision_Astro2R : CopyVision_Astro2 { translation "192:192=171:171", "198:198=41:41", "0:0=41:41"}
actor CopyVision_AstroO : CopyVision_Astro   { translation "192:192=104:104", "198:198=128:128", "0:0=128:128"}
actor CopyVision_Astro2O : CopyVision_Astro2 { translation "192:192=104:104", "198:198=128:128", "0:0=128:128"}
actor CopyVision_AstroP : CopyVision_Astro   { translation "192:192=229:229", "198:198=232:232", "0:0=232:232"}
actor CopyVision_Astro2P : CopyVision_Astro2 { translation "192:192=229:229", "198:198=232:232", "0:0=232:232"}

actor AstroM_CopyVisionShield
{
Height 56
Radius 24
-SOLID
+MISSILE
+DONTSPLASH
+DONTBLAST
+DONTDRAIN
+DONTREFLECT
+DONTRIP
+NOBLOOD
+NOCLIP
+NORADIUSDMG
+GHOST
+SHOOTABLE
+NOTIMEFREEZE
+INVULNERABLE
+NOGRAVITY
+NOTARGETSWITCH
+NOTAUTOAIMED
+NODAMAGE
Species "AstroM_CopyBlocker"
damagefactor "AstroM_Shot", 0.0
States
{
Spawn:
TNT1 AA 0
TNT1 A 1
stop
Pain:
TNT1 A 0 A_PlaySound("misc/astroplatformappear")//A_Pain
TNT1 A 0 //A_SpawnItemEx("ProtoShieldDeathFX")
stop
}
}

actor CopyShot_Astro
{
Translation "198:198=130:130","192:192=108:108"
PROJECTILE
Obituary "$OB_ASTROSHOT"
Speed 30
Damage (15)
DamageType "AstroM_Shot"
+THRUSPECIES
Species "AstroM_CopyBlocker"
radius 5
height 5
scale 2.5
States
{
Spawn:
TNT1 A 0
TNT1 A 0 ACS_NamedExecuteAlways("BULL_Tidifier", 0)
SpawnLOOP:
ASTS HIJ 2 A_SpawnItemEx("CopyShot_AstroFX",0,0,0,0,0,0,0,1)
loop
Death:
TNT1 A 0 
stop
}
}


actor CopyShot_AstroB : CopyShot_Astro{translation "192:192=205:205", "198:198=74:74"}
actor CopyShot_AstroR : CopyShot_Astro{translation "192:192=171:171", "198:198=41:41"}
actor CopyShot_AstroO : CopyShot_Astro{translation "192:192=104:104", "198:198=128:128"}
actor CopyShot_AstroP : CopyShot_Astro{translation "192:192=229:229", "198:198=232:232"}

actor CopyShot_AstroFX : BasicClientSide
{
+FORCEXYBILLBOARD
+BRIGHT
States
{
Spawn:
TNT1 A 2
AHUG JKLM 2
stop
}
}

actor CopyShotClone : CopyShot_Astro
{
Damage (10)
obituary "$OB_COPYVISION"
+THRUSPECIES
Species "AstroM_CopyBlocker"
States
{
Spawn:
TNT1 A 1
TNT1 A 0 //A_ChangeFlag("ThruActors",false)
TNT1 A 0 ACS_NamedExecuteAlways("BULL_Tidifier", 0)
SpawnLOOP:
Spawn2:
ASTS KLM 2 A_SpawnItemEx("CopyShot_AstroFX2",0,0,0,0,0,0,0,1)
loop
}
}

actor CopyShot_AstroFX2 : CopyShot_AstroFX
{
renderstyle add
alpha 0.85
}

actor AstroCrushSpawnerB : BasicHelper
{
translation "198:198=128:128"
ReactionTime 30
States
{
Spawn:
TNT1 A 20
TNT1 A 0 A_SpawnItemEx("AstroCrushB",75,0,320,0,0,-30,0,1)
TNT1 A 0 A_SpawnItemEx("AstroCrushB",75,0,320,0,0,-30,180,1)
TNT1 A 0 A_SpawnItemEx("AstroCrushB",75,0,320,0,0,-30,-90,1)
TNT1 A 0 A_SpawnItemEx("AstroCrushB",75,0,320,0,0,-30,90,1)

TNT1 A 5 
TNT1 A 0 A_SpawnItemEx("AstroCrushB",150,0,320,0,0,-28,-135,1)
TNT1 A 0 A_SpawnItemEx("AstroCrushB",150,0,320,0,0,-28,135,1)
TNT1 A 0 A_SpawnItemEx("AstroCrushB",150,0,320,0,0,-28,45,1)
TNT1 A 0 A_SpawnItemEx("AstroCrushB",150,0,320,0,0,-28,-45,1)

TNT1 A 5 
TNT1 A 0 A_SpawnItemEx("AstroCrushB",225,0,320,0,0,-24,0,1)
TNT1 A 0 A_SpawnItemEx("AstroCrushB",225,0,320,0,0,-24,180,1)
TNT1 A 0 A_SpawnItemEx("AstroCrushB",225,0,320,0,0,-24,-90,1)
TNT1 A 0 A_SpawnItemEx("AstroCrushB",225,0,320,0,0,-24,90,1)

TNT1 A 5 
TNT1 A 0 A_SpawnItemEx("AstroCrushB",300,0,320,0,0,-22,-135,1)
TNT1 A 0 A_SpawnItemEx("AstroCrushB",300,0,320,0,0,-22,135,1)
TNT1 A 0 A_SpawnItemEx("AstroCrushB",300,0,320,0,0,-22,45,1)
TNT1 A 0 A_SpawnItemEx("AstroCrushB",300,0,320,0,0,-22,-45,1)

TNT1 A 5 
TNT1 A 0 A_SpawnItemEx("AstroCrushB",375,0,320,0,0,-20,0,1)
TNT1 A 0 A_SpawnItemEx("AstroCrushB",375,0,320,0,0,-20,180,1)
TNT1 A 0 A_SpawnItemEx("AstroCrushB",375,0,320,0,0,-20,-90,1)
TNT1 A 0 A_SpawnItemEx("AstroCrushB",375,0,320,0,0,-20,90,1)
stop
}
}

actor AstroCrushSpawnerBB : AstroCrushSpawnerB{translation "198:198=74:74"}
actor AstroCrushSpawnerBR : AstroCrushSpawnerB{translation "198:198=41:41"}
actor AstroCrushSpawnerBO : AstroCrushSpawnerB{translation "198:198=128:128"}
actor AstroCrushSpawnerBP : AstroCrushSpawnerB{translation "198:198=232:232"}

actor AstroCrushB : AstroCrush
{
+DONTREFLECT
height 12
radius 24
Damage (0)
Scale 2
Damagetype "AstroM_Meteor"
Reactiontime 30
States
{
Spawn:
COPZ H 0
COPZ H 0 A_ChangeVelocity(0,0,momz,CVF_RELATIVE|CVF_REPLACE)
AHUG NNNOOOPPP 1 A_JumpIf(ceilingz-z>12, "Spawn2")
COPZ H 0 A_JumpIf(momz==0,"Death")
COPZ H 0 A_CountDown
Goto Spawn+2
Spawn2:
COPZ H 0 A_ChangeFlag("RIPPER", 0)
COPZ H 0 A_ChangeFlag("NOINTERACTION",0)
AHUG NOP 3 A_ChangeVelocity(0,0,momz,CVF_RELATIVE|CVF_REPLACE) 
COPZ H 0 A_JumpIf(momz==0,"Death")
COPZ H 0 A_CountDown
Goto Spawn2+2
Death:
TA_C A 0 A_playSoundEx("weapon/astrocrush","Weapon")
//needs A_SetScale
TA_C A 0 A_Stop
TA_C A 0 A_ChangeFlag(NOGRAVITY,1)
TA_C A 0 A_Explode(30,160,0)//24 128//
TNT1 A 0 A_SpawnItemEx("AstroM_CrusherFX",0,0,0,0,0,0,0,1+32)
TNT1 A 2
stop
}
}
actor AstroM_CrusherFX : BasicClientSide
{
+FORCEXYBILLBOARD
+BRIGHT
Scale 3.0
States
{
Spawn:
AHUG Q 0
AHUG QRSTUV 2
stop
}
}


actor AstroMain_CI : TeamColor_CI
{
states
{
FireX:
TNT1 A 0 A_FireCustomMissile("CopyShot_Astro",0,0,0,0)
goto Done
FireB:
TNT1 A 0 A_FireCustomMissile("CopyShot_AstroB",0,0,0,0)
goto Done
FireR:
TNT1 A 0 A_FireCustomMissile("CopyShot_AstroR",0,0,0,0)
goto Done
FireO:
TNT1 A 0 A_FireCustomMissile("CopyShot_AstroO",0,0,0,0)
goto Done
FireP:
TNT1 A 0 A_FireCustomMissile("CopyShot_AstroP",0,0,0,0)
goto Done
}
}

actor AstroMain2_CI : TeamColor_CI
{
states
{
FireX:
TNT1 A 0 A_FireCustomMissile("CopyVision_Astro",0,1,0,-30)
goto Done
FireB:
TNT1 A 0 A_FireCustomMissile("CopyVision_AstroB",0,1,0,-30)
goto Done
FireR:
TNT1 A 0 A_FireCustomMissile("CopyVision_AstroR",0,1,0,-30)
goto Done
FireO:
TNT1 A 0 A_FireCustomMissile("CopyVision_AstroO",0,1,0,-30)
goto Done
FireP:
TNT1 A 0 A_FireCustomMissile("CopyVision_AstroP",0,1,0,-30)
goto Done
}
}

actor AstroAlt_CI : TeamColor_CI
{
states
{
FireX:
TNT1 A 0 A_FireCustomMissile("AstroCrushSpawnerB",0,1,0,0)
goto Done
FireB:
TNT1 A 0 A_FireCustomMissile("AstroCrushSpawnerBB",0,1,0,0)
goto Done
FireR:
TNT1 A 0 A_FireCustomMissile("AstroCrushSpawnerBR",0,1,0,0)
goto Done
FireO:
TNT1 A 0 A_FireCustomMissile("AstroCrushSpawnerBO",0,1,0,0)
goto Done
FireP:
TNT1 A 0 A_FireCustomMissile("AstroCrushSpawnerBP",0,1,0,0)
goto Done
}
}