/*

==CYGNUS ROCKET LAUNCHER==
idea supplied by Pillowblaster
sprites are a frakensprite edit of several rise of the triad launchers
and the hellstorm cannon from Realm667

Having successfully aided in Desparil's extremely messy demise, Cygnus
had grown tired of the peaceful life that had followed in his victory,
seeking out a means of entertainment and revenue by designing weapons
with his special flair for destruction.

The Cygnus Rocket Launcher is just one example after a night of binge drinking. 
Named after the dragon himself, this compact rocket launcher is capable of firing 
a barrage of mini missilesat an extreme rate, the oddest thing about this feature 
is the launcher somehow managesto fragment a single standard UAC missile into 8 
to supply the weapon's ammunition supplies.

More impressive is the secondary fire, launching a grenade spewing sphere of destruction, 
ideal for smaller rooms and an absolute hit at parties.
*/
actor CygnusRL : weapon replaces RocketLauncher
{
	Weapon.SelectionOrder 35
	Weapon.AmmoUse1 1
	weapon.ammouse2 0
	Weapon.AmmoGive1 8
	Weapon.AmmoGive2 10
	Weapon.KickBack 180
	+WEAPON.NOALERT
	+WEAPON.AMMO_OPTIONAL
	+WEAPON.ALT_AMMO_OPTIONAL
	Weapon.AmmoType1 "MiniRocketAmmo"
	weapon.ammotype2 "RocketAmmo"
	Inventory.PickupSound "Misc/W_PkUp"
	Inventory.PickupMessage "You got the Cygnus Rocket Launcher!"
	Obituary "%o was bombarded by %k."
	States
	{
	spawn:
		CGPU A -1
		stop
	select:
		TNT1 A 0
		TNT1 A 0 a_playsound ("cygnus/draw",0)
	draw:
		TNT1 A 0
		CGRL AAAA 0 a_raise
		CGRL A 1 a_raise
		loop
	deselect:
		TNT1 A 0
		TNT1 A 0 a_jumpifhealthlower (1, "deadlower")
		TNT1 A 0 a_playsound ("cygnus/holster",0)
	holster:
		TNT1 A 0
		TNT1 A 0 a_takeinventory ("secretaction", 99)
		CGRL A 1 a_lower
		CGRL AA 0 a_lower
		loop
	deadlower:
		TNT1 A 0
		TNT1 A 0
		TNT1 AAAAAAAAAAAAA 0 a_lower
		TNT1 A 1 a_lower
		wait
	Ready:
		CGRL A 1 a_weaponready
		wait
	fire:
		CGRL A 0 a_jumpifinventory ("MiniRocketAmmo", 1, "minirocketattack")
		CGRL A 0 a_jumpifinventory ("RocketAmmo", 1, "restock")
		CGRL A 1
		goto ready
	ammocheck:
		CGRL A 0 a_jumpifinventory ("minirocketammo", 1, "ready")
		CGRL A 0 a_jumpifinventory ("RocketAmmo", 1, "restock")
		CGRL A 1
		goto ready
	restock:
		CGRL A 0 a_giveinventory ("minirocketammo", 8)
		CGRL A 0 a_takeinventory ("RocketAmmo", 1)
		CGRL F 3 a_playsound ("cygnus/reload",0)
		CGRL G 8
		CGRL F 4
		CGRL G 3
		goto ready
	minirocketattack:
		CGRL B 1 bright a_playsound ("cygnus/fire",1)
		TNT1 A 0 a_alertmonsters
		TNT1 A 0 A_Quake(2, 6, 0, 5)
		CGRL B 1 bright a_firecustomMissile ("minirocket")
		CGRL C 1 bright
		CGRL D 1 bright
		CGRL E 1 bright
		CGRL E 1 offset (0,36)
		CGRL F 1 offset (0,45)
		CGRL F 1 offset (0,50) 
		CGRL F 1 offset (0,35) 
		CGRL G 1 a_refire
		goto ammocheck
	altfire:
		CGRL A 1 a_jumpifinventory ("rocketammo", 1, "biggrenadeshot")
		goto ready
	BigGrenadeShot:
		TNT1 A 0 a_playsound ("cygnus/open",0)
		CGTF ABC 2
		CGGL A 1
		TNT1 A 0 a_takeinventory ("rocketammo", 1)
		TNT1 A 0 a_playsound ("cygnus/grenadeshot",0)
		TNT1 A 0 a_alertmonsters
		CGGL B 2 bright
		CGGL C 1 bright A_FireCustomMissile("spraybomblet", Frandom(-8,8),0,0,0,0,Frandom(-6,6))
		CGGL AAAAAAAAAAAAA 0 A_FireCustomMissile("spraybomblet", Frandom(-6,6),0,0,0,0,Frandom(-6,6))
		CGGL DEF 2 
		CGGL F 2 
		TNT1 A 0 a_playsound ("cygnus/close",0)
		CGGL GHI 2
		CGGL A 3
		CGTF CBA 1
		goto ready
	}
}

actor minirocket
{
	Projectile
	Radius 5
	Height 5
	Speed 20
	Damage 18
	+thruspecies
	damagetype "minirocket"
	scale 0.80
	+randomize
	decal scorch
	species "player"
	SeeSound ""
	DeathSound "cygnus/rocketboom"
	States
	{
	Spawn:
		TNT1 A 0
		MNS2 A 8
		TNT1 A 0 a_playsound ("cygnus/rocketspeedup",0,1,0, 0.75)
		TNT1 A 0 a_spawnitemex ("missilering")
		TNT1 AAAAA 0 a_spawnitemex ("Missilefire",Frandom(-10,10),Frandom(-8,8),Frandom(-8,8),Frandom(-200,200)/20.0,Frandom(-60,60)/20.0,Frandom(-40,40)/20.0,0,160)
		goto speedup
	speedup:
		MNSS A 1 a_spawnitem ("missileblur")
		TNT1 A 0 A_SpawnItemEx("LavaLazerTrail",frandom(-2,2),frandom(-2,2),frandom(-2,2))
		TNT1 A 0 A_SpawnItemEx("LavaLazerSmoke",frandom(-4,4),frandom(-4,4),frandom(-4,4))
		TNT1 A 0 a_spawnitemex ("Missilefire",Frandom(-5,5),Frandom(-5,5),Frandom(-5,5),Frandom(-50,50)/20.0,Frandom(-50,50)/20.0,Frandom(-50,50)/20.0,0,160)
		MNSS A 0 a_scalevelocity (1.25)
		Loop
	Death:
		TNT1 A 0
		TNT1 A 0
		TNT1 A 0 radius_quake (3,8,0,20,0)
		TNT1 A 0 a_explode (35,100,1,0,50)
		TNT1 AAAAAA 0 a_spawnitemex ("Missilefire",Frandom(-20,20),Frandom(-18,18),Frandom(-18,18),Frandom(-200,200)/20.0,Frandom(-200,200)/20.0,Frandom(-200,200)/20.0,0,160)
		TNT1 A 0 A_SpawnItemEx("LavaLazerExplosion")
		TNT1 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 0 Bright A_SpawnItemEx("LavaLazerTrail",frandom(-21,21),frandom(-21,21),frandom(-21,21),frandom(-1,1),frandom(-1,1),frandom(0,1))
		TNT1 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 0 Bright A_SpawnItemEx("LavaLazerEmber2",frandom(-16,16),frandom(-16,16),frandom(-16,16),frandom(-1,1),frandom(-1,1),frandom(0,1))
		TNT1 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 0 Bright A_SpawnItemEx("LavaLazerSmoke2",frandom(-4,4),frandom(-4,4),frandom(-4,4),frandom(-1,1),frandom(-1,1),frandom(0,1))
		TNT1 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 0 Bright A_SpawnItemEx("LavaLazerSmoke",frandom(-4,4),frandom(-4,4),frandom(-4,4),0,0,frandom(1,2))
		TNT1 A 0 a_radiusthrust (200, 100, 80)
		stop
	Xdeath:
		TNT1 A 0
		TNT1 A 0 a_jumpifintargetinventory ("daibatana", 1, "givecharge")
		TNT1 A 0 radius_quake (3,8,0,20,0)
		TNT1 A 0 a_explode (35,100,1,0,50)
		TNT1 AAAAAA 0 a_spawnitemex ("Missilefire",Frandom(-20,20),Frandom(-18,18),Frandom(-18,18),Frandom(-200,200)/20.0,Frandom(-200,200)/20.0,Frandom(-200,200)/20.0,0,160)
		TNT1 A 0 A_SpawnItemEx("LavaLazerExplosion")
		TNT1 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 0 Bright A_SpawnItemEx("LavaLazerTrail",frandom(-21,21),frandom(-21,21),frandom(-21,21),frandom(-1,1),frandom(-1,1),frandom(0,1))
		TNT1 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 0 Bright A_SpawnItemEx("LavaLazerEmber2",frandom(-16,16),frandom(-16,16),frandom(-16,16),frandom(-1,1),frandom(-1,1),frandom(0,1))
		TNT1 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 0 Bright A_SpawnItemEx("LavaLazerSmoke2",frandom(-4,4),frandom(-4,4),frandom(-4,4),frandom(-1,1),frandom(-1,1),frandom(0,1))
		TNT1 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 0 Bright A_SpawnItemEx("LavaLazerSmoke",frandom(-4,4),frandom(-4,4),frandom(-4,4),0,0,frandom(1,2))
		TNT1 A 0 a_radiusthrust (200, 100, 80)
		stop
	givecharge:
		TNT1 A 0
		TNT1 A 0
		TNT1 A 0 a_jump (90, "nothing")
		TNT1 A 0 a_giveinventory ("batcharge", 5, AAPTR_TARGET)
		TNT1 A 0 radius_quake (3,8,0,20,0)
		TNT1 A 0 a_explode (35,100,1,0,50)
		TNT1 AAAAAA 0 a_spawnitemex ("Missilefire",Frandom(-20,20),Frandom(-18,18),Frandom(-18,18),Frandom(-200,200)/20.0,Frandom(-200,200)/20.0,Frandom(-200,200)/20.0,0,160)
		TNT1 A 0 A_SpawnItemEx("LavaLazerExplosion")
		TNT1 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 0 Bright A_SpawnItemEx("LavaLazerTrail",frandom(-21,21),frandom(-21,21),frandom(-21,21),frandom(-1,1),frandom(-1,1),frandom(0,1))
		TNT1 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 0 Bright A_SpawnItemEx("LavaLazerEmber2",frandom(-16,16),frandom(-16,16),frandom(-16,16),frandom(-1,1),frandom(-1,1),frandom(0,1))
		TNT1 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 0 Bright A_SpawnItemEx("LavaLazerSmoke2",frandom(-4,4),frandom(-4,4),frandom(-4,4),frandom(-1,1),frandom(-1,1),frandom(0,1))
		TNT1 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 0 Bright A_SpawnItemEx("LavaLazerSmoke",frandom(-4,4),frandom(-4,4),frandom(-4,4),0,0,frandom(1,2))
		TNT1 A 0 a_radiusthrust (200, 100, 80)
		stop
	nothing:
		TNT1 A 0
		TNT1 A 0 radius_quake (3,8,0,20,0)
		TNT1 A 0 a_explode (35,100,1,0,50)
		TNT1 AAAAAA 0 a_spawnitemex ("Missilefire",Frandom(-20,20),Frandom(-18,18),Frandom(-18,18),Frandom(-200,200)/20.0,Frandom(-200,200)/20.0,Frandom(-200,200)/20.0,0,160)
		TNT1 A 0 A_SpawnItemEx("LavaLazerExplosion")
		TNT1 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 0 Bright A_SpawnItemEx("LavaLazerTrail",frandom(-21,21),frandom(-21,21),frandom(-21,21),frandom(-1,1),frandom(-1,1),frandom(0,1))
		TNT1 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 0 Bright A_SpawnItemEx("LavaLazerEmber2",frandom(-16,16),frandom(-16,16),frandom(-16,16),frandom(-1,1),frandom(-1,1),frandom(0,1))
		TNT1 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 0 Bright A_SpawnItemEx("LavaLazerSmoke2",frandom(-4,4),frandom(-4,4),frandom(-4,4),frandom(-1,1),frandom(-1,1),frandom(0,1))
		TNT1 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 0 Bright A_SpawnItemEx("LavaLazerSmoke",frandom(-4,4),frandom(-4,4),frandom(-4,4),0,0,frandom(1,2))
		TNT1 A 0 a_radiusthrust (200, 100, 80)
		Stop

	}
}


ACTOR Missilefire
{
	radius 3
	height 6
	speed 10
	scale 0.45
	projectile
	-nogravity
	+nointeraction
	+FLOORCLIP
	+DONTSPLASH
	+thruactors
	+NOTELEPORT
	+clientsideonly
	States
	{
	spawn:	
		MFIR ABCDE 1 bright
		MFIR FGHI 1  Bright
		Stop
	}
}

Actor MissileBlur       
{
  Height 8
  Radius 1
  Damage 0
  Scale 0.6
  Speed 0.2
  RenderStyle Translucent
  Alpha 0.7
  +NoGravity
  +DropOff
  +NoTeleport
  +clientsideonly
  States
  {
  Spawn:
    MNSS A 1 bright A_FadeOut(0.06)
    Loop
  }
}


actor missilering
{
	+nointeraction
	+clientsideonly
	translation "128:223=%[0.00,0.00,0.00]:[2.00,2.00,2.00]"
	scale 0.80
	speed 55
	renderstyle add
	alpha 0.90
	states
	{
	spawn:
		TRNG GFEDCBA 2
		TNT1 A 0
		stop
	}
}


actor SprayBomblet
{
	+notimefreeze
	projectile
	-nogravity
	+floorclip
	+bloodlessimpact
	+thruspecies
	+doombounce
	-bounceonwalls
	species "player"
	DeathSound "cygnus/rocketboom"
	bouncefactor 1
	bouncecount 2
	gravity 0.90
	damage 12
	Radius 8
	height 8
	scale 1
	speed 45
	states
	{
	spawn:
		TNT1 A 0
		TNT1 A 0
		SGRN A 1 thrustthingz (0,10,0,1)
		goto fly
	fly:
		SGRN A 1
		loop
	death:
		TNT1 A 0
		TNT1 A 0 a_nogravity
		TNT1 A 0 a_explode (10,80,0,0,80)
		TNT1 A 0 a_jump (80, "boom2")
		TNT1 A 0 a_jump (80, "boom3")
		TNT1 A 0 a_jump (80, "boom4")
		TNT1 A 0 a_jump (80, "boom5")
		MISL B 4 Bright 
		MISL C 3 Bright
		MISL D 2 Bright
		Stop
	Boom2:
		MIS2 ABCDEFG 2 Bright 
		stop
	Boom3:
		MIS3 ABCDEFGH 2 Bright
		stop
	Boom4:
		MIS4 DEFG 4 bright
		stop
	Boom5:
		MIS5 ABCDEF 3 bright
		Stop	
	}
}
		



actor minirocketammo : ammo
{
  Inventory.PickupMessage "You shouldn't see this!"
  Inventory.Amount 8
  Inventory.MaxAmount 8
  Ammo.BackpackAmount 8
  Ammo.BackpackMaxAmount 8
  Inventory.Icon "CLIPA0"
  States
  {
  Spawn:
    CLIP A -1
    Stop
	}
}


//NICE VISUAL EFFECTS COURTESY OF SGT SHIVERS

ACTOR LavaLazerTrail
{
  +NOBLOCKMAP
  +NOGRAVITY
  +ALLOWPARTICLES
  +RANDOMIZE
  RenderStyle Add
  Alpha 0.5
  Scale 0.35
  +clientsideonly
  Mass 5
  States
  {
  Spawn:
    LVLZ A 2 Bright A_FadeOut(0.1)
    LVLZ A 2 Bright A_FadeOut(0.1)
    LVLZ B 2 Bright A_FadeOut(0.1)
    LVLZ C 2 Bright A_FadeOut(0.1)
    LVLZ D 2 Bright A_FadeOut(0.1)
  fade:
    LVLZ D 2 Bright A_FadeOut(0.1)
	loop
  }
}

ACTOR LavaLazerEmber1
{
  +NOBLOCKMAP
  +NOGRAVITY
  +ALLOWPARTICLES
  +RANDOMIZE
  RenderStyle Add
  Alpha 0.5
  Scale 0.1
  +clientsideonly
  Mass 5
  States
  {
  Spawn:
    LVLZ A 2 Bright A_FadeOut(0.04)
    LVLZ A 2 Bright A_FadeOut(0.1)
    LVLZ B 2 Bright A_FadeOut(0.1)
    LVLZ C 2 Bright A_FadeOut(0.1)
    LVLZ D 2 Bright A_FadeOut(0.1)
  fade:
    LVLZ D 2 Bright A_FadeOut(0.1)
	loop
    Loop
  }
}

ACTOR LavaLazerEmber2
{
  +NOBLOCKMAP
  +ALLOWPARTICLES
  +RANDOMIZE
  Gravity 0.2
  RenderStyle Add
  Alpha 0.5
  Scale 0.05
  Mass 5
  +clientsideonly
  States
  {
  Spawn:
    LVLZ A 35 Bright
    LVLZ AAAAAAAAAAAAAAAAA 2 Bright A_FadeOut(0.04)
    Stop
  }
}


ACTOR LavaLazerExplosion
{
  +NOBLOCKMAP
  +NOGRAVITY
  +ALLOWPARTICLES
  +RANDOMIZE
  RenderStyle Add
  Alpha 0.6
  Scale 0.50
  Mass 5
  +clientsideonly
  States
  {
  Spawn:
    LVEX A 1 Bright 
	LVEX B 1 Bright 
  Fade:
    LVEX D 1 Bright
    LVEX E 1 Bright A_FadeOut(0.2)
    LVEX F 1 Bright A_FadeOut(0.2)
    LVEX G 1 Bright A_FadeOut(0.2)
    LVEX H 1 Bright A_FadeOut(0.2)
    LVEX I 1 Bright A_FadeOut(0.2)
    LVEX J 1 Bright A_FadeOut(0.2)
    LVEX K 1 Bright A_FadeOut(0.2)
    LVEX L 1 Bright A_FadeOut(0.2)
    LVEX M 1 Bright A_FadeOut(0.2)
   Fade2:
	LVEX M 1 Bright A_FadeOut(0.2)
	loop
  }
}


actor LavaLazerSmoke
{
    Radius 1
    Height 1
	Scale 0.10
	Alpha 0.1
    Projectile
    +NOCLIP
	+clientsideonly
    States
    {
   Spawn:
      TNT1 A 3
      SMOK ABCDEFGHIJKLMNOPQ 3 A_FadeIn(0.02)
      Stop
    }
}

actor LavaLazerSmoke2
{
    Radius 1
    Height 1
	Scale 0.20
	Alpha 0.6
    Projectile
	+clientsideonly
    +NOCLIP
    States
    {
   Spawn:
      TNT1 A 2
      SMOK ABCDEFGHIJKLMNOPQ 2 A_FadeOut(0.1)
      Stop
    }
}

actor bombcountdown : inventory
{inventory.maxamount 8}
