diff --git a/code/_macros.dm b/code/_macros.dm
index 6893ebbb6f..2f5a4eb7a3 100644
--- a/code/_macros.dm
+++ b/code/_macros.dm
@@ -13,6 +13,8 @@
#define to_file(file_entry, source_var) file_entry << source_var
#define from_file(file_entry, target_var) file_entry >> target_var
#define show_browser(target, browser_content, browser_name) target << browse(browser_content, browser_name)
+#define send_rsc(target, rsc_content, rsc_name) target << browse_rsc(rsc_content, rsc_name)
+#define open_link(target, url) target << link(url)
// From TG, might be useful to have.
// Didn't port SEND_TEXT() since to_chat() appears to serve the same purpose.
diff --git a/code/datums/outfits/jobs/civilian.dm b/code/datums/outfits/jobs/civilian.dm
index f5b94145ff..361530de04 100644
--- a/code/datums/outfits/jobs/civilian.dm
+++ b/code/datums/outfits/jobs/civilian.dm
@@ -6,11 +6,20 @@
name = OUTFIT_JOB_NAME("Visitor")
id_pda_assignment = "Visitor"
uniform = /obj/item/clothing/under/assistantformal
+<<<<<<< HEAD
//VOREStation Add - Interns
/decl/hierarchy/outfit/job/assistant/intern
name = OUTFIT_JOB_NAME("Intern")
id_type = /obj/item/weapon/card/id/civilian
//VOREStation Add End - Interns
+=======
+
+/decl/hierarchy/outfit/job/assistant/resident
+ name = OUTFIT_JOB_NAME("Resident")
+ id_pda_assignment = "Resident"
+ uniform = /obj/item/clothing/under/color/white
+
+>>>>>>> 9436bdb... Merge pull request #6725 from Meghan-Rossi/job_description_alt
/decl/hierarchy/outfit/job/service
l_ear = /obj/item/device/radio/headset/headset_service
hierarchy_type = /decl/hierarchy/outfit/job/service
diff --git a/code/game/jobs/job/_alt_title.dm b/code/game/jobs/job/_alt_title.dm
new file mode 100644
index 0000000000..1cb7fde6b6
--- /dev/null
+++ b/code/game/jobs/job/_alt_title.dm
@@ -0,0 +1,8 @@
+/////////////////////////////////////////
+// Alt Title Code
+/////////////////////////////////////////
+
+/datum/alt_title
+ var/title = "GENERIC ALT TITLE" // What the Alt-Title is called
+ var/title_blurb = null // What's amended to the job description for this Job title. If nothing's added, leave null.
+ var/title_outfit = null // The outfit used by the alt-title. If it's the same as the base job, leave this null.
\ No newline at end of file
diff --git a/code/game/jobs/job/assistant.dm b/code/game/jobs/job/assistant.dm
index e84d69a8db..c431f565b2 100644
--- a/code/game/jobs/job/assistant.dm
+++ b/code/game/jobs/job/assistant.dm
@@ -1,3 +1,6 @@
+//////////////////////////////////
+// Assistant
+//////////////////////////////////
/datum/job/assistant
title = "Assistant"
flag = ASSISTANT
@@ -12,16 +15,57 @@
economic_modifier = 1
access = list() //See /datum/job/assistant/get_access()
minimal_access = list() //See /datum/job/assistant/get_access()
+
outfit_type = /decl/hierarchy/outfit/job/assistant
+<<<<<<< HEAD
/* alt_titles = list(
"Technical Assistant",
"Medical Intern",
"Research Assistant",
"Visitor" = /decl/hierarchy/outfit/job/assistant/visitor
) */ //VOREStation Removal: no alt-titles for visitors
+=======
+ job_description = "An Assistant does whatever is requested of them. Though they are part of the crew, they have no real authority."
+ alt_titles = list("Assistant" = /datum/alt_title/assistant, "Technical Assistant" = /datum/alt_title/tech_assist,
+ "Medical Intern"= /datum/alt_title/med_intern, "Research Assistant" = /datum/alt_title/research_assist,
+ "Visitor" = /datum/alt_title/visitor)
+>>>>>>> 9436bdb... Merge pull request #6725 from Meghan-Rossi/job_description_alt
/datum/job/assistant/get_access()
if(config.assistant_maint)
return list(access_maint_tunnels)
else
return list()
+
+// Assistant Alt Titles
+/datum/alt_title/assistant
+ title = "Assistant"
+ title_blurb = "An Assistant does whatever is requested of them. Though they are part of the crew, they have no real authority."
+
+/datum/alt_title/tech_assist
+ title = "Technical Assistant"
+ title_blurb = "A Technical Assistant attempts to provide whatever the Engineering department needs. They are not proper Engineers, and are \
+ often in training to become an Engineer. A Technical Assistant has no real authority."
+
+/datum/alt_title/med_intern
+ title = "Medical Intern"
+ title_blurb = "A Medical Intern attempts to provide whatever the Medical department needs. They are frequently asked to pay attention to \
+ the suit sensors console. A Medical Intern has no real authority."
+
+/datum/alt_title/research_assist
+ title = "Research Assistant"
+ title_blurb = "A Research Assistant attempts to assist anyone working in the Research department. They are expected to follow the instruction \
+ of proper Research staff, as it is frequently a matter of safety. A Research Assistant has no real authority."
+
+/datum/alt_title/visitor
+ title = "Visitor"
+ title_blurb = "A Visitor is anyone who has arrived on the station but does not have a specific job to do. Many off-duty crewmembers \
+ who care to make use of the station's facilities arrive as Visitors. Properly registered Vistors are considered \
+ to be part of the crew for most if not all purposes, but they have no real authority."
+ title_outfit = /decl/hierarchy/outfit/job/assistant/visitor
+
+/datum/alt_title/resident // Just in case it makes a comeback
+ title = "Resident"
+ title_blurb = "A Resident is an individual who resides on the station, frequently in a different part of the station than what is seen. \
+ They are considered to be part of the crew for most purposes, but have no real authority."
+ title_outfit = /decl/hierarchy/outfit/job/assistant/resident
\ No newline at end of file
diff --git a/code/game/jobs/job/captain.dm b/code/game/jobs/job/captain.dm
index ede7fec465..bd4336506c 100644
--- a/code/game/jobs/job/captain.dm
+++ b/code/game/jobs/job/captain.dm
@@ -1,11 +1,15 @@
var/datum/announcement/minor/captain_announcement = new(do_newscast = 1)
+//////////////////////////////////
+// Captain
+//////////////////////////////////
+
/datum/job/captain
title = "Colony Director"
flag = CAPTAIN
departments = list(DEPARTMENT_COMMAND)
sorting_order = 3 // Above everyone.
- head_position = 1
+ departments_managed = list(DEPARTMENT_COMMAND)
department_flag = ENGSEC
faction = "Station"
total_positions = 1
@@ -22,7 +26,11 @@ var/datum/announcement/minor/captain_announcement = new(do_newscast = 1)
ideal_character_age = 70 // Old geezer captains ftw
outfit_type = /decl/hierarchy/outfit/job/captain
- alt_titles = list("Site Manager", "Overseer")
+ job_description = "The Colony Director manages the other Command Staff, and through them the rest of the station. Though they have access to everything, \
+ they do not understand everything, and are expected to delegate tasks to the appropriate crew member. The Colony Director is expected to \
+ have an understanding of Standard Operating Procedure, and is subject to it, and legal action, in the same way as every other crew member."
+ alt_titles = list("Colony Director" = /datum/alt_title/captain, "Site Manager" = /datum/alt_title/site_manager,
+ "Overseer" = /datum/alt_title/overseer)
/*
/datum/job/captain/equip(var/mob/living/carbon/human/H)
@@ -30,15 +38,30 @@ var/datum/announcement/minor/captain_announcement = new(do_newscast = 1)
if(.)
H.implant_loyalty(src)
*/
+
/datum/job/captain/get_access()
return get_all_station_access().Copy()
+
+// Captain Alt Titles
+/datum/alt_title/captain // Screw it, this is the default, it has the default path
+ title = "Colony Director"
+
+/datum/alt_title/site_manager
+ title = "Site Manager"
+
+/datum/alt_title/overseer
+ title = "Overseer"
+
+//////////////////////////////////
+// Head of Personnel
+//////////////////////////////////
/datum/job/hop
title = "Head of Personnel"
flag = HOP
departments = list(DEPARTMENT_CIVILIAN, DEPARTMENT_CARGO, DEPARTMENT_COMMAND)
sorting_order = 2 // Above the QM, below captain.
- head_position = 1
+ departments_managed = list(DEPARTMENT_CIVILIAN, DEPARTMENT_CARGO)
department_flag = CIVILIAN
faction = "Station"
total_positions = 1
@@ -53,7 +76,10 @@ var/datum/announcement/minor/captain_announcement = new(do_newscast = 1)
ideal_character_age = 50
outfit_type = /decl/hierarchy/outfit/job/hop
- alt_titles = list("Crew Resources Officer")
+ job_description = "The Head of Personnel manages the Service department, the Exploration team, and most other civilians. They also \
+ manage the Supply department, through the Quartermaster. In addition, the Head of Personnel oversees the personal accounts \
+ of the crew, including their money and access. If necessary, the Head of Personnel is first in line to assume Acting Command."
+ alt_titles = list("Head of Personnel" = /datum/alt_title/hop, "Crew Resources Officer" = /datum/alt_title/cro)
access = list(access_security, access_sec_doors, access_brig, access_forensics_lockers,
access_medical, access_engine, access_change_ids, access_ai_upload, access_eva, access_heads,
@@ -68,11 +94,22 @@ var/datum/announcement/minor/captain_announcement = new(do_newscast = 1)
access_chapel_office, access_library, access_research, access_mining, access_heads_vault, access_mining_station,
access_hop, access_RC_announce, access_keycard_auth, access_gateway)
+// HOP Alt Titles
+/datum/alt_title/hop
+ title = "Head of Personnel"
+
+/datum/alt_title/cro
+ title = "Crew Resources Officer"
+
+//////////////////////////////////
+// Command Secretary
+//////////////////////////////////
+
/datum/job/secretary
title = "Command Secretary"
flag = BRIDGE
departments = list(DEPARTMENT_COMMAND)
- head_position = 1
+ department_accounts = list(DEPARTMENT_COMMAND)
department_flag = CIVILIAN
faction = "Station"
total_positions = 2
@@ -86,3 +123,9 @@ var/datum/announcement/minor/captain_announcement = new(do_newscast = 1)
minimal_access = list(access_heads, access_keycard_auth)
outfit_type = /decl/hierarchy/outfit/job/secretary
+ job_description = "A Command Secretary handles paperwork duty for the Heads of Staff, so they can better focus on managing their departments. \
+ They are not Heads of Staff, and have no real authority."
+
+// Command Secretary Alt Title
+/datum/alt_title/command_secretary
+ title = "Command Secretary"
\ No newline at end of file
diff --git a/code/game/jobs/job/civilian.dm b/code/game/jobs/job/civilian.dm
index b5e50cd443..571ef67efd 100644
--- a/code/game/jobs/job/civilian.dm
+++ b/code/game/jobs/job/civilian.dm
@@ -1,4 +1,9 @@
//Food
+
+//////////////////////////////////
+// Bartender
+//////////////////////////////////
+
/datum/job/bartender
title = "Bartender"
flag = BARTENDER
@@ -7,14 +12,28 @@
faction = "Station"
total_positions = 2
spawn_positions = 2
- supervisors = "the head of personnel"
+ supervisors = "the Head of Personnel"
selection_color = "#515151"
access = list(access_hydroponics, access_bar, access_kitchen)
minimal_access = list(access_bar)
outfit_type = /decl/hierarchy/outfit/job/service/bartender
- alt_titles = list("Barista" = /decl/hierarchy/outfit/job/service/bartender/barista)
+ job_description = "A Bartender mixes drinks for the crew. They generally have permission to charge for drinks or deny service to unruly patrons."
+ alt_titles = list("Bartender" = /datum/alt_title/bartender, "Barista" = /datum/alt_title/barista)
+// Bartender Alt Titles
+/datum/alt_title/bartender
+ title = "Bartender"
+
+/datum/alt_title/barista
+ title = "Barista"
+ title_blurb = "A barista mans the Cafe, serving primarily non-alcoholic drinks to the crew. They generally have permission to charge for drinks \
+ or deny service to unruly patrons."
+ title_outfit = /decl/hierarchy/outfit/job/service/bartender/barista
+
+//////////////////////////////////
+// Chef
+//////////////////////////////////
/datum/job/chef
title = "Chef"
@@ -24,13 +43,26 @@
faction = "Station"
total_positions = 2
spawn_positions = 2
- supervisors = "the head of personnel"
+ supervisors = "the Head of Personnel"
selection_color = "#515151"
access = list(access_hydroponics, access_bar, access_kitchen)
minimal_access = list(access_kitchen)
outfit_type = /decl/hierarchy/outfit/job/service/chef
- alt_titles = list("Cook")
+ job_description = "A Chef cooks food for the crew. They generally have permission to charge for food or deny service to unruly diners."
+ alt_titles = list("Chef" = /datum/alt_title/chef, "Cook" = /datum/alt_title/cook)
+
+// Chef Alt Titles
+/datum/alt_title/chef
+ title = "Chef"
+
+/datum/alt_title/cook
+ title = "Cook"
+ title_blurb = "A Cook has the same duties, though they may be less experienced."
+
+//////////////////////////////////
+// Botanist
+//////////////////////////////////
/datum/job/hydro
title = "Botanist"
@@ -40,26 +72,38 @@
faction = "Station"
total_positions = 2
spawn_positions = 1
- supervisors = "the head of personnel"
+ supervisors = "the Head of Personnel"
selection_color = "#515151"
access = list(access_hydroponics, access_bar, access_kitchen)
minimal_access = list(access_hydroponics)
outfit_type = /decl/hierarchy/outfit/job/service/gardener
- alt_titles = list("Gardener")
+ job_description = "A Botanist grows plants for the Chef and Bartender."
+ alt_titles = list("Botanist" = /datum/alt_title/botanist, "Gardener" = /datum/alt_title/gardener)
+
+//Botanist Alt Titles
+/datum/alt_title/botanist
+ title = "Botanist"
+
+/datum/alt_title/gardener
+ title = "Gardener"
+ title_blurb = "A Gardener may be less professional than their counterparts, and are more likely to tend to the public gardens if they aren't needed elsewhere."
//Cargo
+//////////////////////////////////
+// Quartermaster
+//////////////////////////////////
/datum/job/qm
title = "Quartermaster"
flag = QUARTERMASTER
departments = list(DEPARTMENT_CARGO)
sorting_order = 1 // QM is above the cargo techs, but below the HoP.
- head_position = 1
+ departments_managed = list(DEPARTMENT_CARGO)
department_flag = CIVILIAN
faction = "Station"
total_positions = 1
spawn_positions = 1
- supervisors = "the head of personnel"
+ supervisors = "the Head of Personnel"
selection_color = "#7a4f33"
economic_modifier = 5
access = list(access_maint_tunnels, access_mailsorting, access_cargo, access_cargo_bot, access_qm, access_mining, access_mining_station)
@@ -68,8 +112,19 @@
ideal_character_age = 40
outfit_type = /decl/hierarchy/outfit/job/cargo/qm
- alt_titles = list("Supply Chief")
+ job_description = "The Quartermaster manages the Supply department, checking cargo orders and ensuring supplies get to where they are needed."
+ alt_titles = list("Quartermaster" = /datum/alt_title/qm, "Supply Chief" = /datum/alt_title/supply_chief)
+// Quartermaster Alt Titles
+/datum/alt_title/qm
+ title = "Quartermaster"
+
+/datum/alt_title/supply_chief
+ title = "Supply Chief"
+
+//////////////////////////////////
+// Cargo Tech
+//////////////////////////////////
/datum/job/cargo_tech
title = "Cargo Technician"
flag = CARGOTECH
@@ -78,12 +133,22 @@
faction = "Station"
total_positions = 2
spawn_positions = 2
- supervisors = "the quartermaster and the head of personnel"
+ supervisors = "the Quartermaster and the Head of Personnel"
selection_color = "#9b633e"
access = list(access_maint_tunnels, access_mailsorting, access_cargo, access_cargo_bot, access_mining, access_mining_station)
minimal_access = list(access_maint_tunnels, access_cargo, access_cargo_bot, access_mailsorting)
outfit_type = /decl/hierarchy/outfit/job/cargo/cargo_tech
+ job_description = "A Cargo Technician fills and delivers cargo orders. They are encouraged to return delivered crates to the Cargo Shuttle, \
+ because Central Command gives a partial refund."
+
+// Cargo Tech Alt Titles
+/datum/alt_title/cargo_tech
+ title = "Cargo Tech"
+
+//////////////////////////////////
+// Shaft Miner
+//////////////////////////////////
/datum/job/mining
title = "Shaft Miner"
@@ -93,16 +158,28 @@
faction = "Station"
total_positions = 3
spawn_positions = 3
- supervisors = "the quartermaster and the head of personnel"
+ supervisors = "the Quartermaster and the Head of Personnel"
selection_color = "#9b633e"
economic_modifier = 5
access = list(access_maint_tunnels, access_mailsorting, access_cargo, access_cargo_bot, access_mining, access_mining_station)
minimal_access = list(access_mining, access_mining_station, access_mailsorting)
outfit_type = /decl/hierarchy/outfit/job/cargo/mining
- alt_titles = list("Drill Technician")
+ job_description = "A Shaft Miner mines and processes minerals to be delivered to departments that need them."
+ alt_titles = list("Shaft Miner" = /datum/alt_title/miner, "Drill Technician" = /datum/alt_title/drill_tech)
+
+// Shaft Miner Alt Titles
+/datum/alt_title/miner
+ title = "Shaft Miner"
+
+/datum/alt_title/drill_tech
+ title = "Drill Technician"
+ title_blurb = "A Drill Technician specializes in operating and maintaining the machinery needed to extract ore from veins deep below the surface."
//Service
+//////////////////////////////////
+// Janitor
+//////////////////////////////////
/datum/job/janitor
title = "Janitor"
flag = JANITOR
@@ -111,15 +188,26 @@
faction = "Station"
total_positions = 2
spawn_positions = 2
- supervisors = "the head of personnel"
+ supervisors = "the Head of Personnel"
selection_color = "#515151"
access = list(access_janitor, access_maint_tunnels)
minimal_access = list(access_janitor, access_maint_tunnels)
outfit_type = /decl/hierarchy/outfit/job/service/janitor
- alt_titles = list("Custodian")
+ job_description = "A Janitor keeps the station clean, as long as it doesn't interfere with active crime scenes."
+ alt_titles = list("Janitor" = /datum/alt_title/janitor, "Custodian" = /datum/alt_title/custodian)
+
+// Janitor Alt Titles
+/datum/alt_title/janitor
+ title = "Janitor"
+
+/datum/alt_title/custodian
+ title = "Custodian"
//More or less assistants
+//////////////////////////////////
+// Librarian
+//////////////////////////////////
/datum/job/librarian
title = "Librarian"
flag = LIBRARIAN
@@ -128,13 +216,30 @@
faction = "Station"
total_positions = 1
spawn_positions = 1
- supervisors = "the head of personnel"
+ supervisors = "the Head of Personnel"
selection_color = "#515151"
access = list(access_library, access_maint_tunnels)
minimal_access = list(access_library)
outfit_type = /decl/hierarchy/outfit/job/librarian
- alt_titles = list("Journalist", "Writer")
+ job_description = "The Librarian curates the book selection in the Library, so the crew might enjoy it."
+ alt_titles = list("Librarian" = /datum/alt_title/librarian, "Journalist" = /datum/alt_title/journalist, "Writer" = /datum/alt_title/writer)
+
+// Librarian Alt Titles
+/datum/alt_title/librarian
+ title = "Librarian"
+
+/datum/alt_title/journalist
+ title = "Journalist"
+ title_blurb = "The Journalist uses the Library as a base of operations, from which they can report the news and goings-on on the station with their camera."
+
+/datum/alt_title/writer
+ title = "Writer"
+ title_blurb = "The Writer uses the Library as a quiet place to write whatever it is they choose to write."
+
+//////////////////////////////////
+// Internal Affairs Agent
+//////////////////////////////////
//var/global/lawyer = 0//Checks for another lawyer //This changed clothes on 2nd lawyer, both IA get the same dreds.
/datum/job/lawyer
@@ -153,10 +258,17 @@
minimal_player_age = 7
outfit_type = /decl/hierarchy/outfit/job/internal_affairs_agent
+ job_description = "An Internal Affairs Agent makes sure that the crew is following Standard Operating Procedure. They also \
+ handle complaints against crew members, and can have issues brought to the attention of Central Command, \
+ assuming their paperwork is in order."
/*
/datum/job/lawyer/equip(var/mob/living/carbon/human/H)
. = ..()
if(.)
H.implant_loyalty(H)
-*/
\ No newline at end of file
+*/
+
+// IAA Alt Titles
+/datum/alt_title/iaa
+ title = "Internal Affairs Agent"
\ No newline at end of file
diff --git a/code/game/jobs/job/civilian_chaplain.dm b/code/game/jobs/job/civilian_chaplain.dm
index b6430fef6b..0877e373d7 100644
--- a/code/game/jobs/job/civilian_chaplain.dm
+++ b/code/game/jobs/job/civilian_chaplain.dm
@@ -7,13 +7,22 @@
faction = "Station"
total_positions = 1
spawn_positions = 1
- supervisors = "the head of personnel"
+ supervisors = "the Head of Personnel"
selection_color = "#515151"
access = list(access_morgue, access_chapel_office, access_crematorium, access_maint_tunnels)
minimal_access = list(access_chapel_office, access_crematorium)
- alt_titles = list("Counselor")
outfit_type = /decl/hierarchy/outfit/job/chaplain
+ job_description = "The Chaplain ministers to the spiritual needs of the crew."
+ alt_titles = list("Chaplain" = /datum/alt_title/chaplain, "Counselor" = /datum/alt_title/counselor)
+
+// Chaplain Alt Titles
+/datum/alt_title/chaplain
+ title = "Chaplain"
+
+/datum/alt_title/counselor
+ title = "Counselor"
+ title_blurb = "The Counselor attends to the emotional needs of the crew, without a specific medicinal or spiritual focus."
/datum/job/chaplain/equip(var/mob/living/carbon/human/H, var/alt_title, var/ask_questions = TRUE)
. = ..()
diff --git a/code/game/jobs/job/engineering.dm b/code/game/jobs/job/engineering.dm
index db6fc07cb6..4ac1c08367 100644
--- a/code/game/jobs/job/engineering.dm
+++ b/code/game/jobs/job/engineering.dm
@@ -1,7 +1,10 @@
+//////////////////////////////////
+// Chief Engineer
+//////////////////////////////////
/datum/job/chief_engineer
title = "Chief Engineer"
flag = CHIEF
- head_position = 1
+ departments_managed = list(DEPARTMENT_ENGINEERING)
departments = list(DEPARTMENT_ENGINEERING, DEPARTMENT_COMMAND)
sorting_order = 2
department_flag = ENGSEC
@@ -28,7 +31,17 @@
minimal_player_age = 7
outfit_type = /decl/hierarchy/outfit/job/engineering/chief_engineer
+ job_description = "The Chief Engineer manages the Engineering Department, ensuring that the Engineers work on what needs to be done, handling distribution \
+ of manpower as much as they handle hands-on operations and repairs. They are also expected to keep the rest of the station informed of \
+ any structural threats to the station that may be hazardous to health or disruptive to work."
+// Chief Engineer Alt Titles
+/datum/alt_title/chief_engineer
+ title = "Chief Engineer"
+
+//////////////////////////////////
+// Engineer
+//////////////////////////////////
/datum/job/engineer
title = "Station Engineer"
flag = ENGINEER
@@ -37,17 +50,42 @@
faction = "Station"
total_positions = 5
spawn_positions = 5
- supervisors = "the chief engineer"
+ supervisors = "the Chief Engineer"
selection_color = "#5B4D20"
economic_modifier = 5
access = list(access_eva, access_engine, access_engine_equip, access_tech_storage, access_maint_tunnels, access_external_airlocks, access_construction, access_atmospherics)
minimal_access = list(access_eva, access_engine, access_engine_equip, access_tech_storage, access_maint_tunnels, access_external_airlocks, access_construction)
- alt_titles = list("Maintenance Technician","Engine Technician","Electrician")
+ alt_titles = list("Station Engineer" = /datum/alt_title/engineer, "Maintenance Technician" = /datum/alt_title/maint_tech,
+ "Engine Technician" = /datum/alt_title/engine_tech, "Electrician" = /datum/alt_title/electrician)
minimal_player_age = 3
outfit_type = /decl/hierarchy/outfit/job/engineering/engineer
+ job_description = "An Engineer keeps the station running. They repair damages, keep the atmosphere stable, and ensure that power is being \
+ generated and distributed. On quiet shifts, they may be called upon to make cosmetic alterations to the station."
+// Engineer Alt Titles
+/datum/alt_title/engineer
+ title = "Station Engineer"
+
+/datum/alt_title/maint_tech
+ title = "Maintenance Technician"
+ title_blurb = "A Maintenance Technician is generally a junior Engineer, and can be expected to run the mildly unpleasant or boring tasks that other \
+ Engineers don't care to do."
+
+/datum/alt_title/engine_tech
+ title = "Engine Technician"
+ title_blurb = "An Engine Technician tends to the engine, most commonly a Supermatter crystal. They are expected to be able to keep it stable, and \
+ possibly even run it beyond normal tolerances."
+
+/datum/alt_title/electrician
+ title = "Electrician"
+ title_blurb = "An Electrician's primary duty is making sure power is properly distributed thoughout the station, utilizing solars, substations, and other \
+ methods to ensure every department has power in an emergency."
+
+//////////////////////////////////
+// Atmos Tech
+//////////////////////////////////
/datum/job/atmos
title = "Atmospheric Technician"
flag = ATMOSTECH
@@ -56,7 +94,7 @@
faction = "Station"
total_positions = 3
spawn_positions = 2
- supervisors = "the chief engineer"
+ supervisors = "the Chief Engineer"
selection_color = "#5B4D20"
economic_modifier = 5
access = list(access_eva, access_engine, access_engine_equip, access_tech_storage, access_maint_tunnels, access_external_airlocks, access_construction, access_atmospherics, access_external_airlocks)
@@ -64,4 +102,10 @@
minimal_player_age = 3
- outfit_type = /decl/hierarchy/outfit/job/engineering/atmos
\ No newline at end of file
+ outfit_type = /decl/hierarchy/outfit/job/engineering/atmos
+ job_description = "An Atmospheric Technician is primarily concerned with keeping the station's atmosphere breathable. They are expected to have a good \
+ understanding of the pipes, vents, and scrubbers that move gasses around the station, and to be familiar with proper firefighting procedure."
+
+// Atmos Tech Alt Titles
+/datum/alt_title/atmos_tech
+ title = "Atmospheric Technician"
\ No newline at end of file
diff --git a/code/game/jobs/job/job.dm b/code/game/jobs/job/job.dm
index 85c51dadec..d09b81f830 100644
--- a/code/game/jobs/job/job.dm
+++ b/code/game/jobs/job/job.dm
@@ -13,12 +13,13 @@
var/current_positions = 0 // How many players have this job
var/supervisors = null // Supervisors, who this person answers to directly
var/selection_color = "#ffffff" // Selection screen color
- var/list/alt_titles // List of alternate titles, if any
+ var/list/alt_titles = list() // List of alternate titles; if a job has alt-titles, it MUST have one for the base job
var/req_admin_notify // If this is set to 1, a text is printed to the player when jobs are assigned, telling him that he should let admins know that he has to disconnect.
var/minimal_player_age = 0 // If you have use_age_restriction_for_jobs config option enabled and the database set up, this option will add a requirement for players to be at least minimal_player_age days old. (meaning they first signed in at least that many days before.)
var/list/departments = list() // List of departments this job belongs to, if any. The first one on the list will be the 'primary' department.
var/sorting_order = 0 // Used for sorting jobs so boss jobs go above regular ones, and their boss's boss is above that. Higher numbers = higher in sorting.
- var/head_position = 0 // Is this position Command?
+ var/departments_managed = null // Is this a management position? If yes, list of departments managed. Otherwise null.
+ var/department_accounts = null // Which department accounts should people with this position be given the pin for?
var/assignable = TRUE // Should it show up on things like the ID computer?
var/minimum_character_age = 0
var/ideal_character_age = 30
@@ -27,7 +28,14 @@
var/account_allowed = 1 // Does this job type come with a station account?
var/economic_modifier = 2 // With how much does this job modify the initial account amount?
- var/outfit_type
+ var/outfit_type // What outfit datum does this job use in its default title?
+
+ // Description of the job's role and minimum responsibilities.
+ var/job_description = "This Job doesn't have a description! Please report it!"
+
+/datum/job/New()
+ . = ..()
+ department_accounts = department_accounts || departments_managed
/datum/job/proc/equip(var/mob/living/carbon/human/H, var/alt_title)
var/decl/hierarchy/outfit/outfit = get_outfit(H, alt_title)
@@ -38,7 +46,13 @@
/datum/job/proc/get_outfit(var/mob/living/carbon/human/H, var/alt_title)
if(alt_title && alt_titles)
- . = alt_titles[alt_title]
+ for(var/alt in alt_titles)
+ if(alt_title == alt)
+ var/typepath = alt_titles[alt]
+ var/datum/alt_title/A = new typepath()
+ if(A.title_outfit)
+ . = A.title_outfit
+
. = . || outfit_type
. = outfit_by_type(.)
@@ -112,4 +126,38 @@
return (current_positions < total_positions) || (total_positions == -1)
/datum/job/proc/has_alt_title(var/mob/H, var/supplied_title, var/desired_title)
- return (supplied_title == desired_title) || (H.mind && H.mind.role_alt_title == desired_title)
\ No newline at end of file
+ return (supplied_title == desired_title) || (H.mind && H.mind.role_alt_title == desired_title)
+
+/datum/job/proc/get_description_blurb(var/alt_title)
+ var/list/message = list()
+ message |= job_description
+
+ if(alt_title && alt_titles)
+ for(var/alt in alt_titles)
+ if(alt_title == alt)
+ var/typepath = alt_titles[alt]
+ var/datum/alt_title/A = new typepath()
+ if(A.title_blurb)
+ message |= A.title_blurb
+ return message
+
+/datum/job/proc/get_job_icon()
+ if(!job_master.job_icons[title])
+ var/mob/living/carbon/human/dummy/mannequin/mannequin = get_mannequin("#job_icon")
+ dress_mannequin(mannequin)
+ mannequin.dir = SOUTH
+ COMPILE_OVERLAYS(mannequin)
+ var/icon/preview_icon = getFlatIcon(mannequin)
+
+ preview_icon.Scale(preview_icon.Width() * 2, preview_icon.Height() * 2) // Scaling here to prevent blurring in the browser.
+ job_master.job_icons[title] = preview_icon
+
+ return job_master.job_icons[title]
+
+/datum/job/proc/dress_mannequin(var/mob/living/carbon/human/dummy/mannequin/mannequin)
+ mannequin.delete_inventory(TRUE)
+ equip_preview(mannequin)
+ if(mannequin.back)
+ var/obj/O = mannequin.back
+ mannequin.drop_from_inventory(O)
+ qdel(O)
\ No newline at end of file
diff --git a/code/game/jobs/job/medical.dm b/code/game/jobs/job/medical.dm
index cb562b9c40..43e59b8663 100644
--- a/code/game/jobs/job/medical.dm
+++ b/code/game/jobs/job/medical.dm
@@ -1,7 +1,10 @@
+//////////////////////////////////
+// Chief Medical Officer
+//////////////////////////////////
/datum/job/cmo
title = "Chief Medical Officer"
flag = CMO
- head_position = 1
+ departments_managed = list(DEPARTMENT_MEDICAL)
departments = list(DEPARTMENT_MEDICAL, DEPARTMENT_COMMAND)
sorting_order = 2
department_flag = MEDSCI
@@ -24,7 +27,18 @@
ideal_character_age = 50
outfit_type = /decl/hierarchy/outfit/job/medical/cmo
+ job_description = "The CMO manages the Medical department and is a position requiring experience and skill; their goal is to ensure that their \
+ staff keep the station's crew healthy and whole. They are primarily interested in making sure that patients are safely found and \
+ transported to Medical for treatment. They are expected to keep the crew informed about threats to their health and safety, and \
+ about the importance of Suit Sensors."
+// CMO Alt Titles
+/datum/alt_title/cmo
+ title = "Chief Medical Officer"
+
+//////////////////////////////////
+// Medical Doctor
+//////////////////////////////////
/datum/job/doctor
title = "Medical Doctor"
flag = DOCTOR
@@ -33,19 +47,55 @@
faction = "Station"
total_positions = 5
spawn_positions = 3
- supervisors = "the chief medical officer"
+ supervisors = "the Chief Medical Officer"
selection_color = "#013D3B"
economic_modifier = 7
access = list(access_medical, access_medical_equip, access_morgue, access_surgery, access_chemistry, access_virology, access_genetics, access_eva)
minimal_access = list(access_medical, access_medical_equip, access_morgue, access_surgery, access_virology, access_eva)
outfit_type = /decl/hierarchy/outfit/job/medical/doctor
- alt_titles = list(
- "Surgeon" = /decl/hierarchy/outfit/job/medical/doctor/surgeon,
- "Emergency Physician" = /decl/hierarchy/outfit/job/medical/doctor/emergency_physician,
- "Nurse" = /decl/hierarchy/outfit/job/medical/doctor/nurse,
- "Virologist" = /decl/hierarchy/outfit/job/medical/doctor/virologist)
+ job_description = "A Medical Doctor is a Jack-of-All-Trades Medical title, covering a variety of skill levels and minor specializations. They are likely \
+ familiar with basic first aid, and a number of accompanying medications, and can generally save, if not cure, a majority of the \
+ patients they encounter."
+ alt_titles = list("Medical Doctor" = /datum/alt_title/doctor,
+ "Surgeon" = /datum/alt_title/surgeon,
+ "Emergency Physician" = /datum/alt_title/emergency_physician,
+ "Nurse" = /datum/alt_title/nurse,
+ "Virologist" = /datum/alt_title/virologist)
+
+//Medical Doctor Alt Titles
+/datum/alt_title/doctor
+ title = "Medical Doctor"
+
+/datum/alt_title/surgeon
+ title = "Surgeon"
+ title_blurb = "A Surgeon specializes in providing surgical aid to injured patients, up to and including amputation and limb reattachement. They are expected \
+ to know the ins and outs of anesthesia and surgery."
+ title_outfit = /decl/hierarchy/outfit/job/medical/doctor/surgeon
+
+/datum/alt_title/emergency_physician
+ title = "Emergency Physician"
+ title_blurb = "An Emergency Physician is a Medical professional trained for stabilizing and treating severely injured and/or dying patients. \
+ They are generally the first response for any such individual brought to the Medbay, and can sometimes be expected to help their patients \
+ make a full recovery."
+ title_outfit = /decl/hierarchy/outfit/job/medical/doctor/emergency_physician
+
+/datum/alt_title/nurse
+ title = "Nurse"
+ title_blurb = "A Nurse acts as a general purpose Doctor's Aide, providing basic care to non-critical patients, and stabilizing critical patients during \
+ busy periods. They frequently watch the suit sensors console, to help manage the time of other Doctors. In rare occasions, a Nurse can be \
+ called upon to revive deceased crew members."
+ title_outfit = /decl/hierarchy/outfit/job/medical/doctor/nurse
+
+/datum/alt_title/virologist
+ title = "Virologist"
+ title_blurb = "A Virologist cures active diseases in the crew, and prepares antibodies for possible infections. They also have the skills \
+ to produce the various types of virus foods or mutagens."
+ title_outfit = /decl/hierarchy/outfit/job/medical/doctor/virologist
//Chemist is a medical job damnit //YEAH FUCK YOU SCIENCE -Pete //Guys, behave -Erro
+//////////////////////////////////
+// Chemist
+//////////////////////////////////
/datum/job/chemist
title = "Chemist"
flag = CHEMIST
@@ -54,18 +104,30 @@
faction = "Station"
total_positions = 2
spawn_positions = 2
- supervisors = "the chief medical officer"
+ supervisors = "the Chief Medical Officer"
selection_color = "#013D3B"
economic_modifier = 5
access = list(access_medical, access_medical_equip, access_morgue, access_surgery, access_chemistry, access_virology, access_genetics)
minimal_access = list(access_medical, access_medical_equip, access_chemistry)
- alt_titles = list("Pharmacist")
-
minimal_player_age = 3
outfit_type = /decl/hierarchy/outfit/job/medical/chemist
+ job_description = "A Chemist produces and maintains a stock of basic to advanced chemicals for medical and occasionally research use. \
+ They are likely to know the use and dangers of many lab-produced chemicals."
+ alt_titles = list("Chemist" = /datum/alt_title/chemist, "Pharmacist" = /datum/alt_title/pharmacist)
+
+// Chemist Alt Titles
+/datum/alt_title/chemist
+ title = "Chemist"
+
+/datum/alt_title/pharmacist
+ title = "Pharmacist"
+ title_blurb = "A Pharmacist focuses on the chemical needs of the Medical Department, and often offers to fill crew prescriptions at their discretion."
/* I'm commenting out Geneticist so you can't actually see it in the job menu, given that you can't play as one - Jon.
+//////////////////////////////////
+// Geneticist
+//////////////////////////////////
/datum/job/geneticist
title = "Geneticist"
flag = GENETICIST
@@ -74,15 +136,24 @@
faction = "Station"
total_positions = 0
spawn_positions = 0
- supervisors = "the chief medical officer and research director"
+ supervisors = "the Chief Medical Officer and Research Director"
selection_color = "#013D3B"
economic_modifier = 7
access = list(access_medical, access_morgue, access_surgery, access_chemistry, access_virology, access_genetics, access_research)
minimal_access = list(access_medical, access_morgue, access_genetics, access_research)
outfit_type = /decl/hierarchy/outfit/job/medical/geneticist
+ job_description = "A Geneticist operates genetic manipulation equipment to repair any genetic defects encountered in crew, from cloning or radiation as examples. \
+ When required, geneticists have the skills to clone, and are the superior choice when available for doing so."
+
+// Geneticist Alt Titles
+/datum/alt_title/geneticist
+ title = "Geneticist"
*/
+//////////////////////////////////
+// Psychiatrist
+//////////////////////////////////
/datum/job/psychiatrist
title = "Psychiatrist"
flag = PSYCHIATRIST
@@ -92,13 +163,28 @@
total_positions = 1
spawn_positions = 1
economic_modifier = 5
- supervisors = "the chief medical officer"
+ supervisors = "the Chief Medical Officer"
selection_color = "#013D3B"
access = list(access_medical, access_medical_equip, access_morgue, access_psychiatrist)
minimal_access = list(access_medical, access_medical_equip, access_psychiatrist)
outfit_type = /decl/hierarchy/outfit/job/medical/psychiatrist
- alt_titles = list("Psychologist" = /decl/hierarchy/outfit/job/medical/psychiatrist/psychologist)
+ job_description = "A Psychiatrist provides mental health services to crew members in need. They may also be called upon to determine whatever \
+ ails the mentally unwell, frequently under Security supervision. They understand the effects of various psychoactive drugs."
+ alt_titles = list("Psychiatrist" = /datum/alt_title/psychiatrist, "Psychologist" = /datum/alt_title/psychologist)
+//Psychiatrist Alt Titles
+/datum/alt_title/psychiatrist
+ title = "Psychiatrist"
+
+/datum/alt_title/psychologist
+ title = "Psychologist"
+ title_blurb = "A Psychologist provides mental health services to crew members in need, focusing more on therapy than medication. They may also be \
+ called upon to determine whatever ails the mentally unwell, frequently under Security supervision."
+ title_outfit = /decl/hierarchy/outfit/job/medical/psychiatrist/psychologist
+
+//////////////////////////////////
+// Paramedic
+//////////////////////////////////
/datum/job/paramedic
title = "Paramedic"
flag = PARAMEDIC
@@ -107,10 +193,22 @@
faction = "Station"
total_positions = 2
spawn_positions = 2
- supervisors = "the chief medical officer"
+ supervisors = "the Chief Medical Officer"
selection_color = "#013D3B"
economic_modifier = 4
access = list(access_medical, access_medical_equip, access_morgue, access_surgery, access_chemistry, access_virology, access_eva, access_maint_tunnels, access_external_airlocks, access_psychiatrist)
minimal_access = list(access_medical, access_medical_equip, access_morgue, access_eva, access_maint_tunnels, access_external_airlocks)
outfit_type = /decl/hierarchy/outfit/job/medical/paramedic
- alt_titles = list("Emergency Medical Technician" = /decl/hierarchy/outfit/job/medical/paramedic/emt)
\ No newline at end of file
+ job_description = "A Paramedic is primarily concerned with the recovery of patients who are unable to make it to the Medical Department on their own. \
+ They may also be called upon to keep patients stable when Medical is busy or understaffed."
+ alt_titles = list("Paramedic" = /datum/alt_title/paramedic, "Emergency Medical Technician" = /datum/alt_title/emt)
+
+// Paramedic Alt Titles
+/datum/alt_title/paramedic
+ title = "Paramedic"
+
+/datum/alt_title/emt
+ title = "Emergency Medical Technician"
+ title_blurb = "An Emergency Medical Technician is primarily concerned with the recovery of patients who are unable to make it to the Medical Department on their \
+ own. They are capable of keeping a patient stabilized until they reach the hands of someone with more training."
+ title_outfit = /decl/hierarchy/outfit/job/medical/paramedic/emt
\ No newline at end of file
diff --git a/code/game/jobs/job/science.dm b/code/game/jobs/job/science.dm
index a751636477..ef7f04f324 100644
--- a/code/game/jobs/job/science.dm
+++ b/code/game/jobs/job/science.dm
@@ -1,7 +1,10 @@
+//////////////////////////////////
+// Research Director
+//////////////////////////////////
/datum/job/rd
title = "Research Director"
flag = RD
- head_position = 1
+ departments_managed = list(DEPARTMENT_RESEARCH)
departments = list(DEPARTMENT_RESEARCH, DEPARTMENT_COMMAND)
sorting_order = 2
department_flag = MEDSCI
@@ -27,8 +30,22 @@
ideal_character_age = 50
outfit_type = /decl/hierarchy/outfit/job/science/rd
- alt_titles = list("Research Supervisor")
+ job_description = "The Research Director manages and maintains the Research department. They are required to ensure the safety of the entire crew, \
+ at least with regards to anything occuring in the Research department, and to inform the crew of any disruptions that \
+ might originate from Research. The Research Director often has at least passing knowledge of most of the Research department, but \
+ are encouraged to allow their staff to perform their own duties."
+ alt_titles = list("Research Director" = /datum/alt_title/research_director, "Research Supervisor" = /datum/alt_title/research_supervisor)
+// Research Director Alt Titles
+/datum/alt_title/research_director
+ title = "Research Director"
+
+/datum/alt_title/research_supervisor
+ title = "Research Supervisor"
+
+//////////////////////////////////
+// Scientist
+//////////////////////////////////
/datum/job/scientist
title = "Scientist"
flag = SCIENTIST
@@ -37,7 +54,7 @@
faction = "Station"
total_positions = 5
spawn_positions = 3
- supervisors = "the research director"
+ supervisors = "the Research Director"
selection_color = "#633D63"
economic_modifier = 7
access = list(access_robotics, access_tox, access_tox_storage, access_research, access_xenobiology, access_xenoarch)
@@ -46,8 +63,35 @@
minimal_player_age = 14
outfit_type = /decl/hierarchy/outfit/job/science/scientist
- alt_titles = list("Xenoarchaeologist", "Anomalist", "Phoron Researcher")
+ job_description = "A Scientist is a generalist working in the Research department, with general knowledge of the scientific process, as well as \
+ the principles and requirements of Research and Development. They may also formulate experiments of their own devising, if \
+ they find an appropriate topic."
+ alt_titles = list("Scientist" = /datum/alt_title/scientist, "Xenoarchaeologist" = /datum/alt_title/xenoarch, "Anomalist" = /datum/alt_title/anomalist, \
+ "Phoron Researcher" = /datum/alt_title/phoron_research)
+// Scientist Alt Titles
+/datum/alt_title/scientist
+ title = "Scientist"
+
+/datum/alt_title/xenoarch
+ title = "Xenoarchaeologist"
+ title_blurb = "A Xenoarchaeologist enters digsites in search of artifacts of alien origin. These digsites are frequently in vacuum or other inhospitable \
+ locations, and as such a Xenoarchaeologist should be prepared to handle hostile evironmental conditions."
+
+/datum/alt_title/anomalist
+ title = "Anomalist"
+ title_blurb = "An Anomalist is a Scientist whose expertise is analyzing alien artifacts. They are familar with the most common methods of testing artifact \
+ function. They work closely with Xenoarchaeologists, or Miners, if either role is present."
+
+/datum/alt_title/phoron_research
+ title = "Phoron Researcher"
+ title_blurb = "A Phoron Researcher is a specialist in the practical applications of phoron, and has knowledge of its practical uses and dangers. \
+ Many Phoron Researchers are interested in the combustability and explosive properties of gaseous phoron, as well as the specific hazards \
+ of working with the substance in that state."
+
+//////////////////////////////////
+// Xenobiologist
+//////////////////////////////////
/datum/job/xenobiologist
title = "Xenobiologist"
flag = XENOBIOLOGIST
@@ -56,7 +100,7 @@
faction = "Station"
total_positions = 3
spawn_positions = 2
- supervisors = "the research director"
+ supervisors = "the Research Director"
selection_color = "#633D63"
economic_modifier = 7
access = list(access_robotics, access_tox, access_tox_storage, access_research, access_xenobiology, access_hydroponics)
@@ -65,8 +109,22 @@
minimal_player_age = 14
outfit_type = /decl/hierarchy/outfit/job/science/xenobiologist
- alt_titles = list("Xenobotanist")
+ job_description = "A Xenobiologist studies esoteric lifeforms, usually in the relative safety of their lab. They attempt to find ways to benefit \
+ from the byproducts of these lifeforms, and their main subject at present is the Giant Slime."
+ alt_titles = list("Xenobiologist" = /datum/alt_title/xenobio, "Xenobotanist" = /datum/alt_title/xenobot)
+// Xenibiologist Alt Titles
+/datum/alt_title/xenobio
+ title = "Xenobiologist"
+
+/datum/alt_title/xenobot
+ title = "Xenobotanist"
+ title_blurb = "A Xenobotanist grows and cares for a variety of abnormal, custom made, and frequently dangerous plant life. When the products of these plants \
+ is both safe and beneficial to the station, they may choose to introduce it to the rest of the crew."
+
+//////////////////////////////////
+// Roboticist
+//////////////////////////////////
/datum/job/roboticist
title = "Roboticist"
flag = ROBOTICIST
@@ -75,7 +133,7 @@
faction = "Station"
total_positions = 2
spawn_positions = 2
- supervisors = "research director"
+ supervisors = "the Research Director"
selection_color = "#633D63"
economic_modifier = 5
access = list(access_robotics, access_tox, access_tox_storage, access_tech_storage, access_morgue, access_research) //As a job that handles so many corpses, it makes sense for them to have morgue access.
@@ -83,4 +141,20 @@
minimal_player_age = 7
outfit_type = /decl/hierarchy/outfit/job/science/roboticist
- alt_titles = list("Biomechanical Engineer","Mechatronic Engineer")
+ job_description = "A Roboticist maintains and repairs the station's synthetics, including crew with prosthetic limbs. \
+ They can also assist the station by producing simple robots and even pilotable exosuits."
+ alt_titles = list("Roboticist" = /datum/alt_title/roboticist, "Biomechanical Engineer" = /datum/alt_title/biomech, "Mechatronic Engineer" = /datum/alt_title/mech_tech)
+
+// Roboticist Alt Titles
+/datum/alt_title/roboticist
+ title = "Roboticist"
+
+/datum/alt_title/biomech
+ title = "Biomechanical Engineer"
+ title_blurb = "A Biomechanical Engineer primarily works on prosthetics, and the organic parts attached to them. They may have some \
+ knowledge of the relatively simple surgical procedures used in making cyborgs and attaching prosthesis."
+
+/datum/alt_title/mech_tech
+ title = "Mechatronic Engineer"
+ title_blurb = "A Mechatronic Engineer focuses on the construction and maintenance of Exosuits, and should be well versed in their use. \
+ They may also be called upon to work on synthetics and prosthetics, if needed."
\ No newline at end of file
diff --git a/code/game/jobs/job/security.dm b/code/game/jobs/job/security.dm
index d53cd567ab..6a3954f9f0 100644
--- a/code/game/jobs/job/security.dm
+++ b/code/game/jobs/job/security.dm
@@ -1,7 +1,10 @@
+//////////////////////////////////
+// Head of Security
+//////////////////////////////////
/datum/job/hos
title = "Head of Security"
flag = HOS
- head_position = 1
+ departments_managed = list(DEPARTMENT_SECURITY)
departments = list(DEPARTMENT_SECURITY, DEPARTMENT_COMMAND)
sorting_order = 2
department_flag = ENGSEC
@@ -24,8 +27,24 @@
minimal_player_age = 14
outfit_type = /decl/hierarchy/outfit/job/security/hos
- alt_titles = list("Security Commander", "Chief of Security")
+ job_description = " The Head of Security manages the Security Department, keeping the station safe and making sure the rules are followed. They are expected to \
+ keep the other Department Heads, and the rest of the crew, aware of developing situations that may be a threat. If necessary, the HoS may \
+ perform the duties of absent Security roles, such as distributing gear from the Armory."
+ alt_titles = list("Head of Security" = /datum/alt_title/hos, "Security Commander" = /datum/alt_title/sec_commander, "Chief of Security" = /datum/alt_title/sec_chief)
+// Head of Security Alt Titles
+/datum/alt_title/hos
+ title = "Head of Security"
+
+/datum/alt_title/sec_commander
+ title = "Security Commander"
+
+/datum/alt_title/sec_chief
+ title = "Chief of Security"
+
+//////////////////////////////////
+// Warden
+//////////////////////////////////
/datum/job/warden
title = "Warden"
flag = WARDEN
@@ -35,14 +54,26 @@
faction = "Station"
total_positions = 1
spawn_positions = 1
- supervisors = "the head of security"
+ supervisors = "the Head of Security"
selection_color = "#601C1C"
economic_modifier = 5
access = list(access_security, access_eva, access_sec_doors, access_brig, access_armory, access_maint_tunnels, access_morgue, access_external_airlocks)
minimal_access = list(access_security, access_eva, access_sec_doors, access_brig, access_armory, access_maint_tunnels, access_external_airlocks)
minimal_player_age = 5
- outfit_type = /decl/hierarchy/outfit/job/security/warden
+ outfit_type = /decl/hierarchy/outfit/job/security/warden
+ job_description = "The Warden watches over the physical Security Department, making sure the Brig and Armoury are secure and in order at all times. They oversee \
+ prisoners that have been processed and brigged, and are responsible for their well being. The Warden is also in charge of distributing \
+ Armoury gear in a crisis, and retrieving it when the crisis has passed. In an emergency, the Warden may be called upon to direct the \
+ Security Department as a whole."
+
+// Warden Alt Titles
+/datum/alt_title/warden
+ title = "Warden"
+
+//////////////////////////////////
+// Detective
+//////////////////////////////////
/datum/job/detective
title = "Detective"
flag = DETECTIVE
@@ -51,15 +82,30 @@
faction = "Station"
total_positions = 2
spawn_positions = 2
- supervisors = "the head of security"
+ supervisors = "the Head of Security"
selection_color = "#601C1C"
access = list(access_security, access_sec_doors, access_forensics_lockers, access_morgue, access_maint_tunnels, access_eva, access_external_airlocks)
minimal_access = list(access_security, access_sec_doors, access_forensics_lockers, access_morgue, access_maint_tunnels, access_eva, access_external_airlocks)
economic_modifier = 5
minimal_player_age = 3
- outfit_type = /decl/hierarchy/outfit/job/security/detective
- alt_titles = list("Forensic Technician" = /decl/hierarchy/outfit/job/security/detective/forensic, "Investigator")
+ outfit_type = /decl/hierarchy/outfit/job/security/detective
+ job_description = "A Detective works to help Security find criminals who have not properly been identified, through interviews and forensic work. \
+ For crimes only witnessed after the fact, or those with no survivors, they attempt to piece together what they can from pure evidence."
+ alt_titles = list("Detective" = /datum/alt_title/detective, "Forensic Technician" = /datum/alt_title/forensic_tech)
+
+// Detective Alt Titles
+/datum/alt_title/detective
+ title = "Detective"
+
+/datum/alt_title/forensic_tech
+ title = "Forensic Technician"
+ title_blurb = "A Forensic Technician works more with hard evidence and labwork than a Detective, but they share the purpose of solving crimes."
+ title_outfit = /decl/hierarchy/outfit/job/security/detective/forensic
+
+//////////////////////////////////
+// Security Officer
+//////////////////////////////////
/datum/job/officer
title = "Security Officer"
flag = OFFICER
@@ -68,11 +114,25 @@
faction = "Station"
total_positions = 4
spawn_positions = 4
- supervisors = "the head of security"
+ supervisors = "the Head of Security"
selection_color = "#601C1C"
economic_modifier = 4
access = list(access_security, access_eva, access_sec_doors, access_brig, access_maint_tunnels, access_morgue, access_external_airlocks)
minimal_access = list(access_security, access_eva, access_sec_doors, access_brig, access_maint_tunnels, access_external_airlocks)
minimal_player_age = 3
+
outfit_type = /decl/hierarchy/outfit/job/security/officer
- alt_titles = list("Junior Officer")
\ No newline at end of file
+ job_description = "A Security Officer is concerned with maintaining the safety and security of the station as a whole, dealing with external threats and \
+ apprehending criminals. A Security Officer is responsible for the health, safety, and processing of any prisoner they arrest. \
+ No one is above the Law, not Security or Command."
+ alt_titles = list("Security Officer" = /datum/alt_title/sec_officer, "Junior Officer" = /datum/alt_title/junior_officer)
+
+// Security Officer Alt Titles
+/datum/alt_title/sec_officer
+ title = "Security Officer"
+
+/datum/alt_title/junior_officer
+ title = "Junior Officer"
+ title_blurb = "A Junior Officer is an inexperienced Security Officer. They likely have training, but not experience, and are frequently \
+ paired off with a more senior co-worker. Junior Officers may also be expected to take over the boring duties of other Officers \
+ including patrolling the station or maintaining specific posts."
\ No newline at end of file
diff --git a/code/game/jobs/job/silicon.dm b/code/game/jobs/job/silicon.dm
index e5ed9b2dc4..691ebe2ad9 100644
--- a/code/game/jobs/job/silicon.dm
+++ b/code/game/jobs/job/silicon.dm
@@ -1,3 +1,6 @@
+//////////////////////////////////
+// AI
+//////////////////////////////////
/datum/job/ai
title = "AI"
flag = AI
@@ -8,14 +11,23 @@
total_positions = 0 // Not used for AI, see is_position_available below and modules/mob/living/silicon/ai/latejoin.dm
spawn_positions = 1
selection_color = "#3F823F"
- supervisors = "your laws"
+ supervisors = "your Laws"
req_admin_notify = 1
minimal_player_age = 7
account_allowed = 0
economic_modifier = 0
has_headset = FALSE
assignable = FALSE
+ outfit_type = /decl/hierarchy/outfit/job/silicon/ai
+ job_description = "The AI oversees the operation of the station and its crew, but has no real authority over them. \
+ The AI is required to follow its Laws, and Lawbound Synthetics that are linked to it are expected to follow \
+ the AI's commands, and their own Laws."
+//AI Alt Titles
+/datum/alt_title/ai
+ title = "AI"
+
+// AI procs
/datum/job/ai/equip(var/mob/living/carbon/human/H)
if(!H) return 0
return 1
@@ -28,6 +40,9 @@
H.equip_to_slot_or_del(new /obj/item/clothing/head/cardborg(H), slot_head)
return 1
+//////////////////////////////////
+// Cyborg
+//////////////////////////////////
/datum/job/cyborg
title = "Cyborg"
flag = CYBORG
@@ -36,15 +51,33 @@
faction = "Station"
total_positions = 2
spawn_positions = 2
- supervisors = "your laws and the AI" //Nodrak
+ supervisors = "your Laws and the AI" //Nodrak
selection_color = "#254C25"
minimal_player_age = 1
- alt_titles = list("Robot", "Drone")
account_allowed = 0
economic_modifier = 0
has_headset = FALSE
assignable = FALSE
+ outfit_type = /decl/hierarchy/outfit/job/silicon/cyborg
+ job_description = "A Cyborg is a mobile station synthetic, piloted by a cybernetically preserved brain. It is considered a person, but is still required \
+ to follow its Laws."
+ alt_titles = list("Cyborg" = /datum/alt_title/cyborg, "Robot" = /datum/alt_title/robot, "Drone" = /datum/alt_title/drone)
+// Cyborg Alt Titles
+/datum/alt_title/cyborg
+ title = "Cyborg"
+
+/datum/alt_title/robot
+ title = "Robot"
+ title_blurb = "A Robot is a mobile station synthetic, piloted by an advanced piece of technology called a Positronic Brain. It is considered a person, \
+ legally, but is required to follow its Laws."
+
+/datum/alt_title/drone
+ title = "Drone"
+ title_blurb = "A Drone is a mobile station synthetic, piloted by a simple computer-based AI. As such, it is not a person, but rather an expensive and \
+ and important piece of station property, and is expected to follow its Laws."
+
+// Cyborg procs
/datum/job/cyborg/equip(var/mob/living/carbon/human/H)
if(!H) return 0
return 1
diff --git a/code/game/jobs/job_controller.dm b/code/game/jobs/job_controller.dm
index b1402290c0..3d6fa2045c 100644
--- a/code/game/jobs/job_controller.dm
+++ b/code/game/jobs/job_controller.dm
@@ -11,7 +11,8 @@ var/global/datum/controller/occupations/job_master
var/list/unassigned = list()
//Debug info
var/list/job_debug = list()
-
+ //Cache of icons for job info window
+ var/list/job_icons = list()
proc/SetupOccupations(var/faction = "Station")
occupations = list()
@@ -435,14 +436,14 @@ var/global/datum/controller/occupations/job_master
log_game("SPECIES [key_name(H)] is a: \"[H.species.name]\"") //VOREStation Add
// If they're head, give them the account info for their department
- if(H.mind && job.head_position && LAZYLEN(job.departments))
+ if(H.mind && job.department_accounts)
var/remembered_info = ""
- var/datum/money_account/department_account = department_accounts[job.departments[1]]
-
- if(department_account)
- remembered_info += "Your department's account number is: #[department_account.account_number]
"
- remembered_info += "Your department's account pin is: [department_account.remote_access_pin]
"
- remembered_info += "Your department's account funds are: $[department_account.money]
"
+ for(var/D in job.department_accounts)
+ var/datum/money_account/department_account = department_accounts[D]
+ if(department_account)
+ remembered_info += "Department account number ([D]): #[department_account.account_number]
"
+ remembered_info += "Department account pin ([D]): [department_account.remote_access_pin]
"
+ remembered_info += "Department account funds ([D]): $[department_account.money]
"
H.mind.store_memory(remembered_info)
diff --git a/code/modules/client/preference_setup/occupation/occupation.dm b/code/modules/client/preference_setup/occupation/occupation.dm
index 1035147ffa..ade5260989 100644
--- a/code/modules/client/preference_setup/occupation/occupation.dm
+++ b/code/modules/client/preference_setup/occupation/occupation.dm
@@ -82,25 +82,27 @@
index = 0
. += "
"
+ if(job.alt_titles)
+ dat += "Alternate titles: [english_list(job.alt_titles)]."
+ send_rsc(user, job.get_job_icon(), "job[ckey(rank)].png")
+ dat += "
"
+ if(job.departments)
+ dat += "Departments: [english_list(job.departments)]."
+ if(LAZYLEN(job.departments_managed))
+ dat += "You manage these departments: [english_list(job.departments_managed)]"
+
+ dat += "You answer to [job.supervisors] normally."
+
+ dat += "