//================================================================
// UPGRADES
//================================================================

ACTOR "M79 Grenade Launcher Incendiary" : Inventory
{
	Inventory.MaxAmount 1
}

ACTOR "M79 Grenade Launcher Shotgun" : Inventory
{
	Inventory.MaxAmount 1
}

ACTOR M79Mode : Inventory
{
	Inventory.MaxAmount 5
}

ACTOR M79ShotgunHUD : Inventory
{
	Inventory.MaxAmount 1
}

ACTOR M79IncendiaryHUD : Inventory
{
	Inventory.MaxAmount 1
}

//================================================================

ACTOR QExplosion
{
	+NOGRAVITY
	+NOBLOCKMAP
	-SOLID
	+NOCLIP
	+CLIENTSIDEONLY
	RenderStyle Add
	Scale 0.75
	+EXTREMEDEATH
	States
	{
	Spawn:
	EXP1 A 0 
	Goto ActuallyExplode
	ActuallyExplode:
	EXP1 A 0
	EXP1 A 0 A_PlayWeaponSound("grenade/boom")
    EXP1 A 0 A_PlaySoundEx("grenade/farboom","SoundSlot6")
	EXP1 AAAAAA 0 A_SpawnItemEx("QExplosionSmoke",random(-2,2),random(-2,2),random(-2,2),random(-5,5),random(-5,5),random(-5,5))
	EXP1 AAAA 0 A_SpawnItemEx("QExplosionSmokeBig",random(-2,2),random(-2,2),random(-2,2),random(-3,3),random(-3,3),random(-3,3))
	EXP1 ABCDEFGHIJ 1 bright A_FadeOut(0.08)
	Stop
	}
}

ACTOR QExplosionSmoke
{
	+NOGRAVITY
	+NOBLOCKMAP
	-SOLID
	+NOCLIP
	+CLIENTSIDEONLY
	RenderStyle Add
	Scale 0.35
	States
	{
	Spawn:
	SMKP KGD 1
	SMKP A 0 A_ScaleVelocity(0.8)
	SMKP ABC 2 A_FadeOut(0.15)
	SMKP A 0 A_ScaleVelocity(0.8)
	SMKP DEF 2 A_FadeOut(0.15)
	SMKP A 0 A_ScaleVelocity(0.8)
	SMKP GHI 2 A_FadeOut(0.15)
	SMKP A 0 A_ScaleVelocity(0.8)
	SMKP JK 2 A_FadeOut(0.15)
	Stop
	}
}

ACTOR QGrenadeSmoke
{
	+NOGRAVITY
	+NOBLOCKMAP
	-SOLID
	+NOCLIP
	+CLIENTSIDEONLY
	RenderStyle Add
	Scale 0.10
	States
	{
	Spawn:
	SMKP KGD 1
	SMKP ABCDEFGHIJK 1 A_FadeOut(0.08)
	Stop
	}
}

ACTOR QExplosionSmokeBig : QExplosionSmoke
{
	Scale 0.55
}

ACTOR M79Primary : Ammo
{
  Inventory.Amount 1
  Inventory.MaxAmount 1
  Inventory.Icon "ROCKA0"
  +INVENTORY.IGNORESKILL
}

ACTOR M79Secondary : Ammo
{
  Inventory.PickupMessage "You picked up some M79 grenades." // "Picked up a clip."
  Inventory.PickupSound "bullpup/magin"
  Inventory.Amount 1
  Inventory.MaxAmount 32
  Ammo.BackpackAmount 4
  Ammo.BackpackMaxAmount 32
  Inventory.Icon "ROCKA0"
  +INVENTORY.IGNORESKILL
}

ACTOR M79Secondary_Incendiary : M79Secondary
{
}

ACTOR M79Secondary_Shotgun : M79Secondary
{
}

ACTOR GrenadeArmed : Inventory
{
	Inventory.MaxAmount 1
}

ACTOR M79Grenade
{
	var int user_Armed;
	
    Radius 5
	Height 5
	Speed 25
	Mass 50
	Damage 30
	Scale 0.5
	RenderStyle Normal
    PROJECTILE
	-NOGRAVITY
	+RANDOMIZE
	+NOEXTREMEDEATH
	+FORCERADIUSDMG
	-ROCKETTRAIL
	+FORCEXYBILLBOARD
	+BLOODLESSIMPACT
	Gravity 0.2
	DamageType "ExplosiveDamage"
	Obituary "%o was swallowed a grenade from %k's M79."
	States
	{
		Spawn:
		    TNT1 A 0
			TNT1 A 0 A_SetUserVar("user_Armed", 0)
			GRND AAAAA 1 A_SpawnItemEx("QGrenadeSmoke",0,0,0)
			FRTH A 0 A_SetUserVar("user_Armed",1)
			Goto Looping
		Looping:
		  	GRND A 1 A_SpawnItemEx("QGrenadeSmoke",0,0,0)
			Loop
		Death:
			TNT1 A 0
			TNT1 A 0 A_JumpIf(user_Armed >= 1, 1)
			Goto Unsafe
			TNT1 A 0
			TNT1 A 1
			TNT1 AAA 0
			TNT1 A 0 A_AlertMonsters
			TNT1 A 0 Radius_Quake(2,12,0,8,0)
			TNT1 A 0 A_SpawnItemEx("UltraExplosionM79",0,0,0,0,0,0,0,SXF_TRANSFERPOINTERS)
			TNT1 AA 0 A_Explode(150,170)
			TNT1 AA 0 A_Explode(150,300)
			TNT1 AAAAAAAAAA 0 A_SpawnItemEx("ImpactSpark2", random(-32,32), random(-32,32), random(-32,32), random(-5,5), random(-5,5), random(-1,5), 0, 128, 0)
			TNT1 AAAAAAAAAA 0 A_SpawnItemEx("ImpactSpark2", random(-32,32), random(-32,32), random(-32,32), random(-5,5), random(-5,5), random(-1,5), 0, 128, 0)
			TNT1 A 20
			stop
	
		Unsafe:
			TNT1 A 1
			Stop
	}
}

ACTOR M79Grenade_Flame : M79Grenade
{
	damagetype "Fire"
	States
	{
	Death:
		TNT1 A 0
		TNT1 A 0 A_PlaySoundEx("flamenade/boom","Weapon")
		TNT1 A 0 A_AlertMonsters
		TNT1 A 0 Radius_Quake(1,12,0,8,0)
		TNT1 AA 0 A_Explode(15,170)
		TNT1 A 0 //A_SpawnItemEx("ExplosionMain2")
		
		// FORWARD
		TNT1 A 0 A_SpawnItemEx("BaseOutFlame",0,0,0,10,0,0)
		// BACK
		TNT1 A 0 A_SpawnItemEx("BaseOutFlame",0,0,0,-10,0,0)
		// LEFT
		TNT1 A 0 A_SpawnItemEx("BaseOutFlame",0,0,0,0,-10,0)
		// RIGHT
		TNT1 A 0 A_SpawnItemEx("BaseOutFlame",0,0,0,0,10,0)
		// DIAGONALS
		TNT1 A 0 A_SpawnItemEx("BaseOutFlame",0,0,0,10,10,0)
		TNT1 A 0 A_SpawnItemEx("BaseOutFlame",0,0,0,-10,-10,0)
		TNT1 A 0 A_SpawnItemEx("BaseOutFlame",0,0,0,10,-10,0)
		TNT1 A 0 A_SpawnItemEx("BaseOutFlame",0,0,0,-10,10,0)
		
		TNT1 A 0 A_SpawnItemEx("HugeFlame",0,0,random(2,5),0,0,random(2,5))
		TNT1 A 0 A_SpawnItemEx("HugeFlame2",0,0,random(2,5),0,0,0)
		
		TNT1 AA 0 A_SpawnItemEx("MiniFlameBoom",random(-50,50),random(-50,50),random(2,50))
		TNT1 AAAAA 0 A_SpawnItemEx("QGrenadeSmoke",random(-10,10),random(-10,10),random(2,5),random(-5,5),random(-5,5),random(2,15))
		TNT1 AAAAAAAAAA 0 A_SpawnItemEx("CasingSpark",random(-16,16),random(-16,16),random(2,16),random(-10,10),random(-10,10),random(5,15))
		TNT1 AAAAAAAAAA 0 A_SpawnItemEx("DragonFXFlameTiny",random(-16,16),random(-16,16),random(2,16),random(-5,5),random(-5,5),random(5,10))
		TNT1 AAAAAAAAAA 0 A_SpawnItemEx("DragonFXFlame",random(-24,24),random(-24,24),random(2,16),random(-15,15),random(-15,15),random(5,10))
		TNT1 AAAAAAAAAA 0 A_SpawnItemEx("ImpactSpark2", random(-32,32), random(-32,32), random(-32,32), random(-5,5), random(-5,5), random(-1,5), 0, 128, 0)
		TNT1 AAAAAAAAAA 0 A_SpawnItemEx("ImpactSpark2", random(-32,32), random(-32,32), random(-32,32), random(-5,5), random(-5,5), random(-1,5), 0, 128, 0)
		TNT1 A 20
		stop
	}
}


ACTOR "M79 Grenade Launcher" : Weapon 11450
{
  +WEAPON.NOAUTOAIM
  Weapon.BobStyle Smooth
  Weapon.BobSpeed 2.5
  Weapon.BobRangeX 0.5
  Weapon.BobRangeY 0.3
  Weapon.AmmoUse 0
  Weapon.AmmoGive2 6
  Weapon.AmmoType "M79Primary"
  Weapon.AmmoType2 "M79Secondary"
  Obituary "\cJ%k \cG> \cKM79 GL \cG> \cJ%o"
  Inventory.Pickupmessage "You picked up the M79 grenade launcher."
  Inventory.PickupSound "m79/open"
	//$Category ZT2 - Weapons
	//$Title The Annihilator
	//$Sprite PPSHF0
  Tag "M79 Grenade Launcher"
  Scale 0.75
  +WEAPON.NOAUTOFIRE
  States
  {
  Ready:
	PPSS A 0 A_JumpIfInventory("SwitchingAmmo",1,"ChangeAmmo")
	PPSS A 0 A_JumpIfInventory("DoBlocking",1,"QuickMelee")
	PPSS A 0 A_JumpIfInventory("QuickGrenading",1,"ToGrenade")
	PPSS A 0 A_JumpIfInventory("IsReloading",1,"ReloadCheck")
    ZM79 A 1 A_WeaponReady
    Goto Ready
  ToGrenade:
	TNT1 A 0 A_JumpIfInventory("QuickGrenading",1,2)
	TNT1 A 0 A_Print("Why the fuck are you getting this?")
	GoTo Ready
	TNT1 A 0 A_JumpIfInventory("Type97Primary", 1, 3)
	TNT1 A 0 A_TakeInventory("QuickGrenading",999)
	TNT1 A 0 A_Print("No Grenades Left!")
	GoTo Ready
	ZM7S FEDCBA 1
	TNT1 A 0 A_TakeInventory("QuickGrenading",999)
	TNT1 AAA 3
	97FI ABC 1
	97FI D 1
	97FI D 1 A_WeaponReady(WRF_NOPRIMARY | WRF_NOSECONDARY)
	//97FI D 0 A_JumpIfInventory("QuickGrenading",1,1)
	//97FI D 0 A_ReFire
	97FI E 0 A_PlaySoundEx("type97/pinpull","SoundSlot6")
	97FI EG 1
	97FI I 3
	97FI J 0 A_PlaySoundEx("type97/throw","SoundSlot6")
	97FI JKL 1
	TNT1 A 0 A_TakeInventory("Type97Primary",1)
	FRGN A 0 A_FireCustomMissile("Thrown97",random(-200,200)/100.00,0,0,16,0,random(-150,150)/100.00)
	TNT1 AAA 3
	ZM7S ABCDEF 1
	TNT1 A 0 A_TakeInventory("QuickGrenading",999)
	Goto Ready
  QuickMelee:
	ZM7S FEDCBA 1
	TNT1 AAA 3
	MCFI E 1
	MCFI E 0 A_PlaySoundEx("machete/fire","Weapon")
	MCFI FG 1
    MCFI H 0 A_CustomPunch(2*random(1, 10), TRUE, 0, "ZTMeleePuff")
	MCFI HIJ 1
	MCFI K 2
	TNT1 AAA 3
	ZM7S ABCDEF 1
	TNT1 A 0 A_TakeInventory("DoBlocking",1)
	Goto Ready
  ToReady:
	NULL A 0
	Goto Ready
	NULL AAA 0
	NULL A 0 A_PlaySoundEx("dryfire/smg","SoundSlot6")
	Goto Ready
  Deselect:
	 ZM7S FEDCBA 1
     TNT1 AAAAAAAAAA 0 A_Lower
	 TNT1 A 1 A_Lower
     Goto Deselect+6
  Select:
	 TNT1 A 0 A_SetCrosshair(15)
	 TNT1 AA 0 A_Raise
	 TNT1 A 1 A_WeaponReady
	 TNT1 A 0 A_PlaySoundEx("orderpistol/select","SoundSlot6")
	 Goto SelectAnim
	 
  SelectAnim:
	 ZM7S ABCDEF 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	 Goto Ready
  //=======================================================================
  // AMMO CHECKING
  //=======================================================================
  ReloadCheck:
	 TNT1 A 0 A_TakeInventory("IsReloading",1)
	 TNT1 A 0 A_JumpIfInventory("M79Primary",1,"ToReady")
	 TNT1 A 0 A_JumpIfInventory("M79Secondary",1,"ReloadAnim")
	 Goto ToReady
  //=======================================================================
  Fire:
	 PPFI A 0 A_JumpIfInventory("M79Primary",1,1)
	 Goto ToReady+2
	 PPFI A 0 A_TakeInventory("M79Primary",1)
	 PPFI A 0 A_FireCustomMissile("ShakeYourAssDouble")
	 PPFI A 0 A_PlaySound("m79/fire", CHAN_WEAPON)
	 Goto MissileCheck
	 
  MissileCheck:
	 // MODE 3: SHOTGUN
	 // MODE 2: INCENDIARY
	 // MODE 1: EXPLOSIVE
	 PPFI A 0 A_JumpIfInventory("M79Mode",3,"MissileShotgun")
	 PPFI A 0 A_JumpIfInventory("M79Mode",2,"MissileIncendiary")
	 PPFI A 0 A_JumpIfInventory("M79Mode",1,"MissileExplosive")
	 Goto MissileExplosive
	 
  MissileExplosive:
	 PPFI A 0 A_FireCustomMissile("M79Grenade",2,1,6)
	 Goto ContinueFire
	 
  MissileIncendiary:
	 PPFI A 0 A_FireCustomMissile("M79Grenade_Flame",2,1,6)
	 Goto ContinueFire
	 
  MissileShotgun:
	 PPFI A 0 A_FireCustomMissile("MuzzleSmokeFX",0,0,6,0)
	 SHTG A 0 A_FireBullets (20.6, 20.5, 14, 20, "BP_Shotgun")
	 PPFI A 0 A_PlaySoundEx("aa12/fire", "SoundSlot7")
	 Goto ContinueFire
	 
  ContinueFire:
	 ZM79 B 3 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	 ZM79 C 2 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	 ZM79 DE 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	 ZM80 Z 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	 ZM79 A 2 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	 ZM79 H 0 A_JumpIfInventory("M79Secondary",1,"ReloadAnim")
	 Goto Ready
  ReloadAnim:
	 ZM79 K 0 A_PlaySoundEx("m79/open","SoundSlot6")
	 ZM79 F 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	 ZM79 GHIJKLMN 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	 ZM79 O 2 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	 ZM79 P 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	 // SHELL OUT SOUND
	 ZM79 Q 0 A_PlaySoundEx("m79/out","SoundSlot6")
	 ZM79 QRSTUV 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	 ZM79 W 2 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	 ZM79 X 3 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	 ZM79 YZ 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	 ZM80 ABC 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	 ZM80 D 0 A_PlaySoundEx("m79/in","SoundSlot6")
	 ZM7R Z 0 A_TakeInventory("M79Secondary",1)
	 ZM7R Z 0 A_GiveInventory("M79Primary",1)
	 ZM80 D 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	 ZM80 E 2 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	 ZM80 F 3 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	 ZM80 GHI 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	 ZM7Z M 0 A_PlaySoundEx("m79/close","SoundSlot6")
	 ZM80 JKLMNOPQRSTUVW 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	 Goto Ready
  FakeReloadAnim:
	 ZM79 K 0 A_PlaySoundEx("m79/open","SoundSlot6")
	 ZM79 F 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	 ZM79 GHIJKLMN 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	 ZM79 O 2 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	 ZM79 P 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	 // SHELL OUT SOUND
	 ZM79 Q 0 A_PlaySoundEx("m79/out","SoundSlot6")
	 ZM79 QRSTUV 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	 ZM79 W 2 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	 ZM79 X 3 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	 ZM79 YZ 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	 ZM80 ABC 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	 ZM80 D 0 A_PlaySoundEx("m79/in","SoundSlot6")
	 ZM7R Z 0 A_TakeInventory("M79Secondary",1)
	 ZM7R Z 0 A_GiveInventory("M79Primary",1)
	 ZM80 D 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	 ZM80 E 2 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	 ZM80 F 3 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	 ZM80 GHI 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	 ZM7Z M 0 A_PlaySoundEx("m79/close","SoundSlot6")
	 ZM80 JKLMNOPQRSTUVW 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	 ZN80 A 0 A_TakeInventory("SwitchingAmmo",1)
	 Goto Ready
  ChangeAmmo:
	 ZM7S A 0 A_TakeInventory("SwitchingAmmo",1)
	 ZM7Z A 0 A_JumpIfInventory("M79Primary",1,1)
	 Goto Ready
	 ZM7Z A 0 A_JumpIfInventory("M79 Grenade Launcher Incendiary",1,"CanSwitch")
	 ZM7A A 0 A_JumpIfInventory("M79 Grenade Launcher Shotgun",1,"CanSwitch")
	 Goto Ready
	 
  //=============================================
  // AMMO SWAPPING
  //=============================================
  CanSwitch:
	// MODE 2: SHOTGUN
	// MODE 1: INCENDIARY
	// MODE 0: NORMAL
	ZM7Z A 0 A_JumpIfInventory("M79Mode",3,"AmmoNormal")			// CAP
	ZM7Z A 0 A_JumpIfInventory("M79Mode",2,"AmmoShotgun")
	ZM7Z A 0 A_JumpIfInventory("M79Mode",1,"AmmoIncendiary")
	Goto AmmoNormal
	
  // NORMAL MODE
  AmmoNormal:
	ZM7Z A 0 A_TakeInventory("M79Mode",99)
	ZM7Z A 0 A_GiveInventory("M79Mode",1)
	ZM7Z A 0 A_Print("Ammo mode: Explosive")
	Goto FakeReloadAnim
	
  // INCENDIARY MODE
  AmmoIncendiary:
	ZM7Z A 0 A_GiveInventory("M79Mode",1)
	ZM7Z A 0 A_JumpIfInventory("M79 Grenade Launcher Incendiary",1,1)
	Goto AmmoShotgun
	ZM7Z A 0 A_Print("Ammo mode: Incendiary")
	Goto FakeReloadAnim
	
  // SHOTGUN MODE
  AmmoShotgun:
	ZM7Z A 0 A_GiveInventory("M79Mode",1)
	ZM7Z A 0 A_JumpIfInventory("M79 Grenade Launcher Shotgun",1,1)
	Goto AmmoNormal
	ZM7Z A 0 A_Print("Ammo mode: Shotgun")
	Goto FakeReloadAnim
	 
  Spawn:
    M79S Z -1
    Stop
  }
}