// ------------------------------------------------------------
//   Rocket Launcher
// ------------------------------------------------------------

ACTOR RocquetteLauncher : HDWeapon
{
	weapon.selectionorder 205
	+WEAPON.EXPLOSIVE
	weapon.ammotype2 RocketAmmo
	weapon.ammotype RocketMag
	States
	{
	Select:
		MISG A 0 A_JumpIfInventory ("RocketMag", 1, 2)
		MISG A 0 A_TakeInventory ("Reloading", 999)
		MISG A 1 A_Raise
		loop
	Deselect:
		MISG A 0 A_TakeInventory ("Reloading", 999)
		MISG A 1 A_Lower
		loop

	Ready:
		MISG A 0 A_JumpIfInventory ("RocketMag", 1, "Ready1")
		goto Ready2
	Ready1:
		MISG A 1 A_WeaponReady(16)
		goto Ready3
	Ready2:
		MISG B 1 A_WeaponReady(16)
		goto Ready3
	Ready3:
		MISG A 0 A_TakeInventory("IsInterrupting",999)
		goto Ready

	Interrupt:
		MISG B 0 A_GiveInventory("IsInterrupting",1)
		MISG B 0 A_TakeInventory("Reloading",999)
		MISG A 0 A_Refire
		goto Ready
	Interrupted:
		MISG A 1
		MISG A 0 A_Refire
		goto Ready
	Fire:
		TNT1 A 0 A_JumpIfInventory ("Reloading", 1, "Interrupt")
		TNT1 A 0 A_JumpIfInventory("IsInterrupting",1,"Interrupted")
		goto Shoot
	Hold:
		TNT1 A 0 A_JumpIfInventory ("Reloading", 1, "Interrupt")
		TNT1 A 0 A_JumpIfInventory("IsInterrupting",1,"Interrupted")
		goto Shoot
	Shoot:
		MISG B 8 A_JumpIfInventory ("RocketMag", 1, "ReallyShoot")
		MISG B 4 offset (0,36)
		MISG B 0 A_Refire
		goto Ready
		MISG A 3
	ReallyShoot:
		MISG A 2 A_FireCustomMissile ("Rocquette", 0, 0, 0, 0, 1)
		MISG A 0 A_TakeInventory ("RocketMag", 1)
		MISG B 4 A_GunFlash
		MISG B 2 ACS_ExecuteAlways (553, 0, 26, 12, 0)
		goto AllShootEnd
	AltFire:
		TNT1 A 0 A_JumpIfInventory ("Reloading", 1, "Interrupt")
		TNT1 A 0 A_JumpIfInventory("IsInterrupting",1,"Interrupted")
		goto AltShoot
	AltHold:
		TNT1 A 0 A_JumpIfInventory ("Reloading", 1, "Interrupt")
		TNT1 A 0 A_JumpIfInventory("IsInterrupting",1,"Interrupted")
		goto AltShoot
	AltShoot:
		MISG B 6 A_JumpIfInventory ("RocketMag", 1, 2)
		MISG B 0 A_Refire
		goto Ready
		MISG A 3
		MISG A 0 A_TakeInventory("RocketMag",1)
		MISG A 0 A_FireCustomMissile ("DelayedRocquette", 0, 0, 0, 0, 0)
		MISG A 0 A_PlayWeaponSound ("weapons/grenadeshot")
		MISG A 2 A_ZoomFactor(0.99,ZOOM_INSTANT|ZOOM_NOSCALETURNING)
		MISG A 2 A_ZoomFactor(1.0,ZOOM_INSTANT|ZOOM_NOSCALETURNING)
		MISG B 2 ACS_ExecuteAlways (553, 0, random(38,42), random(20,22), 0)
		goto AllShootEnd
	AllShootEnd:
		MISG B 6
		MISG B 0 A_Refire
		goto Ready
	Flash:
		MISF A 0 A_Recoil (3)
		MISF A 1 BRIGHT A_Light1
		MISF B 2 BRIGHT A_Light2
		MISF C 2 BRIGHT A_Light1
		MISF D 2 BRIGHT A_Light0
		MISF C 0 A_Recoil (-2)
		TNT1 A 0 A_AlertMonsters
		Stop
	Reload:
		MISG A 0 A_JumpIfInventory ("RocketMag", 0, "Ready")

		MISG B 0 A_JumpIfInventory ("RocketMag", 1, 2)
		MISG B 4
		MISG B 0 A_JumpIfInventory("RocketAmmo", 1, 2)
		MISG B 0 A_TakeInventory ("Reloading", 999)
		goto Ready

		MISG B 0 A_GiveInventory ("Reloading", 1)
		MISG B 1 offset(0,34)
		MISG B 1 offset(0,36)
		MISG B 1 offset(0,38)
		MISG B 4 offset(0,40) A_PlayWeaponSound ("weapons/rifleclick2")
		MISG B 10 offset(0,38) A_PlayWeaponSound ("weapons/grenopen")
		Goto Reload2
	Reload2:
		MISG B 0 A_JumpIfInventory ("RocketAmmo", 1, 1)
		goto Reload3
		MISG B 0 A_JumpIfInventory ("RocketMag", 0, "Reload3")

		MISG B 9 offset(0,38) A_PlayWeaponSound ("weapons/pocket")
		TNT1 A 0 A_JumpIfHealthLower(60,2)
		TNT1 A 0 A_Jump(256,2)
		MISG B 3
		TNT1 A 0 A_JumpIfHealthLower(40,2)
		TNT1 A 0 A_Jump(256,2)
		MISG B 4
		MISG B 2 offset(0,40) A_PlayWeaponSound ("weapons/rockreload")
		MISG B 3 offset(0,38) ACS_ExecuteAlways (554, 0, 3, 1, 0)

		MISG BB 1 offset(0,34) A_WeaponReady
		loop
	Reload3:
		MISG B 0 A_TakeInventory ("Reloading", 999)
		MISG B 5 offset(0,36) A_PlayWeaponSound ("weapons/grenopen")
		MISG B 0 A_PlayWeaponSound ("weapons/rifleclick2")
		MISG B 1 offset(0,38)
		MISG B 1 offset(0,36)
		MISG B 1 offset(0,34)
		goto Ready
	Spawn:
		TNT1 A 0
		TNT1 A 0 A_SpawnItemEx ("RocketPickup", 0,0,0,velx,vely,velz,0,32,0)
		stop
		LAUN A -1
		stop
	}
}
actor RocketMag : Ammo
{
	+inventory.ignoreskill
	+inventory.undroppable
	inventory.maxamount 6
	ammo.backpackmaxamount 6
	ammo.backpackamount 0
}

ACTOR Rocquette : FastProjectile
{
	PROJECTILE
	+ROCKETTRAIL
	-NOTELEPORT
	+forcexybillboard
	Obituary "%o rode %k's rocket."
	Decal "Scorch"
	seesound "weapons/rockignite"
	damagetype "SmallArms1"
	Speed 60
	Damage 6
	Radius 2
	Height 2
	Scale 0.76
	States
	{
	Spawn:
		ROCQ AB 2
		TNT1 A 0 A_JumpIf ((velx*velx+vely*vely+velz*velz)>400,2)
		TNT1 A 0 A_SpawnItemEx ("Rocquette", 0,0,0, (velx*1.4),(vely*1.4),(velz*1.4), 0,8)
		stop
		TNT1 A 0 A_SpawnItemEx ("RocquetteStage2", 0,0,0, (velx*1.4),(vely*1.4),(velz*1.4), 0,8)
		stop
	Death:
		TNT1 A 0 bright A_NoGravity
		TNT1 AAAAAAAAAAAA 0 A_SpawnItemEx ("HugeWallChunk", 0, 0, 0, random(-6,6),random(-6,6),random(6,18),random(0,360),160)
		TNT1 A 0 bright A_Explode (random(120,180), random(140,200))
	Death1:
		TNT1 A 2 A_SpawnItemEx ("HDExplosion", 0,0,0, 0,0,2, 0,32)
		TNT1 AAAAAAAAAAAAAAAAAAAAAAAAAAAAA 0 A_SpawnItemEx ("BigWallChunk", 0, 0, 0, random(-4,4),random(-4,4),random(4,18),random(0,360),160)
	Death2:
		TNT1 AAA 0 A_SpawnItemEx ("HDSmoke", random(-6,6), random(-6,6), random(-3,12), 0,0,0, 0,160)
		TNT1 A 0 A_SetTranslucent (1, 1)
		TNT1 A 0 A_AlertMonsters
		TNT1 A 2 A_SpawnItemEx ("Frags", 0,0,0, 0,0,0, 0,32)
		TNT1 A 0 A_SpawnItemEx ("DistantRocket", 0,0,0, 0,0,0, 0,32)
		TNT1 A 21 A_Quake(2,21,0,200,none)
		Stop
	}
}
actor RocquetteStage2 : Rocquette
{
	Damage 8
	damagetype "SmallArms2"
	States
	{
	Spawn:
		ROCQ AB 2
		TNT1 A 0 A_JumpIf ((velx*velx+vely*vely+velz*velz)>1200,2)
		TNT1 A 0 A_SpawnItemEx ("RocquetteStage2", 0,0,0, (velx*1.4),(vely*1.4),(velz*1.4), 0,8)
		stop
		TNT1 A 0 A_SpawnItemEx ("RocquetteStage3", 0,0,0, (velx*1.4),(vely*1.4),(velz*1.4), 0,8)
		stop
	}
}
actor RocquetteStage3 : Rocquette
{
	Damage 14
	damagetype "SmallArms3"
	States
	{
	Spawn:
		ROCQ AB 2
		TNT1 A 0 A_JumpIf ((velx*velx+vely*vely+velz*velz)>2500,2)
		TNT1 A 0 A_SpawnItemEx ("RocquetteStage3", 0,0,0, (velx*1.4),(vely*1.4),(velz*1.4), 0,8)
		stop
		TNT1 A 0 A_SpawnItemEx ("RocquetteStage4", 0,0,0, (velx*1.4),(vely*1.4),(velz*1.4), 0,8)
		stop
	}
}
actor RocquetteStage4 : Rocquette
{
	Damage 21
	damagetype "SmallArms3"
	States
	{
	Spawn:
		ROCQ AB 2
		TNT1 A 0 A_JumpIf ((velx*velx+vely*vely+velz*velz)>9000,2)
		TNT1 A 0 A_SpawnItemEx ("RocquetteStage4", 0,0,0, (velx*1.2),(vely*1.2),(velz*1.2), 0,8)
		stop
		TNT1 A 0 A_Gravity
		TNT1 A 0 A_SetGravity (0.05)
		loop
	}
}
ACTOR GrenadeRocquette
{
	PROJECTILE
	-noteleport
	+grenadetrail
	-nogravity
	+forcexybillboard
	bouncesound "misc/fragknock"
	obituary "%o was fragged by %k."
	damagetype "SmallArms0"
	Decal "Scorch"
	Speed 50
	gravity 0.62
	Damage 3
	Radius 2
	Height 2
	Scale 0.76
	States
	{
	Spawn:
		ROCQ ABA 1
		ROCQ B 2 A_ChangeFlag ("grenadetrail", 0)
		goto See
	See:
		ROCQ AB 2
		loop
	Death:
	Explode:
		TNT1 A 0 bright A_NoGravity
		TNT1 AAAAAAAAAAAA 0 A_SpawnItemEx ("HugeWallChunk", 0, 0, 0, random(-7,7),random(-7,7),random(4,18),random(0,360),160)
		TNT1 A 2 bright A_Explode (random(140,180),  random(160,200))
		goto Death1
	Death1:
		TNT1 AA 0 A_SpawnItemEx ("HDExplosion", random(-1,1),random(-1,1),2, 0,0,0, 0,32)
		TNT1 A 2 A_SpawnItemEx ("HDExplosion", 0,0,0, 0,0,2, 0,32)
		TNT1 AAAAAAAAAAAAAAAAAAAAAAAAAAAAA 0 A_SpawnItemEx ("BigWallChunk", 0, 0, 0, random(-4,4),random(-4,4),random(4,18),random(0,360),160)
	Death2:
		TNT1 AAA 0 A_SpawnItemEx ("HDSmoke", random(-6,6), random(-6,6), random(-3,12), 0,0,0, 0,160)
		TNT1 A 0 A_SetTranslucent (1, 1)
		TNT1 A 0 A_AlertMonsters
		TNT1 A 2 A_SpawnItemEx ("Frags", 0,0,0, 0,0,0, 0,32)
		TNT1 A 0 A_SpawnItemEx ("DistantRocket", 0,0,0, 0,0,0, 0,32)
		TNT1 A 21 A_Quake(2,21,0,200,none)
		Stop
	}
}
ACTOR DelayedRocquette : GrenadeRocquette
{
	-doombounce
	-bounceonactors
	deathsound "misc/fragknock"
	decal ""
	States
	{
	Spawn:
		ROCQ A 0
		ROCQ A 0 A_Pain
		ROCQ ABAB 1
		ROCQ B 0 A_SpawnItemEx("GrenadeRocquette",0,0,0,velx,vely,velz,0,40,0)
		stop
	See:
		ROCQ AB 2
		loop
	Death:
		TNT1 A 0 A_SpawnItemEx("DudRocquette",0,0,0,random(-10,10),random(-10,10),random(-10,10),0,32,0)
		stop
	}
}
ACTOR DudRocquette : GrenadeRocquette
{
	bouncetype "doom"
	decal ""
	+bounceonactors
	-noblockmap
	-grenadetrail
	-floorclip
	pushfactor 3.4
	bouncefactor 0.3
	gravity 1
	deathsound "misc/fragknock"
	bouncesound "misc/fragknock"
	wallbouncesound "misc/fragknock"
	decal ""
	damage 0
	states
	{
	spawn:
		ROCQ AB 2
		loop
	death:
		TNT1 A 0 A_ChangeFlag ("missile",0)
		TNT1 A 0 A_ChangeFlag ("pushable",1)
		TNT1 A 0 A_ChangeFlag ("solid",1)
	dead:
		ROCQ A 500 A_Jump (32, "clean")
		ROCQ A 500 A_Jump (8, "Explode")
		loop
	clean:
		ROCQ A 500
		stop
	}
}
actor Frags
{
	height 0
	radius 0
	decal "BulletScratch"
	obituary "%o was fragged."
	+nointeraction
	states
	{
	spawn:
	death:
		TNT1 A 0
		TNT1 A 1 ACS_ExecuteAlways (558,0,1)
		TNT1 A 0 A_JumpIfInventory ("PlayingDeathmatch", 1, 2)
		TNT1 A 5 A_CustomBulletAttack (180, 94, 30, random(1, 12), "FragPuff")
		stop
		TNT1 A 0 A_SpawnItemEx ("FragsDM",0,0,0, 0,0,0, 0,32,0)
		stop
	}
}
actor FragsDM
{
	+missile
	+nointeraction
	height 0
	radius 0
	obituary "%o was fragged by %k."
	damagetype "SmallArms0"
	states
	{
	spawn:
	death:
		TNT1 A 1
		TNT1 A 0 A_Explode (40, 200)
		stop
	}
}


actor RocketPickup : HDWeaponPickup replaces RocketLauncher
{
	scale 0.6
	inventory.pickupmessage "You got the rocket launcher!"
	inventory.pickupsound "misc/w_pkup"
	states
	{
	spawn:
		LAUN A -1
		stop
	Pickup:
		TNT1 A 0 A_JumpIfInventory ("CanPickUpItems", 1, 1)
		fail
		LAUN A 0 A_JumpIfInventory ("RocquetteLauncher", 1, 2)
		LAUN A 0 A_Jump (256, 4)
		LAUN A 0 A_JumpIfInventory ("RocketAmmo", 0, 2)
		LAUN A 0 A_Jump (256, 2)
		LAUN A 0
		fail
		LAUN A 0 A_Jump(48, 3)
		LAUN A 0 A_JumpIfInventory ("RocketPickupRounds", 6, 2)
		LAUN A 0 A_GiveInventory ("RocketPickupRounds", 1)
		loop
		LAUN A 0 A_JumpIfInventory ("RocquetteLauncher", 1, 2)
		LAUN A 0 A_GiveInventory ("RocquetteLauncher", 1)
		goto Pickup2
	Pickup1:
		LAUN A 0 A_GiveInventory ("RocketAmmo", 1)
		LAUN A 0 A_TakeInventory ("RocketPickupRounds", 1)
		LAUN A 0 A_JumpIfInventory ("RocketPickupRounds", 1, 1)
		stop
		LAUN A 0
		loop
	Pickup2:
		LAUN A 0 A_GiveInventory ("RocketMag", 1)
		LAUN A 0 A_TakeInventory ("RocketPickupRounds", 1)
		LAUN A 0 A_JumpIfInventory ("RocketPickupRounds", 1, 1)
		stop
		LAUN A 0
		loop
	}
}
actor RocketPickupRounds : Ammo
{
	+inventory.undroppable
	inventory.maxamount 6
	ammo.backpackmaxamount 6
	ammo.backpackamount 0
}



