diff --git a/code/_onclick/hud/screen_object_types/ai_screen_objs.dm b/code/_onclick/hud/screen_object_types/ai_screen_objs.dm
index e2fe1eaad14..f9030324cf2 100644
--- a/code/_onclick/hud/screen_object_types/ai_screen_objs.dm
+++ b/code/_onclick/hud/screen_object_types/ai_screen_objs.dm
@@ -87,8 +87,8 @@
/obj/screen/ai/crew_manifest/Click()
if (isAI(usr))
- var/mob/living/silicon/ai/AI = usr
- AI.show_station_manifest()
+ var/windowname = open_crew_manifest(usr)
+ onclose(usr, windowname)
/obj/screen/ai/alerts
name = "Show Alerts"
diff --git a/code/controllers/subsystems/records.dm b/code/controllers/subsystems/records.dm
index 19ba7c77e6c..ec99bf2a4f9 100644
--- a/code/controllers/subsystems/records.dm
+++ b/code/controllers/subsystems/records.dm
@@ -10,6 +10,7 @@
var/list/warrants
var/list/viruses
+ var/list/nameMap
var/list/excluded_fields
var/list/localized_fields
@@ -37,6 +38,7 @@
excluded_fields = list()
localized_fields = list()
manifest = list()
+ nameMap = list("heads" = "Heads", "sec" = "Security", "eng" = "Engineering", "med" = "Medical", "sci" = "Science", "car" = "Cargo", "civ" = "Civilian", "misc" = "Miscellaneous", "bot" = "Equipment")
NEW_SS_GLOBAL(SSrecords)
var/datum/D = new()
for(var/v in D.vars)
@@ -179,21 +181,31 @@
/datum/controller/subsystem/records/proc/reset_manifest()
manifest.Cut()
-/datum/controller/subsystem/records/proc/get_manifest(var/monochrome = 0, var/OOC = 0)
- if(!manifest.len)
- get_manifest_json()
+// The one and only method for showing a pop-up crew manifest (browser) window
+/proc/open_crew_manifest(var/mob/user, var/OOC = FALSE)
+ if(!user)
+ return
+ var/const/windowname = "manifest"
+ var/dat = {"
Crew Manifest
"}
+ dat += SSrecords.get_manifest(OOC)
+ send_theme_resources(user)
+ user << browse(enable_ui_theme(user, dat), "window=[windowname];size=450x600")
+ return windowname
+
+/datum/controller/subsystem/records/proc/get_manifest(var/OOC = FALSE)
+ var/const/style = {"
+ .manifest {border-collapse: collapse; width: 100%}
+ .manifest td, th {border: 1px solid #DEF; background-color: white; color:black; padding: .25em}
+ .manifest th {height: 2em; background-color: #3F668F; color: white}
+ .manifest tr.head th {background-color: #006E7A;}
+ .manifest td:first-child {text-align: right}
+ .manifest tr.alt td {background-color: #DEF}
+ "}
var/dat = {"
-
-
- | Name | Rank | Activity |
- "}
+
+
+ | Name | Rank | Activity |
+ "}
var/even = 0
var/list/isactive = new()
for(var/mob/M in player_list)
@@ -205,7 +217,7 @@
else
isactive[M.real_name] = 0
- var/nameMap = list("heads" = "Heads", "sec" = "Security", "eng" = "Engineering", "med" = "Medical", "sci" = "Science", "car" = "Cargo", "civ" = "Civilian", "misc" = "Miscellaneous", "bot" = "Equipment")
+ var/manifest = get_manifest_list()
for(var/dep in manifest)
var/list/depI = manifest[dep]
if(depI.len > 0)
@@ -218,6 +230,18 @@
dat = replacetext(dat, "\t", "")
return dat
+/datum/controller/subsystem/records/proc/get_manifest_text()
+ var/dat = "Crew Manifest
as of [worlddate2text()] [worldtime2text()]"
+ var/manifest = get_manifest_list()
+ for(var/dep in manifest)
+ var/list/depI = manifest[dep]
+ if(depI.len > 0)
+ var/depDat
+ for(var/list/item in depI)
+ depDat += "[item["name"]] - [item["rank"]] ([item["active"]])"
+ dat += "[nameMap[dep]]
"
+ return dat
+
/datum/controller/subsystem/records/proc/get_manifest_list()
if(manifest.len)
return manifest
diff --git a/code/modules/admin/secrets/admin_secrets/show_crew_manifest.dm b/code/modules/admin/secrets/admin_secrets/show_crew_manifest.dm
index 28a1d958810..e10c55ab52f 100644
--- a/code/modules/admin/secrets/admin_secrets/show_crew_manifest.dm
+++ b/code/modules/admin/secrets/admin_secrets/show_crew_manifest.dm
@@ -5,8 +5,4 @@
. = ..()
if(!.)
return
- var/dat
- dat += "Crew Manifest
"
- dat += SSrecords.get_manifest()
-
- user << browse(dat, "window=manifest;size=370x420;can_close=1")
+ open_crew_manifest(user)
diff --git a/code/modules/mob/abstract/new_player/new_player.dm b/code/modules/mob/abstract/new_player/new_player.dm
index 687b5095d56..3bcd3683306 100644
--- a/code/modules/mob/abstract/new_player/new_player.dm
+++ b/code/modules/mob/abstract/new_player/new_player.dm
@@ -406,12 +406,7 @@ INITIALIZE_IMMEDIATE(/mob/abstract/new_player)
return new_character
/mob/abstract/new_player/proc/ViewManifest()
- var/dat = ""
- dat += "Show Crew Manifest
"
- dat += SSrecords.get_manifest(OOC = 1)
-
- send_theme_resources(src)
- src << browse(enable_ui_theme(src, dat), "window=manifest;size=370x420;can_close=1")
+ open_crew_manifest(src, OOC = TRUE)
/mob/abstract/new_player/Move()
return 0
diff --git a/code/modules/mob/abstract/observer/observer.dm b/code/modules/mob/abstract/observer/observer.dm
index bed08652bb0..af380291233 100644
--- a/code/modules/mob/abstract/observer/observer.dm
+++ b/code/modules/mob/abstract/observer/observer.dm
@@ -582,15 +582,10 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
else
return bestvent
-/mob/abstract/observer/verb/view_manfiest()
+/mob/abstract/observer/verb/view_manifest()
set name = "Show Crew Manifest"
set category = "Ghost"
-
- var/dat
- dat += "Crew Manifest
"
- dat += SSrecords.get_manifest(OOC = 1)
-
- src << browse(dat, "window=manifest;size=370x420;can_close=1")
+ open_crew_manifest(src, OOC = TRUE)
//This is called when a ghost is drag clicked to something.
/mob/abstract/observer/MouseDrop(atom/over)
diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm
index 8631e35c93c..1883321a306 100644
--- a/code/modules/mob/living/silicon/ai/ai.dm
+++ b/code/modules/mob/living/silicon/ai/ai.dm
@@ -379,7 +379,8 @@ var/list/ai_verbs_default = list(
/mob/living/silicon/ai/proc/ai_roster()
set category = "AI Commands"
set name = "Show Crew Manifest"
- show_station_manifest()
+ var/windowname = open_crew_manifest(src)
+ onclose(src, windowname)
//AI Examine code
/mob/living/silicon/ai/proc/ai_examine(atom/A as mob|obj|turf in view(src.eyeobj))
diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm
index 85a87ed21b4..2f26f195809 100644
--- a/code/modules/mob/living/silicon/robot/robot.dm
+++ b/code/modules/mob/living/silicon/robot/robot.dm
@@ -412,7 +412,8 @@
/mob/living/silicon/robot/verb/cmd_station_manifest()
set category = "Robot Commands"
set name = "Show Crew Manifest"
- show_station_manifest()
+ var/windowname = open_crew_manifest(src)
+ onclose(src, windowname)
/mob/living/silicon/robot/proc/self_diagnosis()
if(!is_component_functioning("diagnosis unit"))
@@ -1246,4 +1247,4 @@
to_chat(user, SPAN_WARNING("You fail to hack into \the [src]."))
to_chat(src, SPAN_DANGER("Hack attempt detected and thwarted. Evacuate the area immediately."))
return SMOOTH_TRUE
- return
\ No newline at end of file
+ return
diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm
index 65c1514fdaa..3fe783f6f00 100644
--- a/code/modules/mob/living/silicon/silicon.dm
+++ b/code/modules/mob/living/silicon/silicon.dm
@@ -186,15 +186,6 @@
show_malf_ai()
..()
-// this function displays the stations manifest in a separate window
-/mob/living/silicon/proc/show_station_manifest()
- var/dat
- dat += "Crew Manifest
"
- dat += SSrecords.get_manifest(1) // make it monochrome
- dat += "
"
- src << browse(dat, "window=airoster")
- onclose(src, "airoster")
-
//can't inject synths
/mob/living/silicon/can_inject(mob/user, error_msg)
if(error_msg)
diff --git a/code/modules/modular_computers/file_system/programs/command/card.dm b/code/modules/modular_computers/file_system/programs/command/card.dm
index dbcfe2d8f2b..dec506f92bc 100644
--- a/code/modules/modular_computers/file_system/programs/command/card.dm
+++ b/code/modules/modular_computers/file_system/programs/command/card.dm
@@ -149,11 +149,7 @@
else
computer.visible_message(SPAN_NOTICE("\The [computer] prints out paper."))
else
- var/contents = {"Crew Manifest
-
- [SSrecords.get_manifest(1)]
- "}
- if(!computer.nano_printer.print_text(contents,text("crew manifest ([])", worldtime2text())))
+ if(!computer.nano_printer.print_text(SSrecords.get_manifest_text(), text("crew manifest ([])", worldtime2text())))
to_chat(usr, SPAN_WARNING(">Hardware error: Printer was unable to print the file. It may be out of paper."))
return
else
@@ -239,4 +235,4 @@
id_card.access -= get_access_ids(ACCESS_TYPE_STATION|ACCESS_TYPE_CENTCOM)
/datum/computer_file/program/card_mod/proc/apply_access(var/obj/item/card/id/id_card, var/list/accesses)
- id_card.access |= accesses
\ No newline at end of file
+ id_card.access |= accesses
diff --git a/html/changelogs/amunak-crewmanifest.yml b/html/changelogs/amunak-crewmanifest.yml
new file mode 100755
index 00000000000..067296771b0
--- /dev/null
+++ b/html/changelogs/amunak-crewmanifest.yml
@@ -0,0 +1,4 @@
+author: Amunak
+delete-after: True
+changes:
+ - tweak: "Unified crew manifest pop-ups, made them all look nicer. Changed printed manifest format a bit."