diff --git a/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm b/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm
index 95822a4c2e5..a3485917896 100644
--- a/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm
+++ b/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm
@@ -26,13 +26,33 @@
var/broadcast_status_next_process = FALSE
+/obj/machinery/atmospherics/binary/passive_gate/scrubbers
+ name = "scrubbers pressure regulator"
+ desc = "A one-way air valve that can be used to regulate input or output pressure, and flow rate. This is one is for scrubber pipes."
+ icon_state = "map-scrubbers"
+ connect_types = CONNECT_TYPE_SCRUBBER
+ icon_connect_type = "-scrubbers"
+
+ unlocked = TRUE
+ target_pressure = 200
+
+/obj/machinery/atmospherics/binary/passive_gate/supply
+ name = "supply pressure regulator"
+ desc = "A one-way air valve that can be used to regulate input or output pressure, and flow rate. This is one is for supply pipes."
+ icon_state = "map-supply"
+ connect_types = CONNECT_TYPE_SUPPLY
+ icon_connect_type = "-supply"
+
+ unlocked = TRUE
+ target_pressure = 200
+
/obj/machinery/atmospherics/binary/passive_gate/Initialize()
. = ..()
air1.volume = ATMOS_DEFAULT_VOLUME_PUMP * 2.5
air2.volume = ATMOS_DEFAULT_VOLUME_PUMP * 2.5
/obj/machinery/atmospherics/binary/passive_gate/update_icon()
- icon_state = (unlocked && flowing)? "on" : "off"
+ icon_state = (unlocked && flowing)? "on" + icon_connect_type : "off" + icon_connect_type
/obj/machinery/atmospherics/binary/passive_gate/update_underlays()
if(..())
@@ -40,8 +60,8 @@
var/turf/T = get_turf(src)
if(!istype(T))
return
- add_underlay(T, node1, turn(dir, 180))
- add_underlay(T, node2, dir)
+ add_underlay(T, node1, turn(dir, 180), node1.icon_connect_type)
+ add_underlay(T, node2, dir, node2.icon_connect_type)
/obj/machinery/atmospherics/binary/passive_gate/hide(var/i)
update_underlays()
diff --git a/code/game/machinery/pipe/construction.dm b/code/game/machinery/pipe/construction.dm
index f4c86b9461f..82ba7411c29 100644
--- a/code/game/machinery/pipe/construction.dm
+++ b/code/game/machinery/pipe/construction.dm
@@ -51,6 +51,9 @@ Buildable meters
///// Mirrored T-valve ~ because I couldn't be bothered re-sorting all of the defines
#define PIPE_MTVALVEM 43
+#define PIPE_PASSIVE_GATE_SCRUBBER 44
+#define PIPE_PASSIVE_GATE_SUPPLY 45
+
/obj/item/pipe
name = "pipe"
desc = "A pipe"
@@ -131,6 +134,10 @@ Buildable meters
src.pipe_type = PIPE_GAS_MIXER
else if(istype(make_from, /obj/machinery/atmospherics/unary/vent_scrubber))
src.pipe_type = PIPE_SCRUBBER
+ else if(istype(make_from, /obj/machinery/atmospherics/binary/passive_gate/scrubbers))
+ src.pipe_type = PIPE_PASSIVE_GATE_SCRUBBER
+ else if(istype(make_from, /obj/machinery/atmospherics/binary/passive_gate/supply))
+ src.pipe_type = PIPE_PASSIVE_GATE_SUPPLY
else if(istype(make_from, /obj/machinery/atmospherics/binary/passive_gate))
src.pipe_type = PIPE_PASSIVE_GATE
else if(istype(make_from, /obj/machinery/atmospherics/unary/heat_exchanger))
@@ -254,7 +261,9 @@ Buildable meters
"scrubbers pipe down",
"supply pipe cap",
"scrubbers pipe cap",
- "t-valve m"
+ "t-valve m",
+ "scrubbers pressure regulator",
+ "supply pressure regulator"
)
name = nlist[pipe_type+1] + " fitting"
var/list/islist = list(
@@ -304,7 +313,9 @@ Buildable meters
"cap",
"cap",
"cap",
- "mtvalvem"
+ "mtvalvem",
+ "passivegate-scrubbers",
+ "passivegate-supply"
)
icon_state = islist[pipe_type + 1]
@@ -360,6 +371,8 @@ Buildable meters
PIPE_PUMP ,
PIPE_VOLUME_PUMP ,
PIPE_PASSIVE_GATE ,
+ PIPE_PASSIVE_GATE_SCRUBBER ,
+ PIPE_PASSIVE_GATE_SUPPLY ,
PIPE_MVALVE,
PIPE_SUPPLY_STRAIGHT,
PIPE_SCRUBBERS_STRAIGHT,
@@ -1033,6 +1046,40 @@ Buildable meters
P.node2.atmos_init()
P.node2.build_network()
+ if(PIPE_PASSIVE_GATE_SCRUBBER)
+ var/obj/machinery/atmospherics/binary/passive_gate/scrubbers/P = new(src.loc)
+ P.set_dir(dir)
+ P.initialize_directions = pipe_dir
+ if (pipename)
+ P.name = pipename
+ var/turf/T = P.loc
+ P.level = !T.is_plating() ? 2 : 1
+ P.atmos_init()
+ P.build_network()
+ if (P.node1)
+ P.node1.atmos_init()
+ P.node1.build_network()
+ if (P.node2)
+ P.node2.atmos_init()
+ P.node2.build_network()
+
+ if(PIPE_PASSIVE_GATE_SUPPLY)
+ var/obj/machinery/atmospherics/binary/passive_gate/supply/P = new(src.loc)
+ P.set_dir(dir)
+ P.initialize_directions = pipe_dir
+ if (pipename)
+ P.name = pipename
+ var/turf/T = P.loc
+ P.level = !T.is_plating() ? 2 : 1
+ P.atmos_init()
+ P.build_network()
+ if (P.node1)
+ P.node1.atmos_init()
+ P.node1.build_network()
+ if (P.node2)
+ P.node2.atmos_init()
+ P.node2.build_network()
+
if(PIPE_VOLUME_PUMP) //volume pump
var/obj/machinery/atmospherics/binary/pump/high_power/P = new(src.loc)
P.set_dir(dir)
@@ -1238,4 +1285,6 @@ Buildable meters
#undef PIPE_SUPPLY_MANIFOLD
#undef PIPE_SCRUBBERS_MANIFOLD
#undef PIPE_UNIVERSAL
+#undef PIPE_PASSIVE_GATE_SCRUBBER
+#undef PIPE_PASSIVE_GATE_SUPPLY
//#undef PIPE_MANIFOLD4W
diff --git a/code/game/machinery/pipe/pipe_dispenser.dm b/code/game/machinery/pipe/pipe_dispenser.dm
index c424cd344c7..9bbf5afec02 100644
--- a/code/game/machinery/pipe/pipe_dispenser.dm
+++ b/code/game/machinery/pipe/pipe_dispenser.dm
@@ -47,6 +47,8 @@
Unary Vent
Gas Pump
Pressure Regulator
+Scrubbers Pressure Regulator
+Supply Pressure Regulator
High Power Gas Pump
Scrubber
Meter
diff --git a/html/changelogs/Ferner-210228-coding_regulators.yml b/html/changelogs/Ferner-210228-coding_regulators.yml
new file mode 100644
index 00000000000..aad22e091d2
--- /dev/null
+++ b/html/changelogs/Ferner-210228-coding_regulators.yml
@@ -0,0 +1,4 @@
+author: Ferner
+delete-after: True
+changes:
+ - rscadd: "Added supply/scrubber specific pressure regulators."
\ No newline at end of file
diff --git a/icons/atmos/passive_gate.dmi b/icons/atmos/passive_gate.dmi
index df8c3897861..ff8cf2419ab 100644
Binary files a/icons/atmos/passive_gate.dmi and b/icons/atmos/passive_gate.dmi differ
diff --git a/icons/obj/pipe-item.dmi b/icons/obj/pipe-item.dmi
index 1ad833316d1..763a616353d 100644
Binary files a/icons/obj/pipe-item.dmi and b/icons/obj/pipe-item.dmi differ