Balloon alert improvements (#20798)

Updated balloon alerts with the latest changes from tgstation.
Improvements include a new plane for them, and their duration changes
depending on their length.

Unfortunately, since they were added, they have been abused for really
long text that is difficult to parse in-game (by myself included).
Balloon alerts are useful, but they are not smoking guns and have
limitations due to their lack of persistence. I have clamped down on
their abuse in favor of the standard established by tgstation, [seen
here](https://hackmd.io/0Cvr4hpcTe-KI6SbgfUWtw#balloon_alertballoon_alert_to_viewers).
We lack updated runechat so I will not propose this be a fully
implemented standard at this time, but I have cut down all existing
balloon alerts to size.
This commit is contained in:
Cody Brittain
2025-06-11 09:52:13 +00:00
committed by GitHub
parent 80ae08e46d
commit 0782d0f29c
12 changed files with 129 additions and 47 deletions
+8 -4
View File
@@ -55,19 +55,23 @@
if(href_list["video"])
camera.set_status(!camera.status)
if(camera.status)
balloon_alert(usr, SPAN_NOTICE("Video streaming: Activated. Broadcasting on channel: [channel]"))
balloon_alert(usr, "streaming video")
to_chat(usr, SPAN_NOTICE("Video streaming: Activated. Broadcasting on channel: [channel]"))
playsound(src.loc, 'sound/machines/ping.ogg', 50, 1)
else
balloon_alert(usr, SPAN_NOTICE("Video streaming: Deactivated."))
balloon_alert(usr, "stopped streaming video")
to_chat(usr, SPAN_NOTICE("Video streaming: Deactivated."))
playsound(src.loc, 'sound/machines/buzz-sigh.ogg', 50, 1)
update_icon()
if(href_list["sound"])
radio.set_broadcasting(!radio.get_broadcasting())
if(radio.get_broadcasting())
balloon_alert(usr, SPAN_NOTICE("Audio streaming: Activated. Broadcasting on frequency: [format_frequency(radio.get_frequency())]."))
balloon_alert(usr, "streaming audio")
to_chat(usr, SPAN_NOTICE("Audio streaming: Activated. Broadcasting on frequency: [format_frequency(radio.get_frequency())]."))
playsound(src.loc, 'sound/machines/ping.ogg', 50, 1)
else
balloon_alert(usr, SPAN_NOTICE("Audio streaming: Deactivated."))
balloon_alert(usr, "stopped streaming audio")
to_chat(usr, SPAN_NOTICE("Audio streaming: Deactivated."))
playsound(src.loc, 'sound/machines/buzz-sigh.ogg', 50, 1)
if(!href_list["close"])
attack_self(usr)
+5 -3
View File
@@ -77,27 +77,29 @@
else if(istype(attacking_item, /obj/item/card/id))
var/obj/item/card/id/identification_card = attacking_item
if(!forced_open && has_access(req_one_access = src.req_one_access, accesses = identification_card.access))
balloon_alert_to_viewers("[user] [locked ? "unlocks" : "locks"] \the [src]!")
balloon_alert_to_viewers("[locked ? "unlocked" : "locked"]")
playsound(src, 'sound/items/metal_shutter.ogg', 50, TRUE, extrarange = SHORT_RANGE_SOUND_EXTRARANGE)
toggle_lock(user)
else
balloon_alert(user, "it won't budge!")
to_chat(user, SPAN_WARNING("You lack the required access to operate this rack's lock, or the lock mechanism is broken."))
else if(locked && attacking_item.iswelder())
var/obj/item/weldingtool/WT = attacking_item
balloon_alert_to_viewers("[user] starts to cut through the lock on \the [src]!")
balloon_alert_to_viewers("cutting through the lock...")
if(WT.use_tool(src, user, 20 SECONDS, extra_checks = CALLBACK(src, PROC_REF(can_be_opened))))
//Last check because use_tool() is shitcoded
if(forced_open || !can_be_opened())
return
toggle_lock(user)
balloon_alert_to_viewers("lock cut")
forced_open = TRUE
else
balloon_alert_to_viewers("[src] was unlocked while you was working on it!")
to_chat(user, SPAN_NOTICE("\The [src] was unlocked while you were working on it!"))
/obj/structure/weapons_rack/attack_hand(mob/living/user)