diff --git a/code/__DEFINES/construction.dm b/code/__DEFINES/construction.dm
index f1548bbe0f..683681a9a6 100644
--- a/code/__DEFINES/construction.dm
+++ b/code/__DEFINES/construction.dm
@@ -67,7 +67,9 @@
//tablecrafting defines
#define CAT_NONE ""
#define CAT_WEAPONRY "Weaponry"
-#define CAT_WEAPON "Weapons"
+#define CAT_WEAPON "Ranged Weapons"
+#define CAT_MELEE "Melee Weapons"
+#define CAT_OTHER "Misc"
#define CAT_AMMO "Ammunition"
#define CAT_PARTS "Weapon Parts"
#define CAT_ROBOT "Robots"
diff --git a/code/datums/components/crafting/guncrafting.dm b/code/datums/components/crafting/guncrafting.dm
index f332d53fc8..4626ef69d1 100644
--- a/code/datums/components/crafting/guncrafting.dm
+++ b/code/datums/components/crafting/guncrafting.dm
@@ -35,17 +35,34 @@ k// PARTS //
desc = "A twenty bore shotgun barrel."
icon_state = "barrel_shotgun"
+/obj/item/weaponcrafting/improvised_parts/barrel_pistol
+ name = "pistol barrel"
+ desc = "A pipe with a small diameter and some holes finely cut into it. It fits .32 ACP bullets. Probably."
+ icon_state = "barrel_pistol"
+ w_class = WEIGHT_CLASS_SMALL
+
// RECEIVERS
/obj/item/weaponcrafting/improvised_parts/rifle_receiver
name = "bolt action receiver"
- desc = "A crudely constructed receiver to create an improvised bolt-action breechloaded rifle."
+ desc = "A crudely constructed receiver to create an improvised bolt-action breechloaded rifle. It's generic enough to modify to create other rifles, potentially."
icon_state = "receiver_rifle"
w_class = WEIGHT_CLASS_SMALL
+/obj/item/weaponcrafting/improvised_parts/pistol_receiver
+ name = "pistol receiver"
+ desc = "A receiver to connect house and connects all the parts to make an improvised pistol."
+ icon_state = "receiver_pistol"
+ w_class = WEIGHT_CLASS_SMALL
+
+/obj/item/weaponcrafting/improvised_parts/laser_receiver
+ name = "energy emitter assembly"
+ desc = "A mixture of components haphazardly wired together to form an energy emitter."
+ icon_state = "laser_assembly"
+
/obj/item/weaponcrafting/improvised_parts/shotgun_receiver
name = "break-action assembly"
- desc = "An improvised receiver to create a break-action breechloaded shotgun."
+ desc = "An improvised receiver to create a break-action breechloaded shotgun. Parts of this are still useful if you want to make another type of shotgun, however."
icon_state = "receiver_shotgun"
w_class = WEIGHT_CLASS_SMALL
@@ -62,3 +79,14 @@ k// PARTS //
desc = "A crudely fashioned wooden body to help keep higher calibre improvised weapons from blowing themselves apart."
icon_state = "wooden_body"
+/obj/item/weaponcrafting/improvised_parts/wooden_grip
+ name = "wooden pistol grip"
+ desc = "A nice wooden grip hollowed out for pistol magazines."
+ icon_state = "wooden_pistolgrip"
+ w_class = WEIGHT_CLASS_SMALL
+
+/obj/item/weaponcrafting/improvised_parts/makeshift_lens
+ name = "makeshift focusing lens"
+ desc = "A properly made lens made with actual glassworking tools would perform much better, but this will have to do."
+ icon_state = "focusing_lens"
+ w_class = WEIGHT_CLASS_TINY
diff --git a/code/datums/components/crafting/recipes/recipes_weapon_and_ammo.dm b/code/datums/components/crafting/recipes/recipes_weapon_and_ammo.dm
index 7d608a55b2..9d712ef059 100644
--- a/code/datums/components/crafting/recipes/recipes_weapon_and_ammo.dm
+++ b/code/datums/components/crafting/recipes/recipes_weapon_and_ammo.dm
@@ -6,7 +6,7 @@
tools = list(TOOL_WELDER, TOOL_SCREWDRIVER, TOOL_WIRECUTTER)
time = 50
category = CAT_WEAPONRY
- subcategory = CAT_WEAPON
+ subcategory = CAT_OTHER
/datum/crafting_recipe/pin_removal/check_requirements(mob/user, list/collected_requirements)
var/obj/item/gun/G = collected_requirements[/obj/item/gun][1]
@@ -22,7 +22,7 @@
/obj/item/shield/riot = 1)
time = 40
category = CAT_WEAPONRY
- subcategory = CAT_WEAPON
+ subcategory = CAT_MELEE
/datum/crafting_recipe/strobeshield/New()
..()
@@ -38,7 +38,7 @@
tools = list(TOOL_WELDER, TOOL_SCREWDRIVER, TOOL_WIRECUTTER)
time = 100
category = CAT_WEAPONRY
- subcategory = CAT_WEAPON
+ subcategory = CAT_MELEE
/datum/crafting_recipe/spear
name = "Spear"
@@ -49,7 +49,7 @@
parts = list(/obj/item/shard = 1)
time = 40
category = CAT_WEAPONRY
- subcategory = CAT_WEAPON
+ subcategory = CAT_MELEE
/datum/crafting_recipe/stunprod
name = "Stunprod"
@@ -59,7 +59,7 @@
/obj/item/assembly/igniter = 1)
time = 40
category = CAT_WEAPONRY
- subcategory = CAT_WEAPON
+ subcategory = CAT_MELEE
/datum/crafting_recipe/teleprod
name = "Teleprod"
@@ -70,7 +70,7 @@
/obj/item/stack/ore/bluespace_crystal = 1)
time = 40
category = CAT_WEAPONRY
- subcategory = CAT_WEAPON
+ subcategory = CAT_MELEE
/datum/crafting_recipe/bola
name = "Bola"
@@ -88,7 +88,7 @@
/obj/item/stack/sheet/metal = 1)
time = 40
category = CAT_WEAPONRY
- subcategory = CAT_WEAPON
+ subcategory = CAT_MELEE
/datum/crafting_recipe/tailwhip
name = "Liz O' Nine Tails"
@@ -97,7 +97,7 @@
/obj/item/stack/cable_coil = 1)
time = 40
category = CAT_WEAPONRY
- subcategory = CAT_WEAPON
+ subcategory = CAT_MELEE
/datum/crafting_recipe/catwhip
name = "Cat O' Nine Tails"
@@ -106,7 +106,7 @@
/obj/item/stack/cable_coil = 1)
time = 40
category = CAT_WEAPONRY
- subcategory = CAT_WEAPON
+ subcategory = CAT_MELEE
/datum/crafting_recipe/chainsaw
name = "Chainsaw"
@@ -117,7 +117,7 @@
tools = list(TOOL_WELDER)
time = 50
category = CAT_WEAPONRY
- subcategory = CAT_WEAPON
+ subcategory = CAT_MELEE
//////////////////
///BOMB CRAFTING//
@@ -134,7 +134,7 @@
parts = list(/obj/item/stock_parts/matter_bin = 1, /obj/item/grenade/chem_grenade = 2)
time = 30
category = CAT_WEAPONRY
- subcategory = CAT_WEAPON
+ subcategory = CAT_OTHER
/datum/crafting_recipe/chemical_payload2
name = "Chemical Payload (Gibtonite)"
@@ -147,7 +147,7 @@
parts = list(/obj/item/stock_parts/matter_bin = 1, /obj/item/grenade/chem_grenade = 2)
time = 50
category = CAT_WEAPONRY
- subcategory = CAT_WEAPON
+ subcategory = CAT_OTHER
/datum/crafting_recipe/molotov
name = "Molotov"
@@ -169,7 +169,7 @@
parts = list(/obj/item/reagent_containers/food/drinks/soda_cans = 1)
time = 15
category = CAT_WEAPONRY
- subcategory = CAT_WEAPON
+ subcategory = CAT_OTHER
/datum/crafting_recipe/lance
name = "Explosive Lance (Grenade)"
@@ -180,7 +180,7 @@
/obj/item/grenade = 1)
time = 15
category = CAT_WEAPONRY
- subcategory = CAT_WEAPON
+ subcategory = CAT_MELEE
//////////////////
///GUNS CRAFTING//
@@ -276,6 +276,49 @@
category = CAT_WEAPONRY
subcategory = CAT_WEAPON
+/datum/crafting_recipe/ipistol
+ name = "Improvised Pistol (.32)"
+ result = /obj/item/gun/ballistic/automatic/pistol/improvised/nomag
+ reqs = list(/obj/item/weaponcrafting/improvised_parts/barrel_pistol = 1,
+ /obj/item/weaponcrafting/improvised_parts/pistol_receiver = 1,
+ /obj/item/weaponcrafting/improvised_parts/trigger_assembly = 1,
+ /obj/item/weaponcrafting/improvised_parts/wooden_grip = 1,
+ /obj/item/stack/sheet/plastic = 15,
+ /obj/item/stack/sheet/plasteel = 1)
+ tools = list(TOOL_SCREWDRIVER, TOOL_WELDER, TOOL_WIRECUTTER)
+ time = 100
+ category = CAT_WEAPONRY
+ subcategory = CAT_WEAPON
+
+/datum/crafting_recipe/ilaser
+ name = "Improvised Energy Gun"
+ result = /obj/item/gun/energy/e_gun/old/improvised
+ reqs = list(/obj/item/weaponcrafting/improvised_parts/laser_receiver = 1,
+ /obj/item/weaponcrafting/improvised_parts/trigger_assembly = 1,
+ /obj/item/weaponcrafting/improvised_parts/makeshift_lens = 1,
+ /obj/item/stock_parts/cell = 1,
+ /obj/item/stack/sheet/metal = 10,
+ /obj/item/stack/sheet/plasteel = 5,
+ /obj/item/stack/cable_coil = 10)
+ tools = list(TOOL_SCREWDRIVER)
+ time = 100
+ category = CAT_WEAPONRY
+ subcategory = CAT_WEAPON
+
+/datum/crafting_recipe/ilaser/upgraded
+ name = "Improvised Energy Gun Upgrade"
+ result = /obj/item/gun/energy/e_gun/old/improvised/upgraded
+ reqs = list(/obj/item/gun/energy/e_gun/old/improvised = 1,
+ /obj/item/glasswork/glass_base/lens = 1,
+ /obj/item/stock_parts/capacitor/quadratic = 2,
+ /obj/item/stock_parts/micro_laser/ultra = 1,
+ /obj/item/stock_parts/cell/bluespace = 1,
+ /obj/item/stack/cable_coil = 5)
+ tools = list(TOOL_SCREWDRIVER, TOOL_MULTITOOL)
+ time = 100
+ category = CAT_WEAPONRY
+ subcategory = CAT_WEAPON
+
//////////////////
///AMMO CRAFTING//
//////////////////
@@ -399,6 +442,17 @@
category = CAT_WEAPONRY
subcategory = CAT_AMMO
+/datum/crafting_recipe/m32acp
+ name = ".32ACP Empty Magazine"
+ result = /obj/item/ammo_box/magazine/m32acp/empty
+ reqs = list(/obj/item/stack/sheet/metal = 3,
+ /obj/item/stack/sheet/plasteel = 1,
+ /obj/item/stack/packageWrap = 1)
+ tools = list(TOOL_WELDER,TOOL_SCREWDRIVER)
+ time = 5
+ category = CAT_WEAPONRY
+ subcategory = CAT_AMMO
+
////////////////////
// PARTS CRAFTING //
////////////////////
@@ -423,13 +477,24 @@
category = CAT_WEAPONRY
subcategory = CAT_PARTS
+/datum/crafting_recipe/pistol_barrel
+ name = "Improvised Pistol Barrel"
+ result = /obj/item/weaponcrafting/improvised_parts/barrel_pistol
+ reqs = list(/obj/item/pipe = 1,
+ /obj/item/stack/sheet/plasteel = 1)
+ tools = list(TOOL_WELDER,TOOL_SAW)
+ time = 150
+ category = CAT_WEAPONRY
+ subcategory = CAT_PARTS
+
// RECEIVERS
/datum/crafting_recipe/rifle_receiver
name = "Improvised Rifle Receiver"
result = /obj/item/weaponcrafting/improvised_parts/rifle_receiver
- reqs = list(/obj/item/stack/sheet/metal = 20)
- tools = list(TOOL_SCREWDRIVER, TOOL_WELDER) // Rifle is the easiest to craft and can be made at an autolathe, this is a very light kick in the shin for dual-wielding ishotguns.
+ reqs = list(/obj/item/stack/sheet/metal = 10,
+ /obj/item/stack/sheet/plasteel = 1)
+ tools = list(TOOL_SCREWDRIVER, TOOL_WELDER)
time = 50
category = CAT_WEAPONRY
subcategory = CAT_PARTS
@@ -439,11 +504,33 @@
result = /obj/item/weaponcrafting/improvised_parts/shotgun_receiver
reqs = list(/obj/item/stack/sheet/metal = 10,
/obj/item/stack/sheet/plasteel = 1)
- tools = list(TOOL_SCREWDRIVER, TOOL_WELDER) // Increased cost is to stop dual-wield alpha striking. ishotgun is a rvolver and can be duel-wielded
+ tools = list(TOOL_SCREWDRIVER, TOOL_WELDER) // Dual wielding has been removed, plasteel is a soft timesink to obtain for most to make mass production harder.
time = 50
category = CAT_WEAPONRY
subcategory = CAT_PARTS
+/datum/crafting_recipe/pistol_receiver
+ name = "Improvised Pistol Receiver"
+ result = /obj/item/weaponcrafting/improvised_parts/pistol_receiver
+ reqs = list(/obj/item/stack/sheet/metal = 5,
+ /obj/item/stack/sheet/plasteel = 1)
+ tools = list(TOOL_SCREWDRIVER, TOOL_WELDER, TOOL_SAW)
+ time = 50
+ category = CAT_WEAPONRY
+ subcategory = CAT_PARTS
+
+/datum/crafting_recipe/laser_receiver
+ name = "Energy Weapon Assembly"
+ result = /obj/item/weaponcrafting/improvised_parts/laser_receiver
+ reqs = list(/obj/item/stack/sheet/metal = 10,
+ /obj/item/stock_parts/capacitor = 2,
+ /obj/item/stock_parts/micro_laser = 1,
+ /obj/item/assembly/prox_sensor = 1)
+ tools = list(TOOL_SCREWDRIVER, TOOL_MULTITOOL, TOOL_WELDER) // Prox sensor and multitool for the circuit board, welder for extremely ghetto soldering.
+ time = 150
+ category = CAT_WEAPONRY
+ subcategory = CAT_PARTS
+
// MISC
/datum/crafting_recipe/trigger_assembly
@@ -455,3 +542,13 @@
time = 150
category = CAT_WEAPONRY
subcategory = CAT_PARTS
+
+/datum/crafting_recipe/makeshift_lens
+ name = "Makeshift Lens"
+ result = /obj/item/weaponcrafting/improvised_parts/makeshift_lens
+ reqs = list(/obj/item/stack/sheet/metal = 1,
+ /obj/item/stack/sheet/glass = 2)
+ tools = list(TOOL_WELDER) // Glassmaking lets you make non-makeshift lenses.
+ time = 50
+ category = CAT_WEAPONRY
+ subcategory = CAT_PARTS
diff --git a/code/game/objects/effects/spawners/lootdrop.dm b/code/game/objects/effects/spawners/lootdrop.dm
index 9893e9c7d3..5b2006b6f3 100644
--- a/code/game/objects/effects/spawners/lootdrop.dm
+++ b/code/game/objects/effects/spawners/lootdrop.dm
@@ -611,13 +611,13 @@
/obj/item/clothing/mask/breath = 5,
/obj/item/clothing/mask/breath/medical = 1
)
-
+
/obj/effect/spawner/lootdrop/welder_tools/no_turf
spawn_on_turf = FALSE
/obj/effect/spawner/lootdrop/low_tools/no_turf
spawn_on_turf = FALSE
-
+
/obj/effect/spawner/lootdrop/breathing_tanks/no_turf
spawn_on_turf = FALSE
@@ -644,3 +644,90 @@
/obj/effect/spawner/lootdrop/glowstick/no_turf
spawn_on_turf = FALSE
+
+// Random Parts
+
+/obj/effect/spawner/lootdrop/stock_parts
+ name = "random stock parts spawner"
+ lootcount = 1
+ loot = list(
+ /obj/item/stock_parts/capacitor,
+ /obj/item/stock_parts/scanning_module,
+ /obj/item/stock_parts/manipulator,
+ /obj/item/stock_parts/micro_laser,
+ /obj/item/stock_parts/matter_bin,
+ /obj/item/stock_parts/cell
+ )
+
+// Random Weapon Parts
+
+/obj/effect/spawner/lootdrop/weapon_parts
+ name = "random weapon parts spawner 50%"
+ lootcount = 1
+ spawn_on_turf = FALSE
+ loot = list("" = 50,
+ /obj/item/weaponcrafting/improvised_parts/barrel_rifle = 10,
+ /obj/item/weaponcrafting/improvised_parts/barrel_shotgun = 5,
+ /obj/item/weaponcrafting/improvised_parts/barrel_pistol = 5,
+ /obj/item/weaponcrafting/improvised_parts/rifle_receiver = 10,
+ /obj/item/weaponcrafting/improvised_parts/shotgun_receiver = 3,
+ /obj/item/weaponcrafting/improvised_parts/pistol_receiver = 3,
+ /obj/item/weaponcrafting/improvised_parts/laser_receiver = 1,
+ /obj/item/weaponcrafting/improvised_parts/trigger_assembly = 10,
+ /obj/item/weaponcrafting/improvised_parts/makeshift_lens = 3,
+ )
+
+/obj/effect/spawner/lootdrop/weapon_parts
+ name = "random weapon parts spawner 25%"
+ lootcount = 1
+ spawn_on_turf = FALSE
+ loot = list("" = 75,
+ /obj/item/weaponcrafting/improvised_parts/barrel_rifle = 5,
+ /obj/item/weaponcrafting/improvised_parts/barrel_pistol = 5,
+ /obj/item/weaponcrafting/improvised_parts/rifle_receiver = 5,
+ /obj/item/weaponcrafting/improvised_parts/pistol_receiver = 2,
+ /obj/item/weaponcrafting/improvised_parts/trigger_assembly = 5,
+ /obj/item/weaponcrafting/improvised_parts/makeshift_lens = 3,
+ )
+
+/obj/effect/spawner/lootdrop/ammo
+ name = "random ammo 75%"
+ lootcount = 1
+ spawn_on_turf = FALSE
+ loot = list("" = 25,
+ /obj/item/ammo_box/c32mm = 15,
+ /obj/item/ammo_box/r32mm = 15,
+ /obj/item/ammo_box/magazine/wt550m9 = 1,
+ /obj/item/ammo_casing/shotgun/buckshot = 7,
+ /obj/item/ammo_casing/shotgun/rubbershot = 7,
+ /obj/item/ammo_casing/a762 = 15,
+ /obj/item/ammo_box/a762 = 15,
+ )
+
+/obj/effect/spawner/lootdrop/ammo/fiftypercent
+ name = "random ammo 50%"
+ lootcount = 1
+ spawn_on_turf = FALSE
+ loot = list("" = 50,
+ /obj/item/ammo_box/c32mm = 7,
+ /obj/item/ammo_box/r32mm = 7,
+ /obj/item/ammo_box/magazine/wt550m9 = 2,
+ /obj/item/ammo_casing/shotgun/buckshot = 10,
+ /obj/item/ammo_casing/shotgun/rubbershot = 10,
+ /obj/item/ammo_casing/a762 = 7,
+ /obj/item/ammo_box/a762 = 7,
+ )
+
+/obj/effect/spawner/lootdrop/ammo/shotgun
+ name = "random ammo 50%"
+ lootcount = 1
+ spawn_on_turf = FALSE
+ loot = list("" = 50,
+ /obj/item/ammo_box/shotgun/loaded/buckshot = 5,
+ /obj/item/ammo_box/shotgun/loaded/beanbag = 5,
+ /obj/item/ammo_box/shotgun/loaded/incendiary = 5,
+ /obj/item/ammo_casing/shotgun/buckshot = 8,
+ /obj/item/ammo_casing/shotgun/rubbershot = 9,
+ /obj/item/ammo_casing/shotgun = 8,
+ /obj/item/ammo_casing/shotgun/incendiary = 10,
+ )
diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm
index 6553cd2f7c..55719c2758 100644
--- a/code/game/objects/items/stacks/sheets/sheet_types.dm
+++ b/code/game/objects/items/stacks/sheets/sheet_types.dm
@@ -242,6 +242,7 @@ GLOBAL_LIST_INIT(wood_recipes, list ( \
null, \
new/datum/stack_recipe("wooden firearm body", /obj/item/weaponcrafting/improvised_parts/wooden_body, 10, time = 40), \
new/datum/stack_recipe("rifle stock", /obj/item/weaponcrafting/stock, 10, time = 40), \
+ new/datum/stack_recipe("pistol grip", /obj/item/weaponcrafting/improvised_parts/wooden_grip, 5, time = 40), \
new/datum/stack_recipe("rolling pin", /obj/item/kitchen/rollingpin, 2, time = 30), \
new/datum/stack_recipe("wooden bucket", /obj/item/reagent_containers/glass/bucket/wood, 2, time = 30), \
new/datum/stack_recipe("wooden buckler", /obj/item/shield/riot/buckler, 20, time = 40), \
diff --git a/code/modules/antagonists/bloodsucker/items/bloodsucker_stake.dm b/code/modules/antagonists/bloodsucker/items/bloodsucker_stake.dm
index 4c377f4b82..b13238f199 100644
--- a/code/modules/antagonists/bloodsucker/items/bloodsucker_stake.dm
+++ b/code/modules/antagonists/bloodsucker/items/bloodsucker_stake.dm
@@ -167,4 +167,4 @@
///obj/item/pipe = 2)
time = 80
category = CAT_WEAPONRY
- subcategory = CAT_WEAPON
+ subcategory = CAT_MELEE
diff --git a/code/modules/projectiles/ammunition/ballistic/pistol.dm b/code/modules/projectiles/ammunition/ballistic/pistol.dm
index 461166ab0d..2077b108d7 100644
--- a/code/modules/projectiles/ammunition/ballistic/pistol.dm
+++ b/code/modules/projectiles/ammunition/ballistic/pistol.dm
@@ -44,7 +44,6 @@
desc = "A 9mm incendiary bullet casing."
projectile_type = /obj/item/projectile/bullet/incendiary/c9mm
-
// .50AE (Desert Eagle)
/obj/item/ammo_casing/a50AE
@@ -53,3 +52,16 @@
caliber = ".50"
projectile_type = /obj/item/projectile/bullet/a50AE
+// .32 ACP (Improvised Pistol)
+
+/obj/item/ammo_casing/c32acp
+ name = ".32 bullet casing"
+ desc = "A .32 bullet casing."
+ caliber = "c32acp"
+ projectile_type = /obj/item/projectile/bullet/c32acp
+
+/obj/item/ammo_casing/r32acp
+ name = ".32 rubber bullet casing"
+ desc = "A .32 rubber bullet casing."
+ caliber = "c32acp"
+ projectile_type = /obj/item/projectile/bullet/r32acp
diff --git a/code/modules/projectiles/ammunition/energy/laser.dm b/code/modules/projectiles/ammunition/energy/laser.dm
index 174645dd11..492b91ec2d 100644
--- a/code/modules/projectiles/ammunition/energy/laser.dm
+++ b/code/modules/projectiles/ammunition/energy/laser.dm
@@ -12,6 +12,15 @@
e_cost = 200
select_name = "kill"
+/obj/item/ammo_casing/energy/lasergun/improvised
+ projectile_type = /obj/item/projectile/beam/weak/improvised
+ e_cost = 200
+ select_name = "kill"
+
+/obj/item/ammo_casing/energy/lasergun/improvised/upgraded
+ projectile_type = /obj/item/projectile/beam/weak
+ e_cost = 100
+
/obj/item/ammo_casing/energy/laser/hos
e_cost = 100
diff --git a/code/modules/projectiles/boxes_magazines/ammo_boxes.dm b/code/modules/projectiles/boxes_magazines/ammo_boxes.dm
index 597c7203b4..4e638ce1fc 100644
--- a/code/modules/projectiles/boxes_magazines/ammo_boxes.dm
+++ b/code/modules/projectiles/boxes_magazines/ammo_boxes.dm
@@ -40,6 +40,18 @@
desc = "Designed to quickly reload revolvers. Iceblox bullets contain a cryogenic payload."
ammo_type = /obj/item/ammo_casing/c38/iceblox
+/obj/item/ammo_box/c32mm
+ name = "ammo box (.32 acp)"
+ desc = "Lethal .32 acp bullets, there's forty in the box."
+ ammo_type = /obj/item/ammo_casing/c32acp
+ max_ammo = 40
+
+/obj/item/ammo_box/r32mm
+ name = "ammo box (rubber .32 acp)"
+ desc = "Non-lethal .32 acp bullets, there's forty in the box."
+ ammo_type = /obj/item/ammo_casing/r32acp
+ max_ammo = 40
+
/obj/item/ammo_box/c9mm
name = "ammo box (9mm)"
icon_state = "9mmbox"
diff --git a/code/modules/projectiles/boxes_magazines/external/pistol.dm b/code/modules/projectiles/boxes_magazines/external/pistol.dm
index 63b0483875..1852b839f4 100644
--- a/code/modules/projectiles/boxes_magazines/external/pistol.dm
+++ b/code/modules/projectiles/boxes_magazines/external/pistol.dm
@@ -66,3 +66,15 @@
caliber = ".50"
max_ammo = 7
multiple_sprites = 1
+
+/obj/item/ammo_box/magazine/m32acp
+ name = "pistol magazine (.32)"
+ desc = "A crudely construction pistol magazine that holds .32 ACP rounds. It looks like it can only fit eight bullets."
+ icon_state = "32acp"
+ ammo_type = /obj/item/ammo_casing/c32acp
+ caliber = "c32acp"
+ max_ammo = 8
+ multiple_sprites = 2
+
+/obj/item/ammo_box/magazine/m32acp/empty
+ start_empty = 1
diff --git a/code/modules/projectiles/guns/ballistic/pistol.dm b/code/modules/projectiles/guns/ballistic/pistol.dm
index e15c49b891..a4de6f94f5 100644
--- a/code/modules/projectiles/guns/ballistic/pistol.dm
+++ b/code/modules/projectiles/guns/ballistic/pistol.dm
@@ -155,3 +155,19 @@
name = "Syndicate Anti Tank Pistol"
desc = "A massively impractical and silly monstrosity of a pistol that fires .50 calliber rounds. The recoil is likely to dislocate a variety of joints without proper bracing."
pin = /obj/item/firing_pin/implant/pindicate
+
+////////////Improvised Pistol////////////
+
+/obj/item/gun/ballistic/automatic/pistol/improvised
+ name = "Improvised Pistol"
+ desc = "An improvised pocket-sized pistol that fires .32 calibre rounds. It looks incredibly flimsy."
+ icon_state = "ipistol"
+ item_state = "pistol"
+ mag_type = /obj/item/ammo_box/magazine/m32acp
+ fire_delay = 7.5
+ can_suppress = FALSE
+ w_class = WEIGHT_CLASS_SMALL
+ spread = 15 // Keep the spread between 15 and 20. This hardlocks it into being a mid-range pistol, the magazine size means you're allowed to miss. Fills the mid-range niche that slugs/rifle and buckshot doesn't fill.
+
+/obj/item/gun/ballistic/automatic/pistol/improvised/nomag
+ spawnwithmagazine = FALSE // For crafting as you shouldn't get eight bullets for free otherwise people will reaper reload.
diff --git a/code/modules/projectiles/guns/ballistic/revolver.dm b/code/modules/projectiles/guns/ballistic/revolver.dm
index b8b5ad6ec3..f34dbc6abc 100644
--- a/code/modules/projectiles/guns/ballistic/revolver.dm
+++ b/code/modules/projectiles/guns/ballistic/revolver.dm
@@ -319,7 +319,6 @@
/obj/item/gun/ballistic/revolver/doublebarrel/improvised
name = "improvised shotgun"
- desc = "Essentially a tube that aims shotgun shells."
desc = "A shoddy break-action breechloaded shotgun. Its lacklustre construction will probably result in it hurting people less than a normal shotgun."
icon_state = "ishotgun"
item_state = "shotgun"
@@ -330,8 +329,9 @@
mag_type = /obj/item/ammo_box/magazine/internal/shot/improvised
sawn_desc = "I'm just here for the gasoline."
unique_reskin = null
- projectile_damage_multiplier = 0.8
+ projectile_damage_multiplier = 0.9
var/slung = FALSE
+ weapon_weight = WEAPON_HEAVY
/obj/item/gun/ballistic/revolver/doublebarrel/improvised/attackby(obj/item/A, mob/user, params)
..()
@@ -358,7 +358,7 @@
/obj/item/gun/ballistic/revolver/doublebarrel/improvised/sawn
name = "sawn-off improvised shotgun"
- desc = "A single-shot shotgun. Better not miss."
+ desc = "The barrel and stock have been sawn and filed down; it can fit in backpacks. You still need two hands to fire this, if you value unbroken wrists."
icon_state = "ishotgun"
item_state = "gun"
w_class = WEIGHT_CLASS_NORMAL
diff --git a/code/modules/projectiles/guns/ballistic/shotgun.dm b/code/modules/projectiles/guns/ballistic/shotgun.dm
index a182ce2e35..8b8c5dceb1 100644
--- a/code/modules/projectiles/guns/ballistic/shotgun.dm
+++ b/code/modules/projectiles/guns/ballistic/shotgun.dm
@@ -131,6 +131,7 @@
desc = "A bolt-action breechloaded rifle that takes 7.62mm bullets."
mag_type = /obj/item/ammo_box/magazine/internal/boltaction/improvised
can_bayonet = FALSE
+ var/slung = FALSE
/obj/item/gun/ballistic/shotgun/boltaction/pump(mob/M)
playsound(M, 'sound/weapons/shotgunpump.ogg', 60, 1)
@@ -152,6 +153,22 @@
. = ..()
. += "The bolt is [bolt_open ? "open" : "closed"]."
+/obj/item/gun/ballistic/shotgun/boltaction/improvised/attackby(obj/item/A, mob/user, params)
+ ..()
+ if(istype(A, /obj/item/stack/cable_coil) && !sawn_off)
+ if(A.use_tool(src, user, 0, 10, max_level = JOB_SKILL_BASIC))
+ slot_flags = ITEM_SLOT_BACK
+ to_chat(user, "You tie the lengths of cable to the rifle, making a sling.")
+ slung = TRUE
+ update_icon()
+ else
+ to_chat(user, "You need at least ten lengths of cable if you want to make a sling!")
+
+/obj/item/gun/ballistic/shotgun/boltaction/improvised/update_icon()
+ ..()
+ if(slung)
+ icon_state += "sling"
+
/obj/item/gun/ballistic/shotgun/boltaction/enchanted
name = "enchanted bolt action rifle"
desc = "Careful not to lose your head."
diff --git a/code/modules/projectiles/guns/energy/laser.dm b/code/modules/projectiles/guns/energy/laser.dm
index 72ac9620b5..e64da116f3 100644
--- a/code/modules/projectiles/guns/energy/laser.dm
+++ b/code/modules/projectiles/guns/energy/laser.dm
@@ -240,3 +240,20 @@
chambered.BB.damage *= 5
process_fire(target, user, TRUE, params)
+
+////////////////
+// IMPROVISED //
+////////////////
+
+/obj/item/gun/energy/e_gun/old/improvised
+ name = "improvised energy rifle"
+ desc = "A crude imitation of an energy gun. It works, however the beams are poorly focused and most of the energy is wasted before it reaches the target. Welp, it still burns things."
+ icon_state = "improvised"
+ ammo_x_offset = 1
+ shaded_charge = 1
+ ammo_type = list(/obj/item/ammo_casing/energy/lasergun/improvised)
+
+/obj/item/gun/energy/e_gun/old/improvised/upgraded
+ name = "makeshift energy rifle"
+ desc = "The new lens and upgraded parts gives this a higher capacity and more energy output, however, the shoddy construction still leaves it inferior to Nanotrasen's own energy weapons."
+ ammo_type = list(/obj/item/ammo_casing/energy/lasergun/improvised/upgraded)
diff --git a/code/modules/projectiles/projectile/beams.dm b/code/modules/projectiles/projectile/beams.dm
index 2f12f0f69b..d95c3b5028 100644
--- a/code/modules/projectiles/projectile/beams.dm
+++ b/code/modules/projectiles/projectile/beams.dm
@@ -39,6 +39,9 @@
/obj/item/projectile/beam/weak
damage = 15
+/obj/item/projectile/beam/weak/improvised
+ damage = 10
+
/obj/item/projectile/beam/weak/penetrator
armour_penetration = 50
diff --git a/code/modules/projectiles/projectile/bullets/pistol.dm b/code/modules/projectiles/projectile/bullets/pistol.dm
index 319640a4d5..62ff4adb11 100644
--- a/code/modules/projectiles/projectile/bullets/pistol.dm
+++ b/code/modules/projectiles/projectile/bullets/pistol.dm
@@ -47,4 +47,16 @@
if(L.getStaminaLoss() >= 60)
L.Sleeping(300)
else
- L.adjustStaminaLoss(25)
\ No newline at end of file
+ L.adjustStaminaLoss(25)
+
+// .32 ACP (Improvised Pistol)
+
+/obj/item/projectile/bullet/c32acp
+ name = ".32 bullet"
+ damage = 13
+
+/obj/item/projectile/bullet/r32acp
+ name = ".32 rubber bullet"
+ damage = 3
+ eyeblur = 1
+ stamina = 20
diff --git a/code/modules/research/designs/autolathe_desings/autolathe_designs_sec_and_hacked.dm b/code/modules/research/designs/autolathe_desings/autolathe_designs_sec_and_hacked.dm
index 9cbef4abdd..9768d80a59 100644
--- a/code/modules/research/designs/autolathe_desings/autolathe_designs_sec_and_hacked.dm
+++ b/code/modules/research/designs/autolathe_desings/autolathe_designs_sec_and_hacked.dm
@@ -30,6 +30,14 @@
build_path = /obj/item/ammo_box/c38
category = list("initial", "Security")
+/datum/design/r32acp
+ name = "Rubber Pistol Bullet (.32)"
+ id = "r32acp"
+ build_type = AUTOLATHE
+ materials = list(/datum/material/iron = 250)
+ build_path = /obj/item/ammo_casing/r32acp
+ category = list("initial", "Security")
+
/////////////////
///Hacked Gear //
/////////////////
@@ -78,7 +86,7 @@
name = "Rifle Receiver"
id = "rifle_receiver"
build_type = AUTOLATHE
- materials = list(/datum/material/iron = 40000)
+ materials = list(/datum/material/iron = 24000)
build_path = /obj/item/weaponcrafting/improvised_parts/rifle_receiver
category = list("hacked", "Security")
@@ -197,3 +205,23 @@
materials = list(/datum/material/iron = 5500)
build_path = /obj/item/clothing/head/foilhat
category = list("hacked", "Misc")
+
+/datum/design/c32acp
+ name = "Pistol Bullet (.32)"
+ id = "c32acp"
+ build_type = AUTOLATHE
+ materials = list(/datum/material/iron = 500)
+ build_path = /obj/item/ammo_casing/c32acp
+ category = list("hacked", "Security")
+
+/////////////////
+// Magazines //
+/////////////////
+
+/datum/design/m32acp
+ name = "Empty .32 Magazine"
+ id = "m32acp"
+ build_type = AUTOLATHE
+ materials = list(/datum/material/iron = 10000)
+ build_path = /obj/item/ammo_box/magazine/m32acp/empty
+ category = list("hacked", "Security")
diff --git a/code/modules/research/designs/autolathe_desings/autolathe_designs_tcomms_and_misc.dm b/code/modules/research/designs/autolathe_desings/autolathe_designs_tcomms_and_misc.dm
index ea73df568f..320f856b35 100644
--- a/code/modules/research/designs/autolathe_desings/autolathe_designs_tcomms_and_misc.dm
+++ b/code/modules/research/designs/autolathe_desings/autolathe_designs_tcomms_and_misc.dm
@@ -281,3 +281,10 @@
build_path = /obj/item/weaponcrafting/improvised_parts/trigger_assembly
category = list("initial", "Misc")
+/datum/design/focusing_lens
+ name = "Makeshift Lens"
+ id = "makeshift_lens"
+ build_type = AUTOLATHE
+ materials = list(/datum/material/iron = 2000, /datum/material/glass = 4000)
+ build_path = /obj/item/weaponcrafting/improvised_parts/makeshift_lens
+ category = list("initial", "Misc")
diff --git a/icons/mob/clothing/back.dmi b/icons/mob/clothing/back.dmi
index d307b5b6c9..0a1372ac2b 100644
Binary files a/icons/mob/clothing/back.dmi and b/icons/mob/clothing/back.dmi differ
diff --git a/icons/obj/ammo.dmi b/icons/obj/ammo.dmi
index c75afde4cc..bebb625440 100644
Binary files a/icons/obj/ammo.dmi and b/icons/obj/ammo.dmi differ
diff --git a/icons/obj/guns/energy.dmi b/icons/obj/guns/energy.dmi
index 691d5c8362..33872719fe 100644
Binary files a/icons/obj/guns/energy.dmi and b/icons/obj/guns/energy.dmi differ
diff --git a/icons/obj/guns/gun_parts.dmi b/icons/obj/guns/gun_parts.dmi
index 8e3168769d..7f088f6af5 100644
Binary files a/icons/obj/guns/gun_parts.dmi and b/icons/obj/guns/gun_parts.dmi differ
diff --git a/icons/obj/guns/projectile.dmi b/icons/obj/guns/projectile.dmi
index 5c8fab82e8..8c50e7da27 100644
Binary files a/icons/obj/guns/projectile.dmi and b/icons/obj/guns/projectile.dmi differ
diff --git a/icons/obj/tools.dmi b/icons/obj/tools.dmi
index 0ff7d4a607..90eea65cb3 100644
Binary files a/icons/obj/tools.dmi and b/icons/obj/tools.dmi differ