From 75150eec3412908701110148a42dd667c97b90fe Mon Sep 17 00:00:00 2001 From: Erika Fox <94164348+Erikafox@users.noreply.github.com> Date: Sat, 21 Dec 2024 14:51:59 -0500 Subject: [PATCH] Door Speed (#3883) ## About The Pull Request refactors some door code makes it so you can change how fast a door should close with airlock electronics ## Why It's Good For The Game engineering improvement + mapping stuff ## Changelog :cl: add: you can now change how fast a door should close with the door electronics /:cl: --------- Signed-off-by: Erika Fox <94164348+Erikafox@users.noreply.github.com> Co-authored-by: Mark Suckerberg --- .../independent/independent_shetland.dmm | 14 +- _maps/shuttles/inteq/inteq_talos.dmm | 4 +- .../syndicate/syndicate_ngr_derecho.dmm | 16 +- .../syndicate/syndicate_ngr_kaliandhi.dmm | 14 +- code/datums/wires/airlock.dm | 4 +- code/game/machinery/doors/airlock.dm | 10 +- .../machinery/doors/airlock_electronics.dm | 15 ++ code/game/machinery/doors/door.dm | 7 +- code/game/objects/structures/door_assembly.dm | 242 +++++++++--------- .../tgui/interfaces/AirlockElectronics.js | 23 +- tgui/packages/tgui/interfaces/Radio.js | 2 +- 11 files changed, 199 insertions(+), 152 deletions(-) diff --git a/_maps/shuttles/independent/independent_shetland.dmm b/_maps/shuttles/independent/independent_shetland.dmm index 645dee18a539..ed4f684dab3b 100644 --- a/_maps/shuttles/independent/independent_shetland.dmm +++ b/_maps/shuttles/independent/independent_shetland.dmm @@ -621,7 +621,7 @@ /obj/machinery/door/airlock/engineering{ dir = 4; name = "Engineering"; - normalspeed = 0; + fast_close = 1; req_access_txt = "10" }, /obj/effect/turf_decal/industrial/warning/fulltile, @@ -647,7 +647,7 @@ /obj/machinery/door/airlock/engineering{ dir = 4; name = "Engineering"; - normalspeed = 0; + fast_close = 1; req_access_txt = "10" }, /obj/machinery/door/firedoor/border_only{ @@ -1727,7 +1727,7 @@ /obj/machinery/door/airlock/engineering{ dir = 4; name = "Engine Room"; - normalspeed = 0; + fast_close = 1; req_access_txt = "10" }, /obj/effect/turf_decal/industrial/warning/fulltile, @@ -2062,7 +2062,7 @@ /obj/machinery/door/airlock/engineering{ dir = 4; name = "Engineering"; - normalspeed = 0; + fast_close = 1; req_access_txt = "10" }, /obj/effect/turf_decal/industrial/warning/fulltile, @@ -2323,7 +2323,7 @@ /obj/machinery/door/airlock/engineering{ dir = 4; name = "Engineering"; - normalspeed = 0; + fast_close = 1; req_access_txt = "10" }, /obj/effect/turf_decal/industrial/warning/fulltile, @@ -3861,7 +3861,7 @@ /obj/machinery/door/airlock/engineering{ dir = 4; name = "Engine Room"; - normalspeed = 0; + fast_close = 1; req_access_txt = "10" }, /obj/effect/turf_decal/industrial/warning/fulltile, @@ -4379,7 +4379,7 @@ /obj/machinery/door/airlock/engineering{ dir = 4; name = "Electrical"; - normalspeed = 0; + fast_close = 1; req_access_txt = "10" }, /obj/effect/turf_decal/industrial/warning/fulltile, diff --git a/_maps/shuttles/inteq/inteq_talos.dmm b/_maps/shuttles/inteq/inteq_talos.dmm index 2bd113ca646a..e82e179b8b77 100644 --- a/_maps/shuttles/inteq/inteq_talos.dmm +++ b/_maps/shuttles/inteq/inteq_talos.dmm @@ -536,7 +536,7 @@ /obj/machinery/door/airlock/engineering{ dir = 4; name = "Engineering"; - normalspeed = 0; + fast_close = 1; req_access_txt = "10" }, /obj/effect/turf_decal/industrial/warning/fulltile, @@ -1614,7 +1614,7 @@ /obj/machinery/door/airlock/engineering{ dir = 4; name = "Engineering"; - normalspeed = 0; + fast_close = 1; req_access_txt = "10" }, /obj/effect/turf_decal/industrial/warning/fulltile, diff --git a/_maps/shuttles/syndicate/syndicate_ngr_derecho.dmm b/_maps/shuttles/syndicate/syndicate_ngr_derecho.dmm index 55d8cc03bfad..18631bea9f4d 100644 --- a/_maps/shuttles/syndicate/syndicate_ngr_derecho.dmm +++ b/_maps/shuttles/syndicate/syndicate_ngr_derecho.dmm @@ -89,7 +89,7 @@ /obj/machinery/door/airlock/hatch{ dir = 4; name = "Command Deck"; - normalspeed = 0; + fast_close = 1; req_access_txt = "19" }, /turf/open/floor/plasteel/tech/grid, @@ -197,7 +197,7 @@ "bW" = ( /obj/machinery/door/airlock/hatch{ name = "Foreman's Office"; - normalspeed = 0; + fast_close = 1; req_access_txt = "56" }, /turf/open/floor/plasteel/tech/grid, @@ -826,7 +826,7 @@ /obj/machinery/door/airlock/hatch{ dir = 4; name = "Life Support"; - normalspeed = 0; + fast_close = 1; req_access_txt = "10" }, /obj/effect/decal/cleanable/dirt, @@ -1534,7 +1534,7 @@ /obj/machinery/door/airlock/hatch{ dir = 1; name = "Engineering"; - normalspeed = 0; + fast_close = 1; req_access_txt = "10" }, /obj/effect/decal/cleanable/dirt, @@ -2170,7 +2170,7 @@ /obj/machinery/door/airlock/hatch{ dir = 4; name = "Control Room"; - normalspeed = 0; + fast_close = 1; req_access_txt = "10" }, /turf/open/floor/plasteel/tech/grid, @@ -2834,7 +2834,7 @@ "xQ" = ( /obj/machinery/door/airlock/hatch{ name = "Foreman's Office"; - normalspeed = 0; + fast_close = 1; req_access_txt = "56" }, /obj/machinery/door/firedoor/border_only{ @@ -3243,7 +3243,7 @@ /obj/machinery/door/airlock/hatch{ dir = 4; name = "Bridge"; - normalspeed = 0; + fast_close = 1; req_access_txt = "19" }, /turf/open/floor/plasteel/tech/grid, @@ -5547,7 +5547,7 @@ /obj/machinery/door/airlock/hatch{ dir = 4; name = "Command Deck"; - normalspeed = 0; + fast_close = 1; req_access_txt = "19" }, /obj/structure/sign/directions/command{ diff --git a/_maps/shuttles/syndicate/syndicate_ngr_kaliandhi.dmm b/_maps/shuttles/syndicate/syndicate_ngr_kaliandhi.dmm index f2e6b8f6dd63..3c83a4d6ee94 100644 --- a/_maps/shuttles/syndicate/syndicate_ngr_kaliandhi.dmm +++ b/_maps/shuttles/syndicate/syndicate_ngr_kaliandhi.dmm @@ -1284,7 +1284,7 @@ /obj/machinery/door/airlock/hatch{ dir = 8; name = "Armory"; - normalspeed = 0; + fast_close = 1; req_access = list(3) }, /obj/machinery/door/firedoor/border_only{ @@ -2169,7 +2169,7 @@ "oc" = ( /obj/machinery/door/airlock/hatch{ name = "Bridge"; - normalspeed = 0; + fast_close = 1; req_access_txt = "19" }, /obj/machinery/door/firedoor/border_only{ @@ -3156,7 +3156,7 @@ /obj/machinery/door/airlock/hatch{ dir = 8; name = "Armory"; - normalspeed = 0; + fast_close = 1; req_access = list(3) }, /obj/structure/cable{ @@ -5536,7 +5536,7 @@ }, /obj/machinery/door/airlock/hatch{ name = "Control Room"; - normalspeed = 0; + fast_close = 1; req_access_txt = "10" }, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ @@ -5865,7 +5865,7 @@ "MS" = ( /obj/machinery/door/airlock/hatch{ name = "Command Deck"; - normalspeed = 0; + fast_close = 1; req_access_txt = "19" }, /obj/structure/cable{ @@ -5905,7 +5905,7 @@ /obj/machinery/door/airlock/hatch{ dir = 4; name = "Engineering"; - normalspeed = 0; + fast_close = 1; req_access_txt = "10" }, /obj/structure/cable{ @@ -7629,7 +7629,7 @@ }, /obj/machinery/door/airlock/hatch{ name = "Life Support"; - normalspeed = 0; + fast_close = 1; req_access_txt = "10" }, /obj/machinery/door/firedoor/border_only, diff --git a/code/datums/wires/airlock.dm b/code/datums/wires/airlock.dm index 14e2d4f2ba1f..3b461ce8faf6 100644 --- a/code/datums/wires/airlock.dm +++ b/code/datums/wires/airlock.dm @@ -46,7 +46,7 @@ status += "The AI connection light is [A.aiControlDisabled || (A.obj_flags & EMAGGED) ? "off" : "on"]." status += "The check wiring light is [A.safe ? "off" : "on"]." status += "The timer is powered [A.autoclose ? "on" : "off"]." - status += "The speed light is [A.normalspeed ? "on" : "off"]." + status += "The speed light is [A.fast_close ? "on" : "off"]." status += "The emergency light is [A.emergency ? "on" : "off"]." return status @@ -94,7 +94,7 @@ if(!A.density) A.close() if(WIRE_TIMING) - A.normalspeed = !A.normalspeed + A.fast_close = !A.fast_close if(WIRE_LIGHT) A.lights = !A.lights A.update_appearance() diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index 594aeedbe43d..4f88daa0c164 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -50,11 +50,13 @@ autoclose = TRUE secondsElectrified = MACHINE_NOT_ELECTRIFIED //How many seconds remain until the door is no longer electrified. -1/MACHINE_ELECTRIFIED_PERMANENT = permanently electrified until someone fixes it. assemblytype = /obj/structure/door_assembly - normalspeed = 1 + fast_close = FALSE explosion_block = 1 hud_possible = list(DIAG_AIRLOCK_HUD) req_ship_access = TRUE + close_speed = 150 + smoothing_groups = list(SMOOTH_GROUP_AIRLOCK) FASTDMM_PROP(\ @@ -1260,7 +1262,7 @@ playsound(src, pry_open_sound, 30, TRUE, mono_adj = TRUE) if(autoclose) - autoclose_in(normalspeed ? 150 : 15) + autoclose_in(fast_close ? clamp(close_speed/10, 10, 300) : close_speed) if(!density) return TRUE @@ -1565,7 +1567,7 @@ data["locked"] = locked // bolted data["lights"] = lights // bolt lights data["safe"] = safe // safeties - data["speed"] = normalspeed // safe speed + data["operation speed"] = fast_close // safe speed data["welded"] = welded // welded data["opened"] = !density // opened @@ -1633,7 +1635,7 @@ safe = !safe . = TRUE if("speed-toggle") - normalspeed = !normalspeed + fast_close = !fast_close . = TRUE if("open-close") user_toggle_open(usr) diff --git a/code/game/machinery/doors/airlock_electronics.dm b/code/game/machinery/doors/airlock_electronics.dm index 79260dc975be..6987c8266daa 100644 --- a/code/game/machinery/doors/airlock_electronics.dm +++ b/code/game/machinery/doors/airlock_electronics.dm @@ -2,6 +2,8 @@ name = "airlock electronics" req_access = list(ACCESS_MAINT_TUNNELS) custom_price = 50 + ///how fast the constructed airlock will close + var/close_speed = 15 SECONDS /// A list of all granted accesses var/list/accesses = list() /// If the airlock should require ALL or only ONE of the listed accesses @@ -47,6 +49,7 @@ /obj/item/electronics/airlock/ui_data() var/list/data = list() + data["close_speed"] = close_speed data["accesses"] = accesses data["oneAccess"] = one_access data["unres_direction"] = unres_sides @@ -91,6 +94,18 @@ return accesses -= get_region_accesses(region) . = TRUE + if("close_speed") + var/tune = params["tune"] + var/adjust = text2num(params["adjust"]) + if(adjust) + tune = close_speed + adjust SECONDS + . = TRUE + else if(text2num(tune) != null) + tune = tune SECONDS + . = TRUE + if(.) + close_speed = clamp(tune, 0, 300) + . = TRUE /obj/item/electronics/airlock/ui_host() if(holder) diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm index 7c8371809e81..7b5fc9f3af56 100644 --- a/code/game/machinery/doors/door.dm +++ b/code/game/machinery/doors/door.dm @@ -25,7 +25,10 @@ var/operating = FALSE var/glass = FALSE var/welded = FALSE - var/normalspeed = 1 + ///does this airlock close quickly + var/fast_close = 0 + ///how long this door takes to close, if it is autoclosing + var/close_speed = 6 SECONDS var/heat_proof = FALSE // For rglass-windowed airlocks and firedoors var/emergency = FALSE // Emergency access override var/sub_door = FALSE // true if it's meant to go under another door. @@ -353,7 +356,7 @@ for(var/atom/movable/M in get_turf(src)) if(M.density && M != src) //something is blocking the door if(autoclose) - autoclose_in(60) + autoclose_in(fast_close ? close_speed/10 : close_speed) return operating = TRUE diff --git a/code/game/objects/structures/door_assembly.dm b/code/game/objects/structures/door_assembly.dm index 43052f1f0dbb..a83fc6b341f8 100644 --- a/code/game/objects/structures/door_assembly.dm +++ b/code/game/objects/structures/door_assembly.dm @@ -49,81 +49,154 @@ else . += "There is a small paper placard on the assembly[doorname]." -/obj/structure/door_assembly/attackby(obj/item/W, mob/user, params) - if(istype(W, /obj/item/pen)) - var/t = stripped_input(user, "Enter the name for the door.", name, created_name,MAX_NAME_LEN) - if(!t) - return - if(!in_range(src, usr) && loc != usr) - return - created_name = t +/obj/structure/door_assembly/wrench_act(mob/living/user, obj/item/I) + . = ..() + for(var/obj/machinery/door/D in loc) + if(!D.sub_door) + to_chat(user, "There is another door here!") + return FALSE - else if((W.tool_behaviour == TOOL_WELDER) && (mineral || glass || !anchored)) - if(!W.tool_start_check(user, amount=0)) + user.visible_message( + span_notice("[user] [anchored ? "unsecures" : "secures"] the airlock assembly to the floor."), + span_notice("You start to [anchored ? "unsecure" : "secure"] the airlock assembly to the floor..."), + span_hear("You hear wrenching.") + ) + + if(I.use_tool(src, user, 40, volume=100)) + if(anchored) return + to_chat(user, span_notice("You [anchored ? "unsecured" : "secured"] the airlock assembly.")) + name = "[anchored ? "secured " : ""]airlock assembly" + anchored = !anchored + return TRUE + return FALSE + +/obj/structure/door_assembly/welder_act(mob/living/user, obj/item/I) + . = ..() + if(mineral || glass || !anchored) + if(!I.tool_start_check(user, amount=0)) + return FALSE if(mineral) var/obj/item/stack/sheet/mineral/mineral_path = text2path("/obj/item/stack/sheet/mineral/[mineral]") - user.visible_message("[user] welds the [mineral] plating off the airlock assembly.", "You start to weld the [mineral] plating off the airlock assembly...") - if(W.use_tool(src, user, 40, volume=50)) + user.visible_message(\ + span_notice("[user] welds the [mineral] plating off the airlock assembly."), + span_notice("You start to weld the [mineral] plating off the airlock assembly...")) + if(I.use_tool(src, user, 40, volume=50)) to_chat(user, "You weld the [mineral] plating off.") new mineral_path(loc, 2) var/obj/structure/door_assembly/PA = new previous_assembly(loc) transfer_assembly_vars(src, PA) + return TRUE else if(glass) - user.visible_message("[user] welds the glass panel out of the airlock assembly.", "You start to weld the glass panel out of the airlock assembly...") - if(W.use_tool(src, user, 40, volume=50)) - to_chat(user, "You weld the glass panel out.") + user.visible_message( + span_notice("[user] welds the glass panel out of the airlock assembly."), + span_notice("You start to weld the glass panel out of the airlock assembly")) + if(I.use_tool(src, user, 40, volume=50)) + to_chat(user, span_notice("You weld the glass panel out.")) if(heat_proof_finished) new /obj/item/stack/sheet/rglass(get_turf(src)) heat_proof_finished = 0 else new /obj/item/stack/sheet/glass(get_turf(src)) glass = 0 + return TRUE else if(!anchored) - user.visible_message("[user] disassembles the airlock assembly.", \ - "You start to disassemble the airlock assembly...") - if(W.use_tool(src, user, 40, volume=50)) - to_chat(user, "You disassemble the airlock assembly.") + user.visible_message( + span_notice("[user] disassembles the airlock assembly."), \ + span_notice("You start to disassemble the airlock assembly...")) + if(I.use_tool(src, user, 40, volume=50)) + to_chat(user, span_notice("You disassemble the airlock assembly.")) deconstruct(TRUE) + return TRUE + return FALSE - else if(W.tool_behaviour == TOOL_WRENCH) - if(!anchored) - var/door_check = 1 - for(var/obj/machinery/door/D in loc) - if(!D.sub_door) - door_check = 0 - break +/obj/structure/door_assembly/wirecutter_act(mob/living/user, obj/item/I) + . = ..() + if(state == AIRLOCK_ASSEMBLY_NEEDS_ELECTRONICS) + user.visible_message( + span_notice("[user] cuts the wires from the airlock assembly."), \ + span_notice("You start to cut the wires from the airlock assembly...") + ) - if(door_check) - user.visible_message( - "[user] secures the airlock assembly to the floor.", - "You start to secure the airlock assembly to the floor...", - "You hear wrenching." - ) + if(I.use_tool(src, user, 40, volume=100)) + if(state != AIRLOCK_ASSEMBLY_NEEDS_ELECTRONICS) + return + to_chat(user, span_notice("You cut the wires from the airlock assembly.")) + var/obj/item/cable = new /obj/item/stack/cable_coil(get_turf(src), 1) + user.put_in_hands(cable) + state = AIRLOCK_ASSEMBLY_NEEDS_WIRES + name = "secured airlock assembly" + +/obj/structure/door_assembly/crowbar_act(mob/living/user, obj/item/I) + . = ..() + if(state == AIRLOCK_ASSEMBLY_NEEDS_SCREWDRIVER) + user.visible_message(span_notice("[user] removes the electronics from the airlock assembly."), \ + span_notice("You start to remove electronics from the airlock assembly...")) - if(W.use_tool(src, user, 40, volume=100)) - if(anchored) - return - to_chat(user, "You secure the airlock assembly.") - name = "secured airlock assembly" - set_anchored(TRUE) + if(I.use_tool(src, user, 40, volume=100)) + if(state != AIRLOCK_ASSEMBLY_NEEDS_SCREWDRIVER) + return + to_chat(user, span_notice("You remove the airlock electronics.")) + state = AIRLOCK_ASSEMBLY_NEEDS_ELECTRONICS + name = "wired airlock assembly" + var/obj/item/electronics/airlock/ae + if (!electronics) + ae = new/obj/item/electronics/airlock(loc) else - to_chat(user, "There is another door here!") + ae = electronics + electronics = null + ae.forceMove(src.loc) - else - user.visible_message( - "[user] unsecures the airlock assembly from the floor.", - "You start to unsecure the airlock assembly from the floor...", - "You hear wrenching." - ) - if(W.use_tool(src, user, 40, volume=100)) - if(!anchored) - return - to_chat(user, "You unsecure the airlock assembly.") - name = "airlock assembly" - set_anchored(FALSE) +/obj/structure/door_assembly/screwdriver_act(mob/living/user, obj/item/I) + . = ..() + if((I.tool_behaviour == TOOL_SCREWDRIVER) && state == AIRLOCK_ASSEMBLY_NEEDS_SCREWDRIVER) + user.visible_message( + span_notice("[user] finishes the airlock."), + span_notice("You start finishing the airlock...") + ) + + if(I.use_tool(src, user, 40, volume=100)) + if(loc && state == AIRLOCK_ASSEMBLY_NEEDS_SCREWDRIVER) + to_chat(user, span_notice("You finish the airlock.")) + new_door() + return TRUE + return FALSE + +/obj/structure/door_assembly/proc/new_door() + var/obj/machinery/door/airlock/door + if(glass) + door = new glass_type(loc) + else + door = new airlock_type(loc) + door.setDir(dir) + door.unres_sides = electronics.unres_sides + door.electronics = electronics + door.heat_proof = heat_proof_finished + door.security_level = 0 + if(electronics.one_access) + door.req_one_access = electronics.accesses + else + door.req_access = electronics.accesses + door.close_speed = electronics.close_speed + if(created_name) + door.name = created_name + else + door.name = base_name + door.previous_airlock = previous_assembly + electronics.forceMove(door) + door.update_appearance() + qdel(src) + +/obj/structure/door_assembly/attackby(obj/item/W, mob/user, params) + if(istype(W, /obj/item/pen)) + var/t = stripped_input(user, "Enter the name for the door.", name, created_name,MAX_NAME_LEN) + if(!t) + return + if(!in_range(src, usr) && loc != usr) + return + created_name = t else if(istype(W, /obj/item/stack/cable_coil) && state == AIRLOCK_ASSEMBLY_NEEDS_WIRES && anchored) if(!W.tool_start_check(user, amount=1)) @@ -138,18 +211,6 @@ to_chat(user, "You wire the airlock assembly.") name = "wired airlock assembly" - else if((W.tool_behaviour == TOOL_WIRECUTTER) && state == AIRLOCK_ASSEMBLY_NEEDS_ELECTRONICS) - user.visible_message("[user] cuts the wires from the airlock assembly.", \ - "You start to cut the wires from the airlock assembly...") - - if(W.use_tool(src, user, 40, volume=100)) - if(state != AIRLOCK_ASSEMBLY_NEEDS_ELECTRONICS) - return - to_chat(user, "You cut the wires from the airlock assembly.") - new/obj/item/stack/cable_coil(get_turf(user), 1) - state = AIRLOCK_ASSEMBLY_NEEDS_WIRES - name = "secured airlock assembly" - else if(istype(W, /obj/item/electronics/airlock) && state == AIRLOCK_ASSEMBLY_NEEDS_ELECTRONICS) W.play_tool_sound(src, 100) user.visible_message("[user] installs the electronics into the airlock assembly.", \ @@ -165,25 +226,6 @@ name = "near finished airlock assembly" electronics = W - - else if((W.tool_behaviour == TOOL_CROWBAR) && state == AIRLOCK_ASSEMBLY_NEEDS_SCREWDRIVER) - user.visible_message("[user] removes the electronics from the airlock assembly.", \ - "You start to remove electronics from the airlock assembly...") - - if(W.use_tool(src, user, 40, volume=100)) - if(state != AIRLOCK_ASSEMBLY_NEEDS_SCREWDRIVER) - return - to_chat(user, "You remove the airlock electronics.") - state = AIRLOCK_ASSEMBLY_NEEDS_ELECTRONICS - name = "wired airlock assembly" - var/obj/item/electronics/airlock/ae - if (!electronics) - ae = new/obj/item/electronics/airlock(loc) - else - ae = electronics - electronics = null - ae.forceMove(src.loc) - else if(istype(W, /obj/item/stack/sheet) && (!glass || !mineral)) var/obj/item/stack/sheet/G = W if(G) @@ -240,41 +282,7 @@ to_chat(user, "You cannot add [G] to [src]!") else to_chat(user, "You cannot add [G] to [src]!") - - else if((W.tool_behaviour == TOOL_SCREWDRIVER) && state == AIRLOCK_ASSEMBLY_NEEDS_SCREWDRIVER) - user.visible_message( - "[user] finishes the airlock.", - "You start finishing the airlock..." - ) - - if(W.use_tool(src, user, 40, volume=100)) - if(loc && state == AIRLOCK_ASSEMBLY_NEEDS_SCREWDRIVER) - to_chat(user, "You finish the airlock.") - var/obj/machinery/door/airlock/door - if(glass) - door = new glass_type(loc) - else - door = new airlock_type(loc) - door.setDir(dir) - door.unres_sides = electronics.unres_sides - //door.req_access = req_access - door.electronics = electronics - door.heat_proof = heat_proof_finished - door.security_level = 0 - if(electronics.one_access) - door.req_one_access = electronics.accesses - else - door.req_access = electronics.accesses - if(created_name) - door.name = created_name - else - door.name = base_name - door.previous_airlock = previous_assembly - electronics.forceMove(door) - door.update_appearance() - qdel(src) - else - return ..() + ..() update_name() update_appearance() diff --git a/tgui/packages/tgui/interfaces/AirlockElectronics.js b/tgui/packages/tgui/interfaces/AirlockElectronics.js index 8eb0de72828d..bfd8daea6d1c 100644 --- a/tgui/packages/tgui/interfaces/AirlockElectronics.js +++ b/tgui/packages/tgui/interfaces/AirlockElectronics.js @@ -1,5 +1,5 @@ import { useBackend } from '../backend'; -import { Button, LabeledList, Section } from '../components'; +import { Button, LabeledList, Section, NumberInput } from '../components'; import { Window } from '../layouts'; import { AccessList } from './common/AccessList'; @@ -8,8 +8,9 @@ export const AirlockElectronics = (props, context) => { const { oneAccess, unres_direction } = data; const regions = data.regions || []; const accesses = data.accesses || []; + const close_speed = data.close_speed || []; return ( - +
@@ -85,6 +86,24 @@ export const AirlockElectronics = (props, context) => { }) } /> + + + + act('close_speed', { + adjust: value - close_speed / 10, + }) + } + /> + + ); diff --git a/tgui/packages/tgui/interfaces/Radio.js b/tgui/packages/tgui/interfaces/Radio.js index 1783933bf468..64d33e7505c8 100644 --- a/tgui/packages/tgui/interfaces/Radio.js +++ b/tgui/packages/tgui/interfaces/Radio.js @@ -64,7 +64,7 @@ export const Radio = (props, context) => { animate unit="kHz" step={0.2} - stepPixelSize={10} + stepPixelSize={15} minValue={minFrequency / 10} maxValue={maxFrequency / 10} value={frequency / 10}