From 635079aa982f0f01be53e4e104939b180f1abbf5 Mon Sep 17 00:00:00 2001 From: Time-Green Date: Wed, 24 Mar 2021 18:57:00 +0100 Subject: [PATCH] Adds a plumbing layer manifold (#57494) Adds a multilayer plumbing manifold, I also murdered the multilayer duct You can now alt-click the plumbing RCD to change the layer it prints. I made a whole thing where right clicking changed the settings and you could use that to change machinery aswell. I even did that with the plunger, it was absolutely beautiful. Anyway that drained the life out of me because apparently there's no attack_obj_secondary and afterattack_secondary ALSO called attack_obj (left click). I just hate whoever made it with intensity Plumbing now uses three layers. They should be easier to navigate. I tried to make layer connecting the same as cross-color connecting, but that would take more of my soul then there is to take --- code/datums/components/crafting/recipes.dm | 8 -- code/datums/components/plumbing/IV_drip.dm | 4 +- code/datums/components/plumbing/_plumbing.dm | 21 ++++-- .../plumbing/chemical_acclimator.dm | 2 +- code/datums/components/plumbing/filter.dm | 2 +- .../components/plumbing/reaction_chamber.dm | 2 +- code/datums/components/plumbing/splitter.dm | 2 +- code/game/objects/items/RCD.dm | 23 +++++- .../objects/structures/lavaland/geyser.dm | 2 +- code/modules/plumbing/ducts.dm | 71 ++++-------------- .../plumbing/plumbers/_plumb_machinery.dm | 27 +++++-- code/modules/plumbing/plumbers/acclimator.dm | 4 +- code/modules/plumbing/plumbers/bottler.dm | 4 +- code/modules/plumbing/plumbers/destroyer.dm | 4 +- code/modules/plumbing/plumbers/fermenter.dm | 4 +- code/modules/plumbing/plumbers/filter.dm | 4 +- .../plumbing/plumbers/grinder_chemical.dm | 4 +- code/modules/plumbing/plumbers/pill_press.dm | 4 +- .../plumbing/plumbers/plumbing_buffer.dm | 4 +- code/modules/plumbing/plumbers/pumps.dm | 4 +- .../plumbing/plumbers/reaction_chamber.dm | 4 +- code/modules/plumbing/plumbers/splitters.dm | 4 +- code/modules/plumbing/plumbers/synthesizer.dm | 4 +- code/modules/plumbing/plumbers/teleporter.dm | 4 +- icons/obj/plumbing/plumbers.dmi | Bin 19168 -> 20122 bytes 25 files changed, 106 insertions(+), 110 deletions(-) diff --git a/code/datums/components/crafting/recipes.dm b/code/datums/components/crafting/recipes.dm index 4cd1061abf2..01129916d63 100644 --- a/code/datums/components/crafting/recipes.dm +++ b/code/datums/components/crafting/recipes.dm @@ -1020,14 +1020,6 @@ category = CAT_MISC tool_behaviors = list(TOOL_WRENCH, TOOL_WELDER, TOOL_WIRECUTTER) -/datum/crafting_recipe/multiduct - name = "Multi-layer duct" - result = /obj/machinery/duct/multilayered - time = 5 - reqs = list(/obj/item/stack/ducts = 5) - category = CAT_MISC - tool_behaviors = list(TOOL_WELDER) - /datum/crafting_recipe/rib name = "Collosal Rib" always_available = FALSE diff --git a/code/datums/components/plumbing/IV_drip.dm b/code/datums/components/plumbing/IV_drip.dm index c4cd9830440..26b6bd4e403 100644 --- a/code/datums/components/plumbing/IV_drip.dm +++ b/code/datums/components/plumbing/IV_drip.dm @@ -5,9 +5,9 @@ methods = INJECT -/datum/component/plumbing/iv_drip/Initialize() +/datum/component/plumbing/iv_drip/Initialize(start=TRUE, _ducting_layer, _turn_connects=TRUE, datum/reagents/custom_receiver) . = ..() - + recipient_reagents_holder = null /datum/component/plumbing/iv_drip/RegisterWithParent() diff --git a/code/datums/components/plumbing/_plumbing.dm b/code/datums/components/plumbing/_plumbing.dm index d0636a0719b..c30f0edf2ff 100644 --- a/code/datums/components/plumbing/_plumbing.dm +++ b/code/datums/components/plumbing/_plumbing.dm @@ -1,4 +1,5 @@ /datum/component/plumbing + dupe_mode = COMPONENT_DUPE_ALLOWED ///Index with "1" = /datum/ductnet/theductpointingnorth etc. "1" being the num2text from NORTH define var/list/datum/ductnet/ducts = list() ///shortcut to our parents' reagent holder @@ -27,12 +28,12 @@ var/supply_color = "blue" ///turn_connects is for wheter or not we spin with the object to change our pipes -/datum/component/plumbing/Initialize(start=TRUE, _turn_connects=TRUE, _ducting_layer, datum/reagents/custom_receiver) +/datum/component/plumbing/Initialize(start=TRUE, _ducting_layer, _turn_connects=TRUE, datum/reagents/custom_receiver) if(!ismovable(parent)) return COMPONENT_INCOMPATIBLE if(_ducting_layer) - ducting_layer = ducting_layer + ducting_layer = _ducting_layer var/atom/movable/AM = parent if(!AM.reagents && !custom_receiver) @@ -230,9 +231,12 @@ var/obj/machinery/duct/duct = A duct.attempt_connect() else - var/datum/component/plumbing/P = A.GetComponent(/datum/component/plumbing) - if(P && P.ducting_layer == ducting_layer) - direct_connect(P, D) + for(var/plumber in A.GetComponents(/datum/component/plumbing)) + if(!plumber) //apparently yes it will be null hahahaasahsdvashufv + continue + var/datum/component/plumbing/plumb = plumber + if(plumb && plumb.ducting_layer == ducting_layer) + direct_connect(plumb, D) /// Toggle our machinery on or off. This is called by a hook from default_unfasten_wrench with anchored as only param, so we dont have to copypaste this on every object that can move /datum/component/plumbing/proc/toggle_active(obj/O, new_state) @@ -317,6 +321,13 @@ demand_connects = WEST supply_connects = EAST +/datum/component/plumbing/manifold + demand_connects = NORTH + supply_connects = SOUTH + +/datum/component/plumbing/manifold/change_ducting_layer(obj/caller, obj/O, new_layer) + return + #define READY 2 ///Baby component for the buffer plumbing machine /datum/component/plumbing/buffer diff --git a/code/datums/components/plumbing/chemical_acclimator.dm b/code/datums/components/plumbing/chemical_acclimator.dm index b85eccc8665..777a2804a78 100644 --- a/code/datums/components/plumbing/chemical_acclimator.dm +++ b/code/datums/components/plumbing/chemical_acclimator.dm @@ -3,7 +3,7 @@ supply_connects = EAST var/obj/machinery/plumbing/acclimator/myacclimator -/datum/component/plumbing/acclimator/Initialize(start=TRUE, _turn_connects=TRUE) +/datum/component/plumbing/acclimator/Initialize(start=TRUE, _ducting_layer, _turn_connects=TRUE, datum/reagents/custom_receiver) . = ..() if(!istype(parent, /obj/machinery/plumbing/acclimator)) return COMPONENT_INCOMPATIBLE diff --git a/code/datums/components/plumbing/filter.dm b/code/datums/components/plumbing/filter.dm index 76b76323c5b..4b8dd8d54a6 100644 --- a/code/datums/components/plumbing/filter.dm +++ b/code/datums/components/plumbing/filter.dm @@ -3,7 +3,7 @@ demand_connects = NORTH supply_connects = SOUTH | EAST | WEST //SOUTH is straight, EAST is left and WEST is right. We look from the perspective of the insert -/datum/component/plumbing/filter/Initialize() +/datum/component/plumbing/filter/Initialize(start=TRUE, _ducting_layer, _turn_connects=TRUE, datum/reagents/custom_receiver) . = ..() if(!istype(parent, /obj/machinery/plumbing/filter)) return COMPONENT_INCOMPATIBLE diff --git a/code/datums/components/plumbing/reaction_chamber.dm b/code/datums/components/plumbing/reaction_chamber.dm index 2366c0dbfe1..d270fbee7a3 100644 --- a/code/datums/components/plumbing/reaction_chamber.dm +++ b/code/datums/components/plumbing/reaction_chamber.dm @@ -2,7 +2,7 @@ demand_connects = NORTH supply_connects = SOUTH -/datum/component/plumbing/reaction_chamber/Initialize(start=TRUE, _turn_connects=TRUE) +/datum/component/plumbing/reaction_chamber/Initialize(start=TRUE, _ducting_layer, _turn_connects=TRUE, datum/reagents/custom_receiver) . = ..() if(!istype(parent, /obj/machinery/plumbing/reaction_chamber)) return COMPONENT_INCOMPATIBLE diff --git a/code/datums/components/plumbing/splitter.dm b/code/datums/components/plumbing/splitter.dm index e0cef916a10..4dd68a9e578 100644 --- a/code/datums/components/plumbing/splitter.dm +++ b/code/datums/components/plumbing/splitter.dm @@ -2,7 +2,7 @@ demand_connects = NORTH supply_connects = SOUTH | EAST -/datum/component/plumbing/splitter/Initialize() +/datum/component/plumbing/splitter/Initialize(start=TRUE, _ducting_layer, _turn_connects=TRUE, datum/reagents/custom_receiver) . = ..() if(. && !istype(parent, /obj/machinery/plumbing/splitter)) return FALSE diff --git a/code/game/objects/items/RCD.dm b/code/game/objects/items/RCD.dm index a3f36d3f485..94c279a9ed9 100644 --- a/code/game/objects/items/RCD.dm +++ b/code/game/objects/items/RCD.dm @@ -990,6 +990,10 @@ RLD var/list/machinery_data = list("cost" = list()) ///This list that holds all the plumbing design types the plumberer can construct. Its purpose is to make it easy to make new plumberer subtypes with a different selection of machines. var/list/plumbing_design_types + ///Possible layers to pick from + var/static/list/layers = list("Second Layer" = SECOND_DUCT_LAYER, "Default Layer" = DUCT_LAYER_DEFAULT, "Fourth Layer" = FOURTH_DUCT_LAYER) + ///Current selected layer + var/current_layer = "Default Layer" /obj/item/construction/plumbing/Initialize(mapload) . = ..() @@ -1022,8 +1026,9 @@ RLD /obj/machinery/plumbing/synthesizer = 15, /obj/machinery/plumbing/reaction_chamber = 15, /obj/machinery/plumbing/buffer = 10, + /obj/machinery/plumbing/layer_manifold = 5, + //Above are the most common machinery which is shown on the first cycle. Keep new additions below THIS line, unless they're probably gonna be needed alot /obj/machinery/plumbing/pill_press = 20, - //Above are the most common machinery which is shown on the first cycle. Keep new additions below THIS line /obj/machinery/plumbing/acclimator = 10, /obj/machinery/plumbing/bottler = 50, /obj/machinery/plumbing/disposer = 10, @@ -1048,7 +1053,7 @@ RLD useResource(machinery_data["cost"][blueprint], user) activate() playsound(src.loc, 'sound/machines/click.ogg', 50, TRUE) - new blueprint (A, FALSE, FALSE) + new blueprint (A, FALSE, layers[current_layer]) return TRUE /obj/item/construction/plumbing/proc/canPlace(turf/T) @@ -1074,6 +1079,20 @@ RLD else create_machine(A, user) +/obj/item/construction/plumbing/AltClick(mob/user) + if(!istype(user) || !user.canUseTopic(src, BE_CLOSE)) + return + + //this is just cycling options through a list + var/current_loc = layers.Find(current_layer) + 1 + + if(current_loc > layers.len) + current_loc = 1 + + //We want the key (the define), not the index (the string) + current_layer = layers[current_loc] + to_chat(user, "You switch [src] to [current_layer].") + /obj/item/construction/plumbing/research name = "research plumbing constructor" desc = "A type of plumbing constructor designed to rapidly deploy the machines needed to conduct cytological research." diff --git a/code/game/objects/structures/lavaland/geyser.dm b/code/game/objects/structures/lavaland/geyser.dm index 22bee6024d7..d8350c89e52 100644 --- a/code/game/objects/structures/lavaland/geyser.dm +++ b/code/game/objects/structures/lavaland/geyser.dm @@ -76,7 +76,7 @@ var/target_layer = DUCT_LAYER_DEFAULT ///Assoc list for possible layers - var/list/layers = list("Alternate Layer" = SECOND_DUCT_LAYER, "Default Layer" = DUCT_LAYER_DEFAULT) + var/list/layers = list("Second Layer" = SECOND_DUCT_LAYER, "Default Layer" = DUCT_LAYER_DEFAULT, "Fourth Layer" = FOURTH_DUCT_LAYER) /obj/item/plunger/attack_obj(obj/O, mob/living/user, params) if(layer_mode) diff --git a/code/modules/plumbing/ducts.dm b/code/modules/plumbing/ducts.dm index 8a3399c9f2b..897c1ccd0af 100644 --- a/code/modules/plumbing/ducts.dm +++ b/code/modules/plumbing/ducts.dm @@ -72,10 +72,14 @@ All the important duct code: /obj/machinery/duct/proc/attempt_connect() for(var/atom/movable/AM in loc) - var/datum/component/plumbing/P = AM.GetComponent(/datum/component/plumbing) - if(P?.active) - disconnect_duct() //let's not built under plumbing machinery - return + for(var/plumber in AM.GetComponents(/datum/component/plumbing)) + if(!plumber) //apparently yes it will be null hahahaasahsdvashufv + continue + var/datum/component/plumbing/plumb = plumber + if(plumb.active) + disconnect_duct() //let's not built under plumbing machinery + return + for(var/D in GLOB.cardinals) if(dumb && !(D & connects)) continue @@ -91,7 +95,7 @@ All the important duct code: for(var/plumber in AM.GetComponents(/datum/component/plumbing)) if(!plumber) //apparently yes it will be null hahahaasahsdvashufv - return + continue . += connect_plumber(plumber, direction) //so that if one is true, all is true. beautiful. ///connect to a duct @@ -183,10 +187,11 @@ All the important duct code: duct.add_duct(D) D.reconnect() else - var/datum/component/plumbing/P = AM.GetComponent(/datum/component/plumbing) if(AM in get_step(src, neighbours[AM])) //did we move? - if(P) - connect_plumber(P, neighbours[AM]) + for(var/plumber in AM.GetComponents(/datum/component/plumbing)) + if(!plumber) //apparently yes it will be null hahahaasahsdvashufv + return + connect_plumber(plumber, neighbours[AM]) else neighbours -= AM //we moved @@ -296,6 +301,7 @@ All the important duct code: "You [anchored ? null : "un"]fasten \the [src].", \ "You hear ratcheting.") return TRUE + ///collection of all the sanity checks to prevent us from stacking ducts that shouldn't be stacked /obj/machinery/duct/proc/can_anchor(turf/T) if(!T) @@ -338,53 +344,6 @@ All the important duct code: connect_network(D, direction, TRUE) update_appearance() -///has a total of 5 layers and doesnt give a shit about color. its also dumb so doesnt autoconnect. -/obj/machinery/duct/multilayered - name = "duct layer-manifold" - icon = 'icons/obj/2x2.dmi' - icon_state = "multiduct" - pixel_x = -15 - pixel_y = -15 - - color_to_color_support = FALSE - duct_layer = FIRST_DUCT_LAYER | SECOND_DUCT_LAYER | THIRD_DUCT_LAYER | FOURTH_DUCT_LAYER | FIFTH_DUCT_LAYER - drop_on_wrench = null - - lock_connects = TRUE - lock_layers = TRUE - ignore_colors = TRUE - dumb = TRUE - - active = FALSE - anchored = FALSE - -/obj/machinery/duct/multilayered/Initialize(mapload, no_anchor, color_of_duct, layer_of_duct = DUCT_LAYER_DEFAULT, force_connects) - . = ..() - update_connects() - -/obj/machinery/duct/multilayered/ComponentInitialize() - . = ..() - AddElement(/datum/element/update_icon_blocker) - -/obj/machinery/duct/multilayered/wrench_act(mob/living/user, obj/item/I) - . = ..() - update_connects() - -/obj/machinery/duct/multilayered/proc/update_connects() - if(dir & NORTH || dir & SOUTH) - connects = NORTH | SOUTH - else - connects = EAST | WEST - -///don't connect to other multilayered stuff because honestly it shouldn't be done and I dont wanna deal with it -/obj/machinery/duct/multilayered/connect_duct(obj/machinery/duct/D, direction, ignore_color) - if(istype(D, /obj/machinery/duct/multilayered)) - return - return ..() - -/obj/machinery/duct/multilayered/handle_layer() - return - /obj/item/stack/ducts name = "stack of duct" desc = "A stack of fluid ducts." @@ -402,7 +361,7 @@ All the important duct code: ///Default layer of our duct var/duct_layer = "Default Layer" ///Assoc index with all the available layers. yes five might be a bit much. Colors uses a global by the way - var/list/layers = list("Alternate Layer" = SECOND_DUCT_LAYER, "Default Layer" = DUCT_LAYER_DEFAULT) + var/list/layers = list("Second Layer" = SECOND_DUCT_LAYER, "Default Layer" = DUCT_LAYER_DEFAULT, "Fourth Layer" = FOURTH_DUCT_LAYER) /obj/item/stack/ducts/examine(mob/user) . = ..() diff --git a/code/modules/plumbing/plumbers/_plumb_machinery.dm b/code/modules/plumbing/plumbers/_plumb_machinery.dm index 293d32fd742..42dcdbf1843 100644 --- a/code/modules/plumbing/plumbers/_plumb_machinery.dm +++ b/code/modules/plumbing/plumbers/_plumb_machinery.dm @@ -60,9 +60,9 @@ icon_state = "pipe_input" reagent_flags = TRANSPARENT | REFILLABLE -/obj/machinery/plumbing/input/Initialize(mapload, bolt) +/obj/machinery/plumbing/input/Initialize(mapload, bolt, layer) . = ..() - AddComponent(/datum/component/plumbing/simple_supply, bolt) + AddComponent(/datum/component/plumbing/simple_supply, bolt, layer) ///We can fill beakers in here and everything. we dont inheret from input because it has nothing that we need /obj/machinery/plumbing/output @@ -71,9 +71,9 @@ icon_state = "pipe_output" reagent_flags = TRANSPARENT | DRAINABLE -/obj/machinery/plumbing/output/Initialize(mapload, bolt) +/obj/machinery/plumbing/output/Initialize(mapload, bolt, layer) . = ..() - AddComponent(/datum/component/plumbing/simple_demand, bolt) + AddComponent(/datum/component/plumbing/simple_demand, bolt, layer) /obj/machinery/plumbing/tank name = "chemical tank" @@ -81,6 +81,21 @@ icon_state = "tank" buffer = 400 -/obj/machinery/plumbing/tank/Initialize(mapload, bolt) +/obj/machinery/plumbing/tank/Initialize(mapload, bolt, layer) . = ..() - AddComponent(/datum/component/plumbing/tank, bolt) + AddComponent(/datum/component/plumbing/tank, bolt, layer) + + +///Layer manifold machine that connects a bunch of layers +/obj/machinery/plumbing/layer_manifold + name = "layer manifold" + desc = "A plumbing manifold for layers." + icon_state = "manifold" + density = FALSE + +/obj/machinery/plumbing/layer_manifold/Initialize(mapload, bolt, layer) + . = ..() + + AddComponent(/datum/component/plumbing/manifold, bolt, SECOND_DUCT_LAYER) + AddComponent(/datum/component/plumbing/manifold, bolt, THIRD_DUCT_LAYER) + AddComponent(/datum/component/plumbing/manifold, bolt, FOURTH_DUCT_LAYER) diff --git a/code/modules/plumbing/plumbers/acclimator.dm b/code/modules/plumbing/plumbers/acclimator.dm index 9e9114014ac..7707bce23f1 100644 --- a/code/modules/plumbing/plumbers/acclimator.dm +++ b/code/modules/plumbing/plumbers/acclimator.dm @@ -27,9 +27,9 @@ */ var/emptying = FALSE -/obj/machinery/plumbing/acclimator/Initialize(mapload, bolt) +/obj/machinery/plumbing/acclimator/Initialize(mapload, bolt, layer) . = ..() - AddComponent(/datum/component/plumbing/acclimator, bolt) + AddComponent(/datum/component/plumbing/acclimator, bolt, layer) /obj/machinery/plumbing/acclimator/process(delta_time) if(machine_stat & NOPOWER || !enabled || !reagents.total_volume || reagents.chem_temp == target_temperature) diff --git a/code/modules/plumbing/plumbers/bottler.dm b/code/modules/plumbing/plumbers/bottler.dm index c20e520c681..a7b0dacb2d9 100644 --- a/code/modules/plumbing/plumbers/bottler.dm +++ b/code/modules/plumbing/plumbers/bottler.dm @@ -16,9 +16,9 @@ ///where beakers that are already full will be sent var/turf/badspot = null -/obj/machinery/plumbing/bottler/Initialize(mapload, bolt) +/obj/machinery/plumbing/bottler/Initialize(mapload, bolt, layer) . = ..() - AddComponent(/datum/component/plumbing/simple_demand, bolt) + AddComponent(/datum/component/plumbing/simple_demand, bolt, layer) setDir(dir) /obj/machinery/plumbing/bottler/examine(mob/user) diff --git a/code/modules/plumbing/plumbers/destroyer.dm b/code/modules/plumbing/plumbers/destroyer.dm index 92747d6c59e..4560cee67d1 100644 --- a/code/modules/plumbing/plumbers/destroyer.dm +++ b/code/modules/plumbing/plumbers/destroyer.dm @@ -5,9 +5,9 @@ ///we remove 5 reagents per second var/disposal_rate = 5 -/obj/machinery/plumbing/disposer/Initialize(mapload, bolt) +/obj/machinery/plumbing/disposer/Initialize(mapload, bolt, layer) . = ..() - AddComponent(/datum/component/plumbing/simple_demand, bolt) + AddComponent(/datum/component/plumbing/simple_demand, bolt, layer) /obj/machinery/plumbing/disposer/process(delta_time) if(machine_stat & NOPOWER) diff --git a/code/modules/plumbing/plumbers/fermenter.dm b/code/modules/plumbing/plumbers/fermenter.dm index 76af7989766..e67f6401769 100644 --- a/code/modules/plumbing/plumbers/fermenter.dm +++ b/code/modules/plumbing/plumbers/fermenter.dm @@ -10,9 +10,9 @@ ///input dir var/eat_dir = SOUTH -/obj/machinery/plumbing/fermenter/Initialize(mapload, bolt) +/obj/machinery/plumbing/fermenter/Initialize(mapload, bolt, layer) . = ..() - AddComponent(/datum/component/plumbing/simple_supply, bolt) + AddComponent(/datum/component/plumbing/simple_supply, bolt, layer) /obj/machinery/plumbing/grinder_chemical/can_be_rotated(mob/user, rotation_type) if(anchored) diff --git a/code/modules/plumbing/plumbers/filter.dm b/code/modules/plumbing/plumbers/filter.dm index 92f1949fd48..02e1e425c14 100644 --- a/code/modules/plumbing/plumbers/filter.dm +++ b/code/modules/plumbing/plumbers/filter.dm @@ -14,9 +14,9 @@ ///whitelist of chems but their name instead of path var/list/english_right = list() -/obj/machinery/plumbing/filter/Initialize(mapload, bolt) +/obj/machinery/plumbing/filter/Initialize(mapload, bolt, layer) . = ..() - AddComponent(/datum/component/plumbing/filter, bolt) + AddComponent(/datum/component/plumbing/filter, bolt, layer) /obj/machinery/plumbing/filter/ui_interact(mob/user, datum/tgui/ui) ui = SStgui.try_update_ui(user, src, ui) diff --git a/code/modules/plumbing/plumbers/grinder_chemical.dm b/code/modules/plumbing/plumbers/grinder_chemical.dm index e93c0d5b65c..6c1eff4acbe 100644 --- a/code/modules/plumbing/plumbers/grinder_chemical.dm +++ b/code/modules/plumbing/plumbers/grinder_chemical.dm @@ -9,9 +9,9 @@ var/eat_dir = SOUTH -/obj/machinery/plumbing/grinder_chemical/Initialize(mapload, bolt) +/obj/machinery/plumbing/grinder_chemical/Initialize(mapload, bolt, layer) . = ..() - AddComponent(/datum/component/plumbing/simple_supply, bolt) + AddComponent(/datum/component/plumbing/simple_supply, bolt, layer) /obj/machinery/plumbing/grinder_chemical/can_be_rotated(mob/user, rotation_type) if(anchored) diff --git a/code/modules/plumbing/plumbers/pill_press.dm b/code/modules/plumbing/plumbers/pill_press.dm index 1c185590d72..61a0c741401 100644 --- a/code/modules/plumbing/plumbers/pill_press.dm +++ b/code/modules/plumbing/plumbers/pill_press.dm @@ -33,9 +33,9 @@ . = ..() . += "The [name] currently has [stored_products.len] stored. There needs to be less than [max_floor_products] on the floor to continue dispensing." -/obj/machinery/plumbing/pill_press/Initialize(mapload, bolt) +/obj/machinery/plumbing/pill_press/Initialize(mapload, bolt, layer) . = ..() - AddComponent(/datum/component/plumbing/simple_demand, bolt) + AddComponent(/datum/component/plumbing/simple_demand, bolt, layer) //expertly copypasted from chemmasters var/datum/asset/spritesheet/simple/assets = get_asset_datum(/datum/asset/spritesheet/simple/pills) diff --git a/code/modules/plumbing/plumbers/plumbing_buffer.dm b/code/modules/plumbing/plumbers/plumbing_buffer.dm index 4cece32aff6..25dadcfb2fb 100644 --- a/code/modules/plumbing/plumbers/plumbing_buffer.dm +++ b/code/modules/plumbing/plumbers/plumbing_buffer.dm @@ -12,10 +12,10 @@ var/activation_volume = 100 var/mode -/obj/machinery/plumbing/buffer/Initialize(mapload, bolt) +/obj/machinery/plumbing/buffer/Initialize(mapload, bolt, layer) . = ..() - AddComponent(/datum/component/plumbing/buffer, bolt) + AddComponent(/datum/component/plumbing/buffer, bolt, layer) /obj/machinery/plumbing/buffer/create_reagents(max_vol, flags) . = ..() diff --git a/code/modules/plumbing/plumbers/pumps.dm b/code/modules/plumbing/plumbers/pumps.dm index 5f82b4550bd..3c8514aedd3 100644 --- a/code/modules/plumbing/plumbers/pumps.dm +++ b/code/modules/plumbing/plumbers/pumps.dm @@ -19,9 +19,9 @@ ///volume of our internal buffer var/volume = 200 -/obj/machinery/plumbing/liquid_pump/Initialize(mapload, bolt) +/obj/machinery/plumbing/liquid_pump/Initialize(mapload, bolt, layer) . = ..() - AddComponent(/datum/component/plumbing/simple_supply, bolt) + AddComponent(/datum/component/plumbing/simple_supply, bolt, layer) ///please note that the component has a hook in the parent call, wich handles activating and deactivating /obj/machinery/plumbing/liquid_pump/default_unfasten_wrench(mob/user, obj/item/I, time = 20) diff --git a/code/modules/plumbing/plumbers/reaction_chamber.dm b/code/modules/plumbing/plumbers/reaction_chamber.dm index 06f3628cbee..64cd694a515 100644 --- a/code/modules/plumbing/plumbers/reaction_chamber.dm +++ b/code/modules/plumbing/plumbers/reaction_chamber.dm @@ -24,9 +24,9 @@ ///beaker that holds the alkaline buffer. var/obj/item/reagent_containers/glass/beaker/alkaline_beaker -/obj/machinery/plumbing/reaction_chamber/Initialize(mapload, bolt) +/obj/machinery/plumbing/reaction_chamber/Initialize(mapload, bolt, layer) . = ..() - AddComponent(/datum/component/plumbing/reaction_chamber, bolt) + AddComponent(/datum/component/plumbing/reaction_chamber, bolt, layer) acidic_beaker = new (src) alkaline_beaker = new (src) diff --git a/code/modules/plumbing/plumbers/splitters.dm b/code/modules/plumbing/plumbers/splitters.dm index b1add57c3b3..ceedf7d955b 100644 --- a/code/modules/plumbing/plumbers/splitters.dm +++ b/code/modules/plumbing/plumbers/splitters.dm @@ -16,9 +16,9 @@ //the maximum you can set the transfer to var/max_transfer = 9 -/obj/machinery/plumbing/splitter/Initialize(mapload, bolt) +/obj/machinery/plumbing/splitter/Initialize(mapload, bolt, layer) . = ..() - AddComponent(/datum/component/plumbing/splitter, bolt) + AddComponent(/datum/component/plumbing/splitter, bolt, layer) /obj/machinery/plumbing/splitter/ui_interact(mob/user, datum/tgui/ui) ui = SStgui.try_update_ui(user, src, ui) diff --git a/code/modules/plumbing/plumbers/synthesizer.dm b/code/modules/plumbing/plumbers/synthesizer.dm index 43ae1570108..6f49377a0e0 100644 --- a/code/modules/plumbing/plumbers/synthesizer.dm +++ b/code/modules/plumbing/plumbers/synthesizer.dm @@ -41,9 +41,9 @@ /datum/reagent/fuel, ) -/obj/machinery/plumbing/synthesizer/Initialize(mapload, bolt) +/obj/machinery/plumbing/synthesizer/Initialize(mapload, bolt, layer) . = ..() - AddComponent(/datum/component/plumbing/simple_supply, bolt) + AddComponent(/datum/component/plumbing/simple_supply, bolt, layer) /obj/machinery/plumbing/synthesizer/process(delta_time) if(machine_stat & NOPOWER || !reagent_id || !amount) diff --git a/code/modules/plumbing/plumbers/teleporter.dm b/code/modules/plumbing/plumbers/teleporter.dm index 311199a00a0..7a1f20204ed 100644 --- a/code/modules/plumbing/plumbers/teleporter.dm +++ b/code/modules/plumbing/plumbers/teleporter.dm @@ -9,9 +9,9 @@ ///whoever we teleport our chems to var/obj/machinery/plumbing/receiver/target = null -/obj/machinery/plumbing/sender/Initialize(mapload, bolt) +/obj/machinery/plumbing/sender/Initialize(mapload, bolt, layer) . = ..() - AddComponent(/datum/component/plumbing/simple_demand, bolt) + AddComponent(/datum/component/plumbing/simple_demand, bolt, layer) /obj/machinery/plumbing/sender/multitool_act(mob/living/user, obj/item/I) if(!multitool_check_buffer(user, I)) diff --git a/icons/obj/plumbing/plumbers.dmi b/icons/obj/plumbing/plumbers.dmi index 35adac58da26a68f870bc9613575a45353e2bdc5..4381bef335c677932168bfbf570891da98299a1e 100644 GIT binary patch literal 20122 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