ACTOR FlamenadePrimary : Ammo
{
  Inventory.Amount 1
  Inventory.MaxAmount 5
  Ammo.BackpackAmount 1
  Ammo.BackpackMaxAmount 5
  Inventory.Icon "CLIPA0"
  +INVENTORY.IGNORESKILL
}

ACTOR BaseOutFlame
{
	+NOBLOCKMAP
	-SOLID
	+THRUACTORS
	+CLIENTSIDEONLY
	Renderstyle Add
	Alpha 0.75
	States
	{
	Spawn:
	FIR2 ABCDEABCDE 1 bright A_FadeOut(0.05)
	Stop
	}
}

ACTOR HugeFlame
{
	+NOBLOCKMAP
	-SOLID
	+THRUACTORS
	+CLIENTSIDEONLY
	Renderstyle Add
	Alpha 0.75
	Scale 2.0
	States
	{
	Spawn:
	FIR2 ABCDE 2 bright A_FadeOut(0.1)
	Stop
	}
}

ACTOR HugeFlame2
{
	+NOBLOCKMAP
	-SOLID
	+THRUACTORS
	+CLIENTSIDEONLY
	Renderstyle Add
	Alpha 0.75
	Scale 2.0
	States
	{
	Spawn:
	EFIR ABCDEFGHIJKLM 1 bright A_FadeOut(0.05)
	Stop
	}
}

ACTOR ThrownFlame // Credits to Project MSX for this
{
    radius 5
  height 5
  speed 25
	mass 50
	damage (5)
	scale 0.5
	RenderStyle normal
    PROJECTILE
	-NOGRAVITY
	  +RANDOMIZE
	  +HEXENBOUNCE
	  +NOEXTREMEDEATH
	  +FORCERADIUSDMG
	  +CANBOUNCEWATER
	  -BOUNCEONACTORS
	  +ROCKETTRAIL
	  +FORCEXYBILLBOARD
	  +BLOODLESSIMPACT
	bouncetype "doomcompat"
	// bouncecount 2
	gravity 0.4
  bouncefactor 0.4
  wallbouncefactor 0.5
	damagetype "Fire"
	seesound "type97/bounce"
	// deathsound "grenade/bounce"
   Obituary "%o was blown up by %k's frag grenade."
   States
   {
		Spawn:
		    TNT1 A 0
			TNT1 A 0 A_StopSound
			FRGR A 0 A_JumpIfInventory("frag_timer", 10, "boom")
		  	INCP ABCDEFGH 1 // A_SpawnItemEx("frag_grenadesmoke", 0,0,0, 0,random(-1,1),1)
			FRGR A 0 A_ScaleVelocity(0.90)
			FRGR A 0 A_GiveInventory("frag_timer", 1)
			goto Spawn+2
		Death:
			FRGG A 0 A_JumpIfInventory("frag_timer", 10, "boom")
			INCP IIIIII 1 // A_SpawnItemEx("frag_grenadesmoke_small", 0,0,0, 0,random(-1,1),1)
			FRGG A 0 A_GiveInventory("frag_timer", 1)
			loop
		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(75,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 AAAA 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 MiniFlameBoom
{
	Damagetype "Fire"
	+NOBLOCKMAP
	States
	{
	Spawn:
		TNT1 A 0
		TNT1 A 0 A_Explode(100,64)
		Stop
	}
}

ACTOR ThrownFlameSlow : ThrownFlame
{
	Speed 10
}

ACTOR "Flamenade" : Weapon
{
  +WEAPON.NOAUTOAIM
  Weapon.BobStyle Smooth
  Weapon.BobSpeed 2.5
  Weapon.BobRangeX 0.5
  Weapon.BobRangeY 0.3
  Obituary "\cJ%k \cG> \cKM14 Grenade \cG> \cJ%o"
  Inventory.Pickupmessage "You picked up an incendiary grenade."
  Inventory.PickupSound "type97/bounce"
  Tag "M14 Incendiary Grenade"
  +INVENTORY.UNDROPPABLE
  Scale 0.5
  +WEAPON.NOAUTOFIRE
  +WEAPON.AMMO_OPTIONAL
  States
  {
  Ready:
	PPSS A 0 A_JumpIfInventory("QuickGrenading",1,"Fire")
	//PPSS A 0 A_JumpIfInventory("DoBlocking",1,"QuickMelee")
    INCH E 1 A_WeaponReady
    Goto Ready
  QuickReady:
	PPSS A 0 A_PlaySoundEx("orderpistol/select","SoundSlot6")
	INCH AC 1
	//PPSS A 0 A_JumpIfInventory("QuickGrenading",1,"Fire")
	//PPSS A 0 A_JumpIfInventory("DoBlocking",1,"QuickMelee")
    INCH E 1 A_WeaponReady
    Goto Ready
  ToReady:
	NULL A 0
	Goto Ready
	NULL AAA 0
	NULL A 0
	Goto Ready
  Deselect:
	 INCH DCBA 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
  InstantDeselect:
     TNT1 AAAAAAAAAA 0 A_Lower
	 TNT1 A 1 A_Lower
     Loop
  Select:
	 TNT1 A 0 A_SetCrosshair(16)
	 TNT1 AA 0 A_Raise
	 TNT1 A 1 A_WeaponReady
	 TNT1 A 0 A_PlaySoundEx("cloth/melee","SoundSlot6")
	 Goto SelectAnim
  SelectAnim:
	 INCH ABCD 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	 Goto Ready
  Fire:
	 PPFI A 0 A_JumpIfInventory("FlamenadePrimary",1,1)
	 Goto ToReady+2
	 INCG ABC 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	 INCG D 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	 97FI E 0 A_GiveInventory("HasEnteredHold",1)
	 97FI A 0 A_TakeInventory("IsReloading",1)
	 Goto Hold
  Nevermind:
	 97FI A 0 A_TakeInventory("IsReloading",1)
	 97FI E 0 A_TakeInventory("HasEnteredHold",1)
	 INCG DCBA 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	 Goto Ready
  Hold:
	 97FI D 0 A_JumpIfInventory("HasEnteredHold",1,1)
	 Goto Fire
	 97FI D 0 A_JumpIfInventory("IsReloading",1,"Nevermind")
	 INCG 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")
	 INCG EFGH 1
	 TNT1 A 3
	 97FI J 0 A_PlaySoundEx("type97/throw","SoundSlot6")
	 97FI JKL 1
	 FRGN A 0 A_FireCustomMissile("ThrownFlame",random(-200,200)/100.00,0,0,16,0,random(-150,150)/100.00)
	 Goto TakeCheck
	 
  //=================================================================
  // WHETHER OR NOT TO TAKE A GRENADE
  //=================================================================
	 
  TakeCheck:
	TNT1 A 0 A_JumpIfInventory("Perk_Demo",1,1)
	Goto ActuallyTake
	TNT1 A 0
	TNT1 A 0 A_JumpIfInventory("PerkLevel",10,"LowerChance")
	TNT1 A 0 A_Jump(64,"HoldEnd")
	Goto ActuallyTake
	
    LowerChance:
	TNT1 A 0 A_Jump(128,"HoldEnd")
	Goto ActuallyTake

  ActuallyTake:
	TNT1 A 0 A_TakeInventory("FlamenadePrimary",1)
	Goto HoldEnd
	 
  //=================================================================
  HoldEnd:
	 97FI MNOPQ 1
	 TNT1 A 0 A_JumpIfInventory("QuickGrenading",1,"BackToLast")
	 TNT1 A 6
	 TNT1 A 0 A_TakeInventory("HasEnteredHold",1)
	 TNT1 A 0
	 Goto Ready
  BackToLast:
	 TNT1 A 0 A_TakeInventory("QuickGrenading",1)
	 TNT1 A 0 A_TakeInventory("PendingNade",1)
	 TNT1 A 0 ACS_NamedExecute("SelectLastWeapon",0,0,0,0)
	 Goto InstantDeselect
  AltFire:
	 PPFI A 0 A_JumpIfInventory("FlamenadePrimary",1,1)
	 Goto ToReady+2
	 INCG ABC 1
	 INCG D 1
	 97FI E 0 A_GiveInventory("HasEnteredHold",1)
	 97FI A 0 A_TakeInventory("IsReloading",1)
	 Goto AltHold
  AltHold:
	 97FI D 0 A_JumpIfInventory("HasEnteredHold",1,1)
	 Goto AltFire
	 97FI D 0 A_JumpIfInventory("IsReloading",1,"Nevermind")
	 INCG D 1 A_WeaponReady(WRF_NOPRIMARY | WRF_NOSECONDARY)
	 97FI D 0 A_ReFire
	 97FI E 0 A_PlaySoundEx("type97/pinpull","SoundSlot6")
	 INCG EFGH 1
	 TNT1 A 3
	 97FI J 0 A_PlaySoundEx("type97/throw","SoundSlot6")
	 97FI JKL 1
	 FRGN A 0 A_FireCustomMissile("ThrownFlameSlow",random(-200,200)/100.00,0,0,16,0,random(-150,150)/100.00)
	 Goto TakeCheck
  Spawn:
    FRGT C -1
    Stop
  }
}