From 9186ba3541a13a307f53190e57ebfd121a0a56ea Mon Sep 17 00:00:00 2001
From: SkyratBot <59378654+SkyratBot@users.noreply.github.com>
Date: Fri, 3 Feb 2023 16:54:29 +0100
Subject: [PATCH] [MIRROR] Replace most uses of say() on tape recorder with
balloon alerts to reduce spam [MDB IGNORE] (#19137)
* Replace most uses of say() on tape recorder with balloon alerts to reduce spam (#72784)
## About The Pull Request
The tape recorder would spam the chat with multiple spoken lines when
Play was pressed on an empty tape or when playback ended. This fixes
that by replacing the spoken lines with balloon alerts only visible to
the user of the tape recorder.
Playback still uses say().
## Why It's Good For The Game
Less chat spam
## Changelog
:cl:
qol: Tape recorder actions (e.g. starting/stopping playback) now use
balloon alerts instead of say() to reduce chat spam
fix: You can no longer get a tape stuck in the tape recorder by
unspooling it before inserting
/:cl:
---------
Co-authored-by: Mothblocks <35135081+Mothblocks@ users.noreply.github.com>
* Replace most uses of say() on tape recorder with balloon alerts to reduce spam
---------
Co-authored-by: cacogen <25089914+cacogen@users.noreply.github.com>
Co-authored-by: Mothblocks <35135081+Mothblocks@ users.noreply.github.com>
---
.../objects/items/devices/taperecorder.dm | 93 ++++++++++++-------
1 file changed, 60 insertions(+), 33 deletions(-)
diff --git a/code/game/objects/items/devices/taperecorder.dm b/code/game/objects/items/devices/taperecorder.dm
index 7fedd55aa21..0627a51dce3 100644
--- a/code/game/objects/items/devices/taperecorder.dm
+++ b/code/game/objects/items/devices/taperecorder.dm
@@ -91,19 +91,24 @@
if(!user.transferItemToLoc(I,src))
return
mytape = I
- to_chat(user, span_notice("You insert [I] into [src]."))
+ balloon_alert(user, "inserted [mytape]")
playsound(src, 'sound/items/taperecorder/taperecorder_close.ogg', 50, FALSE)
update_appearance()
/obj/item/taperecorder/proc/eject(mob/user)
- if(mytape)
- playsound(src, 'sound/items/taperecorder/taperecorder_open.ogg', 50, FALSE)
- to_chat(user, span_notice("You remove [mytape] from [src]."))
- stop()
- user.put_in_hands(mytape)
- mytape = null
- update_appearance()
+ if(!mytape)
+ balloon_alert(user, "no tape!")
+ return
+ if(playing)
+ balloon_alert(user, "stop the tape first!")
+ return
+ playsound(src, 'sound/items/taperecorder/taperecorder_open.ogg', 50, FALSE)
+ balloon_alert(user, "ejected [mytape]")
+ stop()
+ user.put_in_hands(mytape)
+ mytape = null
+ update_appearance()
/obj/item/taperecorder/fire_act(exposed_temperature, exposed_volume)
mytape.unspool() //Fires unspool the tape, which makes sense if you don't think about it
@@ -127,8 +132,10 @@
set category = "Object"
if(!can_use(usr))
+ balloon_alert(usr, "can't use!")
return
if(!mytape)
+ balloon_alert(usr, "no tape!")
return
eject(usr)
@@ -160,19 +167,23 @@
set category = "Object"
if(!can_use(usr))
+ balloon_alert(usr, "can't use!")
return
if(!mytape || mytape.unspooled)
+ balloon_alert(usr, "no spooled tape!")
return
if(recording)
+ balloon_alert(usr, "stop recording first!")
return
if(playing)
+ balloon_alert(usr, "already playing!")
return
playsound(src, 'sound/items/taperecorder/taperecorder_play.ogg', 50, FALSE)
if(mytape.used_capacity < mytape.max_capacity)
recording = TRUE
- say("Recording started.")
+ balloon_alert(usr, "started recording")
update_sound()
update_appearance()
var/used = mytape.used_capacity //to stop runtimes when you eject the tape
@@ -182,13 +193,14 @@
used += 1 SECONDS
if(max - used < time_left_warning && !time_warned)
time_warned = TRUE
- say("[(max - used) / 10] seconds left!") //deciseconds / 10 = seconds
+ balloon_alert(usr, "[(max - used) / 10] second\s left")
sleep(1 SECONDS)
if(used >= max)
- say("Tape full.")
+ balloon_alert(usr, "tape full!")
+ sleep(1 SECONDS) //prevent balloon alerts layering over the top of each other
stop()
else
- say("The tape is full!")
+ balloon_alert(usr, "tape full!")
playsound(src, 'sound/items/taperecorder/taperecorder_stop.ogg', 50, FALSE)
@@ -197,15 +209,16 @@
set category = "Object"
if(!can_use(usr))
+ balloon_alert(usr, "can't use!")
return
if(recording)
playsound(src, 'sound/items/taperecorder/taperecorder_stop.ogg', 50, FALSE)
- say("Recording stopped.")
+ balloon_alert(usr, "stopped recording")
recording = FALSE
else if(playing)
playsound(src, 'sound/items/taperecorder/taperecorder_stop.ogg', 50, FALSE)
- say("Playback stopped.")
+ balloon_alert(usr, "stopped playing")
playing = FALSE
time_warned = FALSE
update_appearance()
@@ -216,18 +229,25 @@
set category = "Object"
if(!can_use(usr))
+ balloon_alert(usr, "can't use!")
return
if(!mytape || mytape.unspooled)
+ balloon_alert(usr, "no spooled tape!")
return
if(recording)
+ balloon_alert(usr, "stop recording first!")
return
if(playing)
+ balloon_alert(usr, "already playing!")
+ return
+ if(mytape.storedinfo?.len <= 0)
+ balloon_alert(usr, "[mytape] is empty!")
return
playing = TRUE
update_appearance()
update_sound()
- say("Playback started.")
+ balloon_alert(usr, "started playing")
playsound(src, 'sound/items/taperecorder/taperecorder_play.ogg', 50, FALSE)
var/used = mytape.used_capacity //to stop runtimes when you eject the tape
var/max = mytape.max_capacity
@@ -237,7 +257,8 @@
if(playing == FALSE)
break
if(mytape.storedinfo.len < i)
- say("End of recording.")
+ balloon_alert(usr, "recording ended")
+ stoplag(1 SECONDS) //prevents multiple balloon alerts covering each other
break
say("[mytape.storedinfo[i]]", sanitize=FALSE)//We want to display this properly, don't double encode
if(mytape.storedinfo.len < i + 1)
@@ -256,10 +277,7 @@
/obj/item/taperecorder/attack_self(mob/user)
if(!mytape)
- to_chat(user, span_notice("\The [src] is empty."))
- return
- if(mytape.unspooled)
- to_chat(user, span_warning("\The tape inside \the [src] is broken!"))
+ balloon_alert(user, "it's empty!")
return
update_available_icons()
@@ -285,15 +303,22 @@
var/list/transcribed_info = mytape.storedinfo
if(!length(transcribed_info))
- return
- if(!mytape)
+ balloon_alert(usr, "tape is empty!")
return
if(!canprint)
- to_chat(usr, span_warning("The recorder can't print that fast!"))
- return
- if(recording || playing)
+ balloon_alert(usr, "can't print that fast!")
return
if(!can_use(usr))
+ balloon_alert(usr, "can't use!")
+ return
+ if(!mytape || mytape.unspooled)
+ balloon_alert(usr, "no spooled tape!")
+ return
+ if(recording)
+ balloon_alert(usr, "stop recording first!")
+ return
+ if(playing)
+ balloon_alert(usr, "already playing!")
return
var/transcribed_text = "Transcript:
"
@@ -308,7 +333,7 @@
// Very unexpected. Better abort non-gracefully.
if(excerpt_length > MAX_PAPER_LENGTH)
- say("Error: Data corruption detected. Cannot print.")
+ balloon_alert(usr, "data corrupted, can't print!")
CRASH("Transcript entry has more than [MAX_PAPER_LENGTH] chars: [excerpt_length] chars")
// If we're going to overflow the paper's length, print the current transcribed text out first and reset to prevent us
@@ -328,7 +353,7 @@
transcript_paper.name = "[paper_name] page [page_count]"
transcript_paper.update_appearance()
- say("Transcript printed, [page_count] pages.")
+ balloon_alert(usr, "transcript printed\n[page_count] page\s")
playsound(src, 'sound/items/taperecorder/taperecorder_print.ogg', 50, FALSE)
// Can't put the entire stack into their hands if there's multple pages, but hey we can at least put one page in.
@@ -409,13 +434,13 @@
if(loc != user)
return
tapeflip()
- to_chat(user, span_notice("You turn \the [src] over."))
+ balloon_alert(user, "flipped tape")
playsound(src, 'sound/items/taperecorder/tape_flip.ogg', 70, FALSE)
if("Unwind tape")
if(loc != user)
return
unspool()
- to_chat(user, span_warning("You pull out all the tape!"))
+ balloon_alert(user, "unspooled tape")
/obj/item/tape/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum)
if(prob(50))
@@ -454,10 +479,12 @@
/obj/item/tape/screwdriver_act(mob/living/user, obj/item/tool)
if(!unspooled)
return FALSE
- to_chat(user, span_notice("You start winding the tape back in..."))
- if(tool.use_tool(src, user, 120))
- to_chat(user, span_notice("You wind the tape back in."))
- respool()
+ balloon_alert(user, "respooling tape...")
+ if(!tool.use_tool(src, user, 12 SECONDS))
+ balloon_alert(user, "respooling failed!")
+ return FALSE
+ balloon_alert(user, "tape respooled")
+ respool()
//Random colour tapes
/obj/item/tape/random