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 "Templar Machine Gun"
	Weapon.BobStyle InverseSmooth
	Weapon.BobSpeed 2.0
	Weapon.BobRangeY 0.4
	Weapon.BobRangeX 0.7
	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 A_TakeInventory("DnD_WeaponID", 0x7FFFFFFF)
			TNT1 A 0 A_GiveInventory("DnD_WeaponID", DND_WEAPON_TEMPLARMG)
			TNT1 A 0 ACS_NamedExecuteAlways("DND Weapon Damage Cache", 0, DND_DMGID_0, 20)
	    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_JumpIfInventory("ArtemisCheck", 1, "FireDecide")
			TNT1 A 0 A_JumpIfInventory("MGClip4", 1, "FireDecide")
		Goto Reload
		FireDecide:
			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_GiveInventory("TemplarShooter", 1)
			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_GiveInventory("TemplarShooter", 1)			
			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("Clip", 1, "ContinueReload")
			RW03 A 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
		Goto Ready
		ContinueReload:
			TNT1 A 0 A_JumpIfInventory("MGClip4", 0, "Failed")
			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_ExecuteAlways(998, 0, 3)
			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_ExecuteAlways(998, 0, 3)
			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_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 A_WeaponReady(WRF_NOSWITCH | WRF_NOFIRE)
			TNT1 A 0 ACS_ExecuteAlways(DND_SPECIALAMMOMSG_SCRIPT, 0)
			RW03 A 1 A_WeaponReady(WRF_NOSWITCH | WRF_NOFIRE)
		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) A_GiveInventory("GrenadeShooterGeneric", 1)
			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 TemplarShooter : DND_Activator {
	states {
		Use:
			TNT1 A 0 A_GiveInventory("DnD_UsedNonSpecial", 1)
			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 A_JumpIfInventory("ArtemisCheck", 1, "NoTake")
			TNT1 A 0 A_TakeInventory("MGClip4", 1)
		NoTake:
			TNT1 A 0 A_JumpIfInventory("NetherCheck", 1, "Full")
			TNT1 A 0 A_FireBullets(4.4, 2.8, 1, ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_0, TALENT_BALLISTIC), "NewBulletPuff_MagicExtra", FBF_NORANDOM | FBF_USEAMMO)
			Stop
		Full:
			TNT1 A 0 A_FireBullets(4.4, 2.8, 1, ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_0, TALENT_BALLISTIC), "NewBulletPuff_MagicExtraFullDMG", FBF_NORANDOM | FBF_USEAMMO)
			Stop
	}
}

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"
	Tag "Riotgun"
	const int riot_clip_max = 8;
	Tag "Riot Cannon"
	Weapon.BobStyle InverseSmooth
	Weapon.BobSpeed 2.0
	Weapon.BobRangeY 0.4
	Weapon.BobRangeX 0.7
	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 A_TakeInventory("DnD_WeaponID", 0x7FFFFFFF)
			TNT1 A 0 A_GiveInventory("DnD_WeaponID", DND_WEAPON_RIOTCANNON)
			TNT1 A 0 ACS_NamedExecuteAlways("DND Weapon Damage Cache", 0, DND_DMGID_0, 12)
			TNT1 A 0 ACS_NamedExecuteAlways("DND Weapon Damage Cache", 0, DND_DMGID_1, 15)
			TNT1 A 0 ACS_NamedExecuteAlways("DND Weapon Damage Cache", 0, DND_DMGID_2, 20)
			TNT1 A 0 ACS_NamedExecuteAlways("DND Weapon Damage Cache", 0, DND_DMGID_3, 20)
	    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("RiotgunClip", 1, "FireDecide")
		Goto Reload
		FireDecide:
			TNT1 A 0 A_JumpIfInventory("SpecialAmmoMode_4", AMMO_EXPLOSIVESHELL, "Explo_Fire")
			TNT1 A 0 A_JumpIfInventory("SpecialAmmoMode_4", AMMO_NITROGENSHELL, "Nitro_Fire")
		Goto FireCont
		FireCont:
			RIOT B 1 Bright A_GiveInventory("RiotgunShooter1", 1)
			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 A_GiveInventory("RiotgunShooter1", 1)
			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 A_GiveInventory("RiotgunShooter1", 1)
			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:
			RIOT A 2 A_Refire("FireCont")
		Goto Ready
		Finish_Nitro:
			RIO2 A 2 A_Refire("Nitro_Fire")
		Goto Ready
		Finish_Explo:
			RIO3 A 2 A_Refire("Explo_Fire")
		Goto Ready
		

		Fire2:
			TNT1 A 0 A_JumpIfInventory("RiotgunClip", 1, "FireDecide2")
		Goto Reload2
		FireDecide2:
			TNT1 A 0 A_JumpIfInventory("SpecialAmmoMode_4", AMMO_EXPLOSIVESHELL, "Explo_Fire2")
			TNT1 A 0 A_JumpIfInventory("SpecialAmmoMode_4", AMMO_NITROGENSHELL, "Nitro_Fire2")
		Goto FireCont2
		FireCont2:
			RIOT H 2 Bright A_GiveInventory("RiotgunShooter2", 1)
			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 A_GiveInventory("RiotgunShooter2", 1)
			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 A_GiveInventory("RiotgunShooter2", 1)
			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:
			RIOT G 1 A_Refire("FireCont2")
		Goto Ready
		Cont2_Nitro:
			RIO2 F 1 A_Refire("Nitro_Fire2")
		Goto Ready
		Cont2_Explo:
			RIO3 F 1 A_Refire("Explo_Fire2")
		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_JumpIfInventory("RiotgunShell", 1, "ContinueReload")
			RIOT A 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
		Goto Failed
		Nitro_Reload:
			RIO2 A 0 A_JumpIfInventory("NitroShell", 1, "ContinueReload_Nitro")
			RIO2 A 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
		Goto ModeSwitch
		Explo_Reload:
			RIO3 A 0 A_JumpIfInventory("ExplodingShell", 1, "ContinueReload_Explo")
			RIO3 A 1 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_ExecuteAlways(998, 0, 4, 1, AMMO_RIOTSHELL)
			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_ExecuteAlways(998, 0, 4, 1, AMMO_NITROGENSHELL)
			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_ExecuteAlways(998, 0, 4, 1, AMMO_EXPLOSIVESHELL)
			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_JumpIfInventory("RiotgunShell", 1, "ContinueReload2")
		Goto Failed2
		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_ExecuteAlways(998, 0, 4, 1, AMMO_RIOTSHELL)
			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_JumpIfInventory("NitroShell", 1, "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_ExecuteAlways(998, 0, 4, 1, AMMO_NITROGENSHELL)
			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_JumpIfInventory("ExplodingShell", 1, "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_ExecuteAlways(998, 0, 4, 1, AMMO_EXPLOSIVESHELL)
			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:
			RIOT A 1 A_WeaponReady(WRF_NOSWITCH | WRF_NOFIRE)
			TNT1 A 0 A_JumpIfInventory("RiotGunFireMode", 1, "MS_Alt")
			TNT1 A 0 A_JumpIfInventory("SpecialAmmoMode_4", AMMO_EXPLOSIVESHELL, "Explo_MS")
			TNT1 A 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:
			TNT1 A 0 A_JumpIfInventory("SpecialAmmoMode_4", AMMO_EXPLOSIVESHELL, "Explo_MS_Alt")
			TNT1 A 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 RiotgunShooter1 : DnD_Activator {
	States {
		Use:
			TNT1 A 0 A_GiveInventory("DnD_UsedNonSpecial", 1)
			TNT1 A 0 A_JumpIfInventory("SpecialAmmoMode_4", AMMO_EXPLOSIVESHELL, "Explo")
			TNT1 A 0 A_JumpIfInventory("SpecialAmmoMode_4", AMMO_NITROGENSHELL, "Nitro")
			TNT1 A 0 A_JumpIfInventory("ArtemisCheck", 1, "NoTake")
			TNT1 A 0 A_TakeInventory("RiotgunClip", 1)
			TNT1 A 0 A_TakeInventory("RiotgunShell", 1)
		NoTake:
			TNT1 A 0 A_playWeaponsound("weapons/RiotgunFire")
			TNT1 A 0 A_JumpIfInventory("NetherCheck", 1, "Full")
			TNT1 A 0 A_FireBullets(riot_spreadx, riot_spready, 7, ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_0, TALENT_BALLISTIC), "NewBulletPuff", FBF_NORANDOM)
		Stop
		Full:
			TNT1 A 0 A_FireBullets(riot_spreadx, riot_spready, 7, ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_0, TALENT_BALLISTIC), "NewBulletPuff_FullDMG", FBF_NORANDOM)
		Stop
		Nitro:
			TNT1 A 0 A_GiveInventory("NitroShellShooter_Riot", 1)
		Stop
		Explo:
			TNT1 A 0 A_GiveInventory("ExploShellShooter_Riot", 1)
		Stop
	}
}

Actor RiotgunShooter2 : DnD_Activator {
	States {
		Use:
			TNT1 A 0 A_GiveInventory("DnD_UsedNonSpecial", 1)
			TNT1 A 0 A_JumpIfInventory("SpecialAmmoMode_4", AMMO_EXPLOSIVESHELL, "Explo")
			TNT1 A 0 A_JumpIfInventory("SpecialAmmoMode_4", AMMO_NITROGENSHELL, "Nitro")
			TNT1 A 0 A_JumpIfInventory("ArtemisCheck", 1, "NoTake")
			TNT1 A 0 A_TakeInventory("RiotgunClip", 1)
			TNT1 A 0 A_TakeInventory("RiotgunShell", 1)
		NoTake:
			TNT1 A 0 A_playWeaponsound("weapons/RiotgunFire")
			TNT1 A 0 A_JumpIfInventory("NetherCheck", 1, "Full")
			TNT1 A 0 A_FireBullets(riot_spreadx2, riot_spready2, 7, ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_0, TALENT_BALLISTIC), "NewBulletPuff", FBF_NORANDOM)
		Stop
		Full:
			TNT1 A 0 A_FireBullets(riot_spreadx2, riot_spready2, 7, ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_0, TALENT_BALLISTIC), "NewBulletPuff_FullDMG", FBF_NORANDOM)
		Stop
		Nitro:
			TNT1 A 0 A_GiveInventory("NitroShellShooter_Riot", 1)
		Stop
		Explo:
			TNT1 A 0 A_GiveInventory("ExploShellShooter_Riot", 1)
		Stop
	}
}

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]"
}

// Riot shooters
Actor NitroShellShooter_Riot : DnD_Activator {
	States {
		Pickup:
			TNT1 A 0 A_PlayWeaponSound("Shells/Nitro")
			TNT1 A 0 A_JumpIfInventory("ArtemisCheck", 1, "NoTake")
			TNT1 A 0 A_TakeInventory("NitroShell", 1)
			TNT1 A 0 A_TakeInventory("RiotgunClip", 1)
		NoTake:
			TNT1 A 0 A_JumpIfInventory("NetherCheck", 1, "Full")
			TNT1 A 0 A_JumpIfInventory("RiotgunFireMode", 1, "Inaccurate")
			TNT1 A 0 A_FireBullets(riot_spreadx, riot_spready, 7, ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_1, TALENT_BALLISTIC), "NitroShellPuff", FBF_NORANDOM)
		Goto CheckMode
		Inaccurate:
			TNT1 A 0 A_FireBullets(riot_spreadx2, riot_spready2, 7, ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_1, TALENT_BALLISTIC), "NitroShellPuff", FBF_NORANDOM)
		Goto CheckMode
		Full:
			TNT1 A 0 A_JumpIfInventory("RiotgunFireMode", 1, "FullInaccurate")
			TNT1 A 0 A_FireBullets(riot_spreadx, riot_spready, 7, ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_1, TALENT_BALLISTIC), "NitroShellPuff_FullDMG", FBF_NORANDOM)
		Goto CheckMode
		FullInaccurate:
			TNT1 A 0 A_FireBullets(riot_spreadx2, riot_spready2, 7, ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_1, TALENT_BALLISTIC), "NitroShellPuff_FullDMG", FBF_NORANDOM)
		Goto CheckMode
		CheckMode:
			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 A_TakeInventory("SpecialAmmoMode_4", 0)
			TNT1 A 0 A_GiveInventory("SpecialAmmoMode_4", AMMO_RIOTSHELL)
		Stop
		Nothing:
			TNT1 A 0
		Stop
	}
}

Actor ExploShellShooter_Riot : DnD_Activator {
	States {
		Pickup:
			TNT1 A 0 A_PlayWeaponSound("Shells/Explo")
			TNT1 A 0 A_JumpIfInventory("ArtemisCheck", 1, "NoTake")
			TNT1 A 0 A_TakeInventory("ExplodingShell", 1)
			TNT1 A 0 A_TakeInventory("RiotgunClip", 1)
		NoTake:
			TNT1 A 0 A_JumpIfInventory("NetherCheck", 1, "Full")
			TNT1 A 0 A_JumpIfInventory("RiotgunFireMode", 1, "Inaccurate")
			TNT1 A 0 A_FireBullets(riot_spreadx, riot_spready, 3, ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_1, TALENT_BALLISTIC), "ExplodingPuffNoSelfDmg", FBF_NORANDOM)
			TNT1 A 0 A_FireBullets(riot_spreadx, riot_spready, 4, ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_1, TALENT_BALLISTIC), "ExplodingPuff", FBF_NORANDOM)
		Goto CheckMode
		Inaccurate:
			TNT1 A 0 A_FireBullets(riot_spreadx2, riot_spready2, 3, ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_1, TALENT_BALLISTIC), "ExplodingPuffNoSelfDmg", FBF_NORANDOM)
			TNT1 A 0 A_FireBullets(riot_spreadx2, riot_spready2, 4, ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_1, TALENT_BALLISTIC), "ExplodingPuff", FBF_NORANDOM)
		Goto CheckMode
		Full:
			TNT1 A 0 A_JumpIfInventory("RiotgunFireMode", 1, "FullInaccurate")
			TNT1 A 0 A_FireBullets(riot_spreadx, riot_spready, 3, ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_1, TALENT_BALLISTIC), "ExplodingPuffNoSelfDmg_FullDMG", FBF_NORANDOM)
			TNT1 A 0 A_FireBullets(riot_spreadx, riot_spready, 7, ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_1, TALENT_BALLISTIC), "ExplodingPuff_FullDMG", FBF_NORANDOM)
		Goto CheckMode
		FullInaccurate:
			TNT1 A 0 A_FireBullets(riot_spreadx2, riot_spready2, 3, ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_1, TALENT_BALLISTIC), "ExplodingPuffNoSelfDmg_FullDMG", FBF_NORANDOM)
			TNT1 A 0 A_FireBullets(riot_spreadx2, riot_spready2, 7, ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_1, TALENT_BALLISTIC), "ExplodingPuff_FullDMG", FBF_NORANDOM)
		Goto CheckMode
		CheckMode:
			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 A_TakeInventory("SpecialAmmoMode_4", 0)
			TNT1 A 0 A_GiveInventory("SpecialAmmoMode_4", AMMO_RIOTSHELL)
		Stop
		Nothing:
			TNT1 A 0
		Stop
	}
}

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 "Acid Rifle"
	Weapon.BobStyle InverseSmooth
	Weapon.BobSpeed 1.8
	Weapon.BobRangeY 0.5
	Weapon.BobRangeX 0.6
	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 A_TakeInventory("DnD_WeaponID", 0x7FFFFFFF)
			TNT1 A 0 A_GiveInventory("DnD_WeaponID", DND_WEAPON_ACIDRIFLE)
			TNT1 A 0 ACS_NamedExecuteAlways("DND Weapon Damage Cache", 0, DND_DMGID_0, 15)
			TNT1 A 0 ACS_NamedExecuteAlways("DND Weapon Damage Cache", 0, DND_DMGID_1, 5, 1 | (3 << 16))
			TNT1 A 0 ACS_NamedExecuteAlways("DND Weapon Damage Cache", 0, DND_DMGID_2, 10, 3 | (6 << 16))
			TNT1 A 0 ACS_NamedExecuteAlways("DND Weapon Damage Cache", 0, DND_DMGID_3, 64)
	    SelectLoop:
			RIF1 A 1 A_Raise
			TNT1 A 0 A_Raise
		Loop
		Fire:
			TNT1 A 0 A_JumpIfInventory("ArtemisCheck", 1, "FireDecide")
			TNT1 A 0 A_JumpIfInventory("AcidClip", 1, "FireDecide")
		Goto Reload
		FireDecide:
			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_GiveInventory("AcidRifleShooter", 1)
			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_GiveInventory("AcidRifleShooter", 1)
			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_GiveInventory("AcidRifleShooter", 1)
			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("AcidAmmo", 1, "ContinueReload")
			RIF1 A 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
		Goto Ready
		ContinueReload:
			TNT1 A 0 A_JumpIfInventory("AcidClip", 0, "Failed")
			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 A 1 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_JumpIfInventory("ArtemisCheck", 1, "ContinueAltFire")
			TNT1 A 0 A_JumpIfInventory("AcidClip", 8, "ContinueAltfire")
			TNT1 A 0 A_JumpIfInventory("AcidAmmo", 1, "Reload")
			RIF1 A 1 A_WeaponReady(WRF_NOSWITCH | WRF_NOFIRE)
		Goto Ready
		ContinueAltFire:
			RIF2 D 3 A_PlayWeaponSound("AcidRifle/BoltFire")
			TNT1 A 0 A_GiveInventory("AcidRifleShooter2", 1)
			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 AcidRifleShooter : DND_Activator {
	states {
		Use:
			TNT1 A 0 A_GiveInventory("DnD_UsedNonSpecial", 1)
			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 A_JumpIfInventory("ArtemisCheck", 1, "NoTake")
			TNT1 A 0 A_TakeInventory("AcidClip", 1)
		NoTake:
			TNT1 A 0 A_JumpIfInventory("NetherCheck", 1, "Full")
			TNT1 A 0 A_FireBullets(5.6, 3.2, 1, ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_0, TALENT_ELEMENTAL), "AcidPuff", FBF_NORANDOM | FBF_USEAMMO)
			Stop
		Full:
			TNT1 A 0 A_FireBullets(5.6, 3.2, 1, ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_0, TALENT_ELEMENTAL), "AcidPuff_FullDMG", FBF_NORANDOM | FBF_USEAMMO)
			Stop
	}
}

Actor AcidRifleShooter2 : DND_Activator {
	states {
		Use:
			TNT1 A 0 A_GiveInventory("DnD_UsedNonSpecial", 1)
			TNT1 A 0 A_JumpIfInventory("ArtemisCheck", 1, "NoTake")
			TNT1 A 0 A_TakeInventory("AcidClip", 8)
		NoTake:
			TNT1 A 0 A_JumpIfInventory("NetherCheck", 1, "Full")
			TNT1 A 0 A_FireCustomMissile("AcidBolt", 0, 0, 4, -8)
			Stop
		Full:
			TNT1 A 0 A_FireCustomMissile("AcidBolt_FullDMG", 0, 0, 4, -8)
			Stop
	}
}

Actor AcidRifleShooter3 : DND_Activator {
	states {
		Use:
			TNT1 A 0 A_GiveInventory("DnD_UsedNonSpecial", 1)
			TNT1 A 0 A_JumpIfInventory("ArtemisCheck", 1, "NoTake")
			TNT1 A 0 A_TakeInventory("AcidClip", 8)
		NoTake:
			TNT1 A 0 A_JumpIfInventory("NetherCheck", 1, "Full")
			TNT1 A 0 A_FireCustomMissile("AcidBolt", 0, 0, 4, -16)
			Stop
		Full:
			TNT1 A 0 A_FireCustomMissile("AcidBolt_FullDMG", 0, 0, 4, -16)
			Stop
	}
}

Actor AcidPuff : BulletPuff {
	VSpeed 0
	DamageType "AcidRifle"
	Renderstyle Add
	Alpha 0.8
	Scale 0.425
	+PUFFGETSOWNER
	+PUFFONACTORS
	+MTHRUSPECIES
	States {
		Spawn:
			TNT1 A 0 NoDelay A_PlaySound("AcidRifle/Hit")
			TNT1 A 0 A_Explode(ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_1, TALENT_ELEMENTAL, DND_USETARGET), 40, 0, 0, 24)
			RIF2 JKL 3
			TNT1 A 0 A_Explode(ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_1, TALENT_ELEMENTAL, DND_USETARGET), 40, 0, 0, 24)
			RIF2 MN 2
			TNT1 A 5
			TNT1 A 0 A_Explode(ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_1, TALENT_ELEMENTAL, DND_USETARGET), 40, 0, 0, 24)
			TNT1 A 9
			TNT1 A 0 A_Explode(ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_1, TALENT_ELEMENTAL, DND_USETARGET), 40, 0, 0, 24)
		Stop
	}
}

Actor AcidPuff_FullDMG : AcidPuff {
	DamageType "AcidRifleFull"
	+FORCERADIUSDMG
	States {
		Spawn:
			TNT1 A 0 NoDelay A_PlaySound("AcidRifle/Hit")
			TNT1 A 0 A_Explode(ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_1, TALENT_ELEMENTAL, DND_USETARGET), 40, 0, 0, 24)
			RIF2 JKL 3
			TNT1 A 0 A_Explode(ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_1, TALENT_ELEMENTAL, DND_USETARGET), 40, 0, 0, 24)
			RIF2 MN 2
			TNT1 A 5
			TNT1 A 0 A_Explode(ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_1, TALENT_ELEMENTAL, DND_USETARGET), 40, 0, 0, 24)
			TNT1 A 9
			TNT1 A 0 A_Explode(ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_1, TALENT_ELEMENTAL, DND_USETARGET), 40, 0, 0, 24)
		Stop
	}
}

Actor AcidRiflePoisonCloud {
    Radius 24 
    Height 6 
	DamageType "AcidRifle"
	+THRUACTORS
	+DONTSPLASH
	+NOGRAVITY
	+MTHRUSPECIES
    RENDERSTYLE Translucent 
    ALPHA 0.66
	ReactionTime 10
	States {
		Spawn: 
			TRPS ABCD 4
			TNT1 A 0 A_Stop
		SpawnLoop:
			TRPS EEFFGGDD 2 A_Explode(ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_1, TALENT_ELEMENTAL, DND_USETARGET), 96, 0, 0, 48)
			TNT1 A 0 A_CountDown
		Loop
		Death:
			TRPS DCBA 4 
		Stop
	}
}

Actor AcidRiflePoisonCloud_FullDMG : AcidRiflePoisonCloud {
	DamageType "AcidRifleFull"
	+FORCERADIUSDMG
}


Actor AcidBolt {
	PROJECTILE
	Damage (ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_2, TALENT_ELEMENTAL, DND_USETARGET))
	DamageType "AcidRifle"
	DeathSound "AcidRifle/BoltHit"
	Speed 40
	Radius 6
	Height 12
	Scale 0.65
	+SEEKERMISSILE
	+MTHRUSPECIES
	const int sticktimer = 25;
	var int user_count;
	var int user_height;
	States {
		Spawn:
			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_Explode(ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_3, TALENT_ELEMENTAL, DND_USETARGET), 128, 0, 0, 64)
			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(-6, 6), frandom(-6, 6), frandom(-2, 2), frandom(-180, 180), SXF_NOCHECKPOSITION)
			TNT1 A 0 A_setUserVar("user_count", user_count + 1)
		Loop
		ExplodeFinish:
			TNT1 A 0
		Stop
	}
}

Actor AcidBolt_FullDMG : AcidBolt {
	DamageType "AcidRifleFull"
	+FORCERADIUSDMG
	States {
		Spawn:
			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_Explode(ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_3, TALENT_ELEMENTAL, DND_USETARGET), 128, 0, 0, 64)
			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_FullDMG", 0, 0, 16, frandom(-6, 6), frandom(-6, 6), frandom(-2, 2), frandom(-180, 180), SXF_NOCHECKPOSITION)
			TNT1 A 0 A_setUserVar("user_count", user_count + 1)
		Loop
		ExplodeFinish:
			TNT1 A 0
		Stop
	}
}