diff --git a/code/game/gamemodes/gang/gang_datum.dm b/code/game/gamemodes/gang/gang_datum.dm
index 805cac552fe..ac0e2429089 100644
--- a/code/game/gamemodes/gang/gang_datum.dm
+++ b/code/game/gamemodes/gang/gang_datum.dm
@@ -28,13 +28,25 @@
/datum/gang_item/function/gang_ping,
/datum/gang_item/function/recall,
/datum/gang_item/function/outfit,
+ /datum/gang_item/weapon/shuriken
/datum/gang_item/weapon/switchblade,
+ /datum/gang_item/weapon/improvised,
+ /datum/gang_item/weapon/ammo/improvised_ammo,
+ /datum/gang_item/weapon/surplus,
+ /datum/gang_item/weapon/ammo/surplus_ammo,
/datum/gang_item/weapon/pistol,
/datum/gang_item/weapon/ammo/pistol_ammo,
+ /datum/gang_item/weapon/sniper
+ /datum/gang_item/weapon/ammo/sniper_ammo
+ /datum/gang_item/weapon/MG,
/datum/gang_item/weapon/uzi,
/datum/gang_item/weapon/ammo/uzi_ammo,
/datum/gang_item/equipment/spraycan,
+ /datum/gang_item/equipment/sharpener
+ /datum/gang_item/equipment/emp
/datum/gang_item/equipment/c4,
+ /datum/gang_item/equipment/frag
+ /datum/gang_item/equipment/stimpack
/datum/gang_item/equipment/implant_breaker,
/datum/gang_item/equipment/pen,
/datum/gang_item/equipment/gangtool,
diff --git a/code/game/gamemodes/gang/gang_items.dm b/code/game/gamemodes/gang/gang_items.dm
index 724191c6421..5678cb7fb32 100644
--- a/code/game/gamemodes/gang/gang_items.dm
+++ b/code/game/gamemodes/gang/gang_items.dm
@@ -120,6 +120,30 @@
cost = 5
item_path = /obj/item/weapon/switchblade
+/datum/gang_item/weapon/surplus
+ name = "Surplus Rifle"
+ id = "surplus"
+ cost = 8
+ item_path = /obj/item/weapon/gun/ballistic/automatic/surplus
+
+/datum/gang_item/weapon/ammo/surplus_ammo
+ name = "Surplus Rifle Ammo"
+ id = "surplus_ammo"
+ cost = 5
+ item_path = /obj/item/ammo_box/magazine/m10mm/rifle
+
+/datum/gang_item/weapon/improvised
+ name = "Sawn-Off Improvised Shotgun"
+ id = "sawn"
+ cost = 6
+ item_path = /obj/item/weapon/gun/ballistic/revolver/doublebarrel/improvised/sawn
+
+/datum/gang_item/weapon/ammo/improvised_ammo
+ name = "Box of Buckshot"
+ id = "buckshot"
+ cost = 5
+ item_path = /obj/item/weapon/storage/box/lethalshot
+
/datum/gang_item/weapon/pistol
name = "10mm Pistol"
id = "pistol"
@@ -131,7 +155,7 @@
id = "pistol_ammo"
cost = 10
item_path = /obj/item/ammo_box/magazine/m10mm
-
+
/datum/gang_item/weapon/sniper
name = ".50cal Sniper Rifle"
id = "sniper"
@@ -144,20 +168,32 @@
cost = 15
item_path = /obj/item/ammo_box/magazine/sniper_rounds
+/datum/gang_item/weapon/MG
+ name = "Mounted Machine Gun"
+ id = "MG"
+ cost = 50
+ item_path = /obj/machinery/manned_turret
+
/datum/gang_item/weapon/uzi
name = "Uzi SMG"
id = "uzi"
cost = 60
item_path = /obj/item/weapon/gun/ballistic/automatic/mini_uzi
- id = "uzi"
+
/datum/gang_item/weapon/ammo/uzi_ammo
name = "Uzi Ammo"
id = "uzi_ammo"
cost = 40
item_path = /obj/item/ammo_box/magazine/uzim9mm
-
-
+
+
+
+
+
+
+
+
///////////////////
//EQUIPMENT
///////////////////
@@ -171,7 +207,7 @@
id = "spraycan"
cost = 5
item_path = /obj/item/toy/crayon/spraycan/gang
-
+
/datum/gang_item/equipment/sharpener
name = "Sharpener"
id = "whetstone"
@@ -206,7 +242,7 @@
/datum/gang_item/equipment/stimpack
name = "Black Market Stimulants"
id = "stimpack"
- cost = 15
+ cost = 12
item_path = /obj/item/weapon/reagent_containers/syringe/stimulants
/datum/gang_item/equipment/implant_breaker
@@ -305,11 +341,11 @@
if(obj.density)
to_chat(user, "There's not enough room here!")
return FALSE
-
+
if(dominator_excessive_walls(user))
to_chat(user, "span class='warning'>The dominator will not function here! The dominator requires an open space within three standard units so that walls do not interfere with the signal.")
return FALSE
-
+
if(!(usrarea.type in gang.territory|gang.territory_new))
to_chat(user, "The dominator can be spawned only on territory controlled by your gang!")
return FALSE
diff --git a/code/game/machinery/porta_turret/portable_turret.dm b/code/game/machinery/porta_turret/portable_turret.dm
index aa8aedbbe2e..39e0083a61b 100644
--- a/code/game/machinery/porta_turret/portable_turret.dm
+++ b/code/game/machinery/porta_turret/portable_turret.dm
@@ -917,3 +917,129 @@
on = 0
spawn(100)
on = 1
+
+/////// MANNED TURRET ////////
+
+/obj/machinery/manned_turret
+ name = "machine gun turret"
+ desc = "A mounted gun that, while antiquated, has been a black market staple for centuries."
+ icon = 'icons/obj/turrets.dmi'
+ icon_state = "protoemitter"
+ can_buckle = TRUE
+ density = TRUE
+ buckle_lying = 0
+ layer = 4.2
+ var/view_range = 10
+ var/cooldown = 0
+ var/projectile_type = /obj/item/projectile/bullet/weakbullet3
+
+//BUCKLE HOOKS
+
+/obj/machinery/manned_turret/unbuckle_mob(mob/living/buckled_mob,force = 0)
+ playsound(src,'sound/mecha/mechmove01.ogg', 50, 1)
+ for(var/obj/item/I in buckled_mob.held_items)
+ if(istype(I, /obj/item/weapon/turret_control))
+ qdel(I)
+ if(istype(buckled_mob))
+ buckled_mob.pixel_x = 0
+ buckled_mob.pixel_y = 0
+ if(buckled_mob.client)
+ buckled_mob.client.change_view(world.view)
+ . = ..()
+
+/obj/machinery/manned_turret/user_buckle_mob(mob/living/M, mob/living/carbon/user)
+ if(user.incapacitated() || !istype(user))
+ return
+ M.loc = get_turf(src)
+ ..()
+ for(var/V in M.held_items)
+ var/obj/item/I = V
+ if(istype(I))
+ if(M.dropItemToGround(I))
+ var/obj/item/weapon/turret_control/TC = new /obj/item/weapon/turret_control()
+ M.put_in_hands(TC)
+ else //Entries in the list should only ever be items or null, so if it's not an item, we can assume it's an empty hand
+ var/obj/item/weapon/turret_control/TC = new /obj/item/weapon/turret_control()
+ M.put_in_hands(TC)
+ M.pixel_y = 14
+ layer = 4.1
+ setDir(SOUTH)
+ playsound(src,'sound/mecha/mechmove01.ogg', 50, 1)
+ if(user.client)
+ user.client.change_view(view_range)
+
+/obj/item/weapon/turret_control
+ name = "turret controls"
+ icon_state = "offhand"
+ w_class = WEIGHT_CLASS_HUGE
+ flags = ABSTRACT | NODROP
+ resistance_flags = FIRE_PROOF | UNACIDABLE | ACID_PROOF | NOBLUDGEON
+
+
+/obj/item/weapon/turret_control/afterattack(atom/targeted_atom, mob/user)
+ ..()
+ var/obj/machinery/manned_turret/E = user.buckled
+ E.setDir(get_dir(E,targeted_atom))
+ user.setDir(E.dir)
+ switch(E.dir)
+ if(NORTH)
+ E.layer = 3.9
+ user.pixel_x = 0
+ user.pixel_y = -14
+ if(NORTHEAST)
+ E.layer = 3.9
+ user.pixel_x = -8
+ user.pixel_y = -12
+ if(EAST)
+ E.layer = 4.1
+ user.pixel_x = -14
+ user.pixel_y = 0
+ if(SOUTHEAST)
+ E.layer = 3.9
+ user.pixel_x = -8
+ user.pixel_y = 12
+ if(SOUTH)
+ E.layer = 4.1
+ user.pixel_x = 0
+ user.pixel_y = 14
+ if(SOUTHWEST)
+ E.layer = 3.9
+ user.pixel_x = 8
+ user.pixel_y = 12
+ if(WEST)
+ E.layer = 4.1
+ user.pixel_x = 14
+ user.pixel_y = 0
+ if(NORTHWEST)
+ E.layer = 3.9
+ user.pixel_x = 8
+ user.pixel_y = -12
+ E.checkfire(targeted_atom, user)
+
+/obj/machinery/manned_turret/proc/checkfire(atom/targeted_atom, mob/user)
+ if(world.time < cooldown)
+ playsound(src.loc, 'sound/weapons/sear.ogg', 100, 1)
+ to_chat(user, "Turret must cool off between volleys!")
+ return
+ else
+ cooldown = world.time+45
+ INVOKE_ASYNC(src, .proc/shoot, targeted_atom, user)
+
+/obj/machinery/manned_turret/proc/shoot(atom/targeted_atom, mob/user)
+ var/turf/targets_from = get_turf(src)
+ var/target_turf = get_turf(targeted_atom)
+ if(targeted_atom == user || targeted_atom == targets_from)
+ return
+ for(var/i in 1 to 10)
+ if(targeted_atom == null)
+ targeted_atom = target_turf
+ var/obj/item/projectile/P = new projectile_type(targets_from)
+ P.current = targets_from
+ P.starting = targets_from
+ P.firer = src
+ P.original = targeted_atom
+ playsound(src.loc, 'sound/weapons/Gunshot_smg.ogg', 50, 1)
+ P.yo = targeted_atom.y - targets_from.y + rand(-1,1)
+ P.xo = targeted_atom.x - targets_from.x + rand(-1,1)
+ P.fire()
+ sleep(2)
diff --git a/code/modules/projectiles/boxes_magazines/external_mag.dm b/code/modules/projectiles/boxes_magazines/external_mag.dm
index 11112ec974e..99fffd85725 100644
--- a/code/modules/projectiles/boxes_magazines/external_mag.dm
+++ b/code/modules/projectiles/boxes_magazines/external_mag.dm
@@ -13,6 +13,22 @@
max_ammo = 8
multiple_sprites = 2
+/obj/item/ammo_box/magazine/m10mm/rifle
+ name = "rifle magazine (10mm)"
+ desc = "A well-worn magazine fitted for the surplus rifle."
+ icon_state = "75-8"
+ origin_tech = "combat=2"
+ ammo_type = /obj/item/ammo_casing/c10mm
+ caliber = "10mm"
+ max_ammo = 10
+
+/obj/item/ammo_box/magazine/m10mm/rifle/update_icon()
+ if(ammo_count())
+ icon_state = "75-8"
+ else
+ icon_state = "75-0"
+
+
/obj/item/ammo_box/magazine/m10mm/fire
name = "pistol magazine (10mm incendiary)"
desc = "A gun magazine. Loaded with rounds which ignite the target."
diff --git a/code/modules/projectiles/guns/ballistic/automatic.dm b/code/modules/projectiles/guns/ballistic/automatic.dm
index 1ffdaf0d29b..6bf47605754 100644
--- a/code/modules/projectiles/guns/ballistic/automatic.dm
+++ b/code/modules/projectiles/guns/ballistic/automatic.dm
@@ -377,6 +377,30 @@
+// Old Semi-Auto Rifle //
+
+/obj/item/weapon/gun/ballistic/automatic/surplus
+ name = "Surplus Rifle"
+ desc = "One of countless obsolete ballistic rifles that still sees use as a cheap deterrent. Uses 10mm ammo and its bulky frame prevents one-hand firing."
+ origin_tech = "combat=3;materials=2"
+ icon_state = "surplus"
+ item_state = "moistnugget"
+ weapon_weight = WEAPON_HEAVY
+ mag_type = /obj/item/ammo_box/magazine/m10mm/rifle
+ fire_delay = 30
+ burst_size = 1
+ can_unsuppress = 1
+ can_suppress = 1
+ w_class = WEIGHT_CLASS_HUGE
+ slot_flags = SLOT_BACK
+ actions_types = list()
+
+/obj/item/weapon/gun/ballistic/automatic/surplus/update_icon()
+ if(magazine)
+ icon_state = "surplus"
+ else
+ icon_state = "surplus-e"
+
// Laser rifle (rechargeable magazine) //
diff --git a/code/modules/projectiles/guns/ballistic/revolver.dm b/code/modules/projectiles/guns/ballistic/revolver.dm
index 6ce52748ecf..66a3f1fafaf 100644
--- a/code/modules/projectiles/guns/ballistic/revolver.dm
+++ b/code/modules/projectiles/guns/ballistic/revolver.dm
@@ -344,6 +344,16 @@
slung = 0
update_icon()
+/obj/item/weapon/gun/ballistic/revolver/doublebarrel/improvised/sawn
+ name = "sawn-off improvised shotgun"
+ desc = "A single-shot shotgun, better not miss"
+ icon_state = "ishotgun"
+ item_state = "gun"
+ w_class = WEIGHT_CLASS_NORMAL
+ sawn_state = SAWN_OFF
+ slot_flags = SLOT_BELT
+
+
/obj/item/weapon/gun/ballistic/revolver/reverse //Fires directly at its user... unless the user is a clown, of course.
clumsy_check = 0
diff --git a/icons/obj/guns/projectile.dmi b/icons/obj/guns/projectile.dmi
index dfb1f4c51b4..59a747e41a9 100644
Binary files a/icons/obj/guns/projectile.dmi and b/icons/obj/guns/projectile.dmi differ