// --------------------------------------------------------------------------
//
// Glock 21 (The only that fires .45ACP so, ignore 9mm references here.)
//
// --------------------------------------------------------------------------

ACTOR Glock21 : LowWeapon replaces Pistol
{
	+WEAPON.AMMO_OPTIONAL
	Weapon.SlotNumber 2
	Weapon.AmmoType1 "45acpreload"
	Weapon.AmmoUse1 1
	Weapon.AmmoGive1 0
	Weapon.AmmoType2 "45acpclip"
	Weapon.AmmoUse2 0
	Weapon.AmmoGive2 13
	Weapon.UpSound "weapons/upwp1"
	Inventory.Pickupmessage "Glock 21."
	Scale 0.35
	Tag "Glock 21"
	States
	{
	Spawn:
		NINP A -1
		Stop
	Ready:
		TNT1 A 0 A_JumpIfInventory("SilencerOn",1,"ReadySilenced")
		NING A 1 A_WeaponReady(WRF_ALLOWRELOAD)
		TNT1 A 0 A_JumpifInventory("IsKicking",1,"Kick")
		TNT1 A 0 A_JumpifInventory("ThrowTNT",1,"TNT")
		Loop
	ReadySilenced:
		NISG A 1 A_WeaponReady(WRF_ALLOWRELOAD)
		TNT1 A 0 A_JumpifInventory("IsKicking",1,"Kick")
		TNT1 A 0 A_JumpifInventory("ThrowTNT",1,"TNT")
		Loop
	Deselect:
		TNT1 A 0 A_PlaySound("weapons/swap",6)
		NINF B 1 Offset (8, 0) A_Lower
		TNT1 A 0 A_Lower
		NINF B 1 Offset (16, 0) A_Lower
		TNT1 A 0 A_Lower
		NINF B 1 Offset (24, 0) A_Lower
		TNT1 A 0 A_Lower
		NINF B 1 Offset (32, 0) A_Lower
		TNT1 A 0 A_Lower
		NINF D 1 Offset (40, 0) A_Lower
		TNT1 A 0 A_Lower
		NINF D 1 Offset (48, 0) A_Lower
		TNT1 A 0 A_Lower
		NINF D 1 Offset (56, 0) A_Lower
		TNT1 A 0 A_Lower
		NINF D 1 Offset (64, 0) A_Lower
		TNT1 A 1 A_Lower
		Wait
	Select:
		NINF D 1 Offset (64, 0) A_Raise
		TNT1 A 0 A_Raise
		NINF D 1 Offset (56, 0) A_Raise
		TNT1 A 0 A_Raise
		NINF D 1 Offset (48, 0) A_Raise
		TNT1 A 0 A_Raise
		NINF D 1 Offset (40, 0) A_Raise
		TNT1 A 0 A_Raise
		NINF B 1 Offset (32, 0) A_Raise
		TNT1 A 0 A_Raise
		NINF B 1 Offset (24, 0) A_Raise
		TNT1 A 0 A_Raise
		NINF B 1 Offset (16, 0) A_Raise
		TNT1 A 0 A_Raise
		NINF B 1 Offset (8, 0) A_Raise
		TNT1 A 0 A_Raise
		Wait
	Fire:
		TNT1 A 0 A_JumpIfNoAmmo("Dryfire")
		TNT1 A 0 A_JumpIfInventory("SilencerOn",1,"FireSilenced")
		TNT1 A 0 A_Playsound("weapons/9mmfire")
		TNT1 A 0 A_SetPitch(pitch -1.0)
		TNT1 A 0 A_FireBullets(1.9, 2.1, 1, 6,"Bullet_Puff")
		TNT1 A 0 A_FireCustomMissile("GunSmokeSpawner2",0,0,0)
		TNT1 A 0 A_Gunflash
		TNT1 A 0 A_AlertMonsters
		TNT1 A 0 A_FireCustomMissile("9mmCaseSpawn",345+random(-8,8),0,-4,-5,0)
		NINF A 1 BRIGHT Offset(0,33)
		NINF B 1 Offset(0,28)
		NINF C 1 Offset(0,26)
		NINF D 1 Offset(0,23)
		NINF D 1 Offset(0,27)
		NINF E 1 Offset(0,31)
		NINF F 1 Offset(0,34)
		NING B 1 Offset(0,32)
		NING A 1
		TNT1 A 0 A_Refire
		Goto Ready
	FireSilenced:
		TNT1 A 0 A_JumpIfNoAmmo("SilencerDryfire")
		TNT1 A 0 A_Playsound("weapons/9mmfire2")
		TNT1 A 0 A_SetPitch(pitch -0.5)
		TNT1 A 0 A_FireBullets(1.3, 1.1, 1, 5,"Bullet_Puff")
		TNT1 A 0 A_FireCustomMissile("GunSmokeSpawner2",0,0,0)
		TNT1 A 0 A_FireCustomMissile("9mmCaseSpawn",345+random(-8,8),0,-4,-5,0)
		NISF AABCDEFG 1
		NISG A 5
		TNT1 A 0 A_Refire
		Goto Ready
	Altfire:
		TNT1 A 0 A_JumpIfInventory("SilencerOn",1,"TakeSilencer")
		NINR AABBCC 1
		NISS ABCDE 2
		NISS F 2 A_PlaySound("weapons/9mmload1")
		NISS F 4 Offset(-3,35)
		NISS F 3 Offset(-6,38)
		NISS F 4 A_PlaySound("weapons/9mmsile1")
		NISS F 3 Offset(-6,38)
		NISS F 4 Offset(-3,35)
		NISS F 3 Offset(-6,38)
		NISS F 4 Offset(-3,35)
		NISS F 3 Offset(-6,38)
		NISS F 4 Offset(-3,35)
		NISS F 3 Offset(-6,38)
		NISS F 4 Offset(-3,35)
		NISS F 3 Offset(-6,38)
		NISS F 4 Offset(-3,35)
		NISS F 3 Offset(-6,38)
		NISS F 2 Offset(-3,35)
		NISS G 2
		TNT1 A 0 A_GiveInventory("SilencerOn",1)
		NISS HIJKLM 2
		NISG A 1
		Goto Ready
	TakeSilencer:
		NISG A 1
		NISS MLKJIH 2
		TNT1 A 0 A_TakeInventory("SilencerOn",1)
		NISS G 2
		NISS F 3 A_PlaySound("weapons/9mmsile1")
		NISS F 4 Offset(-6,38)
		NISS F 5 Offset(-3,35)
		NISS F 4 Offset(-6,38)
		NISS F 5 Offset(-3,35)
		NISS F 4 Offset(-6,38)
		NISS F 5 Offset(-3,35)
		NISS F 4 Offset(-6,38)
		NISS F 5 Offset(-3,35)
		NISS F 4 Offset(-6,38)
		NISS F 5 Offset(-3,35)
		NISS F 4 Offset(-6,38)
		NISS F 2 Offset(-3,35)
		NISS F 3 Offset(-3,35)
		NISS F 2 Offset(-6,38)
		NISS F 3 A_PlaySound("weapons/9mmsile1")
		NISS F 3 Offset(-6,38)
		NISS F 4 Offset(-3,35)
		NISS F 2 A_PlaySound("weapons/9mmload1")
		NISS EDCBA 2
		NINR CCBBAAA 1
		Goto Ready
	SilencerDryfire:
		NISG B 3 A_PlaySound("weapons/HGdryfire")
		NISG A 10
		Goto Reload
	 Flash:
		TNT1 A 2 Bright A_Light1
		TNT1 A 1 Bright A_Light2
		Goto LightDone
	Dryfire:
		NING B 3 A_PlaySound("weapons/HGdryfire")
		NING A 10
	Reload:
		TNT1 A 0 A_JumpIfInventory("SilencerOn",1,"SReload")
		TNT1 A 0 A_JumpIfInventory("45acpreload", 14, 2)
		TNT1 A 0 A_JumpIfInventory("45acpclip", 1, "ReloadWork")
		NING A 1 A_WeaponReady
		Goto Ready
	ReloadWork:
		TNT1 A 0 A_JumpIfInventory("45acpreload", 1, "ReloadWork2")
		NINR A 3 
		NINR B 2 A_PlaySound("weapons/9mmload2", CHAN_WEAPON)
		NINR B 4 
		NINR C 3 A_FireCustomMissile("EmptyGlockClip",0,0,0,0)
		NINR D 2 
		NINR E 3 A_PlaySound("weapons/9mmload1", CHAN_WEAPON)
		Goto Chambercheck
	ReloadWork2:
		NINR A 3 
		NINR B 2 A_PlaySound("weapons/9mmload2", CHAN_WEAPON)
		NINR BCD 3
		NINR E 3 A_PlaySound("weapons/9mmload1", CHAN_WEAPON)
		Goto Chambercheck
	ChamberCheck:
		TNT1 A 0 A_JumpIfInventory("45acpreload", 1, "ReloadLoop2")
		Goto ReloadLoop
	ReloadLoop:
		TNT1 A 0 A_TakeInventory("45acpclip", 1)
		TNT1 A 0 A_GiveInventory("45acpreload", 1)
		TNT1 A 0 A_JumpIfInventory("45acpreload", 13, "ReloadFinish")
		TNT1 A 0 A_JumpIfInventory("45acpclip", 1, "ReloadLoop")
		Goto ReloadFinish
	ReloadLoop2:
		TNT1 A 0 A_TakeInventory("45acpclip", 1)
		TNT1 A 0 A_GiveInventory("45acpreload", 1)
		TNT1 A 0 A_JumpIfInventory("45acpreload", 14, "ReloadFinish2")
		TNT1 A 0 A_JumpIfInventory("45acpclip", 1, "ReloadLoop2")
		Goto ReloadFinish2
	ReloadFinish:
		NINR CBA 3
		NISS AB 3
		NINC AB 3
		NINC C 4 A_PlaySound("weapons/9mmload3")
		NINC D 4
		NINC CBA 3
		NISS BA 3
		NINR CBAA 3
		Goto Ready
	ReloadFinish2:
		NINR EEEDDCBAA 2
		Goto Ready

// Silenced Reload Animations //

	SReload:
		TNT1 A 0 A_JumpIfInventory("45acpreload", 14, 2)
		TNT1 A 0 A_JumpIfInventory("45acpclip", 1, "SReloadWork")
		NISG A 1 A_WeaponReady
		Goto Ready
	SReloadWork:
		TNT1 A 0 A_JumpIfInventory("45acpreload", 1, "SReloadWork2")
		NISR A 3 
		NISR B 2 A_PlaySound("weapons/9mmload2", CHAN_WEAPON)
		NISR B 4 
		NISR C 3 
		NISR D 2 A_FireCustomMissile("EmptyGlockClip",0,0,0,0)
		NISR E 3
		NISR F 3 A_PlaySound("weapons/9mmload1", CHAN_WEAPON)
		Goto SChambercheck
	SReloadWork2:
		NISR A 3 
		NISR B 2 A_PlaySound("weapons/9mmload2", CHAN_WEAPON)
		NISR BCDE 3 
		NISR F 3 A_PlaySound("weapons/9mmload1", CHAN_WEAPON)
		Goto SChambercheck
	SChambercheck:
		TNT1 A 0 A_JumpIfInventory("45acpreload", 1, "SReloadLoop2")
		Goto SReloadLoop
	SReloadLoop:
		TNT1 A 0 A_TakeInventory("45acpclip", 1)
		TNT1 A 0 A_GiveInventory("45acpreload", 1)
		TNT1 A 0 A_JumpIfInventory("45acpreload", 13, "SReloadFinish")
		TNT1 A 0 A_JumpIfInventory("45acpclip", 1, "SReloadLoop")
		Goto SReloadFinish
	SReloadLoop2:
		TNT1 A 0 A_TakeInventory("45acpclip", 1)
		TNT1 A 0 A_GiveInventory("45acpreload", 1)
		TNT1 A 0 A_JumpIfInventory("45acpreload", 14, "SReloadFinish2")
		TNT1 A 0 A_JumpIfInventory("45acpclip", 1, "SReloadLoop2")
		Goto SReloadFinish2
	SReloadFinish:
		NISR CBA 3
		NISS KJIH 3
		NISC E 4 A_PlaySound("weapons/9mmload3")
		NISC F 4
		NISC E 4
		NISS HIJKLM 3
		Goto Ready
	SReloadFinish2:
		NISR FFFEEEDDCBAA 2
		Goto Ready
//  Kick Actions
	Kick:
		TNT1 A 0 A_JumpIfInventory("SilencerOn",1,"SilencedKick")
		TNT1 A 0 A_JumpIf (momZ > 0, "AirKick")
		TNT1 A 0 A_JumpIf (momZ < 0, "AirKick")
		TNT1 A 0 A_JumpIfInventory("SuperBlow",1,"BerserkKick")
		KKCR A 1 Offset(0,32)
		KKCR BCDE 1
		KKCR FG 1 A_Recoil(-1)
		KKCR H 2 A_CustomPunch (5,0,0,"FightPuff3") 
		KKCR IHGFEDC 1 
		KKCR BA 1 A_Recoil(+1)
		Goto Ready
	AirKick:
		TNT1 A 0 A_JumpIfInventory("SuperBlow",1,"AirBerserkKick")
		FISG B 1
		FISG B 1 Offset(0,36)
		TNT1 A 0 Offset(-1,32)
		KI3K ABCDE 1
		KI3K F 3 A_CustomPunch (9,0,0,"FightPuff3") 
		KI3K GHIJK 2 
		Goto Ready
	BerserkKick:
		TNT1 A 0 A_JumpIfInventory("SilencerOn",1,"SilencedBerserk")
		KKCR A 1 Offset(0,32)
		KKCR BCDE 1
		KKCR FG 1 A_Recoil(-1)
		KKCR H 2 A_CustomPunch (9,0,0,"FightPuff3") 
		KKCR IHGFEDC 1 
		KKCR BA 1 A_Recoil(+1)
		Goto Ready
	AirBerserkKick:
		FISG B 1
		FISG B 1 Offset(0,36)
		TNT1 A 0 Offset(-1,32)
		KI3K ABCDE 1 A_Recoil(-2)
		KI3K F 3 A_CustomPunch (12,0,0,"FightPuff3") 
		KI3K GHIJK 2
		Goto Ready
	SilencedKick:
		TNT1 A 0 A_JumpIf (momZ > 0, "AirKick")
		TNT1 A 0 A_JumpIf (momZ < 0, "AirKick")
		TNT1 A 0 A_JumpIfInventory("SuperBlow",1,"BerserkKick")
		KKDR A 1 Offset(0,32)
		KKDR BCDE 1
		KKDR FG 1 A_Recoil(-1)
		KKDR H 2 A_CustomPunch (9,0,0,"FightPuff3") 
		KKDR IHGFEDC 1 
		KKDR BA 1 A_Recoil(+1)
		Goto Ready
	SilencedBerserk:
		KKDR A 1 Offset(0,32)
		KKDR BCDE 1
		KKDR FG 1 A_Recoil(-1)
		KKDR H 2 A_CustomPunch (9,0,0,"FightPuff3") 
		KKDR IHGFEDC 1 
		KKDR BA 1 A_Recoil(+1)
		Goto Ready
// TNT Actions
	TNT:
		TNT1 A 0 A_JumpIfInventory("TNTammo",1,1)
		Goto NoTNT
		TNT1 A 0 A_JumpIf(waterlevel>2,"YouCannot")
		TNT1 A 0 A_StopSound(1)
		TNT1 A 0 Offset(-20,32)
		TAND ABC 2
		TAND D 2 A_PlaySound ("weapons/tnttr")
		TNT1 A 0 A_FireCustomMissile("STNT",0,0,0,0)
		TNT1 A 0 A_TakeInventory("TNTammo",1)
		TAND EDCBA 2
		TNT1 A 0 A_JumpIfInventory("TNTammo",0,"NoTNT")
		NINF D 1 Offset(67, 100)
		NINF D 1 Offset(54, 81)
		NINF D 1 Offset(32, 69)
		NINF D 1 Offset(22, 58)
		NINF D 1 Offset(10, 47)
		NINF D 1 Offset(7, 39)
		NINF D 1 Offset(2, 34)
		Goto Ready
	YouCannot:
		TNT1 A 0 A_Print("You Are Underwater!",8)
		Goto Ready
	NoTNT:
		TNT1 A 0 A_Print("No dynamites left.")
		Goto Ready
	}
}

ACTOR 45acpreload : Ammo
{
	Inventory.MaxAmount 14
	+IGNORESKILL
}

ACTOR SilencerOn : Inventory
{
	Inventory.MaxAmount 1
}