diff --git a/code/modules/mob/living/carbon/brain/brain.dm b/code/modules/mob/living/carbon/brain/brain.dm
index e700c6fad4..230b7736f2 100644
--- a/code/modules/mob/living/carbon/brain/brain.dm
+++ b/code/modules/mob/living/carbon/brain/brain.dm
@@ -55,4 +55,7 @@
canmove = 1
use_me = 1 //If it can move, let it emote
else canmove = 0
- return canmove
\ No newline at end of file
+ return canmove
+
+/mob/living/carbon/brain/binarycheck()
+ return istype(loc, /obj/item/device/mmi/digital)
diff --git a/code/modules/mob/living/carbon/brain/say.dm b/code/modules/mob/living/carbon/brain/say.dm
index ecfb825684..e602916d8c 100644
--- a/code/modules/mob/living/carbon/brain/say.dm
+++ b/code/modules/mob/living/carbon/brain/say.dm
@@ -2,8 +2,8 @@
/mob/living/carbon/brain/say(var/message)
if (silent)
return
-
- if(!(container && istype(container, /obj/item/device/mmi)))
+
+ if(!(container && istype(container, /obj/item/device/mmi)))
return //No MMI, can't speak, bucko./N
else
var/datum/language/speaking = parse_language(message)
@@ -24,8 +24,13 @@
return
else
message = Gibberish(message, (emp_damage*6))//scrambles the message, gets worse when emp_damage is higher
+
+ if(speaking && speaking.flags & HIVEMIND)
+ speaking.broadcast(src,trim(message))
+ return
+
if(istype(container, /obj/item/device/mmi/radio_enabled))
var/obj/item/device/mmi/radio_enabled/R = container
if(R.radio)
spawn(0) R.radio.hear_talk(src, trim(sanitize(message)), verb, speaking)
- ..()
\ No newline at end of file
+ ..(trim(message), speaking, verb)
diff --git a/code/modules/power/sensors/sensor_monitoring.dm b/code/modules/power/sensors/sensor_monitoring.dm
index 353eb76115..9e6d4e2d88 100644
--- a/code/modules/power/sensors/sensor_monitoring.dm
+++ b/code/modules/power/sensors/sensor_monitoring.dm
@@ -15,8 +15,9 @@
anchored = 1.0
circuit = /obj/item/weapon/circuitboard/powermonitor
var/list/grid_sensors = null
- var/update_counter = 0 // Next icon update when this reaches 5 (ie every 5 ticks)
- var/active_sensor = null
+ var/list/sensors_by_powernet = null
+ var/update_counter = 0 // Next icon update when this reaches 5 (ie every 5 ticks)
+ var/active_sensor = null //name_tag of the currently selected sensor
use_power = 1
idle_power_usage = 300
active_power_usage = 300
@@ -34,12 +35,19 @@
/obj/machinery/computer/power_monitor/proc/refresh_sensors()
grid_sensors = list()
+ sensors_by_powernet = list()
for(var/obj/machinery/power/sensor/S in machines)
if((S.loc.z == src.loc.z) || (S.long_range)) // Consoles have range on their Z-Level. Sensors with long_range var will work between Z levels.
if(S.name_tag == "#UNKN#") // Default name. Shouldn't happen!
error("Powernet sensor with unset ID Tag! [S.x]X [S.y]Y [S.z]Z")
else
- grid_sensors += S
+ grid_sensors[S.name_tag] = S
+
+ var/pnet = (S.powernet)? S.powernet : "none"
+ if (pnet in sensors_by_powernet)
+ sensors_by_powernet[pnet] += S
+ else
+ sensors_by_powernet[pnet] = list(S)
/obj/machinery/computer/power_monitor/attack_ai(mob/user)
@@ -75,13 +83,10 @@
t += "
Close
| Power Network | Sensors |
|---|---|
| [uppertext("\ref[pnet]")] | "
+ for(var/obj/machinery/power/sensor/S in sensors_by_powernet[pnet])
+ //really, if one of them has a warning, they all should - but the interface doesn't guarantee that so whatever
+ if(S.check_grid_warning()) // Display grids with active alarms in bold text
+ html += "[S.name] " + else + html += "[S.name] " + html += " |
| \[N/A\] | "
+ for(var/obj/machinery/power/sensor/S in sensors_by_powernet["none"])
+ html += "[S.name] " + html += " |