diff --git a/code/_globalvars/lists/mobs.dm b/code/_globalvars/lists/mobs.dm
index 08b8ce9b6cb8..a36e995c9a5f 100644
--- a/code/_globalvars/lists/mobs.dm
+++ b/code/_globalvars/lists/mobs.dm
@@ -27,6 +27,8 @@ GLOBAL_LIST_INIT(simple_animals, list(list(),list(),list(),list())) // One for e
GLOBAL_LIST_EMPTY(spidermobs) //all sentient spider mobs
GLOBAL_LIST_EMPTY(bots_list)
GLOBAL_LIST_EMPTY(aiEyes)
+GLOBAL_LIST_EMPTY(suit_sensors_list) //all people with suit sensors on
+GLOBAL_LIST_EMPTY(nanite_sensors_list) //app people with nanite monitoring program
GLOBAL_LIST_EMPTY(new_player_list) //all /mob/dead/new_player, in theory all should have clients and those that don't are in the process of spawning and get deleted when done.
///underages who have been reported to security for trying to buy things they shouldn't, so they can't spam
GLOBAL_LIST_EMPTY(narcd_underages)
diff --git a/code/game/machinery/computer/crew.dm b/code/game/machinery/computer/crew.dm
index 10720aa19b4f..9710e45b7049 100644
--- a/code/game/machinery/computer/crew.dm
+++ b/code/game/machinery/computer/crew.dm
@@ -16,7 +16,7 @@
/obj/machinery/computer/crew/syndie
icon_keyboard = "syndie_key"
-/obj/machinery/computer/crew/interact(mob/user)
+/obj/machinery/computer/crew/ui_interact(mob/user)
GLOB.crewmonitor.show(user,src)
GLOBAL_DATUM_INIT(crewmonitor, /datum/crewmonitor, new)
@@ -67,6 +67,7 @@ GLOBAL_DATUM_INIT(crewmonitor, /datum/crewmonitor, new)
jobs["Clerk"] = 71 //Yogs: Added IDs for this job, also need to skip 70 or it clerk would be considered a head job
jobs["Tourist"] = 72 //Yogs: Added IDs for this job
jobs["Artist"] = 73 //Yogs: Added IDs for this job
+ jobs["Assistant"] = 74 //Yogs: Assistants are with the other civilians
jobs["Admiral"] = 200
jobs["CentCom Commander"] = 210
jobs["Custodian"] = 211
@@ -76,7 +77,6 @@ GLOBAL_DATUM_INIT(crewmonitor, /datum/crewmonitor, new)
jobs["Security Response Officer"] = 221
jobs["Engineer Response Officer"] = 222
jobs["Medical Response Officer"] = 223
- jobs["Assistant"] = 999 //Unknowns/custom jobs should appear after civilians, and before assistants
src.jobs = jobs
@@ -128,18 +128,58 @@ GLOBAL_DATUM_INIT(crewmonitor, /datum/crewmonitor, new)
var/pos_y
var/life_status
- for(var/mob/living/carbon/human/H in GLOB.carbon_list)
+ for(var/i in GLOB.nanite_sensors_list)
+ var/mob/living/carbon/human/H = i
var/nanite_sensors = FALSE
if(H in SSnanites.nanite_monitored_mobs)
nanite_sensors = TRUE
// Check if their z-level is correct and if they are wearing a uniform.
// Accept H.z==0 as well in case the mob is inside an object.
- if ((H.z == 0 || H.z == z) && (istype(H.w_uniform, /obj/item/clothing/under) || nanite_sensors))
+
+ if(((H.z == 0 || H.z == z || (is_station_level(H.z) && is_station_level(z))) && (nanite_sensors)))
+
+ pos = H.z == 0 || (nanite_sensors) ? get_turf(H) : null
+
+ // Special case: If the mob is inside an object confirm the z-level on turf level.
+ if (H.z == 0 && (!pos || pos.z != z))
+ continue
+
+ I = H.wear_id ? H.wear_id.GetID() : null
+
+ if (I)
+ name = I.registered_name
+ assignment = I.assignment
+ ijob = jobs[I.assignment]
+ else
+ name = "Unknown"
+ assignment = ""
+ ijob = 80
+
+ life_status = (!H.stat ? TRUE : FALSE)
+
+ oxydam = round(H.getOxyLoss(),1)
+ toxdam = round(H.getToxLoss(),1)
+ burndam = round(H.getFireLoss(),1)
+ brutedam = round(H.getBruteLoss(),1)
+
+ if (!pos)
+ pos = get_turf(H)
+ area = get_area_name(H, TRUE)
+ pos_x = pos.x
+ pos_y = pos.y
+
+ results[++results.len] = list("name" = name, "assignment" = assignment, "ijob" = ijob, "life_status" = life_status, "oxydam" = oxydam, "toxdam" = toxdam, "burndam" = burndam, "brutedam" = brutedam, "area" = area, "pos_x" = pos_x, "pos_y" = pos_y, "can_track" = H.can_track(null))
+
+ for(var/i in GLOB.suit_sensors_list)
+ var/mob/living/carbon/human/H = i
+ // Check if their z-level is correct and if they are wearing a uniform.
+ // Accept H.z==0 as well in case the mob is inside an object. Nanite sensors come before normal sensors.
+ if((H.z == 0 || H.z == z || (is_station_level(H.z) && is_station_level(z))) && (istype(H.w_uniform, /obj/item/clothing/under)) && !(H in GLOB.nanite_sensors_list))
U = H.w_uniform
// Are the suit sensors on?
- if (nanite_sensors || ((U.has_sensor > 0) && U.sensor_mode))
- pos = H.z == 0 || (nanite_sensors || U.sensor_mode == SENSOR_COORDS) ? get_turf(H) : null
+ if ((U.has_sensor > 0) && U.sensor_mode)
+ pos = H.z == 0 || (U.sensor_mode == SENSOR_COORDS) ? get_turf(H) : null
// Special case: If the mob is inside an object confirm the z-level on turf level.
if (H.z == 0 && (!pos || pos.z != z))
@@ -156,12 +196,12 @@ GLOBAL_DATUM_INIT(crewmonitor, /datum/crewmonitor, new)
assignment = ""
ijob = 80
- if (nanite_sensors || U.sensor_mode >= SENSOR_LIVING)
+ if (U.sensor_mode >= SENSOR_LIVING)
life_status = (!H.stat ? TRUE : FALSE)
else
life_status = null
- if (nanite_sensors || U.sensor_mode >= SENSOR_VITALS)
+ if (U.sensor_mode >= SENSOR_VITALS)
oxydam = round(H.getOxyLoss(),1)
toxdam = round(H.getToxLoss(),1)
burndam = round(H.getFireLoss(),1)
@@ -172,7 +212,7 @@ GLOBAL_DATUM_INIT(crewmonitor, /datum/crewmonitor, new)
burndam = null
brutedam = null
- if (nanite_sensors || U.sensor_mode >= SENSOR_COORDS)
+ if (U.sensor_mode >= SENSOR_COORDS)
if (!pos)
pos = get_turf(H)
area = get_area_name(H, TRUE)
diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm
index d9996a130c29..a352e52ad371 100644
--- a/code/modules/clothing/clothing.dm
+++ b/code/modules/clothing/clothing.dm
@@ -214,7 +214,7 @@ BLIND // can't see anything
to_chat(usr, "You have moved too far away!")
return
sensor_mode = modes.Find(switchMode) - 1
-
+ set_sensor_glob()
if (src.loc == usr)
switch(sensor_mode)
if(0)
@@ -336,3 +336,17 @@ BLIND // can't see anything
deconstruct(FALSE)
else
..()
+
+/obj/item/clothing/proc/set_sensor_glob()
+ var/mob/living/carbon/human/H = src.loc
+
+ if (istype(H.w_uniform, /obj/item/clothing/under))
+ var/obj/item/clothing/under/U = H.w_uniform
+ if (U.has_sensor && U.sensor_mode && U.has_sensor != BROKEN_SENSORS)
+ GLOB.suit_sensors_list |= H
+
+ else
+ GLOB.suit_sensors_list -= H
+
+ else
+ GLOB.suit_sensors_list -= H
diff --git a/code/modules/clothing/under/_under.dm b/code/modules/clothing/under/_under.dm
index 8f2eaa4b6147..f45f1aca1924 100644
--- a/code/modules/clothing/under/_under.dm
+++ b/code/modules/clothing/under/_under.dm
@@ -101,6 +101,7 @@
attached_accessory.on_uniform_equip(src, user)
if(attached_accessory.above_suit)
H.update_inv_wear_suit()
+ set_sensor_glob()
/obj/item/clothing/under/dropped(mob/user)
if(attached_accessory)
@@ -109,7 +110,7 @@
var/mob/living/carbon/human/H = user
if(attached_accessory.above_suit)
H.update_inv_wear_suit()
-
+ set_sensor_glob()
..()
/obj/item/clothing/under/proc/attach_accessory(obj/item/I, mob/user, notifyAttach = 1)
diff --git a/code/modules/research/nanites/nanite_programs/utility.dm b/code/modules/research/nanites/nanite_programs/utility.dm
index bb10eec4aad0..8d6ff5019fba 100644
--- a/code/modules/research/nanites/nanite_programs/utility.dm
+++ b/code/modules/research/nanites/nanite_programs/utility.dm
@@ -82,11 +82,19 @@
/datum/nanite_program/monitoring/enable_passive_effect()
. = ..()
SSnanites.nanite_monitored_mobs |= host_mob
+ if(ishuman(host_mob))
+ var/mob/living/carbon/human/H = host_mob
+ if(!(H in GLOB.nanite_sensors_list))
+ GLOB.nanite_sensors_list |= H
host_mob.hud_set_nanite_indicator()
/datum/nanite_program/monitoring/disable_passive_effect()
. = ..()
SSnanites.nanite_monitored_mobs -= host_mob
+ if(ishuman(host_mob))
+ var/mob/living/carbon/human/H = host_mob
+ GLOB.nanite_sensors_list -= H
+
host_mob.hud_set_nanite_indicator()
/datum/nanite_program/triggered/self_scan
@@ -407,4 +415,4 @@
button_icon_state = "[_icon]_[_color]"
/datum/action/innate/nanite_button/Activate()
- program.press()
\ No newline at end of file
+ program.press()
diff --git a/tgui/packages/tgui/constants.js b/tgui/packages/tgui/constants.js
index 26424dae50f3..292f7e5eff51 100644
--- a/tgui/packages/tgui/constants.js
+++ b/tgui/packages/tgui/constants.js
@@ -19,8 +19,8 @@ export const COLORS = {
medbay: '#3498db',
science: '#9b59b6',
engineering: '#f1c40f',
- cargo: '#f39c12',
- civilian: '#535353', // Yogs: Added new civilian color
+ cargo: '#d4680d', // Yogs: Added new cargo color
+ civilian: '#b4b4b4', // Yogs: Added new civilian color
centcom: '#00c100',
other: '#c38312',
},
diff --git a/tgui/packages/tgui/interfaces/CrewConsole.js b/tgui/packages/tgui/interfaces/CrewConsole.js
index a607024f0e4e..341a170522d2 100644
--- a/tgui/packages/tgui/interfaces/CrewConsole.js
+++ b/tgui/packages/tgui/interfaces/CrewConsole.js
@@ -71,7 +71,7 @@ export const CrewConsole = (props, context) => {
return (
@@ -109,7 +109,7 @@ export const CrewConsole = (props, context) => {
? healthToColor(
sensor.oxydam,
sensor.toxdam,
- sensor.brutedam,
+ sensor.burndam,
sensor.brutedam) : (
sensor.life_status
? HEALTH_COLOR_BY_LEVEL[0]