diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm
index 406c3ad4a3b..d51cb74f984 100644
--- a/code/game/machinery/doors/airlock.dm
+++ b/code/game/machinery/doors/airlock.dm
@@ -214,7 +214,10 @@
/obj/machinery/door/airlock/proc/update_other_id()
for(var/obj/machinery/door/airlock/Airlock in GLOB.airlocks)
if(Airlock.closeOtherId == closeOtherId && Airlock != src)
- close_others += Airlock
+ if(!(Airlock in close_others))
+ close_others += Airlock
+ if(!(src in Airlock.close_others))
+ Airlock.close_others += src
/obj/machinery/door/airlock/proc/cyclelinkairlock()
if (cyclelinkedairlock)
@@ -595,6 +598,10 @@
/obj/machinery/door/airlock/examine(mob/user)
. = ..()
+ if(closeOtherId)
+ . += span_warning("This airlock cycles on ID: [sanitize(closeOtherId)].")
+ else if(!closeOtherId)
+ . += span_warning("This airlock does not cycle.")
if(obj_flags & EMAGGED)
. += span_warning("Its access panel is smoking slightly.")
if(note)
diff --git a/code/game/machinery/doors/airlock_electronics.dm b/code/game/machinery/doors/airlock_electronics.dm
index 6650dee3373..e5f32d32a92 100644
--- a/code/game/machinery/doors/airlock_electronics.dm
+++ b/code/game/machinery/doors/airlock_electronics.dm
@@ -7,6 +7,10 @@
var/one_access = 0
/// Unrestricted sides, or sides of the airlock that will open regardless of access
var/unres_sides = 0
+ ///what name are we passing to the finished airlock
+ var/passed_name
+ ///what string are we passing to the finished airlock as the cycle ID
+ var/passed_cycle_id
/// A holder of the electronics, in case of them working as an integrated part
var/holder
@@ -39,6 +43,8 @@
data["accesses"] = accesses
data["oneAccess"] = one_access
data["unres_direction"] = unres_sides
+ data["passedName"] = passed_name
+ data["passedCycleId"] = passed_cycle_id
return data
/obj/item/electronics/airlock/ui_act(action, params)
@@ -80,6 +86,14 @@
return
accesses -= SSid_access.get_region_access_list(list(region))
. = TRUE
+ if("passedName")
+ var/new_name = trim("[params["passedName"]]", 30)
+ passed_name = new_name
+ . = TRUE
+ if("passedCycleId")
+ var/new_cycle_id = trim(params["passedCycleId"], 30)
+ passed_cycle_id = new_cycle_id
+ . = TRUE
/obj/item/electronics/airlock/ui_host()
if(holder)
diff --git a/code/game/objects/structures/door_assembly.dm b/code/game/objects/structures/door_assembly.dm
index c0ebc28bdb0..800a9f7f4de 100644
--- a/code/game/objects/structures/door_assembly.dm
+++ b/code/game/objects/structures/door_assembly.dm
@@ -259,8 +259,13 @@
door.req_access = electronics.accesses
if(created_name)
door.name = created_name
+ else if(electronics.passed_name)
+ door.name = sanitize(electronics.passed_name)
else
door.name = base_name
+ if(electronics.passed_cycle_id)
+ door.closeOtherId = electronics.passed_cycle_id
+ door.update_other_id()
door.previous_airlock = previous_assembly
electronics.forceMove(door)
door.update_appearance()
diff --git a/code/game/turfs/open/floor.dm b/code/game/turfs/open/floor.dm
index d9efc7bb5af..dd61a6b94b9 100644
--- a/code/game/turfs/open/floor.dm
+++ b/code/game/turfs/open/floor.dm
@@ -298,12 +298,19 @@
new_airlock.electronics.accesses = the_rcd.airlock_electronics.accesses.Copy()
new_airlock.electronics.one_access = the_rcd.airlock_electronics.one_access
new_airlock.electronics.unres_sides = the_rcd.airlock_electronics.unres_sides
+ new_airlock.electronics.passed_name = the_rcd.airlock_electronics.passed_name
+ new_airlock.electronics.passed_cycle_id = the_rcd.airlock_electronics.passed_cycle_id
if(new_airlock.electronics.one_access)
new_airlock.req_one_access = new_airlock.electronics.accesses
else
new_airlock.req_access = new_airlock.electronics.accesses
if(new_airlock.electronics.unres_sides)
new_airlock.unres_sides = new_airlock.electronics.unres_sides
+ if(new_airlock.electronics.passed_name)
+ new_airlock.name = sanitize(new_airlock.electronics.passed_name)
+ if(new_airlock.electronics.passed_cycle_id)
+ new_airlock.closeOtherId = new_airlock.electronics.passed_cycle_id
+ new_airlock.update_other_id()
new_airlock.autoclose = TRUE
new_airlock.update_appearance()
return TRUE
diff --git a/tgui/packages/tgui/interfaces/AirlockElectronics.js b/tgui/packages/tgui/interfaces/AirlockElectronics.js
index c37d8513196..24d2cefa757 100644
--- a/tgui/packages/tgui/interfaces/AirlockElectronics.js
+++ b/tgui/packages/tgui/interfaces/AirlockElectronics.js
@@ -1,5 +1,5 @@
import { useBackend, useLocalState } from '../backend';
-import { Button, Flex, Grid, LabeledList, Section, Tabs } from '../components';
+import { Button, Flex, Grid, Input, LabeledList, Section, Tabs } from '../components';
import { Window } from '../layouts';
import { sortBy } from 'common/collections';
@@ -8,6 +8,8 @@ export const AirlockElectronics = (props, context) => {
const {
oneAccess,
unres_direction,
+ passedName,
+ passedCycleId,
} = data;
const regions = data.regions || [];
const accesses = data.accesses || [];
@@ -56,6 +58,24 @@ export const AirlockElectronics = (props, context) => {
unres_direction: '8',
})} />
+
+ act('passedName', {
+ passedName: value,
+ })} />
+
+
+ act('passedCycleId', {
+ passedCycleId: value,
+ })} />
+