From 644fbda38e9ff40fce39297fae8b3023998ddf40 Mon Sep 17 00:00:00 2001 From: Casper3667 <8396443+Casper3667@users.noreply.github.com> Date: Tue, 15 Feb 2022 23:23:22 +0100 Subject: [PATCH] fixes some talking related bugs (#13147) --- code/modules/mob/language/language.dm | 2 +- code/modules/mob/living/carbon/human/say.dm | 6 +++--- code/modules/mob/living/say.dm | 9 +++++---- code/modules/mob/living/whisper.dm | 20 +++++++++++++++++--- html/changelogs/TalkFix.yml | 8 ++++++++ 5 files changed, 34 insertions(+), 11 deletions(-) create mode 100644 html/changelogs/TalkFix.yml diff --git a/code/modules/mob/language/language.dm b/code/modules/mob/language/language.dm index 9690a5ac945..647b85ab148 100644 --- a/code/modules/mob/language/language.dm +++ b/code/modules/mob/language/language.dm @@ -12,7 +12,7 @@ var/list/ask_verb = list("asks") // Used when sentence ends in a ? var/list/exclaim_verb = list("exclaims") // Used when sentence ends in a ! var/list/shout_verb = list("shouts", "yells", "screams") //Used when a sentence ends in !! - var/list/whisper_verb = list("says quietly", "says softly", "whispers") // Optional. When not specified speech_verb + quietly/softly is used instead. + var/list/whisper_verb = null // Optional. When not specified speech_verb + quietly/softly is used instead. var/list/signlang_verb = list("signs") // list of emotes that might be displayed if this language has NONVERBAL or SIGNLANG flags var/list/sing_verb = list("sings") var/list/sign_adv_length = list(" briefly", " a short message", " a message", " a lengthy message", " a very lengthy message") // 5 messages changing depending on the length of the signed language. A space should be added before the sentence as shown diff --git a/code/modules/mob/living/carbon/human/say.dm b/code/modules/mob/living/carbon/human/say.dm index b4ab24eb1f1..9247ce18d79 100644 --- a/code/modules/mob/living/carbon/human/say.dm +++ b/code/modules/mob/living/carbon/human/say.dm @@ -161,7 +161,7 @@ return headsets[headsets[1]] return null -/mob/living/carbon/human/handle_message_mode(message_mode, message, verb, speaking, used_radios, alt_name, successful_radio, whisper) +/mob/living/carbon/human/handle_message_mode(message_mode, message, verb, speaking, used_radios, alt_name, successful_radio, whisper, var/is_singing = FALSE) if(!whisper && (paralysis || InStasis())) whisper(message, speaking) return TRUE @@ -218,12 +218,12 @@ if(R.talk_into(src,message,null,verb,speaking)) successful_radio += R if("whisper") - whisper(message, speaking) + whisper(message, speaking, is_singing) return TRUE else if(message_mode) var/obj/item/device/radio/R = get_radio() if(R) - used_radios += l_ear + used_radios += R if(R.talk_into(src, message, message_mode, verb, speaking)) successful_radio += R diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm index d9249931616..f987a189272 100644 --- a/code/modules/mob/living/say.dm +++ b/code/modules/mob/living/say.dm @@ -156,7 +156,7 @@ proc/get_radio_key_from_channel(var/channel) return FONT_SIZE_LARGE return null -/mob/living/say(var/message, var/datum/language/speaking = null, var/verb="says", var/alt_name="", var/ghost_hearing = GHOSTS_ALL_HEAR, var/whisper = FALSE) +/mob/living/say(var/message, var/datum/language/speaking = null, var/verb, var/alt_name="", var/ghost_hearing = GHOSTS_ALL_HEAR, var/whisper = FALSE) if(stat) if(stat == DEAD) return say_dead(message) @@ -209,8 +209,9 @@ proc/get_radio_key_from_channel(var/channel) return speaking.broadcast(src,trim(message)) return 1 - - verb = say_quote(message, speaking, is_singing, whisper) + + if(!verb) + verb = say_quote(message, speaking, is_singing, whisper) if(is_muzzled()) to_chat(src, "You're muzzled and cannot speak!") @@ -245,7 +246,7 @@ proc/get_radio_key_from_channel(var/channel) var/list/obj/item/used_radios = new var/list/successful_radio = new // passes a list because standard vars don't work when passed - if(handle_message_mode(message_mode, message, verb, speaking, used_radios, alt_name, successful_radio, whisper)) + if(handle_message_mode(message_mode, message, verb, speaking, used_radios, alt_name, successful_radio, whisper, is_singing)) return 1 var/list/handle_v = handle_speech_sound() diff --git a/code/modules/mob/living/whisper.dm b/code/modules/mob/living/whisper.dm index 23b3550ce35..4d2c7602d7b 100644 --- a/code/modules/mob/living/whisper.dm +++ b/code/modules/mob/living/whisper.dm @@ -16,13 +16,24 @@ whisper(message) -/mob/living/proc/whisper(var/message, var/datum/language/speaking) +/mob/living/proc/whisper(var/message, var/datum/language/speaking, var/is_singing = FALSE) if(is_muzzled()) to_chat(src, SPAN_DANGER("You're muzzled and cannot speak!")) return + var/had_speaking = !!speaking speaking = speaking ? speaking : parse_language(message) + if(!had_speaking) + if(speaking) + message = copytext(message,2+length(speaking.key)) + else + speaking = get_default_language() + + if(length(message) >= 1 && copytext(message, 1, 2) == "%") + if(speaking?.sing_verb) + is_singing = TRUE + var/message_range = 1 var/eavesdropping_range = 2 var/watching_range = 5 @@ -35,8 +46,11 @@ not_heard = "[whisper_text] something" else var/adverb = pick("quietly", "softly") - whisper_text = "[speaking.speech_verb] [adverb]" - not_heard = "[speaking.speech_verb] something [adverb]" + var/speak_text = pick(speaking.speech_verb) + if(is_singing && speaking?.sing_verb) + speak_text = pick(speaking.sing_verb) + whisper_text = "[speak_text] [adverb]" + not_heard = "[speak_text] something [adverb]" var/list/listening = list(src) diff --git a/html/changelogs/TalkFix.yml b/html/changelogs/TalkFix.yml new file mode 100644 index 00000000000..fedcff390fe --- /dev/null +++ b/html/changelogs/TalkFix.yml @@ -0,0 +1,8 @@ +author: TheGreyWolf + +delete-after: True + +changes: + - bugfix: "Using the whisper verb with a language should now show the message properly." + - bugfix: "Radios now properly show what is spoken into rather than always picking the item on the left ear slot." + - bugfix: "Language specific whisper verbs will now be used again."