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
🆑

balance: The "Bolt Lights" wire is now the "Feedback" wire, and controls
both lights and sounds for the airlock.

/🆑
This commit is contained in:
Leland Kemble
2025-09-15 17:38:24 -04:00
committed by GitHub
parent 9e1ba2ad7b
commit c53286a625
5 changed files with 22 additions and 21 deletions

View File

@@ -42,7 +42,7 @@
#define WIRE_BACKUP1 "Auxiliary Power 1" #define WIRE_BACKUP1 "Auxiliary Power 1"
#define WIRE_BACKUP2 "Auxiliary Power 2" #define WIRE_BACKUP2 "Auxiliary Power 2"
#define WIRE_BEACON "Beacon" #define WIRE_BEACON "Beacon"
#define WIRE_BOLTLIGHT "Bolt Lights" #define WIRE_FEEDBACK "Feedback"
#define WIRE_BOLTS "Bolts" #define WIRE_BOLTS "Bolts"
#define WIRE_BOOM "Boom Wire" #define WIRE_BOOM "Boom Wire"
#define WIRE_CAMERA "Camera" #define WIRE_CAMERA "Camera"

View File

@@ -49,7 +49,7 @@
WIRE_BACKUP2, WIRE_BACKUP2,
WIRE_BOLTS, WIRE_BOLTS,
WIRE_IDSCAN, WIRE_IDSCAN,
WIRE_BOLTLIGHT, WIRE_FEEDBACK,
WIRE_OPEN, WIRE_OPEN,
WIRE_POWER1, WIRE_POWER1,
WIRE_POWER2, WIRE_POWER2,
@@ -146,8 +146,8 @@
A.close() A.close()
if(WIRE_TIMING) if(WIRE_TIMING)
A.normalspeed = !A.normalspeed A.normalspeed = !A.normalspeed
if(WIRE_BOLTLIGHT) if(WIRE_FEEDBACK)
A.lights = !A.lights A.feedback = !A.feedback
A.update_appearance() 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(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) 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 A.autoclose = mend
if(A.autoclose && !A.density) if(A.autoclose && !A.density)
INVOKE_ASYNC(A, TYPE_PROC_REF(/obj/machinery/door/airlock, close)) INVOKE_ASYNC(A, TYPE_PROC_REF(/obj/machinery/door/airlock, close))
if(WIRE_BOLTLIGHT) // Cut to disable lights, mend to re-enable. if(WIRE_FEEDBACK) // Cut to disable lights and sounds, mend to re-enable.
A.lights = mend A.feedback = mend
A.update_appearance() A.update_appearance()
if(WIRE_ZAP1, WIRE_ZAP2) // Ouch. if(WIRE_ZAP1, WIRE_ZAP2) // Ouch.
if(isliving(usr)) if(isliving(usr))

View File

@@ -106,8 +106,8 @@
var/backup_power_timer = 0 var/backup_power_timer = 0
/// Paired with backup_power_timer. Records its remaining time when something happens to interrupt power regen /// Paired with backup_power_timer. Records its remaining time when something happens to interrupt power regen
var/backup_power_time var/backup_power_time
/// Bolt lights show by default /// Lights and sounds enabled by default
var/lights = TRUE var/feedback = TRUE
var/aiDisabledIdScanner = FALSE var/aiDisabledIdScanner = FALSE
var/aiHacking = FALSE var/aiHacking = FALSE
/// Cyclelinking for airlocks that aren't on the same x or y coord as the target. /// Cyclelinking for airlocks that aren't on the same x or y coord as the target.
@@ -593,7 +593,7 @@
else else
. += get_airlock_overlay("fill_[frame_state]", icon, src, em_block = TRUE) . += 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) . += get_airlock_overlay("lights_[light_state]", overlays_file, src, em_block = FALSE)
if(panel_open) if(panel_open)
@@ -663,7 +663,8 @@
use_energy(50 JOULES) use_energy(50 JOULES)
playsound(src, soundin = doorClose, vol = 30, vary = TRUE) playsound(src, soundin = doorClose, vol = 30, vary = TRUE)
if(DOOR_DENY_ANIMATION) 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) addtimer(CALLBACK(src, PROC_REF(handle_deny_end)), AIRLOCK_DENY_ANIMATION_TIME)
/obj/machinery/door/airlock/proc/handle_deny_end() /obj/machinery/door/airlock/proc/handle_deny_end()
@@ -1516,7 +1517,7 @@
if(!open()) if(!open())
set_airlock_state(AIRLOCK_CLOSED) set_airlock_state(AIRLOCK_CLOSED)
obj_flags |= EMAGGED obj_flags |= EMAGGED
lights = FALSE feedback = FALSE
locked = TRUE locked = TRUE
loseMainPower() loseMainPower()
loseBackupPower() loseBackupPower()
@@ -1711,7 +1712,7 @@
data["id_scanner"] = !aiDisabledIdScanner data["id_scanner"] = !aiDisabledIdScanner
data["emergency"] = emergency // access data["emergency"] = emergency // access
data["locked"] = locked // bolted data["locked"] = locked // bolted
data["lights"] = lights // bolt lights data["feedback"] = feedback // lights and sounds
data["safe"] = safe // safeties data["safe"] = safe // safeties
data["speed"] = normalspeed // safe speed data["speed"] = normalspeed // safe speed
data["welded"] = welded // welded data["welded"] = welded // welded
@@ -1725,7 +1726,7 @@
wire["shock"] = !wires.is_cut(WIRE_SHOCK) wire["shock"] = !wires.is_cut(WIRE_SHOCK)
wire["id_scanner"] = !wires.is_cut(WIRE_IDSCAN) wire["id_scanner"] = !wires.is_cut(WIRE_IDSCAN)
wire["bolts"] = !wires.is_cut(WIRE_BOLTS) 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["safe"] = !wires.is_cut(WIRE_SAFETY)
wire["timing"] = !wires.is_cut(WIRE_TIMING) wire["timing"] = !wires.is_cut(WIRE_TIMING)
@@ -1773,7 +1774,7 @@
toggle_bolt(usr) toggle_bolt(usr)
. = TRUE . = TRUE
if("light-toggle") if("light-toggle")
lights = !lights feedback = !feedback
update_appearance() update_appearance()
. = TRUE . = TRUE
if("safe-toggle") if("safe-toggle")

View File

@@ -179,7 +179,7 @@
qdel(src) qdel(src)
return return
if(9 to 11) 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. // These do not use airlock.bolt() because we want to pretend it was always locked. That means no sound effects.
airlock.locked = TRUE airlock.locked = TRUE
if(12 to 15) if(12 to 15)

View File

@@ -142,19 +142,19 @@ export const AiAirlock = (props) => {
{!data.wires.bolts && '[Wires have been cut!]'} {!data.wires.bolts && '[Wires have been cut!]'}
</LabeledList.Item> </LabeledList.Item>
<LabeledList.Item <LabeledList.Item
label="Door Bolt Lights" label="Door Feedback"
color="bad" color="bad"
buttons={ buttons={
<Button <Button
icon={data.lights ? 'power-off' : 'times'} icon={data.feedback ? 'power-off' : 'times'}
content={data.lights ? 'Enabled' : 'Disabled'} content={data.feedback ? 'Enabled' : 'Disabled'}
selected={data.lights} selected={data.feedback}
disabled={!data.wires.lights} disabled={!data.wires.feedback}
onClick={() => act('light-toggle')} onClick={() => act('light-toggle')}
/> />
} }
> >
{!data.wires.lights && '[Wires have been cut!]'} {!data.wires.feedback && '[Wires have been cut!]'}
</LabeledList.Item> </LabeledList.Item>
<LabeledList.Item <LabeledList.Item
label="Door Force Sensors" label="Door Force Sensors"