Actor ResMG1 : Chaingun {
	Weapon.SelectionOrder 720
	Weapon.SlotNumber 4
    Inventory.PickupSound "weapons/pickup"
    Inventory.PickupMessage "You got the templar machinegun!"	
    Obituary "%o was gunned down by %k's machinegun."
	Weapon.AmmoType1 "Clip"
	Weapon.AmmoType2 "MGClip4"
	Weapon.AmmoUse2 0
	Weapon.AmmoUse1 0
	Weapon.AmmoGive1 0
	Decal "BulletChip"
	+WEAPON.NOALERT
	AttackSound ""
	+INVENTORY.UNDROPPABLE
	Tag "$WEP_4_4_TAG"
	Weapon.BobStyle InverseSmooth
	Weapon.BobSpeed 2.0
	Weapon.BobRangeY 0.4
	Weapon.BobRangeX 0.7
	+WEAPON.NOAUTOAIM
	States {
		Spawn:
			RW03 X -1
		Stop
		Ready:
			RW03 A 1 A_WeaponReady(WRF_ALLOWRELOAD)
		Loop
		Deselect:
			TNT1 A 0 A_TakeInventory("H_WeaponSlot4", 1)
			RW03 A 1 A_Lower
			TNT1 A 0 A_Lower
		Loop
		Select:
			TNT1 A 0 A_GiveInventory("H_WeaponSlot4", 1)
			TNT1 A 0 ACS_NamedExecuteWithResult("DND Weapon Damage Cache", DND_DMGID_0, 20, 0, DND_WEAPON_TEMPLARMG)
			// compat with GL
			TNT1 A 0 ACS_NamedExecuteWithResult("DND Weapon Damage Cache", DND_DMGID_1, 128, 0, DND_WEAPON_TEMPLARMG)
			TNT1 A 0 ACS_NamedExecuteWithResult("DND Weapon Damage Cache", DND_DMGID_2, 80, 0, DND_WEAPON_TEMPLARMG)
	    SelectLoop:
			RW03 A 1 A_Raise
			TNT1 A 0 A_Raise
		Loop
		Fire:
			TNT1 A 0 A_JumpIfInventory("SpecialAmmoMode_4", AMMO_GRENADE, "FireGrenade")
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_TEMPLARMG, 1), "FireConfirmed")
			RW03 A 3 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
		Goto Reload
		FireConfirmed:
			TNT1 A 0 A_Jump(256, "Fire1", "Fire2")
		Fire1:
			RW03 D 1 Bright A_AlertMonsters
			TNT1 A 0 A_PlayWeaponSound("templar/fire")
			TNT1 A 0 A_FireCustomMissile("Tracer", frandom(-2, 2), 0, 0, frandom(-2, 2))
			TNT1 A 0 A_SpawnItemEx("GunSmokeSmaller", 18 * cos(-pitch), 0, 32 * (1 + sin(-pitch)), 0, 0, 1)
			TNT1 A 0 A_SpawnItemEx ("chaingunsmoke",cos(-pitch)*20,2,36+(sin(-pitch)*20),cos(-pitch)*0,0,0,0,0,0)
			TNT1 A 0 A_SpawnItemEx ("silverbulletcasing",cos(pitch)*20,6,32+(sin(-pitch)*16),0,8,random(4,8),0,0,0)
			TNT1 A 0 ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_TEMPLARMG, DND_ATK_SECONDARY, DND_AMMOSLOT_MAGAZINE | (DND_MAGAZINE_MGCLIP4 << 16), 0)
			TNT1 A 0 Radius_Quake(1,2,0,1,0)
			RW03 E 2 Bright
		Goto FireEnd
		Fire2:
			RW03 D 1 Bright A_AlertMonsters
			TNT1 A 0 A_PlayWeaponSound("templar/fire")
			TNT1 A 0 A_FireCustomMissile("Tracer", frandom(-2, 2), 0, 0, frandom(-2, 2))
			TNT1 A 0 A_SpawnItemEx("GunSmokeSmaller", 18 * cos(-pitch), 0, 32 * (1 + sin(-pitch)), 0, 0, 1)
			TNT1 A 0 A_SpawnItemEx ("chaingunsmoke",cos(-pitch)*20,2,36+(sin(-pitch)*20),cos(-pitch)*0,0,0,0,0,0)
			TNT1 A 0 A_SpawnItemEx ("silverbulletcasing",cos(pitch)*20,6,32+(sin(-pitch)*16),0,8,random(4,8),0,0,0)
			TNT1 A 0 ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_TEMPLARMG, DND_ATK_SECONDARY, DND_AMMOSLOT_MAGAZINE | (DND_MAGAZINE_MGCLIP4 << 16), 0)
			TNT1 A 0 Radius_Quake(1,2,0,1,0)
			RW03 F 2 Bright
		Goto FireEnd
		FireEnd:
			RW03 C 1
			RW03 B 2 A_Refire("Fire")
			RW03 A 2	
		Goto Ready
		Reload:
			TNT1 A 0 A_JumpIfInventory("MGClip4", 0, "Failed")
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_TEMPLARMG, 0), "ContinueReload")
			RW03 A 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
		Goto Ready
		ContinueReload:
			TNT1 A 0 A_JumpIfInventory("Ability_Reloader", 1, "ReloadFaster")
			RW03 GHIJ 2
			TNT1 A 0 A_PlayWeaponSound("Templar/Out")
			RW03 KLM 2
			TNT1 A 0 A_FireCustomMissile("MGClip2Drop", frandom(-12.0, 12.0), 0, 0, 0)
			RW03 N 2
			RW03 O 20
			RW03 PQRS 2
			TNT1 A 0 A_PlayWeaponSound("Templar/In")
			TNT1 A 0 ACS_NamedExecuteAlways("DnD Handle Reload", 0, DND_WEAPON_TEMPLARMG)
			RW03 TUVWYZ 2
			RW03 A 2
		Goto Ready
		Failed:
			RW03 A 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
		Goto Ready
		ReloadFaster:
			RW03 GHIJ 1
			TNT1 A 0 A_PlayWeaponSound("Templar/Out")
			RW03 KLM 1
			TNT1 A 0 A_FireCustomMissile("MGClip2Drop", frandom(-12.0, 12.0), 0, 0, 0)
			RW03 N 1
			RW03 O 10
			RW03 PQRS 1
			TNT1 A 0 A_PlayWeaponSound("Templar/In")
			TNT1 A 0 ACS_NamedExecuteAlways("DnD Handle Reload", 0, DND_WEAPON_TEMPLARMG)
			RW03 TUVWYZ 1
			RW03 A 1
		Goto Ready
		Flash:
		  TNT1 A 4 A_Light1
		  TNT1 A 3 A_Light2
		  TNT1 A 0 A_Light0
		  stop
		  
		Altfire:
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Weapon Can Switch Mode", AMMO_TYPE_MGGRENADE, SPWEP_MG), "ModeSwitch")
			RW03 A 2 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
		Goto Ready
		ModeSwitch:
			TNT1 A 0 A_JumpIfInventory("AmmoSwitchCooldown", 1, "NoAction")
			RW03 A 1 A_WeaponReady(WRF_NOSWITCH | WRF_NOFIRE)
			TNT1 A 0 A_GiveInventory("AmmoSwitchCooldown", 1)
			TNT1 A 0 ACS_ExecuteAlways(DND_SPECIALAMMO_SCRIPT, 0, AMMO_TYPE_MGGRENADE, SPWEP_MG)
			RW03 A 1 Offset(0, 41)
			TNT1 A 0 ACS_ExecuteAlways(DND_SPECIALAMMOMSG_SCRIPT, 0)
			RW03 A 1 Offset(0, 50)
			RW03 A 1 Offset(0, 59)
			RW03 A 1 Offset(0, 68)
			RW03 A 12 Offset(0, 77)
			RW03 A 1 Offset(0, 68)
			RW03 A 1 Offset(0, 56)
			RW03 A 1 Offset(0, 44)
			RW03 A 1 Offset(0, 32)
		Goto Ready
		NoAction:
			RW03 A 1 A_WeaponReady(WRF_NOSWITCH | WRF_NOFIRE)
		Goto Ready
		
		FireGrenade:
			RW03 A 1 Offset(0, 33) A_PlayWeaponSound("WeaponGL/Fire")
			RW03 A 1 Offset(0, 34) ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_TEMPLARMG, DND_ATK_SECONDARY | DND_ATK_OTHER_DIR, DND_AMMOSLOT_MAGAZINE | (DND_MAGAZINE_MGCLIP4 << 16), 0)
			RW03 A 2 Offset(0, 44)
			RW03 A 1 Offset(0, 41)
			RW03 A 1 Offset(0, 36)
			RW03 A 1 Offset(3, 40)
			RW03 A 1 Offset(6, 46) 
			RW03 A 1 Offset(8, 51)
			RW03 A 1 Offset(9, 54) A_PlaySound("WeaponGL/Open")
			RW03 A 1 Offset(10, 56)
			RW03 A 19 Offset(11, 58)
			RW03 A 3 Offset(13, 62) A_PlaySound("WeaponGL/In")
			RW03 A 3 Offset(11, 59)
			RW03 A 2 Offset(9, 54)
			RW03 A 3 Offset(6, 50)
			RW03 A 3 Offset(4, 45)
			RW03 A 2 Offset(3, 41) A_PlaySound("WeaponGL/Close")
			RW03 A 2 Offset(1, 36)
			RW03 A 2 Offset(0, 34)
		Goto Ready
	}
}

Actor TemplarMGPuff : DnD_BasePuff {
	Stamina 6144
	States {
		HitNoBlood:
		Goto Crash
	}
}

actor ResMG2 : Weapon { 
	weapon.selectionorder 720
	weapon.slotnumber 4
	+WEAPON.NOALERT
	Weapon.AmmoUse1 0
	Weapon.AmmoGive1 8
	Weapon.AmmoType1 "RiotgunShell"
	Weapon.AmmoType2 "RiotgunClip"
	Obituary "%o was blown new holes by %k's riot cannon."
	attacksound "Weapons/RiotgunFire"
	inventory.pickupmessage "Riot Gun!"
	Inventory.PickupSound "Item/pickup"
	Radius 24
	Height 16
	Decal "BulletChip"
	const int riot_clip_max = 8;
	Tag "$WEP_4_5_TAG"
	Weapon.BobStyle InverseSmooth
	Weapon.BobSpeed 2.0
	Weapon.BobRangeY 0.4
	Weapon.BobRangeX 0.7
	+WEAPON.NOAUTOAIM
	States {
		Ready:
			RIOT A 0 A_JumpIfInventory("RiotGunFireMode", 1, "Ready2")
			TNT1 A 0 A_JumpIfInventory("SpecialAmmoMode_4", AMMO_EXPLOSIVESHELL, "Explo_Ready")
			TNT1 A 0 A_JumpIfInventory("SpecialAmmoMode_4", AMMO_NITROGENSHELL, "Nitro_Ready")
			RIOT A 1 A_WeaponReady(WRF_ALLOWRELOAD)
		Loop
		Nitro_Ready:
			RIO2 A 1 A_WeaponReady(WRF_ALLOWRELOAD)
		Loop
		Explo_Ready:
			RIO3 A 1 A_WeaponReady(WRF_ALLOWRELOAD)
		Loop
		
		
		Ready2:
			TNT1 A 0 A_JumpIfInventory("SpecialAmmoMode_4", AMMO_EXPLOSIVESHELL, "Explo_Ready2")
			TNT1 A 0 A_JumpIfInventory("SpecialAmmoMode_4", AMMO_NITROGENSHELL, "Nitro_Ready2")
		Ready2Norm:
			RIOT G 1 A_WeaponReady(WRF_ALLOWRELOAD)
		Loop
		Nitro_Ready2:
			RIO2 F 1 A_WeaponReady(WRF_ALLOWRELOAD)
		Loop
		Explo_Ready2:
			RIO3 F 1 A_WeaponReady(WRF_ALLOWRELOAD)
		Loop
		
		
		Deselect:
			TNT1 A 0 A_TakeInventory("H_WeaponSlot4", 1)
			TNT1 A 0 A_JumpIfInventory("SpecialAmmoMode_4", AMMO_EXPLOSIVESHELL, "Explo_Deselect")
			TNT1 A 0 A_JumpIfInventory("SpecialAmmoMode_4", AMMO_NITROGENSHELL, "Nitro_Deselect")
			RIOT A 1 A_Lower
			RIOT A 0 A_Lower
		Loop
		Nitro_Deselect:
			RIO2 A 1 A_Lower
			RIO2 A 0 A_Lower
		Loop
		Explo_Deselect:
			RIO3 A 1 A_Lower
			RIO3 A 0 A_Lower
		Loop
		
		
		Select:
			TNT1 A 0 A_GiveInventory("H_WeaponSlot4", 1)
			TNT1 A 0 ACS_NamedExecuteWithResult("DND Weapon Damage Cache", DND_DMGID_0, 12, 0, DND_WEAPON_RIOTCANNON)
			TNT1 A 0 ACS_NamedExecuteWithResult("DND Weapon Damage Cache", DND_DMGID_1, 15, 0, DND_WEAPON_RIOTCANNON)
			TNT1 A 0 ACS_NamedExecuteWithResult("DND Weapon Damage Cache", DND_DMGID_2, 8, 4 | (6 << 16), DND_WEAPON_RIOTCANNON)
	    SelectLoop:
			TNT1 A 0 A_JumpIfInventory("SpecialAmmoMode_4", AMMO_EXPLOSIVESHELL, "Explo_Select")
			TNT1 A 0 A_JumpIfInventory("SpecialAmmoMode_4", AMMO_NITROGENSHELL, "Nitro_Select")
			RIOT A 1 A_Raise
			RIOT A 0 A_Raise
		Loop
		Nitro_Select:
			RIO2 A 1 A_Raise
			RIO2 A 0 A_Raise
		Loop
		Explo_Select:
			RIO3 A 1 A_Raise
			RIO3 A 0 A_Raise
		Loop
		
		
		Fire:
			TNT1 A 0 A_JumpIfInventory("RiotGunFireMode", 1, "Fire2")
			TNT1 A 0 A_JumpIfInventory("SpecialAmmoMode_4", AMMO_EXPLOSIVESHELL, "Explo_Ready2b")
			TNT1 A 0 A_JumpIfInventory("SpecialAmmoMode_4", AMMO_NITROGENSHELL, "Nitro_Ready2b")
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_RIOTCANNON, 1, 0, DND_CFW_DONTCHECKEQUALITY), "FireConfirmed")
			RIOT A 3 A_WeaponReady(WRF_ALLOWRELOAD | WRF_NOFIRE | WRF_NOSWITCH)
		Goto Reload
		Nitro_Ready2b:
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_RIOTCANNON, 1, 0, DND_CFW_DONTCHECKEQUALITY), "Nitro_Fire")
			RIO2 A 3 A_WeaponReady(WRF_ALLOWRELOAD | WRF_NOFIRE | WRF_NOSWITCH)
		Goto Reload
		Explo_Ready2b:
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_RIOTCANNON, 1, 0, DND_CFW_DONTCHECKEQUALITY), "Explo_Fire")
			RIO3 A 3 A_WeaponReady(WRF_ALLOWRELOAD | WRF_NOFIRE | WRF_NOSWITCH)
		Goto Reload
		
		FireConfirmed:
		FireCont:
			RIOT B 1 Bright ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_RIOTCANNON, DND_ATK_SECONDARY, DND_AMMOSLOT_MAGAZINE | (DND_MAGAZINE_RIOTGUNCLIP << 16), DND_ATF_CANFIRECIRCLE)
			RIOT B 0 A_AlertMonsters
			RIOT C 1 Bright A_SetPitch(pitch - 0.05) 
			RIOT D 1 A_SetPitch(pitch - 0.1) 
			RIOT D 0 A_SpawnItemEx("RiotGunCasingSpawner",cos(-pitch)*30-8,11,25+sin(-pitch)*30)
			RIOT D 1 offset(7, 39) A_SetPitch(pitch - 0.15) 
			RIOT D 1 offset(15,47) A_SetPitch(pitch - 0.2) 
			RIOT D 1 offset(7, 39) A_SetPitch(pitch - 0.25)
			RIOT D 1 offset(-1, 32) 

			RIOT D 1 offset(-1, 32) A_SetPitch(pitch + 0.25)
			RIOT D 1 offset(-1, 32) A_SetPitch(pitch + 0.2)
			RIOT D 1 offset(-1, 32) A_SetPitch(pitch + 0.15)
			RIOT D 1 offset(-1, 32) A_SetPitch(pitch + 0.1)
			RIOT D 1 offset(-1, 32) A_SetPitch(pitch + 0.05)

			RIOT E 1 offset(-1, 32)
			RIOT F 5 offset(-1, 32)
			RIOT A 5 offset(-1, 32)
			TNT1 A 0 A_JumpIfInventory("RiotgunClip", 1, "Finish")
		Goto Reload
		Nitro_Fire:
			RIO2 B 1 Bright ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_RIOTCANNON, DND_ATK_SECONDARY, DND_AMMOSLOT_MAGAZINE | (DND_MAGAZINE_RIOTGUNCLIP << 16), DND_ATF_CANFIRECIRCLE)
			RIO2 B 0 A_AlertMonsters
			RIO2 C 1 Bright A_SetPitch(pitch - 0.05) 
			RIO2 D 1 A_SetPitch(pitch - 0.1) 
			RIO2 D 0 A_SpawnItemEx("RiotgunCasingSpawner_Nitro",cos(-pitch)*30-8,11,25+sin(-pitch)*30)
			RIO2 D 1 offset(7, 39) A_SetPitch(pitch - 0.15) 
			RIO2 D 1 offset(15,47) A_SetPitch(pitch - 0.2) 
			RIO2 D 1 offset(7, 39) A_SetPitch(pitch - 0.25)
			RIO2 D 1 offset(-1, 32) 

			RIO2 D 1 offset(-1, 32) A_SetPitch(pitch + 0.25)
			RIO2 D 1 offset(-1, 32) A_SetPitch(pitch + 0.2)
			RIO2 D 1 offset(-1, 32) A_SetPitch(pitch + 0.15)
			RIO2 D 1 offset(-1, 32) A_SetPitch(pitch + 0.1)
			RIO2 D 1 offset(-1, 32) A_SetPitch(pitch + 0.05)

			RIOT E 1 offset(-1, 32)
			RIO2 E 5 offset(-1, 32)
			RIO2 A 5 offset(-1, 32)
			TNT1 A 0 A_JumpIfInventory("RiotgunClip", 1, "Finish_Nitro")
		Goto Reload
		Explo_Fire:
			RIO3 B 1 Bright ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_RIOTCANNON, DND_ATK_SECONDARY, DND_AMMOSLOT_MAGAZINE | (DND_MAGAZINE_RIOTGUNCLIP << 16), DND_ATF_CANFIRECIRCLE)
			RIO3 B 0 A_AlertMonsters
			RIO3 C 1 Bright A_SetPitch(pitch - 0.05) 
			RIO3 D 1 A_SetPitch(pitch - 0.1) 
			RIO3 D 0 A_SpawnItemEx("RiotgunCasingSpawner_Explo",cos(-pitch)*30-8,11,25+sin(-pitch)*30)
			RIO3 D 1 offset(7, 39) A_SetPitch(pitch - 0.15) 
			RIO3 D 1 offset(15,47) A_SetPitch(pitch - 0.2) 
			RIO3 D 1 offset(7, 39) A_SetPitch(pitch - 0.25)
			RIO3 D 1 offset(-1, 32) 

			RIO3 D 1 offset(-1, 32) A_SetPitch(pitch + 0.25)
			RIO3 D 1 offset(-1, 32) A_SetPitch(pitch + 0.2)
			RIO3 D 1 offset(-1, 32) A_SetPitch(pitch + 0.15)
			RIO3 D 1 offset(-1, 32) A_SetPitch(pitch + 0.1)
			RIO3 D 1 offset(-1, 32) A_SetPitch(pitch + 0.05)

			RIOT E 1 offset(-1, 32)
			RIO3 E 5 offset(-1, 32)
			RIO3 A 5 offset(-1, 32)
			TNT1 A 0 A_JumpIfInventory("RiotgunClip", 1, "Finish_Explo")
		Goto Reload
		
		
		Finish:
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_RIOTCANNON, 2, 0, DND_CFW_DONTCHECKEQUALITY), "FireCont")
			RIOT A 2
		Goto Ready
		Finish_Nitro:
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_RIOTCANNON, 2, 0, DND_CFW_DONTCHECKEQUALITY), "Nitro_Fire")
			RIO2 A 2
		Goto Ready
		Finish_Explo:
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_RIOTCANNON, 2, 0, DND_CFW_DONTCHECKEQUALITY), "Explo_Fire")
			RIO3 A 2
		Goto Ready
		

		Fire2:
			TNT1 A 0 A_JumpIfInventory("SpecialAmmoMode_4", AMMO_EXPLOSIVESHELL, "Explo_Ready3")
			TNT1 A 0 A_JumpIfInventory("SpecialAmmoMode_4", AMMO_NITROGENSHELL, "Nitro_Ready3")
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_RIOTCANNON, 1, 0, DND_CFW_DONTCHECKEQUALITY), "FireConfirmed2")
			RIOT G 3 A_WeaponReady(WRF_ALLOWRELOAD | WRF_NOFIRE | WRF_NOSWITCH)
		Goto Reload2
		Nitro_Ready3:
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_RIOTCANNON, 1, 0, DND_CFW_DONTCHECKEQUALITY), "Nitro_Fire2")
			RIO2 F 3 A_WeaponReady(WRF_ALLOWRELOAD | WRF_NOFIRE | WRF_NOSWITCH)
		Goto Reload2
		Explo_Ready3:
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_RIOTCANNON, 1, 0, DND_CFW_DONTCHECKEQUALITY), "Explo_Fire2")
			RIO3 F 3 A_WeaponReady(WRF_ALLOWRELOAD | WRF_NOFIRE | WRF_NOSWITCH)
		Goto Reload2
		FireConfirmed2:
		FireCont2:
			RIOT H 2 Bright ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_RIOTCANNON, DND_ATK_SECONDARY | DND_ATK_OTHER_DIR, DND_AMMOSLOT_MAGAZINE | (DND_MAGAZINE_RIOTGUNCLIP << 16), DND_ATF_CANFIRECIRCLE)
			TNT1 A 0 A_AlertMonsters
			RIOT D 0 A_SpawnItemEx("RiotGunCasingSpawner",cos(-pitch)*30-8,11,25+sin(-pitch)*30)
			RIOT G 1 offset(7, 39) A_SetPitch(pitch - 0.15) 
			RIOT G 1 offset(3, 35) A_SetPitch(pitch - 0.2) 
			RIOT G 1 offset(0, 32) A_SetPitch(pitch + 0.35) 
			TNT1 A 0 A_JumpIfInventory("RiotgunClip", 1, "Cont2")
		Goto Reload2
		Nitro_Fire2:
			RIO2 G 2 Bright ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_RIOTCANNON, DND_ATK_SECONDARY | DND_ATK_OTHER_DIR, DND_AMMOSLOT_MAGAZINE | (DND_MAGAZINE_RIOTGUNCLIP << 16), DND_ATF_CANFIRECIRCLE)
			TNT1 A 0 A_AlertMonsters
			RIOT D 0 A_SpawnItemEx("RiotgunCasingSpawner_Nitro",cos(-pitch)*30-8,11,25+sin(-pitch)*30)
			RIO2 F 1 offset(7, 39) A_SetPitch(pitch - 0.15) 
			RIO2 F 1 offset(3, 35) A_SetPitch(pitch - 0.2) 
			RIO2 F 1 offset(0, 32) A_SetPitch(pitch + 0.35) 
			TNT1 A 0 A_JumpIfInventory("RiotgunClip", 1, "Cont2_Nitro")
		Goto Reload2
		Explo_Fire2:
			RIO3 G 2 Bright ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_RIOTCANNON, DND_ATK_SECONDARY | DND_ATK_OTHER_DIR, DND_AMMOSLOT_MAGAZINE | (DND_MAGAZINE_RIOTGUNCLIP << 16), DND_ATF_CANFIRECIRCLE)
			TNT1 A 0 A_AlertMonsters
			RIO3 D 0 A_SpawnItemEx("RiotgunCasingSpawner_Explo",cos(-pitch)*30-8,11,25+sin(-pitch)*30)
			RIO3 F 1 offset(7, 39) A_SetPitch(pitch - 0.15) 
			RIO3 F 1 offset(3, 35) A_SetPitch(pitch - 0.2) 
			RIO3 F 1 offset(0, 32) A_SetPitch(pitch + 0.35) 
			TNT1 A 0 A_JumpIfInventory("RiotgunClip", 1, "Cont2_Explo")
		Goto Reload2
		
		
		Cont2:
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_RIOTCANNON, 2, 0, DND_CFW_DONTCHECKEQUALITY), "FireCont2")
			RIOT G 1
		Goto Ready
		Cont2_Nitro:
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_RIOTCANNON, 2, 0, DND_CFW_DONTCHECKEQUALITY), "Nitro_Fire2")
			RIO2 F 1
		Goto Ready
		Cont2_Explo:
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_RIOTCANNON, 2, 0, DND_CFW_DONTCHECKEQUALITY), "Explo_Fire2")
			RIO3 F 1
		Goto Ready
		
		
		
		Reload:
			RIOT A 0 A_JumpIfInventory("RiotGunFireMode", 1, "Reload2")
			// put frame names here
			RIO3 A 0 A_JumpIfInventory("SpecialAmmoMode_4", AMMO_EXPLOSIVESHELL, "Explo_Reload")
			RIO2 A 0 A_JumpIfInventory("SpecialAmmoMode_4", AMMO_NITROGENSHELL, "Nitro_Reload")
			RIOT A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_RIOTCANNON, 0), "ContinueReload")
		Goto ContinueReload
		Nitro_Reload:
			RIO2 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_RIOTCANNON, 4), "ContinueReload_Nitro")
			RIO2 A 3 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
		Goto ModeSwitch
		Explo_Reload:
			RIO3 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_RIOTCANNON, 3), "ContinueReload_Explo")
			RIO3 A 3 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
		Goto ModeSwitch
		
		
		ContinueReload:
			"####" "#" 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
			"####" "#" 0 ACS_NamedExecuteAlways("DND Riotgun Decide")
			"####" "#" 0 A_JumpIfInventory("RiotgunReloadModeDecide", 2, "ModeSwitch")
			"####" "#" 0 A_JumpIfInventory("RiotgunReloadModeDecide", 1, "RCR1")
			"####" "#" 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
		Goto Ready
		RCR1:
			RIOT A 1 offset(0, 50)
			RIOT A 1 offset(0, 59)
			RIOT A 0 A_playsound("Weapons/RiotgunUp")
			TNT1 A 0 A_TakeInventory("RiotgunReloadModeDecide", 99)
			RIOT A 1 offset(0, 68)
			TNT1 A 0 A_JumpIfInventory("Ability_Reloader", 1, "ReloadFaster1")
			RIOT A 16 offset (0, 71)
		ContinueRest1:
			TNT1 A 0 ACS_NamedExecuteAlways("DnD Handle Reload", 0, DND_WEAPON_RIOTCANNON, 0, DND_RWF_NOTAKEAMMO)
			RIOT A 1 offset(0, 62)
			RIOT A 1 offset(0, 44)
			RIOT A 1 offset(0, 35)
			RIOT A 1 offset(0, 32)
			TNT1 A 0 A_playsound("Weapons/RiotgunLoad")
			TNT1 A 0 A_Refire("FireCont")
		Goto Ready
		ReloadFaster1:
			RIOT A 6 Offset(0, 71)
		Goto ContinueRest1
		// ------------------------------
		ContinueReload_Nitro:
			"####" "#" 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
			"####" "#" 0 ACS_NamedExecuteAlways("DND Riotgun Decide")
			"####" "#" 0 A_JumpIfInventory("RiotgunReloadModeDecide", 2, "ModeSwitch")
			"####" "#" 0 A_JumpIfInventory("RiotgunReloadModeDecide", 1, "RCR2")
			"####" "#" 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
		Goto Ready
		RCR2:
			RIO2 A 1 offset(0, 50)
			RIO2 A 1 offset(0, 59)
			RIOT A 0 A_playsound("Weapons/RiotgunUp")
			TNT1 A 0 A_TakeInventory("RiotgunReloadModeDecide", 99)
			RIO2 A 1 offset(0, 68)
			TNT1 A 0 A_JumpIfInventory("Ability_Reloader", 1, "ReloadFaster2")
			RIO2 A 16 offset (0, 71)
		ContinueRest2:
			TNT1 A 0 ACS_NamedExecuteAlways("DnD Handle Reload", 0, DND_WEAPON_RIOTCANNON, 2, DND_RWF_NOTAKEAMMO)
			RIO2 A 1 offset(0, 62)
			RIO2 A 1 offset(0, 44)
			RIO2 A 1 offset(0, 35)
			RIO2 A 1 offset(0, 32)
			TNT1 A 0 A_playsound("Weapons/RiotgunLoad")
			TNT1 A 0 A_Refire("Nitro_Fire")
		Goto Ready
		ReloadFaster2:
			RIO2 A 6 Offset(0, 71)
		Goto ContinueRest2
		// ------------------------------
		ContinueReload_Explo:
			"####" "#" 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
			"####" "#" 0 ACS_NamedExecuteAlways("DND Riotgun Decide")
			"####" "#" 0 A_JumpIfInventory("RiotgunReloadModeDecide", 2, "ModeSwitch")
			"####" "#" 0 A_JumpIfInventory("RiotgunReloadModeDecide", 1, "RCR3")
			"####" "#" 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
		Goto Ready
		RCR3:
			RIO3 A 1 offset(0, 50)
			RIO3 A 1 offset(0, 59)
			RIO3 A 0 A_playsound("Weapons/RiotgunUp")
			TNT1 A 0 A_TakeInventory("RiotgunReloadModeDecide", 99)
			RIO3 A 1 offset(0, 68)
			TNT1 A 0 A_JumpIfInventory("Ability_Reloader", 1, "ReloadFaster3")
			RIO3 A 16 offset (0, 71)
		ContinueRest3:
			TNT1 A 0 ACS_NamedExecuteAlways("DnD Handle Reload", 0, DND_WEAPON_RIOTCANNON, 1, DND_RWF_NOTAKEAMMO)
			RIO3 A 1 offset(0, 62)
			RIO3 A 1 offset(0, 44)
			RIO3 A 1 offset(0, 35)
			RIO3 A 1 offset(0, 32)
			TNT1 A 0 A_playsound("Weapons/RiotgunLoad")
			TNT1 A 0 A_Refire("Explo_Fire")
		Goto Ready
		ReloadFaster3:
			RIO3 A 6 Offset(0, 71)
		Goto ContinueRest3
		
		
		Reload2:
			RIO3 F 0 A_JumpIfInventory("SpecialAmmoMode_4", AMMO_EXPLOSIVESHELL, "Explo_Reload2")
			RIO2 F 0 A_JumpIfInventory("SpecialAmmoMode_4", AMMO_NITROGENSHELL, "Nitro_Reload2")
			RIOT G 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_RIOTCANNON, 0), "ContinueReload2")
		Goto ContinueReload2
		ContinueReload2:
			"####" "#" 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
			"####" "#" 0 ACS_NamedExecuteAlways("DND Riotgun Decide")
			"####" "#" 0 A_JumpIfInventory("RiotgunReloadModeDecide", 2, "MS_Alt")
			"####" "#" 0 A_JumpIfInventory("RiotgunReloadModeDecide", 1, "RACR1")
			"####" "#" 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
		Goto Ready
		RACR1:
			RIOT G 1 offset(1, 50)
			RIOT G 1 offset(1, 59)
			RIOT G 0 A_playsound("Weapons/RiotgunUp")
			TNT1 A 0 A_TakeInventory("RiotgunReloadModeDecide", 99)
			RIOT G 1 offset(1, 68)
			TNT1 A 0 A_JumpIfInventory("Ability_Reloader", 1, "ReloadFasterAlt1")
			RIOT G 16 offset(1, 71)
		ContinueRestAlt1:
			TNT1 A 0 ACS_NamedExecuteAlways("DnD Handle Reload", 0, DND_WEAPON_RIOTCANNON, 0, DND_RWF_NOTAKEAMMO)
			RIOT G 1 offset(1, 62)
			RIOT G 1 offset(1, 44)
			RIOT G 1 offset(1, 35)
			RIOT G 1 offset(1, 32)
			TNT1 A 0 A_playsound("Weapons/RiotgunLoad")
			TNT1 A 0 A_Refire("FireCont2")
		Goto Ready
		ReloadFasterAlt1:
			RIOT G 6 Offset(1, 71)
		Goto ContinueRestAlt1
		// ------------------------------
		Nitro_Reload2:
			RIO2 F 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_RIOTCANNON, 4), "Nitro_ContinueReload2")
		Goto Nitro_Failed2
		Nitro_ContinueReload2:
			"####" "#" 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
			"####" "#" 0 ACS_NamedExecuteAlways("DND Riotgun Decide")
			"####" "#" 0 A_JumpIfInventory("RiotgunReloadModeDecide", 2, "MS_Alt")
			"####" "#" 0 A_JumpIfInventory("RiotgunReloadModeDecide", 1, "RACR2")
			"####" "#" 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
		Goto Ready
		RACR2:
			RIO2 F 1 offset(1, 50)
			RIO2 F 1 offset(1, 59)
			RIO2 F 0 A_playsound("Weapons/RiotgunUp")
			TNT1 A 0 A_TakeInventory("RiotgunReloadModeDecide", 99)
			RIO2 F 1 offset(1, 68)
			TNT1 A 0 A_JumpIfInventory("Ability_Reloader", 1, "ReloadFasterAlt2")
			RIO2 F 16 offset(1, 71)
		ContinueRestAlt2:
			TNT1 A 0 ACS_NamedExecuteAlways("DnD Handle Reload", 0, DND_WEAPON_RIOTCANNON, 2, DND_RWF_NOTAKEAMMO)
			RIO2 F 1 offset(1, 62)
			RIO2 F 1 offset(1, 44)
			RIO2 F 1 offset(1, 35)
			RIO2 F 1 offset(1, 32)
			TNT1 A 0 A_playsound("Weapons/RiotgunLoad")
			TNT1 A 0 A_Refire("Nitro_Fire2")
		Goto Ready
		ReloadFasterAlt2:
			RIO2 F 6 Offset(1, 71)
		Goto ContinueRestAlt2
		// ------------------------------
		Explo_Reload2:
			RIO3 F 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_RIOTCANNON, 3), "Explo_ContinueReload2")
		Goto Explo_Failed2
		Explo_ContinueReload2:
			"####" "#" 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
			"####" "#" 0 ACS_NamedExecuteAlways("DND Riotgun Decide")
			"####" "#" 0 A_JumpIfInventory("RiotgunReloadModeDecide", 2, "MS_Alt")
			"####" "#" 0 A_JumpIfInventory("RiotgunReloadModeDecide", 1, "RACR3")
			"####" "#" 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
		Goto Ready
		RACR3:
			RIO3 F 1 offset(1, 50)
			RIO3 F 1 offset(1, 59)
			RIO3 F 0 A_playsound("Weapons/RiotgunUp")
			TNT1 A 0 A_TakeInventory("RiotgunReloadModeDecide", 99)
			RIO3 F 1 offset(1, 68)
			TNT1 A 0 A_JumpIfInventory("Ability_Reloader", 1, "ReloadFasterAlt3")
			RIO3 F 16 offset(1, 71)
		ContinueRestAlt3:
			TNT1 A 0 ACS_NamedExecuteAlways("DnD Handle Reload", 0, DND_WEAPON_RIOTCANNON, 1, DND_RWF_NOTAKEAMMO)
			RIO3 F 1 offset(1, 62)
			RIO3 F 1 offset(1, 44)
			RIO3 F 1 offset(1, 35)
			RIO3 F 1 offset(1, 32)
			TNT1 A 0 A_playsound("Weapons/RiotgunLoad")
			TNT1 A 0 A_Refire("Explo_Fire2")
		Goto Ready
		ReloadFasterAlt3:
			RIO3 F 6 Offset(1, 71)
		Goto ContinueRestAlt3
		
		
		Failed_Check:
			TNT1 A 0 A_JumpIfInventory("RiotgunFireMode", 1, "Failed2_Check")
		Goto Failed
		Failed:
			TNT1 A 0 A_JumpIfInventory("SpecialAmmoMode_4", AMMO_EXPLOSIVESHELL, "Explo_Failed")
			TNT1 A 0 A_JumpIfInventory("SpecialAmmoMode_4", AMMO_NITROGENSHELL, "Nitro_Failed")
			RIOT A 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
		Goto Ready
		Nitro_Failed:
			RIO2 A 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
		Goto Ready
		Explo_Failed:
			RIO3 A 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
		Goto Ready
		
		
		Failed2_Check:
			TNT1 A 0 A_JumpIfInventory("SpecialAmmoMode_4", AMMO_EXPLOSIVESHELL, "Explo_Failed2")
			TNT1 A 0 A_JumpIfInventory("SpecialAmmoMode_4", AMMO_NITROGENSHELL, "Nitro_Failed2")
		Goto Failed2
		Failed2:
			RIOT G 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
		Goto Ready2Norm
		Nitro_Failed2:
			RIO2 F 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
		Goto Nitro_Ready2
		Explo_Failed2:
			RIO3 F 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
		Goto Explo_Ready2
		
		
		AltFire:
			"####" "#" 0 A_JumpIfInventory("RiotgunAltCooldown", 1, "FailAlt")
			"####" "#" 0 A_JumpIfInventory("RiotGunFireMode", 1, "AltFire2")
			"####" "#" 0 A_JumpIfInventory("SpecialAmmoMode_4", AMMO_EXPLOSIVESHELL, "Explo_AltFire")
			"####" "#" 0 A_JumpIfInventory("SpecialAmmoMode_4", AMMO_NITROGENSHELL, "Nitro_AltFire")
			RIOT G 1 A_WeaponReady(WRF_NOFIRE)
			RIOT G 0 A_playsound("Weapons/RiotgunLoad")
			TNT1 A 0 A_GiveInventory("RiotgunAltCooldown", 1)
			RIOT G 0 A_GiveInventory("RiotGunFireMode", 1)
			RIOT G 3 A_WeaponReady(WRF_NOFIRE)
		Goto Ready
		Nitro_AltFire:
			RIO2 F 1 A_WeaponReady(WRF_NOFIRE)
			RIO2 F 0 A_playsound("Weapons/RiotgunLoad")
			TNT1 A 0 A_GiveInventory("RiotgunAltCooldown", 1)
			RIO2 F 0 A_GiveInventory("RiotGunFireMode", 1)
			RIO2 F 3 A_WeaponReady(WRF_NOFIRE)
		Goto Ready
		Explo_AltFire:
			RIO3 F 1 A_WeaponReady(WRF_NOFIRE)
			RIO3 F 0 A_playsound("Weapons/RiotgunLoad")
			TNT1 A 0 A_GiveInventory("RiotgunAltCooldown", 1)
			RIO3 F 0 A_GiveInventory("RiotGunFireMode", 1)
			RIO3 F 3 A_WeaponReady(WRF_NOFIRE)
		Goto Ready
		FailAlt:
			"####" "#" 1 A_WeaponReady(WRF_NOFIRE)
		Goto Ready
		
		
		AltFire2:
			"####" "#" 0 A_JumpIfInventory("SpecialAmmoMode_4", AMMO_EXPLOSIVESHELL, "Explo_AltFire2")
			"####" "#" 0 A_JumpIfInventory("SpecialAmmoMode_4", AMMO_NITROGENSHELL, "Nitro_AltFire2")
			RIOT A 1 A_WeaponReady(WRF_NOFIRE)
			RIOT A 0 A_TakeInventory("RiotGunFireMode", 1)
			TNT1 A 0 A_GiveInventory("RiotgunAltCooldown", 1)
			RIOT A 0 A_playsound("Weapons/RiotgunLoad")
			RIOT A 3 A_WeaponReady(WRF_NOFIRE)
		Goto Ready
		Nitro_AltFire2:
			RIO2 A 1 A_WeaponReady(WRF_NOFIRE)
			RIO2 A 0 A_TakeInventory("RiotGunFireMode", 1)
			TNT1 A 0 A_GiveInventory("RiotgunAltCooldown", 1)
			RIO2 A 0 A_playsound("Weapons/RiotgunLoad")
			RIO2 A 3 A_WeaponReady(WRF_NOFIRE)
		Goto Ready
		Explo_AltFire2:
			RIO3 A 1 A_WeaponReady(WRF_NOFIRE)
			RIO3 A 0 A_TakeInventory("RiotGunFireMode", 1)
			TNT1 A 0 A_GiveInventory("RiotgunAltCooldown", 1)
			RIO3 A 0 A_playsound("Weapons/RiotgunLoad")
			RIO3 A 3 A_WeaponReady(WRF_NOFIRE)
		Goto Ready
		
		
		ModeSwitch:
			"####" "#" 1 A_WeaponReady(WRF_NOSWITCH | WRF_NOFIRE)
			"####" "#" 0 A_JumpIfInventory("RiotGunFireMode", 1, "MS_Alt")
			"####" "#" 0 A_JumpIfInventory("SpecialAmmoMode_4", AMMO_EXPLOSIVESHELL, "Explo_MS")
			"####" "#" 0 A_JumpIfInventory("SpecialAmmoMode_4", AMMO_NITROGENSHELL, "Nitro_MS")
			RIOT A 1 A_WeaponReady(WRF_NOSWITCH | WRF_NOFIRE)
		Goto ModeSwitchCont
		Nitro_MS:
			RIO2 A 1 A_WeaponReady(WRF_NOSWITCH | WRF_NOFIRE)
		Goto ModeSwitchCont
		Explo_MS:
			RIO3 A 1 A_WeaponReady(WRF_NOSWITCH | WRF_NOFIRE)
		Goto ModeSwitchCont
		MS_Alt:
			"####" "#" 0 A_JumpIfInventory("SpecialAmmoMode_4", AMMO_EXPLOSIVESHELL, "Explo_MS_Alt")
			"####" "#" 0 A_JumpIfInventory("SpecialAmmoMode_4", AMMO_NITROGENSHELL, "Nitro_MS_Alt")
			RIOT G 1 A_WeaponReady(WRF_NOSWITCH | WRF_NOFIRE)
		Goto ModeSwitchCont
		Nitro_MS_Alt:
			RIO2 F 1 A_WeaponReady(WRF_NOSWITCH | WRF_NOFIRE)
		Goto ModeSwitchCont
		Explo_MS_Alt:
			RIO3 F 1 A_WeaponReady(WRF_NOSWITCH | WRF_NOFIRE)
		Goto ModeSwitchCont
		ModeSwitchCont:
			"####" "#" 0 A_JumpIf(ACS_ExecuteWithResult(994, 13), "DoSwitch")
			"####" "#" 1 A_WeaponReady(WRF_NOSWITCH | WRF_NOFIRE)
		Goto FailSwitch
		DoSwitch:
			"----" "#" 1 A_WeaponReady(WRF_NOSWITCH | WRF_NOFIRE)
			"----" "#" 0 A_JumpIfInventory("AmmoSwitchCooldown", 1, "Failed_Check")
			"----" "#" 1 Offset (1, 50)
			"----" "#" 0 A_playsound("Weapons/RiotgunUp")
			"----" "#" 0 A_TakeInventory("RiotgunClip", 0)
			"----" "#" 0 A_TakeInventory("RiotgunReloadModeDecide", 99)
			"----" "#" 1 offset(1, 59)
			"----" "#" 0 A_GiveInventory("AmmoSwitchCooldown", 1)
			"----" "#" 0 ACS_ExecuteAlways(DND_SPECIALAMMO_SCRIPT, 0, AMMO_TYPE_SHELL2, SPWEP_MG)
			"----" "#" 1 offset(1, 68)
			"----" "#" 0 ACS_ExecuteAlways(DND_SPECIALAMMOMSG_SCRIPT, 0)
			"----" "#" 2 offset(1, 71)
			"----" "#" 0 ACS_ExecuteAlways(998, 0, 4, 1, -1)
			"----" "#" 1 offset(1, 71)
			TNT1 A 0 A_JumpIfInventory("RiotGunFireMode", 1, "RiseUp_Alt")
			TNT1 A 0 A_JumpIfInventory("SpecialAmmoMode_4", AMMO_EXPLOSIVESHELL, "Explo_Riseup")
			TNT1 A 0 A_JumpIfInventory("SpecialAmmoMode_4", AMMO_NITROGENSHELL, "Nitro_Riseup")
			TNT1 A 0 A_JumpIfInventory("Ability_Reloader", 1, "RiseUpFaster1")
			RIOT A 12 Offset(1, 71)
		Goto RiseUpFromSwitch
		RiseUpFaster1:
			RIOT A 6 Offset(1, 71)
		Goto RiseupFromSwitch
		
		
		Nitro_Riseup:
			TNT1 A 0 A_JumpIfInventory("Ability_Reloader", 1, "RiseUpFaster2")
			RIO2 A 13 Offset(1, 71)
		Goto RiseUpFromSwitch
		RiseUpFaster2:
			RIO2 A 6 Offset(1, 71)
		Goto RiseUpFromSwitch
		
		
		Explo_Riseup:
			TNT1 A 0 A_JumpIfInventory("Ability_Reloader", 1, "RiseUpFaster3")
			RIO3 A 13 Offset(1, 71)
		Goto RiseUpFromSwitch
		RiseUpFaster3:
			RIO3 A 6 Offset(1, 71)
		Goto RiseUpFromSwitch
		
		
		RiseUp_Alt:
			TNT1 A 0 A_JumpIfInventory("SpecialAmmoMode_4", AMMO_EXPLOSIVESHELL, "Explo_Riseup_Alt")
			TNT1 A 0 A_JumpIfInventory("SpecialAmmoMode_4", AMMO_NITROGENSHELL, "Nitro_Riseup_Alt")
			TNT1 A 0 A_JumpIfInventory("Ability_Reloader", 1, "RiseUpFasterAlt1")
			RIOT G 13 Offset(1, 71)
		Goto RiseUpFromSwitch
		RiseUpFasterAlt1:
			RIOT G 6 Offset(1, 71)
		Goto RiseUpFromSwitch
		
		
		Nitro_Riseup_Alt:
			TNT1 A 0 A_JumpIfInventory("Ability_Reloader", 1, "RiseUpFasterAlt2")
			RIO2 F 13 Offset(1, 71)
		Goto RiseUpFromSwitch
		RiseUpFasterAlt2:
			RIO2 F 6 Offset(1, 71)
		Goto RiseUpFromSwitch
		
		
		Explo_Riseup_Alt:
			TNT1 A 0 A_JumpIfInventory("Ability_Reloader", 1, "RiseUpFasterAlt3")
			RIO3 F 13 Offset(1, 71)
		Goto RiseUpFromSwitch
		RiseUpFasterAlt3:
			RIO3 F 6 Offset(1, 71)
		Goto RiseUpFromSwitch
		
		
		RiseUpFromSwitch:
			"----" "#" 1 offset(1, 62)
			"----" "#" 1 offset(1, 44)
			"----" "#" 1 offset(1, 35)
			"----" "#" 1 offset(1, 32)
		Goto Ready
		FailSwitch:
			"----" "#" 1 A_WeaponReady(WRF_NOSWITCH | WRF_NOFIRE)
		Goto Ready
		
		
		
		Spawn:
			RIOT I -1
		Stop
	}
}

const float riot_spreadx = 3.6;
const float riot_spready = 3.6;
const float riot_spreadx2 = 7.2;
const float riot_spready2 = 7.2;

// 2 for mode switch, 1 for reload
Actor RiotgunReloadModeDecide : Inventory {
	inventory.maxamount 2
}

Actor RiotgunAltCooldown : PowerDamage {
	powerup.duration 9
	damagefactor "normal", 1.0
}

Actor RiotgunPuff : DnD_BasePuff {
	Stamina 4096
	States {
		HitNoBlood:
		Goto Crash
	}
}

Actor RiotgunFireMode : DnD_Boolean { }

Actor RiotGunCasingSpawner {
	+NOCLIP
	+MISSILE
	+NOBLOCKMAP
	+NOGRAVITY
	+DROPOFF
	+NOTELEPORT
	+CLIENTSIDEONLY
	States {
		Spawn:
			TNT1 A 1 NoDelay A_CustomMissile("RiotGunCasing",0,0,random(0,360),2,random(100,80))
		Stop
	}
}

Actor RiotgunCasingSpawner_Nitro : RiotgunCasingSpawner {
	States {
		Spawn:
			TNT1 A 1 NoDelay A_CustomMissile("RiotGunCasing_Nitro",0,0,random(0,360),2,random(100,80))
		Stop
	}
}

Actor RiotgunCasingSpawner_Explo : RiotgunCasingSpawner {
	States {
		Spawn:
			TNT1 A 1 NoDelay A_CustomMissile("RiotGunCasing_Explo",0,0,random(0,360),2,random(100,80))
		Stop
	}
}

Actor RiotGunCasing {
	Height 2
	Radius 2
	Speed 4
	Scale 0.15	
	BounceFactor 0.4
	Gravity 0.23
	Projectile
	+DOOMBOUNCE
	+DROPOFF
	+NOTELEPORT
	-NOGRAVITY
	+CLIENTSIDEONLY
	Seesound "Weapons/ShellCasing"
	States
	{
	Spawn:
		MGCA A 0 NoDelay A_Jump(256,1,2,3,4,5,6,7)
		MGCA ABCDEFGH 2 
	Goto Spawn+2
	Death:
		MGCA A 0 A_Playsound("Weapons/ShellCasing")
		MGCA A 0 A_Jump(256, "Death1", "Death2", "Death3", "Death4","Death5","Death6","Death7","Death8")
	stop
	Death1:
		MGCA A 600
	Stop
	Death2:
		MGCA B 600
	Stop
	Death3:
		MGCA C 600
	Stop
	Death4:
		MGCA D 600
	Stop
	Death5:
		MGCA E 600
	Stop
	Death6:
		MGCA F 600
	Stop
	Death7:
		MGCA G 600
	Stop
	Death8:
		MGCA H 600
	Stop
	}
}

Actor RiotgunCasing_Nitro : RiotGunCasing {
	Translation "160:167=%[0.00,0.00,0.00]:[0.00,1.06,1.45]", "64:79=%[0.00,0.00,0.00]:[0.00,1.06,1.45]", "236:239=%[0.00,0.00,0.00]:[0.00,1.06,1.45]", "47:47=%[0.00,0.00,0.00]:[0.00,1.06,1.45]", "168:191=%[0.00,0.00,0.00]:[1.43,1.43,1.43]", "224:235=%[0.00,0.00,0.00]:[0.00,1.06,1.45]"
}

Actor RiotgunCasing_Explo : RiotgunCasing {
	Translation "0:255=%[0.00,0.00,0.00]:[1.14,1.14,1.14]"
}

Actor NitroShellPuff : DnD_BasePuff {
	Scale 0.35
	
	Stamina 4096
	
	States {
		Spawn:
		Crash:
		HitNoBlood:
			TNT1 AAAA 0
			TNT1 A 0 A_JumpIf(accuracy == DND_CRITTOKEN, "Crit")
			TNT1 AA 0 A_CustomMissile("NitroWind", 0, 0, frandom(0, 360), CMF_TRACKOWNER | CMF_AIMDIRECTION, frandom(0, 360))
		FinishAnim:
			TNT1 A 0 A_PlaySound("Weapons/glahit")
			D3FX GHI 4
			D3FX JK 3
			D3FX L 2
		stop
		Crit:
			TNT1 AA 0 A_CustomMissile("NitroWind_Crit", 0, 0, frandom(0, 360), CMF_TRACKOWNER | CMF_AIMDIRECTION, frandom(0, 360))
		Goto FinishAnim
	}
}

Actor NitroshellHandler : DnD_Activator {
	States {
		Pickup:
			TNT1 A 0 A_JumpIfInventory("NitroShell", 1, "Nothing")
			TNT1 A 0 ACS_ExecuteAlways(DND_SPECIALAMMOMSG_SCRIPT, 0, 1, AMMO_RIOTSHELL) // 0 is shell position
			TNT1 A 0 ACS_NamedExecuteAlways("DnD Force Damage Cache Recalculation", 0, -1)
			TNT1 A 0 A_TakeInventory("SpecialAmmoMode_4", 0)
			TNT1 A 0 A_GiveInventory("SpecialAmmoMode_4", AMMO_RIOTSHELL)
		Stop
		Nothing:
			TNT1 A 0
		Stop
	}
}

Actor ExplosiveShellHandler_Riot : DnD_Activator {
	States {
		Pickup:
			TNT1 A 0 A_JumpIfInventory("ExplodingShell", 1, "Nothing")
			TNT1 A 0 ACS_ExecuteAlways(DND_SPECIALAMMOMSG_SCRIPT, 0, 1, AMMO_RIOTSHELL) // 0 is shell position
			TNT1 A 0 ACS_NamedExecuteAlways("DnD Force Damage Cache Recalculation", 0, -1)
			TNT1 A 0 A_TakeInventory("SpecialAmmoMode_4", 0)
			TNT1 A 0 A_GiveInventory("SpecialAmmoMode_4", AMMO_RIOTSHELL)
		Stop
		Nothing:
			TNT1 A 0
		Stop
	}
}

Actor ExplodingShellPuff : DnD_BasePuff {
	Decal "Scorch"
	
	Stamina 4096
	
	States {
		Spawn:
			TNT1 AAAA 0
			TNT1 A 3 A_CustomMissile("ExplodingPuff_Riotgun", 0, 0, 0, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 3
		Stop
		Crash:
			TNT1 A 3 A_CustomMissile("ExplodingPuff_Riotgun", 0, 0, 0, CMF_AIMDIRECTION | CMF_TRACKOWNER)
		HitNoBlood:
			TNT1 A 3
		Stop
	}
}

Actor ExplodingPuff_Riotgun : ExplodingPuff {
	States {
		SpawnState:
			TNT1 A 0
		Death:
			DKSX M 2
			TNT1 A 0 A_SetUserVar("user_expdmg", 
				DND_WEAPON_RIOTCANNON |
				(DND_DMGID_2 << CACHE_SHIFT) |
				(DND_DAMAGETYPE_EXPLOSIVES << DTYPE_SHIFT) |
				(100 << DPCT_SHIFT)
			)
			TNT1 A 0 A_SetUserVar("user_expradius", 96 * (1.0 + ACS_NamedExecuteWithResult("DND Explosion Radius Retrieve", DND_USETARGET) * exprad_factor))
			TNT1 A 0 A_SetUserVar("user_fullexpradius", 0)
			TNT1 A 0 A_SetUserVar("user_expflags", DND_DAMAGEFLAG_BLASTSELF | DND_DAMAGEFLAG_HALFDMGSELF)
		Goto DoExplosionDamage
		ContinueFromExplosion:
			DKSX M 1
			TNT1 AA 0 A_SpawnItem("ExpShellSoundEmitter")
			TNT1 AA 0 A_SpawnDebris("ExplosiveSpark", 1)
			DKSX NOPQRS 2
			DKSX TUVWX 1
		Goto FinishExplosion
	}
}

Actor ResMG3 : Chaingun {
	Weapon.SelectionOrder 720
	Weapon.SlotNumber 4
    Inventory.PickupSound "weapons/pickup"
    Inventory.PickupMessage "You got the acid machinegun!"	
    Obituary "%o was gunned down by %k's Acid Rifle."
	Weapon.AmmoType1 "AcidAmmo"
	Weapon.AmmoType2 "AcidClip"
	Weapon.AmmoUse2 0
	Weapon.AmmoUse1 0
	Weapon.AmmoGive1 0
	Decal "AcidBulletChip"
	+WEAPON.NOALERT
	AttackSound ""
	+INVENTORY.UNDROPPABLE
	Tag "$WEP_4_6_TAG"
	Weapon.BobStyle InverseSmooth
	Weapon.BobSpeed 1.8
	Weapon.BobRangeY 0.5
	Weapon.BobRangeX 0.6
	+WEAPON.NOAUTOAIM
	States {
		Spawn:
			RIF2 X -1
		Stop
		Ready:
			RIF1 ABC 2 A_WeaponReady(WRF_ALLOWRELOAD)
		Loop
		Deselect:
			TNT1 A 0 A_TakeInventory("H_WeaponSlot4", 1)
			RIF1 A 1 A_Lower
			TNT1 A 0 A_Lower
		Loop
		Select:
			TNT1 A 0 A_GiveInventory("H_WeaponSlot4", 1)
			TNT1 A 0 ACS_NamedExecuteWithResult("DND Weapon Damage Cache", DND_DMGID_0, 18, 0, DND_WEAPON_ACIDRIFLE)
			TNT1 A 0 ACS_NamedExecuteWithResult("DND Weapon Damage Cache", DND_DMGID_1, 5, 2 | (3 << 16), DND_WEAPON_ACIDRIFLE)
			TNT1 A 0 ACS_NamedExecuteWithResult("DND Weapon Damage Cache", DND_DMGID_2, 10, 4 | (6 << 16), DND_WEAPON_ACIDRIFLE)
			TNT1 A 0 ACS_NamedExecuteWithResult("DND Weapon Damage Cache", DND_DMGID_3, 96, 0, DND_WEAPON_ACIDRIFLE)
	    SelectLoop:
			RIF1 A 1 A_Raise
			TNT1 A 0 A_Raise
		Loop
		Fire:
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_ACIDRIFLE, 0), "FireConfirmed")
			RIF1 ABC 2 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
		Goto Reload
		FireConfirmed:
			TNT1 A 0 A_JumpIfInventory("AcidAnim", 2, "Fire3")
			TNT1 A 0 A_JumpIfInventory("AcidAnim", 1, "Fire2")
		Fire1:
			RIF2 A 1 Bright
			TNT1 A 0 A_PlayWeaponSound("AcidRifle/fire")
			TNT1 A 0 A_FireCustomMissile("GreenTracer", frandom(-4, 4), 0, 0, frandom(-2.8, 2.8))
			TNT1 A 0 A_SpawnItemEx("GunSmokeSmaller", 18 * cos(-pitch), 0, 28 * (1 + sin(-pitch)), 0, 0, 1)
			TNT1 A 0 A_SpawnItemEx ("chaingunsmoke",cos(-pitch)*20,4,31+(sin(-pitch)*20),cos(-pitch)*0,0,0,0,0,0)
			TNT1 A 0 ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_ACIDRIFLE, DND_ATK_SECONDARY, DND_AMMOSLOT_MAGAZINE | (DND_MAGAZINE_ACIDCLIP << 16), 0)
			TNT1 A 0 A_GiveInventory("AcidAnim", 1)
			TNT1 A 0 Radius_Quake(1,2,0,1,0)
			RIF2 A 1 Bright Offset(3, 35)
			RIF1 A 1 Offset(1, 32)
		Goto FireEnd
		Fire2:
			RIF2 B 1 Bright
			TNT1 A 0 A_PlayWeaponSound("AcidRifle/fire")
			TNT1 A 0 A_FireCustomMissile("GreenTracer", frandom(-4, 4), 0, 0, frandom(-2.8, 2.8))
			TNT1 A 0 A_SpawnItemEx("GunSmokeSmaller", 18 * cos(-pitch), 0, 28 * (1 + sin(-pitch)), 0, 0, 1)
			TNT1 A 0 A_SpawnItemEx ("chaingunsmoke",cos(-pitch)*20,4,31+(sin(-pitch)*20),cos(-pitch)*0,0,0,0,0,0)
			TNT1 A 0 ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_ACIDRIFLE, DND_ATK_SECONDARY, DND_AMMOSLOT_MAGAZINE | (DND_MAGAZINE_ACIDCLIP << 16), 0)

			TNT1 A 0 A_GiveInventory("AcidAnim", 1)
			TNT1 A 0 Radius_Quake(1,2,0,1,0)
			RIF2 B 1 Bright Offset(3, 35)
			RIF1 A 1 Offset(1, 32)
		Goto FireEnd
		Fire3:
			RIF2 C 1 Bright
			TNT1 A 0 A_PlayWeaponSound("AcidRifle/fire")
			TNT1 A 0 A_FireCustomMissile("GreenTracer", frandom(-4, 4), 0, 0, frandom(-2.8, 2.8))
			TNT1 A 0 A_SpawnItemEx("GunSmokeSmaller", 18 * cos(-pitch), 0, 28 * (1 + sin(-pitch)), 0, 0, 1)
			TNT1 A 0 A_SpawnItemEx ("chaingunsmoke",cos(-pitch)*20,4,31+(sin(-pitch)*20),cos(-pitch)*0,0,0,0,0,0)
			TNT1 A 0 ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_ACIDRIFLE, DND_ATK_SECONDARY, DND_AMMOSLOT_MAGAZINE | (DND_MAGAZINE_ACIDCLIP << 16), 0)
			TNT1 A 0 A_TakeInventory("AcidAnim", 2)
			TNT1 A 0 Radius_Quake(1,2,0,1,0)
			RIF2 C 1 Bright Offset(3, 35)
			RIF1 A 1 Offset(1, 32)
		Goto FireEnd
		FireEnd:
			RIF1 B 2 Offset(0, 32) A_AlertMonsters
			RIF1 C 2 A_Refire("Fire")
		Goto Ready
		Reload:
			TNT1 A 0 A_JumpIfInventory("AcidClip", 0, "Failed")TNT1 A 0 A_JumpIfInventory("AcidClip", 0, "Failed")
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_ACIDRIFLE, 2), "ContinueReload")
			RIF1 ABC 2 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
		Goto Ready
		ContinueReload:
			TNT1 A 0 A_JumpIfInventory("Ability_Reloader", 1, "ReloadFaster")
			RIF1 B 2
			TNT1 A 0 A_PlayWeaponSound("AcidRifle/Out")
			RIF2 H 2
			RIF2 H 2 Offset(-4, 29)
			TNT1 A 0 A_FireCustomMissile("AcidRifleClipDrop", frandom(-12.0, 12.0), 0, 0, 0)
			RIF2 I 2 Offset(0, 32)
			RIF2 I 2 Offset(-4, 29)
			RIF2 I 35 Offset(-4, 29)
			TNT1 A 0 A_PlayWeaponSound("AcidRifle/In")
			TNT1 A 0 ACS_ExecuteAlways(998, 0, 5)
			RIF2 I 2 Offset(-5, 25)
			RIF2 I 2 Offset(-4, 29)
			RIF2 H 2 Offset(-4, 29)
			RIF2 H 2 Offset(1, 32)
			RIF1 BC 2
		Goto Ready
		Failed:
			RIF1 ABC 2 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
		Goto Ready
		ReloadFaster:
			RIF1 B 1
			TNT1 A 0 A_PlayWeaponSound("AcidRifle/Out")
			RIF2 H 1
			RIF2 H 1 Offset(-4, 29)
			TNT1 A 0 A_FireCustomMissile("AcidRifleClipDrop", frandom(-12.0, 12.0), 0, 0, 0)
			RIF2 I 1 Offset(0, 32)
			RIF2 I 1 Offset(-4, 29)
			RIF2 I 17 Offset(-4, 29)
			TNT1 A 0 A_PlayWeaponSound("AcidRifle/In")
			TNT1 A 0 ACS_ExecuteAlways(998, 0, 5)
			RIF2 I 1 Offset(-5, 25)
			RIF2 I 1 Offset(-4, 29)
			RIF2 H 1 Offset(-4, 29)
			RIF2 H 1 Offset(1, 32)
			RIF1 BC 1
		Goto Ready
		Flash:
		  TNT1 A 4 A_Light1
		  TNT1 A 3 A_Light2
		  TNT1 A 0 A_Light0
		  stop
		  
		Altfire:
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_ACIDRIFLE, 1), "ContinueAltFire")
			RIF1 ABC 2 A_WeaponReady(WRF_NOSWITCH | WRF_NOFIRE)
		Goto Reload
		ContinueAltFire:
			RIF2 D 3 A_PlayWeaponSound("AcidRifle/BoltFire")
			TNT1 A 0 ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_ACIDRIFLE, DND_ATK_SECONDARY | DND_ATK_OTHER_DIR, DND_AMMOSLOT_MAGAZINE | (DND_MAGAZINE_ACIDCLIP << 16), 0)
			RIF2 E 2 A_AlertMonsters
			RIF2 F 2
			RIF2 G 3
			RIF2 G 2 Offset(-3, 28)
			RIF2 G 2 Offset(-5, 26)
			RIF1 C 2 Offset(3, 32)
		Goto Ready
	}
}

Actor AcidAnim : Inventory {
	inventory.maxamount 2
}

Actor AcidPuff : DnD_BasePuff {
	Renderstyle "Add"
	Alpha 0.8
	Scale 0.425
	Stamina 4096
	States {
		Spawn:
			TNT1 AAAA 0
		Crash:
		Melee:
		HitNoBlood:
			TNT1 A 0 A_CustomMissile("AcidPuffExplosion", 0, 0, 0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			RIF2 J 3 A_PlaySound("AcidRifle/Hit")
			RIF2 KL 3
			RIF2 MN 2
		Stop
	}
}

Actor AcidPuffExplosion : DnD_ExplosiveBase {
	Speed 0
	+THRUACTORS
	+FORCERADIUSDMG
	States {
		SpawnState:
			TNT1 A 0
		Death:
			TNT1 A 0 A_SetUserVar("user_expdmg", 
				DND_WEAPON_ACIDRIFLE |
				(DND_DMGID_1 << CACHE_SHIFT) |
				(DND_DAMAGETYPE_POISON << DTYPE_SHIFT) |
				(100 << DPCT_SHIFT)
			)
			TNT1 A 0 A_SetUserVar("user_expradius", 48)
			TNT1 A 0 A_SetUserVar("user_fullexpradius", user_expradius / 2)
		Goto DoExplosionDamage
		ContinueFromExplosion:
			TNT1 A 1
		Stop
	}
}

Actor AcidRifleCloudFX {
	+NOINTERACTION
	+CLIENTSIDEONLY
	RENDERSTYLE "Add"
	ALPHA 0.66
	Scale 0.15
	ReactionTime 6
	States {
		Spawn:
			TNT1 A 0
			DB58 ABCDEFGHIJKLMNOP 1 A_SetScale(scalex + 0.04, scaley + 0.04)
		SpawnLoop:
			DB58 QRSTUVWXYZABCDEFGHIJKLMNOP 1
			TNT1 A 0 A_CountDown
		Loop
		Death:
			DB58 QRSTUVWXYZ 1 A_SetScale(scalex - 0.04, scaley - 0.04)
		Stop
	}
}

Actor AcidRiflePoisonCloud : DnD_ExplosiveBase {
    Radius 24 
    Height 6
	+THRUACTORS
	+DONTSPLASH
	+FORCERADIUSDMG
	+PAINLESS
	RENDERSTYLE "Add"
	ALPHA 0.66
	Scale 0.15
	States {
		SpawnState: 
			DB58 ABCDEFGHIJKLMNOP 1 A_SetScale(scalex + 0.075, scaley + 0.075)
			TNT1 A 0 A_Stop
		Death:
			TNT1 A 0 A_SetUserVar("user_expdmg", 
				DND_WEAPON_ACIDRIFLE |
				(DND_DMGID_1 << CACHE_SHIFT) |
				(DND_DAMAGETYPE_POISON << DTYPE_SHIFT) |
				(100 << DPCT_SHIFT)
			)
			TNT1 A 0 A_SetUserVar("user_expradius", 96)
			TNT1 A 0 A_SetUserVar("user_fullexpradius", user_expradius / 2)
			TNT1 A 0 A_SetUserVar("user_expflags", DND_DAMAGEFLAG_INFLICTPOISON | DND_DAMAGEFLAG_ISDAMAGEOVERTIME)
			TNT1 A 0 A_SpawnItemEx("AcidRifleCloudFX")
			TNT1 A 0 A_SetArg(0, 39)
		ExplosionLoop:
			TNT1 A 4
		Goto DoExplosionDamage
		ContinueFromExplosion:
			//TNT1 A 0 A_SetUserVar("user_expdmg", ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_1 | (DND_WEAPON_ACIDRIFLE << 16), DND_DAMAGECATEGORY_POISON, DND_USETARGET | DND_ISSLOT4 | DND_ISDOT))
			TNT1 A 0 A_SetArg(0, Args[0] - 1)
			TNT1 A 1 A_JumpIf(Args[0] > 0, "ExplosionLoop")
		Stop
	}
}

Actor AcidBoltExploder : DnD_ExplosiveBase {
	Speed 0
	+THRUACTORS
	States {
		SpawnState:
			TNT1 A 0
		Death:
			TNT1 A 0 A_SetUserVar("user_expdmg", 
				DND_WEAPON_ACIDRIFLE |
				(DND_DMGID_3 << CACHE_SHIFT) |
				(DND_DAMAGETYPE_POISON << DTYPE_SHIFT) |
				(100 << DPCT_SHIFT)
			)
			TNT1 A 0 A_SetUserVar("user_expradius", 128)
			TNT1 A 0 A_SetUserVar("user_fullexpradius", user_expradius / 2)
		Goto DoExplosionDamage
		ContinueFromExplosion:
			TNT1 A 1
		Stop
	}
}

Actor AcidBolt : DnD_BaseProjectile {
	DeathSound "AcidRifle/BoltHit"
	Speed 56
	Radius 6
	Height 12
	Scale 0.65
	
	Damage(
		DND_WEAPON_ACIDRIFLE |
		(DND_DMGID_2 << CACHE_SHIFT) |
		(DND_DAMAGETYPE_PHYSICAL << DTYPE_SHIFT) |
		(100 << DPCT_SHIFT)
	)
	
	+SEEKERMISSILE
	const int sticktimer = 25;
	var int user_count;
	var int user_height;
	States {
		SpawnState:
			STAK A -1
		Stop
		Death:
			TNT1 A 0 A_ChangeFlag("NOGRAVITY", 0)
			STAK A 70
		Goto Explode
		XDeath:
			TNT1 A 0 A_SetUserVar("user_count", 0)
			TNT1 A 0 A_SetUserVar("user_height", frandom(0.4, 0.75) * ACS_NamedExecuteWithResult("DND Acid Rifle Bolt Stick", 0))
		Stick:
			TNT1 A 0 A_JumpIf(!ACS_NamedExecuteWithResult("DND Acid Rifle Bolt Stick", 1), "FallDown")
			TNT1 A 0 A_JumpIf(user_count == sticktimer, "Explode")
			STAK A 3 A_Fire(user_height)
			TNT1 A 0 A_SetUserVar("user_count", user_count + 1)
		Loop
		FallDown:
			TNT1 A 0 A_ChangeFlag("NOGRAVITY", 0)
			TNT1 A 0 a_ChangeFlag("SEEKERMISSILE", 0)
		FallCounter:
			TNT1 A 0 A_JumpIf(user_count == sticktimer, "Explode")
			STAK A 3 A_SetUserVar("user_count", user_count + 1)
		Loop
		Explode:
			TNT1 A 0 A_PlaySound("AcidRifle/BoltExplode")
			TNT1 AAAAAA 0 A_SpawnItemEx("ExplosionFXMagicGreen", frandom(-16, 16), frandom(-16, 16), 0, frandom(-2, 2), frandom(-2, 2), frandom(-2, 2), 0, SXF_NOCHECKPOSITION)
			TNT1 A 0 A_CustomMissile("AcidBoltExploder", 0, 0, 0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_SetUserVar("user_count", 0)
			TNT1 A 0 A_SetUserVar("user_height", random(5, 8))
			TNT1 A 6 A_PlaySound("AcidRifle/BoltCloud", 7)
		ExplodeLoop:
			TNT1 A 0 A_JumpIf(user_count == user_height, "ExplodeFinish") 
		    TNT1 A 1 A_SpawnItemEx("AcidRiflePoisonCloud", 0, 0, 16, frandom(-10, 10), frandom(-10, 10), frandom(-2, 2), frandom(-180, 180), SXF_NOCHECKPOSITION | SXF_TRANSFERPOINTERS)
			TNT1 A 0 A_setUserVar("user_count", user_count + 1)
		Loop
		ExplodeFinish:
			TNT1 A 0
		Stop
	}
}

Actor FusionAttackCounter : Inventory {
	inventory.maxamount 5
}

Actor FusionWeaponHeight : Inventory {
	inventory.maxamount 5
}

Actor ResMG4 : Weapon {
	Weapon.SelectionOrder 800
	Weapon.SlotNumber 4
    Inventory.PickupSound "weapons/pickup"
    Inventory.PickupMessage "You got the Fusion Blaster!"	
    Obituary "%o was gunned down by %k's machinegun."
	Weapon.AmmoType1 "FusionCell"
	Weapon.AmmoType2 "MGClip6"
	Weapon.AmmoUse1 0
	Weapon.AmmoUse2 0
	Weapon.AmmoGive1 0
	Decal "LaserPistolDecal"
	+WEAPON.NOALERT
	AttackSound ""
	+INVENTORY.UNDROPPABLE
	Tag "$WEP_4_7_TAG"
	Weapon.BobStyle InverseSmooth
	Weapon.BobSpeed 2.0
	Weapon.BobRangeY 0.5
	Weapon.BobRangeX 0.6
	+WEAPON.NOAUTOAIM
	States {
		Spawn:
			FUSP A -1
		Stop
		Ready:
			FUSF B 1 A_WeaponReady(WRF_ALLOWRELOAD)
		Loop
		Deselect:
			TNT1 A 0 A_TakeInventory("H_WeaponSlot4", 1)
			FUSF B 1 A_Lower
			TNT1 A 0 A_Lower
		Loop
		Select:
			TNT1 A 0 A_GiveInventory("P_PlasmaFire", 1)
			TNT1 A 0 A_GiveInventory("H_WeaponSlot4", 1)
			TNT1 A 0 ACS_NamedExecuteWithResult("DND Weapon Damage Cache", DND_DMGID_0, 30, 0, DND_WEAPON_FUSIONBLASTER)
			TNT1 A 0 ACS_NamedExecuteWithResult("DND Weapon Damage Cache", DND_DMGID_1, 200, 0, DND_WEAPON_FUSIONBLASTER)
			TNT1 A 0 ACS_NamedExecuteWithResult("DND Weapon Damage Cache", DND_DMGID_2, 6, 0, DND_WEAPON_FUSIONBLASTER)
	    SelectLoop:
			FUSF B 1 A_Raise
			TNT1 A 0 A_Raise
		Loop
		Fire:
			TNT1 A 0 A_JumpIfInventory("FusionAttackCounter", 0, "FireEnd")
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_FUSIONBLASTER, 0), "FireConfirmed")
			FUSF B 3 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
		Goto Reload
		FireConfirmed:
			TNT1 A 0 A_TakeInventory("FusionWeaponHeight", 0)
			TNT1 A 0 A_Jump(256, "Fire1", "Fire2", "Fire3", "Fire4", "Fire5", "Fire6")
		Fire1:
			FUSF A 2 Bright A_AlertMonsters
			TNT1 A 0 A_PlayWeaponSound("FusionBlaster/fire")
			TNT1 A 0 A_SpawnItemEx("GunSmokeSmaller", 18 * cos(-pitch), 3, 34 * (1 + sin(-pitch)), 0, 0, 1)
			TNT1 A 0 A_SpawnItemEx ("PlasmaSmoke", cos(-pitch) * 25, 4, 35 + (sin(-pitch)*20),0,0,0,0,0,0)
			TNT1 A 0 ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_FUSIONBLASTER, DND_ATK_SECONDARY, DND_AMMOSLOT_MAGAZINE | (DND_MAGAZINE_MGCLIP6 << 16), 0)
			TNT1 A 0 A_SetPitch(pitch - 0.15)
			TNT1 A 0 A_GiveInventory("FusionAttackCounter", 1)
			FUSF B 1
		Goto Fire
		Fire2:
			FUSF C 2 Bright A_AlertMonsters
			TNT1 A 0 A_PlayWeaponSound("FusionBlaster/fire")
			TNT1 A 0 A_SpawnItemEx("GunSmokeSmaller", 18 * cos(-pitch), 3, 34 * (1 + sin(-pitch)), 0, 0, 1)
			TNT1 A 0 A_SpawnItemEx ("PlasmaSmoke", cos(-pitch) * 25, 4, 35 + (sin(-pitch)*20),0,0,0,0,0,0)
			TNT1 A 0 ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_FUSIONBLASTER, DND_ATK_SECONDARY, DND_AMMOSLOT_MAGAZINE | (DND_MAGAZINE_MGCLIP6 << 16), 0)
			TNT1 A 0 A_SetPitch(pitch - 0.15)
			TNT1 A 0 A_GiveInventory("FusionAttackCounter", 1)
			TNT1 A 0 A_GiveInventory("FusionWeaponHeight", 1)
			FUSF D 1
		Goto Fire
		Fire3:
			FUSF E 2 Bright A_AlertMonsters
			TNT1 A 0 A_PlayWeaponSound("FusionBlaster/fire")
			TNT1 A 0 A_SpawnItemEx("GunSmokeSmaller", 18 * cos(-pitch), 3, 34 * (1 + sin(-pitch)), 0, 0, 1)
			TNT1 A 0 A_SpawnItemEx ("PlasmaSmoke", cos(-pitch) * 25, 4, 35 + (sin(-pitch)*20),0,0,0,0,0,0)
			TNT1 A 0 ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_FUSIONBLASTER, DND_ATK_SECONDARY, DND_AMMOSLOT_MAGAZINE | (DND_MAGAZINE_MGCLIP6 << 16), 0)

			TNT1 A 0 A_SetPitch(pitch - 0.15)
			TNT1 A 0 A_GiveInventory("FusionAttackCounter", 1)
			TNT1 A 0 A_GiveInventory("FusionWeaponHeight", 2)
			FUSF F 1
		Goto Fire
		Fire4:
			FUSF G 2 Bright A_AlertMonsters
			TNT1 A 0 A_PlayWeaponSound("FusionBlaster/fire")
			TNT1 A 0 A_SpawnItemEx("GunSmokeSmaller", 18 * cos(-pitch), 3, 34 * (1 + sin(-pitch)), 0, 0, 1)
			TNT1 A 0 A_SpawnItemEx ("PlasmaSmoke", cos(-pitch) * 25, 4, 35 + (sin(-pitch)*20),0,0,0,0,0,0)
			TNT1 A 0 ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_FUSIONBLASTER, DND_ATK_SECONDARY, DND_AMMOSLOT_MAGAZINE | (DND_MAGAZINE_MGCLIP6 << 16), 0)

			TNT1 A 0 A_SetPitch(pitch - 0.15)
			TNT1 A 0 A_GiveInventory("FusionAttackCounter", 1)
			TNT1 A 0 A_GiveInventory("FusionWeaponHeight", 3)
			FUSF H 1
		Goto Fire
		Fire5:
			FUSF I 2 Bright A_AlertMonsters
			TNT1 A 0 A_PlayWeaponSound("FusionBlaster/fire")
			TNT1 A 0 A_SpawnItemEx("GunSmokeSmaller", 18 * cos(-pitch), 3, 34 * (1 + sin(-pitch)), 0, 0, 1)
			TNT1 A 0 A_SpawnItemEx ("PlasmaSmoke", cos(-pitch) * 25, 4, 35 + (sin(-pitch)*20),0,0,0,0,0,0)
			TNT1 A 0 ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_FUSIONBLASTER, DND_ATK_SECONDARY, DND_AMMOSLOT_MAGAZINE | (DND_MAGAZINE_MGCLIP6 << 16), 0)

			TNT1 A 0 A_SetPitch(pitch - 0.15)
			TNT1 A 0 A_GiveInventory("FusionAttackCounter", 1)
			TNT1 A 0 A_GiveInventory("FusionWeaponHeight", 4)
			FUSF J 1
		Goto Fire
		Fire6:
			FUSF K 2 Bright A_AlertMonsters
			TNT1 A 0 A_PlayWeaponSound("FusionBlaster/fire")
			TNT1 A 0 A_SpawnItemEx("GunSmokeSmaller", 18 * cos(-pitch), 3, 34 * (1 + sin(-pitch)), 0, 0, 1)
			TNT1 A 0 A_SpawnItemEx ("PlasmaSmoke", cos(-pitch) * 25, 4, 35 + (sin(-pitch)*20),0,0,0,0,0,0)
			TNT1 A 0 ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_FUSIONBLASTER, DND_ATK_SECONDARY, DND_AMMOSLOT_MAGAZINE | (DND_MAGAZINE_MGCLIP6 << 16), 0)

			TNT1 A 0 A_SetPitch(pitch - 0.15)
			TNT1 A 0 A_GiveInventory("FusionAttackCounter", 1)
			TNT1 A 0 A_GiveInventory("FusionWeaponHeight", 5)
			FUSF J 1
		Goto Fire
		FireEnd:
			TNT1 A 0 A_JumpIfInventory("FusionWeaponHeight", 5, "FireEnd_5")
			TNT1 A 0 A_JumpIfInventory("FusionWeaponHeight", 4, "FireEnd_4")
			TNT1 A 0 A_JumpIfInventory("FusionWeaponHeight", 3, "FireEnd_3")
			TNT1 A 0 A_JumpIfInventory("FusionWeaponHeight", 2, "FireEnd_2")
			TNT1 A 0 A_JumpIfInventory("FusionWeaponHeight", 1, "FireEnd_1")
		FireEnd_5:
			FUSF B 1 Offset(5, 27)
		FireEnd_4:
			FUSF B 1 Offset(4, 28)
		FireEnd_3:
			FUSF B 1 Offset(3, 29)
		FireEnd_2:
			FUSF B 1 Offset(2, 30)
		FireEnd_1:
			FUSF B 1 Offset(1, 31)
		FireEndLast:
			FUSF B 1 Offset(0, 32) A_TakeInventory("FusionAttackCounter", 0)
			FUSF B 2 A_Refire("Fire")
			FUSF B 2	
		Goto Ready
		
		Reload:
			TNT1 A 0 A_JumpIfInventory("MGClip6", 0, "Failed")
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_FUSIONBLASTER, 2), "ContinueReload")
			FUSF B 3 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
		Goto Ready
		ContinueReload:
			TNT1 A 0 A_JumpIfInventory("Ability_Reloader", 1, "ReloadFaster")
			FUSG A 4
			FUSG B 3
			FUSG CD 2
			TNT1 A 0 A_PlayWeaponSound("FusionBlaster/Out")
			FUSG E 3
			TNT1 A 0 A_FireCustomMissile("FusionBatteryDrop", frandom(-12.0, 12.0), 0, 0, 0)
			FUSG F 20
			FUSG F 2 Offset(1, 30)
			TNT1 A 0 A_PlayWeaponSound("FusionBlaster/In")
			FUSG F 3 Offset(3, 27)
			TNT1 A 0 ACS_NamedExecuteAlways("DnD Handle Reload", 0, DND_WEAPON_FUSIONBLASTER)
			FUSG ED 3
			FUSG C 2
			FUSG BA 1
		Goto Ready
		Failed:
			FUSF B 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
		Goto Ready
		ReloadFaster:
			TNT1 A 0 A_JumpIfInventory("MGClip6", 0, "Failed")
			FUSG A 2
			FUSG B 1
			FUSG CD 1
			TNT1 A 0 A_PlayWeaponSound("FusionBlaster/Out")
			FUSG E 1
			TNT1 A 0 A_FireCustomMissile("FusionBatteryDrop", frandom(-12.0, 12.0), 0, 0, 0)
			FUSG F 10
			FUSG F 1 Offset(1, 30)
			TNT1 A 0 A_PlayWeaponSound("FusionBlaster/In")
			FUSG F 1 Offset(3, 27)
			TNT1 A 0 ACS_ExecuteAlways(998, 0, 6)
			FUSG ED 1
			FUSG C 1
			FUSG BA 1
		Goto Ready
		
		
		Flash:
			TNT1 A 4 A_Light1
			TNT1 A 3 A_Light2
			TNT1 A 0 A_Light0
		stop
		
		Altfire:
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_FUSIONBLASTER, 1), "ContinueAlt")
			FUSF B 3 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
		Goto Reload
		ContinueAlt:
			FUSG B 3
			FUSG B 0 A_AlertMonsters
			TNT1 A 0 A_PlayWeaponSound("FusionBlaster/Alt")
			TNT1 A 0 A_SpawnItemEx("GunSmokeSmaller", 18 * cos(-pitch), 3, 34 * (1 + sin(-pitch)), 0, 0, 1)
			TNT1 A 0 ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_FUSIONBLASTER, DND_ATK_SECONDARY | DND_ATK_OTHER_DIR, DND_AMMOSLOT_MAGAZINE | (DND_MAGAZINE_MGCLIP6 << 16), 0)
			FUSF E 1 Bright
			TNT1 A 0 A_SetPitch(pitch - 4.0)
			FUSF E 1 Bright
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Check Unique Player Property", PUP_KNOCKBACKIMMUNE), "NoRecoil")
			TNT1 A 0 A_Recoil(3.6)
		NoRecoil:
			FUSF B 1 Offset(54, 41) A_SetPitch(pitch + 0.5)
			FUSF B 1 Offset(54, 41) A_SetPitch(pitch + 0.5)
			FUSF B 1 Offset(129, 53) A_SetPitch(pitch + 0.5)
			FUSF B 1 Offset(125, 52) A_SetPitch(pitch + 0.5)
			FUSF B 1 Offset(121, 51) A_SetPitch(pitch + 0.5)
			FUSF B 1 Offset(114, 50) A_SetPitch(pitch + 0.5)
			FUSF B 1 Offset(107, 49) A_SetPitch(pitch + 0.5)
			FUSF B 1 Offset(100, 48) A_SetPitch(pitch + 0.5)
			FUSF B 1 Offset(93, 47)
			FUSF B 1 Offset(86, 46)
			FUSF B 1 Offset(79, 45)
			FUSF B 1 Offset(72, 44)
			FUSF B 1 Offset(65, 43)
			FUSF B 1 Offset(58, 42)
			FUSF B 1 Offset(51, 41)
			FUSF B 1 Offset(44, 40)
			FUSF B 1 Offset(40, 39)
			FUSF B 1 Offset(36, 38)
			FUSF B 1 Offset(32, 37)
			FUSF B 1 Offset(28, 36)
			FUSF B 1 Offset(24, 35)
			FUSF B 1 Offset(20, 34)
			FUSF B 1 Offset(14, 33)
			FUSF B 1 Offset(8, 32)
			FUSF B 1 Offset(2, 32)
			FUSF B 8 Offset(0, 32)
		Goto Ready
	}
}

Actor FusionBlasterProjectile : DnD_BaseFastProjectile {
	Speed 72
	+FOILINVUL
	RenderStyle "Add"
	Alpha 0.75
	Height 10
	Radius 5
	DeathSound "FusionBlaster/Hit"
	
	Damage(
		DND_WEAPON_FUSIONBLASTER |
		(DND_DMGID_0 << CACHE_SHIFT) |
		(DND_DAMAGETYPE_ENERGY << DTYPE_SHIFT) |
		(100 << DPCT_SHIFT)
	)
	
	Stamina 16
	
	const float inc_rate = 0.01;
	const int dmg_rate = 3;
	var int user_tics;
	States {
		SpawnState:
			TNT1 A 0 A_SetUserVar("user_tics", 0)
			FUS9 A 1 Bright A_SetUserVar("user_tics", user_tics + dmg_rate)
		SpawnLoop:
			FUS9 A 1 Bright A_SetScale(scalex + inc_rate * user_tics, scaley + inc_rate * user_tics)
			FUS9 B 1 Bright A_SetUserVar("user_tics", user_tics + dmg_rate)
			FUS9 B 1 Bright A_SetScale(scalex + inc_rate * user_tics, scaley + inc_rate * user_tics)
			FUS9 C 1 Bright A_SetUserVar("user_tics", user_tics + dmg_rate)
			FUS9 C 1 Bright A_SetScale(scalex + inc_rate * user_tics, scaley + inc_rate * user_tics)
			FUS9 A 1 Bright A_SetUserVar("user_tics", user_tics + dmg_rate)
		Loop
		Death:
			TNT1 A 0 A_SpawnDebris("PlasmaSparkFX")
			FUS9 DEF 2 Bright
		stop
	}
}

Actor FusionBlasterGrenade : DnD_BaseProjectile {
	Speed 36
	+MTHRUSPECIES
	+FOILINVUL
	-NOGRAVITY
	RenderStyle "Add"
	DeathSound "FusionBlaster/Hit2"
	Gravity 0.875
	Alpha 0.75
	Scale 1.125
	Height 20
	Radius 10
	
	Damage(
		DND_WEAPON_FUSIONBLASTER |
		(DND_DMGID_1 << CACHE_SHIFT) |
		(DND_DAMAGETYPE_ENERGY << DTYPE_SHIFT) |
		(100 << DPCT_SHIFT)
	)
	
	Stamina 16
	
	const float inc_rate = 0.0025;
	const int dmg_rate = 8;
	var int user_tics;
	States {
		SpawnState:
			TNT1 A 0 A_SetUserVar("user_tics", 0)
		SpawnLoop:
			FUG9 A 1 Bright A_SetUserVar("user_tics", user_tics + dmg_rate)
			TNT1 A 0 A_SpawnItemEx("FusionBlasterGrenadeTrail", 0, 0, 0, frandom(-2, 2), frandom(-2, 2), frandom(-2, 2))
			FUG9 A 1 Bright A_SetScale(scalex + inc_rate * user_tics, scaley + inc_rate * user_tics)
			TNT1 A 0 A_SpawnItemEx("FusionBlasterGrenadeTrail", 0, 0, 0, frandom(-2, 2), frandom(-2, 2), frandom(-2, 2))
			FUG9 A 1 Bright A_SetUserVar("user_tics", user_tics + dmg_rate)
			TNT1 A 0 A_SpawnItemEx("FusionBlasterGrenadeTrail", 0, 0, 0, frandom(-2, 2), frandom(-2, 2), frandom(-2, 2))
			FUG9 B 1 Bright A_SetScale(scalex + inc_rate * user_tics, scaley + inc_rate * user_tics)
			TNT1 A 0 A_SpawnItemEx("FusionBlasterGrenadeTrail", 0, 0, 0, frandom(-2, 2), frandom(-2, 2), frandom(-2, 2))
			FUG9 B 1 Bright A_SetUserVar("user_tics", user_tics + dmg_rate)
			TNT1 A 0 A_SpawnItemEx("FusionBlasterGrenadeTrail", 0, 0, 0, frandom(-2, 2), frandom(-2, 2), frandom(-2, 2))
			FUG9 B 1 Bright A_SetScale(scalex + inc_rate * user_tics, scaley + inc_rate * user_tics)
			TNT1 A 0 A_SpawnItemEx("FusionBlasterGrenadeTrail", 0, 0, 0, frandom(-2, 2), frandom(-2, 2), frandom(-2, 2))
			FUG9 C 1 Bright A_SetUserVar("user_tics", user_tics + dmg_rate)
			TNT1 A 0 A_SpawnItemEx("FusionBlasterGrenadeTrail", 0, 0, 0, frandom(-2, 2), frandom(-2, 2), frandom(-2, 2))
			FUG9 C 1 Bright A_SetScale(scalex + inc_rate * user_tics, scaley + inc_rate * user_tics)
			TNT1 A 0 A_SpawnItemEx("FusionBlasterGrenadeTrail", 0, 0, 0, frandom(-2, 2), frandom(-2, 2), frandom(-2, 2))
			FUG9 C 1 Bright A_SetUserVar("user_tics", user_tics + dmg_rate)
			TNT1 A 0 A_SpawnItemEx("FusionBlasterGrenadeTrail", 0, 0, 0, frandom(-2, 2), frandom(-2, 2), frandom(-2, 2))
			FUG9 D 1 Bright A_SetScale(scalex + inc_rate * user_tics, scaley + inc_rate * user_tics)
			TNT1 A 0 A_SpawnItemEx("FusionBlasterGrenadeTrail", 0, 0, 0, frandom(-2, 2), frandom(-2, 2), frandom(-2, 2))
			FUG9 D 1 Bright A_SetUserVar("user_tics", user_tics + dmg_rate)
			TNT1 A 0 A_SpawnItemEx("FusionBlasterGrenadeTrail", 0, 0, 0, frandom(-2, 2), frandom(-2, 2), frandom(-2, 2))
			FUG9 D 1 Bright A_SetScale(scalex + inc_rate * user_tics, scaley + inc_rate * user_tics)
			TNT1 A 0 A_SpawnItemEx("FusionBlasterGrenadeTrail", 0, 0, 0, frandom(-2, 2), frandom(-2, 2), frandom(-2, 2))
		Loop
		Death:
			TNT1 A 0 A_ChangeFlag("NOGRAVITY", 1)
			TNT1 A 0 A_SpawnItemEx ("PlasmaFlare", 0, 0, 0, 0, 0, 0, 0, SXF_CLIENTSIDE | SXF_NOCHECKPOSITION, 0)
			TNT1 AAAAAAAAA 0 A_SpawnItemEx("BlueParticleNoGravityFastVanish",Random(-12,12),Random(-12,12),Random(-12,12),Random(-2,2),Random(-2,2),Random(-2,2),Random(-20,20),128)
			TNT1 A 0 A_JumpIf(accuracy == DND_CRITTOKEN, "Crit")
			TNT1 A 0 A_custommissile("FusionBlasterGrenadeRipper",0,0,0,CMF_TRACKOWNER | CMF_AIMDIRECTION,0)
			TNT1 A 0 A_custommissile("FusionBlasterGrenadeRipper",0,0,20,CMF_TRACKOWNER | CMF_AIMDIRECTION,0)
			TNT1 A 0 A_custommissile("FusionBlasterGrenadeRipper",0,0,40,CMF_TRACKOWNER | CMF_AIMDIRECTION,0)
			TNT1 A 0 A_custommissile("FusionBlasterGrenadeRipper",0,0,60,CMF_TRACKOWNER | CMF_AIMDIRECTION,0)
			TNT1 A 0 A_custommissile("FusionBlasterGrenadeRipper",0,0,80,CMF_TRACKOWNER | CMF_AIMDIRECTION,0)
			TNT1 A 0 A_custommissile("FusionBlasterGrenadeRipper",0,0,100,CMF_TRACKOWNER | CMF_AIMDIRECTION,0)
			TNT1 A 0 A_custommissile("FusionBlasterGrenadeRipper",0,0,120,CMF_TRACKOWNER | CMF_AIMDIRECTION,0)
			TNT1 A 0 A_custommissile("FusionBlasterGrenadeRipper",0,0,140,CMF_TRACKOWNER | CMF_AIMDIRECTION,0)
			TNT1 A 0 A_custommissile("FusionBlasterGrenadeRipper",0,0,160,CMF_TRACKOWNER | CMF_AIMDIRECTION,0)
			TNT1 A 0 A_custommissile("FusionBlasterGrenadeRipper",0,0,180,CMF_TRACKOWNER | CMF_AIMDIRECTION,0)
			TNT1 A 0 A_custommissile("FusionBlasterGrenadeRipper",0,0,200,CMF_TRACKOWNER | CMF_AIMDIRECTION,0)
			TNT1 A 0 A_custommissile("FusionBlasterGrenadeRipper",0,0,220,CMF_TRACKOWNER | CMF_AIMDIRECTION,0)
			TNT1 A 0 A_custommissile("FusionBlasterGrenadeRipper",0,0,240,CMF_TRACKOWNER | CMF_AIMDIRECTION,0)
			TNT1 A 0 A_custommissile("FusionBlasterGrenadeRipper",0,0,260,CMF_TRACKOWNER | CMF_AIMDIRECTION,0)
			TNT1 A 0 A_custommissile("FusionBlasterGrenadeRipper",0,0,280,CMF_TRACKOWNER | CMF_AIMDIRECTION,0)
			TNT1 A 0 A_custommissile("FusionBlasterGrenadeRipper",0,0,300,CMF_TRACKOWNER | CMF_AIMDIRECTION,0)
			TNT1 A 0 A_custommissile("FusionBlasterGrenadeRipper",0,0,320,CMF_TRACKOWNER | CMF_AIMDIRECTION,0)
			TNT1 A 0 A_custommissile("FusionBlasterGrenadeRipper",0,0,340,CMF_TRACKOWNER | CMF_AIMDIRECTION,0)
		FinishAnim:
			FUG9 EFGH 3 Bright
			FUG9 IJKLMNO 3
		stop
		Crit:
			TNT1 A 0 A_custommissile("FusionBlasterGrenadeRipper_Crit",0,0,0,CMF_TRACKOWNER | CMF_AIMDIRECTION,0)
			TNT1 A 0 A_custommissile("FusionBlasterGrenadeRipper_Crit",0,0,20,CMF_TRACKOWNER | CMF_AIMDIRECTION,0)
			TNT1 A 0 A_custommissile("FusionBlasterGrenadeRipper_Crit",0,0,40,CMF_TRACKOWNER | CMF_AIMDIRECTION,0)
			TNT1 A 0 A_custommissile("FusionBlasterGrenadeRipper_Crit",0,0,60,CMF_TRACKOWNER | CMF_AIMDIRECTION,0)
			TNT1 A 0 A_custommissile("FusionBlasterGrenadeRipper_Crit",0,0,80,CMF_TRACKOWNER | CMF_AIMDIRECTION,0)
			TNT1 A 0 A_custommissile("FusionBlasterGrenadeRipper_Crit",0,0,100,CMF_TRACKOWNER | CMF_AIMDIRECTION,0)
			TNT1 A 0 A_custommissile("FusionBlasterGrenadeRipper_Crit",0,0,120,CMF_TRACKOWNER | CMF_AIMDIRECTION,0)
			TNT1 A 0 A_custommissile("FusionBlasterGrenadeRipper_Crit",0,0,140,CMF_TRACKOWNER | CMF_AIMDIRECTION,0)
			TNT1 A 0 A_custommissile("FusionBlasterGrenadeRipper_Crit",0,0,160,CMF_TRACKOWNER | CMF_AIMDIRECTION,0)
			TNT1 A 0 A_custommissile("FusionBlasterGrenadeRipper_Crit",0,0,180,CMF_TRACKOWNER | CMF_AIMDIRECTION,0)
			TNT1 A 0 A_custommissile("FusionBlasterGrenadeRipper_Crit",0,0,200,CMF_TRACKOWNER | CMF_AIMDIRECTION,0)
			TNT1 A 0 A_custommissile("FusionBlasterGrenadeRipper_Crit",0,0,220,CMF_TRACKOWNER | CMF_AIMDIRECTION,0)
			TNT1 A 0 A_custommissile("FusionBlasterGrenadeRipper_Crit",0,0,240,CMF_TRACKOWNER | CMF_AIMDIRECTION,0)
			TNT1 A 0 A_custommissile("FusionBlasterGrenadeRipper_Crit",0,0,260,CMF_TRACKOWNER | CMF_AIMDIRECTION,0)
			TNT1 A 0 A_custommissile("FusionBlasterGrenadeRipper_Crit",0,0,280,CMF_TRACKOWNER | CMF_AIMDIRECTION,0)
			TNT1 A 0 A_custommissile("FusionBlasterGrenadeRipper_Crit",0,0,300,CMF_TRACKOWNER | CMF_AIMDIRECTION,0)
			TNT1 A 0 A_custommissile("FusionBlasterGrenadeRipper_Crit",0,0,320,CMF_TRACKOWNER | CMF_AIMDIRECTION,0)
			TNT1 A 0 A_custommissile("FusionBlasterGrenadeRipper_Crit",0,0,340,CMF_TRACKOWNER | CMF_AIMDIRECTION,0)
		Goto FinishAnim
	}
}

ACTOR FusionBlasterGrenadeTrail {
	Renderstyle ADD
	Alpha 0.6
	+NOINTERACTION
	+CLIENTSIDEONLY
	States {   
		Spawn:
			FUG8 ABCDEFGHI 4 Bright 
	    Stop
	}
}

Actor FusionBlasterGrenadeRipper : DnD_BaseProjectile {
    Radius 6
    Height 12
    Speed 6
    RENDERSTYLE "ADD"
	
	Damage(
		DND_WEAPON_FUSIONBLASTER |
		(DND_DMGID_2 << CACHE_SHIFT) |
		(DND_DAMAGETYPE_ENERGY << DTYPE_SHIFT) |
		(100 << DPCT_SHIFT)
	)
	
    +Ripper
	+DONTBLAST
	+BLOODLESSIMPACT
    ALPHA 0.8
    States {
		SpawnState:
			FUG7 AABBCCDDEEFFGGHHIIJJKK 1 Bright
        stop
		Death:
			TNT1 A 1
		Stop
    }
}

Actor FusionBlasterGrenadeRipper_Crit : FusionBlasterGrenadeRipper {
	Accuracy 69
}

ACTOR ResMG5 : Weapon {
	Weapon.AmmoType1 "IncineratorAmmo"
	Weapon.AmmoUse1 2
	Weapon.AmmoGive1 16
	Weapon.AmmoType2 "IncineratorStacks"
	Weapon.AmmoUse2 0
	Weapon.AmmoGive2 0
	Weapon.SlotNumber 4
	Obituary "%o was burned ablaze by %k's incinerator."
	Tag "$WEP_4_8_TAG"
	Weapon.BobStyle InverseSmooth
	Weapon.BobSpeed 1.8
	Weapon.BobRangeY 0.4
	Weapon.BobRangeX 0.8
	+INVENTORY.UNDROPPABLE
	+WEAPON.NOAUTOAIM
	States {
		Ready:
			RW09 A 1 A_WeaponReady(WRF_ALLOWRELOAD)
		Loop

		Select:
		    TNT1 A 0 A_GiveInventory("H_WeaponSlot4", 1)
			TNT1 A 0 ACS_NamedExecuteWithResult("DND Weapon Damage Cache", DND_DMGID_0, 16, 0, DND_WEAPON_INCINERATOR)
			TNT1 A 0 ACS_NamedExecuteWithResult("DND Weapon Damage Cache", DND_DMGID_1, 5, 16 | (18 << 16), DND_WEAPON_INCINERATOR)
			TNT1 A 0 ACS_NamedExecuteWithResult("DND Weapon Damage Cache", DND_DMGID_2, 80, 0, DND_WEAPON_INCINERATOR)
		SelectLoop:
			RW09 A 1 A_Raise
			"####" "#" 0 A_Raise
		Loop
		Deselect:
			TNT1 A 0 A_TakeInventory("H_WeaponSlot4", 1)
		DeselectLoop:
			RW09 A 1 A_Lower
			"####" "#" 0 A_Lower
		Loop

		Fire:
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_INCINERATOR, 0), "FireConfirmed")
			RW09 A 3 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
		Goto Ready
		FireConfirmed:
			TNT1 A 0 A_JumpIfInventory("IncineratorStacks", 0, "Reload")
			RW09 B 1 Bright A_SetPitch (pitch - 1.6)
			RW09 B 1 Bright A_SetPitch (pitch - 1.1)
			TNT1 A 0 A_GunFlash
			TNT1 A 0 A_PlayWeaponSound("Incinerator/fire")
			TNT1 AAA 0 A_SpawnItemEx("GunSmoke", 18 * cos(-pitch), 0, 32 * (1 + sin(-pitch)), 2, frandom(-1, 1), 1)
			TNT1 A 0 ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_INCINERATOR, DND_ATK_PRIMARY, DND_AMMOSLOT_CLIP | (AMMO_INCINERATOR << 16), DND_ATF_CANFIRECIRCLE)
			RW09 C 1 Bright A_SetPitch (pitch - 0.5)
			RW09 C 1 Bright A_SetPitch (pitch - 0.2)
			RW09 D 1 A_SetPitch (pitch - 0.1)
			RW09 D 1 A_SetPitch (pitch + 0.05)
			RW09 A 1 A_SetPitch (pitch + 0.75)
			RW09 A 1 A_SetPitch (pitch + 1.5)
			RW09 A 1 A_SetPitch (pitch + 1.0)
			RW09 A 1 A_SetPitch (pitch + 0.2)
			TNT1 A 0 A_PlaySound("Incinerator/spin", 5, 1, 0, 1.25)
			RW09 A 1 A_SetPitch (pitch + 1.5)
			TNT1 A 0 A_SpawnItemEx ("IncineratorCasing",cos(-pitch)*32,-13,24+(sin(-pitch)*24),0,random(-5, -8), random(0, 1),0,0,0)
			TNT1 A 0 A_SpawnItemEx ("IncineratorCasing",cos(-pitch)*32,13,24+(sin(-pitch)*24),0,random(5, 8), random(0, 1),0,0,0)
			RW09 E 1 A_SetPitch (pitch - 1.0)
			RW09 E 1 A_SetPitch (pitch - 0.2)
			RW09 F 2
			RW09 G 2
			RW09 A 2
			RW09 A 4 A_Refire
		Goto Ready
		Reload:
			TNT1 A 0 A_JumpIfInventory("IncineratorStacks", 1, "ContinueReload")
			RW09 A 1 A_WeaponReady
		Goto Ready
		ContinueReload:
			RW09 A 1
			TNT1 A 0 A_PlaySound("Incinerator/charge", 6, 0.9, 0, 1.25)
			TNT1 A 0 A_TakeInventory("IncineratorStacks", 0)
			TNT1 A 0 A_JumpIfInventory("Ability_Reloader", 1, "ReloadFast")
			RW09 HIJKLMNA 3 A_SpawnItemEx("GunSmoke", 18 * cos(-pitch), 0, 32 * (1 + sin(-pitch)) + frandom(0, 4), 2, frandom(-1, 1), 1)
			RW09 AAAAAAA 1 A_Refire("Fire")
		Goto Ready
		ReloadFast:
			RW09 H 2
			RW09 I 1
			RW09 J 2
			RW09 K 1
			RW09 L 2
			RW09 M 1
			RW09 N 2
			RW09 A 1
			RW09 AAAA 1 A_Refire("Fire")
		Goto Ready

		Flash:
			TNT1 A 2 A_Light1
			TNT1 A 2 A_Light2
			TNT1 A 0 A_Light0
		Goto LightDone
	}
}

Actor IncineratorProjectile1 : DnD_ExplosiveBase {
	Renderstyle Add
	Radius 6
	Height 12
	Speed 52
	Scale 0.8
	Deathsound "CharonBlaster/Hit"
	Gravity 0.875
	
	Damage(
		DND_WEAPON_INCINERATOR |
		(DND_DMGID_0 << CACHE_SHIFT) |
		(DND_DAMAGETYPE_FIRE << DTYPE_SHIFT) |
		(100 << DPCT_SHIFT)
	)
	
	-NOGRAVITY
	+RIPPER
	+BLOODLESSIMPACT
	+DONTREFLECT
	+FORCERADIUSDMG
	
	Stamina 32768
	
	var int user_ripperid;
	
	States {
		SpawnState:
			DRGP AAAABBBBCCCC 1 Bright A_SpawnItemEx("IncineratorProjectile1_Trail")
		SpawnLoop:
			DRGP DDDDDDDEEEEEEE 1 Bright A_SpawnItemEx("IncineratorProjectile1_Trail")
		Goto Expire
		Death:
			TNT1 A 0 A_SetUserVar("user_expdmg", 
				DND_WEAPON_INCINERATOR |
				(DND_DMGID_0 << CACHE_SHIFT) |
				(DND_DAMAGETYPE_FIRE << DTYPE_SHIFT) |
				(100 << DPCT_SHIFT)
			)
			TNT1 A 0 A_SetUserVar("user_expradius", 48)
			TNT1 A 0 A_SetUserVar("user_fullexpradius", user_expradius)
			TNT1 A 0 A_SetUserVar("user_expflags", DND_DAMAGEFLAG_BLASTSELF)
		Goto DoExplosionDamage
		ContinueFromExplosion:
			DRGP E 3 Bright
		Stop
		Expire:
			TNT1 A 0 A_Stop
			TNT1 A 0 A_ChangeVelocity(0, 0, 0, CVF_REPLACE)
		Goto Death
	}
}

Actor IncineratorProjectile1_Trail {
	Renderstyle Add
	Scale 0.8
	+NOINTERACTION
	+CLIENTSIDEONLY
	States {
		Spawn:
			TNT1 A 1
			DRGP AAAABBBBCCCCDDDDDDEEEEEE 1 Bright A_FadeOut(0.033)
		Stop
	}
}

Actor IncineratorProjectile2 : DnD_ExplosiveBase {
	Speed 32
	Radius 12
	Height 24
	SeeSound "MeteorLauncher/Fire"
	DeathSound "weapons/phoenixhit"
	Scale 1.125
	
	Damage(
		DND_WEAPON_INCINERATOR |
		(DND_DMGID_1 << CACHE_SHIFT) |
		(DND_DAMAGETYPE_FIRE << DTYPE_SHIFT) |
		(100 << DPCT_SHIFT)
	)
	
	+FOILINVUL
	+DONTREFLECT
	States {
		SpawnState:
			VFBL AAA 1 Bright A_SpawnItemEx("IncineratorProjectile2_Trail")
			TNT1 A 0 A_SpawnItemEx("IncineratorProjectile2_Droplet", frandom(-3.6, 3.6), frandom(-3.6, 3.6), 0, frandom(-1, 1), frandom(-1, 1))
			VFBL BBB 1 Bright A_SpawnItemEx("IncineratorProjectile2_Trail")
			TNT1 A 0 A_SpawnItemEx("IncineratorProjectile2_Droplet", frandom(-3.6, 3.6), frandom(-3.6, 3.6), 0, frandom(-1, 1), frandom(-1, 1))
		Loop
		Death:
			TNT1 A 0 A_SpawnItemEx("ExplosionFlareSmall")
			TNT1 AAAAAAAAA 0 A_CustomMissile ("ExplosionParticleVeryFast", 0, 0, random (0, 360), 2, random (0, 360))
		
			TNT1 A 0 A_SetUserVar("user_expdmg", 
				DND_WEAPON_INCINERATOR |
				(DND_DMGID_2 << CACHE_SHIFT) |
				(DND_DAMAGETYPE_FIRE << DTYPE_SHIFT) |
				(100 << DPCT_SHIFT)
			)
			TNT1 A 0 A_SetUserVar("user_expradius", 96 * (1.0 + ACS_NamedExecuteWithResult("DND Explosion Radius Retrieve", DND_USETARGET) * exprad_factor))
			TNT1 A 0 A_SetUserVar("user_fullexpradius", user_expradius / 2)
			TNT1 A 0 A_SetUserVar("user_expflags", DND_DAMAGEFLAG_BLASTSELF)
		Goto DoExplosionDamage
		ContinueFromExplosion:
			XPL1 ABCD 4 Bright
			XPL1 EF 3
		Stop
	}
}

Actor IncineratorProjectile2_Droplet {
	Height 2
	Radius 1
	+CLIENTSIDEONLY
	+DONTSPLASH
	-TELESTOMP
	States {
		Spawn:
			WRBL JKLMNOPQRS 1 Bright
			WRBL TUVWXYZ 1
		Stop
	}
}

Actor IncineratorProjectile2_Trail {
	Renderstyle Translucent
	Alpha 0.875
	+CLIENTSIDEONLY
	+NOINTERACTION
	States {
		Spawn:
			WBAL FG 2 Bright
			WBAL HIJ 2
		Stop
	}
}

Actor IncineratorStacks : Ammo {
	inventory.amount 1
	inventory.maxamount 4
	ammo.backpackamount 0
	ammo.backpackmaxamount 4
	+IGNORESKILL
}