diff --git a/modular_skyrat/modules/verbs/code/subtle.dm b/modular_skyrat/modules/verbs/code/subtle.dm index 0b946ccf66f..6efa131203e 100644 --- a/modular_skyrat/modules/verbs/code/subtle.dm +++ b/modular_skyrat/modules/verbs/code/subtle.dm @@ -1,3 +1,9 @@ +#define SUBTLE_DEFAULT_DISTANCE 1 +#define SUBTLE_SAME_TILE_DISTANCE 0 + +#define SUBTLE_ONE_TILE_TEXT "1-Tile Range" +#define SUBTLE_SAME_TILE_TEXT "Same Tile" + /datum/emote/living/subtle key = "subtle" key_third_person = "subtle" @@ -13,6 +19,9 @@ return FALSE /datum/emote/living/subtle/run_emote(mob/user, params, type_override = null) + if(!can_run_emote(user)) + to_chat(user, span_warning("You can't emote at this time.")) + return FALSE var/subtle_message var/subtle_emote = params if(is_banned_from(user, "emote")) @@ -22,17 +31,8 @@ to_chat(user, "You cannot send IC messages (muted).") return FALSE else if(!params) - subtle_emote = stripped_multiline_input(user, "Choose an emote to display.", "Subtle", null, MAX_MESSAGE_LEN) + subtle_emote = tgui_input_text(user, "Choose an emote to display.", "Subtle", null, MAX_MESSAGE_LEN, TRUE) if(subtle_emote && !check_invalid(user, subtle_emote)) - var/type = input("Is this a visible or hearable emote?") as null|anything in list("Visible", "Hearable") - switch(type) - if("Visible") - emote_type = EMOTE_VISIBLE - if("Hearable") - emote_type = EMOTE_AUDIBLE - else - alert("Unable to use this emote, must be either hearable or visible.") - return subtle_message = subtle_emote else return FALSE @@ -40,8 +40,9 @@ subtle_message = params if(type_override) emote_type = type_override - . = TRUE + if(!can_run_emote(user)) + to_chat(user, span_warning("You can't emote at this time.")) return FALSE var/prefix_log_message = "(SUBTLE) [subtle_message]" @@ -51,17 +52,16 @@ subtle_message = span_emote("[user][space][user.say_emphasis(subtle_message)]") - for(var/mob/ghosts in GLOB.dead_mob_list) - if(!ghosts.client || isnewplayer(ghosts)) - continue - var/their_turf = get_turf(src) - if(ghosts.stat == DEAD && ghosts.client && (ghosts.client.prefs.chat_toggles & CHAT_GHOSTSIGHT) && !(ghosts in viewers(their_turf, null))) - ghosts.show_message(subtle_message) + var/list/viewers = get_hearers_in_view(SUBTLE_DEFAULT_DISTANCE, user) - if(emote_type == EMOTE_AUDIBLE) - user.audible_message(message = subtle_message, hearing_distance = 1, separation = space) - else - user.visible_message(message = subtle_message, self_message = subtle_message, vision_distance = 1, separation = space) + for(var/mob/ghost as anything in GLOB.dead_mob_list) + if((ghost.client?.prefs.chat_toggles & CHAT_GHOSTSIGHT) && !(ghost in viewers)) + ghost.show_message(subtle_message) + + for(var/mob/reciever in viewers) + reciever.show_message(subtle_message, alt_msg = subtle_message) + + return TRUE /* * SUBTLE 2: NO GHOST BOOGALOO @@ -83,35 +83,46 @@ return FALSE /datum/emote/living/subtler/run_emote(mob/user, params, type_override = null) + if(!can_run_emote(user)) + to_chat(user, span_warning("You can't emote at this time.")) + return FALSE var/subtler_message var/subtler_emote = params + var/mob/target if(is_banned_from(user, "emote")) - to_chat(user, "You cannot send subtle emotes (banned).") + to_chat(user, span_warning("You cannot send subtle emotes (banned).")) return FALSE else if(user.client && user.client.prefs.muted & MUTE_IC) - to_chat(user, "You cannot send IC messages (muted).") + to_chat(user, span_warning("You cannot send IC messages (muted).")) return FALSE - else if(!params) - subtler_emote = stripped_multiline_input(user, "Choose an emote to display.", "Subtler" , null, MAX_MESSAGE_LEN) + else if(!subtler_emote) + subtler_emote = tgui_input_text(user, "Choose an emote to display.", "Subtler" , null, MAX_MESSAGE_LEN, TRUE) if(subtler_emote && !check_invalid(user, subtler_emote)) - var/type = input("Is this a visible or hearable emote?") as null|anything in list("Visible", "Hearable") - switch(type) - if("Visible") - emote_type = EMOTE_VISIBLE - if("Hearable") - emote_type = EMOTE_AUDIBLE - else - alert("Unable to use this emote, must be either hearable or visible.") - return + var/list/in_view = get_hearers_in_view(1, user) + in_view -= GLOB.dead_mob_list + in_view.Remove(user) + + for(var/mob/mob_in_view as anything in in_view) + if(!istype(mob_in_view)) + in_view.Remove(mob_in_view) + var/list/targets = list(SUBTLE_ONE_TILE_TEXT, SUBTLE_SAME_TILE_TEXT) + in_view + target = tgui_input_list(user, "Pick a target", "Target Selection", targets) + switch(target) + if(SUBTLE_ONE_TILE_TEXT) + target = SUBTLE_DEFAULT_DISTANCE + if(SUBTLE_SAME_TILE_TEXT) + target = SUBTLE_SAME_TILE_DISTANCE subtler_message = subtler_emote else return FALSE else - subtler_message = params + target = SUBTLE_DEFAULT_DISTANCE + subtler_message = subtler_emote if(type_override) emote_type = type_override - . = TRUE + if(!can_run_emote(user)) + to_chat(user, span_warning("You can't emote at this time.")) return FALSE user.log_message(subtler_message, LOG_SUBTLER) @@ -120,10 +131,18 @@ subtler_message = span_emote("[user][space][user.say_emphasis(subtler_message)]") - if(emote_type == EMOTE_AUDIBLE) - user.audible_message_subtler(message = subtler_message, hearing_distance = 1, ignored_mobs = GLOB.dead_mob_list, separation = space) + if(istype(target)) + user.show_message(subtler_message, alt_msg = subtler_message) + if(get_dist(user.loc, target.loc) <= SUBTLE_DEFAULT_DISTANCE) + target.show_message(subtler_message, alt_msg = subtler_message) + else + to_chat(user, span_warning("Your emote was unable to be sent to your target: Too far away.")) else - user.visible_message(message = subtler_message, self_message = subtler_message, vision_distance = 1, ignored_mobs = GLOB.dead_mob_list, separation = space) + var/ghostless = get_hearers_in_view(target, user) - GLOB.dead_mob_list + for(var/mob/reciever in ghostless) + reciever.show_message(subtler_message, alt_msg = subtler_message) + + return TRUE /* * VERB CODE @@ -155,16 +174,8 @@ return usr.emote("subtler") -// This is bad code. -/atom/proc/audible_message_subtler(message, deaf_message, hearing_distance = DEFAULT_MESSAGE_RANGE, list/ignored_mobs, self_message, audible_message_flags = NONE, separation = " ") - var/list/hearers = get_hearers_in_view(hearing_distance, src) - if(self_message) - hearers -= src - hearers -= ignored_mobs - var/raw_msg = message - if(audible_message_flags & EMOTE_MESSAGE) - message = "[src][separation][message]" - for(var/mob/listener in hearers) - if(audible_message_flags & EMOTE_MESSAGE && runechat_prefs_check(listener, audible_message_flags) && listener.can_hear()) - listener.create_chat_message(src, raw_message = raw_msg, runechat_flags = audible_message_flags) - listener.show_message(message, MSG_AUDIBLE, deaf_message, MSG_VISUAL) +#undef SUBTLE_DEFAULT_DISTANCE +#undef SUBTLE_SAME_TILE_DISTANCE + +#undef SUBTLE_ONE_TILE_TEXT +#undef SUBTLE_SAME_TILE_TEXT