From 49ae2d6b19bdf1b6a28da39f61cfe675da6a5c8b Mon Sep 17 00:00:00 2001 From: Kashargul <144968721+Kashargul@users.noreply.github.com> Date: Sat, 1 Mar 2025 19:05:41 +0100 Subject: [PATCH] implements whisper and subtle for soulcatcher mobs (#17212) * implements whisper and subtle for soulcatcher mobs * . * . --- .../nifsoft/software/13_soulcatcher.dm | 71 ++++++++++++------- 1 file changed, 47 insertions(+), 24 deletions(-) diff --git a/code/modules/nifsoft/software/13_soulcatcher.dm b/code/modules/nifsoft/software/13_soulcatcher.dm index 7e72350241a..b99eac4d96a 100644 --- a/code/modules/nifsoft/software/13_soulcatcher.dm +++ b/code/modules/nifsoft/software/13_soulcatcher.dm @@ -72,52 +72,77 @@ /datum/nifsoft/soulcatcher/proc/notify_into(var/message) var/sound = nif.good_sound + message = " " + span_bold("Soulcatcher") + " displays, \"" + span_notice(span_nif("[message]")) + "\"" + to_chat(nif.human, type = MESSAGE_TYPE_NIF, - html = span_nif(span_bold("\[[icon2html(nif.big_icon, nif.human)]NIF\]") + " " + span_bold("Soulcatcher") + " displays, \"" + span_notice(span_nif("[message]")) + "\"")) + html = span_nif(span_bold("\[[icon2html(nif.big_icon, nif.human)]NIF\]") + message)) nif.human << sound for(var/mob/living/carbon/brain/caught_soul/CS as anything in brainmobs) to_chat(CS, type = MESSAGE_TYPE_NIF, - html = span_nif(span_bold("\[[icon2html(nif.big_icon, CS.client)]NIF\]") + " " + span_bold("Soulcatcher") + " displays, \"" + span_notice(span_nif("[message]")) + "\"")) + html = span_nif(span_bold("\[[icon2html(nif.big_icon, CS.client)]NIF\]") + message)) CS << sound -/datum/nifsoft/soulcatcher/proc/say_into(var/message, var/mob/living/sender, var/mob/eyeobj) +/datum/nifsoft/soulcatcher/proc/say_into(var/message, var/mob/living/sender, var/mob/eyeobj, var/whisper) var/sender_name = eyeobj ? eyeobj.name : sender.name //AR Projecting if(eyeobj) - sender.eyeobj.visible_message(span_game(span_say(span_bold("[sender_name]") + " says, \"[message]\""))) + var/speak_verb = "says" + message = span_game(span_say(span_bold("[sender_name]") + " [speak_verb], \"[message]\"")) + if(whisper) + speak_verb = "whispers" + sender.eyeobj.visible_message(span_italics(message), range = 1) + else + sender.eyeobj.visible_message(message) //Not AR Projecting else + var/speak_verb = "speaks" + message = " " + span_bold("[sender_name]") + " [speak_verb], \"[message]\"" to_chat(nif.human, type = MESSAGE_TYPE_NIF, - html = span_nif(span_bold("\[[icon2html(nif.big_icon, nif.human.client)]NIF\]") + " " + span_bold("[sender_name]") + " speaks, \"[message]\"")) - for(var/mob/living/carbon/brain/caught_soul/CS as anything in brainmobs) - to_chat(CS, + html = span_nif(span_bold("\[[icon2html(nif.big_icon, nif.human.client)]NIF\]") + message)) + if(whisper) + speak_verb = "whispers" + to_chat(sender, type = MESSAGE_TYPE_NIF, - html = span_nif(span_bold("\[[icon2html(nif.big_icon, CS.client)]NIF\]") + " " + span_bold("[sender_name]") + " speaks, \"[message]\"")) + html = span_nif(span_bold("\[[icon2html(nif.big_icon, sender.client)]NIF\]") + span_italics(message))) + else + for(var/mob/living/carbon/brain/caught_soul/CS as anything in brainmobs) + to_chat(CS, + type = MESSAGE_TYPE_NIF, + html = span_nif(span_bold("\[[icon2html(nif.big_icon, CS.client)]NIF\]") + message)) log_nsay(message,nif.human.real_name,sender) -/datum/nifsoft/soulcatcher/proc/emote_into(var/message, var/mob/living/sender, var/mob/eyeobj) +/datum/nifsoft/soulcatcher/proc/emote_into(var/message, var/mob/living/sender, var/mob/eyeobj, var/whisper) var/sender_name = eyeobj ? eyeobj.name : sender.name //AR Projecting if(eyeobj) - sender.eyeobj.visible_message(span_emote("[sender_name] [message]")) + var/range = world.view + if(whisper) + range = 1 + sender.eyeobj.visible_message(span_emote("[sender_name] [message]"), range = range) //Not AR Projecting else + message = " " + span_bold("[sender_name]") + " [message]" to_chat(nif.human, type = MESSAGE_TYPE_NIF, - html = span_nif(span_bold("\[[icon2html(nif.big_icon,nif.human.client)]NIF\]") + " " + span_bold("[sender_name]") + " [message]")) - for(var/mob/living/carbon/brain/caught_soul/CS as anything in brainmobs) - to_chat(CS, + html = span_nif(span_bold("\[[icon2html(nif.big_icon,nif.human.client)]NIF\]") + message)) + if(whisper) + to_chat(sender, type = MESSAGE_TYPE_NIF, - html = span_nif(span_bold("\[[icon2html(nif.big_icon,CS.client)]NIF\]") + " " + span_bold("[sender_name]") + " [message]")) + html = span_nif(span_bold("\[[icon2html(nif.big_icon,sender.client)]NIF\]") + span_italics(message))) + else + for(var/mob/living/carbon/brain/caught_soul/CS as anything in brainmobs) + to_chat(CS, + type = MESSAGE_TYPE_NIF, + html = span_nif(span_bold("\[[icon2html(nif.big_icon,CS.client)]NIF\]") + message)) log_nme(message,nif.human.real_name,sender) @@ -347,16 +372,6 @@ return FALSE ..() -/mob/living/carbon/brain/caught_soul/me_verb_subtle() - set hidden = TRUE - - return FALSE - -/mob/living/carbon/brain/caught_soul/whisper() - set hidden = TRUE - - return FALSE - /mob/living/carbon/brain/caught_soul/face_atom(var/atom/A) if(eyeobj) return eyeobj.face_atom(A) @@ -369,6 +384,14 @@ else return ..(direction) +/mob/living/carbon/brain/caught_soul/me_verb_subtle(message as message) + if(silent) return FALSE + soulcatcher.emote_into(message,src,eyeobj,TRUE) + +/mob/living/carbon/brain/caught_soul/whisper(message as text) + if(silent) return FALSE + soulcatcher.say_into(message,src,eyeobj,TRUE) + /mob/living/carbon/brain/caught_soul/say(var/message, var/datum/language/speaking = null, var/whispering = 0) if(silent) return FALSE soulcatcher.say_into(message,src,eyeobj)