diff --git a/code/datums/mind.dm b/code/datums/mind.dm index a0b39e4ad69..f1ab4eef1d6 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -1751,6 +1751,39 @@ to_chat(current, "You seem to have forgotten the events of the past 10 minutes or so, and your head aches a bit as if someone beat it savagely with a stick.") to_chat(current, "This means you don't remember who you were working for or what you were doing.") +/datum/mind/proc/has_normal_assigned_role() + if(!assigned_role) + return FALSE + if(assigned_role == special_role) // nukie, ninjas, wizards, whatever + return FALSE + if(assigned_role == "Assistant") // because the default assigned role is assistant :P + for(var/list/L in list(GLOB.data_core.general)) + for(var/datum/data/record/R in L) + if(R.fields["name"] == name) + return TRUE + return FALSE + return TRUE + + +/datum/mind/proc/get_assigned_role_asset() //Used in asset generation for Orbiting + var/job_icons = GLOB.joblist + var/centcom = get_all_centcom_jobs() + SPECIAL_ROLE_ERT + SPECIAL_ROLE_DEATHSQUAD + var/solgov = get_all_solgov_jobs() + var/soviet = get_all_soviet_jobs() + + if(assigned_role in centcom) //Return with the NT logo if it is a Centcom job + return "centcom" + + if(assigned_role in solgov) //Return with the SolGov logo if it is a SolGov job + return "solgov" + + if(assigned_role in soviet) //Return with the U.S.S.P logo if it is a Soviet job + return "soviet" + + if(assigned_role in job_icons) //Check if the job has a hud icon + return assigned_role + return "unknown" + //Initialisation procs /mob/proc/mind_initialize() if(mind) diff --git a/code/modules/asset_cache/assets/asset_orbit_icons.dm b/code/modules/asset_cache/assets/asset_orbit_icons.dm new file mode 100644 index 00000000000..edc7c9923e1 --- /dev/null +++ b/code/modules/asset_cache/assets/asset_orbit_icons.dm @@ -0,0 +1,12 @@ +/// Sprites for Orbit Role UI +/datum/asset/spritesheet/orbit_job + name = "orbit_job" + +/datum/asset/spritesheet/orbit_job/create_spritesheets() + var/list/states = GLOB.joblist + "prisoner" + "centcom" + "solgov" + "soviet" + "unknown" + for(var/state in states) + Insert(ckey(state), 'icons/mob/hud/job_assets.dmi', ckey(state)) + +/datum/asset/spritesheet/orbit_job/ModifyInserted(icon/pre_asset) + pre_asset.Scale(16, 16) + return pre_asset diff --git a/code/modules/mob/dead/observer/orbit.dm b/code/modules/mob/dead/observer/orbit.dm index bd621a2f4cf..1f002db0a95 100644 --- a/code/modules/mob/dead/observer/orbit.dm +++ b/code/modules/mob/dead/observer/orbit.dm @@ -15,6 +15,11 @@ ui = new(user, src, "Orbit", "Orbit") ui.open() +/datum/orbit_menu/ui_assets(mob/user) + return list( + get_asset_datum(/datum/asset/spritesheet/orbit_job) + ) + /datum/orbit_menu/ui_act(action, list/params, datum/tgui/ui) . = ..() if(.) @@ -123,6 +128,13 @@ antag_serialized["antag"] = antag_name antagonists += list(antag_serialized) + // Antaghud? Let them see everyone's role + if(isliving(M)) + var/mob/living/L = M + if(L.mind?.has_normal_assigned_role()) + serialized["assigned_role"] = L.mind.assigned_role + serialized["assigned_role_sprite"] = ckey(L.mind.get_assigned_role_asset()) + // Player terror spiders (and other hostile player-controlled event mobs) have their own category to help see how much there are. // Not in the above block because terrors can be known whether AHUD is on or not. if(isterrorspider(M)) diff --git a/icons/mob/hud/job_assets.dmi b/icons/mob/hud/job_assets.dmi new file mode 100644 index 00000000000..38d6fa4f048 Binary files /dev/null and b/icons/mob/hud/job_assets.dmi differ diff --git a/paradise.dme b/paradise.dme index c7abc177879..b6d16216bbc 100644 --- a/paradise.dme +++ b/paradise.dme @@ -1511,6 +1511,7 @@ #include "code\modules\asset_cache\assets\asset_materials.dm" #include "code\modules\asset_cache\assets\asset_mob_hunt.dm" #include "code\modules\asset_cache\assets\asset_nanomap.dm" +#include "code\modules\asset_cache\assets\asset_orbit_icons.dm" #include "code\modules\asset_cache\assets\asset_panels.dm" #include "code\modules\asset_cache\assets\asset_paper.dm" #include "code\modules\asset_cache\assets\asset_prize_counter.dm" diff --git a/tgui/packages/tgui/interfaces/Orbit.js b/tgui/packages/tgui/interfaces/Orbit.js index 39368c3f74b..a0f07bd1533 100644 --- a/tgui/packages/tgui/interfaces/Orbit.js +++ b/tgui/packages/tgui/interfaces/Orbit.js @@ -10,11 +10,17 @@ import { Stack, } from '../components'; import { Window } from '../layouts'; +import { classes } from '../../common/react'; const PATTERN_NUMBER = / \(([0-9]+)\)$/; const searchFor = (searchText) => - createSearch(searchText, (thing) => thing.name); + createSearch( + searchText, + (thing) => + thing.name + + (thing.assigned_role !== null ? '|' + thing.assigned_role : '') + ); const compareString = (a, b) => (a < b ? -1 : a > b); @@ -69,6 +75,24 @@ const OrbitedButton = (props, context) => { return (