mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2025-12-29 19:11:51 +00:00
* Compact Airlock Pump (#84365) ## About The Pull Request Adds a craftable airlock pump that is an atmos device with distro & waste nodes on a single side. When wrenched down, looks for airlocks and sets up a cycling airlock chamber. A more compact and flexible alternative to the current binary DP Vent Pumps. https://github.com/tgstation/tgstation/assets/3625094/a799b3e8-3425-43fc-9c17-2bdde63ec194 Can also skip cycling when a shuttle is docked with one of the external airlocks: https://github.com/tgstation/tgstation/assets/3625094/37054bc0-b8c5-4556-aa2c-0fa5bc3c7c5b **Set up from scratch**: https://youtu.be/22PDfmJKC7g ## Why It's Good For The Game Provides an easy to map and setup alternative to DP Vents that doesn't require any map helpers, var editing and can even be crafted in the game.  You just need to extend the disto/waste pipes to the place where you want your airlock to be. When built, it automatically considers the first found airlock in the direction of incoming pipes as an internal one, and the opposite - external. Cycling is controlled by the airlocks. When you click/bump an internal airlock, it starts pressurizing. When external one - depressurizing. When unable to complete the cycle in 10 seconds, unbolts the door automatically to avoid stucking due to issues with pipes or slow atmos. TODO: - [x] Hook up to the power and figure out the logic when unpowered - [x] ~Make it work with a directly connected layer manifold~ - [x] Make unwrenching require unpowered state and forbid mapspawn pump unwrenching - [x] Support airlock arrays and double airlocks - [x] An option to open airlocks instead of just bolts - [x] Check for the presence of airlocks and crash if not set up properly on map ## Changelog 🆑 add: Added airlock pump atmos device to create cycling airlocks /🆑 --------- Co-authored-by: Ghom <42542238+Ghommie@ users.noreply.github.com> * Compact Airlock Pump --------- Co-authored-by: Andrew <mt.forspam@gmail.com> Co-authored-by: Ghom <42542238+Ghommie@ users.noreply.github.com>
385 lines
13 KiB
Plaintext
385 lines
13 KiB
Plaintext
/datum/crafting_recipe/bluespace_vendor_mount
|
|
name = "Bluespace Vendor Wall Mount"
|
|
result = /obj/item/wallframe/bluespace_vendor_mount
|
|
time = 6 SECONDS
|
|
reqs = list(
|
|
/obj/item/stack/sheet/iron = 15,
|
|
/obj/item/stack/sheet/glass = 10,
|
|
/obj/item/stack/cable_coil = 10,
|
|
)
|
|
category = CAT_ATMOSPHERIC
|
|
|
|
/datum/crafting_recipe/pipe
|
|
name = "Smart pipe fitting"
|
|
tool_behaviors = list(TOOL_WRENCH)
|
|
result = /obj/item/pipe/quaternary/pipe/crafted
|
|
reqs = list(/obj/item/stack/sheet/iron = 1)
|
|
time = 0.5 SECONDS
|
|
category = CAT_ATMOSPHERIC
|
|
|
|
/datum/crafting_recipe/igniter
|
|
name = "Igniter"
|
|
result = /obj/machinery/igniter
|
|
reqs = list(
|
|
/obj/item/stack/sheet/iron = 5,
|
|
/obj/item/assembly/igniter = 1,
|
|
)
|
|
blacklist = list(/obj/item/assembly/igniter/condenser)
|
|
crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF
|
|
time = 2 SECONDS
|
|
category = CAT_ATMOSPHERIC
|
|
|
|
/datum/crafting_recipe/air_sensor
|
|
name = "Monitored Air Sensor"
|
|
result = /obj/item/air_sensor
|
|
reqs = list(
|
|
/obj/item/analyzer = 1,
|
|
/obj/item/stack/sheet/iron = 1,
|
|
)
|
|
blacklist = list(/obj/item/analyzer/ranged)
|
|
|
|
/datum/crafting_recipe/layer_adapter
|
|
name = "Layer manifold fitting"
|
|
tool_behaviors = list(TOOL_WRENCH, TOOL_WELDER)
|
|
result = /obj/item/pipe/binary/layer_adapter
|
|
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/color_adapter
|
|
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/he_pipe
|
|
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/he_junction
|
|
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/pressure_pump
|
|
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/manual_valve
|
|
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/vent
|
|
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/scrubber
|
|
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/filter
|
|
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/mixer
|
|
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/connector
|
|
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/passive_vent
|
|
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/injector
|
|
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/he_exchanger
|
|
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()
|
|
|
|
/datum/crafting_recipe/steam_vent
|
|
name = "Steam Vent"
|
|
result = /obj/structure/steam_vent
|
|
time = 0.8 SECONDS
|
|
reqs = list(
|
|
/obj/item/stack/sheet/iron = 2,
|
|
/obj/item/stack/tile/iron = 1,
|
|
/obj/item/stock_parts/water_recycler = 1,
|
|
)
|
|
category = CAT_ATMOSPHERIC
|
|
|
|
/datum/crafting_recipe/elder_atmosian_statue
|
|
name = "Elder Atmosian Statue"
|
|
result = /obj/structure/statue/elder_atmosian
|
|
time = 6 SECONDS
|
|
reqs = list(
|
|
/obj/item/stack/sheet/mineral/metal_hydrogen = 20,
|
|
/obj/item/stack/sheet/mineral/zaukerite = 15,
|
|
/obj/item/stack/sheet/iron = 30,
|
|
)
|
|
category = CAT_STRUCTURE
|
|
|
|
/datum/crafting_recipe/airlock_pump
|
|
name = "External Airlock Pump"
|
|
tool_behaviors = list(TOOL_WRENCH, TOOL_WELDER)
|
|
result = /obj/item/pipe/directional/airlock_pump
|
|
reqs = list(
|
|
/obj/item/pipe = 1,
|
|
/obj/item/stack/sheet/iron = 5,
|
|
/obj/item/stack/cable_coil = 5,
|
|
/obj/item/analyzer = 1,
|
|
)
|
|
time = 2 SECONDS
|
|
category = CAT_ATMOSPHERIC
|
|
|
|
/datum/crafting_recipe/airlock_pump/check_requirements(mob/user, list/collected_requirements)
|
|
return atmos_pipe_check(user, collected_requirements)
|
|
|
|
/datum/crafting_recipe/airlock_pump/on_craft_completion(mob/user, atom/result)
|
|
var/obj/item/pipe/crafted_pipe = result
|
|
crafted_pipe.pipe_type = /obj/machinery/atmospherics/components/unary/airlock_pump
|
|
crafted_pipe.pipe_color = COLOR_VERY_LIGHT_GRAY
|
|
crafted_pipe.setDir(user.dir)
|
|
crafted_pipe.update()
|