diff --git a/code/game/jobs/job_controller.dm b/code/game/jobs/job_controller.dm
index 82238f732b9..7179c5340cf 100644
--- a/code/game/jobs/job_controller.dm
+++ b/code/game/jobs/job_controller.dm
@@ -10,11 +10,13 @@ var/global/datum/controller/occupations/job_master
var/list/occupations = list()
var/list/name_occupations = list() //Dict of all jobs, keys are titles
var/list/type_occupations = list() //Dict of all jobs, keys are types
+ var/list/prioritized_jobs = list() // List of jobs set to priority by HoP/Captain
//Players who need jobs
var/list/unassigned = list()
//Debug info
var/list/job_debug = list()
+
/datum/controller/occupations/proc/SetupOccupations(var/list/faction = list("Station"))
occupations = list()
diff --git a/code/game/machinery/computer/card.dm b/code/game/machinery/computer/card.dm
index a6c072fec60..a749096dbb3 100644
--- a/code/game/machinery/computer/card.dm
+++ b/code/game/machinery/computer/card.dm
@@ -86,7 +86,9 @@ var/time_last_changed_position = 0
"current_positions" = job.current_positions,
"total_positions" = job.total_positions,
"can_open" = can_open_job(job),
- "can_close" = can_close_job(job))))
+ "can_close" = can_close_job(job),
+ "can_prioritize" = can_prioritize_job(job)
+ )))
return formatted
@@ -165,6 +167,18 @@ var/time_last_changed_position = 0
return -1
return 0
+/obj/machinery/computer/card/proc/can_prioritize_job(datum/job/job)
+ if(job)
+ if(!job_blacklisted(job) && job_in_department(job, FALSE))
+ if(job in job_master.prioritized_jobs)
+ return 2
+ else
+ if(job_master.prioritized_jobs.len >= 3)
+ return 0
+ return 1
+ return -1
+
+
/obj/machinery/computer/card/proc/job_in_department(datum/job/targetjob, includecivs = 1)
if(!scan || !scan.access)
return 0
@@ -488,7 +502,25 @@ var/time_last_changed_position = 0
opened_positions[edit_job_target]--
log_game("[key_name(usr)] has closed a job slot for job \"[j]\".")
nanomanager.update_uis(src)
-
+ if("prioritize_job")
+ // TOGGLE WHETHER JOB APPEARS AS PRIORITIZED IN THE LOBBY
+ if(is_authenticated(usr) && !target_dept)
+ var/priority_target = href_list["job"]
+ var/datum/job/j = job_master.GetJob(priority_target)
+ if(!j)
+ return 0
+ if(!job_in_department(j))
+ return 0
+ var/priority = TRUE
+ if(j in job_master.prioritized_jobs)
+ job_master.prioritized_jobs -= j
+ priority = FALSE
+ else if(job_master.prioritized_jobs.len < 3)
+ job_master.prioritized_jobs += j
+ else
+ return 0
+ log_game("[key_name(usr)] [priority ? "prioritized" : "unprioritized"] the job \"[j.title]\".")
+ playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0)
if(modify)
modify.name = text("[modify.registered_name]'s ID Card ([modify.assignment])")
diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm
index 58c5ee4104d..5a52ccf8c9e 100644
--- a/code/modules/mob/new_player/new_player.dm
+++ b/code/modules/mob/new_player/new_player.dm
@@ -362,6 +362,18 @@
else if(shuttle_master.emergency.mode >= SHUTTLE_CALL)
dat += "The station is currently undergoing evacuation procedures.
"
+ if(length(job_master.prioritized_jobs))
+ dat += "The station has flagged these jobs as high priority: "
+ var/amt = length(job_master.prioritized_jobs)
+ var/amt_count
+ for(var/datum/job/a in job_master.prioritized_jobs)
+ amt_count++
+ if(amt_count != amt)
+ dat += " [a.title], "
+ else
+ dat += " [a.title].
"
+
+
dat += "Choose from the following open positions:
"
var/list/activePlayers = list()
@@ -410,7 +422,10 @@
dat += "