anchor.diff: -//Stollen vars so this all work for real - Copy pasted addtion
  -
  -/obj/item/ammo_casing/mag/
  -	var/e_cost = 50
  -
  -/obj/item/gun/mag
  -	var/obj/item/stock_parts/cell/cell //What type of power cell this uses
  -	var/cell_type = /obj/item/stock_parts/cell
  -	var/modifystate = 0
  -	var/list/ammo_type = list(/obj/item/ammo_casing/mag)
  -	var/can_charge = 1 //Can it be charged in a recharger?
  -	var/charge_sections = 4
  -	ammo_x_offset = 2
  -	var/old_ratio = 0 // stores the gun's previous ammo "ratio" to see if it needs an updated iconn
  -	var/charge_tick = 0
  -	var/charge_delay = 4
  -	var/dead_cell = FALSE //set to true so the gun is given an empty cell
  -	var/spawnwithmagazine = TRUE
  -	var/mag_type = /obj/item/ammo_box/magazine/mmag_e //Removes the need for max_ammo and caliber info
  -	var/obj/item/ammo_box/magazine/magazine
  -	var/casing_ejector = TRUE //whether the gun ejects the chambered casing
  -
  -/obj/item/gun/mag/Initialize()
  -	. = ..()
  -	if(!spawnwithmagazine)
  -		update_icon()
  -		return
  -	if (!magazine)
  -		magazine = new mag_type(src)
  -	chamber_round()
  -	update_icon()
  -
  -/obj/item/gun/mag/process_chamber(empty_chamber = 1)
  -	var/obj/item/ammo_casing/AC = chambered //Find chambered round
  -	if(istype(AC)) //there's a chambered round
  -		if(casing_ejector)
  -			AC.forceMove(drop_location()) //Eject casing onto ground.
  -			AC.bounce_away(TRUE)
  -			chambered = null
  -		else if(empty_chamber)
  -			chambered = null
  -	chamber_round()
  -
  -/obj/item/gun/mag/proc/chamber_round()
  -	if (chambered || !magazine)
  -		return
  -	else if (magazine.ammo_count())
  -		chambered = magazine.get_round()
  -		chambered.forceMove(src)
  -
  -/obj/item/gun/mag/can_shoot()
  -	if(!magazine || !magazine.ammo_count(0))
  -		return 0
  -	return 1
  -
  -/obj/item/gun/mag/attackby(obj/item/A, mob/user, params)
  -	..()
  -	if (istype(A, /obj/item/ammo_box/magazine))
  -		var/obj/item/ammo_box/magazine/AM = A
  -		if (!magazine && istype(AM, mag_type))
  -			if(user.transferItemToLoc(AM, src))
  -				magazine = AM
  -				to_chat(user, "<span class='notice'>You load a new magazine into \the [src].</span>")
  -				if(magazine.ammo_count())
  -					playsound(src, "gun_insert_full_magazine", 70, 1)
  -					if(!chambered)
  -						chamber_round()
  -						addtimer(CALLBACK(GLOBAL_PROC, .proc/playsound, src, 'sound/weapons/gun_chamber_round.ogg', 100, 1), 3)
  -				else
  -					playsound(src, "gun_insert_empty_magazine", 70, 1)
  -				A.update_icon()
  -				update_icon()
  -				return 1
  -			else
  -				to_chat(user, "<span class='warning'>You cannot seem to get \the [src] out of your hands!</span>")
  -				return
  -		else if (magazine)
  -			to_chat(user, "<span class='notice'>There's already a magazine in \the [src].</span>")
  -
  -//ATTACK HAND IGNORING PARENT RETURN VALUE
  -
  -/obj/item/gun/mag/attack_self(mob/living/user)
  -	var/obj/item/ammo_casing/AC = chambered //Find chambered round
  -	if(magazine)
  -		magazine.forceMove(drop_location())
  -		user.put_in_hands(magazine)
  -		magazine.update_icon()
  -		if(magazine.ammo_count())
  -			playsound(src, 'sound/weapons/gun_magazine_remove_full.ogg', 70, 1)
  -		else
  -			playsound(src, "gun_remove_empty_magazine", 70, 1)
  -		magazine = null
  -		to_chat(user, "<span class='notice'>You pull the magazine out of \the [src].</span>")
  -	else if(chambered)
  -		AC.forceMove(drop_location())
  -		AC.bounce_away()
  -		chambered = null
  -		to_chat(user, "<span class='notice'>You unload the round from \the [src]'s chamber.</span>")
  -		playsound(src, "gun_slide_lock", 70, 1)
  -	else
  -		to_chat(user, "<span class='notice'>There's no magazine in \the [src].</span>")
  -	update_icon()
  -	return
  -
  -/obj/item/gun/mag/examine(mob/user)
  -	..()
  -	to_chat(user, "It has [get_ammo()] round\s remaining.")
  -
  -/obj/item/gun/mag/proc/get_ammo(countchambered = 1)
  -	var/boolets = 0 //mature var names for mature people
  -	if (chambered && countchambered)
  -		boolets++
  -	if (magazine)
  -		boolets += magazine.ammo_count()
  -	return boolets
  -
  -/obj/item/gun/mag/emp_act(severity)
  -	. = ..()
  -	if(!(. & EMP_PROTECT_CONTENTS))
  -		cell.use(round(cell.charge / severity))
  -		recharge_newshot() //and try to charge a new shot
  -
  -/obj/item/gun/mag/get_cell()
  -	return cell
  -
  -/obj/item/gun/mag/Initialize()
  -	. = ..()
  -	if(cell_type)
  -		cell = new cell_type(src)
  -	else
  -		cell = new(src)
  -	if(!dead_cell)
  -		cell.give(cell.maxcharge)
  -	update_ammo_types()
  -	recharge_newshot(TRUE)
  -
  -/obj/item/gun/mag/proc/update_ammo_types()
  -	var/obj/item/ammo_casing/mag/shot
  -	for (var/i = 1, i <= ammo_type.len, i++)
  -		var/shottype = ammo_type[i]
  -		shot = new shottype(src)
  -		ammo_type[i] = shot
  -	fire_sound = shot.fire_sound
  -	fire_delay = shot.delay
  -
  -/obj/item/gun/mag/Destroy()
  -	QDEL_NULL(cell)
  -	STOP_PROCESSING(SSobj, src)
  -	return ..()
  -
  -/obj/item/gun/mag/can_shoot()
  -	var/obj/item/ammo_casing/mag/mag = ammo_type
  -	return !QDELETED(cell) ? (cell.charge >= mag.e_cost) : FALSE
  -
  -/obj/item/gun/mag/recharge_newshot(no_cyborg_drain)
  -	if (!ammo_type || !cell)
  -		return
  -	if(!chambered)
  -		var/obj/item/ammo_casing/energy/AC = ammo_type
  -		if(cell.charge >= AC.e_cost) //if there's enough power in the cell cell...
  -			chambered = AC //...prepare a new shot based on the current ammo type selected
  -			if(!chambered.BB)
  -				chambered.newshot()
  -
  -/obj/item/gun/mag/process_chamber()
  -	if(chambered && !chambered.BB) //if BB is null, i.e the shot has been fired...
  -		var/obj/item/ammo_casing/mag/mag = chambered
  -		cell.use(mag.e_cost)//... drain the cell cell
  -	chambered = null //either way, released the prepared shot
  -	recharge_newshot() //try to charge a new shot
  -
  -/obj/item/gun/mag/update_icon(force_update)
  -	if(QDELETED(src))
  -		return
  -	..()
  -	var/ratio = CEILING(CLAMP(cell.charge / cell.maxcharge, 0, 1) * charge_sections, 1)
  -	if(ratio == old_ratio && !force_update)
  -		return
  -	old_ratio = ratio
  -	cut_overlays()
  -
   ///////XCOM X9 AR///////
   
   /obj/item/gun/ballistic/automatic/x9	//will be adminspawn only so ERT or something can use them
  
positive.code: 	spread = 30	//should be 40 for XCOM memes, but since its adminspawn only, might as well make it useable
  	recoil = 1
  
  ////bullets///
  
  /obj/item/projectile/bullet/mags
  	icon = 'modular_citadel/icons/obj/guns/cit_guns.dmi'
  
negative.code: 	spread = 5
  	recoil = 0.15
  	casing_ejector = 0
  
  ///research///
  
  /obj/item/gun/ballistic/automatic/magrifle/nopin
  	pin = null
  	spawnwithmagazine = FALSE
  
  /datum/design/magrifle
  	name = "Magrifle"
  	desc = "An upscaled Magpistol in rifle form."
  	id = "magrifle"
  	build_type = PROTOLATHE
  	materials = list(MAT_METAL = 10000, MAT_GLASS = 2000, MAT_URANIUM = 2000, MAT_TITANIUM = 10000, MAT_SILVER = 4000, MAT_GOLD = 2000)
  	build_path = /obj/item/gun/ballistic/automatic/magrifle/nopin
  	category = list("Weapons")
  	departmental_flags = DEPARTMENTAL_FLAG_SECURITY
  
  /datum/design/mag_magrifle
  	name = "Magrifle Magazine (Lethal)"
  	desc = "A 24-round magazine for the Magrifle."
  	id = "mag_magrifle"
  	build_type = PROTOLATHE
  	materials = list(MAT_METAL = 8000, MAT_SILVER = 1000)
  	build_path = /obj/item/ammo_box/magazine/mmag/lethal
  	category = list("Ammo")
  	departmental_flags = DEPARTMENTAL_FLAG_SECURITY
  
  /datum/design/mag_magrifle/nl
  	name = "Magrifle Magazine (Non-Lethal)"
  	desc = "A 24- round non-lethal magazine for the Magrifle."
  	id = "mag_magrifle_nl"
  	materials = list(MAT_METAL = 6000, MAT_SILVER = 500, MAT_TITANIUM = 500)
  	build_path = /obj/item/ammo_box/magazine/mmag
  	departmental_flags = DEPARTMENTAL_FLAG_SECURITY
  
  ///foamagrifle///
  
  /obj/item/ammo_box/magazine/toy/foamag
  	name = "foam force magrifle magazine"
  	icon = 'modular_citadel/icons/obj/guns/cit_guns.dmi'
  	icon_state = "foamagmag"
  	max_ammo = 24
  	multiple_sprites = 2
  	ammo_type = /obj/item/ammo_casing/caseless/foam_dart/mag
  	materials = list(MAT_METAL = 200)
  
  /obj/item/gun/ballistic/automatic/magrifle/toy
  	name = "foamag rifle"
  	desc = "A foam launching magnetic rifle. Ages 8 and up."
  	icon_state = "foamagrifle"
  	obj_flags = 0
  	mag_type = /obj/item/ammo_box/magazine/toy/foamag
  	casing_ejector = FALSE
  	spread = 60
  	w_class = WEIGHT_CLASS_BULKY
  	weapon_weight = WEAPON_HEAVY
  
  /*
  // TECHWEBS IMPLEMENTATION
  //
  
  /datum/techweb_node/magnetic_weapons
  	id = "magnetic_weapons"
  	display_name = "Magnetic Weapons"
  	description = "Weapons using magnetic technology"
  	prereq_ids = list("weaponry", "adv_weaponry", "emp_adv")
  	design_ids = list("magrifle", "magpisol", "mag_magrifle", "mag_magrifle_nl", "mag_magpistol", "mag_magpistol_nl")
  	research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
  	export_price = 5000
  */
  
  //////Hyper-Burst Rifle//////
  
  