// Meteor speed
const int DMETEO = 45;

actor DuoMeteorWepC : BaseMM8BDMWep_CBM
{
	tag "$TAGC_8I2"
	dropitem "DuoFistUpgrade2GiverDropped"
	Weapon.AmmoUse 1
	Weapon.AmmoGive 3
	Weapon.SlotNumber 1
	Obituary "$OB_DUOMETEOR"
	Inventory.Pickupmessage "You got the Duo Meteor!"
	weapon.ammotype2 "DuoMeteorAmmo"
	States
	{
		Spawn:
			C_08 I 1
			loop
		Ready:
			//BASB B 0 A_TakeInventory("CopywepRecycleFlag",99) never again
			TNT1 A 0 ACS_ExecuteAlways(998,0,DYE_DUOC)
			goto FireX
		Ready2:
			TNT1 A 1 A_WeaponReady
			wait
		Deselect:
			TNT1 AAAAAAAAAAAAAAAAAAAAAA 0 A_Lower
			TNT1 A 1 A_Lower
			Loop
		Select:
			TNT1 AAAAAAAAAAAAAAAAAAAAAA 0 A_Raise
			TNT1 A 1 A_Raise
			Loop
		Fire:
			TNT1 A 1
			goto Ready2

		FireX:
			TNT1 A 0 A_GiveInventory("DuoMeteor",1)
			TNT1 A 0 A_Stop
			TNT1 A 0 SetPlayerProperty(0,1,0)
			TNT1 A 0 A_PlaySoundEx("weapon/DuoMeteorCharge","Weapon")
			//TNT1 A 0 A_JumpIfInventory("DuoJusticeBought",1,"FireRise2")
			goto FireRise
		FireRise:
			TNT1 A 0 A_GiveInventory("DuoMeteorTimer",1)
			TNT1 A 0 A_JumpIfInventory("FlightDisableFlag",1,2)
			TNT1 A 0 A_ChangeFlag("NOGRAVITY",1)
			TNT1 A 1 ThrustThingZ(0,6,0,0)
			TNT1 A 0 A_JumpIfInventory("DuoMeteorTimer",10,"FireRise2")
			loop
		FireRise2:
			TNT1 A 0 A_GiveInventory("InvulnerableOn_Pickup",1)
		FireRise22:
			TNT1 A 0 A_GiveInventory("DuoMeteorTimer",1)
			TNT1 A 0 A_JumpIfInventory("FlightDisableFlag",1,2)
			TNT1 A 0 A_ChangeFlag("NOGRAVITY",1)
			TNT1 A 1 ThrustThingZ(0,6,0,0)
			TNT1 A 0 A_JumpIfInventory("DuoMeteorTimer",30,"BallStart")
			loop
		BallStart:
			TNT1 A 0 A_ChangeFlag("NOGRAVITY",0)
			TNT1 A 0 A_TakeInventory("DuoMeteorTimer",999)
			TNT1 A 0 A_GiveInventory("DuoMeteorGo",1)
			goto BallStart2
		BallStart2:
			TNT1 A 0 A_GiveInventory ("DuoMeteorTimer",1)
			TNT1 A 0 A_JumpIfInventory("FlightDisableFlag",1,2)
			TNT1 A 1 A_JumpIf(ACS_NamedExecuteWithResult("Get_Button_M") == 1, "DuoHasStopped")
			TNT1 A 0 A_JumpIfInventory("DuoMeteorTimer",4,"Ball")
			loop

		Ball:
			TNT1 A 0 A_PlaySoundEx("weapon/DuoMeteorLaunch","Weapon")
			TNT1 A 0 A_GiveInventory("InvulnerableOn_Pickup",1)
			TNT1 A 0 SetPlayerProperty(0,1,0)
			TNT1 A 0 A_TakeInventory("DuoMeteorTimer",999)
			//TNT1 A 0 A_GiveInventory("SelfTotallyFrozen",1)
			//TNT1 A 0 A_FireCustomMissile("DuoTheMeteor", 0, 0, 0, 0)
			TNT1 A 0 A_SpawnItemEx("DuoTheMeteor", 0,0,0,0.1*cos(pitch),0,0.1*sin(-pitch),0,1)
			goto Ball2
		Ball2:
			TNT1 A 0 A_SpawnItemEx("ODuoTheMeteorFX", 0, 0, 24, 0, 0, 0, 0, 1)
			TNT1 A 1 A_JumpIf(ACS_NamedExecuteWithResult("Get_Button_M") == 1, "DuoHasStopped")
			TNT1 A 0 A_SpawnItemEx("DuoTheMeteorBox", 0, 0, 0, velx, vely, velz,0,SXF_ABSOLUTEVELOCITY)
			TNT1 A 0 A_JumpIfInventory ("DuoMeteorEnd",1,"Collide")
			TNT1 A 0 A_TakeInventory("DuoMeteorAmmo",3)
			TNT1 A 0 A_JumpIfInventory("ProjectilePortDead", 1, "Fall")
			TNT1 A 0 A_JumpIfInventory("DuoMeteorAmmo",1,1)
			goto TimeOut
			
			TNT1 A 1 A_JumpIf(ACS_NamedExecuteWithResult("Get_Button_M") == 1, "DuoHasStopped")
			TNT1 A 0 A_SpawnItemEx("DuoTheMeteorBox", 0, 0, 0, velx, vely, velz,0,SXF_ABSOLUTEVELOCITY)
			TNT1 A 0 A_JumpIfInventory ("DuoMeteorEnd",1,"Collide")
			TNT1 A 0 A_TakeInventory("DuoMeteorAmmo",3)
			TNT1 A 0 A_JumpIfInventory("ProjectilePortDead", 1, "Fall")
			TNT1 A 0 A_JumpIfInventory("DuoMeteorAmmo",1,1)
			goto TimeOut

			
			TNT1 A 1 A_JumpIf(ACS_NamedExecuteWithResult("Get_Button_M") == 1, "DuoHasStopped")
			TNT1 A 0 A_SpawnItemEx("DuoTheMeteorBox", 0, 0, 0, velx, vely, velz,0,SXF_ABSOLUTEVELOCITY)
			TNT1 A 0 A_JumpIfInventory ("DuoMeteorEnd",1,"Collide")
			TNT1 A 0 A_TakeInventory("DuoMeteorAmmo",3)
			TNT1 A 0 A_JumpIfInventory("ProjectilePortDead", 1, "Fall")
			TNT1 A 0 A_JumpIfInventory("DuoMeteorAmmo",1,1)
			goto TimeOut
			
			TNT1 A 1 A_JumpIf(ACS_NamedExecuteWithResult("Get_Button_M") == 1, "DuoHasStopped")
			TNT1 A 0 A_SpawnItemEx("DuoTheMeteorBox", 0, 0, 0, velx, vely, velz,0,SXF_ABSOLUTEVELOCITY)
			TNT1 A 0 A_JumpIfInventory ("DuoMeteorEnd",1,"Collide")
			TNT1 A 0 A_TakeInventory("DuoMeteorAmmo",3)
			TNT1 A 0 A_JumpIfInventory("ProjectilePortDead", 1, "Fall")
			TNT1 A 0 A_JumpIfInventory("DuoMeteorAmmo",1,1)
			goto TimeOut
			
			TNT1 A 1 A_JumpIf(ACS_NamedExecuteWithResult("Get_Button_M") == 1, "DuoHasStopped")
			TNT1 A 0 A_SpawnItemEx("DuoTheMeteorBox", 0, 0, 0, velx, vely, velz,0,SXF_ABSOLUTEVELOCITY)
			TNT1 A 0 A_JumpIfInventory ("DuoMeteorEnd",1,"Collide")
			TNT1 A 0 A_TakeInventory("DuoMeteorAmmo",3)
			TNT1 A 0 A_JumpIfInventory("ProjectilePortDead", 1, "Fall")
			TNT1 A 0 A_JumpIfInventory("DuoMeteorAmmo",1,1)
			goto TimeOut
			
			TNT1 A 1 A_JumpIf(ACS_NamedExecuteWithResult("Get_Button_M") == 1, "DuoHasStopped")
			TNT1 A 0 A_SpawnItemEx("DuoTheMeteorBox", 0, 0, 0, velx, vely, velz,0,SXF_ABSOLUTEVELOCITY)
			TNT1 A 0 A_JumpIfInventory ("DuoMeteorEnd",1,"Collide")
			TNT1 A 0 A_TakeInventory("DuoMeteorAmmo",3)
			TNT1 A 0 A_JumpIfInventory("ProjectilePortDead", 1, "Fall")
			TNT1 A 0 A_JumpIfInventory("DuoMeteorAmmo",1,1)
			goto TimeOut
			
			TNT1 A 1 A_JumpIf(ACS_NamedExecuteWithResult("Get_Button_M") == 1, "DuoHasStopped")
			TNT1 A 0 A_SpawnItemEx("DuoTheMeteorBox", 0, 0, 0, velx, vely, velz,0,SXF_ABSOLUTEVELOCITY)
			TNT1 A 0 A_JumpIfInventory ("DuoMeteorEnd",1,"Collide")
			TNT1 A 0 A_TakeInventory("DuoMeteorAmmo",3)
			TNT1 A 0 A_JumpIfInventory("ProjectilePortDead", 1, "Fall")
			TNT1 A 0 A_JumpIfInventory("DuoMeteorAmmo",1,1)
			goto TimeOut
			TNT1 A 0
			loop
			
		Fire:
			TNT1 A 1
			TNT1 A 0 A_GiveInventory("InvulnerableOff_Pickup",1)
			TNT1 A 0 A_ChangeFlag("NOGRAVITY", 1)
			TNT1 A 0 A_GiveInventory("MeteorScriptTerminate")
			TNT1 A 0 A_ScaleVelocity(0.25)
			TNT1 A 0 A_Refire("Hold")
		Hold:
			TNT1 A 1 A_TakeInventory("DuoMeteorAmmo",3)
			TNT1 AAA 0 A_SpawnItemEx("DuoMeteorParticle",96*cos(frandom(0,360)),0,96*sin(frandom(0,360)),0,0,12,frandom(0,360),1)
			TNT1 A 0 A_TakeInventory("MeteorScriptTerminate")
			TNT1 A 0 A_Refire("Hold")
			TNT1 A 0 A_GiveInventory("InvulnerableOn_Pickup",1)
			goto Ball

		TimeOut:
			TNT1 A 0 A_GiveInventory("DuoMeteorEnd",1)
			TNT1 A 0 A_GiveInventory("DuoMeteorAmmo",70)
			goto Fall
		Collide:
			TNT1 A 0 A_PlaySoundEx("weapon/DuoMeteorImpact","Weapon")
			TNT1 A 0 A_PlaySoundEx("weapon/BlizzStrike","Voice")
			TNT1 B 0 A_Quake(5,9,0,48)
			TNT1 A 0 A_FireCustomMissile("DuoMeteorCollide",0,0,0,0)
			goto Fall
		
		AltFire:
		Fall:
			TNT1 A 0 A_ScaleVelocity(0.45)
			TNT1 A 0 A_GiveInventory("MeteorScriptTerminateX")
			TNT1 A 0 A_TakeInventory("DuoMeteorAmmo",9999)
			TNT1 A 0 A_GiveInventory("SelfTotallyUnfrozen",1)
			TNT1 A 0 SetPlayerProperty(0,0,0)
			TNT1 A 0 A_GiveInventory("InvulnerableOff_Pickup",1)
			TNT1 A 0 A_ChangeFlag("NOGRAVITY", 0)
			TNT1 A 0 A_GiveInventory("ProjectilePortDead", 99)
			TNT1 A 5
			TNT1 A 0 A_TakeInventory("ProjectilePortDead", 99)
			TNT1 A 5 A_GiveInventory("DuoMeteorFlagRemove_P",1)
			goto GoAway
		GoAway:
			TNT1 A 0 A_GiveInventory("MeteorSelectDuo",1)
			TNT1 A 1
			loop
			
		DuoHasStopped:
			TNT1 A 0 A_PlaySoundEx("weapon/DuoMeteorCancel","SoundSlot6")
			TNT1 A 0 A_Stop
			TNT1 A 0 A_GiveInventory("DuoMeteorEnd",1)
			//TNT1 A 0 ACS_NamedExecuteAlways("BULL_SetState",0,1)
		DuoHasStopped2:
			TNT1 A 0 //A_GiveInventory("DuoMeteorTimer",1)
			TNT1 A 0 A_ChangeFlag("NOGRAVITY",1)
			TNT1 A 0 A_Stop
			TNT1 A 1 ThrustThingZ(0,4,0,0)
			TNT1 A 0 //A_JumpIfInventory("DuoMeteorTimer",30,"Fall")
			goto Fall
	}
}

actor DuoGetReadyAmmo : Ammo
{
inventory.amount 1
inventory.maxamount 3
+INVENTORY.IGNORESKILL
}

actor MeteorSelectDuo : CustomInventory
{
States
{
Pickup:
TNT1 A 0
TNT1 A 0 A_TakeInventory("DuoMeteorWepC",1)
//TNT1 A 0 A_GiveInventory("CopywepShopWep",1)
stop
}
}

actor MeteorScriptTerminate : Powerup {powerup.duration 5}
actor MeteorScriptTerminateX : MeteorScriptTerminate {}

actor DuoMeteor : OnceC{}
actor DuoMeteorGo : OnceC{}
actor DuoMeteorEnd : OnceC{}
actor DuoMeteorTimer : Inventory
{
inventory.amount 1
inventory.maxamount 999
}

actor DuoMeteorItemDelay : Powerup
{
Powerup.Duration 10
}

actor DuoMeteorFlagRemove_P : CustomInventory
{
States
{
Pickup:
TNT1 A 0 A_TakeInventory("DuoMeteorGo",99)
TNT1 A 0 A_TakeInventory("DuoMeteorEnd",99)
TNT1 A 0 A_TakeInventory("DuoMeteor",99)
TNT1 A 0 A_TakeInventory("DuoMeteorTimer",999)
stop
}
}

actor DuoMeteorItem : CustomInventory
{
inventory.amount 1
inventory.maxamount 1
inventory.icon "DUOHAND"
inventory.pickupmessage "Support Item! Duo Meteor!"
Inventory.PickupSound "item/1up"
scale 2.0
+COUNTITEM
+INVBAR
states
{
Spawn:
DUOF A 1
loop
Use:
TNT1 A 0 A_JumpIfInventory("DuoMeteorBusy",1,"No")
TNT1 A 0 A_JumpIfInventory("DuoFistCleaserFlag",1,"No")
TNT1 A 0 A_JumpIfInventory("DuoMeteorAmmo",0,"Use2")
fail
Use2:
TNT1 A 0 A_TakeInventory("DuoMeteorAmmo",1)
TNT1 A 0 A_PlaySoundEx("item/refill","Voice")
TNT1 A 0 A_GiveInventory("DuoMeteorItemDelay",1)
TNT1 A 0 A_SpawnItemEx("DuoMeteorItemHelper")//A_GiveInventory("DuoMeteorActivate",1)
fail
Use3:
TNT1 A 0 A_GiveInventory("DuoMeteorTimer",45)
fail
No:
TNT1 A 0
fail
}
}

actor DuoMeteorItemHelper : BasicHelper
{
States
{
Spawn:
TNT1 A 0
TNT1 A 1 A_GiveToTarget("DuoMeteorWepC",1)
//TNT1 A 0 A_TakeFromTarget("CopywepShopWep",1)
TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(C_CHECK_TARGET_OOC)==0,"Death")
TNT1 A 1 A_GiveToTarget("DuoMeteorActivate",1)
stop
}
}

actor DuoMeteorActivate : CustomInventory
{
States
{
Pickup:
TNT1 A 0 A_GiveInventory("DuoMeteorWepC",1)
TNT1 A 0 A_SelectWeapon("DuoMeteorWepC")
stop
}
}


actor DuoMeteorMotionCheck : BasicHelper
{
States
{
Spawn:
TNT1 A 0
TNT1 A 2
TNT1 A 1 A_JumpIfCloser(40,"Stopped")
stop
Stopped:
TNT1 A 1 A_GiveToTarget("DuoMeteorTimer",999)
stop
}
}

actor DuoMeteorParticle : BasicClientside
{
	-CLIENTSIDEONLY
	+MISSILE
	+NOTARGETSWITCH
	+SEEKERMISSILE
	Speed 10
	Scale 3.0
	States
	{
		Spawn:
		TNT1 A 0
		TNT1 A 0 A_RearrangePointers(AAPTR_Target,AAPTR_Null,AAPTR_Target)
		TNT1 A 0 A_SetAngle(angle+180)
		TNT1 A 0 A_Jump(256,"S_1","S_2","S_3","S_4")
		S_1:
		O_00 CC 1
		goto End
		S_2:
		O_00 DD 1
		goto End
		S_3:
		O_00 EE 1
		goto End
		S_4:
		O_00 FF 1
		goto End
		End:
		O_00 "#" 0
		O_00 "#" 1 A_Fadeout
		loop
		TNT1 A 0
		stop
	}
}

actor DuoMeteorCollide : BasicExplosion
{
damagetype "Duo_Meteor"
Obituary "$OB_DUOMETEOR"
States
{
Spawn:
TNT1 A 0
TNT1 A 1 A_Explode(35,96,0,0,96)
stop
}
}

// New Meteor
actor DuoMeteorProtect : PowerProtection
{
Powerup.Duration 4
DamageFactor "DuoMeteor", 0.0
}

actor DuoTheMeteorBox
{
PROJECTILE
Damagetype "DuoMeteor"
Obituary "$OB_ODUOMETEOR"
+DONTSPLASH
+DONTBLAST
+NOEXPLODEFLOOR
+THRUGHOST
+DONTREFLECT
damage (0)
Radius 64//64
Height 54//54
scale 2.5
States
{
Spawn:
TNT1 A 1
stop
Crash:
XDeath:
TNT1 A 0 A_GiveToTarget("DuoMeteorEnd",1)
TNT1 A 1
stop
Death:
TNT1 A 1
Stop
}
}

actor DuoTheMeteor
{
BounceSound "weapon/DuoMeteorBounce"
PROJECTILE
damagetype "DuoRam"
Obituary "$OB_DUOMETEOR"
+DONTBLAST
+DONTREFLECT
+THRUGHOST
+DONTSPLASH
+THRUACTORS
+SKYEXPLODE
Bouncetype Classic
+BOUNCEONWALLS
+USEBOUNCESTATE
Bouncefactor 1.0
Wallbouncefactor 1.0
Radius 15
Height 54
damage (0)
speed 1
States
{
Spawn:
TNT1 A 0
TNT1 A 1 ACS_ExecuteAlways(815,0,200)//200
TNT1 A 0 A_JumpIfInTargetInventory("ImpairmentStack",1,2)
TNT1 A 0 A_ScaleVelocity(DMETEO * 10)
goto Spawn2
TNT1 A 0 A_ScaleVelocity(DMETEO * 10 * ACS_NamedExecuteWithResult("TargetImpairmentACS")/100)
goto Spawn22
Spawn2:
TNT1 AAAAA 1 A_JumpIfInTargetInventory("DuoMeteorEnd",1,"Death")
TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(C_CHECK_TARGET_OOC)==0,"Death")
loop
Spawn22:
TNT1 AAAAA 1 A_JumpIfInTargetInventory("DuoMeteorEnd",1,"Death")
TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(C_CHECK_TARGET_OOC)==0,"Death")
TNT1 A 0 A_ChangeVelocity(DMETEO * 10 * ACS_NamedExecuteWithResult("TargetImpairmentACS")/900,0,0,CVF_RELATIVE|CVF_REPLACE)
loop

Bounce:
TNT1 A 0 A_JumpIfInTargetInventory("ImpairmentStack",1,2)
TNT1 A 0 A_TakeFromTarget("DuoMeteorAmmo",25)
goto Spawn2
TNT1 A 0 A_TakeFromTarget("DuoMeteorAmmo",25)
goto Spawn22

Crash:
XDeath:
TNT1 A 0 A_GiveInventory("ProjectilePortDead",1)
TNT1 A 0 A_JumpIfInTargetInventory("DuoMeteorEnd",1,"DeathXL")
TNT1 A 0 A_GiveToTarget("DuoMeteorEnd",1)
goto DeathXL

Death:
TNT1 A 0
TNT1 A 0 A_GiveInventory("ProjectilePortDead",1)
TNT1 A 0 A_ChangeFlag("NOINTERACTION",1)
TNT1 A 0 A_JumpIfInTargetInventory("DuoMeteorEnd",1,"DeathXL")
TNT1 A 0 A_Stop
goto DeathXL
DeathXL:
TNT1 A 1 A_GiveToTarget("DuoMeteorEnd",1)
stop
}
}