diff --git a/code/__DEFINES/construction.dm b/code/__DEFINES/construction.dm index 65e1d0e980..f1548bbe0f 100644 --- a/code/__DEFINES/construction.dm +++ b/code/__DEFINES/construction.dm @@ -69,6 +69,7 @@ #define CAT_WEAPONRY "Weaponry" #define CAT_WEAPON "Weapons" #define CAT_AMMO "Ammunition" +#define CAT_PARTS "Weapon Parts" #define CAT_ROBOT "Robots" #define CAT_MISC "Misc" #define CAT_MISCELLANEOUS "Miscellaneous" diff --git a/code/_globalvars/lists/maintenance_loot.dm b/code/_globalvars/lists/maintenance_loot.dm index 632904202d..30321f5546 100644 --- a/code/_globalvars/lists/maintenance_loot.dm +++ b/code/_globalvars/lists/maintenance_loot.dm @@ -89,7 +89,7 @@ GLOBAL_LIST_INIT(maintenance_loot, list( /obj/effect/spawner/lootdrop/welder_tools = 3, /obj/effect/spawner/lootdrop/low_tools = 5, /obj/item/relic = 3, - /obj/item/weaponcrafting/receiver = 2, + /obj/item/weaponcrafting/improvised_parts/shotgun_receiver = 2, /obj/item/clothing/head/cone = 2, /obj/item/grenade/smokebomb = 2, /obj/item/geiger_counter = 3, diff --git a/code/datums/components/crafting/guncrafting.dm b/code/datums/components/crafting/guncrafting.dm index caf200446f..f332d53fc8 100644 --- a/code/datums/components/crafting/guncrafting.dm +++ b/code/datums/components/crafting/guncrafting.dm @@ -1,14 +1,7 @@ -//Gun crafting parts til they can be moved elsewhere - -// PARTS // +k// PARTS // /obj/item/weaponcrafting icon = 'icons/obj/improvised.dmi' -/obj/item/weaponcrafting/receiver - name = "modular receiver" - desc = "A prototype modular receiver and trigger assembly for a firearm." - icon_state = "receiver" - /obj/item/weaponcrafting/stock name = "rifle stock" desc = "A classic rifle stock that doubles as a grip, roughly carved out of wood." @@ -19,3 +12,53 @@ name = "durathread string" desc = "A long piece of durathread with some resemblance to cable coil." icon_state = "durastring" + +//////////////////////////////// +// KAT IMPROVISED WEAPON PARTS// +//////////////////////////////// + +/obj/item/weaponcrafting/improvised_parts + name = "Eerie bunch of coloured dots." + desc = "You feel the urge to report to Central that the parent type of guncrafting, which should never appear in this reality, has appeared. Whatever that means." + icon = 'icons/obj/guns/gun_parts.dmi' + icon_state = "palette" + +// BARRELS + +/obj/item/weaponcrafting/improvised_parts/barrel_rifle + name = "rifle barrel" + desc = "A pipe with a diameter just the right size to fire 7.62 rounds out of." + icon_state = "barrel_rifle" + +/obj/item/weaponcrafting/improvised_parts/barrel_shotgun + name = "shotgun barrel" + desc = "A twenty bore shotgun barrel." + icon_state = "barrel_shotgun" + +// 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." + icon_state = "receiver_rifle" + w_class = WEIGHT_CLASS_SMALL + +/obj/item/weaponcrafting/improvised_parts/shotgun_receiver + name = "break-action assembly" + desc = "An improvised receiver to create a break-action breechloaded shotgun." + icon_state = "receiver_shotgun" + w_class = WEIGHT_CLASS_SMALL + +// MISC + +/obj/item/weaponcrafting/improvised_parts/trigger_assembly + name = "firearm trigger assembly" + desc = "A modular trigger assembly with a firing pin, this can be used to make a whole bunch of improvised firearss." + icon_state = "trigger_assembly" + w_class = WEIGHT_CLASS_SMALL + +/obj/item/weaponcrafting/improvised_parts/wooden_body + name = "wooden firearm body" + desc = "A crudely fashioned wooden body to help keep higher calibre improvised weapons from blowing themselves apart." + icon_state = "wooden_body" + 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 21a160264a..7d608a55b2 100644 --- a/code/datums/components/crafting/recipes/recipes_weapon_and_ammo.dm +++ b/code/datums/components/crafting/recipes/recipes_weapon_and_ammo.dm @@ -251,8 +251,10 @@ /datum/crafting_recipe/ishotgun name = "Improvised Shotgun" result = /obj/item/gun/ballistic/revolver/doublebarrel/improvised - reqs = list(/obj/item/weaponcrafting/receiver = 1, - /obj/item/pipe = 1, + reqs = list(/obj/item/weaponcrafting/improvised_parts/barrel_shotgun = 1, + /obj/item/weaponcrafting/improvised_parts/shotgun_receiver = 1, + /obj/item/weaponcrafting/improvised_parts/trigger_assembly = 1, + /obj/item/weaponcrafting/improvised_parts/wooden_body = 1, /obj/item/weaponcrafting/stock = 1, /obj/item/stack/packageWrap = 5) tools = list(TOOL_SCREWDRIVER) @@ -261,10 +263,12 @@ subcategory = CAT_WEAPON /datum/crafting_recipe/irifle - name = "Improvised Rifle(7.62mm)" + name = "Improvised Rifle (7.62mm)" result = /obj/item/gun/ballistic/shotgun/boltaction/improvised - reqs = list(/obj/item/weaponcrafting/receiver = 1, - /obj/item/pipe = 2, + reqs = list(/obj/item/weaponcrafting/improvised_parts/barrel_rifle = 1, + /obj/item/weaponcrafting/improvised_parts/rifle_receiver = 1, + /obj/item/weaponcrafting/improvised_parts/trigger_assembly = 1, + /obj/item/weaponcrafting/improvised_parts/wooden_body = 1, /obj/item/weaponcrafting/stock = 1, /obj/item/stack/packageWrap = 5) tools = list(TOOL_SCREWDRIVER) @@ -394,3 +398,60 @@ time = 5 category = CAT_WEAPONRY subcategory = CAT_AMMO + +//////////////////// +// PARTS CRAFTING // +//////////////////// + +// BARRELS + +/datum/crafting_recipe/rifle_barrel + name = "Improvised Rifle Barrel" + result = /obj/item/weaponcrafting/improvised_parts/barrel_rifle + reqs = list(/obj/item/pipe = 2) + tools = list(TOOL_WELDER,TOOL_SAW) + time = 150 + category = CAT_WEAPONRY + subcategory = CAT_PARTS + +/datum/crafting_recipe/shotgun_barrel + name = "Improvised Shotgun Barrel" + result = /obj/item/weaponcrafting/improvised_parts/barrel_shotgun + reqs = list(/obj/item/pipe = 2) + 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. + time = 50 + category = CAT_WEAPONRY + subcategory = CAT_PARTS + +/datum/crafting_recipe/shotgun_receiver + name = "Improvised Shotgun Receiver" + 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 + time = 50 + category = CAT_WEAPONRY + subcategory = CAT_PARTS + +// MISC + +/datum/crafting_recipe/trigger_assembly + name = "Trigger Assembly" + result = /obj/item/weaponcrafting/improvised_parts/trigger_assembly + reqs = list(/obj/item/stack/sheet/metal = 3, + /obj/item/assembly/igniter = 1) + tools = list(TOOL_SCREWDRIVER, TOOL_WELDER) + time = 150 + category = CAT_WEAPONRY + subcategory = CAT_PARTS diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm index 41822491f8..6553cd2f7c 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -240,6 +240,7 @@ GLOBAL_LIST_INIT(wood_recipes, list ( \ new /datum/stack_recipe("pew (right)", /obj/structure/chair/pew/right, 3, one_per_turf = TRUE, on_floor = TRUE),\ )), 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("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), \ diff --git a/code/game/objects/items/tools/saw.dm b/code/game/objects/items/tools/saw.dm new file mode 100644 index 0000000000..aab59c00be --- /dev/null +++ b/code/game/objects/items/tools/saw.dm @@ -0,0 +1,47 @@ +/obj/item/hatchet/saw + name = "handsaw" + desc = "A very sharp handsaw, it's compact." + icon = 'icons/obj/tools.dmi' + icon_state = "saw" + item_state = "sawhandle_greyscale" + lefthand_file = 'icons/mob/inhands/equipment/kitchen_lefthand.dmi' + righthand_file = 'icons/mob/inhands/equipment/kitchen_righthand.dmi' + tool_behaviour = TOOL_SAW + force = 10 + throwforce = 8 + throw_speed = 3 + throw_range = 5 + custom_materials = list(/datum/material/iron = 5000) + attack_verb = list("sawed", "sliced", "cut") + hitsound = 'sound/weapons/bladeslice.ogg' + sharpness = IS_SHARP + var/random_color = TRUE //code taken from screwdrivers.dm; cool handles are cool. + var/static/list/saw_colors = list( + "blue" = rgb(24, 97, 213), + "red" = rgb(255, 0, 0), + "pink" = rgb(213, 24, 141), + "brown" = rgb(160, 82, 18), + "green" = rgb(14, 127, 27), + "cyan" = rgb(24, 162, 213), + "yellow" = rgb(255, 165, 0) + ) + +/obj/item/hatchet/saw/Initialize() + . = ..() + if(random_color) + icon_state = "sawhandle_greyscale" + var/our_color = pick(saw_colors) + add_atom_colour(saw_colors[our_color], FIXED_COLOUR_PRIORITY) + update_icon() + if(prob(75)) + pixel_y = rand(-8, 8) + +/obj/item/hatchet/saw/update_overlays() + . = ..() + if(!random_color) //icon override + return + var/mutable_appearance/base_overlay = mutable_appearance(icon, "sawblade") + base_overlay.appearance_flags = RESET_COLOR + . += base_overlay + +// END \ No newline at end of file diff --git a/code/modules/holiday/halloween/bartholomew.dm b/code/modules/holiday/halloween/bartholomew.dm index f51b8b7ea1..4ef00e29cb 100644 --- a/code/modules/holiday/halloween/bartholomew.dm +++ b/code/modules/holiday/halloween/bartholomew.dm @@ -117,7 +117,7 @@ /obj/item/weldingtool = 3, /obj/item/wirecutters = 2, /obj/item/wrench = 4, - /obj/item/weaponcrafting/receiver = 1, + /obj/item/weaponcrafting/improvised_parts/shotgun_receiver = 1, /obj/item/geiger_counter = 3, /obj/item/reagent_containers/food/snacks/grown/citrus/orange = 5, /obj/item/assembly/infra = 1, diff --git a/code/modules/projectiles/guns/ballistic/revolver.dm b/code/modules/projectiles/guns/ballistic/revolver.dm index afe2b9ca3e..12e7da90c9 100644 --- a/code/modules/projectiles/guns/ballistic/revolver.dm +++ b/code/modules/projectiles/guns/ballistic/revolver.dm @@ -313,19 +313,24 @@ else to_chat(user, "[src] is empty!") -// IMPROVISED SHOTGUN // +///////////////////////////// +// IMPROVISED SHOTGUN // +///////////////////////////// /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" w_class = WEIGHT_CLASS_BULKY + weapon_weight = WEAPON_MEDIUM force = 10 slot_flags = null 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 var/slung = FALSE /obj/item/gun/ballistic/revolver/doublebarrel/improvised/attackby(obj/item/A, mob/user, params) diff --git a/code/modules/projectiles/guns/ballistic/shotgun.dm b/code/modules/projectiles/guns/ballistic/shotgun.dm index 4894a8d8eb..e438b351b3 100644 --- a/code/modules/projectiles/guns/ballistic/shotgun.dm +++ b/code/modules/projectiles/guns/ballistic/shotgun.dm @@ -126,8 +126,9 @@ /obj/item/gun/ballistic/shotgun/boltaction/improvised name = "Makeshift 7.62mm Rifle" icon_state = "ishotgun" + icon_state = "irifle" item_state = "shotgun" - desc = "A large zip gun more or less that takes a single 7.62mm bullet" + desc = "A bolt-action breechloaded rifle that takes 7.62mm bullets." mag_type = /obj/item/ammo_box/magazine/internal/boltaction/improvised can_bayonet = FALSE 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 20a5370793..9cbef4abdd 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 @@ -10,6 +10,7 @@ id = "beanbag_slug" build_type = AUTOLATHE materials = list(/datum/material/iron = 250) + materials = list(/datum/material/iron = 1000) build_path = /obj/item/ammo_casing/shotgun/beanbag category = list("initial", "Security") @@ -73,12 +74,12 @@ build_path = /obj/item/restraints/handcuffs category = list("hacked", "Security") -/datum/design/receiver - name = "Modular Receiver" - id = "receiver" - build_type = AUTOLATHE | NO_PUBLIC_LATHE - materials = list(/datum/material/iron = 15000) - build_path = /obj/item/weaponcrafting/receiver +/datum/design/rifle_receiver + name = "Rifle Receiver" + id = "rifle_receiver" + build_type = AUTOLATHE + materials = list(/datum/material/iron = 40000) + build_path = /obj/item/weaponcrafting/improvised_parts/rifle_receiver category = list("hacked", "Security") /datum/design/shotgun_slug @@ -113,6 +114,10 @@ build_path = /obj/item/ammo_casing/shotgun/incendiary category = list("hacked", "Security") +///////////////// +// Bullets // +///////////////// + /datum/design/riot_dart name = "Foam Riot Dart" id = "riot_dart" 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 eebeec2c78..ea73df568f 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 @@ -271,4 +271,13 @@ build_type = AUTOLATHE materials = list(/datum/material/iron = 5000, /datum/material/glass = 2000) build_path = /obj/item/vending_refill/custom - category = list("initial", "Misc") \ No newline at end of file + category = list("initial", "Misc") + +/datum/design/trigger_assembly + name = "Trigger Assembly" + id = "trigger_assembly" + build_type = AUTOLATHE + materials = list(/datum/material/iron = 6500, /datum/material/glass = 50) + build_path = /obj/item/weaponcrafting/improvised_parts/trigger_assembly + category = list("initial", "Misc") + diff --git a/code/modules/research/designs/autolathe_desings/autolathe_designs_tools.dm b/code/modules/research/designs/autolathe_desings/autolathe_designs_tools.dm index 330dfb8f8a..516c91d426 100644 --- a/code/modules/research/designs/autolathe_desings/autolathe_designs_tools.dm +++ b/code/modules/research/designs/autolathe_desings/autolathe_designs_tools.dm @@ -157,3 +157,11 @@ materials = list(/datum/material/iron = 150, /datum/material/glass = 150) build_path = /obj/item/geiger_counter category = list("initial", "Tools") + +/datum/design/saw + name = "Hand Saw" + id = "handsaw" + build_type = AUTOLATHE + materials = list(/datum/material/iron = 500) + build_path = /obj/item/hatchet/saw + category = list("initial", "Tools") diff --git a/icons/obj/ammo.dmi b/icons/obj/ammo.dmi index e0b02d2adc..a40359cadb 100644 Binary files a/icons/obj/ammo.dmi and b/icons/obj/ammo.dmi differ diff --git a/icons/obj/guns/gun_parts.dmi b/icons/obj/guns/gun_parts.dmi new file mode 100644 index 0000000000..8e3168769d Binary files /dev/null and b/icons/obj/guns/gun_parts.dmi differ diff --git a/icons/obj/guns/projectile.dmi b/icons/obj/guns/projectile.dmi index 79045ac92b..8b58707615 100644 Binary files a/icons/obj/guns/projectile.dmi and b/icons/obj/guns/projectile.dmi differ diff --git a/tgstation.dme b/tgstation.dme index ccfb6c32af..b6bf5b4ea8 100755 --- a/tgstation.dme +++ b/tgstation.dme @@ -1121,6 +1121,7 @@ #include "code\game\objects\items\tanks\tanks.dm" #include "code\game\objects\items\tanks\watertank.dm" #include "code\game\objects\items\tools\crowbar.dm" +#include "code\game\objects\items\tools\saw.dm" #include "code\game\objects\items\tools\screwdriver.dm" #include "code\game\objects\items\tools\weldingtool.dm" #include "code\game\objects\items\tools\wirecutters.dm"