diff --git a/code/__DEFINES/jobs.dm b/code/__DEFINES/jobs.dm
index 68a9033d7f..86383a50b2 100644
--- a/code/__DEFINES/jobs.dm
+++ b/code/__DEFINES/jobs.dm
@@ -12,6 +12,8 @@
#define ROBOTICIST (1<<8)
#define AI_JF (1<<9)
#define CYBORG (1<<10)
+#define JR_OFFICER (1<<11)
+#define JR_ENGINEER (1<<12)
#define MEDSCI (1<<1)
@@ -24,6 +26,8 @@
#define GENETICIST (1<<5)
#define VIROLOGIST (1<<6)
#define PARAMEDIC (1<<7)
+#define JR_DOCTOR (1<<8)
+#define JR_SCIENTIST (1<<9)
#define CIVILIAN (1<<2)
diff --git a/code/game/gamemodes/bloodsucker/bloodsucker.dm b/code/game/gamemodes/bloodsucker/bloodsucker.dm
index 73f24948d0..9ab900ef36 100644
--- a/code/game/gamemodes/bloodsucker/bloodsucker.dm
+++ b/code/game/gamemodes/bloodsucker/bloodsucker.dm
@@ -26,7 +26,7 @@
false_report_weight = 1
chaos = 4
restricted_jobs = list("Prisoner", "AI","Cyborg")
- protected_jobs = list("Chaplain", "Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster")
+ protected_jobs = list("Chaplain", "Security Cadet", "Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster") //GS13 Edit: Excempting cadets from antagery
required_players = 20
required_enemies = 2
recommended_enemies = 4
diff --git a/code/game/gamemodes/brother/traitor_bro.dm b/code/game/gamemodes/brother/traitor_bro.dm
index 511f3bb597..f0bec30545 100644
--- a/code/game/gamemodes/brother/traitor_bro.dm
+++ b/code/game/gamemodes/brother/traitor_bro.dm
@@ -8,7 +8,7 @@
required_players = 25
chaos = 5
restricted_jobs = list("Prisoner", "AI", "Cyborg")
- protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster")
+ protected_jobs = list("Security Officer", "Security Cadet", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster") //GS13 Edit: Excempting cadets from antagery
announce_span = "danger"
announce_text = "There are Syndicate agents and Blood Brothers on the station!\n\
diff --git a/code/game/gamemodes/changeling/changeling.dm b/code/game/gamemodes/changeling/changeling.dm
index 05979867e2..0d25ea2137 100644
--- a/code/game/gamemodes/changeling/changeling.dm
+++ b/code/game/gamemodes/changeling/changeling.dm
@@ -12,7 +12,7 @@ GLOBAL_VAR(changeling_team_objective_type) //If this is not null, we hand our th
false_report_weight = 10
chaos = 5
restricted_jobs = list("Prisoner", "AI", "Cyborg")
- protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster") //citadel change - adds HoP, CE, CMO, and RD to ling role blacklist
+ protected_jobs = list("Security Officer", "Security Cadet", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster") //citadel change - adds HoP, CE, CMO, and RD to ling role blacklist + GS13 Edit: Excempting cadets from antagery
required_players = 15
required_enemies = 1
recommended_enemies = 4
diff --git a/code/game/gamemodes/clock_cult/clock_cult.dm b/code/game/gamemodes/clock_cult/clock_cult.dm
index 8b7f265b11..186811fefe 100644
--- a/code/game/gamemodes/clock_cult/clock_cult.dm
+++ b/code/game/gamemodes/clock_cult/clock_cult.dm
@@ -139,7 +139,7 @@ Credit where due:
required_enemies = 3
recommended_enemies = 5
enemy_minimum_age = 7
- protected_jobs = list("Prisoner", "AI", "Cyborg", "Security Officer", "Warden", "Detective", "Head of Security", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster") //Silicons can eventually be converted
+ protected_jobs = list("Prisoner", "AI", "Cyborg", "Security Officer", "Security Cadet", "Warden", "Detective", "Head of Security", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster") //Silicons can eventually be converted + GS13 Edit: Excempting cadets from antagery
restricted_jobs = list("Chaplain", "Captain")
announce_span = "brass"
announce_text = "Servants of Ratvar are trying to summon the Justiciar!\n\
diff --git a/code/game/gamemodes/cult/cult.dm b/code/game/gamemodes/cult/cult.dm
index 72b3b53989..0168757f2d 100644
--- a/code/game/gamemodes/cult/cult.dm
+++ b/code/game/gamemodes/cult/cult.dm
@@ -40,7 +40,7 @@
false_report_weight = 10
chaos = 8
restricted_jobs = list("Prisoner", "AI", "Cyborg")
- protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster")
+ protected_jobs = list("Security Officer", "Security Cadet", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster") //GS13 Edit: Excempting cadets from antagery
required_players = 30
required_enemies = 3
recommended_enemies = 5
diff --git a/code/game/gamemodes/eldritch_cult/eldritch_cult.dm b/code/game/gamemodes/eldritch_cult/eldritch_cult.dm
index 2086653012..db38ef27ce 100644
--- a/code/game/gamemodes/eldritch_cult/eldritch_cult.dm
+++ b/code/game/gamemodes/eldritch_cult/eldritch_cult.dm
@@ -5,7 +5,7 @@
false_report_weight = 5
chaos = 5
restricted_jobs = list("Prisoner", "AI", "Cyborg")
- protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster") //citadel change - adds HoP, CE, CMO, and RD to heretic role blacklist
+ protected_jobs = list("Security Officer","Security Cadet", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster") //citadel change - adds HoP, CE, CMO, and RD to heretic role blacklist + GS13 Edit: Excempting cadets from antagery
required_players = 15
required_enemies = 1
recommended_enemies = 4
diff --git a/code/game/gamemodes/overthrow/overthrow.dm b/code/game/gamemodes/overthrow/overthrow.dm
index 6a118567df..711673212e 100644
--- a/code/game/gamemodes/overthrow/overthrow.dm
+++ b/code/game/gamemodes/overthrow/overthrow.dm
@@ -5,7 +5,7 @@
antag_flag = ROLE_OVERTHROW
chaos = 5
restricted_jobs = list("AI", "Cyborg")
- protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster")
+ protected_jobs = list("Security Officer", "Security Cadet", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster") //GS13 Edit: Excempting cadets from antagery
required_players = 20 // the core idea is of a swift, bloodless coup, so it shouldn't be as chaotic as revs.
required_enemies = 2 // minimum two teams, otherwise it's just nerfed revs.
recommended_enemies = 4
diff --git a/code/game/gamemodes/revolution/revolution.dm b/code/game/gamemodes/revolution/revolution.dm
index 5b3e742336..961fe0b3d6 100644
--- a/code/game/gamemodes/revolution/revolution.dm
+++ b/code/game/gamemodes/revolution/revolution.dm
@@ -14,7 +14,7 @@
false_report_weight = 10
chaos = 8
restricted_jobs = list("Prisoner", "AI", "Cyborg")
- protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster")
+ protected_jobs = list("Security Officer", "Security Cadet", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster") //GS13 Edit: Excempting cadets from antagery
required_players = 20
required_enemies = 1
recommended_enemies = 3
diff --git a/code/game/gamemodes/traitor/traitor.dm b/code/game/gamemodes/traitor/traitor.dm
index d180e43d82..6e1f931a36 100644
--- a/code/game/gamemodes/traitor/traitor.dm
+++ b/code/game/gamemodes/traitor/traitor.dm
@@ -11,7 +11,7 @@
antag_flag = ROLE_TRAITOR
false_report_weight = 20 //Reports of traitors are pretty common.
restricted_jobs = list("Prisoner", "Cyborg")//They are part of the AI if he is traitor so are they, they use to get double chances
- protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster") //citadel change - adds HoP, CE, CMO, and RD to ling role blacklist
+ protected_jobs = list("Security Officer", "Security Cadet", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster") //citadel change - adds HoP, CE, CMO, and RD to ling role blacklist + GS13 Edit: Excempting cadets from antagery
required_players = 0
required_enemies = 1
recommended_enemies = 4
diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm
index 00af91d8b9..3cb2e1c7ce 100644
--- a/code/modules/client/preferences.dm
+++ b/code/modules/client/preferences.dm
@@ -1570,7 +1570,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
popup.open(FALSE)
onclose(user, "capturekeypress", src)
-/datum/preferences/proc/SetChoices(mob/user, limit = 17, list/splitJobs = list("Chief Engineer"), widthPerColumn = 295, height = 620)
+/datum/preferences/proc/SetChoices(mob/user, limit = 22, list/splitJobs = list("Chief Engineer"), widthPerColumn = 295, height = 620) //GS13 Edit: Expanding out the pref window for new job additions
if(!SSjob)
return
@@ -3025,7 +3025,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
var/new_wl_rate = input(user, "Choose your weight loss rate from 0.1 (10%) to 2 (200%).\n Decimals such as 0.2 indicate 20% rate.\nDefault recommended rate is 0.5 (50%)", "Character Preference", wl_rate) as num|null
if (new_wl_rate)
wl_rate = max(min(round(text2num(new_wl_rate),0.01),2),0)
-
+
if("stuckage_chance")
var/new_stuckage_chance = input(user, "Choose your chance to get stuck in doors from 0.1 (10%) to 1 (100%).\nDecimals such as 0.2 indicate 20% chance.\nSetting this to 0 restores default values.", "Character Preference", stuckage_chance) as num|null
if(new_stuckage_chance)
diff --git a/code/modules/jobs/access.dm b/code/modules/jobs/access.dm
index 35a89b46db..233802f3af 100644
--- a/code/modules/jobs/access.dm
+++ b/code/modules/jobs/access.dm
@@ -353,9 +353,9 @@
/proc/get_all_jobs()
return list("Assistant", "Captain", "Head of Personnel", "Bartender", "Cook", "Botanist", "Quartermaster", "Cargo Technician",
- "Shaft Miner", "Clown", "Mime", "Janitor", "Curator", "Lawyer", "Chaplain", "Chief Engineer", "Station Engineer",
- "Atmospheric Technician", "Chief Medical Officer", "Medical Doctor", "Chemist", "Geneticist", "Virologist", "Paramedic",
- "Research Director", "Scientist", "Roboticist", "Head of Security", "Warden", "Detective", "Security Officer", "Prisoner")
+ "Shaft Miner", "Clown", "Mime", "Janitor", "Curator", "Lawyer", "Chaplain", "Chief Engineer", "Station Engineer", "Engineering Intern",
+ "Atmospheric Technician", "Chief Medical Officer", "Medical Doctor", "Chemist", "Geneticist", "Virologist", "Paramedic", "Medical Resident",
+ "Research Director", "Scientist", "Roboticist", "Research Student", "Head of Security", "Warden", "Detective", "Security Officer", "Security Cadet", "Prisoner") //Rookie roles
/proc/get_all_job_icons() //For all existing HUD icons
return get_all_jobs() + list("Prisoner")
diff --git a/code/modules/jobs/job_titles.dm b/code/modules/jobs/job_titles.dm
index 8518d4950c..4ff3bdaee2 100644
--- a/code/modules/jobs/job_titles.dm
+++ b/code/modules/jobs/job_titles.dm
@@ -2,7 +2,7 @@
//Engineering
/datum/job/chief_engineer
- alt_titles = list("Head Engineer", "Construction Coordinator", "Project Manager", "Power Plant Director")
+ alt_titles = list("Head Engineer", "Construction Coordinator", "Project Manager", "Power Plant Director", "Engineering Foreman")
/datum/job/engineer
alt_titles = list("Maintenance Technician", "Engine Technician", "Electrician", "Structural Engineer", "Mechanic", "Station Architect", "Nuclear Plant Operator")
@@ -10,27 +10,30 @@
/datum/job/atmos
alt_titles = list("Firefighter", "Life Support Specialist", "Disposals Technician")
+/datum/job/junior_engineer
+ alt_titles = list("Atmospheric Intern", "Apprentice Engineer")
+
//Service
/datum/job/assistant
- alt_titles = list("Civilian", "Morale Officer", "Off-Duty", "Visitor", "Businessman", "Trader", "Entertainer", "Tourist")
+ alt_titles = list("Civilian", "Morale Officer", "Off-Duty", "Visitor", "Businessman", "Trader", "Entertainer", "Tourist", "Artist", "Businesswoman", "Butler", "Contractor", "Entertainer", "Freelancer", "Fitness Instructor", "Hobbyist", "Performer")
/datum/job/cook
alt_titles = list("Cook", "Culinary Artist", "Butcher", "Chef de partie", "Poissonier", "Baker", "Taste Tester")
/datum/job/hydro
- alt_titles = list("Gardener", "Herbalist", "Botanical Researcher", "Hydroponicist", "Farmer", "Beekeeper", "Vintner")
+ alt_titles = list("Gardener", "Herbalist", "Botanical Researcher", "Hydroponicist", "Apiarist", "Apiculturist", "Farmer", "Beekeeper", "Vintner", "Junior Botanist")
/datum/job/curator
- alt_titles = list("Journalist", "Librarian", "Keeper")
+ alt_titles = list("Journalist", "Librarian", "Keeper", "Historian", "Professor", "Archivist")
/datum/job/chaplain
- alt_titles = list("Priest", "Priestess", "Prior", "Monk", "Nun", "Counselor")
+ alt_titles = list("Priest", "Priestess", "Prior", "Monk", "Nun", "Counselor", "Cleric", "High Priest", "High Priestess", "Imam", "Oracle", "Preacher", "Pastor", "Pontifex", "Guru", "Rabbi", "Reverend", "Shrine Maiden", "Shrine Guardian")
/datum/job/janitor
- alt_titles = list("Custodian", "Sanitation Technician", "Maid", "Trash Can", "Disposal Unit")
+ alt_titles = list("Custodian", "Custodial Technician", "Sanitation Technician", "Maintenance Technician", "Maid", "Trash Can", "Disposal Unit", "Groundskeeper")
/datum/job/lawyer
- alt_titles = list("Human Resources Agent", "Internal Affairs Agent", "Attorney")
+ alt_titles = list("Human Resources Agent", "Internal Affairs Agent", "Attorney", "Defense Attorney", "Legal Clerk", "Public Defender")
/datum/job/clown
alt_titles = list("Jester", "Comedian")
@@ -39,61 +42,72 @@
alt_titles = list("Performer", "Pantomime", "Mimic")
/datum/job/bartender
- alt_titles = list("Mixologist", "Sommelier", "Bar Owner", "Barmaid", "Expediter")
+ alt_titles = list("Mixologist", "Sommelier", "Bar Owner", "Barmaid", "Expediter", "Barista", "Tavernkeeper")
//Science
/datum/job/rd
- alt_titles = list("Research Manager", "Science Administrator")
+ alt_titles = list("Research Manager", "Science Administrator", "Chief Science Officer", "Lead Researcher", "Science Director", "Head of Science")
/datum/job/scientist
- alt_titles = list("Circuitry Designer", "Xenobiologist", "Xenobotanist", "Xenoarcheologist", "Chemical Researcher", "Researcher", "Pyrotechnician")
+ alt_titles = list("Circuitry Designer", "Xenobiologist", "Xenobotanist", "Xenoarcheologist", "Chemical Researcher", "Researcher", "Pyrotechnician", "Lab Technician", "Theoretical Physicist")
/datum/job/roboticist
- alt_titles = list("Biomechanical Engineer", "Mechatronic Engineer", "Mechanic")
+ alt_titles = list("Biomechanical Engineer", "Mechatronic Engineer", "Mechanic", "Machinist")
+
+/datum/job/junior_scientist
+ alt_titles = list("Research Intern", "Apprentice Roboticist", "Research Assistant")
//Medical
/datum/job/cmo
- alt_titles = list("Medical Director", "Medical Administrator")
+ alt_titles = list("Medical Director", "Medical Administrator", "Chief Physician", "Head of Medical", "Head Physician")
/datum/job/doctor
- alt_titles = list("Nurse", "Surgeon", "Physician", "Paramedic", "Trophologist", "Nutritionist", "Therapist", "Psychiatrist")
+ alt_titles = list("Nurse", "Surgeon", "Physician", "Trophologist", "Nutritionist", "Therapist", "Psychiatrist")
/datum/job/chemist
- alt_titles = list("Pharmacist", "Pharmacologist")
+ alt_titles = list("Pharmacist", "Pharmacologist", "Pharmacy Technician")
/datum/job/virologist
- alt_titles = list("Microbiologist", "Biochemist", "Pathologist")
+ alt_titles = list("Microbiologist", "Biochemist", "Pathologist", "Epidemiologist")
/datum/job/geneticist
- alt_titles = list("Gene Therapist", "Genetics Researcher")
+ alt_titles = list("Gene Therapist", "Genetics Researcher", "Mutation Researcher", "Gene Tailor")
+
+/datum/job/paramedic
+ alt_titles = list ("Emergency Medical Technician", "Search and Rescue Technician", "Trauma Team Responder")
+
+/datum/job/junior_doctor
+ alt_titles = list("Medical Student", "Fellow", "Trainee Pharmacy Technician", "Trainee Pharmacist", "Junior Pathologist")
//Security
/datum/job/hos
alt_titles = list("Chief of Security", "Security Commander", "Sheriff")
/datum/job/warden
- alt_titles = list("Prison Chief", "Armory Manager", "Prison Administrator", "Brig Superintendent")
+ alt_titles = list("Prison Chief", "Armory Manager", "Prison Administrator", "Brig Superintendent", "Deputy Commissioner of Security")
/datum/job/officer
- alt_titles = list("Security Agent", "Probation Officer", "Security Peacekeeper", "Security Guard", "Guardsman", "Security Cadet")
+ alt_titles = list("Security Agent", "Probation Officer", "Security Peacekeeper", "Security Guard", "Security Constable", "Security Operative", "Guardsman")
/datum/job/detective
alt_titles = list("Forensics Technician", "Private Investigator", "Gumshoe")
+/datum/job/junior_officer
+ alt_titles = list("Security Assistant","Rookie", "Brig Deputy", "Junior Officer")
//Supply
/datum/job/qm
- alt_titles = list("Supply Chief")
+ alt_titles = list("Supply Chief", "Head of Supply", "Logistics Coordinator", "Warehouse Supervisor")
/datum/job/cargo_tech
- alt_titles = list("Mail Man", "Mail Woman", "Mailroom Technician", "Deliveries Officer", "Logistics Technician")
+ alt_titles = list("Mail Man", "Mail Woman", "Mailroom Technician", "Deliveries Officer", "Logistics Technician", "Warehouse Technician")
/datum/job/mining
- alt_titles = list("Exotic Ore Miner", "Fauna Hunter", "Explorer", "Digger") //Just because you're a hunter does not excuse you from rock collecting!!!!!!!!!!!!
+ alt_titles = list("Exotic Ore Miner", "Fauna Hunter", "Explorer", "Digger", "Apprentice Miner") //Just because you're a hunter does not excuse you from rock collecting!!!!!!!!!!!!
//Command
/datum/job/captain
- alt_titles = list("Station Director", "Station Commander", "Station Overseer", "Stationmaster", "Commissar")
+ alt_titles = list("Station Director", "Station Commander", "Station Overseer", "Stationmaster", "Commissar", "Facility Director", "Commanding Officer")
/datum/job/hop
- alt_titles = list("Personnel Manager", "Staff Administrator", "Records Administrator")
+ alt_titles = list("Personnel Manager", "Staff Administrator", "Records Administrator", "Crew Supervisor", "Employment Officer", "Executive Officer")
diff --git a/code/modules/jobs/job_types/engineer_intern.dm b/code/modules/jobs/job_types/engineer_intern.dm
new file mode 100644
index 0000000000..954dc8befe
--- /dev/null
+++ b/code/modules/jobs/job_types/engineer_intern.dm
@@ -0,0 +1,79 @@
+/datum/job/junior_engineer
+ title = "Engineering Intern"
+ flag = JR_ENGINEER
+ department_head = list("Chief Engineer")
+ department_flag = ENGSEC
+ faction = "Station"
+ total_positions = 2
+ spawn_positions = 2
+ supervisors = "the chief engineer, and any other more experienced engineers"
+ selection_color = "#ff9b3d"
+ exp_requirements = 60
+ exp_type = EXP_TYPE_CREW
+
+ outfit = /datum/outfit/job/engineer/junior
+ plasma_outfit = /datum/outfit/plasmaman/engineering
+
+ access = list(ACCESS_ENGINE, ACCESS_ENGINE_EQUIP, ACCESS_TECH_STORAGE, ACCESS_MAINT_TUNNELS,
+ ACCESS_EXTERNAL_AIRLOCKS, ACCESS_CONSTRUCTION, ACCESS_ATMOSPHERICS, ACCESS_TCOMSAT, ACCESS_MINERAL_STOREROOM)
+ minimal_access = list(ACCESS_ENGINE, ACCESS_ENGINE_EQUIP, ACCESS_TECH_STORAGE, ACCESS_MAINT_TUNNELS,
+ ACCESS_EXTERNAL_AIRLOCKS, ACCESS_CONSTRUCTION, ACCESS_TCOMSAT, ACCESS_MINERAL_STOREROOM)
+ paycheck = PAYCHECK_EASY
+ paycheck_department = ACCOUNT_ENG
+ bounty_types = CIV_JOB_ENG
+ departments = DEPARTMENT_BITFLAG_ENGINEERING
+
+ starting_modifiers = list(/datum/skill_modifier/job/level/wiring, /datum/skill_modifier/job/affinity/wiring)
+
+ display_order = JOB_DISPLAY_ORDER_STATION_ENGINEER
+
+ threat = 1
+
+ family_heirlooms = list(
+ /obj/item/clothing/head/hardhat,
+ /obj/item/screwdriver/brass/family,
+ /obj/item/wrench/brass/family,
+ /obj/item/weldingtool/mini, // No brass family variant
+ /obj/item/crowbar/brass/family,
+ /obj/item/wirecutters/brass/family
+ )
+
+ mail_goodies = list(
+ /obj/item/storage/box/lights/mixed = 20,
+ /obj/item/lightreplacer = 10,
+ /obj/item/holosign_creator/engineering = 8,
+ /obj/item/clothing/head/hardhat/red/upgraded = 1
+ )
+
+/datum/outfit/job/engineer/junior
+ name = "Engineering Intern"
+ jobtype = /datum/job/junior_engineer
+
+ belt = /obj/item/storage/belt/utility/full/engi
+ l_pocket = /obj/item/pda/engineering
+ ears = /obj/item/radio/headset/headset_eng
+ uniform = /obj/item/clothing/under/rank/engineering/engineer
+ shoes = /obj/item/clothing/shoes/workboots
+ head = /obj/item/clothing/head/hardhat
+ r_pocket = /obj/item/t_scanner
+
+ backpack = /obj/item/storage/backpack/industrial
+ satchel = /obj/item/storage/backpack/satchel/eng
+ duffelbag = /obj/item/storage/backpack/duffelbag/engineering
+ box = /obj/item/storage/box/survival/engineer
+ pda_slot = ITEM_SLOT_LPOCKET
+ backpack_contents = list(/obj/item/modular_computer/tablet/preset/advanced=1)
+
+/datum/outfit/job/engineer/gloved
+ name = "Station Engineer (Gloves)"
+ gloves = /obj/item/clothing/gloves/color/yellow
+
+/datum/outfit/job/engineer/gloved/rig
+ name = "Station Engineer (Hardsuit)"
+ mask = /obj/item/clothing/mask/breath
+ suit = /obj/item/clothing/suit/space/hardsuit/engine
+ suit_store = /obj/item/tank/internals/oxygen
+ head = null
+ internals_slot = ITEM_SLOT_SUITSTORE
+
+
diff --git a/code/modules/jobs/job_types/medical_intern.dm b/code/modules/jobs/job_types/medical_intern.dm
new file mode 100644
index 0000000000..fcbaf2094a
--- /dev/null
+++ b/code/modules/jobs/job_types/medical_intern.dm
@@ -0,0 +1,52 @@
+/datum/job/junior_doctor
+ title = "Medical Resident"
+ flag = JR_DOCTOR
+ department_head = list("Chief Medical Officer")
+ department_flag = MEDSCI
+ faction = "Station"
+ total_positions = 2
+ spawn_positions = 2
+ supervisors = "the chief medical officer, and any other senior medical staff"
+ selection_color = "#74b5e0"
+
+ outfit = /datum/outfit/job/doctor/junior
+ departments = DEPARTMENT_BITFLAG_MEDICAL
+ plasma_outfit = /datum/outfit/plasmaman/medical
+
+ access = list(ACCESS_MEDICAL, ACCESS_MORGUE, ACCESS_SURGERY, ACCESS_CHEMISTRY, ACCESS_GENETICS, ACCESS_CLONING, ACCESS_VIROLOGY, ACCESS_MINERAL_STOREROOM)
+ minimal_access = list(ACCESS_MEDICAL, ACCESS_MORGUE, ACCESS_SURGERY, ACCESS_CLONING, ACCESS_MINERAL_STOREROOM)
+ paycheck = PAYCHECK_EASY
+ paycheck_department = ACCOUNT_MED
+ bounty_types = CIV_JOB_MED
+
+ display_order = JOB_DISPLAY_ORDER_MEDICAL_DOCTOR
+ threat = 0.5
+
+ starting_modifiers = list(/datum/skill_modifier/job/surgery, /datum/skill_modifier/job/affinity/surgery)
+
+ family_heirlooms = list(
+ /obj/item/storage/firstaid/ancient/heirloom
+ )
+
+ mail_goodies = list(
+ /obj/effect/spawner/lootdrop/organ_spawner = 5,
+// /obj/effect/spawner/lootdrop/memeorgans = 1
+ )
+
+/datum/outfit/job/doctor/junior
+ name = "Medical Resident"
+ jobtype = /datum/job/junior_doctor
+
+ belt = /obj/item/pda/medical
+ ears = /obj/item/radio/headset/headset_med
+ uniform = /obj/item/clothing/under/rank/medical/doctor
+ shoes = /obj/item/clothing/shoes/sneakers/white
+ suit = /obj/item/clothing/suit/toggle/labcoat
+ l_hand = /obj/item/storage/firstaid/regular
+ suit_store = /obj/item/flashlight/pen
+
+ backpack = /obj/item/storage/backpack/medic
+ satchel = /obj/item/storage/backpack/satchel/med
+ duffelbag = /obj/item/storage/backpack/duffelbag/med
+
+ chameleon_extras = /obj/item/gun/syringe
diff --git a/code/modules/jobs/job_types/research_student.dm b/code/modules/jobs/job_types/research_student.dm
new file mode 100644
index 0000000000..740f2aee75
--- /dev/null
+++ b/code/modules/jobs/job_types/research_student.dm
@@ -0,0 +1,49 @@
+/datum/job/junior_scientist
+ title = "Research Student"
+ flag = SCIENTIST
+ department_head = list("Research Director")
+ department_flag = MEDSCI
+ faction = "Station"
+ total_positions = 2
+ spawn_positions = 1
+ supervisors = "the research director, and any other senior science staff"
+ selection_color = "#9574cd"
+ exp_requirements = 60
+ exp_type = EXP_TYPE_CREW
+
+ outfit = /datum/outfit/job/scientist/junior
+ plasma_outfit = /datum/outfit/plasmaman/science
+
+ access = list(ACCESS_ROBOTICS, ACCESS_TOX, ACCESS_TOX_STORAGE, ACCESS_RESEARCH, ACCESS_XENOBIOLOGY, ACCESS_MINERAL_STOREROOM, ACCESS_TECH_STORAGE, ACCESS_GENETICS)
+ minimal_access = list(ACCESS_TOX, ACCESS_TOX_STORAGE, ACCESS_RESEARCH, ACCESS_XENOBIOLOGY, ACCESS_MINERAL_STOREROOM)
+ paycheck = PAYCHECK_EASY
+ paycheck_department = ACCOUNT_SCI
+ bounty_types = CIV_JOB_SCI
+ departments = DEPARTMENT_BITFLAG_SCIENCE
+ starting_modifiers = list(/datum/skill_modifier/job/level/wiring/basic)
+ display_order = JOB_DISPLAY_ORDER_SCIENTIST
+ threat = 1.2
+
+ family_heirlooms = list(
+ /obj/item/toy/plush/slimeplushie
+ )
+
+ mail_goodies = list(
+// /obj/item/raw_anomaly_core/random = 10, no free cores for probies
+// /obj/item/disk/tech_disk/spaceloot = 2,
+ /obj/item/camera_bug = 1
+ )
+
+/datum/outfit/job/scientist/junior
+ name = "Research Student"
+ jobtype = /datum/job/junior_scientist
+
+ belt = /obj/item/pda/toxins
+ ears = /obj/item/radio/headset/headset_sci
+ uniform = /obj/item/clothing/under/rank/rnd/scientist
+ shoes = /obj/item/clothing/shoes/sneakers/white
+ suit = /obj/item/clothing/suit/toggle/labcoat/science
+
+ backpack = /obj/item/storage/backpack/science
+ satchel = /obj/item/storage/backpack/satchel/tox
+
diff --git a/code/modules/jobs/job_types/security_cadet.dm b/code/modules/jobs/job_types/security_cadet.dm
new file mode 100644
index 0000000000..2aeae6db5d
--- /dev/null
+++ b/code/modules/jobs/job_types/security_cadet.dm
@@ -0,0 +1,178 @@
+/datum/job/junior_officer
+ title = "Security Cadet"
+ flag = JR_OFFICER
+ auto_deadmin_role_flags = DEADMIN_POSITION_SECURITY
+ department_head = list("Head of Security")
+ department_flag = ENGSEC
+ faction = "Station"
+ total_positions = 5 //Handled in /datum/controller/occupations/proc/setup_officer_positions()
+ spawn_positions = 5 //Handled in /datum/controller/occupations/proc/setup_officer_positions()
+ supervisors = "the head of security, and the head of your assigned department (if applicable), and any other senior officer"
+ selection_color = "#c02f2f"
+ minimal_player_age = 3
+ exp_requirements = 300
+ exp_type = EXP_TYPE_CREW
+ considered_combat_role = TRUE
+
+ outfit = /datum/outfit/job/security/junior
+ plasma_outfit = /datum/outfit/plasmaman/security
+
+ access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_BRIG, ACCESS_COURT, ACCESS_MAINT_TUNNELS, ACCESS_MORGUE, ACCESS_WEAPONS, ACCESS_ENTER_GENPOP, ACCESS_LEAVE_GENPOP, ACCESS_FORENSICS_LOCKERS, ACCESS_MINERAL_STOREROOM)
+ minimal_access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_BRIG, ACCESS_COURT, ACCESS_WEAPONS, ACCESS_ENTER_GENPOP, ACCESS_LEAVE_GENPOP, ACCESS_MINERAL_STOREROOM) // See /datum/job/officer/get_access()
+ paycheck = PAYCHECK_MEDIUM
+ paycheck_department = ACCOUNT_SEC
+ bounty_types = CIV_JOB_SEC
+ departments = DEPARTMENT_BITFLAG_SECURITY
+
+ mind_traits = list(TRAIT_LAW_ENFORCEMENT_METABOLISM)
+
+ display_order = JOB_DISPLAY_ORDER_SECURITY_OFFICER
+ blacklisted_quirks = list(/datum/quirk/mute, /datum/quirk/brainproblems, /datum/quirk/nonviolent, /datum/quirk/paraplegic, /datum/quirk/blindness, /datum/quirk/monophobia)
+ threat = 2
+
+ family_heirlooms = list(
+ /obj/item/book/manual/gato_spacelaw
+ )
+
+ mail_goodies = list(
+ /obj/item/reagent_containers/food/snacks/donut/caramel = 10,
+ /obj/item/reagent_containers/food/snacks/donut/matcha = 10,
+ /obj/item/reagent_containers/food/snacks/donut/blumpkin = 5,
+// /obj/item/clothing/mask/whistle = 5,
+// /obj/item/melee/baton/boomerang/loaded = 1
+ )
+
+/datum/job/junior_officer/get_access()
+ var/list/L = list()
+ L |= ..() | check_config_for_sec_maint()
+ return L
+
+
+/datum/job/junior_officer/after_spawn(mob/living/spawned, client/player_client, latejoin = FALSE)
+ . = ..()
+ if(!ishuman(spawned))
+ return
+ var/mob/living/carbon/human/H = spawned
+ // Assign department security
+ var/department
+ if(player_client?.prefs)
+ department = player_client.prefs.prefered_security_department
+ if(!LAZYLEN(GLOB.available_depts) || department == "None")
+ return
+ else if(department in GLOB.available_depts)
+ LAZYREMOVE(GLOB.available_depts, department)
+ else
+ department = pick_n_take(GLOB.available_depts)
+ var/ears = null
+ var/accessory = null
+ var/list/dep_access = null
+ var/destination = null
+ var/spawn_point = null
+ switch(department)
+ if(SEC_DEPT_SUPPLY)
+ ears = /obj/item/radio/headset/headset_sec/alt/department/supply
+ dep_access = list(ACCESS_MAILSORTING, ACCESS_MINING, ACCESS_MINING_STATION, ACCESS_CARGO)
+ destination = /area/security/checkpoint/supply
+ spawn_point = locate(/obj/effect/landmark/start/depsec/supply) in GLOB.department_security_spawns
+ accessory = /obj/item/clothing/accessory/armband/cargo
+ if(SEC_DEPT_ENGINEERING)
+ ears = /obj/item/radio/headset/headset_sec/alt/department/engi
+ dep_access = list(ACCESS_CONSTRUCTION, ACCESS_ENGINE, ACCESS_ATMOSPHERICS)
+ destination = /area/security/checkpoint/engineering
+ spawn_point = locate(/obj/effect/landmark/start/depsec/engineering) in GLOB.department_security_spawns
+ accessory = /obj/item/clothing/accessory/armband/engine
+ if(SEC_DEPT_MEDICAL)
+ ears = /obj/item/radio/headset/headset_sec/alt/department/med
+ dep_access = list(ACCESS_MEDICAL, ACCESS_MORGUE, ACCESS_SURGERY, ACCESS_CLONING)
+ destination = /area/security/checkpoint/medical
+ spawn_point = locate(/obj/effect/landmark/start/depsec/medical) in GLOB.department_security_spawns
+ accessory = /obj/item/clothing/accessory/armband/medblue
+ if(SEC_DEPT_SCIENCE)
+ ears = /obj/item/radio/headset/headset_sec/alt/department/sci
+ dep_access = list(ACCESS_RESEARCH, ACCESS_TOX)
+ destination = /area/security/checkpoint/science
+ spawn_point = locate(/obj/effect/landmark/start/depsec/science) in GLOB.department_security_spawns
+ accessory = /obj/item/clothing/accessory/armband/science
+
+ if(accessory)
+ var/obj/item/clothing/under/U = H.w_uniform
+ U.attach_accessory(new accessory)
+ if(ears)
+ if(H.ears)
+ qdel(H.ears)
+ H.equip_to_slot_or_del(new ears(H),ITEM_SLOT_EARS)
+
+ var/obj/item/card/id/W = H.wear_id
+ W.access |= dep_access
+
+ var/teleport = 0
+ if(!CONFIG_GET(flag/sec_start_brig))
+ if(destination || spawn_point)
+ teleport = 1
+ if(teleport)
+ var/turf/T
+ if(spawn_point)
+ T = get_turf(spawn_point)
+ H.Move(T)
+ else
+ var/safety = 0
+ while(safety < 25)
+ T = safepick(get_area_turfs(destination))
+ if(T && !H.Move(T))
+ safety += 1
+ continue
+ else
+ break
+ if(department)
+ to_chat(H, "You have been assigned to [department]!")
+ else
+ to_chat(H, "You have not been assigned to any department. Patrol the halls and help where needed.")
+
+/datum/outfit/job/security/junior
+ name = "Security Cadet"
+ jobtype = /datum/job/junior_officer
+
+ belt = /obj/item/pda/security
+ ears = /obj/item/radio/headset/headset_sec/alt
+ uniform = /obj/item/clothing/under/rank/security/officer
+ gloves = /obj/item/clothing/gloves/color/black
+ head = /obj/item/clothing/head/helmet/sec
+ suit = /obj/item/clothing/suit/armor/vest/alt
+ shoes = /obj/item/clothing/shoes/jackboots/sec
+ l_pocket = /obj/item/restraints/handcuffs
+ r_pocket = /obj/item/assembly/flash/handheld
+ suit_store = /obj/item/gun/energy/e_gun/advtaser
+ backpack_contents = list(/obj/item/melee/baton/loaded=1)
+
+ backpack = /obj/item/storage/backpack/security
+ satchel = /obj/item/storage/backpack/satchel/sec
+ duffelbag = /obj/item/storage/backpack/duffelbag/sec
+ box = /obj/item/storage/box/survival/security
+
+ implants = list(/obj/item/implant/mindshield)
+
+ chameleon_extras = list(/obj/item/gun/energy/disabler, /obj/item/clothing/glasses/hud/security/sunglasses, /obj/item/clothing/head/helmet)
+ //The helmet is necessary because /obj/item/clothing/head/helmet/sec is overwritten in the chameleon list by the standard helmet, which has the same name and icon state
+
+
+/obj/item/radio/headset/headset_sec/alt/department/Initialize(mapload)
+ . = ..()
+ wires = new/datum/wires/radio(src)
+ secure_radio_connections = new
+ recalculateChannels()
+
+/obj/item/radio/headset/headset_sec/alt/department/engi
+ keyslot = new /obj/item/encryptionkey/headset_sec
+ keyslot2 = new /obj/item/encryptionkey/headset_eng
+
+/obj/item/radio/headset/headset_sec/alt/department/supply
+ keyslot = new /obj/item/encryptionkey/headset_sec
+ keyslot2 = new /obj/item/encryptionkey/headset_cargo
+
+/obj/item/radio/headset/headset_sec/alt/department/med
+ keyslot = new /obj/item/encryptionkey/headset_sec
+ keyslot2 = new /obj/item/encryptionkey/headset_med
+
+/obj/item/radio/headset/headset_sec/alt/department/sci
+ keyslot = new /obj/item/encryptionkey/headset_sec
+ keyslot2 = new /obj/item/encryptionkey/headset_sci
diff --git a/code/modules/jobs/jobs.dm b/code/modules/jobs/jobs.dm
index d91b102599..9df04794ee 100644
--- a/code/modules/jobs/jobs.dm
+++ b/code/modules/jobs/jobs.dm
@@ -6,11 +6,12 @@ GLOBAL_LIST_INIT(command_positions, list(
"Research Director",
"Chief Medical Officer",
"Quartermaster"))
-
+//GS13 edit: Trainee roles
GLOBAL_LIST_INIT(engineering_positions, list(
"Chief Engineer",
"Station Engineer",
- "Atmospheric Technician"))
+ "Atmospheric Technician",
+ "Engineering Intern"))
GLOBAL_LIST_INIT(medical_positions, list(
@@ -19,13 +20,15 @@ GLOBAL_LIST_INIT(medical_positions, list(
"Geneticist",
"Virologist",
"Paramedic",
- "Chemist"))
+ "Chemist",
+ "Medical Resident"))
GLOBAL_LIST_INIT(science_positions, list(
"Research Director",
"Scientist",
- "Roboticist"))
+ "Roboticist",
+ "Research Student"))
GLOBAL_LIST_INIT(supply_positions, list(
"Quartermaster",
@@ -50,8 +53,9 @@ GLOBAL_LIST_INIT(security_positions, list(
"Head of Security",
"Warden",
"Detective",
- "Security Officer"))
-
+ "Security Officer",
+ "Security Cadet"))
+//End Edits
GLOBAL_LIST_INIT(nonhuman_positions, list(
"AI",
diff --git a/hyperstation/code/gamemode/traitor_thief.dm b/hyperstation/code/gamemode/traitor_thief.dm
index 56cdde641a..20e50ddcbc 100644
--- a/hyperstation/code/gamemode/traitor_thief.dm
+++ b/hyperstation/code/gamemode/traitor_thief.dm
@@ -7,7 +7,7 @@
antag_flag = ROLE_TRAITOR
false_report_weight = 20 //Reports of traitors are pretty common.
restricted_jobs = list("AI","Cyborg")
- protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster")
+ protected_jobs = list("Security Officer", "Security Cadet", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster") //GS13 Edit: Excempting cadets from antagery
required_players = 0
required_enemies = 0
diff --git a/icons/obj/card.dmi b/icons/obj/card.dmi
index 1bd94f2424..178971aa6e 100644
Binary files a/icons/obj/card.dmi and b/icons/obj/card.dmi differ
diff --git a/tgstation.dme b/tgstation.dme
index d5e6d706ab..eacade08ce 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -2492,19 +2492,23 @@
#include "code\modules\jobs\job_types\curator.dm"
#include "code\modules\jobs\job_types\cyborg.dm"
#include "code\modules\jobs\job_types\detective.dm"
+#include "code\modules\jobs\job_types\engineer_intern.dm"
#include "code\modules\jobs\job_types\geneticist.dm"
#include "code\modules\jobs\job_types\head_of_personnel.dm"
#include "code\modules\jobs\job_types\head_of_security.dm"
#include "code\modules\jobs\job_types\janitor.dm"
#include "code\modules\jobs\job_types\lawyer.dm"
#include "code\modules\jobs\job_types\medical_doctor.dm"
+#include "code\modules\jobs\job_types\medical_intern.dm"
#include "code\modules\jobs\job_types\mime.dm"
#include "code\modules\jobs\job_types\paramedic.dm"
#include "code\modules\jobs\job_types\prisoner.dm"
#include "code\modules\jobs\job_types\quartermaster.dm"
#include "code\modules\jobs\job_types\research_director.dm"
+#include "code\modules\jobs\job_types\research_student.dm"
#include "code\modules\jobs\job_types\roboticist.dm"
#include "code\modules\jobs\job_types\scientist.dm"
+#include "code\modules\jobs\job_types\security_cadet.dm"
#include "code\modules\jobs\job_types\security_officer.dm"
#include "code\modules\jobs\job_types\shaft_miner.dm"
#include "code\modules\jobs\job_types\station_engineer.dm"