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