From 5024e900f76c5defc5558cdec94274e6bd918359 Mon Sep 17 00:00:00 2001 From: Ghommie <42542238+Ghommie@users.noreply.github.com> Date: Fri, 6 Dec 2019 02:45:55 +0100 Subject: [PATCH] Ooow fuck. --- code/__DEFINES/combat.dm | 1 + code/modules/mob/mob.dm | 148 ++++++++++++++++++++----------------- code/modules/mob/say_vr.dm | 4 +- 3 files changed, 84 insertions(+), 69 deletions(-) diff --git a/code/__DEFINES/combat.dm b/code/__DEFINES/combat.dm index 3664da4a5d..2d40d91023 100644 --- a/code/__DEFINES/combat.dm +++ b/code/__DEFINES/combat.dm @@ -98,6 +98,7 @@ //the define for visible message range in combat #define COMBAT_MESSAGE_RANGE 3 +#define DEFAULT_MESSAGE_RANGE 7 //Shove knockdown lengths (deciseconds) #define SHOVE_KNOCKDOWN_SOLID 30 diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 8682e77ed5..d4528fb91f 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -104,87 +104,101 @@ if(stat == UNCONSCIOUS) if(type & MSG_AUDIBLE) //audio to_chat(src, "... You can almost hear something ...") - else - to_chat(src, msg) + return + to_chat(src, msg) -// Show a message to all player mobs who sees this atom -// Show a message to the src mob (if the src is a mob) -// Use for atoms performing visible actions -// message is output to anyone who can see, e.g. "The [src] does something!" -// self_message (optional) is what the src mob sees e.g. "You do something!" -// blind_message (optional) is what blind people will hear e.g. "You hear something!" -// vision_distance (optional) define how many tiles away the message can be seen. -// ignored_mob (optional) doesn't show any message to a given mob if TRUE. - -/atom/proc/visible_message(message, self_message, blind_message, vision_distance, list/ignored_mobs, no_ghosts = FALSE) +/** + * Generate a visible message from this atom + * + * Show a message to all player mobs who sees this atom + * + * Show a message to the src mob (if the src is a mob) + * + * Use for atoms performing visible actions + * + * message is output to anyone who can see, e.g. "The [src] does something!" + * + * Vars: + * * self_message (optional) is what the src mob sees e.g. "You do something!" + * * blind_message (optional) is what blind people will hear e.g. "You hear something!" + * * vision_distance (optional) define how many tiles away the message can be seen. + * * ignored_mobs (optional) doesn't show any message to any given mob in the list. + */ +/atom/proc/visible_message(message, self_message, blind_message, vision_distance = DEFAULT_MESSAGE_RANGE, list/ignored_mobs) var/turf/T = get_turf(src) if(!T) return + var/list/hearers = get_hearers_in_view(vision_distance, src) //caches the hearers and then removes ignored mobs. + if(!length(hearers)) + return if(!islist(ignored_mobs)) ignored_mobs = list(ignored_mobs) - var/range = 7 - if(vision_distance) - range = vision_distance - for(var/mob/M in get_hearers_in_view(range, src)) + hearers -= ignored_mobs + if(self_message) + hearers -= src + for(var/mob/M in hearers) if(!M.client) continue - if(M in ignored_mobs) - continue + //This entire if/else chain could be in two lines but isn't for readibilties sake. var/msg = message - if(isobserver(M) && no_ghosts) + //CITADEL EDIT, required for vore code to remove (T != loc && T != src)) as a check + if(M.see_invisible[message]" if(emote_type == EMOTE_AUDIBLE) - user.audible_message(message=message,hearing_distance=1, no_ghosts = TRUE) + user.audible_message(message=message,hearing_distance=1, ignored_mobs = GLOB.dead_mob_list) else - user.visible_message(message=message,self_message=message,vision_distance=1, no_ghosts = TRUE) + user.visible_message(message=message,self_message=message,vision_distance=1, ignored_mobs = GLOB.dead_mob_list) log_emote("[key_name(user)] : (SUBTLER) [message]") message = null