"
break_counter = 0
- for(var/job in headless_job_lists[department])
+
+ var/list/other_job_lists = list(
+ "Abstract" = list("Appearance", "Emote", "Deadchat", "OOC"),
+ )
+ for(var/department in other_job_lists)
+ output += "
"
var/list/long_job_lists = list(
- "Service" = GLOB.service_positions,
"Ghost and Other Roles" = list(
+ ROLE_PAI,
ROLE_BRAINWASHED,
ROLE_DEATHSQUAD,
ROLE_DRONE,
@@ -317,7 +312,7 @@
),
)
for(var/department in long_job_lists)
- output += "
"
+ output += "
"
break_counter = 0
for(var/job in long_job_lists[department])
if(break_counter > 0 && (break_counter % 10 == 0))
@@ -330,9 +325,10 @@
output += "
"
output += "
"
output += ""
- panel.set_content(jointext(output, ""))
+ panel.set_content(output.Join())
panel.open()
+
/datum/admins/proc/ban_parse_href(list/href_list)
if(!check_rights(R_BAN))
return
diff --git a/code/modules/admin/verbs/anonymousnames.dm b/code/modules/admin/verbs/anonymousnames.dm
index 81c22cfd73a..434f71a0569 100644
--- a/code/modules/admin/verbs/anonymousnames.dm
+++ b/code/modules/admin/verbs/anonymousnames.dm
@@ -154,7 +154,7 @@ GLOBAL_DATUM(current_anonymous_theme, /datum/anonymous_theme)
priority_announce("As punishment for this station's poor productivity when compared to neighbor stations, names and identities will be restricted until further notice.", "Finance Report", SSstation.announcer.get_rand_alert_sound())
/datum/anonymous_theme/employees/anonymous_name(mob/target)
- var/is_head_of_staff = target.mind.assigned_role.departments & DEPARTMENT_COMMAND
+ var/is_head_of_staff = target.mind.assigned_role.departments_bitflags & DEPARTMENT_BITFLAG_COMMAND
var/name = "[is_head_of_staff ? "Manager" : "Employee"] "
for(var/i in 1 to 6)
if(prob(30) || i == 1)
diff --git a/code/modules/antagonists/creep/creep.dm b/code/modules/antagonists/creep/creep.dm
index 61c16c3a6d1..951345472f2 100644
--- a/code/modules/antagonists/creep/creep.dm
+++ b/code/modules/antagonists/creep/creep.dm
@@ -162,14 +162,14 @@
return
var/list/viable_coworkers = list()
var/list/all_coworkers = list()
- var/our_departments = oldmind.assigned_role.departments
+ var/our_departments = oldmind.assigned_role.departments_bitflags
for(var/mob/living/carbon/human/human_alive in GLOB.alive_mob_list)
if(!human_alive.mind)
continue
if(human_alive == oldmind.current || human_alive.mind.assigned_role.faction != FACTION_STATION || human_alive.mind.has_antag_datum(/datum/antagonist/obsessed))
continue //the jealousy target has to have a job, and not be the obsession or obsessed.
all_coworkers += human_alive.mind
- if(!(our_departments & human_alive.mind.assigned_role.departments))
+ if(!(our_departments & human_alive.mind.assigned_role.departments_bitflags))
continue
viable_coworkers += human_alive.mind
diff --git a/code/modules/antagonists/gang/gang.dm b/code/modules/antagonists/gang/gang.dm
index 76af56865b8..800c2f8fcb0 100644
--- a/code/modules/antagonists/gang/gang.dm
+++ b/code/modules/antagonists/gang/gang.dm
@@ -272,7 +272,7 @@
/datum/antagonist/gang/purple/check_gang_objective()
for(var/mob/player as anything in GLOB.player_list)
- if(!(player.mind.assigned_role.departments & DEPARTMENT_SECURITY))
+ if(!(player.mind.assigned_role.departments_bitflags & DEPARTMENT_BITFLAG_SECURITY))
continue
if(!player.suiciding && !considered_alive(player))
return FALSE
diff --git a/code/modules/antagonists/revolution/revolution.dm b/code/modules/antagonists/revolution/revolution.dm
index 88308173ac6..521d8a73b39 100644
--- a/code/modules/antagonists/revolution/revolution.dm
+++ b/code/modules/antagonists/revolution/revolution.dm
@@ -22,7 +22,7 @@
/datum/antagonist/rev/can_be_owned(datum/mind/new_owner)
. = ..()
if(.)
- if(new_owner.assigned_role.departments & DEPARTMENT_COMMAND)
+ if(new_owner.assigned_role.departments_bitflags & DEPARTMENT_BITFLAG_COMMAND)
return FALSE
if(new_owner.unconvertable)
return FALSE
@@ -417,7 +417,7 @@
if (isnull(mind))
continue
- if (!(mind.assigned_role.departments & (DEPARTMENT_SECURITY|DEPARTMENT_COMMAND)))
+ if (!(mind.assigned_role.departments_bitflags & (DEPARTMENT_BITFLAG_SECURITY|DEPARTMENT_BITFLAG_COMMAND)))
continue
if (mind in ex_revs + ex_headrevs)
@@ -435,8 +435,9 @@
else
mind.announce_objectives()
- for (var/job_name in GLOB.command_positions + GLOB.security_positions)
- var/datum/job/job = SSjob.GetJob(job_name)
+ for(var/datum/job/job as anything in SSjob.joinable_occupations)
+ if(!(job.departments_bitflags & (DEPARTMENT_BITFLAG_SECURITY|DEPARTMENT_BITFLAG_COMMAND)))
+ continue
job.allow_bureaucratic_error = FALSE
job.total_positions = 0
diff --git a/code/modules/antagonists/traitor/datum_traitor.dm b/code/modules/antagonists/traitor/datum_traitor.dm
index 19c20567445..5efd82c9c3b 100644
--- a/code/modules/antagonists/traitor/datum_traitor.dm
+++ b/code/modules/antagonists/traitor/datum_traitor.dm
@@ -182,7 +182,7 @@
objectives += kill_objective
return
- if(prob(DOWNLOAD_PROB) && !(locate(/datum/objective/download) in objectives) && !(owner.assigned_role.departments & DEPARTMENT_SCIENCE))
+ if(prob(DOWNLOAD_PROB) && !(locate(/datum/objective/download) in objectives) && !(owner.assigned_role.departments_bitflags & DEPARTMENT_BITFLAG_SCIENCE))
var/datum/objective/download/download_objective = new
download_objective.owner = owner
download_objective.gen_amount_goal()
diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm
index b20e5daeb43..8a12511919b 100644
--- a/code/modules/client/preferences.dm
+++ b/code/modules/client/preferences.dm
@@ -913,7 +913,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
var/datum/job/lastJob
var/datum/job/overflow_role = SSjob.GetJobType(SSjob.overflow_role)
- for(var/datum/job/job as anything in sortList(SSjob.joinable_occupations, /proc/cmp_job_display_asc))
+ for(var/datum/job/job as anything in SSjob.joinable_occupations)
index += 1
if(index >= limit)
@@ -942,7 +942,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
if((job_preferences[overflow_role.title] == JP_LOW) && (rank != overflow_role.title) && !is_banned_from(user.ckey, overflow_role.title))
HTML += "
[rank] | "
continue
- if((rank in GLOB.command_positions) || (rank == "AI"))//Bold head jobs
+ if(job.job_flags & JOB_BOLD_SELECT_TEXT)//Bold head jobs
HTML += "
[rank]"
else
HTML += "
[rank]"
@@ -1964,7 +1964,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
/datum/preferences/proc/should_be_random_hardcore(datum/job/job, datum/mind/mind)
if(!randomise[RANDOM_HARDCORE])
return FALSE
- if(job.departments & DEPARTMENT_COMMAND) //No command staff
+ if(job.departments_bitflags & DEPARTMENT_BITFLAG_COMMAND) //No command staff
return FALSE
for(var/datum/antagonist/antag as anything in mind.antag_datums)
if(antag.get_team()) //No team antags
diff --git a/code/modules/events/pirates.dm b/code/modules/events/pirates.dm
index a86f84accbb..acc48cfe183 100644
--- a/code/modules/events/pirates.dm
+++ b/code/modules/events/pirates.dm
@@ -426,7 +426,7 @@
return 0
else if("pirate" in H.faction) //can't ransom your fellow pirates to CentCom!
return 0
- else if(H.mind.assigned_role.title in GLOB.command_positions)
+ else if(H.mind.assigned_role.departments_bitflags & DEPARTMENT_BITFLAG_COMMAND)
return 3000
else
return 1000
diff --git a/code/modules/events/wizard/departmentrevolt.dm b/code/modules/events/wizard/departmentrevolt.dm
index b80e63d1dd1..0ef4086f072 100644
--- a/code/modules/events/wizard/departmentrevolt.dm
+++ b/code/modules/events/wizard/departmentrevolt.dm
@@ -56,25 +56,37 @@
switch(department)
if("Uprising of Assistants") //God help you
- jobs_to_revolt = list("Assistant")
+ jobs_to_revolt += "Assistant"
nation_name = pick("Assa", "Mainte", "Tunnel", "Gris", "Grey", "Liath", "Grigio", "Ass", "Assi")
if("Medical")
- jobs_to_revolt = GLOB.medical_positions
+ var/datum/job_department/job_department = SSjob.get_department_type(/datum/job_department/medical)
+ for(var/datum/job/job as anything in job_department.department_jobs)
+ jobs_to_revolt += job.title
nation_name = pick("Mede", "Healtha", "Recova", "Chemi", "Viro", "Psych")
if("Engineering")
- jobs_to_revolt = GLOB.engineering_positions
+ var/datum/job_department/job_department = SSjob.get_department_type(/datum/job_department/engineering)
+ for(var/datum/job/job as anything in job_department.department_jobs)
+ jobs_to_revolt += job.title
nation_name = pick("Atomo", "Engino", "Power", "Teleco")
if("Science")
- jobs_to_revolt = GLOB.science_positions
+ var/datum/job_department/job_department = SSjob.get_department_type(/datum/job_department/science)
+ for(var/datum/job/job as anything in job_department.department_jobs)
+ jobs_to_revolt += job.title
nation_name = pick("Sci", "Griffa", "Geneti", "Explosi", "Mecha", "Xeno", "Nani", "Cyto")
if("Supply")
- jobs_to_revolt = GLOB.supply_positions
+ var/datum/job_department/job_department = SSjob.get_department_type(/datum/job_department/cargo)
+ for(var/datum/job/job as anything in job_department.department_jobs)
+ jobs_to_revolt += job.title
nation_name = pick("Cargo", "Guna", "Suppli", "Mule", "Crate", "Ore", "Mini", "Shaf")
if("Service") //the few, the proud, the technically aligned
- jobs_to_revolt = GLOB.service_positions.Copy() - list("Assistant", "Prisoner")
+ var/datum/job_department/job_department = SSjob.get_department_type(/datum/job_department/service)
+ for(var/datum/job/job as anything in job_department.department_jobs)
+ jobs_to_revolt += job.title
nation_name = pick("Honka", "Boozo", "Fatu", "Danka", "Mimi", "Libra", "Jani", "Religi")
if("Security")
- jobs_to_revolt = GLOB.security_positions
+ var/datum/job_department/job_department = SSjob.get_department_type(/datum/job_department/security)
+ for(var/datum/job/job as anything in job_department.department_jobs)
+ jobs_to_revolt += job.title
nation_name = pick("Securi", "Beepski", "Shitcuri", "Red", "Stunba", "Flashbango", "Flasha", "Stanfordi")
nation_name += pick("stan", "topia", "land", "nia", "ca", "tova", "dor", "ador", "tia", "sia", "ano", "tica", "tide", "cis", "marea", "co", "taoide", "slavia", "stotzka")
diff --git a/code/modules/jobs/departments/departments.dm b/code/modules/jobs/departments/departments.dm
new file mode 100644
index 00000000000..a6c798c622a
--- /dev/null
+++ b/code/modules/jobs/departments/departments.dm
@@ -0,0 +1,109 @@
+/// Singleton representing a category of jobs forming a department.
+/datum/job_department
+ /// Department as displayed on different menus.
+ var/department_name = "No department assigned"
+ /// Bitflags associated to the specific department.
+ var/department_bitflags = NONE
+ /// Typepath of the job datum leading this department.
+ var/datum/job/department_head = null
+ /// Experience granted by playing in a job of this department.
+ var/department_experience_type = null
+ /// The order in which this department appears on menus, in relation to other departments.
+ var/display_order = 0
+ /// The header color to be displayed in the ban panel, classes defined in banpanel.css
+ var/label_class = "undefineddepartment"
+ /// The color used in the latejoin menu.
+ var/latejoin_color = "#6681a5"
+ /// Job singleton datums associated to this department. Populated on job initialization.
+ var/list/department_jobs = list()
+
+
+/// Handles adding jobs to the department and setting up the job bitflags.
+/datum/job_department/proc/add_job(datum/job/job)
+ department_jobs += job
+ job.departments_bitflags |= department_bitflags
+
+
+/datum/job_department/command
+ department_name = DEPARTMENT_COMMAND
+ department_bitflags = DEPARTMENT_BITFLAG_COMMAND
+ department_head = /datum/job/captain
+ department_experience_type = EXP_TYPE_COMMAND
+ display_order = 1
+ label_class = "command"
+ latejoin_color = "#ccccff"
+
+
+/datum/job_department/security
+ department_name = DEPARTMENT_SECURITY
+ department_bitflags = DEPARTMENT_BITFLAG_SECURITY
+ department_head = /datum/job/head_of_security
+ department_experience_type = EXP_TYPE_SECURITY
+ display_order = 2
+ label_class = "security"
+ latejoin_color = "#ffdddd"
+
+
+/datum/job_department/engineering
+ department_name = DEPARTMENT_ENGINEERING
+ department_bitflags = DEPARTMENT_BITFLAG_ENGINEERING
+ department_head = /datum/job/chief_engineer
+ department_experience_type = EXP_TYPE_ENGINEERING
+ display_order = 3
+ label_class = "engineering"
+ latejoin_color = "#ffeeaa"
+
+
+/datum/job_department/medical
+ department_name = DEPARTMENT_MEDICAL
+ department_bitflags = DEPARTMENT_BITFLAG_MEDICAL
+ department_head = /datum/job/chief_medical_officer
+ department_experience_type = EXP_TYPE_MEDICAL
+ display_order = 4
+ label_class = "medical"
+ latejoin_color = "#ffddf0"
+
+
+/datum/job_department/science
+ department_name = DEPARTMENT_SCIENCE
+ department_bitflags = DEPARTMENT_BITFLAG_SCIENCE
+ department_head = /datum/job/research_director
+ department_experience_type = EXP_TYPE_SCIENCE
+ display_order = 5
+ label_class = "science"
+ latejoin_color = "#ffddff"
+
+
+/datum/job_department/cargo
+ department_name = DEPARTMENT_CARGO
+ department_bitflags = DEPARTMENT_BITFLAG_CARGO
+ department_head = /datum/job/quartermaster
+ department_experience_type = EXP_TYPE_SUPPLY
+ display_order = 6
+ label_class = "supply"
+ latejoin_color = "#ddddff"
+
+
+/datum/job_department/service
+ department_name = DEPARTMENT_SERVICE
+ department_bitflags = DEPARTMENT_BITFLAG_SERVICE
+ department_head = /datum/job/head_of_personnel
+ department_experience_type = EXP_TYPE_SERVICE
+ display_order = 7
+ label_class = "service"
+ latejoin_color = "#bbe291"
+
+
+/datum/job_department/silicon
+ department_name = DEPARTMENT_SILICON
+ department_bitflags = DEPARTMENT_BITFLAG_SILICON
+ department_head = /datum/job/ai
+ department_experience_type = EXP_TYPE_SILICON
+ display_order = 8
+ label_class = "silicon"
+ latejoin_color = "#ccffcc"
+
+
+/// Catch-all department for undefined jobs.
+/datum/job_department/undefined
+ display_order = 10
diff --git a/code/modules/jobs/job_exp.dm b/code/modules/jobs/job_exp.dm
index 42a7863347a..46392c4a997 100644
--- a/code/modules/jobs/job_exp.dm
+++ b/code/modules/jobs/job_exp.dm
@@ -1,6 +1,7 @@
GLOBAL_LIST_EMPTY(exp_to_update)
GLOBAL_PROTECT(exp_to_update)
+#define IS_XP_LOCKED(job) (exp_requirements && ((exp_required_type_department && CONFIG_GET(flag/use_exp_restrictions_heads)) || (exp_required_type && CONFIG_GET(flag/use_exp_restrictions_other))))
// Procs
/datum/job/proc/required_playtime_remaining(client/C)
if(!C)
@@ -9,9 +10,7 @@ GLOBAL_PROTECT(exp_to_update)
return 0
if(!SSdbcore.Connect())
return 0
- if(!exp_requirements || !exp_type)
- return 0
- if(!job_is_xp_locked(src.title))
+ if(!IS_XP_LOCKED(src))
return 0
if(CONFIG_GET(flag/use_exp_restrictions_admin_bypass) && check_rights_for(C,R_ADMIN))
return 0
@@ -24,37 +23,32 @@ GLOBAL_PROTECT(exp_to_update)
return 0
else
return (job_requirement - my_exp)
+#undef IS_XP_LOCKED
+
/datum/job/proc/get_exp_req_amount()
- if(title in (GLOB.command_positions | list("AI")))
+ if(exp_required_type_department)
var/uerhh = CONFIG_GET(number/use_exp_restrictions_heads_hours)
if(uerhh)
return uerhh * 60
return exp_requirements
-/datum/job/proc/get_exp_req_type()
- if(title in (GLOB.command_positions | list("AI")))
- if(CONFIG_GET(flag/use_exp_restrictions_heads_department) && exp_type_department)
- return exp_type_department
- return exp_type
-/proc/job_is_xp_locked(jobtitle)
- if(!CONFIG_GET(flag/use_exp_restrictions_heads) && (jobtitle in (GLOB.command_positions | list("AI"))))
- return FALSE
- if(!CONFIG_GET(flag/use_exp_restrictions_other) && !(jobtitle in (GLOB.command_positions | list("AI"))))
- return FALSE
- return TRUE
+/datum/job/proc/get_exp_req_type()
+ if(exp_required_type_department && CONFIG_GET(flag/use_exp_restrictions_heads_department))
+ return exp_required_type_department
+ return exp_required_type
+
/client/proc/calc_exp_type(exptype)
- var/list/explist = prefs.exp.Copy()
- var/amount = 0
- var/list/typelist = GLOB.exp_jobsmap[exptype]
- if(!typelist)
+ var/list/job_list = SSjob.experience_jobs_map[exptype]
+ if(!job_list)
return -1
- for(var/job in typelist["titles"])
- if(job in explist)
- amount += explist[job]
- return amount
+ var/list/exp_map = prefs.exp.Copy()
+ . = 0
+ for(var/datum/job/job as anything in job_list)
+ . += exp_map[job.title]
+
/client/proc/get_exp_living(pure_numeric = FALSE)
if(!prefs.exp || !prefs.exp[EXP_TYPE_LIVING])
diff --git a/code/modules/jobs/job_types/_job.dm b/code/modules/jobs/job_types/_job.dm
index 1cca7380cfa..7b458d7d174 100644
--- a/code/modules/jobs/job_types/_job.dm
+++ b/code/modules/jobs/job_types/_job.dm
@@ -48,10 +48,14 @@
/// The job's outfit that will be assigned for plasmamen.
var/plasmaman_outfit = null
+ /// Minutes of experience-time required to play in this job. The type is determined by [exp_required_type] and [exp_required_type_department] depending on configs.
var/exp_requirements = 0
-
- var/exp_type = ""
- var/exp_type_department = ""
+ /// Experience required to play this job, if the config is enabled, and `exp_required_type_department` is not enabled with the proper config.
+ var/exp_required_type = ""
+ /// Department experience required to play this job, if the config is enabled.
+ var/exp_required_type_department = ""
+ /// Experience type granted by playing in this job.
+ var/exp_granted_type = ""
var/paycheck = PAYCHECK_MINIMAL
var/paycheck_department = ACCOUNT_CIV
@@ -73,8 +77,10 @@
/// If this job's mail goodies compete with generic goodies.
var/exclusive_mail_goodies = FALSE
- ///Bitfield of departments this job belongs wit
- var/departments = NONE
+ /// Bitfield of departments this job belongs to. These get setup when adding the job into the department, on job datum creation.
+ var/departments_bitflags = NONE
+ /// Lazy list with the departments this job belongs to.
+ var/list/departments_list = null
/// Should this job be allowed to be picked for the bureaucratic error event?
var/allow_bureaucratic_error = TRUE
@@ -85,7 +91,7 @@
/// List of family heirlooms this job can get with the family heirloom quirk. List of types.
var/list/family_heirlooms
- /// All values = (JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK)
+ /// All values = (JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_BOLD_SELECT_TEXT)
var/job_flags = NONE
/// Multiplier for general usage of the voice of god.
@@ -387,7 +393,7 @@
if(!player_client)
return // Disconnected while checking for the appearance ban.
if(fully_randomize)
- if(CONFIG_GET(flag/enforce_human_authority) && (job.departments & DEPARTMENT_COMMAND))
+ if(CONFIG_GET(flag/enforce_human_authority) && (job.departments_bitflags & DEPARTMENT_BITFLAG_COMMAND))
if(player_client.prefs.pref_species.id != SPECIES_HUMAN)
player_client.prefs.pref_species = new /datum/species/human
player_client.prefs.randomise_appearance_prefs(~RANDOMIZE_SPECIES)
@@ -398,7 +404,7 @@
fully_replace_character_name(null, GLOB.current_anonymous_theme.anonymous_name(src))
else
var/is_antag = (player_client.mob.mind in GLOB.pre_setup_antags)
- if(CONFIG_GET(flag/enforce_human_authority) && (job.departments & DEPARTMENT_COMMAND))
+ if(CONFIG_GET(flag/enforce_human_authority) && (job.departments_bitflags & DEPARTMENT_BITFLAG_COMMAND))
player_client.prefs.randomise[RANDOM_SPECIES] = FALSE
if(player_client.prefs.pref_species.id != SPECIES_HUMAN)
player_client.prefs.pref_species = new /datum/species/human
diff --git a/code/modules/jobs/job_types/ai.dm b/code/modules/jobs/job_types/ai.dm
index ffb9e640bf5..6a0dab256c5 100644
--- a/code/modules/jobs/job_types/ai.dm
+++ b/code/modules/jobs/job_types/ai.dm
@@ -10,13 +10,16 @@
req_admin_notify = TRUE
minimal_player_age = 30
exp_requirements = 180
- exp_type = EXP_TYPE_CREW
- exp_type_department = EXP_TYPE_SILICON
+ exp_required_type = EXP_TYPE_CREW
+ exp_required_type_department = EXP_TYPE_SILICON
+ exp_granted_type = EXP_TYPE_CREW
display_order = JOB_DISPLAY_ORDER_AI
allow_bureaucratic_error = FALSE
- departments = DEPARTMENT_SILICON
+ departments_list = list(
+ /datum/job_department/silicon,
+ )
random_spawns_possible = FALSE
- job_flags = JOB_NEW_PLAYER_JOINABLE | JOB_EQUIP_RANK
+ job_flags = JOB_NEW_PLAYER_JOINABLE | JOB_EQUIP_RANK | JOB_BOLD_SELECT_TEXT
var/do_special_check = TRUE
diff --git a/code/modules/jobs/job_types/assistant.dm b/code/modules/jobs/job_types/assistant.dm
index 0de04858c7a..302dd47f18a 100644
--- a/code/modules/jobs/job_types/assistant.dm
+++ b/code/modules/jobs/job_types/assistant.dm
@@ -8,10 +8,10 @@ Assistant
spawn_positions = 5
supervisors = "absolutely everyone"
selection_color = "#dddddd"
+ exp_granted_type = EXP_TYPE_CREW
outfit = /datum/outfit/job/assistant
plasmaman_outfit = /datum/outfit/plasmaman
paycheck = PAYCHECK_ASSISTANT // Get a job. Job reassignment changes your paycheck now. Get over it.
- departments = DEPARTMENT_SERVICE
liver_traits = list(TRAIT_GREYTIDE_METABOLISM)
@@ -29,7 +29,7 @@ Assistant
/obj/item/crowbar/large = 1
)
- job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE
+ job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_REOPEN_ON_ROUNDSTART_LOSS
/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 eeb3a77d03b..6711674bd9e 100644
--- a/code/modules/jobs/job_types/atmospheric_technician.dm
+++ b/code/modules/jobs/job_types/atmospheric_technician.dm
@@ -7,7 +7,8 @@
supervisors = "the chief engineer"
selection_color = "#fff5cc"
exp_requirements = 60
- exp_type = EXP_TYPE_CREW
+ exp_required_type = EXP_TYPE_CREW
+ exp_granted_type = EXP_TYPE_CREW
outfit = /datum/outfit/job/atmos
plasmaman_outfit = /datum/outfit/plasmaman/atmospherics
@@ -19,11 +20,13 @@
display_order = JOB_DISPLAY_ORDER_ATMOSPHERIC_TECHNICIAN
bounty_types = CIV_JOB_ENG
- departments = DEPARTMENT_ENGINEERING
+ departments_list = list(
+ /datum/job_department/engineering,
+ )
family_heirlooms = list(/obj/item/lighter, /obj/item/lighter/greyscale, /obj/item/storage/box/matches)
- job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE
+ job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_REOPEN_ON_ROUNDSTART_LOSS
/datum/outfit/job/atmos
diff --git a/code/modules/jobs/job_types/bartender.dm b/code/modules/jobs/job_types/bartender.dm
index b576fdffa60..68dabf6842d 100644
--- a/code/modules/jobs/job_types/bartender.dm
+++ b/code/modules/jobs/job_types/bartender.dm
@@ -6,6 +6,7 @@
spawn_positions = 1
supervisors = "the head of personnel"
selection_color = "#bbe291"
+ exp_granted_type = EXP_TYPE_CREW
outfit = /datum/outfit/job/bartender
plasmaman_outfit = /datum/outfit/plasmaman/bar
@@ -14,7 +15,9 @@
paycheck_department = ACCOUNT_SRV
display_order = JOB_DISPLAY_ORDER_BARTENDER
bounty_types = CIV_JOB_DRINK
- departments = DEPARTMENT_SERVICE
+ departments_list = list(
+ /datum/job_department/service,
+ )
family_heirlooms = list(/obj/item/reagent_containers/glass/rag, /obj/item/clothing/head/that, /obj/item/reagent_containers/food/drinks/shaker)
@@ -25,7 +28,7 @@
/obj/item/stack/sheet/mineral/uranium = 10,
)
- job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE
+ job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_REOPEN_ON_ROUNDSTART_LOSS
/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 e7368c10896..ecd967e68db 100644
--- a/code/modules/jobs/job_types/botanist.dm
+++ b/code/modules/jobs/job_types/botanist.dm
@@ -6,6 +6,7 @@
spawn_positions = 2
supervisors = "the head of personnel"
selection_color = "#bbe291"
+ exp_granted_type = EXP_TYPE_CREW
outfit = /datum/outfit/job/botanist
plasmaman_outfit = /datum/outfit/plasmaman/botany
@@ -14,7 +15,9 @@
paycheck_department = ACCOUNT_SRV
display_order = JOB_DISPLAY_ORDER_BOTANIST
bounty_types = CIV_JOB_GROW
- departments = DEPARTMENT_SERVICE
+ departments_list = list(
+ /datum/job_department/service,
+ )
family_heirlooms = list(/obj/item/cultivator, /obj/item/reagent_containers/glass/bucket, /obj/item/toy/plush/beeplushie)
@@ -27,7 +30,7 @@
/obj/item/food/monkeycube/bee = 2
)
- job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE
+ job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_REOPEN_ON_ROUNDSTART_LOSS
/datum/outfit/job/botanist
diff --git a/code/modules/jobs/job_types/captain.dm b/code/modules/jobs/job_types/captain.dm
index 15d729beec9..5e60dd92e05 100755
--- a/code/modules/jobs/job_types/captain.dm
+++ b/code/modules/jobs/job_types/captain.dm
@@ -10,8 +10,9 @@
req_admin_notify = 1
minimal_player_age = 14
exp_requirements = 180
- exp_type = EXP_TYPE_CREW
- exp_type_department = EXP_TYPE_COMMAND
+ exp_required_type = EXP_TYPE_CREW
+ exp_required_type_department = EXP_TYPE_COMMAND
+ exp_granted_type = EXP_TYPE_CREW
outfit = /datum/outfit/job/captain
plasmaman_outfit = /datum/outfit/plasmaman/captain
@@ -22,7 +23,9 @@
liver_traits = list(TRAIT_ROYAL_METABOLISM)
display_order = JOB_DISPLAY_ORDER_CAPTAIN
- departments = DEPARTMENT_COMMAND
+ departments_list = list(
+ /datum/job_department/command,
+ )
family_heirlooms = list(/obj/item/reagent_containers/food/drinks/flask/gold)
@@ -32,7 +35,7 @@
/obj/item/reagent_containers/food/drinks/bottle/champagne = 10
)
- job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE
+ 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
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 3e9ea2a8420..a46fffffe1c 100644
--- a/code/modules/jobs/job_types/cargo_technician.dm
+++ b/code/modules/jobs/job_types/cargo_technician.dm
@@ -6,6 +6,7 @@
spawn_positions = 2
supervisors = "the quartermaster and the head of personnel"
selection_color = "#dcba97"
+ exp_granted_type = EXP_TYPE_CREW
outfit = /datum/outfit/job/cargo_tech
plasmaman_outfit = /datum/outfit/plasmaman/cargo
@@ -14,7 +15,9 @@
paycheck_department = ACCOUNT_CAR
display_order = JOB_DISPLAY_ORDER_CARGO_TECHNICIAN
bounty_types = CIV_JOB_RANDOM
- departments = DEPARTMENT_CARGO
+ departments_list = list(
+ /datum/job_department/cargo,
+ )
family_heirlooms = list(/obj/item/clipboard)
@@ -26,7 +29,7 @@
/obj/item/gun/ballistic/rifle/boltaction = 1
)
- job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE
+ job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_REOPEN_ON_ROUNDSTART_LOSS
/datum/outfit/job/cargo_tech
diff --git a/code/modules/jobs/job_types/chaplain.dm b/code/modules/jobs/job_types/chaplain.dm
index 4f96d64046b..248915a1173 100644
--- a/code/modules/jobs/job_types/chaplain.dm
+++ b/code/modules/jobs/job_types/chaplain.dm
@@ -6,6 +6,7 @@
spawn_positions = 1
supervisors = "the head of personnel"
selection_color = "#bbe291"
+ exp_granted_type = EXP_TYPE_CREW
outfit = /datum/outfit/job/chaplain
plasmaman_outfit = /datum/outfit/plasmaman/chaplain
@@ -14,7 +15,9 @@
paycheck_department = ACCOUNT_SRV
display_order = JOB_DISPLAY_ORDER_CHAPLAIN
- departments = DEPARTMENT_SERVICE
+ departments_list = list(
+ /datum/job_department/service,
+ )
family_heirlooms = list(/obj/item/toy/windup_toolbox, /obj/item/reagent_containers/food/drinks/bottle/holywater)
@@ -26,7 +29,7 @@
/obj/item/toy/plush/ratplush = 1
)
- job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE
+ job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_REOPEN_ON_ROUNDSTART_LOSS
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 082cd4dece6..1343d036ae9 100644
--- a/code/modules/jobs/job_types/chemist.dm
+++ b/code/modules/jobs/job_types/chemist.dm
@@ -6,8 +6,9 @@
spawn_positions = 2
supervisors = "the chief medical officer"
selection_color = "#ffeef0"
- exp_type = EXP_TYPE_CREW
exp_requirements = 60
+ exp_required_type = EXP_TYPE_CREW
+ exp_granted_type = EXP_TYPE_CREW
outfit = /datum/outfit/job/chemist
plasmaman_outfit = /datum/outfit/plasmaman/chemist
@@ -19,7 +20,9 @@
display_order = JOB_DISPLAY_ORDER_CHEMIST
bounty_types = CIV_JOB_CHEM
- departments = DEPARTMENT_MEDICAL
+ departments_list = list(
+ /datum/job_department/medical,
+ )
family_heirlooms = list(/obj/item/book/manual/wiki/chemistry, /obj/item/ph_booklet)
@@ -30,7 +33,7 @@
/obj/item/paper/secretrecipe = 1
)
- job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE
+ job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_REOPEN_ON_ROUNDSTART_LOSS
/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 e8eac766f5a..d8c18abd861 100644
--- a/code/modules/jobs/job_types/chief_engineer.dm
+++ b/code/modules/jobs/job_types/chief_engineer.dm
@@ -11,12 +11,16 @@
req_admin_notify = 1
minimal_player_age = 7
exp_requirements = 180
- exp_type = EXP_TYPE_CREW
- exp_type_department = EXP_TYPE_ENGINEERING
+ exp_required_type = EXP_TYPE_CREW
+ exp_required_type_department = EXP_TYPE_ENGINEERING
+ exp_granted_type = EXP_TYPE_CREW
outfit = /datum/outfit/job/ce
plasmaman_outfit = /datum/outfit/plasmaman/chief_engineer
- departments = DEPARTMENT_ENGINEERING | DEPARTMENT_COMMAND
+ departments_list = list(
+ /datum/job_department/engineering,
+ /datum/job_department/command,
+ )
paycheck = PAYCHECK_COMMAND
paycheck_department = ACCOUNT_ENG
@@ -37,7 +41,7 @@
/obj/effect/spawner/lootdrop/space/fancytool/engineonly = 3
)
- job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE
+ 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
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 6963d00ddfc..93cdc682ef5 100644
--- a/code/modules/jobs/job_types/chief_medical_officer.dm
+++ b/code/modules/jobs/job_types/chief_medical_officer.dm
@@ -11,12 +11,16 @@
req_admin_notify = 1
minimal_player_age = 7
exp_requirements = 180
- exp_type = EXP_TYPE_CREW
- exp_type_department = EXP_TYPE_MEDICAL
+ exp_required_type = EXP_TYPE_CREW
+ exp_required_type_department = EXP_TYPE_MEDICAL
+ exp_granted_type = EXP_TYPE_CREW
outfit = /datum/outfit/job/cmo
plasmaman_outfit = /datum/outfit/plasmaman/chief_medical_officer
- departments = DEPARTMENT_MEDICAL | DEPARTMENT_COMMAND
+ departments_list = list(
+ /datum/job_department/medical,
+ /datum/job_department/command,
+ )
paycheck = PAYCHECK_COMMAND
paycheck_department = ACCOUNT_MED
@@ -34,7 +38,7 @@
)
family_heirlooms = list(/obj/item/storage/firstaid/ancient/heirloom)
- job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE
+ 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
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 babd996ec49..e0072540efb 100644
--- a/code/modules/jobs/job_types/clown.dm
+++ b/code/modules/jobs/job_types/clown.dm
@@ -6,6 +6,7 @@
spawn_positions = 1
supervisors = "the head of personnel"
selection_color = "#bbe291"
+ exp_granted_type = EXP_TYPE_CREW
outfit = /datum/outfit/job/clown
plasmaman_outfit = /datum/outfit/plasmaman/clown
@@ -16,7 +17,9 @@
liver_traits = list(TRAIT_COMEDY_METABOLISM)
display_order = JOB_DISPLAY_ORDER_CLOWN
- departments = DEPARTMENT_SERVICE
+ departments_list = list(
+ /datum/job_department/service,
+ )
mail_goodies = list(
/obj/item/food/grown/banana = 100,
@@ -28,7 +31,7 @@
family_heirlooms = list(/obj/item/bikehorn/golden)
- job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE
+ job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_REOPEN_ON_ROUNDSTART_LOSS
/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 58062a85c9d..c90a530d395 100644
--- a/code/modules/jobs/job_types/cook.dm
+++ b/code/modules/jobs/job_types/cook.dm
@@ -6,6 +6,7 @@
spawn_positions = 1
supervisors = "the head of personnel"
selection_color = "#bbe291"
+ exp_granted_type = EXP_TYPE_CREW
var/cooks = 0 //Counts cooks amount
/// List of areas that are counted as the kitchen for the purposes of CQC. Defaults to just the kitchen. Mapping configs can and should override this.
var/list/kitchen_areas = list(/area/service/kitchen)
@@ -20,11 +21,13 @@
display_order = JOB_DISPLAY_ORDER_COOK
bounty_types = CIV_JOB_CHEF
- departments = DEPARTMENT_SERVICE
+ departments_list = list(
+ /datum/job_department/service,
+ )
family_heirlooms = list(/obj/item/reagent_containers/food/condiment/saltshaker, /obj/item/kitchen/rollingpin, /obj/item/clothing/head/chefhat)
- job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE
+ job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_REOPEN_ON_ROUNDSTART_LOSS
/datum/job/cook/New()
diff --git a/code/modules/jobs/job_types/curator.dm b/code/modules/jobs/job_types/curator.dm
index de6b764cf69..d677a13f3b7 100644
--- a/code/modules/jobs/job_types/curator.dm
+++ b/code/modules/jobs/job_types/curator.dm
@@ -6,6 +6,7 @@
spawn_positions = 1
supervisors = "the head of personnel"
selection_color = "#bbe291"
+ exp_granted_type = EXP_TYPE_CREW
outfit = /datum/outfit/job/curator
plasmaman_outfit = /datum/outfit/plasmaman/curator
@@ -14,11 +15,13 @@
paycheck_department = ACCOUNT_SRV
display_order = JOB_DISPLAY_ORDER_CURATOR
- departments = DEPARTMENT_SERVICE
+ departments_list = list(
+ /datum/job_department/service,
+ )
family_heirlooms = list(/obj/item/pen/fountain, /obj/item/storage/pill_bottle/dice)
- job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE
+ job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_REOPEN_ON_ROUNDSTART_LOSS
voice_of_god_silence_power = 3
diff --git a/code/modules/jobs/job_types/cyborg.dm b/code/modules/jobs/job_types/cyborg.dm
index ad2e2adf59c..703c0e6adee 100644
--- a/code/modules/jobs/job_types/cyborg.dm
+++ b/code/modules/jobs/job_types/cyborg.dm
@@ -9,10 +9,14 @@
spawn_type = /mob/living/silicon/robot
minimal_player_age = 21
exp_requirements = 120
- exp_type = EXP_TYPE_CREW
+ exp_required_type = EXP_TYPE_CREW
+ exp_granted_type = EXP_TYPE_CREW
display_order = JOB_DISPLAY_ORDER_CYBORG
- departments = DEPARTMENT_SILICON
+
+ departments_list = list(
+ /datum/job_department/silicon,
+ )
random_spawns_possible = FALSE
job_flags = JOB_NEW_PLAYER_JOINABLE | JOB_EQUIP_RANK
diff --git a/code/modules/jobs/job_types/detective.dm b/code/modules/jobs/job_types/detective.dm
index 3cb5e9ce83b..5c3e1f4ea19 100644
--- a/code/modules/jobs/job_types/detective.dm
+++ b/code/modules/jobs/job_types/detective.dm
@@ -9,11 +9,14 @@
selection_color = "#ffeeee"
minimal_player_age = 7
exp_requirements = 300
- exp_type = EXP_TYPE_CREW
+ exp_required_type = EXP_TYPE_CREW
+ exp_granted_type = EXP_TYPE_CREW
outfit = /datum/outfit/job/detective
plasmaman_outfit = /datum/outfit/plasmaman/detective
- departments = DEPARTMENT_SECURITY
+ departments_list = list(
+ /datum/job_department/security,
+ )
paycheck = PAYCHECK_MEDIUM
paycheck_department = ACCOUNT_SEC
@@ -36,7 +39,7 @@
family_heirlooms = list(/obj/item/reagent_containers/food/drinks/bottle/whiskey)
- job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE
+ job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_REOPEN_ON_ROUNDSTART_LOSS
/datum/outfit/job/detective
diff --git a/code/modules/jobs/job_types/geneticist.dm b/code/modules/jobs/job_types/geneticist.dm
index b62c3cdbf27..39cbe16585e 100644
--- a/code/modules/jobs/job_types/geneticist.dm
+++ b/code/modules/jobs/job_types/geneticist.dm
@@ -6,12 +6,15 @@
spawn_positions = 2
supervisors = "the research director"
selection_color = "#ffeeff"
- exp_type = EXP_TYPE_CREW
exp_requirements = 60
+ exp_required_type = EXP_TYPE_CREW
+ exp_granted_type = EXP_TYPE_CREW
outfit = /datum/outfit/job/geneticist
plasmaman_outfit = /datum/outfit/plasmaman/genetics
- departments = DEPARTMENT_MEDICAL
+ departments_list = list(
+ /datum/job_department/medical,
+ )
paycheck = PAYCHECK_MEDIUM
paycheck_department = ACCOUNT_SCI
@@ -25,7 +28,7 @@
family_heirlooms = list(/obj/item/clothing/under/shorts/purple)
- job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE
+ job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_REOPEN_ON_ROUNDSTART_LOSS
/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 8d400d2c9d8..e35b2cf5229 100644
--- a/code/modules/jobs/job_types/head_of_personnel.dm
+++ b/code/modules/jobs/job_types/head_of_personnel.dm
@@ -11,12 +11,16 @@
req_admin_notify = 1
minimal_player_age = 10
exp_requirements = 180
- exp_type = EXP_TYPE_CREW
- exp_type_department = EXP_TYPE_SERVICE
+ exp_required_type = EXP_TYPE_CREW
+ exp_required_type_department = EXP_TYPE_SERVICE
+ exp_granted_type = EXP_TYPE_CREW
outfit = /datum/outfit/job/hop
plasmaman_outfit = /datum/outfit/plasmaman/head_of_personnel
- departments = DEPARTMENT_COMMAND | DEPARTMENT_SERVICE
+ departments_list = list(
+ /datum/job_department/service,
+ /datum/job_department/command,
+ )
paycheck = PAYCHECK_COMMAND
paycheck_department = ACCOUNT_SRV
@@ -33,7 +37,7 @@
family_heirlooms = list(/obj/item/reagent_containers/food/drinks/trophy/silver_cup)
- job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE
+ 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
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 d77fe30b7d9..974e22f6949 100644
--- a/code/modules/jobs/job_types/head_of_security.dm
+++ b/code/modules/jobs/job_types/head_of_security.dm
@@ -11,12 +11,16 @@
req_admin_notify = 1
minimal_player_age = 14
exp_requirements = 300
- exp_type = EXP_TYPE_CREW
- exp_type_department = EXP_TYPE_SECURITY
+ exp_required_type = EXP_TYPE_CREW
+ exp_required_type_department = EXP_TYPE_SECURITY
+ exp_granted_type = EXP_TYPE_CREW
outfit = /datum/outfit/job/hos
plasmaman_outfit = /datum/outfit/plasmaman/head_of_security
- departments = DEPARTMENT_SECURITY | DEPARTMENT_COMMAND
+ departments_list = list(
+ /datum/job_department/security,
+ /datum/job_department/command,
+ )
mind_traits = list(TRAIT_DONUT_LOVER)
liver_traits = list(TRAIT_LAW_ENFORCEMENT_METABOLISM, TRAIT_ROYAL_METABOLISM)
@@ -29,7 +33,7 @@
family_heirlooms = list(/obj/item/book/manual/wiki/security_space_law)
- job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE
+ 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
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 5a0d5d5ccd5..d25b11c79a7 100644
--- a/code/modules/jobs/job_types/janitor.dm
+++ b/code/modules/jobs/job_types/janitor.dm
@@ -6,6 +6,7 @@
spawn_positions = 1
supervisors = "the head of personnel"
selection_color = "#bbe291"
+ exp_granted_type = EXP_TYPE_CREW
outfit = /datum/outfit/job/janitor
plasmaman_outfit = /datum/outfit/plasmaman/janitor
@@ -14,7 +15,9 @@
paycheck_department = ACCOUNT_SRV
display_order = JOB_DISPLAY_ORDER_JANITOR
- departments = DEPARTMENT_SERVICE
+ departments_list = list(
+ /datum/job_department/service,
+ )
family_heirlooms = list(/obj/item/mop, /obj/item/clothing/suit/caution, /obj/item/reagent_containers/glass/bucket, /obj/item/paper/fluff/stations/soap)
@@ -24,7 +27,7 @@
/obj/item/lightreplacer = 10
)
- job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE
+ job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_REOPEN_ON_ROUNDSTART_LOSS
/datum/outfit/job/janitor
diff --git a/code/modules/jobs/job_types/lawyer.dm b/code/modules/jobs/job_types/lawyer.dm
index 5753238055a..58f2d7044f1 100644
--- a/code/modules/jobs/job_types/lawyer.dm
+++ b/code/modules/jobs/job_types/lawyer.dm
@@ -6,7 +6,7 @@
spawn_positions = 2
supervisors = "the head of personnel"
selection_color = "#bbe291"
- var/lawyers = 0 //Counts lawyer amount
+ exp_granted_type = EXP_TYPE_CREW
outfit = /datum/outfit/job/lawyer
plasmaman_outfit = /datum/outfit/plasmaman/bar
@@ -18,11 +18,13 @@
liver_traits = list(TRAIT_LAW_ENFORCEMENT_METABOLISM)
display_order = JOB_DISPLAY_ORDER_LAWYER
- departments = DEPARTMENT_SERVICE
+ departments_list = list(
+ /datum/job_department/service,
+ )
family_heirlooms = list(/obj/item/gavelhammer, /obj/item/book/manual/wiki/security_space_law)
- job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE
+ job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_REOPEN_ON_ROUNDSTART_LOSS
/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 4f736116ed2..4754d5ec5d4 100644
--- a/code/modules/jobs/job_types/medical_doctor.dm
+++ b/code/modules/jobs/job_types/medical_doctor.dm
@@ -6,6 +6,7 @@
spawn_positions = 3
supervisors = "the chief medical officer"
selection_color = "#ffeef0"
+ exp_granted_type = EXP_TYPE_CREW
outfit = /datum/outfit/job/doctor
plasmaman_outfit = /datum/outfit/plasmaman/medical
@@ -17,7 +18,9 @@
display_order = JOB_DISPLAY_ORDER_MEDICAL_DOCTOR
bounty_types = CIV_JOB_MED
- departments = DEPARTMENT_MEDICAL
+ departments_list = list(
+ /datum/job_department/medical,
+ )
family_heirlooms = list(/obj/item/storage/firstaid/ancient/heirloom)
@@ -31,7 +34,7 @@
/obj/effect/spawner/lootdrop/memeorgans = 1
)
- job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE
+ job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_REOPEN_ON_ROUNDSTART_LOSS
/datum/outfit/job/doctor
diff --git a/code/modules/jobs/job_types/mime.dm b/code/modules/jobs/job_types/mime.dm
index 6d5afeb4453..6a8611444d4 100644
--- a/code/modules/jobs/job_types/mime.dm
+++ b/code/modules/jobs/job_types/mime.dm
@@ -6,6 +6,7 @@
spawn_positions = 1
supervisors = "the head of personnel"
selection_color = "#bbe291"
+ exp_granted_type = EXP_TYPE_CREW
outfit = /datum/outfit/job/mime
plasmaman_outfit = /datum/outfit/plasmaman/mime
@@ -14,7 +15,9 @@
paycheck_department = ACCOUNT_SRV
display_order = JOB_DISPLAY_ORDER_MIME
- departments = DEPARTMENT_SERVICE
+ departments_list = list(
+ /datum/job_department/service,
+ )
family_heirlooms = list(/obj/item/food/baguette)
@@ -25,7 +28,7 @@
/obj/item/book/mimery = 1,
)
- job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE
+ job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_REOPEN_ON_ROUNDSTART_LOSS
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 33943c361ca..dafc93930dd 100644
--- a/code/modules/jobs/job_types/paramedic.dm
+++ b/code/modules/jobs/job_types/paramedic.dm
@@ -6,6 +6,7 @@
spawn_positions = 2
supervisors = "the chief medical officer"
selection_color = "#ffeef0"
+ exp_granted_type = EXP_TYPE_CREW
outfit = /datum/outfit/job/paramedic
plasmaman_outfit = /datum/outfit/plasmaman/paramedic
@@ -17,7 +18,9 @@
display_order = JOB_DISPLAY_ORDER_PARAMEDIC
bounty_types = CIV_JOB_MED
- departments = DEPARTMENT_MEDICAL
+ departments_list = list(
+ /datum/job_department/medical,
+ )
family_heirlooms = list(/obj/item/storage/firstaid/ancient/heirloom)
@@ -30,7 +33,7 @@
/obj/item/reagent_containers/hypospray/medipen/survival/luxury = 5
)
- job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE
+ job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_REOPEN_ON_ROUNDSTART_LOSS
/datum/outfit/job/paramedic
diff --git a/code/modules/jobs/job_types/prisoner.dm b/code/modules/jobs/job_types/prisoner.dm
index 035905994c4..21d7016dce0 100644
--- a/code/modules/jobs/job_types/prisoner.dm
+++ b/code/modules/jobs/job_types/prisoner.dm
@@ -6,6 +6,7 @@
spawn_positions = 2
supervisors = "the security team"
selection_color = "#ffe1c3"
+ exp_granted_type = EXP_TYPE_CREW
paycheck = PAYCHECK_PRISONER
outfit = /datum/outfit/job/prisoner
diff --git a/code/modules/jobs/job_types/psychologist.dm b/code/modules/jobs/job_types/psychologist.dm
index c9e2c27c485..13353093bed 100644
--- a/code/modules/jobs/job_types/psychologist.dm
+++ b/code/modules/jobs/job_types/psychologist.dm
@@ -6,6 +6,7 @@
spawn_positions = 1
supervisors = "the head of personnel and the chief medical officer"
selection_color = "#bbe291"
+ exp_granted_type = EXP_TYPE_CREW
outfit = /datum/outfit/job/psychologist
plasmaman_outfit = /datum/outfit/plasmaman/psychologist
@@ -16,7 +17,9 @@
liver_traits = list(TRAIT_MEDICAL_METABOLISM)
display_order = JOB_DISPLAY_ORDER_PSYCHOLOGIST
- departments = DEPARTMENT_SERVICE
+ departments_list = list(
+ /datum/job_department/service,
+ )
family_heirlooms = list(/obj/item/storage/pill_bottle)
@@ -26,7 +29,7 @@
/obj/item/gun/syringe = 1
)
- job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE
+ job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_REOPEN_ON_ROUNDSTART_LOSS
/datum/outfit/job/psychologist
diff --git a/code/modules/jobs/job_types/quartermaster.dm b/code/modules/jobs/job_types/quartermaster.dm
index 99a2be7e117..9814da3fd07 100644
--- a/code/modules/jobs/job_types/quartermaster.dm
+++ b/code/modules/jobs/job_types/quartermaster.dm
@@ -6,7 +6,8 @@
spawn_positions = 1
supervisors = "the head of personnel"
selection_color = "#d7b088"
- exp_type_department = EXP_TYPE_SUPPLY // This is so the jobs menu can work properly
+ exp_required_type_department = EXP_TYPE_SUPPLY
+ exp_granted_type = EXP_TYPE_CREW
outfit = /datum/outfit/job/quartermaster
plasmaman_outfit = /datum/outfit/plasmaman/cargo
@@ -18,13 +19,15 @@
display_order = JOB_DISPLAY_ORDER_QUARTERMASTER
bounty_types = CIV_JOB_RANDOM
- departments = DEPARTMENT_CARGO
+ departments_list = list(
+ /datum/job_department/cargo,
+ )
family_heirlooms = list(/obj/item/stamp, /obj/item/stamp/denied)
mail_goodies = list(
/obj/item/circuitboard/machine/emitter = 3
)
- job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE
+ 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
/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 a0e1ee6b619..b62b3dfa400 100644
--- a/code/modules/jobs/job_types/research_director.dm
+++ b/code/modules/jobs/job_types/research_director.dm
@@ -10,13 +10,17 @@
selection_color = "#ffddff"
req_admin_notify = 1
minimal_player_age = 7
- exp_type_department = EXP_TYPE_SCIENCE
+ exp_required_type_department = EXP_TYPE_SCIENCE
exp_requirements = 180
- exp_type = EXP_TYPE_CREW
+ exp_required_type = EXP_TYPE_CREW
+ exp_granted_type = EXP_TYPE_CREW
outfit = /datum/outfit/job/rd
plasmaman_outfit = /datum/outfit/plasmaman/research_director
- departments = DEPARTMENT_SCIENCE | DEPARTMENT_COMMAND
+ departments_list = list(
+ /datum/job_department/science,
+ /datum/job_department/command,
+ )
paycheck = PAYCHECK_COMMAND
paycheck_department = ACCOUNT_SCI
@@ -34,7 +38,7 @@
family_heirlooms = list(/obj/item/toy/plush/slimeplushie)
- job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE
+ 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
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 a954f0696f9..4635c036a73 100644
--- a/code/modules/jobs/job_types/roboticist.dm
+++ b/code/modules/jobs/job_types/roboticist.dm
@@ -7,12 +7,15 @@
supervisors = "the research director"
selection_color = "#ffeeff"
exp_requirements = 60
- exp_type = EXP_TYPE_CREW
+ exp_required_type = EXP_TYPE_CREW
+ exp_granted_type = EXP_TYPE_CREW
bounty_types = CIV_JOB_ROBO
outfit = /datum/outfit/job/roboticist
plasmaman_outfit = /datum/outfit/plasmaman/robotics
- departments = DEPARTMENT_SCIENCE
+ departments_list = list(
+ /datum/job_department/science,
+ )
paycheck = PAYCHECK_MEDIUM
paycheck_department = ACCOUNT_SCI
@@ -27,7 +30,7 @@
family_heirlooms = list(/obj/item/toy/plush/pkplush)
- job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE
+ job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_REOPEN_ON_ROUNDSTART_LOSS
/datum/job/roboticist/New()
diff --git a/code/modules/jobs/job_types/scientist.dm b/code/modules/jobs/job_types/scientist.dm
index f8910371514..ee1b460f1ee 100644
--- a/code/modules/jobs/job_types/scientist.dm
+++ b/code/modules/jobs/job_types/scientist.dm
@@ -7,7 +7,8 @@
supervisors = "the research director"
selection_color = "#ffeeff"
exp_requirements = 60
- exp_type = EXP_TYPE_CREW
+ exp_required_type = EXP_TYPE_CREW
+ exp_granted_type = EXP_TYPE_CREW
outfit = /datum/outfit/job/scientist
plasmaman_outfit = /datum/outfit/plasmaman/science
@@ -17,7 +18,9 @@
display_order = JOB_DISPLAY_ORDER_SCIENTIST
bounty_types = CIV_JOB_SCI
- departments = DEPARTMENT_SCIENCE
+ departments_list = list(
+ /datum/job_department/science,
+ )
family_heirlooms = list(/obj/item/toy/plush/slimeplushie)
@@ -27,7 +30,7 @@
/obj/item/camera_bug = 1
)
- job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE
+ job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_REOPEN_ON_ROUNDSTART_LOSS
/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 ae9182117a4..9f2a4778319 100644
--- a/code/modules/jobs/job_types/security_officer.dm
+++ b/code/modules/jobs/job_types/security_officer.dm
@@ -9,7 +9,8 @@
selection_color = "#ffeeee"
minimal_player_age = 7
exp_requirements = 300
- exp_type = EXP_TYPE_CREW
+ exp_required_type = EXP_TYPE_CREW
+ exp_granted_type = EXP_TYPE_CREW
outfit = /datum/outfit/job/security
plasmaman_outfit = /datum/outfit/plasmaman/security
@@ -22,7 +23,9 @@
display_order = JOB_DISPLAY_ORDER_SECURITY_OFFICER
bounty_types = CIV_JOB_SEC
- departments = DEPARTMENT_SECURITY
+ departments_list = list(
+ /datum/job_department/security,
+ )
family_heirlooms = list(/obj/item/book/manual/wiki/security_space_law, /obj/item/clothing/head/beret/sec)
@@ -34,7 +37,7 @@
/obj/item/melee/baton/boomerang/loaded = 1
)
- job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE
+ job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_REOPEN_ON_ROUNDSTART_LOSS
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 7d9b391b052..09069837e63 100644
--- a/code/modules/jobs/job_types/shaft_miner.dm
+++ b/code/modules/jobs/job_types/shaft_miner.dm
@@ -6,6 +6,7 @@
spawn_positions = 3
supervisors = "the quartermaster and the head of personnel"
selection_color = "#dcba97"
+ exp_granted_type = EXP_TYPE_CREW
outfit = /datum/outfit/job/miner
plasmaman_outfit = /datum/outfit/plasmaman/mining
@@ -15,11 +16,13 @@
display_order = JOB_DISPLAY_ORDER_SHAFT_MINER
bounty_types = CIV_JOB_MINE
- departments = DEPARTMENT_CARGO
+ departments_list = list(
+ /datum/job_department/cargo,
+ )
family_heirlooms = list(/obj/item/pickaxe/mini, /obj/item/shovel)
- job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE
+ job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_REOPEN_ON_ROUNDSTART_LOSS
/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 3543df807ad..92be8c9f757 100644
--- a/code/modules/jobs/job_types/station_engineer.dm
+++ b/code/modules/jobs/job_types/station_engineer.dm
@@ -7,7 +7,8 @@
supervisors = "the chief engineer"
selection_color = "#fff5cc"
exp_requirements = 60
- exp_type = EXP_TYPE_CREW
+ exp_required_type = EXP_TYPE_CREW
+ exp_granted_type = EXP_TYPE_CREW
outfit = /datum/outfit/job/engineer
plasmaman_outfit = /datum/outfit/plasmaman/engineering
@@ -19,7 +20,9 @@
display_order = JOB_DISPLAY_ORDER_STATION_ENGINEER
bounty_types = CIV_JOB_ENG
- departments = DEPARTMENT_ENGINEERING
+ departments_list = list(
+ /datum/job_department/engineering,
+ )
family_heirlooms = list(/obj/item/clothing/head/hardhat, /obj/item/screwdriver, /obj/item/wrench, /obj/item/weldingtool, /obj/item/crowbar, /obj/item/wirecutters)
@@ -30,7 +33,7 @@
/obj/item/clothing/head/hardhat/red/upgraded = 1
)
- job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE
+ job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_REOPEN_ON_ROUNDSTART_LOSS
/datum/outfit/job/engineer
diff --git a/code/modules/jobs/job_types/virologist.dm b/code/modules/jobs/job_types/virologist.dm
index 2018aac3691..458d5388213 100644
--- a/code/modules/jobs/job_types/virologist.dm
+++ b/code/modules/jobs/job_types/virologist.dm
@@ -6,8 +6,9 @@
spawn_positions = 1
supervisors = "the chief medical officer"
selection_color = "#ffeef0"
- exp_type = EXP_TYPE_CREW
exp_requirements = 60
+ exp_required_type = EXP_TYPE_CREW
+ exp_granted_type = EXP_TYPE_CREW
outfit = /datum/outfit/job/virologist
plasmaman_outfit = /datum/outfit/plasmaman/viro
@@ -19,7 +20,9 @@
display_order = JOB_DISPLAY_ORDER_VIROLOGIST
bounty_types = CIV_JOB_VIRO
- departments = DEPARTMENT_MEDICAL
+ departments_list = list(
+ /datum/job_department/medical,
+ )
family_heirlooms = list(/obj/item/reagent_containers/syringe)
@@ -31,7 +34,7 @@
/obj/item/stack/sheet/mineral/uranium = 5
)
- job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE
+ job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_REOPEN_ON_ROUNDSTART_LOSS
/datum/outfit/job/virologist
diff --git a/code/modules/jobs/job_types/warden.dm b/code/modules/jobs/job_types/warden.dm
index d1df59b00a1..b11dff0f23a 100644
--- a/code/modules/jobs/job_types/warden.dm
+++ b/code/modules/jobs/job_types/warden.dm
@@ -9,7 +9,8 @@
selection_color = "#ffeeee"
minimal_player_age = 7
exp_requirements = 300
- exp_type = EXP_TYPE_CREW
+ exp_required_type = EXP_TYPE_CREW
+ exp_granted_type = EXP_TYPE_CREW
outfit = /datum/outfit/job/warden
plasmaman_outfit = /datum/outfit/plasmaman/warden
@@ -22,7 +23,9 @@
display_order = JOB_DISPLAY_ORDER_WARDEN
bounty_types = CIV_JOB_SEC
- departments = DEPARTMENT_SECURITY
+ departments_list = list(
+ /datum/job_department/security,
+ )
family_heirlooms = list(/obj/item/book/manual/wiki/security_space_law)
@@ -35,7 +38,7 @@
/obj/item/storage/box/lethalshot = 5
)
- job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE
+ 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
/datum/outfit/job/warden
diff --git a/code/modules/jobs/jobs.dm b/code/modules/jobs/jobs.dm
index 68fb986a3c0..7658050da8e 100644
--- a/code/modules/jobs/jobs.dm
+++ b/code/modules/jobs/jobs.dm
@@ -1,104 +1,3 @@
-GLOBAL_LIST_INIT(command_positions, list(
- "Captain",
- "Head of Personnel",
- "Head of Security",
- "Chief Engineer",
- "Research Director",
- "Chief Medical Officer"))
-
-
-GLOBAL_LIST_INIT(engineering_positions, list(
- "Chief Engineer",
- "Station Engineer",
- "Atmospheric Technician"))
-
-
-GLOBAL_LIST_INIT(medical_positions, list(
- "Chief Medical Officer",
- "Medical Doctor",
- "Paramedic",
- "Virologist",
- "Chemist"))
-
-
-GLOBAL_LIST_INIT(science_positions, list(
- "Research Director",
- "Scientist",
- "Geneticist",
- "Roboticist"))
-
-
-GLOBAL_LIST_INIT(supply_positions, list(
- "Quartermaster",
- "Cargo Technician",
- "Shaft Miner"))
-
-
-GLOBAL_LIST_INIT(service_positions, list(
- "Head of Personnel",
- "Bartender",
- "Botanist",
- "Cook",
- "Janitor",
- "Curator",
- "Psychologist",
- "Lawyer",
- "Chaplain",
- "Clown",
- "Mime",
- "Prisoner",
- "Assistant"))
-
-//we really need to split service into civillian positions officially, until then this is my solution
-GLOBAL_LIST_INIT(service_food_positions, list(
- "Bartender",
- "Botanist",
- "Cook",
-))
-
-GLOBAL_LIST_INIT(security_positions, list(
- "Head of Security",
- "Warden",
- "Detective",
- "Security Officer"))
-
-/// These aren't defacto jobs, but are the special departmental variants for sec officers.
-GLOBAL_LIST_INIT(security_sub_positions, list(
- "Security Officer (Cargo)",
- "Security Officer (Engineering)",
- "Security Officer (Medical)",
- "Security Officer (Science)",
-))
-
-GLOBAL_LIST_INIT(nonhuman_positions, list(
- "AI",
- "Cyborg",
- ROLE_PAI))
-
-// job categories for rendering the late join menu
-GLOBAL_LIST_INIT(position_categories, list(
- EXP_TYPE_COMMAND = list("jobs" = command_positions, "color" = "#ccccff"),
- EXP_TYPE_ENGINEERING = list("jobs" = engineering_positions, "color" = "#ffeeaa"),
- EXP_TYPE_SUPPLY = list("jobs" = supply_positions, "color" = "#ddddff"),
- EXP_TYPE_SILICON = list("jobs" = nonhuman_positions - "pAI", "color" = "#ccffcc"),
- EXP_TYPE_SERVICE = list("jobs" = service_positions, "color" = "#bbe291"),
- EXP_TYPE_MEDICAL = list("jobs" = medical_positions, "color" = "#ffddf0"),
- EXP_TYPE_SCIENCE = list("jobs" = science_positions, "color" = "#ffddff"),
- EXP_TYPE_SECURITY = list("jobs" = security_positions, "color" = "#ffdddd")
-))
-
-GLOBAL_LIST_INIT(exp_jobsmap, list(
- EXP_TYPE_CREW = list("titles" = command_positions | engineering_positions | medical_positions | science_positions | supply_positions | security_positions | service_positions | list("AI","Cyborg")), // crew positions
- EXP_TYPE_COMMAND = list("titles" = command_positions),
- EXP_TYPE_ENGINEERING = list("titles" = engineering_positions),
- EXP_TYPE_MEDICAL = list("titles" = medical_positions),
- EXP_TYPE_SCIENCE = list("titles" = science_positions),
- EXP_TYPE_SUPPLY = list("titles" = supply_positions),
- EXP_TYPE_SECURITY = list("titles" = security_positions),
- EXP_TYPE_SILICON = list("titles" = list("AI","Cyborg")),
- EXP_TYPE_SERVICE = list("titles" = service_positions)
-))
-
// TO DO: Replace this with job datum flags instead.
GLOBAL_LIST_INIT(exp_specialmap, list(
EXP_TYPE_LIVING = list(), // all living mobs
@@ -126,7 +25,6 @@ GLOBAL_LIST_INIT(exp_specialmap, list(
), // Ghost roles
EXP_TYPE_GHOST = list() // dead people, observers
))
-GLOBAL_PROTECT(exp_jobsmap)
GLOBAL_PROTECT(exp_specialmap)
//this is necessary because antags happen before job datums are handed out, but NOT before they come into existence
diff --git a/code/modules/mob/dead/crew_manifest.dm b/code/modules/mob/dead/crew_manifest.dm
index 46d7a262d87..08ff61de1a6 100644
--- a/code/modules/mob/dead/crew_manifest.dm
+++ b/code/modules/mob/dead/crew_manifest.dm
@@ -18,41 +18,19 @@
return
/datum/crew_manifest/ui_data(mob/user)
- var/list/positions = list(
- "Command" = list("exceptions" = list(), "open" = 0),
- "Security" = list("exceptions" = list(), "open" = 0),
- "Engineering" = list("exceptions" = list(), "open" = 0),
- "Medical" = list("exceptions" = list(), "open" = 0),
- "Misc" = list("exceptions" = list(), "open" = 0),
- "Science" = list("exceptions" = list(), "open" = 0),
- "Supply" = list("exceptions" = list(), "open" = 0),
- "Service" = list("exceptions" = list(), "open" = 0),
- "Silicon" = list("exceptions" = list(), "open" = 0)
- )
- var/list/departments = list(
- list("flag" = DEPARTMENT_COMMAND, "name" = "Command"),
- list("flag" = DEPARTMENT_SECURITY, "name" = "Security"),
- list("flag" = DEPARTMENT_ENGINEERING, "name" = "Engineering"),
- list("flag" = DEPARTMENT_MEDICAL, "name" = "Medical"),
- list("flag" = DEPARTMENT_SCIENCE, "name" = "Science"),
- list("flag" = DEPARTMENT_CARGO, "name" = "Supply"),
- list("flag" = DEPARTMENT_SERVICE, "name" = "Service"),
- list("flag" = DEPARTMENT_SILICON, "name" = "Silicon")
- )
-
- for(var/job in SSjob.joinable_occupations)
- // Check if there are additional open positions or if there is no limit
- if ((job["total_positions"] > 0 && job["total_positions"] > job["current_positions"]) || (job["total_positions"] == -1))
- for(var/department in departments)
- // Check if the job is part of a department using its flag
- // Will return true for Research Director if the department is Science or Command, for example
- if(job["departments"] & department["flag"])
- if(job["total_positions"] == -1)
- // Add job to list of exceptions, meaning it does not have a position limit
- positions[department["name"]]["exceptions"] += list(job["title"])
- else
- // Add open positions to current department
- positions[department["name"]]["open"] += (job["total_positions"] - job["current_positions"])
+ var/list/positions = list()
+ for(var/datum/job_department/department as anything in SSjob.joinable_departments)
+ var/open = 0
+ var/list/exceptions = list()
+ for(var/datum/job/job as anything in department.department_jobs)
+ if(job.total_positions == -1)
+ exceptions += job.title
+ continue
+ var/open_slots = job.total_positions - job.current_positions
+ if(open_slots < 1)
+ continue
+ open += open_slots
+ positions[department.department_name] = list("exceptions" = exceptions, "open" = open)
return list(
"manifest" = GLOB.data_core.get_manifest(),
diff --git a/code/modules/mob/dead/new_player/new_player.dm b/code/modules/mob/dead/new_player/new_player.dm
index 492e8679f4d..2b468469e43 100644
--- a/code/modules/mob/dead/new_player/new_player.dm
+++ b/code/modules/mob/dead/new_player/new_player.dm
@@ -407,26 +407,25 @@
SSjob.prioritized_jobs -= prioritized_job
dat += "
| "
var/column_counter = 0
- // render each category's available jobs
- for(var/category in GLOB.position_categories)
- // position_categories contains category names mapped to available jobs and an appropriate color
- var/cat_color = GLOB.position_categories[category]["color"]
- dat += " |