From ec31da7756f121a109d4e3635ea10cb5b971e9c4 Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Wed, 10 Nov 2021 21:34:50 +0000 Subject: [PATCH] [MIRROR] Allow manual crafting of many atmos devices with the crafting menu [MDB IGNORE] (#9378) * Allow manual crafting of many atmos devices with the crafting menu (#62676) * Allow manual crafting of many atmos devices with the crafting menu Co-authored-by: Ghilker <42839747+Ghilker@users.noreply.github.com> --- code/__DEFINES/construction.dm | 1 + code/datums/components/crafting/crafting.dm | 1 + code/datums/components/crafting/recipes.dm | 310 ++++++++++++++++++++ code/game/machinery/pipe/construction.dm | 21 ++ 4 files changed, 333 insertions(+) diff --git a/code/__DEFINES/construction.dm b/code/__DEFINES/construction.dm index d1872582f95..b3c6b1098f1 100644 --- a/code/__DEFINES/construction.dm +++ b/code/__DEFINES/construction.dm @@ -108,6 +108,7 @@ #define CAT_ICE "Frozen" #define CAT_DRINK "Drinks" #define CAT_CHEMISTRY "Chemistry" +#define CAT_ATMOSPHERIC "Atmospheric" //rcd modes #define RCD_FLOORWALL 0 diff --git a/code/datums/components/crafting/crafting.dm b/code/datums/components/crafting/crafting.dm index 8e50f35b1a7..76523bd8cac 100644 --- a/code/datums/components/crafting/crafting.dm +++ b/code/datums/components/crafting/crafting.dm @@ -44,6 +44,7 @@ ), CAT_DRINK = CAT_NONE, CAT_CLOTHING = CAT_NONE, + CAT_ATMOSPHERIC = CAT_NONE, ) var/cur_category = CAT_NONE diff --git a/code/datums/components/crafting/recipes.dm b/code/datums/components/crafting/recipes.dm index e2350cf1dc7..c0700c43ca4 100644 --- a/code/datums/components/crafting/recipes.dm +++ b/code/datums/components/crafting/recipes.dm @@ -45,6 +45,14 @@ /datum/crafting_recipe/proc/on_craft_completion(mob/user, atom/result) return +///Check if the pipe used for atmospheric device crafting is the proper one +/datum/crafting_recipe/proc/atmos_pipe_check(mob/user, list/collected_requirements) + var/obj/item/pipe/required_pipe = collected_requirements[/obj/item/pipe][1] + if(ispath(required_pipe.pipe_type, /obj/machinery/atmospherics/pipe/smart)) + return TRUE + to_chat(user, span_boldwarning("You can't craft \a [name] without a pipe fitting!")) + return FALSE + /datum/crafting_recipe/improv_explosive name = "IED" result = /obj/item/grenade/iedcasing @@ -1337,5 +1345,307 @@ time = 40 SECONDS category = CAT_MISC +/datum/crafting_recipe/pipe + name = "Smart pipe fitting" + tool_behaviors = list(TOOL_WRENCH) + result = /obj/item/pipe/quaternary + reqs = list(/obj/item/stack/sheet/iron = 1) + time = 0.5 SECONDS + category = CAT_ATMOSPHERIC + +/datum/crafting_recipe/pipe/on_craft_completion(mob/user, atom/result) + var/obj/item/pipe/crafted_pipe = result + crafted_pipe.pipe_type = /obj/machinery/atmospherics/pipe/smart + crafted_pipe.pipe_color = COLOR_VERY_LIGHT_GRAY + crafted_pipe.p_init_dir = ALL_CARDINALS + crafted_pipe.setDir(SOUTH) + crafted_pipe.update() + +/datum/crafting_recipe/layer_adapter + name = "Layer manifold fitting" + tool_behaviors = list(TOOL_WRENCH, TOOL_WELDER) + result = /obj/item/pipe/binary + reqs = list( + /obj/item/pipe = 1, + /obj/item/stack/sheet/iron = 1) + time = 1 SECONDS + category = CAT_ATMOSPHERIC + +/datum/crafting_recipe/layer_adapter/check_requirements(mob/user, list/collected_requirements) + return atmos_pipe_check(user, collected_requirements) + +/datum/crafting_recipe/layer_adapter/on_craft_completion(mob/user, atom/result) + var/obj/item/pipe/crafted_pipe = result + crafted_pipe.pipe_type = /obj/machinery/atmospherics/pipe/layer_manifold + crafted_pipe.pipe_color = COLOR_VERY_LIGHT_GRAY + crafted_pipe.setDir(user.dir) + crafted_pipe.update() + +/datum/crafting_recipe/color_adapter + name = "Color adapter fitting" + tool_behaviors = list(TOOL_WRENCH, TOOL_WELDER) + result = /obj/item/pipe/binary + reqs = list( + /obj/item/pipe = 1, + /obj/item/stack/sheet/iron = 1) + time = 1 SECONDS + category = CAT_ATMOSPHERIC + +/datum/crafting_recipe/color_adapter/check_requirements(mob/user, list/collected_requirements) + return atmos_pipe_check(user, collected_requirements) + +/datum/crafting_recipe/color_adapter/on_craft_completion(mob/user, atom/result) + var/obj/item/pipe/crafted_pipe = result + crafted_pipe.pipe_type = /obj/machinery/atmospherics/pipe/color_adapter + crafted_pipe.pipe_color = COLOR_VERY_LIGHT_GRAY + crafted_pipe.setDir(user.dir) + crafted_pipe.update() + +/datum/crafting_recipe/he_pipe + name = "H/E pipe fitting" + tool_behaviors = list(TOOL_WRENCH, TOOL_WELDER) + result = /obj/item/pipe/quaternary + reqs = list( + /obj/item/pipe = 1, + /obj/item/stack/sheet/iron = 1) + time = 1 SECONDS + category = CAT_ATMOSPHERIC + +/datum/crafting_recipe/he_pipe/check_requirements(mob/user, list/collected_requirements) + return atmos_pipe_check(user, collected_requirements) + +/datum/crafting_recipe/he_pipe/on_craft_completion(mob/user, atom/result) + var/obj/item/pipe/crafted_pipe = result + crafted_pipe.pipe_type = /obj/machinery/atmospherics/pipe/heat_exchanging/manifold4w + crafted_pipe.pipe_color = COLOR_VERY_LIGHT_GRAY + crafted_pipe.setDir(user.dir) + crafted_pipe.update() + +/datum/crafting_recipe/he_junction + name = "H/E junction fitting" + tool_behaviors = list(TOOL_WRENCH, TOOL_WELDER) + result = /obj/item/pipe/directional + reqs = list( + /obj/item/pipe = 1, + /obj/item/stack/sheet/iron = 1) + time = 1 SECONDS + category = CAT_ATMOSPHERIC + +/datum/crafting_recipe/he_junction/check_requirements(mob/user, list/collected_requirements) + return atmos_pipe_check(user, collected_requirements) + +/datum/crafting_recipe/he_junction/on_craft_completion(mob/user, atom/result) + var/obj/item/pipe/crafted_pipe = result + crafted_pipe.pipe_type = /obj/machinery/atmospherics/pipe/heat_exchanging/junction + crafted_pipe.pipe_color = COLOR_VERY_LIGHT_GRAY + crafted_pipe.setDir(user.dir) + crafted_pipe.update() + +/datum/crafting_recipe/pressure_pump + name = "Pressure pump fitting" + tool_behaviors = list(TOOL_WRENCH, TOOL_WELDER) + result = /obj/item/pipe/binary + reqs = list( + /obj/item/pipe = 1, + /obj/item/stack/sheet/iron = 5, + /obj/item/stack/cable_coil = 5) + time = 2 SECONDS + category = CAT_ATMOSPHERIC + +/datum/crafting_recipe/pressure_pump/check_requirements(mob/user, list/collected_requirements) + return atmos_pipe_check(user, collected_requirements) + +/datum/crafting_recipe/pressure_pump/on_craft_completion(mob/user, atom/result) + var/obj/item/pipe/crafted_pipe = result + crafted_pipe.pipe_type = /obj/machinery/atmospherics/components/binary/pump + crafted_pipe.pipe_color = COLOR_VERY_LIGHT_GRAY + crafted_pipe.setDir(user.dir) + crafted_pipe.update() + +/datum/crafting_recipe/manual_valve + name = "Manual valve fitting" + tool_behaviors = list(TOOL_WRENCH, TOOL_WELDER) + result = /obj/item/pipe/binary + reqs = list( + /obj/item/pipe = 1, + /obj/item/stack/sheet/iron = 1) + time = 2 SECONDS + category = CAT_ATMOSPHERIC + +/datum/crafting_recipe/manual_valve/check_requirements(mob/user, list/collected_requirements) + return atmos_pipe_check(user, collected_requirements) + +/datum/crafting_recipe/manual_valve/on_craft_completion(mob/user, atom/result) + var/obj/item/pipe/crafted_pipe = result + crafted_pipe.pipe_type = /obj/machinery/atmospherics/components/binary/valve + crafted_pipe.pipe_color = COLOR_VERY_LIGHT_GRAY + crafted_pipe.setDir(user.dir) + crafted_pipe.update() + +/datum/crafting_recipe/vent + name = "Vent pump fitting" + tool_behaviors = list(TOOL_WRENCH, TOOL_WELDER) + result = /obj/item/pipe/directional + reqs = list( + /obj/item/pipe = 1, + /obj/item/stack/sheet/iron = 5, + /obj/item/stack/cable_coil = 5) + time = 2 SECONDS + category = CAT_ATMOSPHERIC + +/datum/crafting_recipe/vent/check_requirements(mob/user, list/collected_requirements) + return atmos_pipe_check(user, collected_requirements) + +/datum/crafting_recipe/vent/on_craft_completion(mob/user, atom/result) + var/obj/item/pipe/crafted_pipe = result + crafted_pipe.pipe_type = /obj/machinery/atmospherics/components/unary/vent_pump + crafted_pipe.pipe_color = COLOR_VERY_LIGHT_GRAY + crafted_pipe.setDir(user.dir) + crafted_pipe.update() + +/datum/crafting_recipe/scrubber + name = "Scrubber fitting" + tool_behaviors = list(TOOL_WRENCH, TOOL_WELDER) + result = /obj/item/pipe/directional + reqs = list( + /obj/item/pipe = 1, + /obj/item/stack/sheet/iron = 5, + /obj/item/stack/cable_coil = 5) + time = 2 SECONDS + category = CAT_ATMOSPHERIC + +/datum/crafting_recipe/scrubber/check_requirements(mob/user, list/collected_requirements) + return atmos_pipe_check(user, collected_requirements) + +/datum/crafting_recipe/scrubber/on_craft_completion(mob/user, atom/result) + var/obj/item/pipe/crafted_pipe = result + crafted_pipe.pipe_type = /obj/machinery/atmospherics/components/unary/vent_scrubber + crafted_pipe.pipe_color = COLOR_VERY_LIGHT_GRAY + crafted_pipe.setDir(user.dir) + crafted_pipe.update() + +/datum/crafting_recipe/filter + name = "Filter fitting" + tool_behaviors = list(TOOL_WRENCH, TOOL_WELDER) + result = /obj/item/pipe/trinary/flippable + reqs = list( + /obj/item/pipe = 1, + /obj/item/stack/sheet/iron = 5, + /obj/item/stack/cable_coil = 5) + time = 2 SECONDS + category = CAT_ATMOSPHERIC + +/datum/crafting_recipe/filter/check_requirements(mob/user, list/collected_requirements) + return atmos_pipe_check(user, collected_requirements) + +/datum/crafting_recipe/filter/on_craft_completion(mob/user, atom/result) + var/obj/item/pipe/crafted_pipe = result + crafted_pipe.pipe_type = /obj/machinery/atmospherics/components/trinary/filter + crafted_pipe.pipe_color = COLOR_VERY_LIGHT_GRAY + crafted_pipe.setDir(user.dir) + crafted_pipe.update() + +/datum/crafting_recipe/mixer + name = "Mixer fitting" + tool_behaviors = list(TOOL_WRENCH, TOOL_WELDER) + result = /obj/item/pipe/trinary/flippable + reqs = list( + /obj/item/pipe = 1, + /obj/item/stack/sheet/iron = 5, + /obj/item/stack/cable_coil = 5) + time = 2 SECONDS + category = CAT_ATMOSPHERIC + +/datum/crafting_recipe/mixer/check_requirements(mob/user, list/collected_requirements) + return atmos_pipe_check(user, collected_requirements) + +/datum/crafting_recipe/mixer/on_craft_completion(mob/user, atom/result) + var/obj/item/pipe/crafted_pipe = result + crafted_pipe.pipe_type = /obj/machinery/atmospherics/components/trinary/mixer + crafted_pipe.pipe_color = COLOR_VERY_LIGHT_GRAY + crafted_pipe.setDir(user.dir) + crafted_pipe.update() + +/datum/crafting_recipe/connector + name = "Portable connector fitting" + tool_behaviors = list(TOOL_WRENCH, TOOL_WELDER) + result = /obj/item/pipe/directional + reqs = list( + /obj/item/pipe = 1, + /obj/item/stack/sheet/iron = 1) + time = 2 SECONDS + category = CAT_ATMOSPHERIC + +/datum/crafting_recipe/connector/check_requirements(mob/user, list/collected_requirements) + return atmos_pipe_check(user, collected_requirements) + +/datum/crafting_recipe/connector/on_craft_completion(mob/user, atom/result) + var/obj/item/pipe/crafted_pipe = result + crafted_pipe.pipe_type = /obj/machinery/atmospherics/components/unary/portables_connector + crafted_pipe.pipe_color = COLOR_VERY_LIGHT_GRAY + crafted_pipe.setDir(user.dir) + crafted_pipe.update() + +/datum/crafting_recipe/passive_vent + name = "Passive vent fitting" + tool_behaviors = list(TOOL_WRENCH, TOOL_WELDER) + result = /obj/item/pipe/directional + reqs = list( + /obj/item/pipe = 1, + /obj/item/stack/sheet/iron = 1) + time = 2 SECONDS + category = CAT_ATMOSPHERIC + +/datum/crafting_recipe/passive_vent/check_requirements(mob/user, list/collected_requirements) + return atmos_pipe_check(user, collected_requirements) + +/datum/crafting_recipe/passive_vent/on_craft_completion(mob/user, atom/result) + var/obj/item/pipe/crafted_pipe = result + crafted_pipe.pipe_type = /obj/machinery/atmospherics/components/unary/passive_vent + crafted_pipe.pipe_color = COLOR_VERY_LIGHT_GRAY + crafted_pipe.setDir(user.dir) + crafted_pipe.update() + +/datum/crafting_recipe/injector + name = "Outlet injector fitting" + tool_behaviors = list(TOOL_WRENCH, TOOL_WELDER) + result = /obj/item/pipe/directional + reqs = list( + /obj/item/pipe = 1, + /obj/item/stack/sheet/iron = 1, + /obj/item/stack/cable_coil = 5) + time = 2 SECONDS + category = CAT_ATMOSPHERIC + +/datum/crafting_recipe/injector/check_requirements(mob/user, list/collected_requirements) + return atmos_pipe_check(user, collected_requirements) + +/datum/crafting_recipe/injector/on_craft_completion(mob/user, atom/result) + var/obj/item/pipe/crafted_pipe = result + crafted_pipe.pipe_type = /obj/machinery/atmospherics/components/unary/outlet_injector + crafted_pipe.pipe_color = COLOR_VERY_LIGHT_GRAY + crafted_pipe.setDir(user.dir) + crafted_pipe.update() + +/datum/crafting_recipe/he_exchanger + name = "Heat exchanger fitting" + tool_behaviors = list(TOOL_WRENCH, TOOL_WELDER) + result = /obj/item/pipe/directional + reqs = list( + /obj/item/pipe = 1, + /obj/item/stack/sheet/plasteel = 1) + time = 2 SECONDS + category = CAT_ATMOSPHERIC + +/datum/crafting_recipe/he_exchanger/check_requirements(mob/user, list/collected_requirements) + return atmos_pipe_check(user, collected_requirements) + +/datum/crafting_recipe/he_exchanger/on_craft_completion(mob/user, atom/result) + var/obj/item/pipe/crafted_pipe = result + crafted_pipe.pipe_type = /obj/machinery/atmospherics/components/unary/heat_exchanger + crafted_pipe.pipe_color = COLOR_VERY_LIGHT_GRAY + crafted_pipe.setDir(user.dir) + crafted_pipe.update() + #undef CRAFTING_MACHINERY_CONSUME #undef CRAFTING_MACHINERY_USE diff --git a/code/game/machinery/pipe/construction.dm b/code/game/machinery/pipe/construction.dm index fc3363f42a0..ad16afa990b 100644 --- a/code/game/machinery/pipe/construction.dm +++ b/code/game/machinery/pipe/construction.dm @@ -299,6 +299,27 @@ Buildable meters C.blood_volume = 0 return(OXYLOSS|BRUTELOSS) +/obj/item/pipe/examine(mob/user) + . = ..() + . += span_notice("The pipe layer is set to [piping_layer].") + . += span_notice("You can change the pipe layer by Alt-Clicking the device.") + . += span_notice("You can rotate it by using it in hand.") + +/obj/item/pipe/AltClick(mob/user) + . = ..() + var/layer_to_set = (piping_layer >= PIPING_LAYER_MAX) ? PIPING_LAYER_MIN : (piping_layer + 1) + set_piping_layer(layer_to_set) + visible_message("You set the pipe layer to [piping_layer].") + +/obj/item/pipe/trinary/flippable/examine(mob/user) + . = ..() + . += span_notice("You can flip the device by Ctrl-Clicking it.") + +/obj/item/pipe/trinary/flippable/CtrlClick(mob/user) + . = ..() + do_a_flip() + visible_message("You flip the device.") + /obj/item/pipe_meter name = "meter" desc = "A meter that can be wrenched on pipes, or attached to the floor with screws."