From c53286a62526560ab79b5e7e8b1d6782ed935a0a Mon Sep 17 00:00:00 2001
From: Leland Kemble <70413276+lelandkemble@users.noreply.github.com>
Date: Mon, 15 Sep 2025 17:38:24 -0400
Subject: [PATCH] Changes bolt light wire to feedback wire, which disables both
lights and feedback sounds (#92950)
## About The Pull Request
Changes the "Bolt Lights" wire to a "Feedback" wire, which as well as
disabling the door's lights also disables the deny access sound. Sounds
that happen because the door is actually moving or bolting are
unchanged.
## Why It's Good For The Game
closes #65244
Justification is mostly in mentioned issue, primarily the accessibility
issue of denied door feedback being sound-only when the lights are cut.
Also, "Bolt Lights" is just inaccurate, as it controls all of the lights
on the door.
## Changelog
:cl:
balance: The "Bolt Lights" wire is now the "Feedback" wire, and controls
both lights and sounds for the airlock.
/:cl:
---
code/__DEFINES/wires.dm | 2 +-
code/datums/wires/airlock.dm | 10 +++++-----
code/game/machinery/doors/airlock.dm | 17 +++++++++--------
code/modules/mapping/mapping_helpers.dm | 2 +-
tgui/packages/tgui/interfaces/AiAirlock.jsx | 12 ++++++------
5 files changed, 22 insertions(+), 21 deletions(-)
diff --git a/code/__DEFINES/wires.dm b/code/__DEFINES/wires.dm
index 89961cb6458..51990b007b5 100644
--- a/code/__DEFINES/wires.dm
+++ b/code/__DEFINES/wires.dm
@@ -42,7 +42,7 @@
#define WIRE_BACKUP1 "Auxiliary Power 1"
#define WIRE_BACKUP2 "Auxiliary Power 2"
#define WIRE_BEACON "Beacon"
-#define WIRE_BOLTLIGHT "Bolt Lights"
+#define WIRE_FEEDBACK "Feedback"
#define WIRE_BOLTS "Bolts"
#define WIRE_BOOM "Boom Wire"
#define WIRE_CAMERA "Camera"
diff --git a/code/datums/wires/airlock.dm b/code/datums/wires/airlock.dm
index 584e862eb5d..8c09520cab0 100644
--- a/code/datums/wires/airlock.dm
+++ b/code/datums/wires/airlock.dm
@@ -49,7 +49,7 @@
WIRE_BACKUP2,
WIRE_BOLTS,
WIRE_IDSCAN,
- WIRE_BOLTLIGHT,
+ WIRE_FEEDBACK,
WIRE_OPEN,
WIRE_POWER1,
WIRE_POWER2,
@@ -146,8 +146,8 @@
A.close()
if(WIRE_TIMING)
A.normalspeed = !A.normalspeed
- if(WIRE_BOLTLIGHT)
- A.lights = !A.lights
+ if(WIRE_FEEDBACK)
+ A.feedback = !A.feedback
A.update_appearance()
if(WIRE_UNRESTRICTED_EXIT) // Pulse to switch the direction around by 180 degrees (North goes to South, East goes to West, vice-versa)
if(!A.unres_sensor) //only works if the "sensor" is installed (a variable that we assign to the door either upon creation of a door with unrestricted directions or if an unrestricted helper is added to a door in mapping)
@@ -210,8 +210,8 @@
A.autoclose = mend
if(A.autoclose && !A.density)
INVOKE_ASYNC(A, TYPE_PROC_REF(/obj/machinery/door/airlock, close))
- if(WIRE_BOLTLIGHT) // Cut to disable lights, mend to re-enable.
- A.lights = mend
+ if(WIRE_FEEDBACK) // Cut to disable lights and sounds, mend to re-enable.
+ A.feedback = mend
A.update_appearance()
if(WIRE_ZAP1, WIRE_ZAP2) // Ouch.
if(isliving(usr))
diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm
index fd9ce43172d..5f67b791e90 100644
--- a/code/game/machinery/doors/airlock.dm
+++ b/code/game/machinery/doors/airlock.dm
@@ -106,8 +106,8 @@
var/backup_power_timer = 0
/// Paired with backup_power_timer. Records its remaining time when something happens to interrupt power regen
var/backup_power_time
- /// Bolt lights show by default
- var/lights = TRUE
+ /// Lights and sounds enabled by default
+ var/feedback = TRUE
var/aiDisabledIdScanner = FALSE
var/aiHacking = FALSE
/// Cyclelinking for airlocks that aren't on the same x or y coord as the target.
@@ -593,7 +593,7 @@
else
. += get_airlock_overlay("fill_[frame_state]", icon, src, em_block = TRUE)
- if(lights && hasPower() && light_state)
+ if(feedback && hasPower() && light_state)
. += get_airlock_overlay("lights_[light_state]", overlays_file, src, em_block = FALSE)
if(panel_open)
@@ -663,7 +663,8 @@
use_energy(50 JOULES)
playsound(src, soundin = doorClose, vol = 30, vary = TRUE)
if(DOOR_DENY_ANIMATION)
- playsound(src, soundin = doorDeni, vol = 50, vary = FALSE, extrarange = 3)
+ if(feedback)
+ playsound(src, soundin = doorDeni, vol = 50, vary = FALSE, extrarange = 3)
addtimer(CALLBACK(src, PROC_REF(handle_deny_end)), AIRLOCK_DENY_ANIMATION_TIME)
/obj/machinery/door/airlock/proc/handle_deny_end()
@@ -1516,7 +1517,7 @@
if(!open())
set_airlock_state(AIRLOCK_CLOSED)
obj_flags |= EMAGGED
- lights = FALSE
+ feedback = FALSE
locked = TRUE
loseMainPower()
loseBackupPower()
@@ -1711,7 +1712,7 @@
data["id_scanner"] = !aiDisabledIdScanner
data["emergency"] = emergency // access
data["locked"] = locked // bolted
- data["lights"] = lights // bolt lights
+ data["feedback"] = feedback // lights and sounds
data["safe"] = safe // safeties
data["speed"] = normalspeed // safe speed
data["welded"] = welded // welded
@@ -1725,7 +1726,7 @@
wire["shock"] = !wires.is_cut(WIRE_SHOCK)
wire["id_scanner"] = !wires.is_cut(WIRE_IDSCAN)
wire["bolts"] = !wires.is_cut(WIRE_BOLTS)
- wire["lights"] = !wires.is_cut(WIRE_BOLTLIGHT)
+ wire["feedback"] = !wires.is_cut(WIRE_FEEDBACK)
wire["safe"] = !wires.is_cut(WIRE_SAFETY)
wire["timing"] = !wires.is_cut(WIRE_TIMING)
@@ -1773,7 +1774,7 @@
toggle_bolt(usr)
. = TRUE
if("light-toggle")
- lights = !lights
+ feedback = !feedback
update_appearance()
. = TRUE
if("safe-toggle")
diff --git a/code/modules/mapping/mapping_helpers.dm b/code/modules/mapping/mapping_helpers.dm
index cb6dd212f3e..6d0b7e58167 100644
--- a/code/modules/mapping/mapping_helpers.dm
+++ b/code/modules/mapping/mapping_helpers.dm
@@ -179,7 +179,7 @@
qdel(src)
return
if(9 to 11)
- airlock.lights = FALSE
+ airlock.feedback = FALSE
// These do not use airlock.bolt() because we want to pretend it was always locked. That means no sound effects.
airlock.locked = TRUE
if(12 to 15)
diff --git a/tgui/packages/tgui/interfaces/AiAirlock.jsx b/tgui/packages/tgui/interfaces/AiAirlock.jsx
index bf9cdf4a7ff..7dc5943e6da 100644
--- a/tgui/packages/tgui/interfaces/AiAirlock.jsx
+++ b/tgui/packages/tgui/interfaces/AiAirlock.jsx
@@ -142,19 +142,19 @@ export const AiAirlock = (props) => {
{!data.wires.bolts && '[Wires have been cut!]'}
act('light-toggle')}
/>
}
>
- {!data.wires.lights && '[Wires have been cut!]'}
+ {!data.wires.feedback && '[Wires have been cut!]'}