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 += "" for(var/datum/data/record/t in GLOB.data_core.general) - dat += "" + dat += "" dat += "
NamePosition
[t.fields["name"]][t.fields["rank"]]
[t.fields["name"]][t.fields["rank"]][t.fields["rank"] != t.fields["trim"] ? " ([t.fields["trim"]])" : ""]
" 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)