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"