diff --git a/code/__DEFINES/atom_hud.dm b/code/__DEFINES/atom_hud.dm
index e9133e7b75d..9c82080c954 100644
--- a/code/__DEFINES/atom_hud.dm
+++ b/code/__DEFINES/atom_hud.dm
@@ -69,3 +69,56 @@
/// cooldown for being shown the images for any particular data hud
#define ADD_HUD_TO_COOLDOWN 20
+
+
+// Security HUD icon_state defines
+
+#define SECHUD_NO_ID "hudno_id"
+#define SECHUD_UNKNOWN "hudunknown"
+#define SECHUD_CENTCOM "hudcentcom"
+
+#define SECHUD_ASSISTANT "hudassistant"
+#define SECHUD_ATMOSPHERIC_TECHNICIAN "hudatmospherictechnician"
+#define SECHUD_BARTENDER "hudbartender"
+#define SECHUD_BOTANIST "hudbotanist"
+#define SECHUD_CAPTAIN "hudcaptain"
+#define SECHUD_CARGO_TECHNICIAN "hudcargotechnician"
+#define SECHUD_CHAPLAIN "hudchaplain"
+#define SECHUD_CHEMIST "hudchemist"
+#define SECHUD_CHIEF_ENGINEER "hudchiefengineer"
+#define SECHUD_CHIEF_MEDICAL_OFFICER "hudchiefmedicalofficer"
+#define SECHUD_CLOWN "hudclown"
+#define SECHUD_COOK "hudcook"
+#define SECHUD_CURATOR "hudcurator"
+#define SECHUD_DETECTIVE "huddetective"
+#define SECHUD_GENETICIST "hudgeneticist"
+#define SECHUD_HEAD_OF_PERSONNEL "hudheadofpersonnel"
+#define SECHUD_HEAD_OF_SECURITY "hudheadofsecurity"
+#define SECHUD_JANITOR "hudjanitor"
+#define SECHUD_LAWYER "hudlawyer"
+#define SECHUD_MEDICAL_DOCTOR "hudmedicaldoctor"
+#define SECHUD_MIME "hudmime"
+#define SECHUD_PARAMEDIC "hudparamedic"
+#define SECHUD_PRISONER "hudprisoner"
+#define SECHUD_PSYCHOLOGIST "hudpsychologist"
+#define SECHUD_QUARTERMASTER "hudquartermaster"
+#define SECHUD_RESEARCH_DIRECTOR "hudresearchdirector"
+#define SECHUD_ROBOTICIST "hudroboticist"
+#define SECHUD_SECURITY_OFFICER "hudsecurityofficer"
+#define SECHUD_SCIENTIST "hudscientist"
+#define SECHUD_SHAFT_MINER "hudshaftminer"
+#define SECHUD_STATION_ENGINEER "hudstationengineer"
+#define SECHUD_VIROLOGIST "hudvirologist"
+#define SECHUD_WARDEN "hudwarden"
+
+#define SECHUD_CHEF "hudchef"
+
+#define SECHUD_DEATH_COMMANDO "huddeathcommando"
+
+#define SECHUD_EMERGENCY_RESPONSE_TEAM_COMMANDER "hudemergencyresponseteamcommander"
+#define SECHUD_SECURITY_RESPONSE_OFFICER "hudsecurityresponseofficer"
+#define SECHUD_ENGINEERING_RESPONSE_OFFICER "hudengineeringresponseofficer"
+#define SECHUD_MEDICAL_RESPONSE_OFFICER "hudmedicalresponseofficer"
+#define SECHUD_RELIGIOUS_RESPONSE_OFFICER "hudreligiousresponseofficer"
+#define SECHUD_JANITORIAL_RESPONSE_OFFICER "hudjanitorialresponseofficer"
+#define SECHUD_ENTERTAINMENT_RESPONSE_OFFICER "hudentertainmentresponseofficer"
diff --git a/code/__DEFINES/jobs.dm b/code/__DEFINES/jobs.dm
index 03d5c3496d4..f8dcbad7d62 100644
--- a/code/__DEFINES/jobs.dm
+++ b/code/__DEFINES/jobs.dm
@@ -76,14 +76,14 @@
#define JOB_CHAPLAIN "Chaplain"
#define JOB_PSYCHOLOGIST "Psychologist"
//ERTs
+#define JOB_ERT_DEATHSQUAD "Death Commando"
#define JOB_ERT_COMMANDER "Emergency Response Team Commander"
#define JOB_ERT_OFFICER "Security Response Officer"
#define JOB_ERT_ENGINEER "Engineering Response Officer"
#define JOB_ERT_MEDICAL_DOCTOR "Medical Response Officer"
-#define JOB_ERT_CLOWN "Entertainment Response Officer"
#define JOB_ERT_CHAPLAIN "Religious Response Officer"
#define JOB_ERT_JANITOR "Janitorial Response Officer"
-#define JOB_ERT_DEATHSQUAD "Death Commando"
+#define JOB_ERT_CLOWN "Entertainment Response Officer"
//CentCom
#define JOB_CENTCOM "Central Command"
#define JOB_CENTCOM_OFFICIAL "CentCom Official"
@@ -176,12 +176,8 @@
#define JOB_REOPEN_ON_ROUNDSTART_LOSS (1<<6)
/// If the player with this job can have quirks assigned to him or not. Relevant for new player joinable jobs and roundstart antags.
#define JOB_ASSIGN_QUIRKS (1<<7)
-
-/* Job type datum job_type_flags */
-/// Stating this job is a station job
-#define JOB_STATION_JOB (1<<0)
-/// Stating this job is a Command/Head of staff job
-#define JOB_HEAD_JOB (1<<1)
+/// Whether this job can be an intern.
+#define JOB_CAN_BE_INTERN (1<<8)
#define FACTION_NONE "None"
diff --git a/code/__HELPERS/names.dm b/code/__HELPERS/names.dm
index 4c6e6992a53..128a1b8ca85 100644
--- a/code/__HELPERS/names.dm
+++ b/code/__HELPERS/names.dm
@@ -198,7 +198,12 @@ GLOBAL_DATUM(syndicate_code_response_regex, /regex)
new_name += pick(GLOB.last_names)
. += new_name
if(2)
- . += pick(SSjob.station_jobs)//Returns a job.
+ var/datum/job/job = pick(SSjob.joinable_occupations)
+ if(job)
+ . += job.title //Returns a job.
+ else
+ stack_trace("Failed to pick(SSjob.joinable_occupations) on generate_code_phrase()")
+ . += "Bug"
safety -= 1
if(2)
switch(rand(1,3))//Food, drinks, or places. Only selectable once.
diff --git a/code/controllers/subsystem/id_access.dm b/code/controllers/subsystem/id_access.dm
index 58c266e0988..c5fb8686cf1 100644
--- a/code/controllers/subsystem/id_access.dm
+++ b/code/controllers/subsystem/id_access.dm
@@ -429,6 +429,7 @@ SUBSYSTEM_DEF(id_access)
id_card.trim_icon_override = trim.trim_icon
id_card.trim_state_override = trim.trim_state
id_card.trim_assignment_override = trim.assignment
+ id_card.sechud_icon_state_override = trim.sechud_icon_state
if(!check_forged || !id_card.forged)
id_card.assignment = trim.assignment
@@ -445,6 +446,7 @@ SUBSYSTEM_DEF(id_access)
id_card.trim_icon_override = null
id_card.trim_state_override = null
id_card.trim_assignment_override = null
+ id_card.sechud_icon_state_override = null
/**
* Adds the accesses associated with a trim to an ID card.
diff --git a/code/controllers/subsystem/job.dm b/code/controllers/subsystem/job.dm
index 74e8bbe48d8..938126eab95 100644
--- a/code/controllers/subsystem/job.dm
+++ b/code/controllers/subsystem/job.dm
@@ -33,15 +33,6 @@ SUBSYSTEM_DEF(job)
/// Lazylist of mob:occupation_string pairs.
var/list/dynamic_forced_occupations
- /// A list of all jobs associated with the station. These jobs also have various icons associated with them including sechud and card trims.
- var/list/station_jobs = list()
- /// A list of all Head of Staff jobs.
- var/list/head_of_staff_jobs = list()
- /// A list of additional jobs that have various icons associated with them including sechud and card trims.
- var/list/additional_jobs_with_icons = list()
- /// A list of jobs associed with Centcom and should use the standard NT Centcom icons.
- var/list/centcom_jobs = list()
-
/**
* Keys should be assigned job roles. Values should be >= 1.
* Represents the chain of command on the station. Lower numbers mean higher priority.
@@ -788,25 +779,6 @@ SUBSYSTEM_DEF(job)
/// Builds various lists of jobs based on station, centcom and additional jobs with icons associated with them.
/datum/controller/subsystem/job/proc/setup_job_lists()
- for(var/datum/job/job as anything in subtypesof(/datum/job))
- if(initial(job.job_type_flags) & JOB_STATION_JOB)
- station_jobs |= initial(job.title)
- if(initial(job.job_type_flags) & JOB_HEAD_JOB)
- head_of_staff_jobs |= initial(job.title)
-
- additional_jobs_with_icons |= list(
- JOB_ERT_COMMANDER, JOB_ERT_OFFICER, JOB_ERT_ENGINEER, JOB_ERT_MEDICAL_DOCTOR,
- JOB_ERT_CLOWN, JOB_ERT_CHAPLAIN, JOB_ERT_JANITOR, JOB_ERT_DEATHSQUAD,
- JOB_SECURITY_OFFICER_MEDICAL, JOB_SECURITY_OFFICER_ENGINEERING, JOB_SECURITY_OFFICER_SCIENCE, JOB_SECURITY_OFFICER_SUPPLY,
- )
-
- centcom_jobs |= list(
- JOB_CENTCOM, JOB_CENTCOM_OFFICIAL, JOB_CENTCOM_ADMIRAL, JOB_CENTCOM_COMMANDER, JOB_CENTCOM_VIP,
- JOB_CENTCOM_BARTENDER, JOB_CENTCOM_CUSTODIAN, JOB_CENTCOM_THUNDERDOME_OVERSEER, JOB_CENTCOM_MEDICAL_DOCTOR,
- JOB_CENTCOM_RESEARCH_OFFICER, JOB_CENTCOM_SPECIAL_OFFICER, JOB_CENTCOM_PRIVATE_SECURITY,
- )
-
-
job_priorities_to_strings = list(
"[JP_LOW]" = "Low Priority",
"[JP_MEDIUM]" = "Medium Priority",
diff --git a/code/datums/id_trim/_id_trim.dm b/code/datums/id_trim/_id_trim.dm
index 9fec9deacea..bce3f2b906b 100644
--- a/code/datums/id_trim/_id_trim.dm
+++ b/code/datums/id_trim/_id_trim.dm
@@ -4,8 +4,12 @@
var/trim_icon = 'icons/obj/card.dmi'
/// Icon state for this trim. Overlayed on advanced ID cards.
var/trim_state
- /// Job/assignment associated with this trim. Can be transferred to ID cards holding this trim. Decides the card's HUD icon.
+ /// Job/assignment associated with this trim. Can be transferred to ID cards holding this trim.
var/assignment
+ /// The name of the job for interns. If unset it will default to "[assignment] (Intern)".
+ var/intern_alt_name = null
+ /// The icon_state associated with this trim, as it will show on the security HUD.
+ var/sechud_icon_state = SECHUD_UNKNOWN
/// Accesses that this trim unlocks on a card it is imprinted on. These accesses never take wildcard slots and can be added and removed at will.
var/list/access = list()
diff --git a/code/datums/id_trim/centcom.dm b/code/datums/id_trim/centcom.dm
index 971045671f6..de807c9513c 100644
--- a/code/datums/id_trim/centcom.dm
+++ b/code/datums/id_trim/centcom.dm
@@ -1,28 +1,29 @@
/// Trim for basic Centcom cards.
/datum/id_trim/centcom
access = list(ACCESS_CENT_GENERAL)
- assignment = "Central Command"
+ assignment = JOB_CENTCOM
trim_state = "trim_centcom"
+ sechud_icon_state = SECHUD_CENTCOM
/// Trim for Centcom VIPs
/datum/id_trim/centcom/vip
access = list(ACCESS_CENT_GENERAL)
- assignment = "VIP Guest"
+ assignment = JOB_CENTCOM_VIP
/// Trim for Centcom Custodians.
/datum/id_trim/centcom/custodian
access = list(ACCESS_CENT_GENERAL, ACCESS_CENT_LIVING, ACCESS_CENT_STORAGE)
- assignment = "Custodian"
+ assignment = JOB_CENTCOM_CUSTODIAN
/// Trim for Centcom Thunderdome Overseers.
/datum/id_trim/centcom/thunderdome_overseer
access = list(ACCESS_CENT_GENERAL, ACCESS_CENT_THUNDER)
- assignment = "Thunderdome Overseer"
+ assignment = JOB_CENTCOM_THUNDERDOME_OVERSEER
/// Trim for Centcom Officials.
/datum/id_trim/centcom/official
access = list(ACCESS_CENT_GENERAL, ACCESS_CENT_LIVING, ACCESS_WEAPONS)
- assignment = "CentCom Official"
+ assignment = JOB_CENTCOM_OFFICIAL
/// Trim for Centcom Interns.
/datum/id_trim/centcom/intern
@@ -46,21 +47,21 @@
/// Trim for Centcom Bartenders.
/datum/id_trim/centcom/bartender
access = list(ACCESS_CENT_GENERAL, ACCESS_CENT_LIVING, ACCESS_CENT_BAR)
- assignment = "CentCom Bartender"
+ assignment = JOB_CENTCOM_BARTENDER
/// Trim for Centcom Medical Officers.
/datum/id_trim/centcom/medical_officer
access = list(ACCESS_CENT_GENERAL, ACCESS_CENT_LIVING, ACCESS_CENT_MEDICAL)
- assignment = "Medical Officer"
+ assignment = JOB_CENTCOM_MEDICAL_DOCTOR
/// Trim for Centcom Research Officers.
/datum/id_trim/centcom/research_officer
access = list(ACCESS_CENT_GENERAL, ACCESS_CENT_SPECOPS, ACCESS_CENT_MEDICAL, ACCESS_CENT_TELEPORTER, ACCESS_CENT_STORAGE)
- assignment = "Research Officer"
+ assignment = JOB_CENTCOM_RESEARCH_OFFICER
/// Trim for Centcom Specops Officers. All Centcom and Station Access.
/datum/id_trim/centcom/specops_officer
- assignment = "Special Ops Officer"
+ assignment = JOB_CENTCOM_SPECIAL_OFFICER
/datum/id_trim/centcom/specops_officer/New()
. = ..()
@@ -69,7 +70,7 @@
/// Trim for Centcom (Soviet) Admirals. All Centcom and Station Access.
/datum/id_trim/centcom/admiral
- assignment = "Admiral"
+ assignment = JOB_CENTCOM_ADMIRAL
/datum/id_trim/centcom/admiral/New()
. = ..()
@@ -78,7 +79,7 @@
/// Trim for Centcom Commanders. All Centcom and Station Access.
/datum/id_trim/centcom/commander
- assignment = "CentCom Commander"
+ assignment = JOB_CENTCOM_COMMANDER
/datum/id_trim/centcom/commander/New()
. = ..()
@@ -87,8 +88,9 @@
/// Trim for Deathsquad officers. All Centcom and Station Access.
/datum/id_trim/centcom/deathsquad
- assignment = "Death Commando"
+ assignment = JOB_ERT_DEATHSQUAD
trim_state = "trim_ert_commander"
+ sechud_icon_state = SECHUD_DEATH_COMMANDO
/datum/id_trim/centcom/deathsquad/New()
. = ..()
@@ -106,8 +108,9 @@
/// Trim for ERT Commanders. All station and centcom access.
/datum/id_trim/centcom/ert/commander
- assignment = "Emergency Response Team Commander"
+ assignment = JOB_ERT_COMMANDER
trim_state = "trim_ert_commander"
+ sechud_icon_state = SECHUD_EMERGENCY_RESPONSE_TEAM_COMMANDER
/datum/id_trim/centcom/ert/commander/New()
. = ..()
@@ -116,8 +119,9 @@
/// Trim for generic ERT seccies. No universal ID card changing access.
/datum/id_trim/centcom/ert/security
- assignment = "Security Response Officer"
+ assignment = JOB_ERT_OFFICER
trim_state = "trim_ert_security"
+ sechud_icon_state = SECHUD_SECURITY_RESPONSE_OFFICER
/datum/id_trim/centcom/ert/security/New()
. = ..()
@@ -126,8 +130,9 @@
/// Trim for generic ERT engineers. No universal ID card changing access.
/datum/id_trim/centcom/ert/engineer
- assignment = "Engineering Response Officer"
+ assignment = JOB_ERT_ENGINEER
trim_state = "trim_ert_engineering"
+ sechud_icon_state = SECHUD_ENGINEERING_RESPONSE_OFFICER
/datum/id_trim/centcom/ert/engineer/New()
. = ..()
@@ -136,8 +141,9 @@
/// Trim for generic ERT medics. No universal ID card changing access.
/datum/id_trim/centcom/ert/medical
- assignment = "Medical Response Officer"
+ assignment = JOB_ERT_MEDICAL_DOCTOR
trim_state = "trim_ert_medical"
+ sechud_icon_state = SECHUD_MEDICAL_RESPONSE_OFFICER
/datum/id_trim/centcom/ert/medical/New()
. = ..()
@@ -146,8 +152,9 @@
/// Trim for generic ERT chaplains. No universal ID card changing access.
/datum/id_trim/centcom/ert/chaplain
- assignment = "Religious Response Officer"
+ assignment = JOB_ERT_CHAPLAIN
trim_state = "trim_ert_religious"
+ sechud_icon_state = SECHUD_RELIGIOUS_RESPONSE_OFFICER
/datum/id_trim/centcom/ert/chaplain/New()
. = ..()
@@ -156,8 +163,9 @@
/// Trim for generic ERT janitors. No universal ID card changing access.
/datum/id_trim/centcom/ert/janitor
- assignment = "Janitorial Response Officer"
+ assignment = JOB_ERT_JANITOR
trim_state = "trim_ert_janitor"
+ sechud_icon_state = SECHUD_JANITORIAL_RESPONSE_OFFICER
/datum/id_trim/centcom/ert/janitor/New()
. = ..()
@@ -166,8 +174,9 @@
/// Trim for generic ERT clowns. No universal ID card changing access.
/datum/id_trim/centcom/ert/clown
- assignment = "Entertainment Response Officer"
+ assignment = JOB_ERT_CLOWN
trim_state = "trim_ert_entertainment"
+ sechud_icon_state = SECHUD_ENTERTAINMENT_RESPONSE_OFFICER
/datum/id_trim/centcom/ert/clown/New()
. = ..()
diff --git a/code/datums/id_trim/jobs.dm b/code/datums/id_trim/jobs.dm
index c1496d42a4a..0a93892845a 100644
--- a/code/datums/id_trim/jobs.dm
+++ b/code/datums/id_trim/jobs.dm
@@ -81,6 +81,7 @@
/datum/id_trim/job/assistant
assignment = "Assistant"
trim_state = "trim_assistant"
+ sechud_icon_state = SECHUD_ASSISTANT
extra_access = list(ACCESS_MAINT_TUNNELS)
minimal_access = list()
config_job = "assistant"
@@ -100,6 +101,7 @@
/datum/id_trim/job/atmospheric_technician
assignment = "Atmospheric Technician"
trim_state = "trim_atmospherictechnician"
+ sechud_icon_state = SECHUD_ATMOSPHERIC_TECHNICIAN
extra_access = list(ACCESS_ENGINE, ACCESS_ENGINE_EQUIP, ACCESS_MINERAL_STOREROOM, ACCESS_TECH_STORAGE)
minimal_access = list(ACCESS_ATMOSPHERICS, ACCESS_AUX_BASE, ACCESS_CONSTRUCTION, ACCESS_EXTERNAL_AIRLOCKS, ACCESS_MAINT_TUNNELS, ACCESS_MECH_ENGINE,
ACCESS_MINERAL_STOREROOM)
@@ -110,6 +112,7 @@
/datum/id_trim/job/bartender
assignment = "Bartender"
trim_state = "trim_bartender"
+ sechud_icon_state = SECHUD_BARTENDER
extra_access = list(ACCESS_HYDROPONICS, ACCESS_KITCHEN, ACCESS_MORGUE)
minimal_access = list(ACCESS_BAR, ACCESS_MINERAL_STOREROOM, ACCESS_THEATRE, ACCESS_WEAPONS, ACCESS_SERVICE)
config_job = "bartender"
@@ -119,6 +122,7 @@
/datum/id_trim/job/botanist
assignment = "Botanist"
trim_state = "trim_botanist"
+ sechud_icon_state = SECHUD_BOTANIST
extra_access = list(ACCESS_BAR, ACCESS_KITCHEN)
minimal_access = list(ACCESS_HYDROPONICS, ACCESS_MINERAL_STOREROOM, ACCESS_MORGUE, ACCESS_SERVICE)
config_job = "botanist"
@@ -127,7 +131,9 @@
/datum/id_trim/job/captain
assignment = "Captain"
+ intern_alt_name = "Captain-in-Training"
trim_state = "trim_captain"
+ sechud_icon_state = SECHUD_CAPTAIN
config_job = "captain"
template_access = list(ACCESS_CAPTAIN, ACCESS_CHANGE_IDS)
job = /datum/job/captain
@@ -144,6 +150,7 @@
/datum/id_trim/job/cargo_technician
assignment = "Cargo Technician"
trim_state = "trim_cargotechnician"
+ sechud_icon_state = SECHUD_CARGO_TECHNICIAN
extra_access = list(ACCESS_QM, ACCESS_MINING, ACCESS_MINING_STATION)
minimal_access = list(ACCESS_CARGO, ACCESS_MAILSORTING, ACCESS_MAINT_TUNNELS, ACCESS_MECH_MINING, ACCESS_MINERAL_STOREROOM)
config_job = "cargo_technician"
@@ -153,6 +160,7 @@
/datum/id_trim/job/chaplain
assignment = "Chaplain"
trim_state = "trim_chaplain"
+ sechud_icon_state = SECHUD_CHAPLAIN
extra_access = list()
minimal_access = list(ACCESS_CHAPEL_OFFICE, ACCESS_CREMATORIUM, ACCESS_MORGUE, ACCESS_THEATRE, ACCESS_SERVICE)
config_job = "chaplain"
@@ -162,6 +170,7 @@
/datum/id_trim/job/chemist
assignment = "Chemist"
trim_state = "trim_chemist"
+ sechud_icon_state = SECHUD_CHEMIST
extra_access = list(ACCESS_SURGERY, ACCESS_VIROLOGY)
minimal_access = list(ACCESS_CHEMISTRY, ACCESS_MECH_MEDICAL, ACCESS_MEDICAL, ACCESS_MINERAL_STOREROOM, ACCESS_MORGUE, ACCESS_PHARMACY)
config_job = "chemist"
@@ -170,7 +179,9 @@
/datum/id_trim/job/chief_engineer
assignment = "Chief Engineer"
+ intern_alt_name = "Chief Engineer-in-Training"
trim_state = "trim_chiefengineer"
+ sechud_icon_state = SECHUD_CHIEF_ENGINEER
extra_access = list(ACCESS_TELEPORTER)
extra_wildcard_access = list()
minimal_access = list(ACCESS_ATMOSPHERICS, ACCESS_AUX_BASE, ACCESS_CE, ACCESS_CONSTRUCTION, ACCESS_ENGINE, ACCESS_ENGINE_EQUIP, ACCESS_EVA,
@@ -183,7 +194,9 @@
/datum/id_trim/job/chief_medical_officer
assignment = "Chief Medical Officer"
+ intern_alt_name = "Chief Medical Officer-in-Training"
trim_state = "trim_chiefmedicalofficer"
+ sechud_icon_state = SECHUD_CHIEF_MEDICAL_OFFICER
extra_access = list(ACCESS_TELEPORTER)
extra_wildcard_access = list()
minimal_access = list(ACCESS_CHEMISTRY, ACCESS_EVA, ACCESS_HEADS, ACCESS_KEYCARD_AUTH, ACCESS_MAINT_TUNNELS, ACCESS_MECH_MEDICAL,
@@ -197,6 +210,7 @@
/datum/id_trim/job/clown
assignment = "Clown"
trim_state = "trim_clown"
+ sechud_icon_state = SECHUD_CLOWN
extra_access = list()
minimal_access = list(ACCESS_THEATRE, ACCESS_SERVICE)
config_job = "clown"
@@ -206,15 +220,21 @@
/datum/id_trim/job/cook
assignment = "Cook"
trim_state = "trim_cook"
+ sechud_icon_state = SECHUD_COOK
extra_access = list(ACCESS_BAR, ACCESS_HYDROPONICS)
minimal_access = list(ACCESS_KITCHEN, ACCESS_MINERAL_STOREROOM, ACCESS_MORGUE, ACCESS_SERVICE)
config_job = "cook"
template_access = list(ACCESS_CAPTAIN, ACCESS_HOP, ACCESS_CHANGE_IDS)
job = /datum/job/cook
+/datum/id_trim/job/cook/chef
+ assignment = "Chef"
+ sechud_icon_state = SECHUD_CHEF
+
/datum/id_trim/job/curator
assignment = "Curator"
trim_state = "trim_curator"
+ sechud_icon_state = SECHUD_CURATOR
extra_access = list()
minimal_access = list(ACCESS_AUX_BASE, ACCESS_LIBRARY, ACCESS_MINING_STATION, ACCESS_SERVICE)
config_job = "curator"
@@ -224,6 +244,7 @@
/datum/id_trim/job/detective
assignment = "Detective"
trim_state = "trim_detective"
+ sechud_icon_state = SECHUD_DETECTIVE
extra_access = list()
minimal_access = list(ACCESS_BRIG, ACCESS_COURT, ACCESS_FORENSICS_LOCKERS, ACCESS_SEC_DOORS,ACCESS_MAINT_TUNNELS, ACCESS_MORGUE,
ACCESS_MECH_SECURITY, ACCESS_MINERAL_STOREROOM, ACCESS_WEAPONS)
@@ -244,6 +265,7 @@
/datum/id_trim/job/geneticist
assignment = "Geneticist"
trim_state = "trim_geneticist"
+ sechud_icon_state = SECHUD_GENETICIST
extra_access = list(ACCESS_ROBOTICS, ACCESS_TECH_STORAGE, ACCESS_XENOBIOLOGY)
minimal_access = list(ACCESS_GENETICS, ACCESS_MECH_SCIENCE, ACCESS_MINERAL_STOREROOM, ACCESS_MORGUE, ACCESS_RESEARCH, ACCESS_RND)
config_job = "geneticist"
@@ -252,7 +274,9 @@
/datum/id_trim/job/head_of_personnel
assignment = "Head of Personnel"
+ intern_alt_name = "Head of Personnel-in-Training"
trim_state = "trim_headofpersonnel"
+ sechud_icon_state = SECHUD_HEAD_OF_PERSONNEL
extra_access = list()
extra_wildcard_access = list()
minimal_access = list(ACCESS_AI_UPLOAD, ACCESS_ALL_PERSONAL_LOCKERS, ACCESS_AUX_BASE, ACCESS_BAR, ACCESS_CARGO, ACCESS_CHAPEL_OFFICE,
@@ -268,7 +292,9 @@
/datum/id_trim/job/head_of_security
assignment = "Head of Security"
+ intern_alt_name = "Head of Security-in-Training"
trim_state = "trim_headofsecurity"
+ sechud_icon_state = SECHUD_HEAD_OF_SECURITY
extra_access = list(ACCESS_TELEPORTER)
extra_wildcard_access = list()
minimal_access = list(ACCESS_ALL_PERSONAL_LOCKERS, ACCESS_ARMORY, ACCESS_AUX_BASE, ACCESS_BRIG, ACCESS_CONSTRUCTION, ACCESS_COURT,
@@ -293,6 +319,7 @@
/datum/id_trim/job/janitor
assignment = "Janitor"
trim_state = "trim_janitor"
+ sechud_icon_state = SECHUD_JANITOR
extra_access = list()
minimal_access = list(ACCESS_JANITOR, ACCESS_MAINT_TUNNELS, ACCESS_MINERAL_STOREROOM, ACCESS_SERVICE)
config_job = "janitor"
@@ -302,6 +329,7 @@
/datum/id_trim/job/lawyer
assignment = "Lawyer"
trim_state = "trim_lawyer"
+ sechud_icon_state = SECHUD_LAWYER
extra_access = list()
minimal_access = list(ACCESS_COURT, ACCESS_LAWYER, ACCESS_SEC_DOORS, ACCESS_SERVICE)
config_job = "lawyer"
@@ -311,6 +339,7 @@
/datum/id_trim/job/medical_doctor
assignment = "Medical Doctor"
trim_state = "trim_medicaldoctor"
+ sechud_icon_state = SECHUD_MEDICAL_DOCTOR
extra_access = list(ACCESS_CHEMISTRY, ACCESS_VIROLOGY)
minimal_access = list(ACCESS_MECH_MEDICAL, ACCESS_MEDICAL, ACCESS_MINERAL_STOREROOM, ACCESS_MORGUE, ACCESS_PHARMACY, ACCESS_SURGERY)
config_job = "medical_doctor"
@@ -320,6 +349,7 @@
/datum/id_trim/job/mime
assignment = "Mime"
trim_state = "trim_mime"
+ sechud_icon_state = SECHUD_MIME
extra_access = list()
minimal_access = list(ACCESS_THEATRE, ACCESS_SERVICE)
config_job = "mime"
@@ -329,6 +359,7 @@
/datum/id_trim/job/paramedic
assignment = "Paramedic"
trim_state = "trim_paramedic"
+ sechud_icon_state = SECHUD_PARAMEDIC
extra_access = list(ACCESS_SURGERY)
minimal_access = list(ACCESS_AUX_BASE, ACCESS_CARGO, ACCESS_CONSTRUCTION, ACCESS_ENGINE, ACCESS_EVA, ACCESS_HYDROPONICS,
ACCESS_MAINT_TUNNELS, ACCESS_MECH_MEDICAL, ACCESS_MEDICAL, ACCESS_MINERAL_STOREROOM, ACCESS_MORGUE, ACCESS_RESEARCH)
@@ -339,6 +370,7 @@
/datum/id_trim/job/prisoner
assignment = "Prisoner"
trim_state = "trim_prisoner"
+ sechud_icon_state = SECHUD_PRISONER
config_job = "prisoner"
template_access = list(ACCESS_CAPTAIN, ACCESS_HOP, ACCESS_HOS, ACCESS_CHANGE_IDS)
job = /datum/job/prisoner
@@ -374,6 +406,7 @@
/datum/id_trim/job/psychologist
assignment = "Psychologist"
trim_state = "trim_psychologist"
+ sechud_icon_state = SECHUD_PSYCHOLOGIST
extra_access = list()
minimal_access = list(ACCESS_MEDICAL, ACCESS_PSYCHOLOGY, ACCESS_SERVICE)
config_job = "psychologist"
@@ -383,6 +416,7 @@
/datum/id_trim/job/quartermaster
assignment = "Quartermaster"
trim_state = "trim_quartermaster"
+ sechud_icon_state = SECHUD_QUARTERMASTER
extra_access = list()
minimal_access = list(ACCESS_AUX_BASE, ACCESS_CARGO, ACCESS_MAILSORTING, ACCESS_MAINT_TUNNELS, ACCESS_MECH_MINING, ACCESS_MINING_STATION,
ACCESS_MINERAL_STOREROOM, ACCESS_MINING, ACCESS_QM, ACCESS_RC_ANNOUNCE, ACCESS_VAULT)
@@ -392,7 +426,9 @@
/datum/id_trim/job/research_director
assignment = "Research Director"
+ intern_alt_name = "Research Director-in-Training"
trim_state = "trim_researchdirector"
+ sechud_icon_state = SECHUD_RESEARCH_DIRECTOR
extra_access = list()
extra_wildcard_access = list()
minimal_access = list(ACCESS_AI_UPLOAD, ACCESS_AUX_BASE, ACCESS_EVA, ACCESS_GATEWAY, ACCESS_GENETICS, ACCESS_HEADS, ACCESS_KEYCARD_AUTH,
@@ -408,6 +444,7 @@
/datum/id_trim/job/roboticist
assignment = "Roboticist"
trim_state = "trim_roboticist"
+ sechud_icon_state = SECHUD_ROBOTICIST
extra_access = list(ACCESS_GENETICS, ACCESS_ORDNANCE, ACCESS_ORDNANCE_STORAGE, ACCESS_XENOBIOLOGY)
minimal_access = list(ACCESS_AUX_BASE, ACCESS_MECH_SCIENCE, ACCESS_MINERAL_STOREROOM, ACCESS_MORGUE, ACCESS_RESEARCH, ACCESS_RND,
ACCESS_ROBOTICS, ACCESS_TECH_STORAGE)
@@ -418,6 +455,7 @@
/datum/id_trim/job/scientist
assignment = "Scientist"
trim_state = "trim_scientist"
+ sechud_icon_state = SECHUD_SCIENTIST
extra_access = list(ACCESS_GENETICS, ACCESS_ROBOTICS)
minimal_access = list(ACCESS_AUX_BASE, ACCESS_MECH_SCIENCE, ACCESS_MINERAL_STOREROOM, ACCESS_ORDNANCE, ACCESS_ORDNANCE_STORAGE,
ACCESS_RESEARCH, ACCESS_RND, ACCESS_XENOBIOLOGY)
@@ -429,6 +467,7 @@
/datum/id_trim/job/security_officer
assignment = "Security Officer"
trim_state = "trim_securityofficer"
+ sechud_icon_state = SECHUD_SECURITY_OFFICER
extra_access = list(ACCESS_FORENSICS_LOCKERS, ACCESS_MAINT_TUNNELS, ACCESS_MORGUE)
minimal_access = list(ACCESS_BRIG, ACCESS_COURT, ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_MECH_SECURITY,
ACCESS_MINERAL_STOREROOM, ACCESS_WEAPONS)
@@ -473,6 +512,7 @@
/datum/id_trim/job/shaft_miner
assignment = "Shaft Miner"
trim_state = "trim_shaftminer"
+ sechud_icon_state = SECHUD_SHAFT_MINER
extra_access = list(ACCESS_CARGO, ACCESS_MAINT_TUNNELS, ACCESS_QM)
minimal_access = list(ACCESS_AUX_BASE, ACCESS_MAILSORTING, ACCESS_MECH_MINING, ACCESS_MINERAL_STOREROOM, ACCESS_MINING,
ACCESS_MINING_STATION)
@@ -489,6 +529,7 @@
/datum/id_trim/job/station_engineer
assignment = "Station Engineer"
trim_state = "trim_stationengineer"
+ sechud_icon_state = SECHUD_STATION_ENGINEER
extra_access = list(ACCESS_ATMOSPHERICS)
minimal_access = list(ACCESS_AUX_BASE, ACCESS_CONSTRUCTION, ACCESS_ENGINE, ACCESS_ENGINE_EQUIP, ACCESS_EXTERNAL_AIRLOCKS,
ACCESS_MAINT_TUNNELS, ACCESS_MECH_ENGINE, ACCESS_MINERAL_STOREROOM, ACCESS_TCOMSAT, ACCESS_TECH_STORAGE)
@@ -499,6 +540,7 @@
/datum/id_trim/job/virologist
assignment = "Virologist"
trim_state = "trim_virologist"
+ sechud_icon_state = SECHUD_VIROLOGIST
extra_access = list(ACCESS_CHEMISTRY, ACCESS_MORGUE, ACCESS_SURGERY)
minimal_access = list(ACCESS_MEDICAL, ACCESS_MECH_MEDICAL, ACCESS_MINERAL_STOREROOM, ACCESS_VIROLOGY)
config_job = "virologist"
diff --git a/code/datums/id_trim/ruins.dm b/code/datums/id_trim/ruins.dm
index 8fb944cffd8..67fdee55f7f 100644
--- a/code/datums/id_trim/ruins.dm
+++ b/code/datums/id_trim/ruins.dm
@@ -63,7 +63,7 @@
/// Trim for various Centcom corpses.
/datum/id_trim/centcom/corpse/private_security
- assignment = "Private Security Force"
+ assignment = JOB_CENTCOM_PRIVATE_SECURITY
access = list(ACCESS_CENT_CAPTAIN, ACCESS_CENT_GENERAL, ACCESS_CENT_SPECOPS, ACCESS_CENT_MEDICAL, ACCESS_CENT_STORAGE, ACCESS_SECURITY, ACCESS_MECH_SECURITY)
/// Trim for various Centcom corpses.
diff --git a/code/datums/mind.dm b/code/datums/mind.dm
index ad464e96d32..ccebfa54b86 100644
--- a/code/datums/mind.dm
+++ b/code/datums/mind.dm
@@ -490,7 +490,7 @@
A.admin_remove(usr)
if (href_list["role_edit"])
- var/new_role = input("Select new role", "Assigned role", assigned_role.title) as null|anything in sort_list(SSjob.station_jobs)
+ var/new_role = input("Select new role", "Assigned role", assigned_role.title) as null|anything in sort_list(SSjob.name_occupations)
if(isnull(new_role))
return
var/datum/job/new_job = SSjob.GetJob(new_role)
diff --git a/code/game/machinery/computer/security.dm b/code/game/machinery/computer/security.dm
index db33bb135c5..48e77788fdf 100644
--- a/code/game/machinery/computer/security.dm
+++ b/code/game/machinery/computer/security.dm
@@ -908,8 +908,10 @@ What a mess.*/
if((istype(active1, /datum/data/record) && L.Find(rank)))
temp = "
Rank:
"
temp += ""
- for(var/rank in SSjob.station_jobs)
- temp += "- [rank]
"
+ var/list/station_job_templates = SSid_access.station_job_templates
+ for(var/path in station_job_templates)
+ var/rank = station_job_templates[path]
+ temp += "- [rank]
"
temp += "
"
else
tgui_alert(usr, "You do not have the required rank to do this!")
@@ -919,8 +921,19 @@ What a mess.*/
switch(href_list["choice"])
if("Change Rank")
if(active1)
- active1.fields["rank"] = strip_html(href_list["rank"])
- active1.fields["trim"] = active1.fields["rank"]
+ var/text = strip_html(href_list["rank"])
+ var/path = text2path(text)
+ if(ispath(path))
+ var/rank = SSid_access.station_job_templates[path]
+ if(rank)
+ active1.fields["rank"] = rank
+ active1.fields["trim"] = active1.fields["rank"]
+ else
+ message_admins("Warning: possible href exploit by [key_name(usr)] - attempted to set change a crew member rank to an invalid path: [path]")
+ log_game("Warning: possible href exploit by [key_name(usr)] - attempted to set change a crew member rank to an invalid path: [path]")
+ else if(!isnull(text))
+ message_admins("Warning: possible href exploit by [key_name(usr)] - attempted to set change a crew member rank to an invalid value: [text]")
+ log_game("Warning: possible href exploit by [key_name(usr)] - attempted to set change a crew member rank to an invalid value: [text]")
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 62b7b598648..bce3ed6e6f6 100644
--- a/code/game/objects/items/cards_ids.dm
+++ b/code/game/objects/items/cards_ids.dm
@@ -710,18 +710,22 @@
if(is_intern)
if(assignment)
- assignment_string = (assignment in SSjob.head_of_staff_jobs) ? " ([assignment]-in-Training)" : " (Intern [assignment])"
+ assignment_string = trim?.intern_alt_name || "Intern [assignment]"
else
- assignment_string = " (Intern)"
+ assignment_string = "Intern"
else
- assignment_string = " ([assignment])"
+ assignment_string = assignment
- name = "[name_string][assignment_string]"
+ name = "[name_string] ([assignment_string])"
/// Returns the trim assignment name.
/obj/item/card/id/proc/get_trim_assignment()
return trim?.assignment || assignment
+/// Returns the trim sechud icon state.
+/obj/item/card/id/proc/get_trim_sechud_icon_state()
+ return trim?.sechud_icon_state || SECHUD_UNKNOWN
+
/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."
@@ -814,8 +818,10 @@
var/trim_icon_override
/// If this is set, will manually override the icon state for the trim. Intended for admins to VV edit and chameleon ID cards.
var/trim_state_override
- /// If this is set, will manually override the trim's assignmment for SecHUDs. Intended for admins to VV edit and chameleon ID cards.
+ /// If this is set, will manually override the trim's assignmment as it appears in the crew monitor and elsewhere. Intended for admins to VV edit and chameleon ID cards.
var/trim_assignment_override
+ /// If this is set, will manually override the trim shown for SecHUDs. Intended for admins to VV edit and chameleon ID cards.
+ var/sechud_icon_state_override = null
/obj/item/card/id/advanced/Initialize(mapload)
. = ..()
@@ -842,7 +848,7 @@
var/intern_threshold = (CONFIG_GET(number/use_low_living_hour_intern_hours) * 60) || (CONFIG_GET(number/use_exp_restrictions_heads_hours) * 60) || INTERN_THRESHOLD_FALLBACK_HOURS * 60
var/playtime = user.client.get_exp_living(pure_numeric = TRUE)
- if((intern_threshold >= playtime) && (user.mind?.assigned_role.title in SSjob.station_jobs))
+ if((intern_threshold >= playtime) && (user.mind?.assigned_role.job_flags & JOB_CAN_BE_INTERN))
is_intern = TRUE
update_label()
return
@@ -917,12 +923,17 @@
/obj/item/card/id/advanced/get_trim_assignment()
if(trim_assignment_override)
return trim_assignment_override
- else if(ispath(trim))
+
+ if(ispath(trim))
var/datum/id_trim/trim_singleton = SSid_access.trim_singletons_by_path[trim]
return trim_singleton.assignment
return ..()
+/// Returns the trim sechud icon state.
+/obj/item/card/id/advanced/get_trim_sechud_icon_state()
+ return sechud_icon_state_override || ..()
+
/obj/item/card/id/advanced/silver
name = "silver identification card"
desc = "A silver card which shows honour and dedication."
@@ -969,7 +980,7 @@
icon_state = "card_centcom"
worn_icon_state = "card_centcom"
assigned_icon_state = "assigned_centcom"
- registered_name = "Central Command"
+ registered_name = JOB_CENTCOM
registered_age = null
trim = /datum/id_trim/centcom
wildcard_slots = WILDCARD_LIMIT_CENTCOM
@@ -982,31 +993,31 @@
trim = /datum/id_trim/centcom/ert
/obj/item/card/id/advanced/centcom/ert
- registered_name = "Emergency Response Team Commander"
+ registered_name = JOB_ERT_COMMANDER
trim = /datum/id_trim/centcom/ert/commander
/obj/item/card/id/advanced/centcom/ert/security
- registered_name = "Security Response Officer"
+ registered_name = JOB_ERT_OFFICER
trim = /datum/id_trim/centcom/ert/security
/obj/item/card/id/advanced/centcom/ert/engineer
- registered_name = "Engineering Response Officer"
+ registered_name = JOB_ERT_ENGINEER
trim = /datum/id_trim/centcom/ert/engineer
/obj/item/card/id/advanced/centcom/ert/medical
- registered_name = "Medical Response Officer"
+ registered_name = JOB_ERT_MEDICAL_DOCTOR
trim = /datum/id_trim/centcom/ert/medical
/obj/item/card/id/advanced/centcom/ert/chaplain
- registered_name = "Religious Response Officer"
+ registered_name = JOB_ERT_CHAPLAIN
trim = /datum/id_trim/centcom/ert/chaplain
/obj/item/card/id/advanced/centcom/ert/janitor
- registered_name = "Janitorial Response Officer"
+ registered_name = JOB_ERT_JANITOR
trim = /datum/id_trim/centcom/ert/janitor
/obj/item/card/id/advanced/centcom/ert/clown
- registered_name = "Entertainment Response Officer"
+ registered_name = JOB_ERT_CLOWN
trim = /datum/id_trim/centcom/ert/clown
/obj/item/card/id/advanced/black
@@ -1020,7 +1031,7 @@
/obj/item/card/id/advanced/black/deathsquad
name = "\improper Death Squad ID"
desc = "A Death Squad ID card."
- registered_name = "Death Commando"
+ registered_name = JOB_ERT_DEATHSQUAD
trim = /datum/id_trim/centcom/deathsquad
wildcard_slots = WILDCARD_LIMIT_DEATHSQUAD
diff --git a/code/modules/jobs/access.dm b/code/modules/jobs/access.dm
index 17290fad201..766c9e2f340 100644
--- a/code/modules/jobs/access.dm
+++ b/code/modules/jobs/access.dm
@@ -108,20 +108,4 @@
/obj/item/proc/get_sechud_job_icon_state()
var/obj/item/card/id/id_card = GetID()
- if(!id_card)
- return "hudno_id"
-
- 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)
- return "hud[ckey(card_assignment)]"
- if(card_assignment in SSjob.additional_jobs_with_icons)
- return "hud[ckey(card_assignment)]"
-
- // If not, is it one of the jobs that should use the NT logo?
- if(card_assignment in SSjob.centcom_jobs)
- return "hudcentcom"
-
- // If none of the above apply, job name is unknown.
- return "hudunknown"
+ return id_card?.get_trim_sechud_icon_state() || SECHUD_NO_ID
diff --git a/code/modules/jobs/job_types/_job.dm b/code/modules/jobs/job_types/_job.dm
index b61cab5aa2f..463ba279234 100644
--- a/code/modules/jobs/job_types/_job.dm
+++ b/code/modules/jobs/job_types/_job.dm
@@ -102,10 +102,7 @@
/// List of family heirlooms this job can get with the family heirloom quirk. List of types.
var/list/family_heirlooms
- /// All values = (JOB_STATION_JOB | JOB_HEAD_JOB)
- var/job_type_flags = NONE
-
- /// All values = (JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_BOLD_SELECT_TEXT | JOB_ASSIGN_QUIRKS)
+ /// All values = (JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_BOLD_SELECT_TEXT | JOB_ASSIGN_QUIRKS | JOB_CAN_BE_INTERN)
var/job_flags = NONE
/// Multiplier for general usage of the voice of god.
diff --git a/code/modules/jobs/job_types/assistant.dm b/code/modules/jobs/job_types/assistant.dm
index e4d043d4fc9..a535c9ab57c 100644
--- a/code/modules/jobs/job_types/assistant.dm
+++ b/code/modules/jobs/job_types/assistant.dm
@@ -34,8 +34,7 @@ Assistant
/obj/item/crowbar/large = 1
)
- job_type_flags = JOB_STATION_JOB
- job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_REOPEN_ON_ROUNDSTART_LOSS | JOB_ASSIGN_QUIRKS
+ job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_REOPEN_ON_ROUNDSTART_LOSS | JOB_ASSIGN_QUIRKS | JOB_CAN_BE_INTERN
rpg_title = "Lout"
/datum/outfit/job/assistant
diff --git a/code/modules/jobs/job_types/atmospheric_technician.dm b/code/modules/jobs/job_types/atmospheric_technician.dm
index 33ade274535..894cd1c708d 100644
--- a/code/modules/jobs/job_types/atmospheric_technician.dm
+++ b/code/modules/jobs/job_types/atmospheric_technician.dm
@@ -35,8 +35,7 @@
/obj/item/grenade/gas_crystal/nitrous_oxide_crystal = 5,
)
- job_type_flags = JOB_STATION_JOB
- job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_REOPEN_ON_ROUNDSTART_LOSS | JOB_ASSIGN_QUIRKS
+ job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_REOPEN_ON_ROUNDSTART_LOSS | JOB_ASSIGN_QUIRKS | JOB_CAN_BE_INTERN
rpg_title = "Aeromancer"
/datum/outfit/job/atmos
diff --git a/code/modules/jobs/job_types/bartender.dm b/code/modules/jobs/job_types/bartender.dm
index 665858906d0..03eef61755e 100644
--- a/code/modules/jobs/job_types/bartender.dm
+++ b/code/modules/jobs/job_types/bartender.dm
@@ -29,8 +29,7 @@
/obj/item/stack/sheet/mineral/uranium = 10,
)
- job_type_flags = JOB_STATION_JOB
- job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_REOPEN_ON_ROUNDSTART_LOSS | JOB_ASSIGN_QUIRKS
+ job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_REOPEN_ON_ROUNDSTART_LOSS | JOB_ASSIGN_QUIRKS | JOB_CAN_BE_INTERN
rpg_title = "Tavernkeeper"
/datum/job/bartender/award_service(client/winner, award)
diff --git a/code/modules/jobs/job_types/botanist.dm b/code/modules/jobs/job_types/botanist.dm
index d64eb302773..43893211cb6 100644
--- a/code/modules/jobs/job_types/botanist.dm
+++ b/code/modules/jobs/job_types/botanist.dm
@@ -31,8 +31,7 @@
/obj/item/food/monkeycube/bee = 2
)
- job_type_flags = JOB_STATION_JOB
- job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_REOPEN_ON_ROUNDSTART_LOSS | JOB_ASSIGN_QUIRKS
+ job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_REOPEN_ON_ROUNDSTART_LOSS | JOB_ASSIGN_QUIRKS | JOB_CAN_BE_INTERN
rpg_title = "Gardener"
/datum/outfit/job/botanist
diff --git a/code/modules/jobs/job_types/captain.dm b/code/modules/jobs/job_types/captain.dm
index 1891bc89b44..6eb57e17c82 100755
--- a/code/modules/jobs/job_types/captain.dm
+++ b/code/modules/jobs/job_types/captain.dm
@@ -40,8 +40,7 @@
/obj/item/toy/captainsaid/collector = 20
)
- job_type_flags = JOB_STATION_JOB | JOB_HEAD_JOB
- job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_BOLD_SELECT_TEXT | JOB_REOPEN_ON_ROUNDSTART_LOSS | JOB_ASSIGN_QUIRKS
+ job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_BOLD_SELECT_TEXT | JOB_REOPEN_ON_ROUNDSTART_LOSS | JOB_ASSIGN_QUIRKS | JOB_CAN_BE_INTERN
rpg_title = "Star Duke"
voice_of_god_power = 1.4 //Command staff has authority
diff --git a/code/modules/jobs/job_types/cargo_technician.dm b/code/modules/jobs/job_types/cargo_technician.dm
index deebfe22e98..2b3fbd81313 100644
--- a/code/modules/jobs/job_types/cargo_technician.dm
+++ b/code/modules/jobs/job_types/cargo_technician.dm
@@ -32,8 +32,7 @@
/obj/item/gun/ballistic/rifle/boltaction = 1
)
rpg_title = "Merchantman"
- job_type_flags = JOB_STATION_JOB
- job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_REOPEN_ON_ROUNDSTART_LOSS | JOB_ASSIGN_QUIRKS
+ job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_REOPEN_ON_ROUNDSTART_LOSS | JOB_ASSIGN_QUIRKS | JOB_CAN_BE_INTERN | JOB_CAN_BE_INTERN
/datum/outfit/job/cargo_tech
diff --git a/code/modules/jobs/job_types/chaplain.dm b/code/modules/jobs/job_types/chaplain.dm
index 5c93e436d58..ff901d2fd4d 100644
--- a/code/modules/jobs/job_types/chaplain.dm
+++ b/code/modules/jobs/job_types/chaplain.dm
@@ -31,8 +31,7 @@
/obj/item/toy/plush/ratplush = 1
)
rpg_title = "Paladin"
- job_type_flags = JOB_STATION_JOB
- job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_REOPEN_ON_ROUNDSTART_LOSS | JOB_ASSIGN_QUIRKS
+ job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_REOPEN_ON_ROUNDSTART_LOSS | JOB_ASSIGN_QUIRKS | JOB_CAN_BE_INTERN | JOB_CAN_BE_INTERN
voice_of_god_power = 2 //Chaplains are very good at speaking with the voice of god
diff --git a/code/modules/jobs/job_types/chemist.dm b/code/modules/jobs/job_types/chemist.dm
index 799de25a287..0670eea63c6 100644
--- a/code/modules/jobs/job_types/chemist.dm
+++ b/code/modules/jobs/job_types/chemist.dm
@@ -35,8 +35,7 @@
/obj/item/paper/secretrecipe = 1
)
rpg_title = "Alchemist"
- job_type_flags = JOB_STATION_JOB
- job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_REOPEN_ON_ROUNDSTART_LOSS | JOB_ASSIGN_QUIRKS
+ job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_REOPEN_ON_ROUNDSTART_LOSS | JOB_ASSIGN_QUIRKS | JOB_CAN_BE_INTERN
/datum/outfit/job/chemist
diff --git a/code/modules/jobs/job_types/chief_engineer.dm b/code/modules/jobs/job_types/chief_engineer.dm
index b5f6662d465..cdf6117c44d 100644
--- a/code/modules/jobs/job_types/chief_engineer.dm
+++ b/code/modules/jobs/job_types/chief_engineer.dm
@@ -43,8 +43,7 @@
/obj/effect/spawner/random/engineering/tool_advanced = 3
)
rpg_title = "Head Crystallomancer"
- job_type_flags = JOB_STATION_JOB | JOB_HEAD_JOB
- job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_BOLD_SELECT_TEXT | JOB_REOPEN_ON_ROUNDSTART_LOSS | JOB_ASSIGN_QUIRKS
+ job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_BOLD_SELECT_TEXT | JOB_REOPEN_ON_ROUNDSTART_LOSS | JOB_ASSIGN_QUIRKS | JOB_CAN_BE_INTERN
voice_of_god_power = 1.4 //Command staff has authority
diff --git a/code/modules/jobs/job_types/chief_medical_officer.dm b/code/modules/jobs/job_types/chief_medical_officer.dm
index 56f76dbd4f8..b886a3a8f5a 100644
--- a/code/modules/jobs/job_types/chief_medical_officer.dm
+++ b/code/modules/jobs/job_types/chief_medical_officer.dm
@@ -40,8 +40,7 @@
)
family_heirlooms = list(/obj/item/storage/firstaid/ancient/heirloom)
rpg_title = "High Cleric"
- job_type_flags = JOB_STATION_JOB | JOB_HEAD_JOB
- job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_BOLD_SELECT_TEXT | JOB_REOPEN_ON_ROUNDSTART_LOSS | JOB_ASSIGN_QUIRKS
+ job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_BOLD_SELECT_TEXT | JOB_REOPEN_ON_ROUNDSTART_LOSS | JOB_ASSIGN_QUIRKS | JOB_CAN_BE_INTERN
voice_of_god_power = 1.4 //Command staff has authority
diff --git a/code/modules/jobs/job_types/clown.dm b/code/modules/jobs/job_types/clown.dm
index 7b89e8bc67a..c4a16a86803 100644
--- a/code/modules/jobs/job_types/clown.dm
+++ b/code/modules/jobs/job_types/clown.dm
@@ -32,8 +32,7 @@
family_heirlooms = list(/obj/item/bikehorn/golden)
rpg_title = "Jester"
- job_type_flags = JOB_STATION_JOB
- job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_REOPEN_ON_ROUNDSTART_LOSS | JOB_ASSIGN_QUIRKS
+ job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_REOPEN_ON_ROUNDSTART_LOSS | JOB_ASSIGN_QUIRKS | JOB_CAN_BE_INTERN
/datum/job/clown/after_spawn(mob/living/spawned, client/player_client)
diff --git a/code/modules/jobs/job_types/cook.dm b/code/modules/jobs/job_types/cook.dm
index 0da4460827f..8cbeada5cc4 100644
--- a/code/modules/jobs/job_types/cook.dm
+++ b/code/modules/jobs/job_types/cook.dm
@@ -28,8 +28,7 @@
family_heirlooms = list(/obj/item/reagent_containers/food/condiment/saltshaker, /obj/item/kitchen/rollingpin, /obj/item/clothing/head/chefhat)
rpg_title = "Tavern Chef"
- job_type_flags = JOB_STATION_JOB
- job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_REOPEN_ON_ROUNDSTART_LOSS | JOB_ASSIGN_QUIRKS
+ job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_REOPEN_ON_ROUNDSTART_LOSS | JOB_ASSIGN_QUIRKS | JOB_CAN_BE_INTERN
/datum/job/cook/New()
@@ -88,7 +87,7 @@
name = "Cook"
jobtype = /datum/job/cook
- id_trim = /datum/id_trim/job/cook
+ id_trim = /datum/id_trim/job/cook/chef
uniform = /obj/item/clothing/under/rank/civilian/chef
suit = /obj/item/clothing/suit/toggle/chef
backpack_contents = list(
@@ -107,6 +106,7 @@
var/datum/job/cook/J = SSjob.GetJobType(jobtype)
if(J) // Fix for runtime caused by invalid job being passed
if(J.cooks>0)//Cooks
+ id_trim = /datum/id_trim/job/cook
suit = /obj/item/clothing/suit/apron/chef
head = /obj/item/clothing/head/soft/mime
if(!visualsOnly)
diff --git a/code/modules/jobs/job_types/curator.dm b/code/modules/jobs/job_types/curator.dm
index 988f5e6dba6..599daa2d672 100644
--- a/code/modules/jobs/job_types/curator.dm
+++ b/code/modules/jobs/job_types/curator.dm
@@ -23,8 +23,7 @@
family_heirlooms = list(/obj/item/pen/fountain, /obj/item/storage/dice)
- job_type_flags = JOB_STATION_JOB
- job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_REOPEN_ON_ROUNDSTART_LOSS | JOB_ASSIGN_QUIRKS
+ job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_REOPEN_ON_ROUNDSTART_LOSS | JOB_ASSIGN_QUIRKS | JOB_CAN_BE_INTERN
voice_of_god_silence_power = 3
rpg_title = "Veteran Adventurer"
diff --git a/code/modules/jobs/job_types/detective.dm b/code/modules/jobs/job_types/detective.dm
index 2dd6aebd683..60deeee2a95 100644
--- a/code/modules/jobs/job_types/detective.dm
+++ b/code/modules/jobs/job_types/detective.dm
@@ -41,8 +41,7 @@
family_heirlooms = list(/obj/item/reagent_containers/food/drinks/bottle/whiskey)
rpg_title = "Thiefcatcher"
- job_type_flags = JOB_STATION_JOB
- job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_REOPEN_ON_ROUNDSTART_LOSS | JOB_ASSIGN_QUIRKS
+ job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_REOPEN_ON_ROUNDSTART_LOSS | JOB_ASSIGN_QUIRKS | JOB_CAN_BE_INTERN
/datum/outfit/job/detective
diff --git a/code/modules/jobs/job_types/geneticist.dm b/code/modules/jobs/job_types/geneticist.dm
index 5ab3a3162a9..76e3628bde0 100644
--- a/code/modules/jobs/job_types/geneticist.dm
+++ b/code/modules/jobs/job_types/geneticist.dm
@@ -29,8 +29,7 @@
family_heirlooms = list(/obj/item/clothing/under/shorts/purple)
rpg_title = "Genemancer"
- job_type_flags = JOB_STATION_JOB
- job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_REOPEN_ON_ROUNDSTART_LOSS | JOB_ASSIGN_QUIRKS
+ job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_REOPEN_ON_ROUNDSTART_LOSS | JOB_ASSIGN_QUIRKS | JOB_CAN_BE_INTERN
/datum/outfit/job/geneticist
diff --git a/code/modules/jobs/job_types/head_of_personnel.dm b/code/modules/jobs/job_types/head_of_personnel.dm
index 3a71006c3e0..8a637738685 100644
--- a/code/modules/jobs/job_types/head_of_personnel.dm
+++ b/code/modules/jobs/job_types/head_of_personnel.dm
@@ -39,8 +39,7 @@
family_heirlooms = list(/obj/item/reagent_containers/food/drinks/trophy/silver_cup)
rpg_title = "Guild Questgiver"
- job_type_flags = JOB_STATION_JOB | JOB_HEAD_JOB
- job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_BOLD_SELECT_TEXT | JOB_REOPEN_ON_ROUNDSTART_LOSS | JOB_ASSIGN_QUIRKS
+ job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_BOLD_SELECT_TEXT | JOB_REOPEN_ON_ROUNDSTART_LOSS | JOB_ASSIGN_QUIRKS | JOB_CAN_BE_INTERN
voice_of_god_power = 1.4 //Command staff has authority
diff --git a/code/modules/jobs/job_types/head_of_security.dm b/code/modules/jobs/job_types/head_of_security.dm
index 8667501a386..081bbf6577b 100644
--- a/code/modules/jobs/job_types/head_of_security.dm
+++ b/code/modules/jobs/job_types/head_of_security.dm
@@ -35,8 +35,7 @@
family_heirlooms = list(/obj/item/book/manual/wiki/security_space_law)
rpg_title = "Guard Leader"
- job_type_flags = JOB_STATION_JOB | JOB_HEAD_JOB
- job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_BOLD_SELECT_TEXT | JOB_REOPEN_ON_ROUNDSTART_LOSS | JOB_ASSIGN_QUIRKS
+ job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_BOLD_SELECT_TEXT | JOB_REOPEN_ON_ROUNDSTART_LOSS | JOB_ASSIGN_QUIRKS | JOB_CAN_BE_INTERN
voice_of_god_power = 1.4 //Command staff has authority
diff --git a/code/modules/jobs/job_types/janitor.dm b/code/modules/jobs/job_types/janitor.dm
index d29ab0533ab..6da67c51043 100644
--- a/code/modules/jobs/job_types/janitor.dm
+++ b/code/modules/jobs/job_types/janitor.dm
@@ -28,8 +28,7 @@
/obj/item/lightreplacer = 10
)
rpg_title = "Groundskeeper"
- job_type_flags = JOB_STATION_JOB
- job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_REOPEN_ON_ROUNDSTART_LOSS | JOB_ASSIGN_QUIRKS
+ job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_REOPEN_ON_ROUNDSTART_LOSS | JOB_ASSIGN_QUIRKS | JOB_CAN_BE_INTERN
/datum/outfit/job/janitor
diff --git a/code/modules/jobs/job_types/lawyer.dm b/code/modules/jobs/job_types/lawyer.dm
index 8b1317a09cb..bb58f241dce 100644
--- a/code/modules/jobs/job_types/lawyer.dm
+++ b/code/modules/jobs/job_types/lawyer.dm
@@ -26,8 +26,7 @@
rpg_title = "Magistrate"
family_heirlooms = list(/obj/item/gavelhammer, /obj/item/book/manual/wiki/security_space_law)
- job_type_flags = JOB_STATION_JOB
- job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_REOPEN_ON_ROUNDSTART_LOSS | JOB_ASSIGN_QUIRKS
+ job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_REOPEN_ON_ROUNDSTART_LOSS | JOB_ASSIGN_QUIRKS | JOB_CAN_BE_INTERN
/datum/outfit/job/lawyer
diff --git a/code/modules/jobs/job_types/medical_doctor.dm b/code/modules/jobs/job_types/medical_doctor.dm
index 6cfe125a564..0d6910b2392 100644
--- a/code/modules/jobs/job_types/medical_doctor.dm
+++ b/code/modules/jobs/job_types/medical_doctor.dm
@@ -36,8 +36,7 @@
/obj/effect/spawner/random/medical/memeorgans = 1
)
rpg_title = "Cleric"
- job_type_flags = JOB_STATION_JOB
- job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_REOPEN_ON_ROUNDSTART_LOSS | JOB_ASSIGN_QUIRKS
+ job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_REOPEN_ON_ROUNDSTART_LOSS | JOB_ASSIGN_QUIRKS | JOB_CAN_BE_INTERN
/datum/outfit/job/doctor
diff --git a/code/modules/jobs/job_types/mime.dm b/code/modules/jobs/job_types/mime.dm
index bccee757f01..71956c5e300 100644
--- a/code/modules/jobs/job_types/mime.dm
+++ b/code/modules/jobs/job_types/mime.dm
@@ -29,8 +29,7 @@
/obj/item/book/mimery = 1,
)
rpg_title = "Fool"
- job_type_flags = JOB_STATION_JOB
- job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_REOPEN_ON_ROUNDSTART_LOSS | JOB_ASSIGN_QUIRKS
+ job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_REOPEN_ON_ROUNDSTART_LOSS | JOB_ASSIGN_QUIRKS | JOB_CAN_BE_INTERN
voice_of_god_power = 0.5 //Why are you speaking
voice_of_god_silence_power = 3
diff --git a/code/modules/jobs/job_types/paramedic.dm b/code/modules/jobs/job_types/paramedic.dm
index dd082a31160..33dfda64ab8 100644
--- a/code/modules/jobs/job_types/paramedic.dm
+++ b/code/modules/jobs/job_types/paramedic.dm
@@ -35,8 +35,7 @@
/obj/item/reagent_containers/hypospray/medipen/survival/luxury = 5
)
rpg_title = "Corpse Runner"
- job_type_flags = JOB_STATION_JOB
- job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_REOPEN_ON_ROUNDSTART_LOSS | JOB_ASSIGN_QUIRKS
+ job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_REOPEN_ON_ROUNDSTART_LOSS | JOB_ASSIGN_QUIRKS | JOB_CAN_BE_INTERN
/datum/outfit/job/paramedic
diff --git a/code/modules/jobs/job_types/prisoner.dm b/code/modules/jobs/job_types/prisoner.dm
index 0944dcdeb86..39ca9a7eaf3 100644
--- a/code/modules/jobs/job_types/prisoner.dm
+++ b/code/modules/jobs/job_types/prisoner.dm
@@ -23,8 +23,7 @@
family_heirlooms = list(/obj/item/pen/blue)
rpg_title = "Defeated Miniboss"
- job_type_flags = JOB_STATION_JOB
- job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_ASSIGN_QUIRKS
+ job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_ASSIGN_QUIRKS | JOB_CAN_BE_INTERN
/datum/outfit/job/prisoner
diff --git a/code/modules/jobs/job_types/psychologist.dm b/code/modules/jobs/job_types/psychologist.dm
index 79491f8ba6d..b8c51861940 100644
--- a/code/modules/jobs/job_types/psychologist.dm
+++ b/code/modules/jobs/job_types/psychologist.dm
@@ -31,8 +31,7 @@
/obj/item/gun/syringe = 1
)
rpg_title = "Snake Oil Salesman"
- job_type_flags = JOB_STATION_JOB
- job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_REOPEN_ON_ROUNDSTART_LOSS | JOB_ASSIGN_QUIRKS
+ job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_REOPEN_ON_ROUNDSTART_LOSS | JOB_ASSIGN_QUIRKS | JOB_CAN_BE_INTERN
/datum/outfit/job/psychologist
diff --git a/code/modules/jobs/job_types/quartermaster.dm b/code/modules/jobs/job_types/quartermaster.dm
index fdf955435d3..01efa9170c4 100644
--- a/code/modules/jobs/job_types/quartermaster.dm
+++ b/code/modules/jobs/job_types/quartermaster.dm
@@ -29,8 +29,7 @@
/obj/item/circuitboard/machine/emitter = 3
)
rpg_title = "Steward"
- job_type_flags = JOB_STATION_JOB
- job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_BOLD_SELECT_TEXT | JOB_REOPEN_ON_ROUNDSTART_LOSS | JOB_ASSIGN_QUIRKS
+ job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_BOLD_SELECT_TEXT | JOB_REOPEN_ON_ROUNDSTART_LOSS | JOB_ASSIGN_QUIRKS | JOB_CAN_BE_INTERN
/datum/outfit/job/quartermaster
diff --git a/code/modules/jobs/job_types/research_director.dm b/code/modules/jobs/job_types/research_director.dm
index 5dfaddf4ec6..9dee88593c9 100644
--- a/code/modules/jobs/job_types/research_director.dm
+++ b/code/modules/jobs/job_types/research_director.dm
@@ -41,8 +41,7 @@
family_heirlooms = list(/obj/item/toy/plush/slimeplushie)
rpg_title = "Archmagister"
- job_type_flags = JOB_STATION_JOB | JOB_HEAD_JOB
- job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_BOLD_SELECT_TEXT | JOB_REOPEN_ON_ROUNDSTART_LOSS | JOB_ASSIGN_QUIRKS
+ job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_BOLD_SELECT_TEXT | JOB_REOPEN_ON_ROUNDSTART_LOSS | JOB_ASSIGN_QUIRKS | JOB_CAN_BE_INTERN
voice_of_god_power = 1.4 //Command staff has authority
diff --git a/code/modules/jobs/job_types/roboticist.dm b/code/modules/jobs/job_types/roboticist.dm
index eed5ed214a4..290fbd2e665 100644
--- a/code/modules/jobs/job_types/roboticist.dm
+++ b/code/modules/jobs/job_types/roboticist.dm
@@ -31,8 +31,7 @@
family_heirlooms = list(/obj/item/toy/plush/pkplush)
rpg_title = "Necromancer"
- job_type_flags = JOB_STATION_JOB
- job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_REOPEN_ON_ROUNDSTART_LOSS | JOB_ASSIGN_QUIRKS
+ job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_REOPEN_ON_ROUNDSTART_LOSS | JOB_ASSIGN_QUIRKS | JOB_CAN_BE_INTERN
/datum/job/roboticist/New()
diff --git a/code/modules/jobs/job_types/scientist.dm b/code/modules/jobs/job_types/scientist.dm
index be164f6e952..e0c67d36669 100644
--- a/code/modules/jobs/job_types/scientist.dm
+++ b/code/modules/jobs/job_types/scientist.dm
@@ -31,8 +31,7 @@
/obj/item/camera_bug = 1
)
rpg_title = "Thaumaturgist"
- job_type_flags = JOB_STATION_JOB
- job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_REOPEN_ON_ROUNDSTART_LOSS | JOB_ASSIGN_QUIRKS
+ job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_REOPEN_ON_ROUNDSTART_LOSS | JOB_ASSIGN_QUIRKS | JOB_CAN_BE_INTERN
/datum/outfit/job/scientist
diff --git a/code/modules/jobs/job_types/security_officer.dm b/code/modules/jobs/job_types/security_officer.dm
index 88d3de8e4a9..4ee29dce560 100644
--- a/code/modules/jobs/job_types/security_officer.dm
+++ b/code/modules/jobs/job_types/security_officer.dm
@@ -39,8 +39,7 @@
/obj/item/melee/baton/security/boomerang/loaded = 1
)
rpg_title = "Guard"
- job_type_flags = JOB_STATION_JOB
- job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_REOPEN_ON_ROUNDSTART_LOSS | JOB_ASSIGN_QUIRKS
+ job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_REOPEN_ON_ROUNDSTART_LOSS | JOB_ASSIGN_QUIRKS | JOB_CAN_BE_INTERN
GLOBAL_LIST_INIT(available_depts, list(SEC_DEPT_ENGINEERING, SEC_DEPT_MEDICAL, SEC_DEPT_SCIENCE, SEC_DEPT_SUPPLY))
diff --git a/code/modules/jobs/job_types/shaft_miner.dm b/code/modules/jobs/job_types/shaft_miner.dm
index 9475dc1c269..b5f35b4165f 100644
--- a/code/modules/jobs/job_types/shaft_miner.dm
+++ b/code/modules/jobs/job_types/shaft_miner.dm
@@ -24,8 +24,7 @@
family_heirlooms = list(/obj/item/pickaxe/mini, /obj/item/shovel)
rpg_title = "Adventurer"
- job_type_flags = JOB_STATION_JOB
- job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_REOPEN_ON_ROUNDSTART_LOSS | JOB_ASSIGN_QUIRKS
+ job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_REOPEN_ON_ROUNDSTART_LOSS | JOB_ASSIGN_QUIRKS | JOB_CAN_BE_INTERN
/datum/outfit/job/miner
diff --git a/code/modules/jobs/job_types/station_engineer.dm b/code/modules/jobs/job_types/station_engineer.dm
index 326829d87d9..6be9573da74 100644
--- a/code/modules/jobs/job_types/station_engineer.dm
+++ b/code/modules/jobs/job_types/station_engineer.dm
@@ -35,8 +35,7 @@
/obj/item/clothing/head/hardhat/red/upgraded = 1
)
rpg_title = "Crystallomancer"
- job_type_flags = JOB_STATION_JOB
- job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_REOPEN_ON_ROUNDSTART_LOSS | JOB_ASSIGN_QUIRKS
+ job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_REOPEN_ON_ROUNDSTART_LOSS | JOB_ASSIGN_QUIRKS | JOB_CAN_BE_INTERN
/datum/outfit/job/engineer
diff --git a/code/modules/jobs/job_types/virologist.dm b/code/modules/jobs/job_types/virologist.dm
index adb55bfb621..1b874b20ff3 100644
--- a/code/modules/jobs/job_types/virologist.dm
+++ b/code/modules/jobs/job_types/virologist.dm
@@ -36,8 +36,7 @@
/obj/item/stack/sheet/mineral/uranium = 5,
)
rpg_title = "Plague Doctor"
- job_type_flags = JOB_STATION_JOB
- job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_REOPEN_ON_ROUNDSTART_LOSS | JOB_ASSIGN_QUIRKS
+ job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_REOPEN_ON_ROUNDSTART_LOSS | JOB_ASSIGN_QUIRKS | JOB_CAN_BE_INTERN
/datum/outfit/job/virologist
diff --git a/code/modules/jobs/job_types/warden.dm b/code/modules/jobs/job_types/warden.dm
index b3b23115c37..1d92b3b493b 100644
--- a/code/modules/jobs/job_types/warden.dm
+++ b/code/modules/jobs/job_types/warden.dm
@@ -41,8 +41,7 @@
/obj/item/storage/box/lethalshot = 5
)
rpg_title = "Jailor"
- job_type_flags = JOB_STATION_JOB
- job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_BOLD_SELECT_TEXT | JOB_REOPEN_ON_ROUNDSTART_LOSS | JOB_ASSIGN_QUIRKS
+ job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_BOLD_SELECT_TEXT | JOB_REOPEN_ON_ROUNDSTART_LOSS | JOB_ASSIGN_QUIRKS | JOB_CAN_BE_INTERN
/datum/outfit/job/warden
diff --git a/code/modules/unit_tests/traitor.dm b/code/modules/unit_tests/traitor.dm
index 4c08001dc19..850e315e28d 100644
--- a/code/modules/unit_tests/traitor.dm
+++ b/code/modules/unit_tests/traitor.dm
@@ -1,8 +1,14 @@
/datum/unit_test/traitor/Run()
var/datum/dynamic_ruleset/roundstart/traitor/traitor_ruleset = allocate(/datum/dynamic_ruleset/roundstart/traitor)
- var/list/possible_jobs = SSjob.station_jobs.Copy()
- possible_jobs -= traitor_ruleset.protected_roles
- possible_jobs -= traitor_ruleset.restricted_roles
+ var/list/possible_jobs = list()
+ var/list/restricted_roles = traitor_ruleset.restricted_roles
+ for(var/datum/job/job as anything in SSjob.joinable_occupations)
+ if(!(job.job_flags & JOB_CREW_MEMBER))
+ continue
+ var/rank = job.title
+ if(rank in restricted_roles)
+ continue
+ possible_jobs += rank
for(var/job_name in possible_jobs)
var/datum/job/job = SSjob.GetJob(job_name)
diff --git a/icons/mob/huds/hud.dmi b/icons/mob/huds/hud.dmi
index 592c7594730..e8fdb47d2b0 100644
Binary files a/icons/mob/huds/hud.dmi and b/icons/mob/huds/hud.dmi differ