diff --git a/code/datums/datacore.dm b/code/datums/datacore.dm
index 3038044d269..16d3ceb63b5 100644
--- a/code/datums/datacore.dm
+++ b/code/datums/datacore.dm
@@ -137,10 +137,11 @@ GLOBAL_DATUM_INIT(data_core, /datum/datacore, new)
manifest_inject(N.new_character, N.client)
CHECK_TICK
-/datum/datacore/proc/manifest_modify(name, assignment)
+/datum/datacore/proc/manifest_modify(name, assignment, trim)
var/datum/data/record/foundrecord = find_record("name", name, GLOB.data_core.general)
if(foundrecord)
foundrecord.fields["rank"] = assignment
+ foundrecord.fields["trim"] = trim
/datum/datacore/proc/get_manifest()
@@ -153,8 +154,9 @@ GLOBAL_DATUM_INIT(data_core, /datum/datacore, new)
var/list/departments_by_type = SSjob.joinable_departments_by_type
for(var/datum/data/record/record as anything in GLOB.data_core.general)
var/name = record.fields["name"]
- var/rank = record.fields["rank"]
- var/datum/job/job = SSjob.GetJob(rank)
+ var/rank = record.fields["rank"] // user-visible job
+ var/trim = record.fields["trim"] // internal jobs by trim type
+ var/datum/job/job = SSjob.GetJob(trim)
if(!job || !(job.job_flags & JOB_CREW_MANIFEST) || !LAZYLEN(job.departments_list)) // In case an unlawful custom rank is added.
var/list/misc_list = manifest_out[DEPARTMENT_UNASSIGNED]
misc_list[++misc_list.len] = list(
@@ -243,6 +245,8 @@ GLOBAL_DATUM_INIT(data_core, /datum/datacore, new)
G.fields["id"] = id
G.fields["name"] = H.real_name
G.fields["rank"] = assignment
+ G.fields["trim"] = assignment
+ G.fields["initial_rank"] = assignment
G.fields["age"] = H.age
G.fields["species"] = H.dna.species.name
G.fields["fingerprint"] = md5(H.dna.unique_identity)
@@ -312,6 +316,8 @@ GLOBAL_DATUM_INIT(data_core, /datum/datacore, new)
L.fields["id"] = md5("[H.real_name][assignment]") //surely this should just be id, like the others?
L.fields["name"] = H.real_name
L.fields["rank"] = assignment
+ L.fields["trim"] = assignment
+ G.fields["initial_rank"] = assignment
L.fields["age"] = H.age
L.fields["gender"] = H.gender
if(H.gender == "male")
diff --git a/code/game/machinery/computer/crew.dm b/code/game/machinery/computer/crew.dm
index 227995af6c2..bb5e567727e 100644
--- a/code/game/machinery/computer/crew.dm
+++ b/code/game/machinery/computer/crew.dm
@@ -235,7 +235,9 @@ GLOBAL_DATUM_INIT(crewmonitor, /datum/crewmonitor, new)
if (id_card)
entry["name"] = id_card.registered_name
entry["assignment"] = id_card.assignment
- entry["ijob"] = jobs[id_card.assignment] //SKYRAT EDIT - ALTERNATE JOB TITLES
+ var/trim_assignment = id_card.get_trim_assignment()
+ if (jobs[trim_assignment])
+ entry["ijob"] = jobs[trim_assignment]
// Binary living/dead status
if (sensor_mode >= SENSOR_LIVING)
diff --git a/code/game/machinery/computer/security.dm b/code/game/machinery/computer/security.dm
index f236948d898..c8664b67d00 100644
--- a/code/game/machinery/computer/security.dm
+++ b/code/game/machinery/computer/security.dm
@@ -341,6 +341,7 @@
| Age: | [active1.fields["age"]] |
"}
dat += "| Species: | [active1.fields["species"]] |
"
dat += {"| Rank: | [active1.fields["rank"]] |
+ | Initial Rank: | [active1.fields["initial_rank"]] |
| Fingerprint: | [active1.fields["fingerprint"]] |
| Physical Status: | [active1.fields["p_stat"]] |
| Mental Status: | [active1.fields["m_stat"]] |
@@ -711,6 +712,8 @@ What a mess.*/
G.fields["name"] = "New Record"
G.fields["id"] = "[num2hex(rand(1, 1.6777215E7), 6)]"
G.fields["rank"] = "Unassigned"
+ G.fields["trim"] = "Unassigned"
+ G.fields["initial_rank"] = "Unassigned"
G.fields["gender"] = "Male"
G.fields["age"] = "Unknown"
G.fields["species"] = "Human"
@@ -947,8 +950,7 @@ What a mess.*/
if("Change Rank")
if(active1)
active1.fields["rank"] = strip_html(href_list["rank"])
- if(href_list["rank"] in SSjob.station_jobs)
- active1.fields["real_rank"] = href_list["real_rank"]
+ active1.fields["trim"] = active1.fields["rank"]
if("Change Criminal Status")
if(active2)
diff --git a/code/game/objects/items/cards_ids.dm b/code/game/objects/items/cards_ids.dm
index a24eae32f5f..e6e2d0cc071 100644
--- a/code/game/objects/items/cards_ids.dm
+++ b/code/game/objects/items/cards_ids.dm
@@ -613,6 +613,10 @@
name = "[name_string][assignment_string]"
+/// Returns the trim assignment name.
+/obj/item/card/id/proc/get_trim_assignment()
+ return trim?.assignment || assignment
+
/obj/item/card/id/away
name = "\proper a perfectly generic identification card"
desc = "A perfectly generic identification card. Looks like it could use some flavor."
@@ -805,6 +809,15 @@
. += mutable_appearance(trim_icon_file, trim_icon_state)
+/obj/item/card/id/advanced/get_trim_assignment()
+ if(trim_assignment_override)
+ return trim_assignment_override
+ else if(ispath(trim))
+ var/datum/id_trim/trim_singleton = SSid_access.trim_singletons_by_path[trim]
+ return trim_singleton.assignment
+
+ return ..()
+
/obj/item/card/id/advanced/silver
name = "silver identification card"
desc = "A silver card which shows honour and dedication."
diff --git a/code/modules/admin/verbs/secrets.dm b/code/modules/admin/verbs/secrets.dm
index 484702a4190..e45274ba872 100644
--- a/code/modules/admin/verbs/secrets.dm
+++ b/code/modules/admin/verbs/secrets.dm
@@ -120,7 +120,7 @@ GLOBAL_DATUM(everyone_a_traitor, /datum/everyone_is_a_traitor_controller)
var/dat = "Showing Crew Manifest.
"
dat += "| Name | Position |
"
for(var/datum/data/record/t in GLOB.data_core.general)
- dat += "| [t.fields["name"]] | [t.fields["rank"]] |
"
+ dat += "| [t.fields["name"]] | [t.fields["rank"]][t.fields["rank"] != t.fields["trim"] ? " ([t.fields["trim"]])" : ""] |
"
dat += "
"
holder << browse(dat, "window=manifest;size=440x410")
if("dna")
diff --git a/code/modules/jobs/access.dm b/code/modules/jobs/access.dm
index a01a2ea7d15..1c457ef1826 100644
--- a/code/modules/jobs/access.dm
+++ b/code/modules/jobs/access.dm
@@ -110,21 +110,7 @@
if(!id_card)
return "hudno_id"
- var/card_assignment
- if(istype(id_card, /obj/item/card/id/advanced))
- var/obj/item/card/id/advanced/advanced_id_card = id_card
- if(advanced_id_card.trim_assignment_override)
- card_assignment = advanced_id_card.trim_assignment_override
- else if(ispath(advanced_id_card.trim))
- var/datum/id_trim/trim = SSid_access.trim_singletons_by_path[advanced_id_card.trim]
- card_assignment = trim.assignment
- else
- card_assignment = advanced_id_card.trim?.assignment
- else
- card_assignment = id_card.trim?.assignment
-
- if(!card_assignment)
- card_assignment = id_card.assignment
+ var/card_assignment = id_card.get_trim_assignment()
// Is this one of the jobs with dedicated HUD icons?
if(card_assignment in SSjob.station_jobs)
diff --git a/code/modules/modular_computers/file_system/programs/card.dm b/code/modules/modular_computers/file_system/programs/card.dm
index 5d65015567c..ccd9382006e 100644
--- a/code/modules/modular_computers/file_system/programs/card.dm
+++ b/code/modules/modular_computers/file_system/programs/card.dm
@@ -144,7 +144,7 @@
if(!computer || !card_slot2)
return TRUE
if(target_id_card)
- GLOB.data_core.manifest_modify(target_id_card.registered_name, target_id_card.assignment)
+ GLOB.data_core.manifest_modify(target_id_card.registered_name, target_id_card.assignment, target_id_card.get_trim_assignment())
return card_slot2.try_eject(user)
else
var/obj/item/I = user.get_active_held_item()
diff --git a/code/modules/modular_computers/file_system/programs/robocontrol.dm b/code/modules/modular_computers/file_system/programs/robocontrol.dm
index 7fe5a09ab2a..77d9a3aea35 100644
--- a/code/modules/modular_computers/file_system/programs/robocontrol.dm
+++ b/code/modules/modular_computers/file_system/programs/robocontrol.dm
@@ -85,7 +85,7 @@
if(!computer || !card_slot)
return
if(id_card)
- GLOB.data_core.manifest_modify(id_card.registered_name, id_card.assignment)
+ GLOB.data_core.manifest_modify(id_card.registered_name, id_card.assignment, id_card.get_trim_assignment())
card_slot.try_eject(current_user)
else
playsound(get_turf(ui_host()) , 'sound/machines/buzz-sigh.ogg', 25, FALSE)