diff --git a/code/__DEFINES/jobs.dm b/code/__DEFINES/jobs.dm
index c90d809f..c2c160b0 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)
@@ -23,6 +25,8 @@
#define DOCTOR (1<<4)
#define GENETICIST (1<<5)
#define VIROLOGIST (1<<6)
+#define JR_DOCTOR (1<<7)
+#define JR_SCIENTIST (1<<9)
#define CIVILIAN (1<<2)
diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm
index 84f89b00..1a3e4e0b 100644
--- a/code/modules/client/preferences.dm
+++ b/code/modules/client/preferences.dm
@@ -1103,7 +1103,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
#undef APPEARANCE_CATEGORY_COLUMN
#undef MAX_MUTANT_ROWS
-/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)
if(!SSjob)
return
diff --git a/code/modules/jobs/job_types/captain.dm b/code/modules/jobs/job_types/captain.dm
index 366d8fd2..61e3b409 100644
--- a/code/modules/jobs/job_types/captain.dm
+++ b/code/modules/jobs/job_types/captain.dm
@@ -12,8 +12,8 @@ Captain
supervisors = "Kinaris officials and Space law"
selection_color = "#ccccff"
req_admin_notify = 1
- minimal_player_age = 20
- exp_requirements = 480
+ minimal_player_age = 30
+ exp_requirements = 3000
exp_type = EXP_TYPE_COMMAND
exp_type_department = EXP_TYPE_COMMAND
@@ -84,7 +84,7 @@ Head of Personnel
selection_color = "#ddddff"
req_admin_notify = 1
minimal_player_age = 20
- exp_requirements = 180
+ exp_requirements = 1500
exp_type = EXP_TYPE_SERVICE
exp_type_department = EXP_TYPE_SERVICE
diff --git a/code/modules/jobs/job_types/cargo_service.dm b/code/modules/jobs/job_types/cargo_service.dm
index 445df6ce..f9655ce9 100644
--- a/code/modules/jobs/job_types/cargo_service.dm
+++ b/code/modules/jobs/job_types/cargo_service.dm
@@ -12,15 +12,15 @@ Quartermaster is a real head fuck you
spawn_positions = 1
supervisors = "the captain"
selection_color = "#d7b088"
- minimal_player_age = 10
+ minimal_player_age = 7
exp_type = EXP_TYPE_SUPPLY
exp_type_department = EXP_TYPE_SUPPLY
- exp_requirements = 300
+ exp_requirements = 1200
outfit = /datum/outfit/job/quartermaster
- access = list(ACCESS_MAINT_TUNNELS, ACCESS_MAILSORTING, ACCESS_CARGO, ACCESS_CARGO_BOT, ACCESS_QM, ACCESS_MINING, ACCESS_MINING_STATION, ACCESS_MINERAL_STOREROOM, ACCESS_VAULT)
- minimal_access = list(ACCESS_MAINT_TUNNELS, ACCESS_MAILSORTING, ACCESS_CARGO, ACCESS_CARGO_BOT, ACCESS_QM, ACCESS_MINING, ACCESS_MINING_STATION, ACCESS_MINERAL_STOREROOM, ACCESS_VAULT)
+ access = list(ACCESS_MAINT_TUNNELS, ACCESS_MAILSORTING, ACCESS_CARGO, ACCESS_CARGO_BOT, ACCESS_QM, ACCESS_MINING, ACCESS_MINING_STATION, ACCESS_MINERAL_STOREROOM, ACCESS_KEYCARD_AUTH, ACCESS_RC_ANNOUNCE, ACCESS_SEC_DOORS, ACCESS_HEADS, ACCESS_VAULT)
+ minimal_access = list(ACCESS_MAINT_TUNNELS, ACCESS_MAILSORTING, ACCESS_CARGO, ACCESS_CARGO_BOT, ACCESS_QM, ACCESS_MINING, ACCESS_MINING_STATION, ACCESS_MINERAL_STOREROOM, ACCESS_KEYCARD_AUTH, ACCESS_RC_ANNOUNCE, ACCESS_SEC_DOORS, ACCESS_HEADS, ACCESS_VAULT)
blacklisted_quirks = list(/datum/quirk/mute, /datum/quirk/brainproblems, /datum/quirk/insanity)
@@ -35,6 +35,10 @@ Quartermaster is a real head fuck you
glasses = /obj/item/clothing/glasses/sunglasses
l_hand = /obj/item/clipboard
+ id = /obj/item/card/id/silver
+ ears = /obj/item/radio/headset/heads/qm
+ backpack_contents = list(/obj/item/melee/classic_baton/telescopic=1, /obj/item/modular_computer/tablet/preset/advanced = 1)
+
chameleon_extras = /obj/item/stamp/qm
/*
@@ -81,7 +85,7 @@ Shaft Miner
selection_color = "#dcba97"
custom_spawn_text = "Remember, you are a miner, not a hunter. Hunting monsters is not a requirement of your job, the only requirement of your job is to provide materials for the station. Don't be afraid to run away if you're inexperienced with fighting the mining area's locals."
minimal_player_age = 1
- exp_requirements = 120
+ exp_requirements = 600
exp_type = EXP_TYPE_CREW
exp_type_department = EXP_TYPE_SUPPLY
diff --git a/code/modules/jobs/job_types/engineering.dm b/code/modules/jobs/job_types/engineering.dm
index b14d14cb..3514e7c8 100644
--- a/code/modules/jobs/job_types/engineering.dm
+++ b/code/modules/jobs/job_types/engineering.dm
@@ -13,8 +13,8 @@ Chief Engineer
supervisors = "the captain"
selection_color = "#ffeeaa"
req_admin_notify = 1
- minimal_player_age = 20
- exp_requirements = 300
+ minimal_player_age = 14
+ exp_requirements = 1500
exp_type = EXP_TYPE_ENGINEERING
exp_type_department = EXP_TYPE_ENGINEERING
@@ -79,8 +79,9 @@ Station Engineer
minimal_player_age = 1
supervisors = "the chief engineer"
selection_color = "#fff5cc"
- exp_requirements = 120
- exp_type = EXP_TYPE_CREW
+ exp_requirements = 300
+ exp_type = EXP_TYPE_ENGINEERING
+ exp_type_department = EXP_TYPE_ENGINEERING
outfit = /datum/outfit/job/engineer
@@ -136,14 +137,16 @@ Atmospheric Technician
minimal_player_age = 2
supervisors = "the chief engineer"
selection_color = "#fff5cc"
- exp_requirements = 180
- exp_type = EXP_TYPE_CREW
+ exp_requirements = 600
+ exp_type = EXP_TYPE_ENGINEERING
+ exp_type_department = EXP_TYPE_ENGINEERING
outfit = /datum/outfit/job/atmos
access = list(ACCESS_ENGINE, ACCESS_ENGINE_EQUIP, ACCESS_TECH_STORAGE, ACCESS_MAINT_TUNNELS,
- ACCESS_EXTERNAL_AIRLOCKS, ACCESS_CONSTRUCTION, ACCESS_ATMOSPHERICS, ACCESS_MINERAL_STOREROOM)
- minimal_access = list(ACCESS_ATMOSPHERICS, ACCESS_MAINT_TUNNELS, ACCESS_EMERGENCY_STORAGE, ACCESS_CONSTRUCTION, ACCESS_MINERAL_STOREROOM)
+ ACCESS_EXTERNAL_AIRLOCKS, ACCESS_CONSTRUCTION, ACCESS_ATMOSPHERICS, ACCESS_TCOMSAT, ACCESS_MINERAL_STOREROOM)
+ minimal_access = list(ACCESS_ENGINE, ACCESS_ENGINE_EQUIP, ACCESS_ATMOSPHERICS, ACCESS_MAINT_TUNNELS,
+ ACCESS_EMERGENCY_STORAGE, ACCESS_CONSTRUCTION, ACCESS_MINERAL_STOREROOM)
/datum/outfit/job/atmos
name = "Atmospheric Technician"
@@ -169,3 +172,65 @@ Atmospheric Technician
suit = /obj/item/clothing/suit/space/hardsuit/engine/atmos
suit_store = /obj/item/tank/internals/oxygen
internals_slot = SLOT_S_STORE
+
+/*
+Junior Engineer
+*/
+/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
+ minimal_player_age = 0
+ supervisors = "the chief engineer, and any other more experienced engineers"
+ selection_color = "#fff5cc"
+ exp_requirements = 120
+ exp_type = EXP_TYPE_CREW
+
+ outfit = /datum/outfit/job/engineer/junior
+
+ access = list(ACCESS_TECH_STORAGE, ACCESS_ENGINE, ACCESS_ENGINE_EQUIP, ACCESS_MAINT_TUNNELS,
+ ACCESS_EXTERNAL_AIRLOCKS, ACCESS_CONSTRUCTION, ACCESS_ATMOSPHERICS, ACCESS_TCOMSAT, ACCESS_MINERAL_STOREROOM)
+ minimal_access = list(ACCESS_TECH_STORAGE, ACCESS_ENGINE, ACCESS_ENGINE_EQUIP, ACCESS_MAINT_TUNNELS,
+ ACCESS_EXTERNAL_AIRLOCKS, ACCESS_CONSTRUCTION, ACCESS_TCOMSAT, ACCESS_MINERAL_STOREROOM)
+
+/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/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/engineer
+ pda_slot = SLOT_L_STORE
+ backpack_contents = list(/obj/item/modular_computer/tablet/preset/advanced=1)
+
+/datum/outfit/job/engineer/junior/gloved/
+ name = "Station Engineer (Gloves)"
+ gloves = /obj/item/clothing/gloves/color/yellow
+
+/datum/outfit/job/engineer/junior/gloved/rig/junior
+ 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 = SLOT_S_STORE
+
+/datum/job/junior_engineer/after_spawn(mob/living/carbon/human/H, mob/M) //Instead of going through the process of adding spawnpoints
+ var/turf/T
+ var/spawn_point = locate(/obj/effect/landmark/start/station_engineer) in GLOB.start_landmarks_list
+ T = get_turf(spawn_point)
+ H.Move(T)
\ No newline at end of file
diff --git a/code/modules/jobs/job_types/job.dm b/code/modules/jobs/job_types/job.dm
index ea3b1fcf..2f56fe25 100644
--- a/code/modules/jobs/job_types/job.dm
+++ b/code/modules/jobs/job_types/job.dm
@@ -45,6 +45,7 @@
var/outfit = null
+ //Minutes required in specified job or department type.
var/exp_requirements = 0
var/exp_type = ""
diff --git a/code/modules/jobs/job_types/job_alt_titles.dm b/code/modules/jobs/job_types/job_alt_titles.dm
index fd080223..3d1bd179 100644
--- a/code/modules/jobs/job_types/job_alt_titles.dm
+++ b/code/modules/jobs/job_types/job_alt_titles.dm
@@ -1,3 +1,5 @@
+//This file also determines the order for the choose your occupation chances screen.
+
//Engineering
/datum/job/chief_engineer
alt_titles = list("Head Engineer", "Construction Coordinator", "Project Manager")
@@ -8,6 +10,8 @@
/datum/job/atmos
alt_titles = list("Firefighter", "Life Support Specialist")
+/datum/job/junior_engineer
+
//Service
/datum/job/assistant
alt_titles = list("Civilian", "Visitor", "Businessman", "Trader", "Entertainer", "Tourist")
@@ -49,6 +53,8 @@
/datum/job/roboticist
alt_titles = list("Biomechanical Engineer", "Mechatronic Engineer", "Mechanic")
+/datum/job/junior_scientist
+
//Medical
/datum/job/cmo
alt_titles = list("Medical Director")
@@ -65,6 +71,8 @@
/datum/job/geneticist
alt_titles = list("Gene Therapist")
+/datum/job/junior_doctor
+
//Security
/datum/job/hos
alt_titles = list("Chief of Security", "Security Commander")
@@ -78,6 +86,8 @@
/datum/job/detective
alt_titles = list("Forensics Technician", "Private Investigator", "Gumshoe")
+/datum/job/junior_officer
+
//Supply
/datum/job/qm
alt_titles = list("Supply Chief")
diff --git a/code/modules/jobs/job_types/medical.dm b/code/modules/jobs/job_types/medical.dm
index 2dc36c01..a6d6645b 100644
--- a/code/modules/jobs/job_types/medical.dm
+++ b/code/modules/jobs/job_types/medical.dm
@@ -13,8 +13,8 @@ Chief Medical Officer
supervisors = "the captain"
selection_color = "#ffddf0"
req_admin_notify = 1
- minimal_player_age = 10
- exp_requirements = 300
+ minimal_player_age = 14
+ exp_requirements = 1500
exp_type = EXP_TYPE_MEDICAL
exp_type_department = EXP_TYPE_MEDICAL
@@ -94,6 +94,8 @@ Medical Doctor
satchel = /obj/item/storage/backpack/satchel/med
duffelbag = /obj/item/storage/backpack/duffelbag/med
+ backpack_contents = list(/obj/item/storage/hypospraykit/regular)
+
chameleon_extras = /obj/item/gun/syringe
/*
@@ -110,8 +112,10 @@ Chemist
minimal_player_age = 1
supervisors = "the chief medical officer"
selection_color = "#ffeef0"
- exp_type = EXP_TYPE_CREW
- exp_requirements = 60
+ exp_requirements = 480
+ exp_type = EXP_TYPE_MEDICAL
+ exp_type_department = EXP_TYPE_MEDICAL
+
outfit = /datum/outfit/job/chemist
@@ -133,6 +137,8 @@ Chemist
duffelbag = /obj/item/storage/backpack/duffelbag/med
l_hand = /obj/item/fermichem/pHbooklet
+ backpack_contents = list(/obj/item/storage/hypospraykit/regular)
+
chameleon_extras = /obj/item/gun/syringe
/*
@@ -148,8 +154,9 @@ Geneticist
spawn_positions = 2
supervisors = "the chief medical officer and research director"
selection_color = "#ffeef0"
- exp_type = EXP_TYPE_CREW
- exp_requirements = 30
+ exp_requirements = 480
+ exp_type = EXP_TYPE_MEDICAL
+ exp_type_department = EXP_TYPE_MEDICAL
outfit = /datum/outfit/job/geneticist
@@ -186,8 +193,9 @@ Virologist
minimal_player_age = 2
supervisors = "the chief medical officer"
selection_color = "#ffeef0"
- exp_type = EXP_TYPE_CREW
- exp_requirements = 120
+ exp_requirements = 600
+ exp_type = EXP_TYPE_MEDICAL
+ exp_type_department = EXP_TYPE_MEDICAL
outfit = /datum/outfit/job/virologist
@@ -209,3 +217,50 @@ Virologist
backpack = /obj/item/storage/backpack/virology
satchel = /obj/item/storage/backpack/satchel/vir
duffelbag = /obj/item/storage/backpack/duffelbag/med
+
+
+/*
+Junior Doctor
+*/
+/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
+ minimal_player_age = 0
+ supervisors = "the chief medical officer, and any other senior medical staff"
+ selection_color = "#ffeef0"
+ exp_requirements = 120
+ exp_type = EXP_TYPE_CREW
+
+ outfit = /datum/outfit/job/doctor/junior
+
+ access = list(ACCESS_MEDICAL, ACCESS_MORGUE, ACCESS_SURGERY, ACCESS_GENETICS, ACCESS_CLONING, ACCESS_MINERAL_STOREROOM)
+ minimal_access = list(ACCESS_MEDICAL, ACCESS_MORGUE, ACCESS_SURGERY, ACCESS_CLONING, ACCESS_MINERAL_STOREROOM)
+
+/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
+ 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
+
+/datum/job/junior_doctor/after_spawn(mob/living/carbon/human/H, mob/M) //Instead of going through the process of adding spawnpoints
+ var/turf/T
+ var/spawn_point = locate(/obj/effect/landmark/start/medical_doctor) in GLOB.start_landmarks_list
+ T = get_turf(spawn_point)
+ H.Move(T)
\ No newline at end of file
diff --git a/code/modules/jobs/job_types/science.dm b/code/modules/jobs/job_types/science.dm
index 139ff568..1cd36504 100644
--- a/code/modules/jobs/job_types/science.dm
+++ b/code/modules/jobs/job_types/science.dm
@@ -13,10 +13,10 @@ Research Director
supervisors = "the captain"
selection_color = "#ffddff"
req_admin_notify = 1
- minimal_player_age = 10
- exp_type_department = EXP_TYPE_SCIENCE
- exp_requirements = 300
+ minimal_player_age = 14
+ exp_requirements = 1500
exp_type = EXP_TYPE_SCIENCE
+ exp_type_department = EXP_TYPE_SCIENCE
outfit = /datum/outfit/job/rd
@@ -71,12 +71,13 @@ Scientist
department_flag = MEDSCI
faction = "Station"
total_positions = 5
- spawn_positions = 3
+ spawn_positions = 2
minimal_player_age = 1
supervisors = "the research director"
selection_color = "#ffeeff"
- exp_requirements = 120
- exp_type = EXP_TYPE_CREW
+ exp_requirements = 480
+ exp_type = EXP_TYPE_SCIENCE
+ exp_type_department = EXP_TYPE_SCIENCE
outfit = /datum/outfit/job/scientist
@@ -111,8 +112,10 @@ Roboticist
minimal_player_age = 2
supervisors = "the research director"
selection_color = "#ffeeff"
- exp_requirements = 120
- exp_type = EXP_TYPE_CREW
+ exp_requirements = 300
+ exp_type = EXP_TYPE_SCIENCE
+ exp_type_department = EXP_TYPE_SCIENCE
+
outfit = /datum/outfit/job/roboticist
@@ -133,3 +136,46 @@ Roboticist
satchel = /obj/item/storage/backpack/satchel/tox
pda_slot = SLOT_L_STORE
+
+
+/*
+Junior Scientist
+*/
+/datum/job/junior_scientist
+ title = "Research Student"
+ flag = JR_SCIENTIST
+ department_head = list("Research Director")
+ department_flag = MEDSCI
+ faction = "Station"
+ total_positions = 2
+ spawn_positions = 1
+ minimal_player_age = 0
+ supervisors = "the research director, and any other senior science staff"
+ selection_color = "#ffeeff"
+ exp_requirements = 120
+ exp_type = EXP_TYPE_CREW
+
+
+ outfit = /datum/outfit/job/scientist/junior
+
+ access = list(ACCESS_ROBOTICS, ACCESS_RESEARCH, ACCESS_MINERAL_STOREROOM, ACCESS_TECH_STORAGE, ACCESS_GENETICS)
+ minimal_access = list(ACCESS_RESEARCH, ACCESS_MINERAL_STOREROOM)
+
+/datum/outfit/job/scientist/junior
+ name = "Scientist"
+ jobtype = /datum/job/scientist
+
+ belt = /obj/item/pda/toxins
+ ears = /obj/item/radio/headset/headset_sci
+ uniform = /obj/item/clothing/under/rank/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
+
+/datum/job/junior_scientist/after_spawn(mob/living/carbon/human/H, mob/M) //Instead of going through the process of adding spawnpoints
+ var/turf/T
+ var/spawn_point = locate(/obj/effect/landmark/start/scientist) in GLOB.start_landmarks_list
+ T = get_turf(spawn_point)
+ H.Move(T)
\ No newline at end of file
diff --git a/code/modules/jobs/job_types/security.dm b/code/modules/jobs/job_types/security.dm
index 927461bd..b2b0271f 100644
--- a/code/modules/jobs/job_types/security.dm
+++ b/code/modules/jobs/job_types/security.dm
@@ -20,7 +20,7 @@ Head of Security
selection_color = "#ffdddd"
req_admin_notify = 1
minimal_player_age = 20
- exp_requirements = 420
+ exp_requirements = 2000
exp_type = EXP_TYPE_SECURITY
exp_type_department = EXP_TYPE_SECURITY
@@ -87,9 +87,10 @@ Warden
spawn_positions = 1
supervisors = "the head of security"
selection_color = "#ffeeee"
- minimal_player_age = 3
- exp_requirements = 360
- exp_type = EXP_TYPE_CREW
+ minimal_player_age = 9
+ exp_requirements = 720
+ exp_type = EXP_TYPE_SECURITY
+ exp_type_department = EXP_TYPE_SECURITY
outfit = /datum/outfit/job/warden
@@ -118,7 +119,9 @@ Warden
glasses = /obj/item/clothing/glasses/hud/security/sunglasses
r_pocket = /obj/item/assembly/flash/handheld
l_pocket = /obj/item/restraints/handcuffs
- suit_store = /obj/item/gun/energy/e_gun/advtaser
+ //suit_store = /obj/item/gun/energy/e_gun/advtaser
+ suit_store = /obj/item/gun/energy/pumpaction/defender
+
backpack_contents = list(/obj/item/melee/baton/loaded=1)
backpack = /obj/item/storage/backpack/security
@@ -143,9 +146,10 @@ Detective
spawn_positions = 1
supervisors = "the head of security"
selection_color = "#ffeeee"
- minimal_player_age = 2
+ minimal_player_age = 5
exp_requirements = 300
- exp_type = EXP_TYPE_CREW
+ exp_type = EXP_TYPE_SECURITY
+ exp_type_department = EXP_TYPE_SECURITY
outfit = /datum/outfit/job/detective
@@ -199,9 +203,10 @@ Security Officer
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)"
selection_color = "#ffeeee"
- minimal_player_age = 1
- exp_requirements = 300
- exp_type = EXP_TYPE_CREW
+ minimal_player_age = 5
+ exp_requirements = 420
+ exp_type = EXP_TYPE_SECURITY
+ exp_type_department = EXP_TYPE_SECURITY
outfit = /datum/outfit/job/security
@@ -344,3 +349,141 @@ GLOBAL_LIST_INIT(available_depts, list(SEC_DEPT_ENGINEERING, SEC_DEPT_MEDICAL, S
/obj/item/radio/headset/headset_sec/alt/department/sci
keyslot = new /obj/item/encryptionkey/headset_sec
keyslot2 = new /obj/item/encryptionkey/headset_sci
+
+
+/*
+Junior Security Officer
+*/
+/datum/job/junior_officer
+ title = "Rookie"
+ flag = JR_OFFICER
+ 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 = "#ffeeee"
+ minimal_player_age = 3
+ exp_requirements = 300
+ exp_type = EXP_TYPE_CREW
+
+ outfit = /datum/outfit/job/security/junior
+
+ access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_BRIG, ACCESS_COURT, ACCESS_MAINT_TUNNELS, ACCESS_MORGUE, ACCESS_FORENSICS_LOCKERS, ACCESS_MINERAL_STOREROOM)
+ minimal_access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_BRIG, ACCESS_COURT, ACCESS_MINERAL_STOREROOM) //BUT SEE /DATUM/JOB/WARDEN/GET_ACCESS()
+
+ mind_traits = list(TRAIT_LAW_ENFORCEMENT_METABOLISM)
+ blacklisted_quirks = list(/datum/quirk/mute, /datum/quirk/nonviolent, /datum/quirk/paraplegic)
+
+
+/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/carbon/human/H, mob/M)
+ // Assign department security
+ var/department
+ if(M && M.client && M.client.prefs)
+ department = M.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 = locate(/obj/effect/landmark/start/security_officer) in GLOB.start_landmarks_list
+ 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)
+ 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)
+ 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)
+ 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)
+ 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),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(M, "You have been assigned to [department]!")
+ else
+ to_chat(M, "You have not been assigned to any department. Patrol the halls and help where needed.")
+
+
+
+/datum/outfit/job/security/junior
+ name = "Security Officer"
+ jobtype = /datum/job/officer
+
+ belt = /obj/item/pda/security
+ ears = /obj/item/radio/headset/headset_sec/alt
+ uniform = /obj/item/clothing/under/rank/security
+ 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
+ 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/security
+
+ implants = list(/obj/item/implant/mindshield)
+
+ chameleon_extras = list(/obj/item/gun/energy/e_gun/advtaser, /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
+
+
diff --git a/code/modules/jobs/job_types/silicon.dm b/code/modules/jobs/job_types/silicon.dm
index 74746404..8fb5b029 100644
--- a/code/modules/jobs/job_types/silicon.dm
+++ b/code/modules/jobs/job_types/silicon.dm
@@ -11,10 +11,10 @@ AI
selection_color = "#ccffcc"
supervisors = "your laws"
req_admin_notify = TRUE
- minimal_player_age = 5
- exp_requirements = 1200
- exp_type = EXP_TYPE_CREW
-// exp_type_department = EXP_TYPE_SILICON
+ minimal_player_age = 14
+ exp_requirements = 1800
+ //exp_type = EXP_TYPE_CREW
+ exp_type_department = EXP_TYPE_SILICON
var/do_special_check = TRUE
/datum/job/ai/equip(mob/living/carbon/human/H, visualsOnly, announce, latejoin, outfit_override)
@@ -78,9 +78,9 @@ Cyborg
spawn_positions = 1
supervisors = "your laws and the AI" //Nodrak
selection_color = "#ddffdd"
-// minimal_player_age = 0
-// exp_requirements = 120
-// exp_type = EXP_TYPE_CREW
+ minimal_player_age = 0
+ exp_requirements = 300
+ exp_type = EXP_TYPE_CREW
/datum/job/cyborg/equip(mob/living/carbon/human/H, visualsOnly = FALSE, announce = TRUE, latejoin = FALSE, outfit_override = null)
return H.Robotize(FALSE, latejoin)
diff --git a/code/modules/jobs/jobs.dm b/code/modules/jobs/jobs.dm
index d4c9ac2b..1121b399 100644
--- a/code/modules/jobs/jobs.dm
+++ b/code/modules/jobs/jobs.dm
@@ -10,7 +10,8 @@ GLOBAL_LIST_INIT(command_positions, list(
GLOBAL_LIST_INIT(engineering_positions, list(
"Chief Engineer",
"Station Engineer",
- "Atmospheric Technician"))
+ "Atmospheric Technician",
+ "Engineering Intern"))
GLOBAL_LIST_INIT(medical_positions, list(
@@ -18,13 +19,15 @@ GLOBAL_LIST_INIT(medical_positions, list(
"Medical Doctor",
"Geneticist",
"Virologist",
- "Chemist"))
+ "Chemist",
+ "Medical Resident"))
GLOBAL_LIST_INIT(science_positions, list(
"Research Director",
"Scientist",
- "Roboticist"))
+ "Roboticist",
+ "Research Student"))
GLOBAL_LIST_INIT(supply_positions, list(
"Quartermaster",
@@ -48,7 +51,8 @@ GLOBAL_LIST_INIT(security_positions, list(
"Head of Security",
"Warden",
"Detective",
- "Security Officer"))
+ "Security Officer",
+ "Rookie"))
GLOBAL_LIST_INIT(nonhuman_positions, list(
diff --git a/tgstation.dme b/tgstation.dme
index e25da626..4e7771a5 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -3146,12 +3146,6 @@
#include "modular_citadel\code\modules\food_and_drinks\snacks\meat.dm"
#include "modular_citadel\code\modules\integrated_electronics\subtypes\manipulation.dm"
#include "modular_citadel\code\modules\jobs\dresscode_values.dm"
-#include "modular_citadel\code\modules\jobs\job_types\captain.dm"
-#include "modular_citadel\code\modules\jobs\job_types\cargo_service.dm"
-#include "modular_citadel\code\modules\jobs\job_types\engineering.dm"
-#include "modular_citadel\code\modules\jobs\job_types\medical.dm"
-#include "modular_citadel\code\modules\jobs\job_types\science.dm"
-#include "modular_citadel\code\modules\jobs\job_types\security.dm"
#include "modular_citadel\code\modules\keybindings\bindings_carbon.dm"
#include "modular_citadel\code\modules\keybindings\bindings_human.dm"
#include "modular_citadel\code\modules\keybindings\bindings_robot.dm"