//================================================================
// 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
{
    radius 5
  height 5
  speed 25
	mass 50
	damage 30
	scale 0.5
	RenderStyle normal
    PROJECTILE
	-NOGRAVITY
	  +RANDOMIZE
	  +NOEXTREMEDEATH
	  +FORCERADIUSDMG
	  -ROCKETTRAIL
	  +FORCEXYBILLBOARD
	  +BLOODLESSIMPACT
	// bouncecount 2
	gravity 0.2
   damagetype "ExplosiveDamage"
	// deathsound "grenade/bounce"
   Obituary "%o was swallowed a grenade from %k's M79."
   States
   {
		Spawn:
		    TNT1 A 0
			GRND AAAAA 1 A_SpawnItemEx("QGrenadeSmoke",0,0,0)
			FRTH A 0 A_GiveInventory("GrenadeArmed",1)
			Goto Looping
		Looping:
			GRND A 0 A_SpawnItemEx("QGrenadeSmoke",0,0,0)
		  	GRND A 1 // A_SpawnItemEx("frag_grenadesmoke", 0,0,0, 0,random(-1,1),1)
			Loop
		Death:
		Boom:
		TNT1 A 0 A_JumpIfInventory("GrenadeArmed",1,1)
		Goto Unsafe
		TNT1 A 0
		TNT1 A 0 A_AlertMonsters
		TNT1 A 0 Radius_Quake(2,12,0,8,0)
		TNT1 AA 0 A_Explode(75,170)
		TNT1 AA 0 A_Explode(75,300)
		TNT1 A 0 A_SpawnItemEx("M79Explosion")
		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:
		FRTH A 0
		Stop
   }
}

ACTOR M79Grenade_Flame : M79Grenade
{
	damagetype "Fire"
	States
	{
	Death:
	Boom:
		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.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:
	PPSS A 0 A_SelectWeapon("Type-97 Grenade")
	Goto Deselect
  QuickMelee:
	PPBL A 1
	PPBL B 0 A_PlaySoundEx("fist/swing","Weapon")
	PPBL BC 1
	PPBL D 0 A_CustomPunch (random(4,5),1,0,"BlockPuff")
	PPBL D 2
	PPBL E 4
	PPBL DCBA 2
	PPBL 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")
	 Goto ContinueFire
	 
  MissileIncendiary:
	 PPFI A 0 A_FireCustomMissile("M79Grenade_Flame")
	 Goto ContinueFire
	 
  MissileShotgun:
	 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 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	 ZM79 C 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	 ZM79 D 2 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	 ZM79 E 3 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	 ZM79 F 2 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	 ZM79 G 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	 ZM79 H 0 A_JumpIfInventory("M79Secondary",1,"ReloadAnim")
	 Goto Ready
  ReloadAnim:
	 ZM7R ABCDEFGHIJ 1
	 ZM7R K 0 A_PlaySoundEx("m79/open","SoundSlot6")
	 ZM7R KLMN 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	 ZM7R O 2 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	 ZM7R P 3 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	 ZM7R Q 2 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	 ZM7R RSTUVW 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	 ZM7R X 0 A_PlaySoundEx("m79/in","SoundSlot6")
	 ZM7R X 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	 ZM7R Y 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	 ZM7R Z 0 A_TakeInventory("M79Secondary",1)
	 ZM7R Z 0 A_GiveInventory("M79Primary",1)
	 ZM7R Z 2 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	 ZM7Z A 3 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	 ZM7Z B 2 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	 ZM7Z CDEFGHIJK 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	 ZM7Z M 0 A_PlaySoundEx("m79/close","SoundSlot6")
	 ZM7Z M 3 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	 ZM7Z N 2 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	 ZM7Z OPQR 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	 ZM7Z S 2 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	 ZM7Z T 3 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	 ZM7Z U 2 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	 ZM7Z VWX 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	 Goto Ready
  FakeReloadAnim:
	 ZM7R ABCDEFGHIJ 1
	 ZM7R K 0 A_PlaySoundEx("m79/open","SoundSlot6")
	 ZM7R KLMN 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	 ZM7R O 2 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	 ZM7R P 3 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	 ZM7R Q 2 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	 ZM7R RSTUVW 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	 ZM7R X 0 A_PlaySoundEx("m79/in","SoundSlot6")
	 ZM7R X 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	 ZM7R Y 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	 ZM7R Z 2 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	 ZM7Z A 3 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	 ZM7Z B 2 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	 ZM7Z CDEFGHIJK 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	 ZM7Z M 0 A_PlaySoundEx("m79/close","SoundSlot6")
	 ZM7Z M 3 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	 ZM7Z N 2 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	 ZM7Z OPQR 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	 ZM7Z S 2 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	 ZM7Z T 3 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	 ZM7Z U 2 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	 ZM7Z VWX 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	 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
  }
}