From b90510b951790dfe9a7ac6cdfee4bf10810a2ab1 Mon Sep 17 00:00:00 2001 From: Geeves Date: Thu, 5 Aug 2021 18:03:28 +0200 Subject: [PATCH] Experimental Welding Tool Upgrades (#12196) --- code/game/objects/items/weapons/tools.dm | 80 ++++++++++++++++++ .../designs/protolathe/tool_designs.dm | 10 ++- .../geeves-welding_tool_upgrades.yml | 6 ++ .../contained_items/tools/welding_tools.dmi | Bin 3459 -> 11613 bytes 4 files changed, 95 insertions(+), 1 deletion(-) create mode 100644 html/changelogs/geeves-welding_tool_upgrades.yml diff --git a/code/game/objects/items/weapons/tools.dm b/code/game/objects/items/weapons/tools.dm index 830151650db..15d32ef3f1c 100644 --- a/code/game/objects/items/weapons/tools.dm +++ b/code/game/objects/items/weapons/tools.dm @@ -285,6 +285,9 @@ //400 = 1 unit per 40 seconds change_icons = FALSE + var/obj/item/eyeshield/eyeshield + var/obj/item/overcapacitor/overcap + //Welding tool functionality here /obj/item/weldingtool/Initialize() . = ..() @@ -600,6 +603,54 @@ STOP_PROCESSING(SSprocessing, src) //Stop processing when destroyed regardless of conditions return ..() +/obj/item/weldingtool/experimental/attackby(obj/item/I, mob/user) + if(istype(I, /obj/item/eyeshield)) + if(eyeshield) + to_chat(user, SPAN_WARNING("\The [src] already has an eye shield installed!")) + return + user.drop_from_inventory(I, src) + to_chat(user, SPAN_NOTICE("You install \the [I] into \the [src].")) + eyeshield = I + add_overlay("eyeshield_attached", TRUE) + return + if(istype(I, /obj/item/overcapacitor)) + if(overcap) + to_chat(user, SPAN_WARNING("\The [src] already has an overcapacitor installed!")) + return + user.drop_from_inventory(I, src) + to_chat(user, SPAN_NOTICE("You install \the [I] into \the [src].")) + overcap = I + add_overlay("overcap_attached", TRUE) + toolspeed *= 2 + return + if(I.isscrewdriver()) + if(!eyeshield && !overcap) + to_chat(user, SPAN_WARNING("\The [src] doesn't have any accessories to remove!")) + return + var/list/accessories = list() + if(eyeshield) + var/image/radial_button = image(icon = src.icon, icon_state = "eyeshield") + accessories["Eye Shield"] = radial_button + if(overcap) + var/image/radial_button = image(icon = src.icon, icon_state = "overcap") + accessories["Overcapacitor"] = radial_button + var/obj/item/remove_accessory + switch(show_radial_menu(user, src, accessories, radius = 42, tooltips = TRUE)) + if("Eye Shield") + remove_accessory = eyeshield + eyeshield = null + if("Overcapacitor") + remove_accessory = overcap + overcap = null + toolspeed *= 0.5 + if(!remove_accessory) + return + user.put_in_hands(remove_accessory) + to_chat(user, SPAN_NOTICE("You remove \the [remove_accessory] into \the [src].")) + cut_overlay("[remove_accessory.icon_state]_attached", TRUE) + return + return ..() + //Make sure the experimental tool only stops processing when its turned off AND full /obj/item/weldingtool/experimental/set_processing(var/state = 0) if (state == 1) @@ -624,6 +675,35 @@ set_processing(0) last_gen = world.time +/obj/item/weldingtool/experimental/eyecheck(mob/user) + if(eyeshield) + return + return ..() + +/obj/item/weldingtool/experimental/remove_fuel(amount, mob/M, colourChange) + . = ..(overcap ? amount * 3 : amount, M, colourChange) + if(!. && welding && overcap) // to ensure that the fuel gets used even if the amount is high + reagents.remove_reagent(/decl/reagent/fuel, get_fuel()) + +/obj/item/eyeshield + name = "experimental eyeshield" + desc = "An advanced eyeshield capable of dampening the welding glare produced when working on modern super-materials, removing the need for user-worn welding gear." + desc_info = "This can be attached to an experimental welder to give it welding protection, removing the need for welding goggles or masks." + icon = 'icons/obj/contained_items/tools/welding_tools.dmi' + icon_state = "eyeshield" + item_state = "eyeshield" + contained_sprite = TRUE + +/obj/item/overcapacitor + name = "experimental overcapacitor" + desc = "An advanced capacitor that injects a current into the welding stream, doubling the speed of welding tasks without sacrificing quality. Excess current burns up welding fuel, reducing fuel efficiency, however." + desc_info = "This can be attached to an experimental welder to double the speed it works at, at the cost of tripling the fuel cost of using it." + icon = 'icons/obj/contained_items/tools/welding_tools.dmi' + icon_state = "overcap" + item_state = "overcap" + contained_sprite = TRUE + + /* * Crowbar */ diff --git a/code/modules/research/designs/protolathe/tool_designs.dm b/code/modules/research/designs/protolathe/tool_designs.dm index 9193fbe720f..973802160b7 100644 --- a/code/modules/research/designs/protolathe/tool_designs.dm +++ b/code/modules/research/designs/protolathe/tool_designs.dm @@ -9,9 +9,17 @@ /datum/design/item/tool/experimental_welder req_tech = list(TECH_ENGINEERING = 4, TECH_MATERIAL = 4) - materials = list(DEFAULT_WALL_MATERIAL = 500) + materials = list(DEFAULT_WALL_MATERIAL = 500, MATERIAL_GLASS = 500) build_path = /obj/item/weldingtool/experimental +/datum/design/item/tool/experimental_welder/eyeshield + req_tech = list(TECH_ENGINEERING = 6, TECH_MATERIAL = 5) + build_path = /obj/item/eyeshield + +/datum/design/item/tool/experimental_welder/overcap + req_tech = list(TECH_ENGINEERING = 6, TECH_MATERIAL = 5) + build_path = /obj/item/overcapacitor + datum/design/item/tool/advanced_light_replacer desc = "A specialised light replacer which stores more lights, refills faster from boxes, and sucks up broken bulbs." req_tech = list(TECH_MAGNET = 3, TECH_MATERIAL = 4) diff --git a/html/changelogs/geeves-welding_tool_upgrades.yml b/html/changelogs/geeves-welding_tool_upgrades.yml new file mode 100644 index 00000000000..3b866469bfa --- /dev/null +++ b/html/changelogs/geeves-welding_tool_upgrades.yml @@ -0,0 +1,6 @@ +author: Geeves + +delete-after: True + +changes: + - rscadd: "RnD can now produce upgrades for the experimental welding tool, namely, an eyeshield and an overcapacitor. The eyeshield removes the need to wear protective welding gear, wile the overcapacitor increases working speed at the cost of fuel use." \ No newline at end of file diff --git a/icons/obj/contained_items/tools/welding_tools.dmi b/icons/obj/contained_items/tools/welding_tools.dmi index 35fb4284cd5a925d93b3567077e762f468d409ef..f79247fabbe22c3f337329ce9dada188b81d2a54 100644 GIT binary patch literal 11613 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 literal 3459 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