diff --git a/code/datums/cache/crew.dm b/code/datums/cache/crew.dm
index f92bab9cf7a..84308dd4262 100644
--- a/code/datums/cache/crew.dm
+++ b/code/datums/cache/crew.dm
@@ -1,5 +1,8 @@
GLOBAL_DATUM_INIT(crew_repository, /datum/repository/crew, new())
+/datum/repository/crew
+ var/static/list/bold_jobs
+
/datum/repository/crew/New()
cache_data = list()
..()
@@ -18,6 +21,13 @@ GLOBAL_DATUM_INIT(crew_repository, /datum/repository/crew, new())
if(world.time < cache_entry.timestamp)
return cache_entry.data
+ // Initialize the jobs here because in New(), GLOB.command_positions may not be inited yet
+ if(!bold_jobs)
+ bold_jobs = list()
+ bold_jobs += GLOB.command_positions
+ bold_jobs += get_all_centcom_jobs()
+ bold_jobs += list("Nanotrasen Representative", "Blueshield", "Magistrate")
+
for(var/thing in GLOB.human_list)
var/mob/living/carbon/human/H = thing
var/obj/item/clothing/under/C = H.w_uniform
@@ -32,11 +42,13 @@ GLOBAL_DATUM_INIT(crew_repository, /datum/repository/crew, new())
crewmemberData["name"] = H.get_authentification_name(if_no_id="Unknown")
crewmemberData["rank"] = H.get_authentification_rank(if_no_id="Unknown", if_no_job="No Job")
crewmemberData["assignment"] = H.get_assignment(if_no_id="Unknown", if_no_job="No Job")
+ crewmemberData["is_command"] = (crewmemberData["assignment"] in bold_jobs)
if(C.sensor_mode >= SUIT_SENSOR_BINARY)
- crewmemberData["dead"] = H.stat > UNCONSCIOUS
+ crewmemberData["dead"] = H.stat == DEAD
if(C.sensor_mode >= SUIT_SENSOR_VITAL)
+ crewmemberData["stat"] = H.stat
crewmemberData["oxy"] = round(H.getOxyLoss(), 1)
crewmemberData["tox"] = round(H.getToxLoss(), 1)
crewmemberData["fire"] = round(H.getFireLoss(), 1)
diff --git a/code/game/machinery/computer/camera.dm b/code/game/machinery/computer/camera.dm
index 3f8fc080bf8..cfe82db29e8 100644
--- a/code/game/machinery/computer/camera.dm
+++ b/code/game/machinery/computer/camera.dm
@@ -130,6 +130,10 @@
// adding a template with the key "mapHeader" replaces the map header content
ui.add_template("mapHeader", "sec_camera_map_header.tmpl")
+ // Send nanomaps
+ var/datum/asset/nanomaps = get_asset_datum(/datum/asset/simple/nanomaps)
+ nanomaps.send(user)
+
ui.open()
/obj/machinery/computer/security/ui_data(mob/user, ui_key = "main", datum/topic_state/state = GLOB.default_state)
diff --git a/code/modules/client/asset_cache.dm b/code/modules/client/asset_cache.dm
index 8d8d83b4ae2..e39c62e5cd7 100644
--- a/code/modules/client/asset_cache.dm
+++ b/code/modules/client/asset_cache.dm
@@ -262,7 +262,6 @@ GLOBAL_LIST_EMPTY(asset_datums)
var/list/common_dirs = list(
"nano/assets/",
"nano/codemirror/",
- "nano/images/",
"nano/layouts/"
)
var/list/uncommon_dirs = list(
@@ -376,3 +375,14 @@ GLOBAL_LIST_EMPTY(asset_datums)
"font-awesome.css" = 'html/font-awesome/css/all.min.css',
"v4shim.css" = 'html/font-awesome/css/v4-shims.min.css'
)
+
+// Nanomaps
+/datum/asset/simple/nanomaps
+ // It REALLY doesnt matter too much if these arent up to date
+ // They are relatively big
+ verify = FALSE
+ assets = list(
+ "Cyberiad_nanomap_z1.png" = 'icons/_nanomaps/Cyberiad_nanomap_z1.png',
+ "Delta_nanomap_z1.png" = 'icons/_nanomaps/Delta_nanomap_z1.png',
+ "MetaStation_nanomap_z1.png" = 'icons/_nanomaps/MetaStation_nanomap_z1.png',
+ )
diff --git a/code/modules/client/client procs.dm b/code/modules/client/client procs.dm
index f8ef211d5de..ea099ea53b3 100644
--- a/code/modules/client/client procs.dm
+++ b/code/modules/client/client procs.dm
@@ -974,6 +974,9 @@
var/datum/asset/tgui_assets = get_asset_datum(/datum/asset/simple/tgui)
tgui_assets.register()
+ var/datum/asset/nanomaps = get_asset_datum(/datum/asset/simple/nanomaps)
+ nanomaps.register()
+
// Clear the user's cache so they get resent.
// This is not fully clearing their BYOND cache, just their assets sent from the server this round
cache = list()
diff --git a/code/modules/nano/modules/atmos_control.dm b/code/modules/nano/modules/atmos_control.dm
index 2c74a1ce844..273b0bfc137 100644
--- a/code/modules/nano/modules/atmos_control.dm
+++ b/code/modules/nano/modules/atmos_control.dm
@@ -34,6 +34,11 @@
ui = new(user, src, ui_key, "atmos_control.tmpl", src.name, 900, 800, state = state)
ui.add_template("mapContent", "atmos_control_map_content.tmpl")
ui.add_template("mapHeader", "atmos_control_map_header.tmpl")
+
+ // Send nanomaps
+ var/datum/asset/nanomaps = get_asset_datum(/datum/asset/simple/nanomaps)
+ nanomaps.send(user)
+
ui.set_show_map(1)
ui.open()
ui.set_auto_update(1)
diff --git a/code/modules/tgui/modules/crew_monitor.dm b/code/modules/tgui/modules/crew_monitor.dm
index f1da4ed89ba..a33a1d141f9 100644
--- a/code/modules/tgui/modules/crew_monitor.dm
+++ b/code/modules/tgui/modules/crew_monitor.dm
@@ -23,9 +23,12 @@
/datum/tgui_module/crew_monitor/tgui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/tgui_state/state = GLOB.tgui_default_state)
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
if(!ui)
- // The 557 may seem random, but its the perfectsize for margins on the nanomap
- ui = new(user, src, ui_key, "CrewMonitor", name, 1400, 557, master_ui, state)
- ui.autoupdate = TRUE
+ ui = new(user, src, ui_key, "CrewMonitor", name, 800, 600, master_ui, state)
+
+ // Send nanomaps
+ var/datum/asset/nanomaps = get_asset_datum(/datum/asset/simple/nanomaps)
+ nanomaps.send(user)
+
ui.open()
diff --git a/icons/_nanomaps/Cyberiad_nanomap_z1.png b/icons/_nanomaps/Cyberiad_nanomap_z1.png
new file mode 100644
index 00000000000..fb87632863e
Binary files /dev/null and b/icons/_nanomaps/Cyberiad_nanomap_z1.png differ
diff --git a/icons/_nanomaps/Delta_nanomap_z1.png b/icons/_nanomaps/Delta_nanomap_z1.png
new file mode 100644
index 00000000000..23a31d17241
Binary files /dev/null and b/icons/_nanomaps/Delta_nanomap_z1.png differ
diff --git a/icons/_nanomaps/MetaStation_nanomap_z1.png b/icons/_nanomaps/MetaStation_nanomap_z1.png
new file mode 100644
index 00000000000..77a34cd046a
Binary files /dev/null and b/icons/_nanomaps/MetaStation_nanomap_z1.png differ
diff --git a/nano/images/Cyberiad_nanomap_z1.png b/nano/images/Cyberiad_nanomap_z1.png
deleted file mode 100644
index 126f9021dac..00000000000
Binary files a/nano/images/Cyberiad_nanomap_z1.png and /dev/null differ
diff --git a/nano/images/Delta_nanomap_z1.png b/nano/images/Delta_nanomap_z1.png
deleted file mode 100644
index f0f4e31bca3..00000000000
Binary files a/nano/images/Delta_nanomap_z1.png and /dev/null differ
diff --git a/nano/images/MetaStation_nanomap_z1.png b/nano/images/MetaStation_nanomap_z1.png
deleted file mode 100644
index 280e28a2bc3..00000000000
Binary files a/nano/images/MetaStation_nanomap_z1.png and /dev/null differ
diff --git a/tgui/packages/tgui/components/NanoMap.js b/tgui/packages/tgui/components/NanoMap.js
index cca06ea4e9d..8f3c9445e12 100644
--- a/tgui/packages/tgui/components/NanoMap.js
+++ b/tgui/packages/tgui/components/NanoMap.js
@@ -1,45 +1,179 @@
+import { Component } from 'inferno';
import { Box, Icon, Tooltip } from '.';
import { useBackend } from "../backend";
+import { LabeledList } from './LabeledList';
+import { Slider } from './Slider';
-export const NanoMap = (props, context) => {
- const { config } = useBackend(context);
- const { onClick } = props;
- return (
-